IMX8MMRM
IMX8MMRM
Chapter 1
Introduction
1.1 Product Overview ........................................................................................................................................................ 7
1.4 Features......................................................................................................................................................................... 10
Chapter 2
Memory Map
2.1 Memory.........................................................................................................................................................................19
Chapter 3
Security
3.1 System Security............................................................................................................................................................ 33
Chapter 4
ARM Platform and Debug
4.1 ARM Cortex A53 Platform (A53)................................................................................................................................ 79
Chapter 5
Clocks and Power Management
5.1 Clock Control Module (CCM)......................................................................................................................................289
Chapter 6
SNVS, Reset, Fuse, and Boot
6.1 System Boot.................................................................................................................................................................. 777
Chapter 7
Interrupts and DMA
7.1 Interrupts and DMA Events.......................................................................................................................................... 995
Chapter 8
Chip IO and Pinmux
8.1 External Signals and Pin Multiplexing......................................................................................................................... 1259
Chapter 9
External Memory
9.1 External Memory Overview......................................................................................................................................... 1705
Chapter 10
Mass Storage
10.1 Enhanced Configurable SPI (ECSPI)........................................................................................................................... 2367
Chapter 11
Connectivity
11.1 Universal Serial Bus Controller (USB).........................................................................................................................2651
Chapter 12
Timers
12.1 General Purpose Timer (GPT)...................................................................................................................................... 3855
Chapter 13
Multimedia
13.1 Multimedia Overview................................................................................................................................................... 3891
Chapter 14
Graphics Processing Unit (GPU)
14.1 GPU Overview..............................................................................................................................................................4321
Chapter 15
Video Processing Unit (VPU)
15.1 VPU Block Control (VPU_BLK_CTRL).....................................................................................................................4343
Chapter 16
Low Speed Communication and Interconnects
16.1 I2C Controller (I2C)..................................................................................................................................................... 5215
Term Meaning
ADC Analog-to-Digital Converter
AHB Advanced High-performance Bus
AIPS Arm IP Bus
ALU Arithmetic Logic Unit
AMBA Advanced Microcontroller Bus Architecture
APB Advanced Peripheral Bus
ASRC Asynchronous Sample Rate Converter
AXI Advanced eXtensible Interface
BIST Built-In Self Test
CA/CM Arm Cortex-A/Cortex-M
CAAM Cryptographic Acceleration and Assurance Module
CA53 ARM Cortex A53 Core
CAN Controller Area Network
CPU Central Processing Unit
CSI CMOS Sensor Interface
CSU Central Security Unit
CTI Cross Trigger Interface
D-cache Data cache
DAP Debug Access Port
DDR Double data rate
DMA Direct memory access
DPLL Digital phase-locked loop
DRAM Dynamic random access memory
ECC Error correcting codes
ECSPI Enhanced Configurable SPI
LPSPI Low-power SPI
EDMA Enhanced Direct Memory Access
EIM External Interface Module
ENET Ethernet
EPIT Enhanced Periodic Interrupt Timer
EPROM Erasable Programmable Read-Only Memory
ETF Embedded Trace FIFO
ETM Embedded Trace Macrocell
FIFO First-In-First-Out
GIC General Interrupt Controller
GPC General Power Controller
GPIO General-Purpose I/O
GPR General-Purpose Register
GPS Global Positioning System
GPT General-Purpose Timer
GPU Graphics Processing Unit
Term Meaning
GPV Global Programmers View
HAB High-Assurance Boot
I-cache Instruction cache
I2C or I2C Inter-Integrated Circuit
IC Integrated Circuit
IEEE Institute of Electrical and Electronics Engineers
IOMUX Input-Output Multiplexer
IP Intellectual Property
IrDA Infrared Data Association
JTAG Joint Test Action Group (a serial bus protocol usually used for test purposes)
ELCDIF Liquid Crystal Display Interface
LDO Low-Dropout
LIFO Last-In-First-Out
LRU Least-Recently Used
LSB Least-Significant Byte
LUT Look-Up Table
LVDS Low Voltage Differential Signaling
MAC Medium Access Control
MCM Miscellaneous Control Module
MMC Multimedia Card
MSB Most-Significant Byte
MT/s Mega Transfers per second
OCRAM On-Chip Random-Access Memory
OCOTP On-Chip One-Time Programmable Controller
PCI Peripheral Component Interconnect
PCIe PCI express
PCMCIA Personal Computer Memory Card International Association
PGC Power Gating Controller
PIC Programmable Interrupt Controller
PMU Power Management Unit
POR Power-On Reset
PSRAM Pseudo-Static Random Access Memory
PWM Pulse Width Modulation
PXP Pixel Pipeline
QoS Quality of Service
R2D Radians to Degrees
RISC Reduced Instruction Set Computing
ROM Read-Only Memory
ROMCP ROM Controller with Patch
RTOS Real-Time Operating System
Rx Receive
Term Meaning
SAI Synchronous Audio Interface
SCU Snoop Control Unit
SD Secure Digital
SDIO Secure Digital Input/Output
SDLC Synchronous Data Link Control
SDMA Smart DMA
SIM Subscriber Identification Module
SNVS Secure Non-Volatile Storage
SoC System-on-Chip
SPBA Shared Peripheral Bus Arbiter
SPDIF Sony Phillips Digital Interface
SPI Serial Peripheral Interface
SRAM Static Random-Access Memory
SRC System Reset Controller
TFT Thin-Film Transistor
TPIU Trace Port Interface Unit
TSGEN Time Stamp Generator
Tx Transmit
TZASC TrustZone Address Space Controller
UART Universal Asynchronous Receiver/Transmitter
USB Universal Serial Bus
USDHC Ultra Secured Digital Host Controller
WDOG Watchdog
WLAN Wireless Local Area Network
WXGA Wide Extended Graphics Array
1.4 Features
• Clock control module (CCM) provides centralized clock generation and control
• Simplified clock tree structure
1.4.8 Timers
The timers on this chip include:
1.4.12 Audio
Audio include the following:
• S/PDIF Input and Output, including a Raw Capture input mode
• Five external SAI (synchronous audio interface) modules supporting I2S, AC97,
TDM, codec/DSP and DSD interfaces, including one SAI with 8 TX and 8 RX lanes,
one SAI with 4 TX and 4 RX lanes, two SAI with 2 TX and 2 RX lanes, and one SAI
with 1 TX and 1 RX lanes. Supports over 20 channels of audio subject to I/O
limitations.
• SD/SDIO 3.01 compliance with 200 MHZ SDR signaling to support up to 100
MB/sec
• Support for SDXC (extended capacity)
• One Gigabit Ethernet controller with support for EEE, Ethernet AVB and IEEE1588
• Four universal asynchronous receiver/transmitter (UART) modules
• Four I2C modules
• Three SPI modules
1.4.14 Security
The Quad-A53 core on i.MX 8M Mini is enabled during boot as the primary core to
handle the entire secure boot flow. The chip will always boot from the A53 core first, the
M4 core will be held in reset during the A53 boot and won’t run until it is enabled by the
A53 core. The image for the M4 core will be loaded into memory and authenticated by
the A53 core.
2.1 Memory
This chapter introduces the memory architecture of the chip. The system memory high-
level partition is defined below:
3.1.1 Overview
The security system modules are described in the sections below.
In order to provide better video content protection, CAAM also supports the domain
based resource protection.
3.1.6 TrustZone
TrustZone security architecture is supported in the chip. For on-chip RAM, both
OCRAM/OCRAM_S have TrustZone access control support through its TZ wrapper
logic. One region with configurable address range of the OCRAM/OCRAM_S can be set
to TZ access only. DRAM has a dedicated TZASC block that can support up to 16
configurable memory regions.
3.2.1 Overview
The Resource Domain Controller (RDC) provides robust support for the isolation of
destination memory mapped locations such as peripherals and memory to a single core, a
bus master, or set of cores and bus masters.
For efficiency reasons the code on the cores may share chip resources such as peripherals
and memory. The sharing of chip resources between the somewhat independent
processing domains allows for the opportunity of data collisions where information
stored in peripherals or memory by a process on one core is overwritten by software
running on another core. Without careful collaboration between the two operating
systems inadvertent malfunction or degradation in performance may result.
The RDC provides a mechanism to allow boot time configuration code to establish
resource domains by assigning cores, bus masters, peripherals and memory regions to
domain identifiers. Once configured, bus transactions are monitored to restrict accesses
initiated by cores and bus masters to their respective peripherals and memory.
3.2.1.2 Features
Resource domain subsystem has the following features:
• Assignment of cores, bus masters, peripherals, and memory regions to a resource
domain
• Fixed memory resolution of 128 Bytes for small address spaces and 4 KB for large
address spaces
• Four resource domain identifiers (DIDs)
• Memory read/write access controls for each resource domain and region
• Optional semaphore-based, hardware-enforced exclusive access of shared peripherals
to a resource domain
• Prioritized access permissions for overlapping memory regions
• Automatic restoration of resource domain access permissions to memory regions in
the power-down domain
DEXSC OCRAM
D0 Core
main
fabric TZASC DDRC
DEXSC
switch
D1 Core fabric
SPBA Periph
switch CAAM
DEXSC Secure RAM
fabric
D0 Periph
D1 Periph
SEMA42
AIPS-TZ (Shared)
Allowed Gate
Domains Locks
RDC
(D0 TZ
Locked)
Peripheral Permissions
For shared peripherals, RDC permits more than one domain access to a single peripheral.
RDC also provides three ways to control synchronized use of shared peripherals. These
methods include hardware-enforced synchronization, software-based semaphores, or no
synchronization. The latter may be suitable for well-tuned multi-core operating systems
that handle synchronization in the core platform, for instance.
For hardware-enforced synchronization, also known as "safe sharing", ownership of the
peripheral must be claimed in the semaphore controller before access is allowed to the
shared peripheral. Each shared peripheral has a corresponding Peripheral Domain Access
Permissions (PDAP) register. When the Semaphore Required (SREQ) bit in a PDAP
register is set, a master cannot access this shared peripheral until obtaining a semaphore.
During the time that the domain has the semaphore in possession, its bus masters have
exclusive access to the peripheral.
When the semaphore is released, then no domain masters have access until the semaphore
is obtained again. When the SREQ bit is set, RDC module does not allow masters to
obtain semaphores of peripherals to which the domain is not allocated; the master must
have designated access in the D-bits of the corresponding PDAP register (e.g. D1R bit set
for Domain 1 access of the shared peripheral). There is a one-to-one mapping between
the semaphore controller gate and the resource domain controller peripheral. The
mapping of PDAP registers and peripherals can be found in the Peripheral Map section of
the RDC chapter.
3.2.2.1 Domain ID
The RDC provides for an isolation of domain resources by use of an identifier called the
Domain ID (DID). A core and its resources including memory, bus masters, and
peripherals are all associated with a single DID. When software or a DMA attempts to
access a peripheral or memory, the corresponding bus transaction includes the DID along
with the other bus control information such as Read, Write, and privilege mode.
• Gates appear as an n-entry byte-size array with read and write accesses (n = 64).
• Processors lock gates by writing "Master_index" to the appropriate gate and
must read back the gate value to verify the lock operation was successful.
The Master_index value for the processors can be found in the Master Index
Allocation table, which can be found in the AIPSTZ block. Also note that
after locking, the gate register contains the master_id value of the locking
processor (in the field GTFSM ), and also the value of the locking domain
(in the field LDOM ).
• Once locked, the gate is unlocked by a write of zeroes from the locking
processor.
• The number of implemented gates is specified by a hardware configuration
define.
• Each hardware gate appears as a 16-state, 4-bit state machine.
• 16-state implementation
if gate = 0x0, then state = unlocked
if gate = 0x1, then state = locked by processor (master_index) 0
if gate = 0x2, then state = locked by processor (master_index) 1
…
if gate = 0xF, then state = locked by processor (master_index) 14
• Uses the logical bus master number (master_index) as a reference attribute
plus the specified data patterns to validate all write operations.
• Once locked, the gate can (and must) be unlocked by a write of zeroes from
the locking processor.
• Secure reset mechanisms are supported to clear the contents of individual gates,
as well as a clear_all capability.
• Memory-mapped IPS slave peripheral platform module
• Interface to the IPS bus for programming-model accesses
Therefore, access to the security controls should be restricted to the most trustworthy
operating mode of the core and privilege levels should be coordinated to ensure that
shared peripherals and memory regions are accessible by both cores. For instance, if a
memory region is designated for secure accesses then all domain masters that share that
region must have secure privileges.
Higher Power
Memory ON
Global Power
RDC
Control
System Bus
Memory Regions
Higher Power
Memory
region based on start and end addresses, a control register to set the domain access
permissions and enable the region, and a status register to determin if access was denied
to a region.
For this device, refer to the table below to determine the memories with domain support,
the number of regions for each memory, the region resolution, the identifying numbers
for the sets of memory region registers, and the addresses of the RDC registers to access
the sets of Memory Region registers.
Table 3-4. Memory Region Mapping
Memory/Port Number of regions Region resolution Memory region Register address
register set number range
(MREA, MRSA, MRC,
MRVS)
DRAM 8 4 KB 0-7 0x800 - 0x87C
QSPI1 8 4 KB 8 - 15 0x880 - 0x8FC
PCIe1 8 4 KB 16 - 23 0x900 - 0x97C
OCRAM 5 128 B 24 - 28 0x980 - 0x9CC
OCRAM_S 5 128 B 29 - 33 0x9D0 - 0xA1C
TCM 5 128 B 34 - 38 0xA20 - 0xA6C
GIC 4 4 KB 39 - 42 0xA70 - 0xAAC
GPU 8 4 KB 43 - 50 0xAB0 - 0xB2C
VPU 4 4 KB 51 - 54 0xB30 - 0xB6C
DEBUG(DAP) 4 4 KB 55 - 58 0xB70 - 0xBAC
DDRC (REG ) 5 4 KB 59 - 63 0xBB0 - 0xBFC
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 1 1 0 1 1 1 0 1 1 0 1 1 1 0 0 0 1 0 0 0 0 0 0 1 0 0
Indicates the number of domain IDs supported by this instance of the RDC. For example, value '0010'
means the actual number of domains is 2.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved PDS Reserved DID
Reset 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
The Domain ID of the core or bus master that is reading this. The value is different for requests from
different domains.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RCI_EN
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Interrupt Disabled
1 Interrupt Enabled
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R INT
Reserved
W w1c
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 No Interrupt Pending
1 Interrupt Pending
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
LCK Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved DID
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
SRE
LCK Reserved
W Q
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved D3R D3W D2R D2W D1R D1W D0R D0W
Reset 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 Not Locked
1 Locked
30 Semaphore Required
SREQ
When set the hardware semaphore state enforces the semaphore lock. If a domain has access
permissions and a semaphore has locked a shared peripheral then only the domain holding the
semaphore signal can access this peripheral.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
SADR Reserved
Reset x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x*
* Notes:
• x = Undefined at reset.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
EADR Reserved
Reset x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x*
* Notes:
• x = Undefined at reset.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
LCK ENA Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved D3R D3W D2R D2W D1R D1W D0R D0W
Reset 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R VADR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R VADR AD VDID
Reserved
W w1c
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The domain ID of the denied access. The first access violation is captured. Subsequent violations are
ignored until the status register is cleared. Contents are cleared upon reading the register.
00 Processing Domain 0
01 Processing Domain 1
10 Processing Domain 2
11 Processing Domain 3
Only Supervisor Mode accesses are allowed on these registers. User accesses generate an
error termination.
RDC_SEMAPHORE memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
303B_0000 Gate Register (RDC_SEMAPHORE1_GATE0) 8 R/W 00h 3.2.6.1/74
303B_0001 Gate Register (RDC_SEMAPHORE1_GATE1) 8 R/W 00h 3.2.6.1/74
303B_0002 Gate Register (RDC_SEMAPHORE1_GATE2) 8 R/W 00h 3.2.6.1/74
303B_0003 Gate Register (RDC_SEMAPHORE1_GATE3) 8 R/W 00h 3.2.6.1/74
303B_0004 Gate Register (RDC_SEMAPHORE1_GATE4) 8 R/W 00h 3.2.6.1/74
303B_0005 Gate Register (RDC_SEMAPHORE1_GATE5) 8 R/W 00h 3.2.6.1/74
303B_0006 Gate Register (RDC_SEMAPHORE1_GATE6) 8 R/W 00h 3.2.6.1/74
303B_0007 Gate Register (RDC_SEMAPHORE1_GATE7) 8 R/W 00h 3.2.6.1/74
303B_0008 Gate Register (RDC_SEMAPHORE1_GATE8) 8 R/W 00h 3.2.6.1/74
303B_0009 Gate Register (RDC_SEMAPHORE1_GATE9) 8 R/W 00h 3.2.6.1/74
303B_000A Gate Register (RDC_SEMAPHORE1_GATE10) 8 R/W 00h 3.2.6.1/74
303B_000B Gate Register (RDC_SEMAPHORE1_GATE11) 8 R/W 00h 3.2.6.1/74
303B_000C Gate Register (RDC_SEMAPHORE1_GATE12) 8 R/W 00h 3.2.6.1/74
303B_000D Gate Register (RDC_SEMAPHORE1_GATE13) 8 R/W 00h 3.2.6.1/74
303B_000E Gate Register (RDC_SEMAPHORE1_GATE14) 8 R/W 00h 3.2.6.1/74
Table continues on the next page...
Read 0 LDOM
GTFSM
Write
Reset 0 0 0 0 0 0 0 0
The state of the gate reflects the last processor that locked it, which can be useful during system debug.
Table continues on the next page...
access or another processor performs the second write access, the special gate reset
sequence is aborted and no error signal will be asserted.
3. Reads of the RDC_SEMA42RSTGT location return information on the 2-bit state
machine (RDC_SEMA42RSTGT[RSTGSM]) that implements this function, the bus
master performing the reset (RDC_SEMA42RSTGT[RSTGMS]), and the gate
number(s) last cleared (RDC_SEMA42RSTGT[RSTGTN]). Reads of the
RDC_SEMA42RSTGT register do not affect the secure reset finite state machine in
any manner.
Address: Base address + 42h offset
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Read 0
RSTGTN
Write RSTGDP
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4.1.1 Overview
The Cortex-A53 cluster is a mid-range, low-power processor that implements the
ARMv8-A architecture. The Cortex-A53 cluster has four cores, each with an L1 memory
system and a single shared L2 cache that has a set of additional functions, which are
included in a single APR region.
The core supports debug through real-time trace via ETM, and static debug via JTAG.
The core platform supports static debug through the debug logic to SoC. This includes
the capability of real-time trace via ARM's CoreSight ETM modules. The CTI and CTM
modules allow cross-triggering of internal and external trigger sources.
Quad A53
Cortex
Cortex A53
A53 Counter
CortexMPCore
A53
CortexMPCore
A53
MPCore
MPCore CPU0
CPU0
Timer events
CPU0
CPU0 Neon Interrupts
I$ I$
Neon
Neon
I$ 32K D$
Neon
I$ I$32K
I$32K D$
I$32K32K D$ 32K
I$ 32K D$ 32K
32K 32K
32K 32K Clocks
Resets
Snoop Control Unit
(SCU) Config
L2 Cache
(512KB) APB
ATB
CTM
ACE master
Interface
4.1.1.1 Features
• 4x cores
• L1 instruction cache 32K with parity
• L1 data cache 32K with SECDED
• Advanced SIMD (NEON) per core
• Crypto extension per core
• CPU cache protection per core
• AMBA 4 ACE interface
• No ACP is included
• utilizes the ARMv8 debug map
• 512KB of L2 Cache
• 512KB with Single-bit Error Correct and Double-bit Error Detect (SECDED)
• Input latency 2 cycles
• Output latency 2 cycles
• SCU-L2 cache protection
4.1.2 Configuration
The configuration of the bus, cores and memory are detailed in the features and sections
below. The core revision is r0p4-51rel0.
4.1.3 Performance
This section will discuss power and clocking performance of the Cortex-A53 Platform.
4.1.3.1 Power
There are several power states supported by the A53 Core Complex. Supported primary
states are listed below:
• Run – At least one of 4 cores is running. The other cores may either be running,
clock gated, or powered down.
• L2 only coherent – The L2 is powered up and servicing snoops. The cores are
stopped (either powered down or clock gated). In this state the cache is retained
coherent to the system.
• L2 only non-coherent – Both cores are stopped and powered down, the logic in the
L2 controller are retaining the arrays only. In this state the L2 is not coherent, and as
a result, the other AP cores must also be stopped.
• Cluster Off – The L2 has been flushed from the L2 only coherent state, using the
HW flush mechanism (no core required). Then the cluster is fully powered off
including the L2 arrays.
The power supply for the cluster is separated into two regions. The first is the control
domain and second is for the remainder of the cluster (core and cluster domains). These
regions are listed below:
• Control domain – The AON control domain contains the controls for powering up
and down the rest of the core. The control domain is always powered on first and
powered off last.
• Core domains – The core domains contains the whole core. The supply for the core
domains is the same as the cluster domain, but require separate power down
switches.
• Cluster domain – The cluster domain contains the rest of the cluster outside of the
cores, which includes the shared logic of the L2 memory. The supply for the cluster
power domain is the same as the core domains, but does not require power switches
as it's shut down externally.
Isolation cells are required between each of these domains and is controlled by the signals
on the control domain. These cells are necessary to force the output signal to be isolated
to null values when the local power shuts down.
4.1.3.2 Clocking
The A53 platform is provided a main processor clock that supplies the component clocks
to the cluster components, including CoreSight debug components. The maximum
frequency targets are specified in the chip datasheet.
The cores are intended to support up to 1.5 GHz dependent on forward bias within the
operating temperature range. Please see the datasheet for more information. The clocks
are described in the table below:
Table 4-1. A53 Clocks
Clock Signal Clock Name Frequency Description
Main Clock CLKIN Target Main input clock.
APB Clock PCLKENDBG CLKIN/4 APB clock controls the timing on the debug port.
Fixed frequency ratio to main frequency.
ACE Bus Clock ACLKENM CLKIN/2 ACE Interface bus clock. Controls the timing on
the interface to CCI, but is not synchronous to
CCI. Frequency is fixed ratio.
ATB Clock ATCLKEN CLKIN/4 ATB clock provides the clocks or outgoing trace.
This clock needs to be reasonably high to enable
sending samples out, but also needs to be the
same as CNTCLKEN. Link to same signal as
CNTCLKEN (1:4 core frequency fixed ratio).
Input Counter Clock CNTCLKEN CLKIN/4 Input counter clock. Timing is identical to debug
port. The frequency is a fixed ratio (1:4) with the
core clock. The same signal may be used for
both inputs.
• Cluster environments
• Wake-up events in power management environments
The GIC includes interrupt grouping functionality that supports:
• Signaling interrupt groups to the target core using either the IRQ or the FIQ
exception request, based on software configuration
• A unified scheme for handling the priority of Group 0 and Group 1 interrupts.
4.1.4.4 L1 Cache
The L1 instruction memory system has the following features:
• 32KB Instruction Cache
• Instruction side cache line length of 64 bytes
• 2-way set associative L1 Instruction cache
• 128-bit read interface to the L2 memory system
• 32KB Data Cache
• Data side cache line length of 64 bytes
• 4-way set associative L1 Data cache
• 256-bit write interface to the L2 memory system
• 128-bit read interface to the L2 memory system
• Read buffer that services the Data Cache Unit (DCU), the Instruction Fetch Unit
(IFU) and the TLB
• 64-bit read path from the data L1 memory system to the datapath
• 128-bit write path from the datapath to the L1 memory system
• Support for three outstanding data cache misses
• Merging store buffer capability. This handles writes to:
• Device memory
• Normal Cacheable memory
• Normal Non-cacheable memory
• Data side prefetch engine
4.1.4.5 L2 Cache
The L2 cache consists of an integrated Snoop Control Unit (SCU), connecting four cores
within the A53 cluster. The SCU also has duplicate copies of the L1 Data cache tags for
coherency support. The L2 memory system interfaces to the external memory system
through an AMBA 128-bit bus. The tightly-coupled L2 cache includes the following
features:
• 1MB shared cache size
• AMBA 4 ACE Interface
• Fixed line length of 64 bytes
i.MX 8M Mini Applications Processor Reference Manual, Rev. 3, 11/2020
84 NXP Semiconductors
Chapter 4 ARM Platform and Debug
4.2.1 Overview
The Cortex-M4 implements the ARMv7- ME instruction set architecture (ISA) and adds
significant capabilities with DSP and SIMD extensions. The ARM Cortex-M4 core
provides additional general processing capability to the SoC with lower power and fast
interrupt response time.
The Cortex-M4 also includes a single-precision floating-point unit (FPU) and two 32-bit
system bus interfaces. The Cortex-M4 implementation includes two tightly coupled local
memories, two cache memories connected to bus interfaces, 64-bit system bus
interconnect, and supports a 32-byte cache line size.
M4 Platform
Timer events
Counter
Cortex M4 CPU
Private Peripheral
System Bus
(icode, dcode)
Bus (PPB)
Code Bus
4.2.1.2 Features
The features of the Cortex-M4 platform are detailed below:
• 1x Cortex-M4 processor
• AHB LMEM (Local Memory Controller) including controllers for TCM and cache
memories
• 256 KB TCM (128 KB TCMU, 128 KB TCML)
• 16 KB Code Bus Cache
• 16 KB System Bus Cache
• ECC for TCM memories and parity for code and system caches (see LMEM and
MCM for more information)
• Integrated Nested Vector Interrupt Controller (NVIC)
• Wakeup Interrupt Controller (WIC)
• FPU (Floating Point Unit)
4.2.2 Configuration
The configuration of the bus, core, and memory are detailed in the features and sections
below.
Table 4-2. Cortex-M4 Configuration
Parameter Description Setting
NUM_IRQ Number of Interrupts 128
LVL_WIDTH (translates to 2n Number of interrupt priority bits 4
levels)
MPU_PRESENT Exclude (0) or include (1) optional ARM MPU 1
DEBUG_LVL Level of debug support 3
TRACE_LVL Level of trace support 2
0 = No Trace
1 = ITM and DWT
2 = ITM, DWT, and ETM
3 = ITM, DWT, ETM, and HTM
RESET_ALL_REGS Select whether all registers are reset (1) 1
JTAG_PRESENT SWJ-DP (1) 1
SW-DP (0)
CLKGATE_PRESENT Disable (0) or enable (1) instantiation of architectural clock 1
gates at all levels
WIC_PRESENT Exclude (0) or include (1) optional ARM provided WIC 1
WIC_LINES Select number of interrupts and/or events that WIC is NUM_IRQ+3
sensitive to
FPU_PRESENT Exclude (0) or include (1) Floating Point Unit (FPU) 1
BB_PRESENT Exclude (0) or include (1) Bit Banding logic 0
CONST_AHB_CTRL Specifies whether the external AHB-Lite buses maintain 0
control information during wait stated transfers
4.2.3 Performance
This section will discuss power and clocking performance of the Cortex-M4 Platform.
4.2.3.1 Power
There are several power states supported by the Cortex-M4. Supported primary core
states are listed below:
• Run - Normal run state. CM4 Platform, TCM and cache memories on nominal
voltage.
• Sleep – Wait power state. Depending on power state, CM4 Platform, TCM and cache
memories can either be in nominal or low-voltage. State recovery through NVIC.
NVIC clock is still running in this state.
• Deep Sleep – Stop power state. Depending on power state, CM4 Platform, TCM and
cache memories can either be in nominal or low-voltage. State recovery through
AWIC. Clocks can be completely stopped in this state.
4.2.3.2 Clocking
The M4 platform is provided a main processor clock that supplies the component clocks
to the cluster components. The maximum frequency targets are specified in the chip
datasheet. Please see the datasheet for more information. The clocks are described in the
table below:
Table 4-3. CM4 Clocks
Clock Signal Clock Name Target Frequency Description
Core gated clock cm4_hclk 400 MHz Cortex-M4 core clock.
Core Free-Running Clock cm4_fclk 400 MHz CM4 NVIC and timer clock
TCM Controller Clock cm4_tcmc_hclk 400 MHz CM4 platform TCM controller
clock
Platform Clock hclk 400 MHz CM4 platform AXBS fabric
and bus masters.
Synchronous to the core
clock.
Bus Clock ipg_clk 133 MHz Clock for bus slaves and
peripherals. Synchronous to
the system clock.
Because AHB-Lite does not support write data strobes when accessing AHB-Lite slaves
from an AXI master, care must be taken not to generate transactions that have partial
strobes. Make sure to not have unaligned accessing to TCM from an AXI master. For
example, when writing data to TCM from A53, ensure every write strobe address is 64bit
aligned. When the MMU is enabled, the TCM memory range must have the
MT_DEVICE_NGNRNE type attribute set. This will avoid A53 sparse writes to the
TCM memory region.
LMEM
Crossbar switch
Cortex-M4 core
Backdoor port
CSM bus
Cache system bus System cache
Processor System (PS) bus
controller
NOTE
The SRAM and cache controllers reside within the LMEM, but
the single-port synchronous RAM arrays used by these
controllers are external.
The LMEM contains address decode logic for the PC and PS buses. This logic routes the
core's accesses to the various system resources. The address spaces are device-specific
and are specified in the device's Chip Configuration chapter.
To minimize the quantity of control information stored, the spatial locality property is
used to group several locations together under the same tag. This logical block is
commonly known as a cache line.
When data is loaded into a cache, access times for subsequent loads and stores are
reduced, resulting in overall performance benefits. An access to information already in a
cache is known as a cache hit, and other accesses are called cache misses.
Normally, caches are self-managing, with the updates occurring automatically. Whenever
the processor wants to access a cacheable location, the cache is checked. If the access is a
cache hit, the access occurs immediately. Otherwise, a location is allocated and the cache
line is loaded from memory. Different cache topologies and access policies are possible.
However, they must comply with the memory coherency model of the underlying
architecture.
Caches introduce a number of potential problems, mainly because of:
• memory accesses occurring at times other than when the programmer would
normally expect them,
• the existence of multiple physical locations where a data item can be held.
The local memory controller supports three modes of operation:
1. Write-through — access to address spaces with this cache mode are cacheable.
• A read miss on the input bus causes a line read on the output bus of a 32-byte-
aligned memory address containing the desired address. This miss data is loaded
into the cache and is marked as valid and not modified.
• A write-through read hit to a valid cache location returns data from the cache
with no output bus access.
• A write-through write miss bypasses the cache and writes to the output bus (no
allocate on write miss policy for write-through mode spaces).
• A write-through write hit updates the cache hit data and writes to the output bus.
2. Write-back — access to address spaces with this cache mode are cacheable.
• A write-back read miss on the input bus will cause a line read on the output bus
of a 32-byte-aligned memory address containing the desired address. This miss
data is loaded into the cache and marked as valid and not modified.
• A write-back read hit to a valid cache location will return data from the cache
with no output bus access.
• A write-back write miss will do a "read-to-write" (allocate on write miss policy
for write-back mode spaces). A line read on the output bus of a 16 byte aligned
memory address containing the desired write address is performed. This miss
data is loaded into the cache and marked as valid and modified; and the write
data will then update the appropriate cache data locations.
3. Non-cacheable — access to address spaces with this cache mode are not cacheable.
These accesses bypass the cache and access the output bus.
Cache Cache
Tag Arrays Data Arrays
Code Cache
Backdoor S0 Slave Port
M0 Master Port
Frontdoor
SRAM_U
Code bus LMEM
Controller SRAM Controller
System bus SRAM_L
M1 Master Port
System Cache
Cache Cache
Tag Arrays Data Arrays
The figure below illustrates the SRAM accesses within the device.
SRAM_L
Frontdoor
Backdoor
SRAM controller
SRAM_U
The following simultaneous accesses can be made to different logical halves of the
SRAM:
• Core code and core system
• Core code and non-core master
• Core system and non-core master
NOTE
Two non-core masters cannot access SRAM simultaneously.
The required arbitration and serialization is provided by the
crossbar switch. The SRAM_{L,U} arbitration is controlled by
the SRAM controller based on the configuration bits in the
MCM module.
CACHE - 16 KByte size = (256 sets) x (32-byte lines) x (2-way set associative)
TAG:
DATA
• address[31:13] not used
• address[12:5] used to select one of 256 sets
• address[4:2] used to select one of eight 32-bit words within a set
• address[1:0] used to select the byte within the 32-bit word
After a reset, complete an invalidate cache command before using the cache. It is possible
to combine the cache invalidate command with the cache enable. That is, setting CCR to
0x8500_0003 will invalidate the cache and enable the cache and write buffer.
A line cache command is initiated by setting the line command go bit (CLCR[LGO] or
CSAR[LGO]). This bit also acts a a busy bit for line commands. It stays set while the
command is active and is cleared by the hardware when the command completes.
The CLCR[27:24] bits select the line command as follows:
Table 4-5. Cache Line Commands
CLCR[27:24] Command
LACC LADSEL LCMD
0 0 00 Search by cache address and way
0 0 01 Invalidate by cache address and way
0 0 10 Push by cache address and way
0 0 11 Clear by cache address and way
0 1 00 Search by physical address
0 1 01 Invalidate by physical address
0 1 10 Push by physical address
0 1 11 Clear by physical address
1 0 00 Write by cache address and way
1 0 01 Reserved, NOP
1 0 10 Reserved, NOP
1 0 11 Reserved, NOP
1 1 xx Reserved, NOP
At completion of a line command other than a write, the CCVR (Cache R/W Value
Register) contains information on the initial state of the line tag or data targeted by the
command. For line commands, CLCR[TDSEL] selects between tag and data. If the line
command used a physical address and missed, the data is don't care. For write commands,
the CCVR holds the write data.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R 0 0
PUSHW1
PUSHW0
INVW1
INVW0
GO
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ENWRBUF
ENCACHE
R 0
PCCR3
PCCR2
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: This bit stays set until the command completes. Writing zero has no effect.
NOTE: If the PUSHW1 and INVW1 bits are set, then after setting the GO bit, push all modified lines in
way 1 and invalidate all lines in way 1 (clear way 1).
0 No operation
1 When setting the GO bit, invalidate all lines in way 1
25 Push Way 0
PUSHW0
0 No operation
1 When setting the GO bit, push all modified lines in way 0
24 Invalidate Way 0
INVW0
NOTE: If the PUSHW0 and INVW0 bits are set, then after setting the GO bit, push all modified lines in
way 0 and invalidate all lines in way 0 (clear way 0).
0 No operation
1 When setting the GO bit, invalidate all lines in way 0.
23–4 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
3 Forces no allocation on cache misses (must also have ACCR2 asserted)
PCCR3
2 Forces all cacheable spaces to write through
PCCR2
1 Enable Write Buffer
ENWRBUF
0 Write buffer disabled
1 Write buffer enabled
0 Cache enable
ENCACHE
0 Cache disabled
1 Cache enabled
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LCWAY
LCIMB
LCIVB
R 0 0 0
LADSEL
TDSEL
LACC
LCMD
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0 0 0
WSEL
CACHEADDR LGO
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Cache address
1 Physical address
25–24 Line Command
LCMD
00 Search and read or write
01 Invalidate
10 Push
11 Clear
0 Data
1 Tag
15 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
14 Way select
WSEL
Selects the way for line commands.
0 Way 0
1 Way 1
13 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
12–2 Cache address
CACHEADDR
CLCR[11:4] bits are used to access the tag arrays
CLCR[11:2] bits are used to access the data arrays
1 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
0 Initiate Cache Line Command
LGO
Setting this bit initiates the cache line command indicated by bits 27-24. Reading this bit indicates if a line
command is active
NOTE: This bit stays set until the command completes. Writing zero has no effect.
The CSAR register is used to define the explicit cache address or the physical address for
line-sized commands specified in the CLCR[LADSEL] bit.
Address: E008_2000h base + 8h offset = E008_2008h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
PHYADDR
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0
PHYADDR LGO
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: This bit stays set until the command completes. Writing zero has no effect.
The CCVR register is used to source write data or return read data for the commands
specified in the CLCR register.
Address: E008_2000h base + Ch offset = E008_200Ch
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
DATA
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R 0 0
PUSHW1
PUSHW0
INVW1
INVW0
GO
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ENWRBUF
ENCACHE
R 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: This bit stays set until the command completes. Writing zero has no effect.
NOTE: If the PUSHW1 and INVW1 bits are set, then after setting the GO bit, push all modified lines in
way 1 and invalidate all lines in way 1 (clear way 1).
0 No operation
1 When setting the GO bit, invalidate all lines in way 1
25 Push Way 0
PUSHW0
0 No operation
1 When setting the GO bit, push all modified lines in way 0
24 Invalidate Way 0
INVW0
NOTE: If the PUSHW0 and INVW0 bits are set, then after setting the GO bit, push all modified lines in
way 0 and invalidate all lines in way 0 (clear way 0).
0 No operation
1 When setting the GO bit, invalidate all lines in way 0.
23–2 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
1 Enable Write Buffer
ENWRBUF
0 Write buffer disabled
1 Write buffer enabled
0 Cache enable
ENCACHE
0 Cache disabled
1 Cache enabled
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LCWAY
LCIMB
LCIVB
R 0 0 0
LADSEL
TDSEL
LACC
LCMD
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0 0 0
WSEL
CACHEADDR LGO
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Cache address
1 Physical address
25–24 Line Command
LCMD
00 Search and read or write
01 Invalidate
10 Push
11 Clear
23 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
22 Line Command Way
LCWAY
Indicates the way used by the line command.
21 Line Command Initial Modified Bit
LCIMB
If command used cache address and way, then this bit shows the initial state of the modified bit
If command used physical address and a hit, then this bit shows the initial state of the modified bit. If a
miss, this bit reads zero.
20 Line Command Initial Valid Bit
LCIVB
If command used cache address and way, then this bit shows the initial state of the valid bit
If command used physical address and a hit, then this bit shows the initial state of the valid bit. If a miss,
this bit reads zero.
19–17 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
16 Tag/Data Select
TDSEL
Selects tag or data for search and read or write commands.
0 Data
1 Tag
15 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
14 Way select
WSEL
Selects the way for line commands.
0 Way 0
1 Way 1
13 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
12–2 Cache address
CACHEADDR
CLCR[11:4] bits are used to access the tag arrays
CLCR[11:2] bits are used to access the data arrays
1 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
NOTE: This bit stays set until the command completes. Writing zero has no effect.
The CSAR register is used to define the explicit cache address or the physical address for
line-sized commands specified in the CLCR[LADSEL] bit.
Address: E008_2000h base + 808h offset = E008_2808h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
PHYADDR
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0
PHYADDR LGO
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: This bit stays set until the command completes. Writing zero has no effect.
The CCVR register is used to source write data or return read data for the commands
specified in the CLCR register.
Address: E008_2000h base + 80Ch offset = E008_280Ch
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
DATA
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Read 0 ASC
Write
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Read 0 AMC
Write
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
The PLACR register selects the arbitration policy for the crossbar masters.
Address: E008_0000h base + Ch offset = E008_000Ch
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0 Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ADDRESS
W
Reset x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x*
* Notes:
• x = Undefined at reset.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BEOVR
R 0
Reset x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x*
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BEWT
BEMD
BEDA
R 0 BEMN 0 BESZ 0
Reset x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x*
* Notes:
• x = Undefined at reset.
0 Read access
1 Write access
6 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
5–4 Bus error size
BESZ
Indicates the size of the cache write buffer access when the error was detected.
00 8-bit access
01 16-bit access
10 32-bit access
11 Reserved
3–2 This field is reserved.
Reserved This read-only field is reserved and always has the value 0.
1 Bus error privilege level
BEMD
Indicates the privilege level of the cache write buffer access when the error was detected.
0 User mode
1 Supervisor/privileged mode
0 Bus error access type
BEDA
Indicates the type of cache write buffer access when the error was detected. This attribute is always a
logical one signaling a data reference.
0 Instruction
1 Data
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R DATA
W
Reset x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x*
* Notes:
• x = Undefined at reset.
4.3.1 Overview
The Messaging Unit module enables two processors within the SoC to communicate and
coordinate by passing messages (e.g. data, status and control) through the MU interface.
The MU also provides the ability for one processor to signal the other processor using
interrupts.
Because the MU manages the messaging between processors, the MU uses different
clocks (from each side of the different peripheral buses). Therefore, the MU must
synchronize the accesses from one side to the other. The MU accomplishes
synchronization using two sets of matching registers (Processor A-facing, Processor B-
facing).
Processor A Processor B
TX / RX TX / RX
Registers Registers
Generate Generate
Interrupts Interrupts
Interrupts to Interrupts to
Processor A Processor B
interrupt interrupt
controller controller
4.3.1.1 Features
The MU includes the following features:
• Messaging control by interrupts or by polling
• The Processor B can take the Processor A out of low-power modes by asserting one
of the above twelve interrupts to the Processor A and vice versa
• Symmetrical processor interfaces with each side supporting the following:
• Four general-purpose interrupt requests reflected to the other side
• Three general-purpose flags reflected to the other side
• Four receive registers with maskable interrupt
• Four transmit registers with maskable interrupt
4.3.2.3 MU Messaging
The MU provides 32-bit status and control registers to the Processor B and Processor A
sides for control operations (such as interrupts and reset), and for status checking of the
other MU-side.
For messaging, the MU has four, 32-bit write-only transmit registers and four, 32-bit
read-only receive registers on the Processor B and Processor A-sides. These registers are
used for sending messages to each other. These messages can be also be controlled using
the 3 general purpose flags provided in the control and status registers of either MU-side.
• A write to a transmit register on the transmitter side clears a “transmitter empty” bit
in the Status Register on the transmitter side, and sets a “receiver full” bit in the
Status Register on the receiver side. The setting of the bit at the receiver side can
optionally trigger an interrupt at the receiver side (maskable receive interrupt).
• A read of one of the receive registers at the receiver side clears the “receiver full” bit
in the Status Register at the receiver side, and sets the “transmitter empty” bit in the
Status Register on the transmitter side. The setting of the “transmitter empty” bit can
optionally trigger an interrupt at the transmitter side (maskable transmit interrupt).
• Four general purpose flags are reflected in the Status Register on the receiver side
• A read/write access to any reserved location and a write to a read-only register on the
Processor A-side of the MU will generate a module transfer error acknowledge to the
Processor A.
• A read/write access to any reserved location and write to a read-only register on the
Processor B-side of the MU will generate a module transfer error acknowledge to the
Processor B.
Processor Other
Processor
Messaging Unit (MU)
xCR xSR
xSR xCR
xRR0-3 xTR0-3
xTR0-3 xRR0-3
• STOP
• DSM
The Processor can be awakened from a low-power mode by any enabled Processor side
MU interrupt, as reflected in the xSR “status” register (RF0–3, TE0–3, GIP0–3 bits are
set) and enabled in the xCR control register. Using these bits, the Processor can actively
control when to wake the other Processor.
While the Processor is in STOP mode (such that the xSR register bits cannot be updated
with events), special logic drives the enabled Processor interrupts directly from the other
Processor-side (instead of from the xSR register).
While the Processor is in STOP mode, the asynchronous Processor interrupt will be
asserted to wake the Processor:
• If any transmit data register of the other Processor-side is full, because of a write to it
(transmit data register); that is, its “empty” bit in the xSR register is cleared while its
corresponding receive interrupt is enabled on the Processor-side.
• If any receive data register of the other Processor-side is empty, because of a read on
the other Processor -side; that is, its “full” bit in the xSR register is cleared while its
corresponding transmit interrupt is enabled on the Processor-side.
• If any general purpose interrupt is set in the xCR register while the corresponding
interrupt is enabled on the Processor-side.
• If the other Processor issues a non-maskable interrupt to the Processor.
The logic enables the other Processor to operate independently while the Processor is in
any power mode (including STOP). However, the Processor power mode change protocol
should be handled with care regarding:
• The interrupts that are enabled on the Processor-side
• The events that could be triggered by the other Processor-side
• The compatibility with the other Processor protocol of entering STOP mode
If the Processor is in STOP mode and an event on the other Processor is triggered, the EP
bit (in the xSR register) will remain high until the Processor wakes up.
Before entering STOP mode, the Processor programmer should verify that the EP bit (in
the xSR register) is cleared. This check is needed to ensure that all pending updates from
the Processor, including the power mode change when STOP or WAIT is executed, will
be updated in the xSR register.
• If the other Processor is in STOP mode or DSM mode, the EP bit (in the xSR
register) may be stuck high; in this case, the Processor need not check the EP bit
before entering STOP mode.
4.3.2.7 Interrupts
The MU controls the Processor B interrupt requests to the Processor A, and the Processor
A interrupt requests to the Processor B. This section describes all the interrupts that the
module generates.
Processor A Processor B
1 4
Tx Status Rx Status
2 5
read from 4th TEn clear
RFn write from 4th
set Rx Full
Tx Empty
receive register set clear transmit register
triggers interrupt triggers interrupt
Tx Control Rx Control
NOTE
The Transmit registers can be used to pass frame information
on long messages written to the shared memory. Such frame
Processor A Processor B
General Purpose
ACR BSR
Interrupt Request
Register Register
OR'd with other
requests
Control
BCR
Register
Table 4-10. How the Processor A Performs an Exclusive Access to Shared Memory
(continued)
Sequence Action Description
4 Processor A accesses shared After receiving a dedicated interrupt from the Processor B,
memory Processor A proceeds.
4.3.2.11 MU Resets
The MU has two sources of reset, and each reset has a different function from the MU or
system perspective.
• One asynchronous system that is connected to both sides of the MU interface.
• One programmable hardware reset (MUR bit) in the ACR register (on the Processor
A-side).
Table 4-15. MU programmable resets
Reset Description
Processor A MU reset • Processor A MU Reset bit (MUR) of the ACR register
• The MUR reset affects the messaging section on both the Processor A and the
Processor B sides. The MUR reset causes all control and status registers to
return to their default values and all internal states to be cleared.
• It is up to the Processor A software to decide whether to use the MUR reset or
not.
• The instruction immediately following assertion of the MUR bit should not write to
MU registers. Such a write may be overwritten by the reset sequence and the
register will remain with the reset value. You should wait at least one instruction
(after assertion of the MUR bit) before attempting a write to MU registers.
After issuing MUR bit reset events, the Processor A programmer can verify that the reset
sequence on the Processor B-side has ended, by checking the RS bit in the ASR register.
NOTE
MUR bit assertion is a delicate operation because it affects the
other side’s registers asynchronously. MUR bit assertion may
cause unpredictable behavior if, for example, the Processor B is
concurrently testing an MU register bit (TE bit in Processor B
SR register). Before asserting the MUR bit, you should verify
that the Processor B is not presently engaged in an MU
signalling activity.
• Reading the receive register again without verifying that the data was written is
prohibited, because the receiver side has no way of knowing the exact time that the
transmitter will attempt to write the data.
• Before attempting to read the receive register again, the receiver side should wait for
a “Receiver Full” interrupt, or should poll the “Receiver Full” bit in the Status
Register.
• Failure to follow this restriction may result in the wrong data being written on the
transmitter side of the MU.
This section contains the detailed register descriptions for the Processor A-side MU
registers.
MUA memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
30AA_0000 Processor A Transmit Register 0 (MUA_ATR0) 32 R/W 0000_0000h 4.3.4.1/133
30AA_0004 Processor A Transmit Register 1 (MUA_ATR1) 32 R/W 0000_0000h 4.3.4.2/134
30AA_0008 Processor A Transmit Register 2 (MUA_ATR2) 32 R/W 0000_0000h 4.3.4.3/135
30AA_000C Processor A Transmit Register 3 (MUA_ATR3) 32 R/W 0000_0000h 4.3.4.4/135
30AA_0010 Processor A Receive Register 0 (MUA_ARR0) 32 R 0000_0000h 4.3.4.5/136
30AA_0014 Processor A Receive Register 1 (MUA_ARR1) 32 R 0000_0000h 4.3.4.6/137
30AA_0018 Processor A Receive Register 2 (MUA_ARR2) 32 R 0000_0000h 4.3.4.7/137
30AA_001C Processor A Receive Register 3 (MUA_ARR3) 32 R 0000_0000h 4.3.4.8/138
30AA_0020 Processor A Status Register (MUA_ASR) 32 R/W 00F0_0080h 4.3.4.9/139
4.3.4.10/
30AA_0024 Processor A Control Register (MUA_ACR) 32 R/W 0000_0000h
142
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
ATR0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
ATR1
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
ATR2
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
ATR3
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ARR0
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ARR1
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ARR2
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ARR3
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Use the Processor A Status Register (ASR, 32-bit, read-write) to show interrupt status
from the Processor B, general purpose flags, and to set dual function control-status bits.
• Some dual-purpose bits are set by the MU logic, and cleared by the Processor A-side
programmer
• Other dual-purpose bits are set by the Processor A-side programmer, and cleared by
the MU logic.
Address: 30AA_0000h base + 20h offset = 30AA_0020h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reset 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
BRDIP
Reset 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 The Processor A general purpose interrupt 3, because of a Processor B-side reset de-assertion, is
cleared (default).
1 The Processor B-side is out of reset.
8
FUP Processor A Flags Update Pending. (Read-only)
• FUP bit is set to “1” when the Processor A-side sends a Flags Update request to the Processor B-
side.
• A Flags Update request is generated when the ABF[2:0] bits of the ACR register change. No flag
update changes are allowed while the FUP bit is set to “1”. Any write to the ABF[2:0] bits, while the
FUP bit is set to “1”, will not generate a Flags Update event, and the ABF[2:0] bits will stay
unchanged.
• FUP bit is cleared when this Flags Update request is internally acknowledged (that the flag is
updated) from the MU Processor B-side, and during MU reset.
Table continues on the next page...
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
BRDIE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Disables the Processor A General Purpose Interrupt 3 request due to the Processor B reset de-
assertion to the Processor A. Processor B reset deassertion causes Processor B and MU-Processor B
side to come out of reset thus setting BRDIP bit to “1”.
1 Enables Processor A General Purpose Interrupt 3 request due to the Processor B reset de-assertion
to the Processor A.
This section contains the detailed register descriptions for the Processor B-side MU
registers.
MUB memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
30AB_0000 Processor B Transmit Register 0 (MUB_BTR0) 32 R/W 0000_0000h 4.3.5.1/145
30AB_0004 Processor B Transmit Register 1 (MUB_BTR1) 32 R/W 0000_0000h 4.3.5.2/146
30AB_0008 Processor B Transmit Register 2 (MUB_BTR2) 32 R/W 0000_0000h 4.3.5.3/147
30AB_000C Processor B Transmit Register 3 (MUB_BTR3) 32 R/W 0000_0000h 4.3.5.4/147
30AB_0010 Processor B Receive Register 0 (MUB_BRR0) 32 R 0000_0000h 4.3.5.5/148
30AB_0014 Processor B Receive Register 1 (MUB_BRR1) 32 R 0000_0000h 4.3.5.6/149
30AB_0018 Processor B Receive Register 2 (MUB_BRR2) 32 R 0000_0000h 4.3.5.7/149
30AB_001C Processor B Receive Register 3 (MUB_BRR3) 32 R 0000_0000h 4.3.5.8/150
30AB_0020 Processor B Status Register (MUB_BSR) 32 R/W 00F0_0080h 4.3.5.9/151
4.3.5.10/
30AB_0024 Processor B Control Register (MUB_BCR) 32 R/W 0000_0000h
154
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BTR0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BTR1
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BTR2
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BTR3
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R BRR0
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R BRR1
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R BRR2
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R BRR3
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Use the Processor B Status Register (BSR, 32-bit, read-write) to show interrupt status
from the Processor B, general purpose flags, the Processor A power mode, and to set dual
function control-status bits.
• Dual-purpose bits are set by the Processor B-side programmer, and cleared by the
MU logic.
Address: 30AB_0000h base + 20h offset = 30AB_0020h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reset 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved FUP ARS APM EP Fn
Reset 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved HRM BAFn
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 BHR bit in ACR is not masked, enables the hardware reset to the Processor B (default after hardware
reset).
1 BHR bit in ACR is masked, disables the hardware reset request to the Processor B.
3 This field is reserved.
Reserved
BAFn
For n = {0, 1, 2} Processor B to Processor A Flag n. (Read-Write)
Table continues on the next page...
4.4.1 Overview
The Semaphores (SEMA4) module provides a platform IPS slave device which
implements 16 hardware-enforced gates.
mux
0 ips_rdata
cp0_semaphore_int cp1_semaphore_int 31
IPS Bus
4.4.1.2 Features
The Semaphores module implements hardware-enforced semaphores as an IPS-mapped
slave peripheral device. The feature set includes:
• Support for 16 hardware-enforced gates in a dual-processor configuration
• Each hardware gate appears as a 3-state, 2-bit state machine, with all 16 gates
mapped as a byte-size array
• Processors lock gates by writing "processor_number+1" to the appropriate
gate and must read back the gate value to verify the lock operation was
successful.
3-state implementation:
if gate = 0b00, then state = unlocked
if gate = 0b01, then state = locked by processor 0
if gate = 0b10, then state = locked by processor 1
• Uses the bus master number/ID as a reference attribute plus the specified
data patterns to validate all write operations
• Once locked, the gate can (and must) be unlocked by a write of zeroes from
the locking processor
• Optional interrupt notification after a failed lock write provides a mechanism to
indicate when the gate is unlocked
• Secure reset mechanisms are supported to clear the contents of individual gates
or notification logic, as well as a clear_all capability
• Memory-mapped IPS slave peripheral platform module
• Interface to the IPS bus for programming-model accesses
• Two outputs (one per processor) for interrupt notification of failed lock writes
reset
1
idle
00
~((master == cp0) & (wdata == cp0_lock))
&~((master == cp1) & (wdata == cp1_lock))
2
master == cp0 master == cp1
& (wdata == cp0_lock) & (wdata == cp1_lock)
3 4
cp0_lock cp1_lock
01 10
5 7
master != cp0 master != cp1
6 | (wdata != unlock) | (wdata != unlock) 8
The bus master number/ID is used to identify core processor 0 (cp0) or core processor 1
(cp1).
The state transitions for SEMA4_GATEn are defined in the following table.
Table 4-16. SEMA4_GATEn State Transitions
Transitio
Current State Next State Description
n
idle 1 Any reset, whether a system reset or an individual gate reset,
–
unconditionally forces the gate into the idle state.
idle 2 Unless a write of the appropriate lock value from the
idle corresponding processor occurs, the gate remains in the idle
state.
cp0_lock 3 When a write of the "cp0_lock" data value is initiated by
idle
processor 0, the gate transitions into the cp0_lock state.
cp1_lock 4 When a write of the "cp1_lock" value is initiated by processor
idle
1, the gate transitions into the cp1_lock state.
any_reset
idle
000 ~transition_condition_3
& ~transition_condition_4
2
master == cp0 master == cp1
& (wdata == cp0_lock) & (wdata == cp1_lock)
& (gate == cp1_lock) & (gate == cp0_lock)
3 4
wait4_cp1_unlock wait4_cp0_unlock
010 001
gate != unlock
gate != unlock
5 7
10 6 8 13
wait4_cp0_lock wait4_cp1_lock
110 101
gate = !cp0_lock
& !cp1_lock
9 12
gate = !cp0_lock
11 & !cp1_lock 14
The state transitions of the IRQ notification function are defined in the following table.
Specific states of this machine are program-visible as the SEMA4_CPnNTF registers. In
particular, two states are program-visible:
The Semaphores module generates two interrupt request output signals, one per
processor, combining the SEMA4_CPnINE and SEMA4_CPnNTF registers, where the
boolean equations are:
i.MX 8M Mini Applications Processor Reference Manual, Rev. 3, 11/2020
162 NXP Semiconductors
Chapter 4 ARM Platform and Debug
cp0_semaphore_int
= SEMA4_CP0INE[INE0] & SEMA4_CP0NTF[GN0]
| SEMA4_CP0INE[INE1] & SEMA4_CP0NTF[GN1]
| SEMA4_CP0INE[INE2] & SEMA4_CP0NTF[GN2]
...
| SEMA4_CP0INE[INE15] & SEMA4_CP0NTF[GN15]
cp1_semaphore_int
= SEMA4_CP1INE[INE0] & SEMA4_CP1NTF[GN0]
| SEMA4_CP1INE[INE1] & SEMA4_CP1NTF[GN1]
| SEMA4_CP1INE[INE2] & SEMA4_CP1NTF[GN2]
...
| SEMA4_CP1INE[INE15] & SEMA4_CP1NTF[GN15]
If the compare indicates the expected value, then the gate is locked; proceed with the
protected code segment. If the compare does not indicate the expected value, the lock
operation failed; repeat the process beginning with byte write to gate[i] in spin-wait loop,
or proceed with another execution path and wait for failed lock interrupt notification.
A simple C-language example of a gateLock function is shown in the following figure.
if (i == 0)
locked_value = CP0_LOCK;
else
locked_value = CP1_LOCK;
/* read the current value of the gate and wait until the state == UNLOCK */
do {
current_value = gate[n];
} while (current_value != UNLOCK);
/* the current value of the gate == UNLOCK. attempt to lock the gate for this
processor. spin-wait in this loop until gate ownership is obtained */
do {
gate[n] = locked_value; /* write gate with processor_number + 1 */
current_value = gate[n]; /* read gate to verify ownership was obtained */
} while (current_value != locked_value);
A few comments on the logical CPU number are appropriate. In this example, a reference
to processor_number() is used to retrieve this hardware configuration value. Typically, the
logical processor numbers are defined by a hardwired input vector to the individual cores.
The exact method for accessing the logical processor number varies by architecture.
If the optional failed lock IRQ notification mechanisms are used, then accesses to the
related registers (SEMA4_CPnINE, SEMA4_ CPnNTF) are required. Note that there is
no required negation of the failed lock write notification interrupt, as the request is
automatically cleared by the Semaphores module once the gate has been successfully
locked by the "failing" processor.
Finally, in the event a system state requires a software-controlled reset of a gate or IRQ
notification register(s), accesses to the secure reset control registers (SEMA4_RSTGT,
SEMA4_RSTNTF) are required. For these situations, it is recommended that the
Bit 7 6 5 4 3 2 1 0
Read 0 GTFSM
Write
Reset 0 0 0 0 0 0 0 0
NOTE: The state of the gate reflects the last processor that locked it, which can be useful during system
debug.
Bit 7 6 5 4 3 2 1 0
Read INE0 INE1 INE2 INE3 INE4 INE5 INE6 INE7
Write
Reset 0 0 0 0 0 0 0 0
2. Once unlocked, the FSM enters a second state where it generates an interrupt request
to the “failed lock” processor.
3. When the “failed lock” processor succeeds in locking the gate, the IRQ is
automatically cleared and the FSM returns to the idle state. However, if the other
processor again locks the gate, the FSM returns to the first state, clears the interrupt
request, and then waits for the gate to be unlocked (again).
The notification interrupt request is implemented in a 3-bit, 5-state machine, where two
specific states are encoded and program-visible as SEMA4_CP0NTF[GNn] and
SEMA4_CP1NTF[GNn].
Address: 30AC_0000h base + 80h offset + (8d × i), where i=0d to 1d
Bit 15 14 13 12 11 10 9 8
Write
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
Write
Reset 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Read RSTGTN RSTGSM_RSTGMS_RSTGDP
Write
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Read RSTNTN RSTNSM_RSTNMS_RSTNDP
Write
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4.5.1 Overview
Various options are provided for adding a pipeline or wait-states in a read/write access, in
order to ensure flexible timing control at both high and low frequencies.
OCRAM CONTROLLER
RDATA 0[63:0]
RDATA 1[63:0]
MUX RDATA 2[63:0]
RDATA 3[63:0]
AXI RADDR
RAM
MUX
RAM MEM_WE[3..0]
RAM
MUX
RAM
MUX
Write Control MUX
AXI WADDR
MEM_ADDR[3..0]
WDATA [63:0]
RD
REQ
DEC
Arbiter
Arbiter
Arbiter
Timing Arbiter
WR
Configuration
REQ
DEC
• If there is no granted read or write in the last cycle, and there is only a read request or
a write request, the request will be granted.
• If there is no granted read or write in the last cycle, and there are both read or write
requests coming in at the same time, the read request will be granted first.
• If a granted read/write transaction has just finished, the write/read request will have
the higher priority in the next cycle.
• If the first read/write access request in a transaction is granted, all the data transfer in
this burst will be finished before the next arbitration begins, that is, the round-robin
arbitration mechanism is based on AXI transaction, not data access.
4.6.1 Overview
This section provides an overview of the NIC-301 (Network Inter-Connect) AXI arbiter
IP.
The NIC-301 (by Arm Ltd.) is a configurable AXI arbiter between several masters and
slaves. The NIC-301 IP is designed so that many configuration options are selected at the
hardware design stage, determined by SoC characteristics and needs, while several other
configuration options are software-controlled.
NOTE
The NIC-301 default settings are configured by NXP's board
support package (BSP), and in most cases should not be
modified by the customer. The default settings have gone
through exhaustive testing during the validation of the part, and
have proven to work well for the part's intended target
applications. Changes to the default settings may result in a
degradation in system performance.
4.7.1 Overview
This section provides an overview of the AHB to IP Bridge (AIPSTZ). This particular
peripheral is designed as the bridge between AHB bus and peripherals with the lower
bandwidth IP Slave (IPS) buses.
4.7.1.1 Features
The following list summarizes the key features of the bridge:
• The bridge supports the IPS slave bus signals.
• The bridge supports 8-, 16-, and 32-bit IPS peripherals. (Accesses larger than the size
of a peripheral are not supported, except to 32-bit memory.)
• The bridge supports a pair of IPS accesses for 64-bit and certain misaligned AHB
transfers to 32-bit memory in 64-bit platforms.
• The bridge directly supports up to 32 64-Kbyte external IPS peripherals, and 2 global
external IPS peripheral spaces. The bridge occupies 1 MBytes of total address space.
• The bridge provides configurable per-block and per-master access protections.
Access permissions are based on bus master (e.g. DMA or core) privilege levels and
i.MX 8M Mini Applications Processor Reference Manual, Rev. 3, 11/2020
178 NXP Semiconductors
Chapter 4 ARM Platform and Debug
resource domain. More details on the protection features and configuration can be
found in the Security Reference Manual
• Peripheral read transactions require a minimum of 2 hclk clocks, and unbuffered
write transactions require a minimum of 3 hclk clocks.
• The bridge uses one single asynchronous reset and one global clock.
4.7.2 Clocks
The following table describes the clock sources for AIPSTZ. Please see Clock Controller
Module (CCM) for clock setting, configuration and gating information.
Table 4-18. AIPSTZ Clocks
Clock name Clock Root Description
hclk ahb_clk_root Module clock
AIPS occupies a 1-Mbyte portion of the address space. The register maps of the IPS
peripherals are located on 64-Kbyte boundaries. Each IPS peripheral is allocated one 64-
Kbyte block of the memory map, and is activated by one of the block enables from the
Information regarding CSU is provided in the Security Reference Manual. Contact your
NXP representative for information about obtaining this document.
A 3-bit input, 8-bit output translation block can be used such that only three register bits
are required to set the security profile and the translation block will drive the correct 8-bit
configuration vector. Each peripheral connected to the AIPSTZ would require this
translation block. The top level AIPSTZ has this three bit input line `csu_sec_level[2:0]'
corresponding to each peripheral X.
The memory map for the AIPS SW-visible registers is shown in the table below.
The MPROT and OPACR fields are 4 bits in width. Some bits may be reserved
depending on device.
AIPSTZ memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
3000_0000 Master Priviledge Registers (AIPSTZ_MPR) 32 R/W 7700_0000h 4.7.8.1/185
Off-Platform Peripheral Access Control Registers
3000_0040 32 R/W 4444_4444h 4.7.8.2/187
(AIPSTZ_OPACR)
Off-Platform Peripheral Access Control Registers
3000_0044 32 R/W 4444_4444h 4.7.8.3/190
(AIPSTZ_OPACR1)
Off-Platform Peripheral Access Control Registers
3000_0048 32 R/W 4444_4444h 4.7.8.4/193
(AIPSTZ_OPACR2)
Off-Platform Peripheral Access Control Registers
3000_004C 32 R/W 4444_4444h 4.7.8.5/196
(AIPSTZ_OPACR3)
Off-Platform Peripheral Access Control Registers
3000_0050 32 R/W 4444_4444h 4.7.8.6/199
(AIPSTZ_OPACR4)
NOTE
The reset value is set to 0000_0000_7700_0000, which makes
master 0 and master 1 (Arm CORE) the trusted masters.
Trusted software can change the settings after reset.
Table 4-23. Master Index Allocation
Master Index Master Name Comments
Master 0 All masters excluding Arm core Share the same number allocation.
Master 1 Arm A53
Master 4 SDMA
Master 6 M4
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
MPROT0 MPROT1 MPROT2 MPROT3 Reserved MPROT5 Reserved
Reset 0 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1. Buffered writes are not available for AIPSTZ. This bit should be set to '0'.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
OPAC0 OPAC1 OPAC2 OPAC3 OPAC4 OPAC5 OPAC6 OPAC7
Reset 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
OPAC8 OPAC9 OPAC10 OPAC11 OPAC12 OPAC13 OPAC14 OPAC15
Reset 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
OPAC16 OPAC17 OPAC18 OPAC19 OPAC20 OPAC21 OPAC22 OPAC23
Reset 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
OPAC24 OPAC25 OPAC26 OPAC27 OPAC28 OPAC29 OPAC30 OPAC31
Reset 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
OPAC32 OPAC33 Reserved
Reset 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0
4.8.1 Overview
The Shared Peripheral Bus Arbiter (SPBA) is a three-to-one IP Bus interface arbiter.
Three masters arbitrate for shared peripheral access through the SPBA.
The SPBA has three primary functions:
• The IP Bus Line switches a master to one peripheral
• The Masters arbiter arbitrates between the three masters to solve concurrent access or
restricted access to peripherals
• The Control Registers and Ownership Control includes a set of registers which are
reachable through software and permit the access scheme to be defined for each
peripheral (Resource Ownership and Access Control). It generates signals for the
external steering logic of interrupts and DMA signals.
The figure below shows the SPBA block diagram
mb_dead_owner
ma_dead_owner
mc_dead_owner
Control
Registers
obsc0 Masters
+
IOSRTR Arbitration
obsc31 Ownership
module
Control
SPBA
IP-bus interface
IPMUX
Per0 Per30
Out-of-band signals
4.8.1.1 Features
The SPBA includes the following features:
4.8.2 Clocks
The table found here describes the clock sources for SPBA.
Please see Clock Controller Module (CCM) for clock setting, configuration and gating
information.
Table 4-25. SPBA Clocks
Clock name Clock Root Description
ipg_clk ipg_clk_root Peripheral clock
ipg_clk_s ipg_clk_root Peripheral access clock
ipg_clk
mb_ips_module_en
mb_ips_addr[24:0] 0x0000000
mb_ips_xfr_wait
sips_module_en[0]
sips_ips_xfr_wait
The following figure assumes MA and MB have been the last two masters granted in the
previous transfers (MA then MB).
clk
mb_ips_module_en
mb_ips_addr[24:0] 0x0000000
mb_ips_xfer_wait
ma_ips_module_en
ma_ips_addr[24:0] 0x004000
ma_ips_xfer_wait
mc_ips_module_en
mc_ips_addr[24:0] 0x0008000
mc_ips_xfer_wait
sips_module_en[0]
sips_module_en[1]
sips_module_en[2]
MASTER_GRANTED MC MA MB
Figure 4-17. Example of three master requests: Masters already granted are "waited";
ipg_clk_s
mb_ips_module_en
mb_ips_addr[24:0] 0x3C008
mb_ips_wdata[31:0] 31'd2
mb_ips_rwb
mb_ips_xfr_wait
obsc2[4:0] 5'b10010
Master B is taking ownership of peripheral 2 by writing 3'b010 in the SPBA peripheral 2 right register (rarfield)
This ownership can be checked on obsc2 output as roi2[1:0] = 2'b10 and rar2[2:0] = 3'b010
(obsc[4:0] = {roi2[1], roi2[0], rar2[2], rar2[1], rar2[0]})
The SPBA control registers (Peripheral Right Registers) are mapped as a virtual shared
peripheral.
SPBA can support up to 31 shared peripherals. Each of them has its own Peripheral Right
Register (PRR) accessible within the SPBA memory-mapped registers, and consists of
the Requesting Master Owner, the Resource Owner ID and the Resource Access Right
fields.
SPBA memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
300F_0000 Peripheral Rights Register (SPBA2_PRR0) 32 R/W 0000_0007h 4.8.5.1/212
300F_0004 Peripheral Rights Register (SPBA2_PRR1) 32 R/W 0000_0007h 4.8.5.1/212
300F_0008 Peripheral Rights Register (SPBA2_PRR2) 32 R/W 0000_0007h 4.8.5.1/212
300F_000C Peripheral Rights Register (SPBA2_PRR3) 32 R/W 0000_0007h 4.8.5.1/212
300F_0010 Peripheral Rights Register (SPBA2_PRR4) 32 R/W 0000_0007h 4.8.5.1/212
300F_0014 Peripheral Rights Register (SPBA2_PRR5) 32 R/W 0000_0007h 4.8.5.1/212
300F_0018 Peripheral Rights Register (SPBA2_PRR6) 32 R/W 0000_0007h 4.8.5.1/212
300F_001C Peripheral Rights Register (SPBA2_PRR7) 32 R/W 0000_0007h 4.8.5.1/212
300F_0020 Peripheral Rights Register (SPBA2_PRR8) 32 R/W 0000_0007h 4.8.5.1/212
300F_0024 Peripheral Rights Register (SPBA2_PRR9) 32 R/W 0000_0007h 4.8.5.1/212
300F_0028 Peripheral Rights Register (SPBA2_PRR10) 32 R/W 0000_0007h 4.8.5.1/212
300F_002C Peripheral Rights Register (SPBA2_PRR11) 32 R/W 0000_0007h 4.8.5.1/212
300F_0030 Peripheral Rights Register (SPBA2_PRR12) 32 R/W 0000_0007h 4.8.5.1/212
300F_0034 Peripheral Rights Register (SPBA2_PRR13) 32 R/W 0000_0007h 4.8.5.1/212
300F_0038 Peripheral Rights Register (SPBA2_PRR14) 32 R/W 0000_0007h 4.8.5.1/212
300F_003C Peripheral Rights Register (SPBA2_PRR15) 32 R/W 0000_0007h 4.8.5.1/212
Table continues on the next page...
R RMO ROI
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
RARC
RARA
Reserved RARB
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
4.9.1 Overview
The System Counter (SYS_CTR) is a programmable system counter, which provides a
shared time base to multiple processors. It is intended for applications where the counter
is always powered on, and supports multiple unrelated clocks.
Processor
System Platform 0
Bus
Counter 56-bit, Gray
24 MHz base_clk
32 kHz slow_clk
Processor
Platform 1
4.9.1.2 Features
• Two counter clock frequencies
• Base clock for normal operation
• Alternate clock for low power operation
• 56-bit counter width
• Gray coded counter output for distribution to the processor timers
• 2 Compare Frames
• Each compare frame contains a 64-bit compare value
• Each compare frame contains programmable interrupt generation
4.9.2.1 Operation
After reset, the System Counter is disabled with count value reset to zero and base
frequency selected. Once the counter is enabled, it will increment the appropriate value
on each rising edge of the selected clock. Because the System Counter is handling a 56-
bit count value across multiple clock domains, synchronization is necessary. The System
Counter provides synchronization mechanisms between the various clock domains.
When the system switches the counter’s clock source, there is a short pause while the
clock multiplexer is handling the clock transition. In order to maintain an accurate count
value, the clock control logic employs two offset counters; one for the base-to-slow
transtion and one for the slow-to-base transition. These offset counters only operate
during the clock transition time to compensate for the idled source clock. Both counters
run off of the base clock. The transition offset values are added to the system count value
at the appropriate time when the counter’s clock is restored.
NOTE
Both base clock and alternate clock must be running when
changing frequencies.
4.9.2.2 Clocks
The System Counter clocks are shown in the table below.
Table 4-26. Clocks
Clock Description
ipg_clk Peripheral Clock
ipg_clk_s Gated peripheral clock for register transactions
base_clk Base Clock. This clock is used during normal operation. It is internally divided by 3
before use.
slow_clk Slow Clock. This clock is used during low power mode. It is internally divided by 64
before use.
ctr_clk Counter Clock. The ctr_clk is generated by selecting either the base_clk or slow_clk.
Because the compare frame must generate an interrupt when either clock is selected,
most of the compare frame logic resides in this clock domain.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
HDBG
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The system counter status register provides information concerning the clock frequency
and debug state.
Address: 306C_0000h base + 4h offset = 306C_0004h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DBGH
FCA1
FCA0
Reserved Reserved
Reset 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
The Counter Count Value Low register indicates the current count value bits 31-0.
NOTE
Writes to the CNTCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306C_0000h base + 8h offset = 306C_0008h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
CNTCV0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Counter Count Value High register indicates the current count value bits 63-32.
NOTE
Writes to the CNTCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306C_0000h base + Ch offset = 306C_000Ch
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved CNTCV1
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTFID0
W
Reset 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTFID1
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
Table entries are 32-bits, and each entry specifies a system counter update frequency, in
Hz. The first entry in the table specifies the base frequency of the system counter. To
ensure overall counter accuracy is maintained, any subsequent entries in the table are
exact divisors of the base frequency.
When the system timer is operating at a lower frequency than the base frequency, the
increment applied at each counter update is given by: increment = (base_frequency) /
(selected_frequency) A 32-bit word of zero value marks the end of the table. That is, the
word of memory immediately after the last entry in the table is zero.
Address: 306C_0000h base + 28h offset = 306C_0028h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTFID2
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTID
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Counter Count Value Low register indicates the current count value bits 31-0.
Address: 306A_0000h base + 0h offset = 306A_0000h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTCV0
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Counter Count Value High register indicates the current count value bits 63-32.
Address: 306A_0000h base + 4h offset = 306A_0004h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTCV1
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTID
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Compare Count Value Low register indicates the current count value bits 31-0.
NOTE
Writes to the CMPCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306B_0000h base + 20h offset + (256d × i), where i=0d to 1d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CMPCV0
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Compare Count Value High register indicates the current count value bits 63-32.
NOTE
Writes to the CMPCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306B_0000h base + 24h offset + (256d × i), where i=0d to 1d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CMPCV1
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ISTAT
R
IMASK
Reserved EN
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTID
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The read frame registers are all read-only. These registers read the same values as the
control frame registers for the count value and counter ID. They are processed via a
separate mechanism from the control frame to allow nonsecure, user mode access.
SYS_CTR_READ memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
306C_0000 Counter Control Register (SYS_CTR_CONTROL_CNTCR) 32 R/W 0000_0000h 4.9.4.1/217
306C_0004 Counter Status Register (SYS_CTR_CONTROL_CNTSR) 32 R 0000_0100h 4.9.4.2/219
Counter Count Value Low Register
306C_0008 32 R/W 0000_0000h 4.9.4.3/220
(SYS_CTR_CONTROL_CNTCV0)
Counter Count Value High Register
306C_000C 32 R/W 0000_0000h 4.9.4.4/221
(SYS_CTR_CONTROL_CNTCV1)
Frequency Modes Table 0 Register
306C_0020 32 R 007A_1200h 4.9.4.5/221
(SYS_CTR_CONTROL_CNTFID0)
Frequency Modes Table 1 Register
306C_0024 32 R 0000_0200h 4.9.4.6/222
(SYS_CTR_CONTROL_CNTFID1)
Frequency Modes Table 2 Register
306C_0028 32 R 0000_0000h 4.9.4.7/222
(SYS_CTR_CONTROL_CNTFID2)
306C_0FD0 Counter ID Register (SYS_CTR_CONTROL_CNTID0) 32 R 0000_0000h 4.9.4.8/223
Counter Count Value Low Register
306A_0000 32 R 0000_0000h 4.9.4.1/224
(SYS_CTR_READ_CNTCV0)
Counter Count Value High Register
306A_0004 32 R 0000_0000h 4.9.4.2/224
(SYS_CTR_READ_CNTCV1)
306A_0FD0 Counter ID Register (SYS_CTR_READ_CNTID0) 32 R 0000_0000h 4.9.4.3/225
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
HDBG
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The system counter status register provides information concerning the clock frequency
and debug state.
Address: 306C_0000h base + 4h offset = 306C_0004h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DBGH
FCA1
FCA0
Reserved Reserved
Reset 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
The Counter Count Value Low register indicates the current count value bits 31-0.
NOTE
Writes to the CNTCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306C_0000h base + 8h offset = 306C_0008h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
CNTCV0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Counter Count Value High register indicates the current count value bits 63-32.
NOTE
Writes to the CNTCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306C_0000h base + Ch offset = 306C_000Ch
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved CNTCV1
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTFID0
W
Reset 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTFID1
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
Table entries are 32-bits, and each entry specifies a system counter update frequency, in
Hz. The first entry in the table specifies the base frequency of the system counter. To
ensure overall counter accuracy is maintained, any subsequent entries in the table are
exact divisors of the base frequency.
When the system timer is operating at a lower frequency than the base frequency, the
increment applied at each counter update is given by: increment = (base_frequency) /
(selected_frequency) A 32-bit word of zero value marks the end of the table. That is, the
word of memory immediately after the last entry in the table is zero.
Address: 306C_0000h base + 28h offset = 306C_0028h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTFID2
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTID
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Counter Count Value Low register indicates the current count value bits 31-0.
Address: 306A_0000h base + 0h offset = 306A_0000h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTCV0
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Counter Count Value High register indicates the current count value bits 63-32.
Address: 306A_0000h base + 4h offset = 306A_0004h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTCV1
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTID
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Compare Count Value Low register indicates the current count value bits 31-0.
NOTE
Writes to the CMPCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306B_0000h base + 20h offset + (256d × i), where i=0d to 1d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CMPCV0
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Compare Count Value High register indicates the current count value bits 63-32.
NOTE
Writes to the CMPCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306B_0000h base + 24h offset + (256d × i), where i=0d to 1d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CMPCV1
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ISTAT
R
IMASK
Reserved EN
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTID
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Each compare frame consists of a 256 byte region. Each compare frame has its own
compare value and control register. Each compare frame is capable of generating one
maskable interrupt.
SYS_CTR_COMPARE memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
306C_0000 Counter Control Register (SYS_CTR_CONTROL_CNTCR) 32 R/W 0000_0000h 4.9.4.1/217
306C_0004 Counter Status Register (SYS_CTR_CONTROL_CNTSR) 32 R 0000_0100h 4.9.4.2/219
Counter Count Value Low Register
306C_0008 32 R/W 0000_0000h 4.9.4.3/220
(SYS_CTR_CONTROL_CNTCV0)
Counter Count Value High Register
306C_000C 32 R/W 0000_0000h 4.9.4.4/221
(SYS_CTR_CONTROL_CNTCV1)
Frequency Modes Table 0 Register
306C_0020 32 R 007A_1200h 4.9.4.5/221
(SYS_CTR_CONTROL_CNTFID0)
Frequency Modes Table 1 Register
306C_0024 32 R 0000_0200h 4.9.4.6/222
(SYS_CTR_CONTROL_CNTFID1)
Frequency Modes Table 2 Register
306C_0028 32 R 0000_0000h 4.9.4.7/222
(SYS_CTR_CONTROL_CNTFID2)
306C_0FD0 Counter ID Register (SYS_CTR_CONTROL_CNTID0) 32 R 0000_0000h 4.9.4.8/223
Counter Count Value Low Register
306A_0000 32 R 0000_0000h 4.9.4.1/224
(SYS_CTR_READ_CNTCV0)
Counter Count Value High Register
306A_0004 32 R 0000_0000h 4.9.4.2/224
(SYS_CTR_READ_CNTCV1)
306A_0FD0 Counter ID Register (SYS_CTR_READ_CNTID0) 32 R 0000_0000h 4.9.4.3/225
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
HDBG
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The system counter status register provides information concerning the clock frequency
and debug state.
Address: 306C_0000h base + 4h offset = 306C_0004h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DBGH
FCA1
FCA0
Reserved Reserved
Reset 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
The Counter Count Value Low register indicates the current count value bits 31-0.
NOTE
Writes to the CNTCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306C_0000h base + 8h offset = 306C_0008h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
CNTCV0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Counter Count Value High register indicates the current count value bits 63-32.
NOTE
Writes to the CNTCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306C_0000h base + Ch offset = 306C_000Ch
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved CNTCV1
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTFID0
W
Reset 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTFID1
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
Table entries are 32-bits, and each entry specifies a system counter update frequency, in
Hz. The first entry in the table specifies the base frequency of the system counter. To
ensure overall counter accuracy is maintained, any subsequent entries in the table are
exact divisors of the base frequency.
When the system timer is operating at a lower frequency than the base frequency, the
increment applied at each counter update is given by: increment = (base_frequency) /
(selected_frequency) A 32-bit word of zero value marks the end of the table. That is, the
word of memory immediately after the last entry in the table is zero.
Address: 306C_0000h base + 28h offset = 306C_0028h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTFID2
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTID
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Counter Count Value Low register indicates the current count value bits 31-0.
Address: 306A_0000h base + 0h offset = 306A_0000h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTCV0
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Counter Count Value High register indicates the current count value bits 63-32.
Address: 306A_0000h base + 4h offset = 306A_0004h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTCV1
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTID
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Compare Count Value Low register indicates the current count value bits 31-0.
NOTE
Writes to the CMPCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306B_0000h base + 20h offset + (256d × i), where i=0d to 1d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CMPCV0
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The Compare Count Value High register indicates the current count value bits 63-32.
NOTE
Writes to the CMPCV registers must be performed while
operating on the base frequency only. Writes to these registers
while running on the alternate frequency may have
unpredictable results.
Address: 306B_0000h base + 24h offset + (256d × i), where i=0d to 1d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CMPCV1
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ISTAT
R
IMASK
Reserved EN
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R CNTID
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4.10.1 Overview
The TrustZone Address Space Controller (TZASC) protects security-sensitive SW and
data in a trusted execution environment against potentially compromised SW running on
the platform.
The TZASC block diagram is shown in figure below.
4.10.2 Clocks
The table found here describes the clock sources for TZASC.
Table 4-28. TZASC Clocks
Clock name Clock Root Description
aclk ccm_clk_root Module clock
such cases, the TZASC must be configured to protect all aliased regions as well (i.e.
effectively reducing the number of available TZASC regions, since all aliased regions
must be handled, for each "real" space needing protection).
For complete details on TZASC functionality and the programming model, see the Arm
document, “CoreLink™ TrustZone Address Space Controller TZC-380 Technical
Reference Manual, (Rev r0p1 or newer)”, available at http://infocenter.arm.com.
4.11.1 Debug
The chip debug is based on Arm’s CoreSight platform, with support for Quad-core A53
platform and Cortex-M4 core. The key features of the debug system include:
• Support 5-pins(JTAG) interface.
• Support both non-intrusive and halt-mode trace/debug options.
• MDM-AP registers for debugger to control mutli-core halt/resume cores.
• Trace Memory Controller (TMC) is used to enable capturing trace.
• 4KB in SOC trace block.
• ETR is used to allow routing trace data to system memory.
• Support ARM real time trace interface (TPIU) 16-bit @133MHz.
• Support cross trigger between Quad Cortex-A53 and Cortex-M4.
• 4 JTAG security levels, via SJC security functions together with e-Fuse (challenge
response, field return, intrusive detection)
AHB Bus
To SOC
M4 Quad A53 Core
DAP Core Sight
MDM
AHB-AP
AP
SWJ
DAP bus
DP
APB bus
APBIC
APB-AP
w/ ROM APB bus
APH Bus
APSEL From SOC
JTAG AP
Decoder
cJTAG
SJC
This section gives a brief overview of the modules that are implemented within the
Cortex-M/Cortex-A Core Platform. The debug blocks are part of the overall CoreSight
platform debug system, which include the ETR, CTM, CTI, ATB replicator, APB address
decode, TPIU and DAP. The CoreSight™ compatible Embedded Trace Macrocell (ETM)
enables traces of program flow to be collected, compressed, and fed into the trace
infrastructure. The Cross Trigger Interface (CTI) is included to provide a common
programming model for use by the debug tools, control the trigger sources, and interface
to the Cross Trigger Matrix (CTM). The debug is controlled via an ARM Debug Access
Port (DAP).
4.12.1 Overview
The System JTAG Controller (SJC) provides debug and test control with the maximum
security.
The test access port (TAP) is designed to support features compatible with the IEEE
Standard 1149.1 v2001 (JTAG).
The figure below shows an overview of the JTAG architecture.
Cortex
A53
ETM’s, CTI’s
APB
SDMA
JTAG-AP
DA P
OnCE
TDI TDO TDI TDO
TDI
DA P
TDO
DAP
SDMA
SJC Bypass TAP
Bus
Cortex-M4
1 0
SJC TAP Ctlr
ExtraDebug Registers
JTAG_TMS
JTAG_TCK
JTAG_TRSTB JTAG_TDO
I/O PINS JTAG_TDI JTAG_MOD
4.12.1.1 Features
The JTAG interface of chip, shared by SJC and DFT_TAP (for IEEE1149.1), provides
the following capabilities:
• JTAG IEEE1149.1 mandatory instructions, see EXTEST Instruction, SAMPLE/
PRELOAD Instruction , and BYPASS Instruction .
• JTAG IEEE1149.1 optional instructions, see ID_CODE Instruction (SJC IDCODE /
DFT_TAP IDCODE), HIGHZ Instruction, and CLAMP Instruction.
• JTAG IEEE P1149.1 (standard JTAG) interface to off-chip test and development
equipment for true IEEE 1149.1 compliance, used primarily for board-level
implementation of boundary scan.
• Debug-related control and status, such as putting selected cores into reset and/or
debug mode and the ability to monitor individual core status signals via JTAG.
• Provides means for accessing each OnCE/ICE TAP controller independently to
control a target system (see Modes of Operation).
• ExtraDebug logic (see ENABLE_ExtraDebug Instruction ).
• The maximum clock speed of the SJC is one-eight of the lowest frequency of the
accessed OnCE/ICE. For example in normal operation (no core in low-power mode),
this frequency is one-eight of the SDMA frequency if this core is present in the TDI-
TDO chain (serially connected with other cores or standalone). The user must also
consider the 25 MHz frequency limitation on the CE bus.
• Core compliant modes to support standalone core debuggers (see Modes of
Operation).
• Multi-cores daisy chained mode (default one) to support multi-core debuggers (see
Modes of Operation).
Detailed information about the SJC is provided in the Security Reference Manual.
Contact your NXP representative for information about obtaining this document.
NOTE
IEEE1149.1 standard features are enabled by below IO
configurations: (TEST_MODE, BOOT_MODE1,
BOOT_MODE0, JTAG_MOD) = (1110)
The following figure shows the SJC mode selection flow. The numbers shown in
parenthesis below each block name indicates the TAP's IR length.
M OD = 0
M OD = 1
SoC JTAG (SJC)
TDI (5)
TDO
The Connect SDMA bit inside TAP select register controls the SDMA TAP bypass.
• When negated (should be the default state), the SDMA TAP is bypassed with a
single D-FF (Flip-flop) during Shift-Dr path
• When asserted SDMA TAP is connected inside the chain
• When taking the SDMA into bypass or out of bypass (by writing to tapsel reg),
additional cycle with TMS '0' should be given
The TAP selection block (TSB) provides a simple method of integrating various pieces of
IP that have embedded TAPs.
• Provides a way to connect up multiple TAPs within a single SoC
• Follow the state of SJC TAP, and when the Test-Logic-Reset (TLR) state is reached,
reset all TAPs
The figure below shows the TAP Selection Block and SOC TAP Chain Scheme.
SJC
MOD
TDI sdma_bypass
tdi SJC
TCK tdo
tck TAP
Alter. TAP
tdo
Bypass
tdi SDMA 1
tdo
tck TAP 0
1 SOC TDO
0
DAP
TAP
Figure 4-24. TAP Selection Block and SoC TAP Chain Scheme
NOTE
It is the responsibility of the user to ensure that in any
configuration of the TAP controllers chosen, all of the TAPs in
the chain comply with the demands of TCK clock frequency as
well as the required ratio between TCK clock frequency and
that of the core's to which the TAP refers.
SJC JTAG
IR space
Reserved
ACCESS_TSR IR
Shift-DR
TDI TDO
TAP select shift register
Update-DR
Figure 4-25. Using Reserved IR to Access the TAP Select Register (SJC_TSR)
The SJC_TSR can only be changed during the update-DR state of the TSB JTAG state
machine. This is necessary to prevent a TAP that is being selected from losing
synchronization with the TSB state machine when the TSB state machine returns to run-
test-idle. Therefore, an associated shift register for the SJC_TSR is loaded into the
SJC_TSR during the update-DR state (see the figure above). The shift register must also
capture the state of the SJC_TSR when in the Capture-DR state for visibility of the
contents of the SJC_TSR. See TAP Select Instruction , for more information.
The instruction register is reset to 0b00000 in the test-logic-reset controller state which is
equivalent to the SJC IDCODE instruction.
During the capture-IR controller state, the parallel inputs to the instruction register are
loaded with the code 01 in the least significant bits as required by the standard; the most
significant bits are loaded with the values 00, leading to a capture value of 0b00001.
the design. When the IDCODE instruction is selected, the operation of the test logic has
no effect on the operation of the on-chip system logic as required by the IEEE 1149.1
standard.
NOTE: Additional cycle with TMS '0' should be inserted, after writing to this register, to
allow the SDMA tap be sync before SDMA get into / out of bypass.
4.12.5 Security
JTAG manipulation is one of the known hackers' ways of executing unauthorized
program code, getting control over the OS and run code in privileged modes.
The SJC provides a debug access to several H/W blocks including the Arm processor and
the system bus. This allows for program control and manipulation as well as visibility
into system peripherals and memory. The ETM and NEXUS interfaces allow bus
transactions to be traced. Together these tools provide the hacker all the access needed to
completely comprise the system. Means must be provided to block any malicious JTAG
access.
The SJC provides a way of regulating the JTAG access.
The following are the different JTAG security modes:
• Mode #1: No Debug-Maximum Security. All security sensitive JTAG features are
permanently blocked.
• Mode #2: Secure JTAG-High security. JTAG use is regulated by secret key based
authentication mechanism.
• Mode #3: JTAG Enabled-Low security. JTAG always enabled.
The JTAG security modes are configured using eFUSEs which can burned after
packaging by applying electrical signals. The fuse burning is irreversible process, once a
fuse is burned (e-fuse or laser fuse) it is impossible to change the fuse back to the un-
burned state.
2. Passing through Capture-DR state of the SJC and by performing Shift-DR operations
Challenge code can be accessed from TDO.
3. Shift Enter Response instruction to IR. By performing Shift-DR, operations enter
Response code value through TDI. As Update-DR state is entered, Response code is
compared with the correct one.
In Fixed challenge-response pair mode, each part has its individual challenge - response
pair which is determined at manufacturing time, and does not change later on. The SJC
compares the user's response to the expected response.
SJC
Access Policy
External
System JTAG User Debug
Response JTAG Port Machine
compare
Challenge
Response
Expected
Fixed Challenge-Response
The kill trace is asserted when "kill trace enable" fuse is burned and "ipt_secur_block"
signal in SJC is asserted, which happens when at least one of the following is true:
• Mode #2 (Secure JTAG) and no code has been entered
• Mode #2 (Secure JTAG) with burned Bypass and Re-enable fuses
• Mode #2 (Secure JTAG) with incorrect response entered
• Mode #1 (No debug)
• TRST_B signal is active
• POR has not ever been asserted
RESET_IN reset
Reset control
POR
CCM
IR!= sjc_ieee_reset_b
EXTEST or HighZ
TRST
AND SDMA CORE
POR AND OnCE TAP Controller
OnCE reset
TSB TAP state!= TestLogicReset
sjc_trst_b
SJC DAP
NOTE
• Asserting TRSTB in any scan mode resets the TCR loosing
the testmode configuration and selects default TAP.
• SJC generates an IEEE reset signal to the CCM when in
one of the IEEE modes HIGHZ or EXTEST. This signal
generates a system reset to the cores until exit from one of
these modes.
• The TSB generates Once/ICE reset (either TRSTB if
implemented or other) when its TAP state reaches Test-
Logic-Reset (meaning that TAP accessed is also reaching
Test-Logic-Reset).
• Ensure that the JTAG test logic is kept transparent to the system logic by forcing
TAP into the Test-Logic-Reset controller state. During power-up, SJC's internal
TRSTB is asserted as IC's POR_B is asserted which forces the TAP controller into
this state. After that, if TMS either remains unconnected or is connected to VCC,
then the TAP controller cannot leave the Test-Logic-Reset state, regardless of the
state of TCK.
• DE_B is an IO pin with pullup and care must be taken of the direction when driving
this signal.
In addition to the standard accessible JTAG registers (per IEEE1149.1 standard) listed in
SJC Instruction Register (SJIR) , the chip contains the following registers accessed using
the ExtraDebug mechanism, controlled via "ENABLE_ExtraDebug" IR instruction.
NOTE
SJC registers are only accessible by JTAG interface. They are
not memory mapped to processor address space, so the absolute
addresses provided by default in the SJC memory map are not
valid.
This section assumes the JTAG controller is accessed in standalone mode or daisy
chained (defined by TAP Selection Block) using the appropriate TSB configuration.
See "System Debug" chapter for more details about the general purpose register
descriptions that are unique to this chip.
SJC memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
General Purpose Unsecured Status Register 1 4.12.8.1/
0 32 R 0000_0000h
(SJC_GPUSR1) 279
General Purpose Unsecured Status Register 2 4.12.8.2/
1 32 R 0000_0000h
(SJC_GPUSR2) 281
General Purpose Unsecured Status Register 3 4.12.8.3/
2 32 R 0000_0000h
(SJC_GPUSR3) 281
4.12.8.4/
3 General Purpose Secured Status Register (SJC_GPSSR) 32 R 0000_0000h
282
4.12.8.5/
4 Debug Control Register (SJC_DCR) 32 R/W 0000_0000h
283
Table continues on the next page...
The General Purpose Unsecured Status Register 1 is a read only register used to check
the status of the different Cores and of the PLL. The rest of its bits are for general
purpose use.
Address: 0h base + 0h offset = 0h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PLL_LOCK
A_DBG
A_WFI
R S_STAT
Reserved
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The General Purpose Secured Status Register is a read-only register used to check the
status of the different critical information in the SoC. This register cannot be accessed in
secure modes.
Address: 0h base + 3h offset = 3h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R GPSSR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This register is used to control propagation of debug request from DE_B pad to the cores
and debug signals from internal logic to the DE_B pad.
Address: 0h base + 4h offset = 4h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DIRECT_SDMA_REQ_EN
DIRECT_ARM_REQ_EN
R
DE_TO_SDMA
DEBUG_OBS
DE_TO_ARM
Reserved
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R -
Reserv
ed
Reset 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0*
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BOOTIND
SWE
SWF
KTA
R RSSTAT SJM FT EBG EBF KTF
Reserved
Reserved
Reserved
Reserv
ed
Reset 0* 0* 0* 0* 0* 0* 0* 1* 0* 0* 0* 0* 0* 0* 0* 0*
* Notes:
• The SJM reset value, reflects the JTAG security state, as defined by status of JTAG_SMODE[1:0] fuses. See the SJM
bitfield description for details on valid values.
00 No debug (#1)
01 Secure JTAG (#2)
10 Reserved
11 JTAG enabled (#3)
8 Fuse type
FT
Fuse type bit - e-fuse or laser fuse
0 E-fuse technology
1 Laser fuse technology
7 This field is reserved.
- Reserved
6 This field is reserved.
- Reserved
5 External boot granted
EBG
External boot enabled, requested and granted
1 granted
0 not granted
4 External Boot fuse
EBF
Status of the external boot disable fuse
1 enabled
0 disabled
2 Software JTAG enable fuse
SWF
Status of the no SW disable JTAG fuse
This register is used to configure clock related modes in SOC, see System Configuration
chapter for more information. Those bits are directly connected to JTAG outputs. Bit 0 of
GPCCR controls SDMA clocks invocation. When out of reset, the SDMA is in sleep
mode with no SDMA clock running. Unlike events, debug requests does not wake
SDMA if it is in sleep mode. The debug request is recognized by the SDMA only when it
exits sleep mode upon reception of an event. To be able to enter debug mode even if no
event is triggered, the SDMA clock on bit needs to be set prior to sending the debug
request (clear at reset).
Address: 0h base + 7h offset = 7h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ACLKOFFDIS
R
SCLKR
-
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5.1.1 Overview
Clock Control Module (CCM) manages the on-chip module clocks. CCM receives clocks
from PLLs and oscillators and creates clocks for on-chip peripherals through a set of
multiplexers, dividers and gates. When entering or exiting a low power mode, CCM
automatically turns on and off PLLs and peripheral clocks.
mux
: cg div
cg
PLL cg
Clock Source from cg
PLL/Divider cg
24 MHz PLLs cg
cg
mux
: cg div
cg
32 kHz
to on-chip
peripherals
Pre-Dividers PLL Enable
PLL
Control
PLL Lock
Clock Gate
GPC SRC
CCM_CLKO[2:1]
PLL2
PLL1
PLL2
Audio
PLL1
Audio
PLL1
DRAM
OSC_24M
OSC_32K
System
System
VIDEO
System
VPU PLL
EXT_CLK_1
EXT_CLK_2
EXT_CLK_3
EXT_CLK_4
ARM PLL
GPU PLL
NXP Semiconductors
/3
/4
/5
/6
/8
/2
/8
/2
/3
/4
/5
/6
/10
/20
/10
DIV
DIV
DIV
/20
DIV
DIV
DIV
DIV
24M_REF_CLK
ARM_PLL_CLK
DRAM_PLL_CLK
VPU_PLL_CLK
GPU_PLL_CLK
SYSTEM_PLL1_CLK
SYSTEM_PLL1_DIV2
SYSTEM_PLL1_DIV3
SYSTEM_PLL1_DIV4
SYSTEM_PLL1_DIV5
SYSTEM_PLL1_DIV6
SYSTEM_PLL1_DIV8
SYSTEM_PLL1_DIV10
SYSTEM_PLL1_DIV20
SYSTEM_PLL2_CLK
SYSTEM_PLL2_DIV2
SYSTEM_PLL2_DIV3
SYSTEM_PLL2_DIV4
SYSTEM_PLL2_DIV5
The figure below illustrates the clock slices of CCM and clock root generation.
EXT_CLK_3
EXT_CLK_4
311
Chapter 5 Clocks and Power Management
Clock Control Module (CCM)
LPCG
POST[MUX_A]
POST[MUX_A]
POST[SELECT]
cg
ARM_A53_CLK_ROOT
POST[MUX_B]
cg POST[POST_PODF]
POST[MUX_B]
POST[MUX_A]
POST[MUX_A]
POST[SELECT]
cg
ARM_M4_CLK_ROOT
POST[MUX_B]
cg POST[POST_PODF]
POST[MUX_B]
POST[MUX_A]
POST[MUX_A]
POST[SELECT]
cg CCGR79
GPU3D_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
POST[MUX_B]
POST[MUX_A]
POST[MUX_A]
POST[SELECT]
cg CCGR102
GPU2D_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
POST[MUX_B]
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A]
POST[SELECT]
cg
MAIN_AXI_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
POST[MUX_B]
PRE[PRE_PODF_B]
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A]
POST[SELECT]
cg
ENET_AXI_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
POST[MUX_B]
PRE[PRE_PODF_B]
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A]
POST[SELECT]
cg NAND_USDHC_BUS_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
POST[MUX_B] PRE[PRE_PODF_B]
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A]
POST[SELECT]
cg CCGR99
VPU_BUS_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
POST[MUX_B]
PRE[PRE_PODF_B]
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A]
POST[SELECT]
cg CCGR93
DISPLAY_AXI_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
POST[MUX_B]
PRE[PRE_PODF_B]
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A]
POST[SELECT]
cg CCGR93
DISPLAY_APB_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
PRE[PRE_PODF_B]
POST[MUX_B]
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A]
POST[SELECT]
cg CCGR93
DISPLAY_RTRM_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
PRE[PRE_PODF_B]
POST[MUX_B]
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A]
POST[SELECT]
cg
USB_BUS_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
PRE[PRE_PODF_B]
POST[MUX_B]
SYSTEM_PLL1_DIV20
SYSTEM_PLL2_DIV20
SYSTEM_PLL1_DIV10
SYSTEM_PLL2_DIV10
SYSTEM_PLL1_DIV2
SYSTEM_PLL1_DIV3
SYSTEM_PLL1_DIV4
SYSTEM_PLL1_DIV5
SYSTEM_PLL1_DIV6
SYSTEM_PLL1_DIV8
SYSTEM_PLL2_DIV2
SYSTEM_PLL2_DIV3
SYSTEM_PLL2_DIV4
SYSTEM_PLL2_DIV5
SYSTEM_PLL2_DIV6
SYSTEM_PLL2_DIV8
EXT_CLK_2
GPU_PLL_CLK
EXT_CLK_1
EXT_CLK_4
EXT_CLK_3
VPU_PLL_CLK
ARM_PLL_CLK
DRAM_PLL_CLK
SYSTEM_PLL1_CLK
SYSTEM_PLL2_CLK
SYSTEM_PLL3_CLK
32K_REF_CLK
VIDEO_PLL1_CLK
24M_REF_CLK
AUDIO_PLL1_CLK
AUDIO_PLL2_CLK
LPCG
POST[MUX_A]
POST[MUX_A]
POST[SELECT]
cg CCGR87
GPU_AXI_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
POST[MUX_B]
POST[MUX_A]
POST[MUX_A]
POST[SELECT]
cg CCGR87
GPU_AHB_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
POST[MUX_B]
POST[MUX_A]
POST[MUX_A]
POST[SELECT]
cg
NOC_CLK_ROOT
POST[MUX_B] cg
cg POST[POST_PODF]
POST[MUX_B]
POST[MUX_A]
POST[MUX_A]
POST[SELECT]
cg
NOC_APB_CLK_ROOT
POST[MUX_B]
cg POST[POST_PODF]
POST[MUX_B] AHB_CLK_ROOT
POST[MUX_A]
POST[MUX_A] cg
POST[SELECT]
cg IPG[POST_PODF]
IPG_CLK_ROOT
POST[MUX_B] cg
cg AHB[POST_PODF]
POST[MUX_B] AUDIO_AHB_CLK_ROOT
POST[MUX_A]
POST[MUX_A]
cg
POST[SELECT]
cg IPG[POST_PODF]
AUDIO_IPG_CLK_ROOT
POST[MUX_B] cg
cg AHB[POST_PODF]
POST[MUX_B]
POST[MUX_A]
POST[MUX_A] CCGR5
PRE[PRE_PODF_A] POST[POST_PODF]
DRAM_ALT_CLK_ROOT
cg cg
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A] POST[POST_PODF] CCGR5
DRAM_APB_CLK_ROOT
cg cg
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A] POST[POST_PODF] CCGR86
VPU_G1_CLK_ROOT
cg cg
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A] POST[POST_PODF] CCGR90
VPU_G2_CLK_ROOT
cg cg
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A] POST[POST_PODF] CCGR93
DISPLAY_DC8000_CLK_ROOT
cg cg
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A] POST[POST_PODF]
PCIE_PHY_CLK_ROOT
cg
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A] POST[POST_PODF] CCGR37
PCIE_AUX_CLK_ROOT
cg cg
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A] POST[POST_PODF]
DC_PIXEL_CLK_ROOT
cg
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A] POST[POST_PODF]
LCDIF_PIXEL_CLK_ROOT
cg
POST[MUX_A]
POST[MUX_A] PRE[PRE_PODF_A] POST[POST_PODF] CCGR51
SAI1_CLK_ROOT
cg cg
SYSTEM_PLL1_DIV20
SYSTEM_PLL2_DIV20
SYSTEM_PLL1_DIV10
SYSTEM_PLL2_DIV10
SYSTEM_PLL1_DIV2
SYSTEM_PLL1_DIV3
SYSTEM_PLL1_DIV4
SYSTEM_PLL1_DIV5
SYSTEM_PLL1_DIV6
SYSTEM_PLL1_DIV8
SYSTEM_PLL2_DIV2
SYSTEM_PLL2_DIV3
SYSTEM_PLL2_DIV4
SYSTEM_PLL2_DIV5
SYSTEM_PLL2_DIV6
SYSTEM_PLL2_DIV8
EXT_CLK_2
GPU_PLL_CLK
EXT_CLK_1
EXT_CLK_4
EXT_CLK_3
VPU_PLL_CLK
ARM_PLL_CLK
DRAM_PLL_CLK
SYSTEM_PLL1_CLK
SYSTEM_PLL2_CLK
SYSTEM_PLL3_CLK
32K_REF_CLK
VIDEO_PLL1_CLK
24M_REF_CLK
AUDIO_PLL1_CLK
AUDIO_PLL2_CLK
SYSTEM_PLL2_DIV20
SYSTEM_PLL1_DIV10
SYSTEM_PLL2_DIV10
SYSTEM_PLL1_DIV2
SYSTEM_PLL1_DIV3
SYSTEM_PLL1_DIV4
SYSTEM_PLL1_DIV5
SYSTEM_PLL1_DIV6
SYSTEM_PLL1_DIV8
SYSTEM_PLL2_DIV2
SYSTEM_PLL2_DIV3
SYSTEM_PLL2_DIV4
SYSTEM_PLL2_DIV5
SYSTEM_PLL2_DIV6
SYSTEM_PLL2_DIV8
EXT_CLK_2
GPU_PLL_CLK
EXT_CLK_1
EXT_CLK_4
EXT_CLK_3
VPU_PLL_CLK
ARM_PLL_CLK
DRAM_PLL_CLK
SYSTEM_PLL1_CLK
SYSTEM_PLL2_CLK
SYSTEM_PLL3_CLK
32K_REF_CLK
VIDEO_PLL1_CLK
24M_REF_CLK
AUDIO_PLL1_CLK
AUDIO_PLL2_CLK
SYSTEM_PLL2_DIV20
SYSTEM_PLL1_DIV10
SYSTEM_PLL2_DIV10
SYSTEM_PLL1_DIV2
SYSTEM_PLL1_DIV3
SYSTEM_PLL1_DIV4
SYSTEM_PLL1_DIV5
SYSTEM_PLL1_DIV6
SYSTEM_PLL1_DIV8
SYSTEM_PLL2_DIV2
SYSTEM_PLL2_DIV3
SYSTEM_PLL2_DIV4
SYSTEM_PLL2_DIV5
SYSTEM_PLL2_DIV6
SYSTEM_PLL2_DIV8
EXT_CLK_2
GPU_PLL_CLK
EXT_CLK_1
EXT_CLK_4
EXT_CLK_3
VPU_PLL_CLK
ARM_PLL_CLK
DRAM_PLL_CLK
SYSTEM_PLL1_CLK
SYSTEM_PLL2_CLK
SYSTEM_PLL3_CLK
32K_REF_CLK
VIDEO_PLL1_CLK
25M_REF_CLK
AUDIO_PLL1_CLK
AUDIO_PLL2_CLK
When the system enters low-power mode that requires the shutdown of
IPG_CLK_ROOT, the CKIL Synchonrizer will be bypassed and fed directly from the
XTALOSC 32K source.
NOTE
CKIL_SYNC needs to be configured the same as the PLL for
ipg_clk
5.1.5.3.4 8 to 1 Multiplexer
The 8-to-1 multiplexer is a combinational multiplexer that can switch anytime. The
multiplexer output does not guarantee a clean clock signal. The output clock path from
the multiplexer must be clock gated before changing the multiplexer selection. This will
insure a clean clock source change.
Clock Root 1
Clock Slice 1
...
Clock Root N
Clock Slice N
The following figure illustrates the CCM clock components that a clock slice can
comprise of, and the associated register controls. Not all clock slice types will comprise
of all the components provided in the figure below. Please refer to the following sections
to identify the components included in particular clock slice type. The slice shown below
is comprised of a post divider and a clock switching multiplexer with 2 input sources.
Each input source has a pre-divider, a clock gate and a clock multiplexer inside.
CCM_PREn[MUX_A]
clk 0
clk 1
MUX_A
CCM_PREn[EN_A]
clk 2
clk 3 CG
clk 4
clk 5 CCM_PREn[PRE_PODF_A]
CCM_POSTn[SELECT]
clk 6
clk 7 PRE_PODF_A
MUX
POST_PODF
PRE_PODF_B
CCM_POSTn[POST_PODF]
MUX_B
CCM_PREn[PRE_PODF_B]
CG
CCM_PREn[EN_B]
CCM_PREn[MUX_B]
clk 0
clk 1
MUX_A
clk 2
clk 3
CG
clk 4
clk 5
clk 6
clk 7
MUX
POST_PODF
MUX_B
CG
post-divider is six bits. The two 8-to-1 multiplexers are not glitch-less, so switching
should only be done when they are clock gated to prevent propagation glitches. The eight
clock selections are the same for MUX_A and MUX_B.
clk 0
clk 1
MUX_A
clk 2
clk 3 CG
clk 4
clk 5
clk 6
clk 7 PRE_PODF_A
MUX
POST_PODF
PRE_PODF_B
MUX_B
CG
clk 0
clk 1
clk 2
MUX_A
clk 3
clk 4 CG PRE_PODF_A POST_PODF
clk 5
clk 6
clk 7
The fractional PLL consists of a phase-frequency detector (PFD), charge pump, voltage
controller oscillator (VCO), a 6-bit pre divider, 10-bit main divider, a 3-bit scaler, a delta-
sigma modulator (DSM) and an automatic frequency control (AFC).
The figure below shows the Fractional PLL block diagram.
AFC_ENB
EXTAFC[4:0]
MUX
ICP[2:0] AFC_CODE[4:0]
5
FREF
Phase UP Voltage
Charge VCOOUT FOUT
Pre-Divider Frequency Controlled Scaler
FIN FEED Pump
Detector DN Oscillator
Main /2Divider
K[15:0] Divider
SEL_PF[1:0]
20 10
Modulation
SSCG_EN DSM
Control
FSEL
MUX
FEED
FREF
AFC_ENB
FEED AFC
AFC_CODE[4:0]
FEED_EN
Programmable CCM_ANALOG_xx_FDIV_CTL0[PLL_PRE_DIV]
Pre-Divider Main Divider
FVCO/m
(m)
Programmable CCM_ANALOG_xx_FDIV_CTL0[PLL_MAIN_DIV]
Main Divider
Programmable CCM_ANALOG_xx_FDIV_CTL0[PLL_POST_DIV]
Post-Divider
Clock generation inside the CCM creates a clock root for on-chip peripherals. Before the
clock root goes into peripherals via low power clock gating cells. By controlling these
LPCGs, CCM can manage on-chip peripheral clocks.
Clock gate controls use active clock gating, which means the low power clock gating
(LPCG) requires an active clock root. The clock generation module only performs
multiplexing, gating and dividing on clock sources. Therefore, the clock root from the
generation module will stop when the corresponding clock source stops.
The ENABLE bit must be set for the clock root that LPCG is actively gating.
Access controls on clock root generation are independent between every clock root. A
sticky authentic fail flag is set when a domain writes to a register and authentication fails.
The access control logic contains a whitelist and a semaphore. By default, each clock
root's access control logic is disabled after power-on reset. Software can enable access
control anytime after reset.
NOTE
Once access logic is enabled, it cannot be disabled until the
next power-on reset.
Table 5-3. Whitelist
Enabled Write access will be authenticated before being performed.
Disabled every access on protected item will be performed.
NOTE
Only domains that are on the whitelist can perform write access
to this clock root when access control is enabled.
Table 5-4. Semaphore
Enabled A domain must obtain the semaphore’s ownership before its write access can be
authenticated. Only a domain on the whitelist can obtain the ownership and the
ownership will last until the domain explicitly releases the ownership. Semaphore
obtain will fail if it is already fetched by some other domain.
Disabled Authentic check will check only on whitelist.
NOTE
Semaphore is intended to help software keep the clock root
from unexpectedly changing.
Access control of clock gate and clock source control is performed in a simple operation.
Every domain can only write on the bits for it's own setting. Any write to irrespective
domain will be ignored.
If the core clock is set lower that one third of the IPG clock, SRC needs to generate a
longer reset signal to match the requirement from the Arm core. This typically happens
when the Arm core runs at some divided value of the XTAL 24M while IPG clock is
supplied by the PLL.
DRAM clock
The DRAM PHYM clock needs a clock frequency faster that 400MHz.
USB OTG CLOCK
The USB clock may not be a reliable clock source in some applications. This clock may
stop when USB cable is disconnected.
• Needed in RUN
• Needed in RUN and WAIT
• Needed in RUN, WAIT, and STOP
CCM only takes action while domain status are switching between STOP (DEEP SLEEP
mode is considered the same as STOP). There are 4 domains that can be assigned. Any
CPU platform can be assigned to any domain by RDC. If a domain is empty, the domain
is considered as STOP.
Each domain can declare its dependency to CCM. The use of any clock, without
declaring it in its own domain, is not permitted. A domain declares its dependency on a
clock by writing the dependency level. Settings against behavior in low-power mode are
as follows:
Table 5-5. Domain Dependency
Domain Level Run Wait Stop / Deep sleep
0
1 Required
2 Required Required
3 Required Required Required
Each domain can change only bits assigned to control access. Any irrelevant write to it
will be ignored. For example, Domain 0 can only write to bits [1:0]. Any bits written to,
other than bits [1:0], will be ignored. Other domains can read all of the other domain
settings. The default value for domain 0 is 2, and will enter STOP mode after shutting
down. When the default value of the other domain setting is 0, it will not be required.
When setting clock source, the settings will not take effect immediately. The setting will
enter the shadow register first. If a PLL shutdown or new setting enters the shadow
register to declare dependency on the PLL, the PLL will turn on immediately. When the
PLL is ready, the setting in shadow register will be updated to the new setting. During
this period, the pending bit will be set and cleared. Then CCM will send the PLL control
signal as a shadow register and inform GPC the PLL status according to the setting
register. In other cases, the setting will be updated from the shadow register immediately.
Clock sources have dependency on each other.
NOTE
Do not shutdown the parent clock when the required child clock
is active. Attempting to do so will lead to unpredicable and
unrecoverable behavior. It is recommended to shutdown the
parent clock and child clock together.
Each domain can change only bits assigned to control access. Any irrelevant write to it
will be ignored. For example, Domain 0 can only write to bits [1:0]. Any bits written to,
other than bits [1:0], will be ignored. Other domains can read all of the other domain
settings. The default value for domain 0 is 2, and will enter STOP mode after shutting
down. When the default value of the other domain setting is 0, it will not be required.
The table below lists the CCM Clock Gating Register (CCGR) and associated offset for
each LPCG enable.
NOTE
Not all CCGRs are mapped.
NOTE
Sec_debug clock gating (CCGR60) must be active in low
power mode. DO NOT gate this clock in low power mode to
guarantee the low power mode functions such as stop WDOG
counting.
Table 5-9. CCGR Mapping Table
Gating Register LPCG Enable Offset
CCM_CCGR0 DVFS (GPC) 0x4000
CCM_CCGR1 Anamix 0x4010
CCM_CCGR2 CPU 0x4020
CCM_CCGR3 CSU 0x4030
CCM_CCGR4 Debug 0x4040
CCM_CCGR5 DDR1 0x4050
CCM_CCGR6 Reserved 0x4060
CCM_CCGR7 ECSPI1 0x4070
CCM_CCGR8 ECSPI2 0x4080
CCM_CCGR9 ECSPI3 0x4090
CCM_CCGR10 ENET1 0x40A0
CCM_CCGR11 GPIO1 0x40B0
CCM_CCGR12 GPIO2 0x40C0
CCM_CCGR13 GPIO3 0x40D0
CCM_CCGR14 GPIO4 0x40E0
CCM_CCGR15 GPIO5 0x40F0
CCM_CCGR16 GPT1 0x4100
CCM_CCGR17 GPT2 0x4110
CCM_CCGR18 GPT3 0x4120
CCM_CCGR19 GPT4 0x4130
CCM_CCGR20 GPT5 0x4140
CCM_CCGR21 GPT6 0x4150
GPR0
Address: 3038_0000h base + 0h offset + (4d × i), where i=0d to 3d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
GP0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
SETTING3 SETTING2 SETTING1 SETTING0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
SETTING3 SETTING2 SETTING1 SETTING0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
SETTING3 SETTING2 SETTING1 SETTING0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
SETTING3 SETTING2 SETTING1 SETTING0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
NOTE
Sec_debug clock gating (CCGR60) must be active in low
power mode. DO NOT gate this clock in low power mode to
guarantee the low power mode functions such as stop WDOG
counting.
Address: 3038_0000h base + 4000h offset + (16d × i), where i=0d to 191d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
SETTING3 SETTING2 SETTING1 SETTING0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
NOTE
Not all CCGRs are mapped. See CCGR Interface for CCGR
mapping and clock gating information.
Address: 3038_0000h base + 4004h offset + (16d × i), where i=0d to 191d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
SETTING3 SETTING2 SETTING1 SETTING0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
NOTE
Not all CCGRs are mapped. See CCGR Interface for CCGR
mapping and clock gating information.
Address: 3038_0000h base + 4008h offset + (16d × i), where i=0d to 191d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
SETTING3 SETTING2 SETTING1 SETTING0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
NOTE
Not all CCGRs are mapped. See CCGR Interface for CCGR
mapping and clock gating information.
Address: 3038_0000h base + 400Ch offset + (16d × i), where i=0d to 191d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
SETTING3 SETTING2 SETTING1 SETTING0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
Reserved
ENABLE
Reset 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved POST_PODF
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
15–6 This field is reserved.
- Reserved
POST_PODF Post divider divide number
Divider value is n + 1.
For CORE, this field is 3 bit long.
For Peripheral (IP), this field is 1 bit long.
This field does not apply to DRAM_PHYM
000000 Divide by 1
000001 Divide by 2
000010 Divide by 3
000011 Divide by 4
000100 Divide by 5
000101 Divide by 6
:
111111 Divide by 64
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
Reserved
ENABLE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved POST_PODF
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
15–6 This field is reserved.
- Reserved
POST_PODF Post divider divide the number
Divider value is n + 1.
For CORE, this field is 3 bit long.
For Peripheral (IP), this field is 1 bit long.
This field does not apply to DRAM_PHYM
000000 Divide by 1
000001 Divide by 2
000010 Divide by 3
000011 Divide by 4
000100 Divide by 5
000101 Divide by 6
:
111111 Divide by 64
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
Reserved
ENABLE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved POST_PODF
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
15–6 This field is reserved.
- Reserved
POST_PODF Post divider divide the number
Divider value is n + 1.
For CORE, this field is 3 bit long.
For Peripheral (IP), this field is 1 bit long.
This field does not apply to DRAM_PHYM
000000 Divide by 1
000001 Divide by 2
000010 Divide by 3
000011 Divide by 4
000100 Divide by 5
000101 Divide by 6
:
111111 Divide by 64
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
Reserved
ENABLE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved POST_PODF
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
15–6 This field is reserved.
- Reserved
POST_PODF Post divider divide number
Divider value is n + 1.
For CORE, this field is 3 bit long.
For Peripheral (IP), this field is 1 bit long.
This field does not apply to DRAM_PHYM
000000 Divide by 1
000001 Divide by 2
000010 Divide by 3
000011 Divide by 4
000100 Divide by 5
000101 Divide by 6
:
111111 Divide by 64
MISC
Address: 3038_0000h base + 8010h offset + (128d × i), where i=0d to 141d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AUTHEN_FAIL
R
TIMEOUT
VIOLATE
Reserved Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Misc
Address: 3038_0000h base + 8014h offset + (128d × i), where i=0d to 141d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AUTHEN_FAIL
R
TIMEOUT
VIOLATE
Reserved Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
MISC
Address: 3038_0000h base + 8018h offset + (128d × i), where i=0d to 141d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AUTHEN_FAIL
R
TIMEOUT
VIOLATE
Reserved Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
MISC
Address: 3038_0000h base + 801Ch offset + (128d × i), where i=0d to 141d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AUTHEN_FAIL
R
TIMEOUT
VIOLATE
Reserved Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Post Register
Address: 3038_0000h base + 8020h offset + (128d × i), where i=0d to 141d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BUSY2
R
SELECT
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BUSY1
R
Reserved
Reserved POST_PODF
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 select branch A
1 select branch B
27–8 This field is reserved.
- Reserved
7 Post divider is applying new set value
BUSY1
6 This field is reserved.
- Reserved
POST_PODF Post divider divide the number
Divider value is n + 1
Table continues on the next page...
000000 Divide by 1
000001 Divide by 2
000010 Divide by 3
000011 Divide by 4
000100 Divide by 5
000101 Divide by 6
:
111111 Divide by 64
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BUSY2
R
SELECT
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BUSY1
R
Reserved
Reserved POST_PODF
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 select branch A
1 select branch B
27–8 This field is reserved.
- Reserved
7 Post divider is applying new set value
BUSY1
6 This field is reserved.
- Reserved
POST_PODF Post divider divide number
Divider value is n + 1
Table continues on the next page...
000000 Divide by 1
000001 Divide by 2
000010 Divide by 3
000011 Divide by 4
000100 Divide by 5
000101 Divide by 6
:
111111 Divide by 64
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BUSY2
R
SELECT
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BUSY1
R
Reserved
Reserved POST_PODF
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 select branch A
1 select branch B
27–8 This field is reserved.
- Reserved
7 Post divider is applying new set value
BUSY1
6 This field is reserved.
- Reserved
POST_PODF Post divider divide the number
Divider value is n + 1
Table continues on the next page...
000000 Divide by 1
000001 Divide by 2
000010 Divide by 3
000011 Divide by 4
000100 Divide by 5
000101 Divide by 6
:
111111 Divide by 64
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BUSY2
R
SELECT
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BUSY1
R
Reserved
Reserved POST_PODF
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 select branch A
1 select branch B
27–8 This field is reserved.
- Reserved
7 Post divider is applying new set value
BUSY1
6 This field is reserved.
- Reserved
POST_PODF Post divider divide number
Divider value is n + 1
Table continues on the next page...
000000 Divide by 1
000001 Divide by 2
000010 Divide by 3
000011 Divide by 4
000100 Divide by 5
000101 Divide by 6
:
111111 Divide by 64
Pre Register
Address: 3038_0000h base + 8030h offset + (128d × i), where i=0d to 141d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BUSY4
BUSY3
R
Reserved
EN_A
Reset 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BUSY1
BUSY0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Clock shutdown
1 clock ON
27 This field is reserved.
- Reserved
26–24 Selection control of multiplexer of branch A
MUX_A
This field applies to DRAM and DRAM_PHYM
23–20 This field is reserved.
- Reserved
19 Pre divider value for branch A is applied
BUSY3
This field applies to DRAM and DRAM_PHYM
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
15 EN_B is applied to field
BUSY1
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
14–13 This field is reserved.
- Reserved
12 Branch B clock gate control
EN_B
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
0 Clock shutdown
1 Clock ON
11 This field is reserved.
- Reserved
10–8 Selection control of multiplexer of branch B
MUX_B
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
7–4 This field is reserved.
- Reserved
3 Pre divider value for branch a is applying
BUSY0
field does not apply for CORE, IP,DRAM, DRAM_PHYM
PRE_PODF_B Pre divider divide number for branch B
Divider value is n + 1.
This field does not apply for CORE, IP, DRAM, DRAM_PHYM
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BUSY4
BUSY3
R
Reserved
EN_A
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BUSY1
BUSY0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Clock shutdown
1 clock ON
27 This field is reserved.
- Reserved
26–24 Selection control of multiplexer of branch A
MUX_A
This field applies to DRAM and DRAM_PHYM
23–20 This field is reserved.
- Reserved
19 Pre divider value for branch A is applied
BUSY3
This field applies to DRAM and DRAM_PHYM
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
15 EN_B is applied to field
BUSY1
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
14–13 This field is reserved.
- Reserved
12 Branch B clock gate control
EN_B
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
0 Clock shutdown
1 Clock ON
11 This field is reserved.
- Reserved
10–8 Selection control of multiplexer of branch B
MUX_B
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
7–4 This field is reserved.
- Reserved
3 Pre divider value for branch A is applying
BUSY0
field does not apply for CORE, IP,DRAM, DRAM_PHYM
PRE_PODF_B Pre divider divide number for branch B
Divider value is n + 1.
This field does not apply for CORE, IP, DRAM, DRAM_PHYM
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BUSY4
BUSY3
R
Reserved
EN_A
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BUSY1
BUSY0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Clock shutdown
1 clock ON
27 This field is reserved.
- Reserved
26–24 Selection control of multiplexer of branch A
MUX_A
This field applies to DRAM and DRAM_PHYM
23–20 This field is reserved.
- Reserved
19 Pre divider value for branch A is applied
BUSY3
This field applies to DRAM and DRAM_PHYM
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
15 EN_B is applied to field
BUSY1
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
14–13 This field is reserved.
- Reserved
12 Branch B clock gate control
EN_B
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
0 Clock shutdown
1 Clock ON
11 This field is reserved.
- Reserved
10–8 Selection control of multiplexer of branch B
MUX_B
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
7–4 This field is reserved.
- Reserved
3 Pre divider value for branch A is applied
BUSY0
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
PRE_PODF_B Pre divider divide number for branch B
Divider value is n + 1.
This field does not apply for CORE, IP, DRAM, DRAM_PHYM
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BUSY4
BUSY3
R
Reserved
EN_A
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BUSY1
BUSY0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Clock shutdown
1 clock ON
27 This field is reserved.
- Reserved
26–24 Selection control of multiplexer of branch A
MUX_A
This field applies to DRAM and DRAM_PHYM
23–20 This field is reserved.
- Reserved
19 Pre divider value for branch A is applied
BUSY3
This field applies to DRAM and DRAM_PHYM
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
15 EN_B is applied to field
BUSY1
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
14–13 This field is reserved.
- Reserved
12 Branch B clock gate control
EN_B
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
0 Clock shutdown
1 Clock ON
11 This field is reserved.
- Reserved
10–8 Selection control of multiplexer of branch B
MUX_B
This field does not apply for CORE, IP,DRAM, DRAM_PHYM
7–4 This field is reserved.
- Reserved
3 Pre divider value for branch a is applied
BUSY0
field does not apply for CORE, IP,DRAM, DRAM_PHYM
PRE_PODF_B Pre divider divide number for branch B
Divider value is n + 1.
This field does not apply for CORE, IP, DRAM, DRAM_PHYM
000 Divide by 1
001 Divide by 2
010 Divide by 3
011 Divide by 4
100 Divide by 5
101 Divide by 6
110 Divide by 7
111 Divide by 8
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DOMAIN3_WHITELIST
DOMAIN2_WHITELIST
DOMAIN1_WHITELIST
DOMAIN0_WHITELIST
R OWNER_ID
SEMA_EN
MUTEX
LOCK
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 domaino
1 domain1
2 domain2
3 domain3
15–12 Information from domain 3 to pass to others
DOMAIN3_INFO
This field can only be changed by domain 3
11–8 Information from domain 2 to pass to others
DOMAIN2_INFO
This field can only be changed by domain 2
7–4 Information from domain 1 to pass to others
DOMAIN1_INFO
This field can only be changed by domain 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DOMAIN3_WHITELIST
DOMAIN2_WHITELIST
DOMAIN1_WHITELIST
DOMAIN0_WHITELIST
R OWNER_ID
SEMA_EN
MUTEX
LOCK
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Disable
1 Enable
27 White list of domains that can change setting of this clock root.
DOMAIN3_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
26 White list of domains that can change setting of this clock root.
DOMAIN2_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
25 White list of domains that can change setting of this clock root.
DOMAIN1_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
24 White list of domains that can change setting of this clock root.
DOMAIN0_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
23–21 This field is reserved.
- Reserved
20 Semaphore to control access
MUTEX
0 Semaphore is free to take
1 Semaphore is taken
Write 0 Release semaphore
Write 1 Acquire semaphore
19–18 This field is reserved.
- Reserved
17–16 Current domain that owns semaphore
OWNER_ID
This field is meaningless when MUTEX is 0
0 domaino
1 domain1
2 domain2
3 domain3
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DOMAIN3_WHITELIST
DOMAIN2_WHITELIST
DOMAIN1_WHITELIST
DOMAIN0_WHITELIST
R OWNER_ID
SEMA_EN
MUTEX
LOCK
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Disable
1 Enable
27 White list of domains that can change setting of this clock root.
DOMAIN3_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
26 White list of domains that can change setting of this clock root.
DOMAIN2_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
25 White list of domains that can change setting of this clock root.
DOMAIN1_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
24 White list of domains that can change setting of this clock root.
DOMAIN0_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
23–21 This field is reserved.
- Reserved
20 Semaphore to control access
MUTEX
0 Semaphore is free to take
1 Semaphore is taken
Write 0 Release semaphore
Write 1 Acquire semaphore
19–18 This field is reserved.
- Reserved
17–16 Current domain that owns semaphore
OWNER_ID
This field is meaningless when MUTEX is 0
0 domaino
1 domain1
2 domain2
3 domain3
15–12 Information from domain 3 to pass to others
DOMAIN3_INFO
This field can only be changed by domain 3
11–8 Information from domain 2 to pass to others
DOMAIN2_INFO
This field can only be changed by domain 2
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DOMAIN3_WHITELIST
DOMAIN2_WHITELIST
DOMAIN1_WHITELIST
DOMAIN0_WHITELIST
R OWNER_ID
SEMA_EN
MUTEX
LOCK
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Disable
1 Enable
27 White list of domains that can change setting of this clock root.
DOMAIN3_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
26 White list of domains that can change setting of this clock root.
DOMAIN2_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
25 White list of domains that can change setting of this clock root.
DOMAIN1_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
24 White list of domains that can change setting of this clock root.
DOMAIN0_
Each domain has a corresponding bit.
WHITELIST
0 Domain cannot change the setting
1 Domain can change the setting
23–21 This field is reserved.
- Reserved
20 Semaphore to control access
MUTEX
0 Semaphore is free to take
1 Semaphore is taken
Write 0 Release semaphore
Write 1 Acquire semaphore
19–18 This field is reserved.
- Reserved
17–16 Current domain that owns semaphore
OWNER_ID
This field is meaningless when MUTEX is 0
0 domaino
1 domain1
Table continues on the next page...
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL_LOCK
PLL_EXT_BYPASS
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PLL_CLKE_OVERRIDE
PLL_RST_OVERRIDE
R
PLL_BYPASS
PLL_CLKE
Reset 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved PLL_MAIN_DIV
Reset 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
PLL_MAIN_DIV Reserved PLL_PRE_DIV PLL_POST_DIV
Reset 0 1 0 1 0 0 0 0 0 0 1 1 0 0 1 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved PLL_DSM
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SSCG_EN
Reserved PLL_MFREQ_CTL
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
00 Down spread
01 Up spread
1x Center spread
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PBIAS_CTRL_EN
R
AFCINIT_SEL
PBIAS_CTRL
AFC_SEL
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
FEED_EN
AFC_EN
FSEL Reserved EXTAFC ICP
Reset 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL_LOCK
PLL_EXT_BYPASS
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PLL_CLKE_OVERRIDE
PLL_RST_OVERRIDE
R
PLL_BYPASS
PLL_CLKE
Reset 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved PLL_MAIN_DIV
Reset 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
PLL_MAIN_DIV Reserved PLL_PRE_DIV PLL_POST_DIV
Reset 0 1 0 1 0 0 0 0 0 0 1 1 0 0 1 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved PLL_DSM
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SSCG_EN
Reserved PLL_MFREQ_CTL
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
00 Down spread
01 Up spread
1x Center spread
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PBIAS_CTRL_EN
R
AFCINIT_SEL
PBIAS_CTRL
AFC_SEL
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
FEED_EN
AFC_EN
FSEL Reserved EXTAFC ICP
Reset 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL_LOCK
PLL_EXT_BYPASS
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PLL_CLKE_OVERRIDE
PLL_RST_OVERRIDE
R
PLL_BYPASS
PLL_CLKE
Reset 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved PLL_MAIN_DIV
Reset 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
PLL_MAIN_DIV Reserved PLL_PRE_DIV PLL_POST_DIV
Reset 0 1 0 1 0 0 0 0 0 0 1 1 0 0 1 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved PLL_DSM
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SSCG_EN
Reserved PLL_MFREQ_CTL
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
00 Down spread
01 Up spread
1x Center spread
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PBIAS_CTRL_EN
R
AFCINIT_SEL
PBIAS_CTRL
AFC_SEL
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
FEED_EN
AFC_EN
FSEL Reserved EXTAFC ICP
Reset 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL_LOCK
PLL_EXT_BYPASS
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PLL_CLKE_OVERRIDE
PLL_RST_OVERRIDE
R
PLL_BYPASS
PLL_CLKE
Reset 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved PLL_MAIN_DIV
Reset 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
PLL_MAIN_DIV Reserved PLL_PRE_DIV PLL_POST_DIV
Reset 1 1 0 0 0 0 0 0 0 0 1 1 0 0 1 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved PLL_DSM
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SSCG_EN
Reserved PLL_MFREQ_CTL
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
00 Down spread
01 Up spread
1x Center spread
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PBIAS_CTRL_EN
R
AFCINIT_SEL
PBIAS_CTRL
AFC_SEL
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
FEED_EN
AFC_EN
FSEL Reserved EXTAFC ICP
Reset 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL_LOCK
R
PLL_EXT_BYPASS
PLL_LOCK_SEL
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PLL_CLKE_OVERRIDE
PLL_RST_OVERRIDE
PLL_BYPASS
PLL_CLKE
PLL_ PAD_CLK_ PLL_REF_
Reserved Reserved
RST SEL CLK_SEL
Reset 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved PLL_MAIN_DIV
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1
Reset 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
PBIAS_CTRL_EN
R
AFCINIT_SEL
FOUT_MASK
PBIAS_CTRL
AFC_SEL
LRD_EN
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
FEED_EN
Reserved
AFC_EN
FSEL Reserved EXTAFC ICP
Reset 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL_LOCK
R
PLL_EXT_BYPASS
PLL_LOCK_SEL
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PLL_CLKE_OVERRIDE
PLL_RST_OVERRIDE
PLL_BYPASS
PLL_CLKE
PLL_ PAD_CLK_ PLL_REF_
Reserved Reserved
RST SEL CLK_SEL
Reset 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved PLL_MAIN_DIV
Reset 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 1 1 0 0 0 0 0 0 0 0 1 1 0 0 1 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL_LOCK
R
PLL_EXT_BYPASS
PLL_LOCK_SEL
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PLL_CLKE_OVERRIDE
PLL_RST_OVERRIDE
PLL_BYPASS
PLL_CLKE
PLL_ PAD_CLK_ PLL_REF_
Reserved Reserved
RST SEL CLK_SEL
Reset 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved PLL_MAIN_DIV
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 1 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL_LOCK
PLL_DIV20_CLKE_OVERRIDE
PLL_DIV10_CLKE_OVERRIDE
PLL_DIV8_CLKE_OVERRIDE
PLL_DIV6_CLKE_OVERRIDE
PLL_DIV5_CLKE_OVERRIDE
PLL_DIV4_CLKE_OVERRIDE
R
PLL_EXT_BYPASS
PLL_DIV20_CLKE
PLL_DIV10_CLKE
PLL_DIV8_CLKE
PLL_DIV6_CLKE
PLL_DIV5_CLKE
PLL_DIV4_CLKE
PLL_LOCK_SEL
Reserved
Reset 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R PLL_DIV3_CLKE_OVERRIDE
PLL_DIV2_CLKE_OVERRIDE
PLL_CLKE_OVERRIDE
PLL_RST_OVERRIDE
PLL_DIV3_CLKE
PLL_DIV2_CLKE
PLL_BYPASS
PLL_CLKE
PLL_ PAD_CLK_ PLL_REF_
Reserved
RST SEL CLK_SEL
Reset 1 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved PLL_MAIN_DIV
Reset 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0
PBIAS_CTRL_EN
R
AFCINIT_SEL
FOUT_MASK
PBIAS_CTRL
AFC_SEL
LRD_EN
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
FEED_EN
Reserved
AFC_EN
Reset 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL_LOCK
PLL_DIV20_CLKE_OVERRIDE
PLL_DIV10_CLKE_OVERRIDE
PLL_DIV8_CLKE_OVERRIDE
PLL_DIV6_CLKE_OVERRIDE
PLL_DIV5_CLKE_OVERRIDE
PLL_DIV4_CLKE_OVERRIDE
R
PLL_EXT_BYPASS
PLL_DIV20_CLKE
PLL_DIV10_CLKE
PLL_DIV8_CLKE
PLL_DIV6_CLKE
PLL_DIV5_CLKE
PLL_DIV4_CLKE
PLL_LOCK_SEL
Reserved
Reset 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R PLL_DIV3_CLKE_OVERRIDE
PLL_DIV2_CLKE_OVERRIDE
PLL_CLKE_OVERRIDE
PLL_RST_OVERRIDE
PLL_DIV3_CLKE
PLL_DIV2_CLKE
PLL_BYPASS
PLL_CLKE
PLL_ PAD_CLK_ PLL_REF_
Reserved
RST SEL CLK_SEL
Reset 1 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved PLL_MAIN_DIV
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 1 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1
Reset 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PLL_LOCK
R
PLL_EXT_BYPASS
PLL_LOCK_SEL
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PLL_CLKE_OVERRIDE
PLL_RST_OVERRIDE
PLL_BYPASS
PLL_CLKE
PLL_ PAD_CLK_ PLL_REF_
Reserved Reserved
RST SEL CLK_SEL
Reset 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved PLL_MAIN_DIV
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 1 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OSC_32K_SEL
R
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5.1.8.38 PLL Clock Output for Test Enable and Select Register
(CCM_ANALOG_ANAMIX_PLL_MNIT_CTL)
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
OUTPUT_CKE
R
CLKOUT2_
CLKOUT2_OUTPUT_DIV_
Reserved CLKOUT2_OUTPUT_SEL
VAL
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OUTPUT_CKE
R
CLKOUT1_
CLKOUT1_OUTPUT_DIV_
Reserved CLKOUT1_OUTPUT_SEL
VAL
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DIGPROG Register
Address: 3036_0000h base + 800h offset = 3036_0800h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0
5.2.1 Overview
The General Power Controller (GPC) module controls the following functions:
• Provide low power mode control for A53 and M4 platform
• Provide Power domain management all Arm and SOC power domain
• Provide domain control mechanism based on A53 and M4 CPU domain
• Provide handshake with CCM for clock management in low power mode
• Provide handshake with SRC for power down and power up sequence
• Provide handshake with Analog for Deep Sleep Mode control
5.2.2 Features
The General Power Controller (GPC) module controls the following functions:
• Support programmable feature for WAIT/STOP/DSM low power mode
• Support time slot based power domain control
• Support flexible sleep and wakeup condition
• Support domain control for multi CPU platforms system
• All register accessed by IP bus
• Interface for the following IPs:
• CCM – clock controller module
• SRC – system reset controller
• ANALOG – miscellaneous analog control
Handshake with
analog and PMIC
interrupt
LPM Quad A53 LPM M4
wfi
DSM Control
SMC
Power state
Timeslot PGC_2
...
Control
PGC_PDN
PGTSC
Power signal
The GPC module contains two sub-modules: System Mode Controller (SMC) and Power
Gating Time Slot Control (PGTSC):
• GPC Top: the top level GPC. It also includes the top memory map and registers,
domain control information, and memory low power control.
• System Mode Controller (SMC):
• The SMC supports two low power modes (LPM), WAIT and STOP. Each LPM
corresponds to one mode for A53 platform and one mode for M4 platform.
GPC_SLPCR[EN_A53_FASTWUP_WAIT_MODE] and
GPC_SLPCR[EN_M4_FASTWUP_WAIT_MODE]
• CPU clock can be defined been shut off or not in wait for each CPU platform.
(GPC_LPCR_A53_BSC[CPU_CLK_ON_LPM] and
GPC_LPCR_M4[CPU_CLK_ON_LPM])
• Power of different power domain can be defined be shut off or not in wait mode for
each platform domain
• Some peripherals may go to wait mode along with A53 or M4 platform.
NOTE
CCM configuration must make sure close all PLLs before
system goes to DSM
NOTE
For the SoC to correctly power up after entering DSM,
CCM_PLL_CTRLx must not be set to 0x0 or 0x3 for any
domain in use.
RUN
LPM = 10
AND ~dsm_request
dsm_request LPM = 01 OR
AND AND dsm_wakeup
~dsm_wakeup ~dsm_request dsm_request
OR AND
dsm_wakeup ~dsm_wakeup
STOP WAIT
dsm_request dsm_request
AND gpc_pup_ack AND gpc_pup_ack
~dsm_wakeup ~dsm_wakeup
STOP_PGC WAIT_PGC
• The CPU platforms share the same IRQ sources in this chip. Software can use
GPC_IMRn_CORE0_A53, GPC_IMRn_CORE1_A53, GPC_IMRn_CORE2_A53,
GPC_IMRn_CORE3_A53, and GPC_IMRn_M4 to separate the 128 bits IRQ
sources to A53 core0, core1, core2, and core3, and M4 platform.
• The A53 core0, core1, core2, and core3 IRQ can also be from GIC source (defined
by GPC_LPCR_A53_BSC[IRQ_SRC_C3], GPC_LPCR_A53_BSC[IRQ_SRC_C2],
GPC_LPCR_A53_BSC[IRQ_SRC_C1], and
GPC_LPCR_A53_BSC[IRQ_SRC_C0]) and if it is chosen from GIC source the
GPC_IMRn_x_A53 will lose its function. See Power control for A53 Platform for
more information.
• Interrupts for both A53 and M4 will cause the system wake up from DSM, A53
interrupt will wake up A53 from LPM, M4 interrupt will wake up M4 from LPM.
PGC
Higher-level pdn_req isolation
Componenet Target
pup_req
Subsystem
pdn_ack switch_b
pup_ack
module_clk pwrgate_rst_b
enable_clk
IDLE
any No
hw_*_req asserted
Yes
.....
NOTE
PGC_SCU should be “always-on” to PGC_C0 PGC_C1,
PGC_C2, and PGC_C3. This means PGC_SCU should be
power up earlier than PGC_C0/PGC_C1/PGC_C2/PGC_C3
and should be power down later than PGC_C0/PGC_C1/
PGC_C2/PGC_C3 (see example code 1 and 2). If we arrange
A53 Cx/A53 SCU power down/up in same slot, special setting
is required (see example code 2).
NOTE
When the system enters/exists ALL_OFF or L2_RETENTION
mode, PGC_MF should be power up earlier than PGC_C0/
PGC_C1/PGC_C2/PGC_C3/PGC_SCU. We can arrange MIX
PGC power up in earlier slot than A53 Cx/SCU power up slot
(See example code 1 and 2).
pup_req
PGC_mf
time
NOTE
If a PGC is mapped to two CPU domain (refer to “Domain
control for PGCs ”for more information), it cannot be selected
as the power down acknowledge for both of the CPU platform.
“PGC_ACK_SEL_A53”, "PGC_ACK_SEL_A53_PU", and
“PGC_ACK_SEL_M4” are should be chosen for the last PGC
in power up or power down sequence in the time slot. If there is
no PGC be power up/power down with LPM sequence, the
“dummy” acknowledge should be selected. Only one PGC
NOTE
In all six power states, “ALL_ON”, “THREE_CPU_ON",
"TWO_CPU_ON", and "ONE_CPU_ON" can exist in all RUN,
WAIT or STOP mode of A53 platform. “L2_RETENTION”
and “ALL_OFF” can only exist in WAIT or STOP mode of
A53 platform.
5.2.6.2.1 Power down of Core0, Core1, Core2, and Core3 in the A53
Platform
The power of core0, core1, core2, and core3 can be shut off along with the LPM process,
as show in the following figure:
SCU WFI
&
Core2 WFI Core3 WFI
WAIT/STOP
Core0 Core3
Power-down Power-down
Core1 Core2
Power-down Power-down
WAIT_PGC
STOP_PGC
WFIs from A53 platform will trigger the A53 platform LPM and the power of core0,
core1, core2, or core3 will be shut off when “lpcr_a53_ad.en_c0_pdn”,
“lpcr_a53_ad.en_c1_pdn”, “lpcr_a53_ad.en_c2_pdn”, or “lpcr_a53_ad.en_c3_pdn”
enabled in this process. This mode should be used when core0 is used as the leading core
of A53 platform.
The power of core0, core1, core2, and core3 can also be shut off in RUN mode: in this
mode “LPCR_A53_AD.en_c0_wfi_pdn”, “LPCR_A53_AD.en_c1_wfi_pdn”,
“LPCR_A53_AD.en_c2_wfi_pdn”, and “LPCR_A53_AD.en_c3_wfi_pdn” should be set
and the condition to trigger A53 LPM will be some different:
Core0 Core1
Power-down Power-down
ACK ACK
Core2 SCU WFI Core3
Power-down Power-down
ACK ACK
Core0 Core1
Power-down Power-down
Core2 Core3
Power-down Power-down
&
WAIT/STOP
WAIT_PGC
STOP_PGC
Figure 5-16. Power down of Core0, Core1, Core2, and Core3 in RUN mode
As show in the table above, core0/core1/core2/core3 can only be power up by its own
interrupt in RUN mode of A53 platform.
There are three combination of
{LPCR_A53_BSC[30],LPCR_A53_BSC[23:22],LPCR_A53_BSC[29:28]}:
1. In the first case, “IMRn_CORE0_A53, IMRn_CORE1_A53, IMRn_CORE2_A53,
IMRn_CORE3_A53“ are used to separate the 128 bits interrupts for core0, core1,
core2, and core3 of A53 platform and also used as the interrupt mask for A53 LPM.
2. In the second case, “IMRn_CORE0_A53, IMRn_CORE1_A53,
IMRn_CORE2_A53, IMRn_CORE3_A53” are not used, GIC setting are used to
separate interrupts for core0, core1, core2, and core3 of A53 platform and also used
as the interrupt mask for A53 LPM.
3. In the third case, “IMRn_CORE0_A53, IMRn_CORE1_A53, IMRn_CORE2_A53,
IMRn_CORE3_A53” is used as the mask for interrupt for A53 LPM, GIC setting are
used to separate interrupts for core0, core1, core2, and core3.
//A53/M4 both enters into low power mode. A53/M4 are in different master domain.
//MIX are mapping to both A53 and M4
//after A53/M4 enters into low power mode, MIX will be also power down.A53/M4 enters into
low power mode any time
//either A53 or M4 exists from low power mode, MIX will be also power up
//IMRx_CORE0_A53
reg32_write(GPC_IPS_BASE_ADDR + 0x30, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x34, 0xFF7FFFFF);
//[23] : GPT1 used as ARM wakeup source
reg32_write(GPC_IPS_BASE_ADDR + 0x38, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x3C, 0xFFFFFFFF);
//IMRx_CORE1_A53
reg32_write(GPC_IPS_BASE_ADDR + 0x40, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x44, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x48, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x4C, 0xFFFFFFFF);
//IMRx_CORE2_A53
reg32_write(GPC_IPS_BASE_ADDR + 0x1C0, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1C4, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1C8, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1CC, 0xFFFFFFFF);
//IMRx_CORE3_A53
reg32_write(GPC_IPS_BASE_ADDR + 0x1D0, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1D4, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1D8, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1DC, 0xFFFFFFFF);
//IMRx_M4
reg32_write(GPC_IPS_BASE_ADDR + 0x50, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x54, 0xFFBFFFFF);
delay(50);
//GPU power on
reg32_write(CCM_CCGR(87),0x02); //bus clock on
delay(20);
reg32_write(CCM_CCGR(87),0x00); //bus clock off
reg32setbit(0x303A00F8,7); //PU_PGC_SW_PUP_REQ
delay(20);
reg32_write(CCM_CCGR(87),0x02); //bus clock on
reg32setbit(0x303A01FC,11); //clear power down request to ADB
while(!((reg32_read(0x303A01FC)) & (0x01lt;lt;29))); //wait ADB ack 1
//GPU_2D power on
reg32_write(CCM_CCGR(102),0x02); //2D clock on
reg32setbit(0x303A00F8,6); //PU_PGC_SW_PUP_REQ
reg32setbit(0x303A01FC,10); //clear power down request to ADB
while(!((reg32_read(0x303A01FC)) & (0x01lt;lt;28))); //wait ADB ack 1
//GPU_3D power on
//Power up flow:
reg32_write(CCM_CCGR(79),0x02); //3D clock on
reg32setbit(0x303A00F8,9); //PU_PGC_SW_PUP_REQ
reg32setbit(0x303A01FC,9); //clear power down request to ADB
while(!((reg32_read(0x303A01FC)) & (0x01lt;lt;27))); //wait ADB ack 1
delay(50);
//VPU: power on
reg32_write(CCM_CCGR(99),0x02); //bus clock on
delay(20);
reg32_write(CCM_CCGR(99),0x00); //bus clock off
reg32setbit(0x303A00F8,8); //PU_PGC_SW_PUP_REQ
delay(20);
reg32_write(CCM_CCGR(99),0x02); //bus clock on
reg32_write(0x38330004, 0x7); //VPUMIX sft clock enable
reg32setbit(0x303A01FC,8); //clear power down request to ADB
while(!((reg32_read(0x303A01FC)) & (0x01lt;lt;26))); //wait ADB ack 1
//VPU_G1 power on
reg32_write(CCM_CCGR(86),0x02); //clock on
reg32setbit(0x303A00F8,11); //PU_PGC_SW_PUP_REQ
//VPU_G2 power on
reg32_write(CCM_CCGR(90),0x02); //clock on
reg32setbit(0x303A00F8,12); //PU_PGC_SW_PUP_REQ
//VPU_H1 power on
reg32_write(CCM_CCGR(89),0x02); //clock on
reg32setbit(0x303A00F8,13); //PU_PGC_SW_PUP_REQ
delay(50);
//PCIE power on
reg32_write(CCM_CCGR(37),0x02); //clock on
reg32setbit(0x303A00F8,1); //PU_PGC_SW_PUP_REQ
delay(50);
//DISP power on
reg32_write(CCM_CCGR(93),0x02); //clock on
delay(20);
reg32_write(CCM_CCGR(93),0x00); //clock on
reg32setbit(0x303A00F8,10); //PU_PGC_SW_PUP_REQ
delay(20);
reg32_write(CCM_CCGR(93),0x02); //clock on
reg32_write(0x32e28000,0x0000007f); //release dispmix sft reset
reg32_write(0x32e28004,0x00001fff); //dispmix sft clock enable
reg32setbit(0x303A01FC,7); //clear power down request to ADB
while(!((reg32_read(0x303A01FC)) & (0x01lt;lt;25))); //wait ADB ack 1
//MIPI power on
reg32setbit(0x303A00F8,0); //PU_PGC_SW_PUP_REQ
delay(50);
//DDR power on
reg32setbit(0x303A00F8,5); //PU_PGC_SW_PUP_REQ
//ARM enters into ALL_OFF(STOP) mode and enable DSM ,NOC POWER DOWN:
//after "wfi", MIX/C0/C1/C2/C3 power down in SLOT0, SCU power down in SLOT1 when
//after "GPT1_INT" arrived, MIX power up in SLOT2, SCU power up in SLOT3, C0 power up in
SLOT4
//IMRx_CORE0_A53
reg32_write(GPC_IPS_BASE_ADDR + 0x30, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x34, 0xFF7FFFFF); //[23] : GPT1 used as wakeup source
reg32_write(GPC_IPS_BASE_ADDR + 0x38, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x3C, 0xFFFFFFFF);
//IMRx_CORE1_A53
reg32_write(GPC_IPS_BASE_ADDR + 0x40, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x44, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x48, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x4C, 0xFFFFFFFF);
//IMRx_CORE2_A53
reg32_write(GPC_IPS_BASE_ADDR + 0x1C0, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1C4, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1C8, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1CC, 0xFFFFFFFF);
//IMRx_CORE3_A53
reg32_write(GPC_IPS_BASE_ADDR + 0x1D0, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1D4, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1D8, 0xFFFFFFFF);
reg32_write(GPC_IPS_BASE_ADDR + 0x1DC, 0xFFFFFFFF);
Each PGC (CPU type, MIX type, PU type) will occupy 64 Bytes address space, the
specific base address of each PGC are listed as below.
• 0x800 ~ 0x83F : PGC for A53 core0
• 0x840 ~ 0x87F: PGC for A53 core1
• 0x880 ~ 0x8BF: PGC for A53 core2
• 0x8C0 ~ 0x8FF: PGC for A53 core3
• 0x900 ~ 0x93F: PGC for A53 SCU
• 0xA00 ~ 0xA3F: Reserved
• 0xA40 ~ 0xA7F: PGC for NOC mix
• 0xC00 ~ 0xC3F: PGC for MIPI PHY
• 0xC40 ~ 0xC7F: PGC for PCIE1 PHY
• 0xC80 ~ 0xCBF: USB_OTG1
• 0xCC0 ~ 0xCFF: USB_OTG2
• 0xD00 ~ 0xD3F: Reserved
• 0xD40 ~ 0xD7F: DDR1
• 0xD80 ~ 0xDBF: GPU_2D
• 0xDC0 ~ 0xDFF: GPUMIX
• 0xE00 ~ 0xE3F: VPUMIX
• 0xE40 ~ 0xE7F: GPU_3D
• 0xE80 ~ 0xEBF: DISPMIX
• 0xEC0 ~ 0xEFF: VPU_G1
• 0xF00 ~ 0xF3F: VPU_G2
• 0xF40 ~ 0xF7F: VPU_H1
For more specific information about PGC register definition, please see the register
definition for each PGC.
GPC memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
Basic Low power control register of A53 platform 5.2.10.1/
303A_0000 32 R/W 0000_3FF0h
(GPC_LPCR_A53_BSC) 652
Advanced Low power control register of A53 platform 5.2.10.2/
303A_0004 32 R/W 0000_0020h
(GPC_LPCR_A53_AD) 655
5.2.10.3/
303A_0008 Low power control register of CPU1 (GPC_LPCR_M4) 32 R/W 0000_3FF0h
658
5.2.10.4/
303A_0014 System low power control register (GPC_SLPCR) 32 R/W E000_FF82h
660
5.2.10.5/
303A_0018 MASTER LPM Handshake (GPC_MST_CPU_MAPPING) 32 R/W 0000_00FFh
663
5.2.10.6/
303A_0020 Memory low power control register (GPC_MLPCR) 32 R/W 0101_0100h
664
PGC acknowledge signal selection of A53 platform 5.2.10.7/
303A_0024 32 R/W 8000_8000h
(GPC_PGC_ACK_SEL_A53) 665
PGC acknowledge signal selection of M4 platform 5.2.10.8/
303A_0028 32 R/W 8000_8000h
(GPC_PGC_ACK_SEL_M4) 667
5.2.10.9/
303A_002C GPC Miscellaneous register (GPC_MISC) 32 R/W 0000_0021h
668
IRQ masking register 1 of A53 core0 5.2.10.10/
303A_0030 32 R/W 0000_0000h
(GPC_IMR1_CORE0_A53) 669
IRQ masking register 2 of A53 core0 5.2.10.11/
303A_0034 32 R/W 0000_0000h
(GPC_IMR2_CORE0_A53) 670
IRQ masking register 3 of A53 core0 5.2.10.12/
303A_0038 32 R/W 0000_0000h
(GPC_IMR3_CORE0_A53) 670
IRQ masking register 4 of A53 core0 5.2.10.13/
303A_003C 32 R/W 0000_0000h
(GPC_IMR4_CORE0_A53) 671
IRQ masking register 1 of A53 core1 5.2.10.14/
303A_0040 32 R/W 0000_0000h
(GPC_IMR1_CORE1_A53) 671
IRQ masking register 2 of A53 core1 5.2.10.15/
303A_0044 32 R/W 0000_0000h
(GPC_IMR2_CORE1_A53) 671
IRQ masking register 3 of A53 core1 5.2.10.16/
303A_0048 32 R/W 0000_0000h
(GPC_IMR3_CORE1_A53) 672
IRQ masking register 4 of A53 core1 5.2.10.17/
303A_004C 32 R/W 0000_0000h
(GPC_IMR4_CORE1_A53) 672
5.2.10.18/
303A_0050 IRQ masking register 1 of M4 (GPC_IMR1_M4) 32 R/W 0000_0000h
673
5.2.10.19/
303A_0054 IRQ masking register 2 of M4 (GPC_IMR2_M4) 32 R/W 0000_0000h
673
5.2.10.20/
303A_0058 IRQ masking register 3 of M4 (GPC_IMR3_M4) 32 R/W 0000_0000h
673
Table continues on the next page...
NOTE
LPCR_A53_BSC[CPU_CLK_ON_LPM] should be set 1’b1
when using A53 low power debug feature
NOTE
Always set LPM1/LPM0 with same value
Address: 303A_0000h base + 0h offset = 303A_0000h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MASK_DSM_TRIGGER
MASK_CORE3_WFI
MASK_CORE2_WFI
MASK_CORE1_WFI
MASK_CORE0_WFI
MASK_L2CC_WFI
R MASK_SCU_WFI
IRQ_
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MST2_LPM_HSK_MASK
MST1_LPM_HSK_MASK
MST0_LPM_HSK_MASK
CPU_CLK_ON_LPM
R
Reserved
Reset 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0
0 core1 wakeup source from external INT[127:0], masked by IMR1 refer to “Power up process for A53
platform” for more specific information
1 core1 wakeup source from GIC(nFIQ[1]/nIRQ[1] ), SCU should not be power down during low power
mode when this bit is set to 1’b1
28 LPCR_A53_BSC[IRQ_SRC_C0], LPCR_A53_BSC[IRQ_SRC_C1], LPCR_A53_BSC[IRQ_SRC_C2],
IRQ_SRC_C0 LPCR_A53_BSC[IRQ_SRC_C3], and LPCR_A53_BSC[IRQ_SRC_A53_WUP] work together to decide
the wake up source for A53 LPM and core0/core1/core2/core3 power. See “Power up process for A53
platform” for more specific information.
0 core0 wakeup source from external INT[127:0], masked by IMR0 refer to “Power up process for A53
platform” for more specific information
1 core0 wakeup source from GIC(nFIQ[0]/nIRQ[0] ), SCU should not be power down during low power
mode when this bit is set to 1’b1
27 This field is reserved.
- Reserved
26 L2 cache controller Wait For Interrupt Mask Register
MASK_L2CC_
WFI 0 WFI for L2 cache controller is not masked
1 WFI for L2 cache controller is masked
25 This field is reserved.
- Reserved
24 SCU Wait For Interrupt Mask Register
MASK_SCU_WFI
0 WFI for SCU is not masked
1 WFI for SCU is masked
23 LPCR_A53_BSC[IRQ_SRC_C0], LPCR_A53_BSC[IRQ_SRC_C1], LPCR_A53_BSC[IRQ_SRC_C2],
IRQ_SRC_C3 LPCR_A53_BSC[IRQ_SRC_C3], and LPCR_A53_BSC[IRQ_SRC_A53_WUP] work together to decide
the wake up source for A53 LPM and core0/core1/core2/core3 power.
0 core3 wakeup source from external INT[127:0], masked by IMR1. See Power Up Process for A53
Platform for more specific information.
1 core3 wakeup source from external GIC(nFIQ[1]/nIRQ[1]), SCU should not be powered down during
low power mode when this bit is set to 1'b1.
22 LPCR_A53_BSC[IRQ_SRC_C0], LPCR_A53_BSC[IRQ_SRC_C1], LPCR_A53_BSC[IRQ_SRC_C2],
IRQ_SRC_C2 LPCR_A53_BSC[IRQ_SRC_C3], and LPCR_A53_BSC[IRQ_SRC_A53_WUP] work together to decide
the wake up source for A53 LPM and core0/core1/core2/core3 power.
0 core2 wakeup source from external INT[127:0], masked by IMR1. See Power Up Process for A53
Platform for more specific information.
1 core2 wakeup source from external GIC(nFIQ[1]/nIRQ[1]), SCU should not be powered down during
low power mode when this bit is set to 1'b1.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
EN_C3_WFI_
EN_C2_WFI_
EN_C1_WFI_
EN_C0_WFI_
R
EN_ EN_ EN_ EN_
PDN_DIS
PDN_DIS
PDN_DIS
PDN_DIS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EN_PLAT_PDN
EN_L2_WFI_
R
EN_ EN_ EN_ EN_
EN_ EN_ EN_ EN_
C1_ C0_ C1_ C0_
PDN
Reset 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
NOTE
LPCR_M4[CPU_CLK_ON_LPM] should be set 1’b0 if M4
goes to LPM without trigger power down of related domains
Address: 303A_0000h base + 8h offset = 303A_0008h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MASK_DSM_TRIGGER
MASK_M4_WFI
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CPU_CLK_ON_LPM
R
Reserved
EN_ EN_
Reserved M4_ M4_ LPM0
PUP PDN
W
Reset 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0
NOTE
SLPCR[VSTBY] must be set to 1’b1 if SLPCR[RBC_EN] is
set to 1’b1; SLPCR[SBYOS] must be set to 1’b1 if
SLPCR[VSTBY] is set to 1’b1.
Address: 303A_0000h base + 14h offset = 303A_0014h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
EN_A53_FASTWUP_
EN_A53_FASTWUP_
DISABLE_A53_IS_D
EN_M4_FASTWUP_
EN_M4_FASTWUP_
R
STOP_MODE
STOP_MODE
WAIT_MODE
WAIT_MODE
RBC_EN
EN_
SM
REG_BYPASS_COUNT Reserved
DSM
W
Reset 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
COSC_PWRDOWN
BYPASS_PMIC_
R
COSC_EN
SBYOS
READY
VSTBY
OSCCNT STBY_COUNT
Reset 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0
0 REG_BYPASS_COUNTER disabled
1 REG_BYPASS_COUNTER enabled
29–24 Counter for REG_BYPASS signal assertion after standby voltage request by PMIC_STBY_REQ.
REG_BYPASS_
COUNT NOTE: When RBC enabled, interrupt will be masked until the counter counts to the value set in
GPC_SLPCR[REG_BYPASS_COUNT], this can ignore the unexpected interrupts before CPU
enter LPM mode, avoid the process interruption.
Table continues on the next page...
0 Voltage will not be changed to standby voltage after next entrance to stop mode. (PMIC_STBY_REQ
will remain negated - ‘0’)
1 Voltage will be changed to standby voltage after next entrance to stop mode.
1 Standby clock oscillator bit. This bit defines if cosc_pwrdown, which power down the on chip oscillator, will
SBYOS be asserted in DSM.
0 On chip oscillator will not be powered down, after next entrance to DSM.
1 On chip oscillator will be powered down, after next entrance to DSM. When returning from DSM,
external oscillator will be enabled again, on chip oscillator will return to oscillator mode , and after
oscnt count GPC will continue with the exit from DSM process.
0 By asserting this bit GPC will bypass waiting for PMIC_READY signal when coming out of DSM. This
BYPASS_PMIC_ should be used for PMIC’s that don’t support the PMIC_READY signal.
READY
0 Don’t bypass the PMIC_READY signal - GPC will wait for its assertion during exit of low power mode if
standby voltage was enabled
1 Bypass the PMIC_READY signal - GPC will not wait for its assertion during exit of low power mode if
standby voltage was enabled
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MST2_CPU_
MST1_CPU_
MST0_CPU_
R
MAPPING
MAPPING
MAPPING
Reserved
W
Reset 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MEMLP_RET_PGEN MEM_EXT_CNT
W
Reset 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ROMLP_PDN_
MEMLP_RET_
MEMLP_CTL_
R
SEL
DIS
DIS
MEMLP_ENT_CNT Reserved
W
Reset 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
NOC_PGC_PUP_
A53_PLAT_PGC_
A53_PGC_PUP_
A53_C3_PGC_
A53_C2_PGC_
A53_C1_PGC_
A53_C0_PGC_
R
PUP_ACK
PUP_ACK
PUP_ACK
PUP_ACK
PUP_ACK
ACK
ACK
Reserved
Reset 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NOC_PGC_PDN_
A53_PLAT_PGC_
A53_PGC_PDN_
A53_C3_PGC_
A53_C2_PGC_
A53_C1_PGC_
A53_C0_PGC_
R
PDN_ACK
PDN_ACK
PDN_ACK
PDN_ACK
PDN_ACK
ACK
ACK
Reserved
Reset 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
M4_VIRTUAL_PGC_
M4_DUMMY_PGC_
NOC_PGC_PUP_
R
PUP_ACK
PUP_ACK
ACK
Reserved
Reset 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M4_VIRTUAL_PGC_
M4_DUMMY_PGC_
NOC_PGC_PDN_
R
PDN_ACK
PDN_ACK
ACK
Reserved
Reset 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
M4_BYPASS_PUP
A53_BYPASS_
R
PUP_MASK
_MASK
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M4_PDN_REQ_MA
M4_SLEEP_HOLD
GPC_IRQ_MASK
HOLD_REQ_B
A53_SLEEP_
R
_REQ_B
SK
Reset 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
The four IMRn_CORE0_A53 (n = 1,2,3,4) registers are used as interrupt mask for A53
core0.
Address: 303A_0000h base + 30h offset = 303A_0030h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR1_CORE0_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR2_CORE0_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR3_CORE0_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR4_CORE0_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The four IMRn_CORE1_A53 (n = 1,2,3,4) registers are used as interrupt mask for A53
core1.
Address: 303A_0000h base + 40h offset = 303A_0040h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR1_CORE1_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR2_CORE1_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR3_CORE1_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR4_CORE1_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The four IMRn_M4 (n = 1,2,3,4) registers are used as interrupt mask for M4.
Address: 303A_0000h base + 50h offset = 303A_0050h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR1_M4
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR2_M4
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR3_M4
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR4_M4
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The four ISRn_A53 (n = 1,2,3,4) registers, all of them are read only register
Address: 303A_0000h base + 70h offset = 303A_0070h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ISR1_A53
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ISR2_A53
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ISR3_A53
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ISR4_A53
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The four ISRn_M4 (n = 1,2,3,4) registers, all of them are read only register
Address: 303A_0000h base + 80h offset = 303A_0080h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ISR1_M4
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ISR2_M4
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ISR3_M4
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ISR4_M4
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The specific bits assignment for each PGC is shown in the table below.
PGCx PGCx-1 .. PGC2 PGC1 PGC0
SLT0_CFG slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0]
SLT1_CFG slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0]
: slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0]
SLTn_CFG slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0] slt_cfg[1:0]
Address: 303A_0000h base + B0h offset + (4d × i), where i=0d to 14d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CORE3_A53_PDN_
CORE2_A53_PDN_
CORE1_A53_PDN_
CORE0_A53_PDN_
CORE3_A53_PUP_
CORE2_A53_PUP_
CORE1_A53_PUP_
CORE0_A53_PUP_
NOC_PDN_SLOT_
NOC_PUP_SLOT_
SCU_PDN_SLOT_
SCU_PUP_SLOT_
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
R
CONTROL
CONTROL
CONTROL
CONTROL
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DISPMIX_M4_DOMAIN
GPU_3D_M4_DOMAIN
GPU_2D_M4_DOMAIN
VPU_G2_M4_DOMAIN
VPU_G1_M4_DOMAIN
GPUMIX_M4_DOMAIN
VPU_H1_M4_DOMAIN
VPUMIX_M4_DOMAIN
DDR1_M4_DOMAIN
OTG2_M4_DOMAIN
OTG1_M4_DOMAIN
PCIE_M4_DOMAIN
NOC_M4_DOMAIN
MIPI_M4_DOMAIN
MF_M4_DOMAIN
R
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DISPMIX_A53_DOMAIN
GPU_3D_A53_DOMAIN
GPU_2D_A53_DOMAIN
VPU_G2_A53_DOMAIN
VPU_G1_A53_DOMAIN
GPUMIX_A53_DOMAIN
VPU_H1_A53_DOMAIN
VPUMIX_A53_DOMAIN
DDR1_A53_DOMAIN
OTG2_A53_DOMAIN
OTG1_A53_DOMAIN
PCIE_A53_DOMAIN
NOC_A53_DOMAIN
MIPI_A53_DOMAIN
MF_A53_DOMAIN
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SCU_A53_SW_PU
CORE3_A53_SW_
CORE2_A53_SW_
CORE1_A53_SW_
CORE0_A53_SW_
R
PUP_REQ
PUP_REQ
PUP_REQ
PUP_REQ
P_REQ
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NOC_SW_PUP_
MF_SW_PUP_R
R
REQ
EQ
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MIPI_DSI_SW_PUP_REQ
DISPMIX_SW_PUP_REQ
GPU_3D_SW_PUP_REQ
GPU_2D_SW_PUP_REQ
VPU_G2_SW_PUP_REQ
VPU_G1_SW_PUP_REQ
GPUMIX_SW_PUP_REQ
VPU_H1_SW_PUP_REQ
USB_OTG2_SW_PUP_R
USB_OTG1_SW_PUP_R
VPUMIX_SW_PUP_REQ
DDR1_SW_PUP_REQ
PCIE_SW_PUP_REQ
R
Reserved
EQ
EQ
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SCU_A53_SW_PU
CORE3_A53_SW_
CORE2_A53_SW_
CORE1_A53_SW_
CORE0_A53_SW_
R
PDN_REQ
PDN_REQ
PDN_REQ
PUP_REQ
P_REQ
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NOC_SW_PDN_
MF_SW_PDN_R
R
REQ
EQ
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MIPI_DSI_SW_PDN_REQ
DISPMIX_SW_PDN_REQ
GPU_3D_SW_PDN_REQ
GPU_2D_SW_PDN_REQ
VPU_G2_SW_PDN_REQ
VPU_G1_SW_PDN_REQ
GPUMIX_SW_PDN_REQ
VPU_H1_SW_PDN_REQ
USB_OTG2_SW_PDN_R
USB_OTG1_SW_PDN_R
VPUMIX_SW_PDN_REQ
DDR1_SW_PDN_REQ
PCIE_SW_PDN_REQ
R
Reserved
EQ
EQ
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved LPM3 LPM2
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CORE3_A53_PUP_STATUS
CORE2_A53_PUP_STATUS
CORE1_A53_PUP_STATUS
CORE0_A53_PUP_STATUS
SCU_A53_PUP_REQ
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
A53_MIX_PGC_PUP_STATUS
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M4_MIX_PGC_PUP_STATUS
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
A53_DISPMIX_PUP_STATUS
A53_GPU_3D_PUP_STATUS
A53_GPU_2D_PUP_STATUS
A53_VPU_G2_PUP_STATUS
A53_VPU_G1_PUP_STATUS
A53_GPUMIX_PUP_STATUS
A53_VPU_H1_PUP_STATUS
A53_VPUMIX_PUP_STATUS
A53_DDR1_PUP_STATUS
A53_OTG2_PUP_STATUS
A53_OTG1_PUP_STATUS
A53_PCIE_PUP_STATUS
A53_MIPI_PUP_STATUS
R
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M4_DISPMIX_PUP_STATUS
M4_GPU_3D_PUP_STATUS
M4_GPU_2D_PUP_STATUS
M4_VPU_G2_PUP_STATUS
M4_VPU_G1_PUP_STATUS
M4_GPUMIX_PUP_STATUS
M4_VPU_H1_PUP_STATUS
M4_VPUMIX_PUP_STATUS
M4_DDR1_PUP_STATUS
M4_OTG2_PUP_STATUS
M4_OTG1_PUP_STATUS
M4_PCIE_PUP_STATUS
M4_MIPI_PUP_STATUS
R
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CORE3_A53_PDN_STATUS
CORE2_A53_PDN_STATUS
CORE1_A53_PDN_STATUS
CORE0_A53_PDN_STATUS
SCU_A53_PDN_REQ
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
A53_MIX_PGC_PDN_STATUS
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M4_MIX_PGC_PDN_STATUS
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
A53_DISPMIX_PDN_STATUS
A53_GPU_3D_PDN_STATUS
A53_GPU_2D_PDN_STATUS
A53_VPU_G2_PDN_STATUS
A53_VPU_G1_PDN_STATUS
A53_GPUMIX_PDN_STATUS
A53_VPU_H1_PDN_STATUS
A53_VPUMIX_PDN_STATUS
A53_DDR1_PDN_STATUS
A53_OTG2_PDN_STATUS
A53_OTG1_PDN_STATUS
A53_PCIE_PDN_STATUS
A53_MIPI_PDN_STATUS
R
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M4_DISPMIX_PDN_STATUS
M4_GPU_3D_PDN_STATUS
M4_GPU_2D_PDN_STATUS
M4_VPU_G2_PDN_STATUS
M4_VPU_G1_PDN_STATUS
M4_GPUMIX_PDN_STATUS
M4_VPU_H1_PDN_STATUS
M4_VPUMIX_PDN_STATUS
M4_DDR1_PDN_STATUS
M4_OTG2_PDN_STATUS
M4_OTG1_PDN_STATUS
M4_PCIE_PDN_STATUS
M4_MIPI_PDN_STATUS
R
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This is flag bit relevant domain control, represents A53 CPU platform wants to power
down MIX PGC. The register can only be accessed by A53 platform.
Address: 303A_0000h base + 1B0h offset = 303A_01B0h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
A53_MIX_PDN_F
R
LAG
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The register field is show in the table below. The 1’b1 represents A53 CPU platform
wants to power down certain PU PGC. The register is a read only register. The register
bits will be set when corresponding A53 software power down trigger happens and will
be clear when corresponding A53 software power up trigger happens.
Address: 303A_0000h base + 1B4h offset = 303A_01B4h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved A53_PU_PDN_FLG
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This is flag bit relevant domain control, represents M4 CPU platform wants to power
down MIX PGC. The register can only be accessed by M4 platform.
Address: 303A_0000h base + 1B8h offset = 303A_01B8h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M4_MIX_PDN_
R
FLAG
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The register field is show in the table below. The 1’b1 represents M4 CPU platform
wants to power down certain PU PGC. The register is a read only register. The register
bits will be set when corresponding M4 software power down trigger happens and will be
clear when corresponding M4 software power up trigger happens.
Address: 303A_0000h base + 1BCh offset = 303A_01BCh
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved M4_PU_PDN_FLG
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The four IMRn_CORE2_A53 (n = 1,2,3,4) registers are used as interrupt mask for A53
core2.
Address: 303A_0000h base + 1C0h offset = 303A_01C0h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR1_CORE2_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR2_CORE2_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR3_CORE2_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR4_CORE2_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The four IMRn_CORE2_A53 (n = 1,2,3,4) registers are used as interrupt mask for A53
core3.
Address: 303A_0000h base + 1D0h offset = 303A_01D0h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR1_CORE3_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR2_CORE3_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR3_CORE3_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
IMR4_CORE3_A53
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
GPU_3D_PGC_PUP_ACK
GPU_2D_PGC_PUP_ACK
VPU_G2_PGC_PUP_ACK
VPU_G1_PGC_PUP_ACK
GPUMIX_PGC_PUP_ACK
VPU_H1_PGC_PUP_ACK
VPUMIX_PGC_PUP_ACK
DISPMIX_PGC_PUP_AC
USB_OTG2_PGC_PUP_
USB_OTG1_PGC_PUP_
DDR1_PGC_PUP_ACK
PCIE_PGC_PUP_ACK
MIPI_PGC_PUP_ACK
MF_PGC_PUP_ACK
R
Reserved
Reserved
ACK
ACK
K
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
VPU_G2_PGC_PDN_ACK
VPU_G1_PGC_PDN_ACK
GPUMIX_PGC_PDN_ACK
VPUMIX_PGC_PDN_ACK
VPUMIX_H1_PGC_PDN_
DISPMIX_PGC_PDN_AC
GPU_3D_PGC_PDN_AC
GPU_2D_PGC_PDN_AC
USB_OTG2_PGC_PDN_
USB_OTG1_PGC_PDN_
DDR1_PGC_PDN_ACK
PCIE_PGC_PDN_ACK
MIPI_PGC_PDN_ACK
MF_PGC_PDN_ACK
R
Reserved
Reserved
ACK
ACK
ACK
K
K
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
GPU_3D_PGC_PUP_ACK
GPU_2D_PGC_PUP_ACK
VPU_G2_PGC_PUP_ACK
VPU_G1_PGC_PUP_ACK
GPUMIX_PGC_PUP_ACK
VPU_H1_PGC_PUP_ACK
VPUMIX_PGC_PUP_ACK
DISPMIX_PGC_PUP_AC
USB_OTG2_PGC_PUP_
USB_OTG1_PGC_PUP_
DDR1_PGC_PUP_ACK
PCIE_PGC_PUP_ACK
MIPI_PGC_PUP_ACK
MF_PGC_PUP_ACK
R
Reserved
Reserved
ACK
ACK
K
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
VPU_G2_PGC_PDN_ACK
VPU_G1_PGC_PDN_ACK
GPUMIX_PGC_PDN_ACK
VPU_H1_PGC_PDN_ACK
VPUMIX_PGC_PDN_ACK
DISPMIX_PGC_PDN_AC
GPU_3D_PGC_PDN_AC
GPU_2D_PGC_PDN_AC
USB_OTG2_PGC_PDN_
USB_OTG1_PGC_PDN_
DDR1_PGC_PDN_ACK
PCIE_PGC_PDN_ACK
MIPI_PGC_PDN_ACK
MF_PGC_PDN_ACK
R
Reserved
Reserved
ACK
ACK
K
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CORE3_A53_PDN_
CORE2_A53_PDN_
CORE1_A53_PDN_
CORE0_A53_PDN_
CORE3_A53_PUP_
CORE2_A53_PUP_
CORE1_A53_PUP_
CORE0_A53_PUP_
NOC_PDN_SLOT_
NOC_PUP_SLOT_
SCU_PDN_SLOT_
SCU_PUP_SLOT_
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
SLOT_CONTROL
R
CONTROL
CONTROL
CONTROL
CONTROL
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reset
Bit
0
31
0
30
Reserved
0
29
GPC_NOC2GPUMIX_PWRDNACKN
0
General Power Controller (GPC)
28
GPC_GPUMIX2NOC_2D_PWRDNACKN
0
27
GPC_GPUMIX2NOC_3D_PWRDNACKN
0
26
GPC_VPUMIX_PWRDNACKN
0
25
GPC_DISPMIX_PWRDNACKN
Address: 303A_0000h base + 1FCh offset = 303A_01FCh
0
24
GPC_NOC2HSIOMIX_PWRDNACKN
0
23
GPC_HSIOMIX2NOC_PWRDNACKN
0
22
GPC_NOC2SUPERMIX_PWRDNACKN
0
21
GPC_SUPERMIX2NOC_PWRDNACKN
0
20
GPC_NOC2DDR1_PWRDNACKN
0
19
GPC_DDR1_AXI_CACTIVE
5.2.10.64 Power handshake register (GPC_PU_PWRHSK)
GPC_DDR1_AXI_CSYSACK
0
17
GPC_DDR1_CORE_CACTIVE
0
16
GPC_DDR1_CORE_CSYSACK
NXP Semiconductors
Chapter 5 Clocks and Power Management
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPC_NOC2HSIOMIX_ADBS_PWRDNREQN
GPC_GPUPMIX2NOC_2D_PWRDNREQN
GPC_GPUPMIX2NOC_3D_PWRDNREQN
R
GPC_HSIOMIX_ADBS_PWRDNREQN
GPC_NOC2GPUPMIX_PWRDNREQN
GPC_NOC2DDR_PWRDNREQN
GPC_VPUPMIX_PWRDNREQN
GPC_DDR1_CORE_CSYSREQ
GPC_DISPMIX_PWRDNREQN
GPC_DDR1_AXI_CSYSREQ
Reserved
Reserved
Reserved
Reset 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
There are 20 slots in each SLTn_CFG_PU (n = 0~19) that define the power up or power
down behavior of PU PGC in each slot. See PGC power domains section for list of PGC
PUs.
Address: 303A_0000h base + 200h offset + (8d × i), where i=0d to 19d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DISPMIX_PDN_SLOT
DISPMIX_PUP_SLOT
GPU_3D_PDN_SLOT
GPU_2D_PDN_SLOT
VPU_G2_PDN_SLOT
VPU_G1_PDN_SLOT
GPU_3D_PUP_SLOT
GPUMIX_PDN_SLOT
GPU_2D_PUP_SLOT
VPU_H1_PDN_SLOT
VPU_G2_PUP_SLOT
VPU_G1_PUP_SLOT
GPUMIX_PUP_SLOT
VPU_H1_PUP_SLOT
VPUMIX_PDN_SLOT
VPUMIX_PUP_SLOT
R
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
_CONTROL
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M4_PUP_SLOT_CON
M4_PDN_SLOT_CO
DDR1_PDN_SLOT_
OTG2_PDN_SLOT_
OTG1_PDN_SLOT_
DDR1_PUP_SLOT_
OTG2_PUP_SLOT_
OTG1_PUP_SLOT_
PCIE_PDN_SLOT_
PCIE_PUP_SLOT_
MIPI_PDN_SLOT_
MIPI_PUP_SLOT_
MF_PDN_SLOT_
MF_PUP_SLOT_
R
CONTROL
CONTROL
CONTROL
CONTROL
CONTROL
CONTROL
CONTROL
CONTROL
CONTROL
CONTROL
CONTROL
CONTROL
NTROL
TROL
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
There are numerous PGC inside GPCv2, with 4 different types: CPU/SCU/MIX/PU.
Each PGC type has 4 different control words PGC_CTRL, PGC_PUPSCR,
PGC_PDNSCR, and PGC_SR. Different PGC types may have different field definition in
these four registers. There is another extra control word PGC_AUXSW for SCU type
PGC.
The total GPC memory map is 4KB
Table 5-11. Memory Regions
Address Range(offset) Region
0x000 - 0x3FF GPC configuration register
0x400 - 0x7FF Reserved
0x800 - 0x9FF CPU and SCU type PGC register base address
0xA00 - 0xBFF MIX type PGC register base address
0xC00 - 0xFFF PU type PGC register base address
Each PGC (CPU type, MIX type, PU type) will occupy 64 Bytes address space, the
specific base address of each PGC are listed as below.
• 0x800 ~ 0x83F: PGC for A53 core0
• 0x840 ~ 0x87F: PGC for A53 core1
• 0x880 ~ 0x8BF: PGC for A53 core2
• 0x8C0 ~ 0x8FF: PGC for A53 core3
• 0x900 ~ 0x93F: PGC for A53 SCU
• 0xA40 ~ 0xA7F: PGC for NOC mix
• 0xC00 ~ 0xC3F: PGC for MIPI PHY (PU0)
• 0xC40 ~ 0xC7F: PGC for PCIE1 PHY (PU1)
• 0xC80 ~ 0xCBF: USB_OTG1 (PU2)
• 0xCC0 ~ 0xCFF: USB_OTG2 (PU3)
• 0xD00 ~ 0xD3F: Reserved (PU4)
• 0xD40 ~ 0xD7F: DDR1 (PU5)
• 0xD80 ~ 0xDBF: GPU_2D (PU6)
• 0xDC0 ~ 0xDFF: GPUMIX (PU7)
• 0xE00 ~ 0xE3F: VPUMIX (PU8)
• 0xE40 ~ 0xE7F: GPU_3D (PU9)
• 0xE80 ~ 0xEBF: DISPMIX (PU10)
• 0xEC0 ~ 0xEFF: VPU_G1 (PU11)
• 0xF00 ~ 0xF3F: VPU_G2 (PU12)
• 0xF40 ~ 0xF7F: VPU_H1 (PU13)
GPC PGC Control Register for the PGC CPUs. See the PGC Memory Map for the
assignments.
Address: 303A_0000h base + 800h offset + (64d × i), where i=0d to 4d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reset 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
NOTE: Can’t be programmed to zero (This register control only for SCU Type PGC)
7 This field is reserved.
- Reserved
6–1
L2RSTDIS After scu pdn_req, count this value to assert A53 l2rstdis to 1’b1, it will be clear automatically once any of
A53 core0/core1/core2/core3 is wakeup
NOTE: Can’t be programmed to zero (This register control only for SCU Type PGC)
0
PCR Power Control
NOTE: PCR must not change from power-down request (pdn_req) assertion until the target subsystem is
completely powered up.
Reserved SW2ISO
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
SW2ISO SW
Reset 1 0 0 1 0 1 1 1 1 1 0 0 0 0 0 1
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved ISO2SW Reserved ISO
Reset 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
L2RSTDIS_
Reserved DEASSERT_
CNT
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
L2RETN_FLAG
ALLOFF_FLAG
R PSR
Reserved
L2RSTDIS_DEASSERT_CNT PUP_CLK_DIV_SEL
Reset 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: Software should write “1” to clear this flag after A53 is wakeup from ALL_OFF mode, otherwise, it
will always keep to 1 (This register control only for SCU Type PGC)
NOTE: Software should write “1” to clear this flag after A53 is wakeup from L2 retention mode, otherwise
it will always keep to 1 (This register control only for SCU Type PGC)
0 The target subsystem was not powered down for the previous power-down request.
1 The target subsystem was powered down for the previous power-down request.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
Reserved MEMPWR_TRC1_TMC L2RETN_RTC1_TMC_TMR
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
L2RETN_RTC1_TMC_TMR DFTRAM_TRC1_TMC_TMR_TCD2
Reset 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reset 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
MIX_
Reserved DFTRAM_TCD1 L2RSTDIS
PCR
Reset 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
NOTE: Can’t be programmed to zero (This register control only for SCU Type PGC)
7 This field is reserved.
- Reserved
6–1
L2RSTDIS After scu pdn_req, count this value to assert A53 l2rstdis to 1’b1, it will be clear automatically once any of
A53 core0/core1/core2/core3 is wakeup
NOTE: Can’t be programmed to zero (This register control only for SCU Type PGC)
0
MIX_PCR Power Control
NOTE: PCR must not change from power-down request (pdn_req) assertion until the target subsystem is
completely powered up.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved SW2ISO
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SCALL_OUT
SW2ISO PUP_WAIT_ Reserved
Reset 1 0 0 1 0 1 1 1 1 1 0 0 0 0 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
Reserved
Reset 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved ISO2SW Reserved ISO
Reset 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
L2RSTDIS_
Reserved DEASSERT_
CNT
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
L2RETN_FLAG
ALLOFF_FLAG
R PSR
Reserved
L2RSTDIS_DEASSERT_CNT PUP_CLK_DIV_SEL
Reset 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: Software should write “1” to clear this flag after A53 is wakeup from ALL_OFF mode, otherwise, it
will always keep to 1 (This register control only for SCU Type PGC)
NOTE: Software should write “1” to clear this flag after A53 is wakeup from L2 retention mode, otherwise
it will always keep to 1 (This register control only for SCU Type PGC)
0 The target subsystem was not powered down for the previous power-down request.
1 The target subsystem was powered down for the previous power-down request.
GPC PGC Control Register for the PUs. See the PGC Memory Map for the assignments.
Address: 303A_0000h base + C00h offset + (64d × i), where i=0d to 13d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reset 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
NOTE: Can’t be programmed to zero (This register control only for SCU Type PGC)
7 This field is reserved.
- Reserved
6–1
L2RSTDIS After scu pdn_req, count this value to assert A53 l2rstdis to 1’b1, it will be clear automatically once any of
A53 core0/core1/core2/core3 is wakeup
NOTE: Can’t be programmed to zero (This register control only for SCU Type PGC)
0
PCR Power Control
NOTE: PCR must not change from power-down request (pdn_req) assertion until the target subsystem is
completely powered up.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved SW2ISO
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
SW2ISO SW
Reset 1 0 0 1 0 1 1 1 1 1 0 0 0 0 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
Reserved
Reset 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved ISO2SW Reserved ISO
Reset 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
L2RSTDIS_
Reserved DEASSERT_
CNT
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
L2RETN_FLAG
ALLOFF_FLAG
R PSR
Reserved
L2RSTDIS_DEASSERT_CNT PUP_CLK_DIV_SEL
Reset 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: Software should write “1” to clear this flag after A53 is wakeup from ALL_OFF mode, otherwise, it
will always keep to 1 (This register control only for SCU Type PGC)
NOTE: Software should write “1” to clear this flag after A53 is wakeup from L2 retention mode, otherwise
it will always keep to 1 (This register control only for SCU Type PGC)
0 The target subsystem was not powered down for the previous power-down request.
1 The target subsystem was powered down for the previous power-down request.
5.3.1 Overview
The chip has two XTAL modules, 24MHz XTAL module and 32KHz XTAL module.
The 24MHz XTAL module is instantiated from the XTAL IP, which includes:
• 24MHz crystal oscillator to generate reference clock
• Digital control logics for the XTAL
The 32KHz XTAL module uses a different IP and it is used as the clock source for the
RTC, located in the SNVS.
The 24MHz oscillator will be used as the primary clock source for the PLLs to generate
the clock for CPU, BUS, and high-speed interfaces. For all PLLs, the 24MHz clock from
the oscillator can be used as the PLL reference clock directly.
The OSC IP used by the 24MHz XTAL module has three modes, Internal clock
generation mode, External clock receive mode and Retention mode. The figure below
shows the OSC IP integration diagram:
OSC IP
+
–
Internal
Circuitry
PADI PADO
On chip
Rs
Rfb
CL1 CL2
During internal clock generation mode, a suitable quartz crystal is connected between
PADI and PADO to generate the clock signal at the CK pin.
During external clock generation mode, the cell acts like a buffer, reflecting the PADI
signal at CK.
The RTO (retention enable) signal retains the previous state of all the core input control
signals. Logic at the RTO signal enables the retention operation.
Each XTAL module supports the following modes through register configuration:
• Normal oscillator mode - In normal mode, the XTAL IP generates stable square
wave based on the crystal oscillator input.
• Bypass mode - In bypass mode, an external clock can be input through the XTAL
pad.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
EN Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CLK_CKE_OVERRIDE
R
CLK_CKE
Reserved
Reserved
Reserved LOCK_COUNT
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5.4.1 Overview
The chip uses a temperature sensor to monitor the die temperature. The temperature
sensor has a digitizer and local probe, and has the resolution of 1°C.
5.4.2 Features
• Junction temperature sensor function
• 1°C of sensing resolution
• 8-bit output codes with software calibration
Monitoring
Interrupt Gen
Interrupts
DISABLE SNESOR
IDLE START
GET_RESULT RESET
CLK0_SENSE CLK7_SENSE
CLK1_SENSE CLK6_SENSE
CLK2_SENSE CLK5_SENSE
CLK3_SENSE CLK4_SENSE
where Tsense is the real measured output code including the DC offset, Tcalib is the
calibrated output code of Tsense, TE1 (TE2) is the stored code in the first 8-bit OTP cell
at 25°C (85°C) , and T25 (T85) is the ideal output code at 25°C (85°C). In other words,
the DC offset is the difference between TE1 and T25. When the above equation is
programmed in the glue logic block, the calibrated data is simply obtained by applying
measured Tsense value.
Next equation shows the 2-point calibration method.
where TE1 and TE2 are the temperature values stored in the 8-bit OTP cells from the
25°C and 85°C measurement, respectively. Units of all terms are degree (°C).
According to the above equation, (TE1 – 25) represents DC offset term and
represents slope compensation term. DC offset is simply difference between 25°C and
TE1. Slope compensation term is reciprocal of temperature slope, (85 – 25)/(TE2 – TE1)
times (Tsense – TE1). To obtain calibrated data, TE1 is added to slope compensation
term for the slope error correction and DC offset tem is finally subtracted. If the above
equation is programmed in the software, the calibrated data is simply obtained by
applying measured Tsense value.
By using software slope calibration, it is possible to control a temperature slope of Tcalib.
The software calibration method is below.
This section provides a detailed description of all accessible TMU memory and registers.
The table below lists the TMU registers. Note that the full register address is comprised
of the programmable CCSRBAR together with the offset listed.
NOTE
The EN bit field of the TMU Enable Register (TMU_TER[EN])
must always be enabled for the part to operate correctly.
TMU memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
5.4.7.1/
3026_0000 TMU Enable Register (TMU_TER) 32 R/W 0000_0001h
768
5.4.7.2/
3026_0004 TMU Status register (TMU_TSR) 32 R 0000_0000h
769
5.4.7.3/
3026_0008 TMU Interrupt Enable register (TMU_TIER) 32 R/W 0000_0000h
770
5.4.7.4/
3026_000C TMU Interrupt Detect register (TMU_TIDR) 32 w1c 0000_0000h
771
TMU Monitor High Temperature Immediate Threshold 5.4.7.5/
3026_0010 32 R/W 0000_0000h
register (TMU_TMHTITR) 772
TMU Monitor High Temperature Average threshold register 5.4.7.6/
3026_0014 32 R/W 0000_0000h
(TMU_TMHTATR) 773
TMU Monitor High Temperature Average Critical Threshold 5.4.7.7/
3026_0018 32 R/W 0000_0000h
register (TMU_TMHTACTR) 774
5.4.7.8/
3026_001C TMU Sensor Calibration register (TMU_TSCR) 32 R 0000_0000h
774
Table continues on the next page...
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
EN Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved ALPF
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 No monitoring
1 Enable monitoring
30–2 This field is reserved.
- Reserved
ALPF Average low pass filter setting.
The average temperature is calculated as: ALPF x Current_Temp + (1 - ALPF) x Average_Temp. If no
previous (average) temperature is valid, current temperature is used. For proper operation, this field
should only change when monitoring is disabled.
00 1.0
01 0.5
10 0.25
11 0.125
The TMU status register reports the monitoring status during operation.
Address: 3026_0000h base + 4h offset = 3026_0004h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R TB
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The TMU interrupt enable register determines if a detected status condition should cause
a system interrupt. A system interrupt occurs if a bit in this register is set and the
corresponding bit in the interrupt detect register is also set. To clear the interrupt, write a
1 to the interrupt detect register.
Address: 3026_0000h base + 8h offset = 3026_0008h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
ATCTEIE
ATTEIE
ITTEIE
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The TMU interrupt detect register indicates if an status condition was detected that could
generate an interrupt. Write 1 to clear the detected condition and the interrupt, if enabled.
Address: 3026_0000h base + Ch offset = 3026_000Ch
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
ATCTE
ATTE
ITTE
R
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This TMU monitor register determines the high current temperature threshold for
generating the TIDR[ITTE] event.
Address: 3026_0000h base + 10h offset = 3026_0010h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
EN Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved TEMP
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This TMU monitor register determines the high average temperature threshold for
generating the TIDR[ATTE] event. The low-pass filter setting, TMR[ALPF], determines
the function for calculating average temperature.
Address: 3026_0000h base + 14h offset = 3026_0014h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
EN Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved TEMP
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This TMU monitor register determines the high average critical temperature threshold for
generating the TIDR[ATCTE] event. The low-pass filter setting, TMR[ALPF],
determines the function for calculating average temperature.
Address: 3026_0000h base + 18h offset = 3026_0018h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
EN Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved TEMP
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R BSR
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R SENSOR
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This TMU report register returns the last measured temperature at site. The site must be
part of the list of enabled monitored sites as defined by TMR[MSITE].
Address: 3026_0000h base + 20h offset = 3026_0020h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R V
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R TEMP
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This TMU report register returns the average measured temperature at site.
Address: 3026_0000h base + 24h offset = 3026_0024h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R V
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R TEMP
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.1.1 Overview
The boot process begins at the Power-On Reset (POR) where the hardware reset logic
forces the Arm core to begin the execution starting from the on-chip boot ROM.
The boot ROM code uses the state of the internal register BOOT_MODE[13:0] as well as
the state of various eFUSEs and/or GPIO settings to determine the boot flow behavior of
the device.
The main features of the ROM include:
• Support for booting from various boot devices
• Serial downloader support (USB OTG)
• Device Configuration Data (DCD) and plugin
• Wake-up from the low-power modes
The boot ROM supports these boot devices:
• Serial NOR Flash via FlexSPI
• NAND flash
• SD/MMC
• Serial (SPI) NOR
The boot ROM uses the state of the BOOT_MODE and eFUSEs to determine the boot
device. For development purposes, the eFUSEs used to determine the boot device may be
overridden using the GPIO pin inputs.
The boot ROM code also allows to download the programs to be run on the device. The
example is a provisioning program that can make further use of the serial connection to
provide a boot device with a new image. Typically, the provisioning program is
downloaded to the internal RAM and allows to program the boot devices, such as the
SD/MMC flash. The ROM serial downloader uses a high-speed USB in a non-stream
mode connection.
The Device Configuration Data (DCD) feature allows the boot ROM code to obtain the
SOC configuration data from an external program image residing on the boot device. As
an example, the DCD can be used to program the DDR controller for optimal settings,
improving the boot performance. The DCD is restricted to the memory areas and
peripheral addresses that are considered essential for the boot purposes (see Write data
command).
A key feature of the boot ROM is the ability to perform a secure boot, also known as a
High-Assurance Boot (HAB). This is supported by the HAB security library which is a
subcomponent of the ROM code. The HAB uses a combination of hardware and software
together with the Public Key Infrastructure (PKI) protocol to protect the system from
executing unauthorized programs. Before the HAB allows the user image to execute, the
image must be signed. The signing process is done during the image build process by the
private key holder and the signatures are then included as a part of the final program
image. If configured to do so, the ROM verifies the signatures using the public keys
included in the program image. A secure boot with HAB can be performed on all boot
devices supported on the chip in addition to the serial downloader. The HAB library in
the boot ROM also provides the API functions, allowing the additional boot chain
components (bootloaders) to extend the secure boot chain. The out-of-fab setting for the
SEC_CONFIG is the open configuration, in which the ROM/HAB performs the image
authentication, but all authentication errors are ignored and the image is still allowed to
execute.
During reset, the chip checks the power gating controller status register.
During boot, the core's behavior is defined by the boot mode pin settings, as described in
Boot mode pin settings. When waking up from the low-power boot mode, the core skips
the clock settings. The boot ROM checks that the PERSISTENT_ENTRY0 (see
Persistent bits) is a pointer to a valid address space (OCRAM, DDR, or EIM). If the
PERSISTENT_ENTRY0 is a pointer to a valid range, it starts the execution using the
entry point from the PERSISTENT_ENTRY0 register. If the PERSISTENT_ENTRY0 is
a pointer to an invalid range, the core performs the system reset.
NOTE
After the downloaded image is loaded, it is responsible for
managing the watchdog resets properly.
This figure shows the USB boot flow:
START
Configure USBOTG1,
, program WDOG for 32 sec timer
Poll USBOTG1 No
WDOG_ENABLE
Activity
No == 1 &&
Detected WDOG timeout
Yes
Yes
NOTE
Before going into USB serial mode, Boot ROM detect
SD/MMC card on USDHC2 port. If a card is inserted, ROM
will try to boot from it. This is the so-called Manufacture
SD/MMC boot. This feature can be disabled by blowing fuse
“Disable SD/MMC Manufacture Mode”. See SD/MMC
manufacture mode for details.
in the Non-Secure state), the DCD is processed if present, and the program image is
authenticated by the HAB before its execution. All detected errors are logged, but
have no influence on the boot flow which continues as if the errors did not occur.
This configuration is useful for a secure product development because the program
image runs even if the authentication data is missing or incorrect, and the error log
can be examined to determine the cause of the authentication failure.
• Field Return: This level is intended for the parts returned from the shipped products.
1. This setting can be overridden by the GPIO settings when the BT_FUSE_SEL fuse is intact. See GPIO Boot Overrides for
the corresponding GPIO pin.
2. 0 = intact fuse and 1= blown fuse
The input pins provided are sampled at boot, and can be used to override the
corresponding eFUSE values, depending on the setting of the BT_FUSE_SEL fuse.
0x0001FFFF 0x0091FFFF
ROM BOOTSTRAP CODE
0x00000960
VECTORS
0x00000000 0x00900000
NOTE
If no ROM/HAB APIs are being used, the entire OCRAM
region can be used freely after the boot.
• IOMUXC—I/O Multiplexer Control which allows the GPIO use to override the
eFUSE boot settings;
• IOMUXC GPR—I/O Multiplexer Control General-Purpose Registers
• CAAM—Cryptographic Acceleration and Assurance Module
• SNVS—Secure Non-Volatile Storage
• SRC—System Reset Controller
• USB—used for the serial download of a boot device provisioning program
• USDHC—Ultra-Secure Digital Host Controller
• WDOG-1—Watchdog timer
NOTE
All other PLLs are in the default status.
Table 6-5. Clock root setting by ROM
Clock Name Frequency (MHz) Source Enable
ARM_A53_ROOT 1000 ARM_PLL_CLK Yes
ARM_M4_CLK_ROOT 200 SYSTEM_PLL2_200M_CLK -
AHB_CLK_ROOT 133 SYSTEM_PLL1_133M_CLK Yes
MAIN_AXI_CLK_ROOT 333 SYSTEM_PLL2_333M_CLK Yes
VPU_A53_CLK_ROOT 800 ARM_PLL_CLK No
DRAM_ALT_CLK_ROOT 800 SYSTEM_PLL1_800M_CLK yes
NAND_CLK_ROOT 500 SYSTEM_PLL2_500M_CLK Enabled by driver
NAND_USDHC_BUS_CLK_R 266 SYSTEM_PLL1_266M_CLK Enabled by driver
OOT
USB_BUS_CLK_ROOT SYSTEM_PLL2_500M_CLK Enabled by driver
NOTE
All other clock roots are in the default status.
Table 6-6. NAND_CLK_ROOT setting
NAND data rate NAND_CLK_ROOT source Frequency
Async/Legacy NAND SYSTEM_PLL1_400M_CLK 25 MHz
Sync 40M SYSTEM_PLL1_400M_CLK 40 MHz
Toggle/Sync 66M SYSTEM_PLL1_400M_CLK 66 MHz
Toggle 80M SYSTEM_PLL1_400M_CLK 80 MHz
Sync 100M SYSTEM_PLL1_400M_CLK 100 MHz
Toggle/Sync 133M SYSTEM_PLL1_400M_CLK 133 MHz
Sync 160M SYSTEM_PLL1_400M_CLK 133 MHz
Toggle/Sync 200M SYSTEM_PLL1_400M_CLK 200 MHz
NOTE
The NAND_CLK_ROOT source depends on the NAND data
rate.
The ROM code disables the clocks listed in the following table, except for the boot
devices listed in the "Enabled for boot device" column below.
Table 6-7. CCGR setting by ROM
CCGR Register LPCG Enable Enabled for boot device
CCM_CCGR0 Dvfs
CCM_CCGR1 Anamix
CCM_CCGR2 Cpu
CCM_CCGR3 Csu Security related
CCM_CCGR4 debug
CCM_CCGR5 Dram1
Table 6-10. Fuse definition for Serial NOR over FlexSPI (continued)
Fuse Config Config Definitions GPIO Shipped Value Settings
BOOT_CFG[7:6] OEM Hold time before Yes 0 0 – 500us
read from device
1 – 1ms
2 – 3ms
3 – 10ms
BOOT_CFG[10:8] OEM Flash Type Yes 0 000b–Device
supports 3B read
by default
001b–Device
supports 4B read
by default
010b–HyperFlash
1V8
011b–HyperFlash
3V3
100b–MXIC Octal
DDR
BOOT_CFG[11] OEM xSPI FLASH Auto Yes 0 0 – Disabled
Probe
1 – Enabled
BOOT_CFG[14:12] OEM Boot device Yes 0 100 – Serial NOR
selection device is selected
as boot device.
0x480[2:0] OEM xSPI FLASH No 0 0 - 100 MHz
(BOOT_CFG_PAR Frequency
1 - 133 MHz
AMETER)
2 - 166 MHz
3 - 200 MHz
4 - 80 MHz
5 - 20 MHz
Others – Reserved
NOTE
If the xSPI FLASH Auto Probe feature is enabled, the
following is the logic how this feature works with other fuse
combinations:
• Flash Type - If Flash type is 0, the "xSPI FLASH Auto
Probe Type" takes effect for the Flash type selection. If
Flash Type is greater than 1, the "Flash Type" Fuse is used
for Flash type selection, ROM will issue specific command
to probe the presence of Serial NOR FLASH.
• xSPI FLASH Frequency - This field is used for specifying
the Flash working frequency.
Start
No
Image == XIP Copy image to OCRAM
Yes
End
Note:
1. To customize the LUT sequence for some specific device, users need to enable
“lutCustomSeqEnable” and fill in corresponding “lutCustomSeq” field specified by
command index below.
2. For Serial (SPI) NOR, the pre-defined LUT index is as follows:
Table 6-12. LUT sequence definition for Serial
NOR
Command Index Name Index in lookup table Description
0 Read 0 Read command
Sequence
1 ReadStatus 1 Read Status
command
2 WriteEnable 3 Write Enable
command sequence
3 EraseSector 5 Erase Sector
Command
4 PageProgram 9 Page Program
Command
5 ChipErase 11 Full Chip Erase
6 Dummy 15 Dummy Command as
needed
Reserved 2,4,6,7,8,10,12,13,14 All reserved indexes
can be freely used for
other purpose
1. The setting can be overridden by the GPIO settings when the BT_FUSE_SEL fuse is intact. See Table 1 for the
corresponding GPIO pin.
6.1.5.3.2 NAND flash boot flow and Boot Control Blocks (BCB)
There are two BCB data structures:
• FCB
• DBBT
As a part of the NAND media initialization, the ROM driver uses safe NAND timings to
search for the Firmware Configuration Block (FCB) that contains the optimum NAND
timings, the page address of the Discovered Bad Block Table (DBBT) Search Area, and
the start page address of the primary and secondary firmware.
The hardware ECC level to use is embedded inside the FCB block. The FCB data
structure is also protected using the ECC. The driver reads raw 2112 bytes of the first
sector and runs through the software ECC engine that determines whether the FCB data is
valid or not.
If the FCB is found, the optimum NAND timings are loaded for further reads. If the ECC
fails, or the fingerprints do not match, the Block Search state machine increments the
page number to the Search Stride number of pages to read for the next BCB until the
SearchCount pages have been read.
If the search fails to find a valid FCB, the NAND driver responds with an error and the
boot ROM enters the serial download mode.
The FCB contains the page address of the DBBT Search Area, and the page address for
primary and secondary boot images. The DBBT is searched in the DBBT Search Area,
just like the FCB is searched. After the FCB is read, the DBBT is loaded, and the primary
or secondary boot image is loaded using the starting page address from the FCB.
This figure shows the state diagram of the FCB search:
START
Current Page = 0,
Search Stride = Stride Size Fuse Value,
Search Count = Boot Search Count Fuse Value
YES
YES NO
Recovery Device/
NCB Found
Serial Loader
When the FCB is found, the boot ROM searches for the Discovered Bad Blocks Table
(DBBT). If the DBBT Search Area is 0 in the FCB, the ROM assumes that there are no
bad blocks on the NAND device boot area. See this figure for the DBBT search flow:
START
YES
YES
NO
DBBT Found, Copy to IRAM
The BCB search and load function also monitors the ECC correction threshold and sets
the PERSIST_BLOCK_REWRITE persistent bit if the threshold exceeds the maximum
ECC correction ability.
If there is a page with a number of errors higher than ECC can correct during the primary
image read, the boot ROM turns on the PERSIST_SECONDARY_BOOT bit and
performs the software reset (After the software reset, the secondary image is used).
If there is a page with number of errors higher than ECC can correct during secondary
image read, the boot ROM goes to the serial loader.
The FCB data structure is protected using a 62-bit ECC. The layout of the FCB page is
illustrated in this figure:
Meta D0 D1 D2 D3
parity
parity
parity
parity
32B 128B 128B 128B 128B
D4 D5 D6 D7
parity
parity
parity
parity
128B 128B 128B 128B
The detailed parameters of the FCB pages are listed in this table:
Table 6-16. Parameters setting for FCB page
Parameter Value
TotalPageSize 2048+64=2112
MetadataBytes 32
EccBlock0Size 128
EccBlock0EccType 31
BCHType 0
EccBlockNSize 128
EccBlockNEccType 31
NumEccBlocksPerPage 7
To reduce the disturbances caused by a neighboring cell in the FCB page in the NAND
chip, a randomizer is enabled when reading the FCB page. BCH ECC has a Randomizer
module that is interfaced through the GPMI APBHDMA chain. The Randomizer can
generate random data based on BCH ECC encoded/decoded data. It can be employed to
reduce the disturbances caused by a neighboring cell in the NAND chip, thus reducing bit
errors. The randomizer is used to reduce the bit errors in the FCB. Ensure that the
randomizer is enabled when burning the FCB pages in the NAND flash. To control the
randomizer for the pages (except for FCB), a new field called Randomizer_Enable is
added into the FCB structure. If the Randomizer_Enable field is set to 0, the randomizer
is disabled. Reading the pages (except for FCB) being set to a non-zero value enables the
randomizer. For detailed randomizer information, see Randomizer.
64 B
2 KB Main area spare
512 main parity 512 main parity 512 main parity 512 main parity
meta
data Bad block information at
fourth block of data area
Swap byte
The GPMI timing2 register values are set using the FCB members
TMTiming2.READ_LATENCY, CE_DELAY, PREAMBLE_DELAY,
POSTAMBLE_DELAY, CMDADD_PAUSE, and DATA_PAUSE.
The example below is for 13 bits of parity (GF13). The number of ECC bits required for
a data block is calculated using the (ECC_Correction_Level * 13) bits.
In the above layout, the ECC size for EccB0 and EccBN must be selected to not exceed a
total page size of 2112 bytes. The EccB0 and EccBN can be one of the 2, 4, 6, 8, 10, 12,
14, 16, 18, and 20 bits on the ECC correction level. The total bytes are:
[M + (data_block_size x 4) + ([EccB0 + (EccBN x 3)] x 13) / 8] <= 2112;
M = metadata bytes and data_block_size is 512.
There are four data blocks of 512 bytes each in a page of 2-KB page sized NAND. The
values of EccB0 and EccBN must be such that the above calculation does not result in a
value greater than 2112 bytes.
Different NAND manufacturers have different sizes for a 4-KB page; 4314 bytes is
typical.
[M + (data_block_size x 8) + ([EccB0 + (EccBN x 7)] x 13) / 8] <= 4314;
M= metadata bytes and data_block_size is 512.
There are eight data blocks of 512 bytes each in a page of a 4-KB page sized NAND. The
values of the EccB0 and EccBN must be such that the above calculation does not result in
a value greater than the size of a page in a 4-KB page NAND.
6.1.5.3.7.2 Metadata
The number of bytes used for the metadata is specified in the FCB. The metadata for the
BCH encoded pages is placed at the beginning of a page. The ROM only cares about the
first byte of metadata to swap it with a bad block marker byte in the page data after each
page read; it is important to have at least one byte for the metadata bytes field in the FCB
data structure.
USDHC1 IO VOLTAGE
SELECTION (only for MMC/eMMC
boot)
0 - 3.3 V
1 - 1.8 V
MMC Speed Mode Yes 00 MMC speed
(CFG[3:2]) selection
00 - Normal
01 - High
else - Reserved
USDHC1 IO Voltage Yes 0 USDHC1 IO
Selection (CFG[1]) VOLTAGE
SELECTION (only
for MMC/eMMC
boot)
0 - 3.3 V
1 - 1.8 V
BOOT_CFG[0] OEM USDHC2 IO VOLTAGE Yes 0 USDHC2 IO VOLTAGE
SELECTION (only for MMC/eMMC
boot)
0 - 3.3 V
1 - 1.8 V
BOOT_CFG[15:12] OEM Boot device selection Yes 0000 0001 - Boot from SD/eSD
0010 - Boot from MMC/eMMC
BOOT_CFG[11:10] OEM USDHC port selection Yes 00 00 - USDHC-1
01 - USDHC-2
10 - USDHC-3
else - reserved
BOOT_CFG[9] OEM SD power cycle enable/ Yes 0 SD power cycle/eMMC reset
eMMC reset enable
0 - Disabled
1 - Enabled
BOOT_CFG[8] OEM USDHC loopback clock Yes 0 USDHC loopback clock source
selection selection
0 - Through SD pad
1 - Direct
0x490[14:8] OEM SD/MMC DLL DLY No 0 Delay target for USDHC DLL, it is
config applied to the slave mode target
delay or overrides the mode target
delay, depending on the DLL
override fuse bit value.
1. The setting can be overridden by the GPIO settings when the BT_FUSE_SEL fuse is intact. See GPIO boot overrides for
the corresponding GPIO pin.
• SDv2.0 or less
• eSDv2.10 rev-0.9, with or without FAST_BOOT
• SDXCv3.0
The MMC/SD/eSD/SDXC/eMMC can be connected to any of the USDHC blocks and
can be booted by copying 4 KB of data from the MMC/SD/eSD/eMMC device to the
internal RAM. After checking the Image Vector Table header value (0xD1) from
program image, the ROM code performs a DCD check. After a successful DCD
extraction, the ROM code extracts from the Boot Data Structure the destination pointer
and length of image to be copied to the RAM device from where the code execution
occurs.
The maximum image size to load into the SD/MMC boot is 32 MB. This is due to a
limited number of uSDHC ADMA Buffer Descriptors allocated by the ROM.
NOTE
The initial 4 KB of the program image must contain the IVT,
DCD, and the Boot Data structures.
Table 6-20. SD/MMC frequencies
SD MMC MMC (DDR mode)
Identification (KHz) 347.22
Normal-speed mode (MHz) 25 20 25
High-speed mode (MHz) 50 40 50
UHSI SDR50 (MHz) 100
UHSI SDR104 (MHz) 200
NOTE
The boot ROM code reads the application image length and the
application destination pointer from the image.
Start
No
Command Successful? 5
Yes
SD MMC
1 Check SD/MMC Selection fuse 2
Start GPT with 1s delay MMC Boot Set MMC card CSD Set operating frequency MMC Boot
Voltage Validation (Issue CMD9) to 20 MHz Device Init
for CMD1
Set Weak pull-up Put card data Transfer
For CMD line Mode (Issue CMD7)
Issue CMD1 with HV Increment loop counter
Yes Yes
No No
Command Successful? Command Successful?
No Yes
Command Successful? 5
No Send CMD13 to read
Yes Set RCA (Issue CMD3) status
Yes Loop Cntr < 3000 and Yes
Busy Bit == 1 Yes
looping period < 1s Card State ==
No 5
Command Successful? TRANS?
No
Is Response OCR for Yes Yes
Card Is HC MMC
HC Get CID from card(Issue No
Spec ver >= 4.0?
CMD2)
No Yes
Card Is LC MMC
Send CMD8 to get
Ext_CSD
No
Command Successful?
Yes
Set CMD13 poll timeout
to 100ms
Command Successful?
No Yes
CMD13 Poll No Card State ==
timeout? TRANS?
Yes Yes
End
Issue CMD55
Set ACMD41 ARG bit 28
for SDXC power control
No
Command Successful?
Yes Yes
FAST_BOOT Yes
selected? No Loop Cntr < 3000 and
Issue ACMD41 2
looping period < 1s
No
No
Command Successful?
Bit 24 of response No
2
0 set?
Yes
8 SD Boot
Switch Voltage
No
Command Successful?
Yes
No
DATA lines driven low?
Yes
switch supply voltage
to 1.8v
No
Voltage high No DATA lines
poll timeout? driven high?
Yes Yes
2 7
No No
Put card data Transfer
5 Mode (Issue CMD7)
No
No
Card State == Send CMD13 to read Yes
TRANS? Command Successful?
status
Yes
Yes
UHSI mode selected? 9
No
No
Command Successful? 4
9 SD Boot
UHSI init
Check response of
CMD7
Yes No
Card is locked?
No
No Send ACMD6 with Yes
Command Successful? Command Successful? Send CMD55
argument of 4 bit width
Yes
Set CMD13 poll timeout Yes Change USDHC bus
Check Status Success?
to 100ms width
No
Yes
Change USDHC clock Loopback clock Yes Set loopback clock bit in
speed fuse set? USDHC register
No
Init failed
11
No
Command Successful?
Yes
CMD13 Poll No Card State ==
timeout? TRANS?
Yes
Failure Success Failure
End
4 SD/MMC Boot
Data Read
Yes
No
Send CMD18 (multiple
block read)
No
Command Successful? 5
Yes
End
6
eMMC 4.x Boot
Fast Boot
Acknowledge token Set GPT poll counter to Wait for block gap or
accepted? 1s timeout
End
2
SD Boot
11 sample point tuning
Yes
Set the USDHC into Exceed limit?
tuning mode
No
Configure the block
Set delay cell number to
length and block number
current value
4 10
Where:
• The tag is used as an indication of the valid secondary image table. It must be
0x00112233.
• The firstSectorNumber is the first 512-byte sector number of the secondary image.
For the secondary image support, the primary image must reserve the space for the
secondary image table. See this figure for the typical structures layout on an expansion
device.
0x00000000
Reserved for Guid
- 0x00007FFF
Partition Table (GPT)
0x00008000
Reserved for MBR
(
(optional))
0x00008200
Reserved for Secondary
Image Table (optional)
0x00008400
Program Image
(starting from IVT)
Media Partitions
For the Closed mode, if there are failures during primary image authentication, the boot
ROM turns on the PERSIST_SECONDARY_BOOT bit (see Table 6-8) and performs the
software reset. (After the software reset, the secondary image is used.)
1. The setting can be overridden by the GPIO settings when the BT_FUSE_SEL fuse is intact. See Table 1 for the
corresponding GPIO pin.
The ECPSI-1/ECPSI-2/ECPSI-3 block can be used as a boot device using the ECSPI
interface for the serial(SPI) NOR boot. The SPI interface is configured to operate at 12.5
MHz for 3-byte addressing devices and at 3.125 MHz for 2-byte addressing devices.
The boot ROM copies 4 KB of data from the serial ROM device to the internal RAM.
After checking the Image Vector Table header value (0xD1) from the program image, the
ROM code performs a DCD check. After a successful DCD extraction, the ROM code
extracts the destination pointer and length of image from the Boot Data Structure to be
copied to the RAM device from where the code execution occurs.
NOTE
The Initial 4 KB of program image must contain the IVT, DCD,
and the Boot Data Structures.
Table 6-25. Image Vector Table Offset and Initial Load Region Size (continued)
Boot Device Type Image Vector Table Offset Initial Load Region Size
SD/eSD/MMC/eMMC normal boot 33 Kbyte = 0x8400 bytes 8 Kbyte
eMMC Fast boot 1 Kbyte = 0x400 bytes 8 Kbyte
FlexSPI 4 Kbyte = 0x1000 bytes 8 Kbyte
ECSPI 1 Kbyte = 0x400 bytes 8 Kbyte
Initial
Load Region
where:
Tag: A single byte field set to 0xD1
Length: a two byte field in big endian format containing the overall length of the IVT,
in bytes, including the header. (the length is fixed and must have a value of
32 bytes)
Version: A single byte field set to 0x40 or 0x41
For example, the EIM default settings allow the core to interface to a NOR flash device
immediately after the reset. This allows the chip to interface with any NOR flash device,
but has the disadvantage of slow performance. Additionally, some components (such as
DDR) require some sequence of register programming as a part of the configuration
before it is ready to be used. The DCD feature can be used to program the EIM registers
and the DDR Controller registers to the optimal settings.
The ROM determines the location of the DCD table based on the information located in
the Image Vector Table (IVT). See Image Vector Table and Boot Data for more details.
The DCD table shown below is a big-endian byte array of the allowable DCD commands.
The maximum size of the DCD is limited to 1768 B.
Header
[CMD]
[CMD]
...
where:
Tag: A single-byte field set to 0xD2
Length: a two-byte field in the big-endian format containing the overall length of the DCD
(in bytes) including the header
Version: A single-byte field set to 0x41
The format of the write data command (in a big-endian byte array) is shown in this table:
Table 6-28. Write data command format
Tag Length Parameter
Address
Value/Mask
[Address]
[Value/Mask]
...
[Address]
[Value/Mask]
where:
Tag: a single-byte field set to 0xCC
Length: a two-byte field in a big-endian format, containing the length of the Write Data
Command (in bytes) including the header
Address: the target address to which the data must be written
Value/Mask: the data value (or bitmask) to be written to the preceding address
The parameter field is a single byte divided into the bitfields, as follows:
Table 6-29. Write data command parameter field
7 6 5 4 3 2 1 0
flags bytes
where
bytes: the width of the target locations in bytes (either 1, 2, or 4)
flags: control flags for the command behavior
Data Mask = bit 3: if set, only specific bits may be overwritten at the target address
(otherwise all bits may be overwritten)
Data Set = bit 4: if set, the bits at the target address are overwritten with this flag
(otherwise it is ignored)
One or more target address and value/bitmask pairs can be specified. The same bytes' and
flags' parameters apply to all locations in the command.
When successful, this command writes to each target address in accordance with the flags
as follows:
Table 6-30. Interpretation of write data command flags
"Mask" "Set" Action Interpretation
0 0 *address = val_msk Write value
0 1 *address = val_msk Write value
1 0 *address &= ~val_msk Clear bitmask
1 1 *address |= val_msk Set bitmask
NOTE
If any of the target addresses does not have the same alignment
as the data width indicated in the parameter field, none of the
values are written.
If any of the values are larger or any of the bitmasks are wider
than permitted by the data width indicated in the parameter
field, none of the values are written.
If any of the target addresses do not lie within the allowed
region, none of the values are written. The list of allowable
blocks and target addresses for the chip are provided below.
where:
Tag: a single-byte field set to 0xCF
Length: a two-byte field in the big-endian format containing the length of the check data
command (in bytes) including the header
Address: the source address to test
Mask: the bit mask to test
Count: an optional poll count; If the count is not specified, this command polls
indefinitely
until the exit condition is met. If count = 0, this command behaves as for the NOP.
where
bytes: the width of target locations in bytes (either 1, 2, or 4)
flags: control flags for the command behavior
Data Mask = bit 3: if set, only the specific bits may be overwritten at a target address
This command polls the source address until either the exit condition is satisfied, or the
poll count is reached. The exit condition is determined by the flags as follows:
Table 6-33. Interpretation of check data command flags
"Mask" "Set" Action Interpretation
0 0 (*address & mask) == 0 All bits clear
0 1 (*address & mask) == mask All bits set
1 0 (*address & mask)!= mask Any bit clear
1 1 (*address & mask)!= 0 Any bit set
NOTE
If the source address does not have the same alignment as the
data width indicated in the parameter field, the value is not
read.
If the bitmask is wider than permitted by the data width
indicated in the parameter field, the value is not read.
where:
Tag: a single-byte field set to 0xC0
Length: a two-byte field in big endian containing the length of the NOP command in bytes
(fixed to a
value of 4)
Undefined: this byte is ignored and can be set to any value.
The format of the unlock command (in a big-endian byte array) is shown in this table:
Table 6-35. Unlock command format
Tag Length Eng
Value
Value
...
Value
where:
NOTE
This command may not be used in the DCD structure if the
SEC_CONFIG is configured as closed.
START
Configure USBOTG1,
, program WDOG for 32 sec timer
Poll USBOTG1 No
WDOG_ENABLE
Activity
No == 1 &&
Detected WDOG timeout
Yes
Yes
NOTE
Before going into USB serial mode, Boot ROM detect
SD/MMC card on USDHC2 port. If a card is inserted, ROM
will try to boot from it. This is the so-called Manufacture
SD/MMC boot. This feature can be disabled by blowing fuse
“Disable SD/MMC Manufacture Mode”. See SD/MMC
manufacture mode for details.
6.1.8.1 USB
The USB support is composed of the USB (core controller, compliant with the USB 2.0
specification) and the USBPHY (HS USB transceiver).
The ROM supports the USB OTG port for boot purposes. The other USB ports on the
chip are not supported for boot purposes.
The USB Driver is implemented as a USB HID class. A collection of four HID reports
are used to implement the SDP protocol for data transfers, as described in Table 6-36.
Table 6-36. USB HID reports
Report ID (first byte) Transfer endpoint Direction Length Description
1 control OUT Host to device 17 B SDP command from the
host to the device.
2 control OUT Host to device Up to 1025 B Data associated with
the report 1 SDP
command.
3 interrupt Device to host 5B HAB security
configuration. The
device sends
0x12343412 in the
closed mode and
0x56787856 in the
open mode.
4 interrupt Device to host Up to 65 B Data in response to the
SDP command in report
1.
SP Blank
NS Blank
FR Blank
String Descriptor4 NXP Flash
String Descriptor5 NXP Flash
6.1.8.2.1.1 READ_REGISTER
The transaction for the READ_REGISTER command consists of these reports: Report1
for the command, Report3 for the security configuration, and Report4 for the response or
the register value.
The register to read is specified in the ADDRESS field of the SDP command. The first
device sends Report3 with the security configuration followed by the Report4 with the
bytes read at a given address. If the count is greater than 64, multiple reports with the
report id 4 are sent until the entire data requested by the host is sent. The STATUS is
either 0x12343412 for the closed parts and 0x56787856 for the open or field return parts.
Report1, Command, Host to Device:
1 Valid values for the READ_REGISTER COMMAND, ADDRESS, FORMAT, DATA_COUNT
ID 4 bytes status
Report4, Response, Device to Host: first response report
4 Register value
ID 4 bytes of data containing the register value. If the number of bytes requested is less
than 4, the remaining bytes must be ignored by the host.
Multiple reports of the report id 4 are sent until the entire requested data is sent.
Report4, Response, Device to Host: last response report
4 Register value
ID 64 bytes of data containing the register value. If the number of bytes requested is less
than 64, the remaining bytes must be ignored by the host.
6.1.8.2.1.2 WRITE_REGISTER
The transaction for the WRITE_REGISTER command consists of these reports: Report1
for the command, Report3 for the security configuration and Report4 for the write status.
The host sends Report1 with the WRITE_REGISTER command. The register to write is
specified in the ADDRESS field of the SDP command of Report1, with the FORMAT
field set to the data type (number of bits to write, either 8, 16, or 32) and the value to
write in the DATA field of the SDP command. The device writes the DATA to the
register address and returns the WRITE_COMPLETE code using Report4 and the
security configuration using Report3 to complete the transaction.
Report1, Command, Host to Device:
1 Valid values for WRITE_REGISTER COMMAND, ADDRESS, FORMAT, DATA_COUNT and DATA
ID 4 bytes status
Report4, Response, Device to Host:
4 WRITE_COMPLETE (0x128A8A12) status
ID 64 bytes data with the first 4 bytes to indicate that the write is completed with code
0x128A8A12. On failure, the device reports the HAB error status.
6.1.8.2.1.3 WRITE_FILE
The transaction for the WRITE_FILE command consists of these reports: Report1 for the
command phase, Report2 for the data phase, Report3 for the HAB mode, and Report4 to
indicate that the data are received in full.
The size of each Report2 is limited to 1024 bytes (limitation of the USB HID protocol).
Hence, multiple Report2 packets are sent by the host in the data phase until the entire
data is transferred to the device. When the entire data (DATA_COUNT bytes) is
received, the device sends Report3 with the HAB mode and Report4 with 0x88888888,
indicating that the file download completed.
i.MX 8M Mini Applications Processor Reference Manual, Rev. 3, 11/2020
NXP Semiconductors 845
System Boot
========================Optional Begin=================
Host sends the ERROR_STATUS command to query if the HAB rejected the address
======================== Optional End==================
Report2, Host to Device:
2 File data
ID 4 bytes status
ID 64 bytes data with the first four bytes to indicate that the file download completed
with code 0x88888888. On failure, the device reports the HAB error status.
6.1.8.2.1.4 ERROR_STATUS
The transaction for the SDP command ERROR_STATUS consists of three reports.
Report1 is used by the host to send the command; the device sends global error status in
four bytes of Report4 after returning the security configuration in Report3. When the
device receives the ERROR_STATUS command, it returns the global error status that is
updated for each command. This command is useful to find out whether the last
command resulted in a device error or succeeded.
Report1, Command, Host to Device:
1 ERROR_STATUS COMMAND
ID 4 bytes status
Report4, Response, Device to Host:
4 Four bytes Error status
6.1.8.2.1.5 DCD_WRITE
The SDP command DCD_WRITE is used by the host to send multiple register writes in
one shot. This command is provided to speed up the process of programming the register
writes (such as to configure an external RAM device).
The command goes with Report1 from the host with COMMAND TYPE set to
DCD_WRITE, ADDRESS which is used as a temporary location of the DCD data, and
DATA_COUNT to the number of bytes sent in the data out phase. In the data phase, the
host sends the data for a number of registers using Report2. The device completes the
transaction with Report3 indicating the security configuration and Report4 with the
WRITE_COMPLETE code 0x12828212.
Report1, Command, Host to Device:
1 DCD_WRITE COMMAND, ADDRESS, DATA_COUNT
ID 4 bytes status
Report4, Response, Device to Host:
4 WRITE_COMPLETE (0x128A8A12) status
ID 64 bytes report with the first four bytes to indicate that the write completed with the
code 0x128A8A12. On failure, the device reports the HAB error status.
See Device Configuration Data (DCD) for the DCD format description.
6.1.8.2.1.6 SKIP_DCD_HEADER
The SDP command SKIP_DCD_HEADER is used by the host to inform the device to
skip the DCD configuration within the download image.
If the download image must be run on the DDR, the DCD configuration data must be
built into the image. In case the host issued DCD_WRITE to push the DCD configuration
data to the device for the DDR initialization, the image with the DCD information causes
the ROM to initialize the DDR twice, and may cause the initialization processing to hang.
The SKIP_DCD_HEADER command informs the device to skip the DCD configuration
within the download image and avoid this issue.
This command is typically sent after JUMP_ADDRESS. This command is sent by the
host in the command-phase of the transaction using Report1, there is no data phase for
this command. The device completes the transaction with Report3 indicating the security
configuration and Report4 with the OK_ACK code 0x900DD009.
Report1, Command, Host to Device:
1 SKIP_DCD_HEADER
ID 4 bytes status
Report4, Response, Device to Host:
4 OK_ACK (0x900DD009)
6.1.8.2.1.7 JUMP_ADDRESS
The SDP command JUMP_ADDRESS is the last command that the host can send to the
device. After this command, the device jumps to the address specified in the ADDRESS
field of the SDP command and starts to execute.
This command usually follows after the WRITE_FILE command. The command is sent
by the host in the command-phase of the transaction using Report1. There is no data
phase for this command, but the device sends the status Report3 to complete the
transaction. If the authentication fails, it also sends Report4 with the HAB error status.
Report1, Command, Host to Device:
1 JUMP_ADDRESS COMMAND, ADDRESS
ID 4 bytes status
This report is sent by the device only in case of an error jumping to the given address, or
if the device reports error in Report4, Response, Device to Host:
4 Four bytes HAB error status
Start
No
No
GPIO1_9 pad equals
LPB_POLARITY fuse?
Yes
Enable PLLs
End
BOOT_MODE==0 and
BOOT_MODE==1 BOOT_MODE==2
BT_FUSE_SEL==0
N
N EEPROM recovery N
success?
enabled?
SDMMC MFG mode boot
Y Y
EEPROM recovery
Y
success?
N
N
success?
USB download mode
application entry
CAAM
Flash
ROM
HAB
Core Processor
SNVS
RAM
The figure above illustrates the components used during a secure boot using HAB. The
HAB interfaces with the SNVS to make sure that the system security state is as expected.
The HAB also uses the CAAM hardware block to accelerate the SHA-256 message
digest operations performed during the signature verifications and AES-128 operations
for the encrypted boot operations. The HAB also includes a software implementation of
SHA-256 for cases where a hardware accelerator can't be used. The RSA key sizes
supported are 1024, 2048, 3072, and 4096 bits. The RSA signature verification operations
are performed by a software implementation contained in the HAB library. The main
features supported by the HAB are:
• X.509 public key certificate support
NOTE
The boot ROM sets the GPT1 in a free-running mode with a
32-kHz input clock.
Boot device type mapping:
• 0x1 - SD card or eSD chip
• 0x2 - MMC card or eMMC chip
• 0x3 - NAND chip
Boot device instance: The instance index of the boot device, starting from 0.
6.2 Fusemap
NOTE
Fuses marked as “Reserved” are reserved for NXP internal (and
future) use only. Customers should not attempt to burn these, as
NOTE
TESTER_LOCK programmed by NXP / set at factory
6.3.1 Overview
This section contains information describing the requirements for the on-chip eFuse OTP
controller along with details about the block functionality and implementation.
In this document, the words "eFuse" and "OTP" are interchangeable. OCOTP refers to
the hardware block itself.
6.3.1.1 Features
The OCOTP provides the following features:
• Loading and housing of fuse content into shadow registers.
• Generation of HWV_FUSE (hardware visible fuse bus) and the HWV_REG bus
which is made up of volatile PIO register based "fuses". The HWV_REG bits come
from the SCS (Software Controllable Signals) register.
• Generation of STICKY_REG which is consist of sticky register bits.
• Provide program-protect and read-protect eFuse.
• Provide override and read protection of shadow register.
OCOTP_CTRL
APB Interface
IP bus
OCOTP control register 5 ip2apb
OTP
FUSE
6.3.2.1 Operation
The IP bus interface of the OCOTP provides two functions.
• Configure control registers for programming and reading fuse .
• Override and read shadow registers.
The OCOTP Control and Status Register provides the necessary software interface for
performing read and write operations to the On-Chip OTP (One-Time Programmable
ROM). The control fields such as WR_UNLOCK, ADDR and BUSY/ERROR may be
used in conjuction with the HW_OCOTP_DATA register to perform write operations.
Read operations to the On-Chip OTP are involving ADDR, BUSY/ERROR bit field and
HW_OCOTP_READ_CTRL register. Read value is saved in
HW_OCOTP_READ_FUSE_DATA register.
Address: 3035_0000h base + 0h offset + (4d × i), where i=0d to 3d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
WR_UNLOCK
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BUSY
RELOAD_SHADOWS
R
ERROR
Reserved ADDR
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This register specifies timing parameters for programming and reading the OCOTP fuse
array.
Address: 3035_0000h base + 10h offset = 3035_0010h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R RSRVD0
WAIT STROBE_READ RELAX STROBE_PROG
W
Reset 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
DATA
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This register is used in conjuction with HW_OCOTP_CTRL to perform one time read to
the OTP.
Address: 3035_0000h base + 30h offset = 3035_0030h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R RSVD0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R RSVD0
READ_FUSE
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
DATA
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Some sticky bits are used by SW to lock some fuse area , shadow registers and other
features.
Address: 3035_0000h base + 50h offset = 3035_0050h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R RSVD2
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DISABLE_READ_GROUP_MASK
RSVD1
JTAG_BLOCK_RELEASE
R RSVD2 RSVD0
FIELD_RETURN_LOCK
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This register holds volatile configuration values that can be set and locked by trusted
software. All values are returned to their defualt values after POR.
Address: 3035_0000h base + 60h offset + (4d × i), where i=0d to 3d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
LOCK
SPARE
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
HAB_JDE
SPARE
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 1 0 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R GP2 GP1
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MAC_ADDR
SJC_RESP
R USB_ID BOOT_CFG TESTER
Reserved
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
BITS
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
32/ Interrupts
MC Era Bits
System Security Configuration
HP
Config. Inputs IP Bus Interface
Secure Scan Enable
System Secure Boot & Control Periodic Interrupt
Time Alarm
Security Violations
Software
Violation
Trusted State System Security
Real Time Counter
Secure State Monitor Software
Security State Fail State Fatal Violation
Hard Reset Req.
Scan Mode
Scan Enter
Scan Control Bus
Scan Exit
HP-LP Interface
256/ VCC
OTPMK
Master Key Chip Power Domain
256/ Control Internal
Master Key LP-HP Bus
Isolation Cells
LP Control
dumb_pmic_default VCC
PMIC
pmic_en_b LP Power Domain
Control
btn
Security Event
Set_pwr_off_irq
LP
LP Power Supply
LP Power-On-Reset
LP POR HP Power
Module Fail Detector
32/
Low-Voltage Detector Register
Digital Low-Voltage Violation
Compare
32/
41736166h
(Hardwired value is in hexadecimal format)
an interrupt request at a specific time HPTA_EN is set to 0, the desired time is written to
HPTA_MS and HPTA_LS and then HPTA_EN is set to 1. HPTA_EN, HPTA_MS and
HPTA_LS can be written by any software that has access to SNVS registers; there are no
privileged access restrictions. The counter can be synchronized to the SNVS_LP SRTC
by writing to the HP_TS bit of SNVS_HP Control Register. This is particularly useful if
the SNVS_LP is powered from an uninterrupted power source because the RTC can then
be set from a chip-internal time source.
• Enable bit clearing does not happen immediately; it takes three IP clock cycles and
two RTC/SRTC clock cycles to change the enable bit's value.
• If the enable bit is locked for programming, it cannot be cleared.
3. Program the desired value.
4. Set the enable bit; it takes three IP clock cycles and two RTC/SRTC clock cycles for
the bit to set.
NOTE
Incrementing the value programmed into RTC/SRTC registers
by two compensates for the two RTC/SRTC clock cycle delay
that is required to enable the counter.
general purpose register is aliased to the original legacy address, and to maintain
backward compatibility with versions of snvs_module_name that implement a 128-bit
general purpose register, the most-significant half of the general purpose register is
aliased to the previous legacy address address. The data in the GPR will be retained
during system power-down mode as long as the SNVS_LP remains powered by an
uninterrupted power source.
HP_Lock
register HP_COM
register
Lock Lock
If HAC_Enable
CAAM is set, setting
HAC_CLEAR is
SFP a security
Security
Security violation which
SDC violation
violation IRQ to causes an
interrupt
TMP_DETECT control MPIC instant hard fail.
control
register
register
LP_Section
Enable
Clear
Load
Stop
HA Counter
initial value
Each Sec_Vio configured as fatal starts
the HAC in addition to initiating an IRQ. Soft fail 0010000
HA counter
0007321
Memory zeroization
Hard fail
state
RESET_REQ
27
This section contains detailed register descriptions for the SNVS registers. Each
description includes a standard register diagram and register table. The register table
provides detailed descriptions of the register bit and field functions, in bit order.
SNVS registers consist of two types:
• Privileged read/write accessible
• Non-privileged read/write accessible
The SNVS_HP Command Register contains the command, configuration, and control bits
for the SNVS block. This is a privileged write register.
6.4.5.2.1 Offset
Register Offset
HPCOMR 4h
6.4.5.2.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
NPSWA_EN
Reserved
Reserved
Reserved
Reserved
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
LP_SWR_DI
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
LP_SW
W
R
S
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.2.3 Fields
Field Description
31 Non-Privileged Software Access Enable
NPSWA_EN When set, allows non-privileged software to access all SNVS registers, including those that are privileged
software read/write access only.
0 Only privileged software can access privileged registers
1 Any software can access privileged registers
30-20 Reserved
—
Field Description
19 Reserved
—
18 Reserved
—
17 Reserved
—
16 Reserved
—
15-14 Reserved
—
13 Reserved
—
12-11 Reserved
—
10 Reserved
—
9 Reserved
—
8 Reserved
—
7-6 Reserved
—
5 LP Software Reset Disable
LP_SWR_DIS When set, disables the LP software reset. Once set, this bit can only be reset by the system reset.
0 - LP software reset is enabled
1 - LP software reset is disabled
4 LP Software Reset
LP_SWR When set to 1, the registers in the SNVS_LP section are reset.
0 - No Action
1 - Reset LP section
3 Reserved
—
2 Reserved
—
1 Reserved
—
0 Reserved
—
The SNVS_HP Control Register contains various control bits of the HP section of SNVS.
This is not a privileged write register.
6.4.5.3.1 Offset
Register Offset
HPCR 8h
6.4.5.3.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
BTN_CONFIG
BTN_MASK
Reserved
Reserved
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
HPCALB_VAL
HPCALB_EN
HPTA_EN
RTC_EN
Reserved
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.3.3 Fields
Field Description
31-28 Reserved
—
27 Button interrupt mask.
BTN_MASK This bit is used to mask the button (BTN) interrupt request.
0: Interrupt disabled
1: Interrupt enabled
Field Description
26-24 Button Configuration.
BTN_CONFIG This field is used to configure which feature of the button (BTN) input signal constitutes "active".
000: Button signal is active high
001: Button signal is active low
010: Button signal is active on the falling edge
011: Button signal is active on the rising edge
100: Button signal is active on any edge
All other patterns are Reserved
23-17 Reserved
—
16 Reserved
—
15 Reserved
—
14-10 HP Calibration Value
HPCALB_VAL Defines signed calibration value for the HP Real Time Counter. This field can be programmed only when
RTC Calibration is disabled (HPCALB_EN is not set). This is a 5-bit 2's complement value, hence the
allowable calibration values are in the range from -16 to +15 counts per 32768 ticks of the counter.
00000 - +0 counts per each 32768 ticks of the counter
00001 - +1 counts per each 32768 ticks of the counter
00010 - +2 counts per each 32768 ticks of the counter
01111 - +15 counts per each 32768 ticks of the counter
10000 - -16 counts per each 32768 ticks of the counter
10001 - -15 counts per each 32768 ticks of the counter
11110 - -2 counts per each 32768 ticks of the counter
11111 - -1 counts per each 32768 ticks of the counter
9 Reserved
—
8 HP Real Time Counter Calibration Enabled
HPCALB_EN Indicates that the time calibration mechanism is enabled.
0 - HP Timer calibration disabled
1 - HP Timer calibration enabled
7-2 Reserved
—
1 HP Time Alarm Enable
HPTA_EN When set, the time alarm interrupt is generated if the value in the HP Time Alarm Registers is equal to
the value of the HP Real Time Counter.
0 - HP Time Alarm Interrupt is disabled
1 - HP Time Alarm Interrupt is enabled
0 HP Real Time Counter Enable. This bit syncs with the 32KHz clock. It won't update with the bus clock.
Field Description
RTC_EN 0 - RTC is disabled
1 - RTC is enabled
The HP Status Register reflects the internal state of the SNVS. This is not a privileged
write register.
6.4.5.4.1 Offset
Register Offset
HPSR 14h
6.4.5.4.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reserved
Reserved
Reserved
Reserved
W
Reset 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
W1C HPTA
BTN
LPDI
R
BI
Reserved
Reserved
Reserved
Reserved
Reserved
S
W1C
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.4.3 Fields
Field Description
31 Reserved
—
Field Description
30-28 Reserved
—
27 Reserved
—
26-25 Reserved
—
24-16 Reserved
—
15-12 Reserved
—
11-8 Reserved
—
7 Button Interrupt
BI Signal ipi_snvs_btn_int_b was asserted.
6 Button
BTN Value of the BTN input. This is the external button used for PMIC control.
0: BTN not pressed
1: BTN pressed
5 Reserved
—
4 Low Power Disable
LPDIS If 1, the low power section has been disabled by means of an input signal to SNVS.
3-2 Reserved
—
1 Reserved
—
0 HP Time Alarm
HPTA Indicates that the HP Time Alarm has occurred since this bit was last cleared.
0 - No time alarm interrupt occurred.
1 - A time alarm interrupt occurred.
The SNVS_HP Real Time Counter MSB register contains the 15 most-significant bits of
the HP Real Time Counter. This is not a privileged write register.
6.4.5.5.1 Offset
Register Offset
HPRTCMR 24h
6.4.5.5.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
RTC
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.5.3 Fields
Field Description
31-15 Reserved
—
14-0 HP Real Time Counter
RTC The most-significant 15 bits of the RTC. This register can be programmed only when RTC is not active
(RTC_EN bit is not set).
The SNVS_HP Real Time Counter LSB register contains the 32 least-significant bits of
the HP real time counter. This is not a privileged write register.
6.4.5.6.1 Offset
Register Offset
HPRTCLR 28h
6.4.5.6.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
RTC
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
RTC
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.6.3 Fields
Field Description
31-0 HP Real Time Counter
RTC least-significant 32 bits. This register can be programmed only when RTC is not active (RTC_EN bit is not
set).
The SNVS_HP Time Alarm MSB register contains the most-significant bits of the
SNVS_HP Time Alarm value. This is not a privileged write register.
6.4.5.7.1 Offset
Register Offset
HPTAMR 2Ch
6.4.5.7.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
HPTA_MS
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.7.3 Fields
Field Description
31-15 Reserved
—
14-0 HP Time Alarm, most-significant 15 bits.
HPTA_MS This register can be programmed only when HP time alarm is disabled (HPTA_EN bit is not set).
The SNVS_HP Time Alarm LSB register contains the 32 least-significant bits of the
SNVS_HP Time Alarm value. This is not a privileged write register.
6.4.5.8.1 Offset
Register Offset
HPTALR 30h
6.4.5.8.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
HPTA_LS
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
HPTA_LS
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.8.3 Fields
Field Description
31-0 HP Time Alarm, 32 least-significant bits.
HPTA_LS This register can be programmed only when HP time alarm is disabled (HPTA_EN bit is not set).
The SNVS_LP Lock Register contains lock bits for the SNVS_LP registers. This is a
privileged write register.
6.4.5.9.1 Offset
Register Offset
LPLR 34h
6.4.5.9.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
MC_HL
GPR_H
W
L
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.9.3 Fields
Field Description
31-29 Reserved
—
28 Reserved
—
27 Reserved
—
26 Reserved
—
25 Reserved
—
24 Reserved
—
23-10 Reserved
—
9 Reserved
—
8 Reserved
—
7 Reserved
—
6 Reserved
—
5 General Purpose Register Hard Lock
Table continues on the next page...
Field Description
GPR_HL When set, prevents any writes to the GPR. Once set, this bit can only be reset by the LP POR.
0 - Write access is allowed.
1 - Write access is not allowed.
4 Monotonic Counter Hard Lock
MC_HL When set, prevents any writes (increments) to the MC Registers and MC_ENV bit. Once set, this bit can
only be reset by the LP POR.
0 - Write access (increment) is allowed.
1 - Write access (increment) is not allowed.
3 Reserved
—
2 Reserved
—
1 Reserved
—
0 Reserved
—
The SNVS_LP Control Register contains various control bits of the LP section of SNVS.
This is a privileged write register.
6.4.5.10.1 Offset
Register Offset
LPCR 38h
6.4.5.10.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
BTN_PRESS_TIM
PK_OVERRIDE
DEBOUNCE
ON_TIME
Reserved
Reserved
PK_EN
W
E
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
LPWUI_EN
MC_ENV
LVD_EN
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
Reserved
TOP
DP_E
W
N
Reset 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
6.4.5.10.3 Fields
Field Description
31-25 Reserved
—
24 Reserved
—
23 PMIC On Request Override
PK_OVERRIDE The value written to PK_OVERRIDE will be asserted on output signal snvs_lp_pk_override. That signal is
used to override the IOMUX control for the PMIC I/O pad.
22 PMIC On Request Enable
PK_EN The value written to PK_EN will be asserted on output signal snvs_lp_pk_en. That signal is used to turn
off the pullup/pulldown circuitry in the PMIC I/O pad.
21-20 The ON_TIME field is used to configure the period of time after BTN is asserted before pmic_en_b is
asserted to turn on the SoC power.
ON_TIME
00: 500msec off->on transition time
01: 50msec off->on transition time
10: 100msec off->on transition time
11: 0msec off->on transition time
19-18 This field configures the amount of debounce time for the BTN input signal.
DEBOUNCE 00: 50msec debounce
01: 100msec debounce
10: 500msec debounce
11: 0msec debounce
Field Description
17-16 This field configures the button press time out values for the PMIC Logic.
BTN_PRESS_TI 00 : 5 secs
ME
01 : 10 secs
10 : 15 secs
11 : long press disabled (pmic_en_b will not be asserted regardlessof how long BTN is asserted)
15 Reserved
—
14-10 Reserved
—
9 Reserved
—
8 Reserved
—
7 Digital Low-Voltage Event Enable
LVD_EN By default the detection of a low-voltage event does not cause the pmic_en_b signal to be asserted.
Setting the Digital Low-Voltage Event Enable bit to 1 enables the low-voltage event for the PMIC.
0 - disabled
1 - enabled
6 Turn off System Power
TOP Asserting this bit causes a signal to be sent to the Power Management IC to turn off the system power.
This bit will clear once power is off. This bit is only valid when the Dumb PMIC is enabled.
0 - Leave system power on.
1 - Turn off system power.
5 Dumb PMIC Enabled
DP_EN When set, software can control the system power. When cleared, the system requires a Smart PMIC to
automatically turn power off.
0 - Smart PMIC enabled.
1 - Dumb PMIC enabled.
4 Reserved
—
3 LP Wake-Up Interrupt Enable
LPWUI_EN This interrupt line should be connected to the external pin and is intended to inform the external chip
about an SNVS_LP event (MC rollover, SRTC rollover, or time alarm ). This wake-up signal can be
asserted only when the chip (HP section) is powered down, and the LP section is isolated.
0 LP wake-up interrupt is disabled.
1 LP wake-up interrupt is enabled.
2 Monotonic Counter Enabled and Valid
MC_ENV When set, the MC can be incremented (by write transaction to the LPSMCMR or LPSMCLR). Once
MC_SL or MC_HL bit is set this bit can be changed only by LP software reset or LP POR.
0 - MC is disabled or invalid.
1 - MC is enabled and valid.
Field Description
1 Reserved
—
0 Reserved
—
The SNVS_LP Status Register reflects the internal state and behavior of the SNVS_LP.
This is a privileged write register.
6.4.5.11.1 Offset
Register Offset
LPSR 4Ch
6.4.5.11.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
W1C SPO
R
Reserved
Reserved
Reserved
Reserved
Reserved
O
E
F
W1C
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
W1C Reserved
W1C Reserved
MCR
R
Reserved
Reserved
Reserved
Reserved
Reserved
W1C
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
6.4.5.11.3 Fields
Field Description
31 Reserved
—
30 Reserved
—
29-20 Reserved
—
19 Reserved
—
18 Set Power Off
SPOF The SPO bit is set when the power button is pressed longer than the configured debounce time. Writing
to the SPO bit will clear the set_pwr_off_irq interrupt.
0 - Set Power Off was not detected.
1 - Set Power Off was detected.
17 Emergency Off
EO This bit is set when a power off is requested.
0 - Emergency off was not detected.
1 - Emergency off was detected.
16 Reserved
—
15-11 Reserved
—
10 Reserved
—
9 Reserved
—
8-7 Reserved
—
6-4 Reserved
—
3 Reserved
—
2 Monotonic Counter Rollover
MCR 0 - MC has not reached its maximum value.
1 - MC has reached its maximum value.
1-0 Reserved
—
The SNVS_LP Secure Monotonic Counter MSB Register contains the monotonic counter
era bits and the most-significant 16 bits of the monotonic counter. The monotonic counter
is incremented by one if there is a write command to the LPSMCMR or LPSMCLR
register. This is a non-privileged read-only register.
6.4.5.12.1 Offset
Register Offset
LPSMCMR 5Ch
6.4.5.12.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R MC_ERA_BITS
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
MON_COUNTER
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.12.3 Fields
Field Description
31-16 Monotonic Counter Era Bits
MC_ERA_BITS These bits are inputs to the module and typically connect to fuses. When the Monotonic Counter is in use
(i.e. enabled and valid and powered by an uninterrupted power source), and the boot software detects
that the Monotonic Counter most-significant 16 Bits and Monotonic Counter LSB Register have been
reset (MC_ENV=0), the boot software can take action to ensure that the value in the monotonic counter
remains monotonic (i.e. never decreasing). The action is to blow an additional MC_ERA_BITS fuse.
Since the MC_ERA_BITS field forms the most-significant field of the monotonic counter, blowing an
additional fuse guarantees that the new monotonic counter value is higher than any previous value. Since
the Monotonic Counter is reset on an LP Software Reset, an excessive number of MC_ERA_BITS fusez
may be consumed if LP Software Reset is used repeatedly.
Field Description
15-0 Monotonic Counter most-significant 16 Bits
MON_COUNTE Note that writing to this register does not change the value of this field to the value that was
R written.
The 48-bit monotonic counter value (consisting of LPSMCMR[MON_COUNTER] prepended to
LPSMCLR[MON_COUNTER]) is incremented by one when:
• A write transaction to the LPSMCMR or LPSMCLR register is detected.
• The MC_ENV bit is set.
• MC_SL and MC_HL bits are not set.
The SNVS_LP Secure Monotonic Counter LSB Register contains the 32 least-significant
bits of the monotonic counter. The MC is incremented by one if there is a write command
to the LPSMCMR or LPSMCLR register. This is a non-privileged read-only register.
6.4.5.13.1 Offset
Register Offset
LPSMCLR 60h
6.4.5.13.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
MON_COUNTER
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
MON_COUNTER
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.13.3 Fields
Field Description
31-0 Monotonic Counter bits
MON_COUNTE Note that writing to this register does not change the value of this field to the value that was
R written.
The 48-bit monotonic counter value (consisting of LPSMCMR[MON_COUNTER] prepended to
LPSMCLR[MON_COUNTER]) is incremented by one when:
• A write transaction to the LPSMCMR or LPSMCLR register is detected.
• The MC_ENV bit is set.
• MC_SL and MC_HL bits are not set.
The SNVS_LP Digital Low-Voltage Detector Register is a 32-bit read/write register that
is used for storing the low-voltage detector value, as described in Digital Low-Voltage
Detector (LVD). This is a privileged write register.
6.4.5.14.1 Offset
Register Offset
LPLVDR 64h
6.4.5.14.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
LVD
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
LVD
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.14.3 Fields
Field Description
31-0 Low-Voltage Detector Value
LVD
6.4.5.15.1 Offset
Register Offset
LPGPR0_legacy_alias 68h
6.4.5.15.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
GPR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
GPR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.15.3 Fields
Field Description
31-0 General Purpose Register
GPR When GPR_SL or GPR_HL bit is set, the register cannot be programmed.
6.4.5.16.1 Offset
Register Offset
LPGPR0 90h
LPGPR1 94h
LPGPR2 98h
LPGPR3 9Ch
6.4.5.16.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
GPR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
GPR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6.4.5.16.3 Fields
Field Description
31-0 General Purpose Register
GPR When GPR_SL or GPR_HL bit is set, the register cannot be programmed.
6.4.5.17.1 Offset
Register Offset
HPVIDR1 BF8h
6.4.5.17.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R IP_ID
W
Reset 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R MAJOR_REV MINOR_REV
W
Reset 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1
6.4.5.17.3 Fields
Field Description
31-16 SNVS block ID
IP_ID
15-8 SNVS block major version number
MAJOR_REV
7-0 SNVS block minor version number
MINOR_REV
6.4.5.18.1 Offset
Register Offset
HPVIDR2 BFCh
6.4.5.18.2 Diagram
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R IP_ERA INTG_OPT
W
Reset 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R ECO_REV CONFIG_OPT
W
Reset 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0
6.4.5.18.3 Fields
Field Description
31-24 IP Era
IP_ERA 00h - Era 1 or 2
03h - Era 3
04h - Era 4
05h - Era 5
06h - Era 6
23-16 SNVS Integration Options
INTG_OPT
15-8 SNVS ECO Revision
ECO_REV
7-0 SNVS Configuration Options
CONFIG_OPT
6.5.1.1 Features
The SRC includes the following features.
• Receives and handles the resets from all the reset sources
• Resets the appropriate domains based upon the resets sources and the nature of the
reset
• Latches the SRC_BOOT_MODE pins and common configuration signals from the
internal fuse
analog
External
PMIC
(button) POR_B
SRC_POR_B
PMIC_STBY_REQ CCM
SNVS ipp_reset_b
wake-up
alarm
FSM irq
SRC
ONOFF
(No Connect)
ipp_user_reset_b
TEST_MODE
Reset
ON
alarm positive edge
emgergency off
generate irq
log emgergency off
SRC
COLD
WDOG_RST_B_DEB (wdog_rst_b) Arm Reset (arm_rst_b)
COLD
SJC S/W Reset (jtag_sw_rst) M4 Reset (m4c_rst_b, m4p_rst_b)
The reset types and modules they affect are shown in Table 6-53. As there is no chip
POR, the POR_B is used to reset the entire chip including test logic and JTAG modules.
NOTE
All resets are expected to be active low except jtag_sw_rst.
Table 6-53. SRC reset functionality
SoC Modules POR COLD
System modules (PLLs, fuses, etc) yes yes
Functional modules yes yes
Arm yes yes
Arm SoC yes yes
M4 Core yes yes
M4 Platform yes yes
Arm POR yes no
Arm debug yes no
SJC yes no
SRTC yes no
The reset priorities are POR (strongest) and COLD (weakest). If a stronger reset is
asserted during the sequence of a weaker reset, then the weaker sequence will be
overridden, and the stronger reset sequence will commence. There is no priority within a
reset type (POR, etc). If a reset is asserted during the reset sequence of the same type, the
reset sequence will be interrupted and restarted.
The following lists the functionality of each of these reset outputs:
• system_early_rst_b - Resets the system modules that need to start first as CCM,
OCOTP_CTRL, FUSEBOX, etc.
• system_rst_b - Resets functional modules
• arm_rst_b - Resets Arm module (on regular system reset)
• arm_por_rst_b - Resets Arm POR input
• arm_soc_rst_b - Reset for Arm SOC
• m4c_rst_b - Reset for M4 core
• m4p_rst_b - Reset for M4 platform
• arm_dbg_rst_b - Reset debug logic of Arm
• test_logic_rst_b - Reset test logic (IOMUXC, DAP)
• sjc_por_rst_b - Reset to SJC
• srtc_rst_b - Resets SRTC
NOTE
It is assumed that each reset source will deassert after its
assertion, either due to reset generated to the system from SRC,
or by negation of the reset source (if it came from an external
source to the chip). In the latter case, the reset source is
assumed to be held for at least 2 XTALI clocks so it can be
sampled by SRC.
The sjc_por_rst_b signal is deasserted together with SRC_POR_B signal. The output is
also deasserted after the stretching of SRC_POR_B has deasserted.
After the above resets deassert, system_early_rst_b reset is deasserted after 2 XTALI
clocks. The system_early_rst_b is used for the CCM and PLL-IPs to start generating PLL
clock ouputs and the system root clocks.
When the system root clocks are ready, the CCM will assert system_clk_ready signal.
This signal is generated during the start sequence in the CCM and it involves the
preparation of the PLLs to generate clock roots for functional operation.
SRC then enables OCOTP_CTRL and fusebox clocks, so that fuses can be loaded to
OCOTP_CTRL.
• SRC will prepare the boot information
• After 8 ipg cycles, resets to all modules will be de-asserted
• After 8 ipg cycles, system clocks will be enabled (en_system_clk).
BOOT_MODE1
BOOT_MODE0
BOOT_MODE0
BOOT_MODE1
GPIO_BT_SEL_FUSE
BOOT_MODE0
BOOT_MODE1
BOOT_CFG[19:16]
BOOT_CFG[15:8]
0
BOOT_CFG[7:0]
SRC_SBMR1
Register
chip
fuses BOOT_CFG[19:16]
e-fuse signals
BOOT_CFG[15:8] 1
BOOT_CFG[7:0]
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
R
DOM_EN
LOCK
Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
MASK_TEMPSENSE_
Reserved Reserved
RESET
W
Reset 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
0 Disables domain control. All of this register’s bits except [31:30] and [27:24] can be modified by any
masters
1 Enables domain control. All of this register’s bits except [31:30] and [27:24] can only be modified by
the masters from the domains specified in [27:24] area.
30
LOCK Domain control bits lock
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
A53_SOC_DBG_
A53_L2RESET
R
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
DOM_EN
RESET
LOCK
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
A53_DBG_RESET3
A53_DBG_RESET2
A53_DBG_RESET1
A53_DBG_RESET0
A53_ETM_RESET3
A53_ETM_RESET2
A53_ETM_RESET1
A53_ETM_RESET0
A53_CORE_POR_
A53_CORE_POR_
A53_CORE_POR_
A53_CORE_POR_
R
A53_CORE_
A53_CORE_
A53_CORE_
A53_CORE_
RESET3
RESET2
RESET1
RESET0
RESET3
RESET2
RESET1
RESET0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
0 Disables domain control. All of this register’s bits except [31:30] and [27:24] can be modified by any
masters
1 Enables domain control. All of this register’s bits except [31:30] and [27:24] can only be modified by
the masters from the domains specified in [27:24] area.
30
LOCK Domain control bits lock
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
NOTE: During the time the WDOG event is masked using SRC logic, it is likely that the WDOG Reset
Status Register (WRSR) bit 1 (which indicates a WDOG timeout event) will get asserted.
software / OS developer must prepare for this case. Re-enabling the WDOG is possible, by un-
masking it in SRC, though it must be preceded by servicing the WDOG. However, for the case
that the event has been asserted, the status bit (WRSR bit-1) will remain asserted, regardless of
servicing the WDOG module.
(Hardware reset is the only way to cause the de-assertion of that bit). Any other code will be coded to
1010 i.e. wdog1_rst_b is not masked
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
DOM_EN
LOCK
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
A53_CORE0_ENABLE
R
A53_CORE3_ENABLE
A53_CORE2_ENABLE
A53_CORE1_ENABLE
Reserved A53_RST_SLOW
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
0 Disables domain control. All of this register’s bits except [31:30] and [27:24] can be modified by any
masters
1 Enables domain control. All of this register’s bits except [31:30] and [27:24] can only be modified by
the masters from the domains specified in [27:24] area.
30
LOCK Domain control bits lock
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
DOM_EN
LOCK
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SW_M4C_NON_
WDOG3_RST_
WDOG3_RST_
SW_M4C_RST
SW_M4P_RST
R
ENABLE_M4
OPTION_M4
SCLR_RST
OPTION
Reserved MASK_WDOG3_RST
Reset 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
0 Disables domain control. All of this register’s bits except [31:30] and [27:24] can be modified by any
masters
1 Enables domain control. All of this register’s bits except [31:30] and [27:24] can only be modified by
the masters from the domains specified in [27:24] area.
30
LOCK Domain control bits lock
Table continues on the next page...
NOTE: During the time the WDOG3 event is masked using SRC logic, it is likely that the WDOG3 Reset
Status Register (WRSR) bit 1 (which indicates a WDOG3 timeout event) will get asserted.
Software / OS developer must prepare for this case. Re-enabling the WDOG3 is possible, by un-
masking it in SRC, though it must be preceded by servicing the WDOG3. However, for the case
that the event has been asserted, the status bit (WRSR bit-1) will remain asserted, regardless of
servicing the WDOG3 module.
(Hardware reset is the only way to cause the de-assertion of that bit). Any other code will be coded to
1010 i.e. wdog3_rst_b is not masked
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared. Software can determine that the reset has finished once this bit is cleared.
Software can also configure SRC to generate interrupt once the software has finished. Please
refer to SRC_SISR register for details.
NOTE: This is a self clearing bit. Once it is set to 1, the reset process will begin, and once it finishes, this
bit will be self cleared. Software can determine that the reset has finished once this bit is cleared.
Software can also configure SRC to generate interrupt once the software has finished. Please
refer to SRC_SISR register for details.
The USB OTG PHY1 Reset Control Register (SRC_IP_RCR2), contains bits that control
the USB OTG PHY1 reset generation.
Address: 3039_0000h base + 20h offset = 3039_0020h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
DOM_EN
LOCK
Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OTG1_PHY_RES
R
Reserved
ET
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
0 Disables domain control. All of this register’s bits except [31:30] and [27:24] can be modified by any
masters
1 Enables domain control. All of this register’s bits except [31:30] and [27:24] can only be modified by
the masters from the domains specified in [27:24] area.
30
LOCK Domain control bits lock
The USB OTG PHY2 Reset Control Register (SRC_IP_RCR2), contains bits that control
the USB OTG PHY2 reset generation.
Address: 3039_0000h base + 24h offset = 3039_0024h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
DOM_EN
LOCK
Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OTG2_PHY_RES
R
Reserved
ET
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
0 Disables domain control. All of this register’s bits except [31:30] and [27:24] can be modified by any
masters
1 Enables domain control. All of this register’s bits except [31:30] and [27:24] can only be modified by
the masters from the domains specified in [27:24] area.
30
LOCK Domain control bits lock
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
R
DOM_EN
LOCK
Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
0 Disables domain control. All of this register’s bits except [31:30] and [27:24] can be modified by any
masters
1 Enables domain control. All of this register’s bits except [31:30] and [27:24] can only be modified by
the masters from the domains specified in [27:24] area.
30
LOCK Domain control bits lock
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
PCIE_CTRL_APP_XFER_
R
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
PENDING
DOM_EN
LOCK
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PCIE_PHY_POWER_ON_
PCIE_CTRL_APPS_CLK_
PCIE_CTRL_APPS_EXIT
PCIE_CTRL_APPS_PME
PCIE_CTRL_APPS_RST
PCIE_CTRL_APPS_EN
PCIE_CTRL_CFG_L1_
PCIE_CTRL_SYS_INT
PCIE_CTRL_APPS_
PCIE_CTRL_APPS_
PCIE_CTRL_APPS_
PCIEPHY_BTNRST
PCIE_CTRL_APP_
PCIEPHY_PERST
R
UNLOCK_MSG
TURNOFF
Reserved
Reserved
READY
ENTER
RESET
REQ
AUX
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
0 Disables domain control. All of this register’s bits except [31:30] and [27:24] can be modified by any
masters
1 Enables domain control. All of this register’s bits except [31:30] and [27:24] can only be modified by
the masters from the domains specified in [27:24] area.
30
LOCK Domain control bits lock
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
DOM_EN
LOCK
Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DISP_RESET
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
0 Disables domain control. All of this register’s bits except [31:30] and [27:24] can be modified by any
masters
1 Enables domain control. All of this register’s bits except [31:30] and [27:24] can only be modified by
the masters from the domains specified in [27:24] area.
30
LOCK Domain control bits lock
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
DOM_EN
LOCK
Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPU_RESET
R
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
0 Disables domain control. All of this register’s bits except [31:30] and [27:24] can be modified by any
masters
1 Enables domain control. All of this register’s bits except [31:30] and [27:24] can only be modified by
the masters from the domains specified in [27:24] area.
30
LOCK Domain control bits lock
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
DOM_EN
LOCK
Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
VPU_RESET
R
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
Table continues on the next page...
The Boot Mode register (SBMR) contains bits that reflect the status of Boot Mode Pins
of the chip. The reset value is configuration dependent (depending on boot/fuses/IO
pads).
Address: 3039_0000h base + 58h offset = 3039_0058h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R BOOT_CFG
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ipp_user_reset_b
wdog2_rst_b
wdog3_rst_b
wdog1_rst_b
csu_reset_b
ipp_reset_b
jtag_sw_rst
jtag_rst_b
R 0 0
tempsense_rst_b
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DISPLAY_PASSED_RESET
OTGPHY2_PASSED_RESE
OTGPHY1_PASSED_RESE
GPU_PASSED_RESET
PCIE1_PHY_PASSED_
M4C_PASSED_RESET
VPU_PASSED_RESET
M4P_PASSED_RESET
RESET
R
T
T
Reserved
Reserved
Reserved
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MASK_OTGPHY2_PASS
MASK_OTGPHY1_PASS
MASK_M4P_PASSED_R
MASK_GPU_PASSED_
MASK_M4C_PASSED_
MASK_VPU_PASSED_
MASK_PCIE_PHY_
MASK_DISPLAY_
PASSED_RESET
PASSED_RESET
R
ED_RESET
ED_RESET
Reserved
Reserved
RESET
RESET
RESET
ESET
Reserved Reserved
Reset 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
The Boot Mode register (SBMR), contains bits that reflect the status of Boot Mode Pins
of the chip. The default values for those bits depends on the values of pins/fuses during
reset sequence.
Address: 3039_0000h base + 70h offset = 3039_0070h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
IPP_BOOT_
R 0 0
MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SEC_CONFIG[1:0]
BT_FUSE_SEL
FORCE_COLD_
R 0 0
BOOT
Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved C0_START_ADDRH
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved C0_START_ADDRL
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved C1_START_ADDRH
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved C1_START_ADDRL
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved C2_START_ADDRH
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved C2_START_ADDRL
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved C3_START_ADDRH
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved C3_START_ADDRL
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DOMAIN3
DOMAIN2
DOMAIN1
DOMAIN0
DOM_EN
LOCK
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DDRC1_SYS_RST
DDRC1_CORE_
DDRC1_PRST
DDRC1_PHY_
DDRC1_PHY_
DDRC1_PHY_
R
PWROKIN
RESET
WRST
RST
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
NOTE: [31:30] and [27:24] areas are not controlled by this bit. [31:30] and [27:24] area can be modified
by any masters from any domains when Lock bit is not set.
0 Disables domain control. All of this register’s bits except [31:30] and [27:24] can be modified by any
masters
1 Enables domain control. All of this register’s bits except [31:30] and [27:24] can only be modified by
the masters from the domains specified in [27:24] area.
30
LOCK Domain control bits lock
NOTE: This reset can only be released when DDR Controller clock inputs are active and stable for 30
cycles
6.6.1 Overview
The Watchdog Timer (WDOG) protects against system failures by providing a method by
which to escape from unexpected events or programming errors.
Once the WDOG is activated, it must be serviced by the software on a periodic basis. If
servicing does not take place, the timer times out. Upon timeout, the WDOG asserts the
internal system reset signal, WDOG_RESET_B_DEB to the System Reset Controller
(SRC).
There is also a provision for WDOG signal assertion by timeout counter expiration. There
is an option of programmable interrupt generation before the counter actually times out.
The time at which the interrupt needs to be generated prior to counter timeout is
programmable. There is a power down counter which is enabled out of any reset (POR,
Warm/Cold). This counter has a fixed timeout period of 16 seconds, upon which it asserts
the WDOG signal.
Flow diagrams for the timeout counter, power down counter and interrupt operations are
are shown in Flow Diagrams.
LOW POWER
WAIT Mode
LOW POWER
STOP/ DOZE Low Power
Mode Control
Time-Out Counter
DEBUG Mode
Low Frequency
Reference Clock
TIMEOUT
Low Frequency
WDOG-1 Generation WDOG-1
Reference Clock Power Down Counter
Logic
6.6.1.1 Features
The WDOG features are listed below:
• Configurable timeout counter with timeout periods from 0.5 to 128 seconds which,
after timeout expiration, result in the assertion of WDOG_RESET_B_DEB reset
signal .
• Time resolution of 0.5 seconds
• Configurable timeout counter that can be programmed to run or stop during low-
power modes
• Configurable timeout counter that can be programmed to run or stop during DEBUG
mode
• Programmable interrupt generation prior to timeout
• The duration between interrupt and timeout events can be programmed from 0 to
127.5 seconds in steps of 0.5 seconds.
• Power down counter with fixed timeout period of 16 seconds, which if not disabled
after reset will assert WDOG_B signal low
• Power down counter will be enabled out of any reset (POR, Warm / Cold reset)
by default.
not loaded with 0x_5555 prior to writing 0x_AAAA to the WDOG_WSR, the counter is
not reloaded. If any value other than 0x_AAAA is written to the WDOG_WSR after
0x_5555, the counter is not reloaded. This service sequence will reload the counter with
the timeout value WT[7:0] of Watchdog Control Register (WDOG_WCR). The timeout
value can be changed at any point; it is reloaded when WDOG is serviced by the core.
6.6.2.6 Operations
Figure 6-38 shows the scenarios under which WDOG_B gets asserted.
WDOG_WCR[WDT]
WDOG_WCR[WDA]
WDOG_WMCR[PDE]
Low Frequency Power Down Counter Logic
Reference Clock
Low frequency
reference clock
Time-out
Counter 01 00
wdog_rst
System reset
WDOG-1
Low frequency
reference clock
Time-out
Counter 01 00
wdog_rst
System reset
Power on reset
WDOG-1
6.6.2.7 Reset
The block is reset by a system reset and the WDOG counter will be disabled. The power-
down counter is enabled and starts counting.
6.6.2.8 Interrupt
The WDOG has the feature of Interrupt generation before timeout.
The interrupt will be generated only if the WIE bit in Watchdog Interrupt Control
Register (WDOG_WICR) is set. The exact time at which the interrupt should occur (prior
to timeout) depends on the value of WICT field of Watchdog Interrupt Control Register
(WDOG_WICR). For example, if the WICT field has a value 0x04, then the interrupt
will be generated two seconds prior to timeout. Once the interrupt is triggered the WTIS
bit in Watchdog Interrupt Control Register (WDOG_WICR) will be set. The software
needs to clear this bit to deassert the interrupt. If the WDOG is serviced before the
interrupt generation then the counter will be reloaded with the timeout value WT[7:0] of
Watchdog Control Register (WDOG_WCR) and interrupt would not be triggered.
Reset no
(Cold/Warm)
negated?
yes
Counter in
IDLE State
start counter
Decrement counter
yes
PDE bit
cleared?
no
Is no
count=0?
yes
Assert WDOG
Reset no
Negated?
yes
Enable interrupt
& WDOG timer
Decrement counter
yes Interrupt
count=0?
no
Is
WDOG yes
serviced? Reload counter
no
yes Interrupt
Assert interrupt Count=0?
6.6.3 Initialization
The following sequence should be performed for WDOG initialization.
• PDE bit of Watchdog Miscellaneous Control Register (WDOG_WMCR) should be
cleared to disable the power down counter.
The WDOG has user-accessible, 16-bit registers used to configure, operate, and monitor
the state of the Watchdog Timer. Byte operations can be performed on these registers. If
a 32-bit access is performed,the WDOG will not generate a peripheral bus error but will
behave normally, like a 16-Bit access, making read/write possible. A 32-Bit access
should be avoided, as the system may go to an unknown state.
WDOG memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
6.6.4.1/
3028_0000 Watchdog Control Register (WDOG1_WCR) 16 R/W 0030h
989
6.6.4.2/
3028_0002 Watchdog Service Register (WDOG1_WSR) 16 R/W 0000h
991
6.6.4.3/
3028_0004 Watchdog Reset Status Register (WDOG1_WRSR) 16 R 0000h
991
6.6.4.4/
3028_0006 Watchdog Interrupt Control Register (WDOG1_WICR) 16 R/W 0004h
992
Watchdog Miscellaneous Control Register 6.6.4.5/
3028_0008 16 R/W 0001h
(WDOG1_WMCR) 993
6.6.4.1/
3029_0000 Watchdog Control Register (WDOG2_WCR) 16 R/W 0030h
989
6.6.4.2/
3029_0002 Watchdog Service Register (WDOG2_WSR) 16 R/W 0000h
991
6.6.4.3/
3029_0004 Watchdog Reset Status Register (WDOG2_WRSR) 16 R 0000h
991
6.6.4.4/
3029_0006 Watchdog Interrupt Control Register (WDOG2_WICR) 16 R/W 0004h
992
Watchdog Miscellaneous Control Register 6.6.4.5/
3029_0008 16 R/W 0001h
(WDOG2_WMCR) 993
6.6.4.1/
302A_0000 Watchdog Control Register (WDOG3_WCR) 16 R/W 0030h
989
Table continues on the next page...
• WDZST, WDBG and WDW are write-once only bits. Once the software does a write
access to these bits, they will be locked and cannot be reprogrammed until the next
system reset assertion.
• WDE is a write one once only bit. Once software performs a write "1" operation to
this bit it cannot be reset/cleared until the next system reset.
• WDT is also a write one once only bit. Once software performs a write "1" operation
to this bit it cannot be reset/cleared until the next POR. This bit does not get reset/
cleared due to any system reset.
Address: Base address + 0h offset
Bit 15 14 13 12 11 10 9 8
Read WT
Write
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
Read WDW SRE WDA SRS WDT WDE WDBG WDZST
Write
Reset 0 0 1 1 0 0 0 0
NOTE: The time-out value can be written at any point of time but it is loaded to the counter at the time
when WDOG is enabled or after the service routine has been performed. For more information
see Timeout event .
Table continues on the next page...
0 Reserved
1 This bit must be set to 1.
5 WDOG_B assertion. Controls the software assertion of the WDOG_B signal.
WDA
0 Assert WDOG_B output.
1 No effect on system (Default).
4 Software Reset Signal. Controls the software assertion of the WDOG-generated reset signal
SRS WDOG_RESET_B_DEB. This bit automatically resets to 1 after it has been asserted to 0. For proper
operation of this function, the SRE bit in this register must be set to 1.
NOTE: This bit does not generate the software reset to the block.
NOTE: There is no effect on WDOG_RESET_B_DEB (WDOG Reset) upon writing on this bit. WDOG_B
gets asserted along with WDOG_RESET_B_DEB if this bit is set.
NOTE: The WDOG can continue/suspend the timer operation in the low-power modes (STOP and DOZE
mode).
Table continues on the next page...
Read 0
Write
Reset 0 0 0 0 0 0 0 0
Bit 7 6 5 4 3 2 1 0
Write
Reset 0 0 0 0 0 0 0 0
Read WTIS 0
WIE WICT
Write w1c
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
NOTE: This field is write once only. Once the software does a write access to this field, it will get locked
and cannot be reprogrammed until the next system reset assertion.
Read 0 PDE
Write
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
NOTE: This bit is write-one once only bit. Once software sets this bit it cannot be reset until the next
system reset.
Table continues on the next page...
7.1.1 Overview
This chapter provides the interrupt assignments of the ARM domain in A53 Interrupts,
CM4 Interrupts, and the DMA events in SDMA event mapping
7.2.1 Overview
The Smart Direct Memory Access (SDMA) controller offers highly-competitive DMA
features combined with software-based virtual-DMA flexibility. It enables data transfers
between peripheral I/O devices and internal/external memories.
The SDMA controller helps maximize system performance by off-loading the Arm core
in dynamic data routing.
AP Peripherals AP Memory
32 32
Peripheral Burst
DMA DMA
32 32
data instructions
32 16
System Bus
32 32 32 32
SDMA
SPBA RAM ROM
REGISTERS
32
External to SDMA
Per #1 Per #... Per #14
The SDMA core executes short routines that perform DMA transfers; these routines are
called scripts. The SDMA core interfaces to its own memory via the SDMA system bus.
The SDMA system bus supports a 32-bit data path and a 16-bit address bus. The system
bus datapath is used for both 16-bit instruction (program) memory access and 32-bit data
access. DMA units interface to the core via the Functional Unit Bus and use dedicated
registers to perform DMA transfers.
The SDMA memory contains a ROM and a RAM. The ROM contains startup scripts (for
example, boot code) and other common utilities, which are referenced by the scripts that
reside in the RAM. The internal RAM is divided into a context area and a script area
(more details about this mapping are available in Instruction Memory Map and Data
Memory Map).
Every transfer channel requires one context area to keep the contents of all the core and
unit registers while inactive. Channel scripts are downloaded into the internal RAM by
the SDMA using a dedicated channel that is started during the boot sequence. Downloads
are invoked using commands and pointers provided by the Arm platform. Every channel
contains a corresponding channel script located in RAM and/or ROM that can be
reconfigured independently as-needed. Channel scripts can be stored in an external
memory and downloaded when needed. The SDMA can be configured with any mixture
of scripts to enable an endless combination of supported services.
The scheduler monitors and detects DMA requests, mapping them to channels, and
mapping individual channels to a pre-configured priority. At any given point, the
scheduler presents the highest priority channel that requires service to the SDMA core. A
special SDMA core instruction is used to "conditionally yield" the current channel being
executed to an eligible channel that requires service. If (and only if) there is an eligible
channel pending, will the current channel execution be preempted.
There are two yield instructions that differently determine the eligible channels: In the
first version, eligible channels are pending channels with a strictly higher priority than the
current channel priority. In the second version (yieldge), eligible channels are pending
channels with a priority that is greater or equal to the current channel priority. The
scheduler detects devices that need service through its 48 DMA request inputs. After a
request is detected, the scheduler determines the channel(s) that is (are) triggered by this
request and marks it (them) as pending in the "Channel Pending (EP)" register. The
priorities of all the pending channels are continuously evaluated in order to update the
highest pending priority. The channel pending flag is cleared by the channel script when
the transfer has completed.
The Arm platform control block contains the control registers used to configure the 32
individual channels. There are 48 Channel Enable registers, and every register maps one
DMA request to any desired combination of channels. The 32 Priority registers are used
to assign a programmable 1-of-7 level priority to every possible channel. This block also
contains all other control registers that the Arm platform can access.
The 48 DMA requests that are connected to the scheduler come from a variety of sources.
The "receive register full" and "transmit register empty" signals found in the UART and
USB ports are typical examples of DMA requests that can be connected to the SDMA.
These requests can be used to trigger a specific SDMA channel, or several channels.
There is an OnCE compatible debug port for product development. The OnCE includes
support for setting breakpoints, single-step and trace, and register dump capability. In
addition, all memory locations are accessible from the debug port.
7.2.1.2 Features
The following are the SDMA features:
• Multi-channel DMA supporting up to 32 time-division multiplexed DMA channels
• Hardware or software driven triggers for each channel
• 48 hardware driven triggers that can be mapped to any channel.
• Memory accesses including linear addressing, FIFO addressing and 2D addressing
• Fast context-switching with two-level, priority-based preemptive multi-tasking
• 16-bit instruction-set micro-RISC engine (the SDMA core)
• Two DMA units with some or all the following features:
• Auto-flush and prefetch capability
• Flexible address management (increment, decrement, and no address changes on
source and destination address)
• Misaligned data-transfer support
• Uni-directional and bi-directional flows (copy mode)
• Up to eight-word buffers for configurable burst transfers
• Support of byte-swapping
• An available API and library of scripts
• Little-Endian and Big-Endian modes
• Hardware handshakes for low-power entry sequence
• Security support to lock contents of the SDMA script RAM.
• 4-Kbyte ROM containing startup scripts (for example, boot code) and other common
utilities that can be referenced by RAM-located scripts
• 8-Kbyte RAM area is divided into a processor context area and a code space area
used to store channel scripts that are downloaded from the system memory
• Debug support, including a OnCE port, real-time monitors, and embedded cross-
trigger events
• Supported clock frequencies in process:
• Configurable clock options for the SDMA core and the Arm platform DMA
units
• 1:2 ratio with maximum of SDMA core running at Arm platform Peripheral
Bus speed and DMA running at max DMA frequency.
• 1:1 ratio when both SDMA core and Arm platform DMA clocks are set to
the Arm platform Peripheral Bus speed.
• Peripheral bus interface for configuration register programming by the Arm platform
• The SDMA RISC engine (arithmetic and logic operations), which is referred to as the
"SDMA core."
• An internal peripheral bus connected to the Shared Peripherals Bus Interface (SPBA)
that enables access to up to 14 shared peripherals. SDMA supports 32-bit accesses to
word peripherals and 16-bit accesses to half-word peripherals.
• The peripheral DMA unit that is hooked-up to the Arm platform Crossbar Switch to
service Arm peripherals
• The burst DMA unit is able to perform burst accesses to the external memory
• All the DMA units are 32-bit AHB masters. They are connected to different buses,
thus allowing concurrent accesses.
EMI
AIPS
Platform
Xbar
AP
Switch
StarCore
Platform
Per DMA Burst DMA BP DMA Xbar
Unit unit unit Switch
SDMA
OnCE
DMA Requests Scheduler µRISC RAM
core M2/M1
BP Peripheral Bus BP Control Regs
peripheral bus
AP BP
Peripheral SPBA Peripheral
Bus Bus
DECR
GREG0
32
32
GREG1
GREG2
ALU
GREG3
32
GREG4
32
32 GREG5
GREG6
8
SF DF T LM
GREG7
Flags
General Registers
Instruction Decoder
5
16
Instruction
AGU
32 8 32 16
PC
RPC
14 14
SPC
(instruction)
EPC
address
address
address
data
data
data
PCU
• The Program Control Unit (PCU) is described in Program Control Unit (PCU). It
handles the state of the core and generates the instruction fetch addresses.
Instructions are retrieved from the Instruction Bus (IBUS) and stored in the SDMA
core instruction register prior to their decoding. The PCU contains the following
registers:
• The Program Counter (PC) contains the address of the current instruction.
• The Return Program Counter (RPC) contains the address of the instruction that
follows a jump to the subroutine.
• The Start Program Counter (SPC) contains the address of the first instruction of
the current hardware loop.
• End Program Counter (EPC) contains the address of the last instruction of the
current hardware loop.
• The other core registers are the general purpose registers (GREGn) and the flags.
• The general purpose registers can be used to hold data and addresses. They can
be loaded with immediate values (for example, 8-bit data that are encoded in the
instruction), results of calculations that were performed with the ALU, 32-bit
data that comes from the memory or peripherals via the Data Memory Bus
(DMBUS), 32-bit data that comes from the DMAs via the Functional Units Bus
(FUBUS) or another general purpose register. Their content can be the operands
of the ALU, the data to send on either bus (DMBUS or FUBUS), or a pointer to
memory (DMBUS address).
• The general register 0 (GREG0) is also the hardware loop counter. In hardware
loops, it cannot be used for any other purpose. This register uses a dedicated
decrement unit (DECR) shown in Figure 7-3.
• The flags reflect the status of operations:
• SF and DF are set when the last load or store on either bus (FUBUS or
DMBUS) received an error response.
• LM is set when the core is executing instructions inside a hardware loop.
• T is set when the ALU operation result was 0 or the loop counter reaches 0
(the latter is preponderant when an ALU operation is the last instruction of a
hardware loop).
• The ALU has two operands: any general register and either a second general register
or an immediate value. The result is always stored into the first general register. A
NOP function can be utilized by moving a register's contents into itself (For example,
the instruction: mov R0,R0).
• The 16-bit instructions are fetched via the instruction bus (IBUS) whose address is
driven by the PC. The SDMA RAM and ROM are visible to the core as 16-bit
devices through this interface.
• The memory (RAM and ROM), memory mapped registers, and external peripherals
are accessed via the DMBUS. The address is always taken from a general register
whose content is added to a 5-bit immediate value. This is the only available
addressing mode. The DMBUS is a 32-bit data bus. Except for the peripherals that
are external to the SDMA, the address accuracy is the 32-bit word (for example,
adding 1 to an address points to the next word, not the next byte).
• The functional units are accessed via the FUBUS connection. The data is exchanged
with any general register, but the address (which in fact is the instruction and the
selector of the functional unit) comes from an 8-bit field of the corresponding load or
store.
6. Done: The done, yield, or yieldge instructions are used to control channel switching.
When no channel switching is performed, these instructions last a single cycle. When
there is a change of channel or context switch, the delay is variable and depends on
many factors (as detailed in Context Switching).
Id/st
loop-modified
Idf/stf
error in
loop-modified
error in
ack
Data load/store Error in Loop
loop-modified
error in
in Id/st
wait-states
Program
PC is
context Restored
switch
pending
(done) channel(s)
Save Restore
no more
channels
pending pending
channel(s) channel(s)
run_core run_core
when coming from when coming from
Sleep after Reset Sleep
Sleep Debug
Sleep
After Reset in Sleep
debug debug
request request
reset debug
exec_once or request or
exec_core exec_once
completed done
Program
in Sleep debug
debug request or
request wait-states exec_once
branch in Idf/stf completed
7.2.2.2 Scheduler
All channel scheduling hardware is included in the Scheduler.
7.2.2.2.2.1 Channels
A Virtual Channel (hereafter simply called a channel) manages a flow of data through the
SDMA. Flows are typically unidirectional.
The SDMA can have up to 32 simultaneously operating channels, numbered from 0 to
31. Channel 0 is usually dedicated to control the SDMA script downloading. All the
channels can be assigned by the Arm platform software.
48
32
48 6 DMA request 32
DMA DMA requests Channel overflow
to pending channel
requests scanning detection
mapping
32
32
Channel Pending from External DMA Requests EP
32 5
External DMA request Override EO Runnable channels
32 Current Channel
Arm Platform Channel Enable HE evaluation
32
Arm Channel Enable Overide HO
32
16 5
SDMA clock
Long Pulse
Level
Short Pulse
The DMA request inputs are connected to various sources that depend on the SoC. The
exact list of DMA request inputs and their associated number is available in each
respective project-specific chapter.
This is performed with an array of 48 registers that are 32 bits wide: There are 48
Channel Enable Registers (CHNENBLn), one register per DMA request. The DMA
request number selects the Channel Enable Registers, and every bit of this 32-bit register
indicates that the corresponding channel must be activated when it is a 1.
This information is passed on the EP register. For every bit of the Channel Enable
Register that is set, the corresponding bit of the EP register is also set, and the remaining
bits of EP are left unchanged. The transformation of EP is summarized by the following
equation:
EP = EP or CHNENBLn
The EP register is used to know which channels require service because they received a
DMA request.
Typical contents of the CHNENBLn registers are all 0s, except for a single bit set. For
example, a DMA request triggers one channel, but all 0s or several 1s are possible. One
DMA request could activate several channels, and the channel execution sequence can be
controlled by the channel priorities and numbers, as explained in the next sections. The
following table illustrates an example configuration.
NOTE
From the table, the DMA request 0 is programmed to
simultaneously trigger channels 0, 1, and 31. Also, DMA
requests 30-47 are not used in this example. The remaining
channels 2 to 30, are configured to be triggered by DMA
requests 29 to 1, respectively.
Table 7-6. Channel Enable RAM Programming Example
Channel
3 0
DMA Request Number
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
11 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
13 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
24 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
26 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
36 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
38 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
39 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
45 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
47 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Several channels may be runnable at any given time. The ith channel is runnable if (and
only if) the condition below is true:
(HE[i] or HO[i]) and (DO[i]) and (EP[i] or EO[i])
After reset, the HE[i], HO[i], EP[i], and EO[i] bits are all cleared whereas the DO[i] bits
are all set. The functions associated with DO are not available for this device. When
DO[i] is set, the scheduler condition becomes:
(HE[i] or HO[i]) and (EP[i] or EO[i])
The registers in these equations are controlled as follows:
• Arm platform (host) channel enable flag HE[i] may be set or cleared by the Arm
platform with the HSTART and STOP_STAT registers. It can also be cleared by the
ith channel script.
Typical usage is for the Arm platform to set this flag to activate the channel. The flag
is cleared by the SDMA core when the transfer is done.
• Externally triggered channel pending flag EP[i] is set by the scheduler when the
channel was activated by a DMA request. It can be cleared by the ith channel script.
• The Arm platform channel override flag HO[i] may be set or cleared by the Arm
platform. When set, it enables the ith channel to run without the involvement of the
Arm platform.
Typical usage is for the Arm platform to set this flag for channels that do not need
Arm platform supervision such as channels that are controlled by DMA request
events (EP).
• DO should always be set to 1 so that the runnable channel evaluation considers only
HO, HE, EP, and EO.
• Externally triggered channel override flag EO[i] may be set or cleared by the Arm
platform. When set, it prevents the ith channel from stopping and stalling on
incoming peripheral DMA requests. This is the case when the channel is not handling
data transfers with peripherals (for example, a memory to memory transfer).
The SDMA can clear the HE[i], and EP[i] bits by means of a done or notify instruction.
The done instruction causes a reschedule; thus, enabling another channel to preempt the
current one, while the notify instruction does not. The done and notify instructions can
clear either HE[i] or EP[i] (never more than one at a time).
Table 7-7. Runnable Channel Selection Control
Register Set by Cleared By
HO Write to HOSTOVR register Write to HOSTOVR register
Table 7-8. Channel Switching Decision with a yield, yield(ge), or done (continued)
Instruction Current Next Channel Priorities New Running Channel/Comments
Channel Comparison
Not runnable Not runnable none none, 2
(occurs when the channel was disabled by the
Arm platform)
Not runnable Runnable none Next1
(occurs when the channel was disabled by the
Arm platform)
yieldge (done 1) Runnable Not runnable none Current
Runnable Runnable Current > Next Current
Current = Next Next1
Current < Next Next1
Not runnable Not runnable none none2
(occurs when the channel was disabled by the
Arm platform)
Not runnable Runnable none Next1
(occurs when the channel was disabled by the
Arm platform)
done (done>1) Not runnable Not runnable none none2
Runnable Not runnable none Current3
(occurs when the done instruction does not
disable the channel runnable condition)
Not runnable Runnable none Next1
Runnable Runnable none Current3
(occurs when the done instruction does not
disable the channel runnable condition)
1. Current channel script execution is stopped, its context is saved; the next channel context is restored and its script
execution resumes
2. Current channel context is saved and SDMA enters IDLE mode
3. Current channel context is saved, then restored, and the current channel script resumes execution
Finally, when the SDMA is in IDLE mode and a runnable channel is elected as the next
channel, its context is immediately restored and the script execution resumes.
The combinatorial-decision tree supports dynamic modifications of the EP, EO, HE, HO,
and DO flags as well as dynamic modifications of the channel priorities. The propagation
times are detailed in Scheduler Pipeline Timing Diagram.
The decision tree status is available in the PSW register, which is continuously updated.
It contains the next channel priority, the next channel number, the current channel
priority, and the current channel number. When a priority is read as 0, it means the
channel is not runnable.
A few examples of decisions are presented below:
• Channel 31 is running with priority 5, channels 13 and 24 are pending with the same
priority 5; channel 24 is eligible as the next channel since 24 > 13.
• Channel 31 is running with priority 7, channels 13 and 24 are pending with priority
5; channel 31 is the next channel because its priority is greater than the other pending
channels.
• Channels 7, 23, and 29 are pending with the same priority. Channel 7 is active and
runs a yieldge; it is preempted by channel 29. After a period of time, channel 29 runs
a yieldge, it is then preempted by channel 23 that is the selected channel since
channel 29 is the current channel. Later, channel 23 runs a yieldge and is preempted
by channel 29. Channels 23 and 29 will go on switching after every yieldge until one
of them terminates. It is only at that point that channel 7 becomes eligible again.
• Channel 11 is running with priority 3, and channel 15 is pending with priority 4.
When the channel 31 script executes a yield instruction, it gets preempted by channel
15; then channels 6 and 18 with priority 3 become pending. Because channel 11 was
preempted after executing a yield and there is no pending channel with a strictly
greater priority, it is eligible as the next channel (although its number 11 < 18).
SDMA AP
DMA Mapping to new ctrl regs ctrl regs
request pending channels update update
#n
done
Repeat 32 times
for every channel #i
No Evaluate channel #i
runnable condition
Sort highest priority
channels per number
No is channel #i
Next channel = Channel #i
priority(i) = 0 runnable?
highest number among
highest priority channels
Yes
Channel #i
priority(i) = CHNPRI(i)
yield AND
Yes INT (priority(current))>
INT(priority(next))
yieldge AND
Yes priority (current)>
priority (next) No
Channel #i
No priority(i) = priority(i) + 0.5
No
is the
current channel active: Yes
priority (current)>0?
No
is the next
Yes channel active:
priority (current)>0?
No
END
SDMA Clock
1 2 3 4 5 6 1 2 3
DMA Request
mapping to EP
runnable channels
decision
next channel
Two numbers can be inferred from this timing diagram. First, it takes six SDMA core
clock cycles to update the next channel from a DMA request. Second, it takes three
SDMA core clock cycles to update the next channel from a direct modification of the
condition registers (EP, DO, HE, or HO) by any processor. The processors that can
modify these bits include SDMA with a done instruction or the Arm platform with a
write access through the corresponding control port on their respective peripheral bus).
priority is given to restoring the registers that are required by the next instruction to
be executed. When a register has not been restored and the next instruction needs it,
this instruction gets stalled until the register was restored.
In "dynamic" and "dynamic with no loop" modes, background saving of dirty
registers is performed every time an access to the context RAM is possible and
allowed by the context switch mode.
NOTE
The contents of a channel context space in the context
RAM depends on the selected context switch mode. In
"dynamic" and "dynamic with no loop" modes, the contents
of the context RAM tend to match the contents of the
SDMA registers (except for the PCU registers and flags
that are never saved in the background). In "dynamic
power" and "static" modes, the contents of the context
RAM remain unchanged until the channel terminates with a
done or gets preempted.
It is optimized for accessing SDRAM-like devices. It does not provide control to assign a
privilege level to the DMA access. The burst DMA unit provides the SDMA with means
to do the following:
• Perform up to 8-beat read and write bursts to the Arm platform memory, which
optimizes throughput when accessing SDRAM-type devices because of an internal,
36-byte FIFO
• Access the Arm platform memory at once or twice the SDMA core frequency
• Copy data from one Arm platform memory location to another Arm platform
memory location at the Arm platform bus speed, which provides a very high
throughput
• Control the method for addressing the Arm platform memory (automatic increment
of addresses or frozen addresses-the former aimed at accessing RAM-like memory
and the latter aimed at accessing single-address FIFOs)
• Enable or disable automatic prefetch when reading data from the Arm platform
memory. When the prefetch mode is selected, the burst DMA automatically triggers
external bursts to fill its FIFO without waiting for the SDMA core to request the
corresponding data, greatly improving throughput.
• Rely on the DMA to automatically flush its FIFO content when there is enough data
to generate an 8-beat burst to the Arm platform memory. Or, it forces a flush when a
data transfer must terminate.
• In the former case, the SDMA core may only be stalled when it tries writing data and
there is not enough room left in the FIFO. In the latter case, the core is stalled until
the data is effectively written to the Arm platform memory.
In automatic flush mode, the core receives an acknowledge that does not reflect the
actual error status when the data is effectively written into the Arm platform
memory. This error status is retrieved by a later access to the burst DMA.
Terminating a write data transfer with a forced flush command guarantees that any
bus error to the Arm platform memory is caught.
• Handle address alignment issues between the Arm platform memory map and the
SDMA core data. This enables the core to read or write 32-bit data from the burst
DMA, whereas the corresponding Arm platform address is not 32-bit aligned. This
drastically improves the SDMA scripts' efficiency since the same loop that transfers
32 bits at a time can be used regardless of the start and end addresses in the Arm
platform memory space.
This unit structure and registers are described in Burst DMA Structure and Burst DMA
Registers.
36-byte
FIFO Source Address (MSA)
(MD) Burst DMA
Control
Destination Address (MDA)
32 32 32
FUBUS
FIFO (for example, the bytes that were stored first by the DMA state-machine when
transferring data from the Arm platform memory).
• When the FIFO does not hold as many bytes as required by the SDMA core, the core
is stalled until the missing bytes are read from the Arm platform memory. In the case
of prefetch mode, the DMA controller decides when it should start a burst to Arm
platform memory in order to reduce the risk to not have the required data for the
future accesses of the core. When there is no prefetching, a burst is triggered when
the required data is not available in the FIFO.
Writing a byte, halfword, or word to MD stores 1, 2, or 4 bytes, respectively, at the
end of the FIFO (for example, these bytes are transmitted to the Arm platform
memory after all the other bytes that were previously stored in the FIFO). When the
FIFO does not have enough room left to hold the written data, the SDMA core is
stalled until a sufficient amount of FIFO contents are flushed out to the Arm platform
memory. Flushing is decided by the DMA controller when there are enough bytes in
the FIFO to perform the largest allowed burst to Arm platform memory (the exact
size depends on the burst start address and the AHB 1 Kbyte boundary rule).
However, the SDMA core has the ability to force the flushing operation at any time,
for example, when at the end of the data transfer, prior to channel closure.
• MS (Memory Setup) - Contains the state of the burst DMA control, the two flags that
define whether each address register is incremented after every access to the external
memory, and another flag that is set when a bus error occurred.
7.2.2.3.1.3.3 Transferring Data Between Two Arm platform Memory Locations-Burst DMA
Unit
The following steps copy data between two Arm platform memory locations using the
burst DMA unit:
• Set up the MS flags to reflect the modes for the source and destination addresses (all
the combinations are possible), then initialize the source address register (MSA) and
the destination address register (MDA). Both addresses must be word-aligned.
• Use as many stf MD instructions with the COPY flag as needed. Every instruction
triggers a burst read of a given number of words from the source address (this
number is provided to the burst DMA via the SDMA core general purpose register,
which is referenced in the stf instruction). Once all the data is loaded into the FIFO,
the DMA empties it with a write burst of the same count to the destination address.
The DMA acknowledges prior to instruction completion, which frees the SDMA core
for other tasks at no delay cost.
• Once the transfer is done, there should be a final access to the burst DMA to check
the error status.
• Data copy from one Arm platform memory location to another Arm platform
memory location at memory bus speed, improving throughput
• Control of the method for addressing the Arm platform memory (automatic
increment or decrement of addresses or frozen addresses, the first ones aimed at
accessing RAM-like memory and the last one aimed at accessing single-address
FIFOs)
• Selectable automatic prefetch when reading data from the Arm platform memory. In
prefetch mode, the peripheral DMA automatically fetches another data-without
waiting for the SDMA core to request it-when its data register is empty, which
improves the throughput
• Selectable automatic flush. In this mode, the SDMA core may only be stalled when it
tries writing data and the previous write operation is not finished yet; whereas, in
forced flush mode, the core is stalled until the data is effectively written to the Arm
platform memory.
• In automatic flush mode, the core receives an acknowledge that does not reflect the
actual error status when the data is effectively written into the Arm platform memory
or the peripheral. This error status is retrieved by a later access to the peripheral
DMA. Terminating a write data transfer with a forced flush command guarantees that
any bus error to the Arm platform memory has been caught.
This unit structure and registers are described in Peripheral DMA Structure and
Peripheral DMA Registers.
32 32 32
FUBUS
• PDA (Peripheral Destination Address) holds the destination byte address in the Arm
platform memory map for writing data to this location. This register is automatically
modified every time the core writes a new data into PD.
• PS (Peripheral Setup) contains the state of the peripheral DMA control, two
configuration fields that define the way address registers are modified after every
data access, two additional configuration fields that define the data size to access the
source and destination devices, and another field that contains the latest transfer error
status.
• Store data into PD using the stf PD instruction as many times as needed.
• When the transfer is finished and if the peripheral DMA worked in automatic flush
mode, force the flush of PD. This instruction is stalled until PD contents are
effectively sent to the Arm platform memory or peripheral, and the error status of the
transfer is available in the DF flag.
Refer to Figure 7-4 for an example of the PCU states in debug. The following are the two
debug states:
• When a channel is running (that is, when CCR and CCPRI are different from 0,
which can be read in the PSW register), SDMA can execute a SoftBkpt instruction
from the channel script or receive a debug request. When either happens, the SDMA
enters its "Classical" Debug state, which is described in OnCE and Real-Time
Debug.
• When a channel is not running, the SDMA can be in Sleep state or in Sleep after
Reset state. If a debug request is sent to the core, it enters its Debug in Sleep state.
This debug mode works similarly to the "Classical" Debug state, except it returns to
the original state (Sleep or Sleep after Reset) when the debug mode is left via the
exec_core instruction of the OnCE. From this Debug in Sleep state, the SDMA can
execute a program whereas no channel is running. If a new debug request is sent to
the core or if a SoftBkpt is executed, it comes back to this Debug in Sleep state.
The OnCE is provided with several instructions that can be executed when the core is in
either debug state. The following table summarizes the behavior of these OnCE debug
instructions. There exists other secondary OnCE instructions that are described in OnCE
and Real-Time Debug.
Table 7-9. SDMA in Debug Mode
Instruction Debug Debug in Sleep
exec_once exec_once <instruction> exec_once <instruction>
SDMA executes the <instruction> and returns to the SDMA executes the <instruction> and returns to the
Debug state. The Program Counter (PC) is not Debug in Sleep state. The Program Counter (PC) is
incremented. This command must not be used with an not incremented. This command must not be used
instruction that modifies the PC value. with an instruction that modifies the PC value.
run_core run_core <instruction> run_core <instruction>
SDMA executes the <instruction>, leaves the Debug SDMA executes the <instruction> and returns to its
state and continues executing the channel script from Sleep or Sleep after Reset initial state. This command
the position where it stopped. This command must not must not be used with an instruction that modifies the
be used with an instruction that modifies the PC PC value.
value.
exec_core exec_core <instruction> exec_core <instruction>
It is similar to run_core except it requires an If the previous state was Sleep after Reset, the SDMA
instruction that changes the PC value (jump, returns to this state, and Chn0Addr value overrides
branch...): the SDMA jumps to the new PC value, the PC value.
leaves the Debug state and starts executing
Otherwise, the SDMA jumps to the new PC value and
instructions from this new PC value.
starts executing instructions from this new PC.
NOTE
The feature exec_core in Debug in Sleep after Sleep after Reset
was added for the Channel boot (channel 0) to allow the
debugger to return to Sleep after Reset state with a new PC
The JTAG clock is sampled by the SDMA main clock to determine its rising edge. This
simplifies design and clock management, but it also adds a ratio constraint between those
two clocks. It is guaranteed the JTAG interface works properly when the frequency of
TCK is lower than 1/8th of the frequency of the SDMA main clock (which is about 8
MHz when the SDMA core clock frequency is 66 MHz).
The following table describes these modes, and shows how to switch from one mode to
another.
Table 7-12. Power Modes
Power Sub-blocks Comments
Mode
Core Mem Sche Arm Burs Perip OnC
ories duler platf t heral E
orm DMA DMA
Cont
rol
SLEEP off1 off wait2 wait off off off Set when the PCU state is either Sleep or Sleep after Reset
and the SDMA is not in DEBUG mode. This is the default
mode after reset.
RUN on3 wait wait wait wait wait off Set for the other PCU states that are reachable out of debug:
Program, Data, Change of Flow, Error in Loop, Debug,
Functional Unit, Save, or Restore.
DEBUG on on on on on on on Set regardless of the PCU state when clock gating is turned
off to use the OnCE features (either clk_gating_off pin high
or ONCE_ENB[0] set).
1. off: no clock
2. wait: only clocked when accessed or stimulated
3. on: clock is always running
It is possible to control the SDMA power mode. The procedures to force the SDMA into
either mode are described in SLEEP Mode.
7.2.2.6.2 Reset
After reset (either received from the reset block or a software reset required by the Arm
platform), the SDMA is in IDLE mode. It will start its boot code located at address 0
once a channel is activated.
Activating a channel can be done by the Arm platform after programming a positive
priority and setting the channel bit in the EVTPEND register.
There will not be a context RESTORE for the first channel (bootload channel) called
after a reset because the context data in RAM has not been initialized. Static context
mode should be used for the first channel called after reset to ensure that the all context
RAM for that channel is initialized. Subsequent calls to the same channel or different
channels may use any of the dynamic context modes
There are two ways to make the SDMA boot on a user-defined script. The OnCE (either
via its JTAG interface or its Arm platform Control interface) can be used to download
any code in the SDMA RAM and force the SDMA to boot on that code. Also, the
SDMA_CHN0ADDR register in the Arm platform programming model can be modified
to point to user code in RAM which would need to either have been loaded via the ONCE
or default bootload routine (ex before a S/W reset).
7.2.2.9.3.2 Flags
Each channel has the following four flags:
• The T bit reflects the status of some arithmetic and test instructions. It is set when the
result of an addition or a subtraction is zero and cleared otherwise. It is also the copy
of the tested bits. Finally, it can also be set when the loop counter (GReg0) reaches
zero. When the last instruction of the hardware loop is an operation that can modify
the T flag, its effect on T is discarded and replaced by the GReg0 status.
• Two additional bits, SF and DF, are used to indicate error conditions resulting from
loading data sources and storing to destinations, respectively. Access errors set these
bits, and successful transactions clear them. They can also be cleared by specific
instructions (CLRF and loop). The source fault (SF) is updated by the loads LD and
LDF; the destination fault (DF) is updated by the stores ST and STF.
• Access errors are caused by several conditions including writing to the ROM, writing
to a read-only memory mapped register, accessing an unmapped address, or any
transfer error received by a peripheral when it is accessed.
The SF and DF flags have a major impact on the behavior of the hardware loop: If
SF or DF is set when starting a hardware loop and it is not masked by the loop
instruction, the loop body will not be executed. Inside the loop body, if a load or
store sets the corresponding SF or DF flag, the loop exits immediately. Testing the
status of the T flag at the end of the loop (as well as testing both SF and DF) tells if
the loop exited abnormally as any anticipated exit prevents GReg0 from reaching the
zero value and thus setting the T flag. This is also valid if the fault occurs at the last
instruction of the last loop.
• The last flag is the loop mode flag, LM, which is composed of two bits. The most
significant bit indicates when the processor is currently operating in loop mode. It is
set by the loop instruction and is cleared after execution of the last instruction of the
last loop. The least significant bit is set when the program counter points to the last
instruction of a loop on the last path. It is used for a channel that is restored with this
configuration to know that the next program counter is EPC. As with the dynamic
context switch Greg0, which indicates when the program must get out of the loop, it
can be restored only on the last instruction of the loop. This, however, is too late to
fetch the next instruction after the loop.
otherwise the Context Switch bus is used. It is not possible to control the actual data
transfers that occur on this bus.
Data access is performed with ld and st instructions that take the address from a general
purpose register in the core (GRegn). The mapping between the general purpose register
contents and the address bus is given in the following table:
Table 7-15. GRegn to DMBUS Address Mapping
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
sz 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
address
Grayed bits are simply discarded but they must be cleared to ensure forward-script
compatibility.
• sz (bit 31) indicates the peripheral data width: 0 is used for a 32-bit peripheral and 1
is used for a 16-bit peripheral.
• address (bits 15 down to 0) is the address of the accessed resource (internal memory,
internal register, or shared peripheral).
Table 7-16. SDMA Data Memory Space
Device SDMA Address (Hex) Size Description
ROM 0x0000 → 0x03FF 4 Kbyte 4 Kbyte internal ROM with boot code and standard routines
Reserved 0x0400 → 0x07FF 4 Kbyte 4 Kbyte Reserved
RAM 0x0800 → 0x0FFF 8 Kbyte 8 Kbyte internal RAM with channels contexts and user data/routines
per1 0x1000 → 0x1FFF 16 Kbyte peripheral 1 memory space (4 Kbyte peripheral's address space)
per2 0x2000 → 0x2FFF 16 Kbyte peripheral 2 memory space (4 Kbyte peripheral's address space)
per3 0x3000 → 0x3FFF 16 Kbyte peripheral 3 memory space (4 Kbyte peripheral's address space)
per4 0x4000 → 0x4FFF 16 Kbyte peripheral 4 memory space (4 Kbyte peripheral's address space)
per5 0x5000 → 0x5FFF 16 Kbyte peripheral 5 memory space (4 Kbyte peripheral's address space)
per6 0x6000 → 0x6FFF 16 Kbyte peripheral 6 memory space (4 Kbyte peripheral's address space)
Registers 0x7000 → 0x7FFF 16 Kbyte Memory mapped registers
per7 0x8000 → 0x8FFF 16 Kbyte peripheral 7 memory space (4 Kbyte peripheral's address space)
per8 0x9000 → 0x9FFF 16 Kbyte peripheral 8 memory space (4 Kbyte peripheral's address space)
per9 0xA000 → 0xAFFF 16 Kbyte peripheral 9 memory space (4 Kbyte peripheral's address space)
per10 0xB000 → 0xBFFF 16 Kbyte peripheral 10 memory space (4 Kbyte peripheral's address space)
per11 0xC000 → 0xCFFF 16 Kbyte peripheral 11 memory space (4 Kbyte peripheral's address space)
per12 0xD000 → 0xDFFF 16 Kbyte peripheral 12 memory space (4 Kbyte peripheral's address space)
per13 0xE000 → 0xEFFF 16 Kbyte peripheral 13 memory space (4 Kbyte peripheral's address space)
per14 0xF000 → 0xFFFF 16 Kbyte peripheral 14 memory space (4 Kbyte peripheral's address space)
2. Use the OnCE (either via its JTAG interface or its Arm platform control registers) to
download any code in the SDMA RAM. Accessing the Memory describes how to
write data to the RAM via the OnCE.
3. Use the OnCE instructions to make the PC default value point to the new boot script
start address, or rely on the ROM startup script, which first jumps to the address in
Channel 0 Boot Address (SDMAARM_CHN0ADDR). (This register default address
points to the standard boot script.)
• yield-These instructions are special cases of the done instruction. They do not modify
the scheduling bits, but allow the highest pending channel (if it exists) to preempt the
current channel if the pending channel priority is strictly greater than the current
channel priority.
• yieldge-These instructions are special cases of the done instruction. They do not
modify the scheduling bits, but allow the highest pending channel (if it exists) to
preempt the current channel if the pending channel priority is strictly greater or equal
to the current channel priority.
• notify-The notify instruction affects the scheduling bits, but does not cause
rescheduling.
Any memory location that is implemented with less than 32 bits (for example, peripheral
registers) causes unimplemented bits to be read as 0s.
All memory accesses will cause either the SF or DF flags in the processor status to be set
if they cause a fault.
What constitutes a fault, especially when accessing peripheral registers, is a property of
the memory location.
• LDr,(b,d)-The load instruction creates an address by adding the displacement field
(d) to the contents of the base register (b). The SDMA location at the resulting
address is read and placed in the destination register (r).
• STr,(b,d)-The store instruction creates an address in the same manner as the load
instruction. The register (r) is stored in the SDMA location at the resulting address.
More information regarding the functional units can be found in Peripheral DMA Unit,
and Burst DMA Unit.
Writing the source address register has two side effects: If the prefetch bit is set, a DMA
read cycle (8-word read access) is issued with the new address. Any data still located in
the buffer is lost. If there is valid write data in the buffer, it is necessary to force the
DMA to completely flush it out before modifying MSA to guarantee all the data is
effectively written to memory.
The MSA register has two modes of programming:
• Frozen-In frozen mode, the MSA register is not modified after DMA accesses.
• Incremented (default mode)-In incremental mode, MSA is incremented by the
number of bytes transferred during read cycles.
An ldf r,MD|SIZE instruction that reads the data buffer may cause a DMA cycle, as
follows:
• If there are less bytes in the FIFO than the size parameter of the instruction. For
instance, if only two bytes are available in MD and a 4-byte read is requested, a burst
read access is executed to complete the two bytes.
• If the prefetch bit is set, and after reading there is enough space in the FIFO to store a
full burst, a burst read access is triggered.
An stf r,MD|SIZE instruction that writes to the data buffer may cause a DMA cycle if the
number of written bytes in MD is higher than 32 (eight words) or if the flush bit is set.
When DMA is used for data transfer between SDMA and EXTMC (reading or writing),
no immediate error is possible because the block manages a data misalignment issue;
therefore, it is allowed to read/write a word to/from a half-word address. However, the
addresses (source or destination) must belong to the EXTMC memory mapping. The only
potential error, in this mode, would be the error sent back by the EXTMC controller
when an access to a super-user page is detected. The whole transfer on the DMA
associated bus will be considered successful when there are no errors seen on the bus
during the transfer. In copy mode, an immediate error could be returned to SDMA as
described in Burst DMA Unit Error Management.
The possible write instructions are listed in the table below (unused bits should always be
cleared).
Table 7-22. Burst DMA STF Instruction List
Binary Assembly Comments
00_0_0_00_00 stf r,MSA Writes content of the SDMA general register (r) to the source address
register. MSA is in incremented mode.
00_0_1_00_00 stf r,MSA|FR Writes content of the SDMA general register (r) to the source address
register. MSA is in frozen mode.
00_1_0_00_00 stf r,MSA|PF Writes content of the SDMA general register (r) to the source address
register, and starts a read burst access. MSA is in incremented mode.
00_1_1_00_00 stf r,MSA|PF|FR Writes content of the SDMA general register (r) to the source address
register, and starts a read burst access.
00_0_0_01_00 stf r,MDA Writes content of the SDMA general register (r) to the destination address
register. MDA is in incremented mode.
00_0_1_01_00 stf r,MDA|FR Writes content of the SDMA general register (r) to the destination address
register. MDA is in frozen mode.
00_1_0_10_00 stf r,MD|SZ0|FL No data transfers between the SDMA and MD, but all valid written data of
the MD is flushed to the memory. An acknowledge or error is sent back to
the SDMA core on transfer completion.
00_0_0_10_01 stf r,MD|SZ8 8-bit (byte) transfer to write buffer MD
00_1_0_10_01 stf r,MD|SZ8|FL 8-bit (byte) transfer to write buffer MD and flush after transfer. All valid
written data of the MD is flushed to memory.
00_0_0_10_10 stf r,MD|SZ16 16-bit (half-word) transfer to write buffer MD
00_1_0_10_10 stf r,MD|SZ16|FL 16-bit (half-word) transfer to write buffer MD and flush after transfer. All
valid written data of the MD is flushed to memory.
00_0_0_10_11 stf r,MD|SZ32 32-bit (word) transfer to write buffer MD
00_1_0_10_11 stf r,MD|SZ32|FL 32-bit (word) transfer to write buffer MD and flush after transfer. All valid
written data of MD is flushed to memory.
00_0_1_10_00 stf r,MD|CPY No data transfer between SDMA and MD but starts a copy transfer whose
length is given by the 4 LSB of r register. (Maximum burst length is eight
words.)
00_0_0_11_11 stf r,MS 32-bit (word) transfer to status register MS
00_0_0_11_00 stf r,MS|SZ0 Clears the error flag (if set). Other MS bits are unchanged; this instruction is
also known as clref MS.
NOTE
When a flush bit is set, the SDMA flushes the FIFO including
the newly written data. An acknowledge is sent to the core
before the flush completes (except if size 0 is used). The goal of
this flush bit is to force a flush, but it is recommended to use it
only when needed (for example, when finishing a row of pixels
during 2D data transfers). Indeed, if this bit is omitted and if
there are more than 32 bytes in the FIFO, a burst write access is
automatically triggered.
Since all the stf r,MD instructions (including the copy mode)
acknowledge the SDMA core before the store is effective
(except if size 0 is used), it is recommended to perform an ldf
from MS before terminating a channel in order to check the
final error status. (The ldf from MS will stall the core until all
the data was flushed out and the transfer status is known.)
After every stf MD instruction, the MDA is incremented by the
number of bytes that are written in MD, except when it is
programmed in frozen mode.
The table below lists the possible write instructions (unused bits should always be
cleared).
Table 7-25. Burst DMA LDF Instruction List
Binary Assembly Comments
00_0_0_00_00 ldf r,MSA Copies the source address register value into an SDMA general register. It
gives the memory address of the next data that will be read with an ldf MD
instruction.
00_0_0_01_00 ldf r,MDA Copies the destination address register value into an SDMA general
register. It gives the memory address where the next incoming data will be
flushed.
00_0_0_10_01 ldf r,MD|SZ8 8-bit (byte) read
00_1_0_10_01 ldf r,MD|SZ8|PF 8-bit (byte) read. If after this reading and the MD FIFO is empty, a burst
read access at the MSA address is triggered.
00_0_0_10_10 ldf r,MD|SZ16 16-bit (half-word) read
00_1_0_10_10 ldf r,MD|SZ16|PF 16-bit (half-word) read. If after this reading, and the MD FIFO is empty, a
burst read access at the MSA address is triggered.
00_0_0_10_11 ldf r,MD|SZ32 32-bit (word) read
00_1_0_10_11 ldf r,MD|SZ32|PF 32-bit (word) read. If after this reading and the MD FIFO is empty, a burst
read access at the MSA address is triggered.
00_0_0_11_00 ldf r,MS Copy the status register value into an SDMA general register.
NOTE
Read data is 0-extended before writing in the SDMA general
registers. When reading the MD register, the DMA takes data
from the FIFO if it is available. If part or whole data is not in
the FIFO, an external burst read access is performed to provide
the missing data. The SDMA is stalled as long as the required
read data is not complete.
• Therefore, if an stf MD|SZ32 is executed with MDA equal to 0x1 and with an empty
MD FIFO, the bytes located at addresses 1, 2, and 3 are flushed, and the byte located
at address 4 remains in MD FIFO. This solves the misalignment issue. Additionally,
the next write instructions (stf) complete the FIFO until it contains eight words; then
a burst write is executed by the DMA to empty the FIFO. Protocol on the external
bus does not support bursts of different data types (byte, half-word, or word).
For example, consider the case where data is written using a byte access, stf MD|
SZ8. The value of MDA during the very first byte write determines when the auto-
flush will occur as follows:
• If MDA=0x0, the flush occurs following the write of byte 32
• If MDA=0x1, the flush occurs following the write of byte 1, byte 3 and byte 35.
• If MDA=0x2, the flush occurs following the write of byte 2 and byte 34.
• If MDA=0x3, the flush occurs following the write of byte 1 and byte 33.
• If MDA=0x4, the flush occurs following the write of byte 32
The flush command forces the DMA to flush all MD valid bytes to the EXTMC
controller. An acknowledge is sent immediately to the SDMA, and any potential error is
reported on a future access. It is thus essential to conclude a transfer with a last read from
MS, which will stall the core until all data was flushed out and returned to the transfer
status (acknowledge or error).
NOTE
During this kind of auto-flush (which occurs only at the
beginning of a misaligned write transfer) no acknowledge is
sent back to the SDMA, which is stalled until a flush is
completed.
The FIFO is considered as a stack of 36 bytes: Data is fetched externally on a 32-bit bus,
but the valid bytes only are stored in the FIFO and left-aligned (for a transfer of
consecutive words, it is only the first word that may be truncated). The following table
shows the FIFO byte alignment strategy and the corresponding MSA, the returned data,
and the new FIFO state for any access size of an internal read from MD.
Table 7-26. FIFO Read Configuration
Before read Internal read Read data After read
access size
MSA[1:0] FIFO state MSA[1:0] FIFO state
00 x0 x1 x2 x3 sz8 00 00 00 x0 01 x1 x2 x3 y0
y0 y1 y2 y3 y1 y2 y3 z0
z0 z1 z2 z3 sz16 00 00 x0 x1 10 x2 x3 y0 y1
and so on... y2 y3 z0 z1
sz32 x0 x1 x2 x3 00 y0 y1 y2 y3
z0 z1 z2 z3
01 x1 x2 x3 y0 sz8 00 00 00 x1 10 x2 x3 y0 y1
y1 y2 y3 z0 y2 y3 z0 z1
z1 z2 z3 t0 sz16 00 00 x1 x2 11 x3 y0 y1 y2
and so on... y3 z0 z1 z2
sz32 x1 x2 x3 y0 01 y1 y2 y3 z0
z1 z2 z3 t0
10 x2 x3 y0 y1 sz8 00 00 00 x2 11 x3 y0 y1 y2
y2 y3 z0 z1 y3 z0 z1 z2
z2 z3 t0 t1 sz16 00 00 x2 x3 00 y0 y1 y2 y3
and so on... z0 z1 z2 z3
sz32 x2 x3 y0 y1 10 y2 y3 z0 z1
z2 z3 t0 t1
11 x3 y0 y1 y2 sz8 00 00 00 x3 00 y0 y1 y2 y3
y3 z0 z1 z2 z0 z1 z2 z3
z3 t0 t1 t2 sz16 00 00 x3 y0 01 y1 y2 y3 z0
and so on... z1 z2 z3 t0
sz32 x3 y0 y1 y2 11 y3 z0 z1 z2
z3 t0 t1 t2
The FIFO is considered as a stack of 36 bytes: Data is stored in the FIFO according to the
internal access size and the former MDA value. The following table shows the FIFO byte
alignment strategy corresponding to MDA, as well as the new FIFO state for any access
size of an internal write to MD.
Table 7-27. FIFO Write Configuration
Before write Internal write Written data After write
access size
MDA[1:0] FIFO state MDA[1:0] FIFO state
00 tt uu vv ww sz8 ?? ?? ?? x0 01 tt uu vv ww
?? ?? ?? ?? x0 ?? ?? ??
?? ?? ?? ?? ?? ?? ?? ??
and so on... sz16 ?? ?? x0 x1 10 tt uu vv ww
x0 x1 ?? ??
?? ?? ?? ??
sz32 x0 x1 x2 x3 00 tt uu vv ww
x0 x1 x2 x3
?? ?? ?? ??
01 tt uu vv ww sz8 ?? ?? ?? x0 10 tt uu vv ww
xx ?? ?? ?? xx x0 ?? ??
?? ?? ?? ?? ?? ?? ?? ??
and so on... sz16 ?? ?? x0 x1 11 tt uu vv ww
xx x0 x1 ??
?? ?? ?? ??
sz32 x0 x1 x2 x3 01 tt uu vv ww
xx x0 x1 x2
x3 ?? ?? ??
10 tt uu vv ww sz8 ?? ?? ?? x0 11 tt uu vv ww
xx yy ?? ?? xx yy x0 ??
?? ?? ?? ?? ?? ?? ?? ??
and so on... sz16 ?? ?? x0 x1 00 tt uu vv ww
xx yy x0 x1
?? ?? ?? ??
sz32 x0 x1 x2 x3 10 tt uu vv ww
xx yy x0 x1
x2 x3 ?? ??
11 tt uu vv ww sz8 ?? ?? ?? x0 00 tt uu vv ww
xx yy zz ?? xx yy zz x0
?? ?? ?? ?? ?? ?? ?? ??
and so on... sz16 ?? ?? x0 x1 01 tt uu vv ww
xx yy zz x0
Table continues on the next page...
NOTE
If the FIFO mode changes from a write to a read mode, all
remaining written bytes in MD are lost but no error is returned.
Typically, this happens if an ldf MD is executed after stf MD
instructions. Before a mode change, it is recommended to force
the flush of a potential remaining byte by a stfMD|SZ0|FL
instruction. In the same way, if a FIFO mode changes from a
read to a write mode, all prefetched data present in the FIFO is
lost and no error is returned.
ldi r1,@dst
ldi r1,0x8
MAIN_XFER:
LAST_XFER:
stf r0,MD|CPY
The main transfer loop is executed 12 times; then r0 equals 4 and the last transfer loop is
run.
In this mode, an acknowledge is transmitted to the core as soon as the read burst can start;
thus, a first copy instruction returns an immediate acknowledge and subsequent copy
instructions will be acknowledged as soon as the previous copy has finished.
When an error is received during a read transfer to the external bus, which may occur
during the burst accesses, the MD FIFO contains the valid beats of the burst, and the error
flag of MS is set to 2'b11 (error read burst). It is possible to read MS ("n" field) to know
how much valid data remains in MD and when MD is empty (after ldf instructions). The
next read MD instruction sets the MS error flag to 2'b10 (error mode), and an error is sent
back to the SDMA core. In error mode, it is possible to read MSA, which gives the
address of the error data. Any attempt to read or write MD, or to modify MDA or MSA in
error mode, gives rise to an error; therefore, an error flag must be reset by clearing MS at
the end of the SDMA code section responsible for error management.
In "error read burst" mode, writing MDA, MSA, or MD, or starting a copy transfer by a
stf MD|COPY instruction will cancel the error mode. The following table shows when an
immediate error is sent back according to the executed instruction.
Table 7-28. Possibilities in ERROR READ BURST Mode
DMA Instruction Immediate Error Comments
stf rn, MD stf rn, MSA (|U |PF) stf rn, NO Error mode is reset. MSA, MDA, or MD are updated and a
MDA DMA cycle may start. For the stf MD|COPY, a copy loop is
executed.
stf rn,MD|COPY
stf rn, MS NO MS is updated.
ldf rn, MS ldf rn, MSA ldf rn, MDA NO MS, MSA, and MDA could be read in ERROR READ mode
without any side effects (for example, no DMA cycle is
triggered).
ldf rn, MD YES/NO Immediate error if there is no more data available for read in
the FIFO.
When an error is received during a write transfer, the error is reported to the next DMA
access. In this case, an error is sent to the SDMA core and the DMA goes to its error
mode. Reading MS gives the number of bytes that remain in MD; reading MDA gives the
address of the error data. Any attempt to read or write MD, or to modify MDA or MSA in
error mode, give rise to an error; therefore, an error flag must be reset by clearing MS at
the end of the SDMA code section responsible for error management.
Table 7-29. Possibilities in ERROR Mode
DMA Instruction Immediate Error Comments
stf rn, MD stf rn, MSA stf rn, MDA Yes Any attempt to modify MD, MSA, MDA will raise an
immediate error and burst DMA remains in error mode. When
address registers are write-accessed, an error is returned.
stf rn, MS No This is the only way to exit error mode. MS[9:8] must be reset
by an stf MS|SZ0 instruction.
ldf rn, MS ldf rn, MSA ldf rn, MDA No MS, MSA, and MDA could be read in error mode without any
side effects (for example, no DMA cycle is triggered).
ldf rn, MD Yes Whatever the DMA direction (read or write), an ldf rn triggers
an immediate error.
done 0 // yield
The aim at conditional yielding is to avoid splitting bus accesses (especially bursts).
Reading the register with the ldf instruction has no side effects, and gives the address
value of the next data that will be written by SDMA during an stfMD instruction. Writing
the destination register has no side effect. Similar to the PSA register, the destination
address mode and source are specified in the stf PDA instruction and may also generate
an error in case of incorrect programming.
NOTE
dtype, dsize, stype, and ssize are updated when PSA and PDA
are written.
Due to the large number of possible stf instructions, the following table provides only a
short list of all the possible write instructions:
Table 7-34. Peripheral DMA STF Instruction List
Binary Assembly Comments
11_00_00_01 stf Rn, PSA|SZ8 |F • Source is a byte, half-word, or word target at the Rn address. Any
11_00_00_10 further PD read instructions will trigger a byte, half-word, or word
stf Rn, PSA|SZ16|F
11_00_00_11 access to the source.
stf Rn, PSA|SZ32|F • Source address is frozen.
11_10_00_01 stf Rn,PSA|SZ8 |F|PF stf • Source is a byte, half-word, or word target at the Rn address. Any
11_10_00_10 Rn,PSA |SZ16|F|PF further PD read instructions will trigger a byte, half-word, or word
11_10_00_11 access to the source.
stf Rn,PSA |SZ32|F|PF
• 1, 2, or 4 bytes are fetched from the peripheral source.
• Source address is frozen.
11_00_01_01 stf Rn, PSA|SZ8 |I stf Rn, • Source is a byte, half-word, or word target at the Rn address. Any
11_00_01_10 PSA|SZ16|I stf Rn, PSA| further PD read instructions will trigger a byte, half-word, or word
11_00_01_11 SZ32|I access to the source.
• Source address is in incremented mode: PSA = PSA + 1,2 or 4
after read PD.
11_10_01_01 stf Rn, PSA|SZ8 |I|PF stf • Source is a byte, half-word, or word target at the Rn address. Any
11_10_01_10 Rn, PSA|SZ16|I|PF stf Rn, further PD read instructions will trigger a byte, half-word, or word
11_10_01_11 PSA|SZ32|I|PF access to the source.
• Source address is in incremented mode: PSA = PSA + 1, 2, or 4
after read PD.
• 1, 2, or 4 bytes are fetched from the peripheral source.
11_00_10_01 stf Rn, PSA|SZ8 |D • Source is a byte, half-word, or word target at the Rn address. Any
11_00_10_10 further PD read instructions will trigger a byte, half-word, or word
stf Rn, PSA|SZ16|D
11_00_10_11 access to the source.
stf Rn, PSA|SZ32|D • Source address is in incremented mode: PSA = PSA-1,2, or 4 after
read PD.
11_10_10_01 stf Rn, PSA|SZ8 |D|PF • Source is a byte, half-word, or word target at the Rn address. Any
11_10_10_10 further PD read instructions will trigger a byte, half-word, or word
stf Rn, PSA|SZ16|D|PF
11_10_10_11 access to the source.
stf Rn, PSA|SZ32|D|PF • Source address is in incremented mode: PSA = PSA-1,2, or 4 after
read PD.
• 1, 2, or 4 bytes are fetched from the peripheral source.
NOTE
When writing PD, size information is not important: It is
embedded in the dsize field of PDA register. If dsize is 1, 2, or
4, then one, two, or four bytes from Rn is written to the PD
register, and automatically flushed out to the destination target.
NOTE
When reading PD, size information is not important: It is
embedded in the ssize field of the PSA register. If ssize is 1, 2,
or 4, the one, two, or four bytes is transferred from PD to Rn.
Read data is 0-extended.
The block returns no error mode and instructions are normally executed (a DMA cycle
may be triggered). Similarly, initiating a copy transfer will reset the error flag and start a
copy transfer. The following table details which instructions can be executed in this
mode.
Table 7-39. Possibilities in ERROR READ Mode
DMA Instruction Immediate Error Comments
stf rn, PD stf rn, PSA (|U |PF) stf rn, NO Error mode is reset, PSA or PDA are updated, or a write
PDA cycle is started. For the ldf PD|COPY, a copy loop is
executed.
ldf rn,PD|COPY
stf rn, PS NO PS is updated.
ldf rn, PS ldf rn, PSA ldf rn, PDA NO PS, PSA, and PDA could be read in ERROR READ mode
without any side effects (for example, no DMA cycle is
triggered).
ldf rn, PD YES Error of the previous read access is reported here and the
peripheral DMA enters its ERROR mode.
When the read access incurs a bus error, the peripheral DMA behaves exactly as
described in Read Error (First Phase) and Write Error and Read Error (Second Phase) : It
enters its ERROR READ mode, and so on.
When the error occurred during the write access of the copy transfer, the DMA enables
the core to retrieve the data that was read because it is assumed the read from the
peripheral removed the data from its source device. Therefore, the data to be flushed is
still in PD. Any subsequent access to PD triggers an error to the core, which should
execute its error handling procedure.
Once the ERROR mode is left (after writing to PS), it is possible for the core to retrieve
the data in PD with an ldf instruction or try to flush PD contents once again (for example,
when the error was due to a full FIFO and the script waited for the FIFO to be emptied)
with another ldf instruction in copy mode. This latter instruction detects that there is valid
data in PD, tries to flush it, and thus skips the read phase of the copy instruction. This is a
different behavior from the usual stf PD instruction that overwrites PD with the selected
General Purpose register contents. The same mechanism can be used any time PD holds
data that is not written because of a bus error on the DMA interface; when the data was
written via a copy instruction, or via the usual stf PD instruction.
7.2.2.12.3.3 Watchpoints
One output pin is provided to monitor matching trigger conditions that are defined in the
event detection unit.
This command set enables you to perform any of the following tasks: control processor
activity, save core context, and execute an SDMA instruction from the OnCE. Combined
together, these tasks perform more complex commands.
A full OnCE command contains a 4-bit instruction (the OnCE command opcode) and a
variable length data field (the OnCE data). During command execution, the OnCE data is
transferred in a OnCE internal register before being exchanged with the SDMA. Some
data values are also exported. This mechanism creates a link between the processor and
the external world. Nine commands are defined: The following table presents their
formats.
Table 7-42. OnCE Command Opcode Values
Instruction Name Action Register Data Mode
Opcode Field Size
0000 rstatus Reads the OnCE status register STATUS 16-bit normal/debug
0001 dmov Updates general register GReg1 GREG1 32-bit debug
0010 exec_once Runs the instruction from the SDMA INSTRUCTION 16-bit debug
instruction register
0011 run_core Returns to normal execution BYPASS 1-bit debug
0100 exec_core Returns to normal execution via a jump INSTRUCTION 16-bit debug
instruction that specifies the new address
0101 debug_rqst Stops the core after execution of current BYPASS 1-bit normal
instruction
0110 rbuffer Reads the real time buffer RTB 32-bit normal/debug
0111-1110 reserved Reserved BYPASS 1-bit normal/debug
1111 bypass Bypasses TARM platform controller BYPASS 1-bit normal/debug
Each instruction corresponds to a specific action performed on the OnCE. The nature of
the associated data field is clearly identified. The dmov command is followed by a 32-bit
data value (which is a data value for the SDMA); the exec_once and the exec_core
commands are followed by a 16-bit data value (which is an instruction for the SDMA);
the rstatus command is followed by a 16-bit control value (which is the content of the
OnCE status register); the rbuffer command is followed by a 32-bit data value. The
debug_rqst and the run_core commands are followed by a single bit data field (this is a
bypass value). Finally, the bypass instruction enables the SDMA JTAG TAP controller to
be daisy-chained with another JTAG TAP controller. This is a JTAG-only feature. The
set of commands is simple, but enables you to perform any possible task on the SDMA
during a debug process.
To drive the OnCE, the Arm platform uses some registers contained in the Arm platform
Control block of the SDMA. These registers are accessed through the Arm platform
peripheral bus. Most of these registers are connected to another register in the OnCE
controller. Thus, accessing one of these registers is equivalent to accessing the associated
register in the OnCE controller.
The set of registers in the Arm platform Control block is listed below:
• ONCE_ENB register (1 bit, read/write)-This 1-bit register enables the Arm platform
access to the OnCE. When this bit is set, the signals from the JTAG are ignored.
When it is cleared, all writing operations to the following registers through the Host
Control interface are ignored. This register is reset on a JTAG reset.
• ONCE_CMD register (4 bits, read/write)-This 4-bit register receives the command
opcode. It is connected to the command register in the controller. A write access to
this register causes the associated command to be executed on the OnCE. For
example, after writing "0001" in this register, a dmov command is executed.
NOTE
On the Arm platform side, the rstatus and bypass commands are
not supported. This register is reset on a JTAG reset.
• ONCE_DATA register (32 bits, read/write)-This 32-bit register is connected to the
SDMA data register. This register is used when executing a dmov or rbuffer
command.
NOTE
Before requesting a dmov command, the 32-bit data to transfer
must be written in the ONCE_DATA register. At the end of the
execution, the register is updated with GReg1 former value.
This register is reset on a JTAG reset.
• ONCE_INSTR register (16 bits, read/write)-This 16-bit register is connected to the
SDMA instruction register. This register is used when executing an exec_core or an
exec_once command.
NOTE
Before requesting an exec_core or an exec_once command, the
appropriate instruction must be written in the ONCE_INSTR
register. This register is reset on a JTAG reset.
• ONCE_STAT register (16 bits, read only)-A read access to the ONCE_STAT
register returns the content of the OnCE status register (OSTAT). This register is
read only.
• The bypass register is not useful when the Arm platform controls the OnCE,
therefore no register is defined in the Arm platform Control block to access the
bypass register.
7.2.2.13.2.3 Conflicts Between the JTAG and the Arm platform Accesses
When Arm platform access to the SDMA OnCE is enabled (that is, when the bit in the
ONCE_ENB register is set), the JTAG access is disabled. This guarantees that the block
is not accessed at the same time on both sides.
It is possible to check whether the JTAG access to the SDMA OnCE is enabled from the
JTAG port. When the JTAG access is disabled, the SDMA TDO always returns 1. The
check requires the following steps:
• Execute a dmov command from debug mode (with neither 0xffffffff nor 0x0 as dmov
value: 0x5a5a5a5a is good).
• Execute another dmov command (the value here is not important).
• The returned value from the latter dmov command should be the original one if the
JTAG access is enabled; if it is 0xffffffff instead of the original input value, this
means the JTAG access is disabled.
There are also commands that interact with the core: dmov, run_core, exec_core,
exec_once, and debug_rqst. These commands are core status dependent, as follows:
• During user mode only the debug_rqst is taken into account.
• During debug mode, all these commands are taken into account except the
debug_rqst. For example, an exec_once command requested while not in debug
mode has no effect.
32-bit data value. If the OnCE is driven from the Arm platform side, the data values
contained in GReg1 and the SDMA data register are exchanged after detecting a
write access to the ONCE_CMD register. The ONCE_DATA register must therefore
be loaded first.
• exec_once command execution-The exec_once command executes the instruction
loaded in the SDMA instruction register. The command may only be requested from
debug mode. The SDMA returns to debug mode at the end of the execution.
• Change of flow instructions as well as instructions that may cause a context switch
are not supported: The comprehensive list comprises done/yield/yiedge (except done
5), BF, BT, BSF, BDF, JMP, JSR, JMPR, JSRR, RET, and LOOP, as well as all the
illegal instructions.
No other command should be requested before the SDMA returns to debug mode.
The SDMA status (for example, whether it is in debug mode or not) can be detected
by polling with the rstatus OnCE command, monitoring the debug_mode pin, or
checking the OnCE Status Register (SDMAARM_ONCE_STAT) register via the
Arm platform control interface.
NOTE
Most of the instructions are single-cycle, which omits the
step of polling the status. Loads and stores to DMA units
are typical instructions that might require this polling.
If the JTAG is used, the 16-bit instruction is shifted in the SDMA instruction register
after 16 TCK clock cycles in the shift_dr state. A request is sent to the core when the
update_dr state is decoded in the TAP controller. If the OnCE is driven from the Arm
platform side, the request is sent to the SDMA when detecting a write access to the
ONCE_CMD register. The ONCE_INSTR register must be therefore be loaded first.
• run_core command execution-The run_core command leaves debug mode and
resume normal program execution. The next instruction executed is the last
instruction decoded before entering debug mode. Be sure to restore core context
before re-running the core. This procedure is detailed in Restoring the Context.
• If the JTAG is used, a 1-bit bypass value is shifted in the bypass register in the
shift_dr state. The SDMA is rerun when the update_dr state is decoded in the TAP
controller. If the OnCE is driven from the Arm platform side, the core is rerun when
detecting a write access to the ONCE_CMD register.
• exec_core command execution-The exec_core command resumes program execution
from any address. The 16-bit instruction provided with the exec_core overwrites the
last instruction decoded before entering debug mode. This command is designed to
support change of flow instructions, so that a program execution can be restarted
from any address. After executing an exec_core command, the SDMA leaves debug
mode. The exec_core command is usually used with a jmp instruction.
• If the JTAG is used, the 16-bit branch instruction is shifted in the SDMA instruction
register after 16 TCK clock cycles in the shift_dr state. The SDMA is rerun when the
update_dr state is decoded in the TAP controller. If the OnCE is driven from the Arm
platform side, the SDMA reruns when detecting a write access to the ONCE_CMD
register. The ONCE_INSTR register must therefore be loaded first. For example, to
restart the SDMA from the program address 0x100, the instruction loaded should be
a jump to address 0x100 instruction.
• debug_rqst command execution-The debug_rqst command puts the SDMA in debug
mode. If the JTAG is used, a 1-bit bypass value is shifted in the bypass register
during the shift_dr state. A debug request is sent to the SDMA when the update_dr
state is decoded in the TAP controller. If the OnCE is driven from the Arm platform
side, the debug request is sent when detecting a write access to the ONCE_CMD
register. When the SDMA is already in debug mode, this command is simply
ignored.
• rbuffer command execution-The rbuffer command exports the content of the real
time buffer (RTB). If the JTAG is used, the content of the real time buffer (RTB) is
captured in the SDMA data register during the capture_dr state. The register is
completely shifted out after maintaining the shift_dr state during 32 TCK clock
cycles. If the OnCE is driven from the Arm platform side, the content of the RTB is
captured in the ONCE_DATA register after detecting a write access to the
ONCE_CMD register.
• bypass command execution-This command is only available from the JTAG
interface. It enables daisy-chaining of the SDMA JTAG TAP controller with other
JTAG TAP controllers. This command does not change the SDMA state and can be
executed in any mode (run, debug, or sleep). It selects the bypass register of the TAP
controller.
Where PST[3:0] is the SDMA core state, RCV is set when the real-time buffer (RTB) is
modified. EDR, ODR, and SWB are set, respectively, when the SDMA has entered debug
mode because of an external debug request, a OnCE debug_rqst command, or a software
breakpoint. MST is set when the OnCE is controlled from the Arm platform control
interface, and when ECDR is a three-flag set that shows the event cell condition(s) that
put the core in debug mode. The OSTAT never provides more than one reason for
entering debug mode.
The TDI and TMS flip-flops also cannot go metastable: The propagation time of the
rising-edge detection signal through tck0, tck1, and tck2 guarantees that the TDI and
TMS inputs are stable when captured in the TDI and TMS flip-flops.
'0' tms
'1' tdi TMS/TDI internals
TMS/TDI
posedge_detected
tdo '0'
TDO
'1' TDO internal
The following figure shows synchronization timings. It takes three CLK clock cycles to
synchronize TDI on the SDMA clock.
TCK
CLK
posedge_det
TDI
internal TDI
negedge_det
TDO
This is the case for instances when the SDMA is in sleep mode. Clock gating
management depends on the interface used to control the OnCE.
• For the JTAG access, the SDMA clock gating must be turned off via the
clk_gating_off input.
• For the Arm platform access, the SDMA clock gating is automatically turned off
when the Arm platform access is enabled (see OnCE Enable
(SDMAARM_ONCE_ENB)).
The following presents the syntax used in this section. The data field provided with each
command is put in parenthesis with the command name. A '-' is used if the data field
provided is a don't care value.
my_command(data_field); // executing my_command with a data field
my_command(-); // executing my_command with a don't care data field
The value returned by the command (if there is one) is referred by an assignment. In case
the value returned by the command is not used, the assignment is omitted. For an Arm
platform access, the value returned (it is always a data value) is obtained by reading back
into the SDMA data register.
data_out = my_command(data_in); // returning a data value
To clarify the syntax, the instructions' opcodes are referred to by their names. In practice,
use the corresponding 16-bit encoding.
If the SDMA is not in debug mode, then a debug request must be generated. In this case,
the SDMA enters debug mode at the end of the execution of the current instruction. Use
this snippet:
debug_rqst(-); // debug request
In the following sections, it is assumed that the SDMA was successfully put into debug
mode.
The following example shows how to save GReg[0], GReg[1], GReg[2] and GReg[3].
The sequence of commands used to export additional general registers is very similar to
this.
Save GReg[0], GReg[1], GReg[2], and GReg[3]
GReg1_data = dmov(-); // the value exported is the content of
GReg[1]
exec_once("mov GReg1,GReg0"); // puts the content of GReg[0] into
GReg[1]
GReg0_data = dmov(-); // the value exported is the content of
GReg[0]
exec_once("mov GReg1, GReg2"); // puts the content of GReg[2] into
GReg[1]
GReg2_data = dmov(-); // the value exported is the content of
GReg[2]
exec_once("mov GReg1, GReg3"); // puts the content of GReg[3] into
GReg[1]
GReg3_data = dmov(-); // the value exported is the content of
GReg[3]
Get the value of the internal flags (SF, DF, T, and LM), of the loop related registers (EPC
and SPC), and of the PC-related registers (PC and RPC). Use a done 5, which is the
formatting instruction dedicated to the debug. This instruction formats the flags and the
values contained in the registers. It also writes the resulting values into the channel
context memory. It should not be used when entering debug from the IDLE state (for
example, with no active channel script running on the SDMA), because it will update a
channel context that may belong to any channel.
exec_once("done 5"); // formatting the value of flags and registers
At this point, the channel context should be up-to-date in memory, and debug operations
should now be possible. However, the context can be exported with the following
instructions:
Exporting the Context
dmov(ctx_base_addr); // loading GReg[1] with the channel
context base address
exec_once("ld GReg0,(GReg1,0)"); // get RPC-PC into GReg0
exec_once("ld GReg1, (GReg1,1)"); // get SPC-EPC into GReg1
Loop_data = dmov(-); // read back the value of Loop registers
exec_once("mov GReg1, GReg0"); // puts the PC info into GReg1
PC_data = dmov(-); // reads back the content of the PC registers
After this sequence of operations, the entire SDMA context is exported via the OnCE.
Once the context in memory is the desired context (with or without applying the previous
instruction sequence), it can be restored to the real PC and loop registers in the SDMA
core:
exec_once("cpShReg"); // restore flags and PC & loop related registers
After this command, the SDMA core PC, RPC, SPC, EPC registers, as well as the flags
contain the same data as what is stored in the context RAM for the current channel.
The following example shows how to restore the context of general registers GReg[0],
GReg[1], GReg[2] and GReg[3].
Restoring the General Register Context
dmov(GReg3_data); // put GReg[3] restore value in GReg[1]
exec_once("mov GReg3, GReg1"); // restore GReg[3]
dmov(GReg2_data); // put GReg[2] restore value in GReg[1]
exec_once("mov GReg2, GReg1"); // restore GReg[2]
dmov(GReg0_data); // put GReg[0] restore value in GReg[1]
exec_once("mov GReg0, GReg1"); // restore GReg[0]
dmov(GReg1_data); // restore GReg[1]
In the example shown here, it is assumed that the SDMA context is entirely saved. If true,
it is permissible to modify the general purpose registers during debugging activity.
To perform a memory read access, the target address is stored via the OnCE in GReg[1],
then the load instruction is executed on the SDMA (the data loaded from the memory
overwrites the address contained in GReg[1]), and then the result value is read back via
the OnCE.
macro READ: dmov(target_addr); // put the target
address in GReg[1]
exec_once("ld GReg1,(GReg1,0)"); // execute the
load instruction
res_data = dmov(-); // exports the result
data value
For a memory write access, the target address is written in GReg[0], and the value to
store is written in GReg[1]. Then the store instruction is executed on the SDMA.
macro WRITE: dmov(target_addr); // puts the
target address in GReg[1]
exec_once("mov GReg0,GReg1"); // puts the target
address in GReg[0]
dmov(target_data); // puts the target
data in GReg[1]
exec_once("st GReg1,(GReg0,0)"); // performs the
store operation
This sequence is shown as an example; however, many other sequences are possible.
NOTE
This sequence of commands can also be applied to memory-
mapped registers.
If necessary, restart the execution from a different address. In this case, use the exec_core
command. The data field provided with this command must be the encoding of a jump
instruction.
exec_core("jmp start_addr"); // rerun the SDMA from another address
In these two examples, the SDMA exits debug mode and keeps executing the code
fetched from the memory.
A debug request is sent to the OnCE controller when user-defined conditions on address
and/or data values are true.
A counter, provided with the detection cell, is decreased after an event detection. A
debug request is sent to the core only when the counter reaches the value of 0. It is
possible to disable the use of the counter if a debug request has to be generated after each
event detection.
The event cell is the basic block that supports hardware breakpoints on an address value
and/or data values coming from the SDMA memory bus. The trigger condition that
generates the debug request is a mixed condition based on those values.
The following figure shows the event cell architecture. The event cell contains the
address (stored in the memory address register) and the data (stored in the memory data
register) used during the last memory access. There are some user-defined reference
values located in memory mapped registers-the event cell addresses, the event cell
address mask, the event cell data, and the event cell data mask. These registers are
accessed by standard load/store instructions just like regular memory locations.
Event Cell Address Register (a) Address Comparator (a) Memory Access Type Register
Event Cell Address Register (b) Address Comparator (b) Memory Access Register
addrb_cond
Logic
addr_cond
Logic
event_detect
To define a memory breakpoint, three conditions are taken into account: The first two
conditions are comparisons of the current memory address with user-defined reference
addresses (these conditions are called addressA and addressB). The third condition
consists of a comparison between the data received on the DMBUS and a user-defined
reference data (this condition is called data). An intermediate address condition is set to
express a dependency between addressA and addressB conditions.
7.2.2.14.7.1 Clocks
Because the SDMA uses clock gating to save power, it is necessary to disable the clock
gating and force the clocks to be enabled when using the OnCE.
When the OnCE is accessed through its JTAG interface, clock gating must be disabled
outside the SDMA via a dedicated SDMA input port clk_gating_off. The reason why
detection is not performed automatically by the SDMA internal hardware is that it would
cost power to monitor activity on the JTAG interface.
When the OnCE is accessed through the Arm platform Control interface, clock gating is
automatically turned off. This is done when bit 0 of the ONCE_ENB register (see OnCE
Enable (SDMAARM_ONCE_ENB)) is set. A write access to this register is possible
even when the OnCE clock is not running. If the Arm platform access is used, the bit in
the ONCE_ENB register must be set before any attempt to access any other OnCE
register.
7.2.2.14.7.2 Resets
The OnCE reset is different from the SDMA main reset.
Normally, activating the SDMA reset while keeping the OnCE reset inactive (when
possible) enables you to reset the core without having to reprogram the OnCE.
shift
...
Each cell of the trace buffer contains two reference addresses and a flag. The flag is set
when the addresses stored in the cell correspond to a valid change of flow; otherwise, the
flag is cleared. The three most significant bits are unused.
After every change of flow detection, the address of current instruction and the address of
the target instruction are stored at the top of the Trace Buffer (cell #0). The flag in the
cell is set to indicate that a valid change of flow was detected. Former cell values are
shifted one level down. The Trace Buffer contains the 32 last changes of flow. All the
flags are reset on a software or a hardware reset, and after each transition from debug
mode to user mode.
A memory mapped register of SDMA core, the Trace Buffer register (TB), is provided to
read the content of the Trace Buffer. This operation should be done in debug mode.
Performing a read access to the Trace Buffer register returns the content of the bottom of
the Trace Buffer (cell #31). After every read access, the trace buffer is shifted one level
down, and the flag at the top of the trace buffer is cleared.
A typical OnCE command sequence that retrieves the oldest change-of-flow information
is a follows:
exec_once("mov r1, TB"); // stores the oldest change-of-flow in
GReg1
dmov(-); // retrieves GReg1 contents
0 Program
1 Data
2 Change of Flow
3 Change of Flow in Loop
4 Debug
5 Functional Unit
6 Sleep
7 Context Switch Saving Channel
8 Program in Sleep
9 Data in Sleep
10 Change of Flow in Sleep
11 Change of Flow in Loop in Sleep
12 Debug in Sleep
13 Functional Unit in Sleep
14 Sleep after Reset
15 Context Switch Restoring Channel
debug_yield Pulse that is active when a yield (done 0) or a yieldge (done 1) instruction is executed.
0-
1 yield/yieldge executed
debug_core_run Active when the SDMA core is executing instructions.
0 Debug or sleep mode
Table continues on the next page...
debug_pc[13:0] Program Counter value; it has a meaning when the core is in run mode.
debug_mode Set when the core is in debug.
0-
1 Core is in debug
debug_bus_error Set when an error was received during a load or a store (ld, st, ldf, or stf instruction) and
registered in SF or DF flag.
0 No error during last load/store
1 Error during last load/store
debug_bus_device[4:0] Indicates the device or functional unit that is accessed by the current instruction. The
debug_bus_device output is always valid when in sleep mode, debug mode, or executing any
instruction that does not access the functional units or the memory mapped devices, "no
access" is output.
0 No access
1 MSA
2 MDA
3 MD
4 MS
5 PSA
6 PDA
7 PD
8 PS
9 RESERVED
10 RESERVED
11 RESERVED
12 RESERVED
13 CA
14 CS
15 Reserved
16 Memory (RAM or ROM)
17 Memory mapped register
Table continues on the next page...
The matched_event emulation pin reflects the matching condition status detected by the
Event Detection Unit. Because it can be necessary to detect conditions without triggering
debug requests, it is possible to disable the generation of debug requests by the Event
Detection Unit and still have the matching condition available on the emulation pin. This
can be done by clearing the EN flag in the ECTL register.
All real-time debug outputs are disabled by default (for example, they are stuck to 0) to
avoid power consumption when they are not used. They are enabled when bit 11
(RTDOBS) of the Configuration Register (SDMAARM_CONFIG) is set. Signals
provided to the system JTAG controller for SDMA debug mode status will also be
enabled when the clk_gating_off input is asserted.
ff - flag to clear
00000jjj00000000 - done (done,yield,wait)
00000jjj00000001 - notify
00000xxx00000010 - reserved
00000xxx00000011 - reserved
00000xxx00000100 - reserved
0000000000000101 - softBkpt
0000000100000101 - reserved
0000001000000101 - reserved
0000001100000101 - reserved
0000010000000101 - reserved
0000010100000101 - reserved
0000011000000101 - reserved
0000011100000101 - reserved
0000000000000110 - ret
0000000100000110 - reserved
0000001000000110 - reserved
0000001100000110 - reserved
0000010000000110 - reserved
0000010100000110 - reserved
0000011000000110 - reserved
0000011100000110 - reserved
T ← (GReg[r] == 0)
Assembler:
Syntax: add r,s
Description: Performs the ADDition of the source general register s and the destination
general register r, and stores the result in the destination general register r. The T flag is
set if the result of the operation is 0. It is cleared if the result is not 0.
Instruction Format:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 1 0 0 1 1 s s s
Instruction Fields:
rrr / sss - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
T ← (GReg[r] == 0)
Assembler:
Syntax: addi r,immediate
ADD GReg[6] and decimal value 112 and store the result in GReg[6]
CPU Flags: T
Cycles: 1
Description: Adds a 0-extended immediate value to a general register; stores the result in
the general register. The flag T is set when the result of the operation is 0; otherwise, it is
cleared. The immediate value is the low-order byte of the instruction and has a maximum
value of 255 (0xFF).
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 r r r i i i i i i i i
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
00000001 - 1
...
11111110 - 254
11111111 - 255
Assembler:
Syntax: and r,s
Description: Performs the AND of the source general register s and the destination
general register r, and stores the result in the destination general register r.
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 1 0 1 1 1 s s s
Instruction Fields:
rrr / sss - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
Syntax: andi r,immediate
AND GReg[7] and decimal value 45 and store the result in GReg[7]
CPU Flags: unaffected
Cycles: 1
Description: Performs an AND between a 0-extended immediate value and a general
register; stores the result in the general register. The immediate value is the low-order
byte of the instruction and has a maximum value of 255 (0xFF).
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 1 r r r i i i i i i i i
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
00000001 - 1
...
11111110 - 254
11111111 - 255
Assembler:
Syntax:andn r,s
AND GReg[3] and NOT GReg[4] (bit inverted) and store the result in GReg[3]
CPU Flags: Unaffected
Cycles: 1
Description: Performs the AND of the negation of the source general register s and the
destination general register r, and stores the result in the destination general register r.
Instruction Format:
Instruction Fields:
rrr /sss - destination register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
Syntax: andni r,immediate
AND GReg[0] and decimal value -3 (inverted 32-bit value 2) and store the result in
GReg[0]
CPU Flags: unaffected
Cycles: 1
Description: Performs an AND between the negation of a 0-extended 8-bit immediate
value and a general register; stores the result in the general register. The immediate value
is the low-order byte of the instruction and has a maximum value of 255 (0xFF).
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 1 0 r r r i i i i i i i i
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
00000001 - 1
...
11111110 - 254
11111111 - 255
Assembler:
Syntax: asr1 r
Example: asr1 3
divide by 2 the signed value of GReg[3] and store the result in GReg[3]
CPU Flags: Unaffected
Cycles: 1
Description: Shift the bits of any general register to the right and keep the same sign: The
left bit (bit 31) is kept untouched.
Instruction Format:
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
Syntax: bclri r,i
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 0 0 1 i i i i i
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
00001 - 1
...
11110 - 30
11111 - 31
Assembler:
Syntax:bdf label
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 1 1 1 1 p p p p p p p p
Instruction Fields:
00000001 - 1
...
01111110 - 126
01111111 - 127
10000000 - (-128)
10000001 - (-127)
...
11111110 - (-2)
11111111 - (-1)
PC ← PC + 1 + displacement
else
PC ← PC + 1
Assembler:
Syntax: bf label
Example: bf LLL
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 1 1 0 0 p p p p p p p p
Instruction Fields:
pppppppp - signed displacement field:
00000000 - 0
00000001 - 1
...
01111110 - 126
01111111 - 127
10000000 - (-128)
10000001 - (-127)
...
11111110 - (-2)
11111111 - (-1)
Assembler:
Syntax: bseti r,i
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 0 1 0 i i i i i
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
00001 - 1
...
11110 - 30
11111 - 31
Assembler:
Syntax: bsf label
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 1 1 1 0 p p p p p p p p
Instruction Fields:
00000001 - 1
...
01111110 - 126
01111111 - 127
10000000 - (-128)
10000001 - (-127)
...
11111110 - (-2)
11111111 - (-1)
PC ← PC + 1 + displacement
else
PC ← PC + 1
Assembler
Syntax: bt label
bt LLL
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 1 1 0 1 p p p p p p p p
00000001 - 1
...
01111110- 126
01111111 - 127
10000000 - (-128)
10000001 - (-127)
...
11111110 - (-2)
11111111 - (-1)
Assembler:
Syntax: btsti r,i
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
0001 - 1
...
11110 - 30
11111 - 31
SF ← 0
if (ff/2 == 0)
DF ← 0
Assembler:
Syntax: clrf ff
Example: clrf 2
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 f f 0 0 0 0 0 1 1 1
Instruction Fields:
ff - flags field:
00 - clear SF and clear DF
01 - clear DF
10 - clear
SF 11 - no clear
Assembler:
Syntax: cmpeq r,s
Compare GReg[7] and GReg[5] and set flag T if they are equal
CPU flags: T
Cycles: 1
Description: Subtracts the destination general register r from the source general register s,
and sets T if the result is 0, clears T if the result is not 0.
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 1 1 0 0 1 s s s
Instruction Fields:
rrr / sss - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
Syntax: cmpeqi r,immediate
Compare GReg[2] and decimal value 13 and set flag T if they are equal
CPU Flags: T
Cycles: 1
Description: Subtracts the 0-extended 8-bit immediate value from the general register,
and sets T if the result is 0, clears T if the result is not 0. The immediate value is the low-
order byte of the instruction.
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 1 r r r i i i i i i i i
Instruction Fields:
rrr - destination register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
00000001 - 1
...
11111110 - 254
Assembler:
Syntax: cmphs r,s
Compare GReg[0] and GReg[1] and set flag T if GReg[0] is higher than or equal to
GReg[1]
CPU Flags: T
Cycles: 1
Description: Compares the destination general register r and the source general register s,
and sets T if the destination general register r is higher than or equal to the source general
register s, clears T otherwise. The comparison is unsigned.
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 1 1 0 1 1 s s s
Instruction Fields:
rrr / sss - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
Syntax: cmplt r,s
Compare GReg[7] and GReg[4] and set flag T if GReg[7] is lower than GReg[4]
CPU Flags: T
Cycles: 1
Description: Compares the destination general register r and the source general register s,
and sets T if the destination general register r is lower than the source general register s,
clears T otherwise. The comparison is signed.
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 1 1 0 1 0 s s s
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 1 1 0 1 1 1 0 0 0 1 0
if (jjj == 3) HI[CCR] ← 1
if (jjj == 4) EP[CCR] ← 0
CCR ← NCR
else
CCR ← NCR
(CCR stands for Current Channel Register; NCR stands for Next Channel Register)
Assembler:
Syntax: done jjj
Example: done 3
Clear HE bit for the current channel, send an interrupt to the Arm platform for the current
channel and reschedule.
CPU Flags: Unaffected
Cycles: Variable if a context switch is done, 1 otherwise
Description: Clears one of the channel enabling bits (HE or EP for the corresponding
channel number) if required. Sends an interrupt to the corresponding Arm platform by
setting the appropriate flag, if required (HI for the corresponding channel number).
Reschedules according to the mode and the NCP (Next Channel Priority) and CCP
(Current Channel Priority) values. According to the scheduling decision, the NCR (Next
Channel Register) is copied to the CCR (Current Channel Register) and channel contexts
are switched. If several channels with the same highest priority are pending, they are
ordered by their number from 31 down to 0. The higher number is selected (for example,
channel 26 is selected if channels 3, 12, 14, and 26 with the same highest priority are
pending). If no flag is modified, the reschedule can allow the replacement of the current
i.MX 8M Mini Applications Processor Reference Manual, Rev. 3, 11/2020
1150 NXP Semiconductors
Chapter 7 Interrupts and DMA
channel by another channel with a priority strictly greater than the current channel
priority (yield). Or, it can allow the replacement of the current channel by another
channel with a priority greater than or equal to the current channel priority (yieldge). In
the latter case, the selected channel will always be the first one with the same priority,
starting from channel number 31 down to channel 0 (the current channel does not belong
to the set of selectable channels).
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 j j j 0 0 0 0 0 0 0 0
• done 4 is executed by a channel script that was triggered by a DMA request, when its
task is completed and it requires termination;
• done 5 is used in debug mode only; it copies the PCU registers and flags to the
context memory of the current channel;
Assembler:
Syntax: illegal
Assembler:
Syntax: jmp label
Description: Jumps to the absolute address contained the lower 14 bits of the instruction
(the PC is a 14-bit register).
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 a a a a a a a a a a a a a a
00000000000001 - 1
...
11111111111110 - 16382
11111111111111 - 16383
Assembler:
Syntax: jmpr r
Example: jmpr 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 0 0 0 0 1 0 0 0
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
PC ← absolute_address
Assembler:
Syntax: jsr r
Example:jsr LLL
Jumps to subroutine starting at LLL; the assembler translates the label to exact address
CPU Flags: Unaffected
Cycles: 2
Description: Jumps to the subroutine located at the absolute address contained the lower
14 bits of the instruction (the PC is a 14-bit register).
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 a a a a a a a a a a a a a a
00000000000001 - 1
...
11111111111110 - 16382
11111111111111 - 16383
PC ← GReg[r]
Assembler:
Syntax: jsrr r
Example:jsrr 5
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 0 0 0 0 1 0 0 1
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
if (transfer_error)
SF ← 1
else
SF ← 0
Assembler:
Syntax: ld r,(b,displacement)
Example: ld 1,(2,23)
Loads data into GReg[1]; the data is located at address obtained by adding decimal value
23 to GReg[2]
CPU Flags: SF
Cycles: 2+n where n is 0 for ROM, RAM or memory mapped registers, and n is the
number of wait-states of the peripheral for a peripheral access
Description: Adds a 5-bit 0-extended displacement to a base address in General Register
b; the result is the address of the data to fetch on the DM bus. The data received from the
bus is stored in the destination General Register r. If an error occurs during the transfer,
the flag SF is set, else it is cleared.
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 1 0 r r r d d d d d b b b
001 - GReg[1]
...
111 - GReg[7]
00001 - 1
...
11111 - 31
if (transfer_error)
SF ← 1
SF ←0
Loads data coming from the Burst DMA register MD into GReg[0]; it is a 32-bit access
with no prefetch
CPU Flags: SF
Cycles: 1+n where n is the number of wait-states that may be inserted by the functional
unit
Description: Sends an 8-bit address on the Functional Unit Bus (FU bus) and stores the
data received from the bus in the destination General Register r. If an error occurs during
the transfer, the flag SF is set, else it is cleared.
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 0 0 r r r f f f f f f f f
See the following sections for more details of the LDF instruction usage with each
functional unit:
• Burst DMA Read (ldf) for Burst DMA
• Peripheral DMA Read (ldf)-Read Mode for Peripheral DMA
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
ffffffff - functional unit source register and action (unspecified values are reserved):
00000000 - MSA
00000100 - MDA
00001001 - MD byte
00001010 - MD halfword
00001011 - MD word
00001100 - MS
01000000 - DSA
11000000 - PSA
11001000 - PD
11010000 - PDA
11111111 - PS
Assembler:
Syntax: ldi r,immediate
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 1 r r r i i i i i i i i
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
00000001 - 1
...
11111110 - 254
11111111 - 255
Assembler:
Syntax: ldrpc r
Example: ldrpc 3
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 0 0 0 0 1 0 1 0
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
SF ← 0
if (ff/2 == 0)
DF ← 0
PC ← PC + loop_size + 1
else
SPC ← PC + 1
EPC ← PC + loop_size + 1
LM ← 1
PC ← PC + 1
PC ← EPC
GReg[0] ← GReg[0] - 1
if (GReg[0] == 0)
LM ← 0
PC ← EPC
else
PC ← SPC
else
PC ← nextPC(instruction)
T ← 1
else
T ← 0
Assembler:
Syntax: loop n{,ff}
Executes GReg[0] times the instructions comprised between PC+1 and PC+3 (included);
ff=1 clears the DF flag before starting the loop. When omitted, the ff field is set to 0
(clearing both SF and DF).
CPU Flags: LM[1:0], T
Cycles: 2 when the loop count (GReg[0]) is 0 or SF or DF is set at loop start, 1+1 when
the loop starts but exits abnormally (SF or DF set inside the loop which adds 1 cycle to
the offending load or store to jump to EPC), 1 when the loop is executed normally
Description: The loop instruction executes a sequence of instructions several times. The
number of times is given by the contents of GReg[0], the loop counter. SDMA will jump
to the first instruction after the end of the loop if the value in GReg[0] is 0. Otherwise the
SDMA enters loop mode. It sets the most significant bit of the LM flag that will only be
reset once the last instruction of the last loop is executed. The instructions in the loop are
executed GReg[0] times. The management of fault flags (SF and DF) is as follows. When
entering the hardware loop, SF and DF can be cleared according to the ff field of the
instruction. After that operation, if any flag is still set the loop will not be executed. The
SDMA will jump to the first instruction after the end of the loop without entering loop
mode. During the execution of the loop, if any fault flag is set by a LD, LDF, ST, or STF
instruction, the SDMA will immediately exit loop mode and jump to the first instruction
after the end of the loop. In that case, GReg0 is not decremented for that last piece of the
loop body execution (even if the SF or DF flag is set at the last instruction of the loop
body). The T flag reflects the state of GReg[0] after the end of the loop, which is an
indicator of the complete execution of the loop. If the loop exited because of an error (SF
or DF set), GReg[0] will not be 0 at the end of the loop, hence T will be cleared. If the
loop executes without fault, GReg[0] will be 0 at the end of the loop, hence T will be set.
The boundary case when a source or destination fault occurs at the last instruction of the
last loop is considered as an anticipated exit of the loop, which causes the T flag to be
cleared. If the last instruction executed before leaving the hardware loop also tries to
modify the T flag, the flag is updated according to the value of GReg[0], NOT according
to the result of the last executed instruction.
Limitations:
1. 1. Jump instructions (JMP, JMPR, JSR, JSRR, BF, BT, BSF, BDF) are not allowed
inside the hardware loop.
2. 2. GReg[0] cannot be written to inside the hardware loop (it can be read).
3. 3. The empty loop (0 instruction in the body) is forbidden.
4. 4. If GReg[0] == 0 at the start of the loop, which causes a jump to EPC, the T flag is
not updated.
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 1 0 f f n n n n n n n n
Instruction Fields:
ff - flags field:
01 - clear DF
10 - clear SF
...
Assembler:
Syntax: lsl1 r
Example: lsl1 2
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 0 0 0 1 0 1 1 1
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
Assembler:
Syntax: lsr1 r
Example: lsr1 4
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 0 0 0 1 0 1 0 1
Instruction Fields:
rrr - destination register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
i.MX 8M Mini Applications Processor Reference Manual, Rev. 3, 11/2020
1164 NXP Semiconductors
Chapter 7 Interrupts and DMA
Syntax: mov r,s
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 1 0 0 0 1 s s s
Instruction Fields:
rrr / sss - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
if (jjj&2 == 2)
HE[CCR] ← 0
if (jjj&1== 1)
HI[CCR] ← 1
else if (jjj == 4)
else
Example: notify 3
clears the HE bit for the current channel and sends an interrupt to the Host for the current
channel
CPU Flags: Unaffected
Cycles: 1
Description: Clears one of the channel enabling bits (HE or EP for the corresponding
channel number) if required, sends an interrupt to the corresponding Arm platform by
setting the appropriate flag if required (HI for the corresponding channel number).
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 j j j 0 0 0 0 0 0 0 1
101 - RESERVED
110 - RESERVED
111 - RESERVED
Assembler:
Syntax: or r,s
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 1 0 1 0 1 s s s
Instruction Fields:
rrr / sss - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
Syntax: ori r,immediate
ORs GReg[1] and the decimal value 56 and stores the result in GReg[1]
CPU Flags: unaffected
Cycles: 1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 0 1 r r r i i i i i i i i
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
00000001 - 1
...
11111110 - 254
11111111 - 255
Assembler:
Syntax: ret
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
Assembler:
Syntax: revb r
Example: revb 5
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 0 0 0 1 0 0 0 0
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
Syntax: revblo r
Example: revblo 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 0 0 0 1 0 0 0 1
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
Syntax: ror1 r
Example: ror1 3
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 0 0 0 1 0 1 0 0
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
Syntax: rorb r
Example: rorb 2
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 0 0 0 1 0 0 1 0
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
DF ← 1
else
DF ← 0
Assembler:
Syntax: st r,(b,displacement)
Example: st 7,(0,9)
stores the value from GReg[7] into memory at address obtained by adding decimal value
9 to GReg[0]
CPU Flags: DF
Cycles: 2+n where n is 0 for ROM, RAM or memory mapped registers, and n is the
number of wait-states of the peripheral for a peripheral access
Description: Adds a 5-bit 0-extended displacement to a base address in General Register
b; the result is the address of the data to store on the DM bus. The data sent on the bus
comes from the source General Register r. If an error occurs during the transfer, the flag
DF is set, else it is cleared.
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 1 1 r r r d d d d d b b b
Instruction Fields:
rrr / bbb - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
...
11111 - 31
if (transfer_error) 0
DF ← 1 0
else 0
DF ← 0
stores the 32-bit contents of GReg[3] to the Burst DMA register MD; waits until the flush
to external memory is completed
CPU Flags: DF
Cycles: 1+n where n is the number of wait-states that may be inserted by the functional
unit
Description: Sends an 8-bit address on the Functional Unit Bus (FU bus) and sends the
contents of the source General Register r on the bus. If an error occurs during the transfer,
the flag DF is set, else it is cleared.
Table 7-50. Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 0 1 r r r f f f f f f f f
See the following sections for more details of the STF instruction usage with each
functional unit:
• Burst DMA Write (stf) for Burst DMA
• Peripheral DMA Write (stf)-Write Mode for Peripheral DMA
Instruction Fields:
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
ffffffff - functional unit destination register and action (unspecified values are reserved):
00000000 - MSA in incremented mode
00001001 - MD byte
00001010 - MD halfword
00001011 - MD word
00001100 - clear MS error flag
00001111 - MS
00010000 - MSA in frozen mode
T ← (GReg[r] == 0)
Assembler:
Syntax: sub r,s
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 1 0 1 0 0 s s s
Instruction Fields:
rrr / sss - register fields:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
T ← (GReg[r] == 0)
Assembler:
Syntax: sub r,immediate
SUBtracts decimal value 255 from GReg[1] and stores the result in GReg[1]
CPU Flags: T
Cycles: 1
Description: Subtracts a 0-extended 8-bit immediate value from a General Register;
stores the result in the General Register. The flag T is set when the result of the operation
is 0; otherwise, it is cleared. The immediate value is the low-order byte of the instruction
and has a maximum value of 255 (0xFF).
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 1 0 0 r r r i i i i i i i i
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
00000001 - 1
...
11111110 - 254
11111111 - 255
Assembler:
Syntax: tst r,s
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 1 1 0 0 0 s s s
Instruction Fields:
rrr / sss - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
Syntax: tsti r,immediate
ANDs GReg[5] and decimal value 13 and sets T if the result is non-null
CPU Flags: T
Cycles: 1
Description: Performs the AND of a 0-extended 8-bit immediate value and the
destination General Register r, and sets T if the result is not 0, clears T if the result is 0.
The immediate value is the low-order byte of the instruction and has a maximum value of
255 (0xFF).
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 0 r r r i i i i i i i i
Instruction Fields:
rrr - destination register field:
000 - GReg[0]
001 - GReg[1]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
00000001 - 1
...
11111110 - 254
11111111 - 255
Assembler:
Syntax: xor r,s
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 r r r 1 0 0 1 0 s s s
Instruction Fields:
rrr / sss - register field:
000 - GReg[0]
001 - GReg[1]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
111 - GReg[7]
Assembler:
Syntax: xori r,immediate
XORs GReg[5] and decimal value 5 and stores the result in GReg[7]
CPU Flags: Unaffected
Cycles: 1
Description: Performs an eXclusive OR between a 0-extended 8-bit immediate value and
a General Register; stores the result in the General Register. The immediate value is the
low-order byte of the instruction and has a maximum value of 255 (0xFF).
Instruction Format
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 0 r r r i i i i i i i i
Instruction Fields:
rrr - register field:
000 - GReg[0]
001 - GReg[1]
010 - GReg[2]
011 - GReg[3]
100 - GReg[4]
101 - GReg[5]
110 - GReg[6]
00000001 - 1
...
11111110 - 254
11111111 - 255
stf r1, MSA|PF ; Update source address, triggers data pre-fetch in the
; background
mov R0,R0 ; Execute multiple assembly instructions, none of which
; read
mov R0,R0 ; or write data to/from MD
stf MD|SZ0|FL ; Flush FIFO without writing data. If the pre-fetch is still
; in progress when this instruction is executed, there
; could be undefined operation
A work-around to avoid any undesirable results is to first read MD to ensure the pre-fetch
is complete before the flush is attempted.
Work-Around to previous example
Data Buffer
currentBDptr
baseBDptr
CCB31
chanDesc Data Buffer
status
The previous figure shows an example how these data structures are linked to pass
command and pointers to data buffers. The SDMA's MC0PTR register holds the base
address of the Channel 0 Control Block (CCB0). The Channel 0 control block holds a
pointer to the array of buffer descriptors. The buffer descriptors are used to tell the
channel 0 (boot channel) what to do as described Buffer Descriptor Format.
The buffer descriptors form an array of programmable size. If the last buffer descriptor is
marked by the Wrap flag-bit W=1, the array of buffer descriptor is treated as a ring with
some logically continuous portion owned by the Arm platform with D=0, and the
remainder owned by the SDMA with D=1. The count field of the buffer descriptor
indicates how much data has been transmitted.
If Arm platform has prepared 3 buffers to be filled by the SDMA script, it has also
prepared 3 BD, one for each buffer. The Cont and Wrap bits are used to organize the
buffers in a circular way. For example, CONTinous bit is set to 1 in the 2 first BDs and
Wrap is set in the 3rd BD. The SDMA script opens and processes BD#1. Since
CONTinous bit is set for this BD, the SDMA will open the second BD and it will process
it. Each time a BD is processed, its Done bit is reset by the SDMA. After the 3rd BD, if
CONTinous is not set but if Wrap is set, the SDMA script stops here and the next time the
channel will be triggered, the script will open the BD pointed by the currentBDptr pointer
of the CCB and it will correspond to the first buffer descriptor.
If the CONTinous bit and Wrap bits are both set in the 3rd BD, the script will close it and
it will try to open the first BD. An error may occur at this point if the BD#1 has already
been processed and its Done bit is 0. The SDMA script cannot process a BD with a Done
bit to 0. It means the BD is not ready to be processed. To avoid this situation, the
CONTinous bit should not be set for the last BD if Wrap is set, and the Interrupt flag
must set for the last BD. It will warn the owner of the BD that all the BDs have been
processed and it has to re-set to 1 the Done bit of all the BD's if it desires the SDMA to
fill them again. Basically, if the Arm platform expects the SDMA to fill up the buffers in
a circular fashion, then it's the responsibility of the Arm platform to set the Done bit of a
buffer descriptor at an appropriate time.
AP MEM
AP BD1, BD2 & BD3
Buffer 1 CD 25
(25 bytes)
CD 50
Buffer 2
Incoming Data SDMA
(50 bytes)
IWD 25
Buffer 3
(25 bytes) Interrupt to AP
(HI)
The previous figure shows an example buffer descriptor flow. When the incoming data is
stored and fills the first buffer of 25 bytes, the SDMA script opens the second BD
because the CONTinuous bit was set. Then next incoming data is put in the second
buffer. After receiving 50 bytes, the second buffer descriptor is also closed. The Done bit
is reset and the third BD is opened. After receiving another 25 bytes, the third buffer is
full and an interrupt is sent to the Arm platform because the Interrupt flag is set in the 3rd
BD. The CONTinuous flag is not present the transfer is over. The next time the script will
be triggered, the BD to be opened will be the first buffer descriptor since the Wrap flag
was set in the 3rd BD. It is the Arm platform responsibility to set the Done bit of all the
BD if it wants to use the same buffers.
used, the count field is expressed in "long" (32-bit words), this command can be used
to download channel contexts to the context channel area in RAM.
• C0_GET_[PM-DM]: write to the buffer descriptor's data buffer the content of the
SDMA local memory from the address pointed to by the "extended buffer address"
field for the length defined by the count in the buffer descriptor. C0_GET_PM is
used to dump some part of the Program Memory (may be used to dump context of a
channel), therefore count is expressed in "shorts"; while C0_GET_DM is used to
dump to the buffer descriptor's data buffer, so the count field is in "longs."
• C0_SETCTX: load a context into the SDMA context page area. The handling script
decodes the channel number from the 5 MSB of the command field of the buffer
descriptor. Using the channel number the script computes the offset of the context
data pointer for the channel relative to the context page base to use as the destination
address in SDMA memory. Then the C0_SET_DM command explained above is
invoked to load SDMA RAM from memory. The counter indicates the size in words
of the context structure.
• Command value: (in binary) cccc c111, where ccccc is the channel number (5 bits).
For instance, 0x0F means set context for channel 1, 0xFF means set context for
channel 31.
• C0_GETCTX: write to the buffer descriptor's data buffer the content of the SDMA
context page area. The handling script decodes the channel number from the 5 MSB
of the command field of the buffer descriptor. Using this channel number, the script
computes the offset of the context data pointer for the channel relative to the context
page base to use as the source address for the copy. Then the C0_GET_DM
command explained above is invoked to copy the context to memory. The counter
indicates the size in words of the context structure.
• Command value: (in binary): cccc c011, where ccccc is the channel number (5 bits).
For instance, 0x03 means get context of channel 1, 0xFB means get context of
channel 31.
NOTE
To download channel context, C0_SETDM and
C0_SETCTXT command can be used but the second one is
easier because the channel number is embedded into the
command field, whereas with the C0_SETDM, the pointer
to the channel context area must be written into the
extended buffer address field of the buffer descriptor.
0x960 Content
Channel 10 Context Area
0xC00
Channel 1 Script
Channel 4 Script
Scripts and Data
Area
Channel 10 Script
SDMA Register
MC0PTR
Buffer Address
00100111 0 0 1 0 1 20
BD1 - SET CONTEXT CH#1 Buffer Address
Interrupt = 0,
Cont=1, Done = 1
Extended Buffer Address (Unused)
BD2 - SET CONTEXT CH#4
Interrupt = 0, 01010111 0 0 1 0 1 20
Cont=1, Done = 1
Buffer Address
BD3 - SET CONTEXT CH#10
Interrupt = 0, Extended Buffer Address (Unused)
Cont=1, Done = 1
00000100 0 0 1 0 1 10
BD4 - SET_PM
Interrupt = 0, Buffer Address
Cont=1, Done = 1
Extended Buffer Address
BD5 - SET_PM
Interrupt = 0, 00000100 0 0 1 0 1 40
Cont=1, Done = 1
Buffer Address
BD6 - SET_PM
Interrupt = 1, Extended Buffer Address
Cont=0, Done = 1
00000100 0 1 0 0 1 50
Buffer Address
AP Memory Space
Channel 4 context
(32) longs)
Context Area
Channel 10 context
(32 longs)
Scripts Area
Channel 1 script
(16 shorts)
Channel 4 script
(64 shorts)
Channel 10 script
(80 shorts)
31 30 29 16 15 14 13 0
_ _
SF RPC T PC
_
LM EPC DF SPC
NOTE
These scripts are provided as examples of how to use DMA
blocks to perform required data transfers: They are not
"official" programs.
The SDMA core only monitors data transfer status. It is assumed source and destination
address values are already present in two SDMA general registers (r1 and r2). For this
example, it is also assumed that a 32-bit word-to-move for source-to-destination address
is present in r0 and equals 64.
Data Moves in External Memory
1 stf r1,MSA // Source address setup
4 ldi r1,0x8
MAIN_XFER:
LAST_XFER:
All instructions are performed in one cycle (jumps excepted). Instruction 7 triggers a
copy transfer: A read burst access of 8-word starts, data is staged in MD and then a write
burst of 8 words is executed. Instruction 8, 9, 5, and 6 are executed while the burst access
is in progress. If this access is not complete when instruction 7 is executed a second time,
SDMA stalls on this instruction as long as the previous copy transfer is not over. In this
case, the instruction is no longer a one-cycle instruction.
During the main loop (MAIN_XFER), r1 always equals 8, so burst lengths are 8 words.
On the last ldf |CPY instruction (10), r1 equals the reminder of r0 divided by 8; therefore,
the length of bursts triggered in copy mode equal r1 value, which is between 1 and 7.
7.2.5.2.2.1 Source and Destination Target Have the Same Data Path Width
When the source and destination target have the same data path width, the following is
true:
• Source target is a half-word (16-bit) peripheral located at address 0x1002.
• Destination is a half-word (16-bit) peripheral located at address 0x2006.
It is assumed the address values are already present in two SDMA general registers (r1,
r2). The script for a transfer of 10 half-word is as follows:
Same Data Path Width for Source and Destination
//SETUP SECTION
1 stf r1, PSA|SZ16|F //r1=0x1002 Source address register setup
2 stf r2, PDA|SZ16|F //r2=0x2006 Destination address register
setup
3 bdf ERROR_ADDR_SETUP
4 ldi r0,0xa //loop counter is 10
//MAIN LOOP TRANFER
copy_loop:
5 loop 2,0
6 ldf r7,PD|CPY //Reads 1 half-word from src and writes to
dest.
7 yield
8 bdf ERROR_DURING_XFER
ERROR_ADDR_SETUP:
//correction of PSA/PDA setup and jumps to main loop transfer
ERROR_DURING_XFER:
//flag error is set,
//PS can be read to know if error occurs during read or write access.
If a data transfer must occur between two word peripherals, only the setup section should
be updated. The transfer itself is always performed by the hardware loop instruction.
All instructions are executed in one cycle (change of flow excepted). On instruction 6, a
single read access is triggered, read data is staged in PD, and a write-to-destination is
executed. When the transfers are in progress, the SDMA can execute he next instructions
in parallel. If instruction 6, which performs the copy transfer, is executed while the
previous access is not over, SDMA is stalled and instruction ldf is a multi-cycle
instruction.
7.2.5.2.2.2 Source and Destination Target Have a Different Data Path Width
When the source and destination target have a different data path width, copy mode
cannot be used, and any attempt to initiate a copy transfer immediately raises an error,
which is stored in the SF flag.
The following example shows the SDMA code that could transfer 10 words from a word
(32-bit) peripheral to a half-word peripheral whose addresses are preliminary and stored
in r1 and r2.
On instruction 1, when the source address register is programmed and a data prefetch is
required, a read access is executed. In parallel, the SDMA executes instructions 2 to 5.
On instruction 6, the SDMA tries to read data that was fetched by instruction 1. If data is
ready, the ldf will be a one cycle instruction; otherwise, the SDMA is stalled as long as
the read access is not finished. Then, the 16 LSB of the read data is stored in PD and
automatically flushed to the destination peripheral. In parallel, the SDMA executes the
rotation instructions (8, 9), and stores the 16 MSB of the read data into PD. If a previous
write access is finished, instruction 10 will be a one-cycle instruction.
The main loop transfer may appear inefficient, but due to wait states imposed to the
peripheral DMA each time an external access is performed, a software pipeline is in
place. During the time needed to flush PD, the SDMA executes the move and rotation
operations. SDMA executes instructions in parallel with DMA accesses.
On instruction 1, the source address register of the peripheral DMA is programmed and
data is fetched. This data is stored in PD and the SDMA reads PD during instruction 7,
which is a one-cycle instruction that is read-access finished. On the same instruction (7),
a data prefetch is required and a read access to the source peripheral is executed. In
parallel, the SDMA stored the previous read data into the data register of MD. When MD
(which is an eight-word FIFO) is full, a burst write access is executed to empty the FIFO.
As long as the next SDMA instructions do not access the burst DMA, they will be one-
cycle instructions. The following figures show how the peripheral DMA and burst DMA
work in parallel.
1 2 3
Clk
SDMA
ldf PD stf MD yield ldf PD stf MD yield Idf PD stf MD yield
Instruction
peripheral
data 0 data 1
DMA port
1 wait state 2 wait states
As seen in the figure above, the read access triggered by the ldf PD instruction is
symbolized by the blue bar when in progress. After wait states, the read data (data 0, data
1) is stored in PD on the clk rising edge. On edge 2, data 0 is available in PD so it can be
transferred to the SDMA general register r1, and then stored in MD FIFO. On edge 3,
data 1 is not in PD; therefore, SDMA is stalled on the ldf instruction, which lasts two
cycles. The figure below shows an example of when MD FIFO is full with data.
1 2 3
Clk
SDMA
ldf PD stf MD yield ldf PD stf MD yield Idf PD stf MD
Instruction
peripheral
data 8 data9
DMA port
8-word burst
Burst DMA
4 wait-states ack ack ack ack
port
MD
data 0 data 1 data 2 data 3
data 1 data 2 data 3 data 4
data 2 data 3 data 4 data 5
data 3 data 4 data 5 data 6
data 4 data 5 data 6 data 7
data 5 data 6 data 7 data 8
data 6 data 7 data 8
data 7 data 8
In the previous figure, the write bar means the burst DMA is performing a write burst
access. The latency to have the first write acknowledge is four cycles. SDMA is stalled
on instruction stf because no acknowledge was received, MD FIFO is full, and there is no
empty slot to store data 9. When an acknowledge is sampled by the burst DMA, FIFO is
shifted and data 8 is written. As long as there is at least one empty slot in MD FIFO, the
stf MD instruction lasts one cycle.
On instruction 1, a read burst of 8 words begins. Read data is staged into MD. On
instruction 7 (and if data is available in MD), 32 bits are copied into r1. Then instruction
8 writes them into PD and an automatic flush is executed. The SDMA core, peripheral
DMA, and burst DMA can work in parallel as long as no SDMA instruction tries to start
a new write access on the peripheral DMA while the previous access is still in progress,
or as long as there is data in MD when the SDMA tries to read it.
Since the internal memory (Arm platform RAM) is accessed via the peripheral DMA and
the external memory is accessed via the burst DMA, the SDMA scripts that are described
in Transfer Between Peripheral and External Memory can be reused. The exception is
that the peripheral DMA address registers (PSA or PDA, depending on the script) should
be programmed in incremented mode rather than frozen mode.
The Arm platform controls the SDMA by means of several interface registers. Those
registers are described in the current section.
All registers are clocked with the SDMA clock (which means the Arm platform must
ensure that the SDMA clock is running when it wants to access any register).
SDMAARM memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
7.2.6.1/
302B_0000 Arm platform Channel 0 Pointer (SDMAARM3_MC0PTR) 32 R/W 0000_0000h
1215
7.2.6.2/
302B_0004 Channel Interrupts (SDMAARM3_INTR) 32 w1c 0000_0000h
1215
7.2.6.3/
302B_0008 Channel Stop/Channel Status (SDMAARM3_STOP_STAT) 32 w1c 0000_0000h
1215
7.2.6.4/
302B_000C Channel Start (SDMAARM3_HSTART) 32 R/W 0000_0000h
1216
7.2.6.5/
302B_0010 Channel Event Override (SDMAARM3_EVTOVR) 32 R/W 0000_0000h
1216
7.2.6.6/
302B_0014 Channel BP Override (SDMAARM3_DSPOVR) 32 R/W FFFF_FFFFh
1217
7.2.6.7/
302B_0018 Channel Arm platform Override (SDMAARM3_HOSTOVR) 32 R/W 0000_0000h
1217
7.2.6.8/
302B_001C Channel Event Pending (SDMAARM3_EVTPEND) 32 w1c 0000_0000h
1217
7.2.6.9/
302B_0024 Reset Register (SDMAARM3_RESET) 32 R 0000_0000h
1218
7.2.6.10/
302B_0028 DMA Request Error Register (SDMAARM3_EVTERR) 32 R 0000_0000h
1219
Channel Arm platform Interrupt Mask 7.2.6.11/
302B_002C 32 R/W 0000_0000h
(SDMAARM3_INTRMASK) 1219
7.2.6.12/
302B_0030 Schedule Status (SDMAARM3_PSW) 32 R 0000_0000h
1220
7.2.6.13/
302B_0034 DMA Request Error Register (SDMAARM3_EVTERRDBG) 32 R 0000_0000h
1220
7.2.6.14/
302B_0038 Configuration Register (SDMAARM3_CONFIG) 32 R/W 0000_0003h
1221
7.2.6.15/
302B_003C SDMA LOCK (SDMAARM3_SDMA_LOCK) 32 R/W 0000_0000h
1222
7.2.6.16/
302B_0040 OnCE Enable (SDMAARM3_ONCE_ENB) 32 R/W 0000_0000h
1223
Table continues on the next page...
R HI[31:0]
W w1c
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R HE
W w1c
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R HSTART_HE
W w1c
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 - Reserved
1 - Reset value.
R EP
W w1c
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RESCHED
RESET
R 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R CHNERR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 No running channel
1 Active channel priority
12–8 The Next Channel Register indicates the number of the next scheduled pending channel with the highest
NCR[4:0] priority.
7–4 The Current Channel Priority indicates the priority of the current active channel. When the priority is 0, no
CCP[2:0] channel is running: The SDMA is idle and the CCR value has no meaning. In the case that the SDMA has
finished running the channel and has entered sleep state, CCP will indicate the priority of previous running
channel.
0 No running channel
1 Active channel priority
CCR[4:0] The Current Channel Register indicates the number of the channel that is being executed by the SDMA.
SDMA. In the case that the SDMA has finished running the channel and has entered sleep state, CCR will
indicate the previous running channel.
R CHNERR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0 0 0
DSPDMA
RTDOBS
ACR CSM
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
R 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SRESET_LOCK_
R 0
LOCK
CLR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 LOCK disengaged.
1 LOCK enabled.
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0 ENB
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The value of ENB cannot be changed if the LOCK bit in the SDMA_LOCK register is set.
R 0
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Program
1 Data
2 Change of Flow
3 Change of Flow in Loop
4 Debug
5 Functional Unit
6 Sleep
7 Save
8 Program in Sleep
9 Data in Sleep
10 Change of Flow in Sleep
11 Change Flow in Loop in Sleep
12 Debug in Sleep
13 Functional Unit in Sleep
14 Sleep after Reset
15 Restore
11 After each write access to the real time buffer (RTB), the RCV bit is set. This bit is cleared after execution
RCV of an rbuffer command and on a JTAG reset.
10 This flag is raised when the SDMA has entered debug mode after an external debug request.
EDR
9 This flag is raised when the SDMA has entered debug mode after a OnCE debug request.
ODR
8 This flag is raised when the SDMA has entered debug mode after a software breakpoint.
SWB
7 This flag is raised when the OnCE is controlled from the Arm platform peripheral interface.
MST
0 The JTAG interface controls the OnCE.
1 The Arm platform peripheral interface controls the OnCE.
6–3 This read-only field is reserved and always has the value 0.
Reserved
ECDR Event Cell Debug Request. If the debug request comes from the event cell, the reason for entering debug
mode is given by the EDR bits. If all three bits of the EDR are reset, then it did not generate any debug
request. If the cell did generate a debug request, then at least one of the EDR bits is set (the meaning of
the encoding is given below). The encoding of the EDR bits is useful to find out more precisely why the
debug request was generated. A debug request from an event cell is generated for a specific combination
of the addra_cond, addrb_cond, and data_cond conditions. The value of those fields is given by the EDR
bits.
Table continues on the next page...
0 rstatus
1 dmov
2 exec_once
3 run_core
4 exec_core
5 debug_rqst
6 rbuffer
R 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0
SMSZ
CHN0ADDR
W
Reset 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0
R EVENTS
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R 0 EVENTS[47:32]
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R 0 0
CNF3
CNF2
NUM3[5:0] NUM2[5:0]
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0 0
CNF1
CNF0
NUM1[5:0] NUM0[5:0]
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 channel
1 DMA request
29–24 Contains the number of the DMA request or channel that triggers the pulse on the cross-trigger event line
NUM3[5:0] number i.
23 This read-only field is reserved and always has the value 0.
Reserved
22 Configuration of the SDMA event line number i that is connected to the cross-trigger. It determines
CNF2 whether the event line pulse is generated by receiving a DMA request or by starting a channel script
execution.
0 channel
1 DMA request
21–16 Contains the number of the DMA request or channel that triggers the pulse on the cross-trigger event line
NUM2[5:0] number i.
15 This read-only field is reserved and always has the value 0.
Reserved
14 Configuration of the SDMA event line number i that is connected to the cross-trigger. It determines
CNF1 whether the event line pulse is generated by receiving a DMA request or by starting a channel script
execution.
Table continues on the next page...
0 channel
1 DMA request
NUM0[5:0] Contains the number of the DMA request or channel that triggers the pulse on the cross-trigger event line
number i.
R 0 0
CNF7
CNF6
NUM7[5:0] NUM6[5:0]
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0 0
CNF5
CNF4
NUM5[5:0] NUM4[5:0]
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 channel
1 DMA request
0 channel
1 DMA request
21–16 Contains the number of the DMA request or channel that triggers the pulse on the cross-trigger event line
NUM6[5:0] number i.
15 This read-only field is reserved and always has the value 0.
Reserved
14 Configuration of the SDMA event line number i that is connected to the cross-trigger. It determines
CNF5 whether the event line pulse is generated by receiving a DMA request or by starting a channel script
execution
0 channel
1 DMA request
13–8 Contains the number of the DMA request or channel that triggers the pulse on the cross-trigger event line
NUM5[5:0] number i.
7 This read-only field is reserved and always has the value 0.
Reserved
6 Configuration of the SDMA event line number i that is connected to the cross-trigger. It determines
CNF4 whether the event line pulse is generated by receiving a DMA request or by starting a channel script
execution.
0 channel
1 DMA request
NUM4[5:0] Contains the number of the DMA request or channel that triggers the pulse on the cross-trigger event line
number i.
Address: Base address + 100h offset + (4d × i), where i=0d to 31d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0 CHNPRIn
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DONE_SEL2
SW_DONE_
SW_DONE_
R 0 0
DIS3
DIS2
CH_SEL3 CH_SEL2
W
Reset 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DONE_SEL1
DONE_SEL0
SW_DONE_
SW_DONE_
R 0 0
DIS1
DIS0
CH_SEL1 CH_SEL0
W
Reset 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1
DONE_SEL6
SW_DONE_
SW_DONE_
R 0 0
DIS7
DIS6
CH_SEL7 CH_SEL6
W
Reset 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DONE_SEL5
DONE_SEL4
SW_DONE_
SW_DONE_
R 0 0
DIS5
DIS4
CH_SEL5 CH_SEL4
W
Reset 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1
The following section describes SDMA control registers available to the BP.
NOTE
These registers are physically implemented in all platforms, but
are not accessible when the SDMA BP control port is not
connected. Reset values are calculated to allow the system to
work when those registers cannot be accessed.
All registers are clocked with the SDMA clock (which means the SDMA clock must be
running when the BP wants to access any register).
R DI
W w1c
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R DE
W w1c
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R DSTART_DE
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R CHNERR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R CHNERR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The actual SDMA memory mapped registers are summarized in the following sections;
for peripherals' memory maps, refer to the respective chapters.
The following definitions serve as a key for the SDMA internal register summary.
SDMACORE memory map
Absolute
Width Section/
address Register name Access Reset value
(in bits) page
(hex)
7.2.8.1/
302B_0000 Arm platform Channel 0 Pointer (SDMACORE3_MC0PTR) 32 R 0000_0000h
1244
7.2.8.2/
302B_0008 Current Channel Pointer (SDMACORE3_CCPTR) 32 R 0000_0000h
1244
7.2.8.3/
302B_000C Current Channel Register (SDMACORE3_CCR) 32 R 0000_0000h
1245
7.2.8.4/
302B_0010 Highest Pending Channel Register (SDMACORE3_NCR) 32 R 0000_0000h
1245
7.2.8.5/
302B_0014 External DMA Requests Mirror (SDMACORE3_EVENTS) 32 R 0000_0000h
1246
7.2.8.6/
302B_0018 Current Channel Priority (SDMACORE3_CCPRI) 32 R 0000_0000h
1247
7.2.8.7/
302B_001C Next Channel Priority (SDMACORE3_NCPRI) 32 R 0000_0000h
1247
7.2.8.8/
302B_0020 OnCE Event Cell Counter (SDMACORE3_ECOUNT) 32 R/W 0000_0000h
1248
7.2.8.9/
302B_0024 OnCE Event Cell Control Register (SDMACORE3_ECTL) 32 R/W 0000_0000h
1248
7.2.8.10/
302B_0028 OnCE Event Address Register A (SDMACORE3_EAA) 32 R/W 0000_0000h
1250
7.2.8.11/
302B_002C OnCE Event Cell Address Register B (SDMACORE3_EAB) 32 R/W 0000_0000h
1250
7.2.8.12/
302B_0030 OnCE Event Cell Address Mask (SDMACORE3_EAM) 32 R/W 0000_0000h
1250
7.2.8.13/
302B_0034 OnCE Event Cell Data Register (SDMACORE3_ED) 32 R/W 0000_0000h
1251
7.2.8.14/
302B_0038 OnCE Event Cell Data Mask (SDMACORE3_EDM) 32 R/W 0000_0000h
1251
7.2.8.15/
302B_003C OnCE Real-Time Buffer (SDMACORE3_RTB) 32 R/W 0000_0000h
1252
7.2.8.16/
302B_0040 OnCE Trace Buffer (SDMACORE3_TB) 32 R 0000_0000h
1252
Table continues on the next page...
R MC0PTR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R 0 CCPTR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R 0 CCR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R 0 NCR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE
This register is very useful in the case of DMA requests that are
active when a peripheral FIFO level is above the programmed
watermark. The activation of the DMA request (rising edge) is
detected by the SDMA logic and it can enable one or several
channels. One of the channels accesses the peripheral and reads
or writes a number of data that matches the watermark level
(for example, if the watermark is four words, the channel reads
or writes four words).
If the channel is effectively executed long after the DMA
request was received, reading or writing the watermark number
of data may not be sufficient to reset the DMA request (for
example, if the FIFO watermark is four and at the channel
execution it already contains nine pieces of data). This means
no new rising edge may be detected by the SDMA, although
there still remains transfers to perform. Therefore, if the
channel were terminated at that time, it would not be restarted,
causing potential overrun or underrun of the peripheral.
The proposed mechanism is for the channel to check this
register after it has performed the "watermark" number of
accesses to the peripheral. If the bit for the DMA request that
triggers this channel is set, it means there is still another
watermark number of data to transfer. This goes on until the bit
is cleared. The same script can be used for multiple channels
that require this behavior. The script can determine its channel
number from the CCR register and infer the corresponding
DMA request bit to check. It needs a reference table that is
coherent with the request-channel matrix that the Arm platform
programmed.
Address: Base address + 14h offset
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R EVENTS
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R 0 CCPRI
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 no running channel
R 0 NCPRI
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R 0 EN CNT ECTC[1:0] DTC[1:0] ATC[1:0] ABTC[1:0] AATC[1:0] ATS[1:0]
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Cell is disabled.
1 Cell is enabled.
12 Event Counter Enable. The event counter enable bit determines if the cell counter is used during the event
CNT detection. In order to use the event counter during an event detection process, the event cell counter
register should be loaded with a value equal to the number of times minus one that an event occurs before
a debug request is sent. After every event detection, the counter is decreased. When the counter reaches
Table continues on the next page...
0 Counter is disabled.
1 Counter is enabled.
11–10 The event cell trigger condition bits select the combination of address and data matching conditions that
ECTC[1:0] generate the final address/data condition. During program execution, if this event cell trigger condition
goes to 1, a debug request is sent to the SDMA. The EN bit must be set to enable the debug request
generation.
00 address ONLY
01 data ONLY
10 address AND data
11 address OR data
9–8 The data trigger condition bits define when data is considered matching after comparison with the data
DTC[1:0] register of the event detection unit. The operations are performed on unsigned values.
00 equal
01 not equal
10 greater than
11 less than
7–6 The address trigger condition bits select how the two address conditions (addressA and addressB) are
ATC[1:0] combined to define the global address matching condition. The supported combinations are described, as
follows.
00 addressA ONLY
01 addrA AND addrB
10 addrA OR addrB
11 reserved
5–4 The Address B Trigger Condition (ABTC) controls the operations performed by address comparator B. All
ABTC[1:0] operations are performed on unsigned values. This comparator B outputs the addressB condition.
00 equal
01 not equal
10 greater than
11 less than
3–2 The Address A Trigger Condition (AATC) controls the operations performed by address comparator A. All
AATC[1:0] operations are performed on unsigned values. This comparator A outputs the addressA condition.
00 equal
01 not equal
10 greater than
11 less than
ATS[1:0] The access type select bits define the memory access type required on the SDMA memory bus.
00 read ONLY
01 write ONLY
10 read or write
11 -
NOTE: There is a common address mask value for both address comparators. If bit i of this register is
set, then bit i of the address value latched from the memory bus does not influence the result of
the address comparison. The register is cleared on a JTAG reset.
R 0 TBF TADDR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R TADDR CHFADDR
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Invalid information
1 Valid information
27–14 The target address is the address taken after the execution of the change of flow instruction.
TADDR
CHFADDR The change of flow address is the address where the change of flow is taken when executing a change of
flow instruction.
R 0
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 Program
1 Data
2 Change of Flow
3 Change of Flow in Loop
4 Debug
5 Functional Unit
6 Sleep
7 Save
8 Program in Sleep
9 Data in Sleep
10 Change of Flow in Sleep
11 Change Flow Loop Sleep
12 Debug in Sleep
13 Functional Unit in Sleep
Table continues on the next page...
R 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SMSZ
R 0 CHN0ADDR[13:0]
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
APEND
R 0 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
R 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
LOCK
R 0
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R 0 EVENTS
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8.1.1 Overview
The chip contains a limited number of pins, most of which have multiple signal options.
These signal-to-pin and pin-to-signal options are selected by the input-output multiplexer
called IOMUX. The IOMUX is also used to configure other pin characteristics, such as
voltage level, drive strength, and hysteresis.
The muxing options table lists the external signals grouped by the module instance, the
muxing options for each signal, and the registers used to route the signal to the chosen
pad.
8.2.1 Overview
The IOMUX Controller (IOMUXC), together with the IOMUX, enables the IC to share
one pad to several functional blocks. This sharing is done by multiplexing the pad's input
and output signals.
Every module requires a specific pad setting (such as pull up or keeper), and for each
pad, there are up to 8 muxing options (called ALT modes). The pad settings parameters
are controlled by the IOMUXC.
The IOMUX consists only of combinatorial logic combined from several basic IOMUX
cells. Each basic IOMUX cell handles only one pad signal's muxing.
i.MX 8M Mini Applications Processor Reference Manual, Rev. 3, 11/2020
NXP Semiconductors 1275
IOMUX Controller (IOMUXC)
PAD Settings
PAD Settings
Registers
MUX Control
Registers
IOMUXC
. .
IOMUX IO Pad
Cells
. Cells
.
. .
IPMUX
HW
signal
moduleY
CFG
AIPS Reg
moduleX IOMUX IORING
8.2.1.1 Features
The IOMUXC features are:
• 32-bit software mux control registers (IOMUXC_SW_MUX_CTL_PAD_<PAD
NAME> or IOMUXC_SW_MUX_CTL_GRP_<GROUP NAME>) to configure 1 of
8 alternate (ALT) MUX_MODE feilds of each pad or a predefined group of pads and
to enable the forcing of an input path of the pad(s) (SION bit).
• 32-bit software pad control registers
(IOMUXC_SW_PAD_CTL_PAD_<PAD_NAME> or
IOMUXC_SW_PAD_CTL_GRP_<GROUP NAME>) to configure specific pad
settings of each pad, or a predefined group of pads.
• 32-bit general purpose registers - several (GPR0 to GPRn) 32-bit registers according
to SoC requirements for any usage.
• 32-bit input select control registers to control the input path to a module when more
than one pad drives this module input.
Each SW MUX/PAD CTL IOMUXC register handles only one pad or one pad's group.
Only the minimum number of registers required by software are implemented by
hardware. For example, if only ALT0 and ALT1 modes are used on Pad x then only one
bit register will be generated as the MUX_MODE control field in the software mux
control register of Pad x.
The software mux control registers may allow the forcing of pads to become input (input
path enabled) regardless of the functional direction driven. This may be useful for
loopback and GPIO data capture.
8.2.2 Clocks
The table found here describes the clock sources for IOMUXC.
Please see Clock Controller Module (CCM) for clock setting, configuration and gating
information.
Table 8-2. IOMUXC Clocks
Clock name Clock Root Description
ipg_clk_s ipg_clk_root Peripheral access clock
The IOMUX consists of a number (about the number of pads in the SoC) of basic
iomux_cell units. If only one functional mode is required for a specific pad, there is no
need for IOMUX and the signals can be connected directly from the module to the I/O.
The IOMUX cell is required whenever two or more functional modes are required for a
specific pad or when one functional mode and the one test mode are required.
The basic iomux_cell design, which allows two levels of HW signal control (in ALT6
and ALT7 modes - ALT7 gets highest priority) is shown in Figure 8-2.
IOMUXC_SW_MUX_CTRL_<PAD>[MUX_MODE]
SW_PAD_CTL
ALT0
ALT1
: PAD0
ALTn
ALT0
ALT1
<SOURCE>_SELECT_INPUT :
ALTn
Peripheral1 DATA_IN IOMUXC_SW_MUX_CTRL_<PAD>[MUX_MODE]
SW_PAD_CTL
ALT0
ALT1
:
PAD1
ALTn
ALT0
ALT1
:
ALTn
8.2.3.4 Daisy chain - multi pads driving same module input pin
In some cases, more than one pad may drive a single module input pin. Such cases
require the addition of one more level of IOMUXing; all of these input signals are
muxed, and a dedicated software controlled register controls the mux in order to select
the required input path.
A module port involved in "daisy chain" requires two software configuration commands,
one for selecting the mode for this pad (programable via the
IOMUXC_SW_MUX_CTL_<PAD> registers) and one for defining it as the input path
(via the daisy chain registers).
This means that a module port involved in "daisy chain" requires two software
configuration commands, one for selecting the mode for this pad (programable via the
IOMUXC_SW_MUX_CTL_<PAD> registers) and one for defining it as the input path
(via the daisy chain registers). The daisy chain is illustrated in the figure below.
IOMUX IORING
IOMUX Cells
To module D
To module F
A
To module X
ALT x select
To module G
To module X
Module X B
To module H
ALT x select
Daisy Chain
To module X
select
To module M
C
To module N
ALT x select
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
GPR_TZASC1_SECURE_
R
BOOT_LOCK
Reserved
Reserved
GPR_DBG_ACK Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPR_ENET1_TX_CLK_
R
GPR_IRQ
Reserved
Reserved
SEL
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
GPR_GPT6_EXT_CLK_
R
SEL
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPR_SAI6_EXT_MCLK_
GPR_SAI5_EXT_MCLK_
GPR_SAI3_EXT_MCLK_
GPR_SAI2_EXT_MCLK_
GPR_SAI1_EXT_MCLK_
GPR_GPT5_EXT_CLK_
GPR_GPT4_EXT_CLK_
R
Reserved
SEL
SEL
EN
EN
EN
EN
EN
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
ocram_ctrl_s_write_addr_pipeline_en_pndg
ocram_ctrl_s_write_data_pipeline_en_pndg
ocram_ctrl_s_read_addr_pipeline_en_pndg
ocram_ctrl_write_addr_pipeline_en_pndg
ocram_ctrl_write_data_pipeline_en_pndg
ocram_ctrl_read_addr_pipeline_en_pndg
ocram_ctrl_s_read_data_wait_en_pndg
ocram_ctrl_read_data_wait_en_pndg
R
Reserved
Reset 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0*
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OCRAM_CTRL_S_WRITE_ADDR_PIPELINE_EN
OCRAM_CTRL_S_WRITE_DATA_PIPELINE_EN
OCRAM_CTRL_S_READ_ADDR_PIPELINE_EN
OCRAM_CTRL_WRITE_ADDR_PIPELINE_EN
OCRAM_CTRL_WRITE_DATA_PIPELINE_EN
OCRAM_CTRL_READ_ADDR_PIPELINE_EN
R
OCRAM_CTRL_S_READ_DATA_WAIT_EN
OCRAM_CTRL_READ_DATA_WAIT_EN
Reserved
Reset 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0*
* Notes:
• For reset:
[31:16] - N/A
[15:0] - 16'b0000000011111111
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SDMA2_IPG_STOP_ACK
SDMA3_IPG_STOP_ACK
SDMA1_IPG_STOP_ACK
ENET1_IPG_STOP_ACK
PDM_IPG_STOP_ACK
SAI6_IPG_STOP_ACK
SAI5_IPG_STOP_ACK
SAI3_IPG_STOP_ACK
SAI2_IPG_STOP_ACK
SAI1_IPG_STOP_ACK
R
Reserved
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPR_SDMA3_IPG_STOP
GPR_SDMA2_IPG_STOP
GPR_SDMA1_IPG_STOP
GPR_ENET1_IPG_STOP
Reserved
Reserved
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
GPR_WDOG3_
R
MASK
RESERVED Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPR_WDOG2_
GPR_WDOG1_
R
MASK
MASK
Reserved Reserved
W
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
GPR_SAI2_MCLK_
GPR_SAI2_SEL1
R OUT_SEL
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPR_SAI1_MCLK_
GPR_SAI1_SEL1
R
OUT_SEL
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
5'd0 SAI1_CLK_ROOT
5'd1 SAI2_CLK_ROOT
5'd2 SAI3_CLK_ROOT
5'd3 Reserved
5'd4 SAI5_CLK_ROOT
5'd5 SAI6_CLK_ROOT
5'd6 SAI1.MCLK
5'd7 SAI2.MCLK
5'd8 SAI3.MCLK
5'd9 Reserved
5'd10 SAI5.MCLK
5'd11 SAI6.MCLK
5'd12 SPDIF1_CLK_ROOT
5'd13 Reserved
5'd14 SPDIF1.EXTCLK
5'd15 SPDIF1.SRCCLK
5'd16 SPDIF1.OUTCLK
5'd17 Reserved
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
Reserved
Reserved
Reserved Reserved Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPR_SAI3_MCLK_OUT_
GPR_SAI3_SEL1
R
SEL
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
GPR_SAI6_MCLK_
GPR_SAI6_SEL1
R
OUT_SEL
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPR_SAI5_MCLK_
GPR_SAI5_SEL1
R
OUT_SEL
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NOTE
Set GPR10[1] to 1 when TZASC_EN is enabled.
Address: 3034_0000h base + 28h offset = 3034_0028h
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LOCK_GPR_EXC_ERR_
LOCK_GPR_SEC_ERR_
LOCK_GPR_TZASC_EN
R
RESP_EN
RESP_EN
Reserved
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPR_EXC_ERR_RESP_
GPR_SEC_ERR_RESP_
GPR_TZASC_EN
R
EN
EN
Reserved
W 1
Reset 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 Do not use the TZASC module. All transactions are routed around the TZASC block.
1 Enable the TZASC module. All transactions are processed by this block as per the TZASC TRM
describes.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
OCRAM_TZ_SECURE_REGION0
OCRAM_TZ_SECURE_REGION0
LOCK_GPR_OCRAM_CTRL_S_
LOCK_GPR_OCRAM_CTRL_
R
LOCK_GPR_
OCRAM_CTRL_S_ LOCK_GPR_OCRAM_CTRL_
Reserved Reserved
OCRAM_TZ_ OCRAM_TZ_SECURE_REGION1
SECURE_REGION1
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPR_OCRAM_CTRL_S_OCRAM_
GPR_OCRAM_CTRL_OCRAM_
TZ_SECURE_REGION0
TZ_SECURE_REGION0
R
GPR_OCRAM_
CTRL_S_OCRAM_ GPR_OCRAM_CTRL_OCRAM_
Reserved Reserved
TZ_SECURE_ TZ_SECURE_REGION1
REGION1
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
GPR_PCIE1_CTRL_
DIAG_CTRL_BUS
R
Reserved
GPR_PCIE1_CTRL_DIAG_
Reserved
STATUS_BUS_SELECT
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPR_PCIE1_CTRL_
Reserved
DEVICE_TYPE
Reset 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reserved
Reserved
Reserved
Reset 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0*
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GPR_AWCACHE_USDHC
GPR_AWCACHE_PCIE1_
GPR_ARCACHE_USDHC
GPR_ARCACHE_PCIE1_
GPR_AWCACHE_PCIE1
GPR_ARCACHE_PCIE1
GPR_AWCACHE_USB2
GPR_AWCACHE_USB1
GPR_ARCACHE_USB2
GPR_ARCACHE_USB1
R
Reserved
Reserved
Reserved
Reserved
EN
EN
Reserved
Reset 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0*
* Notes:
• For reset:
[31:19] - N/A
[18:0] - 19'b0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
FUNC_I_POWER_OFF
FUNC_I_CMN_RSTN
GPR_PCIE1_PHY_
GPR_PCIE1_PHY_
GPR_PCIE1_PHY_
GPR_PCIE1_PHY_
FUNC_I_AUX_EN
FUNC_I_SSC_EN
R
GPR_
PCIE1_PHY_
Reserved FUNC_I_ Reserved
PLL_REF_
W
CLK_SEL
Reset 0 1 0 0 1 0 1 1 0 1 0 0 1 0 0 1
Bit 15 14 13 12 11 10 9
AUX_EN_OVERRIDE_EN 8 7 6 5 4 3 2 1 0
GPR_PCIE1_APP_CLK_
GPR_PCIE1_CLKREQ_
GPR_PCIE1_CLKREQ_
GPR_PCIE1_PHY_I_
B_OVERRIDE_EN
R
B_OVERRIDE
Reserved
PM_EN
Reset 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved Reserved Reserved Reserved Reserved
Reset 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reset 0 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reserved
Reserved
Reserved
Reserved
Reset 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved Reserved Reserved Reserved Reserved
Reset 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R PCIE_DIAG_STATUS
W
Reset 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0*
* Notes:
• For reset:
[31:0] - N/A
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reserved
Reserved Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CPU_ CPU_
R STANDBYWF STANDBYWF
Reserved E I Reserved
Reset 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0* 0*
* Notes:
• For reset:
[31:16] - N/A
[15:0] - 16'b0
Reserved.
Address: 3034_0000h base + 5Ch offset + (4d × i), where i=0d to 24d
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
-
Reset x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x* x*
* Notes:
• x = Undefined at reset.
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved SION Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved SION Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved SION Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved SION Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
R
W
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
W
Reserved SION Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
Bit 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Reserved
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved SION MUX_MODE
Reset 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1