TegraK1 TRM DP06905001 Public v03p
TegraK1 TRM DP06905001 Public v03p
TegraK1 TRM DP06905001 Public v03p
Abstract
The Technical Reference Manual focuses on the logical organization and control of Tegra K1 mobile processors. It
provides information for those modules that interface to external devices, or those that control fundamental chip
operations. The modules detailed in this document provide an overview, any necessary programming guidelines, and
a register listing for that module. Internal functional units such as video and graphics hardware acceleration are
controlled by NVIDIA provided software and not documented here.
Revision History
Version Date Description
v01p MAR 20, 2014 Public release to support Open Source Development. This document is a work in progress. There will be follow-up
releases as new information is made available.
v02p JUL 15, 2014 • Revised DSI and eDP maximum resolution to 3200x2000.
• I2C Controller: Revised encoding for BC_TERMINATE field.
• USB Complex: Revised maximum packet size supported on any endpoint to 1024 bytes. Clarified encoding
of MEM_ALIGNMENT_MUX_EN fields.
Table of Contents
1.0 Introduction ....................................................................................................................................................... 11
1.1 The Role of the Technical Reference Manual .............................................................................................. 11
1.2 Block Diagram .............................................................................................................................................. 12
1.3 Memory Controller and Internal Bus Architecture ........................................................................................ 13
1.4 Reading Register Tables .............................................................................................................................. 14
1.5 Glossary........................................................................................................................................................ 15
2.0 Address Map..................................................................................................................................................... 19
2.1 System Address Map ................................................................................................................................... 19
2.2 Available DRAM Address Ranges ................................................................................................................ 25
3.0 Interrupt Controller ............................................................................................................................................ 29
3.1 References ................................................................................................................................................... 29
3.2 Interrupt Mapping.......................................................................................................................................... 29
3.3 Hierarchical Groups ...................................................................................................................................... 34
3.4 Functional Description .................................................................................................................................. 34
3.5 Interrupt Registers ........................................................................................................................................ 43
4.0 Semaphores ..................................................................................................................................................... 51
4.1 Arbitration Semaphores ................................................................................................................................ 51
4.2 Semaphore Registers ................................................................................................................................... 52
5.0 Clock and Reset Controller ............................................................................................................................... 55
5.1 Hardware Features ....................................................................................................................................... 55
5.2 Clocking Architecture .................................................................................................................................... 56
5.3 PLLs .............................................................................................................................................................. 72
5.4 Reset Architecture ........................................................................................................................................ 75
5.5 Power Gating and Ungating ......................................................................................................................... 75
5.6 Software Features and Programming Model ................................................................................................ 77
5.7 Clock and Reset Controller Registers .......................................................................................................... 92
6.0 CL-DVFS ........................................................................................................................................................ 247
6.1 CL-DVFS Registers .................................................................................................................................... 247
7.0 Timers ............................................................................................................................................................. 253
7.1 ARM CPU Generic Timers (GITs) .............................................................................................................. 253
7.2 Generic Timer System Counter (TSC) ....................................................................................................... 253
7.3 NVIDIA Timers (TMR) ................................................................................................................................ 254
7.4 Watchdog Timers (WDTs) .......................................................................................................................... 255
7.5 Secure TMRs and Secure WDTs ............................................................................................................... 255
7.6 Legacy Watchdog Timer ............................................................................................................................. 256
7.7 Watchdog Timer Programming Guide ........................................................................................................ 257
1.0 INTRODUCTION
® ®
The NVIDIA Tegra K1 mobile processor is a complete applications and digital media system built around several powerful
hardware elements:
® ®
Graphics: NVIDIA GeForce Kepler Graphics Processing Unit (GPU). The GPU fully supports DX11, Shader Model
4, and OpenGL4.3 as well as OpenGL ES 3.0. It supports Unified shaders and is GPU compute capable with 192
CUDA cores. The GPU supports all the same features as discrete NVIDIA GPUs, including PhysX, CUDA, OpenCL,
and DX compute. It is highly power optimized for best performance in mobile use cases.
® ®
CPU Complex: Quad Cortex -A15 Symmetric Multi-Processing ARM Cores in a 4-PLUS-1™ configuration with a
quad-core fast CPU complex and a fifth Battery Saver Core. The Cortex-A15 core features triple instruction issue and
both out-of-order and speculative execution. It has full cache coherency support for the quad symmetric processors.
All processors have 32 KB Instruction and 32 KB Data Level 1 caches; and there is a 2 MB shared Level 2 cache for
the quad-core complex and a 512 KB Level 2 cache for the fifth core. The NVIDIA 4-PLUS-1 architecture uses the
fifth Battery Saver Core, which operates exclusively with the main CPU complex, for very low-power, low-leakage
operation at the light CPU loads common to multimedia and lightly loaded use situations.
Memory Controller: 64-bit DRAM interface providing high bandwidth. LP-DDR3 and DDR3L DRAM types are
supported.
Audio/Video Decoder: the Audio-Video Processor (AVP) subsystem includes dedicated audio and video decode
hardware acceleration, an ARM7 processor, and embedded RAM. This subsystem provides full motion playback of
up to 1440P high-definition video and supports H.264 BP/MP/HP/MVC, VC-1, VP8, MPEG-2 and MPEG-4 video
standards and multiple audio standards with dedicated hardware.
Video Encoder: A high performance H.264 capable hardware video encoder. This processor supports H.264
BP/MP/HP/MVC and VP8 encoding.
Imaging: A high-quality hardware accelerated still-image and video capture path, with dual next-generation ISP3s.
Display: Dual display controllers with MIPI-DSI output, along with LVDS or eDP support for LCD panels and HDMI
output for external display devices. Multiple line pixel storage allows more memory-efficient scaling operations and
pixel fetching. Hardware display surface rotation is also provided for bandwidth reduction.
In addition to these major elements, Tegra K1 mobile processors have a broad range of peripheral interfaces to enable
communication with wireless baseband, other communications peripherals, audio codecs, power management, and mass
storage. When combined with baseband and PMIC chips, the Tegra K1 mobile processor provides the functionality needed to
build a range of low-power devices. Dedicated high-performance mass storage controllers, with their own DMA engines, free
the CPU Complex from routine data management tasks.
It may also describe hardware functions not currently supported by NVIDIA drivers; thus the description of a capability in this
document does not necessarily imply software support for that function.
NEON
NEON
NEON
NEON
Cortex-A15 Cortex-A15 Cortex-A15 Cortex-A15 Cortex-A15 DFD Interrupt
D$ I$ D$ I$ D$ I$ D$ I$ D$ I$ (CS,OBS, 32-bit Controller
controller
32K 32K 32K 32K 32K 32K 32K 32K iLA,DDS) IRAM-B
32K 32K I2S
64 KB Timer,
COP GPIO
X4
X6
UCQ
FE, PD, PE, RAST, SM, ROP 32-bit DTV Serial TS
BSEA SE
VDE
Video AHB (Security AHB APB Fuses
HUB, L2, LTCX
Decoder Data Engine) DMA DMA
Bridge Thermal sensor
64KB Secure
Memory
DVC
Configuration
Registers Control registers of
PPCS mccif AHB
AHB
Multi-Master
Multi-master
BusBus
(32-bit)
(32-bit)
(incl(includes
udes Mux, Decode
Mux, r, Arbi
Decoder, terand
Arbiter andAHB
A HBSLV MEM)
SLV MEM) multiple blocks here
USB2 OTG USB2 Host/
PHY device
Memory Interface
256-bit
EMC2
256-bit crossbar
MIPI CSI SD/MMC
USB3 HD Controller
1x32/ SATA MIPI MIPI eDP/
2 ports Audio HDMI
1x64 x4 x4 x1 To USB2 DSI DSI LVDS
DDR3 / PHYs X4
Serial
LP-DDR2
camera sensor Serial Serial HDMI
Port Mux x5 Display Display 1-4 lane eDP 1.4 or SD/SDIO/
x4 x4 1 x single LVDS MMC bus
1. Memory controller clients: The memory controller directly arbitrates between these using a complex algorithm
optimizing DRAM efficiency. The highest bandwidth clients all fall into this class, and they communicate directly with
the memory controller using a proprietary high-speed bus.
2. AHB devices: These generally have a built-in DMA engine, and share a single memory client using the AHB bus
protocol.
3. APB devices: All APB devices are slaves, and are serviced by a shared multi-channel APB DMA controller which is
also an APB device.
Special provisions are made for the CPU to bypass parts of the memory controller arbitration to help achieve a lower latency.
Unspecified bits may not appear in tables (see example below). Unspecified bits should be written with their Reset values,
while reads return an unknown value.
25:24 RW N1 EMEM_NUMDEV
Unspecified bits in this example 0 = N1
register: 31:26, 23:20, 15:10, 7:4 1 = N2
1.5 Glossary
This glossary is intended to cover the Tegra specific acronyms used in this document; along with some others related to the
ARM SOC world. Many acronyms in this document are in broad engineering use and are not documented here; we assume
you already know what USB and CPU are, for example.
Term Definition
ADX Audio Demultiplexer Block, part of the Audio Hub used to demultiplex multiple
audio streams.
AHB AMBA High-Speed Bus, a multi-master high-speed (relative to APB) bus
supporting arbitration and split transactions, defined as part of AMBA 2.
AHBSLVMEM The AHB slave used for the main memory interface. Acts as an AHB slave and
provides a path from there to main memory. Refer to the AHB section.
AMBA Advanced Microcontroller Bus Architecture, a set of standard buses defined by
ARM.
AMX Audio Multiplexer Block, part of the Audio Hub used to multiplex multiple audio
streams together.
APB AMBA Peripheral Bus, a simple 32-bit single master bus for peripheral devices.
APBDMA A multi-channel DMA controller for devices on the APB bus, performing DMA
between APB and AHB.
ARM Advanced RISC Machines, a company that licenses CPU IP to Tegra. Also:
Architecture Reference Manual, so the ARM defines the CPU architecture.
AVP Audio-Video Processor, the term used both to describe the ARM7 processor in
Tegra devices, and to describe the broader audio and video decode acceleration
hardware and RAM associated with the ARM7. Note that the AVP is sometimes
known as COP in legacy documentation and registers.
AXI AMBA Advanced eXtensible Interface, a more advanced bus than AHB defined as
part of AMBA 3.
BSEA Bit Stream Engine for Audio applications
CAR Clock and Reset module allows controlling clocks and resets to all the modules
and subsystems in the Tegra processor.
CEC Consumer Electronics Control, a part of the HDMI interface specification used for
sending device control commands, often from a remote control.
COP CO-Processor, an obsolete name for the AVP still present in legacy
documentation and registers.
CSI MIPI Camera Serial Interface, a standard high-speed serial interface for
connecting cameras to the Tegra processor.
DAM Digital Audio sample-rate conversion and Mixing block, a block within the Audio
Hub that performs audio mixing and sample rate conversion
DSI MIPI Display Serial Interface, a standard high-speed serial interface for
connecting displays to the Tegra processor.
DTV Digital TV input block, used to stream a serial TV transport stream of compressed
data into Tegra, using an SPI like protocol.
DVC Dynamic Voltage Controller module
eDP Embedded Display Port
EMC External Memory Controller, a module that interfaces with external DDR/LPDDR
devices.
GART Graphic Address Relocation Table, a now obsolete mechanism for mapping from
virtual to physical addresses for devices. Remains in Tegra only as an aperture to
memory that may be mapped though the SMMU, the replacement for the GART.
GPIO General Purpose Input/Output, an I/O signal uncommitted to a specific role and
controlled by software.
HDMI High-Definition Multimedia Interface, a digital connection carrying uncompressed
video and audio at high speed over a single connector.
HSI MIPI High-Speed Synchronous Interface, a standard high-speed serial interface
for bi-directional communications with baseband processors and other devices.
Term Definition
IDE Integrated Drive Electronics (or Integrated Device Electronics)
ISP Image Signal Processor, a hardware engine that is part of the camera processing
pipeline.
KBC Keyboard Controller module allows the Tegra processor to be connected to
keyboard matrices of sizes up to 11x8.
LVDS Low Voltage Differential Signaling
MC Memory Controller module handles requests from internal clients and arbitrates
among them to allocate memory bandwidth.
MCCIF or Memory Controller Client InterFace, the standard interface block between the
MC-CIF memory controller sub-system fabric and the client device. Note that some
modules may have multiple client interfaces.
MIPI The Mobile Industry Processor Interface and industry alliance promoting a number
of standard interfaces for mobile devices.
MPCORE Multi-processor CPU core, a generic term for a CPU capable of operating as part
of an SMP group.
MPE An older name for the Video Encoder in the Tegra processor capable of encoding
raw video stream into MPEG. Now referred to as MSENC.
MSENC Multi-Standard video Encoder engine.
NAND A type of flash memory supporting high densities, and commonly used for non-
volatile mass storage in portable devices. Accessed in sequential blocks to be
generally treated as a file system.
NOR A type of flash memory, with a direct bus interface that allows random access so
code can be executed in place. Generally more costly and less dense than NAND
flash memory.
OGL Open Graphics Library, also known as OpenGL. An API supported on Tegra
devices and accelerated in hardware by dedicated 3D and 2D engines.
PCIe Peripheral Component Interconnect Express, a high-speed interface for external
devices connected to the Tegra SOC.
PMC Power Management Controller module controls the various power management
features in the system.
PPSB PortalPlayer System Bus, a proprietary register bus used for some blocks. Similar
to APB. PortalPlayer is a company that was acquired by NVIDIA, and from where
parts of Tegra are derived including this bus.
PWFM Pulse Width Frequency Modulation module generates programmed pulse widths
typically used to control backlight in display panels.
PVT Process, Voltage, & Temperature
RISC Reduced Instruction Set Computer, the CPU architecture used by ARM CPUs.
SATA Serial Advanced Technology Attachment (ATA)
SDMMC SD and MMC controller. An I/O controller supporting
SLINK Serial Link, a legacy and now obsolete name for the SPI controller
SMMU System Memory Management Unit, a block within the memory controller used to
map from a virtual address space to physical addresses for device DMA.
SMP Symmetric Multi-Processing
SOC System On a Chip, an integrated circuit containing a CPU, memory controller and
the peripheral devices needed for a computing system.
SOR Serial Output Resource. SOR is GPU IP for driving HDMI/DP/LVDS. It converts
the output of the display to a more modern high-speed serial protocol. DSI is not
included since it’s not GPU IP based
S/PDIF Sony/Philips Digital Interconnect Format
SPI Serial Peripheral Interface Bus, a synchronous serial data link, that operates in full
duplex mode.
TSEC Tegra Security co-processor, an embedded security processor used mainly to
manage the HDCP encryption and keys on the HDMI link.
TZ Trust Zone, a secure operating environment of the ARM CPU and the related
secure parts of the SOC backbone and devices
Term Definition
TZRAM Trust Zone secured RAM on the SOC.
UCQ Unified Command Queue – a sub module within Video Decoder Engine
VCP2 Vector Co-Processor version 2, a hardware acceleration block for the signal
processing parts of audio decode and filtering. Use to offload the ARM7 AVP
during audio playback.
VDE Video Decode Engine, a Tegra hardware acceleration block dedicated to
decoding compressed video in various formats.
VI2 Video Input 2 block, the acronym used to describe the Tegra K1 block used for
camera and related input functions.
VIC Video Image Compositer, a Tegra K1 block that implements video post-
processing functions needed by a video playback application to produce the final
image for the player window.
Description Address Start Address End Offset Start Offset End Default Length
DSIB 5440:0000 5443:ffff 0040:0000 0043:ffff 256 KB
MSENC 544c:0000 544f:ffff 004c:0000 004f:ffff 256 KB
TSEC 5450:0000 5453:ffff 0050:0000 0053:ffff 256 KB
SOR 5454:0000 5457:ffff 0054:0000 0057:ffff 256 KB
DPAUX 545c:0000 545f:ffff 005c:0000 005f:ffff 256 KB
GPU 5700:0000 5fff:ffff 0000:0000 08ff:ffff 144 MB
GPU_GART 5700:0000 5fff:ffff 144 MB
PPSB 6000:0000 60ff:ffff 16 MB
uP-TAG 6000:0000 6000:0fff 4 KB
Resource Semaphore 6000:1000 6000:1fff 0000:0000 0000:0fff 4 KB
Arbitration Semaphore 6000:2000 6000:2fff 0000:1000 0000:1fff 4 KB
ARB-PRI 6000:3000 6000:3fff 0000:3000 0000:3fff 4 KB
Primary ICTLR 6000:4000 6000:403f 0000:4000 0000:403f 64 B
Primary ICTLR ARB-GNT 6000:4040 6000:40ff 0000:4040 0000:40ff 192 B
Secondary ICTLR 6000:4100 6000:41ff 0000:4100 0000:41ff 256 B
Tertiary ICTLR 6000:4200 6000:42ff 0000:4200 0000:42ff 256 B
Quad ICTLR 6000:4300 6000:43ff 0000:4300 0000:43ff 256 B
Penta ICTLR 6000:4400 6000:44ff 0000:4400 0000:44ff 256 B
HIER GROUP1 ICTLR 6000:4800 6000:48ff 0000:4800 0000:48ff 256 B
TMR 6000:5000 6000:53ff 0000:5000 0000:53ff 1 KB
TMR1 0000:0000 0000:0007 8B
TMR2 0000:0008 0000:000f 8B
TMRUS 0000:0010 0000:004f 64 B
TMR3 0000:0050 0000:0057 8B
TMR4 0000:0058 0000:005f 8B
TMR5 0000:0060 0000:0067 8B
TMR6 0000:0068 0000:006f 8B
TMR7 0000:0070 0000:0077 8B
TMR8 0000:0078 0000:007f 8B
TMR9 0000:0080 0000:0087 8B
TMR0 0000:0088 0000:008f 8B
WDT0 0000:0100 0000:011f 32 B
WDT1 0000:0120 0000:013f 32 B
WDT2 0000:0140 0000:015f 32 B
WDT3 0000:0160 0000:017f 32 B
WDT4 0000:0180 0000:019f 32 B
TMR_SHARED 0000:01a0 0000:01bf 32 B
Clock and Reset 6000:6000 6000:6fff 0000:6000 0000:6fff 4 KB
Flow Controller 6000:7000 6000:7fff 0000:7000 0000:7fff 4 KB
AHB-DMA 6000:8000 6000:9fff 0000:8000 0000:9fff 8 KB
AHB-DMA CH0 6000:9000 6000:901f 0000:9000 0000:901f 32 B
AHB-DMA CH1 6000:9020 6000:903f 0000:9020 0000:903f 32 B
AHB-DMA CH2 6000:9040 6000:905f 0000:9040 0000:905f 32 B
AHB-DMA CH3 6000:9060 6000:907f 0000:9060 0000:907f 32 B
APB-DMA 6002:0000 6002:3fff 0002:0000 0002:3fff 16 KB
APB-DMA CH0 6002:1000 6002:103f 0002:1000 0002:103f 64 B
Description Address Start Address End Offset Start Offset End Default Length
APB-DMA CH1 6002:1040 6002:107f 0002:1040 0002:107f 64 B
APB-DMA CH2 6002:1080 6002:10bf 0002:1080 0002:10bf 64 B
APB-DMA CH3 6002:10c0 6002:10ff 0002:10c0 0002:10ff 64 B
APB-DMA CH4 6002:1100 6002:113f 0002:1100 0002:113f 64 B
APB-DMA CH5 6002:1140 6002:117f 0002:1140 0002:117f 64 B
APB-DMA CH6 6002:1180 6002:11bf 0002:1180 0002:11bf 64 B
APB-DMA CH7 6002:11c0 6002:11ff 0002:11c0 0002:11ff 64 B
APB-DMA CH8 6002:1200 6002:123f 0002:1200 0002:123f 64 B
APB-DMA CH9 6002:1240 6002:127f 0002:1240 0002:127f 64 B
APB-DMA CH10 6002:1280 6002:12bf 0002:1280 0002:12bf 64 B
APB-DMA CH11 6002:12c0 6002:12ff 0002:12c0 0002:12ff 64 B
APB-DMA CH12 6002:1300 6002:133f 0002:1300 0002:133f 64 B
APB-DMA CH13 6002:1340 6002:137f 0002:1340 0002:137f 64 B
APB-DMA CH14 6002:1380 6002:13bf 0002:1380 0002:13bf 64 B
APB-DMA CH15 6002:13c0 6002:13ff 0002:13c0 0002:13ff 64 B
APB-DMA CH16 6002:1400 6002:143f 0002:1400 0002:143f 64 B
APB-DMA CH17 6002:1440 6002:147f 0002:1440 0002:147f 64 B
APB-DMA CH18 6002:1480 6002:14bf 0002:1480 0002:14bf 64 B
APB-DMA CH19 6002:14c0 6002:14ff 0002:14c0 0002:14ff 64 B
APB-DMA CH20 6002:1500 6002:153f 0002:1500 0002:153f 64 B
APB-DMA CH21 6002:1540 6002:157f 0002:1540 0002:157f 64 B
APB-DMA CH22 6002:1580 6002:15bf 0002:1580 0002:15bf 64 B
APB-DMA CH23 6002:15c0 6002:15ff 0002:15c0 0002:15ff 64 B
APB-DMA CH24 6002:1600 6002:163f 0002:1600 0002:163f 64 B
APB-DMA CH25 6002:1640 6002:167f 0002:1640 0002:167f 64 B
APB-DMA CH26 6002:1680 6002:16bf 0002:1680 0002:16bf 64 B
APB-DMA CH27 6002:16c0 6002:16ff 0002:16c0 0002:16ff 64 B
APB-DMA CH28 6002:1700 6002:173f 0002:1700 0002:173f 64 B
APB-DMA CH29 6002:1740 6002:177f 0002:1740 0002:177f 64 B
APB-DMA CH30 6002:1780 6002:17bf 0002:1780 0002:17bf 64 B
APB-DMA CH31 6002:17c0 6002:17ff 0002:17c0 0002:17ff 64 B
System Registers 6000:c000 6000:c2ff 0000:c000 0000:c2ff 768 B
AHB Arbitration + Gizmo Controller 0000:0000 0000:014f 336 B
AHB/APB Debug Bus 0000:0150 0000:01ff 176 B
Secure Boot 0000:0200 0000:02ff 256 B
STAT-MON 6000:c400 6000:c7ff 0000:c400 0000:c7ff 1 KB
Activity Monitor 6000:c800 6000:cbff 0000:c800 0000:cbff 1 KB
GPIO-1 6000:d000 6000:d0ff 0000:d000 0000:d0ff 256 B
GPIO-2 6000:d100 6000:d1ff 0000:d100 0000:d1ff 256 B
GPIO-3 6000:d200 6000:d2ff 0000:d200 0000:d2ff 256 B
GPIO-4 6000:d300 6000:d3ff 0000:d300 0000:d3ff 256 B
GPIO-5 6000:d400 6000:d4ff 0000:d400 0000:d4ff 256 B
GPIO-6 6000:d500 6000:d5ff 0000:d500 0000:d5ff 256 B
GPIO-7 6000:d600 6000:d6ff 0000:d600 0000:d6ff 256 B
GPIO-8 6000:d700 6000:d7ff 0000:d700 0000:d7ff 256 B
VCP 6000:e000 6000:efff 0000:e000 0000:efff 4 KB
Description Address Start Address End Offset Start Offset End Default Length
Exception vectors 6000:f000 6000:ffff 0000:f000 0000:ffff 4 KB
AVPUCQ 6001:0000 6001:00ff 0001:0000 0001:00ff 256 B
BSEA 6001:1000 6001:1fff 0001:1000 0001:1fff 4 KB
IPATCH 6001:dc00 6001:dfff 0001:dc00 0001:dfff 1 KB
VDE 6003:0000 6003:3fff 0003:0000 0003:3fff 16 KB
SXE 6003:0000 6003:0fff 0003:0000 0003:0fff 4 KB
BSEV 6003:1000 6003:1fff 0003:1000 0003:1fff 4 KB
MBE 6003:2000 6003:20ff 0003:2000 0003:20ff 256 B
PPE 6003:2200 6003:22ff 0003:2200 0003:22ff 256 B
MCE 6003:2400 6003:24ff 0003:2400 0003:24ff 256 B
TFE 6003:2600 6003:26ff 0003:2600 0003:26ff 256 B
PPB 6003:2800 6003:28ff 0003:2800 0003:28ff 256 B
VDMA 6003:2a00 6003:2aff 0003:2a00 0003:2aff 256 B
UCQ 6003:2c00 6003:2cff 0003:2c00 0003:2cff 256 B
FRAMEID 6003:3800 6003:3bff 0003:3800 0003:3bff 1 KB
APB 7000:0000 70ff:ffff 16 MB
MISC 7000:0000 7000:3fff 0000:0000 0000:3fff 16 KB
PP 0000:0000 0000:03ff 1 KB
SC1X_PADS 0000:0400 0000:07ff 1 KB
GP 0000:0800 0000:0bff 1 KB
SECURE_REGS 0000:0c00 0000:0cff 256 B
OBS 0000:0d00 0000:0dff 256 B
USB_AUX 0000:1000 0000:10ff 256 B
SATA_AUX 0000:1100 0000:11ff 256 B
PINMUX_AUX 0000:3000 0000:3fff 4 KB
UART-A 7000:6000 7000:603f 0000:6000 0000:603f 64 B
UART-B 7000:6040 7000:607f 0000:6040 0000:607f 64 B
VFIR 7000:6100 7000:61ff 0000:6100 0000:61ff 256 B
UART-C 7000:6200 7000:62ff 0000:6200 0000:62ff 256 B
UART-D 7000:6300 7000:63ff 0000:6300 0000:63ff 256 B
HDMI_IOBIST 7000:6500 7000:65ff 0000:6500 0000:65ff 256 B
MIPI_IOBIST 7000:6600 7000:66ff 0000:6600 0000:66ff 256 B
LPDDR2_IOBIST 7000:6700 7000:67ff 0000:6700 0000:67ff 256 B
PCIE_X2_0_IOBIST 7000:6800 7000:68ff 0000:6800 0000:68ff 256 B
PCIE_X2_1_IOBIST 7000:6900 7000:69ff 0000:6900 0000:69ff 256 B
PCIE_X4_IOBIST 7000:6a00 7000:6aff 0000:6a00 0000:6aff 256 B
SATA_IOBIST 7000:6c00 7000:6dff 0000:6c00 0000:6dff 512 B
XIO Interface 7000:8a00 7000:8bff 0000:8a00 0000:8bff 512 B
Sync NOR 7000:9000 7000:9fff 0000:9000 0000:9fff 4 KB
PWM Controller 7000:a000 7000:a0ff 0000:a000 0000:a0ff 256 B
MIPIHSI Baseband 7000:b000 7000:bfff 0000:b000 0000:bfff 4 KB
I2C 7000:c000 7000:c0ff 0000:c000 0000:c0ff 256 B
TWC 7000:c100 7000:c1ff 0000:c100 0000:c1ff 256 B
DTV 7000:c300 7000:c3ff 0000:c300 0000:c3ff 256 B
I2C2 7000:c400 7000:c4ff 0000:c400 0000:c4ff 256 B
I2C3 7000:c500 7000:c5ff 0000:c500 0000:c5ff 256 B
Description Address Start Address End Offset Start Offset End Default Length
OWR 7000:c600 7000:c6ff 0000:c600 0000:c6ff 256 B
I2C4 7000:c700 7000:c7ff 0000:c700 0000:c7ff 256 B
I2C5 7000:d000 7000:d0ff 0000:d000 0000:d0ff 256 B
I2C6 7000:d100 7000:d1ff 0000:d100 0000:d1ff 256 B
SPI 2B-1 7000:d400 7000:d5ff 0000:d400 0000:d5ff 512 B
SPI 2B-2 7000:d600 7000:d7ff 0000:d600 0000:d7ff 512 B
SPI 2B-3 7000:d800 7000:d9ff 0000:d800 0000:d9ff 512 B
SPI 2B-4 7000:da00 7000:dbff 0000:da00 0000:dbff 512 B
SPI 2B-5 7000:dc00 7000:ddff 0000:dc00 0000:ddff 512 B
SPI 2B-6 7000:de00 7000:dfff 0000:de00 0000:dfff 512 B
RTC 7000:e000 7000:e0ff 0000:e000 0000:e0ff 256 B
KBC 7000:e200 7000:e2ff 0000:e200 0000:e2ff 256 B
PMC 7000:e400 7000:ebff 0000:e400 0000:ebff 2 KB
FUSE 7000:f800 7000:fbff 0000:f800 0000:fbff 1 KB
KFUSE 7000:fc00 7000:ffff 0000:fc00 0000:ffff 1 KB
LA 7001:0000 7001:1fff 0001:0000 0001:1fff 8 KB
SE 7001:2000 7001:3fff 0001:2000 0001:3fff 8 KB
TSENSOR 7001:4000 7001:4fff 0001:4000 0001:4fff 4 KB
CEC 7001:5000 7001:5fff 0001:5000 0001:5fff 4 KB
ATOMICS 7001:6000 7001:7fff 0001:6000 0001:7fff 8 KB
MC 7001:9000 7001:9fff 0001:9000 0001:9fff 4 KB
EMC 7001:b000 7001:bfff 0001:b000 0001:bfff 4 KB
SATA 7002:0000 7002:ffff 0002:0000 0002:ffff 64 KB
HDA 7003:0000 7003:ffff 0003:0000 0003:ffff 64 KB
MIOBFM 7020:0000 7020:ffff 0020:0000 0020:ffff 64 KB
AUDIO_CLUSTER 7030:0000 7030:ffff 0030:0000 0030:ffff 64 KB
APBIF 0000:0000 0000:01ff 512 B
APBIF2 0000:0200 0000:07ff 1536 B
AUDIO 0000:0800 0000:0fff 2 KB
I2S0 0000:1000 0000:10ff 256 B
I2S1 0000:1100 0000:11ff 256 B
I2S2 0000:1200 0000:12ff 256 B
I2S3 0000:1300 0000:13ff 256 B
I2S4 0000:1400 0000:14ff 256 B
DAM0 0000:2000 0000:21ff 512 B
DAM1 0000:2200 0000:23ff 512 B
DAM2 0000:2400 0000:25ff 512 B
AMX0 0000:3000 0000:30ff 256 B
AMX1 0000:3100 0000:31ff 256 B
ADX0 0000:3800 0000:38ff 256 B
ADX1 0000:3900 0000:39ff 256 B
SPDIF 0000:6000 0000:60ff 256 B
AFC0 0000:7000 0000:70ff 256 B
AFC1 0000:7100 0000:71ff 256 B
AFC2 0000:7200 0000:72ff 256 B
AFC3 0000:7300 0000:73ff 256 B
Description Address Start Address End Offset Start Offset End Default Length
AFC4 0000:7400 0000:74ff 256 B
AFC5 0000:7500 0000:75ff 256 B
XUSB_PADCTL 7009:f000 7009:ffff 0009:f000 0009:ffff 4 KB
XUSB_HOST 7009:0000 7009:9fff 0009:0000 0009:9fff 40 KB
XUSB_DEV 700d:0000 700d:9fff 000d:0000 000d:9fff 40 KB
DDS 700a:0000 700a:11ff 000a:0000 000a:11ff 4608 B
SDMMC-1 700b:0000 700b:01ff 000b:0000 000b:01ff 512 B
SDMMC-1B 700b:1000 700b:11ff 000b:1000 000b:11ff 512 B
SDMMC-2 700b:0200 700b:03ff 000b:0200 000b:03ff 512 B
SDMMC-2B 700b:2200 700b:23ff 000b:2200 000b:23ff 512 B
SDMMC-3 700b:0400 700b:05ff 000b:0400 000b:05ff 512 B
SDMMC-3B 700b:3400 700b:35ff 000b:3400 000b:35ff 512 B
SDMMC-4 700b:0600 700b:07ff 000b:0600 000b:07ff 512 B
SDMMC-4B 700b:4600 700b:47ff 000b:4600 000b:47ff 512 B
SPEEDO 700c:0000 700c:7fff 000c:0000 000c:7fff 32 KB
SPEEDO_0 0000:0000 0000:00ff 256 B
SPEEDO_1 0000:0100 0000:01ff 256 B
SPEEDO_PMON 700c:8000 700c:ffff 000c:8000 000c:ffff 32 KB
SPEEDO_PMON_0 0000:0000 0000:01ff 512 B
SPEEDO_PMON_1 0000:0200 0000:03ff 512 B
SYSCTR0 700f:0000 700f:ffff 000f:0000 000f:ffff 64 KB
SYSCTR1 7010:0000 7010:ffff 0010:0000 0010:ffff 64 KB
DP2 700e:0000 700e:00ff 000e:0000 000e:00ff 256 B
APB2JTAG 700e:1000 700e:11ff 000e:1000 000e:11ff 512 B
SOC_THERM 700e:2000 700e:2fff 000e:2000 000e:2fff 4 KB
MIPI_CAL 700e:3000 700e:30ff 000e:3000 000e:30ff 256 B
DVFS 7011:0000 7011:03ff 0011:0000 0011:03ff 1 KB
CLUSTER_CLOCK 7004:0000 7007:ffff 0004:0000 0007:ffff 256 KB
CSITE 7080:0000 709f:ffff 0080:0000 009f:ffff 2 MB
AHB_A2 7c00:0000 7dff:ffff 32 MB
PPCS (AHB to MC flush) 7c00:0000 7c00:ffff 0000:0000 0000:ffff 64 KB
TZRAM 7c01:0000 7c01:ffff 0001:0000 0001:ffff 64 KB
USB 7d00:0000 7d00:17ff 0100:0000 0100:17ff 6 KB
USB2 7d00:4000 7d00:57ff 0100:4000 0100:57ff 6 KB
USB3 7d00:8000 7d00:97ff 0100:8000 0100:97ff 6 KB
External Memory 8000:0000 27fff:ffff 8 GB
EMEM 8000:0000 27fff:ffff 0000:0000 1ffff:ffff 8 GB
IROM (boot code) 0010:0000 0010:ffff 64 KB
IROML 0010:0000 0010:ffff 64 KB
Lo-VEC 0000:0000 0000:ffff 64 KB
IROM_LOVEC 0000:0000 00ff:ffff 16 MB
The address map available varies by master, because MMIO is not available to any direct MC client except the processors.
These other direct MC clients are therefore able to access all DRAMs on 4GB systems, with the spaces reserved for MMIO on
the processors available to them as DRAM. This may be used as a carve-out or for similar purposes.
Note: MMIO in Table 2 below refers to the MMIO target, register, or non-DRAM region. Not all of
the MMIO regions actually have an MMIO target.
Physical/Virtual Address Range is available for Host1X clients for all apertures.
DRAM 8000_0000 - FFFF_FFFF 2048 Always DRAM DRAM DRAM DRAM DRAM Yes Yes
DRAM2 1_0000_0000 - 2_7FFF_FFFF 6144 Always DRAM N/A N/A N/A DRAM No No
+ + +
AHB_A2_rsvd 7E00_0000 - 7FFF_FFFF 32 Selectable DRAM DRAM DRAM DRAM Yes Yes
GART/GPU_GART 5700_0000 - 5FFF_FFFF 144 Always MMIO MMIO MMIO MMIO MMIO Yes Yes
Verif Aper + Rsvd 5100_0000 - 53FF_FFFF 48 Selectable DRAM+ DRAM+ DRAM DRAM+ Yes Yes
1
Host1x+PERIPH 5000_0000 - 50FF_FFFF 16 Always MMIO MMIO MMIO MMIO MMIO
Host1x 5000_0000 – 5002_7FFF 160KB Always MMIO MMIO MMIO MMIO MMIO No No
Host1X+ PERIPHBASE 5004_0000 - 5005_FFFF 128KB Always MMIO MMIO MMIO MMIO MMIO No Yes
PERIPH
MSELECT 5006_0000 - 5006_0FFF 4KB Always MMIO MMIO MMIO MMIO MMIO No Yes
IRAM_rsvd 4100_0000 - 47FF_FFFF 112 Selectable DRAM+ DRAM+ DRAM DRAM+ Yes Yes
1
The Host1X+PERIPH is split into multiple apertures.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 25
Tegra K1 Technical Reference Manual
Address Map
IOVA Range
Physical DRAM Range Available for:
Size H/W Config COP/ AHB
Aperture Range (MB) Option 2 GB 3GB 4 GB >4 GB AVP? Clients?
Notes:
The IOVA Range column is available for AVP or AHB clients that have SMMU translation enabled or PA address for
AHB clients that have SMMU translation disabled.
“DRAM” really means “Memory Controller”. In particular:
The GART range (5700_0000 – 5FFF_FFFF) has been used as an SMMU bounce range, which through the
SMMU points to DRAM.
If the system configuration includes a PCIe device, then the PCIE_A* regions need to be configured as MMIO
(appropriately as required by address space requirement). If the system does not include any PCIe devices, then
these regions should be configured as DRAM.
All configurable regions that do not have a real MMIO target (labeled as DRAM+) in the above table should be
configured as DRAM to provide the largest and uniform IOVA view (in 2GB or 4GB system) for the AVP and
other clients that generate virtual addresses to access DRAM.
Requests from all clients (except the main CPU) are allowed to use SMMU translation. Any request address range
that can reach the MC can be translated by the SMMU.
SMMU is a sub-unit in the memory controller. Address ranges marked as "No" in the table will not reach the memory
controller.
All Host1x clients can see the full 4GB physical or IOVA range.
Clients/Controllers are logically (static) grouped in different SWNAME/SWID. SMMU translation can be enabled/disabled for
individual SWNAME. The following table gives the Client to SW Name mapping details.
Note: Requests from all clients (except main CPU) are allowed to use SMMU translation. Any
request address range that can reach the MC can be translated by the SMMU.
VCP
CSITE
ARC
AHBDMA
USB
APBDMA
SNOR
BSEV
SE
DDS
BSEA
USB2
MIPIHSI
Each client in the above list has a SWID register field which controls whether the client maps to PPCS or PPCS1 SWNAME.
From the perspective of interrupts: devices (GPU, Memory Controller, Video encode/decode engines, and various I/O devices)
are the sources of interrupts; and processors are the target of interrupts. From sources, interrupts go to interrupt controllers
which, based on configuration, prioritize and route them to the appropriate target processor. There are two different types of
®
interrupt controllers used in Tegra K1 devices: The ARM vGIC and the Legacy Interrupt Controller (LIC).
3.1 References
Some ARM documentation is required to fully understand the Tegra interrupt architecture. Refer to ARM’s website for further
details and to access these.
Document Description
vGIC Architecture ARM Virtual Generic Interrupt Controller (also known as GIC v2) Architectural Specification
Timers Architecture ARM Generic Timer Architectural Specification
Cortex-A15 TRM Cortex-A15 Technical Reference Manual for Cortex-A15 implementation specific information
(Tegra K1 32-bit).
ARM Technical Reference For implementation specific information (Tegra K1 64-bit)
Manual v8
Interrupts to the CPU’s embedded interrupt controller (vGIC) are in this same order, but start at offset 32 because the first 32
are reserved for the CPU’s internal interrupts.
22 22 Unmapped Unassigned 0
21 21 USB2 USB USB Device 0
20 20 USB USB USB Device 0
19 19 SDMMC3 SDMMC SDMMC3 Controller 0
18 18 AVP_UCQ AVP_UCQ AVP UCQ Interrupt 0
17 17 VDE VDE VDE Interrupt 0
16 16 Unmapped Unassigned 0
15 15 SDMMC2 SDMMC SDMMC2 Controller 0
14 14 SDMMC1 SDMMC SDMMC1 Controller 0
13 13 SATA_RX_STAT SATA SATA RX Wake Up Interrupt 1
12 12 VDE_SXE VDE VDE SXE Interrupt 3
11 11 VDE_BSEA VDE AVP BSEA Interrupt 0
10 10 VDE_BSEV VDE VDE BSE-V Interrupt 1
9 9 VDE_SYNC_TOKEN VDE VDE Sync Token Interrupt 0
8 8 VDE_UCQ VDE VDE UCQ Error Interrupt 4
SHR_SEM_OUTBOX_
7 CPU 7 EMPTY Semaphore CPU Outbox Empty Interrupt 3
6 COP 6 SHR_SEM_OUTBOX_FULL Semaphore COP Outbox Full Interrupt 2
5 COP 5 SHR_SEM_INBOX_EMPTY Semaphore COP Inbox Empty Interrupt 1
4 CPU 4 SHR_SEM_INBOX_FULL Semaphore CPU Inbox Full Interrupt 0
3 3 CEC CEC CEC General Interrupt 0
2 2 RTC RTC RTC Interrupt 0
1 1 TMR2 Timer TMR2 Interrupt 0
0 0 TMR1 Timer TMR1 Interrupt 0
Global LIC
Interrupt Interrupt Interrupt Interrupt
Number Target Number Interrupt Name Source Block Interrupt Description Order
94 30 Unmapped Unassigned 0
93 29 Unmapped Unassigned 0
91 27 Unmapped Unassigned 0
88 24 Unmapped Unassigned 0
85 21 Unmapped Unassigned 0
Global LIC
Interrupt Interrupt Interrupt Interrupt
Number Target Number Interrupt Name Source Block Interrupt Description Order
80 16 Unmapped Unassigned 0
77 13 MC MC MC General Interrupt 0
69 5 VI VI VI General Interrupt 0
Global LIC
Interrupt Interrupt Interrupt Interrupt
Number Target Number Interrupt Name Source Block Description Order
Global LIC
Interrupt Interrupt Interrupt Source Interrupt
Number Target Number Interrupt Name Block Interrupt Description Order
processor(s). From an interrupt perspective, there are two different types of processors: CPUs (Cortex-A15) and COP (ARM7
AVP). The vGIC is the interrupt controller for the CPUs, and the LIC is the interrupt controller for the ARM7 AVP. Any
processor can initiate a software interrupt, targeted to any one or more processors (including itself). However, IPIs can only be
initiated by a Cortex-A15 CPU to any one or more Cortex-A15 CPUs (including itself).
There are 160 hardware interrupts in Tegra K1 devices. Interrupt sources are allocated one or more interrupts as required.
The 160 interrupts are grouped into slices of 32, where each slice can be configured independently.
The ARM processor goes into the IRQ mode or the FIQ mode depending up on which interrupt is activated. Generally,
interrupts that require low latency or are time critical are configured as FIQ. All other interrupts are configured as IRQ. Non-
secure interrupts can only be IRQ.
In general, any incoming hardware interrupt can be routed to either nIRQ or nFIQ pin of any of the processors.
The Legacy Interrupt Controller (LIC) is primarily used for COP (ARM7). But it is also used for generating interrupts as wake
events for CPUs. All of the device hardware interrupt signals are sent to the LIC first, which routes them to the ARM7 AVP as
well as forwards them to other interrupt controller. The LIC also provides a software set/clear mechanism for all of the
interrupts.
The interrupt controller used for CPUs (Cortex-A15 CPUs) is called vGIC (virtual generic interrupt controller). The vGIC is an
SMP interrupt controller. It receives interrupts targeted to any one or more of the CPUs in the SMP complex. There is one
vGIC per CPU cluster.
There are seven PPIs for each CPU: virtual maintenance interrupt (ID25), hypervisor timer interrupt (ID26), virtual timer
interrupt (ID27), legacy nFIQ (ID28), secure physical timer interrupt (ID29), non-secure physical timer interrupt (ID30), and
legacy nIRQ (ID31).
Tegra K1 devices use all PPIs except for the legacy nFIQ and legacy nIRQ.
ARM-IP
Cluster0 Cluster1
CPU4
CPU0 CPU1 CPU2 CPU3
(shadow)
To
FlowCtlr
vGIC vGIC
PCPU0 I/F PCPU1 I/F PCPU2 I/F PCPU3 I/F CPU0 I/F
VCPU0 I/F VCPU1 I/F VCPU2 I/F VCPU3 I/F VCPU0 I/F
Distributor Distributor
irqs[159:0]
4 Timer PPIs per CPU (P-Secure, P-non- irqs[159:0] Timers
Secure, V-non-Secure, P-Hyper)
Legacy
Interrupt
Ctlr cop_nirq,
cop_nfiq ARM7
PRI_IC SEC_IC TRI_IC QUAD_IC PENTA_IC Combiner
cpu_irq[3:0],
cpu_irq[3:0]
int[159:0]*
As shown in the figure above, hardware interrupts are routed to the interrupt controllers (called IC32) within the LIC, where
each IC32 handles 32 interrupts. The interrupt signals are synchronized within the LIC to the system clock. The synchronized
signals are combined with software set/clear bits per interrupt. This allows software to set or clear individual interrupts,
provided the corresponding interrupt is not asserted by hardware. The resulting interrupt signals are broadcast to the LIC (for
further processing) and the vGIC. Within the LIC and vGIC, per interrupt and per CPU enable-masks are configured to qualify
the interrupt targeted for the corresponding processor. This mechanism allows any interrupt to be targeted to any one or more
processors in Tegra K1 devices.
For details on interrupt handling within the LIC and vGIC, refer to the following sections.
3.4.1.5 Interrupt Handling with Targeted CPU and vGIC Powered Off
When a CPU and associated vGIC are powered off (e.g., the CPU rail is powered off for cluster0), then the legacy interrupt
controller is configured to act as a “proxy” interrupt controller to generate IRQ/FIQ for that CPU. Also, Tegra K1 timers (instead
of vGIC timers) have to be set up if a timer interrupt is required. The flow controller uses legacy interrupt controller IRQ/FIQ to
power-up the targeted CPU (and vGIC).
The following sequence describes the steps to follow to handle interrupts when the targeted CPU and vGIC are powered off:
Because Tegra interrupts are level-triggered, the interrupt that triggered the wake-up is still asserted and is now visible to the
vGIC. The vGIC will process the interrupt and send it to the CPU.
The following sequence describes the steps to follow to handle interrupts when the targeted CPU is powered off:
Because the vGIC IRQ and FIQ are level-triggered, the interrupt that triggered the wake-up is still asserted.
The vGIC consists of the physical CPU interface and the physical distributor. In addition, to support CPU virtualization it
consists of the virtual CPU Interface which is configured by the Hypervisor and used by the virtual machine (VM).
Priority Drop to be used after the interrupt is acknowledged to drop the running priority of the CPU back down but
leave the interrupt in the ACTIVE state
Deactivate Interrupt to be used when the interrupt handling is truly completed by the VM, causing the interrupt to
transition from ACTIVE to INACTIVE in the physical distributor.
To avoid Hypervisor intervention being necessary when a Guest OS completes interrupt processing, the virtual CPU Interface
is able to directly trigger a Deactivate Interrupt event on the interrupt distributor.
The Virtual CPU Interface provides two sets of registers for each CPU in the system. The “front-end” registers are intended to
be mapped into the VM’s IPA space where the Guest OS’ CPU Interface registers are expected to reside. The “back-end”
registers are intended to be accessed by the Hypervisor only. The front-end and back-end registers are mapped into separate
4KB address spaces. The back-end registers primarily comprise a list of active and pending interrupts for the current Virtual
CPU. These registers are updated by the Hypervisor when new interrupts occur, and by the VCPUIF itself in response to
accesses to the front end from the VM.
Timers
The Cortex-A15 processor provides a set of four timers for each processor in the cluster:
A Secure Physical Timer and a Non-Secure Physical Timer for use in Secure and Non-secure PL1 modes,
respectively. These are generated as two separate interrupts to the core: ID29 (secure) and ID30 (non-secure).
Virtual Timer for use in Non-secure PL1 modes.
Physical Timer for use in Hypervisor mode.
The counter value is distributed to the processor with a synchronous binary encoded 64-bit bus, CNTVALUEB[63:0]. Within
each processor, a set of Timer registers are allocated to the CP15 coprocessor space.
For more information, see the Timers section in this TRM and the ARM Architecture Reference Manual v7 for generic timer
specifications.
Both CPU clusters (cluster0 and cluster1) incorporate their own vGIC. The vGIC runs at half the CPU CLK frequency of the
cluster it is in.
When CPU(s) is individually power gated (i.e., LP2 power state), the vGIC is still powered, so the vGIC context does
not have to be saved/restored. Therefore, CPUs can be individually powered-off (that is, put into the LP2 state) and
powered on without saving/restoring their vGIC context.
When the non-CPU partition is power-gated or the CPU rail is powered off, the context of the corresponding vGIC
needs to be saved.
When one cluster is migrated to the other cluster, the VGIC context needs to be migrated from the source cluster to
the destination cluster.
When the SoC rail is powered off (that is, LP0 power state), the vGIC is powered off. Thus the vGIC has to be
configured/restored at LP0 exit (warm boot)
When using the virtualization extension of the vGIC, for switching from one VM to another, Hypervisor will save the
contents of all the back-end registers (i.e., VM view of VCPU Interface registers) from the outgoing VM and load them
into the registers for the incoming VM. This restores the VCPU interface to the correct state for the incoming VM.
When a VCPU is migrated (context switched) to another physical CPU, the software has to save the contents of all
the back-end registers (that is, the VM view of the VCPU Interface registers) associated with the outgoing CPU, and
load them into the corresponding registers of the incoming CPU.
SEC_IC
TRI_IC
QUAD_IC
(PRI_ICTLR_COP_IEP_CLASS)
Per Interrupt Enable (PRI_ICTLR_COP_IER)
OR of all interrupts
(PRI_ICTLR_CPU_IEP_CLASS)
PENTA_IC
OR of all interupt
& ~FIQ
& FIQ
COPnIRQ
<3:0>
(LIC CPU interrupts are not used)
32b
Combiner
Combiner
cpu_nirq[3:0] cop_nirq
Flow ARM7
(PRI_ICTLR_COP_IEP_CLASS)
OR of all interrupts
cpu_nfiq[3:0] cop_nfiq
Controller (PRI_ICTLR_CPU_IEP_CLASS)
OR of all interrupts
& FIQ
& ~FIQ
COPnFIQ
<3:0>
The following text discusses interrupts as they relate to the COP IRQ/FIQ interrupts. Unless specified otherwise, this also
applies to the CPU<3:0> IRQ/FIQ interrupts.
The interrupt routing (to the COP) is achieved by configuring the Interrupt Enable Register (IER) and the Interrupt Class
Registers (IEP_CLASS). Each IC32 has a set of IER and IEP Class registers. The COP registers are called COP_IER and
COP_IEP_CLASS. Similarly, the CPU IER/IEP Class Registers are called CPU_IER/CPU<1,2,3>_IER and
CPU_IEP_CLASS/CPU_IEP_CLASS.
When a 1 is set in the proper bit position in the COP_IER register, that particular source is capable of interrupting the COP.
Also, the class is set in the proper bit position of COP_IEP_CLASS for the corresponding interrupt to be routed as IRQ or FIQ.
The interrupt status register (ISR) allows the processor to view the state of the pending hardware interrupt requests regardless
of the bit enables programmed in COP_IER. The forced interrupt status register (FIR) allows the software to selectively force
set or clear specific interrupts. The read-only VIRQ/VFIQ allows the COP to determine the source of the interrupt request(s)
causing the processor to enter the interrupt service routine.
The nIRQ signals generated by five IC32 controllers are logically ANDed in the combiner to generate the final nIRQ (called
nirq1 in the above diagram) which is routed to the COP. Similarly, nFIQ signals are logically ANDed in the combiner to
generate nFIQ which is routed to the COP.
Each IC32 has sixteen 32-bit registers. The COP and CPU<n> interrupt enable registers (COP_IER/CPU_IER) indicate the
interrupts enabled for the COP and CPU<3:0>, respectively. These registers have their respective SET and CLR registers that
allow setting or clearing individual bits of these registers without the need of a Read-Modify-Write cycle.
The COP/CPU Interrupt Class Register (COP_IEP_CLASS/CPU_IEP_CLASS) controls whether the interrupt will be routed to
the IRQ or the FIQ interrupt of the respective processor.
The Forced Interrupt Status Register (FIR) allows the software to force the set and clear of individual interrupts. This could be
used for debugging/testing purposes or could be used in the working system. Note that software cannot force set/clear an
interrupt which is already asserted by a hardware source. The FIR has its corresponding SET and CLR registers.
The Valid Interrupt Status Register (VIRQ_COP/VIRQ_CPU) and Valid FIQ Interrupt Status Register (VFIQ_COP/VFIQ_CPU)
indicate the currently active interrupts that are valid on the respective pins (nIRQ or nFIQ).
The VFIQ/VIRQ registers indicate the interrupt which is sent to the processor (i.e., these registers indicate interrupts
outgoing from the interrupt controller). On the other hand, ISR indicates hardware interrupt incoming into the interrupt
controller.
- The VFIQ/VIRQ registers indicate the interrupts set by hardware or by software. The ISR register indicates
registers set by only hardware.
- The VFIQ/VIRQ registers only show the enabled interrupts. ISR shows the interrupt status irrespective of
whether the interrupt is enabled or not.
- The ISR shows the interrupt to be active whether it is routed to the FIQ pin or to the IRQ pin. The VFIQ/VIRQ
registers contain only the routed interrupts.
The HIER_GROUPx_{CPU,COP}_ENABLE registers act as mask registers for the hierarchical interrupts. Each bit in the
ENABLE register can mask the interrupt for the corresponding hierarchical group. Refer to Table 9 for the hierarchical interrupt
grouping per bit.
The Address Interrupt section of this document lists the interrupt sources which are in the hierarchical interrupts group(s).
If the requesting processor has been granted the resource, then the status returned will be a one. Alternately, the processor
can configure the interrupt controller to generate an interrupt when the resource becomes available.
When the processor has finished using the resource, it releases the resource by writing a one to the corresponding bit in the
Arbitration Semaphore Put Request register (SMP_PUT register). Additionally, pending request status is provided through the
Arbitration Request Pending Status register (SMP_REQ_ST register).
The Primary Interrupt Controller (PRI_ICTLR) supports Arbitration Grant Interrupts. When a processor is granted access to a
resource, the Arbitration semaphore module can be programmed to send a Grant signal to the interrupt controller. The
interrupt controller can then interrupt the processor to indicate that it has been granted exclusive access to a particular
resource. The individual ARB_GNT bits are OR’ed together and presented to the Primary Interrupt controller as Interrupt
Number 29.
The Arbitration/Grant interrupts mechanism registers are described in the Arbitration Semaphores section of this document.
Each IC32 has a set of 34 registers with names using the form <ID>_<FUNCTION>_0:
ID identifies the specific IC32: PRI_ICTLR, SEC_ICTLR, TRI_ICTLR, QUAD_ICTLR, PENTA_ICTLR. Based on the
IC32, ID defines a base address and mapping (see below).
FUNCTION identifies the use for this register. Refer to the LIC Registers Description subsection for more details.
FUNCTION is defined as one of the following:
- VIRQ_<DEST> and VFIQ_<DEST>: indicates the Valid status, as an IRQ or FIQ, respectively, for this
destination. DEST is COP, CPU, CPU1, CPU2, or CPU3.
- ISR: indicates the latched Interrupt Status
- FIR: indicates Force Interrupt
- FIR_SET and FIR_CLR: to control FIR, bits set to 1 are set or cleared, respectively, in FIR.
- <DEST>_IER: indicates that the corresponding event is enabled as an interrupt
- <DEST>_IER_SET and <DEST>_IER_CLR: to control IER, bits equal to 1 are set or cleared, respectively, in
IER.
- <DEST>_IEP_CLASS: Interrupt Enable Priority Class, a bit set to 0 indicates IRQ, and set to 1 indicates FIQ.
Table 10 associates the following with each IC32: the ID (used in the register names), the base offset (address map of the five
IC32s), and interrupt mapping reference.
The table below summarizes all 34 registers for each IC32 (where <ID> is the controller name), their relative offsets, register
access types (RO, WO, or RW), and their 32-bit power-on reset values. The actual offset for each register is the base offset
(from the table above) plus the relative offset. The PRI_ICTLR, SEC_ICTLR, TRI_ICTLR, QUAD_ICTLR, and PENTA_ICTLR
have same set of registers at the same address offset with the exception of the ARBGNT registers which are only in
PRI_ICTLR. The ARBGNT registers are defined in the “Arb_gnt Specific Interrupt Controller Registers” subsection.
Relative Read/
Name Offset Write Reset Remark
Relative Read/
Name Offset Write Reset Remark
<ID>_VIRQ_ CPU3_0 0x90 RO x Valid Interrupt Request Status for CPU3 Register
<ID>_VFIQ_ CPU3_0 0x94 RO x FIQ Valid Interrupt Status for CPU3 Register
The following table defines the bits within each of the five IC32 interrupt controller’s registers. To calculate the global interrupt
number of each bit, add the bit location (0 to 31) to the base interrupt value for the specific interrupt controller.
Fourth IC32
First IC32 (PRI_ICTLR) Bits Second IC32 (SEC_ICTLR) Bits Third IC32 (TRI_ICTLR) Bits Fifth IC32 (PENTA_ICTRL) Bits
Bit (QUAD_ICTRL) Bits
(Base Interrupt = 0) (Base Interrupt = 32) (Base Interrupt = 64) (Base Interrupt = 128)
(Base Interrupt = 96)
Fourth IC32
First IC32 (PRI_ICTLR) Bits Second IC32 (SEC_ICTLR) Bits Third IC32 (TRI_ICTLR) Bits Fifth IC32 (PENTA_ICTRL) Bits
Bit (QUAD_ICTRL) Bits
(Base Interrupt = 0) (Base Interrupt = 32) (Base Interrupt = 64) (Base Interrupt = 128)
(Base Interrupt = 96)
Arbitration semaphores provide a mechanism by which the two processors can arbitrate for the use of various resources.
These semaphores provide a hardware locking mechanism, so that when a processor is already using a resource, the second
processor is not granted that resource. There are 32 bits of Arbitration semaphores provided in the system.
The hardware does not enforce any resource association to these bits. It is left to the firmware to assign and use these bits.
The Arbitration Semaphores can also generate an interrupt when a hardware resource becomes available. The registers in
this module configure these interrupts. When a 1 is set in the corresponding bit position of the Arbitration Semaphore Interrupt
Source Register (CPU_enable or COP_enable), an interrupt will be generated when the processor achieves Grant Status for
that resource.
The current Grant status can be viewed in the CPU_STATUS or COP_STATUS registers.
3.5.2.1 PRI_ICTLR_ARBGNT_CPU_STATUS_0
GNT31_GNG0: Each bit is set by hardware when the corresponding arbitration semaphore
31:0 X ownership is granted to the CPU. Interrupt is cleared when the CPU writes the ARB_SMP.PUT
register with the corresponding bit set.
3.5.2.2 PRI_ICTLR_ARBGNT_CPU_ENABLE_0
GER31_GER0: Writing a 1 in any bit position will enable the corresponding arbitration
31:0 0x0
semaphore interrupt.
3.5.2.3 PRI_ICTLR_ARBGNT_COP_STATUS_0
GNT31_GNG0: Each bit is set by hardware when the corresponding arbitration semaphore
31:0 X ownership is granted to the COP. The interrupt is cleared when the COP writes the
ARB_SMP.PUT register with the corresponding bit set.
3.5.2.4 PRI_ICTLR_ARBGNT_COP_ENABLE_0
GER31_GER0: Writing a 1 in any bit position will enable the corresponding arbitration
31:0 0x0
semaphore interrupt.
This subsection describes the registers for Hier group interrupts for the CPU and the COP.
3.5.3.1 HIER_GROUP_CPU_ENABLE_0
CPU_ENABLE: Enable for the hier group interrupt for the CPU. Writing a 1 in any bit position will enable
31:0 0x0
the corresponding interrupt.
3.5.3.2 HIER_GROUP_CPU_STATUS_0
31:0 X CPU_STATUS: Status for the hier group interrupt for the CPU.
3.5.3.3 HIER_GROUP_COP_ENABLE_0
COP_ENABLE: Enable for the hier group interrupt for the COP. Writing a 1 in any bit position will enable
31:0 0x0
the corresponding interrupt.
3.5.3.4 HIER_GROUP_COP_STATUS_0
31:0 X COP_STATUS: Status for the hier group interrupt for the COP.
3.5.3.5 HIER_GROUP_FIR_STATUS_0
3.5.3.6 HIER_GROUP_FIR_SET_0
3.5.3.7 HIER_GROUP_FIR_CLEAR_0
3.5.4.1 EVP_RESET_VECTOR_0
Offset: 0x0 | Read/Write: RO | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
4.0 SEMAPHORES
These semaphores provide a hardware locking mechanism to ensure that when a processor is already using a resource, the
second processor is not granted that resource. There are 32 bits of arbitration semaphores provided in the system. The
hardware does not enforce any resource association to these bits and it is left to the user to assign and use these bits.
Any processor that needs to access a particular resource will request for the corresponding bit in the arbitration semaphores
by writing a one to that bit in the Arbitration Semaphore Request register (SMP_GET register). Firmware will then check the
corresponding bit in the Semaphore Granted Status register (SMP_GNT_ST register). If the requesting processor has been
granted the resource, then the status returned will be a one.
Alternately, the processor can configure the interrupt controller to generate an interrupt when the resource becomes available.
When the processor has finished using the resource, it releases the resource by writing a one to the corresponding bit in the
Arbitration Semaphore Put Request register (SMP_PUT register). Additionally, pending request status is provided through the
Arbitration Request Pending Status register (SMP_REQ_ST register).
(Note that an alternative mechanism to this exists in the Atomics block. Please refer to the corresponding section of this
document for further details. At the time of this writing, NVIDIA software does not make use of the Atomics block.)
4.2.1.1 ARB_SEMA_SMP_GNT_ST_0
31:0 X ARB_31_ARB_0: A one in any bit indicates that the processor reading this register as
granted status for that bit. A zero indicates semaphore not granted.
4.2.1.2 ARB_SEMA_SMP_GET_0
31:0 0x0 GET_31_GET_0: Writing a one in any bit is a request for that semaphore bit by the
processor performing the register write.
4.2.1.3 ARB_SEMA_SMP_PUT_0
31:0 0x0 PUT_31_PUT_0: Writing a one in any bit will clear the corresponding semaphore bit by
the processor performing the register write.
4.2.1.4 ARB_SEMA_SMP_REQ_ST_0
31:0 X REQ_31_REQ_0: A one in any bit indicates a request pending status. The corresponding
bits are set when the request for the individual resource is pending. The read by the CPU
of this register shows the pending status for the CPU and a read of this register by AVP
(COP) shows the pending status for AVP.
4.2.2.1 RES_SEMA_SHRD_SMP_STA_0
4.2.2.2 RES_SEMA_SHRD_SMP_SET_0
SET_31_SET_0: Semaphore set register. Writing a one to any bit will set the corresponding semaphore
31:0 0x0
bit. Shared resource set-bit requests.
4.2.2.3 RES_SEMA_SHRD_SMP_CLR_0
4.2.2.4 RES_SEMA_SHRD_INBOX_0
TAG: Set when the COP writes this register and cleared when CPU writes this register with this bit set
to 1 (write one clear).
29 0x0
0 = INVALID
1 = VALID
IN_BOX_STAT: General-purpose data bits, suggested usage is for INBOX status (software can change
27:24 0x0
the definition)
IN_BOX_CMD: General-purpose data bits, suggested usage is for INBOX command (software can
23:17 0x0
change the definition)
IN_BOX_DATA: General-purpose Inbox data bits, suggested usage is for INBOX data (software can
16:0 0x0
change the definition)
4.2.2.5 RES_SEMA_SHRD_OUTBOX_0
TAG: Set when the CPU writes this register and cleared when the COP writes this register with this bit
set to 1 (write one clear).
29 0x0
0 = INVALID
1 = VALID
OUT_BOX_STAT: General-purpose data bits, suggested usage is for Outbox OUTBOX status (software
27:24 0x0
can change the definition)
OUT_BOX_CMD: General-purpose data bits, suggested usage is for Outbox OUTBOX command
23:17 0x0
(software can change the definition)
OUT_BOX_DATA: General-purpose Outbox data bits, suggested usage is for OUTBOX data (software
16:0 0x0
can change the definition)
Power on reset (SYS_RESET_N_) is the primary reset for the Tegra K1 chip and is provided by the external PMC.
A single external 32.768 kHz clock, normally provided by the Power Manager Integrated Circuit (PMIC)
An oscillator clock (OSC) at 12, 13, 16.8, 19.2, 26, 38.4, or 48 MHz, provided by an external crystal. Not all these
frequencies may be supported by software.
Clock skippers:
An M/N clock-skipping divider that is used to generate the CPU clock and also the Tegra K1 "system clock"
(sclk).
Clock skippers that are used to generate the "AHB clock" (hclk) and "APB clock" (pclk). One that divides down
by a 2-bit unsigned value (U2).
Clock dividers:
An unsigned 16-bit divider (U16) that is the divider for the I2C and UART devices.
An unsigned 8-bit divider that provides 7 bits of mantissa and 1 bit of fraction (U7.1). Tegra K1 devices have
reduced the number of divider types and in particular this U7.1 divider is the default divider for most all blocks in
Tegra K1 devices.
Note: The clock-skipping divider and the U7.1 divider when programmed with the 1b fraction do
not create 50/50 duty-cycle clock waveforms and may not be suitable for all modules
under all circumstances.
Clock multiplier:
A times-two multiplier used to double the external reference frequency by delaying and XORing the input clock
with a 4-bit programmable delayed reference clock. Care must be exercised when using this dual-frequency and
widely varying duty-cycle clock.
Sources
Switches
Distribution and skew balancing
Second-level non-functional clock gates
Core clocks originate from external clock sources which are used by on-chip PLLs to generate a set of primary clock sources.
Secondary clock sources are created by dividing down various PLL outputs. This group of external, PLL, and divided PLL
clocks constitutes the clock sources.
These sources feed the clock switches. Each module has its own switch. A clock switch consists of one or more clock sources
selected through a Clock Source Selection Mux and driving a clock divider. Multiple clock source options are available to the
module divider to allow software to choose a clock frequency based on the unit’s performance requirements and overall SOC
power. Switching a clock source away from a PLL when it is locking after being reprogrammed to a new frequency may also
be required. There are three types of dividers: fixed divide value, fractional divider, or clock skipping (pulse eating) divider.
The table below lists which clock source they are derived from and their divider size.
int_pllA_out
dbg_oscout
ck32khz_IB
(# of bits)
(# of bits)
pllM_out
pllC_out
pllP_out
pllC_out1 x 8
pllM_out1 x 8
pllP_out1 x 8
pllP_out2 x 8
pllP_out3 x 8
pllP_out4 x 8
pllP_out5 x 8
pllA_out0 x 8
car_clk_m
Trim
dfllCPU_out
DFLL
oscfi
glitchless
dbg_oscout
/2 osc_div_clk
pllX
pllX_out_g
/4 /1 or /2
pllxlp
pllC_out
NV pllC_out1
pllC divider
pllC2_out
pllC2
pllC3_out
pllC3
pllM_out
NV pllM_out1
pllM divider
pllD_out
pllD_out0
pllD /2
pllU_12
pllU_48
pllU pllU_60
pllU_480
PLLD2 pllD2_out0
PLLDP pllDP_out0
PLLC4 pllC4_out0
pllREFE_out
pllP_out
pllP
pllP_out1
NV NV pllA_out0
divider
pllA divider
NV pllP_out2
divider
NV pllP_out3
divider
NV pllP_out4
divider
NV pllP_out5
divider
ck32khz
clk32khz_IB
clk_s
car_clk_s
Trim
The two tables below give a quick overview of the root clock generators. They include the clock sources and the divider type
and size. For example, the ACTMON root clock has 6 clock sources (000=pllP_out, 001=pllC2_out, 010=pllC_out,
011=pllC3_out, 100=ck32khz_IB, 110=dbg_oscout) and has an 8-bit wide U7.1 fractional divider. The default reset value is
shown as an underlined value such as 6.
Notes:
Clock source pllX_out is an output of a mux that can select between the pllX_out clock and a predivide-by-2 pllX_out
clock. Clock source dfllCPU_out is an output of a mux that can select between the dfllCPU_out clock and a
predivide-by-2 dfllCPU_out.
When EMC clock source = 4, the U7.1 divider is bypassed/ignored. This setting will give a very short low jitter clock
path from pllM_out to EMC clock.
When clock source = 14 or 15, in addition to being selected into the glitch-less switching logic in CAR, the selected
clock will also bypass the U7.1 divider creating a short low jitter clock path to the output clock.
The Clock Skipper is controlled by SOC Therm hardware.
spdif_audio_2x_sync_clk
pllM_out_for_emc
pllE_clockout
dfllCPU_out
ck32khz_IB
pllP_out4_t
pllP_out3_t
pllD2_out0
pllM_out1
pllC2_out
pllC3_out
pllC_out1
pllA_out0
pllD_out0
pllP_out2
pllM_out
pllC_out
pllP_out
pllX_out
oscout
actmon_clk_t 6 2 1 3 4 0
adx0_r_clk 6 2 1 3 4 0
adx1_r_clk 6 2 1 3 4 0
amx0_r_clk 6 2 1 3 4 0
amx1_r_clk 6 2 1 3 4 0
audio_r_clk 6 2 1 3 4 0
cilab_clk_t 6 2 0
cilcd_clk_t 6 2 0
cile_clk_t 6 2 0
clk72mhz_clk 3 1 2 0
csite_clk_t 6 2 1 3 4 0
dam0_r_clk 6 2 1 3 4 0
dam1_r_clk 6 2 1 3 4 0
dam2_r_clk 6 2 1 3 4 0
display_clk_t 6 4 1 0 3 2 5
displayb_clk_t 6 4 1 0 3 2 5
dsia_lp_clk_t 6 2 0
dsib_lp_clk_t 6 2 0
dvfs_ref_r_clk 6 2 1 3 4 0
spdif_audio_2x_sync_clk
pllM_out_for_emc
pllE_clockout
dfllCPU_out
ck32khz_IB
pllP_out4_t
pllP_out3_t
pllD2_out0
pllM_out1
pllC2_out
pllC3_out
pllC_out1
pllA_out0
pllD_out0
pllP_out2
pllM_out
pllC_out
pllP_out
pllX_out
oscout
dvfs_soc_r_clk 6 2 1 3 4 0
emc_dll_clk_t 3 1 5 6 4 2
emc_latency_clk_t 3 1 5 6 4 2
entropy_r_clk 1 2 3
extperiph1_clk 3 1 2 0 4
extperiph2_clk 3 1 2 0 4
extperiph3_clk 3 1 2 0 4
hda_r_clk 6 2 1 3 4 0
hdmi_audio_clk_t 3 1 2
hdmi_clk_t 6 4 1 0 3 2 5
host1x_clk_t 2 1 3 0 4 6
hsi_clk_t 6 2 1 3 4 0
i2c1_r_clk 6 2 1 3 4 0
i2c2_r_clk 6 2 1 3 4 0
i2c3_r_clk 6 2 1 3 4 0
i2c4_r_clk 6 2 1 3 4 0
i2c5_r_clk 6 2 1 3 4 0
i2c6_r_clk 6 2 1 3 4 0
i2c_slow_clk 6 2 1 3 4 0
i2s0_r_clk 6 4 0
i2s1_r_clk 6 4 0
i2s2_r_clk 6 4 0
i2s3_r_clk 6 4 0
i2s4_r_clk 6 4 0
int_emc_clk 3 1 5 6 0 4 2
int_hda2codec_2x_clk 6 2 1 3 4 0
isp_r_clk_t 6 1 4 5 0 2 3
la_clk_t 6 2 1 3 4 0
lvds0_pad_clockin_t 6 4 1 0 3 2 5
spdif_audio_2x_sync_clk
pllM_out_for_emc
pllE_clockout
dfllCPU_out
ck32khz_IB
pllP_out4_t
pllP_out3_t
pllD2_out0
pllM_out1
pllC2_out
pllC3_out
pllC_out1
pllA_out0
pllD_out0
pllP_out2
pllM_out
pllC_out
pllP_out
pllX_out
oscout
mselect_clk_t 6 2 1 3 5 4 0
msenc_clk_t 2 1 3 0 4 6
nor_r_clk 6 2 1 3 4 0
owr_r_clk 6 2 1 3 4 0
pex_txclkref
pex_txclkref_grp0
pex_txclkref_grp1
pex_txclkref_grp2
pex_txclkref_tms
pwm_r_clk 6 2 1 3 4 0
sata_oob_clk_t 6 2 4 0
sclk_sel 0 5 6 2 1 4 7
sdmmc1_r_clk_t 6 2 1 3 4 0 5
sdmmc2_r_clk_t 6 2 1 3 4 0 5
sdmmc3_r_clk_t 6 2 1 3 4 0 5
sdmmc4_r_clk_t 6 2 1 3 4 0 5
se_clk_t 6 2 1 3 4 0 5
soc_therm_t 1 4 5 0 2 3
spdif_in_r_clk 2 1 3 4 0
spdif_out_r_clk 6 4 0 2
spi1_clk_t 6 2 1 3 4 0
spi2_clk_t 6 2 1 3 4 0
spi3_clk_t 6 2 1 3 4 0
spi4_clk_t 6 2 1 3 4 0
spi5_clk_t 6 2 1 3 4 0
spi6_clk_t 6 2 1 3 4 0
sys2hsio_sata_r_clk 6 2 4 0
traceclkin_clk_t 6 2 1 3 4 0
tsec_clk_t 6 2 1 3 4 0 5
vic_clk_t
vfir_clk_t
vde_clk_t
adx1_r_clk
adx0_r_clk
uartc_r_clk
uartd_r_clk
uartb_r_clk
uarta_r_clk
amx0_r_clk
xusb_fs_clk
actmon_clk_t
tsensor_r_clk
vi_sensor_clk
xusb_core_clk
vi_sensor2_clk
xusb_120m_clk
xusb_falcon_clk
xusb_core_dev_clk
7
6
6
6
6
6
6
6
4
pllREFE_clockout oscout
3
3
3
4
1
2
2
2
2
2
2
2
2
2
2
uhsic_clk480pll pllC_out
4
4
4
6
5
3
3
3
3
3
3
3
3
3
fo_48m_out 3 pllC3_out
2
6
audio_clk_src1111 ck32khz_IB
0
0
0
0
4
4
4
4
4
4
dam0_clk_src1111 pllM_out
dam1_clk_src1111 pllM_out_for_emc
4
1
1
1
2
4
4
4
0
0
0
0
0
0
0
dam2_clk_src1111 pllP_out
i2s0_audio_sync_clk pllP_out4_t
i2s1_audio_sync_clk pllP_out3_t
i2s3_audio_sync_clk dfllCPU_out
i2s4_audio_sync_clk pllC_out1
pex_pad_txclkref pllP_out2
pex_pad_txclkref_div1 pllM_out1
3
6
6
6
pex_pad_txclkref_div2 pllA_out0
pllC4_clockout spdif_audio_2x_sync_clk
pllP_out0 pllD_out0
sys2hsio_clk_m_sys_clk pllD2_out0
8
8
8
8
Divide pllE_clockout
Tegra K1 Technical Reference Manual
Clock and Reset Controller
63
Tegra K1 Technical Reference Manual
Clock and Reset Controller
sys2hsio_clk_m_sys_clk
pex_pad_txclkref_div1
pex_pad_txclkref_div2
i2s0_audio_sync_clk
i2s1_audio_sync_clk
i2s2_audio_sync_clk
i2s3_audio_sync_clk
i2s4_audio_sync_clk
dam1_clk_src1111
dam2_clk_src1111
audio_clk_src1111
dam0_clk_src1111
pllREFE_clockout
pex_pad_txclkref
uhsic_clk480pll
pllC4_clockout
fo_60m_out
fo_48m_out
pllP_out0
Divide
amx1_r_clk 8
audio_r_clk 7 8
cilab_clk_t 8
cilcd_clk_t 8
cile_clk_t 8
clk72mhz_clk 8
csite_clk_t 8
dam0_r_clk 7 8
dam1_r_clk 7 8
dam2_r_clk 7 8
display_clk_t 0
displayb_clk_t 0
dsia_lp_clk_t 8
dsib_lp_clk_t 8
dvfs_ref_r_clk 8
dvfs_soc_r_clk 8
emc_dll_clk_t 8
emc_latency_clk_t 8
entropy_r_clk 0 8
extperiph1_clk 8
extperiph2_clk 8
extperiph3_clk 8
hda_r_clk 8
hdmi_audio_clk_t 0 8
hdmi_clk_t 8
host1x_clk_t 8
hsi_clk_t 8
i2c1_r_clk 16
i2c2_r_clk 16
sys2hsio_clk_m_sys_clk
pex_pad_txclkref_div1
pex_pad_txclkref_div2
i2s0_audio_sync_clk
i2s1_audio_sync_clk
i2s2_audio_sync_clk
i2s3_audio_sync_clk
i2s4_audio_sync_clk
dam1_clk_src1111
dam2_clk_src1111
audio_clk_src1111
dam0_clk_src1111
pllREFE_clockout
pex_pad_txclkref
uhsic_clk480pll
pllC4_clockout
fo_60m_out
fo_48m_out
pllP_out0
Divide
i2c3_r_clk 16
i2c4_r_clk 16
i2c5_r_clk 16
i2c6_r_clk 16
i2c_slow_clk 8
i2s0_r_clk 2 8
i2s1_r_clk 2 8
i2s2_r_clk 2 8
i2s3_r_clk 2 8
i2s4_r_clk 2 8
int_emc_clk 0
int_hda2codec_2x_clk 8
isp_r_clk_t 7 8
la_clk_t 8
lvds0_pad_clockin_t 8
mselect_clk_t 8
msenc_clk_t 8
nor_r_clk 8
owr_r_clk 8
pex_txclkref 0 8
pex_txclkref_grp0 1 0 8
pex_txclkref_grp1 1 0 8
pex_txclkref_grp2 1 0 8
pex_txclkref_tms 1 0 8
pwm_r_clk 8
sata_oob_clk_t 8
sclk_sel 3 8
sdmmc1_r_clk_t 8
sdmmc2_r_clk_t 8
sys2hsio_clk_m_sys_clk
pex_pad_txclkref_div1
pex_pad_txclkref_div2
i2s0_audio_sync_clk
i2s1_audio_sync_clk
i2s2_audio_sync_clk
i2s3_audio_sync_clk
i2s4_audio_sync_clk
dam1_clk_src1111
dam2_clk_src1111
audio_clk_src1111
dam0_clk_src1111
pllREFE_clockout
pex_pad_txclkref
uhsic_clk480pll
pllC4_clockout
fo_60m_out
fo_48m_out
pllP_out0
Divide
sdmmc3_r_clk_t 8
sdmmc4_r_clk_t 8
se_clk_t 8
soc_therm_t 8
spdif_in_r_clk 8
spdif_out_r_clk 8
spi1_clk_t 8
spi2_clk_t 8
spi3_clk_t 8
spi4_clk_t 8
spi5_clk_t 8
spi6_clk_t 8
sys2hsio_sata_r_clk 8
traceclkin_clk_t 8
tsec_clk_t 8
tsensor_r_clk 8
uarta_r_clk 17
uartb_r_clk 17
uartc_r_clk 17
uartd_r_clk 17
vde_clk_t 8
vfir_clk_t 8
vi_clk_t 7 8
vi_sensor2_clk 8
vi_sensor_clk 8
vic_clk_t 8
xusb_120m_clk 1 3 0 8
xusb_core_clk 5 0 8
xusb_core_dev_clk 5 0 8
sys2hsio_clk_m_sys_clk
pex_pad_txclkref_div1
pex_pad_txclkref_div2
i2s0_audio_sync_clk
i2s1_audio_sync_clk
i2s2_audio_sync_clk
i2s3_audio_sync_clk
i2s4_audio_sync_clk
dam1_clk_src1111
dam2_clk_src1111
audio_clk_src1111
dam0_clk_src1111
pllREFE_clockout
pex_pad_txclkref
uhsic_clk480pll
pllC4_clockout
fo_60m_out
fo_48m_out
pllP_out0
Divide
xusb_falcon_clk 5 0 8
xusb_fs_clk 6 2 0 8
Changing the fractional divider ratio is also glitch-less and will use one of two mechanisms. When used in a switch with a
clock source selection mux, the switching state-machine described above is used. When used without a clock source
selection mux such as in the pllP_out1,2,3,4,5 dividers, the divider is not stopped and seamlessly switches to the new
frequency at the end of a clock period. In this latter scheme, no dead cycles exist– between the original frequency and then
the newly requested frequency.
In all structures above, when the clock is gated off, it occurs at the end of the clock period so that 1) there are no runt pulses,
and 2) the output clock will be stopped low.
CAR
Software SOC_Therm
Registers HW Controls
Ramp
Controller
SOC_Therm
HW Controls
Ctrls DynFreq
SOC_Therm
Oscillator
PLLX Div2
Clock
Skipper
/2
div CG cpu_clk
ftm
Clock Switch
Oscillator DFLL
/N fcpu_atclks_clken
/2 fcpu_periphclk_clken
PLLX
PLLX is one of two possible primary clock sources for the FCPU. It contains two dynamic frequency mechanisms: a fast one
that could overshoot and a slower one with no overshoot.
DFLL
The alternate primary clock source for the FCPU is the DFLL. The DFLL is based around a ring oscillator with supporting
structures for di/dt management and frequency control.
Clock Skipper
An M/N clock skipper that is managed by the SOC Thermal module.
Clock Switch
The clock switch consists of a clock source selection mux that can switch glitchlessly between a number of clock sources
including the PLLX and DFLL. This is followed by a programmable U7.1 divider. For low jitter when the divider is not required,
a direct bypass path from PLLX or DFLL inputs to the output is also provided.
The following figure shows the details of the clock switch, clock skipper, SOC Therm Div 2, and root clock generation. The
clock sources to the clock source selection mux are described in the table entitled “Root Clock Clock Sources” in the “Main
Clock Sources” section.
Clock
skip 1
cclk_sel
int_car_cclk
dfllCPU_out
pllX_out soc_therm_fcpu_div2_sync UI_cpu_clk
UI_clk_mux
0 CG
cpu_clk_ss
muxed_clk out_clk
0
UI_test_mux
int_out_clk
CG 0 1
muxed_ftm_clk
1
enb_out_clk
FTM 1
test_t1clk
OR
test_t1clk
T tmc2clk_fast_test_mode_cpu
low_jitter_clk_sel
tmc2clk_bypass_t1clk
low_jitter_clk_sel2
tmc2clk_disable_clock_gating
tmc2clk_bypass_t1clk
sync
nor
cpu_part_clk_drv_ftop
clock
func_dis_clk
car_clk_m switch mpcore_clk
FSM
scan scan_dis_clk
debug disable_clock_gating
clk2tmc_polling
FSM
/N fcpu_atclks_clken
disable_clock_gating
/2 fcpu_periphclk_clken
cclk_sel
int_car_cclk
pllX_out
UI_clk_mux
UI_cpulp_clk
muxed_clk UI_test_mux
0 CG
int_out_clk out_clk
CG 0
muxed_ftm_clk 1
enb_out_clk
FTM 1
test_t6clk
OR
test_t6clk T low_jitter_clk_sel
tmc2clk_fast_test_mode_cpu
tmc2clk_bypass_t6clk
tmc2clk_disable_clock_gating
tmc2clk_bypass_t6clk
sync
nor
clock cpu_part_clk_drv_stop
func_dis_clk
car_clk_m switch
FSM
mpcorelp_clk
scan scan_dis_clk
debug
clk2tmc_polling
FSM disable_clock_gating
/N scpu_atclks_clken
disable_clock_gating
/2 scpu_periphclk_clken
When changing the EMC frequency, internal logic sequencing handles the requirement that the DRAMs must be placed into
self-refresh before the clock frequency is changed. Certain register fields when written do not get immediately applied but
rather are applied at the correct time during the sequencing. These registers are referred to as "shadowed". Other register
fields initiate the sequencing state-machine and therefore should be written last. At the end of the sequencing, the DRAMs are
restored to being operational.
1. Program the MC/EMC shadow registers corresponding to the new frequency. These registers are “shadowed”, as
noted in their descriptions, and will not impact the hardware until later during the clock change sequence.
2. Program the EMC clock change FIFO (CCFIFO) with the pre-/post-clock change sequence.
3. Program CAR CLK_SOURCE_EMC register to trigger a clock change. At this point hardware takes the following
actions:
The CAR block asserts the clock change request to the EMC.
The EMC stops MC transactions, flushes its internal outstanding requests, executes MRSs/enter self-refresh,
and then updates the timing to copy the EMC shadow
Register contents (including CDB phase select) to EMC current register.
The EMC asserts clock change acknowledge to the CAR block.
The CAR stops the clock to PLLM/CDB, updates to the new clock source, and passes the EMC CDB phase
select control to the CDB.
The CAR re-enables the clock to PLLM/CDB.
The CAR de-asserts the clock change request to the EMC (telling it the clock change is done).
sys_clk_switch
pllM_out1
ck32khz_IB
pllC_out
UI_clk_mux
pllP_out2
muxed_clk
pllP_out
UI_test_mux
int_clk int_out_clk
pllP_out4
test_clk_trim CG super clk
pllC_out1 out_clk sclk_sel
divider
dbg_oscout (clk skip)
test_clk FTM sync_enb_sclk
sync
test_clk enb_out_clk sclk_sys_clk_tt
T fast_test_mode CG
nor
clock Divider sync_enb_hclk
car_clk_m
switch func_dis_clk (clk skip)
FSM hclk_sys_clk_tt
CG
scan scan_dis_clk
debug clk2tmc_polling
FSM Divider sync_enb_pclk
(clk skip)
pclk_sys_clk_tt
CG
jtag_fast_mode
jtag_clk_out 0
Glitchless
ClkPlanner
jtag_tck_IB jtag_tck_part_ctr_IB 1
Jtag_port_clk
0
Jtag_reg_clk ClkPlanner To Modules:
Glitchless
Sdbg
Trim jtag_controller
1 (s1_selected->jtag_clk_ready) test_bus_core
Jtag Registers
reshift_clk_req fast_clk_ tbc2clk_req
with_repair_freq (!TRST_ | tbc2clk_req0 | reshift_clk_switch_req)
pllP_out0 (No test mode bypass clk)
(408MHz)
CG ÷
Ratio
(1..128)(divw=8)
1
Sdbg CG fuse_clk
Trim
Glitchless
OSCFI To Modules:
dbg_osc_out ClkPlanner
0
(s1_selected->clk2jtag_reshift_clk_switch_ack)
CG fuse2jtag_clk NV_fuse
fuse2jtag Interface
(Xtal_in)
reshift_clk_req CG host2jtag_clk
ClkPlanner
Sdbg CG
Trim
jtag2tbc_intfc_clk
clk_m_sys Sdbg CG
test_mux Trim
car_clk_m
CG mca_clk_m
CG mcb_clk_m
5.3 PLLs
5.3.1 DFLLCPU
DFLLCPU is a dedicated clock source for the Fast CPU. The DFLL is based on a ring oscillator and translates voltage
changes into frequency compensation changes needed to prevent the CPU from failing.
5.3.2 PLLX
Tegra K1 devices require an alternative clock source in addition to DFLLCPU. Additionally, for EDP management and to avoid
creating di/dt problems, this PLL needs a dynamic frequency changing mechanism.
Similar to prior Mobile products, PLLX is dedicated for this purpose. This PLL will feed to both the Fast CPU Cluster and
Shadow CPU. This PLL cannot be easily used opportunistically for other units.
1. After powering up, the PLL rails (in case of LP0 exit), change IDDQ from 1 to 0.
4. Change ENABLE from 0->1 while the reference clock is running and stable.
In addition to PLLE, to ensure that oscillator clock jitter gets filtered out prior to feeding it to PLLE, a reference PLL (refPLLE) is
required. There are additional PLL(s) in the pad brick used for physical layer signaling for USB 3.0. For cases where spread
spectrum might not be required and jitter may not be an issue, an option is kept to bypass PLLE to save power. This option
requires that the crystal be 12 MHz or 48 MHz to be able to create the required PLLE output frequency of 100 MHz.
The dedicated PLL (PLLU) is used to generate the low jitter reference clock for UTMI_PLL. There is a provision to bypass
PLLU for cases where a slightly higher jitter is acceptable for UTMI PLL reference clock. USB2 mode requires 8 phase data
sampling logic per USB2 port to capture data. This requires a dedicated PLL (UTMI_PLL) with 5 data sampling logic ports.
5.3.5 PLLM
The DDR interface in Tegra K1 devices is required to operate at 1866 MT/s. This means that the EMC should work at 933
MHz and the MC should work at 466 MHz. The memory subsystem (DDR, EMC, and MC) is required to support a number of
discrete frequencies such as DDR1866, DDR 1600, DDR 1333, DDR 1066, DDR 800 as well as slower frequencies to
conserve power. A dedicated PLL (PLLM) is used for memory clocks.
DDR interface signaling also needs a DLL to support ¼ clock shift to reliably capture/drive DQ. In addition, a CDB (clock
distribution buffer) is required to get a low jitter/skew clock for each byte/command group.
PLLP is fixed at generating 408 MHz, and PLLA takes in 9.6 MHz (PLLP / 42.5) to generate the two required audio
frequencies.
Because PLLP generates a fixed frequency clock for audio, it can also be divided down and used for other modules which
might need a fixed frequency clock.
Most audio codecs have their own PLL, which turns out to be more power efficient, so it is possible that PLLA does not get
used in a typical system for audio. In such a case PLLA can be used as a general purpose PLL.
PLLD is a dedicated PLL (with differential clock outputs and some DSI specific functionality) which should be used for DSI0
and DSI1. This PLL can be configured to generate the pixel clock from any oscillator frequency. These PLLs consume high
power (estimated at 4 times a regular general purpose PLL) and should be used only if DSI is required. For HDMI, the pad
brick has PLLs which are used for interface signaling. These PLLs expect a pixel clock as an input.
1. After powering up the PLL rails (in case of LP0 exit), change IDDQ from 1 to 0.
4. Change ENABLE from 0->1 while the reference clock is running and stable.
PLLC4 is used to provide 600 MHz dedicated output to VI and ISP blocks.
1. After powering up the PLL rails (in case of LP0 exit), change IDDQ from 1 to 0.
4. Change ENABLE from 0->1 while reference clock is running and stable.
1. PLL rails are turned ON (in case they are OFF when coming out from LP0)
4. ENABLE is also asserted with guarantee that the reference clock is running.
1. Reset due to an indication from a thermal sensor. The thermal sensor module would assert a reset signal
tsensor2pmc_reset, which would in turn generate a reset for the whole chip and in the process de-assert
tsensor2pmc_reset itself.
2. Expiry of watchdog timer. The watchdog timer has a counter which is loaded with an initial value and ticks on periodic
intervals. Once the counter expires, it reloads itself with the initial value, increments an expiry count, and generates
an event for software. If software acknowledges the event, the expiry count is cleared and the counter is loaded back
with initial value. This process continues indefinitely. Depending on the current expiry count, the event generated for
software could be different. There are 2 types of watchdog timers in Tegra K1 systems depending on how they
generate the reset:
Deadman timer (referred as WDT in reset code): This is the legacy implementation in which:
1st expiry an interrupt is issued
2nd expiry a reset is issued. This reset, however, resets only a subset of units.
Watchdog timer (referred as WDT2 in reset code):
1st expiry – interrupt is issued
2nd expiry – FIQ is issued
3rd expiry – CPU reset is issued
4th expiry – full system reset – This is the relevant reset for this section
3. Software reset. This reset is controlled by a configuration bit in the PMC address space (main_swrst). Once asserted,
this result in a reset generation for the whole chip and in the process de-asserts itself.
4. LP0 wakeup reset. This is controlled by the logic within the PMC.
The POR (SYS_RESET_N_) is de-asserted by the external PMC after the power sequencing is done and after the RTC clock
(clk_32KHz) and crystal clock is already running. For the other sources, the reset is originated within the Tegra K1 hardware.
The following registers are used for the Clamp/PG-Enable control of each PG partition:
PMC_PWRGATE_TOGGLE
PMC_REMOVE_CLAMPING_CMD
The following registers are used for the Clock/Reset control of each unit:
RST_DEVICES_L/H/U/V/W/X
CLK_OUT_ENB_L/H/U/V/W/X
In general, clamp-enable should be asserted before reset (as shown in the diagram). This works with synchronous or
asynchronous clamping. However, if a unit can guarantee that its output signals will have the same clamp values as their pre-
clamp values (idle values) as well as their reset values, then clamp and reset ordering is not critical. Note it is non-trivial to
verify the above guarantee.
Clamp
Enable
Reset
Clock
Pwr Gate
Enable
Virtual VDD
In general, the clamp enable should be de-asserted before reset (as shown in the diagram). This works with synchronous or
asynchronous clamping. However, if a unit can guarantee that its output signals will have same clamp values as its post-clamp
values (idle values), then clamp and reset ordering is not critical for power ungating. Note it is non-trivial to verify the above
guarantee.
Power
Gate
Enable
Virtual VDD
Clock
Clamp
Enable
Reset
“zones” PG-enable controls. There are two types of power-gating controllers: CPU and SOC power-gating controllers. The
following sections describe both types of controllers.
For all non-CPU SOC partitions, power-gating can only be turned on/off by direct register write. For CPU (shadow) SOC
partitions, power-gating can be turned on/off via flow-controller. Refer to “SOC Power Gating Controllers” in the PMC section.
If the GPU has its own rail, then the software mutual exclusion for GPU ELPG and SoC power gating is not needed. But for a
heavily cost reduced system where the GPU and SoC might share a rail, the software must interlock the two mechanisms in
order to avoid di/dt problems (which could result if the two mechanisms were to alter power gating state simultaneously).
VCO = (Fi / M) * N,
Fo = VCO / (2 ^ P)
Note: Not all PLLs have the simple mapping for the P value listed above. Contact your NVIDIA
representative for assistance.
There are three requirements for each PLL that must be complied with:
Ensure that no enabled module is using the PLL that will change.
Program the new PLL settings
Wait for PLL stabilization
Change the divider values for each clock that will use the PLL to divide-down to the target frequency, and change the
module clock sources for all modules that will use the new PLL settings.
divisor = (dddddddddddddddd)
divisor = (dddddddddddddddd + 1)
The glitch-free clock divider to a running module can also be changed. All modules support changing the clock divider ratio
without disabling the clock; write the new divider to the appropriate register See the section on Power below.
To change the clock source and divider (either after system reset or for any other reason), follow this sequence:
5.6.5.1 Power
The following guidelines should be followed in pursuit of the lowest use-case power consumption:
Target the least number of PLLs running at their lowest allowable frequencies for the given use-case.
For each module, use the source with the lowest frequency that provides adequate performance for the use case.
Turn off all clocks not required for the given use-case - employ maximum clock-gating.
Use hardware dynamic clock bursting whenever possible. Turn on the desired frequency, burst to completion, and
then disable the input frequency (allowing PLLs to be turned off or their output frequencies to be lowered)
Use the CPU and COP/system super clock divider for lower CPU frequency where possible.
Disable the oscillator input and/or clock outputs when they are not in use.
The general procedure for power ungating an SOC power domain is as follows:
In some cases, partitions require specific deviations from the general procedure. Deviations are covered in the domain-specific
sections below.
This table summarizes the respective clock and reset bits and MC clients in each SOC power domain.
DIS DISPLAY DC
VE Power Gating
1. Flush MC clients VI and ISP by setting the following bits:
MC_CLIENT_HOTRESET_CTRL_0.VI_FLUSH_ENABLE
MC_CLIENT_HOTRESET_CTRL_0.ISP2_FLUSH_ENABLE
MC_CLIENT_HOTRESET_CTRL_1_0.ISP2B_FLUSH_ENABLE
Also Poll MC_CLIENT_HOTRESET_STATUS_1_0 until ISP2B_HOTRESET_STATUS is set.
2. Poll MC_CLIENT_HOTRESET_STATUS_0 until the following bits are set:
VI_HOTRESET_STATUS
ISP2_HOTRESET_STATUS
3. Set the following bits to assert reset to VI, ISP, ISPB, and CSI:
CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0.CLK_ENB_VI
CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0.CLK_ENB_ISP
CLK_RST_CONTROLLER_CLK_OUT_ENB_X_0.CLK_ENB_ISPB
CLK_RST_CONTROLLER_CLK_OUT_ENB_H_0.CLK_ENB_CSI
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_CILAB
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_CILCD
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_CILE
4. Clear the following bits to disable clocks to VI, ISP, ISPB, and CSI:
CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0.CLK_ENB_VI
CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0.CLK_ENB_ISP
CLK_RST_CONTROLLER_CLK_OUT_ENB_H_0.CLK_ENB_CSI
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_CILAB
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_CILCD
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_CILE
5. Write to these APBDEV_PMC_PWRGATE_TOGGLE_0 fields with the following settings:
PARTID = VE
START = ENABLE
6. Poll APBDEV_PMC_PWRGATE_STATUS_0 until the VE bit is set
VE Power Ungating
1. Write to these APBDEV_PMC_PWRGATE_TOGGLE_0 fields with the following settings:
PARTID = VE
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 81
Tegra K1 Technical Reference Manual
Clock and Reset Controller
START = ENABLE
2. Poll APBDEV_PMC_PWRGATE_STATUS_0 until the VE bit is cleared
3. Set the following bits to enable clocks to VI, ISP, ISPB, and CSI:
CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0.CLK_ENB_VI
CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0.CLK_ENB_ISP
CLK_RST_CONTROLLER_CLK_OUT_ENB_X_0.CLK_ENB_ISPB
CLK_RST_CONTROLLER_CLK_OUT_ENB_H_0.CLK_ENB_CSI
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_CILAB
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_CILCD
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_CILE
4. Remove power-gating clamps by writing a 1 to the following bit:
APBDEV_PMC_REMOVE_CLAMPING_CMD_0.VE
5. Poll APBDEV_PMC_REMOVE_CLAMPING_CMD_0 until the VE bit is cleared
6. If needed, clear the following bits to de-assert the reset to VI, ISP, ISPB, and CSI:
CLK_RST_CONTROLLER_RST_DEVICES_L_0.SWR_VI_RST
CLK_RST_CONTROLLER_RST_DEVICES_L_0.SWR_ISP_RST
CLK_RST_CONTROLLER_RST_DEVICES_X_0.SWR_ISPB_RST
CLK_RST_CONTROLLER_RST_DEVICES_H_0.SWR_CSI_RST
7. Enable MC clients VI and ISP by clearing the following bits:
MC_CLIENT_HOTRESET_CTRL_0.VI_FLUSH_ENABLE
MC_CLIENT_HOTRESET_CTRL_0.ISP2_FLUSH_ENABLE
MC_CLIENT_HOTRESET_CTRL_1_0.ISP2B_FLUSH_ENABLE
START = ENABLE
2. Poll APBDEV_PMC_PWRGATE_STATUS_0 until the MPE bit is cleared
3. Set the following bits to enable clocks to the MSENC:
CLK_RST_CONTROLLER_CLK_OUT_ENB_U_0.CLK_ENB_MSENC
4. Remove power-gating clamps by writing a 1 to the following bit:
APBDEV_PMC_REMOVE_CLAMPING_CMD_0.MPE
5. Poll APBDEV_PMC_REMOVE_CLAMPING_CMD_0 until the MPE bit is cleared
6. Clear the following bits to de-assert the reset to the MSENC:
CLK_RST_CONTROLLER_RST_DEVICES_U_0.SWR_MSENC_RST
7. Enable the MSENC MC client by clearing the following bit:
MC_CLIENT_HOTRESET_CTRL_0.MSENC_FLUSH_ENABLE
DCB_HOTRESET_STATUS
3. Set the following bit to assert the reset to DISP2:
CLK_RST_CONTROLLER_RST_DEVICES_L_0.SWR_DISP2_RST
4. Clear the following bits to disable clocks to DISP2:
CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0.CLK_ENB_DISP2
5. Write to these APBDEV_PMC_PWRGATE_TOGGLE_0 fields with the following settings:
PARTID = DISB
START = ENABLE
6. Poll APBDEV_PMC_PWRGATE_STATUS_0 until the DISB bit is set
1. Set the following bits to assert the reset to MIPI_CAL, DPAUX, SOR, HDMI, DP2, DSI and DSIB:
CLK_RST_CONTROLLER_RST_DEVICES_H_0.SWR_MIPI_CAL_RST
CLK_RST_CONTROLLER_RST_DEVICES_X_0.SWR_DPAUX_RST
CLK_RST_CONTROLLER_RST_DEVICES_X_0.SWR_SOR0_RST
CLK_RST_CONTROLLER_RST_DEVICES_H_0.SWR_HDMI_RST
CLK_RST_CONTROLLER_RST_DEVICES_H_0.SWR_DSI_RST
CLK_RST_CONTROLLER_RST_DEVICES_U_0.SWR_DSIB_RST
CLK_RST_CONTROLLER_RST_DEVICES_W_0.SWR_DP2_RST
CLK_RST_CONTROLLER_RST_DEVICES_W_0.SWR_ HDA2HDMICODEC_RST
2. Clear the following bits to disable clocks to MIPI_CAL, DPAUX, SOR, HDMI, DP2, DSI and DSIB:
CLK_RST_CONTROLLER_CLK_OUT_ENB_H_0.CLK_ENB_MIPI_CAL
CLK_RST_CONTROLLER_CLK_OUT_ENB_X_0.CLK_ENB_DPAUX
CLK_RST_CONTROLLER_CLK_OUT_ENB_X_0.CLK_ENB_SOR0
CLK_RST_CONTROLLER_CLK_OUT_ENB_H_0.CLK_ENB_HDMI
CLK_RST_CONTROLLER_CLK_OUT_ENB_X_0.CLK_ENB_HDMI_AUDIO
CLK_RST_CONTROLLER_CLK_OUT_ENB_H_0.CLK_ENB_DSI
CLK_RST_CONTROLLER_CLK_OUT_ENB_U_0.CLK_ENB_DSIB
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_DSIA_LP
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_DSIB_LP
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0.CLK_ENB_DP2
CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0. CLK_ENB_HDA2HDMICODEC
3. Write to these APBDEV_PMC_PWRGATE_TOGGLE_0 fields with the following settings:
PARTID = SOR
START = ENABLE
4. Poll APBDEV_PMC_PWRGATE_STATUS_0 until the SOR bit is set
CLK_RST_CONTROLLER_RST_DEVICES_W_0.SWR_DP2_RST
CLK_RST_CONTROLLER_RST_DEVICES_W_0.SWR_HDA2HDMICODEC_RST
START = ENABLE
6. Poll APBDEV_PMC_PWRGATE_STATUS_0 until the XUSBB bit is set
CLK_RST_CONTROLLER_CLK_OUT_ENB_U_0.CLK_ENB_XUSB_HOST
4. Remove power-gating clamps by writing a 1 to the following bit:
APBDEV_PMC_REMOVE_CLAMPING_CMD_0.XUSBC
5. Poll APBDEV_PMC_REMOVE_CLAMPING_CMD_0 until the XUSBC bit is cleared
6. Clear the following bit to de-assert the reset to XUSB_HOST:
CLK_RST_CONTROLLER_RST_DEVICES_U_0.SWR_XUSB_HOST_RST
7. Enable the XUSB_HOST MC client by clearing the following bit:
MC_CLIENT_HOTRESET_CTRL_0.XUSB_HOST_FLUSH_ENABLE
Because this chip is the system controller, resets are generated in hardware automatically as part of the power-on (POR) or
system (either hardware or software) reset sequence.
In POR, all blocks will be held in reset (with clocks disabled) except the minimal set of modules that are needed for system
boot-up. At POR, the appropriate bits in RST_DEVICES_L/H/U/V/W/X registers are set automatically by hardware. A "1" in
the bit position signifies that block will be held at reset after POR. A "0" in the bit position signifies that block will have its reset
de-asserted after POR.
Similarly for clocks, the appropriate bits in CLK_OUT_ENB_L/H/U/V/W/X registers are set automatically by hardware. A "1" in
the bit position signifies that block will have clock running during and after POR. A "0" in the bit position signifies that block will
not have clock running during or after POR.
Each of the boot block devices will have their reset de-asserted at the end of the POR period (as well as their clocks enabled
and use the Oscillator clock for their clock source). Boot blocks clock dividers are all set to divided-by-one.
During POR or system reset, the reset controller will de-assert reset to the boot blocks first and extend the resets to the
CPU/ARM7 for another 511 oscillator clock periods. This will prevent either processor from talking to a boot device while it is
still in the reset state.
Releasing a non-boot block/device from reset to bring into operation will require software to initiate a carefully controlled
sequence with clock and reset control registers. This sequence must be implemented by software precisely to ensure correct
operation of the hardware.
5.7.1 Precautions
Unless noted elsewhere, all modules support changing the clock divider ratio without disabling the clock.
Unless noted elsewhere, all modules' clock switching is glitch-free except "audio_sync_clk".
For "audio_sync_clk", the clock source select needs to be set up before changing the device clock source to use that
audio clock or to enable the device which use that audio clock.
Before stopping the clock (via CLK_OUT_ENB_L/H/U/V/W/X registers) and/or asserting reset (via
RST_DEVICES_L/H/U/V/W/X registers) to a module, first check the module to make sure it is not active. Stopping
clock/asserting reset while the module is still busy can cause relatively minor problem such as incorrect data
read/written, or catastrophic problem such as system hang. To ensure a module is not active, (a) disable the module
by programming its disable bit if not already done so, and (b) wait until the module is not active by checking for its
busy bit, done bit, count, or similar mechanism.
To set up a non-boot device for operation (only apply if a device has a CLK_SOURCE_<mod> register)
1. Make sure the device's reset is asserted (via RST_DEVICES_L/H/U/V/W/X registers).
2. Enable clock to the device (via CLK_OUT_ENB_L/H/U/V/W/X registers).
3. Change the clock divisor to the device (via CLK_SOURCE_ register).
4. Wait 1 µs to make sure the clock divider has changed.
5. Change the clock source to the device (via the CLK_SOURCE_<mod> register).
6. Wait 2 µs to make sure clock source/device logic is stabilized.
7. De-assert the device's reset (via RST_DEVICES_L/H/U/V/W/X registers).
To change a device's clock divider and/or source after boot-up (only apply if a device has a
CLK_SOURCE_<mod> register):
(A) Method 1 -- (using reset).
1. Make sure the clock to the device is enabled (via CLK_OUT_ENB_L/H/U/V/W/X registers).
2. Depending on the maximum rated frequency of the device and the current and target clock source/divider value,
either change the divider first or the clock source first to avoid a temporary situation where the maximum
frequency for that device is violated. Make sure to wait for 1 µs between changing the divider and clock source
programming.).
3. Wait 2 µs to make sure the device logic is stabilized.
1. Asserting INVERT_DCD adds 1/2 clock period (divider input clock) to the low pulse of a single divided output
clock period during the change. This causes the divided output clock frequency to be lowered for one clock
period.
2. For ratios other than 1.0, de-asserting INVERT_DCD removes 1/2 clock period (divider input clock) from the low
pulse of a single divided output clock period during the change. Because this effectively speeds up the divided
output clock frequency for one clock period, which can cause a module to fail, the module clock frequency may
need to be changed to a lower frequency before de-asserting INVERT_DCD.
3. De-asserting INVERT_DCD with a ratio of 1.0 is unique in that removing 1/2 clock period (divider input clock)
from the low pulse effectively removes the low pulse altogether. The resulting combination of the high pulses on
either side will effectively look like 1/2 clock period was added to the high pulse instead. Thus there occurs a
lower frequency for one clock period rather than an increased frequency like all other divide ratios.
Latency:
Once the INVERT_DCD signal gets to the divider logic, there will be a maximum delay of 6 divider input clocks +
1 divider output clock before the change will complete.
"osc" or "clk_m" which can be either 12 MHz, 13 MHz, 19.2 MHz 26 MHz, 16.8 MHz, 38.4 MHz, or 48 MHz (Not
all the frequencies listed under osc or clk_m can be met).
"clk_s" which is 32 kHz.
(C) PLL divided down clocks (each divider has 7 integer bits and 1 fractional bit).
Note: With the exception of PLLA, the other PLLs all use "osc_div_clk" as the reference clock.
This is the same frequency as "osc" with the exception of the following crystals:
Note: In this document, CPULP, SCPU, and Slow CPU are synonymous. CPUG, FCPU, and
Fast CPU are also synonymous.
Three sets of addresses are provided to support single cluster legacy, CPUG, and CPULP clusters.
Two sets of hardware flops are used to store programmed values for G and LP CPU clusters. Legacy single cluster
registers are aliased to one of these based on the active cluster at the time the register is referenced.
In some cases, only the CPU bit in an otherwise single access register is multi-address accessible, for example,
CLK_ENB_CPU.
5.7.3 CLK_RST_CONTROLLER_RST_SOURCE_0
5.7.4 CLK_RST_CONTROLLER_RST_DEVICES_L_0
Offset: 0x4 │ Read/Write: R/W │ Reset: 0x7cd7dXXX (0b011111xx11x1x11111x1111x11xx100x)
0 RO X SWR_CPU_RST: Tied to 0.
5.7.5 CLK_RST_CONTROLLER_RST_DEVICES_H_0
Offset: 0x8 │ Read/Write: R/W │ Reset: 0xefddf32X (0b111x111111x111x11111x0110x1xx11x)
SWR_MEM_RST: Reset MC. This bit is disabled for security reasons. You can
0 RO X
write to it but it will always read as 0.
5.7.6 CLK_RST_CONTROLLER_RST_DEVICES_U_0
Offset: 0xc │ Read/Write: R/W │ Reset: 0x8a8ed5fe (0b1xxx1x1x1xxx111x110101011111111x)
5.7.7 CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0
Offset: 0x10 │ Read/Write: R/W │ Reset: 0x80000130 (0b100000xx00x0x00000x0000100110xx0)
5.7.8 CLK_RST_CONTROLLER_CLK_OUT_ENB_H_0
Offset: 0x14 │ Read/Write: R/W │ Reset: 0x00000480 (0b000x000000x000x00000x1001000x000)
5.7.9 CLK_RST_CONTROLLER_CLK_OUT_ENB_U_0
Offset: 0x18 │ Read/Write: R/W │ Reset: 0x01f02a00 (0b00000x011111000x00101x1000000x0x)
5.7.10 CLK_RST_CONTROLLER_CCLK_BURST_POLICY_0
Each of the normal states can be selected by software from 8 different clock sources. Furthermore, if any of the CPU/COP
FIQ/IRQ bit is enabled, a hardware auto trigger feature will be enabled such that hardware will jump from any state to IRQ or
to FIQ automatically. Of course, if the source is from a PLL, software needs to guarantee that the PLL clock is running and
stable before changing clock sources.
There are many usage models that can be derived from this mechanism: For example:
Software can simply keep changing the clock source to one state (i.e., just CWAKEUP_IDLE_SOURCE) without
changing the CPU_STATE field.
Software can have the concept of multiple states by first setting up CWAKEUP__SOURCE and then changing the
CPU_STATE field.
Software can enable hardware auto detect of IRQ/FIQ to jump to the IRQ or FIQ state.
Note: Whenever the clock source is switched, the clock is stopped for approximately 400-600 ns.
There are many usage models that can be derived from this mechanism. For example:
There is no clock source switching penalty. Software can just pick a PLL output as a maximum frequency source via
CCLK/SCLK_BURST_POLICY and just keep changing SUPER_CCLK/SCLK_DIVIDER to yield the desired lower
"effective" frequency.
For applications where the "osc" frequency is more than sufficient to do the job, PLLs can be turned off to save power
and the super clock divider can further divide down the "osc" clock to yield even more power saving.
If auto IRQ/FIQ feature is enabled, CCLK/SCLK will automatically jump back to full frequency to handle high priority
interrupt routines.
Note: From a dynamic voltage scaling (DVS) standpoint, the full clock frequency source (not the
output frequency of the super clock divider) going into the super clock divider should be
used to determine how low one can lower the voltage.
If m > n, the resulting super clock divider output frequency will be the same as the input
frequency. In other words, there will be no clock skip or divide down.
CPU_STATE: 0000=32 kHz Clock source; 0001=IDLE Clock Source; 001X=Run clock
source; 01XX=IRQ Clock Source; 1XXX=FIQ Clock Source
0 = STDBY
31:28 RW 0x1 1 = IDLE
2 = RUN
4 = IRQ
8 = FIQ
16 RW 0x0 CCLK_RESERVED: Reserved. CPULP uses this bit for div2 bypass.
5.7.11 CLK_RST_CONTROLLER_SUPER_CCLK_DIVIDER_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.12 CLK_RST_CONTROLLER_SCLK_BURST_POLICY_0
Offset: 0x28 │ Read/Write: R/W │ Reset: 0x10000000 (0b00010000xxxxxxxxx000x000x000x000)
SYS_STATE: 0000=32 kHz Clock source; 0001=IDLE Clock Source; 001X=Run clock
source; 01XX=IRQ Clock Source; 1XXX=FIQ Clock Source
0 = STDBY
31:28 0x1 1 = IDLE
2 = RUN
4 = IRQ
8 = FIQ
5.7.13 CLK_RST_CONTROLLER_SUPER_SCLK_DIVIDER_0
Offset: 0x2c │ Read/Write: R/W │ Reset: 0x00000000 (0b0xxx0000xxxxxxxx0000000000000000)
5.7.14 CLK_RST_CONTROLLER_CLK_SYSTEM_RATE_0
HCLK/PCLK
SCLK is the main system clock which can run up to 275 MHz.
HCLK is the AHB clock which can run at 1, 1/2, 1/3, or 1/4 of SCLK.
PCLK is the APB clock which can run at 1, 1/2, 1/3, or 1/4 of HCLK.
5.7.15 CLK_RST_CONTROLLER_CLK_MASK_ARM_0
Offset: 0x44 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxx00xxxxxxxxxxxxxx00)
CLK_MASK_COP:
00 = no clock masking
1:0 0x0 01 = u2_nwait_r
10 = u2_nwait_r
11 = no clock masking.
5.7.16 CLK_RST_CONTROLLER_MISC_CLK_ENB_0
Offset: 0x48 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxx0xxxx0000xxxxxxxxxxxxxxxxxxxx)
DEV1_OSC_DIV_SEL:
00 = osc
23:22 0x0 01 = osc/2
10 = osc/4
11 = osc/8.
DEV2_OSC_DIV_SEL:
00 = osc
21:20 0x0 01 = osc/2
10 = osc/4
11 = osc/8.
5.7.17 CLK_RST_CONTROLLER_CLK_CPU_CMPLX_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
The CPU complex consists of the CPU, L2 cache controller, and a number of bridge devices interfacing CPU/L2 cache to the
rest of the system. Except for the CPU, L2 cache controller, and bridge logic to external memory which always runs at non-
divided-down CPU frequency, other bridge devices can run at various programmable divided-down CPU clock ratios.
Note: However, since the CPU clock can be selected from 1-of-9 clock sources (refer to the CCLK_BURST_POLICY register),
the user is responsible for not selecting a bridge divide-down CPU clock ratio that will exceed 1/4 of the "MAX" CPU frequency
supported. The "MAX" CPU frequency is 1.1 GHz.
5.7.18 CLK_RST_CONTROLLER_OSC_CTRL_0
Oscillator Control
"osc" can have any of the hardware-supported frequencies (12, 13, 19.2, 26, 16.8, 38.4, 48 MHz) . The OSC_FREQ field
provides a way for software to inform hardware what the incoming clock frequency is. This information is used by hardware to
auto setup the parameters (DIVN, DIVM, DIVP, CPCON, LFCON, VCOCON, DCCON, OUT1_RATIO, OUT2_RATIO,
OUT3_RATIO, OUT4_RATIO, and OUT5_RATIO) to PLLP and its dividers. If a different frequency is used, there is a way to
override the hardware auto-generated PLLP parameters.
SW
Bit Reset Description
Default
OSC_FREQ: 0000 = 13.0 MHz, 0100 = 19.2 MHz, 1000 = 12.0 MHz, 1100 = 26.00 MHz,
0001 = 16.8 MHz, 0101 = 38.4 MHz*, 1001 = 48.0 MHz*.
*Set PLL_REF_DIV to /2 for 38.4 MHz and /4 for 48 MHz. Unused code map to 13 MHz
setting in hardware.
0 = OSC13
31:28 0x0 NONE 4 = OSC19P2
8 = OSC12
12 = OSC26
1 = OSC16P8
5 = OSC38P4
9 = OSC48
SW
Bit Reset Description
Default
5.7.19 CLK_RST_CONTROLLER_PLL_LFSR_0
Offset: 0x54 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
15:0 X RND: Random number generated from PLL linear feedback shift register.
5.7.20 CLK_RST_CONTROLLER_OSC_FREQ_DET_0
REF_CLK_WIN_CFG: Indicates the number of 32.768 kHz clock periods as window in n+1
3:0 0x0
scheme.
5.7.21 CLK_RST_CONTROLLER_OSC_FREQ_DET_STATUS_0
Offset: 0x5c │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
OSC_FREQ_DET_CNT: Indicates the number of osc counts within the 32.768 kHz clock
15:0 X
reference window.
5.7.22 CLK_RST_CONTROLLER_PLLE_SS_CNTL_0
Offset: 0x68 | Read/Write: R/W | Reset: 0x00005c00 (0b0000000000000000010111x000000000) | Default: 0x20010025
SW
Bit Reset Description
Default
13 0x0 _NONE_ PLLE_SSCPDMBYP: Bypass from pulse density modulator. Normally set to zero.
5.7.23 CLK_RST_CONTROLLER_PLLC_BASE_0
Tegra K1 devices have 14 PLLs controllable by clock control. Consult the PLL specifications for electrical requirements. Below
are the PLL cells used for each PLL referenced in this TRM:
In general, there are 3 requirements for each PLL with which software needs to comply:
Crystals 38.4 MHz and 48 MHz require pre-divider PLL_REF_DIV settings of 2 and 4, respectively, to meet the input
frequency requirements of all PLLs that use "osc_div_clk" as a reference. All other supported crystals are used by the PLLs
directly, without any pre-divider.
For Tegra K1 devices, software changes this frequency from 216 MHz to 408 MHz. Boot ROM configuration values for
408 MHz are listed below.
Table 21: PLLU Configuration Information (Reference Clock osc_div_clk and PLLU-FOs fixed at 12 MHz/48 MHz/60 MHz/480 MHz)
Reference 13.0 MHz 19.2 MHz 12.0 MHz 26.0 MHz 16.8 MHz 38.4MHz 48.0MHz
Frequency
DIVN 960 (3c0h) 200 (0c8h) 960 (3c0h) 960 (3c0h) 400 (190h) 200 (0c8h) 960 (3c0h)
DIVM 13 (0dh) 4 (04h) 12 (0ch) 26 (1ah) 7 (07h) 4 (04h) 12 (0ch)
CPCON 12 (ch) 3 (3h) 12 (ch) 12 (ch) 5 (5h) 3 (3h) 12 (ch)
LFCON 2 (2h) 2 (2h) 2 (2h) 2 (2h) 2 (2h) 2 (2h) 2 (2h)
PLL_REF_DIV /1 (0h) /2 (1h) /4 (2h)
Special Consideration when Using PLLX as a Clock Source for the CPU
PLLX is shared between G and LP CPU clusters. To save power, the proper PLLX_FO_LP_DISABLE or
PLLX_FO_G_DISABLE bit should only be de-asserted when the output is being used.
PLLC_ENABLE:
30 RW DISABLE 0 = DISABLE
1 = ENABLE
28 RW 0x0 PLLC_LOCK_OVERRIDE
5.7.24 CLK_RST_CONTROLLER_PLLC_OUT_0
Offset: 0x84 │ Read/Write: R/W │ Reset: 0x00000002 (0bxxxxxxxxxxxxxxxx00000000xxxxxx10)
15:8 0x0 PLLC_OUT1_RATIO: PLLC_OUT1 divider from base PLLC (lsb denoted 0.5x).
5.7.25 CLK_RST_CONTROLLER_PLLC_MISC2_0
Offset: 0x88 │ Read/Write: R/W │ Reset: 0x0000000X (0bxx00000000000000000000000000000x)
27 RW 0x0 PLLC_EN_FSTLCK
26 RW 0x0 PLLC_CLAMP_NDIV
25 RW 0x0 PLLC_EN_DYNRAMP
0 RO X PLLC_DYNRAMP_DONE
5.7.26 CLK_RST_CONTROLLER_PLLC_MISC_0
Offset: 0x8c │ Read/Write: R/W │ Reset: 0x0X000000 (0bx00001x0000000000000000000000000)
27 RW 0x0 PLLC_KVCO
26 RW 0x1 PLLC_IDDQ
25 RO X PLLC_FREQ_LOCK
24 RW 0x0 PLLC_LOCK_ENABLE:
0 = DISABLE
1 = ENABLE
5.7.27 CLK_RST_CONTROLLER_PLLM_BASE_0
Offset: 0x90 │ Read/Write: R/W │ Reset: 0x00000801 (0b000xxxxxxxxxxxx00000100000000001)
5.7.28 CLK_RST_CONTROLLER_PLLM_OUT_0
See the “PLL post dividers pll*_out*” section.
15:8 0x0 PLLM_OUT1_RATIO: PLLM_OUT1 divider from base PLLM (lsb denotes 0.5x).
5.7.29 CLK_RST_CONTROLLER_PLLM_MISC1_0
Offset: 0x98 │ Read/Write: R/W │ Reset: 0x00000000 (0bx0000000000000000000000000000000)
30 0x0 PLLM_PD_LSHIFT_PH135
29 0x0 PLLM_PD_LSHIFT_PH90
28 0x0 PLLM_PD_LSHIFT_PH45
27 0x0 PLLM_CLAMP_PH135
26 0x0 PLLM_CLAMP_PH90
25 0x0 PLLM_CLAMP_PH45
24 0x0 PLLM_CLAMP_PH0
5.7.30 CLK_RST_CONTROLLER_PLLM_MISC2_0
Offset: 0x9c │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxx000x0000000)
6 0x0 PLLM_EN_FSTLCK
5 0x0 PLLM_IDDQ
5.7.31 CLK_RST_CONTROLLER_PLLP_BASE_0
Offset: 0xa0 │ Read/Write: R/W │ Reset: 0x0X00010c (0b0000xxxxx000xx0000000001xxx01100)
PLLP_BYPASS:
0 = no bypass
31 RW DISABLE 1 = bypass.
0 = DISABLE
1 = ENABLE
PLLP_ENABLE:
30 RW DISABLE 0 = DISABLE
1 = ENABLE
PLLP_REF_DIS:
0 = enable reference clock
29 RW REF_ENABLE 1 = disable reference clock
0 = REF_ENABLE
1 = REF_DISABLE
PLLP_BASE_OVRRIDE:
0 = disallow base override
28 RW DISABLE 1 = allow base override
0 = DISABLE
1 = ENABLE
5.7.32 CLK_RST_CONTROLLER_PLLP_OUTA_0
Offset: 0xa4 │ Read/Write: R/W │ Reset: 0x00020002 (0b00000000xxxxx01000000000xxxxx010)
31:24 0x0 PLLP_OUT2_RATIO: PLLP_OUT2 divider from base PLLP (lsb denotes 0.5x).
PLLP_OUT2_OVRRIDE:
0 = disallow PLLP_OUT2 ratio override
18 DISABLE 1 = enable override
0 = DISABLE
1 = ENABLE
15:8 0x0 PLLP_OUT1_RATIO: PLLP_OUT1 divider from base PLLP (lsb denotes 0.5x).
PLLP_OUT1_OVRRIDE:
0 = Disallow PLLP_OUT1 ratio override
2 DISABLE 1 = enable override
0 = DISABLE
1 = ENABLE
5.7.33 CLK_RST_CONTROLLER_PLLP_OUTB_0
See the “PLL post dividers pll*_out*” section.
31:24 0x0 PLLP_OUT4_RATIO: PLLP_OUT4 divider from base PLLP (lsb denotes 0.5x).
PLLP_OUT4_OVRRIDE:
0 = disallow PLLP_OUT4 ratio override
18 DISABLE 1 = enable override
0 = DISABLE
1 = ENABLE
15:8 0x0 PLLP_OUT3_RATIO: PLLP_OUT3 divider from base PLLP (lsb denotes 0.5x).
5.7.34 CLK_RST_CONTROLLER_PLLP_MISC_0
Offset: 0xac │ Read/Write: R/W │ Reset: 0x00040100 (0bxxxx00000000x1000000000100000000)
PLLP_LOCK_ENABLE:
18 0x0 0 = DISABLE
1 = ENABLE
5.7.35 CLK_RST_CONTROLLER_PLLA_BASE_0
Offset: 0xb0 │ Read/Write: R/W │ Reset: 0x0X00010c (0b000xxxxxx000xx0000000001xxx01100)
PLLA_ENABLE:
30 RW DISABLE 0 = DISABLE
1 = ENABLE
PLLA_REF_DIS:
0 = enable reference clock
29 RW REF_ENABLE 1 = disable reference clock
0 = REF_ENABLE
1 = REF_DISABLE
5.7.36 CLK_RST_CONTROLLER_PLLA_OUT_0
See the “PLL post dividers pll*_out*” section.
5.7.37 CLK_RST_CONTROLLER_PLLA_MISC_0
Offset: 0xbc │ Read/Write: R/W │ Reset: 0x00000100 (0bx0xxxxxx0000x0000000000100000000)
PLLA_LOCK_ENABLE:
18 0x0 0 = DISABLE
1 = ENABLE
5.7.38 CLK_RST_CONTROLLER_PLLU_BASE_0
Offset: 0xc0 │ Read/Write: R/W │ Reset: 0x0X00010c (0b000xxx010000xx0000000001xxx01100)
PLLU_ENABLE: This bit is used only when the PLLU_OVERRIDE bit is set.
30 RW DISABLE 0 = DISABLE
1 = ENABLE
PLLU_REF_DIS:
0 = enable reference clock
29 RW REF_ENABLE 1 = disable reference clock
0 = REF_ENABLE
1 = REF_DISABLE
5.7.39 CLK_RST_CONTROLLER_PLLU_MISC_0
Offset: 0xcc │ Read/Write: R/W │ Reset: 0x00407100 (0bxx000xxxx1xxxx000111000100000000)
PLLU_LOCK_ENABLE:
22 0x1 0 = DISABLE
1 = ENABLE
5.7.40 CLK_RST_CONTROLLER_PLLD_BASE_0
Offset: 0xd0 │ Read/Write: R/W │ Reset: 0x0X00010c (0b000xx00x0000x00000000001xxx01100)
PLLD_ENABLE:
30 RW DISABLE 0 = DISABLE
1 = ENABLE
5.7.41 CLK_RST_CONTROLLER_PLLD_MISC_0
Offset: 0xdc │ Read/Write: R/W │ Reset: 0x00000100 (0b00000000000000000000000100000000)
PLLD_LOCK_ENABLE:
22 0x0 0 = DISABLE
1 = ENABLE
5.7.42 CLK_RST_CONTROLLER_PLLX_BASE_0
Bypass is not supported. This field is kept for legacy purposes.
PLLX_ENABLE:
30 RW DISABLE 0 = DISABLE
1 = ENABLE
5.7.43 CLK_RST_CONTROLLER_PLLX_MISC_0
Note: PLLX source to cpulp (PLLX_OUT0) is divided by 2 by default. DIV2 is controlled by the
PLLX_DIV2_BYPASS_LP bit. See the warning about DIV2 programming in the
CLK_RST_CONTROLLER_CCLKLP_BURST_POLICY_0 register.
PLLX_LOCK_ENABLE: 0 = DISABLE
18 0x0
1 = ENABLE
5.7.44 CLK_RST_CONTROLLER_PLLE_BASE_0
Offset: 0xe8 │ Read/Write: R/W │ Reset: 0x0d00c801 (0bx0001101000000001100100000000001)
5.7.45 CLK_RST_CONTROLLER_PLLE_MISC_0
Offset: 0xec │ Read/Write: R/W │ Reset: 0x0000XX00 (0b0000000000000000x11xx00000000000)
PLLE_REF_DIS:
0 = enable reference clock
10 RW REF_ENABLE 1 = disable reference clock
0 = REF_ENABLE
1 = REF_DISABLE
PLLE_LOCK_ENABLE:
9 RW 0x0 0 = DISABLE
1 = ENABLE
PLLE_EN_FSTLCK:
1 RW DISABLE 0 = DISABLE
1 = ENABLE
5.7.46 CLK_RST_CONTROLLER_CLK_SOURCE_I2S1_0
Note: The 16-bit UARTA/UARTB/UARTC clock divider control is provided by the UART register
set and not by the CLK_SOURCE_ registers.
To switch from one clock source to the next, both clock sources must be active/running.
Listed below are the modules/logic and the fixed PLL clock source they use.
LFSR pllM_out0
DSI pllP_out3
DSIB pllP_out3
CSI pllP_out3
I2C1 pllP_out3
I2C2 pllP_out3
I2C3 pllP_out3
UARTA pllP_out3
UARTB pllP_out3
UARTC pllP_out3
UARTD pllP_out3
More information about clock sources and divider widths can be found under “Hardware Features” in this section.
Note: There is no clock switching protection for the audio sync clock so one needs to set up the
desired clock source before enabling the audio transmit/receive device.
I2S1_CLK_SRC:
000 = pllA_out0
010 = audio SYNC_CLK 1x or 2x
100 = pllP_out0
31:29 CLK_M 110 = clk_m
0 = PLLA_OUT0
2 = SYNC_CLK
4 = PLLP_OUT0
6 = CLK_M
5.7.47 CLK_RST_CONTROLLER_CLK_SOURCE_I2S2_0
Offset: 0x104 │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxxxxxxxxxxxxxxx00000000)
I2S2_CLK_SRC:
000 = pllA_out0
010 = audio SYNC_CLK 1x or 2x
100 = pllP_out0
31:29 CLK_M 110 = clk_m
0 = PLLA_OUT0
2 = SYNC_CLK
4 = PLLP_OUT0
6 = CLK_M
5.7.48 CLK_RST_CONTROLLER_CLK_SOURCE_SPDIF_OUT_0
Offset: 0x108 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
SPDIFOUT_CLK_SRC:
000 = pllA_out0
010 = audio SYNC_CLK 1x or 2x
100 = pllP_out0
31:29 CLK_M 110 = clk_m
0 = PLLA_OUT0
2 = SYNC_CLK
4 = PLLP_OUT0
6 = CLK_M
5.7.49 CLK_RST_CONTROLLER_CLK_SOURCE_SPDIF_IN_0
Offset: 0x10c │ Read/Write: R/W │ Reset: 0x00000000 (0b000xxxxxxxxxxxxxxxxxxxxx00000000)
SPDIF_IN_CLK_SRC:
000 = pllP_out0
001 = pllC2_out0
010 = pllC_out0
011 = pllC3_out0
31:29 PLLP_OUT0 100 = pllM_out0
0 = PLLP_OUT0
1 = PLLC2_OUT0
2 = PLLC_OUT0
3 = PLLC3_OUT0
4 = PLLM_OUT0
5.7.50 CLK_RST_CONTROLLER_CLK_SOURCE_PWM_0
Offset: 0x110 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.51 CLK_RST_CONTROLLER_CLK_SOURCE_SPI2_0
Offset: 0x118 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.52 CLK_RST_CONTROLLER_CLK_SOURCE_SPI3_0
Offset: 0x11c │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.53 CLK_RST_CONTROLLER_CLK_SOURCE_I2C1_0
Offset: 0x124 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxx0000000000000000)
5.7.55 CLK_RST_CONTROLLER_CLK_SOURCE_SPI1_0
Offset: 0x134 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.56 CLK_RST_CONTROLLER_CLK_SOURCE_DISP1_0
Offset: 0x138 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
5.7.57 CLK_RST_CONTROLLER_CLK_SOURCE_DISP2_0
Offset: 0x13c │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
5.7.58 CLK_RST_CONTROLLER_CLK_SOURCE_ISP_0
Offset: 0x144 │ Read/Write: R/W │ Reset: 0x00000000 (0b000xxx00xxxxxxxxxxxxxxxx00000000)
5.7.59 CLK_RST_CONTROLLER_CLK_SOURCE_VI_0
Offset: 0x148 │ Read/Write: R/W │ Reset: 0x00000000 (0b000xxx00xxxxxxxxxxxxxxxx00000000)
5.7.60 CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC1_0
Offset: 0x150 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.61 CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC2_0
Offset: 0x154 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.62 CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC4_0
Offset: 0x164 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.63 CLK_RST_CONTROLLER_CLK_SOURCE_VFIR_0
Offset: 0x168 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.64 CLK_RST_CONTROLLER_CLK_SOURCE_HSI_0
Offset: 0x174 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.65 CLK_RST_CONTROLLER_CLK_SOURCE_UARTA_0
Offset: 0x178 │ Read/Write: R/W │ Reset: 0xc0000002 (0b110xxxx0xxxxxxxx0000000000000010)
UARTA_CLK_SRC: UART baud clock divisors by default come directly from the
UART DLM/DLL registers in 16.0 format. Enable UART_DIV_ENB to use the 15.1
divisor below. 000 = pllP_out0, 001 = pllC2_out0, 010 = pllC_out0, 011 =
pllC3_out0, 100 = pllM_out0, 110 = clk_m
0 = PLLP_OUT0
31:29 CLK_M
1 = PLLC2_OUT0
2 = PLLC_OUT0
3 = PLLC3_OUT0
4 = PLLM_OUT0
6 = CLK_M
5.7.66 CLK_RST_CONTROLLER_CLK_SOURCE_UARTB_0
Offset: 0x17c │ Read/Write: R/W │ Reset: 0xc0000002 (0b110xxxx0xxxxxxxx0000000000000010)
UARTB_CLK_SRC: UART baud clock divisors by default come directly from the
UART DLM/DLL registers in 16.0 format. Enable UART_DIV_ENB to use the 15.1
divisor below. 000 = pllP_out0, 001 = pllC2_out0, 010 = pllC_out0, 011 =
pllC3_out0, 100 = pllM_out0, 110 = clk_m
0 = PLLP_OUT0
31:29 CLK_M
1 = PLLC2_OUT0
2 = PLLC_OUT0
3 = PLLC3_OUT0
4 = PLLM_OUT0
6 = CLK_M
5.7.67 CLK_RST_CONTROLLER_CLK_SOURCE_HOST1X_0
Offset: 0x180 │ Read/Write: R/W │ Reset: 0x00000000 (0b000xxxxxxxxxxxxx0000000000000000)
HOST1X_IDLE_DIVISOR: N = Divide by (n+1) (lsb denotes 0.5x). If all 0s, this idle
15:8 0x0 divisor field will not be used. For non-zero values, when host1x is idle, this field will
be used instead of HOST1X_CLK_DIVISOR.
5.7.68 CLK_RST_CONTROLLER_CLK_SOURCE_HDMI_0
Offset: 0x18c │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.69 CLK_RST_CONTROLLER_CLK_SOURCE_I2C2_0
Offset: 0x198 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxx0000000000000000)
5.7.70 CLK_RST_CONTROLLER_CLK_SOURCE_EMC_0
When changing the EMC frequency, internal logic sequencing handles the requirement that the DRAMs must be placed into
self-refresh before its clock frequency is changed.
To support this, certain register fields when written do not get immediately applied but rather are applied at the correct time
during the sequencing. These registers are referred to as "shadowed".
Other register fields initiate the sequencing state machine and therefore should be written last. Note that the value of the field
must change to start the state machine - simply writing the same value to the field is insufficient.
At the end of the sequencing, the DRAMs are restored to being operational.
As an alternative to writing one of the sequencing initiating fields, the FORCE_CC_TRIGGER is provided to force the state
machine to run. This is not the recommended method.
There are EMC/MC configuration registers that are shadowed or can initiate a clock change sequence are described below:
FORCE_CC_TRIGGER
Shadowed (will be applied during sequencing):
CLK_SOURCE_EMC.EMC_2X_CLK_SRC
EMC_2X_CLK_DIVISOR
MC_EMC_SAME_FREQ
Not shadowed:
CLK_SOURCE_EMC.EMC_INVERT_DCD (must be set during initial configuration and before the EMC clock is
started)
5.7.71 CLK_RST_CONTROLLER_CLK_SOURCE_UARTC_0
Offset: 0x1a0 │ Read/Write: R/W │ Reset: 0xc0000002 (0b110xxxx0xxxxxxxx0000000000000010)
UARTC_CLK_SRC: UART baud clock divisors by default come directly from the
UART DLM/DLL registers in 16.0 format. Enable UART_DIV_ENB to use the 15.1
divisor below. 000 = pllP_out0, 001 = pllC2_out0, 010 = pllC_out0, 011 =
pllC3_out0, 100 = pllM_out0, 110 = CLK_M.
0 = PLLP_OUT0
31:29 CLK_M
1 = PLLC2_OUT0
2 = PLLC_OUT0
3 = PLLC3_OUT0
4 = PLLM_OUT0
6 = CLK_M
5.7.72 CLK_RST_CONTROLLER_CLK_SOURCE_VI_SENSOR_0
Offset: 0x1a8 │ Read/Write: R/W │ Reset: 0x00000000 (0b000xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.73 CLK_RST_CONTROLLER_CLK_SOURCE_SPI4_0
Offset: 0x1b4 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.74 CLK_RST_CONTROLLER_CLK_SOURCE_I2C3_0
Offset: 0x1b8 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxx0000000000000000)
5.7.75 CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC3_0
Offset: 0x1bc │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.76 CLK_RST_CONTROLLER_CLK_SOURCE_UARTD_0
Offset: 0x1c0 │ Read/Write: R/W │ Reset: 0xc0000002 (0b110xxxx0xxxxxxxx0000000000000010)
UARTD_CLK_SRC: UART baud clock divisors by default come directly from the
UART DLM/DLL registers in 16.0 format. Enable UART_DIV_ENB to use the 15.1
divisor below. 000 = pllP_out0, 001 = pllC2_out0, 010 = pllC_out0, 011 = pllC3_out0,
100 = pllM_out0, 110 = clk_m
0 = PLLP_OUT0
31:29 CLK_M
1 = PLLC2_OUT0
2 = PLLC_OUT0
3 = PLLC3_OUT0
4 = PLLM_OUT0
6 = CLK_M
5.7.77 CLK_RST_CONTROLLER_CLK_SOURCE_VDE_0
Offset: 0x1c8 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.78 CLK_RST_CONTROLLER_CLK_SOURCE_OWR_0
Offset: 0x1cc │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.79 CLK_RST_CONTROLLER_CLK_SOURCE_NOR_0
Offset: 0x1d0 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.80 CLK_RST_CONTROLLER_CLK_SOURCE_CSITE_0
Offset: 0x1d4 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.81 CLK_RST_CONTROLLER_CLK_SOURCE_I2S0_0
Offset: 0x1d8 │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxxxxxxxxxxxxxxx00000000)
5.7.82 CLK_RST_CONTROLLER_CLK_SOURCE_DTV_0
Offset: 0x1dc │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxx0xxxxxxxxxxxxxxxxxxxxxxxxx)
5.7.83 CLK_RST_CONTROLLER_CLK_SOURCE_MSENC_0
Offset: 0x1f0 │ Read/Write: R/W │ Reset: 0x00000000 (0b000xxxxxxxxxxxxxxxxxxxxx00000000)
31:29 PLLM_OUT0 MSENC_CLK_SRC: 000 = pllM_out0, 001 = pllC2_out0, 010 = pllC_out0, 011 = pllC3_out0, 100
= pllP_out0, 110 = pllA_out0
0 = PLLM_OUT0
1 = PLLC2_OUT0
2 = PLLC_OUT0
3 = PLLC3_OUT0
4 = PLLP_OUT0
6 = PLLA_OUT0
5.7.84 CLK_RST_CONTROLLER_CLK_SOURCE_TSEC_0
Offset: 0x1f4 │ Read/Write: R/W │ Reset: 0x80000000 (0b100xxxxxxxxxxxxxxxxxxxxx00000000)
TSEC_CLK_SRC: 000 = pllP_out0, 001 = pllC2_out0, 010 = pllC_out0, 011 = pllC3_out0, 100 =
pllM_out0, 101 = pllA_out0, 110 = CLK_M (osc)
0 = PLLP_OUT0
1 = PLLC2_OUT0
31:29 PLLM_OUT0 2 = PLLC_OUT0
3 = PLLC3_OUT0
4 = PLLM_OUT0
5 = PLLA_OUT0
6 = CLK_M
5.7.85 CLK_RST_CONTROLLER_CLK_SPARE2_0
Offset: 0x1fc │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
5.7.86 CLK_RST_CONTROLLER_CLK_OUT_ENB_X_0
Offset: 0x280 │ Read/Write: R/W │ Reset: 0x01000000 (0bxxxxxx01x000x000x0xx0xxxx000xxx0)
5.7.87 CLK_RST_CONTROLLER_CLK_ENB_X_SET_0
Offset: 0x284 │ Read/Write: R/W │ Reset: 0x01000000 (0bxxxxxx01x000x000x0xx0xxxx000xxx0)
5.7.88 CLK_RST_CONTROLLER_CLK_ENB_X_CLR_0
Offset: 0x288 │ Read/Write: R/W │ Reset: 0x01000000 (0bxxxxxx01x000x000x0xx0xxxx000xxx0)
5.7.89 CLK_RST_CONTROLLER_RST_DEVICES_X_0
Offset: 0x28c │ Read/Write: R/W │ Reset: 0xff740041 (0b11111111x111x1xxxxxxxxxxx1xxxxx1)
5.7.90 CLK_RST_CONTROLLER_RST_DEV_X_SET_0
Offset: 0x290 │ Read/Write: R/W │ Reset: 0xff740041 (0b11111111x111x1xxxxxxxxxxx1xxxxx1)
5.7.91 CLK_RST_CONTROLLER_RST_DEV_X_CLR_0
Offset: 0x294 │ Read/Write: R/W │ Reset: 0x00000001 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1)
5.7.92 CLK_RST_CONTROLLER_DFLL_BASE_0
Offset: 0x2f4 │ Read/Write: R/W │ Reset: 0x00000001 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1)
5.7.93 CLK_RST_CONTROLLER_RST_DEV_L_SET_0
The RST_DEV_(L,H,U, V, W, X)_(SET,CLR) and CLK_ENB_(L,H,U, V, W, X)_(SET,CLR) registers are provided as an
alternate method of programming the same registers found in RST_DEVICES_(L,H,U, V, W, X) and CLK_OUT_ENB_(L,H,U,
V, W, X) registers, respectively.
Therefore, using either methods will change the same underlying peripherals reset, and clock enable control for writes. For
reads, you can use either method to retrieve the reset/clock-enable state of each peripheral.
5 RO x SET_TMR_RST: Reserved
SET_CPU_RST: Set the reset for the CPU. [CCLK Multi-Address]. This bit
can be written but it always reads as 0.
0 RO x
0 = DISABLE
1 = ENABLE
5.7.94 CLK_RST_CONTROLLER_RST_DEV_L_CLR_0
Offset: 0x304 │ Read/Write: R/W │ Reset: 0x7cd7dXXX (0b011111xx11x1x11111x1111x11xx1x0x)
5 RO X CLR_TMR_RST: Reserved
CLR_CPU_RST: Clear reset for the CPU. [CCLK Multi-Address] This bit can be written but it
always reads as 0.
0 RW X
0 = DISABLE
1 = ENABLE
5.7.95 CLK_RST_CONTROLLER_RST_DEV_H_SET_0
Offset: 0x308 │ Read/Write: R/W │ Reset: 0xefddf32X (0b111x111111x111x11111x0110x1xx11x)
SET_MEM_RST: Set reset MC. This bit is disabled. This bit can be written but it always reads as
0.
0 RO X
0 = DISABLE
1 = ENABLE
5.7.96 CLK_RST_CONTROLLER_RST_DEV_H_CLR_0
Offset: 0x30c │ Read/Write: R/W │ Reset: 0xefddf32X (0b111x111111x111x11111x0110x1xx11x)
CLR_MEM_RST: Clear reset for the MC. This bit is disabled. This bit can be written but it always
reads as 0.
0 RO X
0 = DISABLE
1 = ENABLE
5.7.97 CLK_RST_CONTROLLER_RST_DEV_U_SET_0
Offset: 0x310 │ Read/Write: R/W │ Reset: 0x8a8ed5fe (0b1xxx1x1x1xxx111x110101011111111x)
5.7.98 CLK_RST_CONTROLLER_RST_DEV_U_CLR_0
Offset: 0x314 │ Read/Write: R/W │ Reset: 0x8a8ed5fe (0b1xxx1x1x1xxx111x110101011111111x)
5.7.99 CLK_RST_CONTROLLER_CLK_ENB_L_SET_0
Offset: 0x320 │ Read/Write: R/W │ Reset: 0x80000130 (0b100000xx00x0x00000x0000100110xx0)
5.7.100 CLK_RST_CONTROLLER_CLK_ENB_L_CLR_0
Offset: 0x324 │ Read/Write: R/W │ Reset: 0x80000130 (0b100000xx00x0x00000x0000100110xx0)
5.7.101 CLK_RST_CONTROLLER_CLK_ENB_H_SET_0
Offset: 0x328 │ Read/Write: R/W │ Reset: 0x00000480 (0b000x000000x000x00000x1001000x000)
5.7.102 CLK_RST_CONTROLLER_CLK_ENB_H_CLR_0
Offset: 0x32c │ Read/Write: R/W │ Reset: 0x00000480 (0b000x000000x000x00000x1001000x000)
5.7.103 CLK_RST_CONTROLLER_CLK_ENB_U_SET_0
Offset: 0x330 │ Read/Write: R/W │ Reset: 0x01f82a00 (0b00000x011111100x00101x1000000x0x)
SET_CLK_ENB_CRAM2: Set enable clock for the COP cache RAM clock.
24 0x1 0 = DISABLE
1 = ENABLE
5.7.104 CLK_RST_CONTROLLER_CLK_ENB_U_CLR_0
Offset: 0x334 │ Read/Write: R/W │ Reset: 0x01f02a00 (0b00000x011111000x00101x1000000x0x)
5.7.105 CLK_RST_CONTROLLER_CCPLEX_PG_SM_OVRD_0
5.7.106 CLK_RST_CONTROLLER_RST_CPU_CMPLX_SET_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
Note: When transitioning to a new 4-bit value, all DBGRESET bits in this register which are transitioning to 1 must be set
before all DBGRESET bits which are transitioning to 0 are cleared.
5.7.107 CLK_RST_CONTROLLER_RST_CPU_CMPLX_CLR_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
Note: When transitioning to a new 4-bit value, all DBGRESET bits in this register which are transitioning to 1 must be set
before all DBGRESET bits which are transitioning to 0 are cleared.
5.7.108 CLK_RST_CONTROLLER_CLK_CPU_CMPLX_SET_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.109 CLK_RST_CONTROLLER_CLK_CPU_CMPLX_CLR_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.110 CLK_RST_CONTROLLER_RST_DEVICES_V_0
0 RO X SWR_CPUG_RST: Reserved.
5.7.111 CLK_RST_CONTROLLER_RST_DEVICES_W_0
Offset: 0x35c │ Read/Write: R/W │ Reset: 0x1f407fff (0bxxx11111x10xxxxxx111111111111111)
14 ENABLE SWR_XUSB_PADCTL_RST: Reset XUSB PADCTL logic. IOBIST control has clock enable
only.
5.7.112 CLK_RST_CONTROLLER_CLK_OUT_ENB_V_0
Offset: 0x360 │ Read/Write: R/W │ Reset: 0x00400000 (0b0000000001xxxxx00000000000000x00)
5.7.113 CLK_RST_CONTROLLER_CLK_OUT_ENB_W_0
Offset: 0x364 │ Read/Write: R/W │ Reset: 0x002000fc (0bxx000000x01000000x00000011111100)
CLK_ENB_XUSB: Enable clock to XUSB. IOBIST control has clock enable only.
15 DISABLE 0 = DISABLE
1 = ENABLE
5.7.114 CLK_RST_CONTROLLER_CCLKG_BURST_POLICY_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
CPU_STATE: 0000=32 kHz Clock source; 0001=IDLE Clock Source; 001X=Run clock
source; 01XX=IRQ Clock Source; 1XXX=FIQ Clock Source
0 = STDBY
31:28 RW 0x1 1 = IDLE
2 = RUN
4 = IRQ
8 = FIQ
5.7.115 CLK_RST_CONTROLLER_SUPER_CCLKG_DIVIDER_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.116 CLK_RST_CONTROLLER_CCLKLP_BURST_POLICY_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
This is not a glitch-less switch. Do not change the register field while CPULP is using
PLLX as a clock source.
5.7.117 CLK_RST_CONTROLLER_SUPER_CCLKLP_DIVIDER_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.118 CLK_RST_CONTROLLER_CLK_CPUG_CMPLX_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details..
The CPUG complex consists of the CPUG, L2 cache controller, and a number of bridge devices interfacing the CPUG and L2
cache to the rest of the system. Except for the CPUG, L2 cache controller, and bridge logic to external memory which always
runs at the non-divided-down CPUG frequency, other bridge devices can run at various programmable divided-down CPUG
clock ratios.
Note: Because the CPUG clock can be selected from 1-of-9 clock sources (refer to the
CCLKG_BURST_POLICY register), it is the user’s responsibility to not select a bridge divide-down CPUG
clock ratio that will exceed 1/4 of the maximum CPUG frequency supported. The maximum CPUG
frequency is 1.1 GHz.
5.7.119 CLK_RST_CONTROLLER_CLK_CPULP_CMPLX_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
The CPULG complex consists of the CPULG, L2 cache controller, and a number of bridge devices interfacing the CPULG and
L2 cache to the rest of the system. Except for the CPULG, L2 cache controller, and bridge logic to external memory which
always runs at the non-divided-down CPULG frequency, other bridge devices can run at various programmable divided-down
CPULG clock ratios.
Note: Because the CPUG clock can be selected from 1-of-9 clock sources (refer to the
CCLKLP_BURST_POLICY register), it is the user’s responsibility to not select a bridge divide-down
CPULG clock ratio that will exceed 1/4 of the maximum CPULG frequency supported. The maximum
CPULG frequency is 1.1 GHz.
5.7.120 CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL_0
Earlier Tegra chips had a single state-machine that took care of sequencing reset (delaying reset de-assertion based on a
timer value) in case of a flow-controller request or a WatchDog Timer (WDT) expiry request. This changed in Tegra K1 devices
because a flow-controller initiated request has more to do. The timer control of reset de-assertion for WDT initiated requests is
in the same place while the new controls have been added to the new registers.
5.7.121 CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL1_0
Offset: 0x384 │ Read/Write: R/W │ Reset: 0x00040004 (0bxxxx000000000100xxxx000000000100)
5.7.122 CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL2_0
Offset: 0x388 │ Read/Write: R/W │ Reset: 0x07000200 (0b00xx011100000000xxxx001000000000)
IGNORE_HW_ACK_WIDTH: Instructs the flow control state machine to ignore the 16-
31 0x0
cpuclk counter and rely only on the sclk counts defined below.
5.7.123 CLK_RST_CONTROLLER_CLK_SOURCE_MSELECT_0
Offset: 0x3b4 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.124 CLK_RST_CONTROLLER_CLK_SOURCE_TSENSOR_0
Offset: 0x3b8 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.125 CLK_RST_CONTROLLER_CLK_SOURCE_I2S3_0
Offset: 0x3bc │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxxxxxxxxxxxxxxx00000000)
5.7.126 CLK_RST_CONTROLLER_CLK_SOURCE_I2S4_0
Offset: 0x3c0 │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxxxxxxxxxxxxxxx00000000)
5.7.127 CLK_RST_CONTROLLER_CLK_SOURCE_I2C4_0
Offset: 0x3c4 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxx0000000000000000)
5.7.128 CLK_RST_CONTROLLER_CLK_SOURCE_SPI5_0
Offset: 0x3c8 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.129 CLK_RST_CONTROLLER_CLK_SOURCE_SPI6_0
Offset: 0x3cc │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.130 CLK_RST_CONTROLLER_CLK_SOURCE_AUDIO_0
Offset: 0x3d0 │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxx00000xxxxxxxx00000000)
AUDIO_CLK_SRC_RATE: 0000 = SPDIFIN recovered bit clock. 0001 = I2S0 bit clock.
0010 = I2S1 bit clock. 0011 = I2S2 bit clock. 0100 = I2S3 bit clock. 0101 = I2S4 bit
clock. 0110 = pllA_out0. 0111 = external vimclk (vimclk). 1xxx = Reserved.
0 = SPDIFIN
1 = I2S0
19:16 SPDIFIN 2 = I2S1
3 = I2S2
4 = I2S3
5 = I2S4
6 = PLLA_OUT0
7 = EXT_VIMCLK
5.7.131 CLK_RST_CONTROLLER_CLK_SOURCE_DAM0_0
Offset: 0x3d8 │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxx00000xxxxxxxx00000000)
DAM0_CLK_SRC_RATE: 0000 = SPDIFIN recovered bit clock. 0001 = I2S0 bit clock.
0010 = I2S1 bit clock. 0011 = I2S2 bit clock. 0100 = I2S3 bit clock. 0101 = I2S4 bit
clock. 0110 = pllA_out0. 0111 = external vimclk (vimclk). 1xxx = Reserved.
0 = SPDIFIN
1 = I2S0
19:16 SPDIFIN 2 = I2S1
3 = I2S2
4 = I2S3
5 = I2S4
6 = PLLA_OUT0
7 = EXT_VIMCLK
5.7.132 CLK_RST_CONTROLLER_CLK_SOURCE_DAM1_0
Offset: 0x3dc │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxx00000xxxxxxxx00000000)
DAM1_CLK_SRC_RATE: 0000 = SPDIFIN recovered bit clock. 0001 = I2S0 bit clock.
0010 = I2S1 bit clock. 0011 = I2S2 bit clock. 0100 = I2S3 bit clock. 0101 = I2S4 bit
clock. 0110 = pllA_out0. 0111 = external vimclk (vimclk). 1xxx = Reserved.
0 = SPDIFIN
1 = I2S0
19:16 SPDIFIN 2 = I2S1
3 = I2S2
4 = I2S3
5 = I2S4
6 = PLLA_OUT0
7 = EXT_VIMCLK
5.7.133 CLK_RST_CONTROLLER_CLK_SOURCE_DAM2_0
Offset: 0x3e0 │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxx00000xxxxxxxx00000000)
DAM2_CLK_SRC_RATE: 0000 = SPDIFIN recovered bit clock. 0001 = I2S0 bit clock.
0010 = I2S1 bit clock. 0011 = I2S2 bit clock. 0100 = I2S3 bit clock. 0101 = I2S4 bit
clock. 0110 = pllA_out0. 0111 = external vimclk (vimclk). 1xxx = Reserved.
0 = SPDIFIN
1 = I2S0
19:16 SPDIFIN 2 = I2S1
3 = I2S2
4 = I2S3
5 = I2S4
6 = PLLA_OUT0
7 = EXT_VIMCLK
5.7.134 CLK_RST_CONTROLLER_CLK_SOURCE_HDA2CODEC_2X_0
Offset: 0x3e4 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.135 CLK_RST_CONTROLLER_CLK_SOURCE_ACTMON_0
Offset: 0x3e8 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.136 CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH1_0
Offset: 0x3ec │ Read/Write: R/W │ Reset: 0x60000000 (0b011xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.137 CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH2_0
Offset: 0x3f0 │ Read/Write: R/W │ Reset: 0x60000000 (0b011xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.138 CLK_RST_CONTROLLER_CLK_SOURCE_EXTPERIPH3_0
Offset: 0x3f4 │ Read/Write: R/W │ Reset: 0x60000000 (0b011xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.139 CLK_RST_CONTROLLER_CLK_SOURCE_I2C_SLOW_0
Offset: 0x3fc │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.140 CLK_RST_CONTROLLER_CLK_SOURCE_SYS_0
Divider only. All other controls are in SCLK_BURST_POLICY and SUPER_SCLK_DIVIDER.
5.7.141 CLK_RST_CONTROLLER_CLK_SOURCE_SOR0_0
Offset: 0x414 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxx00xxxxxx00000000)
5.7.142 CLK_RST_CONTROLLER_CLK_SOURCE_SATA_OOB_0
Offset: 0x420 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.143 CLK_RST_CONTROLLER_CLK_SOURCE_SATA_0
Offset: 0x424 │ Read/Write: R/W │ Reset: 0xc1000000 (0b110xxxx1xxxxxxxxxxxxxxxx00000000)
5.7.144 CLK_RST_CONTROLLER_CLK_SOURCE_HDA_0
Offset: 0x428 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.145 CLK_RST_CONTROLLER_RST_DEV_V_SET_0
Offset: 0x430 │ Read/Write: R/W │ Reset: 0xff81ffeX (0b111111111xxxxxx111111111111x1xxx)
SET_CPULP_RST: Set reset for the CPULP. [CCLK Multi-Address]. This bit can be written but it
always reads as 0.
1 RO X
0 = DISABLE
1 = ENABLE
SET_CPUG_RST: Set reset for the CPUG. [CCLK Multi-Address]. This bit can be written but it
always reads as 0.
0 RO X
0 = DISABLE
1 = ENABLE
5.7.146 CLK_RST_CONTROLLER_RST_DEV_V_CLR_0
Offset: 0x434 │ Read/Write: R/W │ Reset: 0xff81ffeX (0b111111111xxxxxx111111111111x1xxx)
CLR_CPULP_RST: Clear reset for CPULP. [CCLK Multi-Address]. This bit can be written but it
always reads as 0.
1 RO X
0 = DISABLE
1 = ENABLE
CLR_CPUG_RST: Clear reset for CPUG. [CCLK Multi-Address]. This bit can be written but it
always reads as 0.
0 RO X
0 = DISABLE
1 = ENABLE
5.7.147 CLK_RST_CONTROLLER_RST_DEV_W_SET_0
Offset: 0x438 │ Read/Write: R/W │ Reset: 0x1f407fff (0bxxx11111x10xxxxxx111111111111111)
5.7.148 CLK_RST_CONTROLLER_RST_DEV_W_CLR_0
Offset: 0x43c │ Read/Write: R/W │ Reset: 0x1f407fff (0bxxx11111x10xxxxxx111111111111111)
5.7.149 CLK_RST_CONTROLLER_CLK_ENB_V_SET_0
Offset: 0x440 │ Read/Write: R/W│ Reset: 0x00400000 (0b0000000001xxxxx00000000000000x00)
5.7.150 CLK_RST_CONTROLLER_CLK_ENB_V_CLR_0
Offset: 0x444 │ Read/Write: R/W │ Reset: 0x00400000 (0b0000000001xxxxx00000000000000x00)
5.7.151 CLK_RST_CONTROLLER_CLK_ENB_W_SET_0
Offset: 0x448 │ Read/Write: R/W │ Reset: 0x002000fc (0bxx000000x01000000x00000011111100)
5.7.152 CLK_RST_CONTROLLER_CLK_ENB_W_CLR_0
Offset: 0x44c │ Read/Write: R/W │ Reset: 0x002000fc (0bxx000000x01000000x00000011111100)
5.7.153 CLK_RST_CONTROLLER_RST_CPUG_CMPLX_SET_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
SET_NONCPURESET: 1 = Assert reset to the whole nonCPU region of the CPU. For
FCCPLEX, by default the NONCPU region is not power-gated but the reset is asserted
29 0x1 because CRAIL is power-gated by default.
0 = DISABLE
1 = ENABLE
5.7.154 CLK_RST_CONTROLLER_RST_CPUG_CMPLX_CLR_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.155 CLK_RST_CONTROLLER_RST_CPULP_CMPLX_SET_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.156 CLK_RST_CONTROLLER_RST_CPULP_CMPLX_CLR_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.157 CLK_RST_CONTROLLER_CLK_CPUG_CMPLX_SET_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.158 CLK_RST_CONTROLLER_CLK_CPUG_CMPLX_CLR_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.159 CLK_RST_CONTROLLER_CLK_CPULP_CMPLX_SET_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.160 CLK_RST_CONTROLLER_CLK_CPULP_CMPLX_CLR_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.161 CLK_RST_CONTROLLER_CPU_CMPLX_STATUS_0
Offset: 0x470 │ Read/Write: RO │ Reset: 0xXXXXXX0X (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
NONCPURESET: ENABLE = Reset asserted to the whole nonCPU region of the CPU
29 X 0 = DISABLE
1 = ENABLE
11 X WDRESET3: Reserved.
10 X WDRESET2: Reserved.
9 X WDRESET1: Reserved.
8 X WDRESET0: Reserved.
5.7.162 CLK_RST_CONTROLLER_INTSTATUS_0
Interrupt Status Register.
car_int[0] = axicifreset
car_int[1] = csiteptmreset
car_int[2] = periphreset
car_int[3] = scureset
car_int[4] = cpureset_cpu0
car_int[5] = cpureset_cpu1
car_int[6] = cpureset_cpu2
car_int[7] = cpureset_cpu3
car_int[8] = dbgreset_cpu0
car_int[9] = dbgreset_cpu1
car_int[10] = dbgreset_cpu2
car_int[11] = dbgreset_cpu3
car_int[12] = wdreset_cpu0
car_int[13] = wdreset_cpu1
car_int[14] = wdreset_cpu2
car_int[15] = wdreset_cpu3
car_int[16] = tsensor2car_slowdown_sclk
car_int[17] = spare
car_int[18] = spare
car_int[19] = spare
5.7.163 CLK_RST_CONTROLLER_INTMASK_0
Interrupt Mask Register.
5.7.164 CLK_RST_CONTROLLER_UTMIP_PLL_CFG0_0
The data sampling frequency relies on a 960 MHz clock, so the goal of the PLL is to have:
In_Frequency * (PLL_VCOMULTBY2+1) * (PLL_NDIV/PLL_MDIV) = 960 MHz. With a 12 MHz input from PLL_U, the default
setting of PLL_VCOMULTBY2 = 1, PLL_NDIV = 40, and PLL_MDIV = 1 results in a correct output.
This register is used to configure the PHY PLL contained in the UTMIP module.
UTMIP_PLL_KCP: KCP of the UTMIP PHY PLL. Charge Pump Gain control. Default
26:25 RW 0x0
value is zero. See cell specification.
UTMIP_PLL_NDIV: NDIV[7:0] input of UTMIP PLL. This is the feedback divider on the
23:16 RW 0x50
VCO feedback. 0x0 is not allowed. See cell specification.
UTMIP_PLL_MDIV: MDIV[7:0] input of the UTMIP PLL. This is the predivide on the
15:8 RW 0x1
PLL. 0x0 is not allowed. See cell specification.
3 RO X UTMIP_PLL_RESERVED: Reserved.
5.7.165 CLK_RST_CONTROLLER_UTMIP_PLL_CFG1_0
Crystal (Xtal) clock -> enters PLL_U to generate 12 MHz clock -> enters USB_PHY PLL to generate 480/60 MHz clock.
The following parameters control the bring-up of the PLLs (coming out of reset or suspend):
5.7.166 CLK_RST_CONTROLLER_UTMIP_PLL_CFG2_0
5.7.167 CLK_RST_CONTROLLER_PLLE_AUX_0
The range value is the recommended range. All counters support 0-255 step range.
TEST_FAST_PT: 0=Normal timer steps. 1=Fast timer steps. Fast programmable timer
7 RW 0x0 steps size for testing. Normal is per µs or ms, fast is per oscillator clock. Applies to all
programmable timer counters in SATA, PCIe and PLLE seq.
5.7.168 CLK_RST_CONTROLLER_SATA_PLL_CFG0_0
It is acceptable to assert all three signals at the same time. It is also acceptable for reset or lane_pd to return to the power-up
state in the middle of a power-down sequence.
5.7.169 CLK_RST_CONTROLLER_SATA_PLL_CFG1_0
The range value is the recommended range. All counters support 0-255 µs range in 1 µs steps
5.7.170 CLK_RST_CONTROLLER_PCIE_PLL_CFG_0
The PCIe power sequencer is driven by 1 primary reset input signal: reset. Reset is expected to be held static until the power-
up or power-down sequence is complete.
5.7.171 CLK_RST_CONTROLLER_PROG_AUDIO_DLY_CLK_0
Clock doubler with 1X/2X is available for the S/PDIF clock.
The CLK_ENB_SPDIF_DOUBLE bits in the CLK_OUT_ENB_V register must be enabled for either SYNC_1X_CLK
or SYNC_2X_CLK to operate.
PROG_DLY_CLK_SPDIF provides programmable delay for the S/DIF clock doublers.
5.7.172 CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S0_0
SYNC_CLK_RATE: 0000 = SPDIFIN recovered bit clock. 0001 = I2S0 bit clock. 0010 =
I2S1 bit clock. 0011 = I2S2 bit clock. 0100 = I2S3 bit clock. 0101 = I2S4 bit clock. 0110
= pllA_out0. 0111 = external vimclk (vimclk). 1xxx = Reserved.
0 = SPDIFIN
1 = I2S0
3:0 0x0 2 = I2S1
3 = I2S2
4 = I2S3
5 = I2S4
6 = PLLA_OUT0
7 = EXT_VIMCLK
5.7.173 CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S1_0
SYNC_CLK_RATE: 0000 = SPDIFIN recovered bit clock. 0001 = I2S0 bit clock. 0010 =
I2S1 bit clock. 0011 = I2S2 bit clock. 0100 = I2S3 bit clock. 0101 = I2S4 bit clock. 0110
= pllA_out0. 0111 = external vimclk (vimclk). 1xxx = reserved
0 = SPDIFIN
1 = I2S0
3:0 0x0 2 = I2S1
3 = I2S2
4 = I2S3
5 = I2S4
6 = PLLA_OUT0
7 = EXT_VIMCLK
5.7.174 CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S2_0
SYNC_CLK_RATE: 0000 = SPDIFIN recovered bit clock. 0001 = I2S0 bit clock. 0010 =
I2S1 bit clock. 0011 = I2S2 bit clock. 0100 = I2S3 bit clock. 0101 = I2S4 bit clock. 0110
= pllA_out0. 0111 = external vimclk (vimclk). 1xxx = Reserved.
0 = SPDIFIN
1 = I2S0
3:0 0x0 2 = I2S1
3 = I2S2
4 = I2S3
5 = I2S4
6 = PLLA_OUT0
7 = EXT_VIMCLK
5.7.175 CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S3_0
SYNC_CLK_RATE: 0000 = SPDIFIN recovered bit clock. 0001 = I2S0 bit clock. 0010 =
I2S1 bit clock. 0011 = I2S2 bit clock. 0100 = I2S3 bit clock. 0101 = I2S4 bit clock. 0110
= pllA_out0. 0111 = external vimclk (vimclk). 1xxx = Reserved.
0 = SPDIFIN
1 = I2S0
3:0 0x0 2 = I2S1
3 = I2S2
4 = I2S3
5 = I2S4
6 = PLLA_OUT0
7 = EXT_VIMCLK
5.7.176 CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_I2S4_0
SYNC_CLK_RATE: 0000 = SPDIFIN recovered bit clock. 0001 = I2S0 bit clock. 0010 =
I2S1 bit clock. 0011 = I2S2 bit clock. 0100 = I2S3 bit clock. 0101 = I2S4 bit clock. 0110
= pllA_out0. 0111 = external vimclk (vimclk). 1xxx = Reserved.
0 = SPDIFIN
1 = I2S0
3:0 0x0 2 = I2S1
3 = I2S2
4 = I2S3
5 = I2S4
6 = PLLA_OUT0
7 = EXT_VIMCLK
5.7.177 CLK_RST_CONTROLLER_AUDIO_SYNC_CLK_SPDIF_0
SYNC_CLK_RATE: 0000 = SPDIFIN recovered bit clock. 0001 = I2S0 bit clock. 0010 =
I2S1 bit clock. 0011 = I2S2 bit clock. 0100 = I2S3 bit clock. 0101 = I2S4 bit clock. 0110
= pllA_out0. 0111 = external vimclk (vimclk). 1xxx = Reserved.
0 = SPDIFIN
1 = I2S0
3:0 0x0 2 = I2S1
3 = I2S2
4 = I2S3
5 = I2S4
6 = PLLA_OUT0
7 = EXT_VIMCLK
5.7.178 CLK_RST_CONTROLLER_PLLD2_BASE_0
Offset: 0x4b8 │ Read/Write: R/W │ Reset: 0xXX08010c (0b000xx00000001xx00000000100001100)
PLLD2_IDDQ: 0 The PLL is powered up 1: Software can put the PLL in IDDQ by
setting this bit
19 RW 0x1
0 = OFF
1 = ON
5.7.179 CLK_RST_CONTROLLER_PLLD2_MISC_0
Offset: 0x4bc │ Read/Write: R/W │ Reset: 0xXX000000 (0b00xxx000000000000000000000000000)
29:27 RO X PLLD2_MON_TEST_OUT
5.7.180 CLK_RST_CONTROLLER_UTMIP_PLL_CFG3_0
UTMIP_PLL_CFG3_0
Offset: 0x4c0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxx0000000000000000000000000)
5.7.181 CLK_RST_CONTROLLER_PLLREFE_BASE_0
Offset: 0x4c4 │ Read/Write: R/W │ Reset: 0x00000000 (0b000000xxxxxx00000000000000000000)
PLLREFE_ENABLE:
30 DISABLE 0 = DISABLE
1 = ENABLE
26 0x0 PLLREFE_KVCO
5.7.182 CLK_RST_CONTROLLER_PLLREFE_MISC_0
Offset: 0x4c8 │ Read/Write: R/W │ Reset: 0x0X010000 (0b000xxxxxxxxxx0010000000000000000)
PLLREFE_EN_FSTLCK:
31 RW DISABLE 0 = DISABLE
1 = ENABLE
PLLREFE_LOCK_ENABLE:
30 RW DISABLE 0 = DISABLE
1 = ENABLE
PLLREFE_PTS:
00 = PTO is 0 (DISABLE);
18:17 RW 0x0 01 = PTO is FO;
10 = PTO is VCO out;
11 = Reserved.
5.7.183 CLK_RST_CONTROLLER_CPU_FINETRIM_BYP_0
When asserted, rise'rise clock propagation delay will be specified by {dr,r} fields.
6 select Read/Write 0 Otherwise, hardwired default delay will be applied. Similarly, fall'fall clock
propagation delay will be specified by {df, f} fields when select is asserted.
1:0 f Read/Write 0 00, 01, 10, 11: Increment fall'fall clock delay by 1, 2, 3, or 4 steps
®
These registers control the delay through the programmable trimmers (CORE_CLOCKS_shaper) inside the Cortex -A15
partitions.
CPU_FINETRIM_BYP
CPU_FINETRIM_SELECT
CPU_FINETRIM_DR
CPU_FINETRIM_DF
CPU_FINETRIM_F
CPU_FINETRIM_R
8 0x0 SCPU_9
7 0x0 SCPU_8
6 0x0 SCPU_7
5 0x0 FCPU_6
4 0x0 FCPU_5
3 0x0 FCPU_4
2 0x0 FCPU_3
1 0x0 FCPU_2
0 0x0 FCPU_1
5.7.184 CLK_RST_CONTROLLER_CPU_FINETRIM_SELECT_0
Offset: 0x4d4 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxx000000000)
8 0x0 SCPU_9
7 0x0 SCPU_8
6 0x0 SCPU_7
5 0x0 FCPU_6
4 0x0 FCPU_5
3 0x0 FCPU_4
2 0x0 FCPU_3
1 0x0 FCPU_2
0 0x0 FCPU_1
5.7.185 CLK_RST_CONTROLLER_CPU_FINETRIM_DR_0
Offset: 0x4d8 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxx000000000)
8 0x0 SCPU_9
7 0x0 SCPU_8
6 0x0 SCPU_7
5 0x0 FCPU_6
4 0x0 FCPU_5
3 0x0 FCPU_4
2 0x0 FCPU_3
1 0x0 FCPU_2
0 0x0 FCPU_1
5.7.186 CLK_RST_CONTROLLER_CPU_FINETRIM_DF_0
Offset: 0x4dc | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxx000000000)
8 0x0 SCPU_9
7 0x0 SCPU_8
6 0x0 SCPU_7
5 0x0 FCPU_6
4 0x0 FCPU_5
3 0x0 FCPU_4
2 0x0 FCPU_3
1 0x0 FCPU_2
0 0x0 FCPU_1
5.7.187 CLK_RST_CONTROLLER_CPU_FINETRIM_F_0
Offset: 0x4e0 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxx000000000000000000)
5.7.188 CLK_RST_CONTROLLER_CPU_FINETRIM_R_0
Offset: 0x4e4 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxx000000000000000000)
5.7.189 CLK_RST_CONTROLLER_PLLC2_BASE_0
There are special startup and programming considerations for this digital PLL. Consult the datasheet for details
LATCHED: The writes to this field are latched by STROBE. Software should note that while readback will tell the last
written value, that might not be the latched value.
DIRECT: It is a DIRECT read/write field. The writes to this field are not latched by STROBE. So, readback will always
tell the correct state.
5.7.190 CLK_RST_CONTROLLER_PLLC2_MISC_0_0
Offset: 0x4ec │ Read/Write: R/W │ Reset: 0x40000000 (0b01000000000000000000000000000000)
PLLC2_STROBE: STROBE for various PLL input controls. Those controls are transparent
31 0x0
only when STROBE is high.
PLLC2_RESET: Reset for digital logic of the PLL. DIRECT. 0 = Out of reset, 1 = Reset
asserted.
30 0x1
0 = DISABLE
1 = ENABLE
5.7.191 CLK_RST_CONTROLLER_PLLC2_MISC_1_0
Offset: 0x4f0 │ Read/Write: R/W │ Reset: 0x08000000 (0bxxxx1000xx000000xx00xx00xxxx0000)
PLLC2_IDDQ:
27 0x1 0 = OFF
1 = ON
PLLC2_VCO_BAND_SW: If calibration is not being done, this field can force the VCO
26:24 0x0
band (select n+1 band, 1 to 8). LATCHED.
5.7.192 CLK_RST_CONTROLLER_PLLC2_MISC_2_0
Offset: 0x4f4 │ Read/Write: R/W │ Reset: 0x00000000 (0bx000xx00xx00xx00xx00xx00xx00xx00)
5.7.193 CLK_RST_CONTROLLER_PLLC2_MISC_3_0
Offset: 0x4f8 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxx00000000000000000000000000)
25:0 0x0 PLLC2_SETUP: Read the PLL data sheet for the description of each bit. DIRECT.
5.7.194 CLK_RST_CONTROLLER_PLLC3_BASE_0
Offset: 0x4fc │ Read/Write: R/W │ Reset: 0x0X000101 (0b000xxxxxx000xxxx00000001xxxxxx01)
5.7.195 CLK_RST_CONTROLLER_PLLC3_MISC_0_0
Offset: 0x500 │ Read/Write: R/W │ Reset: 0x40000000 (0b000000000000000000000000000) | Default: 0x00644650
5.7.196 CLK_RST_CONTROLLER_PLLC3_MISC_1_0
Offset: 0x504 │ Read/Write: R/W │ Reset: 0x08000000 (0bxxxx1000xx000000xx00xx00xxxx0000)
PLLC3_IDDQ:
27 0x1 0 = OFF
1 = ON
PLLC3_VCO_BAND_SW: If calibration is not being done, this field can force the VCO
26:24 0x0
band (select n+1 band, 1 to 8). LATCHED.
5.7.197 CLK_RST_CONTROLLER_PLLC3_MISC_2_0
Offset: 0x508 │ Read/Write: R/W │ Reset: 0x00000000 (0bx000xx00xx00xx00xx00xx00xx00xx00)
5:4 0x0 PLLC3_FD_OUT_HYST: fd_pullout_hyst_val. Refer to the Tegra K1 data sheet for
5.7.198 CLK_RST_CONTROLLER_PLLC3_MISC_3_0
Offset: 0x50c │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxx00000000000000000000000000)
25:0 0x0 PLLC3_SETUP: Refer to the PLL datasheet for the descriptions of each bit. DIRECT.
5.7.199 CLK_RST_CONTROLLER_PLLX_MISC_1_0
Offset: 0x510 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxx000000000000000000000000)
5.7.200 CLK_RST_CONTROLLER_PLLX_MISC_2_0
Offset: 0x514 │ Read/Write: R/W │ Reset: 0x0000000X (0b000000000000000000000000xx00xx00)
5.7.201 CLK_RST_CONTROLLER_PLLX_MISC_3_0
Offset: 0x518 │ Read/Write: R/W │ Reset: 0x00000008 (0bxxxxxxxx00000000xxxx0000xxxx1000)
PLLX_PRB_OBS_SEL:
0 = CSITE
1 = FCPU0_LEAF
2 = FCPU1_LEAF
23:16 0x0 3 = FCPU2_LEAF
4 = FCPU3_LEAF
5 = MC
6 = MSELECT
7 = FTOP_SHAPER
3 0x1 PLLX_IDDQ:0:
5.7.202 CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0
XUSB I/O PLL Power Sequencer Input Software Control Program Guide
The software control input can be used for test coverage or driving power sequencer SM via software.
The XUSB power sequencer is driven by a primary reset input signal: reset. Reset is expected to be held static until the power-
up or power-down sequence is complete.
5.7.203 CLK_RST_CONTROLLER_XUSBIO_PLL_CFG1_0
The range value is the recommended range. All counters support 0-255 µs range in 1 µs steps.
5.7.204 CLK_RST_CONTROLLER_PLLE_AUX1_0
The range value is the recommended range. All counters support 0-255 step range.
5.7.205 CLK_RST_CONTROLLER_PLLP_RESHIFT_0
Offset: 0x528 │ Read/Write: R/W │ Reset: 0x0000003b (0bxxxxxxxxxxxxxxxxxxxxxx0000111011)
PLLP_OUT0_RATIO: PLLP_OUT0 divider from base PLLP (lsb denotes 0.5x). The
9:2 0xe
default is 408/8=51 MHz.
5.7.206 CLK_RST_CONTROLLER_UTMIPLL_HW_PWRDN_CFG0_0
Offset: 0x52c │ Read/Write: R/W │ Reset: 0xXX00000f (0bxxxxxx10xxxxxxxxxxxxxxxx00001111)
5.7.207 CLK_RST_CONTROLLER_PLLU_HW_PWRDN_CFG0_0
Offset: 0x530 │ Read/Write: R/W │ Reset: 0x0X00008d (0bxxxxxx10xxxxxxxxxxxxxxxx100011x1)
5.7.208 CLK_RST_CONTROLLER_XUSB_PLL_CFG0_0
Note that default value is the recommended range.
PLLU_LOCK_DLY: Delay from PLLU ENABLE assertion to the PLL LOCK. Range is
23:14 0x64
100 µs-1 ms.
5.7.209 CLK_RST_CONTROLLER_CLK_CPU_MISC_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.210 CLK_RST_CONTROLLER_CLK_CPUG_MISC_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.211 CLK_RST_CONTROLLER_CLK_CPULP_MISC_0
[CCLK Multi-Address]: See “Multi-Address Tagging” in this section for more details.
5.7.212 CLK_RST_CONTROLLER_PLLX_HW_CTRL_CFG_0
Offset: 0x548 │ Read/Write: R/W │ Reset: 0x00000001 (0bxxxxxxxxxxxxxxxxxxxxxxxxx0000001)
FORCE_FSM_CLEAR:
6 DISABLE 0 = DISABLE
1 = ENABLE
SLOWDOWN_CYA:
0 = REF_DIVM
5:4 REF_DIVM 1 = REF_DIVM_DIV4
2 = SCLK_DIV1
3 = SCLK_DIV16
RAMP_MODE:
3 SLOW 0 = SLOW
1 = FAST
SEQ_TRIGGER:
2 DISABLE 0 = DISABLE
1 = ENABLE
SW_OVERRIDE:
1 DISABLE 0 = DISABLE
1 = ENABLE
SWCTL:
0 ENABLE 0 = DISABLE
1 = ENABLE
5.7.213 CLK_RST_CONTROLLER_PLLX_SW_RAMP_CFG_0
Offset: 0x54c │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
5.7.214 CLK_RST_CONTROLLER_PLLX_HW_CTRL_STATUS_0
Offset: 0x550 │ Read/Write: RO │ Reset: 0xXX000XXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
FSM_STATE:
0 = DISABLE
1 = SEQ_AWAIT
2 = SEQ_FAST_BEGIN
31:28 X 3 = SEQ_FAST_BUSY0
4 = SEQ_FAST_BUSY1
5 = SEQ_FAST_BUSY2
6 = SEQ_FAST_BUSY3
7 = SEQ_SLOW_BEGIN
8 = SEQ_SLOW_BUSY0
CFG_REG_SELECT:
0 = NONE
27:26 X
1 = HW
2 = SW
HW_RAMP_DONE:
10 X 0 = FALSE
1 = TRUE
SW_RAMP_DONE:
9 X 0 = FALSE
1 = TRUE
LONG_LATENCY_THROTTLE:
8 X 0 = DISABLE
1 = ENABLE
HW_RESTORE_EN:
7 X 0 = DISABLE
1 = ENABLE
HW_THROTTLE_EN:
6 X 0 = DISABLE
1 = ENABLE
SW_RAMP_STATUS:
5 X 0 = DONE
1 = INPROGRESS
HW_RAMP_STATUS:
4 X 0 = DONE
1 = INPROGRESS
SEQ_STATUS:
0 = SEQ_DIABLE
3:2 X 1 = SEQ_ENABLE
2 = SEQ_BUSY_FAST_MODE
3 = SEQ_BUSY_SLOW_MODE
SW_OVERRIDE_STATUS:
1 X 0 = DISABLE
1 = ENABLE
SWCTL_STATUS:
0 X 0 = DISABLE
1 = ENABLE
5.7.215 CLK_RST_CONTROLLER_SPARE_REG0_0
Offset: 0x55c │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
DIVIDER_FSM_CYA: Disable ability to change rate and ratio while module clock is off.
5 0x0
Module should be off when changing this value.
4 0x0 VAL1
1 0x0 TMR_CLKEN_STICKY
0 0x0 EMC_LATENCY_OVERRIDE
5.7.216 CLK_RST_CONTROLLER_PLLD2_SS_CFG_0
Offset: 0x570 | Read/Write: R/W | Reset: 0x1XX00000 (0b00010xxxx0xxxxxxxxxxxxxxxxxxxxxx)
29 RW 0x0 PLLD2_EN_DITHER2
28 RW 0x1 PLLD2_EN_DITHER
27 RW 0x0 PLLD2_SDM_RESET
25:23 RO X PLLD2_SDM_TEST_OUT
22 RW 0x0 PLLD2_CLAMP
5.7.217 CLK_RST_CONTROLLER_PLLD2_SS_CTRL1_0
Offset: 0x574 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
5.7.218 CLK_RST_CONTROLLER_PLLD2_SS_CTRL2_0
Offset: 0x578 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
5.7.219 CLK_RST_CONTROLLER_PLLDP_BASE_0
PLLDP Registers
PLDIV[3:0] CLKOUT
0001 vcoclock/2
0010 vcoclock/3
0011 vcoclock/4
PLDIV[3:0] CLKOUT
0100 vcoclock/5
0101 vcoclock/6
0110 vcoclock/8
0111 vcoclock/10
1000 vcoclock/12
1001 vcoclock/16
1010 vcoclock/12
1011 vcoclock/16
1100 vcoclock/20
1101 vcoclock/24
1110 vcoclock/32
1111 Reserved
vcoclock Frequency:
5.7.220 CLK_RST_CONTROLLER_PLLDP_MISC_0
Offset: 0x594 | Read/Write: R/W | Reset: 0xXX000000 (0b00xxx000000000000000000000000000)
29:27 RO X PLLDP_MON_TEST_OUT
5.7.221 CLK_RST_CONTROLLER_PLLDP_SS_CFG_0
Offset: 0x598 | Read/Write: R/W | Reset: 0x1XX00000 (0b00010xxxx0xxxxxxxxxxxxxxxxxxxxxx)
29 RW 0x0 PLLDP_EN_DITHER2
28 RW 0x1 PLLDP_EN_DITHER
27 RW 0x0 PLLDP_SDM_RESET
25:23 RO X PLLDP_SDM_TEST_OUT
22 RW 0x0 PLLDP_CLAMP
5.7.222 CLK_RST_CONTROLLER_PLLDP_SS_CTRL1_0
Offset: 0x59c | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
5.7.223 CLK_RST_CONTROLLER_PLLDP_SS_CTRL2_0
Offset: 0x5a0 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
5.7.224 CLK_RST_CONTROLLER_PLLC4_BASE_0
Offset: 0x5a4 | Read/Write: R/W | Reset: 0xXX080101 (0b000xx00000001xx00000000100000001)
5.7.225 CLK_RST_CONTROLLER_PLLC4_MISC_0
Offset: 0x5a8 | Read/Write: R/W | Reset: 0xXX000000 (0b00xxx000000000000000000000000000)
1 = ENABLE
29:27 RO X PLLC4_MON_TEST_OUT
5.7.226 CLK_RST_CONTROLLER_PLLC4_SS_CFG_0
Offset: 0x5ac | Read/Write: R/W | Reset: 0x1XX00000 (0b00010xxxx0xxxxxxxxxxxxxxxxxxxxxx)
PLLC4_EN_SDM:
31 RW DISABLE 0 = DISABLE
1 = ENABLE
29 RW 0x0 PLLC4_EN_DITHER2
28 RW 0x1 PLLC4_EN_DITHER
27 RW 0x0 PLLC4_SDM_RESET
25:23 RO X PLLC4_SDM_TEST_OUT
22 RW 0x0 PLLC4_CLAMP
5.7.227 CLK_RST_CONTROLLER_PLLC4_SS_CTRL1_0
Offset: 0x5b0 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
5.7.228 CLK_RST_CONTROLLER_PLLC4_SS_CTRL2_0
Offset: 0x5b4 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
5.7.229 CLK_RST_CONTROLLER_CLK_SPARE0_0
Offset: 0x5c4 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
5.7.230 CLK_RST_CONTROLLER_CLK_SPARE1_0
Offset: 0x5c8 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
5.7.231 CLK_RST_CONTROLLER_GPU_ISOB_CTRL_0
Offset: 0x5cc | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
5.7.232 CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_CORE_HOST_0
Offset: 0x600 │ Read/Write: R/W │ Reset: 0x00000000 (0b000xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.233 CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_FALCON_0
Offset: 0x604 │ Read/Write: R/W │ Reset: 0x00000000 (0b000xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.234 CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_FS_0
Offset: 0x608 │ Read/Write: R/W │ Reset: 0x00000000 (0b000xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.235 CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_CORE_DEV_0
Offset: 0x60c │ Read/Write: R/W │ Reset: 0x00000000 (0b000xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.236 CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_SS_0
Offset: 0x610 │ Read/Write: R/W │ Reset: 0x00000000 (0b000xxx00xxxxxxxxxxxxxxxx00000000)
5.7.237 CLK_RST_CONTROLLER_CLK_SOURCE_CILAB_0
Offset: 0x614 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.238 CLK_RST_CONTROLLER_CLK_SOURCE_CILCD_0
Offset: 0x618 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.239 CLK_RST_CONTROLLER_CLK_SOURCE_CILE_0
Offset: 0x61c │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.240 CLK_RST_CONTROLLER_CLK_SOURCE_DSIA_LP_0
Offset: 0x620 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.241 CLK_RST_CONTROLLER_CLK_SOURCE_DSIB_LP_0
Offset: 0x624 │ Read/Write: R/W │ Reset: 0xc0000000 (0b11xxxxxxxxxxxxxxxxxxxxxx00000000)
5.7.242 CLK_RST_CONTROLLER_CLK_SOURCE_ENTROPY_0
Offset: 0x628 │ Read/Write: R/W │ Reset: 0x20000000 (0b001xxxxxxxxxxxxxxxxxxxx000000000)
5.7.243 CLK_RST_CONTROLLER_CLK_SOURCE_DVFS_REF_0
Offset: 0x62c │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxxxxxxxxxxxxxxx00000000)
5.7.244 CLK_RST_CONTROLLER_CLK_SOURCE_DVFS_SOC_0
Offset: 0x630 │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxxxxxxxxxxxxxxx00000000)
5.7.245 CLK_RST_CONTROLLER_CLK_SOURCE_TRACECLKIN_0
Offset: 0x634 │ Read/Write: R/W │ Reset: 0xc0000000 (0b110xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.246 CLK_RST_CONTROLLER_CLK_SOURCE_ADX0_0
Offset: 0x638 │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxxxxxxxxxxxxxxx00000000)
5.7.247 CLK_RST_CONTROLLER_CLK_SOURCE_AMX0_0
Offset: 0x63c │ Read/Write: R/W │ Reset: 0xd0000000 (0b1101xxxxxxxxxxxxxxxxxxxx00000000)
5.7.248 CLK_RST_CONTROLLER_CLK_SOURCE_EMC_LATENCY_0
Offset: 0x640 │ Read/Write: R/W │ Reset: 0x60000000 (0b011xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.249 CLK_RST_CONTROLLER_CLK_SOURCE_SOC_THERM_0
Offset: 0x644 │ Read/Write: R/W │ Reset: 0x40000000 (0b010xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.250 CLK_RST_CONTROLLER_CLK_SOURCE_VI_SENSOR2_0
Offset: 0x658 | Read/Write: R/W | Reset: 0x00000000 (0b000xxxxxxxxxxxxxxxxxxxxx00000000)
1 = PLLC2_OUT0
2 = PLLC_OUT0
3 = PLLC3_OUT0
4 = PLLP_OUT0
6 = PLLA_OUT0
5.7.251 CLK_RST_CONTROLLER_CLK_SOURCE_I2C6_0
Offset: 0x65c | Read/Write: R/W | Reset: 0xc0000000 (0b110xxxxxxxxxxxxx0000000000000000)
5.7.252 CLK_RST_CONTROLLER_CLK_SOURCE_EMC_DLL_0
Offset: 0x664 | Read/Write: R/W | Reset: 0x60000000 (0b011xxxxxxxxxxxx0xxxxxxxx00000000)
5.7.253 CLK_RST_CONTROLLER_CLK_SOURCE_HDMI_AUDIO_0
Offset: 0x668 | Read/Write: R/W | Reset: 0x00000000 (0b000xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.254 CLK_RST_CONTROLLER_CLK_SOURCE_CLK72MHZ_0
Offset: 0x66c | Read/Write: R/W | Reset: 0x00000000 (0b000xxxxxxxxxxxxxxxxxxxxx00000000)
5.7.255 CLK_RST_CONTROLLER_CLK_SOURCE_ADX1_0
Offset: 0x670 | Read/Write: R/W | Reset: 0xd0000000 (0b1101xxxxxxxxxxxxxxxxxxxx00000000)
5.7.256 CLK_RST_CONTROLLER_CLK_SOURCE_AMX1_0
Offset: 0x674 | Read/Write: R/W | Reset: 0xd0000000 (0b1101xxxxxxxxxxxxxxxxxxxx00000000)
5.7.257 CLK_RST_CONTROLLER_CLK_SOURCE_VIC_0
Offset: 0x678 | Read/Write: R/W | Reset: 0x00000000 (0b000xxxxxxxxxxxxx0000000000000000)
VIC_IDLE_DIVISOR: N = Divide by (n+1) (lsb denote 0.5x) if all 0's, this idle
15:8 0x0 divisor field will not be used. For non-zero values, when host1x is idle, this
field will be used instead of VIC_CLK_DIVISOR.
5.7.258 CLK_RST_CONTROLLER_PLLP_OUTC_0
Offset: 0x67c | Read/Write: R/W | Reset: 0x00030000 (0b00000000xxxxx011xxxxxxxxxxxxxxxx)
31:24 0x0 PLLP_OUT5_RATIO: PLLP_OUT5 divider from base PLLP (lsb denote 0.5x).
5.7.259 CLK_RST_CONTROLLER_PLLP_MISC1_0
Offset: 0x680 | Read/Write: R/W | Reset: 0x30000000 (0bx011xxxxxxxxxxxxxxxxxxxxxxxxxxxx)
5.7.260 CLK_RST_CONTROLLER_EMC_DIV_CLK_SHAPER_CTRL_0
EMC_DIV_CLK_SHAPER_CTRL and EMC_PLLC_SHAPER_CTRL shaper control registers should only be changed when
the shaper paths are not being selected
1 = ENABLE
EMC_DIV_CLK_SHAPER_CTRL_TRIM_SELECT:
DEFAULT_SETTING: Controlled by shaper pins (RTL): default_values[5:0].
DEFAULT SW_PROG: Controlled by Software programmable register
7
_SETTING EMC_DIV_CLK_SHAPER_CTRL[5:0]
0 = DEFAULT_SETTING
1 = SW_PROG
EMC_DIV_CLK_SHAPER_CTRL_SW_BYPASS:
ACTIVE: Shaper circuit in clock path
6 ACTIVE BYPASS: Shaper Bypassed. S -> Y path to reduce distortion
0 = ACTIVE
1 = BYPASS
EMC_DIV_CLK_SHAPER_CTRL_DF:
DISABLE: No delay on CLKIN(fall) -> CLKOUT(fall)
ENABLE: Delay added on CLKIN(fall) -> CLKOUT(fall)
5 DISABLE
Based on the EMC_DIV_CLK_SHAPER_CTRL[4:3] register
0 = DISABLE
1 = ENABLE
EMC_DIV_CLK_SHAPER_CTRL_DR:
DISABLE: No delay on CLKIN(rise) -> CLKOUT(rise)
ENABLE: Delay added on CLKIN(rise) -> CLKOUT(rise)
2 DISABLE
Controlled by the EMC_DIV_CLK_SHAPER_CTRL[1:0] register.
0 = DISABLE
1 = ENABLE
5.7.261 CLK_RST_CONTROLLER_EMC_PLLC_SHAPER_CTRL_0
EMC_DIV_CLK_SHAPER_CTRL and EMC_PLLC_SHAPER_CTRL shaper control registers should only be changed when
the shaper paths are not being selected
EMC_PLLC_SHAPER_CTRL_TRIM_SELECT:
DEFAULT_SETTING: Controlled by shaper pins (RTL): default_values[5:0].
DEFAULT SW_PROG: Controlled by Software programmable register
7
_SETTING EMC_PLLC_SHAPER_CTRL[5:0]
0 = DEFAULT_SETTING
1 = SW_PROG
EMC_PLLC_SHAPER_CTRL_SW_BYPASS:
ACTIVE: Shaper circuit in clock path
6 ACTIVE BYPASS: Shaper Bypassed. S->Y path to reduce distortion
0 = ACTIVE
1 = BYPASS
EMC_PLLC_SHAPER_CTRL_DF:
DISABLE: No delay on CLKIN(fall) -> CLKOUT(fall)
ENABLE: Delay added on CLKIN(fall) -> CLKOUT(fall) based on the
5 DISABLE
EMC_PLLC_SHAPER_CTRL[4:3] register
0 = DISABLE
1 = ENABLE
EMC_PLLC_SHAPER_CTRL_DR:
DISABLE: No delay on CLKIN(rise) -> CLKOUT(rise)
ENABLE: Delay added on CLKIN(rise) -> CLKOUT(rise)
2 DISABLE
Controlled by the EMC_PLLC_SHAPER_CTRL[1:0] register
0 = DISABLE
1 = ENABLE
6.0 CL-DVFS
The CL_DVFS module contains control logic that provides a hardware mechanism for controlling the clock rate and power
supply voltage of the fast CPU complex.
This section describes the closed-loop dynamic voltage and frequency scaling (CL-DVFS) registers. It is not intended to be a
programming guide to CL-DVFS, as it is expected that NVIDIA supplied drivers will always be used with it. However, the
register interface is documented to aid with understanding those drivers.
6.1.1 CL_DVFS_CTRL_0
Offset: 0x0 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00)
6.1.2 CL_DVFS_CONFIG_0
Offset: 0x4 | Read/Write: R/W | Reset: 0x00000006 (0bxxxxxxxxxxxxxxxxxxxxxxxx00000110)
DFLL_CONFIG_DIV_S: Refclk divider for setting DFLL control loop sample rate. Refclk is divided by 32x
7:0 0x6
the value in this field
6.1.3 CL_DVFS_PARAMS_0
Offset: 0x8 | Read/Write: R/W | Reset: 0x000000f0 (0bxxxxxxx000000000xxxxx00011110000)
DFLL_PARAMS_FORCE_MODE:
0 = DISABLE : Disabled. The I2C control value is never forced during a frequency change.
23:22 0x0
1 = FIXED : In Fixed Delay mode, the I2C control value is forced for a fixed number of sample periods.
2 = AUTO: In Auto mode, the I2C control value is forced for a calculated number of sample periods.
DFLL_PARAMS_CF_PARAM: Length of time that a forced I2C control value will be applied after a
frequency change if forcing was requested for that change. In Fixed Delay mode, it provides the number
21:16 0x0
of sample periods to force the I2C control value. In Auto mode, the force time is equal to I2C control
output delta * cf_param / 16
DFLL_PARAMS_CI_PARAM: Integral term gain in the control loop controls how a cycle deficit/surfeit
after a frequency change is cleared. It temporarily raises or lowers the core voltage to allow the total
clock cycle count to converge with the ideal number of cycles that should have been produced since the
last frequency change request.
10:8 0x0 0 = DISABLE
1 = DIV2
2 = DIV4 :
3 = DIV8
4 = DIV16
DFLL_PARAMS_CG_PARAM: Overall loop gain control (SIGNED value), controls the overall response
7:0 0xf0
time of the control loop
6.1.4 CL_DVFS_TUNE0_0
Offset: 0xc | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxx000000000000000000000000)
23:16 0x0 DFLL_TUNE0_DLY_STK: Input bits to both coarse (4) and fine (4) tune the delay
15:8 0x0 DFLL_TUNE0_DLY_SRAM: Input bits to both coarse (3) and fine (5) tune the delay of the SRAM path.
7:0 0x0 DFLL_TUNE0_DLY_INV: Input bits to both coarse (3) and fine (5) tune the delay of the inverter path
6.1.5 CL_DVFS_TUNE1_0
Offset: 0x10 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxx00000000000000000000)
DFLL_TUNE1_DLY_FINE: Input bits to tune the two phases of the clock. 8 bits to tune, and 1 bit to
19:11 0x0
choose high vs. low
DFLL_TUNE1_DLY_WIRE: Input bits to both coarse (2) and fine (9) tune the delay of wire dominated
10:0 0x0
path
6.1.6 CL_DVFS_FREQ_REQ_0
Offset: 0x14 | Read/Write: R/W | Reset: 0x0000ff40 (0bxxx00000000000001111111101000000)
DFLL_FREQ_REQ_FORCE_EN: Set to '1' to force I2C control output to initial value specified by the
28 0x0
'force_val' field
DFLL_FREQ_REQ_FORCE_VAL: Value forced onto the integrator during a frequency transition, only
27:16 0x0 used if the 'force_en' field below is '1' AND the global 'force_mode' field of the dfll_params register is not
set to 'disable'. The best value is (desired I2C control value - safe I2C control value) x 128) / Cg.
DFLL_FREQ_REQ_SCALE: Proportion of output clock cycles (+1) to *not* skip over a period of 256
15:8 0xff
cycles
DFLL_FREQ_REQ_VALID: Set to '1' to indicate that the frequency configuration is valid and should be
7 0x0 used. If this bit is '0', the control loop will revert to 'open loop' mode, and the I2C control interface value
will be determined by the 'safe' value.
DFLL_FREQ_REQ_MULT: Primary frequency multiplication factor 'F'. The ring oscillator output
6:0 0x40
frequency will be (REF_CLK/2) x F.
6.1.7 CL_DVFS_SCALE_RAMP_0
Offset: 0x18 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxx0000)
DFLL_OUTPUT_RAMP_RATE: The ramp up/ramp down rate of the control signal to the output scaler.
3:0 0x0
Determines the number of cycles (+1) to wait for each counter step.
6.1.8 CL_DVFS_DROOP_CTRL_0
Offset: 0x1c | Read/Write: R/W | Reset: 0x00000810 (0bxxxxxxxx00000000xxxx100000010000)
DFLL_DROOP_CTRL_MIN_FREQ: The minimum allowed ring oscillator frequency before the 'droop'
23:16 0x0 clock skipper is enabled. The value written determines the minimum number of cycles that are allowed
in 4 REF_CLK cycles' Fmin = droop_ctrl.min_freq * (REF_CLK / 4)
DFLL_DROOP_CTRL_CUT: CPU clock is scaled by (cut+1)/16 immediately after reaching the minimum
11:8 0x8
ring oscillator frequency
DFLL_DROOP_CTRL_RATE: Controls the rate at which clock cycles are re-introduced to the droop
7:0 0x10 skipper after it has been ramped down to compensate for a frequency droop. It is the number of cycles
(+1) to wait for each counter step
6.1.9 CL_DVFS_OUTPUT_CFG_0
Offset: 0x20 | Read/Write: R/W | Reset: 0x50200000 (0bx1010000xx100000xx00000000000000)
DFLL_OUTPUT_CONFIG_I2C_ENABLE: Master enable control for I2C control value updates. If this
30 0x1
field is '0', then I2C control messages are inhibited, regardless of the DFLL mode.
DFLL_OUTPUT_CONFIG_SAFE: 'Safe' value for the OUTPUT control interface. This value will be
29:24 0x10
output whenever OUTPUT is enabled but the DFLL is disabled, or in open loop mode.
21:16 0x20 DFLL_OUTPUT_CONFIG_MAX: Maximum allowed value on the OUTPUT control interface.
13:8 0x0 DFLL_OUTPUT_CONFIG_MIN: Minimum allowed value on the OUTPUT control interface.
DFLL_OUTPUT_CONFIG_DELTA_EN:
1: In conjunction with 'clk_en'=1, causes the PWM clock/data output to only become active (for 32
7 0x0
cycles) whenever a change in the PWM value occurs.
0: The PWM data/clock outputs run continuously when enabled.
DFLL_OUTPUT_CONFIG_CLK_EN: Enables the PMIC control clock output for digitally controlled
6 0x0
PMICs.
DFLL_OUTPUT_CONFIG_DIV_D: Divider setting for PWM PMIC control output (divides the SOC
5:0 0x0
clock).
6.1.10 CL_DVFS_OUTPUT_FORCE_0
Offset: 0x24 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxx0000000)
6 0x0 DFLL_OUTPUT_FORCE_ENABLE: Enable the force value onto the OUTPUT control output
6.1.11 CL_DVFS_MONITOR_CTRL_0
Offset: 0x28 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxx000)
6.1.12 CL_DVFS_MONITOR_DATA_0
Offset: 0x2c | Read/Write: RO | Reset: 0x000XXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
6.1.13 CL_DVFS_I2C_CFG_0
Offset: 0x40 | Read/Write: R/W | Reset: 0x0010f000 (0bxxxxxxxxxxx1x0001111x00000000000)
I2C_ADDR_7BIT_10BIT:
10 0x0 0: Selects 7-bit addressing
1: Select 10-bit addressing
6.1.14 CL_DVFS_I2C_VDD_REG_ADDR_0
Offset: 0x44 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxx0000000000000000)
6.1.15 CL_DVFS_I2C_STS_0
Offset: 0x48 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
6:1 X I2C_LAST_VALUE: Output value from the DFLL of last I2C request that was completed successfully
6.1.16 CL_DVFS_INTR_STS_0
Offset: 0x5c | Read/Write: RO | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00)
MAX_VDD_LIMIT_INTR: Interrupt to indicate the DFLL has hit the VDD ceiling as programmed in
1 0x0
DFLL_OUTPUT_CONFIG_MAX
MIN_VDD_LIMIT_INTR: Interrupt to indicate the DFLL has hit the VDD floor as programmed in
0 0x0
DFLL_OUTPUT_CONFIG_MIN
6.1.17 CL_DVFS_INTR_EN_0
Offset: 0x60 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00)
MAX_VDD_LIMIT_INTR_EN: Enable for interrupt to indicate the DFLL has hit the VDD ceiling as
1 0x0
programmed in DFLL_OUTPUT_CONFIG_MAX
MIN_VDD_LIMIT_INTR_EN: Enable for interrupt to indicate the DFLL has hit the VDD floor as
0 0x0
programmed in DFLL_OUTPUT_CONFIG_MIN
6.1.18 CL_DVFS_I2C_CLK_DIVISOR_REGISTER_0
The divisor values (N) must be programmed so that:
6.1.19 CL_DVFS_OUTPUT_LUT_0
This lookup table (LUT) contains voltage LUT values stored in a 33-deep by 8 bit wide RAM. To program the LUT, simply
sequentially address the RAM, using the base offset address of 0x20 (10’b10xxxxxxxx). Addresses are DWORD aligned, not
BYTE aligned. PMIC values must be programmed to span the entire desired operating range, and be monotonically
increasing. The logic assumes that the middle entry (16th) corresponds to the ‘safe’ initial voltage, as specified in the
DFLL_OUTPUT_CONFIG.SAFE field. DFLL_OUTPUT_CONFIG_SAFE is initialized by default to 0x10, which corresponds to
the middle of the LUT. However, the safe value can point to any LUT entry.
7.0 TIMERS
®
This section documents the various timers available to software in a Tegra K1 system. The following table summarizes these
timers.
Note: The same logic is present in both Tegra K1 variants. References to Shadow CPU, Cluster1, and CPUs 2 and 3 in
the Fast CPU (FCPU) cluster are not relevant to Tegra K1 64-bit.
A physical counter that contains the count value of the system counter.
A virtual counter that indicates virtual time. The virtual counter contains the value of the physical counter minus a 64-
bit virtual offset.
A set of four timers per CPU.
Refer to the appropriate ARM Architecture Reference Manual for generic timer specifications.
The TSC is implemented as part of the Tegra K1 Power Management Controller (PMC). It is a 56-bit counter which runs at the
crystal oscillator clock frequency. Refer to the Power Management Controller section in this TRM for additional TSC
information.
Timer interval, one-shot, or periodic interrupts are configured in the Timer Present Value register (PTV). When enabled, the
timer loads the Timer Present Value count and begins decrementing every one microsecond. The timer generates a timer
request when the count reaches zero.
If the PTV periodic control bit is set, the timer reloads the PTV interval and continues decrementing the timer.
The timer count is 29 bits wide, supporting timer intervals of 536.87 seconds maximum or 1 microsecond minimum. Bit 30 of
the periodic Timer Value (PTV) is the enable bit for the timer. Reading the PTV Register clears any pending timer interrupt.
A read-only Preset count register (PCR) allows the processor to inspect the current value of the timer decrement counter. The
timestamp counter (32 bits wide) is cleared to zero on reset, and counts upwards every 1 µs.
The figure below shows a reference decomposition of the timers in functional blocks.
Reset
nReset controller
nReset[i]
Pmc2carReset
Core[i]
System reset
nFIQ Interrupt
nFIQ[i]
controller
Only for COP
i=5
Timers
Timer0
Timer1 Legacy OR OR OR
Timer2 WD
Timer3
Timer4
Timer5
CoreWD[0]
CoreWD[1]
TimerN
CoreWD[4]
The Tegra K1 series processor provides five Watchdog Timers, one each for main CPUs and one for COP (AVP):
WDT0 is allocated to CPU0 of cluster0 or the shadow CPU of cluster1
WDT1 is allocated to CPU1
WDT2 is allocated to CPU2
WDT3 is allocated to CPU3
WDT4 is allocated to COP (AVP)
The 5 watchdog timers are directly associated with a processor core, i.e., 4 CPU cores and the COP:
There are no dedicated timers for the WDTs. Each WDT can be configured to use any one of the TMRs as its timer source.
When the timer decrements to zero the first time, a WDT interrupt can be generated
When the timer consecutively decrements down to zero a second time, without the processor reading the interrupt
status register (TIMER_TMRx_TMR_PCR), a per core FIQ can be generated. This feature only works for the COP;
the corresponding signal does not propagate to the CPU cores.
When the timer consecutively decrements down to zero a third time, without the processor reading the interrupt
status register (TIMER_TMRx_TMR_PCR), a per CPU reset can be generated.
When the timer consecutively decrements down to zero a fourth time, a system reset can be generated. The cause of
this system reset can be read by reading PMC_RST_STATUS[RST_SOURCE] (see the Power Management
Controller section for more information).
Reset
CPU Reset
Controller
WDT_SEL
System Reset
WDT_COP_RST_EN,
WDT_CPU_RST_EN,
WDT_SYS_RST_EN
The legacy watchdog timer can be programmed to reset just the CPU, just the AVP, or the entire system.
If only the CPU is reset, then the AVP will continue running as-is. The CPU reset vector should be programmed in advance so
that it skips the iROM boot code and jumps directly into its own CPU boot routine (which can be anywhere).
If only the AVP is reset, the same is true. The CPU keeps running as-is. If the AVP reset vector is set to default, it runs the
normal boot code. It is up to the Boot Loader to decide if it needs to restart the CPU as well.
The watchdog timer can be programmed to the maximum timeout value of 0x3fffffff. At 1 µs/count, this is more than one
thousand seconds.
c. CAR.RST_SOURCE.WDT_EN = 1
a. CAR.RST_SOURCE.WDT_***_RST_EN = 1
Ref Timer
Reload value
Restart
WD Timer CPU0
Current count
0
1st expiration: 2nd expiration: 3rd expiration: 4th expiration:
Shared interrupt Directed FIQ Directed reset System reset
WD Timer CPU0
X 0 1 2 3 0
Expiration count
WD interrupt
CPU0 nFIQ
CPUx nRESET
COP nRESET
SYS nRESET
Any output is broadcast to both instances of CPU0, in CPU cluster 0 (G) and 1 (LP). This applies to the reset and
FIQ signals.
Resetting any of the CPU0 results in resetting the WD associated with CPU 0
Although the timing diagram implies that you need to restart the timer when you service the interrupt, this is not necessary as
long as you can always service the interrupt (clear the TMR interrupt) before the next timeout occurs. The reset only happens
if a new timeout occurs when the TMR interrupt is still active.
Each timer uses two registers called PTV and PCR at two consecutive word addresses. The format is the same for all 10
timers and is defined only once with <t> taking values between 0 and 9. Note that the start offset sequence is haphazard for
legacy reasons.
Table 24: Start Offsets for PTV and PCR Timer Registers
TMR1 0x00
TMR2 0x08
TMR3 0x50
TMR4 0x58
TMR5 0x60
TMR6 0x68
TMR7 0x70
TMR8 0x78
TMR9 0x80
TMR0 0x88
7.8.1 TIMER_TMR<t>_TMR_PTV_0
Parameter <t> takes a value from 0 to 9. The start offset for the timer is defined relative to the start address in Table 24.
28:0 0x0 TMR_PTV: Trigger Value: count trigger value (count length). This is in n+1 scheme. If
you program the value n, the count trigger value will actually be n+1.
7.8.2 TIMER_TMR<t>_TMR_PCR_0
Parameter <t> takes a value from 0 to 9. The start offset for the timer is defined relative to the start address in Table 24.
The USEC_CFG/CNTR_1US registers provide a fixed time base (in microseconds) to be used by the rest of the system
regardless of the clk_m frequency (i.e., 12 MHz, 13 MHz, 19.2 MHz, 26 MHz, or other frequencies).
7.9.1 TIMERUS_CNTR_1US_0
This free-running read-only register/counter changes once every microsecond and is used mainly by hardware (can also be
used by software). It starts counting from 0 once it is out of system reset and will continue counting forever, unless the
oscillator clock is stopped or during a system reset.
7.9.2 TIMERUS_USEC_CFG_0
Software should first configure this register by telling what fraction of 1 microsecond each clk_m represents. For example, if
the clk_m is running at 12 MHz, then each clk_m represents 1/12 of a microsecond.
"USEC_DIVIDEND" and "USEC_DIVISOR" are used to indicate what fraction of 1 microsecond each clk_m represents.
7.9.3 TIMERUS_CNTR_FREEZE_0
Offset: 0x3c | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxx00000)
Each Watchdog timer uses four registers called CONFIG, STATUS, COMMAND, and UNLOCK PATTERN, at four
consecutive word addresses. The format is the same for all four timers and is defined only once with <w> taking values from 0
to 4.
The following register offsets are relative to the TMR block base.
7.10.1 TIMER_WDT<w>_CONFIG_0
Parameter <w> takes a value from 0 to 4.
20:16 0x0 CoreResetBitmapEn: Enable reset of a set of cores at third expiration counter (one bit
per processor) same level the signal from PMC asserted in case of external reset.
15 0x0 Pmc2CarResetEn: Enable Full system reset at fourth expiration of the counter
0 = DISABLE
1 = ENABLE
14 0x0 SystemResetEnable: Enable system reset at fourth expiration of the counter, at same
level as existing watchdog interrupt
0 = DISABLE
1 = ENABLE
11:4 0x0 Period: Measured in periods of selected timer, this is the reload value
7.10.2 TIMER_WDT<w>_STATUS_0
Parameter <w> takes a value from 0 to 4.
13:12 X CurrentExpirationCount: Current count of expiration since the last start of expiration
Enabled: 1 when counter is active. When true, writes to the corresponding config
0 X
register are ignored
7.10.3 TIMER_WDT<w>_COMMAND_0
The StartCounter bit enables watchdog counter operation, loads the watchdog counter, starts the watchdog timer to count
down, resets the expiration count to 0, and clears all flags. Also used as restart.
The counter can be disabled by setting the DisableCounter bit, but only if the unlock register has been programmed before
with the correct pattern. Writing to the command register always clears the disable unlock register. When set while
StartCounter is 0 and the unlock register contains the unlock pattern the Watchdog transitions back to disabled.
CoreWatchdogCommand Register
Offset: 0x108 + (0x20 * <w>) | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00)
7.10.4 TIMER_WDT<w>_UNLOCK_PATTERN_0
Parameter <w> takes a value from 0 to 4.
CoreWatchdogDisableUnlock Register
Offset: 0x10c + (0x20 * <w>) | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxx0000000000000000)
TimerSrcBitmap is used for Timers 6 through 10 which share a common interrupt line to the controller. Bit b is set if timer 6+b
generated an interrupt. The corresponding bit is cleared by writing INTR_CLR bit of the TMR_PCR register.
WatchdogSrcBitmap is used for the 5 watchdog timers. This is the set of Interrupt Status bits from the corresponding
CoreWatchdogStatus, but as a bitmap.
7.11.1 SHARED_INTR_STATUS_0
Offset: 0x0 | Read/Write: RO | Reset: 0x00000XXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
7.11.2 SHARED_TIMER_SECURE_CFG_0
Offset: 0x4 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxx0xxx00000xx0000000000)
USEC: TIMERUS_USEC_CFG secure mode config. If this bit is set (=1) then
TIMERUS_USEC_CFG register can only be written by secure writes. If this bit is cleared
then TIMERUS_USEC_CFG register can be written by secure or non-secure writes. This
20 0x0 register can always be read by secure or non-secure reads. Note: this bit should be set if
any one of the TMR is enabled to be secure.
1: ENABLE
0: DISABLE
WDT4: WDT4 secure mode config. See the WDT0 bit description. This bit is reserved since
16 0x0
WDT4 belongs to COP and it has no notion of Secure or Non-Secure transactions
15 0x0 WDT3: WDT3 secure mode config. See the WDT0 bit description.
14 0x0 WDT2: WDT2 secure mode config. See the WDT0 bit description.
13 0x0 WDT1: WDT1 secure mode config. See the WDT0 bit description.
WDT0: WDT0 secure mode config. If this bit is set (=1) then WDT0 registers (i.e.
TIMER_WDT0_{CONFIG,COMMAND,UNLOCK_PATTERN}) can only be written by secure
writes. A non-secure read will not trigger read-side-effect, but would return proper read
value. If this bit is cleared then the WDT0 registers can be written by secure or non-secure
12 0x0 writes. WDT0 registers can always be read by secure or non-secure reads.
Note: if this bit is set, then the TMR used for this WDT0 should be enabled to be secure.
1: ENABLE
0: DISABLE
9 0x0 TMR9: Timer9 secure mode config. See the TMR0 bit description.
8 0x0 TMR8: Timer8 secure mode config. See the TMR0 bit description.
7 0x0 TMR7: Timer7 secure mode config. See the TMR0 bit description.
6 0x0 TMR6: Timer6 secure mode config. See the TMR0 bit description.
5 0x0 TMR5: Timer5 secure mode config. See the TMR0 bit description.
4 0x0 TMR4: Timer4 secure mode config. See the TMR0 bit description.
3 0x0 TMR3: Timer3 secure mode config. See the TMR0 bit description.
2 0x0 TMR2: Timer2 secure mode config. See the TMR0 bit description.
1 0x0 TMR1: Timer1 secure mode config. See the TMR0 bit description.
TMR0: Timer0 secure mode config. If this bit is set (=1) then TMR0 registers (i.e.,
TIMER_TMR0_TMR_{PTV,PCR}) can only be written by secure writes. A non-secure read
will not trigger read-side-effect, but would return proper read value. If this bit is cleared then
0 0x0 TMR0 registers can be written by secure or non-secure writes. TMR0 registers can always
be read by secure or non-secure reads.
0: DISABLE
1: ENABLE
8.1 Overview
®
Tegra K1 devices can be configured with different I/O functions on particular pins to allow use in a variety of different
configurations. This section discusses how this is controlled and how the pins themselves are set up.
Many of the pins on Tegra K1 devices are connected to multi-purpose I/O (MPIO) pads. An MPIO can operate in two modes:
either acting as a signal for a particular I/O controller, referred to as a Special-Function I/O (SFIO); or as a software-controlled
general-purpose I/O function, referred to as GPIO. Each MPIO has up to four SFIO functions as well as being a GPIO.
Though each MPIO has up to 5 functions (a GPIO function and up to 4 SFIO functions), a given MPIO can only act as a single
function at a given point in time. The Pinmux controller in Tegra K1 devices includes the logic and registers to select a
particular function for each MPIO.
This section describes the following features of MPIOs, the Pinmux controller, and the GPIO controller:
This section covers the Multi-Purpose digital I/O pads. It does not address the special-purpose I/O pads, such as those used
for USB, IC_USB, SATA, PCIE, TVO/DAC, MIPI DSI, MIPI CSI, the oscillator, or DRAM interfaces.
Tegra K1 devices include five types of MPIO pads, which all share a common structure. The following table summarizes the
differences between the five MPIO pad types.
The ST (standard) MPIO pads are the most common pads on the chip.
The DD (dual-driver) MPIO pads are similar to the ST pads with the addition of a 3.3V tolerant true open-drain mode. A DD
pad can tolerate its I/O pin being pulled up to 3.3V (regardless of supply voltage) as long as the pad’s output-driver is set to
open-drain mode. There are special power-sequencing considerations when using this functionality.
Note: Refer to “Power Sequencing” in the NVIDIA Tegra K1 Processors Data Sheet (DS-06742-001) for a
complete description of the power-up sequencing requirements for Tegra K1 processors.
Refer to the same section in the NVIDIA Tegra K1 64-Bit Processors Data Sheet (DS-07070-001) for
Tegra K1 64-bit processors.
The OD (open drain) MPIO pads are optimized to tolerate 5V on the I/O pin regardless of the supply voltage. They are similar
to ST pads except for an improved I/O voltage tolerance, the absence of a weak pull-up, and the absence of a push-pull output
driver.
The CZ (controlled output impedance) MPIO pads are optimized for use in applications requiring a tightly controlled output
impedance. They are similar to ST pads except for changes in the drive strength circuitry and in the weak pull-ups/pull-downs.
Tegra K1 processors include CZ pads on the VDDIO_SDMMC1 and VDDIO_SDDMC3 power rails. Each of those rails also
includes a pair of CZ_COMP pads. Circuitry within the Tegra K1 device continually matches the output impedance of the CZ
pads to the on-board pull-up/-down resistors attached to the CZ_COMP pads.
The LV (low voltage) MPIO pads are optimized for use with a 1.2V supply voltage (and signaling level). They support a 1.8V
supply voltage (and signaling level) as a secondary mode. The Tegra K1 processors include LV pads on VDDIO_SDMMC4.
The SDMMC4 interface also has a pair of COMP pads, i.e., LV_COMP pads, to generate impedance code.
Note: Refer to “Pin Definitions” in the NVIDIA Tegra K1 Processors Data Sheet (DS-06742-001) for the list of the
pad types and the nominal pull-up/-down strength associated with each MPIO. See the columns labeled
“MPIO Pad Type” and “Nominal Pull Strength.” The power rail information is located in the “Power
Sequencing” section.
Refer to the same section in the NVIDIA Tegra K1 64-Bit Processors Data Sheet (DS-07070-001) for
Tegra K1 64-bit processors.
TRISTATE Tristate (high-z) option: Disables or enables the pad’s output driver. This setting overrides any other
functional setting and also whether pad is selected for SFIO or GPIO. Can be used when the pad
direction changes or the pad is assigned to different SFIO to avoid glitches.
E_INPUT Input Receiver (Enable/Disable): Enables or disables input receiver.
OD Open Drain option: (Applies to DD pads only) Selects between an open-drain output driver and a
push-pull driver.
RCV_SEL (Applies to OD pads only). Selects between “High VIL/VIH” and “Normal VIL/VIH” receivers.
RCV_SEL=1: “High VIL/VIH”
RCV_SEL=0: “Normal VIL/VIH”
During normal operation, these per-pad controls are driven by the pinmux controller registers. See the section called
“Pinmuxing” below for more information.
During deep sleep, the PMC bypasses and then resets the pinmux controller registers. Software should reprogram these
registers as necessary after returning from deep sleep. See the section called “Deep Sleep Behaviors” for more information
on the interaction of PMC, software, and the pinmux controller following deep sleep.
The controls are configured via the “pad control group registers”. There is one pad control register per pad control group.
During deep sleep, all of these pad control registers automatically return to their power-on-reset state. Software should
reprogram these registers as necessary following deep sleep.
Table 27 lists the register address for each pad control group. Additionally, the table describes the bit positions of the controls
within each register.
For example, writing a 1 to bit 3 of register 0x700000884 will enable the Schmitt trigger mode for the pads in group “cdev1cfg”
pins, DAP_MCLK1 and DAM_MCLK1_REQ. Similarly, clearing bits 14 through 23 of register 0x70000900 will minimize the
drive strength (both up and down) of pads in the gmacfg pad control group.
Nine pads are used for Power Detect status of various I/O rails. They are used to sense the I/O rail voltage level (3.3V or not).
They are reflected through the PWR_DET set of registers in the PMC which will in turn control the E_33V pin of the pad.
8.5 Pinmuxing
2
Tegra K1 processors include many types of I/O controllers (such as I C, SDMMC, NAND, and GMI). For some of these
controller types, Tegra K1 processors include multiple “controller instances”. For example, Tegra K1 processors include five
2
active I C controller instances.
Each controller instance on a Tegra K1 processor communicates with external devices via a set of “external signals”. For
2
each controller instance, each signal can be brought out on (at least) one MPIO. For example, each I C controller has two
external signals: CLK and DAT. The CLK signal of the I2C1 controller is available on the MPIO whose ball name is
GEN1_I2C_SCL.
Many of the pins on Tegra K1 devices are connected to multi-purpose I/O (MPIO) pads. To connect an MPIO to a particular
I/O controller, configure it as a Special-Function I/O (SFIO) rather than a General-Purpose I/O (GPIO). Each MPIO has up to
four SFIO functions. Each MPIO can as also be programmed to function as a GPIO. For example, the pin named
UART3_CTS_can act in one of these five ways:
As a GPIO
As the signal CTS for UART3
As the signal CMD for SDMMC
As the signal CLK for DTV
As the signal CS3 for SPI4B controller
Though each MPIO supports multiple functions, a given MPIO can only act as a single function at a given point in time. The
Pinmux controller on a Tegra K1 device includes the logic and registers to select a particular function for each MPIO.
Some controller instances have a particular signal available on more than one MPIO. Before using any controller, make sure
that the pinmux registers are programmed to bring each signal out on at most ONE MPIO. For example, UART3’s TXD signal
is available on the MPIOs whose ball names are ULPI_CLK, GMI_A16, etc. In a system which brings out UART3’s TXD
signal on the GMI_A16 ball, the pinmux registers for ULPI_CLK should be programmed to select some other signal.
Some controller instances make their entire set of signals available on two or more sets of MPIOs. That is, such controllers
have more than one “interface”. Before using any controller, make sure that the pinmux registers are programmed to bring out
the controller’s signals on at most ONE interface.
Note: The Pinmux controller includes one register per MPIO. It can be controlled on a per-pin basis.
Figure 16 shows the pinmux logic associated with a single MPIO. The ENB in the diagram (equivalent to the EN pin at the
pad) is active Low. Thus, the pad is active when ENB is Low and is in the High-Z state when ENB is High.
In the figure below, GPIO_OE and SFIO_OE[3:0] are considered active Low; that is, when they are Low, the pad’s output is
enabled.
Gpio_oe
Generic IO pad
sfio_oe[3:0]
PINMUX[1:0]
Gpio_sf_sel
sfio_out[3:0]
ENB I/O
Gpio_out
Gpio_sf_sel ENB
Gpio_in
Reg_pinmux[1:0]==0
Reg_pinmux[1:0]==1
Reg_pinmux[1:0]==2
sfio_in[3:0]
Reg_pinmux[1:0]==3
E_INPUT
PUPD==1
IO_RESET 8 - This is a dummy pin for MPIO pads and not used. The effect of
applying IO_RESET is achieved by keeping A and EN pins of the
pads to Logic 0.
WARNING: the DD pads are only 3.3V tolerant when this bit is set.
When this bit is cleared, the voltage tolerance is limited to the I/O
power supply voltage.
Other pads: 0 This bit only matters for DD pads. It is not implemented for other
MPIO pad types.
PUPD 3:2 0-2 (depends on 0: the pad’s weak pull-up and pull-down are both disabled
the type of 1: the pad’s weak pull-down is enabled and the weak pull-up is
functionality) disabled.
2: the pad’s weak pull-up is enabled and the weak pull-down is
disabled.
3: this is an illegal combination.
Refer to the Tegra K1 Pinmux spreadsheet.
Refer to the Tegra K1 Pinmux spreadsheet for a list of the SFIO functions supported by each MPIO on Tegra K1 devices.
Each SFIO is listed in the table with the following format: <ControllerType><ControllerInstance><InterfaceLetter>-<Signal>
ControllerType indicates the type of I/O controller associated with this SFIO function
ControllerInstance indicates the I/O controller, if the Tegra K1 processor has more than one I/O controller of the
specified type
InterfaceLetter differentiates between the pin sets, if the controller instance can connect to more than one set of pins
Signal identifies the particular role this SFIO plays for the I/O controller.
For some of the MPIOs, the hardware includes SFIO functions that are omitted from the spreadsheet. Many of these are
deprecated. Contact NVIDIA for more information.
System-level hardware executes the power-up sequence. This sequence ends when system-level hardware releases
SYS_RESET_N.
Each MPIO pin has a deterministic power-on-reset state. The particular reset state for each pin is chosen to
minimize the need of on-board components like pull-up resistors in a Tegra K1 based system. For example, the on-
chip weak pull-ups are enabled during power-on-reset for pins which are usually used to drive active-low chip selects.
Pins that act as a strap source for cold boot must have their inputs enabled (through E_INPUT control). If they have
MPIO Pinmuxing enabled, the strap source should be the primary function.
The rising edge of SYS_RESET_N does not trigger any of the MPIOs to change their output state.
Note: Refer to “POR Behavior” in the NVIDIA Tegra K1 Processors Data Sheet (DS-06742-001) for a list of the
power-on-reset states for each of the MPIOs.
Refer to the same section in the NVIDIA Tegra K1 64-Bit Processors Data Sheet (DS-07070-001) for
Tegra K1 64-bit processors.
Following the power-up sequence, most of the MPIOs on the chip will stay in their power-on-reset state until system-
dependent software (e.g., the Boot Loader or the OS) reprograms them. However, depending on the secondary boot device
used in a given system, the Boot ROM may change the state of some of the MPIOs. The following sections list the MPIOs that
the Boot ROM uses for each type of secondary boot device.
1. System-level hardware executes the power-up sequence. This sequence ends when system-level hardware releases
SYS_RESET_N.
2. The Boot ROM on the Tegra K1 device begins executing and programs the on-chip I/O controllers to access the
secondary boot device.
3. The Boot ROM on the Tegra K1 device fetches the BCT and Boot Loader from the secondary boot device.
4. If the BCT and Boot Loader are fetched successfully, Boot ROM on the Tegra K1 device yields to the Boot Loader.
5. Otherwise, Boot ROM on the Tegra K1 device enters USB recovery mode.
Each MPIO pin has a deterministic power-on-reset state. The particular reset state for each pin is chosen to minimize the
need of on-board components like pull-up resistors in a Tegra K1 based system. For example, the on-chip weak pull-ups are
enabled during power-on-reset for pins which are usually used to drive active-low chip selects.
Pins that act as a strap source must have their inputs enabled by default. If they have MPIO functionality, then the default
configuration group should choose strap functionality.
Note: Refer to “ POR Behavior” in the NVIDIA Tegra K1 Processors Data Sheet (DS-06742-001) for a list of the
power-on-reset states for each of the MPIOs.
Refer to the same section in the NVIDIA Tegra K1 64-Bit Processors Data Sheet (DS-07070-001) for
Tegra K1 64-bit processors.
Following the power-up sequence, most MPIOs on the Tegra K1 device will stay in their power-on-reset state until system-
dependent software (the Boot Loader or the OS) reprograms them. However, depending on the secondary boot device used in
a given system, the Boot ROM may change the state of some of the MPIOs and associated pinmux so that the Boot ROM can
interface with the secondary device to fetch the Boot Loader.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 272
Tegra K1 Technical Reference Manual
Multi-Purpose I/O Pins and Pin Multiplexing
The following subsections list the MPIOs that the Boot ROM uses for each type of secondary boot device. Depending on the
type of secondary boot device used, the associated I/O rails have to be brought up by the Boot ROM/PMIC to facilitate the
data exchange.
TRISTATE control of all the pins needs to be changed to NORMAL. Also the pinmux selection should be changed to select
ALTERNATE3.
SDMMC4_CLK
SDMMC4_CMD
SDMMC4_DAT0
SDMMC4_DAT1
SDMMC4_DAT2
SDMMC4_DAT3
SDMMC4_DAT4
SDMMC4_DAT5
SDMMC4_DAT6
SDMMC4_DAT7
1. LP-entry software programs the PMC to alert about Deep Sleep entry.
2. LP-entry software also programs the APBDEV_PMC_IO_DPD_REQ registers to emulate a software based overriding
request to enter the DPD. This is done to control the deassertion of E_DPD during LP0 exit which is needed to arrest
glitches associated with I/Os on the LP0 sequence.
3. I/O controllers are brought into the IDLE state.
4. The PMC latches much of Tegra K1’s I/O state, i.e., currently driven by functional logic by sampling the pinmux
controllers output. There are small variations on this logic depending on the pad type (mentioned below). Latching of
the I/O state is triggered by writing into APBDEV_PMC_DPD_SAMPLE_0 register maintained in the PMC register
space.
5. Along with latching the I/O values, various pad controls, such as E_IO_HV,E_33V, have to be latched and driven
depending on the pad type.
6. The PMC runs the state machine to drive the control pins in the pad that puts them in the DPD state. There are two
control pins (E_DPD and SEL_DPD) which have to be driven with proper timing as per the Pad data sheet. The PMC
logic provides a configurable timer to select this. The timer is provided in the APBDEV_PMC_SEL_DPD_TIM_0
register. Entering into DPD is triggered through APBDEV_PMC_IO_DPD_REQ_0. Both registers are in the PMC
register space.
7. The PMC deasserts CORE_PWR_REQ.
8. The PMIC powers down VDD_CORE.
9. The PMC continues to drive the I/O state that it has latched
10. As a result of the LP0 entry sequence, the pads are put in the DPD state by asserting E_DPD and SEL_DPD. When
these signals are asserted, the core supply to the pad (VAUXC_CORE) can be successfully removed and the pad
can be powered using VDD_AO/VDD_RTC. This way the pads keep the I/O states yet consume low power.
Note: For more information about deep sleep entry, refer to the NVIDIA Tegra K1 Processors Data Sheet (DS-
06742-001) .or the NVIDIA Tegra K1 64-Bit Processors Data Sheet (DS-07070-001) as well as the PMC
section in this TRM.
Note: For more information about deep sleep exits, refer to the NVIDIA Tegra K1 Processors Data Sheet (DS-
06742-001) .or the NVIDIA Tegra K1 64-Bit Processors Data Sheet (DS-07070-001) as well as the PMC
section in this TRM.
Refer to the “Deep Sleep Behavior” section in the NVIDIA Tegra K1 Processors Data Sheet (DS-06742-001) or the NVIDIA
Tegra K1 64-Bit Processors Data Sheet (DS-07070-001) for a summary of the capabilities of each MPIO during deep sleep.
The weak pull-ups and pull-downs of most of the MPIO pads are “disabled” or “not available” during deep sleep to reduce the
Tegra K1 device’s static current consumption. For the remainder of the MPIO pads, the weak pull-up and pull-down are
“configurable” during deep sleep. If the pull-up (or pull-down) was enabled prior to entering deep sleep, the PMC ensures that
it remains enabled throughout deep sleep. Similarly, if the pull-up (or pull-down) was disabled prior to entering deep sleep, the
PMC ensures that it remains enabled throughout deep sleep.
Some MPIO pads have an output buffer which behaves in a “special” way during deep sleep. The output state of these pads
may change while the Tegra K1 device remains in deep sleep. For example, the keyboard controller may continue scanning
the keypad matrix during deep sleep.
Some MPIO pads have an input buffer which has a “special” behavior during deep sleep. Most of these pads can act as
“Deep Sleep Wake Sources”. Others offer some other functional behavior. For example, SYS_CLK_REQ can function as a
clock request pin even during deep sleep.
For a complete description of the behavior of these pads during deep sleep, refer to the NVIDIA Tegra K1 Processors Data
Sheet (DS-06742-001) or the NVIDIA Tegra K1 64-Bit Processors Data Sheet (DS-07070-001). Pads whose input can be
sampled during Deep Sleep are mentioned as ENABLED in the input buffer column. To ensure the PMC wake logic can
sense these wake events, the signals must be directly taken from the ZI pin of the pad because pinmux controls are not
available during LP0. Pads that are acting as wake source should satisfy the following condition: The pad’s power rail should
be active.
The GPIO controller is divided into 8 banks. Each bank handles the GPIO functionality for up to 32 MPIOs. Within a bank, the
GPIOs are arranged as four ports of 8 bits each. The ports are labeled consecutively from A through Z and then AA through
FF. Ports A through D are in bank 0. Ports E through H are in bank 1. In total, there are 162 GPIOs, and the banking and
numbering conventions will have some break in between but will maintain backward compatibility in register configurations for
the GPIOs as that of previous generation chips.
Note: Refer to the “Pin Descriptions” section in NVIDIA Tegra K1 Processors Data Sheet (DS-06742-001) or the
NVIDIA Tegra K1 64-Bit Processors Data Sheet (DS-07070-001) for a map of each of the Tegra K1 device
MPIO pads to a particular GPIO port and bit. See the column labeled “GPIO.”
Each GPIO can be individually configurable as Output/Input/Interrupt sources with level/edge controls.
GPIO configuration has a lock bit controlling every bit separately. When the LOCK bit is set, the associated control aspects of
the bits (for example, whether it is an Output/Input or used as GPIO or SFIO or values driven) cannot be modified (locked).
The LOCK bit gets cleared only by system reset; it is sticky. This bit can be used for security-related functionality where an
authorized entity owning the GPIO can set the configuration and lock it. The lock bit also covers the GPIO output value, so
this may not be varied dynamically once lock is enabled.
The GPIO controller also has masked-write registers. Values written to these registers specify both a mask of bits to be
updated in the underlying state (the mask bits are not sticky) as well as new values for that state. Individual bits of the state
can be updated without the need for a read-modify-write sequence. Thus different portions of software can modify the GPIO
controller state without coordination.
For example, TXD is an output signal from UART A. It is available on six pins: ULPI_DATA0, SDMMC1_DATA2,
SDMMC3_DATA1, GPIO_PU0, GPIO_PS1, and UART2_RTS_N. Depending on the value programmed into the
corresponding pinmux registers, each of those six pins might toggle when UART A transmits data.
Similarly, RXD is an input signal to UART A. It is available on six pins: ULPI_DATA1, SDMMC1_DATA1, SDMMC3_CMD,
GPIO_PU1, GPIO_PS2, and UART2_CTS_N. Depending on the value programmed into the corresponding pinmux registers,
UART A might see the logical-OR of the signal on those six pins. This scenario will almost certainly lead to data corruption. If
the UART A RXD signal is brought out on ULPI_DATA1, the pinmux registers for the other five pins should be programmed to
some other function.
If all of the pins in a pad-control group are unused, set the drive strengths and slew rates to minimum.
If all of the pins on a power-rail are unused, assert E_NOIOPOWER for that rail in the PMC registers.
Pins interfacing with Platform PMICs (by reprogramming those pinmuxes, one can cause severe user disruption)
Any I/O device that is transferring secret data (typically like Serial PROMs having keys). By reprogramming the
pinmux, it is possible to redirect the data to wrong interface
In such cases, it is better to make use of the LOCK bit in the Pinmux control register so that values cannot be tampered with.
The Boot Loader can perform this task so that customer software does not have to configure those pins. As part of LP0 exit,
the lock bit will have to be re-enabled, because the lock is not retained across LP0. Similarly, the GPIO controller has a lock
bit for each GPIO to preserve the configuration, value driven, and also the pin is configured as GPIO or SFIO. The
configuration can be protected using the lock bit in the GPIO register. This way secure software such as a Boot Loader can
ensure that certain pins have the required configuration, irrespective of the actions of less secure software.
In Tegra K1 devices, the primary boot device (SDMMC4) has an auto-calibration option. Thus those pads get an impedance
code that matches the PVT conditions, etc. and hence enable the boot process. For all other MPIO pads (which are not
involved during boot), the BCT can have a value of the code based on the I/O rail and pad data sheet. The same is
programmed by the Boot Loader or any platform-specific software, and it overrides the default Power on Reset values. If the
values have to be changed based on SI results, then the same can be loaded in the primary device.
Each port of each GPIO controller has several registers for the control and monitoring of the port’s 8 GPIO pins. The registers
provide per-pin control of the following features:
Many of the control registers are accessible from two offsets. Accesses to the lower offsets affect all 8 pins for the GPIO port.
Accesses to the upper offsets provide a per-pin mask capability allowing adjustments to a subset of the pins. Using the upper
offsets can eliminate the need for Read-Modify-Write operations. For example, a write to GPIO_MSK_CNF can substitute for
a Read-Modify-Write of GPIO_CNF.
Register Name Offset (Lower: Read-Modify-Write) Offset (Upper: Per-Pin Mask Write)
Register Name Offset (Lower: Read-Modify-Write) Offset (Upper: Per-Pin Mask Write)
Register Name Offset (Lower: Read-Modify-Write) Offset (Upper: Per-Pin Mask Write)
8.11.1 GPIO_CNF_0
Designate whether each pin operates as a GPIO or as an SFIO. By default all pins come up in SFIO mode. These can be
programmed to GPIO mode at any stage. This is an array of 4 identical register entries; the register fields below apply to each
entry.
Lock bits are used to control the access to the CNF and OE registers. When set, no one can write to the CNF and OE bits.
They can be programmed ONLY during Boot and get reset by chip reset only.
8.11.2 GPIO_OE_0
GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid.
The set of registers below are used to either drive the signal out or as an Input. This needs to be programmed depending upon
whether the pin needs to be in either Input or Output.
This is an array of 4 identical register entries; the register fields below apply to each entry.
7 0x0 BIT_7: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid.
0 = TRI_STATE
1 = DRIVEN
6 0x0 BIT_6: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = TRI_STATE
1 = DRIVEN
5 0x0 BIT_5: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = TRI_STATE
1 = DRIVEN
4 0x0 BIT_4: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = TRI_STATE
1 = DRIVEN
3 0x0 BIT_3: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = TRI_STATE
1 = DRIVEN
2 0x0 BIT_2: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = TRI_STATE
1 = DRIVEN
1 0x0 BIT_1: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = TRI_STATE
1 = DRIVEN
0 0x0 BIT_0: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = TRI_STATE
1 = DRIVEN
8.11.3 GPIO_OUT_0
GPIO_CNF.x=1 (in GPIO mode) AND GPIO_OE.x=1 (GPIO output enabled) must be true for this to be valid. This register will
take affect only in GPIO mode. This register is used to drive the value out on a given pin.
This is an array of 4 identical register entries; the register fields below apply to each entry.
7 0x0 BIT_7: GPIO_CNF.x=1 (in GPIO mode) AND GPIO_OE.x=1 (GPIO output enabled) must
be true for this to be a valid state
0 = LOW
1 = HIGH
6 0x0 BIT_6: GPIO_CNF.x=1 (in GPIO mode) AND GPIO_OE.x=1 (GPIO output enabled) must
be true for this to be a valid state
0 = LOW
1 = HIGH
5 0x0 BIT_5: GPIO_CNF.x=1 (in GPIO mode) AND GPIO_OE.x=1 (GPIO output enabled) must
be true for this to be a valid state
0 = LOW
1 = HIGH
4 0x0 BIT_4: GPIO_CNF.x=1 (in GPIO mode) AND GPIO_OE.x=1 (GPIO output enabled) must
be true for this to be a valid state
0 = LOW
1 = HIGH
3 0x0 BIT_3: GPIO_CNF.x=1 (in GPIO mode) AND GPIO_OE.x=1 (GPIO output enabled) must
be true for this to be a valid state
0 = LOW
1 = HIGH
2 0x0 BIT_2: GPIO_CNF.x=1 (in GPIO mode) AND GPIO_OE.x=1 (GPIO output enabled) must
be true for this to be a valid state
0 = LOW
1 = HIGH
1 0x0 BIT_1: GPIO_CNF.x=1 (in GPIO mode) AND GPIO_OE.x=1 (GPIO output enabled) must
be true for this to be a valid state
0 = LOW
1 = HIGH
0 0x0 BIT_0: GPIO_CNF.x=1 (in GPIO mode) AND GPIO_OE.x=1 (GPIO output enabled) must
be true for this to be a valid state
0 = LOW
1 = HIGH
8.11.4 GPIO_IN_0
GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid. This is a read-only register used to read the value
from the pin. This is an array of 4 identical register entries; the register fields below apply to each entry.
7 0x0 BIT_7: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid.
0 = LOW
1 = HIGH
6 0x0 BIT_6: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = LOW
1 = HIGH
5 0x0 BIT_5: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = LOW
1 = HIGH
4 0x0 BIT_4: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = LOW
1 = HIGH
3 0x0 BIT_3: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = LOW
1 = HIGH
2 0x0 BIT_2: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = LOW
1 = HIGH
1 0x0 BIT_1: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = LOW
1 = HIGH
0 0x0 BIT_0: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid
0 = LOW
1 = HIGH
In addition, the individual trigger level for interrupt on each input pin can be programmed as either active-on-high or active-on-
low. For example, to program an active-on-high interrupt on bit 3 of GPIO-PORT_C, write '1' into bit 3 of GPIO_INT.LVL.C
register (this sets the interrupt to be active-on-high), and then write '1' into bit 3 of GPIO_INT.ENB.C (this enables interrupt on
the named bit).
The interrupt flag status can be read in the appropriate bit of the GPIO_INT.STA.C register. Once the programmed interrupt
occurs, status should be cleared by writing into the appropriate bit of the GPIO_INT.CLR.C register. Note that the interrupt
thus generated is routed to the processor only if the corresponding bit for GPIO interrupts in the Secondary interrupt controller
is enabled.
8.11.5 GPIO_INT_STA_0
GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this condition to be valid. Every GPIO pin generates
an Interrupt when switching from Low-High to High-Low. Interrupt status for each port is saved in an Interrupt status register.
This is an array of 4 identical register entries; the register fields below apply to each entry.
7 0x0 BIT_7: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = IN_ACTIVE
= ACTIVE
6 0x0 BIT_6: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = IN_ACTIVE
1 = ACTIVE
5 0x0 BIT_5: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = IN_ACTIVE
1 = ACTIVE
4 0x0 BIT_4: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = IN_ACTIVE
1 = ACTIVE
3 0x0 BIT_3: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = IN_ACTIVE
1 = ACTIVE
2 0x0 BIT_2: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = IN_ACTIVE
1 = ACTIVE
1 0x0 BIT_1: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = IN_ACTIVE
1 = ACTIVE
0 0x0 BIT_0: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = IN_ACTIVE
1 = ACTIVE
8.11.6 GPIO_INT_ENB_0
Every bit of the GPIO pin has an enable which, when enabled, routes the Interrupt to the Interrupt controller. This is an array of
4 identical register entries; the register fields below apply to each entry.
7 0x0 BIT_7: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid.
0 = DISABLE
1 = ENABLE
6 0x0 BIT_6: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid.
0 = DISABLE
1 = ENABLE
5 0x0 BIT_5: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid.
0 = DISABLE
1 = ENABLE
4 0x0 BIT_4: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid.
0 = DISABLE
1 = ENABLE
3 0x0 BIT_3: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid.
0 = DISABLE
1 = ENABLE
2 0x0 BIT_2: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid.
0 = DISABLE
1 = ENABLE
1 0x0 BIT_1: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid.
0 = DISABLE
1 = ENABLE
0 0x0 BIT_0: GPIO mode (GPIO_CNF.x=1) must be true for this condition to be valid.
0 = DISABLE
1 = ENABLE
8.11.7 GPIO_INT_LVL_0
The GPIO can detect an interrupt for any edge- or level-sensitive signal.
This is an array of 4 identical register entries; the register fields below apply to each entry
23 0x0 DELTA_7: 1 means Trigger Interrupt on ANY change of input if EDGE is TRUE
22 0x0 DELTA_6: 1 means Trigger Interrupt on ANY change of input if EDGE is TRUE
21 0x0 DELTA_5: 1 means Trigger Interrupt on ANY change of input if EDGE is TRUE
20 0x0 DELTA_4: 1 means Trigger Interrupt on ANY change of input if EDGE is TRUE
19 0x0 DELTA_3: 1 means Trigger Interrupt on ANY change of input if EDGE is TRUE
18 0x0 DELTA_2: 1 means Trigger Interrupt on ANY change of input if EDGE is TRUE
17 0x0 DELTA_1: 1 means Trigger Interrupt on ANY change of input if EDGE is TRUE
16 0x0 DELTA_0: 1 means Trigger Interrupt on ANY change of input if EDGE is TRUE
7 0x0 BIT_7: Interrupt Activation Level or Edge (HIGH for High level or Rising Edge)
0 = LOW
1 = HIGH
6 0x0 BIT_6: Interrupt Activation Level or Edge (HIGH for High level or Rising Edge)
0 = LOW
1 = HIGH
5 0x0 BIT_5: Interrupt Activation Level or Edge (HIGH for High level or Rising Edge)
0 = LOW
1 = HIGH
4 0x0 BIT_4: Interrupt Activation Level or Edge (HIGH for High level or Rising Edge)
0 = LOW
1 = HIGH
3 0x0 BIT_3: Interrupt Activation Level or Edge (HIGH for High level or Rising Edge)
0 = LOW
1 = HIGH
2 0x0 BIT_2: Interrupt Activation Level or Edge (HIGH for High level or Rising Edge)
0 = LOW
1 = HIGH
1 0x0 BIT_1: Interrupt Activation Level or Edge (HIGH for High level or Rising Edge)
0 = LOW
1 = HIGH
0 0x0 BIT_0: Interrupt Activation Level or Edge (HIGH for High level or Rising Edge)
0 = LOW
1 = HIGH
8.11.8 GPIO_INT_CLR_0
This write-only register clears the Interrupts that are set. This is valid only in GPIO mode when GPIO_INT.ENB is set.
This is an array of 4 identical register entries; the register fields below apply to each entry.
7 0x0 BIT_7: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = SET
1 = CLEAR
6 0x0 BIT_6: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = SET
1 = CLEAR
5 0x0 BIT_5: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = SET
1 = CLEAR
4 0x0 BIT_4: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = SET
1 = CLEAR
3 0x0 BIT_3: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = SET
1 = CLEAR
2 0x0 BIT_2: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = SET
1 = CLEAR
1 0x0 BIT_1: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = SET
1 = CLEAR
0 0x0 BIT_0: GPIO mode (GPIO_CNF.x=1) and GPIO_INT.ENB.x=1 must be true for this
condition to be valid.
0 = SET
1 = CLEAR
8.11.9 GPIO_MSK_CNF_0
Each register is provided with an individual 16-bit version for enabling Masked Writes to avoid a Read-Modify-Write operation
by the firmware. The exception is for the interrupt clear register, whose functionality is combined in the interrupt status register.
Individual pins only can be programmed by suitably enabling the write masks in the upper byte of these 16-bit registers.
This is an array of 4 identical register entries; the register fields below apply to each entry.
3 RW 0x0 BIT_3:
0 = SPIO
1 = GPIO
2 RW 0x0 BIT_2:
0 = SPIO
1 = GPIO
1 RW 0x0 BIT_1:
0 = SPIO
1 = GPIO
0 RW 0x0 BIT_0:
0 = SPIO
1 = GPIO
8.11.10 GPIO_MSK_OE_0
This is an array of 4 identical register entries; the register fields below apply to each entry.
4 RW 0x0 BIT_4:
0 = TRI_STATE
1 = DRIVEN
3 RW 0x0 BIT_3:
0 = TRI_STATE
1 = DRIVEN
2 RW 0x0 BIT_2:
0 = TRI_STATE
1 = DRIVEN
1 RW 0x0 BIT_1:
0 = TRI_STATE
1 = DRIVEN
0 RW 0x0 BIT_0:
0 = TRI_STATE
1 = DRIVEN
8.11.11 GPIO_MSK_OUT_0
This is an array of 4 identical register entries; the register fields below apply to each entry.
5 RW 0x0 BIT_5:
0 = LOW
1 = HIGH
4 RW 0x0 BIT_4:
0 = LOW
1 = HIGH
3 RW 0x0 BIT_3:
0 = LOW
1 = HIGH
2 RW 0x0 BIT_2:
0 = LOW
1 = HIGH
1 RW 0x0 BIT_1:
0 = LOW
1 = HIGH
0 RW 0x0 BIT_0:
0 = LOW
1 = HIGH
8.11.12 GPIO_MSK_INT_STA_0
This is an array of 4 identical register entries; the register fields below apply to each entry.
6 RW 0x0 BIT_6:
0 = IN_ACTIVE
1 = ACTIVE
5 RW 0x0 BIT_5:
0 = IN_ACTIVE
1 = ACTIVE
4 RW 0x0 BIT_4:
0 = IN_ACTIVE
1 = ACTIVE
3 RW 0x0 BIT_3:
0 = IN_ACTIVE
1 = ACTIVE
2 RW 0x0 BIT_2:
0 = IN_ACTIVE
1 = ACTIVE
1 RW 0x0 BIT_1:
0 = IN_ACTIVE
1 = ACTIVE
0 RW 0x0 BIT_0:
0 = IN_ACTIVE
1 = ACTIVE
8.11.13 GPIO_MSK_INT_ENB_0
This is an array of 4 identical register entries; the register fields below apply to each entry.
7 RW 0x0 BIT_7:
0 = DISABLE
1 = ENABLE
6 RW 0x0 BIT_6:
0 = DISABLE
1 = ENABLE
5 RW 0x0 BIT_5:
0 = DISABLE
1 = ENABLE
4 RW 0x0 BIT_4:
0 = DISABLE
1 = ENABLE
3 RW 0x0 BIT_3:
0 = DISABLE
1 = ENABLE
2 RW 0x0 BIT_2:
0 = DISABLE
1 = ENABLE
1 RW 0x0 BIT_1:
0 = DISABLE
1 = ENABLE
0 RW 0x0 BIT_0:
0 = DISABLE
1 = ENABLE
8.11.14 GPIO_MSK_INT_LVL_0
This is an array of 4 identical register entries; the register fields below apply to each entry.
6 RW 0x0 BIT_6:
0 = LOW
1 = HIGH
5 RW 0x0 BIT_5:
0 = LOW
1 = HIGH
4 RW 0x0 BIT_4:
0 = LOW
1 = HIGH
3 RW 0x0 BIT_3:
0 = LOW
1 = HIGH
2 RW 0x0 BIT_2:
0 = LOW
1 = HIGH
1 RW 0x0 BIT_1:
0 = LOW
1 = HIGH
0 RW 0x0 BIT_0:
0 = LOW
1 = HIGH
This section defines the Pinmux selects, Pullup, Pulldn, and E_input programmability for each pin/ball in Tegra K1 devices.
Every register has 7 bits defined for Functional Pin Select. The rest are specific to a few pads such as OD and IO_RESET.
7 LOCK --> Locks access to all configurable bits for pins, including itself.
8 IO_RESET --> Forces output drivers disabled (PU/PD control only). Required to guarantee pin state on *LPDDR2* pads
during POR.
--> IO_RESET_N will override the enable signal of main driver. After power-up, core controls should be enabled first to drive
the pad with the same value as programmed by E_PULL. Then IO_RESET_N / E_PULL can be deasserted.
--> If IO_RESET_N is deasserted before core controls come up, there could be unknown outputs or glitches.
Optional bits:
9 RCV_SEL --> Select between High and Normal VIL/VIH receivers. RCVR_SEL=1: High VIL/VIH RCVR_SEL=0: Normal
VIL/VIH
8.12.1 PINMUX_AUX_ULPI_DATA0_0
Offset: 0x3000 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.2 PINMUX_AUX_ULPI_DATA1_0
Offset: 0x3004 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.3 PINMUX_AUX_ULPI_DATA2_0
Offset: 0x3008 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.4 PINMUX_AUX_ULPI_DATA3_0
Offset: 0x300c | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.5 PINMUX_AUX_ULPI_DATA4_0
Offset: 0x3010 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.6 PINMUX_AUX_ULPI_DATA5_0
Offset: 0x3014 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.7 PINMUX_AUX_ULPI_DATA6_0
Offset: 0x3018 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.8 PINMUX_AUX_ULPI_DATA7_0
Offset: 0x301c | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.9 PINMUX_AUX_ULPI_CLK_0
Offset: 0x3020 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.10 PINMUX_AUX_ULPI_DIR_0
Offset: 0x3024 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 NORMAL PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 SPI1 PM:
0 = SPI1
1 = SPI5
2 = UARTD
3 = ULPI
8.12.11 PINMUX_AUX_ULPI_NXT_0
Offset: 0x3028 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.12 PINMUX_AUX_ULPI_STP_0
Offset: 0x302c | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.13 PINMUX_AUX_DAP3_FS_0
Offset: 0x3030 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.14 PINMUX_AUX_DAP3_DIN_0
Offset: 0x3034 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.15 PINMUX_AUX_DAP3_DOUT_0
Offset: 0x3038 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.16 PINMUX_AUX_DAP3_SCLK_0
Offset: 0x303c | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.17 PINMUX_AUX_GPIO_PV0_0
Offset: 0x3040 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.18 PINMUX_AUX_GPIO_PV1_0
Offset: 0x3044 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.19 PINMUX_AUX_SDMMC1_CLK_0
Offset: 0x3048 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.20 PINMUX_AUX_SDMMC1_CMD_0
Offset: 0x304c | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.21 PINMUX_AUX_SDMMC1_DAT3_0
Offset: 0x3050 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.22 PINMUX_AUX_SDMMC1_DAT2_0
Offset: 0x3054 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.23 PINMUX_AUX_SDMMC1_DAT1_0
Offset: 0x3058 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.24 PINMUX_AUX_SDMMC1_DAT0_0
Offset: 0x305c | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.25 PINMUX_AUX_CLK2_OUT_0
Offset: 0x3068 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.26 PINMUX_AUX_CLK2_REQ_0
Offset: 0x306c | Read/Write: R/W | Reset: 0x00000020 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x100000)
8.12.27 PINMUX_AUX_HDMI_INT_0
Offset: 0x3110 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxx0x0x110100)
8.12.28 PINMUX_AUX_DDC_SCL_0
Offset: 0x3114 | Read/Write: R/W | Reset: 0x00000230 (0bxxxxxxxxxxxxxxxxxxxxxx1x0x110000)
8.12.29 PINMUX_AUX_DDC_SDA_0
Offset: 0x3118 | Read/Write: R/W | Reset: 0x00000230 (0bxxxxxxxxxxxxxxxxxxxxxx1x0x110000)
8.12.30 PINMUX_AUX_UART2_RXD_0
Offset: 0x3164 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.31 PINMUX_AUX_UART2_TXD_0
Offset: 0x3168 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.32 PINMUX_AUX_UART2_RTS_N_0
Offset: 0x316c | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.33 PINMUX_AUX_UART2_CTS_N_0
Offset: 0x3170 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.34 PINMUX_AUX_UART3_TXD_0
Offset: 0x3174 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.35 PINMUX_AUX_UART3_RXD_0
Offset: 0x3178 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.36 PINMUX_AUX_UART3_CTS_N_0
Offset: 0x317c | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.37 PINMUX_AUX_UART3_RTS_N_0
Offset: 0x3180 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.38 PINMUX_AUX_GPIO_PU0_0
Offset: 0x3184 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.39 PINMUX_AUX_GPIO_PU1_0
Offset: 0x3188 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.40 PINMUX_AUX_GPIO_PU2_0
Offset: 0x318c | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.41 PINMUX_AUX_GPIO_PU3_0
Offset: 0x3190 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.42 PINMUX_AUX_GPIO_PU4_0
Offset: 0x3194 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.43 PINMUX_AUX_GPIO_PU5_0
Offset: 0x3198 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.44 PINMUX_AUX_GPIO_PU6_0
Offset: 0x319c | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.45 PINMUX_AUX_GEN1_I2C_SDA_0
Offset: 0x31a0 | Read/Write: R/W | Reset: 0x00000070 (0bxxxxxxxxxxxxxxxxxxxxxxxx01110000)
8.12.46 PINMUX_AUX_GEN1_I2C_SCL_0
Offset: 0x31a4 | Read/Write: R/W | Reset: 0x00000070 (0bxxxxxxxxxxxxxxxxxxxxxxxx01110000)
8.12.47 PINMUX_AUX_DAP4_FS_0
Offset: 0x31a8 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.48 PINMUX_AUX_DAP4_DIN_0
Offset: 0x31ac | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.49 PINMUX_AUX_DAP4_DOUT_0
Offset: 0x31b0 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.50 PINMUX_AUX_DAP4_SCLK_0
Offset: 0x31b4 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.51 PINMUX_AUX_CLK3_OUT_0
Offset: 0x31b8 | Read/Write: R/W | Reset: 0x00000020 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x100000)
8.12.52 PINMUX_AUX_CLK3_REQ_0
Offset: 0x31bc | Read/Write: R/W | Reset: 0x00000020 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x100000)
8.12.53 PINMUX_AUX_GPIO_PC7_0
Offset: 0x31c0 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.54 PINMUX_AUX_GPIO_PI5_0
Offset: 0x31c4 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.55 PINMUX_AUX_GPIO_PI7_0
Offset: 0x31c8 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.56 PINMUX_AUX_GPIO_PK0_0
Offset: 0x31cc | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.57 PINMUX_AUX_GPIO_PK1_0
Offset: 0x31d0 | Read/Write: R/W | Reset: 0x00000036 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110110)
8.12.58 PINMUX_AUX_GPIO_PJ0 _0
Offset: 0x31d4 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.59 PINMUX_AUX_GPIO_PJ2_0
Offset: 0x31d8 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.60 PINMUX_AUX_GPIO_PK3_0
Offset: 0x31dc | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.61 PINMUX_AUX_GPIO_PK4_0
Offset: 0x31e0 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.62 PINMUX_AUX_GPIO_PK2_0
Offset: 0x31e4 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.63 PINMUX_AUX_GPIO_PI3_0
Offset: 0x31e8 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.64 PINMUX_AUX_GPIO_PI6_0
Offset: 0x31ec | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.65 PINMUX_AUX_GPIO_PG0_0
Offset: 0x31f0 | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.66 PINMUX_AUX_GPIO_PG1_0
Offset: 0x31f4 | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.67 PINMUX_AUX_GPIO_PG2_0
Offset: 0x31f8 | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.68 PINMUX_AUX_GPIO_PG3_0
Offset: 0x31fc | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.69 PINMUX_AUX_GPIO_PG4_0
Offset: 0x3200 | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.70 PINMUX_AUX_GPIO_PG5_0
Offset: 0x3204 | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.71 PINMUX_AUX_GPIO_PG6_0
Offset: 0x3208 | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.72 PINMUX_AUX_GPIO_PG7_0
Offset: 0x320c | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.73 PINMUX_AUX_GPIO_PH0_0
Offset: 0x3210 | Read/Write: R/W | Reset: 0x00000036 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110110)
8.12.74 PINMUX_AUX_GPIO_PH1_0
Offset: 0x3214 | Read/Write: R/W | Reset: 0x00000036 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110110)
8.12.75 PINMUX_AUX_GPIO_PH2_0
Offset: 0x3218 | Read/Write: R/W | Reset: 0x00000036 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110110)
8.12.76 PINMUX_AUX_GPIO_PH3_0
Offset: 0x321c | Read/Write: R/W | Reset: 0x00000036 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110110)
8.12.77 PINMUX_AUX_GPIO_PH4_0
Offset: 0x3220 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.78 PINMUX_AUX_GPIO_PH5_0
Offset: 0x3224 | Read/Write: R/W | Reset: 0x00000036 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110110)
8.12.79 PINMUX_AUX_GPIO_PH6_0
Offset: 0x3228 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.80 PINMUX_AUX_GPIO_PH7_0
Offset: 0x322c | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.81 PINMUX_AUX_GPIO_PJ7_0
Offset: 0x3230 | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.82 PINMUX_AUX_GPIO_PB0_0
Offset: 0x3234 | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.83 PINMUX_AUX_GPIO_PB1_0
Offset: 0x3238 | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.84 PINMUX_AUX_GPIO_PK7_0
Offset: 0x323c | Read/Write: R/W | Reset: 0x00000032 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110010)
8.12.85 PINMUX_AUX_GPIO_PI0_0
Offset: 0x3240 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.86 PINMUX_AUX_GPIO_PI1_0
Offset: 0x3244 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.87 PINMUX_AUX_GPIO_PI2_0
Offset: 0x3248 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.88 PINMUX_AUX_GPIO_PI4_0
Offset: 0x324c | Read/Write: R/W | Reset: 0x00000036 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110110)
8.12.89 PINMUX_AUX_GEN2_I2C_SCL_0
Offset: 0x3250 | Read/Write: R/W | Reset: 0x00000070 (0bxxxxxxxxxxxxxxxxxxxxxxxx01110000)
8.12.90 PINMUX_AUX_GEN2_I2C_SDA_0
Offset: 0x3254 | Read/Write: R/W | Reset: 0x00000070 (0bxxxxxxxxxxxxxxxxxxxxxxxx01110000)
8.12.91 PINMUX_AUX_SDMMC4_CLK_0
Offset: 0x3258 | Read/Write: R/W | Reset: 0x00000136 (0bxxxxxxxxxxxxxxxxxxxxxxx10x110110)
8.12.92 PINMUX_AUX_SDMMC4_CMD_0
Offset: 0x325c | Read/Write: R/W | Reset: 0x0000013a (0bxxxxxxxxxxxxxxxxxxxxxxx10x111010)
8.12.93 PINMUX_AUX_SDMMC4_DAT0_0
Offset: 0x3260 | Read/Write: R/W | Reset: 0x0000013a (0bxxxxxxxxxxxxxxxxxxxxxxx10x111010)
8.12.94 PINMUX_AUX_SDMMC4_DAT1_0
Offset: 0x3264 | Read/Write: R/W | Reset: 0x0000013a (0bxxxxxxxxxxxxxxxxxxxxxxx10x111010)
8.12.95 PINMUX_AUX_SDMMC4_DAT2_0
Offset: 0x3268 | Read/Write: R/W | Reset: 0x0000013a (0bxxxxxxxxxxxxxxxxxxxxxxx10x111010)
8.12.96 PINMUX_AUX_SDMMC4_DAT3_0
Offset: 0x326c | Read/Write: R/W | Reset: 0x0000013a (0bxxxxxxxxxxxxxxxxxxxxxxx10x111010)
8.12.97 PINMUX_AUX_SDMMC4_DAT4_0
Offset: 0x3270 | Read/Write: R/W | Reset: 0x0000013a (0bxxxxxxxxxxxxxxxxxxxxxxx10x111010)
8.12.98 PINMUX_AUX_SDMMC4_DAT5_0
Offset: 0x3274 | Read/Write: R/W | Reset: 0x0000013a (0bxxxxxxxxxxxxxxxxxxxxxxx10x111010)
8.12.99 PINMUX_AUX_SDMMC4_DAT6_0
Offset: 0x3278 | Read/Write: R/W | Reset: 0x0000013a (0bxxxxxxxxxxxxxxxxxxxxxxx10x111010)
8.12.100 PINMUX_AUX_SDMMC4_DAT7_0
Offset: 0x327c | Read/Write: R/W | Reset: 0x0000013a (0bxxxxxxxxxxxxxxxxxxxxxxx10x111010)
8.12.101 PINMUX_AUX_CAM_MCLK_0
Offset: 0x3284 | Read/Write: R/W | Reset: 0x0000003a (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111010)
8.12.102 PINMUX_AUX_GPIO_PCC1_0
Offset: 0x3288 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.103 PINMUX_AUX_GPIO_PBB0_0
Offset: 0x328c | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.104 PINMUX_AUX_CAM_I2C_SCL_0
Offset: 0x3290 | Read/Write: R/W | Reset: 0x00000070 (0bxxxxxxxxxxxxxxxxxxxxxxxx01110000)
8.12.105 PINMUX_AUX_CAM_I2C_SDA_0
Offset: 0x3294 | Read/Write: R/W | Reset: 0x00000070 (0bxxxxxxxxxxxxxxxxxxxxxxxx01110000)
8.12.106 PINMUX_AUX_GPIO_PBB3_0
Offset: 0x3298 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.107 PINMUX_AUX_GPIO_PBB4_0
Offset: 0x329c | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.108 PINMUX_AUX_GPIO_PBB5_0
Offset: 0x32a0 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.109 PINMUX_AUX_GPIO_PBB6_0
Offset: 0x32a4 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.110 PINMUX_AUX_GPIO_PBB7_0
Offset: 0x32a8 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.111 PINMUX_AUX_GPIO_PCC2_0
Offset: 0x32ac | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.112 PINMUX_AUX_JTAG_RTCK_0
Offset: 0x32b0 | Read/Write: R/W | Reset: 0x00000028 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x101000)
8.12.113 PINMUX_AUX_PWR_I2C_SCL_0
Offset: 0x32b4 | Read/Write: R/W | Reset: 0x00000070 (0bxxxxxxxxxxxxxxxxxxxxxxxx01110000)
8.12.114 PINMUX_AUX_PWR_I2C_SDA_0
Offset: 0x32b8 | Read/Write: R/W | Reset: 0x00000070 (0bxxxxxxxxxxxxxxxxxxxxxxxx01110000)
8.12.115 PINMUX_AUX_KB_ROW0_0
Offset: 0x32bc | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.116 PINMUX_AUX_KB_ROW1_0
Offset: 0x32c0 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.117 PINMUX_AUX_KB_ROW2_0
Offset: 0x32c4 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.118 PINMUX_AUX_KB_ROW3_0
Offset: 0x32c8 | Read/Write: R/W | Reset: 0x00000022 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x100010)
8.12.119 PINMUX_AUX_KB_ROW4_0
Offset: 0x32cc | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.120 PINMUX_AUX_KB_ROW5_0
Offset: 0x32d0 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.121 PINMUX_AUX_KB_ROW6_0
Offset: 0x32d4 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.122 PINMUX_AUX_KB_ROW7_0
Offset: 0x32d8 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.123 PINMUX_AUX_KB_ROW8_0
Offset: 0x32dc | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.124 PINMUX_AUX_KB_ROW9_0
Offset: 0x32e0 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.125 PINMUX_AUX_KB_ROW10_0
Offset: 0x32e4 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.126 PINMUX_AUX_KB_ROW11_0
Offset: 0x32e8 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_DOWN PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 KBC PM:
0 = KBC
1 = RSVD1
2 = RSVD2
3 = IRDA
8.12.127 PINMUX_AUX_KB_ROW12_0
Offset: 0x32ec | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_DOWN PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 KBC PM:
0 = KBC
1 = RSVD1
2 = RSVD2
8.12.128 PINMUX_AUX_KB_ROW13_0
Offset: 0x32f0 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_DOWN PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 KBC PM:
0 = KBC
1 = RSVD1
2 = SPI2
3 = RSVD3
8.12.129 PINMUX_AUX_KB_ROW14_0
Offset: 0x32f4 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_DOWN PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 KBC PM:
0 = KBC
1 = RSVD1
2 = SPI2
3 = RSVD3
8.12.130 PINMUX_AUX_KB_ROW15_0
Offset: 0x32f8 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
8.12.131 PINMUX_AUX_KB_COL0_0
Offset: 0x32fc | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.132 PINMUX_AUX_KB_COL1_0
Offset: 0x3300 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.133 PINMUX_AUX_KB_COL2_0
Offset: 0x3304 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.134 PINMUX_AUX_KB_COL3_0
Offset: 0x3308 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.135 PINMUX_AUX_KB_COL4_0
Offset: 0x330c | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.136 PINMUX_AUX_KB_COL5_0
Offset: 0x3310 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.137 PINMUX_AUX_KB_COL6_0
Offset: 0x3314 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.138 PINMUX_AUX_KB_COL7_0
Offset: 0x3318 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.139 PINMUX_AUX_CLK_32K_OUT_0
Offset: 0x331c | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_DOWN PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
8.12.140 PINMUX_AUX_CORE_PWR_REQ_0
Offset: 0x3324 | Read/Write: R/W | Reset: 0x00000020 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x100000)
8.12.141 PINMUX_AUX_CPU_PWR_REQ_0
Offset: 0x3328 | Read/Write: R/W | Reset: 0x00000020 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x100000)
8.12.142 PINMUX_AUX_PWR_INT_N_0
Offset: 0x332c | Read/Write: R/W | Reset: 0x00000020 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x100000)
8.12.143 PINMUX_AUX_CLK_32K_IN_0
Offset: 0x3330 | Read/Write: R/W | Reset: 0x00000020 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x100000)
8.12.144 PINMUX_AUX_OWR_0
Offset: 0x3334 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxx0x0x110000)
8.12.145 PINMUX_AUX_DAP1_FS_0
Offset: 0x3338 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_DOWN PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 I2S0 PM:
0 = I2S0
1 = HDA
2 = GMI
3 = RSVD3
8.12.146 PINMUX_AUX_DAP1_DIN_0
Offset: 0x333c | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_DOWN PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 I2S0 PM:
0 = I2S0
1 = HDA
2 = GMI
3 = RSVD3
8.12.147 PINMUX_AUX_DAP1_DOUT_0
Offset: 0x3340 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_DOWN PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 I2S0 PM:
0 = I2S0
1 = HDA
2 = GMI
3 = SATA
8.12.148 PINMUX_AUX_DAP1_SCLK_0
Offset: 0x3344 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.149 PINMUX_AUX_DAP_MCLK1_REQ_0
Offset: 0x3348 | Read/Write: R/W | Reset: 0x00000024 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x100100)
8.12.150 PINMUX_AUX_DAP_MCLK1_0
Offset: 0x334c | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.151 PINMUX_AUX_SPDIF_IN_0
Offset: 0x3350 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.152 PINMUX_AUX_SPDIF_OUT_0
Offset: 0x3354 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_UP PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 SPDIF PM:
0 = SPDIF
1 = RSVD1
2 = RSVD2
3 = I2C3
8.12.153 PINMUX_AUX_DAP2_FS_0
Offset: 0x3358 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.154 PINMUX_AUX_DAP2_DIN_0
Offset: 0x335c | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.155 PINMUX_AUX_DAP2_DOUT_0
Offset: 0x3360 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.156 PINMUX_AUX_DAP2_SCLK_0
Offset: 0x3364 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.157 PINMUX_AUX_DVFS_PWM_0
Offset: 0x3368 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.158 PINMUX_AUX_GPIO_X1_AUD_0
Offset: 0x336c | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
8.12.159 PINMUX_AUX_GPIO_X3_AUD_0
Offset: 0x3370 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_UP PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 SPI6 PM:
0 = SPI6
1 = SPI1
2 = GMI
3 = RSVD3
8.12.160 PINMUX_AUX_DVFS_CLK_0
Offset: 0x3374 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.161 PINMUX_AUX_GPIO_X4_AUD_0
Offset: 0x3378 | Read/Write: R/W | Reset: 0x00000035 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110101)
8.12.162 PINMUX_AUX_GPIO_X5_AUD_0
Offset: 0x337c | Read/Write: R/W | Reset: 0x00000039 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111001)
8.12.163 PINMUX_AUX_GPIO_X6_AUD_0
Offset: 0x3380 | Read/Write: R/W | Reset: 0x00000039 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111001)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_UP PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 SPI1 PM:
0 = SPI6
1 = SPI1
2 = SPI2
3 = GMI
8.12.164 PINMUX_AUX_GPIO_X7_AUD_0
Offset: 0x3384 | Read/Write: R/W | Reset: 0x00000035 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110101)
8.12.165 PINMUX_AUX_SDMMC3_CLK_0
Offset: 0x3390 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_DOWN PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
8.12.166 PINMUX_AUX_SDMMC3_CMD_0
Offset: 0x3394 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_UP PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 SDMMC3 PM:
0 = SDMMC3
1 = PWM3
2 = UARTA
3 = SPI3
8.12.167 PINMUX_AUX_SDMMC3_DAT0_0
Offset: 0x3398 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.168 PINMUX_AUX_SDMMC3_DAT1_0
Offset: 0x339c | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_UP PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 SDMMC3 PM:
0 = SDMMC3
1 = PWM2
2 = UARTA
3 = SPI3
8.12.169 PINMUX_AUX_SDMMC3_DAT2_0
Offset: 0x33a0 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.170 PINMUX_AUX_SDMMC3_DAT3_0
Offset: 0x33a4 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_UP PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 SDMMC3 PM:
0 = SDMMC3
1 = PWM0
2 = DISPLAYB
3 = SPI3
8.12.171 PINMUX_AUX_PEX_L0_RST_N_0
Offset: 0x33bc | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 NORMAL PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 PE0 PM:
0 = PE0
1 = RSVD1
2 = RSVD2
3 = RSVD3
8.12.172 PINMUX_AUX_PEX_L0_CLKREQ_N_0
Offset: 0x33c0 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 NORMAL PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 PE0 PM:
0 = PE0
1 = RSVD1
2 = RSVD2
8.12.173 PINMUX_AUX_PEX_WAKE_N_0
Offset: 0x33c4 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 NORMAL PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 PE PM:
0 = PE
1 = RSVD1
2 = RSVD2
3 = RSVD3
8.12.174 PINMUX_AUX_PEX_L1_RST_N_0
Offset: 0x33cc | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 NORMAL PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 PE1 PM:
0 = PE1
1 = RSVD1
2 = RSVD2
3 = RSVD3
8.12.175 PINMUX_AUX_PEX_L1_CLKREQ_N_0
Offset: 0x33d0 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
8.12.176 PINMUX_AUX_HDMI_CEC_0
Offset: 0x33e0 | Read/Write: R/W | Reset: 0x00000070 (0bxxxxxxxxxxxxxxxxxxxxxxxx01110000)
8.12.177 PINMUX_AUX_SDMMC1_WP_N_0
Offset: 0x33e4 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.178 PINMUX_AUX_SDMMC3_CD_N_0
Offset: 0x33e8 | Read/Write: R/W | Reset: 0x00000038 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111000)
8.12.179 PINMUX_AUX_GPIO_W2_AUD_0
Offset: 0x33ec | Read/Write: R/W | Reset: 0x00000039 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111001)
8.12.180 PINMUX_AUX_GPIO_W3_AUD_0
Offset: 0x33f0 | Read/Write: R/W | Reset: 0x00000039 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x111001)
8.12.181 PINMUX_AUX_USB_VBUS_EN0_0
Offset: 0x33f4 | Read/Write: R/W | Reset: 0x00000060 (0bxxxxxxxxxxxxxxxxxxxxxxxx01100000)
8.12.182 PINMUX_AUX_USB_VBUS_EN1_0
Offset: 0x33f8 | Read/Write: R/W | Reset: 0x00000060 (0bxxxxxxxxxxxxxxxxxxxxxxxx01100000)
8.12.183 PINMUX_AUX_SDMMC3_CLK_LB_IN_0
Offset: 0x33fc | Read/Write: R/W | Reset: 0x00000024 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x100100)
8.12.184 PINMUX_AUX_SDMMC3_CLK_LB_OUT_0
Offset: 0x3400 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
8.12.186 PINMUX_AUX_RESET_OUT_N_0
Offset: 0x3408 | Read/Write: R/W | Reset: 0x00000020 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x100000)
8.12.187 PINMUX_AUX_KB_ROW16_0
Offset: 0x340c | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 373
Tegra K1 Technical Reference Manual
Multi-Purpose I/O Pins and Pin Multiplexing
8.12.188 PINMUX_AUX_KB_ROW17_0
Offset: 0x3410 | Read/Write: R/W | Reset: 0x00000034 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110100)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 PULL_DOWN PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 KBC PM:
0 = KBC
1 = RSVD1
2 = RSVD2
3 = UARTC
8.12.189 PINMUX_AUX_USB_VBUS_EN2_0
Offset: 0x3414 | Read/Write: R/W | Reset: 0x00000060 (0bxxxxxxxxxxxxxxxxxxxxxxxx01100000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
6 ENABLE OD:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 NORMAL TRISTATE:
0 = NORMAL
1 = TRISTATE
8.12.190 PINMUX_AUX_GPIO_PFF2_0
Offset: 0x3418 | Read/Write: R/W | Reset: 0x00000070 (0bxxxxxxxxxxxxxxxxxxxxxxxx01110000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
6 ENABLE OD:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 NORMAL PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 SATA PM:
0 = SATA
1 = RSVD1
2 = RSVD2
3 = RSVD3
8.12.191 PINMUX_AUX_DP_HPD_0
Offset: 0x3430 | Read/Write: R/W | Reset: 0x00000030 (0bxxxxxxxxxxxxxxxxxxxxxxxx0x110000)
Bit Reset Description
7 DISABLE LOCK:
0 = DISABLE
1 = ENABLE
5 ENABLE E_INPUT:
0 = DISABLE
1 = ENABLE
4 TRISTATE TRISTATE:
0 = NORMAL
1 = TRISTATE
3:2 NORMAL PUPD:
0 = NORMAL
1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
1:0 DP PM:
0 = DP
1 = RSVD1
2 = RSVD2
3 = RSVD3
Registers in the PMC control entering/exiting Deep Sleep/Suspend mode, power detect, and I/O power functions. They also
control CORE_PWR_REQ, SYS_CLK_REQ, and LED_BLINK pins.
The following registers should be programmed/read for different power events in order for PMC to function properly.
FOR BLINK
BLINK_TIMER
PMC Control Register (bit BLINK_EN)
DPD_PADS_ORIDE (for blink field)
9.2.1 APBDEV_PMC_CNTRL_0
This register controls the clock to the RTC, and the reset to the CAR and RTC. It also manages polarity and output enable of
the sys_clk_req and core_pwr_req pins. At reset, both are disabled since the PMIC properties are unknown.
Auxiliary functions include enabling of blinking functions, side-effect option, and software wake-up latching.
The LP0 entry is to be triggered by the PMC side-effect option. Software needs to configure the PMC for the side-effect option
before triggering the power off of last CPU. If the side-effect option is set, then the PMC would initiate LP0 in the following
cases:
A power-off request for the CPU rail will lead to CPU rail power-off followed by LP0 entry.
A power-gating request for cluster1 non-CPU (i.e., C1NC) will lead to power-gating of the C1NC followed by LP0
entry
14 0x0 SIDE_EFFECT_LP0: When set, causes the side effect of entering LP0 after powering
down the CPU
0 = DISABLE
1 = ENABLE
12 0x0 PWRGATE_DIS: Disable power gating - global override, will override function of
PWRGATE_TOGGLE register. All partitions will stay enabled.
Note: Only write to this bit when CRAIL is on.
0 = DISABLE
1 = ENABLE
11 0x1 SYSCLK_OE: Enables output of system enable clock - works only if the SYS_CLK
field in DPD_PADS_ORIDE is set to 1.
0 = DISABLE
1 = ENABLE
7 0x0 BLINK_EN: Enables blinking counter and blink output works only if the BLINK field in
DPD_PADS_ORIDE is set to 1.
0 = DISABLE
1 = ENABLE
5 0x0 LATCHWAKE_EN: Enables latching wakeup events - stops latching on transition from
1 to 0 (sequence - set to 1,set to 0)
0 = DISABLE
1 = ENABLE
9.2.2 APBDEV_PMC_SEC_DISABLE_0
On separate reset (same as CAR), this register disables access (read/write to secure scratch registers). Once writes are
disabled, secure registers cannot be written until power on reset or reset when exiting Deep Sleep mode.
Once reads are disabled, reads from scratch registers will return 0 until power on reset or reset when exiting Deep Sleep
mode.
Single register can be disabled for reads/writes; bits 0 and 1 have an overwrite function.
9.2.3 APBDEV_PMC_PMC_SWRST_0
Reset only by the POR cell; sets itself back to inactive after 2 clock cycles. Only used for emergency debugging purposes; not
to be used in any functional mode.
Note: Defunct. Kept only for binary code compatibility only. Will not do anything
9.2.4 APBDEV_PMC_WAKE_MASK_0
The APBDEV_PMC_WAKE registers handle wake events whose number is less than or equal to 32. For wake events whose
number is greater than 32, refer to the APBDEV_PMC_WAKE2 registers below.
This register masks which event can cause a wake-up from Deep Sleep mode. It has to be set up before entering Deep Sleep
mode. It works in conjunction with the WAKE_LVL register.
Only enabled events at the proper wake_lvl will cause exit from Deep Sleep mode.
9.2.5 APBDEV_PMC_WAKE_LVL_0
This register sets the active level for the wake event. It will cause an exit from Deep Sleep mode if the input signal level
matches the level set in this register and WAKE_MASK is set for the event to 1.
9.2.6 APBDEV_PMC_WAKE_STATUS_0
This register stores the status of the wake events. The event will be set if the level matches and is not masked.
9.2.7 APBDEV_PMC_SW_WAKE_STATUS_0
This register stores status of the wake events. Latching of the events in software wake status is enabled by the PMC_CNTRL
register bit LATCHWAKE_EN.
Latching will stop at a 1-to-0 transition on this bit. An event will be set if the level matches. Masking does not affect this
register. A write will reset the set wake events.
9.2.8 APBDEV_PMC_DPD_PADS_ORIDE_0
This register enables overriding values from pinmux with values driven by the KBC (keyboard) or the PMC (sys_clk_req, blink).
If a bit is set to 1, the associated I/O will drive the direct value from the KBC or PMC, not the pinmux value. During Deep Sleep
mode, the pads with the bit set to 1 will not be in Deep Power Down mode. It will not drive data from mini pad macros stored
during sample cycle, but direct data from the KBC or PMC.
Note: This register has to be set before entering Deep Sleep mode.
21 0x1 SYS_CLK_REQ: Override DPD idle state with column with SYS_CLK_REQ output
0 = DISABLE
1 = ENABLE
9.2.9 APBDEV_PMC_DPD_SAMPLE_0
Setting this register will trigger sampling pads data and direction in which the pad will be driven during Deep Sleep mode.
Before writing to this register, all interfaces going to pads must be set to the ideal "idle" mode, which is expected to be driven
by pads when the Tegra K1 chip enters Deep Sleep.
DPS Power Down Sample has to precede Deep Power Down Enable write. The DPD sample should not be deasserted until
the transition from Deep Sleep to WB0.
Note: Only one sample signal exists to perform sampling while entering DPD mode. Thus all interfaces are sampled
at the same time. The sequence of multiple DPD groups requires keeping all interfaces (already in DPD mode)
in idle.
9.2.10 APBDEV_PMC_DPD_ENABLE_0
Setting this register will trigger entering Deep Sleep state. It must be preceded by a DPD_SAMPLE write.
Will cause request for shutting down the system clock and the core req power. Puts the PLLs and I/Os in Deep Power Down
mode. Will cut off (clamp) all signals going from core power to AO and pads.
If none of the wake-up events is set, only power-on reset can re-enable access to the chip.
After servicing of the wake-up event is completed, the register should be set back to 0 to complete a Deep Sleep cycle.
0 = DISABLE
1 = ENABLE
9.2.11 APBDEV_PMC_PWRGATE_TIMER_OFF_0
Specifies the number of APB cycles after which the rail line goes off (turns the power to part of power-gated partition). Each
rail controls part of the powered partition. This register should be set before the write to Power Gate Toggle. Shared between
all power partitions.
9.2.12 APBDEV_PMC_CLAMP_STATUS_0
This register is kept for backward code compatibility; the timer is based on PWRGATE_TIMER_OFF only.
9.2.13 APBDEV_PMC_PWRGATE_TOGGLE_0
Write to this register will turn power on/off to the specified power-gated partition. Only one partition is turned on/off at a time.
PWRGATE_STATUS should be read to determine the state of the partition before writing to this register.
Turning the partition off will cause automatic clamping of all signals generated by the power-gated partition being turned off.
Before the partition is turned off, all clocks to the partition should be stopped, and the reset to the partition should be asserted.
Turning the partition on will not remove clamping. Clamping is removed only after a REMOVE_CLAMPING_CMD write.
The user must allow a minimum 20 APB clock cycles between consecutive partition Power-Gate Toggle requests.
The role of the START bit has changed from prior Tegra devices. The START bit is cleared by hardware when the PMC
accepts the request to power-gate or unpower-gate the partition. So in order to power-gate/unpower-gate a partition, software
needs to do the following:
Check to see if the partition is already in the correct state, by looking at the PWRGATE_STATUS register.
If the partition is not in the correct state, software reads the PWRGATE_TOGGLE register to see if the START bit is
0.
If the START bit is not 0, software polls until the start bit is set to 0.
Then program the PWRGATE_TOGGLE register with the START bit set to 1 and choose the required partition to be
power-gated.
Ideally, software can poll to check the START bit going back to 0, which indicates that the PMC has accepted the
request, and then poll the STATUS register to make sure the required partition is power-gated/unpower-gated.
9.2.14 APBDEV_PMC_REMOVE_CLAMPING_CMD_0
This is a bitmap with one bit per power partition controller by the PMC.
When written to 1b, the PMC removes the clamp signals to the corresponding partition. If the partition is not powered on, the
register write will be ignored.
The bit is automatically reset to 0b when the clamping has been removed. Software is responsible for writing to this register at
the correct time, that is, when the clocks are started but the blocks in that partition are still held in reset.
Remove Clamping
Offset: 0x34 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxx00000000000x0000000000000)
9.2.15 APBDEV_PMC_PWRGATE_STATUS_0
This read-only register displays the status of the power partitions. This register should be read before writing to
PWRGATE_TOGGLE.
9.2.16 APBDEV_PMC_PWRGOOD_TIMER_0
This register programs the length of the wake-up reset, asserted after wake-up from Deep Sleep. This register should be set
before entering Deep Sleep mode.
OSC_PREPWR: OSC clock stabilization timer prior to SoC rail pwr-req assertion. The
23:16 0x3f timer value is 4*OSC_PREPWR+1 number of 32.768 kHz clock cycles; that is, the
timer value is (OSC_PREPWR*122.07)+30.518 µs.
15:8 0x0 OSC_POSTPWR: OSC clock stabilization timer after SoC rail power is stabilized. The
timer value is 4*OSC_POSTPWR+1 number of 32.768 kHz clock cycles; that is, the
timer value is (OSC_POSTPWR*122.07)+30.518 µs.
7:0 0x7f PWRGOOD: SoC rail power-on stabilization timer.The timer value is PWRGOOD+1
number of 32.768 kHz clock cycles; that is, the timer value is
(PWRGOOD*30.52)+30.518 µs.
9.2.17 APBDEV_PMC_BLINK_TIMER_0
Will output value to pad only if the PMC Control register has BLINK_EN set and DPD_PADS_ORIDE has blink bit set.
Setting bit 15 to 1 will output 32 kHz clock (the registers above still have to be set)
9.2.18 APBDEV_PMC_NO_IOPOWER_0
IMPORTANT: Before an I/O power rail is turned off, ramping up, or no longer used and ready to turn off, the corresponding bit
in this register should be set to 1. The bit only needs to be turned on when the I/O power rail is stable and you are ready to
enable some interface on the I/O power rail.
SYS_2:rail AO I/Os
17 0x0 0 = DISABLE
1 = ENABLE
PEX_CNTRL: PEX
11 0x0 0 = DISABLE
1 = ENABLE
9.2.19 APBDEV_PMC_PWR_DET_0
Active high, sets power detection for nine power rails only. - MIPI does not have power detect.
Write 0 to PWR_DET_LATCH
No delay is necessary
Write 0 to PWR_DET
Power Detect
Offset: 0x48 │ Read/Write: R/W │ Reset: 0x0002bc2f (0bxxxxxxxxxxxxxx1x1x1111xxxx1x1111)
SYS_2:rail AO I/Os
17 0x1 0 = DISABLE
1 = ENABLE
9.2.20 APBDEV_PMC_PWR_DET_LATCH_0
Latches power detect for power rails enabled by Power Detect register.
9.2.21 APBDEV_PMC_SCRATCH0_0
Scratch Register
Scratch registers for restoring context after wake-up. On a cold power up, the content of register 0 will be reset to 0x0.
9.2.22 APBDEV_PMC_SCRATCH1_0
Scratch Register
Offset: 0x54 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.23 APBDEV_PMC_SCRATCH2_0
Scratch Register
Offset: 0x58 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.24 APBDEV_PMC_SCRATCH3_0
Scratch Register
Offset: 0x5c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.25 APBDEV_PMC_SCRATCH4_0
Scratch Register
Offset: 0x60 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.26 APBDEV_PMC_SCRATCH5_0
Scratch Register
Offset: 0x64 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.27 APBDEV_PMC_SCRATCH6_0
Scratch Register
Offset: 0x68 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.28 APBDEV_PMC_SCRATCH7_0
Scratch Register
Offset: 0x6c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.29 APBDEV_PMC_SCRATCH8_0
Scratch Register
Offset: 0x70 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.30 APBDEV_PMC_SCRATCH9_0
Scratch Register
Offset: 0x74 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.31 APBDEV_PMC_SCRATCH10_0
Scratch Register
Offset: 0x78 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.32 APBDEV_PMC_SCRATCH11_0
Scratch Register
Offset: 0x7c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.33 APBDEV_PMC_SCRATCH12_0
Scratch Register
Offset: 0x80 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.34 APBDEV_PMC_SCRATCH13_0
Scratch Register
Offset: 0x84 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.35 APBDEV_PMC_SCRATCH14_0
Scratch Register
Offset: 0x88 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.36 APBDEV_PMC_SCRATCH15_0
Scratch Register
Offset: 0x8c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.37 APBDEV_PMC_SCRATCH16_0
Scratch Register
Offset: 0x90 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.38 APBDEV_PMC_SCRATCH17_0
Scratch Register
Offset: 0x94 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.39 APBDEV_PMC_SCRATCH18_0
Scratch Register
Offset: 0x98 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.40 APBDEV_PMC_SCRATCH19_0
Scratch Register
Offset: 0x9c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.41 APBDEV_PMC_SCRATCH20_0
Scratch Register
Offset: 0xa0 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.42 APBDEV_PMC_SCRATCH21_0
Scratch Register
Offset: 0xa4 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.43 APBDEV_PMC_SCRATCH22_0
Scratch Register
Offset: 0xa8 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.44 APBDEV_PMC_SCRATCH23_0
Scratch Register
Offset: 0xac │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.45 APBDEV_PMC_SECURE_SCRATCH0_0
31:0 X SECURE_SCRATCH0
9.2.46 APBDEV_PMC_SECURE_SCRATCH1_0
31:0 X SECURE_SCRATCH1
9.2.47 APBDEV_PMC_SECURE_SCRATCH2_0
31:0 X SECURE_SCRATCH2
9.2.48 APBDEV_PMC_SECURE_SCRATCH3_0
31:0 X SECURE_SCRATCH3
9.2.49 APBDEV_PMC_SECURE_SCRATCH4_0
31:0 X SECURE_SCRATCH4
9.2.50 APBDEV_PMC_SECURE_SCRATCH5_0
31:0 X SECURE_SCRATCH5
9.2.51 APBDEV_PMC_CPUPWRGOOD_TIMER_0
It should also be used to mask OC during CPU rail power up when OC is multiplexed to the PG pin using
APBDEV_PMC_CNTRL_0_CPUPWRGOOD_EN based on how long the PMIC drives PG on this signal.
9.2.52 APBDEV_PMC_CPUPWROFF_TIMER_0
It should also be used to mask OC during CPU rail power down when OC is multiplexed to the PG pin using
APBDEV_PMC_CNTRL_0_CPUPWRGOOD_EN based on how long the PMIC keeps PG low.
9.2.53 APBDEV_PMC_PG_MASK_0
Offset: 0xd0 │ Read/Write: R/W │ Reset: 0xffffffff (0b11111111111111111111111111111111)
9.2.54 APBDEV_PMC_PG_MASK_1_0
Offset: 0xd4 │ Read/Write: R/W │ Reset: 0xffffff01 (0b111111111111111111111111xxxxxxx1)
9.2.55 APBDEV_PMC_AUTO_WAKE_LVL_0
Note: This register is not used.
The wake levels are snapped just before entering DPD by default.
9.2.56 APBDEV_PMC_AUTO_WAKE_LVL_MASK_0
This register is used by software to enable sampling of the wake pads before entering Deep Sleep.
Setting a '1' causes the associated pad to be sampled, and the value transferred to the WAKE_LVL register.
9.2.57 APBDEV_PMC_WAKE_DELAY_0
WAKE_DELAY should be a non-zero value.
9.2.58 APBDEV_PMC_PWR_DET_VAL_0
This register is used to override the power-detect cells and manually set the values (in the unlikely case the power-detect cells
are broken). A write to this register also causes the values from the power-detect cells to be captured and which can be
subsequently read out.
HV:rail HV I/Os
15 0x1 0 = ENABLE
1 = DISABLE
9.2.59 APBDEV_PMC_DDR_PWR_0
This register is used to program the "E_18V" pin of the DDR pads.
9.2.60 APBDEV_PMC_USB_DEBOUNCE_DEL_0
Determines number of 32 kHz clock cycles to debounce USB signal events.
23:20 0x0 UHSIC_LINE_DEB_CNT: Number of 32 kHz debounce cycles for UHSIC port 0
19:16 0x0 UTMIP_LINE_DEB_CNT: Number of 32 kHz debounce cycles for UTMIP port 0
VAL: Debounce period for ID and VBUS events on all USB ports. The programmed value
15:0 0x2
must be greater than 1.
9.2.61 APBDEV_PMC_USB_AO_0
Power downs for various USB features controlled by the PMC.
Each UTMIP has the following power downs for features that can lead to wake-up events.
Each UHSIC port has the following power downs for features that can lead to wake-up events:
9.2.62 APBDEV_PMC_CRYPTO_OP_0
A complete solution requires a "semi-sticky" bit in the always-on domain. The Boot ROM would clear this semi-sticky bit for
cold boots, but use its value to propagate the crypto-disable flag across LP0. (The Boot ROM always requires crypto
functionality, so a pure hardware solution probably isn't reasonable.)
The Boot ROM would be able to clear (to zero) and read the sticky bit, but outside the Boot ROM users would only be able to
set (to one) and read the sticky bit. On cold boot, the Boot ROM would always clear the stick bit. On WB0, the Boot ROM
would read the sticky bit and copy it's setting to the crypto disable flag.
9.2.63 APBDEV_PMC_PLLP_WB0_OVERRIDE_0
Master control for all WB0 PLL overrides.
PLL_REF_DIV: PLL reference clock divide for all PLLs. 00 = /1, 01 = /2, 10 = /4, 11 =
7:6 0x0
reserve.
9.2.64 APBDEV_PMC_SCRATCH24_0
Scratch Register
Offset: 0xfc │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.65 APBDEV_PMC_SCRATCH25_0
Scratch Register
Offset: 0x100 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.66 APBDEV_PMC_SCRATCH26_0
Scratch Register
Offset: 0x104 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.67 APBDEV_PMC_SCRATCH27_0
Scratch Register
Offset: 0x108 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.68 APBDEV_PMC_SCRATCH28_0
Scratch Register
Offset: 0x10c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.69 APBDEV_PMC_SCRATCH29_0
Scratch Register
Offset: 0x110 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.70 APBDEV_PMC_SCRATCH30_0
Scratch Register
Offset: 0x114 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.71 APBDEV_PMC_SCRATCH31_0
Scratch Register
Offset: 0x118 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.72 APBDEV_PMC_SCRATCH32_0
Scratch Register
Offset: 0x11c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.73 APBDEV_PMC_SCRATCH33_0
Scratch Register
Offset: 0x120 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.74 APBDEV_PMC_SCRATCH34_0
Scratch Register
Offset: 0x124 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.75 APBDEV_PMC_SCRATCH35_0
Scratch Register
Offset: 0x128 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.76 APBDEV_PMC_SCRATCH36_0
Scratch Register
Offset: 0x12c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.77 APBDEV_PMC_SCRATCH37_0
Scratch Register
Offset: 0x130 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.78 APBDEV_PMC_SCRATCH38_0
Scratch Register
Offset: 0x134 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.79 APBDEV_PMC_SCRATCH39_0
Scratch Register
Offset: 0x138 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.80 APBDEV_PMC_SCRATCH40_0
Scratch Register
Offset: 0x13c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.81 APBDEV_PMC_SCRATCH41_0
Scratch Register
Offset: 0x140 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.82 APBDEV_PMC_SCRATCH42_0
Scratch Register
Offset: 0x144 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.83 APBDEV_PMC_BONDOUT_MIRROR0_0
31:0 X BONDOUT_MIRROR0
9.2.84 APBDEV_PMC_BONDOUT_MIRROR1_0
31:0 X BONDOUT_MIRROR1
9.2.85 APBDEV_PMC_BONDOUT_MIRROR2_0
31:0 X BONDOUT_MIRROR2
9.2.86 APBDEV_PMC_SYS_33V_EN_0
Offset: 0x154 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
VAL:
0 0x0 1 = 3.3V
0 = 1.8V
9.2.87 APBDEV_PMC_BONDOUT_MIRROR_ACCESS_0
On separate reset (same as the CAR) disables access (read/write to secure scratch registers)
9.2.88 APBDEV_PMC_GATE_0
This register is used for software controlled synchronization between APB domain and the 32 kHz domain. Software is
expected to set the GAKE_WAKE/GATE_DBNS field high to cut the 32 kHz gated clock before updating WAKE_LVL,
AUTO_WAKE_LVL, WAKE_MASK and USB_DEBOUNCE_DEL registers. After these registers have been written the
GATE_WAKE/GATE_DBNS bit should be written back to '0' to enable the 32 kHz gated clock.
This gates the 32 kHz clock to just the flops that store the above fields.
GATE_WAKE:
0 0x0 0 = OFF
1 = ON
GATE_DBNS:
0 0x0 0 = OFF
1 = ON
9.2.89 APBDEV_PMC_WAKE2_MASK_0
Auto-wake is not present for wake2 events in Tegra K1 devices.
The APBDEV_PMC_WAKE2 registers handle wake events whose number exceeds 32. For wake events whose number is
less than or equal to 32, refer to the APBDEV_PMC_WAKE registers above.
EVENT_REST_1:
28:12 0x0 0 = DISABLE
1 = ENABLE
EVENT_REST:
11:7 0x0 0 = DISABLE
1 = ENABLE
USB_EVENT:
6:5 0x0 0 = ACTIVE_LOW
1 = ACTIVE_HIGH
EVENT:
4:0 0x0 0 = DISABLE
1 = ENABLE
9.2.90 APBDEV_PMC_WAKE2_LVL_0
This register sets the active level for a wake event. It causes an exit from the Deep Sleep state if the input signal level matches
the level set in this register and if WAKE2_MASK is set for the event to 1. A level is not needed for 4 line wakeup events; the
level is always 1.
Set the following PMC register bits to ‘1’ to set the wake signal active level to ‘HIGH’:
EVENT_REST_1:
28:12 0x19fff 0 = ACTIVE_LOW
1 = ACTIVE_HIGH
EVENT_REST:
11:7 0x1f 0 = ACTIVE_LOW
1 = ACTIVE_HIGH
USB_EVENT:
6:5 0x3 0 = ACTIVE_LOW
1 = ACTIVE_HIGH
9.2.91 APBDEV_PMC_WAKE2_STATUS_0
This register stores status of the wake events. An event is set if the level matches and is not masked.
EVENT_REST_1:
28:12 0x0 0 = NOT_SET
1 = SET
9.2.92 APBDEV_PMC_SW_WAKE2_STATUS_0
This register stores the status of the wake events. Latching of the events in software wake status is enabled by the
PMC_CNTRL register bit LATCHWAKE_EN. Latching will stop at a 1-to-0 transition on this bit.
An event is set if the level matches. Masking does not affect this register. Writes will reset the set wake events.
EVENT_REST_1:
28:12 0x0 0 = NOT_SET
1 = SET
9.2.93 APBDEV_PMC_AUTO_WAKE2_LVL_MASK_0
Auto-wake is not present for wake2 events in Tegra K1 devices.
9.2.94 APBDEV_PMC_PG_MASK_2_0
Power-Gate mask registers for power-gated fields. Need 32 bits for CPU.
9.2.95 APBDEV_PMC_PG_MASK_CE1_0
Offset: 0x178 │ Read/Write: R/W │ Reset: 0x000000ff (0bxxxxxxxxxxxxxxxxxxxxxxxx11111111)
9.2.96 APBDEV_PMC_PG_MASK_CE2_0
Offset: 0x17c │ Read/Write: R/W │ Reset: 0x000000ff (0bxxxxxxxxxxxxxxxxxxxxxxxx11111111)
9.2.97 APBDEV_PMC_PG_MASK_CE3_0
Offset: 0x180 │ Read/Write: R/W │ Reset: 0x000000ff (0bxxxxxxxxxxxxxxxxxxxxxxxx11111111)
9.2.98 APBDEV_PMC_PWRGATE_TIMER_CE_0_0
Separate power_gate_off, on, for CE counters - 4 bits each.
9.2.99 APBDEV_PMC_PWRGATE_TIMER_CE_1_0
PWRGATE_TIMER CE_1 removed but kept for backward compatibility.
9.2.100 APBDEV_PMC_PWRGATE_TIMER_CE_2_0
PWRGATE_TIMER CE_2 removed but kept for backward compatibility.
9.2.101 APBDEV_PMC_PWRGATE_TIMER_CE_3_0
PWRGATE_TIMER CE_3 removed but kept for backward compatibility.
9.2.102 APBDEV_PMC_PWRGATE_TIMER_CE_4_0
PWRGATE_TIMER CE_4 removed but kept for backward compatibility.
9.2.103 APBDEV_PMC_PWRGATE_TIMER_CE_5_0
PWRGATE_TIMER CE_5 removed but kept for backward compatibility.
9.2.104 APBDEV_PMC_PWRGATE_TIMER_CE_6_0
PWRGATE_TIMER CE_6 removed but kept for backward compatibility.
9.2.105 APBDEV_PMC_PCX_EDPD_CNTRL_0
Defunct
9.2.106 APBDEV_PMC_OSC_EDPD_OVER_0
This register can be programmed to keep the oscillator ON during LP0 mode. It cuts the latency time on LP0 wake if the
oscillator pad does not have to be restarted.
When the oscillator pad is on, during LP0 mode, DSPARE, duty, strength, and bypass are controlled by the fields below.
The oscillator can be in one in four modes during LP0 - in DPD, not in DPD but not enabled, running, or running only when an
external request is active.
9.2.107 APBDEV_PMC_CLK_OUT_CNTRL_0
This register controls 3 clock outputs of the Tegra K1 chip. Each of the clock outputs can be in 1 of 4 modes: not running,
running when request is active high, running when request is active low, or always running. The clock output when not running
can be tristated, high, or low.
The clock source might be from the CAR unit (not available when in LP0 mode), osc, osc_div2, or osc_div4.
The clock source switching on dap_mclk1_out , clk3_out and clk2_out is not glitch free. If dpd_override is not set before
entering LP0, the selected clock source will get latched to "0" or "1" in LP0 (which is not glitch free).dpd_override can be "0"
only when external device does not need clock in LP0, and it should be in reset before PMC_SAMPLE bit is written by LP0
entry code.
The clock source should only be switched when the pad output is not being used by an external device.
When an external device requests for a clock, the first few clocks should not be used by the external device.
CLK3_SRC_SEL:
0 = OSC_DIV1
23:22 0x0 1 = OSC_DIV2
2 = OSC_DIV3
3 = CAR
CLK3_IDLE_STATE:
0 = LOW
21:20 0x0
1 = HIGH
2 = TRIS
17 0x0 CLK3_INVERT_REQ:
16 0x0 CLK3_ACCEPT_REQ:
CLK2_SRC_SEL:
0 = OSC_DIV1
15:14 0x0 1 = OSC_DIV2
2 = OSC_DIV3
3 = CAR
CLK2_IDLE_STATE:
0 = LOW
13:12 0x0
1 = HIGH
2 = TRIS
9 0x0 CLK2_INVERT_REQ:
8 0x0 CLK2_ACCEPT_REQ:
CLK1_SRC_SEL:
0 = OSC_DIV1
7:6 0x0 1 = OSC_DIV2
2 = OSC_DIV3
3 = CAR
1 0x0 CLK1_INVERT_REQ:
0 0x0 CLK1_ACCEPT_REQ:
9.2.108 APBDEV_PMC_SATA_PWRGT_0
This register controls the SATA PLLs
SW_PLL_EDPD: Defunct.
The SATA PLL is put in the DPD state when this bit is set, independently of power-gating -
7 0x0 kept only until drivers are fixed.
0 = OFF
1 = ON
PLLE_IDDQ_OVERRIDE_VALUE: Defunct.
0: The PLLE is powered up. 1: Software can put the PLLE in IDDQ mode by setting this bit
5 0x1 and PLLE_IDDQ_SWCTL (default)
0 = OFF
1 = ON
PLLE_IDDQ_SWCTL: 0: Defunct.
The PLLE is put in IDDQ mode by hardware (SATA +AFI+CAR) signals. 1: The PLLE is
4 0x1 put in IDDQ mode by software -- default
0 = OFF
1 = ON
PADPLL_IDDQ_OVERRIDE_VALUE: Defunct.
0: The pad PLL is powered up 1: Software can put the pad PLL in IDDQ mode by setting
1 0x1 this bit and SATA_PADPLL_IDDQ_SWCTL (default)
0 = OFF
1 = ON
PADPLL_IDDQ_SWCTL: Defunct.
0: The SATA pad PLL is put in IDDQ mode by hardware (SATA +AFI+CAR) signals.1: The
0 0x1 SATA pad PLL is put in IDDQ mode by software (default)
0 = OFF
1 = ON
9.2.109 APBDEV_PMC_SENSOR_CTRL_0
For sensor shutdown and control.
The sensor control register defines chip behavior when a sensor request is triggered. It can power-gate down all CPUs if
enabled. It can trigger a reset (will cause a CPU power request to go down and power-gates down all CPUs)
IMPORTANT-- to preserve RAM content, any reads/writes to scratch registers will be blocked after a sensor triggered reset.
BLOCK_SCRATCH_WRITE: Reset by user, set by the PMC when entering sensor reset
2 0x0 0 = OFF
1 = ON
9.2.110 APBDEV_PMC_RST_STATUS_0
9.2.111 APBDEV_PMC_IO_DPD_REQ_0
Puts I/O rails in or out of DPD mode, even though the chip is not in LP0. Multiple bits are allowed to be set at the same time.
No new operation will be triggered until previous one completes. Consecutive operations issued by completion time of first one
will be dropped. The register is still updated.
Setting IO_DPD_REQ should be preceded by writing to the DPD_SAMPLE registers (to enable a snapshot of data to be
driven) and the SEL_DPD_TIM register. SEL_DPD_TIM is set to a safe value, but it can be lowered if SYS clock is slower (a
minimum of 200 ns is required).
Note: Only one sample signal exists to perform sampling while entering DPD mode. Thus all interfaces are sampled
at the same time. The sequence of multiple DPD groups requires keeping all interfaces (already in DPD mode)
in idle.
DPD Request
Offset: 0x1b8 │ Read/Write: R/W │ Reset: 0x00000000 (0b0000000000000x000000000xx0000000)
DDR_DATA: Defunct.
27 0x0 0 = OFF
1 = ON
DISC_ADDR_CMD: Defunct
26 0x0 0 = OFF
1 = ON
DDR_ADDR_CMD: Defunct
25 0x0 0 = OFF
1 = ON
POP_ADDR_CMD: Defunct
24 0x0 0 = OFF
1 = ON
POP_CLK: Defunct
23 0x0 0 = OFF
1 = ON
22 0x0 COMP: puts xm0_comp_pd_pad, xm0_comp_pu_pad in/out of deep power down mode
DISC_VTTGEN: Defunct.
21 0x0 0 = OFF
1 = ON
POP_VTTGEN: Defunct.
20 0x0 0 = OFF
1 = ON
VI: Defunct.
16 0x0 0 = OFF
1 = ON
UART: Puts the UART rail in/out of Deep Power Down mode
14 0x0 0 = OFF
1 = ON
NAND: Puts the NAND rail in/out of Deep Power Down mode
13 0x0 0 = OFF
1 = ON
9.2.112 APBDEV_PMC_IO_DPD_STATUS_0
Reflects the DPD status of each I/O rail.
DPD Status
Offset: 0x1bc │ Read/Write: R/W │ Reset: 0x0000000X (0bxx00000000000x000000000xx000xxxx)
DDR_DATA: Defunct.
27 RW 0x0 0 = OFF
1 = ON
DISC_ADDR_CMD: Defunct
26 RW 0x0 0 = OFF
1 = ON
POP_ADDR_CMD: Defunct
24 RW 0x0 0 = OFF
1 = ON
POP_CLK: Defunct
23 RW 0x0 0 = OFF
1 = ON
DISC_VTTGEN: Defunct
21 RW 0x0 0 = OFF
1 = ON
POP_VTTGEN: Defunct
20 RW 0x0 0 = OFF
1 = ON
9.2.113 APBDEV_PMC_IO_DPD2_REQ_0
Second set of DPD requests due to additional rails.
5 0x0 RES_RAIL:
0 = OFF
1 = ON
4 0x0 CAM: Puts the camera in/out of Deep Power Down mode
0 = OFF
1 = ON
9.2.114 APBDEV_PMC_IO_DPD2_STATUS_0
DPD2 Status
Offset: 0x1c4 │ Read/Write: R/W │ Reset: 0x02000000 (0bxx000010000000000000000000000000)
9.2.115 APBDEV_PMC_SEL_DPD_TIM_0
This timer guarantees proper timing spacing in hardware between the sel_dpd and e_dpd signals issued to pads.
SEL_DPD_TIM: Timer which separates e_dpd deassertion time from sel_dpd deassertion
6:0 0x7f
time in apb_clk units.
9.2.116 APBDEV_PMC_VDDP_SEL_0
Power set for new DDR pads. Safe value is 11.
9.2.117 APBDEV_PMC_DDR_CFG_0
9.2.118 APBDEV_PMC_PLLM_WB0_OVERRIDE_FREQ_0
PLL WB Override Registers to Accelerate Warm Boot Time
9.2.119 APBDEV_PMC_TEST_PWRGATE_0
Force Test Power Gate Override Off/On
RESET_DEBUG: used for debug, assertion of reset will be disabled, if this bit is set
4 0x0 0 = OFF
1 = ON
MAIN_CLAMP_DEBUG: used for debug, assertion of main clamp will be disabled if this bit
is set
2 0x0
0 = OFF
1 = ON
OP: FORCE_ON - force power gated partition to be powered, FORCE_OFF - force power
gating partition to be powered down
1:0 0x0 0 = NONE
1 = FORCE_ON
2 = FORCE_OFF
9.2.120 APBDEV_PMC_PWRGATE_TIMER_MULT_0
The time for each rail set by PWRGATE_TIMER_OFF will be multiplied by MULT for power-gating up/down any power-gated
region except CPU. In the CPU power-gated case, MULT_CPU will be used with PWRGATE_TIMER_CE* registers value. All
timers are in sys_clk units.
MULT_CPU:
0 = ONE
1 = TWO
5:3 0x3
2 = FOUR
3 = EIGHT
4 = SIXTEEN
MULT:
0 = ONE
1 = TWO
2:0 0x3 2 = FOUR
3 = EIGHT
4 = SIXTEEN
9.2.121 APBDEV_PMC_DSI_SEL_DPD_0
Register to control sel_dpd for the DSI pad. Allows driving LP0 value on the DSI pad beyond LP0 exit. This enables the DSI to
be programmed properly at LP0 exit while the LP0 value is still driven by the brick pad.
SET_DSID:
3 0x0 0 = OFF
1 = ON
SET_DSIC:
2 0x0 0 = OFF
1 = ON
SET_DSIB:
1 0x0 0 = OFF
1 = ON
SET_DSIA:
0 0x0 0 = OFF
1 = ON
9.2.122 APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0
PMC trigger events for the UTMIP ports as well as the UHSIC port. Sleep walk clearing returns the walk pointer to 00, the first
entry in a USB line walk. This is the only way to return a pointer to 0.
Pad configuration captures a set of FLLS parameters prior to resting the port so their value can be retained in deep sleep.
The trigger should only happen on the fields that are set to TRIG (1) when writing. The returned read value should always be
all NULL fields.
9.2.123 APBDEV_PMC_UTMIP_UHSIC_SAVED_STATE_0
Save some critical information about USB port prior to entering DPD in a suspend state.
SPEED:
HS - Suspend DPD was entered from a high speed mode, restore high speed at DPD exit
FS - Suspend DPD was entered from a full speed mode, restore full speed at DPD exit
LS - Suspend DPD was entered from a low speed mode, restore low speed at DPD exit
RST - Reset Port, Hardware reset or DPD was not entered suspended bus, Reset and Re-enumerate port
SCRATCH -- save other critical information about the port, software choice.
Reset value should read 0x0F0F0F0F, reset should occur on Cold Hardware Reset only
30 0x0 UHSIC_IGNORE_MASTER_CFG_P0
22 0x0 UTMIP_IGNORE_MASTER_CFG_P2
14 0x0 UTMIP_IGNORE_MASTER_CFG_P1
6 0x0 UTMIP_IGNORE_MASTER_CFG_P0
9.2.124 APBDEV_PMC_UTMIP_PAD_CFG_0
Set of static configuration values for USB I/O pads under DPD mode. These were configuration values captured at a time prior
to entering DPD. These values are read only. Registers must take into account DFT.
9.2.125 APBDEV_PMC_UTMIP_TERM_PAD_CFG_0
Set of termination configuration values for USB I/O pads under DPD mode. These configuration values are programmed, not
captured, at a time prior to entering DPD. Capturing them would be complex because it would require costly synchronizers as
well as some logic. The range for RCTRL and TCTRL is 0 to 16.
These values need to be converted to a thermal encoding (only one 0 to 1 transition allowed in the word from MSB to LSB).
For example:
0 - 0000_0000_0000_0000
1 - 0000_0000_0000_0001
2 - 0000_0000_0000_0011
...
15 - 0111_1111_1111_1111
16 - 1111_1111_1111_1111
9.2.126 APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0
Register that configures the value of the line that could cause a wake-up event.
One can use the two most significant bits (3:2) of the WAKE_VAL to 4x1 select whether:
9.2.127 APBDEV_PMC_UTMIP_UHSIC_SLEEPWALK_CFG_0
This register determines when sleep walking should take effect: upon a specific GPIO event, on any wake event, or on a line
value change.
It is also possible to force a sleep walk; see register UTMIP_UHSIC_TRIGGERS to force the event.
31 0x0 UHSIC_LINEVAL_WALK_EN_P0: Perform Walk on USB line value wake up for UHSIC P0
30 0x0 UHSIC_WAKE_WALK_EN_P0: Perform Walk on any chip wake up event for UHSIC P0
23 0x0 UTMIP_LINEVAL_WALK_EN_P2: Perform Walk on USB line value wake up for UTMIP P2
22 0x0 UTMIP_WAKE_WALK_EN_P2: Perform Walk on any chip wake up event for UTMIP P2
15 0x0 UTMIP_LINEVAL_WALK_EN_P1: Perform Walk on USB line value wake up for UTMIP P1
14 0x0 UTMIP_WAKE_WALK_EN_P1: Perform Walk on any chip wake up event for UTMIP P1
7 0x0 UTMIP_LINEVAL_WALK_EN_P0: Perform Walk on USB line value wake up for UTMIP P0
6 0x0 UTMIP_WAKE_WALK_EN_P0: Perform Walk on any chip wake up event for UTMIP P0
9.2.128 APBDEV_PMC_UTMIP_SLEEPWALK_P0_0
These registers hold the sequence of control values to the UTMIP pads on the four consecutive cycles of a walk. The pad pins
that are controlled are:
MASTER_USBOP_RPD
MASTER_USBON_RPD
MASTER_USBOP_RPU
MASTER_USBON_RPU
MASTER_AP
MASTER_AN
MASTER_HIGHZ
For the walk to take effect at the pad, the MASTER_ENABLE pin must be set high in the config register. Otherwise the pad will
ignore the values.
If no walk is enabled or forced, then the walk pointer remains stuck on phase A. The walk pointer should use a 2 bit Gray code
so that Phase A is 00, Phase B is 01, Phase C is 11, and Phase D is 10. Once Phase D is reached, only a reset of the phase
pointer can bring it back to Phase A.
9.2.129 APBDEV_PMC_UTMIP_SLEEPWALK_P1_0
9.2.130 APBDEV_PMC_UTMIP_SLEEPWALK_P2_0
9.2.131 APBDEV_PMC_UHSIC_SLEEPWALK_P0_0
These registers hold the sequence of control values to the UTMIP pads on the four consecutive cycles of a walk. The pad pins
that are controlled are:
STROBE_RPD
DATA_RPD
STROBE_RPU
DATA_RPU
At this time there are no STROBE, DATA ports that should be driven by the host. So these outputs from the module should be
left unconnected until a time that departure may be implemented.
9.2.132 APBDEV_PMC_UTMIP_UHSIC_STATUS_0
Read-only register that provides current walk pointer information as well as line value.
9.2.133 APBDEV_PMC_UTMIP_UHSIC_FAKE_0
Instead of using the pad value for USBOP_VAL, USBON_VAL, STROBE_VAL, DATA_VAL, VBUS_WAKEUP, ID from the
UTMIP and HSIC pads, force a 2x1 mux at the input of the PMC pad macro when fake values are enabled. This could the
useful feature of putting a line at rest when needed. It also has important debug merits. This mux should be placed in front of
the NP synchronizer for these signals (saved power on the synchronizer). This will have to be waived in our sync checks.
25 0x0 UTMIP_VBUS_FAKE_EN_P2: Enable the fake VBUS WAKEUP value for UTMIP P2
21 0x0 UTMIP_VBUS_FAKE_EN_P1: Enable the fake VBUS WAKEUP value for UTMIP P1
17 0x0 UTMIP_VBUS_FAKE_EN_P0: Enable the fake VBUS WAKEUP value for UTMIP P0
UHSIC_FAKE_DATA_EN_P0: Enable the fake line value for DATA for the PMC pad
15 0x0
macro for UHSIC P0
UHSIC_FAKE_STROBE_EN_P0: Enable the fake line value for STROBE for the PMC
14 0x0
pad macro for UHSIC P0
UHSIC_FAKE_DATA_VAL_P0: Fake line value for DATA for the PMC pad macro for
13 0x0
UHSIC P0
UHSIC_FAKE_STROBE_VAL_P0: Fake line value for STROBE for the PMC pad macro
12 0x1
for UHSIC P0
UTMIP_FAKE_USBON_EN_P2: Enable the fake line value for D- for the PMC pad macro
11 0x0
for UTMIP P2
UTMIP_FAKE_USBOP_EN_P2: Enable the fake line value for D+ for the PMC pad macro
10 0x0
for UTMIP P2
UTMIP_FAKE_USBON_VAL_P2: Fake line value for D- for the PMC pad macro for
9 0x0
UTMIP P2
UTMIP_FAKE_USBOP_VAL_P2: Fake line value for D+ for the PMC pad macro for
8 0x1
UTMIP P2
UTMIP_FAKE_USBON_EN_P1: Enable the fake line value for D- for the PMC pad macro
7 0x0
for UTMIP P1
UTMIP_FAKE_USBOP_EN_P1: Enable the fake line value for D+ for the PMC pad macro
6 0x0
for UTMIP P1
UTMIP_FAKE_USBON_VAL_P1: Fake line value for D- for the PMC pad macro for
5 0x0
UTMIP P1
UTMIP_FAKE_USBOP_VAL_P1: Fake line value for D+ for the PMC pad macro for
4 0x1
UTMIP P1
UTMIP_FAKE_USBON_EN_P0: Enable the fake line value for D- for the PMC pad macro
3 0x0
for UTMIP P0
UTMIP_FAKE_USBOP_EN_P0: Enable the fake line value for D+ for the PMC pad macro
2 0x0
for UTMIP P0
UTMIP_FAKE_USBON_VAL_P0: Fake line value for D- for the PMC pad macro for
1 0x0
UTMIP P0
UTMIP_FAKE_USBOP_VAL_P0: Fake line value for D+ for the PMC pad macro for
0 0x1
UTMIP P0
9.2.134 APBDEV_PMC_BONDOUT_MIRROR3_0
31:0 X BONDOUT_MIRROR3
9.2.135 APBDEV_PMC_BONDOUT_MIRROR4_0
31:0 X BONDOUT_MIRROR4
9.2.136 APBDEV_PMC_SECURE_SCRATCH6_0
31:0 X SECURE_SCRATCH6
9.2.137 APBDEV_PMC_SECURE_SCRATCH7_0
31:0 X SECURE_SCRATCH7
9.2.138 APBDEV_PMC_SCRATCH43_0
Scratch Register
Offset: 0x22c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.139 APBDEV_PMC_SCRATCH44_0
Scratch Register
Offset: 0x230 │ Read/Write: R/W V Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.140 APBDEV_PMC_SCRATCH45_0
Scratch Register
Offset: 0x234 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.141 APBDEV_PMC_SCRATCH46_0
Scratch Register
Offset: 0x238 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.142 APBDEV_PMC_SCRATCH47_0
Scratch Register
Offset: 0x23c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.143 APBDEV_PMC_SCRATCH48_0
Scratch Register
Offset: 0x240 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.144 APBDEV_PMC_SCRATCH49_0
Scratch Register
Offset: 0x244 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.145 APBDEV_PMC_SCRATCH50_0
Scratch Register
Offset: 0x248 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.146 APBDEV_PMC_SCRATCH51_0
Scratch Register
Offset: 0x24c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.147 APBDEV_PMC_SCRATCH52_0
Scratch Register
This register is valid in I2C mode. It is used for the WATCHDOG_RESET I2C command. In GPIO and SPI modes, this register
is reserved.
31:16 X SCRATCH_PMU_A_0_HIWORD_RANGE
15:0 X SCRATCH_PMU_A_0_LOWORD_RANGE
9.2.148 APBDEV_PMC_SCRATCH53_0
Scratch Register
This register is valid in I2C mode. It is used for the WATCHDOG_RESET I2C command. In GPIO and SPI modes, this register
is reserved.
9.2.149 APBDEV_PMC_SCRATCH54_0
Scratch Register
This register is valid in I2C mode. It is used for the TSENSE_RESET I2C command. In GPIO and SPI modes, this register is
reserved.
31:16 X SCRATCH_PMU_A_0_HIWORD_RANGE
15:0 X SCRATCH_PMU_A_0_LOWORD_RANGE
9.2.150 APBDEV_PMC_SCRATCH55_0
Scratch Register
This register is valid in I2C mode. It is used for the TSENSE_RESET I2C command. In GPIO and SPI modes, this register is
reserved.
9.2.151 APBDEV_PMC_SCRATCH0_ECO_0
Scratch Register
Offset: 0x260 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
9.2.152 APBDEV_PMC_POR_DPD_CTRL_0
Offset: 0x264 │ Read/Write: R/W │ Reset: 0x80000003 (0b1xxxxxxxxxxxxxxxxxxxxxxxxxxxxx11)
9.2.153 APBDEV_PMC_SCRATCH2_ECO_0
Scratch Register
Offset: 0x268 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
9.2.154 APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0
Offset: 0x26c │ Read/Write: R/W │ Reset: 0x0000000f (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxx1111)
9.2.155 APBDEV_PMC_UTMIP_BIAS_MASTER_CNTRL_0
Offset: 0x270 │ Read/Write: R/W │ Reset: 0x0000000d (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxx1101)
9.2.156 APBDEV_PMC_UTMIP_MASTER_CONFIG_0
MASTER_CONFIG selects the MASTER function's mode of operation, in this case:
9.2.157 APBDEV_PMC_TD_PWRGATE_INTER_PART_TIMER_0
9.2.158 APBDEV_PMC_UTMIP_UHSIC2_TRIGGERS_0
PMC trigger events for the UTMIP ports as well as the UHSIC port. Sleep walk clearing returns the walk pointer to 00, the first
entry in a USB line walk. This is the only way to return a pointer to 0.
Pad configuration capture a set of FLLS parameters prior to resting the port so their value can be retained in deep sleep.
The trigger should only happen on the fields that are set to TRIG (1) when writing. Returned read value should always be all
NULL fields. The FORCE_WALK bits trigger a SLEEP
This does not need to be a real register, so it should not consume much area. Any value read back should be 0.
9.2.159 APBDEV_PMC_UTMIP_UHSIC2_SAVED_STATE_0
Save some critical information about USB port prior to entering DPD in a suspend state.
SPEED
HS: Suspend DPD was entered from a high speed mode, restore high speed at DPD exit
FS: Suspend DPD was entered from a full speed mode, restore full speed at DPD exit
LS: Suspend DPD was entered from a low speed mode, restore low speed at DPD exit
RST: Reset Port, Hardware reset or DPD was not entered suspended bus, Reset and Re-enumerate port
SCRATCH -- Save other critical information about the port, software choice. Reset value should read 0x0F0F0F0F, reset
should occur on Cold Hardware Reset only
6 0x0 UHSIC_IGNORE_MASTER_CFG_P1
9.2.160 APBDEV_PMC_UTMIP_UHSIC2_SLEEP_CFG_0
This register configures the value of the line that could cause a wake-up event.
One can use the two most significant bits (3:2) of the WAKE_VAL to 4x1 select whether:
9.2.161 APBDEV_PMC_UTMIP_UHSIC2_SLEEPWALK_CFG_0
This register determines when sleep walking should take effect: upon a specific GPIO event, on any wake event, or on a line
value change.
Note that it is also possible to force a sleep walk: see register UTMIP_UHSIC_TRIGGERS to force the event.
7 0x0 UHSIC_LINEVAL_WALK_EN_P1: Perform walk on USB line value wake up for UHSIC
P1
6 0x0 UHSIC_WAKE_WALK_EN_P1: Perform walk on any chip wake up event for UHSIC P1
9.2.162 APBDEV_PMC_UHSIC2_SLEEPWALK_P1_0
This register holds the sequence of control values to the UTMIP pads on the four consecutive cycles of a walk. The pad pins
that are controlled are:
STROBE_RPD
DATA_RPD
STROBE_RPU
DATA_RPU
At this time there are no STROBE, DATA ports that should be driven by the host. So these outputs from the module should be
left dangling (unconnected) until a time that feature may be implemented.
9.2.163 APBDEV_PMC_UTMIP_UHSIC2_STATUS_0
Read-only register that provides current walk pointer information as well as the line value.
9.2.164 APBDEV_PMC_UTMIP_UHSIC2_FAKE_0
Instead of using the pad value for USBOP_VAL, USBON_VAL, STROBE_VAL, DATA_VAL, VBUS_WAKEUP, ID from the
UTMIP and HSIC pads, force a 2x1 mux at the input of the PMC pad macro when fake values are enabled. This could the
useful feature of putting a line at rest when needed. It also has important debug merits. This mux should be placed in front of
the NP synchronizer for these signals (saved power on the synchronizer). This will have to be waived in our sync checks.
3 0x0 UHSIC_FAKE_DATA_EN_P1: Enable the fake line value for DATA for the PMC pad
macro for UHSIC P0
2 0x0 UHSIC_FAKE_STROBE_EN_P1: Enable the fake line value for STROBE for the PMC
pad macro for UHSIC P0
1 0x0 UHSIC_FAKE_DATA_VAL_P1: Fake line value for DATA for the PMC pad macro for
UHSIC P0
0 0x1 UHSIC_FAKE_STROBE_VAL_P1: Fake line value for STROBE for the PMC pad macro
for UHSIC P0
9.2.165 APBDEV_PMC_UTMIP_UHSIC2_LINE_WAKEUP_0
Offset: 0x298 │ Read/Write: R/W │ Reset: 0x00000001 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1)
9.2.166 APBDEV_PMC_UTMIP_MASTER2_CONFIG_0
MASTER_CONFIG selects the MASTER functions mode of operation, in this case 0 for 500uA usage, 1 for smaller current
usage when driving.
9.2.167 APBDEV_PMC_UTMIP_UHSIC_RPD_CFG_0
Offset: 0x2a0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxx000000000)
8 0x0 WEAKPD_ANYTIME_P2
7 0x0 DP_WEAKPD_CFG_P2
6 0x0 DM_WEAKPD_CFG_P2
5 0x0 WEAKPD_ANYTIME_P1
4 0x0 DP_WEAKPD_CFG_P1
3 0x0 DM_WEAKPD_CFG_P1
2 0x0 WEAKPD_ANYTIME_P0
1 0x0 DP_WEAKPD_CFG_P0
0 0x0 DM_WEAKPD_CFG_P0
9.2.168 APBDEV_PMC_PG_MASK_CE0_0
Offset: 0x2a4 │ Read/Write: R/W │ Reset: 0x000000ff (0bxxxxxxxxxxxxxxxxxxxxxxxx11111111)
9.2.169 APBDEV_PMC_PG_MASK_3_0
Offset: 0x2a8 │ Read/Write: R/W │ Reset: 0xffffffff (0b11111111111111111111111111111111)
9.2.170 APBDEV_PMC_PG_MASK_4_0
Offset: 0x2ac │ Read/Write: R/W │ Reset: 0xffffffff (0b11111111111111111111111111111111)
9.2.171 APBDEV_PMC_PLLM_WB0_OVERRIDE2_0
Offset: 0x2b0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxx0000000000000000000000000000)
9.2.172 APBDEV_PMC_TSC_MULT_0
Offset: 0x2b4 │ Read/Write: R/W │ Reset: 0x000016e0 (0bxxxxxxxxxxxx000x0001011011100000)
19:17 RW 0x0 TICK_SEL: This bit selects one of the six binary time stamp counter bits.
0 = BIT0
1 = BIT1
2 = BIT2
3 = BIT3
4 = BIT4
5 = BIT5
15:0 RW 0x16e0 MULT_VAL: TSC multiply value (default based on 12 MHz oscillator).Value is (osc-freq
* 16 / 32.768 kHz) when the oscillator is disabled and the TSC runs at the 32 kHz clock.
For example, for a 12 MHz oscillator, VALUE = 5856.
9.2.173 APBDEV_PMC_CPU_VSENSE_OVERRIDE_0
Offset: 0x2b8 │ Read/Write: R/W │ Reset: 0x0000001f (0bxxxxxxxxxxxxxxxxxxxxxxxxxx011111)
9.2.174 APBDEV_PMC_GLB_AMAP_CFG_0
This register configures some of the address apertures (in CCPLEX-AXD) to be MMIO or DRAM. Each bit is used to
configurable one of the address aperture. For each bit 0=>MMIO and 1=>DRAM.
By default, all configurable apertures are MMIO address space. But they can be configured (at boot time) to be DRAM by
programming this register. This register can be write-disabled (by the PMC_SEC_DISABLE register). The bits of this register
are used as follows.
GLB_AMAP_CFG
Offset: 0x2bc │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxx000000000000000000)
9.2.175 APBDEV_PMC_STICKY_BITS_0
Offset: 0x2c0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxx000000000)
VI: This bit is set to '1' only by a write of '1'. All other writes are ignored. Once it is set
8 0x0 to '1', it remains '1' and only resets by a system reset (same reset that resets the
main PMC).This bit is sent to the VI via a sideband signal.
CDD_EN: Customer Denver DFD Enable. This bit can only be written to during
secure_boot_mode. It is reset by the main PMC reset. This bit value drives the
7 0x0 cust_denver_dfd_en signal to CCPLEX.
0: DFD disabled
1: DFD enabled
6 0x0 JTAG_STS: Secure Sticky One bit to propagate JTAG enable/disable across
LP0.This bit is set to '1' only by a secure write of '1'. All other writes are ignored. Once
it is set to '1', it remains '1' and only resets by a system reset (same reset that resets
the main PMC).
0 = ENABLE
1 = DISABLE
1 0x0 VDE0: This bit is set to '1' only by a write of '1'. All other writes are ignored. Once it is
set to '1', it remains '1' and only resets by system reset (same resets which resets
main PMC).This bit is send to VDE via a sideband signal.
0 0x0 HDA_LPBK_DIS: Sticky one bit to disable the loopback in HDA codec.
This bit is set to ‘1’ only by a write of ‘1’. All other writes are ignored. Once it is set to
‘1’, it remains ‘1’ and only resets by system reset (the same reset which resets the
main PMC).
9.2.176 APBDEV_PMC_SEC_DISABLE2_0
Offset: 0x2c4 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
9.2.177 APBDEV_PMC_WEAK_BIAS_0
Offset: 0x2c8 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxx000000000000000000)
1:0 0x0 XM0_CLK: weak_bias controls for CH0 VTTGEN for clk -
mem0_mclk0_vttgen_0_pad
9.2.178 APBDEV_PMC_REG_SHORT_0
Offset: 0x2cc │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxx00000000000000000000)
9.2.179 APBDEV_PMC_PG_MASK_ANDOR_0
Power Gate Mask AND (for force power-gating) or OR (for force power-ungating) the mask value comes from the
corresponding PG_MASK* register
IRAM:
24 0x0 0 = AND
1 = OR
VIC:
23 0x0 0 = AND
1 = OR
SOR:
17 0x0 0 = AND
1 = OR
SAX:
8 0x0 0 = AND
1 = OR
PCX:
3 0x0 0 = AND
1 = OR
0 0x0 RESERVED:
0 = AND
1 = OR
9.2.180 APBDEV_PMC_GPU_RG_CNTRL_0
9.2.181 APBDEV_PMC_SEC_DISABLE3_0
Offset: 0x2d8 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxx000000000000000000000000)
9.2.182 APBDEV_PMC_SECURE_SCRATCH8_0
31:0 X SECURE_SCRATCH8
9.2.183 APBDEV_PMC_SECURE_SCRATCH9_0
31:0 X SECURE_SCRATCH9
9.2.184 APBDEV_PMC_SECURE_SCRATCH10_0
31:0 X SECURE_SCRATCH10
9.2.185 APBDEV_PMC_SECURE_SCRATCH11_0
31:0 X SECURE_SCRATCH11
9.2.186 APBDEV_PMC_SECURE_SCRATCH12_0
31:0 X SECURE_SCRATCH12
9.2.187 APBDEV_PMC_SECURE_SCRATCH13_0
31:0 X SECURE_SCRATCH13
9.2.188 APBDEV_PMC_SECURE_SCRATCH14_0
31:0 X SECURE_SCRATCH14
9.2.189 APBDEV_PMC_SECURE_SCRATCH15_0
31:0 X SECURE_SCRATCH15
9.2.190 APBDEV_PMC_SECURE_SCRATCH16_0
31:0 X SECURE_SCRATCH16
9.2.191 APBDEV_PMC_SECURE_SCRATCH17_0
31:0 X SECURE_SCRATCH17
9.2.192 APBDEV_PMC_SECURE_SCRATCH18_0
31:0 X SECURE_SCRATCH18
9.2.193 APBDEV_PMC_SECURE_SCRATCH19_0
31:0 X SECURE_SCRATCH19
9.2.194 APBDEV_PMC_SECURE_SCRATCH20_0
31:0 X SECURE_SCRATCH20
9.2.195 APBDEV_PMC_SECURE_SCRATCH21_0
31:0 X SECURE_SCRATCH21
9.2.196 APBDEV_PMC_SECURE_SCRATCH22_0
31:0 X SECURE_SCRATCH22
9.2.197 APBDEV_PMC_SECURE_SCRATCH23_0
31:0 X SECURE_SCRATCH23
9.2.198 APBDEV_PMC_SECURE_SCRATCH24_0
31:0 X SECURE_SCRATCH24
9.2.199 APBDEV_PMC_SECURE_SCRATCH25_0
31:0 X SECURE_SCRATCH25
9.2.200 APBDEV_PMC_SECURE_SCRATCH26_0
31:0 X SECURE_SCRATCH26
9.2.201 APBDEV_PMC_SECURE_SCRATCH27_0
31:0 X SECURE_SCRATCH27
9.2.202 APBDEV_PMC_SECURE_SCRATCH28_0
31:0 X SECURE_SCRATCH28
9.2.203 APBDEV_PMC_SECURE_SCRATCH29_0
31:0 X SECURE_SCRATCH29
9.2.204 APBDEV_PMC_SECURE_SCRATCH30_0
31:0 X SECURE_SCRATCH30
9.2.205 APBDEV_PMC_SECURE_SCRATCH31_0
31:0 X SECURE_SCRATCH31
9.2.206 APBDEV_PMC_SECURE_SCRATCH32_0
31:0 X SECURE_SCRATCH32
9.2.207 APBDEV_PMC_SECURE_SCRATCH33_0
31:0 X SECURE_SCRATCH33
9.2.208 APBDEV_PMC_SECURE_SCRATCH34_0
31:0 X SECURE_SCRATCH34
9.2.209 APBDEV_PMC_SECURE_SCRATCH35_0
31:0 X SECURE_SCRATCH35
9.2.210 APBDEV_PMC_CNTRL2_0
13 0x0 KB_SYSCLK_PM_CFG: This register bit muxes between net kb_row3 and SYS_CLK_REQ and drives
that as the net kb_row3 to the I/O pad. The default setting of this bit is to select SYS_CLK_REQ. This bit is
11 0x0 SYSCLK_DATA: SYS_CLK_REQ data value. This is used when SYSCLK_ORRIDE is set to '1'
9.2.211 APBDEV_PMC_IO_DPD3_REQ_0
DDR_ADDR1_VTTGEN: mem0_addr1_vttgen_0_pad,mem0_addr2_vttgen_0_pad
23 0x0 0 = OFF
1 = ON
DDR_ADDR0_VTTGEN: mem0_addr0_vttgen_0_pad,mem0_addr3_vttgen_0_pad
22 0x0 0 = OFF
1 = ON
DDR_CLK_VTTGEN: mem0_mclk0_vttgen_0_pad
20 0x0 0 = OFF
1 = ON
DDR_CLK_B: xm2_mclkb_pad
19 0x0 0 = OFF
1 = ON
DDR_CLK: xm2_mclk_pad
18 0x0 0 = OFF
1 = ON
DISC_BIAS: mem0_bias_0_pad
17 0x0 0 = OFF
1 = ON
DDR_MCS_B1: xm2_mcs_b_1_pad
16 0x0 0 = OFF
1 = ON
DDR_MCS_B0: xm2_mcs_b_0_pad
15 0x0 0 = OFF
1 = ON
DDR_MCKE_B1: xm2_mcke_b_1_pad
14 0x0 0 = OFF
1 = ON
DDR_MCKE_B0: xm2_mcke_b_0_pad
13 0x0 0 = OFF
1 = ON
DDR_ODT_B1: xm2_odt_b_1_pad
12 0x0 0 = OFF
1 = ON
DDR_ODT_B0: xm2_odt_b_0_pad
11 0x0 0 = OFF
1 = ON
DDR_RESET: xm2_reset_pad
8 0x0 0 = OFF
1 = ON
DDR_MCS1: xm2_mcs_1_pad
7 0x0 0 = OFF
1 = ON
DDR_MCS0: xm2_mcs_0_pad
6 0x0 0 = OFF
1 = ON
DDR_MCKE1: xm2_mcke_1_pad
5 0x0 0 = OFF
1 = ON
DDR_MCKE0: xm2_mcke_0_pad
4 0x0 0 = OFF
1 = ON
DDR_ODT1: xm2_odt_1_pad
3 0x0 0 = OFF
1 = ON
DDR_ODT0: xm2_odt_0_pad
2 0x0 0 = OFF
1 = ON
DDR_DATA0: xm2_data(4,5,6,7)_pad
0 0x0 0 = OFF
1 = ON
9.2.212 APBDEV_PMC_IO_DPD3_STATUS_0
DDR_DATA1_VTTGEN:mem0_data1_vttgen_4_6_pad, mem0_data1_vttgen_5_7_pad
27 0x0 0 = OFF
1 = ON
DDR_DATA0_VTTGEN:mem0_data0_vttgen_0_2_pad, mem0_data0_vttgen_1_3_pad
26 0x0 0 = OFF
1 = ON
DDR_ADDR1_VTTGEN:mem0_addr1_vttgen_0_pad,mem0_addr2_vttgen_0_pad
23 0x0 0 = OFF
1 = ON
DDR_ADDR0_VTTGEN:mem0_addr0_vttgen_0_pad,mem0_addr3_vttgen_0_pad
22 0x0 0 = OFF
1 = ON
DDR_CLK_B_VTTGEN:mem0_mclk1_vttgen_0_pad - DEFUNCT
21 0x0 0 = OFF
1 = ON
DDR_CLK_VTTGEN:mem0_mclk0_vttgen_0_pad
20 0x0 0 = OFF
1 = ON
DDR_CLK_B:xm2_mclkb_pad
19 0x1 0 = OFF
1 = ON
DDR_CLK:xm2_mclk_pad
18 0x1 0 = OFF
1 = ON
DISC_BIAS:mem0_bias_0_pad
17 0x0 0 = OFF
1 = ON
DDR_MCS_B1:xm2_mcs_b_1_pad
16 0x1 0 = OFF
1 = ON
DDR_MCS_B0:xm2_mcs_b_0_pad
15 0x1 0 = OFF
1 = ON
14 0x1 DDR_MCKE_B1:xm2_mcke_b_1_pad
DDR_MCKE_B0:xm2_mcke_b_0_pad
13 0x1 0 = OFF
1 = ON
DDR_ODT_B1:xm2_odt_b_1_pad
12 0x1 0 = OFF
1 = ON
DDR_ODT_B0:xm2_odt_b_0_pad
11 0x1 0 = OFF
1 = ON
DDR_RESET:xm2_reset_pad
8 0x0 0 = OFF
1 = ON
DDR_MCS1:xm2_mcs_1_pad
7 0x1 0 = OFF
1 = ON
DDR_MCS0:xm2_mcs_0_pad
6 0x1 0 = OFF
1 = ON
DDR_MCKE1:xm2_mcke_1_pad
5 0x1 0 = OFF
1 = ON
DDR_MCKE0:xm2_mcke_0_pad
4 0x1 0 = OFF
1 = ON
DDR_ODT1:xm2_odt_1_pad
3 0x1 0 = OFF
1 = ON
DDR_ODT0:xm2_odt_0_pad
2 0x1 0 = OFF
1 = ON
DDR_DATA1:xm2_data(0,1,2,3)_pad
1 0x1 0 = OFF
1 = ON
DDR_DATA0:xm2_data(4,5,6,7)_pad
0 0x1 0 = OFF
1 = ON
9.2.213 APBDEV_PMC_STRAPPING_OPT_A_0
29:26 X BOOT_SELECT: read at power-on reset time from gmi_ad[3:0] strap pads.
MIO_WIDTH:
8 RSVD1 0 = RSVD1
1 = RSVD2
RAM_CODE: read at power-on reset time from gmi_ad[7:4] strap pads. In emulation
(HIDREV_MAJORREV==0), this field indicates the RAM type connected. For QT
(HIDREV_MINORREV==0): 0=SIM, 1=DDR, 2=DDR2, 3=LPDDR2. For FPGA
(HIDREV_MINORREV==1): 0=SIM, 1=DDR, 2=DDR2, 3=LPDDR2
0 = LPDDR3_800
1 = ELPIDA_LPDDR2
2 = RSVD2
3 = DDR3_2GB
7:4 X
4 = RSVD4
5 = DDR3_2GB_NO_DSR
6 = DDR3_934
7 = DDR3_800
8 = RSVD8
9 = DDR3_x64_2GB
10 = DDR3_X64_8GB_667
11 = DDR3_X64_8GB_800
NOR_WIDTH:
0 RSVD1 0 = RSVD1
1 = RSVD2
9.2.214 APBDEV_PMC_SCRATCH56_0
Scratch register
Offset: 0x600 | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.215 APBDEV_PMC_SCRATCH57_0
Scratch register
Offset: 0x604 | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.216 APBDEV_PMC_SCRATCH58_0
Scratch register
Offset: 0x608 | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.217 APBDEV_PMC_SCRATCH59_0
Scratch register
Offset: 0x60c | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.218 APBDEV_PMC_SCRATCH60_0
Scratch register
Offset: 0x610 | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.219 APBDEV_PMC_SCRATCH61_0
Scratch register
Offset: 0x614 | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.220 APBDEV_PMC_SCRATCH62_0
Scratch register
Offset: 0x618 | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.221 APBDEV_PMC_SCRATCH63_0
Scratch register
Offset: 0x61c | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.222 APBDEV_PMC_SCRATCH64_0
Scratch register
Offset: 0x620 | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.223 APBDEV_PMC_SCRATCH65_0
Scratch register
Offset: 0x624 | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.224 APBDEV_PMC_SCRATCH66_0
Scratch register
Offset: 0x628 | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.225 APBDEV_PMC_SCRATCH67_0
Scratch register
Offset: 0x62c | Read/Write: R/W | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.226 APBDEV_PMC_SCRATCH68_0
Scratch Register
Offset: 0x630 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.227 APBDEV_PMC_SCRATCH69_0
Scratch Register
Offset: 0x634 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.228 APBDEV_PMC_SCRATCH70_0
Scratch Register
Offset: 0x638 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.229 APBDEV_PMC_SCRATCH71_0
Scratch Register
Offset: 0x63c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.230 APBDEV_PMC_SCRATCH72_0
Scratch Register
Offset: 0x640 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.231 APBDEV_PMC_SCRATCH73_0
Scratch Register
Offset: 0x644 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.232 APBDEV_PMC_SCRATCH74_0
Scratch Register
Offset: 0x648 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.233 APBDEV_PMC_SCRATCH75_0
Scratch Register
Offset: 0x64c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.234 APBDEV_PMC_SCRATCH76_0
Scratch Register
Offset: 0x650 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.235 APBDEV_PMC_SCRATCH77_0
Scratch Register
Offset: 0x654 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.236 APBDEV_PMC_SCRATCH78_0
Scratch Register
Offset: 0x658 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.237 APBDEV_PMC_SCRATCH79_0
Scratch Register
Offset: 0x65c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.238 APBDEV_PMC_SCRATCH80_0
Scratch Register
Offset: 0x660 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.239 APBDEV_PMC_SCRATCH81_0
Scratch Register
Offset: 0x664 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.240 APBDEV_PMC_SCRATCH82_0
Scratch Register
Offset: 0x668 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.241 APBDEV_PMC_SCRATCH83_0
Scratch Register
Offset: 0x66c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.242 APBDEV_PMC_SCRATCH84_0
Scratch Register
Offset: 0x670 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.243 APBDEV_PMC_SCRATCH85_0
Scratch Register
Offset: 0x674 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.244 APBDEV_PMC_SCRATCH86_0
Scratch Register
Offset: 0x678 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.245 APBDEV_PMC_SCRATCH87_0
Scratch Register
Offset: 0x67c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.246 APBDEV_PMC_SCRATCH88_0
Scratch Register
Offset: 0x680 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.247 APBDEV_PMC_SCRATCH89_0
Scratch Register
Offset: 0x684 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.248 APBDEV_PMC_SCRATCH90_0
Scratch Register
Offset: 0x688 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.249 APBDEV_PMC_SCRATCH91_0
Scratch Register
Offset: 0x68c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.250 APBDEV_PMC_SCRATCH92_0
Scratch Register
Offset: 0x690 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.251 APBDEV_PMC_SCRATCH93_0
Scratch Register
Offset: 0x694 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.252 APBDEV_PMC_SCRATCH94_0
Scratch Register
Offset: 0x698 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.253 APBDEV_PMC_SCRATCH95_0
Scratch Register
Offset: 0x69c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.254 APBDEV_PMC_SCRATCH96_0
Scratch Register
Offset: 0x6a0 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.255 APBDEV_PMC_SCRATCH97_0
Scratch Register
Offset: 0x6a4 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.256 APBDEV_PMC_SCRATCH98_0
Scratch Register
Offset: 0x6a8 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.257 APBDEV_PMC_SCRATCH99_0
Scratch Register
Offset: 0x6ac │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.258 APBDEV_PMC_SCRATCH100_0
Scratch Register
Offset: 0x6b0 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.259 APBDEV_PMC_SCRATCH101_0
Scratch Register
Offset: 0x6b4 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.260 APBDEV_PMC_SCRATCH102_0
Scratch Register
Offset: 0x6b8 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.261 APBDEV_PMC_SCRATCH103_0
Scratch Register
Offset: 0x6bc │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.262 APBDEV_PMC_SCRATCH104_0
Scratch Register
Offset: 0x6c0 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.263 APBDEV_PMC_SCRATCH105_0
Scratch Register
Offset: 0x6c4 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.264 APBDEV_PMC_SCRATCH106_0
Scratch Register
Offset: 0x6c8 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.265 APBDEV_PMC_SCRATCH107_0
Scratch Register
Offset: 0x6cc │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.266 APBDEV_PMC_SCRATCH108_0
Scratch Register
Offset: 0x6d0 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.267 APBDEV_PMC_SCRATCH109_0
Scratch Register
Offset: 0x6d4 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.268 APBDEV_PMC_SCRATCH110_0
Scratch Register
Offset: 0x6d8 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.269 APBDEV_PMC_SCRATCH111_0
Scratch Register
Offset: 0x6dc │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.270 APBDEV_PMC_SCRATCH112_0
Scratch Register
Offset: 0x6e0 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.271 APBDEV_PMC_SCRATCH113_0
Scratch Register
Offset: 0x6e4 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.272 APBDEV_PMC_SCRATCH114_0
Scratch Register
Offset: 0x6e8 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.273 APBDEV_PMC_SCRATCH115_0
Scratch Register
Offset: 0x6ec │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.274 APBDEV_PMC_SCRATCH116_0
Scratch Register
Offset: 0x6f0 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.275 APBDEV_PMC_SCRATCH117_0
Scratch Register
Offset: 0x6f4 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.276 APBDEV_PMC_SCRATCH118_0
Scratch Register
Offset: 0x6f8 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.277 APBDEV_PMC_SCRATCH119_0
Scratch Register
Offset: 0x6fc │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.2.278 APBDEV_PMC_SCRATCH1_ECO_0
Scratch register
Offset: 0x700 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
9.3.1 SYSCTR0_CNTCR_0
The control registers are read/written by secure accesses only except the CNTFID0 and COUNTERID11-0 registers, which
can be written only once by secure or non-secure access.
The CNTFID0 and COUNTERID11-0 registers are read-only; however, to initialize them at boot (by the ARM7 or main CPU),
they are defined as write once.
A non-secure write to the control registers is ignored. A non-secure read to the control registers returns all 1s.
8 0x0 FCREQ: Requested frequency modes table entry. This bit is not used.
1 0x0 HDBG: Halt-on-debug. Controls whether a Halt-on-debug signal halts the system counter or not. 0: System
counter ignores Halt-on-debug.1: Asserted Halt-on-debug signal halts the system counter update.
0 = DISABLE
1 = ENABLE
0 0x0 EN: Enables the counter. When this bit is written to '1', then the TSC is loaded with the CNTCVx register’s
value, and starts incrementing from that value. When this bit is written to '0', the TSC halts counting and
stays at that value.
0: System counter disabled
1: System counter enabled.
0 = DISABLE
1 = ENABLE
9.3.2 SYSCTR0_CNTSR_0
8 X FCREQ: Frequency change acknowledge. This bit is a copy of the value of the CNTCR[FCREQ] bit.
1 X HDBG: Indicates whether or not the counter is halted because the Halt-on-Debug signal is asserted:
0: Counter is not halted.
1: Counter is halted.
0 = DISABLE
1 = ENABLE
9.3.3 SYSCTR0_CNTCV0_0
31:0 0x0 CV: Counter value [31:0]. A read of this register provides the TSC[31:0] value at the time of the read.
When CNTCR[EN]=0, a write to this register is used to initialize the TSC[31:0] value. When
9.3.4 SYSCTR0_CNTCV1_0
31:0 0x0 CV: Counter value [63:32]. A read of this register provides the TSC[63:32] value at the time of the read.
When CNTCR[EN]=0, a write to this register is used to initialize the TSC[63:32] value. When
CNTCR[EN]=1, a write to this register has an unpredictable behavior.
9.3.5 SYSCTR0_CNTFID0_0
31:0 0xb71b00 FV: Counter frequency value in Hz. The default is set to 12 MHz. This register can be written only
once.
9.3.6 SYSCTR0_CNTFID1_0
31:0 X FV: Counter frequency value end marker (all 0s, read-only).
9.3.7 SYSCTR0_COUNTERID4_0
The COUNTERID11-0 registers are read-only; however, to initialize them at boot (by the ARM7™ or main CPU), they are
defined as write once.
9.3.8 SYSCTR0_COUNTERID5_0
Offset: 0xfd4 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.3.9 SYSCTR0_COUNTERID6_0
Offset: 0xfd8 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.3.10 SYSCTR0_COUNTERID7_0
Offset: 0xfdc | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.3.11 SYSCTR0_COUNTERID0_0
Offset: 0xfe0 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxx00000000)
9.3.12 SYSCTR0_COUNTERID1_0
Offset: 0xfe4 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxx00000000)
9.3.13 SYSCTR0_COUNTERID2_0
Offset: 0xfe8 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxx00000000)
9.3.14 SYSCTR0_COUNTERID3_0
Offset: 0xfec | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxx00000000)
9.3.15 SYSCTR0_COUNTERID8_0
Offset: 0xff0 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxx00000000)
9.3.16 SYSCTR0_COUNTERID9_0
Offset: 0xff4 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxx000000000000)
9.3.17 SYSCTR0_COUNTERID10_0
Offset: 0xff8 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxx00000000)
9.3.18 SYSCTR0_COUNTERID11_0
Offset: 0xffc | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxx00000000)
The status registers are some control registers readable via the CNTReadBase base address by secure or non-secure
accesses.
These are the same physical registers that are described in the Control Register section.
9.4.1 SYSCTR1_CNTCV0_0
9.4.2 SYSCTR1_CNTCV1_0
9.4.3 SYSCTR1_COUNTERID4_0
Offset: 0xfd0 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.4.4 SYSCTR1_COUNTERID5_0
Offset: 0xfd4 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.4.5 SYSCTR1_COUNTERID6_0
Offset: 0xfd8 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.4.6 SYSCTR1_COUNTERID7_0
Offset: 0xfdc | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.4.7 SYSCTR1_COUNTERID0_0
Offset: 0xfe0 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.4.8 SYSCTR1_COUNTERID1_0
Offset: 0xfe4 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.4.9 SYSCTR1_COUNTERID2_0
Offset: 0xfe8 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.4.10 SYSCTR1_COUNTERID3_0
Offset: 0xfec | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.4.11 SYSCTR1_COUNTERID8_0
Offset: 0xff0 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.4.12 SYSCTR1_COUNTERID9_0
Offset: 0xff4 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.4.13 SYSCTR1_COUNTERID10_0
Offset: 0xff8 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
9.4.14 SYSCTR1_COUNTERID11_0
Offset: 0xffc | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxx00000000)
9.5.2 SB_PIROM_START_0
This specifies the offset from the start of the Boot ROM to the protected Region. This register is only programmable while in
Secure_Mode (SECURE_BOOT_FLAG above == 1)
The lower 7 bits (6:0) are not significant and are assumed to be zero.
9.5.3 SB_PFCFG_0
CS_ACCESS_CHECK_EN: Debug bit to Enable Checking for bad Csite accesses such as when
CPU not in active partition
23 RW 0x1
1 = ENABLE
0 = DISABLE
DBGACK_CPU0: DBGACKnowledge Status from CPU0. The following bits assert the Processor
External Debug Request signal. Setting these bits can cause a break. Clearing these bits will NOT
restart the processor, but the request needs to be cleared before the debugger can restart the
16 RO X
processor
1 = ENABLE
0 = DISABLE
EDBGRQ_CPU0: External Debug Request for CPU0 via CoreSight.Coresight Timeout Enable for
bus transactions
8 RW 0x0
1 = ENABLE
0 = DISABLE
CS_RTCK_SPEED: RTCK delay (Synchronized or Direct) The following bits configure the
Processor Feature pins. Once these bit values are assigned to the Most-Secure mode, they cannot
6 RW 0x0 be flipped back again
0 = SLOW
1 = FAST
9.5.4 SB_SECURE_SPAREREG_0_0
Offset: 0xc | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
9.5.5 SB_SECURE_SPAREREG_1_0
Offset: 0x10 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
9.5.6 SB_SECURE_SPAREREG_2_0
Offset: 0x14 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
9.5.7 SB_SECURE_SPAREREG_3_0
Offset: 0x18 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
9.5.8 SB_SECURE_SPAREREG_4_0
Offset: 0x1c | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
9.5.9 SB_SECURE_SPAREREG_5_0
Offset: 0x20 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
9.5.10 SB_SECURE_SPAREREG_6_0
Offset: 0x24 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
9.5.11 SB_SECURE_SPAREREG_7_0
Offset: 0x28 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
The unit controls its own frequency - no need for activity monitoring support.
The device driver controls the unit frequency based on calculated workload or hints from a user-level driver – no need
for activity monitoring support.
The device driver controls the unit frequency based on utilization information from a “unit ACTMON”.
The central DVFS agent controls the unit frequency based on utilization information from a “central ACTMON”.
In addition to tracking utilization, activity monitoring is also used to provide hardware support to make the process of activity
monitoring interrupt-driven instead of polling-based. This support is in the form of averaging, watermark detection, and
histogram hardware. This reduces software overhead in procuring and tracking utilization data.
One 32-bit counter for each signaling device that accumulates activity counts.
Running average computation for each counter over past N samples (N=128).
Watermark breach detection logic for each counter. This is used to detect abrupt change in utilization.
Interrupt-driven operation.
The DVFS thread can directly access and use the activity monitors to compute the target frequency (and consequently,
voltage) for each unit for the next sampling interval.
A7AVP Number of system clock cycles that A7AVP is in the halt state
Number of AHB clock cycles when no data transfer is detected on the bus.
AHB
Can select one specific master or all of them.
Number of APB clock cycles when no data transfer is detected on the bus.
APB
Can select one specific master or all of them.
CPU The flow controller asserts a signal when ALL the cores are halted.
Number of MC clock cycles when any memory access event from CCPLEX is
MC-CPU
detected. MC toggles a signal to ACTMON every ‘W’ cycles.
The table above assumes that the following units either run at a fixed frequency or do their own frequency management based
on fixed workload, so they do not need central ACTMON support.
VI/CSI (fixed)
Display (workload-based, no monitors needed)
Host (fixed)
ISP (workload-based)
MSENC/VIC (utilization-based and uses per-unit ACTMON)
SEC (fixed frequency)
USB3 –Falcon (workload-based)
MSELECT (frequency is based on other units and cannot be controlled independently)
10.2.1.1 ACTMON_GLB_STATUS_0
Offset: 0x0 | Read/Write: RO | Reset: 0xXX00XX00 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
CPU_INTR: CPU Monitor Interrupt status. 1 = Interrupt detected; 0 = Interrupt not detected
31 X 0 = NOINTR
1 = INTR
COP_INTR: COP Monitor Interrupt status. 1 = Interrupt detected; 0 = Interrupt not detected
30 X 0 = NOINTR
1 = INTR
AHB_INTR: AHB Monitor Interrupt status. 1 = Interrupt detected; 0 = Interrupt not detected
29 X 0 = NOINTR
1 = INTR
APB_INTR: APB Monitor Interrupt status. 1 = Interrupt detected; 0 = Interrupt not detected
28 X 0 = NOINTR
1 = INTR
10.2.2.1 ACTMON_GLB_PERIOD_CTRL_0
Offset: 0x4 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxx000000000)
SOURCE:
8 0x0 0 = MSEC : Sampling period time base in milliseconds
1 = USEC : Sampling period time base in microseconds
10.2.3.1 ACTMON_CPU_CTRL_0
ENB: Enable Monitor. Set by software to enable sampling. Cleared in one of the following ways: (a)
When software intends to stop the monitor, it can do so by clearing this field, (b) when the sampling
31 0x0 period expires (and we are not in the periodic mode)
0 = DISABLE
1 = ENABLE
WHEN_OVERFLOW_EN: Enable interrupt for number of consecutive lower watermark breaches that
need to occur to raise an interrupt.
22 0x0
0 = DISABLE : interrupt is disabled.
1 = ENABLE: interrupt is enabled
AVG_ABOVE_WMARK_EN: Enable interrupt when AVG value is above its upper watermark value.
21 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE: interrupt is enabled
AVG_BELOW_WMARK_EN: Enable interrupt when AVG value is below its lower watermark value.
20 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE: interrupt is enabled
ENB_PERIODIC: Enable periodic mode. Sample for one sample period or periodic sampling
0 = DISABLE : periodic mode is disabled, samples for only 1 period
18 0x0
1 = ENABLE: periodic mode is enabled, keeps on sampling and updating value after every sample
period
12:10 0x6 K_VAL: variable for IIR filter. Default is 6, which translates to 2^(K+1) = 128.
10.2.3.2 ACTMON_CPU_UPPER_WMARK_0
10.2.3.3 ACTMON_CPU_LOWER_WMARK_0
10.2.3.4 ACTMON_CPU_INIT_AVG_0
Initial AVG value, specified by SW to set up the filter
31:0 X VAL
10.2.3.5 ACTMON_CPU_AVG_UPPER_WMARK_0
10.2.3.6 ACTMON_CPU_AVG_LOWER_WMARK_0
10.2.3.7 ACTMON_CPU_COUNT_WEIGHT_0
10.2.3.8 ACTMON_CPU_COUNT_0
31:0 X VAL: Indicates the number of active count pulses in one period
10.2.3.9 ACTMON_CPU_AVG_COUNT_0
10.2.3.10 ACTMON_CPU_INTR_STATUS_0
CONSECUTIVE_UPPER: Assert at the end of sampling period, if count value crosses upper watermark
31 0x0 value consecutively for the number of times specified in CONSECUTIVE_UPPER_NUM field. A write
value of 1 clears this interrupt, writing a 0 has no effect
CONSECUTIVE_LOWER: Assert at the end of sampling period, if count value crosses lower watermark
value consecutively for the number of times specified in CONSECUTIVE_LOWER_NUM field. A write
30 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AT_END: Assert at the end of sampling period, if interrupt at end of sample period is enabled. A write
value of 1 clears this interrupt; writing a 0 has no effect
29 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
WHEN_OVERFLOW: Assert at the end of sampling period, if there is an overflow. A write value of 1 clears
this interrupt; writing a 0 has no effect
26 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_BELOW_WMARK: Assert at the end of sampling period, if AVG count value crosses lower AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect.
25 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_ABOVE_WMARK: Assert at the end of sampling period, if AVG count value crosses upper AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
24 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
10.2.4.1 ACTMON_COP_CTRL_0
ENB: Enable Monitor. Set by software to enable sampling. Cleared in one of the following ways: (a)
When software intends to stop the monitor, it can do so by clearing this field, (b) when the sampling
31 0x0 period expires (and we are not in the periodic mode)
0 = DISABLE
1 = ENABLE
WHEN_OVERFLOW_EN: Enable interrupt for the Number of consecutive lower watermark breaches
22 0x0 that need to occur to raise an interrupt.
0 = DISABLE : interrupt is disabled.
AVG_ABOVE_WMARK_EN: Enable interrupt when AVG value is above its upper watermark value.
21 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
AVG_BELOW_WMARK_EN: Enable interrupt when AVG value is below its lower watermark value.
20 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
ENB_PERIODIC: Enable periodic mode. Sample for one sample period or periodic sampling
0 = DISABLE : periodic mode is disabled, samples for only 1 period
18 0x0
1 = ENABLE : periodic mode is enabled, keeps on sampling and updating value after every sample
period
12:10 0x6 K_VAL: variable for IIR filter. Default is 6, which translates to 2^(K+1) = 128.
10.2.4.2 ACTMON_COP_UPPER_WMARK_0
10.2.4.3 ACTMON_COP_LOWER_WMARK_0
10.2.4.4 ACTMON_COP_INIT_AVG_0
Initial AVG value, specified by software to set up the filter
31:0 X VAL
10.2.4.5 ACTMON_COP_AVG_UPPER_WMARK_0
10.2.4.6 ACTMON_COP_AVG_LOWER_WMARK_0
10.2.4.7 ACTMON_COP_COUNT_WEIGHT_0
10.2.4.8 ACTMON_COP_COUNT_0
31:0 X VAL: Indicates the number of active count pulses in one period
10.2.4.9 ACTMON_COP_AVG_COUNT_0
10.2.4.10 ACTMON_COP_INTR_STATUS_0
CONSECUTIVE_UPPER: Assert at the end of sampling period, if count value crosses upper watermark
value consecutively for the number of times specified in CONSECUTIVE_UPPER_NUM field. A write
31 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
CONSECUTIVE_LOWER: Assert at the end of sampling period, if count value crosses lower watermark
value consecutively for the number of times specified in CONSECUTIVE_LOWER_NUM field. A write
30 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AT_END: Assert at the end of sampling period, if interrupt at end of sample period is enabled. A write
29 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
WHEN_OVERFLOW: Assert at the end of sampling period, if there is an overflow. A write value of 1 clears
this interrupt, writing a 0 has no effect
26 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_BELOW_WMARK: Assert at the end of sampling period, if AVG count value crosses lower AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
25 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_ABOVE_WMARK: Assert at the end of sampling period, if AVG count value crosses upper AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
24 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
10.2.5.1 ACTMON_AHB_CTRL_0
ENB: Enable Monitor. Set by SW to enable sampling. Cleared in one of the following ways: (a) When
software intends to stop the monitor, it can do so by clearing this field, (b) when the sampling period
31 0x0 expires (and we are not in the periodic mode)
0 = DISABLE
1 = ENABLE
WHEN_OVERFLOW_EN: Enable interrupt for the Number of consecutive lower watermark breaches
that need to occur to raise an interruptd.
22 0x0
0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
AVG_ABOVE_WMARK_EN:Enable interrupt when AVG value is above its upper watermark value.
21 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
AVG_BELOW_WMARK_EN:Enable interrupt when AVG value is below its lower watermark value.
20 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
ENB_PERIODIC: Enable periodic mode. Sample for one sample period or periodic sampling
0 = DISABLE : periodic mode is disabled, samples for only 1 period
18 0x0
1 = ENABLE : periodic mode is enabled, keeps on sampling and updating value after every sample
period
12:10 0x6 K_VAL: variable for IIR filter. Default is 6, which translates to 2^(K+1) = 128.
MONITOR_COND: Selection criteria on parent module for the activity signal, used only for APB/AHB
monitors. Indicates which AHB master to monitor. All 1s means any master.
0 = CPU
1 = COP
2 = VCP
3 = CSITE
4 = ARC
5 = AHBDMA
6 = USB
7 = APBDMA
8 = NA1
9 = NA2
10 = NA3
11 = SNOR
9:4 0x0
12 = NA4
13 = BSEV
14 = SE
15 = DDS
16 = BSEA
17 = USB3
18 = USB2
19 = NA5
20 = NA6
21 = MIPIHSI
22 = NA7
23 = NA8
24 = NA9
63 = ALL
SAMPLE_COND: Selection criteria on parent module for type of pulse signal, used only for APB/AHB
monitor.
0 = AHB_MASTER_ACTIVE
1 = AHB_MASTER_SLAVE_ACTIVE
3:0 0x0 2 = AHB_DATA_XFER
3 = AHB_IDLE
4 = MASTER_IDLE
5 = AHB_BUSY
6 = DISABLE
10.2.5.2 ACTMON_AHB_UPPER_WMARK_0
10.2.5.3 ACTMON_AHB_LOWER_WMARK_0
10.2.5.4 ACTMON_AHB_INIT_AVG_0
Initial AVG value, specified by software to set up the filter
31:0 X VAL
10.2.5.5 ACTMON_AHB_AVG_UPPER_WMARK_0
10.2.5.6 ACTMON_AHB_AVG_LOWER_WMARK_0
10.2.5.7 ACTMON_AHB_COUNT_WEIGHT_0
10.2.5.8 ACTMON_AHB_COUNT_0
31:0 X VAL: Indicates the number of active count pulses in one period
10.2.5.9 ACTMON_AHB_AVG_COUNT_0
10.2.5.10 ACTMON_AHB_INTR_STATUS_0
CONSECUTIVE_UPPER: Assert at the end of sampling period, if count value crosses upper watermark
value consecutively for the number of times specified in CONSECUTIVE_UPPER_NUM field. A write
31 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
CONSECUTIVE_LOWER: Assert at the end of sampling period, if count value crosses lower watermark
value consecutively for the number of times specified in CONSECUTIVE_LOWER_NUM field. A write
30 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AT_END: Assert at the end of sampling period, if interrupt at end of sample period is enabled. A write
value of 1 clears this interrupt, writing a 0 has no effect
29 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
WHEN_OVERFLOW: Assert at the end of sampling period, if there is an overflow. A write value of 1 clears
this interrupt, writing a 0 has no effect
26 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_BELOW_WMARK: Assert at the end of sampling period, if AVG count value crosses lower AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
25 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_ABOVE_WMARK: Assert at the end of sampling period, if AVG count value crosses upper AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
24 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
10.2.6.1 ACTMON_APB_CTRL_0
ENB: Enable Monitor. Set by SW to enable sampling. Cleared in one of the following ways: (a) When
SW intends to stop the monitor, it can do so by clearing this field, (b) when the sampling period expires
31 0x0 (and we are not in the periodic mode)
0 = DISABLE
1 = ENABLE
WHEN_OVERFLOW_EN: Enable interrupt for the Number of consecutive lower watermark breaches
that need to occur to raise an interrupt.
22 0x0
0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
AVG_ABOVE_WMARK_EN: Enable interrupt when AVG value is above its upper watermark value.
21 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
AVG_BELOW_WMARK_EN: Enable interrupt when AVG value is below its lower watermark value.
20 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
ENB_PERIODIC: Enable periodic mode. Sample for one sample period or periodic sampling
0 = DISABLE : periodic mode is disabled, samples for only 1 period
18 0x0
1 = ENABLE : periodic mode is enabled, keeps on sampling and updating value after every sample
period
12:10 0x6 K_VAL: variable for IIR filter. Default is 6, which translates to 2^(K+1) = 128.
MONITOR_COND: Selection criteria on parent module for the activity signal, used only for APB/AHB
monitors. Indicates which APB slave to monitor. All 1s means any slave.
0 = AUDIO
1 = UARTA
2 = UARTB
3 = UARTC
4 = UARTD
5 = VFIR
6 = DTV
7 = I2C1
8 = I2C2
9:4 0x0 9 = I2C3
10 = I2C4
11 = DVC
12 = I2C6
13 = SPI1
14 = SPI2
15 = SPI3
16 = SPI4
17 = SPI5
18 = SPI6
19 = OWR
63 = ALL
SAMPLE_COND: Selection criteria on parent module for type of pulse signal, used only for APB/AHB
monitor.
0 = PSEL_ACTIVE
3:0 0x0 1 = PREADY_ACTIVE
2 = PENABLE_PSEL_ACTIVE
3 = APB_IDLE
4 = DISABLE
10.2.6.2 ACTMON_APB_UPPER_WMARK_0
10.2.6.3 ACTMON_APB_LOWER_WMARK_0
10.2.6.4 ACTMON_APB_INIT_AVG_0
Initial AVG value, specified by SW to set up the filter
31:0 X VAL
10.2.6.5 ACTMON_APB_AVG_UPPER_WMARK_0
10.2.6.6 ACTMON_APB_AVG_LOWER_WMARK_0
10.2.6.7 ACTMON_APB_COUNT_WEIGHT_0
10.2.6.8 ACTMON_APB_COUNT_0
31:0 X VAL: Indicates the number of active count pulses in one period
10.2.6.9 ACTMON_APB_AVG_COUNT_0
10.2.6.10 ACTMON_APB_INTR_STATUS_0
CONSECUTIVE_UPPER: Assert at the end of sampling period, if count value crosses upper watermark
value consecutively for the number of times specified in CONSECUTIVE_UPPER_NUM field. A write
31 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
CONSECUTIVE_LOWER: Assert at the end of sampling period, if count value crosses lower watermark
value consecutively for the number of times specified in CONSECUTIVE_LOWER_NUM field. A write
30 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AT_END: Assert at the end of sampling period, if interrupt at end of sample period is enabled. A write
value of 1 clears this interrupt, writing a 0 has no effect
29 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
WHEN_OVERFLOW: Assert at the end of sampling period, if there is an overflow. A write value of 1 clears
this interrupt, writing a 0 has no effect
26 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_BELOW_WMARK: Assert at the end of sampling period, if AVG count value crosses lower AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
25 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_ABOVE_WMARK: Assert at the end of sampling period, if AVG count value crosses upper AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
24 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
10.2.6.11 ACTMON_APB_CTRL_SAPB_0
MONITOR_COND_SAPB: Selection criteria on parent module for the activity signal, used only for
APB/AHB monitors.
0 = DVFS
1 = PWM
2 = MISC
3 = RTC
4 = KBC
5 = PMC
6 = SYSCTR0
7 = SYSCTR1
8 = FUSE
9 = KFUSE
10 = LA
11 = DDS
12 = DP2
13 = SNOR
14 = SE
15 = CSITE
16 = MC
9:4 0x0
17 = EMC
18 = MIPI_CAL
19 = ATOMICS
20 = CED
21 = HDA
22 = SATA
23 = SDMMC1
24 = SDMMC2
25 = SDMMC3
26 = SDMMC4
27 = SATA_AUX
28 = APB2JTAG
29 = SOC_THERM
30 = XUSB_HOST
31 = XUSB_DEV
32 = XUSB_PADCTL
33 = PINMUX_AUX
34 = SECURE_REGS
63 = ALL
SAMPLE_COND_SAPB: Selection criteria on parent module for type of pulse signal, used only for
APB/AHB monitor.
0 = PSEL_ACTIVE
3:0 0x0 1 = PREADY_ACTIVE
2 = PENABLE_PSEL_ACTIVE
3 = APB_IDLE
4 = DISABLE
10.2.7.1 ACTMON_VDE_CTRL_0
ENB: Enable Monitor. Set by software to enable sampling. Cleared in one of the following ways: (a)
When SW intends to stop the monitor, it can do so by clearing this field, (b) when the sampling period
31 0x0 expires (and we are not in the periodic mode)
0 = DISABLE
1 = ENABLE
WHEN_OVERFLOW_EN: Enable interrupt for the Number of consecutive lower watermark breaches
that need to occur to raise an interrupt.
22 0x0
0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
AVG_ABOVE_WMARK_EN: Enable interrupt when AVG value is above its upper watermark value.
21 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
AVG_BELOW_WMARK_EN: Enable interrupt when AVG value is below its lower watermark value.
20 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
ENB_PERIODIC: Enable periodic mode. Sample for one sample period or periodic sampling
0 = DISABLE : periodic mode is disabled, samples for only 1 period
18 0x0
1 = ENABLE : periodic mode is enabled, keeps on sampling and updating value after every sample
period
12:10 0x6 K_VAL: variable for IIR filter. Default is 6, which translates to 2^(K+1) = 128.
10.2.7.2 ACTMON_VDE_UPPER_WMARK_0
10.2.7.3 ACTMON_VDE_LOWER_WMARK_0
10.2.7.4 ACTMON_VDE_INIT_AVG_0
Initial AVG value, specified by SW to set up the filter
31:0 X VAL
10.2.7.5 ACTMON_VDE_AVG_UPPER_WMARK_0
10.2.7.6 ACTMON_VDE_AVG_LOWER_WMARK_0
10.2.7.7 ACTMON_VDE_COUNT_WEIGHT_0
10.2.7.8 ACTMON_VDE_COUNT_0
31:0 X VAL: Indicates the number of active count pulses in one period
10.2.7.9 ACTMON_VDE_AVG_COUNT_0
10.2.7.10 ACTMON_VDE_INTR_STATUS_0
CONSECUTIVE_UPPER: Assert at the end of sampling period, if count value crosses upper watermark
value consecutively for the number of times specified in CONSECUTIVE_UPPER_NUM field. a write value
31 0x0 of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
CONSECUTIVE_LOWER: Assert at the end of sampling period, if count value crosses lower watermark
value consecutively for the number of times specified in CONSECUTIVE_LOWER_NUM field. a write
30 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AT_END: Assert at the end of sampling period, if interrupt at end of sample period is enabled. A write
value of 1 clears this interrupt, writing a 0 has no effect
29 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
WHEN_OVERFLOW: Assert at the end of sampling period, if there is an overflow. A write value of 1 clears
this interrupt, writing a 0 has no effect
26 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_BELOW_WMARK: Assert at the end of sampling period, if AVG count value crosses lower AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
25 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_ABOVE_WMARK: Assert at the end of sampling period, if AVG count value crosses upper AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
24 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
10.2.8.1 ACTMON_MCALL_CTRL_0
ENB: Enable Monitor. Set by software to enable sampling. Cleared in one of the following ways: (a)
When software intends to stop the monitor, it can do so by clearing this field, (b) when the sampling
31 0x0 period expires (and we are not in the periodic mode)
0 = DISABLE
1 = ENABLE
WHEN_OVERFLOW_EN: Enable interrupt for the Number of consecutive lower watermark breaches
that need to occur to raise an interrupt.
22 0x0
0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
AVG_ABOVE_WMARK_EN:Enable interrupt when AVG value is above its upper watermark value.
21 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
AVG_BELOW_WMARK_EN:Enable interrupt when AVG value is below its lower watermark value.
20 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
ENB_PERIODIC: Enable periodic mode. Sample for one sample period or periodic sampling
0 = DISABLE : periodic mode is disabled, samples for only 1 period
18 0x0
1 = ENABLE : periodic mode is enabled, keeps on sampling and updating value after every sample
period
12:10 0x6 K_VAL: variable for IIR filter. Default is 6, which translates to 2^(K+1) = 128.
10.2.8.2 ACTMON_MCALL_UPPER_WMARK_0
10.2.8.3 ACTMON_MCALL_LOWER_WMARK_0
10.2.8.4 ACTMON_MCALL_INIT_AVG_0
Initial AVG value, specified by SW to set up the filter
31:0 X VAL
10.2.8.5 ACTMON_MCALL_AVG_UPPER_WMARK_0
10.2.8.6 ACTMON_MCALL_AVG_LOWER_WMARK_0
10.2.8.7 ACTMON_MCALL_COUNT_WEIGHT_0
10.2.8.8 ACTMON_MCALL_COUNT_0
31:0 X VAL: Indicates the number of active count pulses in one period
10.2.8.9 ACTMON_MCALL_AVG_COUNT_0
10.2.8.10 ACTMON_MCALL_INTR_STATUS_0
CONSECUTIVE_UPPER: Assert at the end of sampling period, if count value crosses upper watermark
value consecutively for the number of times specified in CONSECUTIVE_UPPER_NUM field. A write
31 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
CONSECUTIVE_LOWER: Assert at the end of sampling period, if count value crosses lower watermark
value consecutively for the number of times specified in CONSECUTIVE_LOWER_NUM field. A write
30 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AT_END: Assert at the end of sampling period, if interrupt at end of sample period is enabled. A write
29 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
WHEN_OVERFLOW: Assert at the end of sampling period, if there is an overflow. A write value of 1 clears
this interrupt, writing a 0 has no effect
26 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_BELOW_WMARK: Assert at the end of sampling period, if AVG count value crosses lower AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
25 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_ABOVE_WMARK: Assert at the end of sampling period, if AVG count value crosses upper AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
24 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
10.2.9.1 ACTMON_MCCPU_CTRL_0
ENB: Enable Monitor. Set by software to enable sampling. Cleared in one of the following ways: (a)
When software intends to stop the monitor, it can do so by clearing this field, (b) when the sampling
31 0x0 period expires (and we are not in the periodic mode)
0 = DISABLE
1 = ENABLE
WHEN_OVERFLOW_EN: Enable interrupt for the Number of consecutive lower watermark breaches
that need to occur to raise an interrupt.
22 0x0
0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
AVG_ABOVE_WMARK_EN: Enable interrupt when AVG value is above its upper watermark value.
21 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
AVG_BELOW_WMARK_EN: Enable interrupt when AVG value is below its lower watermark value.
20 0x0 0 = DISABLE : interrupt is disabled.
1 = ENABLE : interrupt is enabled.
ENB_PERIODIC: Enable periodic mode. Sample for one sample period or periodic sampling
0 = DISABLE : periodic mode is disabled, samples for only 1 period
18 0x0
1 = ENABLE : periodic mode is enabled, keeps on sampling and updating value after every sample
period
12:10 0x6 K_VAL: variable for IIR filter. Default is 6, which translates to 2^(K+1) = 128.
10.2.9.2 ACTMON_MCCPU_UPPER_WMARK_0
10.2.9.3 ACTMON_MCCPU_LOWER_WMARK_0
10.2.9.4 ACTMON_MCCPU_INIT_AVG_0
Initial AVG value, specified by software to set up the filter
31:0 X VAL
10.2.9.5 ACTMON_MCCPU_AVG_UPPER_WMARK_0
10.2.9.6 ACTMON_MCCPU_AVG_LOWER_WMARK_0
10.2.9.7 ACTMON_MCCPU_COUNT_WEIGHT_0
10.2.9.8 ACTMON_MCCPU_COUNT_0
31:0 X VAL: Indicates the number of active count pulses in one period
10.2.9.9 ACTMON_MCCPU_AVG_COUNT_0
10.2.9.10 ACTMON_MCCPU_INTR_STATUS_0
CONSECUTIVE_UPPER: Assert at the end of sampling period, if count value crosses upper watermark
value consecutively for the number of times specified in CONSECUTIVE_UPPER_NUM field. A write
31 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
CONSECUTIVE_LOWER: Assert at the end of sampling period, if count value crosses lower watermark
value consecutively for the number of times specified in CONSECUTIVE_LOWER_NUM field. A write
30 0x0 value of 1 clears this interrupt, writing a 0 has no effect
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AT_END: Assert at the end of sampling period, if interrupt at end of sample period is enabled. A write
value of 1 clears this interrupt, writing a 0 has no effect
29 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
WHEN_OVERFLOW: Assert at the end of sampling period, if there is an overflow. A write value of 1 clears
this interrupt, writing a 0 has no effect
26 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_BELOW_WMARK: Assert at the end of sampling period, if AVG count value crosses lower AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
25 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
AVG_ABOVE_WMARK: Assert at the end of sampling period, if AVG count value crosses upper AVG
watermark value. A write value of 1 clears this interrupt, writing a 0 has no effect
24 0x0
0 = NOINTR : 0 = interrupt not detected
1 = INTR : 1 = interrupt detected
10.2.10.1 ACTMON_HISTOGRAM_CONFIG_0
Histogram Configuration
Offset: 0x300 | Read/Write: R/W | Reset: 0x00000XXX (0bxxxxxxxxxxxxxxxx0000xxxxxxxxxxxx)
SOURCE:
0 = NONE
1 = AHB
2 = APB
3 = COP
15:12 NONE 4 = CPU
5 = MC_ALL
6 = MC_CPU
7 = VDE
8 = VDEA
9 = APB_MMIO
8:4 X SHIFT: Scaling factor for the idle counter before the value is used to update histogram bucket.
STALL_ON_SINGLE_SATURATE:
FALSE : continue incrementing buckets even when another bucket has saturated
3 X TRUE : stop incrementing bucket when at least one other bucket has saturated
0 = FALSE
1 = TRUE
NO_UNDERFLOW_BUCKET:
FALSE : increase bucket 0 when idle time is less than the minimum value
2 X TRUE : ignore idle times that are less than the minimum value
0 = FALSE
1 = TRUE
LINEAR_MODE:
DISABLE : bucket width increases exponentially with a power of two
1 X ENABLE : bucket width is the same for all buckets
0 = DISABLE
1 = ENABLE
10.2.10.2 ACTMON_HISTOGRAM_CTRL_0
Offset: 0x304 | Read/Write: R/W | Reset: 0x0000000X (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
10.2.10.3 ACTMON_HISTOGRAM_DATA_0
This is an array of 32 identical register entries; the register fields below apply to each entry.
31:0 X VALUE
Features
10-bit milliseconds counter that runs off of a 32.768 KHz clock source.
32-bit seconds counter that increment for every 1000 milliseconds.
Alarm feature that triggers an interrupt when the specified value matches the milliseconds counter.
Alarm feature that triggers an interrupt when the specified value matches the seconds counter.
Count-down alarm feature that triggers an alarm after counting down the specified number of seconds.
Count-down alarm feature that triggers an alarm after counting down the specified number of milliseconds.
Security bit that disables further processor writes to the seconds counter and ensures that the RTC clock keeps
running.
Hardware adjusts drift in clock which can occur due to PPM variations in oscillator output.
All the registers except the BUSY register are implemented in the 32 KHz clock domain. Writes are transferred to the 32 KHz
domain with BUSY.STATUS set to BUSY until the transfer is completed. Reads are shadowed in the APB clock domain and
return immediately.
The RTC implements a Seconds Counter register, a Milliseconds Counter register, three Alarm registers, two countdown
alarms, and various interrupt-related registers.
Writes to the seconds counter can be disabled by writing to the CONTROL.DIS_WR_SEC_CNT bit. Alarm registers and
countdown alarm registers set interrupt bits when corresponding events occur. Interrupt status, mask, set and source registers
reflect the status and also allow setting and clearing of various bits. All registers (except the BUSY register) are implemented
in the 32K clock domain. Writes are transferred to the 32K domain with BUSY STATUS set to BUSY until the transfer
completes. Reads are shadowed in the APB domain and will return immediately.
Resets
The RTC receives an asynchronous reset which is synchronized to the APB clock and RTC clock domains.
11.2.1 APBDEV_RTC_CONTROL_0
Control Register
Offset: 0x0 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
WR_SEC_CNT: When set, writes to the SECONDS counter are disabled. Can only be cleared
by resetting the RTC module
0 0x0
0 = DISABLE
1 = ENABLE
11.2.2 APBDEV_RTC_BUSY_0
Busy Register
Offset: 0x4 | Read/Write: RO | Reset: 0x0000000X (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
STATUS: This bit is set when a write is initiated on the APB side. It is cleared once the write
completes in RTC 32 KHz clock domain, which could be several thousands of APB clocks. This
0 X must be IDLE before a write is initiated. Note that this bit is only for writes.
0 = IDLE
1 = BUSY
11.2.3 APBDEV_RTC_SECONDS_0
31:0 0x0 SECONDS: The seconds counter is incremented every 1000 milliseconds.
11.2.4 APBDEV_RTC_SHADOW_SECONDS_0
Since the software cannot read both registers at any given point of time, the Seconds register content is captured in this
register. If software needs to read both seconds and milliseconds, read the MILLI_SECONDS register followed by a read of
this register.
11.2.5 APBDEV_RTC_MILLI_SECONDS_0
11.2.6 APBDEV_RTC_SECONDS_ALARM0_0
11.2.7 APBDEV_RTC_SECONDS_ALARM1_0
11.2.8 APBDEV_RTC_MILLI_SECONDS_ALARM_0
11.2.9 APBDEV_RTC_SECONDS_COUNTDOWN_ALARM_0
The interrupt bit corresponding to the countdown alarm (SEC_CDN_ALARM) is set after the specified interval has expired. If
REPEAT is ENABLED, the countdown operation is performed repeatedly.
ENABLE: Enable bit for the countdown operation. If repeat is not set, this bit is cleared once the
internal counters counts down to specified value.
31 0x0
0 = DISABLED
1 = ENABLED
11.2.10 APBDEV_RTC_MILLI_SECONDS_COUNTDOWN_ALARM_0
The interrupt bit corresponding to the countdown alarm (MSEC_CDN_ALARM) is set after the specified interval has expired. If
REPEAT is ENABLED, the countdown operation is performed repeatedly.
ENABLE: Enable bit for the countdown operation. If repeat is not set, this bit is cleared once the
internal counters counts down to specified value.
31 0x0
0 = DISABLED
1 = ENABLED
11.2.11 APBDEV_RTC_INTR_MASK_0
4 0x0 MSEC_CDN_ALARM
3 0x0 SEC_CDN_ALARM
2 0x0 MSEC_ALARM
1 0x0 SEC_ALARM1
0 0x0 SEC_ALARM0
11.2.12 APBDEV_RTC_INTR_STATUS_0
4 0x0 MSEC_CDN_ALARM
3 0x0 SEC_CDN_ALARM
2 0x0 MSEC_ALARM
1 0x0 SEC_ALARM1
0 0x0 SEC_ALARM0
11.2.13 APBDEV_RTC_INTR_SOURCE_0
4 X MSEC_CDN_ALARM
3 X SEC_CDN_ALARM
2 X MSEC_ALARM
1 X SEC_ALARM1
0 X SEC_ALARM0
11.2.14 APBDEV_RTC_INTR_SET_0
4 0x0 MSEC_CDN_ALARM
3 0x0 SEC_CDN_ALARM
2 0x0 MSEC_ALARM
1 0x0 SEC_ALARM1
0 0x0 SEC_ALARM0
11.2.15 APBDEV_RTC_CORRECTION_FACTOR_0
DIRECTION:
9 0x0 0 = DECREMENT
1 = INCREMENT
12.1 Glossary
Term Definition
Term Definition
Term Definition
Tick Count Running count of the Host clock after it has been enabled.
12.2 Features
The key features of the Host1x controller are summarized below:
12 Channels
192 Sync Points
64 Syncpt Base Registers
32-bit Syncpt Comparison
32-bit Timeout register
Stall and transfer counters
Unit Activity Monitor (ACTMON): MSENC and VIC
Master clients: Crossbar and TSEC
TZ secure bit In MMIO path
Master Interface protocol: Native Crossbar
Client Interface protocol: Hwr/Hrd
32-bit Host1x2MC address
By using “class” interface register offsets/formats need not to remain fixed so there is nothing chip specific in the API. This will
allow both hardware flexibility and software driver compatibility.
A channel switch does not always require a client module context switch. There will be a state change within the Host1x, but if
channels have non-overlapping usage (e.g., possibly a VIC channel and MSENC encode channel), there may be no need to
context switch any Host1x client module.
12.3.1 Channels
The Tegra K1 processor has 12 Host1x channels. Each channel has a set of registers and a command FIFO. Each channel
can be associated with one or more Host1x clients. The channel is the primary means of delivering commands to clients,
which is described in the Host1x Programming Model section.
CDMA Registers
HOST1X_CHANNEL_DMASTART_0: This register triggers a DMA fetch from memory for this channel, if PUT
register does not equal the GET register.
HOST1X_CHANNEL_DMAPUT_0: This register triggers a DMA fetch from memory for this channel, if the PUT
register does not equal the GET register. This address is relative to the DMASTART base address. It does not
support byte writes. All 4-byte data need to be programmed.
HOST1X_CHANNEL_DMAGET_0: This register tracks the MC offset, which DMA engine has read. It gets
incremented as entries are loaded from the channels command buffer into the FIFO. This address is relative to the
DMASTART base address.
HOST1X_CHANNEL_DMAEND_0: This is the boundary of illegal addresses (either end of push-buffer or end of
physical memory). This is designed to prevent DMA from prefetching illegal addresses. If DMA reaches this address
before seeing a RESTART, it will stop. This would be a software error condition.
HOST1X_CHANNEL_DMACTRL_0: The various fields of DMA control register are described as below:
- DMAGETRST: Reset GET pointer to '0'. Useful for cleaning up crashed channels. DMAGET value is not
updated instantly. It takes 4 cycles between programming of reset and valid DMAGET.
- DMAGETINIT: Reset GET pointer to the value of DMAPUT when DMAGETRST is asserted.
- DMASTOP: Stop DMA from fetching on this channel.
Access Registers
HOST1X_CHANNEL_INDOFF_0 and HOST1X_CHANNEL_INDOFF2_0: The INDOFF and INDOFF2 registers
(along with INDCNT and INDDATA) are used to indirectly read/write modules outside the host. If AUTOINC is set,
INDOFFSET value is increments by 4 on every access of INDDATA. REGFNUMEMPTY is polled to determine when
valid data can be read from INDDATA. The INDOFF register has limited capability on chips with large memory maps.
If the top bit of the memory address is >= 27, all of memory cannot be addressed with INDOFF. In these cases, use
INDOFF2 to set the offset while still using INDOFF to set other parameters. Always have INDOFFUPD set to
NO_UPDATE in these cases.
For register accesses, using INDOFF (with INDOFFUPD set to UPDATE) is always more efficient, since it only
requires one write.
HOST1X_CHANNEL_INDCNT_0: Indirect register access count used to trigger indirect reads. Holds the number of
registers/memory locations that will be read out. Channels should not request more than there is space available in
their output FIFO. For indirect frame buffer reads, each channel cannot issue more than
NV_HOST1X_MAX_IND_FB_READS at once. The read data must return and be written into the per-channel output
FIFO before any additional reads can be issued.
HOST1X_CHANNEL_INDDATA_0: This register, when written, writes to the data to the INDOFFSET in INDOFF. For
reads, a REGFNUMEMPTY number of 32-bit values can be read before needing to poll FIFOSTAT again. The per-
channel output FIFO (OUTFENTRIES) is readable via this offset. A read of INDDATA will pop an entry off of the per-
channel output FIFO.
HOST1X_CHANNEL_CMDSWAP_0: Command swap control. Affects swapping on writes to the PIO region and the
frame-buffer buffered memory write region.
HOST1X_CHANNEL_FIFOSTAT_0: CFNUMEMPTY is the number of free slots available in the per-channel
command FIFO (needed for PIO or polling for completion of a wait).
A command FIFO has a set of registers that point to a location in memory where a sequence of channel commands resides.
This sequence of commands is generally referred to as a “Push-buffer”.
A Host1x master can write either to DMAPUT or DMASTART register to trigger command fetching by the CDMA. DMASTART
indicates where to start fetching, and DMAPUT indicates where to stop. DMAGET is a read-only reference to the present
location of the command FIFO; it is incremented when the command is popped from the command FIFO. DMAPUT and
DMAGET are relative addresses to DMASTART.
DMAEND provides an upper boundary to prevent the CDMA from fetching illegal addresses; fetching will cease when
DMAGET equals DMAEND.
The command FIFO can be halted by writing the DMASTOP field in the Dmactrl register. Dmactrl also provides a mechanism
to reset the DMAGET pointer (Dmagetrst field) to either 0 or to the value of DMAPUT (Dmainitget field).
Class commands: A class command is a mechanism to communicate a class write to a client. The channel must
have an active class when processing class commands. The active class is set by a SETCL (SetClass) command.
DMA commands: DMA commands control what is being fetched. They are processed at the top of the command
FIFO while class commands are processed at the bottom of the command FIFO. This is because DMA commands
change the command stream and must be processed before entering the FIFO.
Offsets in class commands are relative to the active class' base as they are limited to only the methods in the active class.
Channel Commands
SETCL (SetClass) – A channel command that takes a class ID as an argument. SetClass is the sole means to
indicate the current virtualization of the channel. It also means that a channel can acquire ownership of a class.
Subsequent channel commands are directed towards this class.
NONINCR (NonIncrement) – Takes an offset and count as arguments. There will be <count> data following this
class command that will be written to the specified offset. Nonincrement indicates that the offset will not be
incremented per data write.
INCR (Increment) – Takes an offset and count as arguments. There will be <count> data following this command
that will be written starting at the specified offset. The offset is incremented after each write.
MASK (Mask) – Takes an offset and count as arguments. The number of data to write after the command is equal to
the number of set bits in the count. Each data is written to the specified offset plus the next active bit location. For
example, a count equal to 0x5, would have 2 data that are written to (offset+0) and (offset+2).
IMM (Immediate) – Takes an offset and 16-bit data as arguments. The 16-bit data is written to the offset.
DMA Commands
RESTART (Restart or Jump) – This command specifies an offset relative to DMASTAT. The next command fetched
will be from (DMASTART + offset).
GATHER – Command comprises 2 words and has arguments: offset, insert, type, count, and address. When
GATHER is processed, <count> data is fetched from the address and inserted into the command stream. If the
<insert> argument is enabled, it will insert either an INCR or NONINCR opcode preceding the fetched data, which is
specified by <type>.
DMA commands do not need an active class, but often are processed when an active class exists. In the case of GATHER, if
<insert> is enabled, there must be an active class.
CH<0..n>_STATUS: Status includes client ownership and whether the channel is blocked or not (n is the number of
channels – 1).
CH_TEARDOWN: Using this register each channel can be reset, which is referred to as a teardown. This means all
channel state is cleared and all client and class ownership is relinquished.
MOD_TEARDOWN: Similar to channel teardown, there exists a mechanism to reset modules. Setting this register
can clears all state associated with a given client/module.
<client>_STATUS : This register indicates the client’s currently active class.
12.3.2.1 INDOFF
The following Host1x methods operate identically to the channel registers used for indirect access. Refer to the Host Channel
Registers and Indirect Register Access sections.
INDOFF
INDOFF2
INDCTRL
INDDATA
INDCNT is absent from the list above. In Host1x master-initiated indirect register reads, INDCNT is written to trigger the read.
Conversely, reads from the command FIFO are trigged by a write to INDDATA. Reads issued from the command FIFO are
returned to the channel's register return FIFO (return_FIFO).
12.3.2.2 DELAY_USEC
Delay_Usec stalls the command FIFO for the number of microseconds specified. This command has no impact on indirect
register accesses if not initiated from the command FIFO. The microsecond period is calculated based on setting in the
Usec_Clk register. The Usec_Clk register is programmed on the basis of Host1x clock for example if host clock is 250 MHz,
then this register should be programmed to a value of 250.
12.3.2.3 TICKCOUNT
Tickcount_Hi, Tickcount_Lo, and Tickctrl can also be controlled from the command FIFO. Their operation is identical whether
controlled from the command FIFO or a Host1x master.
12.3.2.4 INCR_SYNCPT
All Host1x modules, including the Host1x itself, implement the Incr_Syncpt class.
For the Host1x, this method immediately increments Syncpt[Indx] irrespective of the cond.
12.3.2.5 WAIT_SYNCPT
Wait on syncpt – the command dispatch will stall until the syncpt counter pointed by the index field reaches the threshold value
specified in the Thresh field:-
where the “>=” takes into account wrapping (see the “Sync Points (SYNCPTs)” section for more information on wrapping).
More specifically, the channel will wait until:
12.3.2.6 WAIT_SYNCPT_BASE
This method uses Syncpt Base registers to calculate threshold value for channel wait operation. The syncpt index, base index
and also optional offset will be a part of Wait_Syncpt_Base command:-
Where the “>=” takes into account wrapping. See the “Sync Points (SYNCPTs)” section for more information on wrapping.
12.3.2.7 WAIT_SYNCPT_INCR
Wait until syncpt increments:
Wait_Syncpt_Incr <Indx>
The channel will stall until Syncpt[Indx] is incremented. Note that this wait method is not recommended.
12.3.2.8 LOAD_SYNCPT_BASE
Load a new value into the Syncpt_Base register:
12.3.2.9 INCR_SYNCPT_BASE
Add an offset to the value in the Syncpt_Base register:
Syncpt_Base[Base_Indx] += Offset
12.3.2.10 STALLCOUNT
STALLCOUNT_HI, STALLCOUNT_LO, and STALLCTRL are methods to control “stall counters” through the command FIFO.
Details of stall counters are given later in this document.
12.3.2.11 XFERCOUNT
Channel_Xfer_Hi, Channel_Xfer_Lo, and Xferctrl are methods to control “xfer counters” through the command FIFO.
LOAD_SYNCPT_PAYLOAD_32, <other_command>
WAIT_SYNCPT_32
WAIT_SYNCPT_BASE_32 ,
LOAD_SYNCPT_BASE_32,
INCR_SYNCPT_BASE_32
LOAD_SYNCPT_PAYLOAD_32 <Payload(32)>
This method loads a 32-bit value into the corresponding channel's Channel_Syncpt_Payload register:
Channel_Syncpt_Payload[31:0 ]= <Payload(32)>
WAIT_SYNCPT_32 <Indx(8)>
This method stalls the current channel until following condition is true:-
Here the Payload value is taken from Channel_Syncpt_Payload of the current channel.
Here the Payload value is taken from Channel_Syncpt_Payload register of the current channel.
LOAD_SYNCPT_BASE_32 <Base_Indx(8)>
This method copies the value from the current channel's Channel_Syncpt_Payload register into the Syncpt_Base register
specified through the Base_Indx field:-
Syncpt_Base[<Base_Indx>][31:0] = Channel_Syncpt_Payload[31:0]
INCR_SYNCPT_BASE_32 <Base_Indx(8)>
This method adds the value of the current channel's Channel_Syncpt_Payload register into the Syncpt_Base register specified
through Base_Indx:-
Syncpt_Base[<Base_Indx>][31:0] += Channel_Syncpt_Payload[31:0]
SetClass simply instructs the channel hardware which module and context to use for the following commands.
If multiple channels write simultaneously to the same class ID, and no MLOCKs are used, then the actual commands
are interleaved in round-robin fashion (one command per channel).
If multiple channels write simultaneously to different class IDs in the same hardware module (and no MLOCKs are
used), then the actual commands are interleaved, but in blocks of N-cycle bursts (each burst of commands must be
preceded with a CTXSW to the module giving the new context ID).
N in this case is programmable number configured through Ctxsw_Timeout_Cfg register.
Tegra K1 processors have 192 sync points. Sync points are not permanently associated with a channel; sync point allocation
is done by software during initialization time.
Sync points are normally not reset, but can wrap -- the comparison takes into account the possibility of wrapping.
Note: Sync point wrapping works only if (Syncpt value - Syncpt Threshold) <= 2(syncpt_width-1)
For 16-bit syncpt comparisons, the difference should be less than or equal to 32768.
Software must take care of wrapping issues.
For 32-bit comparisons, the difference should be less than or equal to 2,147,483,648,
Because of the large value, software will not see any wrapping issues.
All Host1x clients (e.g., VI) implement the following increment syncpt method:
The Host1x client would receive the “Incr_Syncpt” method and store the index for each condition. Whenever the "condition"
event occurs, the client would return the index back to Host1x.
Each module will be programmed to do a unit of work (an operation) by Host1x using CDMA and push buffers.
BLT (VIC)
Draw a set of triangles (GPU)
Encode a single frame (MSENC).
If nothing else is programmed, then module will go idle until Host1x sends commands to start another operation (no
continuous mode).To do its operation, a module reads data from memory and writes the results to memory. Modules interact
with each other using memory buffers: one module is the producer of data, and another is the consumer of that data.
There are exceptions to this model which we will discuss in detail later, but should be mentioned here. The exceptions include
VI and DISPLAY which work in continuous mode (they continue to process data without the need of additional Host1x
programming).
Basic Synchronization
There are two basic needs for synchronization: management of memory buffers and timing of control register writes.
Memory buffers used to pass data from one module to the next use a producer/consumer model with circular buffers. To
prevent buffer underflow and overflow, synchronization needs to be done in both directions:
The consumer cannot read until producer is done writing (and the writes are committed to memory).
The producer cannot reuse an output buffer (i.e., write to buffer) until the consumer is done reading the buffer.
To understand the requirements for timing the writes to control registers, a typical sequence is provided below:
If no WAIT method is placed between the trigger for A and the first register write for B, then in the worst case, corruption of
operation A may occur because the new value of the control register is used before operation A is done. For modules that
protect against this corruption, there is still the undesirable behavior of the module delaying the register write and
subsequently causing back pressure on the Host1x write bus. If we wish to allow direct register reads to be used by ISRs they
will happen asynchronously to the channel command writes, so one must ensure that the Host1x bus does not stall for
significant periods of time.
For synchronizing writes to control register, a safe time to start writing register for the next operation is defined to be when:
0 (Immediate): Return indx to Host1x immediately (used by software push-buffer allocation and helpful for debug).
1 (Op_Done): Return indx to Host1x when all previously triggered operations have completed and their writes to
memory are committed.
2 (Rd_Done): Return indx to Host1x when all previously triggered operations have completed their reads from
memory.
3 (Reg_Wr_Safe): Return indx to Host1x when it is safe to program registers for the next operation. Safe means no
corruption to previous operations and no stalling of Host1x write bus will occur.
There are special cases which would require use of additional condition values. Some modules have multiple read buffers
condition = 2 (all reads done) would mean all reads to all buffers done, but it might be useful to software to know when reads
are done to a specific input buffer. For some modules, e.g., VI, there are different safe times to update different sets of
registers, so condition = 3 will need several variations (one for each "safe time"). If a module can have two operations
happening at one time (as in VI), then special considerations will need to be made for these cases: either two separate
Incr_Syncpt methods or one Incr_Syncpt method with many special conditions.
For some modules, one condition can replace another if the two conditions always happen within a short period of time of each
other. Then the condition that always happens last can be used for both.
A similar situation exists for VI, where besides a set of conditions for the “Incr_Syncpt” method, it would also need a register
with “Enable” and “Indx” which would control the incrementing of a syncpt on every camera “Vsync”.
Host1x clients will implement the logic associated with these registers. When this continuous mode is enabled, the client
should set a pending bit for when the condition occurs. When the pending bit is set, the client will arbitrate for the
hrd_<client>2host1x bus and if selected it will send “Indx” tagged with “Syncpt type” on hrd_ bus. After successfully sending
the indx on hrd bus, the client will clear the pending bit.
One of the issues for continuous operation of VI is that not all modes of operation allow the consumer of their output buffers to
signal backpressure when the consumer has fallen behind in reading. To alleviate this problem, VI has registers which, when
written to, signal that the reading of one buffer has completed.
The behavior of these syncpt FIFOs is controlled by an “Incr_Syncpt_Cntrl” register in client’s register space:
INCR_SYNCPT_ERROR<Cond_Status>
This register stores error status in case of above mentioned syncpt FIFO full condition.
The following 32-bit register stores the payload value required in syncpt methods:
Channel_Syncpt_Payload[31:0]
Host1x has a point-to-point interface with its clients using HWR/HRD buses, which are used for sending requests and
accepting responses from clients.
There is a memory controller interface to fetch Push-Buffer commands from memory through the “Command DMA” unit. The
incoming Push-Buffer commands are processed inside “Command Processor” and afterwards either consumed inside Host1x
or it will generate tractions to client interface. There is an internal “syncpt” unit which is used to synchronize between Host1x
clients and also between software.
There is a “Unit ActMon” block to monitor activities of Host1x clients. The ActMon statistics are used by software for power
management.
Tsec HOST1X
Bus
Unit
CPU/TSEC
ActMon Unit Idle Signal
CPU Interface
Bus
Xbar GPU
SyncPts
Interface
Interrupt
Interrupt Logic Command
Controller Command DMA
Processor
Host1x Client
Memory Controller
Interfaces
The MSENC/VIC units send active information to Host1x through the same “active” signal (which is a level signal). The
ACTMON block provides averaging, watermark detection, and interrupt functionality similar to the central activity monitors. The
Host1x driver manages these monitors.
ActMon Clock
Host1x
Host1x
Reset
Host1x
Host1x XBAR Address
interface Decoder
Logic MSENC msenc_active
ACTMON
Host1x
Host1x XBAR Read
interface Return
Path
VIC
ACTMON vic_active
Host1x general
Interrupt_CPU Host1x
Host1x general
Interrupt ACTMON
Interrupt_COP Logic Unit
The clock for the ACTMON unit is a low-frequency (10 MHz ~ 50 MHz), non gateable clock.
There is 1 interrupt status bit (per MSENC and VIC ACTMON interrupt) in Host1x, which is set by the actmon_intr_set_msenc
and actmon_intr_set_vic signals and cleared by software. Also there are corresponding interrupt mask bits for these interrupt
lines to enable/disable interrupts.
The ACTMON register accesses are handled by the ACTMON itself. The Host1x will forward the access control/address/data
signal to the ACTMON unit.
Host1x checks the incoming commands from the gather buffer. If it contains the SetClass kernel mode command, then Host1x
should drop these commands and raise an “Invalid Gbuffer cmd” interrupt to software. Software will read the interrupt status
register to detect the channel that received the invalid gbuffer command. That particular channel needs to be restarted through
the “channel teardown” mechanism.
HOST1X_SYNC_HINTSTATUS_EXT1_0[0:11]
Bit (i) :-ch(i)_Invalid_gbuffer_cmd_int_status
Where i = 0..11
HOST1X_SYNC_HINTMASK_EXT1_0[0:11]
Bit (i) :- ch(i)_Invalid_gbuffer_cmd _int_mask
Where i = 0..11
There might be some cases where a channel can still see setClass, for example, context switching. For those channels this
feature must be disabled. This feature is controlled through CHANNELCTRL for each channel:
CHANNELCTRL[2]
- 0: disable filtering of kernel command(setClass).
- 1: enable filtering of kernel command(setClass).
IP_READ_TIMEOUT_ADDR
IP_WRITE_TIMEOUT_ADDR
The width of the timeout register is 32 bits to provide a timeout value of ~19 seconds.
The TSEC master client interface also uses this mechanism to generate a timeout interrupt to CPU in case of illegal read/write
access. The HINTSTATUS_EXT register has been modified to indicate if the timeout is from native CPU access or TSEC
access.
Also in case of a TSEC read timeout, the returned response packet will have an additional bit (tsec2host1x
1x_iprdata_timeout) to indicate a timeout error.
HINTSTATUS[Timeout_source=bit10] =
- 0 Timeout from TSEC access.
- 1 Timeout from XBAR access.
The current scheme saves only the last timeout address in case of multiple timeout happens before clearing the timeout
interrupt by software.
Total clocks
Clocks stalled waiting for syncpt
Clocks transferring data
The 32-bit TICKCOUNT_LO and TICKCOUNT_HI registers can be written to initialize the tick counter. Reads of these
registers return the tick count. TICKCOUNT_LO stores the lower 32 bits, and TICKCOUNT_HI stores the upper 32 bits.
TICKCOUNT_HI is calculated as follows:
The following Host1x class methods are used to program this counter:
STALLCOUNT_HI: This method initializes the high 32 bits of the tick count value in the CHANNEL_STALL counter.
STALLCOUNT_LO: This method initializes the low 32 bits of the tick count value in the CHANNEL_STALL counter.
STALLCTRL: This method enables/disables the CHANNEL_STALL counter.
The following Host1x class methods are used to program this counter:
CHANNEL_XFER_HI: This method initializes the high 32 bits of the tick count value in the CHANNEL_XFER counter.
CHANNEL_XFER_LO: This method initializes the low 32 bits of the tick count value in the CHANNEL_XFER counter.
XFERCTRL: This method enables/disables the CHANNEL_XFER counter.
Note: Counter operations are identical irrespective of whether they are controlled through registers or other
methods.
Push-buffer access(write)(DMA/PIO) X 1
Push-buffer access(Indirect
X 1
reads)(DMA/PIO)
12.4.6 Interrupts
Host1x has following types of interrupts:
The status is sticky and is PENDING until cleared. Write 1's to clear.
Writes involve two Host1x register writes in the owning channel's space; the first write indicates the address (INDOFF, or
INDOFF2 and INDCTRL), and the second indicates the data (INDDATA).
Reads involve two direct Host1x writes, the first indicates the address (again INDOFF, or INDOFF2 and INDCTRL), and the
second indicates the number of reads (INDCNT). It also requires an indeterminable number of direct Host1x reads to the read
return FIFO status register followed by a read to the read return FIFO.
INDOFF
INDOFF2
INDCTRL
1
This mode is not supported for “secure access”, The CPU has to use only “direct access” in “secure mode”.
INDDATA
INDCNT
Pitfalls — Indirect accesses require a software mutex to ensure that no other software threads access the indirect registers
while issuing the access (since the series of accesses is non-atomic). Indirect reads can only issue counts less than the read
return FIFO size to prevent a deadlock – too many read requests can block popping of the read return FIFO. This restriction
may be even tighter. All module accesses must also be tied to a channel.
In case an indirect write is sent, software must check whether the previous indirect write is through using an immediate sync
increment command to the client.
Only one pending read per interface can exist. Reads are returned from the client when the client is ready. There are no
latency restrictions.
Indirect versus Direct — a pitfall of direct addressing is variable latency of Host1x’s clients. While this has no impact on writes,
the CPU is blocked until the read returns rendering the CPU idle during that time.
Client ID
Host1x 0x0
VI 0x2
Display A 0x8
Display B 0x9
HDMI 0xa
DSI 0xc
VIC 0xd
CSI 0xf
DSIB 0x10
MSENC 0x13
TSEC 0x14
SOR 0x15
DPAUX 0x17
ISP 0x18
ISPB 0x1a
Class ID
NV_HOST1X_CLASS_ID 0x01
NV_VIDEO_ENCODE_MSENC_CLASS_ID 0x21
NV_VIDEO_STREAMING_VI_CLASS_ID 0x30
NV_VIDEO_STREAMING_ISP_CLASS_ID 0x32
NV_VIDEO_STREAMING_ISPB_CLASS_ID 0x34
NV_GRAPHICS_VIC_CLASS_ID 0x5D
NV_DISPLAY_CLASS_ID 0x70
NV_DISPLAYB_CLASS_ID 0x71
NV_HDMI_CLASS_ID 0x77
NV_DISPLAY_DSI_CLASS_ID 0x79
NV_DISPLAY_DSIB_CLASS_ID 0x7A
NV_TSEC_CLASS_ID 0xE0
NV_SOR_CLASS_ID 0x7B
NV_DPAUX_CLASS_ID 0x7D
0x3FFF Bottom
12.5 Performance
As these control commands are short (~200 to 300 words maximum), it is expected that the bandwidth requirement on each
client should be less than 1MB/s, whereas the maximum available bandwidth per client on the HWR bus will be (206*4B)/12
=68MB/s at 206 MHz Host1x clock. The minimum bandwidth on the HWR bus per client is 33.34 MB/s at 100 MHz clock which
should easily meet the client requirement.
strict ordering of commands. A channel starts processing commands simply when commands are present, either supplied by
the CPU or gathered from memory. A channel can be stopped explicitly by a CPU write to channel state.
12.6.1 Concurrency
Channels operate in parallel and are unhindered by one another except in two specific cases:
Synchronization points
Class contention
In the example above, no channel is blocked by another at any time so both can work concurrently. Care must be taken when
assigning clients to channels. Channel concurrency as well as channel throughput is crucial for performance. For example, a
client that is event-driven with a low latency requirement should exist in its own channel. Conversely, two clients that must be
steadily supplied with commands could possibly coexist in the same channel given that their synchronization points are not
conflicting (if they have any real synchronization points at all). Clients that operate sequentially on the same piece of data can
easily reside in the same channel.
Clients with low-latency requirements like described in the first example above should possibly be moved to a PIO
programming model and away from a channel-based model.
12.6.2 Synchronization
There are 192 total synchronization points (syncpts). Similar to semaphores, syncpt methods are issued to clients, mentioning
syncpt counter index and returning condition. Any channel can be made to wait on a syncpt value of a particular syncpt index
through Host1x “wait” method. Once the syncpt method is received by clients, based on syncpt condition, they will return a
syncpt index back to Host1x. On receiving a syncpt index from the client, Host1x will increment that particular syncpt counter.
The following simple example below details how syncpts and waits allow for synchronization. The arrows simply indicate
channel dependencies, which channel is waiting for syncpt increment from other channel.
Syncpts are counter registers that are incremented when specified events occur (e.g., after the completion of each operation
done by a module). The 32-bit syncpt values typically are monotonically increasing and can be used for in channel waits and
out-of-channel interrupts.
The GET and syncpt registers can also be read directly (out-of-band) by the CPU.
This mechanism is useful when software wants to wait for a particular syncpt increment, but software does not know the
absolute value of the sync point register until later.
The "future-value" of a sync point is the value that the syncpt register contains right after a particular increment has occurred.
In this example, time increases downward (later (lower) lines are ahead in time).
Software "knows" the syncpointA future-value equals N at this point; software "knows" the baseA future-value equals N at this
point.
1. command1
3. command2
5. command3
7. command4
9. command5
If software actually DOES know the value of N then regular WAIT_SYNCPT works fine here. However, the user space
software driver (which is creating this list of commands) does not know what the value N is until after these commands (1-9)
are all flushed to the kernel space driver.
The kernel space driver receives packets of commands from many different user space processes. When it receives a packet
of commands it queues those commands (i.e., writes the Host1x PUT pointer). It also keeps track of all increments that have
occurred in all commands that have been queued so far. The "future-value" of each sync point is simply the total number of
increments that have occurred since the beginning of time (actually "beginning of time" is really the point in time where the
kernel space driver was initialized and reset all the syncpt registers to 0).
So when the kernel space driver queues these commands (1-9), it knows the value N (i.e., the sum of all increments since the
beginning of time). It can pass this back to the user space driver. But the user space driver does not know how many
increments will be queued before commands 1-9 are queued because any other process can queue commands (including
increments) at any time (e.g., after the user space driver has written commands 2 and 4 to the buffer, but before those
commands have been queued by the kernel driver).
To solve this, we add a command at the end of each packet that increments the base register the same number of times as
the sync point was incremented:
10. baseA += 2
This means that, at the start of any packet of commands, the future value of syncpointA and the future value of baseA are
always the same. So command 6 can be:
Note: Software never writes a new value to the syncpointA or baseA register except when the kernel driver
is initialized (e.g., when the system boots). After that only the syncpoint register is incremented and
only the base register is added to. All of this depends on all software that creates cooperating
command buffers. Software has this policy (e.g., the user space driver always tells the kernel driver
how many increments are contained in each packet of commands).
If the access is a write, the transaction is complete. In the case of a read, the processor polls the channel's read
return FIFO status (FIFOSTAT), waiting for a nonempty FIFO.
The client returns the read to the channel's return FIFO.
The processor reads INDDATA register of that particular channel to pops data from the return FIFO.
An address is decoded and either routed to a channel register, a synchronous register, or a client
This step is nonexistent; direct accesses do not require a trigger.
In the case of a client decode, a transaction is created and pushed into a FIFO called REGF. The owning channel is
specified as CPU_READ_RETURN_TAG. The client and offset are indicated by the address: the client is created by
shifting the address down by 18; the offset is simply the lower 18 bits.
The transaction is routed to the target client over the HWR bus. If the access is a write, the transaction is complete.
In case of a read, client returns the read data and channel ID in the returned packet indicates its destination, be it
interface or a channel’s return FIFO. If the channel is 0-8, it is an indirect read and returned to the indicated channel.
If the channel matches CPU_READ_RETURN_TAG(0xf), the data is returned to the IP interface.
Currently, there is support for only one pending read per interface.
HCFCMD
Generic command FIFO packet (contains fields common to all opcodes) and is used for initial decode. All command FIFO
packets are multiples of 32 bits.
HCFSETCL
The SetClass opcode specifies which class is being referenced (may cause rerouting of subsequent methods/data). In addition
to switching classes, the opcode allows some methods to be programmed on the switch similar to an HCFMASK opcode.
HCFINCR
The Incrementing opcode indicates the offset should be incremented for each data that is part of the packet. The count
argument indicates how many 32-bit values are following. If channel protect is enabled, the host should prevent a channel
switch from occurring at the end of this command packet.
HCFNONINCR
The Non-Incrementing opcode indicates the same offset should be sent for each data that is part of the packet. The count
argument indicates how many 32-bit values are following. If channel protect is enabled, the host should prevent a channel
switch from occurring at the end of this command packet.
HCFMASK
The Mask opcode, from the starting offset, generates offsets based on where the bits are set in the mask. The host expects
the amount of data following to equal the number of bits set. If channel protect is enabled, the host should prevent a channel
switch from occurring at the end of this command packet.
HCFIMM
The Immediate opcode indicates the offset and data are contained in the same 32-bit data. Only the lowest 16 bits of data are
sent to the module (IMMDATA). The upper 16 bits are zeroed out.
HCFRESTART
The Restart opcode is specific to DMA operation and causes the host to set DMAGET to (ADDRESS << 4), so the next
command fetch will be from (DMASTART + DMAGET).
In legacy chips, bits 27:0 were not decoded and assumed to be 0's (allowing only simply wrapping of GET back to the top of
the command buffer). ADDRESS can be 0 for compatible RESTARTs or non-zero acting as a JUMP.
Note that the jump address granularity is 16 bytes, since the bottom 4 bits cannot be specified.
HCFGATHER
The Gather opcode allows contiguous portions of memory to be fetched and placed in line with the command stream,
replacing the two words of the gather command. It optionally can put an incrementing or non-incrementing opcode in the
stream ahead of the gathered data. This allows for the gathered data to be a pure data stream and not be required to have
host opcodes inside.
HCFCHDONE
This opcode indicates to the command processor that the current channel is done processing for now and is willing to give up
any of its owned modules to other channels that need them.
12.8.1 HOST1X_CHANNEL_FIFOSTAT_0
CFNUMEMPTY is the number of free slots available in the per-channel command. A FIFO is needed for PIO or polling for
completion of a wait.
28:24 X OUTFENTRIES: Number of entries available for reading in this channel's output FIFO
12.8.2 HOST1X_CHANNEL_INDOFF_0
The INDOFF and INDOFF2 registers (along with INDCNT and INDDATA) are used to indirectly read/write modules outside the
host. If AUTOINC is set, INDOFFSET increments by 4 on every access of INDDATA. REGFNUMEMPTY is polled to
determine when valid data can be read from INDDATA.
The INDOFF register has limited capability on chips with large memory maps. If the top bit of the memory address is >= 27, all
of memory cannot be addressed with INDOFF. In these cases, use INDOFF2 to set the offset while still using INDOFF to set
the other parameters. Always have INDOFFUPD set to NO_UPDATE in these cases. For register accesses, using INDOFF
(with INDOFFUPD set to UPDATE) is always more efficient, since it only requires one write.
Indirect frame buffer writes are STRONGLY DISCOURAGED. There are better ways to write to memory (direct and through
the channel memory map) and there is limited flow control in the host. It is very easy to get into trouble with indirect frame
buffer writes.
BUF32B: Buffer up 32 bits of register data before sending it. Otherwise, register writes will
be sent as soon as they are received. Does not support byte writes in 16-bit host. Does
29 X not affect frame buffer writes.
0 = NOBUF
1 = BUF
0 = NONE
1 = BYTE16
2 = BYTE32
3 = WORD32
INDOFFUPD: Optionally disable the update of INDOFFSET when writing this register
0 X 0 = UPDATE
1 = NO_UPDATE
12.8.3 HOST1X_CHANNEL_INDCNT_0
For indirect frame buffer reads, each channel cannot issue more than NV_HOST1X_MAX_IND_FB_READS at once. The
read data must return and be written into the per-channel output FIFO before any additional reads can be issued.
12.8.4 HOST1X_CHANNEL_INDDATA_0
This register, when written, writes to the data to the INDOFFSET in INDOFF. For reads, a REGFNUMEMPTY number of 32-bit
values can be read before needing to poll FIFOSTAT again. The per-channel output FIFO (OUTFENTRIES) is readable via
this offset. A read of INDDATA will pop an entry off of the per-channel output FIFO.
12.8.5 HOST1X_CHANNEL_RAISE_0
The general-purpose channels have DMA and RAISE/REFCOUNT functionality.
Any raise values returned from a client module are converted to vectors and update the per-channel raise register. The RAISE
vector is also writable by the CPU. Any bits set in the RAISE field when written will be set in the RAISE register, allowing any
pending WAITs to continue.
12.8.6 HOST1X_CHANNEL_DMASTART_0
This register triggers a DMA fetch from the frame buffer for this channel, if the Put register does not equal the DMA Get
register.
12.8.7 HOST1X_CHANNEL_DMAPUT_0
This register triggers a DMA fetch from the frame buffer for this channel, if the PUT register does not equal the GET register.
This address is relative to the DMASTART base address. Does not support byte writes. All 4-byte data need to be
programmed.
12.8.8 HOST1X_CHANNEL_DMAGET_0
This register tracks the frame-buffer offset the DMA engine has read up to (incremented as entries are loaded from the
channels command buffer into the FIFO). This address is relative to the DMASTART base address.
12.8.9 HOST1X_CHANNEL_DMAEND_0
The boundary of illegal addresses (either end of push-buffer or end of physical memory). This is designed to prevent DMA
from prefetching illegal addresses. If DMA reaches this address before seeing a RESTART, it will stop. This would be a
software error condition.
12.8.10 HOST1X_CHANNEL_DMACTRL_0
DMAGETINIT: Reset the GET pointer to the value of DMAPUT when DMAGETRST is asserted.
DMAGETRST: Reset GET pointer to '0'. Useful for cleaning up crashed channels.
1 0x0 0 = DISABLE
1 = ENABLE
DMASTOP: Stop DMA from fetching on this channel. NOTE: a Command DMA channel
needs to be enabled for PIO gather to work.
0 0x1
0 = RUN
1 = STOP
12.8.11 HOST1X_CHANNEL_INDOFF2_0
The INDOFF and INDOFF2 registers (along with INDCNT and INDDATA) are used to indirectly read/write modules outside the
host. If AUTOINC is set, INDOFFSET increments by 4 on every access of INDDATA. REGFNUMEMPTY is polled to
determine when valid data can be read from INDDATA.
The INDOFF register has limited capability on chips with large memory maps. If the top bit of the memory address is >= 27, all
of memory cannot be addressed with INDOFF. In these cases, use INDOFF2 to set the offset while still using INDOFF to set
the other parameters. Always have INDOFFUPD set to NO_UPDATE in these cases. For register accesses, using INDOFF
(with INDOFFUPD set to UPDATE) is always more efficient, since it only requires one write.
Indirect frame-buffer writes are STRONGLY DISCOURAGED. There are better ways to write to memory (direct and through
the channel memory map) and there is limited flow control in the host. It is very easy to get into trouble with indirect frame-
buffer writes.
12.8.12 HOST1X_CHANNEL_TICKCOUNT_HI_0
This register holds the high 32 bits of the tick count value.
31:0 X TICKS_HI
12.8.13 HOST1X_CHANNEL_TICKCOUNT_LO_0
This register holds the low 32 bits of tick count value.
31:0 X TICKS_LO
12.8.14 HOST1X_CHANNEL_CHANNELCTRL_0
This register will be used for controlling some channel-related commands including enabling/disabling of the tick counter,
including enabling/disabling of Kernel command filtering from the gather buffers.
12.8.15 HOST1X_CHANNEL_PAYLOAD_0
Offset: 0x9c │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
Bit Reset Description
12.8.16 HOST1X_CHANNEL_STALLCTRL_0
Offset: 0xa0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
Bit Reset Description
0 0x0 ENABLE_CHANNEL_STALL
12.8.17 HOST1X_CHANNEL_STALLCOUNT_HI_0
Offset: 0xa4 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
Bit Reset Description
12.8.18 HOST1X_CHANNEL_STALLCOUNT_LO_0
Offset: 0xa8 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
Bit Reset Description
12.8.19 HOST1X_CHANNEL_XFERCTRL_0
Offset: 0xac │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
Bit Reset Description
0 0x0 ENABLE_CHANNEL_XFER
12.8.20 HOST1X_CHANNEL_CHANNEL_XFER_HI_0
Offset: 0xb0 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
12.8.21 HOST1X_CHANNEL_CHANNEL_XFER_LO_0
Offset: 0xb4 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
Bit Reset Description
12.8.22 HOST1X_CHANNEL_HOST1X_CHANNEL_SPARE_0
Offset: 0xb8 │ Read/Write: R/W │ Reset: 0x00ff0000 (0b00000000111111110000000000000000)
Bit Reset Description
12.9.1 HOST1X_SYNC_INTSTATUS_0
INTSTATUS - interrupt status contains the interrupt status for all of the client modules. These status bits are only status.
Writing '1' to them will not clear them. Software must clear the interrupt in the appropriate module, which should be reflected
here.
ISPB_INT:
26 X 0 = NOT_PENDING
1 = PENDING
ISP_INT:
24 X 0 = NOT_PENDING
1 = PENDING
DPAUX_INT:
23 X 0 = NOT_PENDING
1 = PENDING
SOR_INT:
21 X 0 = NOT_PENDING
1 = PENDING
TSEC_INT:
20 X 0 = NOT_PENDING
1 = PENDING
MSENC_INT:
19 X 0 = NOT_PENDING
1 = PENDING
DSIB_INT:
16 X 0 = NOT_PENDING
1 = PENDING
VIC_INT:
13 X 0 = NOT_PENDING
1 = PENDING
DSI_INT:
12 X 0 = NOT_PENDING
1 = PENDING
HDMI_INT:
10 X 0 = NOT_PENDING
1 = PENDING
DISPLAYB_INT:
9 X 0 = NOT_PENDING
1 = PENDING
DISPLAY_INT:
8 X 0 = NOT_PENDING
1 = PENDING
VI_INT:
2 X 0 = NOT_PENDING
1 = PENDING
HOST_INT:
0 X 0 = NOT_PENDING
1 = PENDING
12.9.2 HOST1X_SYNC_INTMASK_0
Contains a master interrupt mask for all interrupt signals. If the interface's MASK_ALL bit is disabled, no interrupts will be
triggered on that interface. This applies to only the non-syncpt interrupts.
CPU1_INT_MASK_ALL:
1 0x0 0 = DISABLE
1 = ENABLE
CPU0_INT_MASK_ALL:
0 0x0 0 = DISABLE
1 = ENABLE
12.9.3 HOST1X_SYNC_INTC0MASK_0
26 0x0 ISPB_INT_C0MASK:
0 = DISABLE
ISP_INT_C0MASK:
24 0x0 0 = DISABLE
1 = ENABLE
DPAUX_INT_C0MASK:
23 0x0 0 = DISABLE
1 = ENABLE
SOR_INT_C0MASK:
21 0x0 0 = DISABLE
1 = ENABLE
TSEC_INT_C0MASK:
20 0x0 0 = DISABLE
1 = ENABLE
MSENC_INT_C0MASK:
19 0x0 0 = DISABLE
1 = ENABLE
DSIB_INT_C0MASK:
16 0x0 0 = DISABLE
1 = ENABLE
VIC_INT_C0MASK:
13 0x0 0 = DISABLE
1 = ENABLE
DSI_INT_C0MASK:
12 0x0 0 = DISABLE
1 = ENABLE
HDMI_INT_C0MASK:
10 0x0 0 = DISABLE
1 = ENABLE
DISPLAYB_INT_C0MASK:
9 0x0 0 = DISABLE
1 = ENABLE
DISPLAY_INT_C0MASK:
8 0x0 0 = DISABLE
1 = ENABLE
VI_INT_C0MASK:
2 0x0 0 = DISABLE
1 = ENABLE
HOST_INT_C0MASK:
0 0x0 0 = DISABLE
1 = ENABLE
12.9.4 HOST1X_SYNC_INTC1MASK_0
ISPB_INT_C1MASK:
26 0x0 0 = DISABLE
1 = ENABLE
ISP_INT_C1MASK:
24 0x0 0 = DISABLE
1 = ENABLE
DPAUX_INT_C1MASK:
23 0x0 0 = DISABLE
1 = ENABLE
SOR_INT_C1MASK:
21 0x0 0 = DISABLE
1 = ENABLE
TSEC_INT_C1MASK:
20 0x0 0 = DISABLE
1 = ENABLE
MSENC_INT_C1MASK:
19 0x0 0 = DISABLE
1 = ENABLE
DSIB_INT_C1MASK:
16 0x0 0 = DISABLE
1 = ENABLE
VIC_INT_C1MASK:
13 0x0 0 = DISABLE
1 = ENABLE
DSI_INT_C1MASK:
12 0x0 0 = DISABLE
1 = ENABLE
HDMI_INT_C1MASK:
10 0x0 0 = DISABLE
1 = ENABLE
DISPLAYB_INT_C1MASK:
9 0x0 0 = DISABLE
1 = ENABLE
DISPLAY_INT_C1MASK:
8 0x0 0 = DISABLE
1 = ENABLE
VI_INT_C1MASK:
2 0x0 0 = DISABLE
1 = ENABLE
HOST_INT_C1MASK:
0 0x0 0 = DISABLE
1 = ENABLE
12.9.5 HOST1X_SYNC_HINTSTATUS_0
12.9.6 HOST1X_SYNC_HINTMASK_0
HINTSTATUS_EXT_INTMASK:
31 0x0 0 = DISABLE
1 = ENABLE
CSW_HOST1XW2MC_INTMASK:
29 0x0 0 = DISABLE
1 = ENABLE
RDMA_DATABUF_THOLD_INTMASK0:
19 0x0 0 = DISABLE
1 = ENABLE
RDMA_BUF_THOLD_INTMASK0:
18 0x0 0 = DISABLE
1 = ENABLE
RDMA_BUF_OFLOW_INTMASK0:
17 0x0 0 = DISABLE
1 = ENABLE
RDMA_INVAL_CLREQ_INTMASK:
16 0x0 0 = DISABLE
1 = ENABLE
UNIT2_ACTMON_INTRMASK:
13 0x0 0 = DISABLE
1 = ENABLE
UNIT1_ACTMON_INTRMASK:
12 0x0 0 = DISABLE
1 = ENABLE
WAIT_INTMASK11:
11 0x0 0 = DISABLE
1 = ENABLE
WAIT_INTMASK10:
10 0x0 0 = DISABLE
1 = ENABLE
WAIT_INTMASK9:
9 0x0
0 = DISABLE
WAIT_INTMASK8:
8 0x0 0 = DISABLE
1 = ENABLE
WAIT_INTMASK7:
7 0x0 0 = DISABLE
1 = ENABLE
WAIT_INTMASK6:
6 0x0 0 = DISABLE
1 = ENABLE
WAIT_INTMASK5:
5 0x0 0 = DISABLE
1 = ENABLE
WAIT_INTMASK4:
4 0x0 0 = DISABLE
1 = ENABLE
WAIT_INTMASK3:
3 0x0 0 = DISABLE
1 = ENABLE
WAIT_INTMASK2:
2 0x0 0 = DISABLE
1 = ENABLE
WAIT_INTMASK1:
1 0x0 0 = DISABLE
1 = ENABLE
WAIT_INTMASK0:
0 0x0 0 = DISABLE
1 = ENABLE
12.9.7 HOST1X_SYNC_HINTSTATUS_EXT_0
12.9.8 HOST1X_SYNC_HINTMASK_EXT_0
Offset: 0x2c │ Read/Write: R/W │ Reset: 0x00000000 (0b00xxxxxxxxxxxxxxxxxx000000000000)
IP_WRITE_INTMASK:
31 0x0 0 = DISABLE
1 = ENABLE
IP_READ_INTMASK:
30 0x0 0 = DISABLE
1 = ENABLE
CMDPP_ILLEGAL_OPCODE_INTMASK11: See
CMDPP_ILLEGAL_OPCODE_INTMASK0
11 0x0
0 = DISABLE
1 = ENABLE
CMDPP_ILLEGAL_OPCODE_INTMASK10: See
CMDPP_ILLEGAL_OPCODE_INTMASK0
10 0x0
0 = DISABLE
1 = ENABLE
12.9.9 HOST1X_SYNC_CF_SETUPDONE_0
Write to this register to trigger an update of the FIFO's pointers. ONLY DO THIS WHEN THE FIFO IS EMPTY.
12.9.10 HOST1X_SYNC_CMDPROC_CTRL_0
Offset: 0xa4 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxx0xx00x)
5 0x0 INTFC_CLKEN_OVR
2 0x0 GATHER_PARSE_DISABLED
1 0x0 DROP_ILLEGAL_OPCODES
12.9.11 HOST1X_SYNC_CMDPROC_STAT_0
Offset: 0xa8 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:0 X ILLEGAL_OPCODE
12.9.12 HOST1X_SYNC_CMDPROC_STOP_0
CH*_CMDPROC_STOP stops issuing commands from the command FIFO. This is useful to stop other channels when a
channel teardown is needed to prevent unwanted traffic from happening at the same time.
CH11_CMDPROC_STOP:
11 0x0 0 = RUN
1 = STOP
CH10_CMDPROC_STOP:
10 0x0 0 = RUN
1 = STOP
CH9_CMDPROC_STOP:
9 0x0 0 = RUN
1 = STOP
CH8_CMDPROC_STOP:
8 0x0 0 = RUN
1 = STOP
CH7_CMDPROC_STOP:
7 0x0 0 = RUN
1 = STOP
CH6_CMDPROC_STOP:
6 0x0 0 = RUN
1 = STOP
CH5_CMDPROC_STOP:
5 0x0 0 = RUN
1 = STOP
CH4_CMDPROC_STOP:
4 0x0 0 = RUN
1 = STOP
CH3_CMDPROC_STOP:
3 0x0 0 = RUN
1 = STOP
CH2_CMDPROC_STOP:
2 0x0 0 = RUN
1 = STOP
CH1_CMDPROC_STOP:
1 0x0 0 = RUN
1 = STOP
CH0_CMDPROC_STOP:
0 0x0 0 = RUN
1 = STOP
12.9.13 HOST1X_SYNC_CH_TEARDOWN_0
Channel teardown register. Tells the hardware that a channel has gone away. Will reset that channel's command FIFO and
release any locks it has in the arbiter. Will NOT reset that channel's output FIFO, which can be emptied by reading out all
remaining entries.
CH11_TEARDOWN:
11 X 0 = NO_ACTION
1 = TEARDOWN
CH10_TEARDOWN:
10 X 0 = NO_ACTION
1 = TEARDOWN
CH9_TEARDOWN:
9 X 0 = NO_ACTION
1 = TEARDOWN
CH8_TEARDOWN:
8 X 0 = NO_ACTION
1 = TEARDOWN
CH7_TEARDOWN:
7 X 0 = NO_ACTION
1 = TEARDOWN
CH6_TEARDOWN:
6 X 0 = NO_ACTION
1 = TEARDOWN
CH5_TEARDOWN:
5 X 0 = NO_ACTION
1 = TEARDOWN
CH4_TEARDOWN:
4 X 0 = NO_ACTION
1 = TEARDOWN
CH3_TEARDOWN:
3 X 0 = NO_ACTION
1 = TEARDOWN
CH2_TEARDOWN:
2 X 0 = NO_ACTION
1 = TEARDOWN
CH1_TEARDOWN:
1 X 0 = NO_ACTION
1 = TEARDOWN
CH0_TEARDOWN:
0 X 0 = NO_ACTION
1 = TEARDOWN
12.9.14 HOST1X_SYNC_MOD_TEARDOWN_0
Module teardown register. If a module is reset, the host needs to reset its state with respect to which channels own that
module. Whenever a module is reset, the corresponding teardown bit in this register should be written. Module teardown will
only work if the command FIFO and command processor are in a good state (the FIFO is empty of traffic for that channel and
the command processor is at an opcode boundary). If an entire channel needs to be reset, the CH_TEARDOWN register
should be used instead.
ISPB_TEARDOWN:
26 X 0 = NO_ACTION
1 = TEARDOWN
ISP_TEARDOWN:
24 X 0 = NO_ACTION
1 = TEARDOWN
DPAUX_TEARDOWN:
23 X 0 = NO_ACTION
1 = TEARDOWN
SOR_TEARDOWN:
21 X 0 = NO_ACTION
1 = TEARDOWN
TSEC_TEARDOWN:
20 X 0 = NO_ACTION
1 = TEARDOWN
MSENC_TEARDOWN:
19 X 0 = NO_ACTION
1 = TEARDOWN
DSIB_TEARDOWN:
16 X 0 = NO_ACTION
1 = TEARDOWN
VIC_TEARDOWN:
13 X 0 = NO_ACTION
1 = TEARDOWN
DSI_TEARDOWN:
12 X 0 = NO_ACTION
1 = TEARDOWN
HDMI_TEARDOWN:
10 X 0 = NO_ACTION
1 = TEARDOWN
DISPLAYB_TEARDOWN:
9 X 0 = NO_ACTION
1 = TEARDOWN
DISPLAY_TEARDOWN:
8 X 0 = NO_ACTION
1 = TEARDOWN
VI_TEARDOWN:
2 X 0 = NO_ACTION
1 = TEARDOWN
12.9.15 HOST1X_SYNC_DISPLAY_STATUS_0
The per-client status registers indicate which channel owns each client as well as the current working class for each client.
This is useful for determining each client's state with regard to granting context switches. _CURRCL is the current class ID for
that module.
25:16 X DISPLAY_CURRCL
12.9.16 HOST1X_SYNC_DISPLAYB_STATUS_0
Offset: 0xe0 │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X DISPLAYB_CURRCL
12.9.17 HOST1X_SYNC_ISP_STATUS_0
Offset: 0xe4 │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X ISP_CURRCL
12.9.18 HOST1X_SYNC_DSI_STATUS_0
Offset: 0xe8 │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X DSI_CURRCL
12.9.19 HOST1X_SYNC_HDMI_STATUS_0
Offset: 0xec │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X HDMI_CURRCL
12.9.20 HOST1X_SYNC_SOR_STATUS_0
Offset: 0xf0 │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X SOR_CURRCL
12.9.21 HOST1X_SYNC_DPAUX_STATUS_0
Offset: 0xf4 │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X DPAUX_CURRCL
12.9.22 HOST1X_SYNC_VI_STATUS_0
Offset: 0xf8 │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X VI_CURRCL
12.9.23 HOST1X_SYNC_DSIB_STATUS_0
Offset: 0xfc │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X DSIB_CURRCL
12.9.24 HOST1X_SYNC_VIC_STATUS_0
Offset: 0x100 │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X VIC_CURRCL
12.9.25 HOST1X_SYNC_MSENC_STATUS_0
Offset: 0x104 │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X MSENC_CURRCL
12.9.26 HOST1X_SYNC_TSEC_STATUS_0
Offset: 0x108 │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X TSEC_CURRCL
12.9.27 HOST1X_SYNC_ISPB_STATUS_0
Offset: 0x10c │ Read/Write: RO │ Reset: 0x0XXX0000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
25:16 X ISPB_CURRCL
12.9.28 HOST1X_SYNC_DIRECT_MODULE_CONFIG_0
Offset: 0x1a0 │ Read/Write: R/W │ Reset: 0x54000000 (0b010101000000000000000000000000xx)
12.9.29 HOST1X_SYNC_USEC_CLK_0
Number of host clocks needed to make a microsecond. Used for the DELAY host method. For example, if the host clock is
250 MHz, this register should be programmed to 250. If the host clock is 150 MHz, this register should be programmed to
150.
12.9.30 HOST1X_SYNC_CTXSW_TIMEOUT_CFG_0
When a channel writes to a new class on a client, it generates a context switch. To keep from continually switching contexts if
channels are addressing the same client, this register is used, so that the Host1x does not switch until the channel has either
received WAIT_CTXSW_CNT clocks before switching or the channel stops targeting the particular client. If two channels are
accessing two classes of a client, to guarantee a channel sending multiple commands for a class, this register can be used.
12.9.31 HOST1X_SYNC_INDREG_DMA_CTRL_0
Enable use of DMA engine to move data from indirect register interface to memory. ATTN_LVL controls flow between host and
DMA. DMA will not start a transfer until the set number of slots are full:
00 = 1 slot
01 = 4 slots
10 = 8 slots
AHBDMA_CHID: channel being used by indirect read for DMA (which chout FIFO to
3:0 0x0
monitor)
12.9.32 HOST1X_SYNC_CHANNEL_PRIORITY_0
Set channel priority for dual ring arbitration (hi/lo). Used in arbitrating MLOCKs.
HIPRI_CH11:
11 0x0 0 = DISABLE
1 = ENABLE
HIPRI_CH10:
10 0x0 0 = DISABLE
1 = ENABLE
HIPRI_CH9:
9 0x0 0 = DISABLE
1 = ENABLE
HIPRI_CH8:
8 0x0 0 = DISABLE
1 = ENABLE
HIPRI_CH7:
7 0x0 0 = DISABLE
1 = ENABLE
HIPRI_CH6:
6 0x0 0 = DISABLE
1 = ENABLE
HIPRI_CH5:
5 0x0 0 = DISABLE
1 = ENABLE
HIPRI_CH4:
4 0x0 0 = DISABLE
1 = ENABLE
HIPRI_CH3:
3 0x0 0 = DISABLE
1 = ENABLE
2 0x0 HIPRI_CH2:
0 = DISABLE
HIPRI_CH1:
1 0x0 0 = DISABLE
1 = ENABLE
HIPRI_CH0:
0 0x0 0 = DISABLE
1 = ENABLE
12.9.33 HOST1X_SYNC_CDMA_ASM_TIMEOUT_0
Timeout value determines how long the assembly logic will wait before it flushes data from the data FIFO to avoid head-of-line
blocking.
Note: Do not use a value of zero -- causes immediate flushing so no forward progress is made.
12.9.34 HOST1X_SYNC_CDMA_MISC_0
CDMA_DELAY_PUT
Delay put_addr updates. This can potentially increase MC performance slightly by gathering multiple consecutive put_addr
updates into 1 update, which reduces the amount of requests to the MC. In addition, it can be used to cover a race condition
where a write to memory has not completed before CDMA starts fetching the data. But in this case, the counter has to be set
to a high value, which *will* affect performance.
CDMA_SIMPLE_PREFETCH
Reduce per-channel requests to 1 every 3 cycles. This can reduce performance in 2 ways:
The memory request FIFO will fill up slightly slower, but the impact will be minimal.
It will cause the channel arbiter to switch to other channels when they have a request available, which will reduce
locality. On the plus side, it has much less nasty corner cases.
CDMA_PUT_SYNC_DISABLE
CDMA_EN_STATS
Enable statistics counters.
This allows us to get an idea how efficient the CDMA really is when there are multiple push-buffers active at the same time.
12 0x0 CDMA_EN_STATS
10 0x0 CDMA_CLKEN_OVR
9 0x0 CDMA_PUT_SYNC_DISABLE
8 0x0 CDMA_SIMPLE_PREFETCH
12.9.35 HOST1X_SYNC_IP_BUSY_TIMEOUT_0
Offset: 0x1bc │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 IP_BUSY_TIMEOUT: Number of busy cycles before requesting a retry. 0 = disabled
12.9.36 HOST1X_SYNC_IP_READ_TIMEOUT_ADDR_0
Offset: 0x1c0 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
12.9.37 HOST1X_SYNC_IP_WRITE_TIMEOUT_ADDR_0
Offset: 0x1c4 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
12.9.38 HOST1X_SYNC_MCCIF_THCTRL_0
Memory write client FIFO status. Reads out the available 128-bit entries. If writing through the buffered frame buffer write
region, writes are accumulated up to 128 bits before being flushed, so 10 entries can mean up to 40 writes. Memory client
high-priority threshold control register. Sets the threshold of when the client becomes high priority.
5:0 RO X CSW_HOST1XW_FIFOSTAT
12.9.39 HOST1X_SYNC_HC_MCCIF_FIFOCTRL_0
Memory Client Interface FIFO Control (where applicable) and Clock Gating Control Register
Note: This FIFO timing aspects of this register are no longer supported, but are retained for software
compatibility.
The clock override/ovr_mode fields of this register control the 2nd-level clock gating for the client and MC side of the MCCIF.
All clock gating is enabled by default.
A '1' written to the rclk/wclk override field results in one of the following:
With wclk/rclk override mode = LEGACY, the clock reverts to legacy mode of operation where the clock is on
whenever the client clock is enabled.
With wclk/rclk override mode = ON, the clock is always on inside the MCCIF and PC.
A '1' written to the cclk override field keeps the client's clock always on inside the MCCIF.
HC_RCLK_OVR_MODE:
20 LEGACY 0 = LEGACY
1 = ON
HC_WCLK_OVR_MODE:
19 LEGACY 0 = LEGACY
1 = ON
18 0x0 HC_CCLK_OVERRIDE
17 0x0 HC_RCLK_OVERRIDE
16 0x0 HC_WCLK_OVERRIDE
HC_MCCIF_RDCL_RDFAST:
3 DISABLE 0 = DISABLE
1 = ENABLE
HC_MCCIF_WRMC_CLLE2X:
2 DISABLE 0 = DISABLE
1 = ENABLE
HC_MCCIF_RDMC_RDFAST:
1 DISABLE 0 = DISABLE
1 = ENABLE
HC_MCCIF_WRCL_MCLE2X:
0 DISABLE 0 = DISABLE
1 = ENABLE
12.9.40 HOST1X_SYNC_TIMEOUT_WCOAL_HC_0
Note: Write coalescing is no longer supported by the MCCIF clients. Registers are retained for software
compatibility but are not used by the hardware.
12.9.41 HOST1X_SYNC_MLOCK_0_0
MLOCK Registers
MLOCK is 1 whenever someone holds the lock, and is 0 otherwise. MLOCK is normally set and cleared using the host
methods ACQUIRE_MLOCK and RELEASE_MLOCK.
If a CPU wants to acquire a lock, then it reads this register. If the value returned is 0, it has successfully acquired the MLOCK.
A return value of 1 indicates that the acquire failed. At any time, the CPU can write 0 to MLOCK, releasing the MLOCK (note
that hardware does not check if the CPU owned the lock). If the CPU writes a 1 to MLOCK, this is undefined and is ignored by
the hardware (a NOP). Use MLOCK_OWNER to read the status of a lock (since reading MLOCK itself has a side effect).
0 0x0 MLOCK_0
12.9.42 HOST1X_SYNC_MLOCK_1_0
Offset: 0x2c4 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_1
12.9.43 HOST1X_SYNC_MLOCK_2_0
Offset: 0x2c8 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_2
12.9.44 HOST1X_SYNC_MLOCK_3_0
Offset: 0x2cc │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_3
12.9.45 HOST1X_SYNC_MLOCK_4_0
Offset: 0x2d0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_4
12.9.46 HOST1X_SYNC_MLOCK_5_0
Offset: 0x2d4 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_5
12.9.47 HOST1X_SYNC_MLOCK_6_0
Offset: 0x2d8 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_6
12.9.48 HOST1X_SYNC_MLOCK_7_0
Offset: 0x2dc │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_7
12.9.49 HOST1X_SYNC_MLOCK_8_0
Offset: 0x2e0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_8
12.9.50 HOST1X_SYNC_MLOCK_9_0
Offset: 0x2e4 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_9
12.9.51 HOST1X_SYNC_MLOCK_10_0
Offset: 0x2e8 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_10
12.9.52 HOST1X_SYNC_MLOCK_11_0
Offset: 0x2ec │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_11
12.9.53 HOST1X_SYNC_MLOCK_12_0
Offset: 0x2f0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_12
12.9.54 HOST1X_SYNC_MLOCK_13_0
Offset: 0x2f4 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_13
12.9.55 HOST1X_SYNC_MLOCK_14_0
Offset: 0x2f8 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_14
12.9.56 HOST1X_SYNC_MLOCK_15_0
Offset: 0x2fc │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 MLOCK_15
12.9.57 HOST1X_SYNC_MLOCK_OWNER_0_0
MLOCK_OWNER is a read-only status for MLOCK. When MLOCK_*_OWNS are all zeros, it indicates that the MLOCK is free
(zero). When MLOCK has been acquired (set), then one of MLOCK_*_OWNS will be non-zero.
Either bit 0 or 1 will be set -- indicating whether a channel or a CPU has acquired the MLOCK. If a channel owns the MLOCK,
then the channel number is given by the MLOCK_OWNER_CHID field.
11:8 X MLOCK_OWNER_CHID_0
1 X MLOCK_CPU_OWNS_0
0 X MLOCK_CH_OWNS_0
12.9.58 HOST1X_SYNC_MLOCK_OWNER_1_0
Offset: 0x344 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_1
1 X MLOCK_CPU_OWNS_1
0 X MLOCK_CH_OWNS_1
12.9.59 HOST1X_SYNC_MLOCK_OWNER_2_0
Offset: 0x348 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_2
1 X MLOCK_CPU_OWNS_2
0 X MLOCK_CH_OWNS_2
12.9.60 HOST1X_SYNC_MLOCK_OWNER_3_0
Offset: 0x34c │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_3
1 X MLOCK_CPU_OWNS_3
0 X MLOCK_CH_OWNS_3
12.9.61 HOST1X_SYNC_MLOCK_OWNER_4_0
Offset: 0x350 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_4
1 X MLOCK_CPU_OWNS_4
0 X MLOCK_CH_OWNS_4
12.9.62 HOST1X_SYNC_MLOCK_OWNER_5_0
Offset: 0x354 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_5
1 X MLOCK_CPU_OWNS_5
0 X MLOCK_CH_OWNS_5
12.9.63 HOST1X_SYNC_MLOCK_OWNER_6_0
Offset: 0x358 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_6
1 X MLOCK_CPU_OWNS_6
0 X MLOCK_CH_OWNS_6
12.9.64 HOST1X_SYNC_MLOCK_OWNER_7_0
Offset: 0x35c │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_7
1 X MLOCK_CPU_OWNS_7
0 X MLOCK_CH_OWNS_7
12.9.65 HOST1X_SYNC_MLOCK_OWNER_8_0
Offset: 0x360 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_8
1 X MLOCK_CPU_OWNS_8
0 X MLOCK_CH_OWNS_8
12.9.66 HOST1X_SYNC_MLOCK_OWNER_9_0
Offset: 0x364 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_9
1 X MLOCK_CPU_OWNS_9
0 X MLOCK_CH_OWNS_9
12.9.67 HOST1X_SYNC_MLOCK_OWNER_10_0
Offset: 0x368 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_10
1 X MLOCK_CPU_OWNS_10
0 X MLOCK_CH_OWNS_10
12.9.68 HOST1X_SYNC_MLOCK_OWNER_11_0
Offset: 0x36c │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_11
1 X MLOCK_CPU_OWNS_11
0 X MLOCK_CH_OWNS_11
12.9.69 HOST1X_SYNC_MLOCK_OWNER_12_0
Offset: 0x370 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_12
1 X MLOCK_CPU_OWNS_12
0 X MLOCK_CH_OWNS_12
12.9.70 HOST1X_SYNC_MLOCK_OWNER_13_0
Offset: 0x374 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_13
1 X MLOCK_CPU_OWNS_13
0 X MLOCK_CH_OWNS_13
12.9.71 HOST1X_SYNC_MLOCK_OWNER_14_0
Offset: 0x378 │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_14
1 X MLOCK_CPU_OWNS_14
0 X MLOCK_CH_OWNS_14
12.9.72 HOST1X_SYNC_MLOCK_OWNER_15_0
Offset: 0x37c │ Read/Write: RO │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
11:8 X MLOCK_OWNER_CHID_15
1 X MLOCK_CPU_OWNS_15
0 X MLOCK_CH_OWNS_15
12.9.73 HOST1X_SYNC_MLOCK_ERROR_0_0
If a channel attempts to release an MLOCK that it does not own, then the release has no effect on MLOCK, but the
corresponding error bit is set (this includes releasing an MLOCK owned by no one).
15 0x0 MLOCK_ERROR_15
14 0x0 MLOCK_ERROR_14
13 0x0 MLOCK_ERROR_13
12 0x0 MLOCK_ERROR_12
11 0x0 MLOCK_ERROR_11
10 0x0 MLOCK_ERROR_10
9 0x0 MLOCK_ERROR_9
8 0x0 MLOCK_ERROR_8
7 0x0 MLOCK_ERROR_7
6 0x0 MLOCK_ERROR_6
5 0x0 MLOCK_ERROR_5
4 0x0 MLOCK_ERROR_4
3 0x0 MLOCK_ERROR_3
2 0x0 MLOCK_ERROR_2
1 0x0 MLOCK_ERROR_1
0 0x0 MLOCK_ERROR_0
12.9.74 HOST1X_SYNC_SYNCPT_BASE_n_0
Syncpt base registers are used by wait_syncpt_base method. The wait will be released when SYNCPT[indx] >=
(BASE[base_indx] + offset), where indx, base_indx, and offset are supplied by the wait method.
31:0 X BASE_n
12.10.1 NV_CLASS_HOST_INCR_SYNCPT_0
All Classes have the INCR_SYNCPT method. For host, this method, immediately increments SYNCPT[indx], irrespective of
the condition. Note that INCR_SYNCPT_CNTRL and INCR_SYNCPT_ERROR are included for consistency with host clients,
but writes to INCR_SYNCPT_CNTRL have no effect on the operation of Host1x, and because there are no condition FIFOs to
overflow, INCR_SYNCPT_ERROR will never be set.
Offset: 0x0 │ Byte Offset: 0x0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxx0000000000000000)
12.10.2 NV_CLASS_HOST_INCR_SYNCPT_CNTRL_0
Offset: 0x1 │ Byte Offset: 0x4 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxx0xxxxxxx0)
12.10.3 NV_CLASS_HOST_INCR_SYNCPT_ERROR_0
Offset: 0x2 │ Byte Offset: 0x8 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
COND_STATUS: COND_STATUS[COND] is set if the FIFO for COND overflows. This bit
31:0 X
is sticky and will remain set until cleared. Cleared by writing 1.
12.10.4 NV_CLASS_HOST_WAIT_SYNCPT_0
Wait on syncpt method.
The comparison takes into account the possibility of wrapping. Note that more bits are allocated for index and threshold than
may be used in an implementation. Use NV_HOST1X_SYNCPT_NB_PTS for the number of syncpts, and
NV_HOST1X_SYNCPT_THRESH_WIDTH for the number of bits used by the comparison.
Offset: 0x8 │ Byte Offset: 0x20 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:24 X INDX
23:0 X THRESH
12.10.5 NV_CLASS_HOST_WAIT_SYNCPT_BASE_0
Wait on syncpt method using base register.
The comparison takes into account the possibility of wrapping. Note that more bits are allocated for INDX and BASE_INDX
than may be used in an implementation. Use NV_HOST1X_SYNCPT_NB_PTS for the number of syncpts, Use
NV_HOST1X_SYNCPT_NB_BASES for the number of syncpt_bases, and NV_HOST1X_SYNCPT_THRESH_WIDTH for the
number of bits used by the comparison If NV_HOST1X_SYNCPT_THRESH_WIDTH is greater than 16, the offset is sign-
extended before it is added to SYNCPT_BASE.
Offset: 0x9 │ Byte Offset: 0x24 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:24 X INDX
23:16 X BASE_INDX
15:0 X OFFSET
12.10.6 NV_CLASS_HOST_WAIT_SYNCPT_INCR_0
Wait on syncpt increment method.
Command dispatch will stall until the next time that SYNCPT[indx] is incremented.
Note that more bits are allocated for INDX than may be used in an implementation. Use NV_HOST1X_SYNCPT_NB_PTS for
the number of syncpts.
Offset: 0xa │ Byte Offset: 0x28 │ Read/Write: R/W │ Reset: 0xXX000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:24 X INDX
12.10.7 NV_CLASS_HOST_LOAD_SYNCPT_BASE_0
Load syncpt base method.
SYNCPT_BASE[indx] = value
Offset: 0xb │ Byte Offset: 0x2c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:24 X BASE_INDX
23:0 X VALUE
12.10.8 NV_CLASS_HOST_INCR_SYNCPT_BASE_0
Increment syncpt base method.
SYNCPT_BASE[indx] += offset
Offset: 0xc │ Byte Offset: 0x30 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:24 X BASE_INDX
23:0 X OFFSET
12.10.9 NV_CLASS_HOST_CLEAR_0
Clear method. Any bits set in VECTOR will be cleared in the channel's RAISE vector.
Offset: 0xd │ Byte Offset: 0x34 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X VECTOR
12.10.10 NV_CLASS_HOST_WAIT_0
Wait method. Command dispatch will stall until any of the bits set in VECTOR become set in the channel's RAISE vector.
Offset: 0xe │ Byte Offset: 0x38 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X VECTOR
12.10.11 NV_CLASS_HOST_WAIT_WITH_INTR_0
Wait with Interrupt method. Identical to the WAIT method except an interrupt will be triggered when the WAIT requirement is
satisfied. This is obsolete and preserved here only for completeness.
Offset: 0xf │ Byte Offset: 0x3c │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X VECTOR
12.10.12 NV_CLASS_HOST_DELAY_USEC_0
Delay number of microseconds. Command dispatch will stall until the number of microseconds indicated in NUSEC has
passed. The timing of microseconds is controlled by the USEC_CLK register.
Offset: 0x10 │ Byte Offset: 0x40 │ Read/Write: R/W │ Reset: 0x000XXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
12.10.13 NV_CLASS_HOST_TICKCOUNT_HI_0
This register value will initialize the high 32 bits of the tick count value in the host clock counter.
Offset: 0x11 │ Byte Offset: 0x44 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
12.10.14 NV_CLASS_HOST_TICKCOUNT_LO_0
This register value will initialize the low 32 bits of the tick count value in the host clock counter.
Offset: 0x12 │ Byte Offset: 0x48 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
12.10.15 NV_CLASS_HOST_TICKCTRL_0
This register write enables the tick counter on the host clock to start counting.
Offset: 0x13 │ Byte Offset: 0x4c │ Read/Write: R/W │ Reset: 0x0000000X (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
12.10.16 NV_CLASS_HOST_INDCTRL_0
Indirect Addressing
These registers (along with INDDATA) are used to indirectly read/write either register or memory. Host registers are not
accessible using this interface. If AUTOINC is set, INDOFFSET increments by 4 on every access of INDDATA.
Either INDCTRL/INDOFF2 or INDOFF can be used, but INDOFF may not be able to address all memory in chips with large
memory maps. The redundant bits in INDCTRL and INDOFF are shared, so writing either offset sets those bits.
Note: The following restrictions apply to the use of indirect memory writes:
• At initialization time, do a dummy indirect write (with all byte enables set to zero)
• Dedicate an MLOCK for indirect memory writes, then before a channel issues a
set of indirect memory writes it must acquire this MLOCK; after the writes have
been issued, the MLOCK is released -- this will restrict the use of indirect
memory writes to a single channel at a time.
Offset: 0x2b │ Byte Offset: 0xac │ Read/Write: R/W │ Reset: 0xXX00000X (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
INDBE: Byte enables. Will apply to all subsequent data transactions. Not applicable for
31:28 X
reads.
RWN: Read/write
0 X 0 = WRITE
1 = READ
12.10.17 NV_CLASS_HOST_INDOFF2_0
Offset: 0x2c │ Byte Offset: 0xb0 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
12.10.18 NV_CLASS_HOST_INDOFF_0
Offset: 0x2d │ Byte Offset: 0xb4 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
INDBE: Byte enables. Will apply to all subsequent data transactions. Not applicable for
31:28 X
reads.
RWN: Read/write
0 X 0 = WRITE
1 = READ
12.10.19 NV_CLASS_HOST_INDDATA_0
These registers, when written, either write to the data to the INDOFFSET in INDOFF or trigger a read of the offset at
INDOFFSET. This is an array of 31 identical register entries; the register fields below apply to each entry.
12.10.20 NV_CLASS_HOST_LOAD_SYNCPT_PAYLOAD_32_0
Offset: 0x4e │ Byte Offset: 0x138 │ Read/Write: R/W │ Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X CHANNEL_SYNCPT_PAYLOAD
12.10.21 NV_CLASS_HOST_STALLCTRL_0
Offset: 0x4f │ Byte Offset: 0x13c │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0X0 ENABLE
12.10.22 NV_CLASS_HOST_WAIT_SYNCPT_32_0
Offset: 0x50 │ Byte Offset: 0x140 │ Read/Write: R/W │ Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
7:0 X INDX
12.10.23 NV_CLASS_HOST_WAIT_SYNCPT_BASE_32_0
Offset: 0x51 │ Byte Offset: 0x144 │ Read/Write: R/W │ Reset: 0x0000XXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
15:8 X BASE_INDX
7:0 X INDX
12.10.24 NV_CLASS_HOST_LOAD_SYNCPT_BASE_32_0
Offset: 0x52 │ Byte Offset: 0x148 │ Read/Write: R/W │ Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
7:0 X INDX
12.10.25 NV_CLASS_HOST_INCR_SYNCPT_BASE_32_0
Offset: 0x53 │ Byte Offset: 0x14c │ Read/Write: R/W │ Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
7:0 X INDX
12.10.26 NV_CLASS_HOST_STALLCOUNT_HI_0
Offset: 0x54 │ Byte Offset: 0x150 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
12.10.27 NV_CLASS_HOST_STALLCOUNT_LO_0
Offset: 0x55 │ Byte Offset: 0x154 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
12.10.28 NV_CLASS_HOST_XFERCTRL_0
Offset: 0x56 │ Byte Offset: 0x158 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0X0 ENABLE
12.10.29 NV_CLASS_HOST_CHANNEL_XFER_HI_0
Offset: 0x57 │ Byte Offset: 0x15c │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
12.10.30 NV_CLASS_HOST_CHANNEL_XFER_LO_0
Offset: 0x58 │ Byte Offset: 0x160 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
12.11.1 HOST1X_PROTCHANNEL_FIFOSTAT_0
CFNUMEMPTY is the number of free slots available in the per-channel command FIFO (needed for PIO or polling for
completion of a wait).
28:24 X OUTFENTRIES: Number of entries available for reading in this channel's output FIFO
12.11.2 HOST1X_PROTCHANNEL_INDOFF_0
The INDOFF and INDOFF2 registers (along with INDCNT and INDDATA) are used to indirectly read/write modules outside the
host. If AUTOINC is set, INDOFFSET increments by 4 on every access of INDDATA. REGFNUMEMPTY is polled to
determine when valid data can be read from INDDATA.
The INDOFF register has limited capability on chips with large memory maps. If the top bit of the memory address is >= 27, all
of memory cannot be addressed with INDOFF. In these cases, use INDOFF2 to set the offset while still using INDOFF to set
the other parameters. Always have INDOFFUPD set to NO_UPDATE in these cases. For register accesses, using INDOFF
(with INDOFFUPD set to UPDATE) is always more efficient, since it only requires one write.
Indirect frame buffer writes are STRONGLY DISCOURAGED. There are better ways to write to memory (direct and through
the channel memory map) and there is limited flow control in the host. It is very easy to get into trouble with indirect frame
buffer writes.
BUF32B: Buffer up 32 bits of register data before sending it. Otherwise, register writes will
be sent as soon as they are received. Does not support byte writes in 16-bit host. Does
29 X not affect frame buffer writes.
0 = NOBUF
1 = BUF
0 = NONE
1 = BYTE16
2 = BYTE32
3 = WORD32
INDOFFUPD: Optionally disable the update of INDOFFSET when writing this register
0 X 0 = UPDATE
1 = NO_UPDATE
12.11.3 HOST1X_PROTCHANNEL_INDCNT_0
For indirect frame buffer reads, each channel cannot issue more than NV_HOST1X_MAX_IND_FB_READS at once. The
read data must return and be written into the per-channel output FIFO before any additional reads can be issued.
12.11.4 HOST1X_PROTCHANNEL_INDDATA_0
This register, when written, writes the data to the INDOFFSET in INDOFF. For reads, a REGFNUMEMPTY number of 32-bit
values can be read before needing to poll FIFOSTAT again.
The per-channel output FIFO (OUTFENTRIES) is readable via this offset. A read of INDDATA will pop an entry off of the per-
channel output FIFO.
12.11.5 HOST1X_PROTCHANNEL_INDOFF2_0
Note: This spec file contains additions to the "common" registers that cannot be put in the common section,
otherwise all of the other registers will shift.
The INDOFF and INDOFF2 registers (along with INDCNT and INDDATA) are used to indirectly read/write modules outside the
host. If AUTOINC is set, INDOFFSET increments by 4 on every access of INDDATA. REGFNUMEMPTY is polled to
determine when valid data can be read from INDDATA.
The INDOFF register has limited capability on chips with large memory maps. If the top bit of the memory address is >= 27, all
of memory cannot be addressed with INDOFF. In these cases, use INDOFF2 to set the offset while still using INDOFF to set
the other parameters. Always have INDOFFUPD set to NO_UPDATE in these cases. For register accesses, using INDOFF
(with INDOFFUPD set to UPDATE) is always more efficient, since it only requires one write.
Indirect frame buffer writes are STRONGLY DISCOURAGED. There are better ways to write to memory (direct and through
the channel memory map) and there is limited flow control in the host. It is very easy to get into trouble with indirect frame
buffer writes.
12.11.6 HOST1X_PROTCHANNEL_TICKCOUNT_HI_0
This register holds the high 32 bits of the tick count value
31:0 X TICKS_HI
12.11.7 HOST1X_PROTCHANNEL_TICKCOUNT_LO_0
This register holds the low 32 bits of the tick count value
31:0 X TICKS_LO
12.11.8 HOST1X_PROTCHANNEL_CHANNELCTRL_0
This register will be used for controlling some channel-related commands including enabling/disabling of the tick counter and
enabling/disabling of Kernel command filtering from the gather buffers.
12.11.9 HOST1X_PROTCHANNEL_PAYLOAD_0
Offset: 0x9c │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
12.11.10 HOST1X_PROTCHANNEL_STALLCTRL_0
Offset: 0xa0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 ENABLE_CHANNEL_STALL
12.11.11 HOST1X_PROTCHANNEL_STALLCOUNT_HI_0
Offset: 0xa4 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
12.11.12 HOST1X_PROTCHANNEL_STALLCOUNT_LO_0
Offset: 0xa8 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
12.11.13 HOST1X_PROTCHANNEL_XFERCTRL_0
Offset: 0xac │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 0x0 ENABLE_CHANNEL_XFER
12.11.14 HOST1X_PROTCHANNEL_CHANNEL_XFER_HI_0
Offset: 0xb0 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
12.11.15 HOST1X_PROTCHANNEL_CHANNEL_XFER_LO_0
Offset: 0xb4 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
12.11.16 HOST1X_PROTCHANNEL_HOST1X_CHANNEL_SPARE_0
Offset: 0xb8 │ Read/Write: R/W │ Reset: 0x00ff0000 (0b00000000111111110000000000000000)
12.11.17 HOST1X_PROTCHANNEL_TICKCOUNT_THRESHOLD_HI_0
This register holds the high 32 bits of the tick count threshold value
31:0 X TICKS_THRESHOLD_HI
12.11.18 HOST1X_PROTCHANNEL_TICKCOUNT_THRESHOLD_LO_0
This register holds the low 32 bits of the tick count threshold value
31:0 X TICKS_THRESHOLD_LO
12.11.19 HOST1X_PROTCHANNEL_TICKCOUNT_THRESHOLD_CTRL_0
Offset: 0xc4 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
The compositor implements much of the DirectX Video Acceleration 2.0 Enhanced Video Processor specification, including
deinterlacing, scaling, color conversion, proc-amp, and compositing for up to 5 input surfaces. It supports advanced features
like histogram correction, gamma correction, and non-linear color enhancement.
13.1 Features
The VIC implements the following features:
Deinterlacing
Inverse Teleciné
Scale
Color Conversion
Memory Format Conversion
Blend/Composite
Stereo Pixel Interleave
Rotation
imem
xt bus host1x
uctl code,
Tegra HRD
uctl data Host Host
DMA uctl
intrpt I/F Interface host1x
dmem
HRD
(THI)
csb irq
irq
<config>
config bus
to all modules
FETCH
to Tegra
Tegra
MC Frame Inverse Telecine (IVTC)
Buffer Temp. Cad.
I/F noise flt. detect
(TFBIF)
SCALE
De- Y- X-
interlace Scaling Scaling
color matrix
BLEND
CConv
Buffer
output
surface Output CConv &
Blending
Buffer ProcAmp
During main processing, the fetch control breaks the output surface up into 64x16 pixel tiles and processes those individually.
For each tile, the fetch unit loops over all input surfaces.
When processing each tile, 64*16+n pixels need to be fetched, where n is the extra padding needed for scaling and
deinterlacing. Each tile being fetched is stored in the Surface Cache. This cache holds 128 entries of 256 bytes.
The first pass does noise reduction and motion buffer updates. It also calculates the weave and artifact counts used for the
IVTC decision. The final decision for IVTC is done in Falcon microcode.
The second pass combines the updated motion buffer and the previous motion buffer (which has a different parity) and
combines them for DiSi1 deinterlacing during the main processing pass.
The first block deinterlaces the input. The deinterlacing modes supported are DiSi1, BOB, and WEAVE. Weave is
only used on progressive content or when inverse telecine detected a cadence.
The second block scales the data in the vertical direction producing at most 16 lines of output to the next stage.
The third block scales the data in the horizontal direction producing at most 64 pixels of output.
The first block buffers the incoming data and converts from any input order into interleaved pixel order (either ARGB
or AYUV).
The second block performs all color conversion tasks.
The third block blends data into the output buffer. This stage is also used during preprocessing.
The fourth block is an input-output DMA that can read original buffer data from the memory system and write back the
final blended result. The reading is only used during preprocessing.
13.3 Functionality
13.3.1 Slots
The VIC supports up to five different input pictures that can be composited on to a single surface.
Support for five input pictures enables composition of multiple video streams from Blu-ray video content in a single pass:
Background
Primary Video
Secondary Video
Presentation Graphics
Interactive Graphics
Each slot has a state that is specified through the config structure. Control parameters, such as the input formats,
deinterlacing, scaling factors, clipping, color-space conversion, are independently set per input surface. All slots support the
same functionality.
During the composition stage, the slots are blended in ascending order (that is, the output of slot1 will be blended onto slot 0,
the output of slot 2 is blended on to slot 1, etc.).
Each slot can be programmed to access multiple surfaces. The number of surfaces used depends on the type of slot input
(e.g., interlaced versus progressive), input format (e.g., packed versus planar color formats), and also on the type of
processing (e.g., temporal noise reduction versus cadence detection versus deinterlacing).
Output Surface
Clear Rect 0
Clear Rect 1
Slot1 Destination Rect
Clear Rect 2
Target Rect
Clear Rect 3
The maximum dimension of any image on the input or output sides of the VIC is 16384 pixels. The upper two bits of any 14-bit
surface dimension will just be ignored.
Via the SurfaceListSurfaceStruct config structures, the dimensions of each input slot surface can be defined along with the
pixel and memory format types. Note that the pixel format type must also be specified in the SurfaceCache0Struct config
structure. A source rectangle defines the region of pixels of the input slot surface that will contribute to the composition of the
output surface, and a destination rectangle defines the region of the output surface that is affected by a given input slot.
Together, the source and destination rectangle parameters specify the scaling ratios desired. Each slot can also dictate how
pixel data is laid out in each surface cache entry by specifying the amount of pixel data, i.e., the number of bytes wide,
logically represented by each cache entry; this provides flexibility in reducing the memory overfetch associated with fetch of
surfaces under various use cases (e.g., scaling ratios, deinterlacing modes).
Via the Blending0Struct config structure, the dimensions of the output surface can be defined along with the pixel and memory
format types. Via the Blending0Struct and the SurfaceList0Struct config structs, a target rectangle can also be defined to
restrict the pixel processing output to a certain rectangle in the output surface. A programmable color can also be set to fill the
background of the target rectangle.
The VIC allows the programming of clear rectangles that prevent the fetch of pixels from specific rectangular regions of input
slots. The use of the clear rectangles can be used to reduce redundant pixel fetches, for example, if an opaque surface is
known to occlude a layer below it, a clear rectangle can be specified to prevent fetching of pixels from the occluded region of
the lower layer. Up to eight clear rectangles are specified via the SurfaceListClearRectStruct config structs, and per-slot clear
rect mask enables are specified via the SurfacelList0Struct config struct, Clear rectangle coordinates are specified relative to
the output surface base.
With the addition of the sub-pixel source rectangle feature, source rectangle coordinates are specified in the config structure in
a U14.16 format, allowing the source rectangle to be specified at a sub-pixel resolution. Destination, target, and clear
rectangles coordinates are pixel aligned.
Pitch Linear
Block Linear (16Bx2 kind with sector ordering)
- 64x8 byte GOB format with 16x2 byte sectors
- Contiguous 64B atoms are laid out as 32x2 byte blocks
The VIC Surface Cache supports the above memory formats on input when fetching pixel data from memory.
The VIC Output Buffer supports the above memory formats on input when reading background image data when pre-
processing inverse telecine data from memory, and on the output side when writing composited image data back to memory.
Encoding
Surface Kind Enumeration
(Four Bits)
BLK_KIND_PITCH 0x0
BLK_KIND_GENERIC_16Bx2_TEGRA 0x1
To fully support the Block Linear format, block height should be parameterizable. The following set of enumerations is valid.
ONE_GOB 1 0
TWO_GOBS 2 1
FOUR_GOBS 4 2
EIGHT_GOBS 8 3
SIXTEEN_GOBS 16 4
THIRTYTWO_GOBS 32 5
The output buffer can mirror pixels in the X and Y directions within each output tile. This ability in addition to the fetch control
changes mentioned above gives the ability to flip the contents of the entire Target rectangle about its axis.
The output buffer also supports transposition of the Target Rectangle. This ability when combined with the target rectangle
flips described above gives the ability to rotate images by any multiple of 90 degrees.
Rotation must be done in the pipeline after deinterlacing because the deinterlacer assumes a normal orientation of the input
fields (interlaced field lines run horizontal). Rotation of the image prior to deinterlacing will make the deinterlacer ineffective.
The programmed starting address of the source and destination rectangles will remain at the upper left corner of the unit. The
‘Source Image’ diagrammed below shows the logical tile traversal pattern as the input rectangle traverses the VIC unit (tiles
are read in raster order from left to right, then top to bottom), and the destination rectangle diagrammed below shows the
expected transformations when the programmer specifies the combination of flipX, flipY, and transposeXY transformations
available to be applied to the output rectangle.
Source Image
Mirror on 315 Degree Axis 270 Degree Rotation 90 Degree Rotation Mirror on 45 Degree Axis
180-degree rotation 0 1 1
270-degree rotation 1 1 0
90-degree rotation 1 0 1
Surface mirroring (FlipX/FlipY) is accomplished via programming of the SurfaceList0Struct, FetchControl0Struct, and the
Blending0Struct config structures. Surface transposition is accomplished via programming of the OutputTranspose field of the
Blending0Struct config structure.
The table below shows the output image for a certain surface composition and how the output transformations affect the final
output. The results of the transformations are summarized in the rules below.
1. The output surface parameters (SurfaceWidth/Height, LumaWidth/Height, ChromaWidth/Height) are not affected by
any of the transformations. It is software’s responsibility to allocate a large enough buffer so that the target
rectangle fits within the output surface even after transformation.
2. The target rectangle position in the output surface does NOT change when output flips (in X or Y) are enabled.
However, the position of the target rectangle is transposed when OutputTranspose is enabled.
3. When output flips are enabled, the entire contents of the target rectangle are flipped, including all ClearRects and
DestinationRects and their contents. The axis of the flip is the axis of the TargetRectangle.
4. When OutputTranspose is enabled, the position of the target rectangle is transposed, as well as all of its contents
(including all clear/destination rectangles).
5. When transpose and flips are enabled together, the overall effect of the transformation happens as if the flip
operations occur first, followed by the transpose operation.
6. When flip operations are enabled, every Destination Rectangle has to lie fully within the TargetRectangle. This rule
has to be enforced to get consistent results while flipping because we define the flip operation as happening about
the target rectangle axis, and clip after we do the flip.
Normal (no
0 0 0
transformation)
H flip (mirror on
0 0 1
vertical axis)
V flip (mirror on
0 1 0
horizontal axis)
180-degree
0 1 1
rotation
Mirror on 315-
1 0 0
degree axis
270-degree
1 1 0
rotation
90-degree
1 0 1
rotation
Mirror on 45-
1 1 1
degree axis
The VIC 1.0 TNR algorithm (hereafter called TNR1) works well for videos or captures that have good lighting conditions and
lower levels of noise in the input video. However, when the lighting conditions are poor and there is a lot of noise in the input
video/capture, the algorithm tries to be safe by not modifying it much, and allows most of the noise to pass through into the
output.
The TNR2 algorithm performs significantly better in the above mentioned cases by pre-filtering the data spatially and allowing
significantly higher alpha values in the IIR blend. This algorithm can be turned on by programming the AdvancedDenoise*
fields in the SurfaceCache0Struct. The TNR2 algorithm also requires information about the lighting conditions at which the
video or capture is being shot (information that will probably be derived from ISP statistics), and this information should be
programmed into the LightLevel fields in the SurfaceListSurfaceStructs (4 bits, 0-darkest, 15-brightest).
13.3.6 Deinterlacing
The VIC supports various modes of deinterlacing the input video content such as DiSi1, BOB, and WEAVE. Weave is only
used on progressive content or in case inverse telecine detected a cadence.
Bayer pixel data can come from camera sensor equipment in various sizes, for example, 6 bits, 10 bits, 14 bits, 16 bits. Most
Bayer data is stored using existing pixel formats, such as T_L8, or T_L16. In some special cases, special formats are created
to pack pixel data efficiently to work with existing memory formats, for example, T_X2Lc10Lb10La10, T_X2Le6Ld6Lc6Lb6La6.
The table below lists the supported pixel formats. The symbols in color conversion mode column describe the internal VIC
representation of the format, (e.g., 1P_1C represents 1 plane with 1 component pixels, 2P_1+2C represents 2 planes, 1 plane
with 1 component pixels and a second plane with 2 component pixels).
T_A8 Y Y Y Y N 0 1P_1C
T_A4L4 Y Y Y Y N 2 1P_2C
T_L4A4 Y Y Y Y N 3 1P_2C
T_R8 Y Y Y Y N 4 1P_1C
T_A8L8 Y Y Y Y N 5 1P_2C
T_L8A8 Y Y Y Y N 6 1P_2C
T_R8G8 Y Y Y Y N 7 1P_2C
T_G8R8 Y Y Y Y N 8 1P_2C
T_B5G6R5 Y Y Y Y N 9 1P_3C
T_R5G6B5 Y Y Y Y N 10 1P_3C
T_B6G5R5 Y Y Y Y N 11 1P_3C
T_R5G5B6 Y Y Y Y N 12 1P_3C
T_A1B5G5R5 Y Y Y Y N 13 1P_4C
T_A1R5G5B5 Y Y Y Y N 14 1P_4C
T_B5G5R5A1 Y Y Y Y N 15 1P_4C
T_R5G5B5A1 Y Y Y Y N 16 1P_4C
T_A5B5G5R1 Y Y Y Y N 17 1P_4C
T_A5R1G5B5 Y Y Y Y N 18 1P_4C
T_B5G5R1A5 Y Y Y Y N 19 1P_4C
T_R1G5B5A5 Y Y Y Y N 20 1P_4C
T_X1B5G5R5 Y Y Y Y N 21 1P_4C
T_X1R5G5B5 Y Y Y Y N 22 1P_4C
T_B5G5R5X1 Y Y Y Y N 23 1P_4C
T_R5G5B5X1 Y Y Y Y N 24 1P_4C
T_A4B4G4R4 Y Y Y Y N 25 1P_4C
T_A4R4G4B4 Y Y Y Y N 26 1P_4C
T_B4G4R4A4 Y Y Y Y N 27 1P_4C
T_R4G4B4A4 Y Y Y Y N 28 1P_4C
T_A8B8G8R8 Y Y Y Y N 29 1P_4C
T_A8R8G8B8 Y Y Y Y N 30 1P_4C
T_B8G8R8A8 Y Y Y Y N 31 1P_4C
T_R8G8B8A8 Y Y Y Y N 32 1P_4C
T_X8B8G8R8 Y Y Y Y N 33 1P_4C
T_X8R8G8B8 Y Y Y Y N 34 1P_4C
T_B8G8R8X8 Y Y Y Y N 35 1P_4C
T_R8G8B8X8 Y Y Y Y N 36 1P_4C
T_A2B10G10R10 Y N Y Y N 37 1P_4C
T_A2R10G10B10 Y N Y Y N 38 1P_4C
T_B10G10R10A2 Y N Y Y N 39 1P_4C
T_R10G10B10A2 Y N Y Y N 40 1P_4C
T_A4P4 Y N Y Y N 41 1P_2C
T_P4A4 Y N Y Y N 42 1P_2C
T_P8A8 Y N Y Y N 43 1P_2C
T_A8P8 Y N Y Y N 44 1P_2C
T_P8 Y N Y Y N 45 1P_1C
T_P1 Y N Y Y N 46 1P_1C
T_U8V8 Y Y Y Y N 47 1P_2C
T_V8U8 Y Y Y Y N 48 1P_2C
T_A8Y8U8V8 (AYUV444
Y Y Y Y N 49 1P_4C
packed)
T_V8U8Y8A8 (AYUV444
Y Y Y Y N 50 1P_4C
packed)
T_Y8_U8__Y8_V8
YUY2/YUYV Y Y Y Y N 51 1P_4C
(YUV422 packed)
T_Y8_V8__Y8_U8
YVYU Y Y Y Y N 52 1P_4C
(YUV422 packed)
T_U8_Y8__V8_Y8
UYVY Y Y Y Y N 53 1P_4C
(YUV422 packed)
T_V8_Y8__U8_Y8
Y Y Y Y N 54 1P_4C
(YUV422 packed)
T_Y8___U8V8_N444
Y Y Y Y N 55 2P_1+2C
(YUV444 semi-planar)
T_Y8___V8U8_N444
Y Y Y Y N 56 2P_1+2C
(YUV444 semi-planar)
T_Y8___U8V8_N422
e.g., NV61 Y Y Y Y N 57 2P_1+2C
(YUV422 semi-planar)
T_Y8___V8U8_N422
e.g., NV16 Y Y Y Y N 58 2P_1+2C
(YUV422 semi-planar)
T_Y8___U8V8_N422R
Y Y Y Y N 59 2P_1+2C
(YUV422R semi-planar)
T_Y8___V8U8_N422R
Y Y Y Y N 60 2P_1+2C
(YUV422R semi-planar)
T_Y8___U8V8_N420
e.g., NV21 Y Y Y Y N 61 2P_1+2C
(YUV420 semi-planar)
T_Y8___V8U8_N420
e.g., NV12 Y Y Y Y Y* 62 2P_1+2C
(YUV420 semi-planar)
T_Y8___U8___V8_N444
e.g., YV24 Y Y Y Y N 63 3P_1+1+1C
(YUV444 planar)
T_Y8___U8___V8_N422
e.g., YV16 Y Y Y Y N 64 3P_1+1+1C
(YUV422 planar)
T_Y8___U8___V8_N422R
Y Y Y Y N 65 3P_1+1+1C
(YUV422R planar)
T_Y8___U8___V8_N420
e.g., YV12 Y Y Y Y Y 66 3P_1+1+1C
(YUV420 planar)
*Currently, DiSi1 deinterlacing only works on NV24 surfaces and field-based variants of NV12, YV12, YUY2, and UYVY
formats (with each field stored in a separate surface).
In the color format, the notation called “A:B:C” notation is used to describe how often U and V are sampled relative to Y.
422 (4:2:2) means 2:1 horizontal downsampling, with no vertical downsampling. Every scan line contains four Y samples for
every two U and V samples.
420 (4:2:0) means 2:1 horizontal downsampling, with 2:1 vertical downsampling.
R refers to ‘rotated’. 422 by default means horizontal downsampling; while 422R means vertical downsampling. Instead of the
chroma being shared between 2 horizontally adjacent luma components, it is shared between 2 vertically adjacent luma
components.
The VIC does not support 24-bit color formats, either RGB or YUV.
There are four filter types (5-tap non-substream, 5-tap substream, 10-tap non-substream, 10-tap substream). Five tables are
1
needed for each coefficient type as different tables are needed for different scale down ratio of 1:1, 2:1, 4:1, 8:1 and 16:1 .
Thus 20 tables are needed with a maximum downscale ratio of 16:1.
Each table has 16X4 memory entries (for the 5-tap filter) or 16X9 memory entries (for 10-tap filter). Each memory entry has
three 10-bit base coefficients (for Detail/Noise/Default) that will be feed into a LERP3 simultaneously to interpolate based on
different noise and detail weight. The table has 16 columns, and each column stores all the coefficients for phase 0/32, 1/32,
2/32, 3/32, 4/32, 5/32, 6/32, 7/32, 8/32, 9/32, 10/32, 11/32, 12/32, 13/32, 14/32 and 15/32, with the exception that the first
column stores coefficients for both 0/32 and 16/32.
Each column stores four sets of base coefficients for the 5-tap filter because the last coefficient can be derived from the
remaining four. phase 0/32 and 16/32 are special cases in that only two sets of base coefficients are needed for each of them
in the 5-tap case,only four sets of base coefficients are needed for phase 0/32 in the 10-tap case, and five sets of base
coefficients are needed for phase 16/32 in the 10-tap case. Therefore, phase 0/32 and 16/32 are folded into the same column.
Due to symmetry, the base coefficients for phases 17 through 31 do not need to be stored.
1
1:1 ratio contains identify filter that can be used for all scale up cases. Different scale down ratio requires different coefficients since the
filter is a low pass filter the bandwidth of which is related to the scale ratio. Coefficients for 2:1, 4:1, 8:1 and 16:1 are stored to interpolate
any downscale ratios.
Panoramic scaling has an additional parameter p ([-1, 1]) that defines the magnitude of the second order term in a polynomial.
The polynomial parameters for scaling can then be defined as follows.
The original scaling factor f is changed based on the location x ([-1, 1]) within the destination rectangle.
1 − 1 p p<0 12 p p<0
scaling _ factorx = f ∗ ( a + 3bx 2 ) with a= 2 and b =
1− p p≥0 p p≥0
The source sample position x’ is therefore calculated as:
2 1
Panoramic scaling for 4:3 to 16:9 conversion should have p=− , while 16:9 to 4:3 conversion should have p = for 1:1
3 4
scaling in the center.
The 4x3 matrix values are specified in the ColorConversionMatrixStruct as S12.8 values. In addition, the result of the matrix
multiplication will be right shifted by r_shift. To allow for highest accuracy r_shift should always be as high as possible without
losing any range in the other coefficients. Note that the constant offsets (c03, c13, c23) are S12.8 and are not affected by
r_shift.
𝑖𝑛0 ≫ 𝑟_𝑠ℎ𝑖𝑓𝑡
𝑜𝑢𝑡0 𝑐00 𝑐01 𝑐02 𝑐03
𝑖𝑛1 ≫ 𝑟_𝑠ℎ𝑖𝑓𝑡
�𝑜𝑢𝑡1� = �𝑐10 𝑐11 𝑐12 𝑐13� � �
𝑖𝑛2 ≫ 𝑟_𝑠ℎ𝑖𝑓𝑡
𝑜𝑢𝑡2 𝑐20 𝑐21 𝑐22 𝑐23
1
Soft clamping defines a piecewise linear function consisting of three pieces. The control entries define the area of soft
clamping. For example, the following equation applies for the values a and b:
0 v < −a
v + a −a ≤v<a
2
′
v = v a≤v<b
v + b b≤ v < 2−b
2
1 2−b≤ v
When converting between pixel formats with components of varying bit width, bit replication is used for expanding component
bit widths, and truncation is used for reducing component bit widths.
When reducing the number of bits in a component (for example, from RGB888 to RGB565), the LSBs of the old value should
be truncated to arrive at the shortened value.
Replication followed by truncation will ensure that the truncated value will equal the original pre-replicated operand, i.e.,
RGB565RGB888 expansion followed immediately by RGB888RGB565 reduction will result in the same original value.
Luminance Conversion
Conversion from luminance-only color formats (e.g., L8/Y8/YUV100, A8L8) to and from RGB or YUV formats should be done
as outlined below.
Luminance-only to YUV
Luminance-only to RGB
YUV to Luminance-only
YL
If converting from a pixel format with no alpha to a pixel format with alpha, the alpha value in the destination pixel format
should be set to 1.0.
13.3.13 Blender
The blender interface allows for symmetric blend modes between the VIC and Display units.
DXVAHD_ALPHA_FILL_MODE_OPAQUE
DXVAHD_ALPHA_FILL_MODE_BACKGROUND
DXVAHD_ALPHA_FILL_MODE_DESTINATION
DXVAHD_ALPHA_FILL_MODE_SOURCE_STREAM
DXVAHD_ALPHA_FILL_MODE_COMPOSITED
DXVAHD_ALPHA_FILL_MODE_SOURCE_ALPHA
All modes other than _ALPHA_FILL_MODE_COMPOSITED are as defined in the Microsoft DXVA spec and are carried over
from VIC 1.0. The new mode that allows the VIC and Display blenders to match each other is enabled by setting the
AlphaFillModein the VIC Config Structure to _ALPHA_FILL_MODE_COMPOSITED. When the AlphaFillMode is set to
anything other than _ALPHA_FILL_MODE_COMPOSITED, the srcFact and dstFact parameters specified below are ignored
and do not affect the processing.
The parameterizable blender interface allows a variety of blend modes, including the following:
The blend data path will require the color key comparison match result, and per-slot inputs from the config structure to
formulate the blend equation.
srcFactC, srcFactA, dstFactC, and dstFactA multiplicand inputs are determined by the config structure programming and color
key comparison results. Note that VIC’s internal pixel pipeline represents each pixel component as 10 bits, and as a result,
constants from the config struct also require 10-bit representation.
Given the source and destination factor settings based on config structure inputs and color match results, the per-pixel blend
equations are as follows, where srcR, srcG, srcB, srcA, dstR, dstG, dstB, and dstA represent the incoming R, G, B, A
components of the incoming source and already present destination pixels in the SFMem buffer (blended results of
background and slot[0] through to slot[n-1] for input slot[n]).
outputR = (srcFactC * srcR) + (dstFactC * dstR)
outputG = (srcFactC * srcG) + (dstFactC * dstG)
outputB = (srcFactC * srcB) + (dstFactC * dstB)
outputA = (srcFactA * srcA) + (dstFactA * dstA)
If the ColorKeySelect is set to DISABLED, then srcFactC, srcFactA, dstFactC, and dstFactA will be programmed by
srcFactCMatchSelect, srcFactCMatchSelect, srcFactCMatchSelect, and srcFactCMatchSelect, respectively.
If the ColorKeySelect is set to ENABLED, then srcFactC, srcFactA, dstFactC, and dstFactA are programmed by
srcFactCMatchSelect, srcFactCMatchSelect, srcFactCMatchSelect, and srcFactCMatchSelect, respectively, if the destination
color key match result returns true, and programmed by srcFactCNoMatchSelect, srcFactCNoMatchSelect,
srcFactCNoMatchSelect, and srcFactCNoMatchSelect, respectively, if the destination color key match result returns false.
UseK3 allows the incoming source components to be overrided by constant color components K3R, K3G, K3B, K3A.
MaskR, MaskG, MaskB, and MaskA Boolean settings provide additional per-component mask bits to allow pass-through of the
destination pixel components to the output pixel
There is no post-blend color space conversion available. As a result, blending should be done in the destination color space.
If the destination color space is RGB, all input slots should be converted to RGB color space before blending.
A programmable background color will still be set to fill the target rectangle background via the Blending0Struct, as in VIC1.0.
The config structure is therefore modified to make the source rectangle coordinates U14.16 numbers. Once we have the
(decimal) source rectangles, we can calculate adjust the starting phase of the scaling filters accordingly so as to achieve the
sub-pixel shift/scale required.
Note that all source coordinates (left, top, right, bottom) include the bounding pixels. For instance: (0,0)-(0,0) contains 1 pixel,
while (0,0)-(1-1) contains a square of 2x2 pixels. This means that rectangles which are less than 1 pixel wide or tall cannot be
used. Also, specifying a rectangle of (0.0,0.0)-(0.0,0.1) results in a source rectangle that is 1 pixel wide and 1.1 pixel high,
which is not immediately apparent.
This size affects all input and output surfaces parameters as well as all fetch calculations related to these parameters:
Per-input slot and output surface width/height, luma width/height, chroma width/height
Per-input slot source and destination rectangle dimensions
Clear rectangle dimensions
Output target rectangle dimensions
1. The driver should set up input and output context DMAs as specified here.
2. After setting up the surfaces, the driver should send the parameter methods which specify:
- Control Configuration
- Configuration structure offset
- Palette buffer offset
- History buffer offset
- Input/Output/Intermediate surface offsets
- Context ID methods
- Fetch Control Engine (FCE) microcode offset
3. When Execute() method is sent, the Falcon program will be initiated.
The compositor operation requires the following buffers. These buffers are explained in more detail in the following sections.
13.4.1.1 Restrictions
Maximum slots (MAX_SLOTS) supported are 5.
Maximum downscale ratio is 16:1.
When enabling panoramic scaling, the maximum downscale ratio is 7:1. In addition, the minimum destination
rectangle size is 4x4 pixels.
Minimum source rectangle size is 4 pixels x 4 pixels.
The only pixel formats supported in video pre-process operations (IVTC, TNR, DiSi1 deinterlacing) are NV12, YV12,
YUY2, and UYVY.
DXVAHD_FRAME_FORMAT
PIXEL_FORMAT
DXVAHD_DEINTERLACE_MODE_PRIVATE
DXVAHD_ALPHA_FILL_MODE
BLK_KIND
BLEND_SRCFACTC
BLEND_DSTFACTC
BLEND_SRCFACTA
BLEND_DSTFACTA
The config structure is broken up into smaller structs that are used depending on the active slots and their content. Each
structure is a multiple of 128 bits in size, and the start of the struct needs to be aligned to a 256 byte boundary.
Note: NV12 and NV24 share the same pixel format but can be distinguished by the fact that NV24 is a field based format (i.e.,
every surface contains a single field) whereas NV12 is frame based (i.e., every surface contains an entire frame).
Note: For highest quality, filter override mode as defined in FetchControlCoeffStruct should always be used.
The following table defines the smaller structs that comprise ConfigStruct.
13.4.3.1 SurfaceCache0Struct
This structure contains enable bits for each slot, which need to be set as described below.
Noise reduction requires a forward and a backward reference field for interlaced content and a backward reference
for progressive content (see the “Method Naming and Programming” section about how to set surfaces). Both require
a noise reduced surface (field for interlaced, frame for progressive).
MotionMap calculation is required for DiSi1/DiNewBob and also needs a forward and a backward reference. Behavior
is not defined for progressive streams so enabling it needs to be flagged as an error.
Cadence Detection enables artifact and weave counts. It also enables Falcon code to force deinterlace mode to
weave if a cadence was detected.
MotionMap0 fixed<0,1,0> (1 bit) 2 Motion map enable bit for each slot. Required for DiSi1/DiNewBob
IsEven0 fixed<0,1,0> (1 bit) 20 Select if current field is even (used for cadence detection)
MMapCombine0 fixed<0,1,0> (1 bit) 25 Enable bit for combine motion map for each slot. This is required for
DiSi1/DiNewBob. This requires MotionMap being enabled and also
required a prevMotionMap surface (see “Method Naming and
Programming”). Behavior without MotionMap enabled is undefined and
has to be flagged as an error.
PPMotion0 fixed<0,1,0> (1 bit) 96 Enable bit for previous motion calculation for each slot. PPMotion is
obsolete and should not be enabled.
AdvancedDenoise0 fixed<0,1,0> (1 bit) 112 Enable the advanced denoising algorithm (TNR2) for each slot.
13.4.3.2 SurfaceList0Struct
The per-slot clear rectangle masks enable or disable each of the 8 clear rectangles defined in the SurfaceListClearRectStruct
for that slot. This structure also specifies the output flip enables and Target rectangle.
TargetRectLeft fixed<0,14,0> (14 bits) 64 Target rectangle. Restricts the output to a certain rectangle inside the
output surface. Pixels outside of this area are guaranteed to remain
unmodified.
13.4.3.3 SurfaceListClearRectStruct[4]
The SurfaceListClearRectStruct structures together define 8 clear rectangles. These rectangles are enabled or disabled for
each slot using the fields in SurfaceList0Struct.
13.4.3.4 SurfaceListSurfaceStruct[5]
Surface parameters for each slot.
Panoramic fixed<0,12,0> (12 bits) 18 Panoramic scaling parameter. For details on this parameter, refer to
the Panoramic Scaling subsection.
SurfaceWidth fixed<0,14,0> (14 bits) 34 Width of surface minus 1. Any pixel data outside of this will not be
used inside the VIC but might still be read.
SurfaceHeight fixed<0,14,0> (14 bits) 49 Height of surface minus 1. Any pixel data outside of this will not be
used inside the VIC but might still be read.
LumaWidth fixed<0,14,0> (14 bits) 64 Padded luma width of surface minus 1. Any pixel data outside of this
will not be read.
LumaHeight fixed<0,14,0> (14 bits) 79 Padded luma height of surface minus 1. Any pixel data outside of this
will not be read.
ChromaWidth fixed<0,14,0> (14 bits) 94 Padded chroma width of surface minus 1. Any pixel data outside of
this will not be read. This value is not required for pixel interleaved
surfaces such as ARGB.
ChromaHeight fixed<0,14,0> (14 bits) 109 Padded chroma height of surface minus 1. Any pixel data outside of
this will not be read. This value is not required for pixel interleaved
surfaces such as ARGB
CacheWidth fixed<0,3,0> (3 bits) 124 Number of horizontal bytes per surface-cache cache-line. Each 256B
cache line can store a source region of size as enumerated below.
0: 16Bx16 (BL16Bx2)
1: 32Bx8 (BL16Bx2)
2: 64Bx4 (BL16Bx2, PL)
3: 128Bx2 (BL16Bx2, PL)
4: 256Bx1 (PL)
LightLevel fixed<0,4,0> (4 bits) 140 Describes the level of lighting present when the input image was
captured. This parameter is used along with the AdvancedDenoise
bits to determine the exact denoising algorithm to be applied for noise
reduction.
DestRectLeft fixed<0,14,0> (14 bits) 192 The destination rectangle defines the region of the output surface that
is affected by this slot. Together with the source rectangle it also
defines the scaling rations. Any pixel outside of this region will not be
affected by this input stream. For any non-4:4:4 format, all corners
need to fall on a multiple of 2 (Right and Bottom are minus 1 encoded
though).
SourceRectLeft fixed<0,30,0> (30 bits) 256 The source rectangle defines the region of pixels that will be read from
the source surface. Any pixel data outside of this will not be used
inside the VIC but might still be read. The source rectangle
coordinates are specified in a U14.16 format, allowing fractional
coordinates to be specified. The source rectangle should lie entirely
within the input surface for the slot; that is, negative values, or values
greater than the size of the surface, are illegal.
13.4.3.5 ColorConversionLumaAlphaStruct[5]
Enables luma keying and plane alpha parameters.
l0 fixed<0,20,0> (20 bits) 0 Matrix entry (0) of 4x1 luma conversion matrix in S12.8
format
l1 fixed<0,20,0> (20 bits) 20 Matrix entry (1) of 4x1 luma conversion matrix in S12.8
format
l2 fixed<0,20,0> (20 bits) 40 Matrix entry (2) of 4x1 luma conversion matrix in S12.8
format
r_shift fixed<0,4,0> (4 bits) 60 The result of the matrix multiplication is right shifted by
r_shift. To allow for highest accuracy r_shift should always
be as high as possible without losing any range in the other
coefficients.
l3 fixed<0,20,0> (20 bits) 64 Matrix entry (3) of 4x1 luma conversion matrix in S12.8
format. Is not affected by r_shift.
PlanarAlpha fixed<0,10,0> (10 bits) 84 10-bit planar alpha value. This planar alpha is multiplied
with the alpha value coming from the stream. In case of
palettized alpha formats (like AI44/A8P8/AI88), the stream
alpha value is the alpha value from the surface multiplied
with the alpha value from the palette.
ConstantAlpha fixed<0,1,0> (1 bit) 94 If true planar alpha value is used instead of stream alpha, if
false, stream alpha is multiplied with planar alpha. Constant
alpha has to be set for all surfaces not containing any alpha
data (like XRGB/NV12/YUY2/UYVY/YV12).
ClipEnabled fixed<0,1,0> (1 bit) 95 Enables clip against negative values after gamut matrix
StereoInterleave fixed<0,3,0> (3 bits) 109 Enables pixel interleave for auto-stereoscopic panels
(STEREO_INTERLEAVE)
13.4.3.6 ColorConversionMatrixStruct[5]
The matrices defined in these structures specify the color space conversion between input and output pixel formats, if any.
c00 fixed<0,20,0> (20 bits) 0 Matrix entry (0,0) of 4x3 color conversion matrix. Precision and right
shift are the same as for the luma vector.
c10 fixed<0,20,0> (20 bits) 20 Matrix entry (1,0) of 4x3 color conversion matrix
c20 fixed<0,20,0> (20 bits) 40 Matrix entry (2,0) of 4x3 color conversion matrix
c01 fixed<0,20,0> (20 bits) 64 Matrix entry (0,1) of 4x3 color conversion matrix
c11 fixed<0,20,0> (20 bits) 84 Matrix entry (1,1) of 4x3 color conversion matrix
c21 fixed<0,20,0> (20 bits) 104 Matrix entry (2,1) of 4x3 color conversion matrix
c02 fixed<0,20,0> (20 bits) 128 Matrix entry (0,2) of 4x3 color conversion matrix
c12 fixed<0,20,0> (20 bits) 148 Matrix entry (1,2) of 4x3 color conversion matrix
c22 fixed<0,20,0> (20 bits) 168 Matrix entry (2,2) of 4x3 color conversion matrix
c03 fixed<0,20,0> (20 bits) 192 Matrix entry (0,3) of 4x3 color conversion matrix
c13 fixed<0,20,0> (20 bits) 212 Matrix entry (1,3) of 4x3 color conversion matrix
c23 fixed<0,20,0> (20 bits) 232 Matrix entry (2,3) of 4x3 color conversion matrix
13.4.3.7 ColorConversionClampStruct[5]
Specifies the upper and lower clamp boundaries for pixels after the matrix multiplication.
13.4.3.8 Blending0Struct
Specifies parameters related to the alpha-blending of the different slots and the output surface/rectangle parameters.
LumaWidth fixed<0,14,0> (14 bits) 64 Padded output surface luma width minus 1
LumaHeight fixed<0,14,0> (14 bits) 80 Padded output surface luma height minus 1
ChromaWidth fixed<0,14,0> (14 bits) 96 Padded output surface chroma width minus 1
ChromaHeight fixed<0,14,0> (14 bits) 112 Padded output surface chroma height minus 1
TargetRectLeft fixed<0,14,0> (14 bits) 128 Target rectangle, restricts the output of pixels to this region.
For any non-4:4:4 format, all corners need to fall on a
multiple of 2 (Right and Bottom are minus 1 encoded
though).
BlkKind fixed<0,4,0> (4 bits) 224 The block linear kind of the output surface (BLK_KIND)
13.4.3.9 BlendingSurfaceStruct[5]
Input parameters to blend equations in DXVAHD_ALPHA_FILL_MODE_COMPOSITED alpha fill mode
SrcFactCMatchSelect fixed<0,3,0> (3 bits) 32 Blend Source Factor for Color if the color key
comparison matches (BLEND_SRCFACTC)
DstFactCMatchSelect fixed<0,3,0> (3 bits) 36 Blend Destination Factor for Color if the color key
comparison matches (BLEND_DSTFACTC)
SrcFactAMatchSelect fixed<0,3,0> (3 bits) 40 Blend Source Factor for Alpha if the color key
comparison matches (BLEND_SRCFACTA)
DstFactAMatchSelect fixed<0,3,0> (3 bits) 44 Blend Source Factor for Alpha if the color key
comparison matches (BLEND_DSTFACTA)
MaskR fixed<0,1,0> (1 bit) 112 Per-component blend output override enables (replace
blend output with destination RGBA values)
13.4.3.10 FetchControl0Struct
Specifies various parameters related to scaling and filtering. Also specifies which input surfaces are enabled and the
processing required for each slot.
TargetRectLeft fixed<0,14,0> (14 bits) 0 Target rectangle, restricts the output of pixels to this region
Enable0 fixed<0,8,0> (8 bits) 64 Indicates which surfaces are enabled for fetching:
Bit 0: Current field
Bit 1: Previous field
Bit 2: Next field
Bit 3: Next field (noise filtered, takes priority over unfiltered
field)
Bit 4: Current motion field
DownsampleHoriz fixed<0,11,0> (11 bits) 104 TargetWidth/DownsampleWidth (U9.2 used to lob bias filter).
Set to 0 to enable filter override mode (mapping between
stream and filter is explained in “Scaling and Filtering”)
DownsampleVert fixed<0,11,0> (11 bits) 116 TargetHeight/DownsampleHeight (U9.2 used to lob bias
filter). Set to 0 to enable filter override mode (mapping
between stream and filter is explained in “Scaling and
Filtering”)
FilterNoise0 fixed<0,10,0> (10 bits) 128 Strength of the spatial noise filter for slot 0. All detail and
noise filter values (including chroma) become meaningless
and should be set to 0 as soon as filter override is enabled
FilterDetail0 fixed<0,10,0> (10 bits) 138 Strength of the detail filter for slot 0
FilterNoise1 fixed<0,10,0> (10 bits) 148 Strength of the noise filter for slot 1
FilterDetail1 fixed<0,10,0> (10 bits) 160 Strength of the detail filter for slot 1
FilterNoise2 fixed<0,10,0> (10 bits) 170 Strength of the noise filter for slot 2
FilterDetail2 fixed<0,10,0> (10 bits) 180 Strength of the detail filter for slot 2
FilterNoise3 fixed<0,10,0> (10 bits) 192 Strength of the noise filter for slot 3
FilterDetail3 fixed<0,10,0> (10 bits) 202 Strength of the detail filter for slot 3
FilterNoise4 fixed<0,10,0> (10 bits) 212 Strength of the noise filter for slot 4
FilterDetail4 fixed<0,10,0> (10 bits) 224 Strength of the detail filter for slot 4
ChromaNoise0 fixed<0,10,0> (10 bits) 256 Strength of the noise filter for slot 0
ChromaDetail0 fixed<0,10,0> (10 bits) 266 Strength of the detail filter for slot 0
ChromaNoise1 fixed<0,10,0> (10 bits) 276 Strength of the noise filter for slot 1
ChromaDetail1 fixed<0,10,0> (10 bits) 288 Strength of the detail filter for slot 1
ChromaNoise2 fixed<0,10,0> (10 bits) 298 Strength of the noise filter for slot 2
ChromaDetail2 fixed<0,10,0> (10 bits) 308 Strength of the detail filter for slot 2
ChromaNoise3 fixed<0,10,0> (10 bits) 320 Strength of the noise filter for slot 3
ChromaDetail3 fixed<0,10,0> (10 bits) 330 Strength of the detail filter for slot 3
ChromaNoise4 fixed<0,10,0> (10 bits) 340 Strength of the noise filter for slot 4
ChromaDetail4 fixed<0,10,0> (10 bits) 352 Strength of the detail filter for slot 4
AccumWeight0 fixed<0,3,0> (3 bits) 388 Accumulation weight for motion IIR filter for slot 0 (the default
is 6). The first time an even/odd motion field is calculated,
AccumWeight should be set to 0 to avoid having to clear the
motion buffer beforehand.
Iir0 fixed<0,11,0> (11 bits) 391 Accumulation weight for noise reduction IIR filter for slot 0
(default value is 0x300).
13.4.3.11 FetchControlCoeffStruct[520]
Specifies the coefficients used in the scalars for scaling/edge-enhancement/noise filtering. These coefficients are interpolated
in the hardware to get the exact coefficients needed for the use case.
f00 fixed<0,10,0> (10 bits) 0 First coefficient of noise filter for 128-bit packet
f10 fixed<0,10,0> (10 bits) 10 First coefficient of normal scaling filter in 128-bit packet
f20 fixed<0,10,0> (10 bits) 20 First coefficient of detail filter in 128-bit packet
f01 fixed<0,10,0> (10 bits) 32 Second coefficient of noise filter in 128-bit packet
f11 fixed<0,10,0> (10 bits) 42 Second coefficient of normal scaling filter in 128-bit packet
f21 fixed<0,10,0> (10 bits) 52 Second coefficient of detail filter in 128-bit packet
f02 fixed<0,10,0> (10 bits) 64 Third coefficient of noise filter in 128-bit packet
f12 fixed<0,10,0> (10 bits) 74 Third coefficient of normal scaling filter in 128-bit packet
f22 fixed<0,10,0> (10 bits) 84 Third coefficient of detail filter in 128-bit packet
f03 fixed<0,10,0> (10 bits) 96 Fourth coefficient of noise filter in 128-bit packet
f13 fixed<0,10,0> (10 bits) 106 Fourth coefficient of normal scaling filter in 128-bit packet
f23 fixed<0,10,0> (10 bits) 116 Fourth coefficient of detail filter in 128-bit packet
The first Dword of the hist_control (control_vector) should be set by the driver. It informs Falcon whether to calculate the
cadence.
In the NV24 case, the VIC app uses an additional surface to keep noise reduced field of the current picture. In this case, the
current noise reduced surfaces are used as previous reference surfaces.
Noise-reduced picture buffer dimensions for a slot should be same as input buffer of that slot.
Motion map buffer dimensions for a slot should be same as input buffer of that slot.
SetSurfacexSlotyLumaOffset()
SetSurfacexSlotyChromaOffset()
The following sets of methods are required for a given ConfigStruct setup. Any setup not covered in this section should be
regarded as illegal.
Note:
NV24 frames are treated as NV12 fields. The frame format for NV24 has to be set to
FRAME_FORMAT_TOP_FIELD.
In case of noise reduction all previously noise reduced surfaces should be used as references instead of the original
ones. In case of interlaced fields this also applies to the current fields as they have previously been noise reduced.
Surface6 has been obsoleted and should not be used.
History buffer is always required and should be owned by Falcon.
No Preprocessing
Enable bits have to be set to 0x01 in fetchControl0Struct.
SetSurface0SlotLumaOffset()
SetSurface0SlotChromaOffset()
Noise Reduction
Enable bits have to be set to 0x07 in fetchControl0Struct.
SetSurface0SlotLumaOffset()
SetSurface1SlotLumaOffset() (backward reference surface)
SetSurface2SlotLumaOffset() (noise reduced surface)
SetSurface0SlotChromaOffset()
SetSurface1SlotChromaOffset() (backward reference surface)
SetSurface2SlotChromaOffset() (noise reduced surface)
No Preprocessing
Enable bits have to be set to 0x03 in fetchControl0Struct.
Noise Reduction
Enable bits have to be set to 0x03f in fetchControl0Struct.
No Preprocessing
Enable bits have to be set to 0x01 in fetchControl0Struct.
SetSurface0SlotLumaOffset()
SetSurface0SlotChromaOffset()
Noise Reduction
Enable bits have to be set to 0x07 in fetchControl0Struct.
SetSurface0SlotLumaOffset()
SetSurface1SlotLumaOffset() (backward reference surface)
SetSurface2SlotLumaOffset() (noise reduced surface)
SetSurface0SlotChromaOffset()
SetSurface1SlotChromaOffset() (backward reference surface)
SetSurface2SlotChromaOffset() (noise reduced surface)
No Preprocessing
This is for BOB_FIELD only. For WEAVE, see “No Preprocessing” under “Progressive Fields“.
SetSurface0SlotLumaOffset()
SetSurface0SlotChromaOffset()
Cadence Detection
Enable bits have to be set to 0x07 in fetchControl0Struct. This also requires cadence detection to be enabled.
SetSurface0SlotLumaOffset()
SetSurface1SlotLumaOffset() (backward reference field)
SetSurface2SlotLumaOffset() (forward reference field)
SetSurface0SlotChromaOffset()
SetSurface1SlotChromaOffset() (backward reference field)
SetSurface2SlotChromaOffset() (forward reference field)
Motion Calculation
Enable bits have to be set to 0x17 in fetchControl0Struct. The data in the current motion field is read first and IIR filtered with
the newly calculated motion before it is written back.
SetSurface0SlotLumaOffset()
SetSurface1SlotLumaOffset() (backward reference field)
SetSurface2SlotLumaOffset() (forward reference field)
SetSurface4SlotLumaOffset() (current motion field)
SetSurface0SlotChromaOffset()
SetSurface1SlotChromaOffset() (backward reference field)
SetSurface2SlotChromaOffset() (forward reference field)
SetSurface4SlotChromaOffset() (current motion field)
SetSurface0SlotLumaOffset()
SetSurface1SlotLumaOffset() (backward reference field)
SetSurface2SlotLumaOffset() (forward reference field)
SetSurface4SlotLumaOffset() (current motion field)
SetSurface5SlotLumaOffset() (previous motion field)
SetSurface7SlotLumaOffset() (combined motion field)
SetSurface0SlotChromaOffset()
SetSurface1SlotChromaOffset() (backward reference field)
SetSurface2SlotChromaOffset() (forward reference field)
SetSurface4SlotChromaOffset() (current motion field)
SetSurface5SlotChromaOffset() (previous motion field)
SetSurface7SlotChromaOffset() (combined motion field)
Noise Reduction
Enable bits have to be set to 0x0f in fetchControl0Struct.
SetSurface0SlotLumaOffset()
SetSurface1SlotLumaOffset() (previously noise reduced backward reference field)
SetSurface2SlotLumaOffset() (forward reference field)
SetSurface3SlotLumaOffset() (noise reduced forward reference field)
SetSurface0SlotChromaOffset()
SetSurface1SlotChromaOffset() (previously noise reduced backward reference field)
SetSurface2SlotChromaOffset() (forward reference field)
SetSurface3SlotChromaOffset() (noise reduced forward reference field)
SetSurface0SlotLumaOffset()
SetSurface1SlotLumaOffset() (backward reference field)
SetSurface2SlotLumaOffset() (forward reference field)
SetSurface3SlotLumaOffset() (noise reduced forward reference field)
SetSurface4SlotLumaOffset() (current motion field)
SetSurface0SlotChromaOffset()
SetSurface1SlotChromaOffset() (backward reference field)
SetSurface2SlotChromaOffset() (forward reference field)
SetSurface3SlotChromaOffset() (noise reduced forward reference field)
SetSurface4SlotChromaOffset() (current motion field)
SetSurface0SlotLumaOffset()
SetSurface1SlotLumaOffset() (backward reference field)
SetSurface2SlotLumaOffset() (forward reference field)
SetSurface3SlotLumaOffset() (noise reduced forward reference field)
SetSurface4SlotLumaOffset() (current motion field)
SetSurface5SlotLumaOffset() (previous motion field)
SetSurface7SlotLumaOffset() (combined motion field)
SetSurface0SlotChromaOffset()
SetSurface1SlotChromaOffset() (backward reference field)
SetSurface2SlotChromaOffset() (forward reference field)
SetSurface3SlotChromaOffset() (noise reduced forward reference field)
SetSurface4SlotChromaOffset() (current motion field)
SetSurface5SlotChromaOffset() (previous motion field)
SetSurface7SlotChromaOffset() (combined motion field)
Noise Reduction and DISI1 (Motion Calculation and Motion Combine) and Cadence Detection
Same as above in Noise Reduction and DiSi1 except that cadence detection is enabled.
13.4.12 Application ID
Application ID is not needed as there is only one application for the engine (unlike different codecs for the MSDEC). But to use
it with MSDEC infrastructure, the driver needs to pass the ApplicationId as 1 (corresponding to overlay 1).
Address Method
0x0100 VIC.Nop
0x0140 VIC.PmTrigger
0x0200 VIC.SetApplicationID
0x0204 VIC.SetWatchdogTimer
0x0240 VIC.SemaphoreA
0x0244 VIC.SemaphoreB
0x0248 VIC.SemaphoreC
Address Method
0x024c VIC.CtxSaveArea
0x0250 VIC.CtxSwitch
0x0300 VIC.Execute
0x0304 VIC.SemaphoreD
0x0400 VIC.SetSurface0Slot0LumaOffset
0x0404 VIC.SetSurface0Slot0ChromaU_Offset
0x0408 VIC.SetSurface0Slot0ChromaV_Offset
0x040c VIC.SetSurface1Slot0LumaOffset
0x0410 VIC.SetSurface1Slot0ChromaU_Offset
0x0414 VIC.SetSurface1Slot0ChromaV_Offset
0x0418 VIC.SetSurface2Slot0LumaOffset
0x041c VIC.SetSurface2Slot0ChromaU_Offset
0x0420 VIC.SetSurface2Slot0ChromaV_Offset
0x0424 VIC.SetSurface3Slot0LumaOffset
0x0428 VIC.SetSurface3Slot0ChromaU_Offset
0x042c VIC.SetSurface3Slot0ChromaV_Offset
0x0430 VIC.SetSurface4Slot0LumaOffset
0x0434 VIC.SetSurface4Slot0ChromaU_Offset
0x0438 VIC.SetSurface4Slot0ChromaV_Offset
0x043c VIC.SetSurface5Slot0LumaOffset
0x0440 VIC.SetSurface5Slot0ChromaU_Offset
0x0444 VIC.SetSurface5Slot0ChromaV_Offset
0x0448 VIC.SetSurface6Slot0LumaOffset
0x044c VIC.SetSurface6Slot0ChromaU_Offset
0x0450 VIC.SetSurface6Slot0ChromaV_Offset
0x0454 VIC.SetSurface7Slot0LumaOffset
0x0458 VIC.SetSurface7Slot0ChromaU_Offset
0x045c VIC.SetSurface7Slot0ChromaV_Offset
0x0460 VIC.SetSurface0Slot1LumaOffset
0x0464 VIC.SetSurface0Slot1ChromaU_Offset
0x0468 VIC.SetSurface0Slot1ChromaV_Offset
0x046c VIC.SetSurface1Slot1LumaOffset
0x0470 VIC.SetSurface1Slot1ChromaU_Offset
0x0474 VIC.SetSurface1Slot1ChromaV_Offset
0x0478 VIC.SetSurface2Slot1LumaOffset
0x047c VIC.SetSurface2Slot1ChromaU_Offset
0x0480 VIC.SetSurface2Slot1ChromaV_Offset
0x0484 VIC.SetSurface3Slot1LumaOffset
Address Method
0x0488 VIC.SetSurface3Slot1ChromaU_Offset
0x048c VIC.SetSurface3Slot1ChromaV_Offset
0x0490 VIC.SetSurface4Slot1LumaOffset
0x0494 VIC.SetSurface4Slot1ChromaU_Offset
0x0498 VIC.SetSurface4Slot1ChromaV_Offset
0x049c VIC.SetSurface5Slot1LumaOffset
0x04a0 VIC.SetSurface5Slot1ChromaU_Offset
0x04a4 VIC.SetSurface5Slot1ChromaV_Offset
0x04a8 VIC.SetSurface6Slot1LumaOffset
0x04ac VIC.SetSurface6Slot1ChromaU_Offset
0x04b0 VIC.SetSurface6Slot1ChromaV_Offset
0x04b4 VIC.SetSurface7Slot1LumaOffset
0x04b8 VIC.SetSurface7Slot1ChromaU_Offset
0x04bc VIC.SetSurface7Slot1ChromaV_Offset
0x04c0 VIC.SetSurface0Slot2LumaOffset
0x04c4 VIC.SetSurface0Slot2ChromaU_Offset
0x04c8 VIC.SetSurface0Slot2ChromaV_Offset
0x04cc VIC.SetSurface1Slot2LumaOffset
0x04d0 VIC.SetSurface1Slot2ChromaU_Offset
0x04d4 VIC.SetSurface1Slot2ChromaV_Offset
0x04d8 VIC.SetSurface2Slot2LumaOffset
0x04dc VIC.SetSurface2Slot2ChromaU_Offset
0x04e0 VIC.SetSurface2Slot2ChromaV_Offset
0x04e4 VIC.SetSurface3Slot2LumaOffset
0x04e8 VIC.SetSurface3Slot2ChromaU_Offset
0x04ec VIC.SetSurface3Slot2ChromaV_Offset
0x04f0 VIC.SetSurface4Slot2LumaOffset
0x04f4 VIC.SetSurface4Slot2ChromaU_Offset
0x04f8 VIC.SetSurface4Slot2ChromaV_Offset
0x04fc VIC.SetSurface5Slot2LumaOffset
0x0500 VIC.SetSurface5Slot2ChromaU_Offset
0x0504 VIC.SetSurface5Slot2ChromaV_Offset
0x0508 VIC.SetSurface6Slot2LumaOffset
0x050c VIC.SetSurface6Slot2ChromaU_Offset
0x0510 VIC.SetSurface6Slot2ChromaV_Offset
0x0514 VIC.SetSurface7Slot2LumaOffset
0x0518 VIC.SetSurface7Slot2ChromaU_Offset
0x051c VIC.SetSurface7Slot2ChromaV_Offset
Address Method
0x0520 VIC.SetSurface0Slot3LumaOffset
0x0524 VIC.SetSurface0Slot3ChromaU_Offset
0x0528 VIC.SetSurface0Slot3ChromaV_Offset
0x052c VIC.SetSurface1Slot3LumaOffset
0x0530 VIC.SetSurface1Slot3ChromaU_Offset
0x0534 VIC.SetSurface1Slot3ChromaV_Offset
0x0538 VIC.SetSurface2Slot3LumaOffset
0x053c VIC.SetSurface2Slot3ChromaU_Offset
0x0540 VIC.SetSurface2Slot3ChromaV_Offset
0x0544 VIC.SetSurface3Slot3LumaOffset
0x0548 VIC.SetSurface3Slot3ChromaU_Offset
0x054c VIC.SetSurface3Slot3ChromaV_Offset
0x0550 VIC.SetSurface4Slot3LumaOffset
0x0554 VIC.SetSurface4Slot3ChromaU_Offset
0x0558 VIC.SetSurface4Slot3ChromaV_Offset
0x055c VIC.SetSurface5Slot3LumaOffset
0x0560 VIC.SetSurface5Slot3ChromaU_Offset
0x0564 VIC.SetSurface5Slot3ChromaV_Offset
0x0568 VIC.SetSurface6Slot3LumaOffset
0x056c VIC.SetSurface6Slot3ChromaU_Offset
0x0570 VIC.SetSurface6Slot3ChromaV_Offset
0x0574 VIC.SetSurface7Slot3LumaOffset
0x0578 VIC.SetSurface7Slot3ChromaU_Offset
0x057c VIC.SetSurface7Slot3ChromaV_Offset
0x0580 VIC.SetSurface0Slot4LumaOffset
0x0584 VIC.SetSurface0Slot4ChromaU_Offset
0x0588 VIC.SetSurface0Slot4ChromaV_Offset
0x058c VIC.SetSurface1Slot4LumaOffset
0x0590 VIC.SetSurface1Slot4ChromaU_Offset
0x0594 VIC.SetSurface1Slot4ChromaV_Offset
0x0598 VIC.SetSurface2Slot4LumaOffset
0x059c VIC.SetSurface2Slot4ChromaU_Offset
0x05a0 VIC.SetSurface2Slot4ChromaV_Offset
0x05a4 VIC.SetSurface3Slot4LumaOffset
0x05a8 VIC.SetSurface3Slot4ChromaU_Offset
0x05ac VIC.SetSurface3Slot4ChromaV_Offset
0x05b0 VIC.SetSurface4Slot4LumaOffset
0x05b4 VIC.SetSurface4Slot4ChromaU_Offset
Address Method
0x05b8 VIC.SetSurface4Slot4ChromaV_Offset
0x05bc VIC.SetSurface5Slot4LumaOffset
0x05c0 VIC.SetSurface5Slot4ChromaU_Offset
0x05c4 VIC.SetSurface5Slot4ChromaV_Offset
0x05c8 VIC.SetSurface6Slot4LumaOffset
0x05cc VIC.SetSurface6Slot4ChromaU_Offset
0x05d0 VIC.SetSurface6Slot4ChromaV_Offset
0x05d4 VIC.SetSurface7Slot4LumaOffset
0x05d8 VIC.SetSurface7Slot4ChromaU_Offset
0x05dc VIC.SetSurface7Slot4ChromaV_Offset
0x0700 VIC.SetControlParams
0x0704 VIC.SetContextId
0x0708 VIC.SetContextIdForSlot0
0x070c VIC.SetContextIdForSlot1
0x0710 VIC.SetContextIdForSlot2
0x0714 VIC.SetContextIdForSlot3
0x0718 VIC.SetContextIdForSlot4
0x071c VIC.SetFceUcodeSize
0x0720 VIC.SetConfigStructOffset
0x0724 VIC.SetPaletteOffset
0x0728 VIC.SetHistOffset
0x072c VIC.SetFceUcodeOffset
0x0730 VIC.SetOutputSurfaceLumaOffset
0x0734 VIC.SetOutputSurfaceChromaU_Offset
0x0738 VIC.SetOutputSurfaceChromaV_Offset
0x073c VIC.SetPictureIndex
0x1114 VIC.PmTriggerEnd
13.5.1.1 NV_PVIC_THI_INCR_SYNCPT
Offset: 0x0 │ Read/Write: R/W │ Reset: 0x00000000
31:16 R 0 Reserved
13.5.1.2 NV_PVIC_THI_INCR_SYNCPT_ERR
Offset: 0x8 │ Read/Write: R/W │ Reset: 0x00000000
31:4 R 0 Reserved
1 RW1C 0 NV_PVIC_THI_INCR_SYNCPT_ERR_COND_STS_OPDONE:
0: COND_STS_OPDONE_INIT (default)
1: COND_STS_OPDONE_CLEAR
0 RW1C 0 NV_PVIC_THI_INCR_SYNCPT_ERR_COND_STS_IMM:
0: COND_STS_IMM_INIT (default)
1: COND_STS_IMM_CLEAR
13.5.1.3 NV_PVIC_THI_CTXSW_INCR_SYNCPT
Offset: 0xc │ Read/Write: R/W │ Reset: 0x00000000
31:8 R 0 Reserved
13.5.1.4 NV_PVIC_THI_CTXSW
Offset: 0x20 │ Read/Write: R/W │ Reset: 0x0000F800
27:26 R 0 Reserved
11 R 1 NV_PVIC_THI_CTXSW_AUTO_ACK:
1: AUTO_ACK_INIT (default)
10 R 0 Reserved
13.5.1.5 NV_PVIC_THI_CONT_SYNCPT_EOF
Offset: 0x28 │ Read/Write: R/W │ Reset: 0x00000000
31:9 R 0 Reserved
8 R/W 0 NV_PVIC_THI_CONT_SYNCPT_EOF_COND:
0: COND_INIT (default)
13.5.1.6 NV_PVIC_THI_METHOD0
Offset: 0x40 │ Read/Write: R/W │ Reset: 0x00000000
31:12 R 0 Reserved
13.5.1.7 NV_PVIC_THI_METHOD1
Offset: 0x44 │ Read/Write: R/W │ Reset: 0x00000000
13.5.1.8 NV_PVIC_THI_INT_STATUS
Offset: 0x78 │ Read/Write: R/W │ Reset: 0x00000000
31:1 R 0 Reserved
0 RW1C 0 NV_PVIC_THI_INT_STATUS_FALCON_INT:
0: FALCON_INT_INIT (default)
1: FALCON_INT_CLEAR
13.5.1.9 NV_PVIC_THI_INT_MASK
Offset: 0x7c │ Read/Write: R/W │ Reset: 0x00000001
31:1 R 0 Reserved
0 R/W 1 NV_PVIC_THI_INT_MASK_FALCON_INT:
1: FALCON_INT_INIT (default)
31:3 R 0 Reserved
1 R/W 0 NV_PVIC_FALCON_ITFEN_MTHDEN. Method interface enable. When set, allows the host to
push methods into the method FIFO
0: MTHDEN_INIT (default)
0: MTHDEN_DISABLE
1: MTHDEN_ENABLE
0 R/W 0 NV_PVIC_FALCON_ITFEN_CTXEN. Context switch interface enable. When set, allows the
context switch state machine to react to incoming context switch requests from the host.
0: CTXEN_INIT (default)
0: CTXEN_DISABLE
1: CTXEN_ENABLE
13.7.1 NV_PVIC_FALCON_CPUCTL
Offset: 0x1100 │ Read/Write: R/W │ Reset: 0x000000XX
31:6 R 0 Reserved
3 RW1C Unknown NV_PVIC_FALCON_CPUCTL_HRESET: Set to TRUE to apply hard reset. This bit will auto-
clear. Setting it FALSE has no effect.
1: HRESET_TRUE
0: HRESET_FALSE
2 RW1C Unknown NV_PVIC_FALCON_CPUCTL_SRESET: Set to TRUE to apply soft reset. This bit will auto-
clear. Setting it FALSE has no effect.
1: SRESET_TRUE
0: SRESET_FALSE
0 RW1C Unknown NV_PVIC_FALCON_CPUCTL_IINVAL: Set to TRUE to mark all blocks in IMEM except block 0
as INVALID. This bit will auto-clear. Setting to FALSE has no effect.
1: IINVAL_TRUE
0: IINVAL_FALSE
13.7.2 NV_PVIC_FALCON_BOOTVEC
Offset: 0x1104 │ Read/Write: R/W │ Reset: 0x00000000
31:0 R/W 0 NV_PVIC_FALCON_BOOTVEC_VEC: Stores the initial execution start address of the CPU
when it is first started after a reset.
13.8.1 NV_PVIC_FALCON_DMACTL
Offset: 0x110c │ Read/Write: R/W │ Reset: 0x000000XX
31:7 R 0 Reserved
2:1 R 0 Reserved
13.8.2 NV_PVIC_FALCON_DMATRFBASE
Offset: 0x1110 │ Read/Write: R/W │ Reset: 0x00000000
13.8.3 NV_PVIC_FALCON_DMATRFMOFFS
IMEM/DMEM offset for the transfer.
31:16 R 0 Reserved
13.8.4 NV_PVIC_FALCON_DMATRFCMD
Offset: 0x1118 │ Read/Write: R/W │ Reset: 0x0000XXXX
31:15 R 0 Reserved
11 R 0 Reserved
7:6 R 0 Reserved
3:2 R 0 Reserved
1 R Unknown NV_PVIC_FALCON_DMATRFCMD_IDLE: Indicates that the DMA engine is still busy with a
transfer or has more transfers pending in the queue.
1: IDLE_TRUE
0: IDLE_FALSE
0 R Unknown NV_PVIC_FALCON_DMATRFCMD_FULL: Indicates that the DMA request queue is full and a
valid request is still needed to move into the queue.
1: FULL_TRUE
0: FULL_FALSE
13.8.5 NV_PVIC_FALCON_DMATRFFBOFFS
Frame buffer (FB) offset for the transfer.
14.0 CPU
® ® ® ®
The NVIDIA Tegra K1 processor CPU complex contains quad ARM Cortex -A15 CPUs in a 4-PLUS-1 configuration with a
fifth architecturally identical power-saving Cortex-A15 Companion Core.
These two documents are the key Cortex-A15 references, and both are available from ARM’s website:
Cortex-A15
Revision: r3p3
Technical Reference Manual
Note: These are the current versions at the time of writing. You should periodically look for
updates and always refer to the latest available version of this material.
You should also review the latest version of the ARM errata for Cortex-A15 CPUs. ARM has published this on their website as
the Software Developers’ Errata Notice.
Main Quad-Core
Feature Complex Companion Core
Processor Revision r3p3 r3p3
Number of processors 4 1
L2 Cache Size 2MB 512KB
L2 Arbitration register slice 1 0
Option
Main Quad-Core
Feature Complex Companion Core
Generic Interrupt Controller Included Included
The goal of this architecture is to provide efficient CPU operation across a very broad range of processor loads, with the quad-
core complex optimized for high-speed operation with low dynamic power, and the Companion Core optimized for low-speed
operation where transistor leakage becomes an important factor in power. These two CPU complexes operate exclusively to
each other, meaning the hardware does not support simultaneous operation in any form. The main quad core complex has
2 Megabytes of L2 cache RAM, the companion core as a separate 512 Kilobyte L2 cache RAM.
The quad core complex implements separate power-gating for each of the four cores, and also a fifth power gate domain for
the shared logic and L2.
Refer to the Flow Controller section of this document for details on how this is controlled.
For a power-gated partition, if the sense point is at the real VDD power grid, then the drop across the power-gate adds to the
inaccuracy of the sense voltage. To reduce this inaccuracy, virtual VDD can be sensed. However, if the PG partition is power-
gated, then its virtual VDD is off and cannot be used for sense feedback. Because partitions are power-gated/ungated
dynamically, there needs to be control logic to provide dynamic control for the voltage-sense mux such that the virtual VDD is
selected only when the corresponding PG partition is power-ungated.
As shown in the following diagram, a 6-input mux is used to select one (or more) of sensed voltages. The 6-input voltages are
VVDD of each of the 5 PG partitions (in cluster0) and the real CPU VDD. The mux is expected to select the VVDD of all PG
partitions that are power-ungated (powered on). If none of the 5 PG partitions are power-ungated, then real VDD is selected as
the sense voltage.
VVDD_override_ce1_b
VVDD_override_ce3_b
VVDD_override_c0nc_b
VVDD_override_ce0_b
VVDD_override_ce2_b
c0nc_clampen
ce2_clampen
ce3_clampen
ce1_clampen
ce0_clampen
VVDD_override
Select_VDD
CE 0 CE 1
(incl. NEON, (incl. NEON,
VFP,L1$) VFP,L1$)
C0NC
(incl. L 2 Data
[2MB] , L 2 Ctrl,
SCU, vGIC,
Debug)
CE 2 CE 3
(incl. NEON, (incl. NEON,
VFP,L1$) VFP,L1$)
SE_C0NC
SE_CE1
SE_CE0
SE_CE2
SE_CE3
SE_VDD
CE0
Sense_Out
CE1 Sense Select
CE2 MUX
CE3
C0NC
CVDD
TOP
The PMC provides a 6-bit mux select bus. The mux corresponding to 5 partitions is selected if those partitions are powered on.
During normal operation, selection of the correct voltage sense signal is handled entirely by the PMC. For debug purposes, a
per partition override register (see the APBDEV_PMC_CPU_VSENSE_OVERRIDE_0 register) is provided which can be
configured to disable input from any of the 5 PG partitions, and select real VDD. The sensing mux select control needs to be
as follows:
The flow controller receives CPU power-state requests from CPUs, prioritizes them, and sends power on/off requests to PMC,
which powers gates/ungates corresponding CPUs. It monitors per CPU interrupts and events to determine CPU wake
condition and initiates the CPU wake based on wake events/interrupts.
The flow controller provides configuration registers for software to configure wake events, etc. The flow controller provides a
mechanism to halt conditionally or unconditionally:
Conditional halt/resume is based on a variety of events, including timers, external trigger, and internal clocks.
COP (AVP) is halted by extending a bus cycle.
CPU can be halted by software interaction: software issues the WFI instruction to stop the processor, the flow
controller asserts the EVENT input of the CPU to restart it.
pg_en[31:0],clamp_en
Cluster0
FlowCtlr
PPSB
Registers
standwfi/wfe FlowCtlr
Cluster
Switch
CPU1
CPU1 FlowCtlr
vGIC
CPU2
CPU2 FlowCtlr PMC
ARB
PMC
I/F
CPU3
FlowCtlr
CPU3
flow2car_mpcore_rst[4:0],
CPU
CPU-LP reset
flow2car_a9avp_rst
FlowCtlr
Cluster1
COP(ARM7)
vGIC
CPU-LP FlowCtlr
irq0,1/fiq0,1
halt
ARM7
XBAR
ARM7
Events
LIC
pg_en[7:0],clamp_en
When executing WFI, the processor waits for all prior instructions to complete before entering the idle (low-power) state. The
WFI instruction ensures that all explicit memory accesses that are prior to the WFI instruction in program order have
completed. Also, WFI ensures that all speculative memory accesses have completed.
After executing WFI, the processor asserts the STANDBYWFI signal. Assertion of STANDBYWFI guarantees that the
processor is in idle, and there is no outstanding memory access. The processor continues to assert STANDBYWFI until one of
the interrupt (IRQ or FIQ) is asserted or processor is reset.
The flow controller can be configured to trigger (per CPU) power-gating based on WFI instruction execution.
Exit from halt state occurs when the CPU detects an interrupt on IRQ or FIQ pins. Note that this state is per CPU. This clock-
gating is internal to the Cortex-A15 processor, so it does not require any support from the flow controller.
The flow controller can have one or more power-gating requests outstanding. However, it only issues one request at a time to
the PMC. A fixed priority arbiter is used to arbitrate among CPU power-gating on/off requests, and the winning request is sent
to the PMC. This is primarily for two reasons: i) to avoid power noise issues, only one partition is power gated/ungated at a
time, ii) PMC’s power-gating controller supports only one request at a time.
The flow controller to PMC interface includes core-ID which explicitly indicates which CPU or non-CPU partition should be
power gated/ungated. PMC is not expected to use cluster-ID for identifying whether request is for cluster0 or cluster1 CPU.
The CPU rail can be powered off by software running on the companion core after a cluster switch using a direct register write
to PMC. Refer to the “Cluster Switch” section for details.
The last CPU being power-gated can request non-CPU to be power-gated or CPU rail to be powered off. Similar when the first
CPU is being woken up, then the flow controller would power on (if it was off) the CPU rail or power-ungate non-CPU (if it was
power-gated).
Note: The flow controller will either sequence the CPU rail controls or the non-CPU power-gating
controls (with last CPU power-gating request), but not both.
The flow controller can be set up to power gate/ungate each of the CPU independently. In addition, the flow controller can be
set up to power gate/ungate non-CPU as a result of a CPU power gate/ungate request. The following section describes a non-
CPU power gate/ungate along with CPU. The individual CPU only power gate/ungate is described in the section on “CPU
Power Gating/Ungating Sequence”.
The following table indicates power-on options which can be triggered when the flow controller receives CPU wakeup event.
Per CPU Power Ungate Non-CPU Power UnGate CPU Rail Power On Comments
Yes No No Individual CPU power-ungating
Yes Yes No
The flow controller can be set up to power gate/ungate CPU-LP only. In addition, the flow controller can be set up to power
gate/ungate non-CPU along with CPU-LP as result of CPU-LP power gate/ungate request. The next section describes non-
CPU power gate/ungate along with CPU-LP. The CPU-LP only power gate/ungate is described in the section on “CPU Power
Gating/Ungating Sequence”.
[SW-CPU] Initiate CPU-LP power gating with non-CPU power-gating rail (refer to the section on CPU Power-Gating
(Power OFF) Sequence) for details of software steps
[HW-Flow] CPU power-gating step
- Request PMC to power-gate the CPU (Refer to the section on “CPU Power-Gating (Power OFF) Sequence”)
- Wait for PMC acknowledgment
[HW-Flow] Non-CPU power-gating step
- If non-CPU is off (see CPU_PWR_CSR[C1NC_STS]), or in the process of being powered on or off then this step
is done.
Note: This condition should never be seen. But this makes the cluster1 sequence the same as
that of cluster0, so it is all right to make this check in the state machine.
- Update non-CPU power status register (CPU_PWR_CSR[C1NC_STS]) to be in the process powering off
- Request PMC to power-gate non-CPU (refer to the section on “Non-CPU Power Gating/Ungating Sequence”)
- Waits for PMC acknowledgment
- Update non-CPU power status (CPU_PWR_CSR[C1NC_STS]) to be powered off
- If non-CPU is in the process of being powered on, then wait for it to be powered on. After that, this step is done.
Else,
- If non-CPU is in the process of being powered off, then wait for it to be powered off. After that continue to power
it off.
Note: The above two steps should never be encountered. But making these checks is all right
and makes this sequence similar to corresponding cluster0 sequence.
- Update non-CPU power status register (CPU_PWR_CSR[C0NC_STS]) to be in the process of powering on.
- Request PMC to power-ungate non-CPU
- Wait for PMC acknowledgment
- Update non-CPU power status register (CPU_PWR_CSR[RAIL_STS]) to be powered on.
[HW-Flow] CPU power-ungating step
- Request PMC to power-ungate CPU
- Waits for PMC ack
When the active cluster is cluster1, then the flow controller uses CPU-ID (programmed in MPID register) to associate CPU-LP
to corresponding CPU state machine which is used to power gate/ungate CPU-LP. Also, during cluster1 to cluster0 switch,
flow-controller uses CPU-ID to wake the corresponding cluster0 CPU (based on configured wake events).
Also, CPU-ID is used to drive cluster1 CPU-ID pins, which are captured in the CPU (CP15) register that software uses to read
the CPU-ID of the current CPU. Note that the CP15 register captures the MPID value, which is the virtualized MPIDR, not the
physical MPIDR. Thus, it must be read by the CPU in monitor mode or virtualization mode.
Once cluster0 is active and cluster migration has been completed, then the flow controller does not have any use for CPU-ID.
When configured to put the AVP into halt, the flow controller forces its memory bus interface into wait-state. After that if the
AVP issues any bus cycle (e.g., fetching next instruction), then that bus cycle does not return unless flow-controller releases
its bus (i.e., wakes it up). The flow controller can be configured to wake up the AVP by IRQ/FIQ or other wake up events.
During an AVP halt state, its clock is automatically gated by hardware.
15.1.5.2 Power-Gating
The AVP is not power-gated.
The flow controller interfaces with the Processors, PMC, and CAR to implement power-gating on/off hardware-sequence. The
power-gating controller is in the PMC, while clock and reset controls are in the CAR.
[HW-Flow] After detecting wake up condition, request PMC to power-on CPU (by asserting flow2pmc_req and
associated bus)
[HW-PMC] Power-on the CPU (deassert CPU PG-enables)
[HW-PMC] Set PWRGATE_STS register bit. This indicates that the CPU is power-ungated
[HW-PMC] Ack flow controller (by asserting pmc2flow_ack) that CPU is powered on
[HW-Flow] Deassert flow2car_*_rst to CAR
[HW-CAR] Request CPU to ungate CPU clock (by deasserting car2ce*_cke)
[HW-CPU] Ungate CPU clock
[HW-CAR] Request PMC to remove CPU clamp (by asserting car2pmc_ack)
- This is to make sure that clock gets ungated well ahead of reset deassertion
[HW-PMC] Removes the clamping (by deasserting pmc2ce*_clamp)
- This goes to the CPU and also to the CAR
[HW-PMC] Ack flow controller (by deasserting pmc2flow_ack)
[HW-CAR] Deasserts reset
[SW-CPU] CPU fetches code from reset vector.
- Note all of the Cortex-A15 CPUs share one reset-vector register (in EVP registers).
only sequence one power domain at a time, so the flow controller serializes requests on behalf of PMC. From the flow
controller hardware perspective, the sequence for non-CPU domain power gating is similar to CPU domain power
gating/ungating which is described in above sections.
There is an ARM requirement for Cortex-A15 CPUs that there must be a minimum of 16 clocks prior to clamps being
deasserted on outputs from the CPU core partitions to the non-CPU partition. To address this issue, the CAR waits for
CCPLEX to assert ccplex2car_pmc_cntr_ack before it deasserts car2pmc_<pgpart>_ack. CCPLEX implements the 16 CPU
clock cycle wait after reset is released and clocks unstopped by the CAR, before it asserts the ack to CAR. The 16-cycle
counters are implemented in the VDD_CPU power rail domain and the acks are generated from the same domain. The per-
core acks are not affected by the ce0/ce1/ce2/ce3 clamps. The c0nc, c1nc, and unpower-gated VDD_CPU logic are not
affected by the additional handshake logic between CCPLEX and CAR. So these partitions rely on the
CAR2PMC_NONCPU_ACK_WIDTH counter for CAR to allow the PMC to release the clamp controls on these partitions.
In the CAR register space, to enable the legacy mode i.e. disable the 16-cycle counter:
Set CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL2_0_IGNORE_HW_ACK_WIDTH to 1
Set CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL2_0_IGNORE_SW_ACK_WIDTH to 0
This will cause CPU core partition power gating FSMs in the SOC to use the
CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL2_0_CAR2PMC_CPU_ACK_WIDTH counter.
To enable the fix and use both the existing T3 counter and the 16-cycle counter inside CCPLEX:
- Set CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL2_0_IGNORE_HW_ACK_WIDTH to 0
- Set CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL2_0_IGNORE_SW_ACK_WIDTH to 0
To enable the fix and use only the 16-cycle counter inside CCPLEX but not the existing T3 counter:
Set CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL2_0_IGNORE_HW_ACK_WIDTH to 0
Set CLK_RST_CONTROLLER_CPU_SOFTRST_CTRL2_0_IGNORE_SW_ACK_WIDTH to 1
The ccplex2car_pmc_cntr_ack_fcpu{0-3} and DFT-related signals use tmc2clamp_pmc2c0nc_clamp as the clamp enable with
the effect that the clamps are not asserted when FCCPLEX is rail gated. The tmc2clamp_pmc2c0nc_clamp signal is asserted
only when the C0NC (non-CPU) partition is power gated. Since power-gating C0NC is mutually exclusive with respect to rail
gating FCCPLEX, there are two constraints:
FCCPLEX can only be rail gated by a cluster switch sequence by programming CSR_ENABLE_EXT field to 2’b10.
FCCPLEX still needs to be rail gated during LP0 entry from FCPU, which results in an unavoidable window of time
when the level shifters may leak when SOC and CPU rails are simultaneously being turned off by the external PMIC.
During a cluster switch from FCCPLEX to SCCPLEX, F-C0NC should be power gated only. The FCCPLEX rail can
be later turned off by software running from the SCPU:
- Set CSR_ENABLE_EXT to 0x1
- Trigger cluster switch
- Toggle the CRAIL bit of APBDEV_PMC_PWRGATE_TOGGLE_0. This step will cause the correct clamps to be
asserted.
When switching back to the FCPU, the CPU rail needs to be powered up using PMC controls. Flow controller RAIL_ENABLE
cannot be used for this purpose.
After boot power-up of the CPU rail, whenever the CPU rail is powered up by the flow controller, the flow-controller hardware
also requests cluster0 RAM re-repair, and ensures that the repair is completed.
The re-repair request and ack signals are per segment of the CPU repair chain. The request, once asserted (high), must
remain high for as long as it does not receive the corresponding ack signal.
15.1.9.1 DBGPWRUPREQ
The CoreSight can initiate power-up (for a CPU which is power-gated via the flow controller) by writing to the Cortex-A15
DBGPRCR register. As a result of this register write, A15 asserts DBGPWRUPREQ signal (a per CPU active-high level). Note,
this signal can never be asserted when C0NC (or C1NC) is power-gated (since the logic generating this is inside those
partitions).
The flow controller uses this signal as a wake-event (in addition to the wake events programmed in CPUx_CSR register) to
wake the corresponding CPU-only. The flow controller qualifies this signal by corresponding PWRUPREQ_QUAL bit (of
FLOW_DBG_QUAL register). In summary, the flow controller uses the following condition to wake up a CPU.
15.1.9.2 DBGNOPWRDWN
The CoreSight can force CPU power-down to be power-down “emulation” only by writing to the Cortex-A15 DBGPRCR
register. As a result of this register write, the Cortex-A15 asserts DBGNOPPWRDWN signal (a per CPU active-high level).
Note, this signal is asserted to emulate CPU-only power-gating.
The flow controller qualifies <ccplex2flow>_DBGNOPPWRDWNx signal by corresponding NOPPWRDWN_QUALx bit (of
FLOW_DBG_QUAL register) and uses that as an indication of CPU power-gating without the pg_enable option.
Note that CPU power-gating is still triggered by CPUx_CSR write only (based on WFI). But regardless of CPUx_CSR register
configuration, if (<>_ DBGNOPPWRDWNx && NOPPWRDWN_QUALx == TRUE), then only CPUx is power-gated without the
pg_enable option.
15.1.9.3 DBGPWRDWNREQ/DBGPWRDWNACK
Cortex-A15 debug logic needs to know about power-gating requests. It also needs to make sure that power-gating starts only
after it has acknowledged (so it can flush trace buffers, etc.). For this purpose, the Cortex-A15 provides per CPU
DBGPWRDWNREQ/ DBGPWRDWNACK interface.
Logically, STANDBYWFIx (Cortex-A15 output) can be fed to DBGPWRDWNREQx (Cortex-A15 input). But STANDBYWFI can
be asserted for many reasons, so it has to be qualified when it is asserted for CPU power-gating. The flow controller provides
qualifier (PWRDWNREQ_QUALx bits of FLOW_DBQ_QUAL register) which will be set by software at the power-gating entry,
and cleared by software at CPU power-ungating.
Also, if qualifier (i.e., PWRDWNREQ_QUALx) is set, then the flow controller needs to wait for DBGPWRDWNACKx (in
addition to waiting for existing STANDBYWFIx condition) before starting the CPUx power-gating.
The flow controller needs to wait for <ccplex2flow>_DBGPWRDWNACKx & PWRDWNREQ_QUALx (in addition to existing
wait for STANDBYWFIx etc condition).
In the Flow Controller register descriptions, CPU refers to CPU0, and COP refers to the AVP coprocessor. CPU-LP (CPU4)
has its own set of control registers. This is required because there is a case (cluster1 to cluster0 switch) where both sets of
registers can be configured in parallel. Also, since CPU-LP may morph into any of the four CPUs, it is better to keep its control
register separate.
The EVENTS register is replicated per core, once for COP, four times for the cores of Cluster0.
MODE defines how the flow controller logic operates; the reset value is 0x0 for CPU0 and COP (does nothing) and
0x2 for CPU1, 2, 3 (WAITEVENT). This is related to the default behavior of the reset generator.
Enumerated values for the field MODE are defined below.
Field Mode Enumerated Description
Value
FLOW_MODE_NONE 0 No flow control
FLOW_MODE_RUN_AND_INT 1 Keep running but generate interrupt when event
conditions met (not used)
FLOW_MODE_WAITEVENT 2 Stop running until event conditions met
FLOW_MODE_WAITEVENT_AND_INT 3 Same as FLOW_MODE_WAITEVENT but generate
an interrupt when resumed (not used)
FLOW_MODE_STOP_UNTIL_IRQ 4 Stop until an interrupt controller interrupt occurs
FLOW_MODE_STOP_UNTIL_IRQ_AND_INT 5 Same as FLOW_MODE_STOP_UNTIL_INT but
generate another interrupt when resumed (not used)
FLOW_MODE_STOP_UNTIL_EVENT_AND_IRQ 6 Stop until event conditions met AND an interrupt
controller interrupt occurs
Bit 31: (also known as Halt) = This bit is set to configure the wake up (of corresponding CPU) by any of the
interrupts (LIC_IRQ/FIQ, or GIC_RIQ/FIQ) corresponding to that CPU. If this bit is set, then none of the other
fields of this register need to be set for CPU wake. This bit is set by software and cleared by hardware when any
of these interrupt is received by hardware.
Bit 30: (also known as Wait) = This bit is set to configure the wake up (of corresponding CPU) by any of the
enabled "events". The events can be enabled by setting other fields of this register (incl. *_IRQ, *_FIQ). If this bit
is set, then at least one of the events needs to be enabled to generate wake event. This bit is set by software
and cleared by hardware when wait event is observed by hardware.
Bit 29: (also known as Sync) = This bit causes the NEXT Flow Controller register read to stall the processor until
the wake event occurs (Used for COP. Obsolete for CPUs).
The rest of the fields define which conditions will be taken into account to restart a halted processor.
Counted events: Decrement the field called ZERO. Flow controller resumes when this counter reaches 0
Activity events: The flow controller resumes when the activity occurs, no counting
15.2.1 FLOW_CTLR_HALT_CPU_EVENTS_0
Offset: 0x0 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
MODE:
0 = FLOW_MODE_NONE
1 = FLOW_MODE_RUN_AND_INT
2 = FLOW_MODE_WAITEVENT
3 = FLOW_MODE_WAITEVENT_AND_INT
4 = FLOW_MODE_STOP_UNTIL_IRQ
31:29 0x0 5 = FLOW_MODE_STOP_UNTIL_IRQ_AND_INT
6 = FLOW_MODE_STOP_UNTIL_EVENT_AND_IRQ
2 = FLOW_MODE_STOP
3 = FLOW_MODE_STOP_AND_INT
4 = FLOW_MODE_STOP_UNTIL_INT
5 = FLOW_MODE_STOP_UNTIL_INT_AND_INT
6 = FLOW_MODE_STOP_OR_INT
28 0x0 JTAG
27 0x0 SCLK
26 0x0 X32K
25 0x0 uSEC
24 0x0 MSEC
23 0x0 SEC
22 0x0 X_RDY
21 0x0 SMP31
20 0x0 SMP30
19 0x0 XRQ_D
18 0x0 XRQ_C
17 0x0 XRQ_B
16 0x0 XRQ_A
15 0x0 OBE
14 0x0 OBF
13 0x0 IBE
12 0x0 IBF
11 0x0 LIC_IRQ
10 0x0 LIC_FIQ
9 0x0 GIC_IRQ
8 0x0 GIC_FIQ
15.2.2 FLOW_CTLR_HALT_COP_EVENTS_0
Offset: 0x4 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
MODE:
0 = FLOW_MODE_NONE
1 = FLOW_MODE_RUN_AND_INT
2 = FLOW_MODE_WAITEVENT
3 = FLOW_MODE_WAITEVENT_AND_INT
4 = FLOW_MODE_STOP_UNTIL_IRQ
31:29 0x0 5 = FLOW_MODE_STOP_UNTIL_IRQ_AND_INT
6 = FLOW_MODE_STOP_UNTIL_EVENT_AND_IRQ
2 = FLOW_MODE_STOP
3 = FLOW_MODE_STOP_AND_INT
4 = FLOW_MODE_STOP_UNTIL_INT
5 = FLOW_MODE_STOP_UNTIL_INT_AND_INT
6 = FLOW_MODE_STOP_OR_INT
28 0x0 JTAG
27 0x0 SCLK
26 0x0 X32K
25 0x0 uSEC
24 0x0 MSEC
23 0x0 SEC
22 0x0 X_RDY
21 0x0 SMP31
20 0x0 SMP30
19 0x0 XRQ_D
18 0x0 XRQ_C
17 0x0 XRQ_B
16 0x0 XRQ_A
15 0x0 OBE
14 0x0 OBF
13 0x0 IBE
12 0x0 IBF
11 0x0 LIC_IRQ
10 0x0 LIC_FIQ
9 0x0 GIC_IRQ
8 0x0 GIC_FIQ
15.2.3 FLOW_CTLR_CPU_CSR_0
The CPU_CSR registers are replicated for each CPU cores. They define additional characteristics of the flow controller linked
to CPU cores, especially the interaction of the flow controller with power management functions. The LP1 state is normally
entered and exited via side effects of the flow controller operation.
All fields of the CPU_CSR register have an initial value of 0. The different fields are:
IMMEDIATE_WAKE: If set, CPU is powered up immediately (without waiting for an interrupt or event). Note: If
this is set then HALT_CPUx_EVENTS[MODE] should be set to 0x2 for immediate wake.
SWITCH_CLUSTER: If set, the active cluster will be switched when all indicated CPU reach STANDBY_WFI.
This bit self clears once the cluster switch sequence is completed
WAIT_WFI_BITMAP: All cores indicated in bitmap must be in STANDBY_WFI before switching Cluster
EVENT_ENABLE: Generates an event when the flow controller exits the halted state
ENABLE: PowerGate Enable - Halt or Event-wait causes CPU power-gating.
27:24 RO X PWR_STATE
23 RO X WAIT_EVENT
22 RO X HALT
21 RO X P2F_ACK
20 RO X F2P_PWRUP
19 RO X F2P_REQ
17 RO X F2C_MPCORE_RST
16 RO X PWR_OFF_STS
15 RW 0x0 INTR_FLAG
14 RW 0x0 EVENT_FLAG
ENABLE_EXT:
0 = POWERGATE_CPU_ONLY
13:12 RW 0x0 1 = POWERGATE_BOTH_CPU_NONCPU
2 = POWERGATE_CPU_TURNOFF_CPURAIL
3 = PG_EMULATION
3 RW 0x0 IMMEDIATE_WAKE
2 RW 0x0 SWITCH_CLUSTER
1 RW 0x0 EVENT_ENABLE
0 RW 0x0 ENABLE
15.2.4 FLOW_CTLR_COP_CSR_0
COP Control/Status for Interrupts
R/W addr=6000:700c
15.2.5 FLOW_CTLR_XRQ_EVENTS_0
XRQ Event Detect Selector Register
XRQ_D7_XRQ_D0: Setting a bit to 1 enables event triggering for the corresponding bit in
GPIO port D. The assertion level is determined by GPIO_INT.LVL.D. If more than one
31:24 0x0
XRQ.D bit is set, the events are ORed together. The resultant event is enabled by setting the
XRQ.D bit in the HALT_CPU.EVENTS or HALT_COP.EVENTS registers.
XRQ_C7_XRQ_C0: Setting a bit to 1 enables event triggering for the corresponding bit in
GPIO port C. The assertion level is determined by GPIO_INT.LVL.C. If more than one
23:16 0x0
XRQ.C bit is set, the events are ORed together. The resultant event is enabled by setting the
XRQ.C bit in the HALT_CPU.EVENTS or HALT_COP.EVENTS registers.
XRQ_B7_XRQ_B0: Setting a bit to 1 enables event triggering for the corresponding bit in
GPIO port B. The assertion level is determined by GPIO_INT.LVL.B. If more than one XRQ.B
15:8 0x0
bit is set, the events are ORed together. The resultant event is enabled by setting the XRQ.B
bit in the HALT_CPU.EVENTS or HALT_COP.EVENTS registers.
XRQ_A7_XRQ_A0: Setting a bit to 1 enables event triggering for the corresponding bit in
GPIO port A. The assertion level is determined by GPIO_INT.LVL.A. If more than one XRQ.A
7:0 0x0
bit is set, the events are ORed together. The resultant event is enabled by setting the XRQ.A
bit in the HALT_CPU.EVENTS or HALT_COP.EVENTS registers.
15.2.6 FLOW_CTLR_HALT_CPU1_EVENTS_0
Offset: 0x14 │ Read/Write: R/W │ Reset: 0x40000000 (0b01000000000000000000000000000000)
MODE:
0 = FLOW_MODE_NONE
1 = FLOW_MODE_RUN_AND_INT
2 = FLOW_MODE_WAITEVENT
3 = FLOW_MODE_WAITEVENT_AND_INT
4 = FLOW_MODE_STOP_UNTIL_IRQ
31:29 0x2 5 = FLOW_MODE_STOP_UNTIL_IRQ_AND_INT
6 = FLOW_MODE_STOP_UNTIL_EVENT_AND_IRQ
2 = FLOW_MODE_STOP
3 = FLOW_MODE_STOP_AND_INT
4 = FLOW_MODE_STOP_UNTIL_INT
5 = FLOW_MODE_STOP_UNTIL_INT_AND_INT
6 = FLOW_MODE_STOP_OR_INT
28 0x0 JTAG
27 0x0 SCLK
26 0x0 X32K
25 0x0 uSEC
24 0x0 MSEC
23 0x0 SEC
22 0x0 X_RDY
21 0x0 SMP31
20 0x0 SMP30
19 0x0 XRQ_D
18 0x0 XRQ_C
17 0x0 XRQ_B
16 0x0 XRQ_A
15 0x0 OBE
14 0x0 OBF
13 0x0 IBE
12 0x0 IBF
11 0x0 LIC_IRQ
10 0x0 LIC_FIQ
9 0x0 GIC_IRQ
8 0x0 GIC_FIQ
15.2.7 FLOW_CTLR_CPU1_CSR_0
Offset: 0x18 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxx0000000000000000)
27:24 RO X PWR_STATE
23 RO X WAIT_EVENT
22 RO X HALT
21 RO X P2F_ACK
20 RO X F2P_PWRUP
19 RO X F2P_REQ
17 RO X F2C_MPCORE_RST
16 RO X PWR_OFF_STS
15 RW 0x0 INTR_FLAG
14 RW 0x0 EVENT_FLAG
ENABLE_EXT:
0 = POWERGATE_CPU_ONLY
13:12 RW 0x0 1 = POWERGATE_BOTH_CPU_NONCPU
2 = POWERGATE_CPU_TURNOFF_CPURAIL
3 = PG_EMULATION
3 RW 0x0 IMMEDIATE_WAKE
2 RW 0x0 SWITCH_CLUSTER
1 RW 0x0 EVENT_ENABLE
0 RW 0x0 ENABLE
15.2.8 FLOW_CTLR_HALT_CPU2_EVENTS_0
Offset: 0x1c │ Read/Write: R/W │ Reset: 0x40000000 (0b01000000000000000000000000000000)
MODE:
0 = FLOW_MODE_NONE
1 = FLOW_MODE_RUN_AND_INT
2 = FLOW_MODE_WAITEVENT
3 = FLOW_MODE_WAITEVENT_AND_INT
4 = FLOW_MODE_STOP_UNTIL_IRQ
31:29 0x2 5 = FLOW_MODE_STOP_UNTIL_IRQ_AND_INT
6 = FLOW_MODE_STOP_UNTIL_EVENT_AND_IRQ
2 = FLOW_MODE_STOP
3 = FLOW_MODE_STOP_AND_INT
4 = FLOW_MODE_STOP_UNTIL_INT
5 = FLOW_MODE_STOP_UNTIL_INT_AND_INT
6 = FLOW_MODE_STOP_OR_INT
28 0x0 JTAG
27 0x0 SCLK
26 0x0 X32K
25 0x0 uSEC
24 0x0 MSEC
23 0x0 SEC
22 0x0 X_RDY
21 0x0 SMP31
20 0x0 SMP30
19 0x0 XRQ_D
18 0x0 XRQ_C
17 0x0 XRQ_B
16 0x0 XRQ_A
15 0x0 OBE
14 0x0 OBF
13 0x0 IBE
12 0x0 IBF
11 0X0 LIC_IRQ
10 0X0 LIC_FIQ
9 0X0 GIC_IRQ
8 0X0 GIC_FIQ
15.2.9 FLOW_CTLR_CPU2_CSR_0
Offset: 0x20 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxx0000000000000000)
27:24 RO X PWR_STATE
23 RO X WAIT_EVENT
22 RO X HALT
21 RO X P2F_ACK
20 RO X F2P_PWRUP
19 RO X F2P_REQ
17 RO X F2C_MPCORE_RST
16 RO X PWR_OFF_STS
15 RW 0x0 INTR_FLAG
14 RW 0x0 EVENT_FLAG
ENABLE_EXT:
0 = POWERGATE_CPU_ONLY
13:12 RW 0x0 1 = POWERGATE_BOTH_CPU_NONCPU
2 = POWERGATE_CPU_TURNOFF_CPURAIL
3 = PG_EMULATION
3 RW 0x0 IMMEDIATE_WAKE
2 RW 0x0 SWITCH_CLUSTER
1 RW 0x0 EVENT_ENABLE
0 RW 0x0 ENABLE
15.2.10 FLOW_CTLR_HALT_CPU3_EVENTS_0
Offset: 0x24 │ Read/Write: R/W │ Reset: 0x40000000 (0b01000000000000000000000000000000)
MODE:
0 = FLOW_MODE_NONE
1 = FLOW_MODE_RUN_AND_INT
2 = FLOW_MODE_WAITEVENT
3 = FLOW_MODE_WAITEVENT_AND_INT
4 = FLOW_MODE_STOP_UNTIL_IRQ
31:29 0x2 5 = FLOW_MODE_STOP_UNTIL_IRQ_AND_INT
6 = FLOW_MODE_STOP_UNTIL_EVENT_AND_IRQ
2 = FLOW_MODE_STOP
3 = FLOW_MODE_STOP_AND_INT
4 = FLOW_MODE_STOP_UNTIL_INT
5 = FLOW_MODE_STOP_UNTIL_INT_AND_INT
6 = FLOW_MODE_STOP_OR_INT
28 0x0 JTAG
27 0x0 SCLK
26 0x0 X32K
25 0x0 uSEC
24 0x0 MSEC
23 0x0 SEC
22 0x0 X_RDY
21 0x0 SMP31
20 0x0 SMP30
19 0x0 XRQ_D
18 0x0 XRQ_C
17 0x0 XRQ_B
16 0x0 XRQ_A
15 0x0 OBE
14 0x0 OBF
13 0x0 IBE
12 0x0 IBF
11 0X0 LIC_IRQ
10 0X0 LIC_FIQ
9 0X0 GIC_IRQ
8 0X0 GIC_FIQ
15.2.11 FLOW_CTLR_CPU3_CSR_0
Offset: 0x28 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxx0000000000000000)
27:24 RO X PWR_STATE
23 RO X WAIT_EVENT
22 RO X HALT
21 RO X P2F_ACK
20 RO X F2P_PWRUP
19 RO X F2P_REQ
17 RO X F2C_MPCORE_RST
16 RO X PWR_OFF_STS
15 RW 0x0 INTR_FLAG
14 RW 0x0 EVENT_FLAG
ENABLE_EXT:
0 = POWERGATE_CPU_ONLY
13:12 RW 0x0 1 = POWERGATE_BOTH_CPU_NONCPU
2 = POWERGATE_CPU_TURNOFF_CPURAIL
3 = PG_EMULATION
3 RW 0x0 IMMEDIATE_WAKE
2 RW 0x0 SWITCH_CLUSTER
1 RW 0x0 EVENT_ENABLE
0 RW 0x0 ENABLE
15.2.12 FLOW_CTLR_CLUSTER_CONTROL_0
Offset: 0x2c │ Read/Write: R/W │ Reset: 0x04004000 (0b000001000000000001000000xxxxxxx0)
POST_SWITCH_DELAY: Two delays on top of the built in pipeline delay when switching
31:20 0x40
cluster, in clock cycles
ACTIVE: The Active field can be written, this should only be done by the COP after making
sure all clusters are inactive. Directly writing the Active field will otherwise most probably
result in serious errors as there are no interlock in hardware as when the flow controller is
0 0x0
used to control the switch together with the use of WFI on the currently inactive cluster
0=G
1 = LP
15.2.13 FLOW_CTLR_HALT_COP1_EVENTS_0
Offset: 0x30 │ Read/Write: R/W │ Reset: 0x40000000 (0b01000000000000000000000000000000)
MODE:
0 = FLOW_MODE_NONE
1 = FLOW_MODE_RUN_AND_INT
2 = FLOW_MODE_WAITEVENT
3 = FLOW_MODE_WAITEVENT_AND_INT
4 = FLOW_MODE_STOP_UNTIL_IRQ
31:29 0x2 5 = FLOW_MODE_STOP_UNTIL_IRQ_AND_INT
6 = FLOW_MODE_STOP_UNTIL_EVENT_AND_IRQ
2 = FLOW_MODE_STOP
3 = FLOW_MODE_STOP_AND_INT
4 = FLOW_MODE_STOP_UNTIL_INT
5 = FLOW_MODE_STOP_UNTIL_INT_AND_INT
6 = FLOW_MODE_STOP_OR_INT
28 0x0 JTAG
27 0x0 SCLK
26 0x0 X32K
25 0x0 uSEC
24 0x0 MSEC
23 0x0 SEC
22 0x0 X_RDY
21 0x0 SMP31
20 0x0 SMP30
19 0x0 XRQ_D
18 0x0 XRQ_C
17 0x0 XRQ_B
16 0x0 XRQ_A
15 0x0 OBE
14 0x0 OBF
13 0x0 IBE
12 0x0 IBF
11 0x0 LIC_IRQ
10 0x0 LIC_FIQ
9 0x0 GIC_IRQ
8 0x0 GIC_FIQ
15.2.14 FLOW_CTLR_COP1_CSR_0
Offset: 0x34 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxx00xxxxx0xxx00x00)
27:24 RO X PWR_STATE
23 RO X WAIT_EVENT
22 RO X HALT
21 RO X P2F_ACK
20 RO X F2P_PWRUP
19 RO X F2P_REQ
17 RO X F2C_MPCORE_RST
16 RO X PWR_OFF_STS
15 RW 0x0 INTR_FLAG
14 RW 0x0 EVENT_FLAG
8 RW 0x0 WAIT_WFI_BITMAP
3 RW 0x0 IMMEDIATE_WAKE
1 RW 0x0 EVENT_ENABLE
0 RW 0x0 ENABLE
15.2.15 FLOW_CTLR_CPU_PWR_CSR_0
Offset: 0x38 │ Read/Write: R/W │ Reset: 0x00000100 (0bxxxxxxxxxxxxxxxxxxxxxxx100000000)
CPU_RG_CFG: If this bit is set, then the flow controller would initiate last-CPU PG (along
with CPU RG (rail-gating) or non-CPU PG) only when other 3 CPUs are already power-
8 0x1 gated. This is primarily for debug purposes.
0 = DISABLE
1 = ENABLE
C1NC_STS: Hardware updates this register based on the current status of the C1NC
partition. Before requesting a power-off (or on) request, flow controller updates this status to
"in the process" status. Note that the flow controller requests C1NC power on/off based on
this register value or PMC pwrgate-status of C1NC depending upon the USE_FLOW_STS
7:6 0x0 register. For debug purposes, this can be written by software.
0 = PARTITION_OFF
1 = PG_IN_PROGRESS
2 = PU_IN_PROGRESS
3 = PARTITION_ON
C0NC_STS: hardware updates this register based on the current status of the C0NC
partition. Before requesting a power-off (or on) request, flow controller updates this status to
"in the process" status. Note, flow controller requests C0NC power on/off based on this
register value or PMC pwrgate-status of C0NC depending upon USE_FLOW_STS register.
5:4 0x0 For debug purposes, this can be written by software.
0 = PARTITION_OFF
1 = PG_IN_PROGRESS
2 = PU_IN_PROGRESS
3 = PARTITION_ON
USE_FLOW_STS:If this is set (=1), then the flow controller will use C0NC_STS/
C1NC_STS/RAIL_STS bits to determine whether to power-gate C0NC/C1NC/CRAIL
3 0x0 domains. If this bit is clear (=0), then the flow controller will use the PMC pwrgate-status of
C0NC/C1NC/CRAIL to determine whether to power-gate the C0NC (and C1NC) domains.
In either case, the C0NC_STS/C1NC_STS/RAIL_STS fields are updated in the same way.
RAIL_STS: Hardware updates this register based on the current status of the CPU-rail.
Before requesting a power-off (or on) request, flow controller updates this status to "in the
process" status. Note, flow controller requests CPU-RAIL power on/off based on this
register value or PMC pwrgate-status of CRAIL depending upon USE_FLOW_STS register.
2:1 0x0 For debug purposes, this can be written by software.
0 = RAIL_OFF
1 = RG_IN_PROGRESS
2 = RU_IN_PROGRESS
3 = RAIL_ON
RAIL_ENABLE: CPU rail power-on request. Software sets this to request CPU rail pwr-on
0 0x0 by flow-controller interaction. If rail is already on, writing to this is ignored. Hardware clears
this bit when CPU power rail in turned on.
15.2.16 FLOW_CTLR_MPID_0
Offset: 0x3c │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00)
CPU_ID: CPU-ID of C1 CPU. Software programs this field before cluster0 -> cluster1
1:0 0x0
switch. This ID is provided to MPCore_LP which is what is read when the OS reads MPIDR.
15.2.17 FLOW_CTLR_RAM_REPAIR_0
Offset: 0x40 │ Read/Write: R/W │ Reset: 0x00000004 (0bxxxxxxxxxxxxxxxx00000000xxxx01x0)
DBG_EN: Debug enable to be able to repair of individual segments of the cluster0 repair
chain
3 RW 0x0
0 = DISABLE
1 = ENABLE
STS: Indicates Cluster repair chain status. hardware sets this to '1' when repair of all
1 RO X
segments is done. hardware clears this to '0' when RAM repair is requested.
REQ: Cluster0 RAM repair request. Software sets this bit to '1' to initiate RAM repair
request to all segments in parallel. Hardware clears this bit when software triggered repair is
0 RW 0x0 done (i.e., STS=1)
0 = DISABLE
1 = ENABLE
15.2.18 FLOW_CTLR_FLOW_DBG_SEL_0
Offset: 0x44 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxx0000xxxx0000)
15:14 RO X NC_PG_PWR_STATE: Current state of Non CPU Power Gate state machine
13:12 RO X NC_PU_PWR_STATE: Current state of Non CPU Power Ungate state machine
15.2.19 FLOW_CTLR_FLOW_DBG_CNT0_0
Offset: 0x48 │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
VALUE: Activity count value (updated by hardware based on CNT0_SEL). This register can
31:0 0x0
be written by software to be able to clear it.
15.2.20 FLOW_CTLR_FLOW_DBG_CNT1_0
Offset: 0x4c │ Read/Write: R/W │ Reset: 0x00000000 (0b00000000000000000000000000000000)
VALUE: Activity count value (updated by hardware based on CNT1_SEL). This register can
31:0 0x0
be written by software to be able to clear it.
15.2.21 FLOW_CTLR_FLOW_DBG_QUAL_0
Offset: 0x50 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxx0000xxx00000xxx00000xxx00000)
15.2.22 FLOW_CTLR_FLOW_CTLR_SPARE_0
Offset: 0x54 │ Read/Write: R/W │ Reset: 0xffff0000 (0b11111111111111110000000000000000)
15.2.23 FLOW_CTLR_RAM_REPAIR_CLUSTER1_0
Offset: 0x58 | Read/Write: R/W | Reset: 0x00XX000X (0bxxxxxxxxxxxxxxxx00000000xxxx0xx0)
DBG_STS: Repair done (acknowledge) from repair logic. There is one segment. Bits 23:17 are
unused. Reads to these bits will always return 0s.
23:16 RO X Bits 23:18: unused
Bit 17 - sl2
Bit 16 - scpu
DBG_REQ: Repair request for individual segments. There is one segment. Bits 15:9 are unused.
Reads to these bits will always return 0s
15:8 RW 0x0 Bits 15:10: unused
Bit 9 - sl2
Bit 8 - scpu
DBG_EN: Debug enable to be able to repair of individual segments of the cluster0 repair chain
3 RW 0x0 0 = DISABLE
1 = ENABLE
STS: Indicates Cluster repair chain status. Hardware sets this to '1' when repair of all segments is
1 RO X
done. Hardware clears this to '0' when RAM repair is requested
REQ: Cluster1 RAM repair request. Software sets this bit to '1' to initiate RAM repair request to all
segments in parallel. Hardware clears this bit when software-triggered repair is done (i.e., STS=1)
0 RW 0x0
0 = DISABLE
1 = ENABLE
The Tegra K1 memory controller (MC) handles memory requests from internal clients and arbitrates among them to allocate
memory bandwidth for DDR3L and LPDDR3 SDRAMs.
The Tegra K1 memory controller (MC) handles memory requests from internal clients and arbitrates among them to allocate
memory bandwidth for DDR3L and LPDDR3 SDRAMs. The external memory controller (EMC) communicates with external
DDR3L and LPDDR3 devices.
Arbitration Domains (ADs), which can handle a single request or response per clock from a group of clients. Typically,
a system has a single Arbitration Domain, but an implementation may divide the client space into multiple Arbitration
Domains to increase the effective system bandwidth. Multiple Traffic Classes within a single Arbitration Domain and
Protocol Arbiter are allowed.
Protocol Arbiters (PAs), which manage a related pool of memory devices. A system may have a single Protocol
Arbiter or multiple Protocol Arbiters.
Memory Crossbar, which routes request and responses between Arbitration Domains and Protocol Arbiters. In the
simplest version of the system, the Memory Crossbar is just a pass through between a single Arbitration Domain and
a single Protocol Arbiter.
Global Resources, which include entities such as configuration registers which are shared across the Memory
Subsystem.
Write CAMs (WCAMs), which improves performance and throughput for PCIe ordered clients (PCIe, SATA, HDA, and
USB3), CPU writes, and CPU copies.
Memory Controller Client Interface (MCCIF), which provides a standardized interface for access to the Memory
Controller.
Translation Unit, which handles virtual-to-physical address translation, aperture decode, physical address security
checks, and protocol arbiter-specific decodes (such as external DRAM address decodes).
The Tegra K1 device supports a single physical channel of memory interface, which operates in either single 1x32 or hybrid
2x32 / 1x64 configurations. There is an alternate path through the memory controller to access IRAM via AHB re-direction.
Figure 29 below is a simplified view of how memory requests are arbitrated in the Tegra K1 MSS. Memory client requests are
first arbitrated through a sequence of ring arbiters which perform a type of round-robin arbitration. There are three ring arbiters
referred to as ring0, ring1, and ring2. Ring1 arbiter clients are the ISO clients (display and camera) and the winner of the ring2
arbiter. Each ring has a rate control mechanism referred to as Priority Tier Snap Arbiter (PTSA). The client’s bandwidth
guarantee is specified by the PTSA rate (also referred to as “DDA”).
The block labelled “Row Sorter” is a pending request buffer (it sorts requests by the DRAM row that it refers to). This row
sorter is made up of many “bank queues” which hold the requests made to the same DRAM bank/row. The number of
requests pending in the row sorter can affect whether ring1 or ring2 arbiters are throttled (slowed down) based on thresholds.
Memory Controller
Memory Requestor Ring1 and
Ring2
Memory Requestor Arbiters
SMMU
Row Sorter
External MC
32 32
DRAM DRAM
The sub-partition mechanism is used by the GPU, display clients (for rotation), VIC (for rotation), MSENC (in x,y flip mode),
and the CPU (for critical-word-first). Clients that choose not to use the sub-partition feature set the extra column address bits
to the same values as the other channel. They see the DRAM as a simple 64B memory system. The sub-partition feature is
only beneficial in systems with a 64b memory. In systems with 32b memory, client addressing and request granularity are
unchanged, but the MC treats each 32B sector as an independent 32B atom.
A combined SMMU/TU
Configuration registers and statistics counters
Initial configuration
Power management
Device management
Translation management
ISO client bandwidth allocation
Statistics and debugging
The Arbitration Domains operate off of a unified arbitration clock. This clock is further divided-down to produce a clock-rate
independent clock for counting latency intervals across the Memory System (also known as “ticks”). This divide-down should
be programmed to a constant interval at initialization (and any other clock-rate change). A 30 ns interval is suggested since it
is an even divide-down of many common DRAM clocks, but any convenient granularity may be chosen.
There are several global memory system tuning options that tend to shape the memory performance. Some of these can be
set statically, at initialization time, others depend on clock frequencies. For example, with SMMU configuration, the SMMU
requires software to set up and maintain page tables in memory, enable translation for clients, and assign clients to address
space identifiers.
Device/Rank Geometry
DRAM devices come in many sizes, widths, etc. The arbiter must be programmed to drive the correct combination of address
bits, data bits, and protocol.
Special cycles may be emitted during normal operation as well; the Arbiter will inject them into the data stream at the
appropriate places (typically along with refresh cycles).
During device initialization, software must ensure that no client can access the memory. This can be done with per-module
flush-enable bits.
Latency allowance may also be configured dynamically for certain clients. Latency allowance should be programmed to
default values during initial configuration.
Once a request is queued to the controller for that DRAM, the hardware will automatically wake from the low-power state if it
entered that state via hardware control. This can take a relatively long amount of time since the controller may be required to
issue a number of refresh cycles first. For software-initiated self-refresh, software must issue a register write to start the
transition from self-refresh back to a fully-powered state.
Deep power-down must be explicitly requested by software, since it causes DRAM data to be lost. Software must disable new
incoming requests to the MSS, wait for all outstanding in-flight requests to retire, and then write a register to transition to the
deep power-down state. To exit the state, software must reinitialize the DRAM and controller before re-enabling transfers.
Deep power-down mode may be enabled for each chip-select in a Protocol Arbiter independently and each Protocol Arbiter
independently.
Normal active bank power optimization is managed principally by the Protocol Arbiter. The arbiter will arrange to close banks
as soon as possible and to hold requests for as long as the latency timer will allow, with the intent of grouping same-page
accesses into a coherent burst.
Isochronous dribble, caused by a low periodic request rate. This can be (and should be) managed in the Display
client by using hysteresis (high and low watermarks) on the request buffer to group requests into bursts.
Clock crossing dribble, which is caused by a large disparity between the client clock and the Arbitration Domain clock.
If the client’s clock is slow (which it often is for Display), individual requests will have several idle cycles between
each request. In general, this is unavoidable by the client.
It is difficult for the Protocol Arbiter to handle the second type of dribble when it is under load, because it cannot “see” a large
enough window of requests to group the traffic efficiently. Low-data-rate isochronous clients should have client-side request
hysteresis to handle isochronous dribble. The Protocol Arbiter can handle clock-crossing dribble when it is under load,
because the delays are smaller and it will schedule other traffic preferentially while waiting for the dribbling traffic to
accumulate. When in the OSIdle use case, the Protocol Arbiter will not have enough traffic to keep the client dribble from
becoming DRAM dribble (isolated requests that open and close the DRAM pages more often than necessary).
To manage DRAM dribble, the controller adds the concept of the “hysteresis hold-off” (also known as iso holdoff), which is a
per-controller state bit. When the hold-off is active, the controller is held off from issuing activate commands to open new
DRAM pages. Incoming requests will back up in the Protocol Arbiter’s row sorter and store buffer until the hold-off is released.
The hold-off is enabled whenever an individual device goes idle due to lack of work. It is released automatically whenever a
latency timer expires, or the Protocol Arbiter stalls due to fullness. The net effect of the hold-off is to group all requests for the
DRAM into activity bursts.
The hold-off causes a delay in requests transitioning from a memory-idle state. This can affect some traffic in a negative
manner – principally requests that are low-latency like the CPU. To keep the hold-off from impacting these requests, software
has a per-module configuration bit that disables the hold-off for certain known-latency-sensitive clients. Whenever a request
with the holdoff-disable bit set enters the Protocol Arbiter, the hold-off is released. The holdoff is enabled whenever an
individual device/rank goes idle due to lack of pending requests. The holdoff is released automatically whenever a request
expires, the Protocol Arbiter stalls due to fullness, a request from a non-hysteresis client is received, or the bank-queue length
reaches a programmable threshold. The net effect of the holdoff is to group requests for the DRAM into activity bursts.
The Memory System “arbitration clock”, which is the clock used by the Arbitration Domains. Changing this clock
reduces the overall bandwidth of the system and reduces the power required by the client interfaces and cross-chip
Memory System routing.
Individual Protocol Arbiter clocks. These reduce the bandwidth available to a particular memory pool and reduce the
power consumed by the external pins and the external DRAM. Some Protocol Arbiters may be synchronous to the
arbitration clock and not be explicitly controllable via a separate clock enable.
Tegra K1 devices have a single clock domain for the Arbitration Domain and the Protocol Arbiter: mcclk. The command
controller runs on a second clock called emcclk, which matches the frequency of the command bus on the DRAMs. Mcclk can
be configured to run at 1x, 1/2x, or 1/4x of emcclk. Mcclk and emcclk are phase-aligned.
Both clocks may be changed as part of frequency scaling. Changing the arbitration clock rate affects the Arbitration Domain’s
idea of the latency timeout. Software should change the divide-down register to keep the scale of latency timeout “ticks” to a
(relatively) constant time unit. Generally a tick time of 30 ns is used since it divides evenly into most of the common DRAM
frequencies, but any value of tick granularity may be chosen.
Both the arbitration clock and memory clock have separate divide-downs.
Changing the Protocol Arbiter clock rate affects the relative memory timing parameters. The DRAM timing parameters are
double-buffered to allow software to update the timing values for the next clock speed setting and then simultaneously switch
to using the new values by writing a trigger.
The DRAM protocol itself may require further clock-change restrictions. For example, DDR3 requires a certain number of
cycles in which to re-lock the on-DRAM DLL. To further facilitate the hardware/software handoff and reduce latency for the
clock-change operation, a hardware handshake exists between the clock controller module and the Protocol Arbiter.
The MSS maintains two copies of each configuration register that may need to change due to a clock-change, the “active” and
“assembly” copies; this is also known as a “shadowed” register. The active copy is what the MSS is currently configured to
use, and cannot be written to. The assembly copy can be written to at any time, and it can be copied onto the active via a
trigger mechanism. The clock-change handshake includes a hardware-initiated trigger for this shadow update.
To assist in full-system power analysis using silicon, the Protocol Arbiter should include enough statistics about the DRAM bus
cycles to be able to calculate the DRAM power consumed.
The exception to this is that the MC schedules refresh commands to the DRAM.
GPU surfaces have their own virtual address space that is translated by the GMMU within the GPU. The GMMU either
translates requests into physical addresses that bypass the SMMU or into a second virtual address space that is then
translated into physical addresses by the SMMU.
The hardware blocks illegal transfers to memory. Some transfers are based on physical DRAM limitations (addressing outside
of the address map), permissions (addressing “secure” physical memory from a non-secure client) and from the SMMU
(accessing an unmapped page). All of these are reported via a fault interface which records the transfer information of the last
faulting address, including the following data:
Faulting transfers continue through the system, but faulting reads return all-ones and faulting writes discard the write data.
Writing a fault triggers a (maskable) interrupt.
1. The MSS does not guarantee the coherency between different clients if the write-response tag has not been provided
back to the clients.
2. The MSS guarantees that if a write is sent with a write-response tag and that tag is returned to the client, no other
read or write issued after the response is received from anywhere in the system can pass that write.
3. The MSS guarantees that within a single client, write responses will complete in-order.
4. For PCIe ordered clients, the MSS guarantees that all writes will complete in-order.
For the most part, the memory system is fire-and-forget. Software however needs to be involved in the configuration,
translation, and power management services as described above.
Initial configuration
Power management
Device/rank management
Translation management
ISO client bandwidth allocation (per use case)
Statistics and debugging
16.4.1 Boot
Tegra K1 devices have a two-stage boot:
The Boot ROM is responsible for getting the chip out of reset to where driver-level software can take over.
The Boot Loader or the OS-recovery code is the portion of the driver responsible for completing the boot process to
the general-purpose OS.
The Boot ROM is an actual ROM built into the chip, and the Boot Loader and OS recovery section are externally loaded code.
The Boot Loader is only used for Cold boot; Warm boot utilizes operating-system recovery code.
Tegra K1 devices can “boot” in two ways: “Warm boot” or “Cold boot”. Cold boot is defined as booting from a fully powered-off
or fully reset state. Warm boot is defined as recovery from the lowest-power state (LP0), where the external DRAM has been
held in self-refresh mode while the Tegra K1 core was powered off. Warm boot use case occurs much more often; for
example, it is the use case hit whenever a SmartPhone wakes from Standby to answer a call.
The use of this path does not require the SMMU to be set as the IRAM addresses are expected to be physical addresses. The
MC redirects requests to IRAM before the SMMU translation.
This is an additional step in the boot process for these scenarios. ARC_CLK_OVR_ON must be enabled to use the ARC path.
Once all IRAM accesses are done for boot, ARC_CLK_OVR_ON should be disabled.
1. Fetch the BCT values from the storage device and move them to IRAM using AHB redirection.
2. Configure the PLL used by the MC/EMC based on BCT values
3. Wait for PLLs to lock
4. Program necessary always-on static pad configurations in the PMC
5. Configure memory clocks based on BCT values
6. Enable the MC/EMC clocks
7. Release memory subsystem resets
8. Program other necessary pad/pad-macro configuration
9. Program initial configuration for the MC/EMC based on BCT values
10. Perform the DRAM initialization sequence. This sequence is specific to the DRAM protocol used and varies
depending on the requirements of a particular device. For example, a DDR3 sequence goes as follows:
a. Apply power to the device
b. Wait until voltage is stable
c. Assert DRAM reset
d. Wait 200 μs
e. Deassert DRAM reset
f. Apply stable clocks
g. Wait 500 μs
h. Assert and hold CKE high
i. Precharge all banks
j. Send 2 Auto-refresh commands
k. Write to Mode register 0, 1, 2, 3
l. Issue ZQ Calibration command
m. Wait for ZQ calibration and DRAM DLL lock time to complete
11. Enable power-saving features such as clock stop, active power down, dynamic-self-refresh
12. Start periodic sequences such as auto refresh, ZQ calibration, auto-calibration
1
13. Release the memory-initialization hardware lock
After this, the external DRAM and Memory Subsystem are ready for use.
The PMC Scratch registers are in the Always-On partition, and are powered during LP0. The power and area limitations of this
implementation restricts the number of PMC Scratch registers available; there are a smaller number of PMC Scratch Registers
than the number of bits needed to fully configure the MC and EMC. The Scratch Registers are only used to store the minimum
required configuration to get to working DRAM. The Boot ROM may not be able to Warm boot to full POR speed using only the
Scratch Register data; if this limitation is confirmed, the Boot Loader may be required to mimic DVFS software and reprogram
the MC/EMC to full-speed operation using data stored in DRAM. It is up to the LP0 Entry software code to ensure the proper
configuration gets written to the Scratch Registers.
The Warm boot code provided by the MSS includes algorithms for deriving the approximate MC arbiter performance
parameters from the EMC timing parameters. The EMC has provided generation code for the packing/unpacking calls for the
scratch registers to ease the software maintenance burden.
1
AHB_ARBITRATION_XBAR_CTRL.MEM_INIT_DONE
After the Boot ROM sequence is complete, the operating system restore code may access DRAM and restore a different or
higher-speed operation. The operating system may also restore translation or client configuration settings before allowing any
user code to execute.
To secure a region of EMEM, the page table entries for that region must be marked as secured. Then the MC registers must
be configured for the secured region, using the CPU in the secured mode:
RegWrite(MC_SECURITY_CFG0, security_aperture_base_address);
RegWrite(MC_SECURITY_CFG1, security_aperture_size_in_megabytes);
After the registers are updated, the CPU must be in secure mode to access the described region of memory:
For more information on handling security violations, see the subsection “MC Interrupts” below.
Each SWGROUP has registers associated with it that select an ASID (Address Space Identifier) and determine whether
SMMU translation is enabled or disabled for the client. Normally, each client is associated with one SWGROUP, thus has one
ASID associated with it. A few clients have multiple SWGROUPs associated with them, which are selectable on a transaction-
by-transaction basis via a 1- or 2-bit SWID flag provided by the client.
The mapping of SWGROUP to modules for Tegra K1 devices is listed in the following table.
AHBDMA,
PPCS No(3) Clients in the AHB cluster, with ppcs2mc_swid = 2’b00
AHBSLV
AHBDMA,
PPCS1 Yes Same as PPCS, with ppcs2mc_swid = 2’b01
AHBSLV
AHBDMA,
PPCS2 Yes(1) Same as PPCS, with ppcs2mc_swid = 2’b10
AHBSLV
SDMMC2A SDMMC2 Yes SDMMC controller. Each SDMMC controller has a unique use
case and can be run via standard (Windows/Android) or NVIDIA
SDMMC3A SDMMC3 Yes drivers, hence each controller has its own (hardcoded) SWID.
SDMMC4A SDMMC4 Yes
XUSB_HOST USB3 Host Yes Although the same driver is expected to control both units, each
has its own SWNAME to maintain compatibility with the Tegra 4
XUSB_DEV USB3 device Yes device.
16. The MC defines the ASID mapping on a per software-ID (SWGROUP) basis. To support secure ASID for the SE
engine (in the AHB cluster) and TZ-Display, additional SWID signals are added to the interfaces. The additional SWID
signal allows the MC to map the client to different SWIDs, providing flexibility to use a secure ASID for the SMMU.
17. Although the GPU has one physical read client and one physical write client, it can specify one of two SWGROUPs
(GPU and GPUB) for a given request, depending on the value of address bit a[34]. LTCX maps a[34] to the MCCIF
SWID field. SMMU translation is disabled for SWGROUP GPU and enabled for GPUB. This is how the GPU indicates
whether SMMU translation is needed. The MC also performs special video protection region checks for the GPUB.
18. To support the CPU’s view of 4GB memory, part of the 0-2G memory address space is used by the CPU to address
DRAM. The devices which were previously making requests in the 0-2G address range, assuming that they would be
always mapped to other memory space by SMMU, now overlap with devices making physical address requests in the
0-2G range. An additional bit ppcs2mc_swid indicates which requests need to remain untranslated and which requests
need SMMU translation. This additional bit selects between the two SWIDs (for AHB clients). These two SWIDs map to
two separate ASIDs, where one indicates SMMU translation and the other indicates no translation.
In Tegra K1 devices, the CPU has its own MMU and issues physical addresses to the MSS. Thus it is not possible to enable
SMMU translation for the CPU.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 690
Tegra K1 Technical Reference Manual
Memory Controller
The following alternate initialization sequence is used when TrustZone is enabled on Win8, since the UEFI (Boot Loader) is
secure, whereas the SW memory driver (NVMEM) is not:
If no client is using an ASID, then that ASID and its page table can be modified.
If no client is using any PTE in a PDE, that PDE can be modified.
If no client is using a PTE, that PTE can be modified.
It is up to software to ensure these rules are followed when virtual address translations need changed. Once software has
updated the page-table or ASID mappings, the final step is to perform PTC and TLB invalidates on the modified entries. Note
that the granularity of invalidation is at the PTE group, which is the number of PTEs that fit in a memory atom. Software can
write:
MC_SMMU_TLB_FLUSH_0 to flush a specific page group, 4MB section, entire ASID or the entire TLB.
MC_SMMU_PTC_FLUSH_0 to flush a specific PTE or PDE from the PTC
- MC_SMMU_STATS_TLB_HIT_COUNT_0
- MC_SMMU_STATS_TLB_MISS_COUNT_0
- MC_SMMU_STATS_PTC_HIT_COUNT_0
- MC_SMMU_STATS_PTC_MISS_COUNT_0
These counters do not saturate when full; instead they wrap from MAX_UINT to 0. There is no explicit reset for these counters;
the only reset-like option is to force the counter bits to all 1’s using the MC_SMMU_*_CONFIG_0.*_STATS_TEST trigger bits.
This is essentially like resetting the counters to -1.
1. The performance of some devices are highly sensitive to MC clock frequency. Some drivers dynamically specify a
minimum emcclk frequency that meets their needs. Drivers make these requests on behalf of the CPU, AVP , HDMI,
the various USB controllers, GPU, MPE (MSENC), and ACTMON.
2. ISO drivers specify their ISO bandwidth requirements, which imply a minimum emcclk frequency. The ISO manager
(part of IMP) ensures that the bandwidth requested is feasible within system parameters.
3. Thermal throttling dynamically specifies the highest MC clock frequency that should be allowed.
4. The central clock code computes the new EMC/MC frequency as:
MIN( MAX(frequency_requests_from_1), ISO_MBps_to_MHz(sum(bandwidth_requests_from_2)),
frequency_request_from_3 )
EMC timing parameters and their corresponding MC arbitration timing parameters need to be adjusted to the optimal
performance for the new frequency. These parameters can usually be derived from DRAM datasheet and do not
need characterization.
All trimmer values need to be adjusted for the new frequency. These values need to be characterized across PVT
(process, voltage, temperature) and frequencies.
The pad configurations that can be turned off to save power at low frequencies should also change with frequency
change, such as pad terminations and DQS pulls.
All registers involved in frequency change should be shadowed. That includes the reserved register fields that can
possible be turned on only in a certain frequency range. Note that any Hardware Diagnostics feature that has power
implications should be considered to be shadowed.
No software interference should be expected from software after software pulls the trigger to change frequency and
before the clock change completes: Software runs on the CPU from SDRAM. Once the EMC blocks the requests to
SDRAM, the CPU may be frozen until the EMC finishes frequency change and unblocks the requests. Note that the
CPU can also possibly run out of the contents in cache during clock change, so we need to consider both scenarios.
The delay caused by clock change should not cause functional failures or visible artifacts.
The CAR module handshakes with the EMC on clock change. The EMC handshakes with the MC on shadow register
latching. The whole process is done by hardware and transparent to software.
A rough estimation of clock change delay is 2-6 µs for LPDDR3.
Supports two clock change mode: self-refresh clock change mode and power-down clock change mode. Both
LPDDR3 and DDR3 support both modes. We recommend clock change power-down mode for LPDDR3 since it takes
shorter time. We recommend self-refresh clock change mode for DDR3, since power-down clock change mode does
not allow DLL to be turned off.
For flexibility, EMC has a 16-deep FIFO to hold register programming and release them during or immediately after
clock change. That enables us to send DRAM command or latch in unshadowed registers. Here are a few examples:
- Self-refresh clock change mode requires programming EMC_SELF_REF to put DRAM in self-refresh during
clock change.
- DDR3 precharge-power-down mode requires programming EMC_PRE to close all banks before clock change.
- Both DDR3 and LPDDR3 clock change requires writing mode registers after clock change.
- To support DLL-ON/DLL-OFF mode switching on DDR3, program mode registers before or after clock change
according to the DDR3 specification.
Software turns off features like self-refresh or auto-calibration if necessary to minimize their interference with DVFS
sequence.
Software programs MC/EMC shadow registers for the new frequency.
Software sets up the appropriate threshold registers in the Display and VI/ISP for *_ready_for_latency_event.
Software programs EMC clock change flow control registers, such as entering self-refresh before clock change and
programming SDRAM mode registers after clock change.
Software programs the MC/EMC clock source register to trigger the clock change.
The CAR sends clock change request to the EMC (clock divider and/or clock source).
The EMC waits for the iso_ready_for_latency_event signal to be asserted. If and while this signal is deasserted, the
EMC/MC continues normal DRAM operation.
The EMC stalls all DRAM commands including refreshes.
The EMC handshakes with the MC to stalls incoming transactions and waits until EMC pipe is flushed
Within handshaking, EMC may enters power down state if it is in power-down clock change mode.
The EMC executes pre-clock change sequence such as entering self-refresh and programming mode register to turn
off DLL.
The EMC latches in shadowed registers and requests the MC to latch in shadow registers.
The EMC acknowledges the CAR to change clock.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 693
Tegra K1 Technical Reference Manual
Memory Controller
- Wait 1 µs to ensure the EMC programming goes through before programming CLK_SOURCE_EMC.
- Program CLK_SOURCE_EMC to change the clock:
EMC_2X_CLK_SRC: MC/EMC clock source
USE_PLLM_UD: use low jitter clock
MC_EMC_SAME_FREQ: drive EMC versus MC clock ratio at 1:1, otherwise 2:1
EMC_2X_CLK_DIVISOR: EMC clock divider
- Wait 1 µs, in case the next clock change starts before the current one completes, which is possible if the
software runs out of cache.
For cold booting, the boot ROM does a ZQ-init on LPDDR3 and a ZQ-long on DDR3, and then enables periodic ZQ-short.
For warm booting, boot ROM does ZQ-long on both LPDDR3 and DDR3, and then enables periodic ZQ-short.
Self-refresh exit:
Software-controlled self-refresh as part of LP0/LP1. The device may spend an arbitrarily long time in either of these
low-power states, thus could suffer significant drift temperature since the last ZQ calibration. Software must perform
ZQ-long at self-refresh exit.
Hardware-controlled self-refresh after extended period of idle. The duration should not be long (if the duration were
long, software should have triggered LP1). Normal, timer-initiated ZQ-short should be sufficient.
Hardware-controlled self-refresh as part of DVFS. The self-refresh duration deliberately is kept small since the DVFS
sequence is as short as possible. There is no need to perform a ZQ calibration within the DVFS sequence itself,
since DRAM voltage is not affected by DVFS. Normal, timer-initiated ZQ-short should be sufficient.
Periodic calibration:
EMC_ZCAL_INTERVAL: Number of microseconds to wait between periodical ZQ commands. Program this register
to 0 to disable periodic ZQ calibration
EMC_ZCAL_WAIT_CNT: Number of clocks to wait after each ZQ command before other commands
EMC_ZCAL_MRW_CMD:
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 695
Tegra K1 Technical Reference Manual
Memory Controller
- ZQ_MRW_DEV_SELECTN
2 for device 0 only, 1 for device 1 only, 0 for both devices
- ZQ_MRW_MA
LPDDR3: 10
DDR3: 0 for ZQ-short, 1 for ZQ-long
- ZQ_MRW_OP
LPDDR3: 0x56 for ZQ-short; 0xAB for ZQ-long
DDR3: 0
Simple sequence:
To enable auto-calibration:
To disable auto-calibration:
Program AUTO_CAL_INTERVAL to 0
Disable DSR (Dynamic self-refresh) by read-modify-write EMC_CFG. DYN_SELF_REF = DISABLED then program
EMC_TIMING_CONTROL.TIMING_UPDATE = 1 to latch in the shadowed register EMC_CFG
Wait 5 µs for worst case DSR exit time
Program EMC_REQ_CTRL to stall all transactions
STALL_ALL_WRITES = 1
STALL_ALL_READS = 1
Wait until the EMC pipe is flushed
poll EMC_EMC_STATUS.NO_OUTSTANDING_TRANSACTIONS == 1
Enter self-refresh
EMC_SELF_REF.SELF_REF_CMD = 1
EMC_SELF_REF.SREF_DEV_SELECTN: 2 for device/rank 0 only, 1 for device/rank 1 only, 0 for both
(optional) Wait until the device/rank is in self-refresh
poll EMC_EMC_STATUS.DRAM_IN_SELF_REFRESH ==
1: dev0/rank0 is in self-refresh; 2: dev1/rank1 is in self-refresh; 3: both devices/ranks are in self-refresh
LP0-exit is also called warm boot. Refer to the “Warm Boot” subsection.
LP1-exit:
Exit self-refresh
EMC_SELF_REF.SELF_REF_CMD = 0
EMC_SELF_REF.SREF_DEV_SELECTN = 2 for device/rank 0 only, 1 for device/rank 1 only, 0 for both
poll for self-refresh completes
poll for EMC_EMC_STATUS.DRAM_IN_SELF_REFRESH == 0
Program EMC_REQ_CTRL to unstall all transactions
STALL_ALL_WRITES = 0
STALL_ALL_READS = 0
(optional) if it is desired to re-enable DSR (possibly turned off by LP1 entry sequence):Read-modify-write EMC_CFG.
DYN_SELF_REF = ENABLED
EMC_TIMING_CONTROL.TIMING_UPDATE = 1 to latch in shadowed EMC_CFG
ISOchronous
HYSTeresis
Most clients set their ISO and HYST bits based on the behavior profile of the client; which is static for all systems. The default
programming should be acceptable for these bits.
The interrupt interface for MC consists of two registers and a hardware output wire. The output signal is wired to the central
interrupt handling module on Tegra K1 devices; from there it can be routed to any of the CPU complexes. The first register,
INTSTATUS, contains the interrupt vector for MC. Each bit in this register is set when the hardware detects an interrupt.
Writing a 1 to the interrupt vector bit will clear the associated interrupt. The second register is INTMASK, each bit in this
register corresponds to a vector bit in INTSTATUS. If the MASK bit for an interrupt is clear (MASKED), the corresponding
interrupt will not forward the interrupt to the central interrupt handling module. If any UNMASKED interrupt vector bits are set,
the MC will assert the interrupt to the central interrupt handling module.
DLL alarm: From the EMC Digital DLL when the output delay code reaches the maximum value.
Attempt to issue a command to a device that is in self-refresh.
Read data from the MRR is available (to prevent software from polling for data)
DRAM clock change sequence complete
Refresh overflow
16.4.12.2 MC Interrupts
The MC contains two classes of interrupts: address decode errors and performance warnings.
When an address decode error occurs, the offending address is captured in the MC_ERR_ADDR register, and information
about the error is captured in one or more MC_ERR_*STATUS registers. The captured information assists developers in
debugging the error.
A single request can trigger multiple errors. There are multiple error status registers (MC_ERR_*STATUS) that capture the
status of different types of errors, as listed below:
MC_ERR_STATUS – Multiple violations. When more than one of the following violations occurs, the highest-priority
violation is reported (listed below in descending priority order):
- ERR_TYPE = SECURITY_TRUSTZONE – TrustZone carveout violations
- ERR_TYPE = INVALID_SMMU_PAGE – Any SMMU translation violation
Decode error on PDE/PTE (reserved bits non-zero)
Request violates RW, nonsecure PTB/PDE/PTE bit values
- ERR_TYPE = DECERR_EMEM - DRAM minimum/maximum allowed memory addresses
MC_ERR_SEC_STATUS - All SEC carveout violations
MC_ERR_MTS_STATUS - All microcode carveout violations
MC_ERR_VPR_STATUS - All VPR carveout violations
The capture registers record the following information about the error:
the Virtual or Physical address of the error (depending on the type of fault)
which type of fault the captured error corresponds to
a read/write indicator
the requestor client ID
Subsequent errors (of any type) will not change the status and address registers until the corresponding interrupt is cleared.
To prevent requests with address decode errors from modifying memory or accessing memory they do not have permission to,
the MC “squashes” the requests. A write request that is “squashed” has had its byte-enables forced to all-zeros, this prevents
the write data from being applied to DRAM. A read request that is “squashed” will have its read-return data forced to all-ones,
this protects the data in DRAM from being read by non-secure sources.
There is one performance warning type interrupt: ARBITRATION_EMEM. It fires when the MC detects that a request has
been pending in the Row Sorter long enough to hit the DEADLOCK_PREVENTION_SLACK_THRESHOLD. In addition to true
performance problems, this interrupt may fire in situations such as clock-change where the EMC backpressures pending traffic
for long periods of time. This interrupt helps developers identify and debug performance issues and configuration issues.
SMMU fault followed by any physical aperture error of any sort: because the SMMU translation occurs first, the data
captured by the ERR_ADR and ERR_STATUS registers will always be the SMMU fault information. Both interrupt
bits are set.
Decode error on a successfully translated (i.e., no SMMU fault indicated) client request: the PA checks will throw a
decode error; the data captured includes the Physical Address, not the Virtual Address. The client request is
squashed. The decode-error interrupt bit is set.
Decode error on a Page-Table fetch (PDE or PTE): the page-table fetch will throw a decode error; the data captured
includes the Physical Address of the PDE or PTE, and the client ID corresponds to the PTC. In addition, the data
returned to the PTC is modified to turn off all access permissions, marking the page INVALID. This forces the client
request to also throw a SMMU fault when it is translated. Both the decode-error and SMMU-fault interrupt bits are set.
The PDE or PTE are then cached with those modified access permissions, so any subsequent requests to that virtual
page are also SMMU fault.
TrustZone security violation on a translated client request: the PA checks throw a security error, the data captured
includes the Physical Address, not the Virtual Address. The security violation interrupt bit is set. The client request is
squashed. This behavior allows the Secure Aperture to stand as a “last line of defense” against SMMU page-table
modification attacks.
Protected-region security violation on a translated client request: the PA checks throw a security error. The data
captured includes the Physical Address, not the Virtual Address. The security violation interrupt bit is set. However,
the client request is squashed.
Video Protection-region security violation on a translated client request: the PA checks throw a security error. The
data captured includes the Physical Address, not the Virtual Address. The security violation interrupt bit is set.
16.5 Functionality
16.5.1 Addressing
The 34-bit physical address space supported by the MC is 16GB. Clients may support larger (e.g. 40-bit) addresses internally,
but address msbs above those connected to the memory controller are assumed to be zero. Clients may use virtual or
physical addresses. If a client uses virtual addresses, the addresses are limited to 32-bits (the input width of the SMMU). The
SMMU outputs 34-bit physical addresses.
The AHB redirection path allows MC clients that need to access boot media to access IRAM during boot. See the “AHB
Redirection Region” section for details on the use and programming of the AHB redirection feature. Note that the AHB
redirection range might not map on top of the external memory range, depending on how EMEM_BOM is set.
For accesses that fall within the Not Assigned region, an error is logged, writes are acknowledged and squashed before the
WCAM, and reads return all 1s.
Four additional programmable apertures restrict which devices can access defined regions of DRAM:
TrustZone region
Video Protection region
Security Coprocessor Secure region
Microcode Carveout Protection region
Each of these may be placed anywhere in the external memory range and have programmable size. For details on these
programmable apertures, see the “TrustZone Security Region”, “Video Protection Memory Region”, and “Security Coprocessor
Secure Region” sections for more information.
In addition, a range of contiguous physical addresses may be designated as “carveout”. Virtual memory pages mapping to
carveout are required to maintain physical contiguity. Carveout is a software-defined region with no hardware aperture
detection.
The following figure shows a possible address map for a Tegra K1 system with 8GB of physical memory. For systems with 32-
bit addressing (e.g., Windows 8 systems), all memory must live below the 4 GB boundary. If 4GB of DRAM is desired, the
external memory range must be configured to map from 0 to 4GB. DRAM is then mapped in the holes in the sparsely
populated MMIO space, providing nearly 4GB of addressable DRAM memory. This is the “Swiss Cheese” approach.
Figure 30: Physical Address Map Example for a System with 8 GB of DRAM
FF_FFFF_FFFF
02_8000_0000
Upper DRAM
01_0000_0000
TrustZone Secured Region
00_8000_0000
AHB Devices
00_7800_0000
APB Devices
00_7000_0000
External IO
00_6800_0000
PPSB devices
00_6000_0000
00_5800_0000
Graphics Host Devices
00_5400_0000
Verif Aperture
00_5300_0000
PERIPHBASE (CPU, GIC, CCI…)
00_5004_0000
Graphics Host (Host1x)
00_5000_0000
NOR
00_4800_0000
IRAM
00_4000_0000
PCIe
00_0100_0000
IROM
00_0001_0000
EVP
00_0000_0000
32-bit clients with virtual addressing. These clients use the SMMU for page-based and ASID-based address
protection and translation
32-bit clients with physical addressing. These clients either support native scatter-gather or require regions of
contiguous physical addresses. Because of the 32-bit input address width, these clients can only access the low
4GB of physical address space. These clients still have ASID protection for secure regions.
34-bit clients with virtual addressing. These clients use the SMMU for page-based and ASID-based address
protection and translation. Because the SMMU only handles 32-bit input addresses, the upper two address bits are
ignored when operating in this mode.
34-bit clients with physical addressing. These clients either support native scatter-gather or require regions of
contiguous physical addresses.
34-bit CPUs. These clients have their own memory management unit and CANNOT under any circumstance use the
SMMU for address protection or translation
For Tegra K1 devices, the following list indicates the clients that support 34-bit addressing:
CPU Complex
GPU
XUSB (USB3)
AFI (PCIE)
SATA
SDMMC
HDA
VI2/ISP2 (Virtual address client, so only 32 bits are relevant)
Display (Virtual address or physical address client. When virtual, only 32 bits are relevant)
To match this, MC transactions carry 64B of data payload. The 64B can be contiguous or can consist of two non-contiguous
32B “sectors” that lie within the same 512B “gob”, each mapping to a different 32-bit DRAM sub-partition (see the “Memory
Sub-Partitions” section). Byte access remains possible but involves a 64B access: write accesses can use byte enables to
write a set of bytes (including a null set), and read accesses always return two full 32B sectors with potentially unneeded data
(also known as overfetch). To efficiently operate in DDR3 mode, most engines in Tegra K1 devices use 64B memory
requests.
The granularity of external access is linked to the burst size programmed for DRAM access. Bursts into each 32-bit DRAM
channel always start at a 32B aligned boundary and consist of 8 data beats. For x32 configurations, the two 32B sectors in an
MC request correspond to two transfers of 8 data beats.
DDR3 and LPDDR3 support different features to enable less data from being transferred than what the Burst Size indicates.
The resulting minimum data transfer is indicated in the following table.
LPDDR3 BL8
x32 32B
x64 64B
DDR3 BL8
x32 32B
x64 64B
Memory allocation for hardware pools (surfaces and buffers) could be made from non-contiguous page-sized chunks
of memory
Areas of the hardware memory map could be marked as protected, preventing access from hardware devices
Hardware memory access can be controlled on a per-device or per-process basis
The virtual-to-physical translation is via a two-level page table that carves up the virtual address as follows:
Bits 31:22 choose a page directory entry (PDE). Each page directory has 1,024 PDEs, each mapping 4MB region.
Bits 21:12 choose a page table entry (PTE) from a page table. Each page table has 1,024 PDEs, each mapping a
4kB page.
Bits 11:0 choose a byte within a page
Page Directory
PDE
Page Table
PTE
Page Byte
Each PTE or PDE consume 32 bits of memory, so that each page directory or page table consumes one 4kB memory page. In
addition, the page directory lookup does an early-out either to map an entire 4MB region of the virtual space as invalid, or to
map the region to a contiguous range of physical pages.
VA[31:22] VA[21:0]
PTB Region Offset
Page Directory
PDE
Byte
The SMMU supports multiple address spaces, each with its own page-table-base register (PTB) and page table. Each
address space is tagged with an address space identifier (ASID). This allows for multiple virtual mappings to exist at the same
time. Typically, software will assign a different address space to each process that directly uses the hardware drivers, allowing
process isolation. The number of ASIDs is 128. Software is responsible for managing the assignments between processes and
ASIDs, flushing ASIDs out of the TLB as needed when they are remapped between processes.
ASIDs are assigned based on the SWNAME of the incoming request. An on-chip mapping between SWNAME and the ASID is
maintained by the SMMU. For register-based devices, the driver is responsible for updating the mapping between the
SWNAME and the ASID when a device in context is swapped between processes.
Untranslated modules are also supported. The SWNAME-to-ASID mapping has a translation-enable bit to allow translation on
a per-SWNAME basis. There is also a per-client translation-enable bit for Hardware Diagnostics purposes. This can be used
by any client but is typically used by clients that generate 40-bit addresses. In addition, a global “translation enable” bit
disables all translation when cleared (cleared is the default out of reset).If translation is disabled, client address bits 33:0 are
sent directly to the output of the TU. If the client only provided a 32-bit address, the physical address bits 33:32 will be set to 0.
If translation is enabled, the lower 32 bits of the client address will be used to generate the physical address. Note that this
means that client address bits 39:32 will be ignored if a client sends a 40-bit client address and its associated ASID has
translation enabled. This is done to minimize the changes to the SMMU. It is expected that 40-bit clients will typically target
ASIDs that have translation disabled.
Both the page and directory tables are stored in DRAM. A translation look-aside buffer (TLB) will be used to cache recently-
used translations. Translations that miss in the TLB would incur potentially two additional round-trip DRAM delays, but the
latency-scheduling features of the Protocol Arbiter will be used to hide this latency behind the normal latency incurred by the
DRAM reordering policy. The TLB is backed by a page-table cache (PTC) to reduce this memory traffic further.
To further improve CPU latency, the Tegra K1 CPU low-latency read paths bypass the SMMU altogether; the hardware also
restricts the CPU write paths to untranslated-mode to prevent any configuration mishaps.
Note: Wherever physical addresses are used in this document, it is assumed that the device can
address 8GB of physical memory.
A “next level” bit which says if this PDE maps a single 4MB region, or if it points to a page containing a table of PTEs
for the second level of translation
If the “next level” bit is set, there are 22 bits of physical address (PA[33:12]) that point to a page containing the base
of the PTE table for this PTE. If the “next level” bit is clear, 12 bits (PA[33:22]) are used to point to the base of an
aligned 4MB physical region mapped directly by the PDE.
The remaining bits set the permissions for the access. For 4MB large pages, these are used directly for the region.
For PDEs that point to a second-level page table, these permissions are ANDed with those of the PTE to give the
final permission
- A “readable” bit for the region
- A “writeable” bit for the region
- A “nonsecure” bit for the region
The remaining bits in both interpretations are reserved. Reserved bits should be 0, otherwise they can cause an SMMU fault.
Because these are compressed in PTC before they are identified as being PDE or PTE, only the subset of reserved bits that
are common to all formats (bits [27:22]) will trigger an SMMU fault.
PDE that maps to a 4MB large page R WS 0 Reserved 4MB page PA[33:22] Reserved
The base address of the page directory for a particular ASID is stored on-chip in the ASID table. Changes to this table may
require flushing the ASID in question from the TLB.
For more information on handling SMMU faults, see the subsection on “MC Interrupts” above.
Disabling all matches flushes the entire TLB. Note that the TLB is 16 entries wide, so when you match any particular VA, you
flush the entire line, which is why the VA matches are down to 16, rather than 12. 4 MB pages are still matched down to
VA[16] since they are stored in the TLB using the 4 KB page format.
In addition to the TLB, page table updates require flushing stale entries out of the PTC. This needs to be done on a slot-by-slot
basis by writing the PDE or PTE’s physical address (PA[33:4]) to the PTC flush command. Each flush flushes 16 aligned PTEs
or PDEs (one DRAM atom’s worth) out of the cache.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 706
Tegra K1 Technical Reference Manual
Memory Controller
A page table update requires three writes – one to write the PTE to memory, one to flush the stale PTE out of the PTC, and a
third to flush the stale VA mapping out of the TLB. However, since a single PTC flush flushes 16 PTEs or PDEs and a single
TLB flush can flush the entire TLB, software can reduce the flush traffic by merging flushes from multiple updates.
The various address ranges for DRAM in both configurations are shown the figure below.
N GB
6GB 6GB 6GB
0 0 0 0 0 0 0
In case of any errors, MC logs the address of the violating request in the MC_ERR_STATUS_0.ERR_ADR_HI and
MC_ERR_ADR_0 registers. In case this error address is due to decerr, the logged address is the original Physical Address.
2
The EMC supports multiple devices with data widths of 8, 16, or 32 bits , all identical to form a single rank of either 32 or 64
bits . Up to two ranks are supported.
The bit mapping between the internal linear address and the device/rank, row, column and bank bits is performed as follows:
The 2 LSBs of the linear address are ignored as the address granularity of the DRAM is 32 bits/4 bytes
In 64-bit systems, bit 5 of the linear address determines the 32-bit subpartition (with hashing of MSBs)
In 64-bit systems, bits[9:6,4:2] of the linear address are mapped as column bits [6:0]
In 32-bit systems, bits[9:2] of the linear address are mapped as column bits [7:0]
Bits [11:10] are bank bits, possibly hashed.
Bit [12] is a bank bit if the device has more than two bank bits, possibly hashed.
The next bits of the linear address are mapped as column bits, as many as remaining after previous mapping
The next bits of the linear address are mapped as row bits, as many as needed for the selected device
The next bit is a device/rank bit if device/rank bits are needed
2
A x32 device may be a single x32 chip or two x16 chips in parallel.
3 3 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 2 1 0 3 9 8 7 6 4 3 2 1 0 5
Col
NM Row[14:0] Bank Col[7:0] NM
[9:8]
Dev
If BOM = 0B, Address bit[33:32] must be 00b. (i.e. 0~4GB, Dev 0: 0~2GB; Dev 1: 2~4GB)
If BOM = 2GB, Address bit[33:31] must be 001b, or 010b. (i.e. 2~6GB, Dev 0: 4~6GB; Dev 1: 2~4GB)
Other values trigger an invalid address error. This check occurs after SMMU translation.
The number of sub-partition, bank, column, row, and device bits is limited by the number of address pins available:
Sub-partition width: 1 or 0
Bank width: 2 or 3
Column width: 9 to 12
Row width: 12 to 16
Logical Devices/Ranks (also known as chip selects): 1 or 2
When two logical devices/ranks are used, the total memory mapped by the second device/rank must be less than or equal to
the first device/rank. The second device/rank also may have a different row, bank, column mapping from the first device.
This subsection briefly describes the Tegra K1 system power modes. Refer to the PMC section for more details.
LP0: The goal is ultra-long standby time in a cell phone. In this mode, major power rails are off and I/Os are held
constant. DRAM is commanded by the AVP to enter self-refresh. The MC and EMC are powered off. Exiting LP0 is
called warm boot, in comparison to cold boot which restarts the system. On warm boot, the MC and EMC are re-
initialized from the PMC scratch registers and then DRAM is brought out of self-refresh. The LP0 entry code is
executed from IRAM and the LP0 exit code is executed from boot ROM, both by the AVP.
LP1: The goal is to suspend the CPU while allowing the hardware path to be externally accessible. All PLLs are
turned off, and therefore MC/EMC/DRAM clocks are frozen. The DRAM is commanded by the AVP to enter self-
refresh (it shares the same code with LP0 entry). Because the MC and EMC keep power during LP1, they do not
need re-initialization. To exit LP1, simply enable the clock and exit self-refresh. Both LP1 entry and exit code are
executed by the AVP from IRAM.
LP2: The goal is to power off the CPU while still appearing functional to users. The DRAM can still be accessed by
the display, audio, video, and other system modules, although no access comes from the CPU. The LP2 entry/exit
sequences do not involve the MC/EMC/DRAM.
For pads and DRAM, LP0 and LP1 are in the same state, and LP2 and normal running mode are in the same state.
The AHB aperture is defined by the IRAM_BOM and IRAM_TOM registers, which are initialized to disable this aperture. If the
fuse indicates that the boot media is present in one of these clients, that Boot ROM will initialize this aperture to 0x40000000
and 0x4003f000 (1GB, 1GB+IRAM_SIZE), respectively. Once bootup is complete, the boot ROM programs the IRAM_BOM to
0xffffffff and IRAM_TOM to 0x00000000, thus disabling access to IRAM. DRAM is then potentially accessible in this address
range. These aperture register also have an access_control/lock bit. After disabling the aperture, the access_control register
should be programmed to lock the registers.
AHB routes the requests targeted to IRAM appropriately and routes all non-DRAM aperture requests (as defined by the swiss-
cheese and related configuration) back to the MC as the default DRAM region. Care must be taken to program the IRAM
aperture register to prevent a request from being stuck in a loop.
Secure requests from the CPU can only access TZ secure memory space and not access the memory outside TZ
secure memory space.
Secure requests from other clients may access the TZ secure memory space and also may access memory outside
TZ secure memory space.
Non-secure requests from any client can only access memory outside the TZ secure memory space.
This aperture is defined by the VIDEO_PROTECT_BOM and VIDEO_PROTECT_SIZE_MB (reset value 0x0) registers. The
value 0 for the size register disables this aperture.
In addition to protecting the region in memory, the registers are allowed only secured access by the Boot Loader only. On cold
boot when this register is initially programmed, it is also written to the secure PMC-scratch region. On LP0 resume, the register
value is restored from this region. This eliminates need for saving this register content on LP0 entry. An additional lock bit
locks down the access to this register. On reset the lock bit is cleared. When the lock bit is cleared, the writes are allowed to
the VPR aperture registers. When the VPR registers are initialized, the lock bit is set. When the lock bit is set, all writes to the
VPR aperture registers are ignored. This lock bit is used for cold boot as well for LP0 exit.
For systems that do not implement VPR, the Boot Loader must still set the lock bit to indicate that programming is completed.
The SEC engine (also referred to as TSEC) uses this carveout region as an extension to its I-cache and D-cache. Without this
carveout, the TSEC has to encrypt the data before writing to normal DRAM.
The SECR_BOM and SECR_SIZE_MB registers (reset value 0x0) define the 1MB aligned base and size register for this
region. In addition to protecting this memory region, these aperture definition registers themselves need to be protected and
are allowed to be modified only by the Boot Loader (during cold boot) and the Boot ROM (during LP0 resume) and should be
implemented similar to the VPR aperture registers. An additional sticky/secure bit controls this register. On reset this
sticky/secure bit is cleared, thus allowing write access to the SECR aperture registers. When the Boot Loader initializes the
aperture registers, it also sets this sticky/secure register bit. When this sticky/secure bit is set, all subsequent writes to this
register are ignored. On LP0 resume, reset clears this sticky bit; it is set again when the aperture register is restored from the
PMC secure scratch space. To avoid saving this aperture register on LP0 entry, the Boot Loader (during cold boot) should
store this aperture definition to the PMC secure scratch space.
Any access to this memory aperture by any other client (other than SEC) is ignored (read returns all 1s as the response and
writes are dropped) and an error is logged.
The protected region is defined to start at MTS_CARVEOUT_BOM and ends at MTS_CARVEOUT_SIZE. It can start and be
extended in multiples of 1MB . The only clients allowed to access the protected region are the CPU read and write clients:
MPCORER
MPCOREW
MPCORELPR
MPCORELPW
All other clients attempting to access this region will cause the MC to issue an interrupt and log the details of the request
(address, client ID). After the details are logged, write requests are dropped and read requests are forced to return all 1s, thus
protecting the region from corruption by the insecure source.
The registers defining the aperture also need to be protected. As with the VPR aperture registers, an additional sticky/secure
bit controls these registers. On reset this sticky/secure bit is cleared, allowing write access to these registers. When this
sticky/secure bit is set, all subsequent writes to these registers are ignored.
The Microcode Carveout Protection Region should be set up and locked at or soon after the time of DRAM configuration,
before or during the micro-architectural cold boot process, before any accesses occur to the protected region by the CPU
cores. In order to minimize the boot impact, the CPU will begin using the carveout DRAM in parallel with Tegra firmware
reading the Boot Loader binary. When entering LP0, microcode will store information sufficient to reconstruct the Microcode
Carveout aperture registers into the PMC secure scratch space. On LP0 exit, reset clears the sticky bit; it is set again when
the Boot ROM initiates the LP0 DMCE exit sequence to restore the aperture registers from the PMC secure scratch space.
The parameters associated with each tiling format are listed below:
Minimum
Parameter Used by Description Values
Alignment
64B (general)
Line-to-line Large enough for at least 4,096 pixels in bytes 128B (GPU)
Pitch Pitch
stride in bytes (some clients may support larger values) 256B (MSENC)
up to 256B (VIC) 3
3
The pitch alignment restrictions for VIC depend on its cache line shape: 256Bx1: 256B, 128Bx2: 128B, otherwise: 64B.
Minimum
Parameter Used by Description Values
Alignment
ONE_GOB
Block Width of block in
Block Width (this is the only setting supported on 32-bit Tegra N/A
Linear gobs
K1)
[ONE_GOB, THIRTYTWO_GOBS]
Block Block Height of block (SIXTEEN_GOBS is the normal setting, but N/A
Height Linear in gobs ONE_GOB may be needed for display surfaces
outside carveout
[ONE_GOB, THIRTYTWO_GOBS]
Block Block Depth of block
(values greater than ONE_GOB are currently only N/A
Depth Linear in gobs
supported by the GPU)
(x,y) to linear address translation is the responsibility of clients. The MCCIF only supports linear address inputs. Contact your
NVIDIA representative for access to libraries with translation code to simplify implementation.
Blocks themselves are arranged from GOBs (Groups of Bytes). A Kepler GOB is 512 bytes arranged as 64x8 bytes. GOBs
are stacked vertically to form a block. The number of GOBs stacked vertically in a block is controlled by an additional surface
parameter called the block height. The recommended block height for most buffers in Tegra K1 devices is 16 GOBs (128
lines). This supports 8x8 bank interleaving. For buffers for which linear display access is more important than access by GPU,
VIC, or other block-oriented engine, block height can be set to 1 GOB, providing more locality for the display client.
Blocks are arranged horizontally into a Row of Blocks (ROBs) to fill out the surface to the width value (or slightly beyond, if the
width is not a multiple of the 64B block width). Upper address bit swizzling in the bank swizzling algorithm generally makes it
unnecessary to pad the surface width further.
16.6.2 Sub-Partitions
The 64-bit DRAM channel can be divided into two sub-partitions with DQ[31:0] forming sub-partition A and DQ[63:32] forming
sub-partition B.
Each 64B atom is divided into 2 sectors of 32B. One sector contains bytes 0 – 31 while the other contains bytes 32 – 63.
Certain clients, such as MSENC, VDE, and VIC use 32-bit registers (left-shifted 8) to specify 40-bit base addresses of a buffer.
Base addresses for these clients must be aligned to a minimum of 256B.
Certain clients, such as MSENC and VIC, have a fixed cache line size and read all data within a cache line, even if it is beyond
the nominal height and width of the surface. For such clients, surface width and height need to be padded to at least the next
multiple of the cache line size so the unit does not read beyond the end of the buffer.
Surface Type
Block linear format generally provides best performance and should be chosen by default.
Pitch format may be preferable if producer and consumer clients perform linear accesses and both clients support
pitch.
Private formats are used by a few units, such as MSENC and VDE. For private formats, the client-required
allocation and padding rules must be followed.
Block Linear
Alignment. Align surface start address as follows:
- 512B is the minimum alignment for correct behavior. Performance will be poor (no zero-bandwidth clears, poor
page locality).
- 1KB alignment is better. Zero bandwidth clears will work. Bank interleave will be suboptimal.
- 8KB alignment is best. All compression features work. Bank interleave assumes 8KB alignment. Use this
setting for large buffers.
Block height should normally be programmed to SIXTEEN_GOBS (128 lines). For certain surfaces for which
display is the primary client, block heights of ONE_GOB or TWO_GOBS are recommended. Surfaces to be
4
accessed by the GPU texture unit may require a smaller block height under certain conditions.
Width is typically prescribed by the application. Hardware allocates a block linear surface to be an integral number of
blocks wide, so its allocated width is width*Bpp rounded up to the next block boundary (64B), which is sufficient
5
padding in almost all circumstances.
Height padding. Surfaces should be an integral number of blocks tall. If a client such as MSENC or VIC has a
cache line that is taller than the block height, additional row(s) of blocks may be required for padding.
Pitch
Alignment. Align surface start address to a minimum of:
- 128B if surface is to be accessed by the GPU
- 256B if surface is to be accessed by MSENC, VDE, or VIC (due to the 8-bit left-shift issue)
- 64B otherwise
Pitch. Surface pitch must be a multiple of:
- 128B bytes if surface is to accessed by GPU
- 128B if surface is to be read by VIC with 128x2 cache line shape
- 256B if surface is to be read by VIC with 256Bx1 cache line shape
- 64B otherwise.
Height padding. For clients, such as MSENC and VIC, additional lines of padding might be required beyond the
nominal height of the surface. For example, when the VIC is reading a source buffer with an internal cache line
shape of 32x8, the source buffer must be a multiple of 8 lines tall.
4
For buffers that are to be accessed using the GPU texture unit, the BlockHeight parameter must match that used by the texture unit. In particular,
note that if a texture surface is smaller than the specified size in blocks, texture uses a shrunken blockHeight instead of the nominal parameter
specified in the Texture Header.
5
If VIC cacheline shapes of 128x2 or 256x1 are used (generally not recommended for block linear), width must be padded up to a multiple of the cache
line width. If this is not possible, a narrower cache line shape must be used
16.7.1 MC Registers
USAGE NOTE: Many MC register fields are shadowed.
Writes to shadowed register fields update the shadow copy (this is default, assumes
TIMING_CONTROL_DBG.WRITE_MUX==ASSEMBLY).
Reads to shadowed register fields return the currently-active copy (this is default, assumes
TIMING_CONTROL_DBG.READ_MUX==ACTIVE).
This allows a new set of frequency-dependent timing parameters to be written to the shadow registers while memory traffic is
ongoing, then when the parameters are completely written, the MC hardware can perform a timing-safe switch.
Such switches can be triggered via two methods: TIMING_CONTROL.TIMING_UPDATE (generally used during initialization),
or the automatic CAR/EMC handshake on a clock-frequency or divider change (assuming
TIMING_CONTROL_DBG.IGNORE_EMC_TRIGGERS==DISABLED).
This register is shadowed: see usage note at the top of Section 16.7.1
USAGE NOTE: Many MC registers should be programmed by the Boot Loader as part of the warm boot (also known as "wake
from LP0") and cold boot (also known as "power up") sequences. Suggested actions for the Boot ROM/Boot Loader are noted
under "Boot requirements:".
USAGE NOTE: Some MC registers may only be accessed by TrustZone-secured register transactions. See the appropriate
ARM Architecture Reference Manual for information on how to handle security. Such registers are marked by a comment:
USAGE NOTE: The MC register fields to be stored in PMC scratch registers for warm boot must have "[PMC]" in their
comments. After adding and removing such PMC flag, the tool warmboot_code_gen must be rerun to generate new boot ROM
code.
USAGE NOTE: When writing to a register, any bits that are not intended to be modified should be rewritten with their existing
values.
USAGE NOTE: Unspecified bits may not appear in tables and should be written with their Reset values.
16.7.1.1 MC_INTSTATUS_0
Interrupt Status
This register contains trigger bit fields. Bit fields not shown here are reserved.
DECERR_MTS_INT: This interrupt is for access violation on MTS carveout region in the MC. If a client
other than CPU read or write is trying to access the region.
16 CLEAR
0 = CLEAR
1 = SET
SECERR_SEC_INT: The request violated the SEC Carveout requirements - Only TSEC clients may
13 CLEAR access the SEC carveout.
0 = CLEAR
DECERR_VPR_INT: The request violated the VPR requirements - in case of a read, the request address
fell in the VPR range, but the VPR attribute of the request was not set. In case of a write, the request had
12 CLEAR the VPR attribute set in the request, but the request address did not fall in the VPR range.
0 = CLEAR
1 = SET
ARBITRATION_EMEM_INT: Warning that a pending request has reached the deadlock-prevention slack
threshold. This indicates that the MC could not meet the programmed performance goals. This interrupt
9 CLEAR is for use with assisting debug of performance-related issues.
0 = CLEAR
1 = SET
DECERR_EMEM_INT: Address translation error: EMEM Address Decode Error. See ERR_STATUS and
ERR_ADR for more information.
6 CLEAR
0 = CLEAR
1 = SET
16.7.1.2 MC_INTMASK_0
Interrupt Masks
Boot requirements: This register should be saved to SDRAM registers and restored by the OS during warm boot. Bit fields
not shown here are reserved.
DECERR_MTS_INTMASK:
16 MASKED _NONE_ 0 = MASKED
1 = UNMASKED
INVALID_APB_ASID_UPDATE_INTMASK: Prevents
INVALID_APB_ASID_UPDATE_INT from triggering an interrupt to the interrupt
11 MASKED _NONE_ controller.
0 = MASKED
1 = UNMASKED
16.7.1.3 MC_ERR_STATUS_0
If the error was an INVALID_SMMU_PAGE, then information about the page's protection status is also captured:
Note that SMMU page protection bits are formed by ANDing the page protection bits from the Page Table Base, Page
Directory Entry, and Page Table Entries from all three stages of the page-walk. The ANDed protection bits and the type of the
provoking transaction are both available in the status register.
Subsequent faults (of any type) will not change the status and address registers until the corresponding interrupt is cleared.
INBAND-
Client ID ID (hex) SWGROUP Module Partition Description
SWID
Misses from
System Memory
csr_ptcr 0 (0x00) ptc Management Unit
(SMMU) Page
Table Cache (PTC)
Display reads,
csr_display0a 1 (0x01) dc display dis
window A
Display reads,
csr_display0ab 2 (0x02) dcb displayb disb
window A
Display reads,
csr_display0b 3 (0x03) dc display dis
window B
INBAND-
Client ID ID (hex) SWGROUP Module Partition Description
SWID
Display reads,
csr_display0bb 4 (0x04) dcb displayb disb
window B
Display reads,
csr_display0c 5 (0x05) dc display dis
window C
Display reads,
csr_display0cb 6 (0x06) dcb displayb disb
window C
ARM7 Audio-Video
Processor (AVP)
csr_avpcarm7r 15 (0x0f) avpc avpc avp
reads via the
avp_cache
Display reads,
csr_displayhc 16 (0x10) dc display dis
cursor
Display reads,
csr_displayhcb 17 (0x11) dcb display disb
cursor
High-definition
csr_hdar 21 (0x15) hda hda apb
audio (HDA) reads
ppcs1
csr_ppcsahbslvr 30 (0x1e) ppcs ppcs ahb AHB bus reads
ppcs2
Video Decode
(VDE) video
csr_vdebsevr 34 (0x22) vde vde2x vd
bitstream engine
reads
Video Decode
csr_vdember 35 (0x23) vde vde2x vd (VDE) macroblock
engine reads
Video Decode
(VDE) motion-
csr_vdemcer 36 (0x24) vde vde2x vd
compensation
engine reads
Video Decode
csr_vdetper 37 (0x25) vde vde2x vd (VDE) transform
engine reads
Reads from
Cortex-A9 Shadow
csr_mpcorelpr 38 (0x26) mpcorelp mpcorelp stop
CPU core via the
L2 cache
Reads from
Cortex-A9 4 CPU
csr_mpcorer 39 (0x27) mpcore mpcore ftop
cores via the L2
cache
INBAND-
Client ID ID (hex) SWGROUP Module Partition Description
SWID
Arm7 Audio-Video
Processor (AVP)
csw_avpcarm7w 50 (0x32) avpc avpc avp
writes via the
avp_cache
High-definition
csw_hdaw 53 (0x35) hda hda apb
audio (HDA) writes
Writes from
Cortex-A9 Shadow
csw_mpcorelpw 56 (0x38) mpcorelp mpcorelp stop
CPU core via the
L2 cache
Writes from
Cortex-A9 4 CPU
csw_mpcorew 57 (0x39) mpcore mpcore ftop
cores via the L2
cache
ppcs1
csw_ppcsahbslvw 60 (0x3c) ppcs ppcs ahb AHB bus writes
ppcs2
Video Decode
(VDE) video
csw_vdebsevw 62 (0x3e) vde vde2x vd
bitstream engine
writes
Video Decode
csw_vdedbgw 63 (0x3f) vde vde2x vd (VDE) debug
writes
Video Decode
csw_vdembew 64 (0x40) vde vde2x vd (VDE) macroblock
engine writes
Video Decode
csw_vdetpmw 65 (0x41) vde vde2x vd (VDE) transform
engine writes
XUSB_HOST
csw_xusb_hostw 75 (0x4b) xusb_host xusb_host usbx
writes
INBAND-
Client ID ID (hex) SWGROUP Module Partition Description
SWID
TSEC Memory
csr_tsecsrd 84 (0x54) tsec tsec apb Return Data Client
Description
TSEC Memory
csw_tsecswr 85 (0x55) tsec tsec apb Write Client
Description
Reads from
Cortex-A9 Shadow
csr_a9avpscr 86 (0x56) a9avp a9avpsc a9avppc
CPU core via the
L2 cache
Writes from
Cortex-A9 Shadow
csw_a9avpscw 87 (0x57) a9avp a9avpsc a9avppc
CPU core via the
L2 cache
Display reads,
csr_displayt 90 (0x5a) dc dc1 display dis
Window T
sdmmca memory
csr_sdmmcra 96 (0x60) sdmmc1a sdmmca aud
read client
sdmmca memory
read client;
csr_sdmmcraa 97 (0x61) sdmmc2a sdmmcaa aud
instance a of
sdmmca
sdmmc3 memory
csr_sdmmcr 98 (0x62) sdmmc3a sdmmc aud
read client
sdmmca memory
read client;
csr_sdmmcrab 99 (0x63) sdmmc4a sdmmcab sd
instance b of
sdmmca
sdmmca memory
csw_sdmmcwa 100 (0x64) sdmmc1a sdmmca aud
write client
sdmmca memory
write client;
csw_sdmmcwaa 101 (0x65) sdmmc2a sdmmcaa aud
instance a of
sdmmca
sdmmc3 memory
csw_sdmmcw 102 (0x66) sdmmc3a sdmmc aud
write client
sdmmca memory
write client;
csw_sdmmcwab 103 (0x67) sdmmc4a sdmmcab sd
instance b of
sdmmca
Display reads,
csr_displayd 115 (0x73) dc display dis
Window D
ERR_ADR_HI: Higher address bits of erring address whose lower bits are available in ERR_ADR
21:20 X
register
6:0 X ERR_ID: Client identifier (see above list) of the access that caused the error.
16.7.1.4 MC_ERR_ADR_0
Subsequent faults (of any type) will not change the status and address registers until the corresponding interrupt is cleared.
Note that the decode-error, security-Trustzone, and security-carveout checks occur on the physical address (in other words,
after SMMU translation); thus those error types capture the physical address. All other errors capture the virtual address.
31:0 X ERR_ADR
16.7.1.5 MC_SMMU_CONFIG_0
Used for interrupt set/clear enums. When disabled, all transactions are untranslated. When enabled, transactions may be
translated. See per-client and per-module enables in SMMU_* registers below.
This register can only be accessed by TrustZone-Secured accesses from the CPU.
Boot requirements: This register should be saved to SDRAM registers and restored by the OS during warm boot.
SMMU_ENABLE:
0 DISABLE 0 = DISABLE
1 = ENABLE
16.7.1.6 MC_SMMU_TLB_CONFIG_0
Boot requirements: This register should be saved to SDRAM registers and restored by the OS during warm boot.
TLB_HIT_UNDER_MISS: Allow hits to pass misses in the TLB. This value may not be
changed on the fly. Ideally, this should be set before enabling the SMMU. At the very least, the
29 ENABLE TLB needs to be flushed and traffic through the SMMU stopped before changing this value.
0 = DISABLE
1 = ENABLE
TLB_ACTIVE_LINES: Set the number of active lines. Allows the TLB to be made "virtually
4:0 0x10
smaller" to save power. "Inactive" lines will never hit and never hold data.
16.7.1.7 MC_SMMU_PTC_CONFIG_0
Controls usage of the PTC
Boot requirements: This register should be saved to SDRAM registers and restored by the OS during warm boot.
PTC_REQ_LIMIT: Limit outstanding PTC fill requests to the DRAM. Minimum value is 5;
27:24 0x8
otherwise the SMMU can have functional failures.
16.7.1.8 MC_SMMU_PTB_ASID_0
The PTBs are stored in a RAM that is accessed indirectly though the SMMU_PTB_ASID and SMMU_PTB_DATA registers.
Boot requirements: This RAM should be saved to SDRAM and restored by the OS during warm boot.
16.7.1.9 MC_SMMU_PTB_DATA_0
Writes or reads to this register write or read the Page Table Base pointer for the ASID defined in the SMMU_PTB_ASID
register.
This register is not TrustZone secure, but only a TrustZone secure access may alter the PTB for a secure ASID.
Secure ASIDs have additional privilege over other non-secure ASIDs - they may fetch page tables from secure memory and
they can allow clients translated through them to make secure accesses if programmed to do so.
Attempts to write a secure ASID with a non-secure access will be ignored, and non-secure reads will return garbage.
21:0 X ASID_PDE_BASE: Pointer to page of PDEs, bits [33:12] for this ASID
16.7.1.10 MC_SMMU_TLB_FLUSH_0
Software can write this register to flush a specific page group, 4MB section, entire ASID or the entire TLB. There is
independent control over matching part or all of the VA and/or matching the ASID.
Note: The granularity of VA mapping here is at a page group, which is the number of PTEs that
fit in a memory atom.
TLB_FLUSH_VA_MATCH: Controls flushing based on VA, one of ALL: Flush entire TLB
SECTION: Flush all entries with a VA[31:22] that match TLB_FLUSH_VA_SECTION GROUP:
Flush all entries with a VA[31:14] that match TLB_FLUSH_VA_GROUP. By default, the
1:0 X GROUP setting takes effect if this field is programmed to a value of 1.
0 = ALL
2 = SECTION
3 = GROUP
16.7.1.11 MC_SMMU_PTC_FLUSH_0
Software can use this register to flush a specific PTE or PDE from the Page Table Cache (PTC) by writing the atom-aligned
physical address of the PTE group. It can also flush the entire PTC via this register.
Note: The granularity of flushing is at the PTE group, which is the number of PTEs that fit in a
memory atom.
31:4 X PTC_FLUSH_ADR: Physical address of PTE group to match for address flushes, PA[31:4]
PTC_NO_WAIT_IDLE_FLUSH: Set bit to immediately flush without waiting for hit FIFO to go
3 0x1
idle. Not required because it does not present an ordering hazard.
PTC_FLUSH_TYPE: Controls flushing, one of ALL: Flush entire PTC ADR: Flush PTEs that
are addressed by PTC_FLUSH_ADR
0 X
0 = ALL
1 = ADR
16.7.1.12 MC_EMEM_CFG_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
During warm boot, this register may be derived from EMEM_ADR_CFG* register values.
16.7.1.13 MC_EMEM_ADR_CFG_0
The EMEM_ADR_CFG* registers are used to specify the DRAM density and geometry parameters. The MC will use these
parameters to derive device, row, bank, column addressing values to EMC.
Note: The maximum size externally supported is dependent on pinout and address-map aperture
limitations, and that it may be possible to configure the device/row/bank/column addresses
in ways that exceed these limitations.
For each device attached [1..NUMDEV], the associated per-device address configuration must also be programmed, in the
associated register EMEM_ADR_CFG_DEV{N-1}.
If not being used to address a device, the chip-select pins may be re-used as row address pins for DDR3.
Valid settings for EMEM_ADR_CFG_DEV* registers should ensure device address width <= bank width + column width +
NV_MC_EMEM_ROW_WIDTH
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.1.14 MC_EMEM_ADR_CFG_DEV0_0
Configures the density and geometry of the first attached device.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
Note: DEVSIZE is per subpartition.
EMEM_DEV0_DEVSIZE: [PMC] density of the first attached DRAM device, used to generate
width of row address.
2 = D16MB
3 = D32MB
4 = D64MB
5 = D128MB
6 = D256MB
19:16 D64MB 7 = D512MB
8 = D1024MB
8 = D1GB
9 = D2048MB
9 = D2GB
10 = D4096MB
11 = D8192MB
12 = D768MB
EMEM_DEV0_BANKWIDTH: [PMC] width of bank address of the first attached DRAM device.
9:8 W2 2 = W2
3 = W3
16.7.1.15 MC_EMEM_ADR_CFG_DEV1_0
Configures the density and geometry of the second attached device, if a second device is populated.
To allow for 2 devices with different column width/bank width to be used without creating holes in the system-level address
map, the DEVSIZE setting of the second device may be smaller than the others to allow for non-powers-of-2 attached memory
sizes.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
Note: DEVSIZE is per subpartition.
16.7.1.16 MC_SECURITY_CFG0_0
Security aperture: Can be only accessed by TrustZone-Secured accesses from the secure clients. Access to this register is
restricted to TrustZone-secured requestors.
Boot requirements: This security configuration register should be saved to SDRAM and restored by the OS during warm
boot.
The global memory client IDs with TrustZone-level security are as follows:
CLIENT ID ID (hex) SWGROUP MODULE PARTITION DESCRIPTION
csr_mpcorelpr 38 (0x26) mpcorelp mpcorelp stop Reads from Cortex-A15
Shadow CPU core via the
L2 cache (Tegra K1 32-bit
only)
csr_mpcorer 39 (0x27) mpcore mpcore ftop Reads from 4 CPU cores
via the L2 cache
csw_mpcorelpw 56 (0x38) mpcorelp mpcorelp stop Writes from Cortex-A15
Shadow CPU core via the
L2 cache (Tegra K1 32-bit
only)
csw_mpcorew 57 (0x39) mpcore mpcore ftop Writes from 4 CPU cores
via the L2 cache
16.7.1.17 MC_SECURITY_CFG1_0
Access to this register is restricted to TrustZone-secured requestors.
Boot requirements:
This security configuration register should be saved to SDRAM and restored by the OS during warm boot.
16.7.1.18 MC_EMEM_ARB_CFG_0
General configuration of the External Memory Arbiter.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM warm boot, this register may be derived from the emcclk and a standard tick-value.
This register is shadowed: see usage note at the top of Section 16.7.1
CYCLES_PER_UPDATE: The number of mcclk cycles per deadline timer update. The target
wall-clock granularity ("tick") for the deadline counter should be fixed for the design, then the
8:0 0x8 CYCLES_PER_UPDATE should be used to convert the wall-time value into mcclk cycles. All
client latency allowances are also expressed in units of "ticks". Of all deadline-related controls,
only the CYCLES_PER_UPDATE and EXTRA_TICKS_PER_UPDATE values need to be
16.7.1.19 MC_EMEM_ARB_OUTSTANDING_REQ_0
This register can be used to limit the number of outstanding requests in the arbiter and monitor the count.
If outstanding transaction is greater than the maximum, requests are throttled based on
MC_EMEM_ARB_RING1_THROTTLE_0 register
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from other MC settings.
This register is shadowed: see usage note at the top of Section 16.7.1
LIMIT_OUTSTANDING: when ENABLED, the total number of requests in the arbiter is limited
to the value in ARB_MAX_OUTSTANDING
31 RW ENABLE
0 = DISABLE
1 = ENABLE
16.7.1.20 MC_EMEM_ARB_TIMING_RCD_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
RCD: The minimum number of cycles between activate commands to the same bank.
5:0 0x3f Program to max (1,ceil(max(EMC.WR_RCD,EMC.RD_RCD)/DIV)-1-1). Note that value 0x0 is
illegal.
16.7.1.21 MC_EMEM_ARB_TIMING_RP_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
RP: The minimum number of cycles between an internal precharge command and an activate
6:0 0x7f command to the same bank. Program to ceil (EMC.RP/DIV)-1+SFA. The combined value of
RAP2PRE+RP 0x0 is illegal; the combined value of WAP2PRE+RP 0x0 is illegal.
16.7.1.22 MC_EMEM_ARB_TIMING_RC_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
RC: This is the minimum number of cycles between activate commands to the same bank.
6:0 0x7f
Program to ceil (max(EMC.RC,(EMC.RAS+EMC.RP))/DIV)-1.
16.7.1.23 MC_EMEM_ARB_TIMING_RAS_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
RAS: This is the minimum number of cycles between an activate command and a precharge
5:0 0x3f
command to the same bank. Program to ceil (EMC.RAS/DIV)-1-1.
16.7.1.24 MC_EMEM_ARB_TIMING_FAW_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
FAW: For 8-bank devices: Only 4 activates may occur within this rolling window. Program to
5:0 0x3f ceil (EMC.TFAW/DIV)-1. Programming this to 0x0 or not programming a device to 4 banks will
turn off this check.
16.7.1.25 MC_EMEM_ARB_TIMING_RRD_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
RRD: The minimum number of cycles between an activate command and an activate
3:0 0xf
command to a different bank. Program to ceil (EMC.RRD/DIV)-1.
16.7.1.26 MC_EMEM_ARB_TIMING_RAP2PRE_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
RAP2PRE: The number of cycles between a read command with auto-precharge and the
5:0 0x3f internal precharge command generated by the DRAM. Program to ceil (EMC_R2P/DIV).
Note that: the combined value of RAP2PRE+RP 0x0 is illegal.
16.7.1.27 MC_EMEM_ARB_TIMING_WAP2PRE_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
WAP2PRE: The number of cycles between a write command with auto-precharge and the
6:0 0x7f internal precharge command generated by the DRAM. Program to ceil (EMC_W2P/DIV).
Note that: the combined value of WAP2PRE+RP 0x0 is illegal.
16.7.1.28 MC_EMEM_ARB_TIMING_R2R_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
R2R: The number of cycles between consecutive read commands to different devices
4:0 0x1f
(different chip selects). Program to ceil (EMC.REXT/DIV)-1+OTFA+SFA.
16.7.1.29 MC_EMEM_ARB_TIMING_W2W_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
W2W: The number of cycles between consecutive write commands to different devices
4:0 0x1f
(different chip selects). Program to ceil (EMC.WEXT/DIV)-1+SFA.
16.7.1.30 MC_EMEM_ARB_TIMING_R2W_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
R2W: The number of cycles to turn the bus from reads to writes. Program to ceil
5:0 0x3f
(EMC.R2W/DIV)-1+OTFA+SFA.
16.7.1.31 MC_EMEM_ARB_TIMING_W2R_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from EMC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
W2R: The number of cycles to turn the bus from reads to writes. Program to ceil
5:0 0x3f
(EMC.W2R/DIV)-1+SFA.
16.7.1.32 MC_EMEM_ARB_DA_TURNS_0
The direction arbiter attempts to choose the highest efficiency (i.e., lowest bubbles) direction to open pages next. While
programming this register incorrectly may lower performance, it should never cause chip-hangs since the EMC always controls
the final DRAM timing decisions. This register should be reprogrammed after clock-change events to bring the computed
values back in alignment with EMC's register values. These turn costs are deliberately not computed in hardware to provide
better flexibility to tweak arbiter performance.
The configuration registers for turns for DA are separate from the timing registers to allow for flexibility in the programming.
Boot requirements:
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from MC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
W2W_TURN: Bubbles produced by a write to write (other device) bus turn. Approximately
15:8 0x2
MC_EMEM_ARB_TIMING_W2W.
R2R_TURN: Bubbles produced by a read to read (other device) bus turn. Approximately
7:0 0x5
MC_EMEM_ARB_TIMING_R2R.
16.7.1.33 MC_EMEM_ARB_DA_COVERS_0
The direction arbiter attempts to choose the highest efficiency (i.e., lowest bubbles) direction to open pages next. While
programming this register incorrectly may lower performance, it should never cause chip-hangs since the EMC always controls
the final DRAM timing decisions. This register should be reprogrammed after clock-change events to bring the computed
values back in alignment with EMC's register values. These cover costs are deliberately not computed in hardware to provide
better flexibility to tweak arbiter performance.
Boot requirements:
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from MC settings using the given equations.
This register is shadowed: see usage note at the top of Section 16.7.1
16.7.1.34 MC_EMEM_ARB_MISC0_0
BC2AA_HOLDOFF: In the case where the currently-open pages have more work pending than the time it would take to open
another page, it is better to hold off opening that page until it is truly needed. The Best-bank Cache computes the pending
work and compares it to this threshold and advises the Activation Arbiter to hold-off.
Priority Inversion: In general, if the arbiter is working on a lower-priority request that blocks a higher-priority request, these
thresholds are used to limit the number of low-priority requests we will service before the arbiter will interrupt the lower-priority
traffic to start servicing the higher-priority traffic.
The priority classes are (in increasing priority order): Low (! expired), High (expired), HighIso.
There are three ways priority can be inverted: Bank Activation, Bus Direction, and Refresh:
Bank Activation: If an unexpired request to bank A, row R currently holds the page open, and a request to bank A, row S
expires, the Transaction Arbiter must make a decision whether to finish out the work for row R or to interrupt that transfer to
immediately service row S. The TA makes this decision based on the remaining work for row R and whether row S is for an
isochronous client, and the two PRIORITY_INVERSION thresholds.
Bus Direction: If the Transaction Arbiter is currently working on expired requests in direction P, and requests are also expired
(or expired-iso) in direction Q, the Transaction Arbiter must make a decision whether to continue working in direction P or
switch the bus to direction Q. The Transaction Arbiter will service at maximum PRIORITY_INVERSION_THRESHOLD (or
_INVERSION_ISO_THRESHOLD) requests in direction P before switching to direction Q.
Refresh: If the Transaction Arbiter is currently working on requests, and EMC asks to inject a refresh, the Transaction Arbiter
must decide whether it is more efficient (overall) to close the pages immediately or to finish the pages and then close them.
Depending on the setting of the REFRESH_ACK_THRESHOLD_USAGE configuration bit (in EMEM_ARB_MISC1 register,
below), the Transaction Arbiter will either choose to close the page immediately (NONE), close the page immediately if its
length is over the iso threshold (ISO), or close the page immediately if its length is over the normal threshold (NORMAL). If the
length is less than the chosen threshold, the Transaction Arbiter will service all remaining requests to the page before
acknowledging the EMC refresh request.
When in DDR3 coalesce-for-performance mode, the arbiters will monitor the traffic patterns and might halve the priority
inversion thresholds if they detect the current traffic is not coalescing efficiently. When in MC_EMC_SAME_FREQ mode, the
priority inversion thresholds should be set to half of their non-same-frequency values.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
The MC_EMC_SAME_FREQ field should be saved to scratch registers and restored by the Boot ROM during warm
boot.
The other fields of this register should be saved to SDRAM and restored by the OS during warm boot.
During Boot ROM section of warm boot, this register may be derived from other settings.
This register is shadowed: see usage note at the top of Section 16.7.1
BC2AA_HOLDOFF_THRESHOLD: If the pending work is greater than this value, hold off on
7:0 0x10 activations. Generally should be set to match the page-opening cost:
MC_EMEM_ARB_TIMING_RC+1.
16.7.1.35 MC_EMEM_ARB_MISC1_0
Two DVFS counters exist in the "NV_MC_ARB_EMEM_stats.v" module: one for all requests and another for CPU-only
transactions. Both of these are down counters which decrement for each transaction atom on mcclk.
When these counters reach zero, a single mcclk pulse is generated, and the counters reinitialize to a value of
((2^(ATOMS_PER_DVFS_PULSE+1))-1). The single mcclk pulse that is generated (when the counters reach zero) gets
synchronized to sclk (system clock) through a cross-clock domain FIFO control module, which has a minimum response time
requirement of (4 * sclk_period + 4 * mcclk_period). Therefore, ATOMS_PER_DVFS_PULSE should never be set such that
((2^(ATOMS_PER_DVFS_PULSE+1)) * mcclk_period) is less than (4 * sclk_period + 4 * mcclk_period).
This translates to the following rule for setting the minimum value of ATOMS_PER_DVFS_PULSE:
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
The COALESCE_FOR_PERFORMANCE field should be saved to scratch registers and restored by the Boot ROM
during warm boot. It may also be derived from EMC settings.
The other fields of this register should be saved to SDRAM and restored by the OS during warm boot.
This register is shadowed: see usage note at the top of Section 16.7.1
DEADLOCK_PREVENTION_SLACK_THRESHOLD: If the
slack at the head of any bank-queue, or any of the slacks in
the hit-under-miss FIFO is less than -(2^threshold),
backpressure the input to the arbiter until the violating slack
values have been arbitrated. This is intended to: (a) avoid
deadline-wrapping in heavily backpressured corner-cases and
31:28 0x8 NONE
(b) quickly get such cases back into high-efficiency arbitration.
Value of 0x0 disables the feature. The reset value is
NV_MC_EMEM_DL_WIDTH-1. Behavior with values greater
than or equal to NV_MC_EMEM_DL_WIDTH is UNDEFINED.
If the threshold is reached, ARBITRATION_EMEM_INT will
fire.
ALT_DEADLOCK_PREVENTION_SLACK_THRESHOLD:
[PMC] Use the absolute value of deadlock prevention slack
12:4 0x0 0x0 threshold instead of 2^n format. Note that the
DEADLOCK_PREVENTION_SLACK_THRESHOLD field still
needs to be programmed along with this one (for example, 7).
16.7.1.36 MC_EMEM_ARB_RING1_THROTTLE_0
Throttle cycle count varies whether outstanding_request count is below (LOW) or above (HIGH) the max_outstanding
threshold.
Boot requirements: During Boot ROM section of warm boot, this register may be derived from other settings.
This register is shadowed: see usage note at the top of Section 16.7.1
16.7.1.37 MC_EMEM_ARB_RING3_THROTTLE_0
Boot requirements: This register should be saved in the SDRAM and restored by the OS during warm boot.
This register is shadowed: see usage note at the top of Section 16.7.1
16.7.1.38 MC_EMEM_ARB_OVERRIDE_0
Some fields of this register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
This register should be saved in the SDRAM and restored by the OS during warm boot.
31 DISABLE ARB_HUM_FIFO_DEADLOCK_CHECK_OVERRIDE
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
28 ENABLE ARB_EMEM_SPO_OVERRIDE
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
27 DISABLE ARB_EMEM_AP_OVERRIDE
0 = DISABLE
1 = ENABLE
26 DISABLE ARB_HUM_FIFO_OVERRIDE
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
23 DISABLE ISO_TA_OVERRIDE
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
22 DISABLE ISO_DA_OVERRIDE
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
21 DISABLE ISO_BC_INHERIT_ON_PRIINV_OVERRIDE
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
20 DISABLE ISO_BC_CAUSE_PRIINV_OVERRIDE
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
19 DISABLE ISO_BA_OVERRIDE
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
18 DISABLE ISO_AA_OVERRIDE
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
17 DISABLE ARB_EMEM_BUBBLECALC_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
16 DISABLE ALLOC_ONE_BQ_PER_CLIENT:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
15 DISABLE PRIORITY_INVERSION_ISO_THRESHOLD_BUS_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
14 DISABLE PRIORITY_INVERSION_ISO_THRESHOLD_BANK_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
13 DISABLE PRIORITY_INVERSION_THRESHOLD_BUS_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
12 DISABLE PRIORITY_INVERSION_THRESHOLD_BANK_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
11 DISABLE PRIORITY_INVERSION_EQ_PRI_LEN_LIMIT_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
10 DISABLE OBSERVED_DIRECTION_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
9 DISABLE BC2AA_HOLDOFF_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
8 DISABLE TS2AA_HOLDOFF_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
4 DISABLE EXPIRE_UPDATE_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
16.7.1.39 MC_EMEM_ARB_RSV_0
Some fields of this register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
This register should be saved in the SDRAM and restored by the OS during warm boot.
This register is shadowed: see usage note at the top of Section 16.7.1
16.7.1.40 MC_CLKEN_OVERRIDE_0
9 CLK_GATED WCAM_CLKEN_OVR :
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
1 = ENABLE
0 = DISABLED
1 = ENABLED
8 CLK_GATED PTC_CACHE_CLKEN_OVR :
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
7 CLK_GATED PTC_CLKEN_OVR :
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
1 = ENABLE
0 = DISABLED
1 = ENABLED
6 CLK_GATED TLB_CLKEN_OVR :
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
1 = ENABLE
0 = DISABLED
1 = ENABLED
5 CLK_GATED WB_CLKEN_OVR :
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
1 = ENABLE
0 = DISABLED
1 = ENABLED
3 CLK_GATED REGS_CLKEN_OVR :
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
1 = ENABLE
0 = DISABLED
1 = ENABLED
2 CLK_GATED EARB_CLKEN_OVR :
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
1 = ENABLE
0 = DISABLED
1 = ENABLED
0 CLK_GATED CIF_CLKEN_OVR :
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
1 = ENABLE
0 = DISABLED
1 = ENABLED
16.7.1.41 MC_TIMING_CONTROL_0
0 X TIMING_UPDATE
16.7.1.42 MC_STAT_CONTROL_0
Statistics: Control
Offset: 0x100 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxx0000)
3 DISABLE EMC_PM_STOP_TRIGGER:
0 = DISABLE
1 = ENABLE
2 DISABLE EMC_PM_START_TRIGGER:
0 = DISABLE
1 = ENABLE
16.7.1.43 MC_CLIENT_HOTRESET_CTRL_0
Writing FLUSH_ENABLE to a bit in this register causes a flush to be performed on all of the clients for the selected swname.
The status of the flush (done/in progress) can be monitored in the CLIENT_HOTRESET_STATUS register.
1. Set the appropriate FLUSH_ENABLE bit in the CLIENT_HOTRESET_CTRL register to block further access by the
client, and start the flush process.
2. Poll the CLIENT_HOTRESET_STATUS register until the appropriate bit returns FLUSH_DONE.
3. Clear module bit in the CLK_RST_CONTROLLER_RST_DEVICES_* register to reset the module.
4. Set module bit in the CLK_RST_CONTROLLER_RST_DEVICES_* register to release the module reset.
5. Clear the appropriate FLUSH_ENABLE bit in the CLIENT_HOTRESET_CTRL register to allow transactions to flow.
SDMMC3A_FLUSH_ENABLE:
0 = DISABLE
31 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
SDMMC2A_FLUSH_ENABLE:
0 = DISABLE
30 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
SDMMC1A_FLUSH_ENABLE:
0 = DISABLE
29 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
TSEC_FLUSH_ENABLE:
0 = DISABLE
22 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
XUSB_DEV_FLUSH_ENABLE:
0 = DISABLE
20 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
XUSB_HOST_FLUSH_ENABLE:
0 = DISABLE
19 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
VIC_FLUSH_ENABLE:
0 = DISABLE
18 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
VI_FLUSH_ENABLE:
0 = DISABLE
17 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
VDE_FLUSH_ENABLE:
0 = DISABLE
16 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
SATA_FLUSH_ENABLE:
0 = DISABLE
15 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
PPCS_FLUSH_ENABLE:
0 = DISABLE
14 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
MSENC _FLUSH_ENABLE:
0 = DISABLE
11 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
MPCORELP_FLUSH_ENABLE:
0 = DISABLE
10 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
MPCORE_FLUSH_ENABLE:
0 = DISABLE
9 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
ISP2_FLUSH_ENABLE:
0 = DISABLE
8 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
HDA_FLUSH_ENABLE:
7 DISABLE 0 = DISABLE
1 = ENABLE
0 = DISABLED
HC_FLUSH_ENABLE:
0 = DISABLE
6 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
DCB_FLUSH_ENABLE:
0 = DISABLE
3 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
DC_FLUSH_ENABLE:
0 = DISABLE
2 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
AVPC_FLUSH_ENABLE:
0 = DISABLE
1 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
AFI_FLUSH_ENABLE:
0 = DISABLE
0 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
16.7.1.44 MC_CLIENT_HOTRESET_STATUS_0
Contains one bit for each swname, indicating the status of any flush that has been requested in the
CLIENT_HOTRESET_CTRL register.
SDMMC3A_HOTRESET_STATUS:
31 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
SDMMC2A_HOTRESET_STATUS:
30 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
SDMMC1A_HOTRESET_STATUS:
29 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
TSEC_HOTRESET_STATUS:
22 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
XUSB_DEV_HOTRESET_STATUS:
20 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
19 X XUSB_HOST_HOTRESET_STATUS:
1 = FLUSH_DONE
VIC_HOTRESET_STATUS:
18 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
VI_HOTRESET_STATUS:
17 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
VDE_HOTRESET_STATUS:
16 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
SATA_HOTRESET_STATUS:
15 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
PPCS_HOTRESET_STATUS:
14 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
MSENC_HOTRESET_STATUS:
11 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
MPCORELP_HOTRESET_STATUS:
10 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
MPCORE_HOTRESET_STATUS:
9 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
ISP2_HOTRESET_STATUS:
8 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
HDA_HOTRESET_STATUS:
7 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
HC_HOTRESET_STATUS:
6 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
DCB_HOTRESET_STATUS:
3 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
DC_HOTRESET_STATUS:
2 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
AVPC_HOTRESET_STATUS:
1 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
AFI_HOTRESET_STATUS:
0 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
16.7.1.45 MC_EMEM_ARB_ISOCHRONOUS_0_0
Controls whether a client is considered to be an isochronous client for EMEM arbitration. If a client is configured to be
isochronous, the arbiter will favor expired isochronous requests over requests of any other type. This applies to arbitration for:
best-bank arbiter (BA), activation arbiter (AA), direction arbiter (DA), and transaction arbiter (TA).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.46 MC_EMEM_ARB_ISOCHRONOUS_1_0
Controls whether a client is considered to be an isochronous client for EMEM arbitration. If a client is configured to be
isochronous, the arbiter will favor expired isochronous requests over requests of any other type.
This applies to arbitration for: best-bank arbiter (BA), activation arbiter (AA), direction arbiter (DA), and transaction arbiter (TA).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.47 MC_EMEM_ARB_ISOCHRONOUS_2_0
Controls whether a client is considered to be an isochronous client for EMEM arbitration. If a client is configured to be
isochronous, the arbiter will favor expired isochronous requests over requests of any other type.
This applies to arbitration for: best-bank arbiter (BA), activation arbiter (AA), direction arbiter (DA), and transaction arbiter (TA).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.48 MC_EMEM_ARB_ISOCHRONOUS_3_0
Controls whether a client is considered to be an isochronous client for EMEM arbitration. If a client is configured to be
isochronous, the arbiter will favor expired isochronous requests over requests of any other type. This applies to arbitration for:
best-bank arbiter (BA), activation arbiter (AA), direction arbiter (DA), and transaction arbiter (TA).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.49 MC_EMEM_ARB_HYSTERESIS_0_0
Controls whether a client is considered to be a hysteresis client for EMEM arbitration. If a client is NOT marked hysteresis, it
will immediately cause the arbiter to turn off ts2aa_holdoff (see the comments for EMEM_ARB_OVERRIDE for further
description of ts2aa_holdoff functionality).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.50 MC_EMEM_ARB_HYSTERESIS_1_0
Controls whether a client is considered to be an hysteresis client for EMEM arbitration. If a client is NOT marked hysteresis, it
will immediately cause the arbiter to turn off ts2aa_holdoff (see the comments for EMEM_ARB_OVERRIDE for further
description of ts2aa_holdoff functionality).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.51 MC_EMEM_ARB_HYSTERESIS_2_0
Controls whether a client is considered to be a hysteresis client for EMEM arbitration. If a client is NOT marked hysteresis, it
will immediately cause the arbiter to turn off ts2aa_holdoff (see the comments for EMEM_ARB_OVERRIDE for further
description of ts2aa_holdoff functionality).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.52 MC_EMEM_ARB_HYSTERESIS_3_0
Controls whether a client is considered to be an hysteresis client for EMEM arbitration. If a client is NOT marked hysteresis, it
will immediately cause the arbiter to turn off ts2aa_holdoff (see the comments for EMEM_ARB_OVERRIDE for further
description of ts2aa_holdoff functionality).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.53 MC_SMMU_TRANSLATION_ENABLE_0_0
Used in addition to the global (MC_SMMU_CONFIG.SMMU_ENABLE) and per-module
(MC_SMMU_*_ASID.*_SMMU_ENABLE) enables.
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.54 MC_SMMU_TRANSLATION_ENABLE_1_0
Used in addition to the global (MC_SMMU_CONFIG.SMMU_ENABLE) and per-module
(MC_SMMU_*_ASID.*_SMMU_ENABLE) enables.
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.55 MC_SMMU_TRANSLATION_ENABLE_2_0
Used in addition to the global (MC_SMMU_CONFIG.SMMU_ENABLE) and per-module
(MC_SMMU_*_ASID.*_SMMU_ENABLE) enables.
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.56 MC_SMMU_TRANSLATION_ENABLE_3_0
Used in addition to the global (MC_SMMU_CONFIG.SMMU_ENABLE) and per-module
(MC_SMMU_*_ASID.*_SMMU_ENABLE) enables.
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.57 MC_SMMU_AFI_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.58 MC_SMMU_AVPC_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.59 MC_SMMU_DC_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.60 MC_SMMU_DCB_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.61 MC_SMMU_HC_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.62 MC_SMMU_HDA_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.63 MC_SMMU_ISP2_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.64 MC_SMMU_MSENC_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.65 MC_SMMU_NV_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field.
16.7.1.66 MC_SMMU_NV2_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field.
16.7.1.67 MC_SMMU_PPCS_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.68 MC_SMMU_SATA_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.69 MC_SMMU_VDE_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.70 MC_SMMU_VI_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.71 MC_SMMU_VIC_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.72 MC_SMMU_XUSB_HOST_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.73 MC_SMMU_XUSB_DEV_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.74 MC_SMMU_TSEC_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.75 MC_SMMU_PPCS1_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.76 MC_VIDEO_PROTECT_VPR_OVERRIDE_0
31 ENABLE SDMMC3A_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
30 ENABLE SDMMC2A_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
29 ENABLE SDMMC1A_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
26 ENABLE DC1_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
23 ENABLE PPCS1_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
22 DISABLE TSEC_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
20 ENABLE XUSB_DEV_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
19 ENABLE XUSB_HOST_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
18 DISABLE VIC_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
17 ENABLE VI_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
16 DISABLE VDE_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
15 ENABLE SATA_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
14 ENABLE PPCS_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
11 DISABLE MSENC_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
10 ENABLE MPCORELP_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
9 ENABLE MPCORE_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
8 ENABLE ISP2_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
7 DISABLE HDA_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
6 ENABLE HC_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
3 DISABLE DCB_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
2 DISABLE DC_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 ENABLE AVPC_VPR_OVERRIDE
0 = DISABLE
1 = ENABLE
0 ENABLE AFI_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
16.7.1.77 MC_VIDEO_PROTECT_VPR_OVERRIDE1_0
4 ENABLE PPCS2_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
3 DISABLE GPUB_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
2 DISABLE GPU_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 ENABLE ISP2B_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
0 ENABLE SDMMC4A_VPR_OVERRIDE:
0 = DISABLE
1 = ENABLE
16.7.1.78 MC_SMMU_TLB_SET_SELECTION_MASK_0_0
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
This register is shadowed: see usage note at the top of Section 16.7.1
16.7.1.79 MC_DISPLAY_SNAP_RING_0
This register should be saved in the SDRAM and restored by the OS during warm boot.
31 ENABLED DISPLAY_SNAP_RING_WRITE_ACCESS :
0 = ENABLED
1 = DISABLED
1 RING1 DISB_SNAP_RING :
0 = RING0
1 = RING1
0 RING1 DIS_SNAP_RING :
0 = RING0
1 = RING1
16.7.1.80 MC_ERR_VPR_STATUS_0
Offset: 0x654 | Read/Write: RO | Reset: 0x00XXX0XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
ERR_VPR_ADR_HI: Higher address bits of erring address whose lower bits are available in the
21:20 X
ERR_VPR_ADR register
18 X ERR_VPR_SWAP
6:0 X ERR_VPR_ID: Client identifier (see above list) of the access that caused the error.
16.7.1.81 MC_ERR_VPR_ADR_0
Offset: 0x658 | Read/Write: RO | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X ERR_VPR_ADR
16.7.1.82 MC_EMEM_CFG_ACCESS_CTRL_0
EMEM_CFG
EMEM_ADR_CFG
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 768
Tegra K1 Technical Reference Manual
Memory Controller
EMEM_ADR_CFG_DEV0
EMEM_ADR_CFG_DEV1
EMEM_ADR_CFG_CHANNEL_MASK
EMEM_ADR_CFG_BANK_MASK_0
EMEM_ADR_CFG_BANK_MASK_1
EMEM_ADR_CFG_BANK_MASK_2
EMEM_BANK_SWIZZLE_CFG0
EMEM_BANK_SWIZZLE_CFG1
EMEM_BANK_SWIZZLE_CFG2
EMEM_BANK_SWIZZLE_CFG3
EMEM_CFG_WRITE_ACCESS:
0 ENABLED 0 = ENABLED
1 = DISABLED
16.7.1.83 MC_TZ_SECURITY_CTRL_0
This register is "sticky" - once the strict check is enabled, it cannot be disabled without a reset.
16.7.1.84 MC_EMEM_ARB_OUTSTANDING_REQ_RING3_0
Note: Although called ring3, this register works on the highest ring.
This register is used to limit the number of outstanding requests in the arbiter and monitor the count. If the outstanding
transactions are greater than the maximum, the highest ring requests are throttled based on the
MC_EMEM_ARB_RING3_THROTTLE_0 register.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During the Boot ROM section of warm boot, this register can be derived from other MC settings.
This register is shadowed: see usage note at the top of Section 16.7.1
LIMIT_OUTSTANDING_RING3: When ENABLED, requests into ring3 are throttled after the
request count reaches ARB_MAX_OUTSTANDING_RING3.
31 RW ENABLE
0 = DISABLE
1 = ENABLE
16.7.1.85 MC_SEC_CARVEOUT_BOM_0
Offset: 0x670 | Read/Write: R/W | Reset: 0xfff00000 (0b111111111111xxxxxxxxxxxxxxxxxxxx)
31:20 0xfff SEC_CARVEOUT_BOM: [PMC_SECURE] Base address for the SEC carveout address space.
16.7.1.86 MC_SEC_CARVEOUT_SIZE_MB_0
Offset: 0x674 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxx000000000000)
16.7.1.87 MC_SEC_CARVEOUT_REG_CTRL_0
Offset: 0x678 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
SEC_CARVEOUT_WRITE_ACCESS: [PMC_SECURE] Sticky bit to control the writes to the other Sec
Carveout aperture registers.
0 ENABLED
0 = ENABLED
1 = DISABLED
16.7.1.88 MC_ERR_SEC_STATUS_0
Offset: 0x67c | Read/Write: RO | Reset: 0x00XXX0XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
ERR_SEC_ADR_HI: Higher address bits of erring address whose lower bits are available in the
21:20 X
ERR_ADR register
18 X ERR_SEC_SWAP
6:0 X ERR_SEC_ID: Client identifier (see above list) of the access that caused the error.
16.7.1.89 MC_ERR_SEC_ADR_0
Offset: 0x680 | Read/Write: RO | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X ERR_SEC_ADR
16.7.1.90 MC_PC_IDLE_CLOCK_GATE_CONFIG_0
This register should be saved in the SDRAM and restored by the OS during warm boot.
4:0 0x1f CLOCK_GATE_IDLE_TICKS: Number of idle "ticks" before a partition client is clock-gated
16.7.1.91 MC_STUTTER_CONTROL_0
Offset: 0x688 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
SLOW_EMCCLK_DURING_DSR: When ENABLED, the clock to the EMC will be slowed during dynamic
self refresh.
0 0x0
0 = DISABLED
1 = ENABLED
16.7.1.92 MC_EMEM_ARB_NISO_THROTTLE_0
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
This register is shadowed: see usage note at the top of Section 16.7.1
16.7.1.93 MC_EMEM_ARB_OUTSTANDING_REQ_NISO_0
External Memory Arbitration Configuration: Highest Ring Input NISO Outstanding Request Limiter
Although called NISO, this register applies to the inputs of the highest snap-arbiter ring. Refer to the
EMEM_ARB_NISO_THROTTLE_MASK register to see how partition clients are configured into the "NISO meta-client" group
for the purpose of NISO client throttling.
This register can be used to limit the number of outstanding requests in the arbiter and monitor the count. If the outstanding
transactions are greater than the maximum, the highest ring requests are throttled based on the
MC_EMEM_ARB_NISO_THROTTLE register.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This arbitration configuration register should be saved to SDRAM and restored by the OS during warm boot.
During the Boot ROM section of warm boot, this register may be derived from other MC settings.
This register is shadowed: see usage note at the top of Section 16.7.1
LIMIT_OUTSTANDING_NISO: When ENABLED, requests into NISO are throttled after the
request count reaches ARB_MAX_OUTSTANDING_NISO.
31 RW ENABLE
0 = DISABLE
1 = ENABLE
16.7.1.94 MC_EMEM_ARB_NISO_THROTTLE_MASK_0
External Memory Arbitration Configuration: Highest Ring Input NISO Throttle Mask
This register is used to group partition clients in the highest level snap-arbiter ring into a "NISO meta-client" group for the
purpose of throttling. This allows soft-ISO clients in this ring to meet their bandwidth needs.
To prevent non-ISO (NISO) clients from filling the MC row-sorter (which could prevent soft-ISO clients from getting bandwidth),
selective throttling is implemented at the input of ring2. To do this, the EMEM_ARB_NISO_THROTTLE_MASK register is
used to specify which partition clients get included into a "NISO meta-client" group. To implement throttling, a total number of
outstanding transactions counter (for example, only one counter exists in the whole "NV_MC_cif" to track this, and is shared
by all throttling circuits) gets compared to a programmable maximum limit for this NISO meta-client group. If the number is
greater than the maximum limit, all clients included in the "NISO meta-client" group get throttled based on the
EMEM_ARB_NISO_THROTTLE register. This NISO_THROTTLE register is used to specify a number of stall cycles that get
inserted at the input to the ring after every request from any of the clients included in the NISO group.
Boot requirements:
This register should be saved to SDRAM and restored by the OS during warm boot.
NISO_THROTTLE_MASK_AUD: If enabled, include AUD in the NISO meta-client group for throttling.
26 DISABLED 0 = DISABLED
1 = ENABLED
NISO_THROTTLE_MASK_MSE: If enabled, include MSE in the NISO meta-client group for throttling.
19 DISABLED 0 = DISABLED
1 = ENABLED
NISO_THROTTLE_MASK_SAX: If enabled, include SAX in the NISO meta-client group for throttling.
9 DISABLED 0 = DISABLED
1 = ENABLED
NISO_THROTTLE_MASK_PCX: If enabled, include PCX in the NISO meta-client group for throttling.
7 DISABLED 0 = DISABLED
1 = ENABLED
NISO_THROTTLE_MASK_AVP: If enabled, include AVP in the NISO meta-client group for throttling.
3 DISABLED 0 = DISABLED
1 = ENABLED
NISO_THROTTLE_MASK_APB: If enabled, include APB in the NISO meta-client group for throttling.
2 DISABLED 0 = DISABLED
1 = ENABLED
NISO_THROTTLE_MASK_AHB: If enabled, include AHB in the NISO meta-client group for throttling.
1 DISABLED 0 = DISABLED
1 = ENABLED
16.7.1.95 MC_EMEM_ARB_RING0_THROTTLE_MASK_0
Boot requirements:
This register should be saved to SDRAM registers and restored by the OS during warm boot.
This register is shadowed: see usage note at the top of Section 16.7.1
RING0_THROTTLE_MASK_RING1_OUTPUT: If enabled, include the ring1 output (that is, all ring1
requests) in the ring0 meta-client group for throttling.
15 ENABLE
0 = DISABLE
1 = ENABLE
RING0_THROTTLE_MASK_MEM: If enabled, include mem in the ring0 meta-client group for throttling.
3 DISABLE 0 = DISABLE
1 = ENABLE
RING0_THROTTLE_MASK_PTC: If enabled, include ptc in the ring0 meta-client group for throttling.
2 DISABLE 0 = DISABLE
1 = ENABLE
RING0_THROTTLE_MASK_MMU: If enabled, include mmu in the ring0 meta-client group for throttling.
1 DISABLE 0 = DISABLE
1 = ENABLE
16.7.1.96 MC_PC_IDLE_CLOCK_GATE_0
Boot requirements:
This register should be saved in the SDRAM and restored by the OS during warm boot.
16.7.1.97 MC_EMEM_ARB_OVERRIDE_1_0
Boot requirements:
Some fields of register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
This security configuration register should be saved to SDRAM and restored by the OS during warm boot.
5 DISABLE EXPIRE_UPDATE_DEADLOCK_OVERRIDE:
0 = DISABLE
1 = ENABLE
1 = OVERRIDE
16.7.1.98 MC_CLIENT_HOTRESET_CTRL_1_0
Set the appropriate FLUSH_ENABLE bit in the CLIENT_HOTRESET_CTRL register to block further access by the
client, and start the flush process.
Poll the CLIENT_HOTRESET_STATUS register until the appropriate bit returns FLUSH_DONE.
Clear module bit in the CLK_RST_CONTROLLER_RST_DEVICES_* register to reset the module.
Set module bit in the CLK_RST_CONTROLLER_RST_DEVICES_* register to release the module reset.
Clear the appropriate FLUSH_ENABLE bit in the CLIENT_HOTRESET_CTRL register to allow transactions to flow.
GPU_FLUSH_ENABLE:
0 = DISABLE
2 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
ISP2B_FLUSH_ENABLE:
0 = DISABLE
1 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
SDMMC4A_FLUSH_ENABLE:
0 = DISABLE
0 DISABLE 1 = ENABLE
0 = DISABLED
1 = ENABLED
16.7.1.99 MC_CLIENT_HOTRESET_STATUS_1_0
GPU_HOTRESET_STATUS:
2 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
ISP2B_HOTRESET_STATUS:
1 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
SDMMC4A_HOTRESET_STATUS:
0 X 1 = FLUSH_DONE
0 = FLUSH_IN_PROGRESS
16.7.1.100 MC_VIDEO_PROTECT_GPU_OVERRIDE_0_0
Offset: 0x984 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
16.7.1.101 MC_VIDEO_PROTECT_GPU_OVERRIDE_1_0
Offset: 0x988 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxx0000000000000000)
16.7.1.102 MC_MTS_CARVEOUT_BOM_0
Offset: 0x9a0 | Read/Write: R/W | Reset: 0xfff00000 (0b111111111111xxxxxxxxxxxxxxxxxxxx)
16.7.1.103 MC_MTS_CARVEOUT_SIZE_MB_0
Offset: 0x9a4 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxx000000000000)
16.7.1.104 MC_MTS_CARVEOUT_ADR_HI_0
Offset: 0x9a8 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00)
16.7.1.105 MC_MTS_CARVEOUT_REG_CTRL_0
Offset: 0x9ac | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0)
0 ENABLED MTS_CARVEOUT_WRITE_ACCESS
0 = ENABLED
1 = DISABLED
16.7.1.106 MC_SMMU_PTC_FLUSH_1_0
Program the higher address bits above PTC_FLUSH_ADR[31] in this field to flush a PDE or PTE group at a certain physical
address.
16.7.1.107 MC_SECURITY_CFG3_0
Boot requirements:
This security configuration register should be saved to SDRAM and restored by the OS during warm boot.
Offset: 0x9bc | Read/Write: R/W | Secure Trust Zone Protected | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00)
SECURITY_BOM_HI: SECURITY_BOM_HI has the higher address bits beyond 32 bits of the
1:0 0x0
base of the secured region, limited to MB granularity.
16.7.1.108 MC_EMEM_BANK_SWIZZLE_CFG0_0
16.7.1.109 MC_EMEM_BANK_SWIZZLE_CFG1_0
16.7.1.110 MC_EMEM_BANK_SWIZZLE_CFG2_0
16.7.1.111 MC_EMEM_BANK_SWIZZLE_CFG3_0
16.7.1.112 MC_SEC_CARVEOUT_ADR_HI_0
Offset: 0x9d4 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx00)
16.7.1.113 MC_SMMU_DC1_ASID_0
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved to SDRAM and restored by the OS during warm boot.
Offset: 0xa88 | Read/Write: R/W | Secure Trust Zone Protected | Reset: 0x00000000 (0b0xxxxxxxxxxxxxxxxxxxxxxxx0000000)
16.7.1.114 MC_SMMU_SDMMC1A_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved to SDRAM and restored by the OS during warm boot.
16.7.1.115 MC_SMMU_SDMMC2A_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved to SDRAM and restored by the OS during warm boot.
16.7.1.116 MC_SMMU_SDMMC3A_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved to SDRAM and restored by the OS during warm boot.
16.7.1.117 MC_SMMU_SDMMC4A_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved to SDRAM and restored by the OS during warm boot.
16.7.1.118 MC_SMMU_ISP2B_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved to SDRAM and restored by the OS during warm boot.
16.7.1.119 MC_SMMU_GPU_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved to SDRAM and restored by the OS during warm boot.
16.7.1.120 MC_SMMU_GPUB_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved to SDRAM and restored by the OS during warm boot.
16.7.1.121 MC_SMMU_PPCS2_ASID_0
Enables or disables SMMU translation for the module and if enabled sets the ASID for translation.
This register is not TrustZone secure, but non-secure writes to this register will be dropped if either the current or new value of
the ASID field is for a secure ASID (regardless of the current or new value of the SMMU_ENABLE field).
Boot requirements:
This register should be saved to SDRAM and restored by the OS during warm boot.
Writes to shadowed register fields update the shadow copy (this is default, assumes
DBG.WRITE_MUX==ASSEMBLY).
Reads to shadowed register fields return the currently-active copy (this is default, assumes
DBG.READ_MUX==ACTIVE).
This allows a new set of frequency-dependent timing parameters to be written to the shadow registers while memory traffic is
ongoing, then when the parameters are completely written, the EMC hardware can perform a timing-safe switch.
Such switches can be triggered via two methods: TIMING_CONTROL.TIMING_UPDATE (generally used during initialization),
or the automatic CAR/EMC handshake on a clock-frequency or divider change (assuming
CFG_2.CLKCHANGE_REQ_ENABLE==ENABLED).
This register is shadowed: see usage note at the top of Section 16.7.2
Occasionally, only certain fields in the register will be shadowed; if so they are noted after the above comment.
USAGE NOTE: Many EMC registers play crucial roles in warm boot (also known as "wake from LP0") and cold boot (also
known as "power up") sequences. Suggested actions for the Boot ROM/Boot Loader are noted after "Boot requirements:”.
USAGE NOTE: The EMC register fields to be stored in the PMC must have "[PMC]", "[PMC2]", or "[PMC3]".in their comments.
([PMC2] registers are packed/unpacked after [PMC] register group in software code. [PMC3] is even later.) The fields that
need to be stored in PMC Secure Scratch registers must have [PMC_SECURE] in their comments.
USAGE NOTE: When writing to a register, any bits that are not intended to be modified should be rewritten with their existing
values.
USAGE NOTE: Unspecified bits may not appear in tables and should be written with their Reset values.
16.7.2.1 EMC_INTSTATUS_0
16.7.2.2 EMC_INTMASK_0
16.7.2.3 EMC_CFG_0
Configuration Register
The CFG register is used to configure the external memory interface.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
This register is shadowed: see usage note at the top of Section 16.7.2
DYN_SELF_REF: [PMC]
28 DISABLED 0 = DISABLED
1 = ENABLED
MAN_PRE_WR: [PMC] enable explicit-precharge in the EMC for writes. When this bit
is enabled (and AUTO_PRE_WR=enable), EMC will issue an explicit precharge
command after the memory write command. If this bit is disabled (and
23 ENABLED AUTO_PRE_WR=enable), the EMC will issue an auto-precharge with the memory
write command.
0 = DISABLED
1 = ENABLED
MAN_PRE_RD: [PMC] enable explicit-precharge in the EMC for reads. When this bit
is enabled (and AUTO_PRE_RD=enable), EMC will issue an explicit precharge
command after the memory read command. If this bit is disabled (and
22 ENABLED AUTO_PRE_RD=enable), the EMC will issue an auto-precharge with the memory
read command.
0 = DISABLED
1 = ENABLED
PERIODIC_QRST: [PMC] specifies whether or not to periodic reset the FBIO read-
data FIFO during normal operation. The periodic resets can be used for graceful
recovery from an intermittent failure condition; only the initial reset is absolutely
21 DISABLED required.
Note: For LPDDRx and MRR (if ever used), this bit should be set to enable.
0 = DISABLED
1 = ENABLED
WAIT_FOR_ISP2B_READY_B4_CC: [PMC]
9 0x0
1 = wait for isp2b ready event to be asserted before acknowledge clock change.
WAIT_FOR_VI2_READY_B4_CC: [PMC]
8 0x0
1 = wait for vi2 ready event to be asserted before acknowledge clock change.
WAIT_FOR_ISP2_READY_B4_CC: [PMC]
7 0x0
1 = wait for isp2 ready event to be asserted before acknowledge clock change.
16.7.2.4 EMC_ADR_CFG_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.5 EMC_REFCTRL_0
Boot requirements:
If per-device DPD is used, the DEVICE_REFRESH_DISABLE field should be parameterized in the BCT and written
by the Boot ROM during cold boot.
If per-device DPD is used, the DEVICE_REFRESH_DISABLE field should be parameterized the scratch registers
and restored by the Boot ROM during warm boot.
REF_VALID field should always be set to ENABLED for normal use, no need to parameterize in BCT/scratch.
16.7.2.6 EMC_PIN_0
Boot requirements:
Both fields in this register should be set to NORMAL during cold boot.
Both fields in this register should be set to NORMAL during warm boot.
PIN_DQM: Is used to always mask DRAM writes. This pin should only be used for
initialization. Certain DRAM vendors require the DQM to be high during initialization. The
4 NORMAL register value should be set to NORMAL after the initialization sequence.
0 = NORMAL
1 = INACTIVE
PIN_CKE: Selects the level of the CKE pin. This can be used to place the DRAM in power
down state. PIN_CKE value is applied all CKE pins.
0 POWERDOWN
0 = POWERDOWN
1 = NORMAL
16.7.2.7 EMC_TIMING_CONTROL_0
Note: Programming of this register does not trigger the shadow register update event
immediately. To prevent shadow register programming issued after programming this
register from being latched accidentally, always poll for TIMING_UPDATE_STALLED==0
after programming this register.
Boot requirements:
Writing this register with 0x1 will trigger a timing update event, which should be used in both warm boot and cold boot
sequences.
0 X TIMING_UPDATE
16.7.2.8 EMC_RC_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
RC: [PMC] Specifies the row cycle time. This is the minimum number of cycles between
activate commands to the same bank.
6:0 0x7f
LPDDR3 : ceil((tRASmin+tRPpb)/tCK) – 1
DDR3: max(0, ceil(tRC/tCK) - (CMD_2T_TIMING == 1 ? 2 : 1))
16.7.2.9 EMC_RFC_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
RFC: [PMC] specifies the auto refresh cycle time. This is the minimum number of cycles
between an auto refresh command and a subsequent auto refresh or activate command.
8:0 0x3f LPDDR3: ceil(tRFCab/tCK) – 1
DDR2 : ceil(tRFC/tCK) - 1
DDR3: max(0, ceil(tRFC/tCK) - (CMD_2T_TIMING == 1 ? 2 : 1))
16.7.2.10 EMC_RAS_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
RAS: [PMC] specifies the row active time. This is the minimum number of cycles between an
activate command and a precharge command to the same bank.
5:0 0x3f
DDR3: max(0, ceil(tRASmin/tCK) - (CMD_2T_TIMING == 1 ? 2 : 1))
LPDDR3: max(3, ceil(tRASmin/tCK)) - 1
16.7.2.11 EMC_RP_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
RP: [PMC] specifies the row precharge time. This is the minimum number of cycles between a
precharge command and an activate command to the same bank.
5:0 0x3f
DDR3: max(0, ceil(tRP/tCK) - (CMD_2T_TIMING == 1 ? 2 : 1))
LPDDR3: max(3, ceil(tRP/tCK)) - 1
16.7.2.12 EMC_R2W_0
R2something and W2something registers are independent of burst length, and are relative to the last virtual CAS_ of a
command. Counting starts from the last data transfer as related to where CAS_ would be if BL = 4.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
R2W: [PMC] specifies the minimum number of cycles from any read command to any write
command, irrespective of bank. This parameter guarantees the read->write turnaround time on
the bus.
DDR3: RL - WL + 2 - (CMD_2T_TIMING == 1 ? 1 : 0) + (CTT_TERMINATION == 1 ? max(0,
CTT + CTT_DURATION - RDV - 2) : (EMC2PMACRO_CFG_XM2DQS_E_STRPULL_DQS ?
4:0 0x1f
1 : 0)) + (EMC2PMACRO_CFG_QUSE_MODE == ALWAYS_ON ? 1 : 0)
LPDDR3: RL - WL + 1 + ceil(tDQSCKmax/tCK) +
(EMC2PMACRO_CFG_XM2DQS_E_STRPULL_DQS ? 1 : 0) +
(EMC2PMACRO_CFG_QUSE_MODE == ALWAYS_ON ? 1 : 0)
Largest programming value is 29
16.7.2.13 EMC_W2R_0
R2something and W2something registers are independent of burst length, and are relative to the last virtual CAS_ of a
command. Counting starts from the last data transfer as related to where CAS_ would be if BL = 4.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 790
Tegra K1 Technical Reference Manual
Memory Controller
W2R: [PMC] specifies the minimum number of cycles from a write command to a read
command, irrespective of bank.
4:0 0x1f DDR3 : WL + max(4, ceil(tWTR/tCK)) - (CMD_2T_TIMING == 1 ? 1 : 0)
LPDDR3 : WL + 1 + ceil(tWTR/tCK)
Largest programming value is 29.
16.7.2.14 EMC_R2P_0
R2something and W2something registers are independent of burst length, and are relative to the last virtual CAS_ of a
command. Counting starts from the last data transfer as related to where CAS_ would be if BL = 4.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
R2P: [PMC] specifies the minimum number of cycles from a read command to a precharge
command for the same bank.
4:0 0x1f
DDR3 : max(4, ceil(tRTP/tCK)) - (CMD_2T_TIMING == 1 ? 2 : 1)
LPDDR3: BL/2 + max(2, ceil(tRTP/tCK)) 4 .
16.7.2.15 EMC_W2P_0
R2something and W2something registers are independent of burst length, and are relative to the last virtual CAS_ of a
command. Counting starts from the last data transfer as related to where CAS_ would be if BL = 4.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
W2P: [PMC] Specifies the minimum number of cycles from a write command to a precharge
command for the same bank.
5:0 0x3f
DDR3 : WL + max(2, ceil(tWR/tCK)) - (CMD_2T_TIMING == 1 ? 1 : 0)
LPDDR3: WL + max(3, TWR)
16.7.2.16 EMC_RD_RCD_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
RD_RCD: [PMC] Specifies the RAS to CAS delay. RD_RCD is the minimum number of cycles
between an activate command and a read command to the same bank.
5:0 0x1f
DDR3 : ceil(tRCD/tCK) - (CMD_2T_TIMING == 1 ? 2 : 1)
LPDDR3: max(3, ceil(tRCD/tCK)) - 1
16.7.2.17 EMC_WR_RCD_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
WR_RCD: [PMC] Minimum number of cycles between an activate command and a write
command to the same bank.
5:0 0x1f
DDR3 : ceil(tRCD/tCK) - (CMD_2T_TIMING == 1 ? 2 : 1)
LPDDR3: max(3, ceil(tRCD/tCK)) - 1
16.7.2.18 EMC_RRD_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
RRD: [PMC] specifies the Bank X Act to Bank Y Act command delay.
3:0 0xf DDR3 : max(4, ceil(tRRD/tCK)) - (CMD_2T_TIMING == 1 ? 2 : 1)
LPDDR3: max(2, ceil(tRRD/tCK)) - 1
16.7.2.19 EMC_REXT_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 792
Tegra K1 Technical Reference Manual
Memory Controller
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
REXT: [PMC] specifies the read to read delay for reads when multiple physical devices are
present.
3:0 0x1
DDR3: USE_PER_DEVICE_DLY_TRIM_IB == 1 ? 2 : 1
LPDDR3: ceil(3/tCK + 0.5) + USE_PER_DEVICE_DLY_TRIM_IB ? 1 : 0
16.7.2.20 EMC_WDV_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
WDV: [PMC] The number of cycles to post (delay) write data from being asserted to the
RAMs.
3:0 0x0 DDR3 : WL - 1
LPDDR3 : WL
15 = MAX
16.7.2.21 EMC_QUSE_0
Because SDRAM uses a tristating clock (the DQS), a method is needed to deal with the ambiguity of when DQS is tristated.
Only one such method is supported: QUSE.
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
QUSE: [PMC] Tells the chip when to look for read return data.
5:0 0x2
LPDDR3/DDR3: obtained from characterization
16.7.2.22 EMC_QRST_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.23 EMC_QSAFE_0
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
QSAFE: [PMC] Time from a read command to when it is safe to issue a QRST (delayed by the
4:0 0x7 QRST parameter).
LPDDR3/DDR3 QSAFE >= RDV - QRST
16.7.2.24 EMC_RDV_0
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 794
Tegra K1 Technical Reference Manual
Memory Controller
RDV: [PMC] Time from read command to latching the read data from the pad macros.
DDR3 : RL + 6 + f_ceil(fly-by-time/tCK) - (dram-dll-is-off ? 1 : 0)
LPDDR3: RL + 6 + ceil((tDQSCKmax + fly-by-time)/tCK)
5:0 0x8
Fly-by-time is board routing dependent, which usually should be less than 1.5ns.
dram-dll-is-off is true below 150 MHz where DRAM DLL has to be turned off
45 = MAX
16.7.2.25 EMC_REFRESH_0
For example, if the clock frequency is 133 MHz, and the refresh requirement is 64 ms per 4096 rows. The programming value
is 0x7e3.
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
15:6 0x0 REFRESH: [PMC] Specifies the interval between refresh requests.
16.7.2.26 EMC_BURST_REFRESH_NUM_0
Note: If tRAS(max) is less than the refresh interval (tREF/#_of_rows), tRAS(max) must be used
instead of the refresh interval in the formula above. This is because refresh is used to
satisfy tRAS(max) timing. Accordingly, BURST_REFRESH_NUM must be programmed in
such a way that queuing up multiple refreshes does not violate tRAS(max) timing. Burst
length = 2^BURST_REFRESH_NUM. Refreshes will be throttled to meet TREFBW
limitation (8/window) if TREFBW > 0.
Note: Do not program this register to value non-zero unless for testing.
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.27 EMC_PDEX2WR_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
PDEX2WR: Specify the timing delay from exit of powerdown mode to a write command.
DDR3 : max(3, ceil(tXP/tCK)) - (CMD_2T_TIMING == 1 ? 2 : 1)
LPDDR3 : ceil(tXP/tCK) - 1
5:0 0x3e
Note: on DDR3, if slow power down exit mode is used and ODT is enabled, use max(10,
ceil(tXPDLL/tCK)) instead of max(3, ceil(tXP/tCK)) in the formula. The largest allowed value
is 62.
16.7.2.28 EMC_PDEX2RD_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
PDEX2RD: Specify the timing delay from exit of powerdown mode to a read command.
DDR3: (use-slow-pd-exit-mode ? max(10, ceil(tXPDLL/tCK)) : max(3, ceil(tXP/tCK))) -
(CMD_2T_TIMING == 1 ? 2 : 1)
5:0 0x3e
LPDDR3: ceil(tXP/tCK) - 1
use-slow-pd-exit-mode is 1 if slow power down exit mode is used (MR0 bit 12 is 0). The
largest allowed value is 62.
16.7.2.29 EMC_PCHG2PDEN_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
PCHG2PDEN: [PMC] Specify the timing delay from a precharge command to powerdown
entry.
5:0 0x1f
DDR3: 1
LPDDR3: f_ceil(tRP]/tCK) - (CMD_2T_TIMING == 1 ? 1 : 0)
16.7.2.30 EMC_ACT2PDEN_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
ACT2PDEN: Specify the timing delay from an activate, MRS or EMRS command to power-
5:0 0x1f down entry.
DDR3/ LPDDR3: 0
16.7.2.31 EMC_AR2PDEN_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
AR2PDEN: [PMC] Specify the timing delay from an autorefresh command to powerdown
entry.
8:0 0x1f
DDR3: max(7, ceil((tXPDLL - tXP)/tCK))
LPDDR3: 1
16.7.2.32 EMC_RW2PDEN_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
RW2PDEN: [PMC] Specify the timing delay from a read/write command to powerdown entry.
Auto-precharge timing must be taken into account when programming this field
5:0 0x1f
DDR3: max(RL+5, WL+4+TWR) - 1
LPDDR3: max(RL+BL/2+ceil((tDQSCKmax+1)/tCK)+1, WL+BL/2+1+ceil((tWR+1)/tCCK)) - 1
16.7.2.33 EMC_TXSR_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
TXSR: [PMC] Cycles between self-refresh exit & first DRAM command that does not require
a locked DLL. Largest allowed value is 0x3fe.
9:0 0x3fe
DDR3: max(5, ceil(tXSR/tCK))
LPDDR3: max(2, ceil(tXSR/tCK))
16.7.2.34 EMC_TCKE_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.35 EMC_TFAW_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
TFAW: [PMC] specify the width of the FAW (four-activate window) for 8-bank devices. Set to
6:0 0x0 0 to disable this timing check. Only 4 activates may occur within the rolling window. .
DDR3/LPDDR3: ceil(tFAW/tCK)
16.7.2.36 EMC_TRPAB_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
TRPAB: [PMC] Specify precharge-all tRP allowance for 8-bank devices. Setting this field to 0
will cause EMC to use TRP.TRP for precharge-all.
5:0 0x0
DDR3: ceil(tRP/tCK) + 1
LPDDR3: max(3, ceil((tRPpb+3)/tCK
16.7.2.37 EMC_TCLKSTABLE_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
TCLKSTABLE: [PMC] Specify minimum number of cycles of a stable clock period prior to
exiting powerdown or self-refresh modes.
4:0 0xf
DDR3: max(5, ceil(tCKSRX/tCK)) - 1
LPDDR3: 2
16.7.2.38 EMC_TCLKSTOP_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
TCLKSTOP: [PMC] Delay from last command to stopping the external clock to DRAM
devices.
4:0 0xf
DDR3: max(5, ceil(tCKSRE/tCK)) - 1
LPDDR3: 2
16.7.2.39 EMC_TREFBW_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
TREFBW: [PMC] specify the width of the burst-refresh window. If set to a non-zero value,
only 8 refreshes will occur in this rolling window. Set to 0 to disable this timing check.
13:0 0x0
DDR3: ceil(tREFI/tCK)
LPDDR3: ceil(tREFBW/tCK)
16.7.2.40 EMC_ODT_WRITE_0
For DDR3, ODT may be enabled during writes and disabled during reads via control of ODT pin.
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
11:8 0x0 ODT_WR_DURATION: [PMC] for LPDDR3, indicate how long to assert ODT by.
5 0x0 SHARE_ONE_ODT: [PMC] For LPDDR3 only. When enabled, ODT[1] is not used. The ODT
for both ranks will be sharing the same ODT[0]. When disabled, ODT[0] is controlling rank0,
ODT[1] is controlling rank1.
DRIVE_BOTH_ODT: [PMC] If this field = 0, only the ODT for the requested device will be
4 0x0
asserted during write. If this field = 1, ODTs for both devices will be asserted during write.
16.7.2.41 EMC_ODT_READ_0
This register is not used. Please keep its reset value.
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
ODT_B4_READ: If this field == 1, ODT is turned off ODT_RD_DELAY cycles prior to DRAM
READ command.
30 0x0 If this field == 0, ODT is turned off ODT_RD_DELAY cycles after a DRAM READ command.
Set ODT_B4_READ to 1 if ( RL - ceiling(tAOFD) - 2 ) < 0.
This field is not used for DDR3.
16.7.2.42 EMC_WEXT_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
WEXT: [PMC] specifies the write to write delay for writes when multiple physical devices are
present.
3:0 0x0 DDR3: max(0, (USE_PER_DEVICE_DLY_TRIM_OB == 1 ? 5 : 0) - (CMD_2T_TIMING ==
1 ? 1 : 0))
LPDDR3: USE_PER_DEVICE_DLY_TRIM_OB == 1 ? 5 : 0
16.7.2.43 EMC_CTT_0
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
16.7.2.44 EMC_RFC_SLR_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
8:0 0x0 RFC_SLR: [PMC] Specifies the stagger refresh cycle time between ranks. This is the
minimum number of cycles between an auto refresh command to one rank and a subsequent
auto refresh to another rank. A zero value indicates stagger refresh is disabled.
16.7.2.45 EMC_MRS_WAIT_CNT2_0
This register allows the delay between an MRS/EMRS/MRW/MRR command and the following DRAM command
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
25:16 0x208 0x3ff MRS_EXT2_WAIT_CNT: [PMC] Number of EMC clocks to wait before issuing
16.7.2.46 EMC_MRS_WAIT_CNT_0
This register allows the delay between an MRS/EMRS/MRW/MRR command and the following DRAM command.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
16.7.2.47 EMC_MRS_0
BA0, BA1 are used to address MRS or EMRS registers in DRAM. Although this register can also program EMRS, use the
EMRS register so that the hardware registers can shadow what is in the DRAM.
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
MRS_DEV_SELECTN: [PMC] Active low chip-select, 0x0 applies command to both devices,
31:30 0x0
0x2 to for only dev0, 0x1 for only dev1.
USE_MRS_EXT_CNT: [PMC]
27 0x0 0 =USE_MRS_LONG_CNT will select between SHORT(0)/LONG(1),
1=USE_MRS_LONG_CNT will select between EXT1(0)/EXT2(1).
16.7.2.48 EMC_EMRS_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 803
Tegra K1 Technical Reference Manual
Memory Controller
USE_EMRS_EXT_CNT: [PMC]
27 0x0 0 = USE_MRS_LONG_CNT will select between SHORT(0)/LONG(1),
1 = USE_MRS_LONG_CNT will select between EXT1(0)/EXT2(1).
EMRS_BA: [PMC] Set to 0x1 for EMRS (and where applicable, 0x2 for EMRS2, and 0x3 for
21:20 0x0
EMRS3).
16.7.2.49 EMC_REF_0
Note: The REF register allows software to issue refresh commands. This is done to ensure
proper DRAM initialization.
Boot requirements:
This register triggers a refresh command. REF_CMD should be written with 0x1 during cold boot to trigger refresh
commands during DRAM initialization.
REF_DEV_SELECTN: active low chip-select, 0x0 applies command to both devices, 0x2 to
31:30 0x0
for only dev0, 0x1 for only dev1.
REF_NORMAL:
0 = execute first refresh immediately (this is use during DRAM initialization).
1 0x0
1 = execute refresh through normal refresh mechanism (this should be used in normal
operation).
0 0x0 REF_CMD: causes the hardware to perform a REFRESH to all DRAM banks.
16.7.2.50 EMC_PRE_0
Boot requirements:
This register triggers a precharge-all command. PRE_CMD should be written with 0x1 during cold boot to trigger
refresh commands during DRAM initialization.
If per-device DPD is used, the PRE_DEV_SELECTN field should be parameterized in the BCT and written by the
Boot ROM during cold boot.
PRE_DEV_SELECTN: active low chip-select, 0x0 applies command to both devices, 0x2 to
31:30 0x0
for only dev0, 0x1 for only dev1.
0 0x0 PRE_CMD: causes the hardware to perform a PRECHARGE to all DRAM banks.
16.7.2.51 EMC_NOP_0
Boot requirements:
This register triggers a no-operation command. NOP_CMD should be written with 0x1 during cold boot to trigger no-
op commands during DRAM initialization.
NOP_DEV_SELECTN: active low chip-select, 0x0 applies command to both devices, 0x2 to
31:30 0x0
for only dev0, 0x1 for only dev1.
0 0x0 NOP_CMD: causes the hardware to perform a NOP to all DRAM banks.
16.7.2.52 EMC_SELF_REF_0
Do not program this register when a clock change sequence is on-going. Check the CLKCHANGE_COMPLETE_INT value if
not sure.
SREF_DEV_SELECTN: active low chip-select, 0x0 applies command to both devices, 0x2 to
31:30 0x0
for only dev0, 0x1 for only dev1, 0x3 for neither device.
16.7.2.53 EMC_DPD_0
DPD_DEV_SELECTN: active low chip-select, 0x0 applies command to both devices, 0x2 to
31:30 0x0
for only dev0, 0x1 for only dev1.
DPD_CMD: causes the hardware to issue the deep power down command (Burst Terminate
with CKE low). While in DPD mode, the DRAM will not maintain data integrity. While
CMD:ENABLED, the CKE pin is held deasserted. The CMD:ENABLED state will override the
0 DISABLED
PIN:CKE setting. The DRAM will ignore all accesses until CMD:DISABLED.
0 = DISABLED
1 = ENABLED
16.7.2.54 EMC_MRW_0
Boot requirements:
This register triggers a mode register write command. Multiple mode-register writes may be required by the cold boot
sequence. Such commands should be parameterized in the BCT and written by the Boot ROM during cold boot.
26 SHORT USE_MRW_LONG_CNT: [PMC] Indicate to use long or short MRS wait count.
16.7.2.55 EMC_MRR_0
Sequence
1. Read MRR until EMC_STATUS.MRR_DIVLD=0 (ok to skip if it is sure there are no pending MRR reads)
2. Write this register with the desired addr (MA) and device (DEV_SELECTN), device needs to be either DEV0 or DEV1:
writing to both is illegal
Note: It is okay to issue new MRR requests while there are on-going requests. For example, to issue 3 MRR requests, follow
these steps: 1,2,2,2,3,4,3,4,3,4. Data read back in step 4 is in the same order requested in step 2.
To make sure the EMC is available for new MRR requests, poll for EMC_STATUS.MRR_FIFO_SPACE > 0 before step 2.
If using 2 x16 DRAM, MRR_DATA[15:8] can be used to store MRR from the second DRAM on the same CS (configured via
CFG_3.MRR_BYTESEL_X16)
MRR_DEV_SELECTN: active-low chip-select, choose which device to send the command to.
(enum for safety).
0 = ILLEGAL
31:30 RW 0x0
1 = DEV1
2 = DEV0
3 = RESERVED
USE_MRR_EXT_CNT:
27 RW 0x0 0 = USE_MRS_LONG_CNT will select between SHORT(0)/LONG(1),
1 = USE_MRS_LONG_CNT will select between EXT1(0)/EXT2(1).
16.7.2.56 EMC_CMDQ_0
Boot requirements:
This arbitration configuration register should be parameterized in the BCT and written by the OS during cold boot and
warm boot.
16.7.2.57 EMC_MC2EMCQ_0
This arbitration configuration register should be parameterized in the BCT and written by the OS during cold boot and
warm boot.
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.58 EMC_XM2DQSPADCTRL3_0
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.59 EMC_FBIO_SPARE_0
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
CFG_FBIO_SPARE_3 should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.60 EMC_FBIO_CFG5_0
Writes to these fields will not take effect until the active value is updated via TIMING_UPDATE or (if enabled)
CLKCHANGE_REQ.
Boot requirements:
This register (except for field DISABLE_CONCURRENT_AUTOPRE) should be parameterized in the BCT and written
by the Boot ROM during cold boot.
This register (except for field DISABLE_CONCURRENT_AUTOPRE) should be saved in the scratch registers and
restored by the Boot ROM during warm boot.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 808
Tegra K1 Technical Reference Manual
Memory Controller
MASK_PUTERM_N_DQS_PULLD_DURING_ZQCAL:
[PMC] When this bit is enabled; it deasserts DQ/DQS puterm
28 ENABLED NONE and DQS pulld during ZQ calibration in hardware.
0 = DISABLED
1 = ENABLED
16.7.2.61 EMC_FBIO_CFG6_0
DRAMC can position QUSE with m2clk granularity (2 bit times). QUSE_LATE provides finer granularity of 1/2 an M2CLK
cycle (1/2 bit time). The amount of delay added is primarily a function of the round trip wire delay to/from the DRAM. Other
portions of the delay (driver and receiver delay) are compensated for by delay through a non-bonded QUSE pad cell.
Additional delay can be added to QUSE vi XFORM_QUSEx_MULT and XFORM_QUSEx_OFFS (applied to DLL offset).
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.62 EMC_CFG_RSV_0
16.7.2.63 EMC_ACPD_CONTROL_0
15:0 0x0 ACPD_THRESHOLD: [PMC] number of idle cycles to wait before allowing power-down entry
16.7.2.64 EMC_EMRS2_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
31:30 0x0 EMRS2_DEV_SELECTN: [PMC] active low chip-select, 0x0 applies command to both devices, 0x2 to
for only dev0, 0x1 for only dev1.
26 SHORT USE_EMRS2_LONG_CNT: [PMC] Indicate to use long or short MRS wait count.
0 = SHORT
1 = LONG
21:20 0x0 EMRS2_BA: [PMC] Set to 0x1 for EMRS (and where applicable, 0x2 for EMRS2, and 0x3 for
EMRS3).
16.7.2.65 EMC_EMRS3_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
31:30 0x0 EMRS3_DEV_SELECTN: [PMC] active low chip-select, 0x0 applies command to both devices, 0x2 to
for only dev0, 0x1 for only dev1.
26 SHORT USE_EMRS3_LONG_CNT: [PMC] Indicate to use long or short MRS wait count.
0 = SHORT
1 = LONG
21:20 0x0 EMRS3_BA: [PMC] Set to 0x1 for EMRS (and where applicable, 0x2 for EMRS2, and 0x3 for
EMRS3).
16.7.2.66 EMC_MRW2_0
Boot requirements:
This register triggers a mode register write command. Multiple mode-register writes may be required by the cold boot
sequence. Such commands should be parameterized in the BCT and written by the Boot ROM during cold boot.
31:30 0x0 MRW2_DEV_SELECTN: [PMC] active-low chip-select, 0x0 applies command to both devices, 0x2 to
for only dev0, 0x1 for dev1.
26 SHORT USE_MRW2_LONG_CNT: [PMC] Indicate to use long or short MRS wait count.
0 = SHORT
1 = LONG
16.7.2.67 EMC_MRW3_0
Boot requirements:
This register triggers a mode register write command. Multiple mode-register writes may be required by the cold boot
sequence. Such commands should be parameterized in the BCT and written by the Boot ROM during cold boot.
31:30 0x0 MRW3_DEV_SELECTN: [PMC] active-low chip-select, 0x0 applies command to both devices, 0x2 to
for only dev0, 0x1 for dev1.
26 SHORT USE_MRW3_LONG_CNT: [PMC] Indicate to use long or short MRS wait count.
0 = SHORT
1 = LONG
16.7.2.68 EMC_MRW4_0
Boot requirements:
This register triggers a mode register write command. Multiple mode-register writes may be required by the cold boot
sequence. Such commands should be parameterized in the BCT and written by the Boot ROM during cold boot.
31:30 0x0 MRW4_DEV_SELECTN: [PMC] active-low chip-select, 0x0 applies command to both devices, 0x2 to
for only dev0, 0x1 for dev1.
26 SHORT USE_MRW4_LONG_CNT: [PMC] Indicate to use long or short MRS wait count.
0 = SHORT
16.7.2.69 EMC_CLKEN_OVERRIDE_0
31 DISABLED OBS_BUS_CLKEN:
0 = DISABLED
1 = ENABLED
6 CLK_GATED STATS_CLKEN_OVR:
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
1 = ENABLE
0 = DISABLED
1 = ENABLED
3 CLK_GATED RR_CLKEN_OVR:
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
1 = ENABLE
0 = DISABLED
1 = ENABLED
2 CLK_GATED DRAMC_CLKEN_OVR:
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
1 = ENABLE
0 = DISABLED
1 = ENABLED
1 CLK_GATED CMDQ_CLKEN_OVR:
0 = CLK_GATED
1 = CLK_ALWAYS_ON
0 = DISABLE
1 = ENABLE
0 = DISABLED
1 = ENABLED
16.7.2.70 EMC_R2R_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.71 EMC_W2W_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.72 EMC_EINPUT_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
5:0 0x0 EINPUT: [PMC] specifies when to assert EINPUT for a read, should normally be the same as QUSE.
16.7.2.73 EMC_EINPUT_DURATION_0
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
4:0 0x4 EINPUT_DURATION: [PMC] Specifies how long the EINPUT should be asserted.
16.7.2.74 EMC_PUTERM_EXTRA_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
21:16 0x1 PUTERM: [PMC] tells the chip when to assert dynamic PUTERM for read return data.
16.7.2.75 EMC_TCKESR_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
5:0 0x3e TCKESR: [PMC] Specify minimum low CKE pulse width for self-refresh mode.
16.7.2.76 EMC_TPD_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
5:0 0x3e TPD: [PMC] specify minimum low CKE pulse width for power-down mode.
16.7.2.77 EMC_AUTO_CAL_CONFIG_0
AUTO_CAL_START: [PMC] Writing a one to this bit starts the calibration state machine.
31 RO 0x0
This bit must be set even if the override is set in order to latch in the override value.
AUTO_CAL_E_CAL_UPDATE: [PMC] wait time in EMC clocks between clk cal code
25:20 RW 0xf change, and E_CAL_UPDATE assertion is AUTO_CAL_E_CAL_UPDATE - 4. Maximum
value is 31.
12:8 RW 0x0 AUTO_CAL_PD_OFFSET: [PMC] 2's complement offset for the pull-down value
4:0 RW 0x0 AUTO_CAL_PU_OFFSET: [PMC] 2's complement offset for the DQ/DQS pull-up value
16.7.2.78 EMC_AUTO_CAL_INTERVAL_0
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.79 EMC_AUTO_CAL_STATUS_0
AUTO_CAL_ACTIVE: One when auto calibrate is active - valid only after auto calibrate
31 X
sequence has completed (EMC_CAL_ACTIVE == 0)
16.7.2.80 EMC_REQ_CTRL_0
Request Status/Control
When either STALL_ALL_READS and/or STALL_ALL_WRITES is asserted, the stalling of read and/or write requests will not
take effect until the status bit from EMC_STATUS register's NO_OUTSTANDING_TRANSACTIONS field is asserted.
16.7.2.81 EMC_EMC_STATUS_0
Example: DRAM_IN_SELF_REFRESH = 0x3, both devices are in self-refresh, DRAM_IN_DPD= 0x2 would indicate only dev1
is in deep-power-down mode.
Note: If EMC is reset or powered down, the actual DRAM state could be different than indicated by these status
bits. These bits do not reflect manually entered/exited powerdown or self-refresh (via use of PIN_CKE).
13:12 X DRAM_IN_DPD: dev[n] has been put into deep powerdown state
DRAM_IN_SELF_REFRESH: dev[n] has been put into self-refresh (will remain until SR exit
9:8 X
cmd).
DRAM_IN_POWERDOWN: dev[n] has entered powerdown state (incoming req's will awaken
5:4 X
if not stalled)
16.7.2.82 EMC_CFG_2_0
EMC Configuration
Clock change sequencing: Once the divider is reprogrammed, CAR signals to EMC that a clock change is pending. If
enabled, EMC stalls incoming requests, drains outstanding requests, and, if CLKCHANGE_(PD|SR)_ENABLE is enabled, puts
DRAM into power-down (or self-refresh) before signalling to CAR that it is idle and ready for the change to happen. CAR will
then change the divider/pll reprogramming. Once complete, EMC updates its shadow registers (assuming they may have
been reprogrammed for new clock setting), unstalls requests, and resumes operation with new clock settings.
Some fields of this register are shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
5:3 0x2 ZQ_EXTRA_DELAY: [PMC] Additional delay to push out ZQCMD based on tODToff
(maximum) & frequency.
16.7.2.83 EMC_CFG_DIG_DLL_0
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register (except for field CFG_DLL_ALARM_DISABLE and DLL_RESET (trigger) and
CFG_DLL_USE_OVERRIDE_UNTIL_LOCK(trigger)) should be parameterized in the BCT and written by the Boot
ROM during cold boot.
This register (except for field CFG_DLL_ALARM_DISABLE and DLL_RESET (trigger) and
CFG_DLL_USE_OVERRIDE_UNTIL_LOCK(trigger)) should be saved in the scratch registers and restored by the
Boot ROM during warm boot.
DLL_RESET: [PMC] Writing 1 to this register will send reset pulse to DLL's on next
30 RO 0x0 shadow update. Must reset DLLs when changing clock frequency by factor >= 2. Reset
occurs at next shadow update.
11:8 RW 0x0 CFG_DLL_UDSET: [PMC] DLL Loop filter control (2^(udset+3)). Shadowed.
16.7.2.84 EMC_CFG_DIG_DLL_PERIOD_0
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.85 EMC_DIG_DLL_STATUS_0
15 X DLL_LOCK
14 X DLL_ALARM
13 X DLL_LOCK_TIMEOUT
9:0 X DLL_OUT
16.7.2.86 EMC_RDV_MASK_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.87 EMC_WDV_MASK_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.88 EMC_CTT_DURATION_0
This register is shadowed: see usage note at the top of Section 16.7.2
CTT_DURATION: [PMC] Determines how long CTT remains enabled during reads. CTT
determines when it will be enabled.
3:0 0x3
DDR3: CTT_TERMINATION == 1 ? 4 : 0
LPDDR3: 0
16.7.2.89 EMC_CTT_TERM_CTRL_0
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register (except for fields TERM_DRVDN and TERM_DRVUP) should be parameterized in the BCT and written
by the Boot ROM during cold boot.
This register (except for fields TERM_DRVDN and TERM_DRVUP) should be saved in the scratch registers and
restored by the Boot ROM during warm boot.
TERM_OVERRIDE: [PMC]
31 RW DISABLED 0 = DISABLED
1 = ENABLED
28:24 RO X TERM_DRVUP
19:15 RO X TERM_DRVDN
Allows a ZQ calibration command to be sent periodically to DRAM. After ZCAL_INTERVAL, ZCAL_MRW_CMD will be sent to
each DRAM, 1 at a time, followed by ZCAL_WAIT_CNT interval in which no other commands will be allowed to be sent to
either DRAM. So if ZQ_MRW_DEV_SELECTN == 2'b00, it would send the MRW command to dev0, wait ZCAL_WAIT_CNT,
send the command to dev1, wait ZCAL_WAIT_CNT, resume normal operation. It will then wait ZCAL_INTERVAL
microseconds before repeating the procedure. The ZQ calibration command will not be sent to devices that are 1)
unpopulated and 2) either in or about to enter self-refresh or DPD.
Note that ZCAL_WAIT_CNT will be used instead of MRS_WAIT_CNT for delaying the subsequent DRAM commands after the
ZQ calibration commands, even though in LPDDR3 a ZQ calibration command is also an MRW command.
2. One-shot mode
To send a one-shot command, keep ZCAL_INTERVAL and ZCAL_WAIT_CNT equal to zero, program ZCAL_MRW_CMD with
only one device selected, then program TIMING_CONTROL to latch in those registers, and finally program
ZCAL_ONE_SHOT to 1 to trigger the one-shot command. If more than one device needs to be calibrated, wait the ZQ
calibration time and repeat the steps above with the other device selection bit enabled in ZCAL_MRW_CMD.
16.7.2.90 EMC_ZCAL_INTERVAL_0
Configure ZQ Calibration
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.91 EMC_ZCAL_WAIT_CNT_0
Configure ZQ Calibration
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
ZCAL_WAIT_CNT: [PMC] Number of EMC clocks to wait before issuing any commands after
9:0 0x0
sending ZCAL_MRW_CMD.
16.7.2.92 EMC_ZCAL_MRW_CMD_0
Configure ZQ Calibration
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
31:30 0x3 ZQ_MRW_DEV_SELECTN: [PMC] Active-low chip-select, 0x0 applies command to both
16.7.2.93 EMC_ZQ_CAL_0
ZQ_CAL_DEV_SELECTN: Active low chip-select, 0x0 applies command to both devices, 0x2
31:30 0x0 to for only dev0, 0x1 for only dev1, 0x3 for neither device (0x0, for both devices, is not allowed
if the ZQ resister is shared between devices).
16.7.2.94 EMC_XM2CMDPADCTRL_0
Pad configuration registers from APB_MISC:
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
EMC2TMC_CFG_XM2CMD_CLK_SEL: [PMC] pad clk_sel (ma bits get this value inverted in
6 0x0
LPDDR3 mode)
16.7.2.95 EMC_XM2CMDPADCTRL2_0
Offset: 0x2f4 | Read/Write: R/W | Reset: 0x050c0000 (0b000001010000110000xxxxxxxxxxxxxx) | Default: 0x858c0000
16.7.2.96 EMC_XM2DQSPADCTRL_0
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.97 EMC_XM2DQSPADCTRL2_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 826
Tegra K1 Technical Reference Manual
Memory Controller
EMC2TMC_CFG_XM2DQS_E_VREF_DQ: [PMC]
5 0x0 0 = DISABLE
1 = ENABLE
EMC2TMC_CFG_XM2DQS_E_CTT_HIZ_DQS: [PMC]
4 ENABLE 0 = DISABLE
1 = ENABLE
EMC2TMC_CFG_XM2DQS_E_CTT_HIZ_DQ: [PMC]
3 ENABLE 0 = DISABLE
1 = ENABLE
EMC2TMC_CFG_XM2DQS_E_RX_FT_REC: [PMC]
0 0x0 0 = DISABLE
1 = ENABLE
16.7.2.98 EMC_XM2DQPADCTRL_0
16.7.2.99 EMC_XM2DQPADCTRL2_0
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.100 EMC_XM2CLKPADCTRL_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.101 EMC_XM2COMPPADCTRL_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
EMC2TMC_CFG_XM2COMP_E_TESTOUT: [PMC]
11 DISABLE 0 = DISABLE
1 = ENABLE
16.7.2.102 EMC_XM2VTTGENPADCTRL_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.103 EMC_XM2VTTGENPADCTRL2_0
E_WEAK_BIAS: enables low current bias mode on VTTGEN cell
E_NO_VTTGEN: disables VTTGEN altogether. One VTTGEN pad in each MEM section is always enabled (DDR3-
only)
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.104 EMC_XM2VTTGENPADCTRL3_0
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.105 EMC_EMCPADEN_0
16.7.2.106 EMC_XM2DQSPADCTRL4_0
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.107 EMC_SCRATCH0_0
This is a scratch register for general use.
16.7.2.108 EMC_DLL_XFORM_DQS0_0
That means clamping works within 50% above the maximum (0x3ff) DLL output or 50% below the minimum (0) DLL output.
To make sure that is always satisfied, conservatively program OFFS so that 0x600 < OFFS < (0x5ff – ((MULT * 0x3ff) >> 4)).
The DLL output is effectively overridden by setting XFORM_*_MULT to 0 and programming XFORM_*_OFFS[8:1] to override
value.
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
The DQS_CURRENT_TRIM_VAL_BYTE_x registers provide a way to observe the values being used by the trimmers
16.7.2.109 EMC_DLL_XFORM_DQS1_0
16.7.2.110 EMC_DLL_XFORM_DQS2_0
16.7.2.111 EMC_DLL_XFORM_DQS3_0
16.7.2.112 EMC_DLL_XFORM_DQS4_0
16.7.2.113 EMC_DLL_XFORM_DQS5_0
16.7.2.114 EMC_DLL_XFORM_DQS6_0
16.7.2.115 EMC_DLL_XFORM_DQS7_0
16.7.2.116 EMC_DLL_XFORM_QUSE0_0
OFFS is 2's complement format, with bit [0] representing integer. The output of the XFORM is xform_out = (xform_in * MULT
+ OFFS*16)/ 16
That means clamping works within 50% above the maximum (0x3ff) DLL output or 50% below the minimum (0) DLL output. To
make sure that is always satisfied, conservatively program OFFS so that 0x600 < OFFS < (0x5ff – ((MULT * 0x3ff) >> 4)). The
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 834
Tegra K1 Technical Reference Manual
Memory Controller
DLL output is effectively overridden by setting XFORM_*_MULT to 0 and programming XFORM_*_OFFS[8:1] to override
value.
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.117 EMC_DLL_XFORM_QUSE1_0
16.7.2.118 EMC_DLL_XFORM_QUSE2_0
16.7.2.119 EMC_DLL_XFORM_QUSE3_0
16.7.2.120 EMC_DLL_XFORM_QUSE4_0
16.7.2.121 EMC_DLL_XFORM_QUSE5_0
16.7.2.122 EMC_DLL_XFORM_QUSE6_0
16.7.2.123 EMC_DLL_XFORM_QUSE7_0
16.7.2.124 EMC_DLL_XFORM_DQ0_0
register. The default is multiply by 1, providing 1/4 cycle skew to DQS to keep DLL's 1/4 cycle delay. Integer + fractional
formats for multiplier & offset:
OFFS is 2's complement format, with bit [0] representing integer. The output of the XFORM is xform_out = (xform_in * MULT
+ OFFS*16)/ 16
That means clamping works within 50% above the maximum (0x3ff) DLL output or 50% below the minimum (0) DLL output. To
make sure that is always satisfied, conservatively program OFFS so that 0x600 < OFFS < (0x5ff – ((MULT * 0x3ff) >> 4)).
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.125 EMC_DLL_XFORM_DQ1_0
16.7.2.126 EMC_DLL_XFORM_DQ2_0
16.7.2.127 EMC_DLL_XFORM_DQ3_0
16.7.2.128 EMC_DLI_RX_TRIM0_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_0
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_0
16.7.2.129 EMC_DLI_RX_TRIM1_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_1
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_1
16.7.2.130 EMC_DLI_RX_TRIM2_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_2
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_2
16.7.2.131 EMC_DLI_RX_TRIM3_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_3
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_3
16.7.2.132 EMC_DLI_RX_TRIM4_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_4
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_4
16.7.2.133 EMC_DLI_RX_TRIM5_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_5
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_5
16.7.2.134 EMC_DLI_RX_TRIM6_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_6
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_6
16.7.2.135 EMC_DLI_RX_TRIM7_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_7
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_7
16.7.2.136 EMC_DLI_TX_TRIM0_0
9:0 X TXDQ_CURRENT_TRIM_VAL_BYTE_0
16.7.2.137 EMC_DLI_TX_TRIM1_0
9:0 X TXDQ_CURRENT_TRIM_VAL_BYTE_1
16.7.2.138 EMC_DLI_TX_TRIM2_0
9:0 X TXDQ_CURRENT_TRIM_VAL_BYTE_2
16.7.2.139 EMC_DLI_TX_TRIM3_0
9:0 X TXDQ_CURRENT_TRIM_VAL_BYTE_3
16.7.2.140 EMC_DLI_TRIM_TXDQS0_0
Controls trimmer used to skew data byte DQS/DQ output relative to MCK. 0-7 apply to rank 0, 8-15 apply to rank 1 (if dual-
rank enabled)
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.141 EMC_DLI_TRIM_TXDQS1_0
16.7.2.142 EMC_DLI_TRIM_TXDQS2_0
16.7.2.143 EMC_DLI_TRIM_TXDQS3_0
16.7.2.144 EMC_DLI_TRIM_TXDQS4_0
16.7.2.145 EMC_DLI_TRIM_TXDQS5_0
16.7.2.146 EMC_DLI_TRIM_TXDQS6_0
16.7.2.147 EMC_DLI_TRIM_TXDQS7_0
16.7.2.148 EMC_STALL_THEN_EXE_BEFORE_CLKCHANGE_0
Scheme to change controller timing parameters + SDRAM mode timing atomically.
b. Write to whatever EMC registers you want to be execute after clock change request has been detected but
before the actual clock change happens. For example, if you want to disable DLL in DDR3 mode, you can,
i. Issue a write to SDRAM's MR1 register via EMC MRS register to disable DLL.
ii. Issue a Self-refresh entry via EMC SELF_REF register.
Note: If there is no need to execute any register access before clock change, simply skip step
(b); step (a) is still required.
c. Write 1 to STALL_THEN_EXE_AFTER_CLKCHANGE field which will prevent further config execution until
after the actual clock change has happened.
d. Write to whatever EMC registers you want to be executed after the clock change. Using the same example
as (b), you will,
i. Issue a Self-refresh exit via EMC SELF_REF register.
ii. Issue writes to SDRAM's MRx register(s) to change read/write latencies and/or enable DLL
iii. Issue burst refreshes via EMC REF register.
Note: If there is no need to execute any register access after clock change, simply skip step (d);
step (c) is still required.
3. Program the CAR to change either clock source and/or clock divider.
Note: In both sequences above, DYN_SELF_REF must be disabled off before the first step, then
it can be restored after the last step.
The interval between two clock change sequences are recommended to be at least 20 µs
apart
Writes to this register will stall the register read/write path until a clock change request is detected. Once detected, whatever
register access follows this register write will be executed until a STALL_THEN_EXE_AFTER_CKLCHANGE is encountered.
At that point, EMC timing registers will be updated and the clock change request will be acknowledged.
16.7.2.149 EMC_STALL_THEN_EXE_AFTER_CLKCHANGE_0
Writes to this register will stall the register read/write path until after EMC timing registers are updated and that clock change
has been completed. Once that happens, whatever register access follows this register write will be executed until
UNSTALL_RW_AFTER_CLKCHANGE is encountered. At that point, normal memory read/write will be allowed to resume.
16.7.2.150 EMC_UNSTALL_RW_AFTER_CLKCHANGE_0
Writing to this register will unstall memory reads/writes after a clock change. Use in conjunction with
STALL_THEN_EXE_AFTER_CLKCHANGE.
UNSTALL_RW_AFTER_CLKCHANGE: Writing a one to this bit will unstall memory reads/writes after a
0 0x0
clock change.
16.7.2.151 EMC_AUTO_CAL_CLK_STATUS_0
16.7.2.152 EMC_SEL_DPD_CTRL_0
18:16 0x4 SEL_DPD_DLY: [PMC] number of cycles to wait before asserting SEL_DPD
16.7.2.153 EMC_PRE_REFRESH_REQ_CNT_0
This register is shadowed: see usage note at the top of Section 16.7.2
PRE_REF_REQ_CNT: [PMC] When the refresh counter reach this pre-refresh request count
just before a burst refresh will be issued when it reach the {REFRESH,REFRESH_LO}, a pre-
15:0 0x0
refresh request will be asserted to MC to close the banks/pages and flush its pipeline. A 0
value will disable this feature.
16.7.2.154 EMC_DYN_SELF_REF_CONTROL_0
It is recommended to change the values of ODT_WRITE and DSR_PER_DEVICE with a clock change
To do it outside of a clock change sequence, one has to be aware that DSR enable/disable takes time to take effect. This is
the sequence for disabling DSR_PER_DEVICE and enabling ODT outside of clock change:
3. Read back and discard any EMC register such as INTSTATUS (ensure 1 and 2 have gone through)
This register is shadowed: see usage note at the top of Section 16.7.2
DSR_THRESHOLD: [PMC] number of idle cycles to wait before allowing dynamic self-refresh
15:0 0x0
entry
16.7.2.155 EMC_TXSRDLL_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
Note: If operating in non-DLL mode, this register needs to be updated with the non-DLL timing requirement.
TXSRDLL: [PMC] Cycles between self-refresh exit and first DRAM command requiring a
locked DLL. For DDR3 only: READ (and RAP) and synchronous ODT commands.
11:0 0x7ff DDR3: 512.
LPDDR3: TXSR (not used).
Largest allowed value is 0xffe
16.7.2.156 EMC_CCFIFO_ADDR_0
CCFIFO_ADDR: This register contains the address offset of the EMC register that is intended to be executed during the clock
change sequence.
Note: Before triggering a clock change sequence from the CAR, you must configure the pre-
/post- clock change sequence by writing, multiple times, to the
CCFIFO_DATA/CCFIFO_ADDR register pair. After the CCFIFO_ADDR register is written,
Hardware will write the register offset and corresponding data into the 32-deep clock
change FIFO (CCFIFO).
16.7.2.157 EMC_CCFIFO_DATA_0
CCFIFO_DATA: This register contains the 32-bit data of the EMC register that is intended to be written to or pointed at by
CCFIFO_ADDR.
16.7.2.158 EMC_CCFIFO_STATUS_0
Offset: 0x3f0 | Read/Write: RO | Reset: 0x000000XX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
5:0 X CCFIFO_COUNT
16.7.2.159 EMC_CDB_CNTL_1_0
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.160 EMC_CDB_CNTL_2_0
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.161 EMC_XM2CLKPADCTRL2_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
EMC2PMACRO_CFG_PI_CLKB_TRIM: [PMC] pi_clk_trim to control the 32-tap trimmer on the ckb pad
28:24 0x0
macro (pi clock domain)
16.7.2.162 EMC_SWIZZLE_RANK0_BYTE_CFG_0
For byte swizzling, each SWZ_RANK*_BYTE*_SEL field indicates which SDRAM byte is mapped/connected to the
corresponding byte of the chip.
The SWZ_RANK*_BYTE*_BIT*_SEL fields indicate which SDRAM data bit (0-7) within each byte is mapped/connected to the
corresponding bit of the chip.
The Tegra K1 device has 8 bytes per partition without a per rank differentiation for swizzling. The RANK1 register set controls
swizzling for the upper 4 byte of data.
16.7.2.163 EMC_SWIZZLE_RANK0_BYTE0_0
Offset: 0x404 | Read/Write: R/W | Reset: 0x76543210 (0bx111x110x101x100x011x010x001x000)
16.7.2.164 EMC_SWIZZLE_RANK0_BYTE1_0
Offset: 0x408 | Read/Write: R/W | Reset: 0x76543210 (0bx111x110x101x100x011x010x001x000)
16.7.2.165 EMC_SWIZZLE_RANK0_BYTE2_0
Offset: 0x40c | Read/Write: R/W | Reset: 0x76543210 (0bx111x110x101x100x011x010x001x000)
16.7.2.166 EMC_SWIZZLE_RANK0_BYTE3_0
Offset: 0x410 | Read/Write: R/W | Reset: 0x76543210 (0bx111x110x101x100x011x010x001x000)
16.7.2.167 EMC_SWIZZLE_RANK1_BYTE_CFG_0
Offset: 0x414 | Read/Write: R/W | Reset: 0x00003210 (0bxxxxxxxxxxxxxxxxxx11xx10xx01xx00)
16.7.2.168 EMC_SWIZZLE_RANK1_BYTE0_0
Offset: 0x418 | Read/Write: R/W | Reset: 0x76543210 (0bx111x110x101x100x011x010x001x000)
16.7.2.169 EMC_SWIZZLE_RANK1_BYTE1_0
Offset: 0x41c | Read/Write: R/W | Reset: 0x76543210 (0bx111x110x101x100x011x010x001x000)
16.7.2.170 EMC_SWIZZLE_RANK1_BYTE2_0
Offset: 0x420 | Read/Write: R/W | Reset: 0x76543210 (0bx111x110x101x100x011x010x001x000)
16.7.2.171 EMC_SWIZZLE_RANK1_BYTE3_0
Offset: 0x424 | Read/Write: R/W | Reset: 0x76543210 (0bx111x110x101x100x011x010x001x000)
16.7.2.172 EMC_CA_TRAINING_START_0
(1c) Follow the procedure on optimal trim setting into the CA bus clock trimmer below.
(2) Configure the CA training engine through the CA_TRAINING_[TIMING_CNTL1,TIMING_CNTL2, CA_LEAD_IN, CA,
and CA_LEAD_OUT] registers.
(3) Software configures the CA training engine to use MR41 mode (through the CA_TRAINING_CFG register).
(4) Software starts the CA training engine (in the CA_TRAINING_START register) and waits for the CA training to finish
(CA_TRAINING_BUSY).
(6) Software repeats steps 3-5 but configures for MR48 mode.
(7) Software combines the results from MR41/MR48 modes to come up with a single trim setting and programs the
EMC2PMACRO_CFG_XM2CMD_DIGTRIM field.
(10) Software combines the results from MR41/MR48 modes (if desired, results for rank1 as well) to come up with a
single trim setting and programs the EMC2PMACRO_CFG_XM2CMD_DIGTRIM field
(C) Program bits [7:2] in the XFORM_ADDR[0,2]_OFFS field (11 bits) with the optimal trim result. The other
XFORM_ADDR[0,2]_OFFS bits should remain at 0.
(D) Write a 1 into the TIMING_UPDATE field to load the above fields from shadow to active.
CA_DQ_RDV = CACD
16.7.2.173 EMC_CA_TRAINING_BUSY_0
Offset: 0x42c | Read/Write: RO | Reset: 0x0000000X (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
16.7.2.174 EMC_CA_TRAINING_CFG_0
Offset: 0x430 | Read/Write: R/W | Reset: 0x0000001f (0bx000xx0000000000x0000000x0011111)
16.7.2.175 EMC_CA_TRAINING_TIMING_CNTL1_0
Offset: 0x434 | Read/Write: R/W | Reset: 0x1f7df7df (0bxxx11111x11111x11111x11111x11111)
16.7.2.176 EMC_CA_TRAINING_TIMING_CNTL2_0
Offset: 0x438 | Read/Write: R/W | Reset: 0x0000001f (0bxxxxxxxxxxxxxxxxxxxxxxxxxx011111)
5:0 0x1f CA_DQ_RDV: number of clocks to delay after CS is asserted before comparing CA/DQ. Minimum is 5.
40 = MAX
16.7.2.177 EMC_CA_TRAINING_CA_LEAD_IN_0
Offset: 0x43c | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxx0000000000xxxxxx0000000000)
25:16 0x0 CA_LEAD_IN_RISE: CA rise value for the clock before CS is active.
9:0 0x0 CA_LEAD_IN_FALL: CA fall value for the clock before CS is active.
16.7.2.178 EMC_CA_TRAINING_CA_0
Offset: 0x440 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxx0000000000xxxxxx0000000000)
16.7.2.179 EMC_CA_TRAINING_CA_LEAD_OUT_0
Offset: 0x444 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxx0000000000xxxxxx0000000000)
25:16 0x0 CA_LEAD_OUT_RISE: CA rise value for the clock after CS is active.
9:0 0x0 CA_LEAD_OUT_FALL: CA fall value for the clock after CS is active.
16.7.2.180 EMC_CA_TRAINING_RESULT1_0
Offset: 0x448 | Read/Write: RO | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X CA_TRIM_RESULT_31_0: Indicates which trim setting(s) pass the CA-to-DQ comparison.
16.7.2.181 EMC_CA_TRAINING_RESULT2_0
Offset: 0x44c | Read/Write: RO | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X CA_TRIM_RESULT_63_32: Indicates which trim setting(s) pass the CA-to-DQ comparison.
16.7.2.182 EMC_CA_TRAINING_RESULT3_0
Offset: 0x450 | Read/Write: RO | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X CA_TRIM_RESULT_95_64: Indicates which trim setting(s) pass the CA-to-DQ comparison.
16.7.2.183 EMC_CA_TRAINING_RESULT4_0
Offset: 0x454 | Read/Write: RO | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X CA_TRIM_RESULT_127_96: Indicates which trim setting(s) pass the CA-to-DQ comparison.
16.7.2.184 EMC_AUTO_CAL_CONFIG2_0
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.185 EMC_AUTO_CAL_CONFIG3_0
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
12:8 0x0 AUTO_CAL_CLK_PD_OFFSET: [PMC] 2's complement offset for CLK pull-down value
4:0 0x0 AUTO_CAL_CLK_PU_OFFSET: [PMC] 2's complement offset for CLK pull-up value
16.7.2.186 EMC_AUTO_CAL_STATUS2_0
16.7.2.187 EMC_IBDLY_0
4:0 0x1 IBDLY: [PMC] tells the chip when to change IBDLY for DQ/DQS.
16.7.2.188 EMC_DLL_XFORM_ADDR0_0
That means clamping works within 50% above the maximum (0x3ff) DLL output or 50% below the minimum (0) DLL output.
To make sure that is always satisfied, conservatively program OFFS so that 0x600 < OFFS < (0x5ff - ((MULT * 0x3ff) >> 4))
The DLL output is effectively overridden by setting XFORM_*_MULT to 0 and programming XFORM_*_OFFS[8:1] to override
the value
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
The ADDR(0|1|2)_CURRENT_TRIM_VAL registers provide a way to observe the values being used by the trimmers.
XFORM_ADDR5 controls channel 1 sdr pins: cke_b0, cke_b1, odt_b0, odt_b1, cs_b0_, cs_b1_
XFORM_ADDR4 controls channel 1 ddr/2T pins: ba0, ba1, ba2, a10, a12, a13, a15, a_b3, a_b4
XFORM_ADDR3 controls channel 1 ddr/2T pins: a_b5, a11, a14
XFORM_ADDR2 controls channel 0 sdr pins: cs1_ cs0_, odt1, odt0, cke0, cke1
XFORM_ADDR1 controls channel 0 ddr/2T pins: ras_,cas_,we_,rst,a2,a3, a4, a6, a8
XFORM_ADDR0 controls channel 0 ddr/2T pins: a0, a1, a5, a7, a9
16.7.2.189 EMC_DLL_XFORM_ADDR1_0
16.7.2.190 EMC_DLL_XFORM_ADDR2_0
16.7.2.191 EMC_DLI_ADDR_TRIM_0
29:20 X ADDR2_CURRENT_TRIM_VAL
19:10 X ADDR1_CURRENT_TRIM_VAL
9:0 X ADDR0_CURRENT_TRIM_VAL
16.7.2.192 EMC_DSR_VTTGEN_DRV_0
This register is shadowed: see usage note at the top of Section 16.7.2
26:24 0x7 DSR_VTTGEN_DRVUP: [PMC] Indicates the VTTGEN VCLAMP regulator impedance to use during
DSR.
18:16 0x7 DSR_VTTGEN_DRVDN: [PMC] Indicates the VTTGEN VAUXP regulator impedance to use during
DSR.
5:0 0x3f DSR_VTTGEN_E_NO_VTTGEN: [PMC] Disables optional VTTGEN pads (1 bit per pad) [0]--ADDR0,
[1]--ADDR1, [2]--ADDR2, [3]--DATA1, [4]--DATA2, [5]--DATA3
16.7.2.193 EMC_TXDSRVTTGEN_0
11:0 0x0 TXDSRVTTGEN: [PMC] Cycles to wait from DSR exit (VTTGEN drive normal), to when a DRAM
transaction is allow to start.
16.7.2.194 EMC_XM2CMDPADCTRL4_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.195 EMC_XM2CMDPADCTRL5_0
This register is shadowed: see usage note at the top of Section 16.7.2
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
16.7.2.196 EMC_CFG_3_0
EMC Configuration
Boot requirements:
This register (except for fields DRAMC_PRE_B4_ACT, MRR_BYTESEL_X16, MRR_BYTESEL) should be saved in
the scratch registers and restored by the Boot ROM during warm boot.
If the OS needs the MRR_BYTESEL* fields set to non-default values to perform a mode-register read, it needs to
correctly program these values before performing the MRR.
16.7.2.197 EMC_DLL_XFORM_DQS8_0
16.7.2.198 EMC_DLL_XFORM_DQS9_0
16.7.2.199 EMC_DLL_XFORM_DQS10_0
16.7.2.200 EMC_DLL_XFORM_DQS11_0
16.7.2.201 EMC_DLL_XFORM_DQS12_0
16.7.2.202 EMC_DLL_XFORM_DQS13_0
16.7.2.203 EMC_DLL_XFORM_DQS14_0
16.7.2.204 EMC_DLL_XFORM_DQS15_0
16.7.2.205 EMC_DLL_XFORM_QUSE8_0
16.7.2.206 EMC_DLL_XFORM_QUSE9_0
16.7.2.207 EMC_DLL_XFORM_QUSE10_0
16.7.2.208 EMC_DLL_XFORM_QUSE11_0
16.7.2.209 EMC_DLL_XFORM_QUSE12_0
16.7.2.210 EMC_DLL_XFORM_QUSE13_0
16.7.2.211 EMC_DLL_XFORM_QUSE14_0
16.7.2.212 EMC_DLL_XFORM_QUSE15_0
16.7.2.213 EMC_DLL_XFORM_DQ4_0
16.7.2.214 EMC_DLL_XFORM_DQ5_0
16.7.2.215 EMC_DLL_XFORM_DQ6_0
16.7.2.216 EMC_DLL_XFORM_DQ7_0
16.7.2.217 EMC_DLI_RX_TRIM8_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_8
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_8
16.7.2.218 EMC_DLI_RX_TRIM9_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_9
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_9
16.7.2.219 EMC_DLI_RX_TRIM10_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_10
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_10
16.7.2.220 EMC_DLI_RX_TRIM11_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_11
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_11
16.7.2.221 EMC_DLI_RX_TRIM12_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_12
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_12
16.7.2.222 EMC_DLI_RX_TRIM13_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_13
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_13
16.7.2.223 EMC_DLI_RX_TRIM14_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_14
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_14
16.7.2.224 EMC_DLI_RX_TRIM15_0
24:15 X QUSE_CURRENT_TRIM_VAL_BYTE_15
9:0 X DQS_CURRENT_TRIM_VAL_BYTE_15
16.7.2.225 EMC_DLI_TX_TRIM4_0
9:0 X TXDQ_CURRENT_TRIM_VAL_BYTE_4
16.7.2.226 EMC_DLI_TX_TRIM5_0
9:0 X TXDQ_CURRENT_TRIM_VAL_BYTE_5
16.7.2.227 EMC_DLI_TX_TRIM6_0
9:0 X TXDQ_CURRENT_TRIM_VAL_BYTE_6
16.7.2.228 EMC_DLI_TX_TRIM7_0
9:0 X TXDQ_CURRENT_TRIM_VAL_BYTE_7
16.7.2.229 EMC_DLI_TRIM_TXDQS8_0
16.7.2.230 EMC_DLI_TRIM_TXDQS9_0
16.7.2.231 EMC_DLI_TRIM_TXDQS10_0
16.7.2.232 EMC_DLI_TRIM_TXDQS11_0
16.7.2.233 EMC_DLI_TRIM_TXDQS12_0
16.7.2.234 EMC_DLI_TRIM_TXDQS13_0
16.7.2.235 EMC_DLI_TRIM_TXDQS14_0
16.7.2.236 EMC_DLI_TRIM_TXDQS15_0
16.7.2.237 EMC_CDB_CNTL_3_0
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.238 EMC_XM2DQSPADCTRL5_0
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.239 EMC_XM2DQSPADCTRL6_0
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.240 EMC_XM2DQPADCTRL3_0
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.241 EMC_DLL_XFORM_ADDR3_0
16.7.2.242 EMC_DLL_XFORM_ADDR4_0
16.7.2.243 EMC_DLL_XFORM_ADDR5_0
16.7.2.244 EMC_DLI_ADDR_TRIM2_0
29:20 X ADDR5_CURRENT_TRIM_VAL
19:10 X ADDR4_CURRENT_TRIM_VAL
9:0 X ADDR3_CURRENT_TRIM_VAL
16.7.2.245 EMC_CFG_PIPE_0
16.7.2.246 EMC_QPOP_0
Boot requirements:
This register should be parameterized in the BCT and written by the Boot ROM during cold boot.
This register should be saved in the scratch registers and restored by the Boot ROM during warm boot.
QPOP: [PMC] time from read command to pop data from the pad macro FIFO.
5:0 0x6
45 = MAX
16.7.2.247 EMC_QUSE_WIDTH_0
3:0 0x3 QUSE_DURATION: [PMC] Additional QUSE duration apart from default BL/2
16.7.2.248 EMC_PUTERM_WIDTH_0
3:0 0x5 PUTERM_DURATION: [PMC] Additional PUTERM duration apart from default BL/2
16.7.2.249 EMC_BGBIAS_CTL0_0
16.7.2.250 EMC_PUTERM_ADJ_0
PUTERM controls
This register is shadowed: see usage note at the top of Section 16.7.2
16.7.2.251 EMC_CA_TRAINING_SP1_RESULT1_0
Offset: 0x5f0 | Read/Write: RO | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X CA_TRIM_RESULT_SP1_31_0: Indicates which trim setting(s) pass the CA-to-DQ comparison.
16.7.2.252 EMC_CA_TRAINING_SP1_RESULT2_0
Offset: 0x5f4 | Read/Write: RO | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X CA_TRIM_RESULT_SP1_63_32: Indicates which trim setting(s) pass the CA-to-DQ comparison.
16.7.2.253 EMC_CA_TRAINING_SP1_RESULT3_0
Offset: 0x5f8 | Read/Write: RO | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X CA_TRIM_RESULT_SP1_95_64: Indicates which trim setting(s) pass the CA-to-DQ comparison.
16.7.2.254 EMC_CA_TRAINING_SP1_RESULT4_0
Offset: 0x5fc | Read/Write: RO | Reset: 0xXXXXXXXX (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
31:0 X CA_TRIM_RESULT_SP1_127_96: Indicates which trim setting(s) pass the CA-to-DQ comparison.
17.0 AHB
The AHB memory controller slave, which is the interface between the AHB bus and the Memory Controller
The AVP crossbar, both as a master and as a slave. This is the path to IRAM from AHB devices, and also the AVP
and CPU path to AHB devices. Neither the CPU complex nor the AVP can access DRAM through this path.
The APB DMA controller, used to provide data transfer between APB devices and memory
The USB-OTG controller
MIPI HSI controller
ARC controller
The security engine (SE), both as a master and as a slave
BSEA and BSEV bitstream engines
The CoreSight™ debug controller
The deprecated AHB DMA controller master
SNOR AHB master
DDS
USB2 and USB3 controllers
The Slave clients on the AHB are:
XBAR
DRAM
USB-OTG, USB2, USB3
SNOR
TZRAM
AHB in the Tegra K1 processor supports secure access to memory, using the same secure bit mechanism used by the CPU
TrustZone security mechanism. This is supported by the SE, which can make secure accesses to memory.
The controls presented here are largely for diagnostic purposes only. For suspect AHB performance problems, try disabling
the other masters for the device with performance issues. In normal operation bus parking is usually enabled, and all the
masters are enabled.
Also see the AHB slave interface registers, where the AHB pre-fetch logic can be configured to enhance performance for
devices doing sequential read access from DRAM.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 873
Tegra K1 Technical Reference Manual
AHB
Each AHB master is assigned to either the high or low priority bin.
Within each bin, the arbitration algorithm is round robin. For example, after AHB Master 2 wins an arbitration, then Master 3
has precedence for winning the next (followed by Master 4, etc. while Master 2 is last). AHB Master ID’s can be seen in the
enumeration of AHB_MEM_PREFETCH_CFG* registers’ “AHB_MST_ID” field.
In prior generation Tegra processors, this location used to hold a configuration register for COP_CACHE, but COP_CACHE
has been replaced with AVP_CACHE, which has a region in a different section. For software compatibility, this location is
reserved.
17.2.2.1 AHB_ARBITRATION_DISABLE_0
The AHB arbitration control register allows user to tweak arbitration behavior of the AHB arbiter.
Enable bus parking. This keeps the last serviced AHB master on the bus granted so that it can start another
transaction faster. If bus parking is disabled, no AHB master will be able to start a new transaction until the arbitration
is done and the master is granted the bus.
Allows the user to specifically disable an AHB master from arbitrating on the AHB bus.
30 0x0 DIS_PENULTIMATE_ARB:
1 = Disable arbitration on the second to last transfer.
17.2.2.2 AHB_ARBITRATION_PRIORITY_CTRL_0
The AHB arbiter implements a 2-level priority scheme. In the first level, arbitration is determined between the high and low
priority group according to the priority weight; the higher the weight, the higher the winning rate of the high priority group.
In the second level, within each of the high/low priority group, arbitration is determined in a round-robin fashion.
SW
Bit Reset Description
Default
AHB_PRIORITY_WEIGHT: AHB priority weight count. This 3-bit field is used to control
31:29 0x0 0x7 the amount of attention (weight) given to the high priority group before switching to the
low priority group.
17.2.2.3 AHB_ARBITRATION_USR_PROTECT_0
These hardware layers handle all the AHB bus protocols and convert the more complex AHB protocol into a much simpler IP
interface/handshake.
Because the AHB master/slave gizmos interface with many IP logic with different characteristics varying in speed, latency,
etc., the gizmos accept a number of static configuration bits. Depending on system speed, latency requirement, transfer
direction, burst characteristic, etc., these static configuration bits can be pre-configured to give extra performance or improve
bus efficiency.
17.3.1.1 AHB_GIZMO_AHB_MEM_0
Note: These configuration bits are meant to be changed only when the particular gizmo you want
to change is idle (not being used). Changing the configuration bits on-the-fly while that
gizmo is active can hang the system.
- If 0, the gizmo will not generate split response. Instead, it will hold on to the AHB bus until all the requested read
data is returned back to the AHB master. This setting will reduce read latency to the master, but decrease AHB
bus utilization.
2. FORCE_TO_AHB_SINGLE: Controls how the gizmo treats the AHB master's burst request.
- If 1, the gizmo will break up the burst request internally into individual single word requests.
- If 0, the gizmo will burst request internally as burst request.
3. ENB_FAST_REARBITRATE: Controls when the gizmo can allow the original read requested AHB master to re-
arbitrate for the AHB bus again so the AHB master can retrieve the originally requested read data.
- If 1, once first read data of a burst is in the slave gizmo's FIFO, it will allow the original AHB master to re-
arbitrate, thus, allowing arbitration to happen in parallel with subsequent read data of a burst. However, if the
data burst has wait-states or bubbles, then this setting will decrease AHB bus utilization because the slave gizmo
will hold on to the AHB bus longer.
- If 0, all read data of a burst must be in the slave gizmo's FIFO before it allows the original AHB master to re-
arbitrate to retrieve the read data. This increases read data latency, and also increase AHB bus utilization.
4. IP_WR_REQ_IMMEDIATE: Controls when the gizmo will start write data request to the IP logic.
- If 1, the gizmo will start write request to the IP logic once it gets one write data of a burst from the AHB side. This
setting will create non-consecutive/bubbles in a write data burst.
- If 0, the gizmo will start write request to the IP logic only when it gets all write data of a burst from the AHB side.
This setting will create consecutive data burst (no bubbles or wait-states).
5. MAX_IP_BURSTSIZE: Controls the maximum burst size that this gizmo can generate to the IP logic.
6. ACCEPT_AHB_WR_ALWAYS: Controls how the slave gizmo will treat AHB write request.
- If 1, the gizmo will always accept a write request without checking whether it's FIFOs can accept the write or not.
This setting can reduce bus utilization, but can reduce the rate of AHB retry.
- If 0, the gizmo will check its FIFOs to make sure they have room before accepting the AHB write request. This
setting increase bus utilization, but can create a lot of AHB retry.
7. DONT_SPLIT_AHB_WR: Controls whether to split AHB write request when the slave gizmo determines it cannot
accept the write request.
- If 1 and when ENABLE_SPLIT=1, the gizmo will generate split for write if its FIFOs are not ready to accept the
AHB write request or data. This setting can improve AHB bus utilization as there are no continuous AHB master
retries on the bus.
- If 0, the gizmo will generate retry response for write if its FIFOs are not ready to accept the AHB write request.
Software should leave this bit at 0 since this feature has not been proven.
SW
Bit Reset Description
Default
SW
Bit Reset Description
Default
0 = DISABLE
1 = ENABLE
0 = DMA_BURST_1WORDS
1 = DMA_BURST_4WORDS
2 = DMA_BURST_8WORDS
3 = DMA_BURST_16WORDS
SW
Bit Reset Description
Default
0 = NOT_SINGLE_DATA
1 = SINGLE_DATA
17.3.1.2 AHB_GIZMO_APB_DMA_0
31:24 0x0 REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used to
indicate the minimum number of clock counts between requests from this AHB master.
18 0x0 IMMEDIATE: AHB master gizmo (AHB-DMA) - Start AHB write request immediately.
1 = Start the AHB write request immediately as soon as the device has put one write
data in the AHB gizmos queue.
0 = Start the AHB write request only when all the write data has transferred from the
device to the AHB gizmos queue.
0 = DISABLE
1 = ENABLE
17:16 0x2 MAX_AHB_BURSTSIZE: AHB master gizmo - Maximum allowed AHB burst size.
00 = single transfer
01 = burst-of-4
10 = burst-of-8
11 = burst-of-16
0 = DMA_BURST_1WORDS
1 = DMA_BURST_4WORDS
2 = DMA_BURST_8WORDS
3 = DMA_BURST_16WORDS
17.3.1.3 AHB_MASTER_SWID_0
17.3.1.4 AHB_GIZMO_USB_0
31:24 0x0 REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used to
indicate the minimum number of clock counts between requests from this AHB master.
18 0x0 IMMEDIATE: AHB master gizmo (AHB-DMA) - Start AHB write request immediately.
1 = Start the AHB write request immediately as soon as the device has put one write
data in the AHB gizmos queue.
0 = Start the AHB write request only when all the write data has transferred from the
device to the AHB gizmos queue.
0 = DISABLE
1 = ENABLE
17:16 0x2 MAX_AHB_BURSTSIZE: AHB master gizmo - Maximum allowed AHB burst size.
00 = single transfer
01 = burst-of-4
10 = burst-of-8
11 = burst-of-16.
0 = DMA_BURST_1WORDS
1 = DMA_BURST_4WORDS
2 = DMA_BURST_8WORDS
3 = DMA_BURST_16WORDS
7 0x1 DONT_SPLIT_AHB_WR: AHB slave gizmo – do not split AHB write transaction.
1 = Do not split AHB write transaction ever.
0 (and enable_split=1) = Allow AHB write transaction to be split.
0 = ENABLE
1 = DISABLE
6 0x0 ACCEPT_AHB_WR_ALWAYS: AHB slave gizmo - Accept AHB write request always.
1 = Always accept AHB write request without checking whether there is room in the
queue to store the write data.
0 = Accept AHB write request only when there is enough room in the queue to store all
the write data.
0 = ACCEPT_ON_CHECK
1 = ACCEPT_ON_NOCHECK
0 = DISABLE
1 = ENABLE
1 0x1 FORCE_TO_AHB_SINGLE: AHB slave gizmo - Force all AHB transaction to single data
request transaction.
1 = Force to single data transaction always.
0 = Do not force to single data transaction.
0 = NOT_SINGLE_DATA
1 = SINGLE_DATA
17.3.1.5 AHB_GIZMO_AHB_XBAR_BRIDGE_0
7 0x1 DONT_SPLIT_AHB_WR: AHB slave gizmo – do not split AHB write transaction.
1 = Do not split AHB write transaction ever.
0 (and enable_split=1) = Allow AHB write transaction to be split.
0 = ENABLE
1 = DISABLE
6 0x0 ACCEPT_AHB_WR_ALWAYS: AHB slave gizmo - Accept AHB write request always.
1 = Always accept AHB write request without checking whether there is room in the
queue to store the write data.
0 = Accept AHB write request only when there is enough room in the queue to store all
the write data.
0 = ACCEPT_ON_CHECK
1 = ACCEPT_ON_NOCHECK
5:4 0x0 MAX_IP_BURSTSIZE: AHB slave gizmo - Maximum allowed IP burst size.
00 = single transfer
01 = burst-of-4
10 = burst-of-8
11 = burst-of-16.
0 = DMA_BURST_1WORDS
1 = DMA_BURST_4WORDS
2 = DMA_BURST_8WORDS
3 = DMA_BURST_16WORDS
3 0x1 IMMEDIATE: AHB slave gizmo - Start write request to device immediately.
1 = Start write request on the device side as soon as the AHB master puts data into the
gizmos queue.
0 = Start the device write request only when the AHB master has placed all write data
into the gizmos queue.
0 = DISABLE
1 = ENABLE
0 = DISABLE
1 = ENABLE
1 0x0 FORCE_TO_AHB_SINGLE: AHB slave gizmo - Force all AHB transaction to single data
request transaction.
1 = Force to single data transaction always.
0 = Do not force to single data transaction.
0 = NOT_SINGLE_DATA
1 = SINGLE_DATA
17.3.1.6 AHB_GIZMO_CPU_AHB_BRIDGE_0
31:24 0x0 REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used to
indicate the minimum number of clock counts between requests from this AHB master
18 0x1 IMMEDIATE: AHB master gizmo (AHB-DMA) - Start AHB write request immediately.
1 = Start the AHB write request immediately as soon as the device has put one write
data in the AHB gizmos queue.
0 = Start the AHB write request only when all the write data has transferred from the
device to the AHB gizmos queue.
0 = DISABLE
1 = ENABLE
17:16 0x2 MAX_AHB_BURSTSIZE: AHB master gizmo - Maximum allowed AHB burst size.
00 = single transfer
01 = burst-of-4
10 = burst-of-8
11 = burst-of-16.
0 = DMA_BURST_1WORDS
1 = DMA_BURST_4WORDS
2 = DMA_BURST_8WORDS
3 = DMA_BURST_16WORDS
17.3.1.7 AHB_GIZMO_COP_AHB_BRIDGE_0
31:24 0x0 REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used to
indicate the minimum number of clock counts between requests from this AHB master
18 0x1 IMMEDIATE: AHB master gizmo (AHB-DMA) - Start AHB write request immediately.
1 = Start the AHB write request immediately as soon as the device has put one write
data in the AHB gizmos queue.
0 = Start the AHB write request only when all the write data has transferred from the
device to the AHB gizmos queue.
0 = DISABLE
1 = ENABLE
17:16 0x2 MAX_AHB_BURSTSIZE: AHB master gizmo - Maximum allowed AHB burst size.
00 = single transfer
01 = burst-of-4
10 = burst-of-8
11 = burst-of-16.
0 = DMA_BURST_1WORDS
1 = DMA_BURST_4WORDS
2 = DMA_BURST_8WORDS
3 = DMA_BURST_16WORDS
17.3.1.8 AHB_GIZMO_XBAR_APB_CTLR_0
5:4 0x0 MAX_IP_BURSTSIZE: AHB slave gizmo - Maximum allowed IP burst size.
00 = single transfer
01 = burst-of-4
10 = burst-of-8
11 = burst-of-16.
0 = DMA_BURST_1WORDS
1 = DMA_BURST_4WORDS
2 = DMA_BURST_8WORDS
3 = DMA_BURST_16WORDS
3 0x1 IMMEDIATE: AHB slave gizmo - Start write request to device immediately.
1 = Start write request on the device side as soon as the AHB master puts data into the
gizmos queue.
0 = Start the device write request only when the AHB master has placed all write data
into the gizmos queue.
0 = DISABLE
1 = ENABLE
17.3.1.9 AHB_GIZMO_VCP_AHB_BRIDGE_0
REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used to
31:24 0x0
indicate the minimum number of clock counts between requests from this AHB master.
IMMEDIATE: AHB master gizmo (AHB-DMA) - Start AHB write request immediately.
1 = Start the AHB write request immediately as soon as the device has put one write
data in the AHB gizmos queue.
18 0x1 0 = Start the AHB write request only when all the write data has transferred from the
device to the AHB gizmos queue.
0 = DISABLE
1 = ENABLE
0 = DMA_BURST_1WORDS
1 = DMA_BURST_4WORDS
2 = DMA_BURST_8WORDS
3 = DMA_BURST_16WORDS
17.3.1.10 AHB_MASTER_SWID_1
17.3.1.11 AHB_GIZMO_SE_0
REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used
31:24 0x0 NONE to indicate the minimum number of clock counts between requests from this AHB
master.
IMMEDIATE: AHB master gizmo (AHB-DMA) - Start AHB write request immediately.
1 = Start the AHB write request immediately as soon as the device has put one
write data in the AHB gizmos queue
18 DISABLE DISABLE 0 = Start the AHB write request only when all the write data has transferred from the
device to the AHB gizmos queue.
0 = DISABLE
1 = ENABLE
17.3.1.12 AHB_GIZMO_TZRAM_0
FORCE_TO_AHB_SINGLE: AHB slave gizmo - Force all AHB transaction to single data
request transaction.
1 = Force to single data transaction always.
1 0x0
0 = Do not force to single data transaction.
0 = NOT_SINGLE_DATA
1 = SINGLE_DATA
17.3.1.13 AHB_GIZMO_BSEV_0
This is the VDE's BSEV master gizmo configuration.
31:24 0x0 REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used to
indicate the minimum number of clock counts between requests from this AHB master.
18 0x0 IMMEDIATE: AHB master gizmo (AHB-DMA) - Start AHB write request immediately.
1 = Start the AHB write request immediately as soon as the device has put one write
data in the AHB gizmos queue.
0 = Start the AHB write request only when all the write data has transferred from the
device to the AHB gizmos queue.
NOTE: THIS SHOULD NEVER BE SET TO ENABLE (BSEV requires this bit to be 0).
0 = DISABLE
1 = ENABLE
17:16 0x2 MAX_AHB_BURSTSIZE: AHB master gizmo - Maximum allowed AHB burst size.
00 = single transfer
01 = burst-of-4
10 = burst-of-8
11 = burst-of-16.
0 = DMA_BURST_1WORDS
1 = DMA_BURST_4WORDS
2 = DMA_BURST_8WORDS
3 = DMA_BURST_16WORDS
17.3.1.14 AHB_GIZMO_BSEA_0
VDE's BSEA master gizmo configuration
31:24 0x0 REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used to
indicate the minimum number of clock counts between requests from this AHB master.
18 0x0 IMMEDIATE: AHB master gizmo - Start AHB write request immediately.
1 = Start the AHB write request immediately as soon as the device puts data in the AHB
gizmos queue.
0 = Start the AHB write request only when all the write data has transferred from the
device to the AHB gizmos queue.
NOTE: THIS SHOULD NEVER BE SET TO ENABLE (BSEV requires this bit to be 0)
0 = DISABLE
1 = ENABLE
17:16 0x2 MAX_AHB_BURSTSIZE: AHB master gizmo - Maximum allowed AHB burst size.
00 = single transfer
01 = burst-of-4
10 = burst-of-8
11 = burst-of-16.
0 = DMA_BURST_1WORDS
1 = DMA_BURST_4WORDS
2 = DMA_BURST_8WORDS
3 = DMA_BURST_16WORDS
17.3.1.15 AHB_GIZMO_NOR_0
REQ_NEG_CNT: AHB master request negate count. This 8-bit counter is used to
31:24 0x0 indicate the minimum number of clock counts between requests from this AHB
master.
IMMEDIATE: AHB master gizmo (AHB-DMA) - Start AHB write request immediately.
1 = Start the AHB write request immediately as soon as the device has put one write
data in the AHB gizmos queue
18 DISABLE 0 = Start the AHB write request only when all the write data has transferred from the
device to the AHB gizmos queue.
0 = DISABLE
1 = ENABLE
17.3.1.16 AHB_GIZMO_USB2_0
USB2 master gizmo configuration.
REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used to
31:24 0x0
indicate the minimum number of clock counts between requests from this AHB master.
0 = DISABLE
1 = ENABLE
0 = DMA_BURST_1WORDS
1 = DMA_BURST_4WORDS
2 = DMA_BURST_8WORDS
3 = DMA_BURST_16WORDS
0 = ENABLE
1 = DISABLE
0 = ACCEPT_ON_CHECK
1 = ACCEPT_ON_NOCHECK
0 = DISABLE
1 = ENABLE
FORCE_TO_AHB_SINGLE: AHB slave gizmo - Force all AHB transaction to single data
request transaction.
1 = Force to single data transaction always.
1 0x1 0 = Do not force to single data transaction.
0 = NOT_SINGLE_DATA
1 = SINGLE_DATA
17.3.1.17 AHB_GIZMO_USB3_0
USB3 master gizmo configuration.
REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used to
31:24 0x0
indicate the minimum number of clock counts between requests from this AHB master.
0 = DISABLE
1 = ENABLE
0 = ENABLE
1 = DISABLE
0 = ACCEPT_ON_CHECK
1 = ACCEPT_ON_NOCHECK
0 = DISABLE
1 = ENABLE
FORCE_TO_AHB_SINGLE: AHB slave gizmo - Force all AHB transaction to single data
request transaction.
1 = Force to single data transaction always.
1 0x1 0 = Do not force to single data transaction.
0 = NOT_SINGLE_DATA
1 = SINGLE_DATA
17.3.1.18 AHB_GIZMO_DDS_0
REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used
31:24 0x0 to indicate the minimum number of clock counts between requests from this AHB
master.
0 = DISABLE
1 = ENABLE
17.3.1.19 AHB_GIZMO_MIPIHSI_0
REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used
31:24 0x0 to indicate the minimum number of clock counts between requests from this AHB
master.
0 = DISABLE
1 = ENABLE
17.3.1.20 AHB_GIZMO_ARC_0
REQ_NEG_CNT: AHB master request negate count. This is an 8-bit counter used
31:24 0x0 to indicate the minimum number of clock counts between requests from this AHB
master.
0 = DISABLE
1 = ENABLE
17.3.1.21 AHB_AHB_WRQ_EMPTY_0
Offset: 0xc4 │ Read/Write: RO │ Reset: 0x0000000X (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)
1 X COP_AHB_WRQ_EMPTY
0 X CPU_AHB_WRQ_EMPTY
There are eight such pre-fetchers, allowing this function to be active for up to eight AHB masters.
When the pre-fetcher is enabled, the first read request initiates a speculative read of up to 128 bytes, and subsequent linear
reads will return the data directly to the AHB master without going through the memory controller to DRAM.
Problems have been seen for control structures such as USB Transfer Descriptors.
As the pre-fetcher invalidates the buffer for any non-sequential read, placing some padding will prevent pre-fetch issues. A
problem can be triggered by using something like this:
struct dtd { unsigned HW_descriptor[K] ; } ; struct dtd dtd_array[N] ;
This makes the hardware descriptors structures as read by the USB DMA sequential, and so pre-fetchable.
If the definition is modified as:
struct dtd { unsigned HW_descriptor[K] ; unsigned Padding ; } ; struct dtd dtd_array[N] ;
Then reads by USB DMA of consecutive hardware descriptors become not sequential and so there is no coherency issue as
the pre-fetch buffer will be invalidated.
After updating a memory structure, the pre-fetch buffer can be invalidated by disabling the pre-fetcher and then immediately
re-enabling it.
17.4.2.1 AHB_AHB_MEM_PREFETCH_CFG5_0
0x6000_C0CC: ahbslv prefetch cfg5 --> reset value = 0x1883.0800.
25:21 0x4 ADDR_BNDRY: 2^(n+6) byte boundary. Any value greater than 16 will use n=16.
17.4.2.2 AHB_AHB_MEM_PREFETCH_CFG6_0
0x6000_C0D0: ahbslv prefetch cfg6 --> reset value = 0x1883.0800.
AHB_MST_ID: USB
0 = CPU
1 = COP
2 = VCP
3 = CSITE
4 = IDE
5 = AHBDMA
6 = USB
7 = APBDMA
8 = UNUSED_08
30:26 0x6 9 = SDIO1
10 = NAND_FLASH
11 = SNOR
12 = HSMMC
13 = BSEV
14 = SE
15 = UNUSED_0F
16 = BSEA
17 = USB3
18 = USB2
19 = SDIO2
25:21 0x4 ADDR_BNDRY: 2^(n+6) byte boundary. Any value greater than 16 will use n=16.
17.4.2.3 AHB_AHB_MEM_PREFETCH_CFG7_0
0x6000_C0D4: ahbslv prefetch cfg7 --> reset value = 0x1883.0800.
AHB_MST_ID: USB
0 = CPU
1 = COP
2 = VCP
3 = CSITE
4 = IDE
5 = AHBDMA
6 = USB
7 = APBDMA
8 = UNUSED_08
9 = SDIO1
10 = NAND_FLASH
11 = SNOR
12 = HSMMC
13 = BSEV
14 = SE
30:26 0x7 15 = UNUSED_0F
16 = BSEA
17 = USB3
18 = USB2
19 = SDIO2
20 = UNUSED_14
21 = UNUSED_15
22 = UNUSED_16
23 = UNUSED_17
24 = UNUSED_18
25 = UNUSED_19
26 = UNUSED_1A
27 = UNUSED_1B
28 = UNUSED_1C
29 = UNUSED_1D
30 = UNUSED_1E
31 = UNUSED_1F
25:21 0x4 ADDR_BNDRY: 2^(n+6) byte boundary. Any value greater than 16 will use n=16.
17.4.2.4 AHB_AHB_MEM_PREFETCH_CFG8_0
0x6000_C0D8: ahbslv prefetch cfg8 --> reset value = 0x1883.0800.
AHB_MST_ID: USB
0 = CPU
1 = COP
2 = VCP
3 = CSITE
4 = IDE
5 = AHBDMA
6 = USB
7 = APBDMA
8 = UNUSED_08
9 = SDIO1
10 = NAND_FLASH
11 = SNOR
12 = HSMMC
13 = BSEV
14 = SE
30:26 0x8 15 = UNUSED_0F
16 = BSEA
17 = USB3
18 = USB2
19 = SDIO2
20 = UNUSED_14
21 = UNUSED_15
22 = UNUSED_16
23 = UNUSED_17
24 = UNUSED_18
25 = UNUSED_19
26 = UNUSED_1A
27 = UNUSED_1B
28 = UNUSED_1C
29 = UNUSED_1D
30 = UNUSED_1E
31 = UNUSED_1F
25:21 0x4 ADDR_BNDRY: 2^(n+6) byte boundary. Any value greater than 16 will use n=16.
17.4.2.5 AHB_AHB_MEM_PREFETCH_CFG_X_0
If DISABLE_CHECK_SIZE is 0, then only read requests that have the exact same size as the original read request that kick-
started the prefetch process will cause a "hit". In addition, the address must be the exact next one in the sequence.
For instance, if the first request on a prefetch-enabled AHB Master arrives with SIZE=ONE_BYTE and ADDR[31:0]=0x3, then
the next access must have SIZE=ONE_BYTE and ADDR[31:0]=0x4 in order to be considered a hit.
If DISABLE_CHECK_SIZE is 1, then a read request will hit as long as the incoming ADDR[31:4]matches the
expected_ADDR[31:4]. expected_ADDR[31:4] is always either "last ADDR[31:4]" or "last ADDR[31:4] + 1", where last ADDR is
the prior read request actually issued by the AHB Master(as opposed to the last request to the CIF, which could have been a
speculative read).
expected_ADDR[31:4] is always "last ADDR[31:4]" unless "SIZE" field in the last request uses the last byte in the 16-byte CIF
word.
15 0x0 DISABLE_ADDR_BNDY_CHK_MST8:
14 0x0 DISABLE_ADDR_BNDY_CHK_MST7:
13 0x0 DISABLE_ADDR_BNDY_CHK_MST6:
12 0x0 DISABLE_ADDR_BNDY_CHK_MST5:
11 0x0 DISABLE_ADDR_BNDY_CHK_MST4:
10 0x0 DISABLE_ADDR_BNDY_CHK_MST3:
9 0x0 DISABLE_ADDR_BNDY_CHK_MST2:
8 0x0 DISABLE_ADDR_BNDY_CHK_MST1
7 0x0 DISABLE_CHECK_SIZE_MASTER8:
6 0x0 DISABLE_CHECK_SIZE_MASTER7:
5 0x0 DISABLE_CHECK_SIZE_MASTER6:
4 0x0 DISABLE_CHECK_SIZE_MASTER5:
3 0x0 DISABLE_CHECK_SIZE_MASTER4:
2 0x0 DISABLE_CHECK_SIZE_MASTER3:
1 0x0 DISABLE_CHECK_SIZE_MASTER2:
0 0x0 DISABLE_CHECK_SIZE_MASTER1:
17.4.2.6 AHB_ARBITRATION_XBAR_CTRL_0
MEM_INIT_DONE: Software should set this bit when memory has been initialized
16 0x0 0 = NOT_DONE
1 = DONE
HOLD_DIS: By default CPU accesses to IRAMs will be held if there are any pending
requests from the AHB to the IRAMs. This is done to avoid data coherency issues. If
software handles coherency then this can be turned off to improve performance.
1 0x0
Software writes to modify.
0 = ENABLE
1 = DISABLE
17.4.2.7 AHB_AHB_MEM_PREFETCH_CFG3_0
See the description of the pre-fetcher above. 6000:C0E4: ahbslv prefetch cfg3 --> reset value = 0x1483.0800.
25:21 0x4 ADDR_BNDRY: 2^(n+6) byte boundary. Any value greater than 26 will use n=26.
17.4.2.8 AHB_AHB_MEM_PREFETCH_CFG4_0
See the description of the pre-fetcher above. 6000:C0E8: ahbslv prefetch cfg4 --> reset value = 0x1483.0800.
25:21 0x4 ADDR_BNDRY: 2^(n+6) byte boundary. Any value greater than 26 will use n=26.
17.4.2.9 AHB_AVP_PPCS_RD_COH_STATUS_0
0x6000_C0EC: ARM7 outstanding rd/wr
16 X RDS_OUTSTANDING
0 X WRS_OUTSTANDING
17.4.2.10 AHB_AHB_MEM_PREFETCH_CFG1_0
NV_ahbslvmem prefetch
The NV_ahbslvmem prefetch feature reduces latency and improves overall bandwidth for AHB Masters doing reads to
SDRAM. AHB only allows one outstanding read transaction at a time. When enabled, and kick-started by a first read request
(which will "miss" since there would be nothing in the prefetch FIFO) the prefetcher makes speculative read requests to the
memory controller in consecutive progression of linear address. Without this feature, an AHB Master will suffer roundtrip
latency through the gizmo, PPCS, CIF, MC arbitration, and all the read data passing for every AHB transaction.
Address Boundaries for prefetching will stop the sequential prefetch process from making additional speculations. This is
useful to help prevent coherency issues -- software needs ways to stop the prefetcher from prefetching data before the data
has been written in memory. If an AHB master can be known to make 256 byte transfers that are aligned accesses,
ADDR_BNDRY should be set to a value of 4.
INACTIVITY_TIMEOUT is intended to prevent coherency problems. If no read request from the prefetch-enabled master is
observed after the number of cycles specified in the inactivity timeout counter, then any speculatively prefetched read data is
invalidated.
There are eight AHB masters that can be enabled for prefetching. Each prefetch buffer can hold up to 8 entries (of 128 bits
each entry) of prefetched data.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 900
Tegra K1 Technical Reference Manual
AHB
25:21 0x4 ADDR_BNDRY: 2^(n+6) byte boundary. Any value greater than 26 will
use n=26.
17.4.2.11 AHB_AHB_MEM_PREFETCH_CFG2_0
See the description of the pre-fetcher above. 0x6000_C0F4: ahbslv prefetch cfg2 --> reset value = 0x1883.0800.
25:21 0x4 ADDR_BNDRY: 2^(n+6) byte boundary. Any value greater than 26 will
use n=26.
17.4.2.12 AHB_AHBSLVMEM_STATUS_0
0x6000_C0F8: ahbslv outstanding rd, rdque_empty status
1 X PPCS_RDS_OUTSTANDING
0 X GIZMO_IP_RDQUE_EMPTY
17.4.2.13 AHB_ARBITRATION_AHB_MEM_WRQUE_MST_ID_0
31:0 X AHB_MASTER_ID: 0 = There is no write data in the write queue from that AHB master.
17.4.2.14 AHB_ARBITRATION_CPU_ABORT_ADDR_0
17.4.2.15 AHB_ARBITRATION_CPU_ABORT_INFO_0
5 X ALIGN: TRUE for abort caused by Misalignment (i.e., word access at odd byte address)
0 = ABT_DIS
1 = ABT_EN
4 X BADSIZE: TRUE for abort caused by Bad Size (i.e., word access at odd byte address)
0 = ABT_DIS
1 = ABT_EN
0 = BYTE_ABT
1 = HWORD_ABT
2 = WORD_ABT
17.4.2.16 AHB_ARBITRATION_COP_ABORT_ADDR_0
17.4.2.17 AHB_ARBITRATION_COP_ABORT_INFO_0
5 X ALIGN: TRUE for abort caused by Misalignment (i.e., word access at odd byte address)
0 = ABT_DIS
1 = ABT_EN
4 X BADSIZE: TRUE for abort caused by Bad Size (i.e., word access at odd byte address)
0 = ABT_DIS
1 = ABT_EN
0 = BYTE_ABT
1 = HWORD_ABT
2 = WORD_ABT
17.4.2.18 AHB_AHB_SPARE_REG_0
4:0 0x0 CSITE_PADMACRO_TRIM_SEL: Trimmer select register for CoreSight clock pad macro.
17.4.2.19 AHB_XBAR_SPARE_REG_0
17.4.2.20 AHB_AVPC_MCCIF_FIFOCTRL_0
Note: The FIFO timing aspects of this register are no longer supported, but are retained for
software compatibility.
The clock override/ovr_mode fields of this register control the second-level clock gating for the client and MC sides of the
MCCIF. All clock gating is enabled by default.
A '1' written to the rclk/wclk override field will result in one of the following:
With wclk/rclk override mode = LEGACY, the clock reverts to legacy mode of operation where the clock is on
whenever the client clock is enabled.
With wclk/rclk override mode = ON, the clock is always on inside the MCCIF and PC
A '1' written to the CCLK override field keeps the client's clock always on inside the MCCIF.
Memory Client Interface FIFO Control (where applicable) and Clock Gating Control Register
Offset: 0x120 │ Byte Offset: 0x480 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxx00000xxxxxxxxxxxx0000)
AVPC_RCLK_OVR_MODE:
20 LEGACY 0 = LEGACY
1 = ON
AVPC_WCLK_OVR_MODE:
19 LEGACY 0 = LEGACY
1 = ON
18 0x0 AVPC_CCLK_OVERRIDE
17 0x0 AVPC_RCLK_OVERRIDE
16 0x0 AVPC_WCLK_OVERRIDE
AVPC_MCCIF_RDCL_RDFAST:
3 DISABLE 0 = DISABLE
1 = ENABLE
AVPC_MCCIF_WRMC_CLLE2X:
2 DISABLE 0 = DISABLE
1 = ENABLE
AVPC_MCCIF_RDMC_RDFAST:
1 DISABLE 0 = DISABLE
1 = ENABLE
AVPC_MCCIF_WRCL_MCLE2X:
0 DISABLE 0 = DISABLE
1 = ENABLE
17.4.2.21 AHB_TIMEOUT_WCOAL_AVPC_0
Note: Write coalescing is no longer supported by the MCCIF clients. Registers are retained for
software compatibility but are not used by the hardware.
17.4.2.22 AHB_MPCORELP_MCCIF_FIFOCTRL_0
Note: The FIFO timing aspects of this register are no longer supported, but are retained for
software compatibility
The clock override/ovr_mode fields of this register control the second-level clock gating for the client and MC sides of the
MCCIF. All clock gating is enabled by default.
A '1' written to the rclk/wclk override field will result in one of the following:
With wclk/rclk override mode = LEGACY, the clock reverts to legacy mode of operation, where the clock is on
whenever the client clock is enabled.
With wclk/rclk override mode = ON, the clock is always on inside MCCIF and PC.
A '1' written to the cclk override field keeps the client's clock always on inside the MCCIF.
Memory Client Interface FIFO Control (where applicable) and Clock Gating Control Register
Offset: 0x128 │ Byte Offset: 0x4a0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxx00000xxxxxxxxxxxxxxxx)
SYS_REGS_MPCORELP_RCLK_OVR_MODE:
20 LEGACY 0 = LEGACY
1 = ON
SYS_REGS_MPCORELP_WCLK_OVR_MODE:
19 LEGACY 0 = LEGACY
1 = ON
18 0x0 SYS_REGS_MPCORELP_CCLK_OVERRIDE
17 0x0 SYS_REGS_MPCORELP_RCLK_OVERRIDE
16 0x0 SYS_REGS_MPCORELP_WCLK_OVERRIDE
17.4.2.23 AHB_MPCORE_MCCIF_FIFOCTRL_0
Note: The FIFO timing aspects of this register are no longer supported, but are retained for
software compatibility
The clock override/ovr_mode fields of this register control the second-level clock gating for the client and MC sides of the
MCCIF. All clock gating is enabled by default.
A '1' written to the rclk/wclk override field will result in one of the following:
With wclk/rclk override mode = LEGACY, the clock reverts to legacy mode of operation, where the clock is on
whenever the client clock is enabled.
With wclk/rclk override mode = ON, the clock is always on inside MCCIF and PC.
A '1' written to the cclk override field keeps the client's clock always on inside the MCCIF.
Memory Client Interface FIFO Control (where applicable) and Clock Gating Control Register
Offset: 0x12c │ Byte Offset: 0x4b0 │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxxxxxx00000xxxxxxxxxxxxxxxx)
SYS_REGS_MPCORE_RCLK_OVR_MODE:
20 LEGACY 0 = LEGACY
1 = ON
SYS_REGS_MPCORE_WCLK_OVR_MODE:
19 LEGACY 0 = LEGACY
1 = ON
18 0x0 SYS_REGS_MPCORE_CCLK_OVERRIDE
17 0x0 SYS_REGS_MPCORE_RCLK_OVERRIDE
16 0x0 SYS_REGS_MPCORE_WCLK_OVERRIDE
18.0 APB
This section describes a number of system control registers that are grouped together in the aptly named miscellaneous
registers section. These registers are all present on the APB bus.
18.1.1.1 APB_MISC_PP_CONFIG_CTL_0
XBAR_SO_DEFAULT: Deprecated -- keep disabled -- default SO bit for non-CPU XBAR clients
1 DISABLE 0 = DISABLE
1 = ENABLE
18.1.1.2 APB_MISC_PP_PINMUX_GLOBAL_0_0
NORMAL setting means pad is neither pulled up (driving weak 1) or pulled down (driving weak 0)
PULL_DOWN selection means pad is driving weak 0
PULL_UP selection means pad is driving weak 1
WARNING! Driving an internal pull-up when the pad has an external pull-down and vice
versa will cause a significant increase in power consumption.
18.1.2.1 APB_MISC_PP_PULLUPDOWN_REG_C_0
Offset: 0xa8 │ Read/Write: R/W │ Reset: 0x00000000 (0b000000xxxxxxxxxxxxxxxxxxxxxxxxxx)
XM2C_PU_PD:
0 = NORMAL
31:30 NORMAL 1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
XM2D_PU_PD:
0 = NORMAL
29:28 NORMAL 1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
DDRC_PU_PD:
0 = NORMAL
27:26 NORMAL 1 = PULL_DOWN
2 = PULL_UP
3 = RSVD
18.1.2.2 APB_MISC_SC1X_PADS_VIP_VCLKCTRL_0
18.1.2.3 APB_MISC_GP_HIDREV_0
HSM_EN - High speed mode - active high, enables high speed mode for driver and receiver for better matching of the
rise/fall delay in outbound and inbound paths. Use it for clocks and the high speed signaling where the matching
timings are of importance.
SCHMT_EN - Schmitt enable - active high, enables the Schmitt Trigger Type of I/P receiver. Default is Inverter Type
of receiver.
LPMD - Low power mode - select low power modes (different impedance and current value). The table depicts the
function of low power mode
CAL_DRVDN - drive down (falling edge) - Driver Output Pull-Down drive strength code.
CAL_DRVUP - drive up (rising edge) - Driver Output Pull-Up drive strength code. Works with combination of LMPD
bits. For lower power modes, higher drive strength are masked. See table below:
1 1 Pass Code Pass Code Pass Code Pass Code Pass Code
18.1.3.1 APB_MISC_GP_MIPI_PAD_CTRL_0
Offset: 0x820 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0x)
DSIB_MODE:
1 CSI 0 = CSI
1 = DSI
18.1.3.2 APB_MISC_GP_AOCFG1PADCTRL_0
18.1.3.3 APB_MISC_GP_AOCFG2PADCTRL_0
18.1.3.4 APB_MISC_GP_ATCFG1PADCTRL_0
18.1.3.5 APB_MISC_GP_ATCFG2PADCTRL_0
18.1.3.6 APB_MISC_GP_ATCFG3PADCTRL_0
18.1.3.7 APB_MISC_GP_ATCFG4PADCTRL_0
18.1.3.8 APB_MISC_GP_ATCFG5PADCTRL_0
18.1.3.9 APB_MISC_GP_CDEV1CFGPADCTRL_0
18.1.3.10 APB_MISC_GP_CDEV2CFGPADCTRL_0
18.1.3.11 APB_MISC_GP_DAP1CFGPADCTRL_0
18.1.3.12 APB_MISC_GP_DAP2CFGPADCTRL_0
18.1.3.13 APB_MISC_GP_DAP3CFGPADCTRL_0
18.1.3.14 APB_MISC_GP_DAP4CFGPADCTRL_0
18.1.3.15 APB_MISC_GP_DBGCFGPADCTRL_0
18.1.3.16 APB_MISC_GP_SDIO3CFGPADCTRL_0
The following calibration codes need to be used for the pad under default condition. In general, the calibration pad will provide
the code for the pad. To bypass calibration and provide the default code for the required impedance, these values (in decimal)
should be used.
1.8V 70 54 42 32 34 23 19
3.3V 36 20
18.1.3.17 APB_MISC_GP_SPICFGPADCTRL_0
18.1.3.18 APB_MISC_GP_UAACFGPADCTRL_0
18.1.3.19 APB_MISC_GP_UABCFGPADCTRL_0
18.1.3.20 APB_MISC_GP_UART2CFGPADCTRL_0
18.1.3.21 APB_MISC_GP_UART3CFGPADCTRL_0
18.1.3.22 APB_MISC_GP_SDIO1CFGPADCTRL_0
Controls for BDSDMEM pads of SDMMC1
The following calibration codes need to be used for the pad under default condition. In general, the calibration pad will provide
the code for the pad. To bypass calibration and provide the default code for the required impedance, these values (in decimal)
should be used.
1.8V 70 54 42 32 34 23 19
3.3V 36 20
26:20 0x2a CFG2TMC_SDIO1CFG_CAL_DRVUP. 1.8V 50 ohm driver for wifi SDIO card.
18:12 0x20 CFG2TMC_SDIO1CFG_CAL_DRVDN. 1.8V 50 ohm driver for wifi SDIO card
18.1.3.23 APB_MISC_GP_DDCCFGPADCTRL_0
18.1.3.24 APB_MISC_GP_GMACFGPADCTRL_0
Controls for BDSDMEMLV pads of SDMMC4
The following calibration codes need to be used for the pad under default condition. In general, the calibration pad will provide
the code for the pad. To bypass calibration and provide the default code for the required impedance, these values (in
hexadecimal) should be used.
33 ohms 50 ohms
Supply
Up DN Up DN
CFG2TMC_GMACFG_DRV_TYPE.
7:6 0x1 0x1: 33-50 ohm driver
0x0: 66-100 ohm driver
CFG2TMC_GMACFG_HSM_EN: Data pins high speed mode enable. Software should set
this when I/O is running at greater than or equal to 100 MHz.
2 0x0
0 = DISABLE
1 = ENABLE
CFG2TMC_GMACFG_E_PREEMP:pre-emphasis enable
0 0x0 0 = DISABLE
1 = ENABLE
18.1.3.25 APB_MISC_GP_GMECFGPADCTRL_0
18.1.3.26 APB_MISC_GP_GMFCFGPADCTRL_0
18.1.3.27 APB_MISC_GP_GMGCFGPADCTRL_0
18.1.3.28 APB_MISC_GP_GMHCFGPADCTRL_0
18.1.3.29 APB_MISC_GP_OWRCFGPADCTRL_0
18.1.3.30 APB_MISC_GP_UADCFGPADCTRL_0
18.1.3.31 APB_MISC_GP_GPVCFGPADCTRL_0
CFG2TMC_GPVCFG_SCHMT_EN:
3 0x0 0 = DISABLE
1 = ENABLE
CFG2TMC_GPVCFG_HSM_EN:
2 0x0 0 = DISABLE
1 = ENABLE
18.1.3.32 APB_MISC_GP_DEV3CFGPADCTRL_0
18.1.3.33 APB_MISC_GP_CECCFGPADCTRL_0
18.1.3.34 APB_MISC_GP_ATCFG6PADCTRL_0
18.1.3.35 APB_MISC_GP_DAP5CFGPADCTRL_0
18.1.3.36 APB_MISC_GP_USB_VBUS_EN_CFGPADCTRL_0
18.1.3.37 APB_MISC_GP_AOCFG3PADCTRL_0
18.1.3.38 APB_MISC_GP_AOCFG0PADCTRL_0
18.1.3.39 APB_MISC_GP_HVCFG0PADCTRL_0
18.1.3.40 APB_MISC_GP_SDIO4CFGPADCTRL_0
18.1.3.41 APB_MISC_GP_AOCFG4PADCTRL_0
Offset: 0x9c8 | Read/Write: R/W | Reset: 0xf0e09000 (0b1111x0001110x0001001xxxx00xx00xx)
18.1.4.1 APB_MISC_DAS_DAP_CTRL_SEL_0
DAP_MS_SEL: This bit is programmed to put a particular DAP in either master or slave mode when two or
more DAPs are in bypass mode.
31 0x0
0 = SLAVE
1 = MASTER
DAP_SDATA1_TX_RX: Programs sdata1 in either tx or rx mode when two or more DAPs are in bypass
mode.
30 0x0
0 = TX
1 = RX
DAP_SDATA2_RX_TX: Programs sdata2 in either tx or rx mode when two or more DAPs are in bypass
mode.
29 0x0
0 = RX
1 = TX
DAP_CTRL_SEL: DAP selection bits to select one of the three DACs or one of the five DAPs.
0 = DAC1
1 = DAC2
2 = DAC3
4:0 0x0 16 = DAP1
17 = DAP2
18 = DAP3
19 = DAP4
20 = DAP5
18.1.4.2 APB_MISC_DAS_DAC_INPUT_DATA_CLK_SEL_0
DAC_SDATA2_SEL: These bits control the sdata2 input selection for DACs.
0 = DAP1
1 = DAP2
31:28 0x0
2 = DAP3
3 = DAP4
4 = DAP5
DAC_SDATA1_SEL: These bits control the sdata1 input selection for DACs.
0 = DAP1
1 = DAP2
27:24 0x0
2 = DAP3
3 = DAP4
4 = DAP5
DAC_CLK_SEL: These bits control the bit clock and fsync selection for DACs.
0 = DAP1
1 = DAP2
3:0 0x0
2 = DAP3
3 = DAP4
4 = DAP5
Secure Registers
18.1.5.1 APB_MISC_SECURE_REGS_APB_SLAVE_SECURITY_ENABLE_REG0_0
22 0x0 LA_SECURITY_EN: LA
18.1.5.2 APB_MISC_SECURE_REGS_APB_SLAVE_SECURITY_ENABLE_REG1_0
6 0x0 MC_SECURITY_EN: MC
18.1.5.3 APB_MISC_SECURE_REGS_APB_SLAVE_SECURITY_ENABLE_REG2_0
The APB DMA Controller is used for block data transfers from a source location to the destination location. The source may be
DRAM or IRAM, and the destination location could be devices placed on APB Bus; or vice versa. DMA transfers are done
without any processor intervention other than register writes needed to program the parameters for a particular transfer, and
accesses needed to handle any interrupts.
The APB DMA Controller has 32 fully programmable channels, which can all transfer data concurrently.
18.2.1 Features
DMA master for transfers between external/internal memory and peripheral devices on the APB Bus
Two modes of operation: single transfer (once) or continuous
Programmable burst sizes of 1, 4, or 8 words
Maximum transfer size is 1 GB per channel, with the minimum size being one word
Programmable APB bus widths of 8, 16, and 32 bits
Separate AHB and APB start addresses
Per channel trigger and flow control mechanism support
Channel to channel trigger support, i.e., ability to link up channels to start at the end of another channel’s transfer,
allowing scattering/gathering of physical memory.
Interrupt generation at the completion of channel transfer
Interrupts per channel can be routed to the CPU or AVP
Ability to hold processor until transfer is done
Wrap mode supported for all channels in Once mode
Ping-Pong feature supported in continuous mode
Weighted round robin arbitration among channels at burst granularity. The weights for each channel can be set.
Runs on APB clock. The APB clock generally runs at 1:2:2 or 1:2:3 clock ratios (sclk : hclk : pclk).
APB DMA secure access feature allows configuration of secure and non-secure areas
Address wraparound
Global or individual channel pausing
18.2.2 Functionality
There are 32 channels in APB DMA. An APB DMA channel can transfer specified portions of data from an AHB address space
(can be iRAMs or DRAMs on the MC) to an APB address space. APB DMA follows a simple round robin arbitration scheme,
starting with channel 0.
Each channel can have independent burst transfer sizes programmed to one word, four words, or eight words.
Enable bit: one for each channel and one global enable bit.
Interrupt Enable at the end of transfer with ability to mask or route to desired processor.
Ability to hold off a processor. The Processor that writes into this bit will be held until transfer is completed.
Direction bit to determine the direction of transfer--AHB to APB or APB to AHB.
Trigger and Flow selects. These are addition controls apart from channel enable, on which the transfer depends.
Trigger is used to start a channel on some event to start the transfer and flow is used to proceed with every new
burst transfer. These events are under either Software or Hardware control.
Wrap feature wraps the LS nibble of the address back to ‘b0000 instead of incrementing to the next address if
the required number of words has been transmitted.
APB bus width is configurable whereas the AHB bus width is fixed to 32 bits. The APB bus can be 8, 16, or 32
bits wide. For an AHB burst of 8 (burst is always with regard to words) and an APB bus size of 16, there are: 8
words transferred to the APB side, or 16 halfwords transferred.
Double Buffering Mode makes the APB DMA Burst Address reset to AHB Base Address after every even (2nd,
4th, 6th, etc.) APB DMA Transfer. This mode is used only along with continuous mode (once bit 0).
Separate AHB start address and APB start address.
Ability to delay the burst rate with the help of a global counter which can be programmed to desired value, which
equals number of clocks delay required between each burst.
AHB_BUS
AHB_MST-GIZMO
P
P
S
APB_DMA
B Interrupt
U
S
APB Bridge
APB_BUS
The APBDMA_SECURITY_REG register contains the fields CH_<0-31>_SECURITY_EN, which indicate which channel is
secure. Write and read transactions to this register must always be secure.
If a channel is designated as secure, its registers must be written and read out in a secure manner. A non-secure write
attempt will not affect any of the secure channel’s registers and a non-secure read attempt will not generate any read data.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 934
Tegra K1 Technical Reference Manual
APB DMA Controller
If a channel is non-secure, its registers can be written or read either in a secure or a non-secure manner.
CPU COP
APB DMA
Secure Channel
Enable Register APB Slave
The APB burst size and the FIFO trigger levels (in the modules) need to be programmed such that they do not lead to an
overflow/underflow of the FIFO in the APB client.
All registers of a channel should be programmed before the Channel Enable bit in the channel’s control register is set as
follows:
1. Program the AHB Starting Address and APB Starting address in the *AHB_PTR and *APB_PTR registers.
2. Program the required AHB BURST size, WRAP word window size, and AHB_DATA_SWAP (byte swapping) option in
the *AHB_SWQ register. The AHB BUS WIDTH is fixed to a 32-bit bus.
3. Program the required APB_BUS_WIDTH (as the peripheral), APB_DATA_SWAP (byte swapping) option, and WRAP
word window size in the *APB_SEQ register.
4. Program the number of words to be transferred in the *WCOUNT register.
5. Program the trigger in the CHANNEL_*_CSRE register.
6. Program the Interrupt option, Hold Processor option, DMA transfer direction, Transfer Mode, and Flow Enable in the
CHANNEL_*_CSR register.
7. Program the Global Enable (GEN) bit in the APB_DMA Command Register. The GEN bit can also be programmed
before programming the channel registers.
8. Whenever the channel’s ENB bit is enabled, the DMA starts the data transfer.
9. Each channel’s status is observed by polling the APB_DMA Status Register. The number of words remaining to be
transferred will be in the WORD_TRANSFER register.
10. The Tx/Rx Flow/Trigger requestors are programmed in the APB-DMA Requestor Assignments Registers.
11. The busy (BSY) bit is set as soon as a DMA channel is enabled and is cleared after the transfer is completed.
Interrupts
Interrupts are write-1-to-clear, i.e., an interrupt bit is cleared when the value of write data corresponding to the bit
position of the interrupt bit is 1.
An interrupt is generated when the last data is accepted by the AHB slave while writing on the AHB bus and once the
last data is placed on APB bus while reading from AHB bus. Note that completion of an AHB write does not
guarantee the data is written to DRAM. Refer to the AHB section of this document for how data is flushed from AHB
to the MC for this master.
Wraparound
Wraparound does not occur in between bursts; it is only after completing a burst that the address wraps around. Wraparound
is possible for both AHB and APB addresses.
The programming of the AHB wraparound needs to account for the address that is programmed in the AHB start address and
the burst size.
Usually, APB clients have a buffer of a fixed size. If the APB addresses are incremented after each word transfer, it is likely
that the address would cross the address limit of that client and go into the address range of another client. To avoid this, the
wrap feature is used. The default wraparound on the APB side is wrapping on 1 word. It prevents unnecessary address
switching on the APB.
With the address wrap feature enabled, the LS nibble of the address wraps back to 0 after completion of the programmed
number of words instead of incrementing the address.
Example: AHB burst size = 4 words, AHB start address = 0x4000_0000, AHB wrap on 32 words
……….
When the address wrap feature is disabled, the addresses are incremented after each word transfer. This helps transfer data
from/to contiguous locations.
Flow Control
When flow control is enabled, the number of words to be transferred must always be a multiple of the burst size/APB trigger
level. Without flow control the following are possible:
If a burst of 8 is requested with an address that is not aligned to an 8-word boundary, the DMA will do a single burst
until it aligns itself to the 8-word boundary and then starts issuing burst requests.
If a burst of 8 is requested and at any point of time the transfer size goes below 8, the DMA completes the remaining
transfers with a burst of 4 or 1, whichever is possible.
If a burst of 4 is requested with an address that is not aligned to a 4-word boundary, the DMA transfers a single burst
until it aligns itself to the 4-word boundary.
If a burst of 4 is requested and at any point of time the transfer size goes below 4, the DMA completes the remaining
transfers with a burst of 1.
Continuous Mode
In continuous mode, when a transfer is in progress, the APB and AHB addresses and the WCOUNT fields can be
reprogrammed in the middle of a data transfer. When the current transfer completes and a new transfer starts, it picks up the
newly programmed values. All new programming must complete before the channel completes the data transfer. To be sure
about this, CHANNEL_PAUSE can be used.
2x Mode
In 2x mode, the reprogramming can be done only on the second half of the data transfer.
18.2.5.1 APBDMA_COMMAND_0
Note that the power on reset value for the APB DMA Global Enable is 0. This bit must be written to 1 before any APB DMA
transactions can begin.
18.2.5.2 APBDMA_STATUS_0
18.2.5.3 APBDMA_CNTRL_REG_0
The APB DMA Counter initial/reload count value is programmed in the APB DMA Counter Register (bits[15:0]).The APB DMA
Counter is loaded with this initial/reload count value whenever the APB DMA Counter Register is written, and is re-loaded to
this saved initial count value on a burst complete (programmable). The APB DMA Counter value will decrement whenever an
APB DMA burst complete, and the current count value is non-zero, and any of the bits [31:16] are set.
18.2.5.4 APBDMA_IRQ_STA_CPU_0
CH31: Gathers all the after-masking CPU directed IRQ status bits from channel 31
0 = No IRQ pending
31 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH30: Gathers all the after-masking CPU directed IRQ status bits from channel 30
0 = No IRQ pending
30 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH29: Gathers all the after-masking CPU directed IRQ status bits from channel 29
0 = No IRQ pending
29 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH28: Gathers all the after-masking CPU directed IRQ status bits from channel 28
0 = No IRQ pending
28 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH27: Gathers all the after-masking CPU directed IRQ status bits from channel 27
0 = No IRQ pending
27 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH26: Gathers all the after-masking CPU directed IRQ status bits from channel 26
0 = No IRQ pending
26 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH25: Gathers all the after-masking CPU directed IRQ status bits from channel 25
0 = No IRQ pending
25 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH24: Gathers all the after-masking CPU directed IRQ status bits from channel 24
0 = No IRQ pending
24 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH23: Gathers all the after-masking CPU directed IRQ status bits from channel 23
0 = No IRQ pending
23 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH22: Gathers all the after-masking CPU directed IRQ status bits from channel 22
0 = No IRQ pending
22 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH21: Gathers all the after-masking CPU directed IRQ status bits from channel 21
0 = No IRQ pending
21 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH20: Gathers all the after-masking CPU directed IRQ status bits from channel 20
0 = No IRQ pending
20 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH19: Gathers all the after-masking CPU directed IRQ status bits from channel 19
0 = No IRQ pending
19 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH18: Gathers all the after-masking CPU directed IRQ status bits from channel 18
0 = No IRQ pending
18 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH17: Gathers all the after-masking CPU directed IRQ status bits from channel 17
0 = No IRQ pending
17 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH16: Gathers all the after-masking CPU directed IRQ status bits from channel 16
0 = No IRQ pending
16 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH15: Gathers all the after-masking CPU directed IRQ status bits from channel 15
0 = No IRQ pending
15 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
14 X CH14: Gathers all the after-masking CPU directed IRQ status bits from channel 14
0 = No IRQ pending
CH13: Gathers all the after-masking CPU directed IRQ status bits from channel 13
0 = No IRQ pending
13 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH12: Gathers all the after-masking CPU directed IRQ status bits from channel 12
0 = No IRQ pending
12 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH11: Gathers all the after-masking CPU directed IRQ status bits from channel 11
0 = No IRQ pending
11 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH10: Gathers all the after-masking CPU directed IRQ status bits from channel 10
0 = No IRQ pending
10 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH9: Gathers all the after-masking CPU directed IRQ status bits from channel 9
0 = No IRQ pending
9 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH8: Gathers all the after-masking CPU directed IRQ status bits from channel 8
0 = No IRQ pending
8 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH7: Gathers all the after-masking CPU directed IRQ status bits from channel 7
0 = No IRQ pending
7 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH6: Gathers all the after-masking CPU directed IRQ status bits from channel 6
0 = No IRQ pending
6 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH5: Gathers all the after-masking CPU directed IRQ status bits from channel 5
0 = No IRQ pending
5 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH4: Gathers all the after-masking CPU directed IRQ status bits from channel 4
0 = No IRQ pending
4 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH3: Gathers all the after-masking CPU directed IRQ status bits from channel 3
0 = No IRQ pending
3 X
1 = IRQ pending
0 = DISABLE
CH2: Gathers all the after-masking CPU directed IRQ status bits from channel 2
0 = No IRQ pending
2 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH1: Gathers all the after-masking CPU directed IRQ status bits from channel 1
0 = No IRQ pending
1 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH0: Gathers all the after-masking CPU directed IRQ status bits from channel 0
0 = No IRQ pending
0 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
18.2.5.5 APBDMA_IRQ_STA_COP_0
CH31: Gathers all the after-masking COP directed IRQ status bits from channel 31
0 = No IRQ pending
31 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH30: Gathers all the after-masking COP directed IRQ status bits from channel 30
0 = No IRQ pending
30 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH29: Gathers all the after-masking COP directed IRQ status bits from channel 29
0 = No IRQ pending
29 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH28: Gathers all the after-masking COP directed IRQ status bits from channel 28
0 = No IRQ pending
28 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH27: Gathers all the after-masking COP directed IRQ status bits from channel 27
0 = No IRQ pending
27 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH26: Gathers all the after-masking COP directed IRQ status bits from channel 26
0 = No IRQ pending
26 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH25: Gathers all the after-masking COP directed IRQ status bits from channel 25
0 = No IRQ pending
25 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH24: Gathers all the after-masking COP directed IRQ status bits from channel 24
0 = No IRQ pending
24 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH23: Gathers all the after-masking COP directed IRQ status bits from channel 23
0 = No IRQ pending
23 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH22: Gathers all the after-masking COP directed IRQ status bits from channel 22
0 = No IRQ pending
22 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH21: Gathers all the after-masking COP directed IRQ status bits from channel 21
0 = No IRQ pending
21 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH20: Gathers all the after-masking COP directed IRQ status bits from channel 20
0 = No IRQ pending
20 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH19: Gathers all the after-masking COP directed IRQ status bits from channel 19
0 = No IRQ pending
19 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH18: Gathers all the after-masking COP directed IRQ status bits from channel 18
0 = No IRQ pending
18 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH17: Gathers all the after-masking COP directed IRQ status bits from channel 17
0 = No IRQ pending
17 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH16: Gathers all the after-masking COP directed IRQ status bits from channel 16
0 = No IRQ pending
16 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH15: Gathers all the after-masking COP directed IRQ status bits from channel 15
0 = No IRQ pending
15 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
14 X CH14: Gathers all the after-masking COP directed IRQ status bits from channel 14
0 = No IRQ pending
CH13: Gathers all the after-masking COP directed IRQ status bits from channel 13
0 = No IRQ pending
13 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH12: Gathers all the after-masking COP directed IRQ status bits from channel 12
0 = No IRQ pending
12 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH11: Gathers all the after-masking COP directed IRQ status bits from channel 11
0 = No IRQ pending
11 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH10: Gathers all the after-masking COP directed IRQ status bits from channel 10
0 = No IRQ pending
10 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH9: Gathers all the after-masking COP directed IRQ status bits from channel 9
0 = No IRQ pending
9 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH8: Gathers all the after-masking COP directed IRQ status bits from channel 8
0 = No IRQ pending
8 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH7: Gathers all the after-masking COP directed IRQ status bits from channel 7
0 = No IRQ pending
7 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH6: Gathers all the after-masking COP directed IRQ status bits from channel 6
0 = No IRQ pending
6 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH5: Gathers all the after-masking COP directed IRQ status bits from channel 5
0 = No IRQ pending
5 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH4: Gathers all the after-masking COP directed IRQ status bits from channel 4
0 = No IRQ pending
4 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH3: Gathers all the after-masking COP directed IRQ status bits from channel 3
0 = No IRQ pending
3 X
1 = IRQ pending
0 = DISABLE
CH2: Gathers all the after-masking COP directed IRQ status bits from channel 2
0 = No IRQ pending
2 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH1: Gathers all the after-masking COP directed IRQ status bits from channel 1
0 = No IRQ pending
1 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
CH0: Gathers all the after-masking COP directed IRQ status bits from channel 0
0 = No IRQ pending
0 X 1 = IRQ pending
0 = DISABLE
1 = ENABLE
18.2.5.6 APBDMA_IRQ_MASK_0
CH31: Each bit allows the associated channel31 IRQ to propagate when '1'
31 X 0 = DISABLE
1 = ENABLE
CH30: Each bit allows the associated channel30 IRQ to propagate when '1'
30 X 0 = DISABLE
1 = ENABLE
CH29: Each bit allows the associated channel29 IRQ to propagate when '1'
29 X 0 = DISABLE
1 = ENABLE
CH28: Each bit allows the associated channel28 IRQ to propagate when '1'
28 X 0 = DISABLE
1 = ENABLE
CH27: Each bit allows the associated channel27 IRQ to propagate when '1'
27 X 0 = DISABLE
1 = ENABLE
CH26: Each bit allows the associated channel26 IRQ to propagate when '1'
26 X 0 = DISABLE
1 = ENABLE
CH25: Each bit allows the associated channel25 IRQ to propagate when '1'
25 X 0 = DISABLE
1 = ENABLE
CH24: Each bit allows the associated channel24 IRQ to propagate when '1'
24 X 0 = DISABLE
1 = ENABLE
CH23: Each bit allows the associated channel23 IRQ to propagate when '1'
23 X 0 = DISABLE
1 = ENABLE
22 X CH22: Each bit allows the associated channel22 IRQ to propagate when '1'
0 = DISABLE
CH21: Each bit allows the associated channel21 IRQ to propagate when '1'
21 X 0 = DISABLE
1 = ENABLE
CH20: Each bit allows the associated channel20 IRQ to propagate when '1'
20 X 0 = DISABLE
1 = ENABLE
CH19: Each bit allows the associated channel19 IRQ to propagate when '1'
19 X 0 = DISABLE
1 = ENABLE
CH18: Each bit allows the associated channel18 IRQ to propagate when '1'
18 X 0 = DISABLE
1 = ENABLE
CH17: Each bit allows the associated channel17 IRQ to propagate when '1'
17 X 0 = DISABLE
1 = ENABLE
CH16: Each bit allows the associated channel16 IRQ to propagate when '1'
16 X 0 = DISABLE
1 = ENABLE
CH15: Each bit allows the associated channel15 IRQ to propagate when '1'
15 X 0 = DISABLE
1 = ENABLE
CH14: Each bit allows the associated channel14 IRQ to propagate when '1'
14 X 0 = DISABLE
1 = ENABLE
CH13: Each bit allows the associated channel13 IRQ to propagate when '1'
13 X 0 = DISABLE
1 = ENABLE
CH12: Each bit allows the associated channel12 IRQ to propagate when '1'
12 X 0 = DISABLE
1 = ENABLE
CH11: Each bit allows the associated channel11 IRQ to propagate when '1'
11 X 0 = DISABLE
1 = ENABLE
CH10: Each bit allows the associated channel10 IRQ to propagate when '1'
10 X 0 = DISABLE
1 = ENABLE
CH9: Each bit allows the associated channel9 IRQ to propagate when '1'
9 X 0 = DISABLE
1 = ENABLE
CH8: Each bit allows the associated channel8 IRQ to propagate when '1'
8 X 0 = DISABLE
1 = ENABLE
CH7: Each bit allows the associated channel7 IRQ to propagate when '1'
7 X 0 = DISABLE
1 = ENABLE
CH6: Each bit allows the associated channel6 IRQ to propagate when '1'
6 X 0 = DISABLE
1 = ENABLE
CH5: Each bit allows the associated channel5 IRQ to propagate when '1'
5 X 0 = DISABLE
1 = ENABLE
4 X CH4: Each bit allows the associated channel4 IRQ to propagate when '1'
0 = DISABLE
CH3: Each bit allows the associated channel3 IRQ to propagate when '1'
3 X 0 = DISABLE
1 = ENABLE
CH2: Each bit allows the associated channel2 IRQ to propagate when '1'
2 X 0 = DISABLE
1 = ENABLE
CH1: Each bit allows the associated channel1 IRQ to propagate when '1'
1 X 0 = DISABLE
1 = ENABLE
CH0: Each bit allows the associated channel0 IRQ to propagate when '1'
0 X 0 = DISABLE
1 = ENABLE
18.2.5.7 APBDMA_IRQ_MASK_SET_0
18.2.5.8 APBDMA_IRQ_MASK_CLR_0
18.2.5.9 APBDMA_TRIG_REG_0
18.2.5.10 APBDMA_CHANNEL_TRIG_REG_0
18.2.5.11 APBDMA_DMA_STATUS_0
18.2.5.12 APBDMA_CHANNEL_EN_REG_0
18.2.5.13 APBDMA_SECURITY_REG_0
Security enables for each channel.
18.2.5.14 APBDMA_CHANNEL_SWID_0
SWID[0] for each APBDMA channel. Supports secure writes.
18.2.5.15 APBDMA_CHAN_WT_REG0_0
Channel weights for weighted-round-robin arbitration
18.2.5.16 APBDMA_CHAN_WT_REG1_0
Channel weights for weighted-round-robin arbitration
18.2.5.17 APBDMA_CHAN_WT_REG2_0
Channel weights for weighted-round-robin arbitration
18.2.5.18 APBDMA_CHAN_WT_REG3_0
Channel weights for weighted-round-robin arbitration
18.2.5.19 APBDMA_CHANNEL_SWID1_0
SWID[1] indicating secure ASID. Supports secure writes.
Each of the 32 APB DMA channels has its own set of 10 APB DMA registers. Each channel has 64 bytes of address space.
This subsection defines one complete set of APB DMA channel registers. The register spaces per APB DMA channel are
listed in the table below.
18.2.6.1 APBDMACHAN_CHANNEL_n_CSR_0
Writing a 1 to bit [31] of an APB DMA Channel Control Register will initiate the APB DMA transfer. Because this action will
depend on some values programmed in the other registers, it is recommended that the registers in the address space in the
required APB DMA channel be programmed before writing into control register.
In "Once" mode, the channel is disabled after the APB DMA transfer has completed. When the channel's transfer completes,
an interrupt will be sent if the IE.EOC bit is set. If the transfer requires a trigger or flow, then the corresponding trigger selected
by the "TRIG_SEL" or "REQ_SEL" field must become active respectively before the channel can starts its transfer. If both
Trigger and Flow bits are set, both conditions must be met before the channel starts each DMA burst.
ONCE: Run Once or Run Multiple Mode (Allow Retriggering of this Channel).
0 = Run for Multiple Block Transfers
27 0x0 1 = Run for One Block Transfer.
0 = MULTIPLE_BLOCK
1 = SINGLE_BLOCK
REQ_SEL:
0 = CNTR_REQ
1 = APBIF_CH0
2 = APBIF_CH1
3 = APBIF_CH2
4 = APBIF_CH3
5 = HSI
6 = APBIF_CH4
7 = APBIF_CH5
20:16 0x0 8 = UART_A
9 = UART_B
10 = UART_C
11 = DTV
12 = APBIF_CH6
13 = APBIF_CH7
14 = APBIF_CH8
15 = SL2B1
16 = SL2B2
17 = SL2B3
18.2.6.2 APBDMACHAN_CHANNEL_n_STA_0
PING_PONG_STA:
• If dir = AHB_WRITE:
0 - Ping buffer transfer completed; 1 - Pong buffer transfer completed.
28 RO X • If dir = AHB_READ:
0 - Pong buffer transfer completed ; 1 - Ping buffer transfer completed ;
0 = PING_INTR_STA
1 = PONG_INTR_STA
18.2.6.3 APBDMACHAN_CHANNEL_n_DMA_BYTE_STA_0
31:0 X DMA_COUNT: Indicates the actual DMA Data Transfer Count in bytes
18.2.6.4 APBDMACHAN_CHANNEL_n_CSRE_0
18.2.6.5 APBDMACHAN_CHANNEL_n_AHB_PTR_0
31:2 0x0 AHB_BASE: APB-DMA Starting Address for AHB Bus: Software writes to modify
18.2.6.6 APBDMACHAN_CHANNEL_n_AHB_SEQ_0
AHB_DATA_SWAP: When enabled, the data going to AHB gets swapped as [31:0] -->
{[7:0], [15:8], [23:16], [31:24] }.
27 0x0
0 = DISABLE
1 = ENABLE
DBL_BUF: 2X Double Buffering Mode (for Run-Multiple Mode with No Wrap Operations).
1 = Reload Base Address for 2X blocks (reload every other time).
0 = Reload Base Address for 1X blocks (default) (reload each time)
19 0x0
0 = RELOAD_FOR_1X_BLOCKS
1 = RELOAD_FOR_2X_BLOCKS
WRAP: AHB Address Wrap: AHB Address wrap-around window. 0=No Wrap (default).
5=Wrap on 512 word window. 1=Wrap on 32 word window. 6=Wrap on 1024 word window.
2=Wrap on 64 word window. 7=Wrap on 2048 word window. 3=Wrap on 128 word window.
4=Wrap on 256 word window
0 = NO_WRAP
1 = WRAP_0N_32WORDS
18:16 0x0
2 = WRAP_ON_64WORDS
3 = WRAP_ON_128WORDS
4 = WRAP_ON_256WORDS
5 = WRAP_ON_512WORDS
6 = WRAP_ON_1024WORDS
7 = WRAP_ON_2048WORDS
18.2.6.7 APBDMACHAN_CHANNEL_n_APB_PTR_0
18.2.6.8 APBDMACHAN_CHANNEL_n_APB_SEQ_0
APB_BUS_WIDTH:
0 = 8-bit bus.
1 = 16-bit bus.
2 = 32-bit bus (default)
3 = 64-bit bus. (RSVD).
4 = 128-bit bus (RSVD)
30:28 0x2
0 = BUS_WIDTH_8
1 = BUS_WIDTH_16
2 = BUS_WIDTH_32
3 = BUS_WIDTH_64
4 = BUS_WIDTH_128
APB_DATA_SWAP: When enabled, the data going to the APB gets swapped as [31:0] -->
{[7:0], [15:8], [23:16], [31:24] }.
27 0x0
0 = DISABLE
1 = ENABLE
18.2.6.9 APBDMACHAN_CHANNEL_n_WCOUNT_0
18.2.6.10 APBDMACHAN_CHANNEL_n_WORD_TRANSFER_0
TEGRA PCB
PLLE PLLU
USB connector
SS
(SS0)
100 MHz
USB connector
USB 3.0 SS
Controller (SS1)
(XUSB) 100 MHz
USB connector
UTMIP
USB 2.0 (USB0)
Controller #1 12 MHz
(USB_OTG)
12 MHz USB connector
UTMIP1
(USB1)
USB 2.0
Controller #2 480 MHz
(USB2) UHSIC HSIC
(HSIC0) Peripheral/Host
12 MHz
USB connector
UTMIP2
(USB2)
USB 2.0
Controller #3
(USB3) 480 MHz
UHSIC1 HSIC
(HSIC1) Peripheral/Host
§ USB_OTG and UTMIP: This is the primary USB port that supports OTG. USB recovery is also supported on this
interface.
§ USB2 and UHSIC: This interface allows connection of an HSIC peripheral/host on the PCB board.
§ USB2 and UTMIP1: This interface allows an additional USB port. It supports host mode of operation.
§ USB3 and UHSIC1: This interface allows connection of an HSIC peripheral/host on the PCB board.
§ USB3 and UTMIP2: This interface allows an additional USB port. It supports host mode of operation.
§ XUSB and UTMIP2. XUSB can support multiple interfaces at the same time.
§ XUSB and UTMIP1. XUSB can support multiple interfaces at the same time.
§ XUSB and UTMIP. XUSB can support multiple interfaces at the same time.
§ XUSB and SS. XUSB can support multiple interfaces at the same time.
USB_OTG supports 16 bidirectional endpoints in device mode, where USB2 and USB3 should never be advised or
programmed to support device mode. Endpoint 0 of USB_OTG is always a bidirectional control endpoint. All other endpoints
can be programmed as one of Bulk, Interrupt, Isochronous, or Control type in either direction. Control endpoints are always
bidirectional and hence to program an endpoint as control type, both IN and OUT directions need to be programmed to control
type. Conversely, if an endpoint has either IN or OUT direction programmed to be non-control type, the other direction also
needs to be programmed to be non-control type. The maximum packet size supported on any endpoint is 1024 bytes in high-
speed mode, for both device and host modes.
The Tegra K1 device supports peripheral functionalities with USB 2.0 controller #1, which implements VBUS and ID sensing
capabilities and associated interrupt mechanisms to support for device and host OTG operations with the regular USB 2.0
port. Tegra K1 devices support battery charging charger detection capabilities and associated interrupt mechanisms that are
compliant with USB Battery Charging specification version 1.2 with USB 2.0 controller #1. For battery charging, software
programming sequences are required to support the operations in response to hardware notifications from USB 2.0 controller
#1.
All 3 USB 2.0 controllers support the EHCI programming model for scheduling transactions and interface managements as
hosts. Each USB 2.0 controller contains an integrated transaction translator hub to support USB 1.1 transactions when
connected to a USB 1.0 peripheral. USB 2.0 controller #1 supports EHCI-like programming models for scheduling responses
to host requests.
Tegra K1 USB 2.0 controllers support L1 and L2 (suspend) link power managements. Tegra K1 USB 2.0 controllers support
remote wakeup, wake on connect, wake on disconnect, and wake on overcurrent in all Tegra K1 power states, including deep
sleep mode.
USB 2.0 Controller #1 supports both USB 2.0 device and USB 2.0 host operations. USB recovery is supported only with USB
2.0 Controller #1 and USB 2.0 Port #1.
Wake-up from deep sleep mode is also supported on VBUS and accessory detect (ACCx_DETECT) pins. Power and Ground
pins for USB1 and USB3 are shared.
HSIC
USB 2.0 Controller #2 can be configured to use HSIC interface #1 that allows connection of an on-board peripheral supporting
an HSIC interface to the Tegra K1 device. HSIC can be used to support baseband controllers that support an HSIC interface.
HSIC
USB 2.0 Controller #3 can be configured to use the HSIC #2 interface that allows connection of an on-board peripheral
supporting an HSIC interface to the Tegra K1 device. HSIC can be used to support baseband controllers that support an HSIC
interface.
On power-on-reset, the default interface for USB 2.0 controller #2 is the UTMIP interface, and the default interface of USB 2.0
controller #3 is the UTMIP interface.
§ Host controller registers and data structures are implemented as standard EHCI programming interface.
§ Host controller supports USB 1.1 Full and Low speed devices via integrated transaction translator hub through
EHCI standard data structures, instead of utilizing companion USB 1.1 host controller.
§ Device controller registers and data structures are implemented as extensions to the EHCI programmers
interface.
Figure 39 illustrates the control and datapaths block diagram of USB 2.0 controllers.
The maximum packet size supported on any endpoint is 1024 bytes in high-speed mode.
The following figure illustrates the connection between USB 3.0 controllers and USB interfaces in Tegra K1 devices, where
each USB 3.0 receptacle must encompass 1 USB 3.0 port and 1 USB 2.0 port from the USB 3.0 controller. USB 3.0 Controller
shares the same USB 2.0 Port #1, #2, and #3 pins with USB 2.0 controllers #1, #2, and #3. The pinmux must be programmed
prior to USB 3.0 Controller using USB 2.0 Port #1, #2, or #3.
MUX
AHB
MUX USB2
PAD
USB 3.0 (XUSB) Controller
Device
USB2 P0 PAD
IPFS Controller SS P0
SS P1
MCCIF
MUX USB3/
SATA
PAD
MUX USB3/
PCIE
PAD
AXI
The USB 3.0 controllers support the xHCI programming model for scheduling transactions and interface managements as a
host that natively supports USB 3.0, USB 2.0, and USB 1.1 transactions with its USB 3.0 and USB 2.0 interfaces.
The Tegra K1 USB 3.0 controller supports USB 2.0 L1 and L2 (suspend) link power management and USB 3.0 U1, U2, and
U3 (suspend) link power managements. The Tegra K1 USB 3.0 controller supports remote wakeup, wake on connect, wake
on disconnect, and wake on overcurrent in all Tegra K1 power states, including deep sleep mode.
All USB 2.0 ports operating in High Speed mode share one High Speed Bus Instance, which means 480 Mb/s theoretical
bandwidth is distributed across these ports. All USB 2.0 ports operating in Full or Low Speed modes share one Full/Low
Speed Bus Instance, which means 12 Mb/s theoretical bandwidth is distributed across these ports.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 977
Tegra K1 Technical Reference Manual
USB Complex
USB 2.0 ports of the USB 3.0 controller support software initiated L1 and L2 (suspend) link power management. USB 2.0 ports
of the USB 3.0 controller do not support hardware initiated L1 link power management.
USB 3.0 ports of the USB 3.0 controller support hardware initiated U1 and U2 link power management as well as software
initiate U3 (suspend) link power management.
Falcon Microcontroller
The Tegra K1 USB 3.0 controller integrated an NVIDIA Falcon microcontroller to perform the following tasks:
§ Endpoint scheduling
Similarly, if the USB3.0 interface signals are used to connect to a peripheral on the system board, such as a USB3.0 hub, the
USB2.0 signals connecting to that peripheral must be assigned to the USB3.0 controller.
Micro-Controller
§ Command handlings
§ Event generations
§ Endpoint scheduling
The USB PADCTL also provides the programming interface to configure the pad parameters for the USB 3.0 pad and the USB
2.0 pad for the USB 2.0 port that is assigned to USB 3.0 controller.
The following figure illustrates the connection between USB PADCTL and USB interfaces in a Tegra K1 device.
MUX
USB 2.0 Controller #2
AHB HSIC P0
USB Controller USB2 P1
Device
USB2 P0 PAD
IPFS Controller SS P0
SS P1
MCCIF
MUX USB3/
SATA SATA
x1
PAD
IPFS AHCI
Controller SATA Ch0
MUX USB3/
PCIE PCIE
PCIE Lane 0 x5
TMS0 PCIE Lane 1 PAD
AXI
USB PADCTL
Clock Initialization
After power-on-reset, the USB clocks are disabled. Software can enable the USB clocks by setting CLK_ENB_USBD in the
CLK_OUT_ENB_L register to ENABLE. Also, the USB controller stays in reset. Software should bring it out of reset by first
setting SWR_USBD_RST in the RST_DEVICES_L register to ENABLE and then setting it to DISABLE.
Some parameters in UTMIP need to be programmed before the UTMIP can be brought out of reset. These parameters need
to be programmed every time the USB controller is reset: the SWR_USBD_RST in RST_DEVICES_L register and RST in the
USB2D_USBCMD register.
After UTMIP is reset, the PHY clock takes some time to come up, so software must wait until the USB_PHY_CLK_VALID bit in
the USB_SUSP_CTRL register becomes valid. This bit, when set to 1, also generates an interrupt if RSM_IE is set in the
USB_SUSP_CTRL register.
Tegra K1 devices have a VBUS pin connected to the UTMIP, and VBUS pin from the connector should be connected to this
pin even though VBUS from the connector is connected to a GPIO. It is not required that VBUS from the connector directly
connect to the VBUS pin. It is required that its voltage is above 3V when VBUS is on.
Both VBUS and ID are available as a wake-up event during DPD/LP0 state. USB bus D+/D- line wake events are also
available as a DPD/LP0 state. Refer to the PMC section for more information.
When a user attaches the USB cable, one of the following two events occur:
1. The user connects the micro-A end of the cable to the Tegra K1 device. This changes the ID pin to 0. Hence software
can detect the ID change and go to A-device mode. Software can then supply power to the USB and place the Tegra
K1 device in host mode.
2. The user connects micro-B (or mini-B) end of the cable to the Tegra K1 device. The other end of the cable can be
either micro-A or standard-A and is connected to an OTG host or a standard host, respectively. For both cases, the
Host starts driving power on VBUS and software can detect the cable insertion event by checking that the voltage on
VBUS has gone above the A_Sess_Vld level by reading the A_VBUS_VLD_STS bit in the
USB_PHY_VBUS_SENSORS register. Once this is seen, it can place the Tegra K1 device in the device mode.
Notes:
2. VBUS change can be detected by enabling the interrupt A_VBUS_VLD_INT_EN in the USB_PHY_VBUS_SENSORS
register.
3. The USB controller and PHY clocks need not be turned on for this detection.
4. To detect these events during DPD/LP0 modes, use VBUS/ID wakeup events in the PMC.
To turn on the PHY clock, software should write to SUSP_CLR in the USB_SUSP_CTRL register. This bit must be pulsed by
first writing a 1 and then writing a 0 to the bit.
The current suspend status of the PHY can be checked by the USB_PHY_CLK_VALID bit of the USB_SUSP_CTRL register.
If this bit is 1, the PHY clock is turned on; otherwise it is off.
The PHY clock can be turned on automatically on the events mentioned below. Set only the required wakeup enable bits
based on the state of the USB as mentioned below. Do not set unnecessary wakeup enable bits. When the PHY clock wakes
up under any such event, make sure that the wakeup enable bits are turned off as soon as possible.
There is an interrupt generated whenever the PHY clock is turned on which can be checked by checking that the value of
USB_PHY_CLK_VALID in the USB_SUSP_CTRL register is 1. The interrupt can be enabled/disabled by setting the RSM_IE
bit in USB_SUSP_CTRL to 1/0.
Notes:
1. The PLLU_ENABLE bit in the PLLU_BASE register should be always set to ENABLE. All parameters for PLLU in the
PLLU_BASE and PLLU_MISC registers should be set according to the oscillator frequency used. Not doing that will
put the USB PHY PLL in a free-running mode, and can result in undesirable side effects.
2. When the USB PHY is suspended, the PCLK should not be stopped. It can be reduced to 32 KHz, however. If the
system clock is stopped, then it might not be possible to bring up the system on a wakeup event described below.
There are two cases to consider for controlling the PHY clocks depending on whether the Tegra K1 processor is in device or
host mode.
Device Mode
The PHY clock can be turned off in two cases:
§ When the USB cable is not connected, the VBUS signal is 0. In this case, software needs to turn on the PHY
clock on cable insertion. Follow the procedure described above in “Detection of USB Cable Insertion”.
§ When the USB cable is connected, the PHY clock can only be turned off when the SLI bit in the
USB2D_USBSTS register is set to 1 when the USB Host puts the USB bus in suspend mode. This bit can be
used to generate an interrupt if the SLE bit in the USB2D_USBINTR register is set to 1.
In this case, software needs to set two bits in the USB_SUSP_CTRL register to turn on the PHY clock on a USB
resume or a USB reset event from USB Host: WAKE_ON_DISCON_EN (Wake on Disconnect enable) and
WK_RSM_EN (Wake on Resume enable).
If WK_RSM_EN (bit 8) in the USB_SUSP_CTRL register is set to 1, the PHY clock can be turned on
automatically on receiving a USB resume event from the USB Host. If WAKE_ON_DISCON_EN in the
USB_SUSP_CTRL register is set to 1, the PHY clock can be turned on automatically on receiving a USB reset
event from the USB Host or if the USB cable is disconnected. These bits should only be turned on after the PHY
clock is turned off. The method described above can be used to interrupt the processor when the PHY clock is
turned on. Also, turn off these bits when coming out of the suspend state.
Host Mode
When a device is not connected, software can set the WKCN bit in USB2D_PORTSC1 register. Make sure that VBUS is also
turned on. After this, it can stop the PHY clock by using the method described above. The PHY clock resumes automatically
when a device is connected. The method described above can be used to interrupt the processor when the PHY clock is
turned on.
With a device connected, software needs to put the USB system in the suspend state by setting the SUSP bit in the
USB2D_PORTSC1 register. It needs to wait until this bit is set to 1 by the controller to make sure that the USB system actually
went into the suspend state. It can enable the WK_RSM_EN bit in the USB_SUSP_CTRL register and the WK_DS bit in the
USB2D_PORTSC1 register. Then it can stop the PHY clock as described above. The PHY clock is turned on automatically if
the USB device disconnects or it does a remote wakeup signaling. There is an interrupt associated with this as described
above.
If the software wants to wake up the USB system, then it needs to turn on the PHY clock as described above.
4. Wait for 10 microseconds more to give time for any filtering to pass through so software does not read the wrong
values.
9. For A1, A2, A3, or A4, enable charging current per the connected charger’s requirement (A1, A2, A3, or A4).
11. For case 1, 2, or 3, enable charging current as per that charger’s requirement. This can vary for every
implementation.
12. For case 4, the connection is to either a PC host or charger_4 (which could be a USB compliant charger as well). Go
to step 15.
13. Set the USB circuit to low-power mode now. Make sure the charger circuit does not change state.
15. Check for connection to a USB compliant charger by doing the charger detection from VBAT register. If yes, go back
to step 8. If not, continue to the next step.
16. Set the USB controller to device mode and enable it by setting it to RUN mode. Wait for SOF.
17. If an SOF is not seen after timeout, then the connection is to charger_4. Set the current limit as required for that
charger. Go to step 7.
1. Make sure the UTMIP_PD_CHRG bit in the UTMIP_BAT_CHRG_CFG0_0 register is set to 0, so that charger
detection circuit is on.
3. Wait for about 10 microseconds to allow the battery charger detector to settle.
4. Now check that the VDCD_DET_CHG_DET bit is 1, and the VDCD_DET_STS bit is 0 in the
USB_PHY_VBUS_WAKEUP_ID register. This ensures that the data pins have made contact.
UTMIP_OP_SRC_EN = 1
UTMIP_ON_SINK_EN = 1
UTMIP_OP_SINK_EN = 0
UTMIP_ON_SRC_EN = 0
7. Wait for about 10 microseconds to allow the battery charger detector to settle.
8. Now check that the VDAT_DET_CHG_DET and VDAT_DET_STS bits in the USB_PHY_VBUS_WAKEUP_ID
register are set to 1. This indicates connection to a USB compliant dedicated charger that supports up to 1.5A
current. If these bits are not set, then the connection is to a PC host, where the downstream port may support
charging.
UTMIP_OP_SRC_EN = 0
UTMIP_ON_SINK_EN = 0
UTMIP_OP_SINK_EN = 1
UTMIP_ON_SRC_EN = 1
10. Wait for about 10 microseconds to allow the battery charger detector to settle.
11. Now check that the VDAT_DET_CHG_DET and VDAT_DET_STS bits in the USB_PHY_VBUS_WAKEUP_ID
register are both set to 1. This indicates connection to a USB compliant dedicated charger that supports up to 1.5A
current. If these bits are not set, then the connection is to a PC host, where the downstream port supports a standard
500mA current when the high power device is enumerated.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 984
Tegra K1 Technical Reference Manual
USB Complex
UTMIP_OP_SRC_EN = 0
UTMIP_ON_SINK_EN = 0
UTMIP_OP_SINK_EN = 0
UTMIP_ON_SRC_EN = 0
CONTROLLER_USB2D_USBCMD_0.HIRD
The following software walk-around is required to extend the resume signaling if required.
UTMIP_MISC_CFG0_0.UTMIP_DPDM_OBSERVE = 1
UTMIP_MISC_CFG0_0.UTMIP_DPDM_OBSERVE_SEL = 0xE
3. Wait the required time following the encoding of the HIRD value
UTMIP_MISC_CFG0_0.UTMIP_DPDM_OBSERVE = 0
6. Wait for hardware to finish driving resume signaling by checking the following bit:
7. Wait 50 µs
CONTROLLER_USB2D_HOSTPC1_DEVLC_0. EPLPM = 0
Software should then set the following register bit to initiate L1 entry:
CONTROLLER_USB2D_PORTSC1_0.SUSP = 1
Software can check the following registers to ensure the link has entered L1:
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 985
Tegra K1 Technical Reference Manual
USB Complex
If L1 cannot be entered successfully, the bus stays in the L0 state. Hardware will generate a port change interrupt when L1
entry fails. So software can check the following registers for the reason of the failed entry. Software can retry the L1 entry later
if the reason is NYET_PERIPH, where the peripheral indicates it is not ready to put the bus into L1.
= L1STATE_NOT_SUPPORTED (2),
= PERIPH_NORESP_ERR (3),
When the bus is in the L1, software can set the following register at any time to bring the link back to the L0 state.
CONTROLLER_USB2D_HOSTPC1_DEVLC_0. EPLPM = 0
CONTROLLER_USB2D_HOSTPC1_DEVLC_0. LPMFRM = X
Software should then set the following register bit to enabled hardware initiated L1 entry:
CONTROLLER_USB2D_HOSTPC1_DEVLC_0. LPMX = 1
CONTROLLER_USB2D_USBMODE_0.SDIS
Enabling streaming mode allows lower latency and higher bandwidth of USB transfers but requires lower system memory
latency.
Long system memory latency might cause TX buffer underrun/RX buffer overrun when streaming mode is enabled. Streaming
mode should be kept enabled when USB controller is initialized and streaming mode should only be disabled if it is determined
the system latency does cause the buffer overrun/underrun issues.
Also, USB stays in reset. So software should bring it out of reset by first setting the SWR_USBD_RST in RST_DEVICES_L
register to ENABLE and then setting it to DISABLE.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 986
Tegra K1 Technical Reference Manual
USB Complex
After the clocks for USB2 are up, software can program any register for USB2 required for proper configuration.
PLLU outputs a 480 MHz clock (FO_UHSIC) for the UHSIC interface. If using any of these interfaces, PLLU should be
programmed appropriately.
Any time after USB2 is reset, or the UHSIC PHY comes out of suspend, software needs to wait until ULPI/UHSIC PHY clock
comes up. It can do that by checking for USB_PHY_CLK_VALID bit in USB2_IF_USB_SUSP_CTRL register. If this bit is 1,
PHY clocks are up; otherwise, they are not. There are interrupts associated with this bit: if USB_PHY_CLK_VALID_INT_ENB
is set to ENABLE, USB_PHY_CLK_VALID_INT_STS will be set to SET whenever the PHY clock becomes valid. Software can
write a 1 to USB_PHY_CLK_VALID_INT_STS to clear the interrupt status.
Before doing anything useful on USB2, one of its interfaces needs to be selected and configured.
4. Hold UTMIP2 PHY in reset by writing a 1 to the UTMIP_RESET bit in the IF_USB_SUSP_CTRL register.
8. Release reset to UTMIP2 by writing 0 to the UTMIP_RESET field in the IF_USB_SUSP_CTRL register.
9. Wait until the PHY clock comes up by checking the USB_PHY_CLK_VALID bit in the IF_USB_SUSP_CTRL register.
An interrupt can be generated as explained above.
11. Program the USB2 controller to use UTMIP2 PHY by setting the PTS field in the
CONTROLLER_2_USB2D_HOSTPC1_DEVLC register to UTMIP (2’b00).
2. Bring the tracking circuit out of power-down mode by clearing the PD_TRK bit.
5. Hold UHSIC in reset by writing 1 to the UHSIC_RESET field in the IF_USB_SUSP_CTRL register.
7. Select the UHSIC interface by writing 1 to the UHSIC_PHY_ENB field in the IF_USB_SUSP_CTRL register.
9. Release reset to the UHSIC by writing 0 to the UHSIC_RESET field in the IF_USB_SUSP_CTRL register.
11. Program the USB2 controller to use the UHSIC PHY by writing 0 to the PTS field in the
CONTROLLER_1_USB2D_HOSTPC1_DEVLC register.
13. Wait until the PHY clock comes up by checking the USB_PHY_CLK_VALID bit in the IF_USB_SUSP_CTRL register.
An interrupt can be generated as explained above.
To turn on the PHY clock, software should write to USB_SUSP_CLR in USB2_IF_USB_SUSP_CTRL register. This bit must
be pulsed by first writing a 1 and then writing a 0 to the bit.
Whenever the PHY is placed in the suspend mode, the PHY clock is turned off and USB_PHY_CLK_VALID in the
USB2_IF_USB_SUSP_CTRL register is set to 0. Software should make sure that the PHY clock shuts down by polling this bit
whenever it places the PHY into suspend mode.
The PHY clock can be turned on automatically on the events mentioned below. Set only the required wakeup enable bits
based on the state of the USB as mentioned below. Do not set unnecessary wakeup enable bits. When the PHY clock wakes
up under any such event, make sure that the wakeup enable bits are turned off as soon as possible.
To prevent the PHY clock from waking up on unnecessary glitches on the USB pins, software can set the
USB_WAKEUP_DEBOUNCE_COUNT field in the USB_SUSP_CTRL register to a non-zero value (between 1-7). This will
allow the wakeup event to be debounced by the equivalent number of HCLK cycles.
An interrupt is generated whenever the PHY clock is turned on, which can be checked by checking the value of
USB_PHY_CLK_VALID in the USB_SUSP_CTRL register to be 1. The interrupt can be enabled/disabled by setting the
USB_PHY_CLK_VALID_INT_ENB bit in the USB_SUSP_CTRL register to 1/0.
Generally, whenever the PHY is woken up from the suspend mode, first a wakeup event is generated
(USB_WAKEUP_INT_STS = 1) followed by a PHY clock valid interrupt (USB_PHY_CLK_VALID_INT_STS = 1) when PHY
clock starts up.
1. Check if PortReset (the PR bit in the USB2D_PORTSC1 register) is NOT active. If by any means a bus reset is
already taking place, it must be stopped before proceeding. This is done by clearing the bit and polling until it goes
LOW.
2. Enable the “PortReset” bit - Start the HSIC bus reset on a downstream port by activating the PR bit of the
USB2D_PORTSC1 register.
3. Wait until the end of the reset. This wait time is defined by the USB 2.0 specification and has the effect of holding the
reset signaling on the HSIC bus.
4. Clear the PR bit.Stop the reset signaling by clearing the respective port reset bit.
5. Poll until the reset bit goes LOW to guarantee that the reset bit is effectively cleared;
6. Poll until LineState is DPlus.This confirms that the reset signaling has really finished on the HSIC bus and that the
USB2 controller is ready to connect again.
7. Proceed with the “HOST Bus Connect Sequence” as described above. From here on, the procedure is the same as
with an initial connect, instructing the USB2 controller to enter HS directly, skipping speed negotiation.
8. Standard EHCI reset interrupt can be used in Tegra K1 HSIC because native HSIC support is built-in.
Also, USB3 stays in reset at power-on and software should bring it out of reset by first setting SWR_USB3_RST in
RST_DEVICES_H register to ENABLE and then set it to DISABLE.
After the clocks for USB3 are up, software can program any registers for USB3 required for proper configuration.
PLLU outputs a 60 MHz clock FO_ICUSB for ICUSB interface and a 12 MHz clock FO_USB for UTMIP3 interface. If any of
these interfaces are used, PLLU should be programmed appropriately.
Any time after USB3 is reset or ICUSB/UTMIP3 PHY comes out of suspend, software needs to wait until ICUSB/UTMIP3 PHY
clock comes up. It can do that by checking the USB_PHY_CLK_VALID bit in the USB3_IF_USB_SUSP_CTRL register. If this
bit is 1, the PHY clocks are up; otherwise they are not. There are interrupts associated with this bit: if
USB_PHY_CLK_VALID_INT_ENB is set to ENABLE, USB_PHY_CLK_VALID_INT_STS will be set to SET whenever PHY
clock becomes valid. Software can write a 1 to USB_PHY_CLK_VALID_INT_STS to clear the interrupt status.
Before doing anything useful on USB2, one of its interfaces needs to be selected and configured.
2. Hold UTMIP3 PHY in reset by writing the UTMIP_RESET bit in the IF_USB_SUSP_CTRL register to 1.
6. Release the reset to UTMIP3 by writing 0 to the UTMIP_RESET field in the IF_USB_SUSP_CTRL register.
7. Wait until the PHY clock comes up by checking the USB_PHY_CLK_VALID bit in the IF_USB_SUSP_CTRL register.
An interrupt can be generated as explained above.
9. Program the USB3 controller to use UTMIP3 PHY by setting the PTS field in
CONTROLLER_2_USB2D_HOSTPC1_DEVLC register to UTMIP (2’b00).
2. Bring the tracking circuit out of power-down mode by clearing the PD_TRK bit.
5. Hold UHSIC in reset by writing 1 to the UHSIC_RESET field in the IF_USB_SUSP_CTRL register.
7. Select the UHSIC interface by writing 1 to the UHSIC_PHY_ENB field in the IF_USB_SUSP_CTRL register.
9. Release reset to the UHSIC by writing 0 to the UHSIC_RESET field in the IF_USB_SUSP_CTRL register.
11. Program the USB3 controller to use the UHSIC PHY by writing 0 to the PTS field in the
CONTROLLER_1_USB2D_HOSTPC1_DEVLC register.
13. Wait until the PHY clock comes up by checking the USB_PHY_CLK_VALID bit in the IF_USB_SUSP_CTRL register.
An interrupt can be generated as explained above.
When a user attaches the USB cable, one of the following two events occur:
§ User connects micro-A end of the cable to the Tegra K1 device. This changes the ID pin to 0. Hence the
software can detect the ID change and go to A-device mode. Software can then supply power to the USB and
place the Tegra K1 device in host mode.
§ User connects micro-B (or mini-B) end of the cable to the Tegra K1 device. The other end of the cable can be
either micro-A or standard-A and will be connected to a standard host, respectively.
For both cases, the Host will start driving power on VBUS and software can detect the cable insertion event by checking the
VBUS status on corresponding GPIO. Once this is seen, it can place the Tegra K1 device in the device mode.
Note: Both ID and VBUS changes can be detected by enabling the corresponding GPIO
interrupts.
USB controller/PHY clocks do not need to be turned on for this detection as this is done
using GPIOs.
To detect these events during DPD/LP0 modes, use VBUS/ID wakeup events in the PMC.
To turn on the PHY clock, software should write to SUSP_CLR in the USB3_IF_USB_SUSP_CTRL register. This bit must be
pulsed by first writing a 1 and then writing a 0 to it.
The current suspend status of the PHY and thereby whether the PHY clock is running can be checked by reading the bit
USB_PHY_CLK_VALID in USB_SUSP_CTRL register. If the PHY is placed in suspend, then this bit will be set to 0, else it will
be set to 1. Software should make sure that PHY clock shuts down by polling this bit whenever it places the PHY into suspend.
The PHY clock can be turned on automatically on the events mentioned below. Set only the required wakeup enable bits
based on the state of the USB as mentioned below. Do not set unnecessary wakeup enable bits. When the PHY clock wakes
up under any such event, make sure that the wakeup enable bits are turned off as soon as possible.
To prevent the PHY clock from waking up on unnecessary glitches on the USB pins, software can set the
USB_WAKEUP_DEBOUNCE_COUNT field in USB_SUSP_CTRL register to a non-zero value (between 1-7). This will allow
the wakeup event to be debounced by the equivalent number of HCLK cycles.
An interrupt is generated whenever the PHY is woken up from suspend, which can be verified by checking that the value of
USB_WAKEUP_INT_STS in USB_SUSP_CTRL register is 1. The interrupt can be enabled/disabled by setting the bit
USB_WAKEUP_INT_ENB in USB_SUSP_CTRL to 1/0.
An interrupt is generated whenever the PHY clock is turned on, which can be verified by checking that the value of
USB_PHY_CLK_VALID_INT_STS in the USB_SUSP_CTRL register is 1. The interrupt can be enabled/disabled by setting the
USB_PHY_CLK_VALID_INT_ENB bit in the USB_SUSP_CTRL register to 1/0.
To clear the USB_WAKEUP_INT_STS and USB_PHY_CLK_VALID_INT_STS interrupts, software can write a 1 to the
corresponding bits.
Generally, whenever PHY is woken up from suspend, first a wakeup event is generated (USB_WAKEUP_INT_STS = 1)
followed by a PHY clock valid interrupt (USB_PHY_CLK_VALID_INT_STS = 1) when the PHY clock starts up.
Note: The PLLU_ENABLE bit in PLLU_BASE register should be always set to ENABLE. All the
parameters for PLLU in PLLU_BASE and PLLU_MISC register should be set according to
the oscillator frequency used. Not doing that will put the USB PHY PLL in a free-running
mode, and can result in undesirable side-effects.
When the USB PHY is suspended, the USB3 clock should not be stopped. It can be
reduced to 32 KHz, however. If the system clock is stopped, then it may not be possible to
bring up the system on a wakeup event described below.
When USB3 is in suspend, AHB clocks to USB3 controller are turned off, and hence there
should be no register access to USB2_CONTROLLER_2_* registers. All registers marked
as ARUSB3_IF_* are accessible, and can be used to resume the UTMIP3 PHY clocks.
When a device is not connected, software can set the WKCN bit in USB2D_PORTSC1 register. Make sure that VBUS is also
turned on. After this, it can stop the PHY clock by using the method described above. The PHY clock will resume automatically
when a device is connected. The method described above can be used to interrupt the processor when the PHY clock is
turned on.
With a device connected, software needs to put the USB system under suspend by setting the bit SUSP in USB2D_PORTSC1
register. It needs to wait until this bit is set to 1 by the controller to make sure that the USB system actually went into suspend.
It can enable the bits USB_WAKE_ON_RESUME_EN in USB_SUSP_CTRL register and WK_DS in USB2D_PORTSC1
register. Then it can stop the PHY clock as described above. The PHY clock will be turned on automatically if the USB device
disconnects or it does a remote wakeup signaling. There will be an interrupt associated with this as described above.
If the software wants to wake up the USB system, it needs to turn on the PHY clock as described above.
2. Set and clear the SWR_USB3_RST bit in the RST_DEVICES_H register to bring the USB block out of reset.
3. Set the UTMIP_RESET bit in the USB_SUSP_CTRL register to 1 to keep UTMIP3 PHY in reset.
5. Set the UTMIP_RESET bit in the USB_SUSP_CTRL register to 0 to bring UTMIP3 out of reset.
6. Set USB controller and PHY to suspend by writing 1 to PHCD in USB2D_PORTSC1 register. This will reduce the
power consumption on USB3 controller and UTMIP3 PHY.
7. Set all PD bits required to bring USB pads to low power mode.
§ If using VBUS_WAKEUP for VBUS detection, then UTMIP_BIASPD in UTMIP_BIAS_CFG0 can be set to 1 to
save power. But if using A_SESS_VLD or any other VBUS sensor for VBUS detection, then this bit should be set
to 0.
8. To interrupt the processor on VBUS or ID detection, software can set the following:
§ Enable appropriate VBUS interrupt enable, for example, I using A_SESS_VLD sensor for VBUS detection, set
A_SESS_VLD_INT_EN in the USB_PHY_VBUS_SENSORS register to 1.
§ Bring the USB3 controller and PHY out of suspend mode by pulsing the SUSP_CLR in USB_SUSP_CTRL
register by first writing 1 and then writing 0.
§ Clear the PD bits that are required for the normal operation.
10. From this point on, the driver can run normal operations.
§ UTMIP should only be suspended by writing 1 to PHCD in the USB2D_PORTSC1 register when the USB cable
is connected and only after the USB bus is suspended, for both device and host modes.
11. If a cable disconnect is detected (VBUS = 0) or (ID = 1), then go back to step 4.
Table 66: 480 MHz PLL_U Output Frequency Fo = (Fi·N)÷(M· 2) With VCO_FREQ=0
Fi (MHz) 12.0MHz 13.0MHz 16.8MHz 19.2MHz 26.0MHz 38.4 MHz 48.0MHz
N (PLLU_DIVN) 960 960 400 200 960 200 960
M (PLLU_DIVM) 12 13 7 4 26 4 12
These parameters can be found in the PLLU_BASE register. The PLLU_OVERRIDE bit should be set to 0. PLLU_VCO_FREQ
parameter must also be set to 0.
Note: PLL_U must be properly configured in the Boot ROM. DO NOT change the parameters of
PLL_U while the unit is running. The same applies to the USB_PHY_PLL.
Table 67: PLL Automated Start Times (Must be Set Up in the Boot ROM)
Crystal Frequency 12.0 MHz 13.0 MHz 16.8 MHz 19.2 MHz 26.0 MHz 38.4 MHz 48.0 MHz
PLLU_ENABLE_DELAY_COUNT 2 2 3 3 4 5 6
PLLU_STABLE_COUNT 47 51 66 75 102 150 188
PLL_ACTIVE_DLY_COUNT 8 9 11 12 9 24 31
XTAL_FREQ_COUNT 118 127 165 188 254 375 469
PLLU_ENABLE_DLY_COUNT should be set for at least 1 microsecond, PLLU_STABLE_COUNT should be set for at least
1 ms, the PLL_ACTIVE_DLY_COUNT should be at least 10 ms, and the XTAL_FREQ_COUNT set for about 2.5 ms.
Table 68: 25 µs Timer on Bias Cell Tracking (for Set Up in the Boot ROM)
Crystal Frequency 12.0 MHz 13.0 MHz 16.8 MHZ 19.2 MHz 26.0 MHz 38.4 MHz 48.0 MHz
UTMIP_BIAS_PAD_TRK_COUNT 5 6 7 8 11 15 19
(UTMIP_BIAS_CFG1[7:3])
All values in the table are decimal. This parameter must be set in the Boot ROM while the crystal clock is stopped. To stop the
crystal clock, disable the UTMIP_PHY_XTAL_CLOCKEN bit of register UTMIP_MISC_CFG1 and then re-enable it when done.
Because there is more than one UTMIP sharing the same bias cell, power down is done through a daisy chain, requiring
power down across all ports.
19.7.4.6 Powering Down a USB Port Outside of Deep Power Down (DPD)
When a port is known to be disabled, there needs to be a mechanism to stop its power consumption for situations outside of
DPD. This section addresses disabling a port while powered up.
Powering down of USB at times other than deep power down should be done by setting all specialized PLL and pad power
down pins instead of using the global E_DPD pins of the USB analog components. It is safer to power down the cells through
the traditional power down pins when the 3.3V and 1.2V supplies might still be on. This is achieved by setting the following pad
controls from UTMIP register space. Before setting the power down bits; save previous registers values so that they may be
restored. This type of power down should not be done in the Boot ROM.
In the Boot ROM, the A debounce period should be set to 10 ms. This is dependent on the crystal frequency scale. The
following table shows how it is programmed.
To program values of 96000 and 120000 for crystal clock frequencies of 38.4 and 48 MHz, respectively, these steps must be
followed:
1. In the debounce register, program 48000 for a 38.4 MHz crystal clock or 60000 for a 60 MHz clock.
Field Value
UTMIP_FS_PREAMBLE_J (UTMIP_TX_CFG0) 1
UTMIP_PD_CHG (UTMIP_BAT_CHRG_CFG0) 1
UTMIP_XCVR_LSBIAS_SEL (UTMIP_XCVR_CFG0) 0
UTMIP_SPARE_CFG0[3] 1
UTMIP_IDLE_WAIT (UTMIP_HSRX_CFG0) 17
UTMIP_ELASTIC_LIMIT (UTMIP_HSRX_CFG0) 16
UTMIP_HS_SYNC_START_DLY (UTMIP_HSRX_CFG1) 9
2. Run the crystal clock for approximately 5 microseconds while the UTMIP is in reset.
3. Stop the crystal clock by setting UTMIP_PHY_XTAL_CLOCKEN Low. This only stops the crystal clocks in the UTMIP
units.
5. Program automatic PLL start times as described in the “PLL_U and USB_PHY_PLL Automatic Startup Times”
section.
7. Program the tracking duration as described in “Programming the Tracking Length Time.” Remove the power downs
from PD (Bias) and disable PD_TRK. After 25 µs (tracking time), enable PD_TRK by writing 0 into
UTMIP_FORCE_PDTRK_POWER_DOWN.
9. Remove powerdowns from ID_PD and VBUS_WAKEUP_PD. This can be removed earlier, as there is no timing or
sequential relation with other signals.
10. Once the PLL_U, USB_PHY_PLL, and Bias pad are ready, remove PD (Transceiver). After 400 ns, the USB pad is
ready for HS/FS/LS operation.
11. There are other powerdowns which can be removed if needed (as such not needed for Boot ROM). These are PD /
PD_ZI / PD_DR / PD_CHRP / PD_DISC / PD_CHG.
12. Program the debouncer length time as described in ”Extending Debouncer Period Length.”
13. Program various static parameters of the UTMIP as described in “Miscellaneous Boot ROM Fields.”
15. Resume any previous USB programming work that falls outside of UTMIP and release reset.From the UTMIP
perspective it does not matter when reset is released, as long as it is after step 8. It will take about 3.5 ms before the
60 MHz clock appears once reset is released.
From a UTMIP perspective, ensure that all the cabled USB port PHYs are configured similarly in the Boot ROM.
§ Embedded design interface – This core does not have a PCI Interface and therefore the PCI configuration
registers described in the EHCI specification are not applicable.
Port Reset
The port connect methods specified by EHCI require setting the port reset bit in the PORTSCx register for a minimum duration
of 10ms. Due to the complexity required to support the attachment of devices that are not high speed, there are counter
already present in the design that can count the 10ms reset pulse to alleviate the requirement of the software to measure this
duration. The basic connection is then summarized as the following:
§ [Port Change Interrupt] Port connect change occurs to notify the host controller driver that a device has
attached.
§ Software shall write a ‘0’ to the reset the device after 10 ms.
§ Driver needs to wait until port change interrupt is asserted and port reset is cleared
Note: Should the EHCI host controller driver attempt to write a ‘0’ to the reset bit while a reset is in progress the
write will be ignored and the reset will continue until completion.
§ [Port Change Interrupt] Port enable change occurs to notify the host controller that the device is now operational
and at this point the port speed has been determined.
§ A 2-bit Port Speed indicator (PSPD) has been added to HOSTPCx to provide the current operating speed of the
port to the host controller driver.
Port Suspend (PORTSC.Suspend) bit is set immediately after setting the bit. As per EHCI a 4 ms delay is expected for this bit
to be set.
Tegra K1 devices also have the following cases that are not directly compliant to EHCI:
§ PMC logic use for special low power modes during suspend/LP0
The Boot ROM enables USB2.0 related PLLs with software override.
Step 2
The PAD driver switches USB 2.0 related PLLs to under hardware control after the PAD driver is loaded.
- CLK_RST_CONTROLLER_UTMIPLL_HW_PWRDN_CFG0_0[UTMIPLL_USE_LOCKDET] to ‘1’
- CLK_RST_CONTROLLER_UTMIPLL_HW_PWRDN_CFG0_0[UTMIPLL_CLK_ENABLE_SWCTL] to ‘0’
- CLK_RST_CONTROLLER_UTMIPLL_HW_PWRDN_CFG0_0[UTMIPLL_SEQ_START_STATE] to ‘1’
- CLK_RST_CONTROLLER_UTMIP_PLL_CFG1_0[UTMIP_FORCE_PLL_ENABLE_POWERUP] to ‘0’
- CLK_RST_CONTROLLER_UTMIP_PLL_CFG1_0[UTMIP_FORCE_PLL_ENABLE_POWERDOWN] to ‘0’
§ Program the following CAR registers to set up software override of UTMIPLL’s IDDQ control.
- CLK_RST_CONTROLLER_UTMIPLL_HW_PWRDN_CFG0_0[UTMIPLL_IDDQ_SWCTL] to ‘1’
- CLK_RST_CONTROLLER_UTMIPLL_HW_PWRDN_CFG0_0[UTMIPLL_IDDQ_OVERRIDE_VALUE] to ‘0’
- CLK_RST_CONTROLLER_PLLU_HW_PWRDN_CFG0_0[PLLU_USE_LOCKDET] to ‘1’
- CLK_RST_CONTROLLER_PLLU_HW_PWRDN_CFG0_0[PLLU_CLK_ENABLE_SWCTL] to ‘0’
- CLK_RST_CONTROLLER_PLLU_HW_PWRDN_CFG0_0[PLLU_CLK_SWITCH_SWCTL] to ‘0’
- CLK_RST_CONTROLLER_PLLU_HW_PWRDN_CFG0_0[PLLU_SEQ_START_STATE] to ‘1’
§ Program the following CAR register to set up hardware control of PLLU when all non-HSIC USB2.0 ports are
assigned to XUSB:
- CLK_RST_CONTROLLER_PLLU_HW_PWRDN_CFG0_0[PLLU_SEQ_IN_SWCTL] to ‘0’
§ Program the following CAR register bits to disable the override to PLLU:
- CLK_RST_CONTROLLER_UTMIP_PLL_CFG1_0[UTMIP_FORCE_PLLU_POWERUP] to ‘0’
- CLK_RST_CONTROLLER_UTMIP_PLL_CFG1_0[UTMIP_FORCE_PLLU_POWERDOWN] to ‘0’
- CLK_RST_CONTROLLER_PLLU_BASE_0[PLLU_OVERRIDE] to ‘0’
§ Program the following CAR register bits to ‘0’ to move the REFPLLE and PLLE out of IDDQ:
- CLK_RST_CONTROLLER_PLLREFE_MISC_0[PLLREFE_IDDQ]
- CLK_RST_CONTROLLER_PLLE_MISC_0[PLLE_IDDQ_OVERRIDE_VALUE]
- CLK_RST_CONTROLLER_PLLREFE_BASE_0[PLLREFE_MDIV]
- CLK_RST_CONTROLLER_PLLREFE_BASE_0[PLLREFE_NDIV]
- CLK_RST_CONTROLLER_PLLREFE_BASE_0[PLLREFE_PLDIV]
- CLK_RST_CONTROLLER_PLLREFE_BASE_0[PLLREFE_KVCO]
- CLK_RST_CONTROLLER_PLLREFE_BASE_0[PLLREFE_KCP]
§ Set the following CAR register bit to ‘1’ to enable the PLL:
- CLK_RST_CONTROLLER_PLLREFE_BASE_0[PLLREFE_ENABLE]
- CLK_RST_CONTROLLER_PLLREFE_MISC_0[PLLREFE_LOCK_ENABLE] to ‘1’
§ Program the following CAR register bits to configure the PLLE according to the frequency of osc_clk:
- CLK_RST_CONTROLLER_PLLE_BASE_0[PLLE_MDIV]
- CLK_RST_CONTROLLER_PLLE_BASE_0[PLLE_NDIV]
- CLK_RST_CONTROLLER_PLLE_BASE_0[PLLE_FDIV4B]
- CLK_RST_CONTROLLER_PLLE_BASE_0[PLLE_PLDIV_CML]
§ Set the following CAR register bit to ‘1’ to enable the PLL:
- CLK_RST_CONTROLLER_PLLE_BASE_0[PLLE_ENABLE]
- CLK_RST_CONTROLLER_PLLE_MISC_0[PLLE_LOCK_ENABLE] to 1’b1
The PAD driver switches USB 3.0 related PLLs to under hardware control.
- CLK_RST_CONTROLLER_PLLE_AUX_0[PLLE_USE_LOCKDET] to ‘1’
- CLK_RST_CONTROLLER_PLLE_AUX_0[PLLE_ENABLE_SWCTL] to ‘0’
- CLK_RST_CONTROLLER_PLLE_AUX_0[PLLE_SS_SWCTL] to ‘0’
- CLK_RST_CONTROLLER_PLLE_AUX_0[PLLE_SEQ_START_STATE] to ‘1’
- CLK_RST_CONTROLLER_PLLE_MISC_0[PLLE_IDDQ_SWCTL] to ‘0’
§ Program the following CAR registers to set up hardware control of XUSB Brick’s PLL, where XUSBIO_PLL is
used by either or both XUSB and PCIE and SATA_PLL is used by either XUSB or SATA:
- CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0[XUSBIO_PADPLL_USE_LOCKDET] to ‘1’
- CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0[XUSBIO_CLK_ENABLE_SWCTL] to ‘0’
- CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0[XUSBIO_PADPLL_RESET_SWCTL] to ‘0’
- CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0[XUSBIO_SEQ_START_STATE] to ‘1’
- CLK_RST_CONTROLLER_SATA_PLL_CFG0_0[SATA_PADPLL_USE_LOCKDET] to ‘1’
- CLK_RST_CONTROLLER_SATA_PLL_CFG0_0[SATA_PADPLL_RESET_SWCTL] to ‘0’
- CLK_RST_CONTROLLER_SATA_PLL_CFG0_0[SATA_SEQ_START_STATE] to ‘1’
§ Wait 1 µs
§ Program the following CAR registers to enable hardware control of the XUSB Brick’s PLL:
- CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0[XUSBIO_SEQ_ENABLE] to ‘1’
- CLK_RST_CONTROLLER_SATA_PLL_CFG0_0[SATA_SEQ_ENABLE] to ‘1’
Step 3
The PAD driver enables platform specific regulators enable power rails to the pads, VBUS, and pull-up voltage to the VBUS
control PMIC’s EN input.
The PAD driver assigns the USB ports to the controllers, then programs the port capabilities and pad parameters of ports
assigned to XUSB after booting to OS.
§ Program the following XUSB PADCTL registers to assign the USB2.0 ports to XUSB, according to the platform-
specific configuration:
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_HSIC_PAD_PORT1]
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_HSIC_PAD_PORT0]
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT2]
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT1]
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT0]
§ Program the following XUSB PADCTL registers to assign the port capabilities for USB2.0 ports owned by XUSB,
according to the platform specific configuration:
§ Program the following XUSB PADCTL registers to ‘0x7’ to disable the overcurrent signal mapping for USB 2.0
ports owned by XUSB:
- XUSB_PADCTL_SNPS_OC_MAP_0[CONTROLLER1_OC_PIN]
- XUSB_PADCTL_SNPS_OC_MAP_0[CONTROLLER2_OC_PIN]
- XUSB_PADCTL_SNPS_OC_MAP_0[CONTROLLER3_OC_PIN]
- XUSB_PADCTL_USB2_OC_MAP_0[PORT2_OC_PIN]
- XUSB_PADCTL_USB2_OC_MAP_0[PORT1_OC_PIN]
- XUSB_PADCTL_USB2_OC_MAP_0[PORT0_OC_PIN]
- XUSB_PADCTL_OC_DET_0[VBUS_ENABLE0_OC_MAP]
- XUSB_PADCTL_OC_DET_0[VBUS_ENABLE1_OC_MAP]
- XUSB_PADCTL_OC_DET_0[VBUS_ENABLE1_OC_MAP]
§ Program the following XUSB PADCTL registers to assign the SuperSpeed port mapping to USB2.0 ports owned
by XUSB, where the SuperSpeed ports inherit their port capabilities from the USB2.0 ports they mapped to,
according to the platform specific configuration:
- XUSB_PADCTL_SS_PORT_MAP_0[PORT1_MAP]
- XUSB_PADCTL_SS_PORT_MAP_0[PORT0_MAP]
§ Program the following XUSB PADCTL registers to assign the IOPHY lanes to XUSB, PCIE, or SATA, according
to the platform-specific configuration
- XUSB_PADCTL_USB3_PAD_MUX_0[PCIE_PAD_LANE0]
- XUSB_PADCTL_USB3_PAD_MUX_0[PCIE_PAD_LANE1]
- XUSB_PADCTL_USB3_PAD_MUX_0[PCIE_PAD_LANE2]
- XUSB_PADCTL_USB3_PAD_MUX_0[PCIE_PAD_LANE3]
- XUSB_PADCTL_USB3_PAD_MUX_0[PCIE_PAD_LANE4]
- XUSB_PADCTL_USB3_PAD_MUX_0[SATA_PAD_LANE0]
§ Program the following XUSB PADCTL registers to assign the PAD and PLL parameters of ports owned by
XUSB, according to the platform-specific configuration:
- XUSB_PADCTL_IOPHY_PLL_P0_CTL1_0
- XUSB_PADCTL_IOPHY_PLL_P0_CTL2_0
- XUSB_PADCTL_IOPHY_PLL_P0_CTL3_0
- XUSB_PADCTL_IOPHY_PLL_P0_CTL4_0
- XUSB_PADCTL_IOPHY_PLL_S0_CTL1_0
- XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0
- XUSB_PADCTL_IOPHY_PLL_S0_CTL3_0
- XUSB_PADCTL_IOPHY_PLL_S0_CTL4_0
- XUSB_PADCTL_IOPHY_USB3_PAD0_CTL_1_0
- XUSB_PADCTL_IOPHY_USB3_PAD0_CTL_2_0
- XUSB_PADCTL_IOPHY_USB3_PAD0_CTL_3_0
- XUSB_PADCTL_IOPHY_USB3_PAD0_CTL_4_0
- XUSB_PADCTL_IOPHY_USB3_PAD1_CTL_1_0
- XUSB_PADCTL_IOPHY_USB3_PAD1_CTL_2_0
- XUSB_PADCTL_IOPHY_USB3_PAD1_CTL_3_0
- XUSB_PADCTL_IOPHY_USB3_PAD1_CTL_4_0
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1001
Tegra K1 Technical Reference Manual
USB Complex
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_1_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_2_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_3_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_4_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_5_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_6_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_1_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_2_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_3_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_4_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_5_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_6_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_1_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_2_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_3_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_4_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_5_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_6_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_1_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_2_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_3_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_4_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_5_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_6_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_1_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_2_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_3_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_4_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_5_0
- XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_6_0
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_1_0
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_2_0
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_3_0
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_4_0
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_5_0
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_6_0
- XUSB_PADCTL_USB2_OTG_PAD0_CTL_0_0
- XUSB_PADCTL_USB2_OTG_PAD0_CTL_1_0
- XUSB_PADCTL_USB2_OTG_PAD1_CTL_0_0
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1002
Tegra K1 Technical Reference Manual
USB Complex
- XUSB_PADCTL_USB2_OTG_PAD1_CTL_1_0
- XUSB_PADCTL_USB2_OTG_PAD2_CTL_0_0
- XUSB_PADCTL_USB2_OTG_PAD2_CTL_1_0
- XUSB_PADCTL_USB2_BIAS_PAD_CTL_0_0
- XUSB_PADCTL_USB2_BIAS_PAD_CTL_1_0
- XUSB_PADCTL_HSIC_PAD0_CTL_0_0
- XUSB_PADCTL_HSIC_PAD0_CTL_1_0
- XUSB_PADCTL_HSIC_PAD0_CTL_2_0
- XUSB_PADCTL_HSIC_PAD1_CTL_0_0
- XUSB_PADCTL_HSIC_PAD1_CTL_1_0
- XUSB_PADCTL_HSIC_PAD1_CTL_2_0
- XUSB_PADCTL_HSIC_STRB_TRIM_CONTROL_0
§ Program the following XUSB PADCTL register bits to ‘0’ to disable power down of the PAD:
- XUSB_PADCTL_USB2_BATTERY_CHRG_BIASPAD_0[PD_OTG]
- XUSB_PADCTL_USB2_OTG_PAD0_CTL_0_0[PD]
- XUSB_PADCTL_USB2_OTG_PAD1_CTL_0_0[PD]
- XUSB_PADCTL_USB2_OTG_PAD2_CTL_0_0[PD]
- XUSB_PADCTL_USB2_OTG_PAD0_CTL_0_0[PD2]
- XUSB_PADCTL_USB2_OTG_PAD1_CTL_0_0[PD2]
- XUSB_PADCTL_USB2_OTG_PAD2_CTL_0_0[PD2]
- XUSB_PADCTL_USB2_OTG_PAD0_CTL_0_0[PD_ZI]
- XUSB_PADCTL_USB2_OTG_PAD1_CTL_0_0[PD_ZI]
- XUSB_PADCTL_USB2_OTG_PAD2_CTL_0_0[PD_ZI]
- XUSB_PADCTL_USB2_OTG_PAD0_CTL_1_0[PD_DR]
- XUSB_PADCTL_USB2_OTG_PAD1_CTL_1_0[PD_DR]
- XUSB_PADCTL_USB2_OTG_PAD2_CTL_1_0[PD_DR]
- XUSB_PADCTL_USB2_BIAS_PAD_CTL_0_0[PD]
- XUSB_PADCTL_USB2_BIAS_PAD_CTL_0_0[PD_TRK]
- XUSB_PADCTL_HSIC_PAD0_CTL_1_0[PD_TX]
- XUSB_PADCTL_HSIC_PAD1_CTL_1_0[PD_TX]
- XUSB_PADCTL_HSIC_PAD0_CTL_1_0[PD_TRX]
- XUSB_PADCTL_HSIC_PAD1_CTL_1_0[PD_TRX]
- XUSB_PADCTL_HSIC_PAD0_CTL_1_0[PD_RX]
- XUSB_PADCTL_HSIC_PAD1_CTL_1_0[PD_RX]
- XUSB_PADCTL_HSIC_PAD0_CTL_1_0[PD_ZI]
- XUSB_PADCTL_HSIC_PAD1_CTL_1_0[PD_ZI]
§ Program the following XUSB PADCTL register bits to ‘0’ to release the XUSB SS wake logic state latching:
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_CLAMP_EN]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_CLAMP_EN_EARLY]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_VCORE_DOWN]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_CLAMP_EN]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_CLAMP_EN_EARLY]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_VCORE_DOWN]
§ Program the following XUSB PADCTL register fields to enable the pad override to put the pad of the lanes
assigned to XUSB in low power mode. These pads should be brought out of low power mode during SS clock
frequency increasing sequence.
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_3_0[RX_IDLE_MODE] to ‘0’
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_3_0[RX_IDLE_MODE_OVRD] to ‘1’
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_3_0[RX_IDLE_MODE] to ‘0’
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_3_0[RX_IDLE_MODE_OVRD] to ‘1’
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_3_0[RX_IDLE_MODE] to ‘0’
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_3_0[RX_IDLE_MODE_OVRD] to ‘1’
Note: To avoid conflict or ambiguity, the XUSB controller should be under reset when updating the port
assignments.
Step 4
The PAD driver programs the clocks and deasserts the resets to the controllers
§ Set the following CAR register bit to ‘1’ to enable the clocks to XUSB:
- CLK_RST_CONTROLLER_CLK_ENB_W_SET_0[SET_CLK_ENB_XUSB]
§ Set the following CAR register bits to ‘1’ to enable the clocks to individual XUSB partitions:
- CLK_RST_CONTROLLER_CLK_ENB_U_SET_0[SET_CLK_ENB_XUSB_HOST]
- CLK_RST_CONTROLLER_CLK_ENB_W_SET_0[SET_CLK_ENB_XUSB_SS]
§ Program the following CAR register bits to set the source of XUSB clocks, where PLLP_OUT0 runs at 408 MHz.
- CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_CORE_HOST_0[XUSB_CORE_HOST_CLK_SRC] to
‘PLLP_OUT0’
- CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_CORE_HOST_0[XUSB_CORE_HOST_CLK_DIVISOR]
to ‘0x6’
- CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_FALCON_0[XUSB_FALCON_CLK_SRC] to
‘PLLP_OUT0’
- CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_FALCON_0[XUSB_FALCON_CLK_DIVISOR] to ‘0x2’
- CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_FS_0[XUSB_FS_CLK_SRC] to ‘FO_48M’
- CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_FS_0[XUSB_FS_CLK_DIVISOR] to ‘0x0’
- CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_SS_0[XUSB_SS_CLK_SRC] to ‘HSIC_480’
- CLK_RST_CONTROLLER_CLK_SOURCE_XUSB_SS_0[XUSB_SS_CLK_DIVISOR] to ‘0x6’
§ Set the following CAR register bits to ‘0’ to deassert reset to XUSB:
- CLK_RST_CONTROLLER_RST_DEVICES_U_0[SWR_XUSB_HOST_RST]
- CLK_RST_CONTROLLER_RST_DEVICES_W_0[SWR_XUSB_SS_RST]
Step 5
§ Program the following XUSB PADCTL registers to ‘1’ to bring specific lanes of IOPHY out of IDDQ. Only lanes
that are used in the platform are required to be bring out of IDDQ:
- XUSB_PADCTL_USB3_PAD_MUX_0[FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0]
- XUSB_PADCTL_USB3_PAD_MUX_0[FORCE_PCIE_PAD_IDDQ_DISABLE_MASK1]
- XUSB_PADCTL_USB3_PAD_MUX_0[FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2]
- XUSB_PADCTL_USB3_PAD_MUX_0[FORCE_PCIE_PAD_IDDQ_DISABLE_MASK3]
- XUSB_PADCTL_USB3_PAD_MUX_0[FORCE_PCIE_PAD_IDDQ_DISABLE_MASK4]
- XUSB_PADCTL_USB3_PAD_MUX_0[FORCE_SATA_PAD_IDDQ_DISABLE_MASK0]
§ Alternatively, program the following XUSB PADCTL register to ‘0’ to bring all lanes of IOPHY out of IDDQ:
- XUSB_PADCTL_USB3_PAD_MUX_0[FORCE_PCIE_PAD_IDDQ_DISABLE]
The PAD driver releases the always on PAD muxing logic state latching.
§ Wait 1 µs
- XUSB_PADCTL_ELPG_PROGRAM_0[AUX_MUX_LP0_CLAMP_EN] to ‘0’
§ Wait 100 µs
- XUSB_PADCTL_ELPG_PROGRAM_0[AUX_MUX_LP0_CLAMP_EN_EARLY] to ‘0’
§ Wait 100 µs
- XUSB_PADCTL_ELPG_PROGRAM_0[AUX_MUX_LP0_VCORE_DOWN] to ‘0’
§ Program the following XUSB PADCTL registers to assign the over current signal mapping for USB 2.0 ports
owned by XUSB, according to the platform-specific configuration:
- XUSB_PADCTL_SNPS_OC_MAP_0[CONTROLLER1_OC_PIN]
- XUSB_PADCTL_SNPS_OC_MAP_0[CONTROLLER2_OC_PIN]
- XUSB_PADCTL_SNPS_OC_MAP_0[CONTROLLER3_OC_PIN]
- XUSB_PADCTL_USB2_OC_MAP_0[PORT2_OC_PIN]
- XUSB_PADCTL_USB2_OC_MAP_0[PORT1_OC_PIN]
- XUSB_PADCTL_USB2_OC_MAP_0[PORT0_OC_PIN]
- XUSB_PADCTL_OC_DET_0[VBUS_ENABLE0_OC_MAP]
- XUSB_PADCTL_OC_DET_0[VBUS_ENABLE1_OC_MAP]
- XUSB_PADCTL_OC_DET_0[VBUS_ENABLE2_OC_MAP]
§ Write ‘1’ to the following XUSB PADCTL register bits to clear possible false reporting of overcurrent events
before the over current signal mappings are properly programmed:
- XUSB_PADCTL_OC_DET_0[OC_DETECTED0]
- XUSB_PADCTL_OC_DET_0[OC_DETECTED1]
- XUSB_PADCTL_OC_DET_0[OC_DETECTED2]
- XUSB_PADCTL_OC_DET_0[OC_DETECTED3]
- XUSB_PADCTL_OC_DET_0[OC_DETECTED_VBUS_PAD0]
- XUSB_PADCTL_OC_DET_0[OC_DETECTED_VBUS_PAD1]
- XUSB_PADCTL_OC_DET_0[OC_DETECTED_VBUS_PAD2]
§ Set the following XUSB PADCTL register bits to ‘1’ to enable the VBUS of the host ports
- XUSB_PADCTL_OC_DET_0[VBUS_ENABLE0]
- XUSB_PADCTL_OC_DET_0[VBUS_ENABLE1]
- XUSB_PADCTL_OC_DET_0[VBUS_ENABLE2]
Step 6
§ Program the following XUSB IPFS registers to allow software accesses to XUSB’s MMIO registers:
- XUSB_HOST_AXI_BAR0_START_0[AXI_BAR0_START] to ‘0x70090’
- XUSB_HOST_AXI_BAR0_SZ_0[AXI_BAR0_SIZE] to ‘0x00008’
- XUSB_HOST_FPCI_BAR0_0[FPCI_BAR0_START] to ‘0x0010000’
- XUSB_HOST_FPCI_BAR0_0[FPCI_BAR0_ACCESS_TYPE] to ‘0’
§ Program the following XUSB IPFS register to enable the XUSB host:
- XUSB_HOST_CONFIGURATION_0[EN_FPCI] to ‘1’
- NV_PROJ__XUSB_CFG_1_BUS_MASTER to ‘1’
- NV_PROJ__XUSB_CFG_1_MEMORY_SPACE to ‘1’
- NV_PROJ__XUSB_CFG_4_BASE_ADDRESS to ‘0x02000’
Step 6
19.7.6 LP0
The xHCI driver performs a context save operation as described in section 4.23.2 of the xHCI specification.
The xHCI PEP driver performs an XUSB specific context save operation.
The xHCI PEP driver performs an XUSB IPFS specific context save operation.
- XUSB_HOST_MSI_BAR_SZ_0
- XUSB_HOST_MSI_AXI_BAR_ST_0
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1006
Tegra K1 Technical Reference Manual
USB Complex
- XUSB_HOST_MSI_FPCI_BAR_ST_0
- XUSB_HOST_MSI_VEC0_0
- XUSB_HOST_MSI_EN_VEC0_0
- XUSB_HOST_FPCI_ERROR_MASKS_0
- XUSB_HOST_INTR_MASK_0
- XUSB_HOST_IPFS_INTR_ENABLE_0
- XUSB_HOST_UFPCI_CONFIG_0
- XUSB_HOST_CLKGATE_HYSTERESIS_0
- XUSB_HOST_XUSB_HOST_MCCIF_FIFOCTRL_0
Step 2
The System Power Management driver programs the PMC USB2.0 sleepwalk logic as described in the “PMC Programming”
section.
The System Power Management driver should enable the wake events according to the port states and Wake-on-Connect,
Wake-on-Disconnect, and Wake-on-Over-Current settings of the XUSB registers ports accordingly.
The System Power Management driver enables wake events from USB ports.
§ Set the following PMC register bits to ‘1’ to set the wake signal active level to ‘HIGH’
§ Set the following PMC register bits to ‘1’ to enable USB wake events
Step 3
Step 1
The Boot ROM enables USB related PLLs with software override.
Step 2
The PAD driver switches USB related PLLs to under hardware control.
Step 3
The PAD driver assigns the USB port to the controllers, then programs the port capabilities and pad parameters of ports
assigned to XUSB according to the platform specific configuration.
Step 4
The PAD driver programs the clocks and deasserts the resets to the controllers.
§ Wait 1 µs
§ Program the following XUSB PADCTL register bits to ‘0’ to release the XUSB SS wake logic state latching
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_VCORE_DOWN]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_VCORE_DOWN]
§ Program the following XUSB PADCTL register bits to ‘0’ to release the XUSB SS wake logic state latching
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_CLAMP_EN_EARLY]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_CLAMP_EN_EARLY]
§ Wait 100 µs
§ Program the following XUSB PADCTL register bits to ‘0’ to release the XUSB SS wake logic state latching
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_CLAMP_EN]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_CLAMP_EN]
Note: If XUSB was in ELPG before entering LP0 and the LP0 exit is not due to wake event from ports belong to
XUSB, the PAD driver should keep XUSB in the ELPG state and only bring XUSB out of ELPG when wake
events are detected for the ports owned by XUSB.
Step 5
The PAD driver enables the VBUS to the USB ports if VBUS was disabled during LP0.
Step 6
The xHCI PEP driver performs XUSB specific IOPHY context restore for the following registers for the lanes assigned to XUSB
based on the SS port mappings.
§ Program the following XUSB PADCTL register bits with the context stored during the last time the port entered
U0.
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_4_0[DFE_CNTL[28:24]]
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_4_0[DFE_CNTL[22:16]]
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_2_0[RX_EQ[13:8]]
- XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_2_0[RX_EQ[5:0]]
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_4_0[DFE_CNTL[28:24]]
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_4_0[DFE_CNTL[22:16]]
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_2_0[RX_EQ[13:8]]
- XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_2_0[RX_EQ[5:0]]
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_4_0[DFE_CNTL[28:24]]
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_4_0[DFE_CNTL[22:16]]
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_2_0[RX_EQ[13:8]]
- XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_2_0[RX_EQ[5:0]]
The xHCI PEP driver performs XUSB specific context restore operation
The xHCI PEP driver performs XUSB IPFS and XUSB register initialization as described in Step 6 of “Cold Boot”.
Step 7
Step 8
The xHCI driver performs context restore operation as described in section 4.23.2 of the xHCI specification,
Step 9
The System Power Management driver disables the PMC USB2.0 sleepwalk logic as described in the “PMC Programming”
section.
XUSB SS Port
Link State XUSB SS
U3/Rx.Detect/SS.Disable/SS.Invalid
master_en1
clamp_en_early2
clamp_en2
vcore_down2
PMC
sys_clken2
pwrreq2
wakeup_rstn2
clamp_en_early3
clamp_en4
XUSB APB Slave
5
vcore_down
reset_
clocks
Clock/Reset/Power
Vaux_core
The following figure illustrates the signal sequences from the XUSB PADCTL block that are required to follow the same
sequence as from the PMC so XUSB SS Wake logic can enable its wake event detection.
XUSB SS Port
Link State XUSB SS
U3/Rx.Detect/SS.Disable/SS.Invalid
master_en1
PMC
wake_int_en5
clamp_en7
vcore_down8
CAR
xusb_ce3
swr_xusb_rst4
xusb_clamp2
PMC
reset_
clocks
Clock/Reset/Power
Vxusb
The XUSB host controller has two partitions that can be selectively power gated with the following use cases, where unlisted
combinations are not supported:
Powered Power Gated Host controller in normal operations, with SuperSpeed links
in low power states.
SuperSpeed link wake events report through XUSB
PADCTL.
Power Gated Power Gated Host controllers power gated, with SuperSpeed links in low
power states.
All Host link wake events report through XUSB PADCTL.
The xHCI driver performs context save operation as described in section 4.23.2 of the xHCI specification.
The xHCI PEP driver performs XUSB_HOST specific context save operation.
The xHCI PEP driver performs XUSB IPFS specific context save operation.
- XUSB_HOST_MSI_BAR_SZ_0
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1011
Tegra K1 Technical Reference Manual
USB Complex
- XUSB_HOST_MSI_AXI_BAR_ST_0
- XUSB_HOST_MSI_FPCI_BAR_ST_0
- XUSB_HOST_MSI_VEC0_0
- XUSB_HOST_MSI_EN_VEC0_0
- XUSB_HOST_FPCI_ERROR_MASKS_0
- XUSB_HOST_INTR_MASK_0
- XUSB_HOST_IPFS_INTR_ENABLE_0
- XUSB_HOST_UFPCI_CONFIG_0
- XUSB_HOST_CLKGATE_HYSTERESIS_0
- XUSB_HOST_XUSB_HOST_MCCIF_FIFOCTRL_0
Step 2
The System Power Management driver programs the PMC USB2.0 sleepwalk logic as described in the “PMC Programming”
section.
The System Power Management driver should enable the wake events according to the port states and Wake-on-Connect,
Wake-on-Disconnect, and Wake-on-Over-Current settings of the USB2 ports accordingly.
Step 3
The xHCI PEP driver enables the XUSB wakeup interrupts for the SuperSpeed and USB2.0 ports.
§ Write ‘1’ to the following XUSB PADCTL register bits to clear the interrupt status.
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT0_WAKEUP_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT1_WAKEUP_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT0_WAKEUP_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT1_WAKEUP_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT2_WAKEUP_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT0_WAKEUP_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT1_WAKEUP_EVENT]
§ Set the following XUSB PADCTL register bits to ‘1’ to enable the interrupt.
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT0_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT1_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT0_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT1_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT2_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT0_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT1_WAKE_INTERRUPT_ENABLE]
§ Set the following XUSB PADCTL register bits to ‘1’ to disable the output driver of the HSIC pad.
- XUSB_PADCTL_HSIC_PAD0_CTL_1_0[PD_TX]
- XUSB_PADCTL_HSIC_PAD1_CTL_1_0[PD_TX]
Step 4
The xHCI PEP driver initiates the signal sequence to enable the XUSB SSwake detection logic for the SuperSpeed ports.
§ Write ‘1’ to the following XUSB PADCTL register bits to assert the clamp_en_early signal.
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_CLAMP_EN_EARLY]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_CLAMP_EN_EARLY]
§ Write ‘1’ to the following XUSB PADCTL register bits to assert the clamp_en signal.
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_CLAMP_EN]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_CLAMP_EN]
§ Wait 250 µs
Step 5
§ Read the following MC register bit to be ‘1’ to ensure flush to XUSB is enabled
Step 6
The System Power Management driver asserts reset to XUSB then disables its clocks.
§ Set the following CAR register bits to ‘1’ to assert reset to XUSB
§ Set the following CAR register bits to ‘1’ to disable the clocks to individual XUSB partitions.
Step 7
The System Power Management driver disables the XUSB power rails.
§ Program the following PMC register bits in a single write to disable the power rail to XUSB host:
- APBDEV_PMC_PWRGATE_TOGGLE_0[START] to ‘enable’
- APBDEV_PMC_PWRGATE_TOGGLE_0[PARTID] to ‘XUSBC’
§ Read the following PMC register bit to confirm the power gating status of XUSB host
§ Program the following PMC register bits in a single write to disable the power rail to XUSB SuperSpeed:
- APBDEV_PMC_PWRGATE_TOGGLE_0[START] to ‘enable’
- APBDEV_PMC_PWRGATE_TOGGLE_0[PARTID] to ‘XUSBA’
§ Read the following PMC register bit to confirm the power gating status of XUSB SuperSpeed:
Step 8
The xHCI PEP driver initiates the signal sequence to enable the XUSB SS wake detection logic for the SuperSpeed ports
assigned to host.
§ Write ‘1’ to the following XUSB PADCTL register bits to assert the vcore_off signal:
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_VCORE_DOWN]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_VCORE_DOWN]
The xHCI driver performs context save operation as described in section 4.23.2 of the xHCI specification.
The xHCI PEP driver performs XUSB_HOST specific context save operation.
The xHCI PEP driver performs XUSB IPFS specific context save operation.
Step 2
The System Power Management driver programs the PMC USB2.0 sleepwalk logic as described in the “PMC Programming”
section.
The System Power Management driver should enable the wake events according to the port states and Wake-on-Connect,
Wake-on-Disconnect, and Wake-on-Over-Current settings of the USB2 ports accordingly.
Step 3
The xHCI PEP driver enables the XUSB wakeup interrupts for the SuperSpeed and USB2.0 ports.
Step 4
The System Power Management driver flushes MCCIF and partition clients.
§ Read the following MC register bit to be ‘1’ to ensure flush to XUSB is enabled:
Step 5
The System Power Management driver asserts reset to XUSB then disables its clocks.
§ Set the following CAR register bit to ‘1’ to assert reset to XUSB
§ Set the following CAR register bits to ‘1’ to disable the clocks to individual XUSB partitions.
Step 6
The System Power Management driver disables the XUSB power rails.
§ Program the following PMC register bits in a single write to disable the power rail to XUSB host:
- APBDEV_PMC_PWRGATE_TOGGLE_0[START] to ‘enable’
- APBDEV_PMC_PWRGATE_TOGGLE_0[PARTID] to ‘XUSBC’
§ Read the following PMC register bit to confirm the power gating status of XUSB host:
Step 7
The xHCI PEP driver moves the port to be under USB2 controllers as a workaround to use USB2 controller outputs to put the
USB2.0 PADs in low power mode.
§ Program ‘SNPS’ to the following XUSB PADCTL register bits for ports assigned to XUSB:
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT2]
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT1]
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT0]
The xHCI PEP driver communicates SuperSpeed partition ELPG entry with the System Power Management driver.
Step 2
The xHCI PEP driver enables the XUSB wakeup interrupts for the SuperSpeed ports.
Step 3
The xHCI PEP driver initiates the signal sequence to enable the XUSB SSwake detection logic for the SuperSpeed ports as
described in Step 4 of the “All Partitions ELPG Entry” section.
Step 4
The System Power Management driver asserts reset to XUSB SuperSpeed partition then disables its clocks.
§ Set the following CAR register bit to ‘1’ to assert reset to XUSB:
§ Set the following CAR register bit to ‘1’ to disable the clocks to individual XUSB partitions:
Step 5
The System Power Management driver disables the XUSB SuperSpeed partition power rails.
§ Program the following PMC register bits in a single write to disable the power rail to XUSB SuperSpeed:
- APBDEV_PMC_PWRGATE_TOGGLE_0[START] to ‘enable’
- APBDEV_PMC_PWRGATE_TOGGLE_0[PARTID] to ‘XUSBA’
§ Read the following PMC register bit to confirm the power gating status of the partitions:
Step 6
The xHCI PEP driver initiates the signal sequence to enable the XUSB SS wake detection logic for the SuperSpeed ports as
described in Step 7 of the “All Partitions ELPG Entry” section.
Step 1
The xHCI PEP driver moves the USB2.0 port back to XUSB.
§ Program the following XUSB PADCTL registers to assign the USB2.0 ports to XUSB, according to the platform
specific configuration:
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT2]
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT1]
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT0]
Step 2
The System Power Management driver enables the XUSB power rails.
§ Program the following PMC register bits in a single write to enable the power rail to XUSB host:
- APBDEV_PMC_PWRGATE_TOGGLE_0[START] to ‘enable’
- APBDEV_PMC_PWRGATE_TOGGLE_0[PARTID] to ‘XUSBC’
§ Read the following PMC register bit to confirm the power gating status of XUSB host:
§ Program the following PMC register bits in a single write to disable the power rail to XUSB SuperSpeed:
- APBDEV_PMC_PWRGATE_TOGGLE_0[START] to ‘enable’
- APBDEV_PMC_PWRGATE_TOGGLE_0[PARTID] to ‘XUSBA’
§ Read the following PMC register bit to confirm the power gating status of XUSB SuperSpeed:
Step 3
§ Set the following CAR register bits to ‘1’ to enable the clocks to individual XUSB partitions.
Step 4
The System Power Management driver removes power clamps to XUSB partitions.
§ Set the following PMC register bits to ‘1’ to remove the power clamps to individual XUSB partitions.
§ Read the following PMC register bits to confirm the power clamps to individual XUSB partitions are removed.
Step 5
§ Set the following CAR register bits to ‘0’ to deassert reset to XUSB:
§ Wait 1 µs
Step 6
The System Power Management driver disables flushes of MCCIF and partition clients.
Step 7
§ Set the following XUSB PADCTL register bits to ‘0’ to disable the interrupts.
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT0_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT1_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT0_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT1_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT2_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT0_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT1_WAKE_INTERRUPT_ENABLE]
Step 8
The xHCI PEP driver initiates the signal sequence to disable the XUSB SS wake detection logic.
§ Write ‘0’ to the following XUSB PADCTL register bits to deassert the vcore_off signal.
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_VCORE_DOWN]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_VCORE_DOWN]
§ Write ‘0’ to the following XUSB PADCTL register bits to deassert the clamp_en_early signals.
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_CLAMP_EN_EARLY]
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_CLAMP_EN_EARLY]
§ Write ‘0’ to the following XUSB PADCTL register bits to deassert the clamp_en signals.
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP0_ELPG_CLAMP_EN]
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1017
Tegra K1 Technical Reference Manual
USB Complex
- XUSB_PADCTL_ELPG_PROGRAM_0[SSP1_ELPG_CLAMP_EN]
Note: The write to clear vcore_off cannot be combined with the write to clear clamp_en and clamp_en_early.
Step 9
Step 10
The xHCI PEP driver notifies XUSB firmware whether context of SuperSpeed Partition should be restored.
Step 11
The xHCI driver performs context restore operation as described in section 4.23.2 of the xHCI specification.
Step 12
The System Power Management driver programs the PMC USB2.0 sleepwalk logic to disable the sleepwalk logic as described
in the “PMC Programming” section.
§ Write ‘1’ to the following XUSB PADCTL register bits to clear the events.
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT0_WAKE_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT1_WAKE_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT0_WAKE_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT1_WAKE_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT2_WAKE_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT0_WAKE_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT1_WAKE_EVENT]
The xHCI PEP driver driver moves the USB2.0 port back to XUSB.
§ Program the following XUSB PADCTL registers to assign the USB2.0 ports to XUSB, according to the platform
specific configuration:
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT2]
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT1]
- XUSB_PADCTL_USB2_PAD_MUX_0[USB2_OTG_PAD_PORT0]
Step 2
The System Power Management driver enables the XUSB power rails.
§ Program the following PMC register bits in a single write to enable the power rail to XUSB host:
- APBDEV_PMC_PWRGATE_TOGGLE_0[START] to ‘enable’
- APBDEV_PMC_PWRGATE_TOGGLE_0[PARTID] to ‘XUSBC’
§ Read the following PMC register bit to confirm the power gating status of XUSB host:
Step 3
§ Set the following CAR register bit to ‘1’ to enable the clocks to individual XUSB partitions:
Step 4
The System Power Management driver removes power clamps to XUSB partitions.
§ Set the following PMC register bit to ‘1’ to remove the power clamps to individual XUSB partitions:
§ Read the following PMC register bits to confirm the power clamps to individual XUSB partitions are removed.
Step 5
§ Set the following CAR register bit to ‘0’ to deassert reset to XUSB
§ Wait 1 µs
Step 6
The System Power Management driver disables flushes of MCCIF and partition clients.
Step 7
The xHCI PEP driver disables the USB2.0wakeup interrupts for ports assigned to XUSB.
§ Set the following XUSB PADCTL register bits to ‘0’ to disable the interrupts.
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT0_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT1_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT0_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT1_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT2_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT0_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT1_WAKE_INTERRUPT_ENABLE]
Step 8
The xHCI PEP driver performs XUSB specific context restore operation.
Step 9
The xHCI PEP Driver notifies XUSB firmware whether context of SuperSpeed Partition should be restored.
Step 10
The xHCI driver performs context restore operation as described in section 4.23.2 of the xHCI specification.
Step 11
The System Power Management driver programs the PMC USB2.0 sleepwalk logic to disable the sleepwalk logic as described
in the “PMC Programming” section.
§ Write ‘1’ to the following XUSB PADCTL register bits to clear the events.
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT0_WAKE_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT1_WAKE_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_PORT2_WAKE_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT0_WAKE_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[USB2_HSIC_PORT1_WAKE_EVENT]
The xHCI PEP driver communicates SuperSpeed partition ELPG exit with System Power Management driver.
Step 2
The System Power Management driver enables the XUSB power rails.
§ Program the following PMC register bits in a single write to disable the power rail to XUSB SuperSpeed
- APBDEV_PMC_PWRGATE_TOGGLE_0[START] to ‘enable’
- APBDEV_PMC_PWRGATE_TOGGLE_0[PARTID] to ‘XUSBA’
§ Read the following PMC register bits to confirm the power gating status of XUSB SuperSpeed
Step 3
§ Set the following CAR register bits to ‘1’ to enable the clocks to individual XUSB partitions.
Step 4
The xHCI PEP driver initiates the signal sequence to disable the XUSB SS wake detection logic for the SuperSpeed ports as
described in Step 3 of the “All Partitions ELPG Exit” section.
Step 5
§ Set the following XUSB PADCTL register bits to ‘0’ to disable the interrupts.
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT0_WAKE_INTERRUPT_ENABLE]
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT1_WAKE_INTERRUPT_ENABLE]
Step 6
The System Power Management driver removes power clamps to XUSB partitions.
§ Set the following PMC register bit to ‘1’ to remove the power clamp to XUSB SS:
- APBDEV_PMC_REMOVE_CLAMPING_CMD_0 [XUSBA]
§ Read the following PMC register bits to confirm the power clamp to XUSB SS is removed.
Step 7
§ Set the following CAR register bit to ‘0’ to deassert reset to XUSB:
Step 8
§ Write ‘1’ to the following XUSB PADCTL register bits to clear the events.
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT0_WAKE_EVENT]
- XUSB_PADCTL_ELPG_PROGRAM_0[SS_PORT1_WAKE_EVENT]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_MASTER_ENABLE_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_MASTER_ENABLE_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_MASTER_ENABLE_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_MASTER_ENABLE_P3]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UHSIC_MASTER_ENABLE_P0]
§ Set the following registers to ‘1’ to ensure sleepwalk logic is in low power mode:
- APBDEV_PMC_UTMIP_MASTER_CONFIG_0[UTMIP_PWR_P0]
- APBDEV_PMC_UTMIP_MASTER_CONFIG_0[UTMIP_PWR_P1]
- APBDEV_PMC_UTMIP_MASTER_CONFIG_0[UTMIP_PWR_P2]
- APBDEV_PMC_UTMIP_MASTER_CONFIG_0[UTMIP_PWR_P3]
- APBDEV_PMC_UTMIP_MASTER_CONFIG_0[UHSIC_PWR_P0]
- APBDEV_PMC_USB_DEBOUNCE_DEL_0[UTMIP_LINE_DEB_CNT]
- APBDEV_PMC_USB_DEBOUNCE_DEL_0[UHSIC_LINE_DEB_CNT]
§ Set the following registers to ‘0’ to ensure fake events of sleepwalk logic are disabled:
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBOP_EN_P0]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBON_EN_P0]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBOP_VAL_P0]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBON_VAL_P0]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBOP_EN_P1]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBON_EN_P1]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBOP_VAL_P1]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBON_VAL_P1]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBOP_EN_P2]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBON_EN_P2]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBOP_VAL_P2]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UTMIP_FAKE_USBON_VAL_P2]
- APBDEV_PMC_UTMIP_UHSIC2_FAKE_0[UTMIP_FAKE_USBOP_EN_P3]
- APBDEV_PMC_UTMIP_UHSIC2_FAKE_0[UTMIP_FAKE_USBON_EN_P3]
- APBDEV_PMC_UTMIP_UHSIC2_FAKE_0[UTMIP_FAKE_USBOP_VAL_P3]
- APBDEV_PMC_UTMIP_UHSIC2_FAKE_0[UTMIP_FAKE_USBON_VAL_P3]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UHSIC_FAKE_DATA_EN_P0]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UHSIC_FAKE_STROBE_EN_P0]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UHSIC_FAKE_DATA_VAL_P0]
- APBDEV_PMC_UTMIP_UHSIC_FAKE_0[UHSIC_FAKE_STROBE_VAL_P0]
§ Set the following registers to ‘0’ to ensure wake events of sleepwalk logic are not latched:
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P0]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P1]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P2]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P3]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UHSIC_LINE_WAKEUP_EN_P0]
§ Program the following registers to ‘NONE’ to disable wake event triggers of sleepwalk logic:
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_WAKE_VAL_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_WAKE_VAL_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_WAKE_VAL_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_WAKE_VAL_P3]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UHSIC_WAKE_VAL_P0]
§ Set the following registers to ‘0’ to power down the line state detectors of the pad:
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P1]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P1]
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P2]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P2]
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P3]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P3]
- APBDEV_PMC_USB_AO_0[DATA0_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[DATA1_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[STROBE_VAL_PD_P0]
The xHCI PEP driver re-initializes the sleepwalk logic as described in the “Initialize PMC Sleepwalk Logic” section.
Step 2
- APBDEV_PMC_UTMIP_UHSIC_SAVED_STATE_0[UTMIP_SPEED_P0]
- APBDEV_PMC_UTMIP_UHSIC_SAVED_STATE_0[UTMIP_SPEED_P1]
- APBDEV_PMC_UTMIP_UHSIC_SAVED_STATE_0[UTMIP_SPEED_P2]
- APBDEV_PMC_UTMIP_UHSIC2_SAVED_STATE_0[UTMIP_SPEED_P3]
- APBDEV_PMC_UTMIP_UHSIC_SAVED_STATE_0[UHSIC_SPEED_P0]
§ Set the following registers to ‘1’ to enable the trigger of the sleepwalk logic:
- APBDEV_PMC_UTMIP_UHSIC_SLEEPWALK_CFG_0[UTMIP_WAKE_WALK_EN_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEPWALK_CFG_0[UTMIP_LINEVAL_WALK_EN_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEPWALK_CFG_0[UTMIP_WAKE_WALK_EN_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEPWALK_CFG_0[UTMIP_LINEVAL_WALK_EN_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEPWALK_CFG_0[UTMIP_WAKE_WALK_EN_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEPWALK_CFG_0[UTMIP_LINEVAL_WALK_EN_P2]
- APBDEV_PMC_UTMIP_UHSIC2_SLEEPWALK_CFG_0[UTMIP_WAKE_WALK_EN_P3]
- APBDEV_PMC_UTMIP_UHSIC2_SLEEPWALK_CFG_0[UTMIP_LINEVAL_WALK_EN_P3]
- APBDEV_PMC_UTMIP_UHSIC_SLEEPWALK_CFG_0[UHSIC_WAKE_WALK_EN_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEPWALK_CFG_0[UHSIC_LINEVAL_WALK_EN_P0]
§ Write ‘1’ to the following registers to reset the walk pointer and clear the alarm of the sleepwalk logic, as well as
capture the configuration of the USB2.0 pad:
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WALK_PTR_P0]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WAKE_ALARM_P0]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CAP_CFG_P0]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WALK_PTR_P1]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WAKE_ALARM_P1]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CAP_CFG_P1]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WALK_PTR_P2]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WAKE_ALARM_P2]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CAP_CFG_P2]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WALK_PTR_P3]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WAKE_ALARM_P3]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CAP_CFG_P3]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UHSIC_CLR_WALK_PTR_P0]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UHSIC_CLR_WAKE_ALARM_P0]
§ Program the following registers with electrical parameters read from XUSB PADCTL:
- APBDEV_PMC_UTMIP_TERM_PAD_CFG_0[TCTRL_VAL] to
XUSB_PADCTL_USB2_BIAS_PAD_CTL_1_0[TCTRL]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[PCTRL_VAL] to
XUSB_PADCTL_USB2_BIAS_PAD_CTL_1_0[PCTRL]
§ Program the following registers to set up the pull-ups and pull-downs of the signals during the four stages of
sleepwalk:
- APBDEV_PMC_UTMIP_SLEEPWALK_P0_0[USBOP_RPD_{A/B/C/D}] to ‘1’
- APBDEV_PMC_UTMIP_SLEEPWALK_P0_0[USBON_RPD_{A/B/C/D}] to ‘1’
- APBDEV_PMC_UTMIP_SLEEPWALK_P0_0[USBOP_RPU_{A/B/C/D}] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P0_0[USBON_RPU_{A/B/C/D}] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P1_0[USBOP_RPD_{A/B/C/D}] to ‘1’
- APBDEV_PMC_UTMIP_SLEEPWALK_P1_0[USBON_RPD_{A/B/C/D}] to ‘1’
- APBDEV_PMC_UTMIP_SLEEPWALK_P1_0[USBOP_RPU_{A/B/C/D}] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P1_0[USBON_RPU_{A/B/C/D}] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P2_0[USBOP_RPD_{A/B/C/D}] to ‘1’
- APBDEV_PMC_UTMIP_SLEEPWALK_P2_0[USBON_RPD_{A/B/C/D}] to ‘1’
- APBDEV_PMC_UTMIP_SLEEPWALK_P2_0[USBOP_RPU_{A/B/C/D}] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P2_0[USBON_RPU_{A/B/C/D}] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P3_0[USBOP_RPD_{A/B/C/D}] to ‘1’
- APBDEV_PMC_UTMIP_SLEEPWALK_P3_0[USBON_RPD_{A/B/C/D}] to ‘1’
- APBDEV_PMC_UTMIP_SLEEPWALK_P3_0[USBOP_RPU_{A/B/C/D}] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P3_0[USBON_RPU_{A/B/C/D}] to ‘0’
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[STROBE_RPD_A] to ‘0’
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[DATA0_RPD_A] to ‘1’
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[DATA1_RPD_A] to ‘1’
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1024
Tegra K1 Technical Reference Manual
USB Complex
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[STROBE_RPU_A] to ‘1’
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[DATA0_RPU_A] to ‘0’
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[DATA1_RPU_A] to ‘0’
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[STROBE_RPD_{B/C/D}] to ‘1’
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[DATA0_RPD_{B/C/D}] to ‘0’
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[DATA1_RPD_{B/C/D}] to ‘1’
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[STROBE_RPU_{B/C/D}] to ‘0’
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[DATA0_RPU_{B/C/D}] to ‘1’
- APBDEV_PMC_UHSIC_SLEEPWALK_P0_0[DATA1_RPU_{B/C/D}] to ‘0’
§ Program the following registers to set up the driving values of the signals during the four stages of sleepwalk:
- APBDEV_PMC_UTMIP_SLEEPWALK_P0_0[AP_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P0_0[AN_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P0_0[HIGNZ_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P0_0[AP_{B/C/D}] to ‘0’ for HS/FS and ‘1’ for LS
- APBDEV_PMC_UTMIP_SLEEPWALK_P0_0[AN_{B/C/D}] to ‘1’ for HS/FS and ‘0’ for LS
- APBDEV_PMC_UTMIP_SLEEPWALK_P0_0[HIGHZ_{B/C/D}] to ‘1’
- APBDEV_PMC_UTMIP_SLEEPWALK_P1_0[AP_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P1_0[AN_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P1_0[HIGNZ_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P1_0[AP_{B/C/D}] to ‘0’ for HS/FS and ‘1’ for LS
- APBDEV_PMC_UTMIP_SLEEPWALK_P1_0[AN_{B/C/D}] to ‘1’ for HS/FS and ‘0’ for LS
- APBDEV_PMC_UTMIP_SLEEPWALK_P1_0[HIGHZ_{B/C/D}] to ‘1’
- APBDEV_PMC_UTMIP_SLEEPWALK_P2_0[AP_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P2_0[AN_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P2_0[HIGNZ_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P2_0[AP_{B/C/D}] to ‘0’ for HS/FS and ‘1’ for LS
- APBDEV_PMC_UTMIP_SLEEPWALK_P2_0[AN_{B/C/D}] to ‘1’ for HS/FS and ‘0’ for LS
- APBDEV_PMC_UTMIP_SLEEPWALK_P2_0[HIGHZ_{B/C/D}] to ‘1’
- APBDEV_PMC_UTMIP_SLEEPWALK_P3_0[AP_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P3_0[AN_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P3_0[HIGNZ_A] to ‘0’
- APBDEV_PMC_UTMIP_SLEEPWALK_P3_0[AP_{B/C/D}] to ‘0’ for HS/FS and ‘1’ for LS
- APBDEV_PMC_UTMIP_SLEEPWALK_P3_0[AN_{B/C/D}] to ‘1’ for HS/FS and ‘0’ for LS
- APBDEV_PMC_UTMIP_SLEEPWALK_P3_0[HIGHZ_{B/C/D}] to ‘1’
Note: For HSIC and HSIS+, DATA1 is not used for signaling wake.
Step 3
Step 4
§ Set the following registers to ‘1’ to power up the line state detectors of the pad
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P1]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P1]
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P2]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P2]
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P3]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P3]
- APBDEV_PMC_USB_AO_0[DATA0_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[DATA1_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[STROBE_VAL_PD_P0]
§ Wait 1 µs
§ Set the following registers to ‘1’ to switch the electric control of the USB2.0 pad to PMC
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_FSLS_USE_PMC_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_PCTRL_USE_PMC_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_TCTRL_USE_PMC_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_FSLS_USE_PMC_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_PCTRL_USE_PMC_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_TCTRL_USE_PMC_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_FSLS_USE_PMC_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_PCTRL_USE_PMC_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_TCTRL_USE_PMC_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_FSLS_USE_PMC_P3]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_PCTRL_USE_PMC_P3]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_TCTRL_USE_PMC_P3]
§ Program the following registers to set the wake signaling trigger events
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_WAKE_VAL_P0] to ‘ANY’
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_WAKE_VAL_P1] to ‘ANY’
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_WAKE_VAL_P2] to ‘ANY’
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_WAKE_VAL_P3] to ‘ANY’
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UHSIC_WAKE_VAL_P0] to ‘SD10’
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_MASTER_ENABLE_P0]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_MASTER_ENABLE_P1]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_MASTER_ENABLE_P2]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_MASTER_ENABLE_P3]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P3]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UHSIC_MASTER_ENABLE_P0]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UHSIC_LINE_WAKEUP_EN_P0]
Note: For USB2 ports, set wake value to ANY means any line state change would trigger wake.
Note: For HSIC and HSIS+, DATA1 is not used for wake detection.
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_MASTER_ENABLE_P0]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_MASTER_ENABLE_P1]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_MASTER_ENABLE_P2]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_MASTER_ENABLE_P3]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UTMIP_LINE_WAKEUP_EN_P3]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UHSIC_MASTER_ENABLE_P0]
- APBDEV_PMC_UTMIP_UHSIC_LINE_WAKEUP_0[UHSIC_LINE_WAKEUP_EN_P0]
§ Set the following registers to ‘0’ to switch the electric control of the USB2.0 pad to XUSB or USB2:
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_FSLS_USE_PMC_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_PCTRL_USE_PMC_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_TCTRL_USE_PMC_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_FSLS_USE_PMC_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_PCTRL_USE_PMC_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_TCTRL_USE_PMC_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_FSLS_USE_PMC_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_PCTRL_USE_PMC_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_TCTRL_USE_PMC_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_FSLS_USE_PMC_P3]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_PCTRL_USE_PMC_P3]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_TCTRL_USE_PMC_P3]
§ Program the following registers to ‘NONE’ to disable wake event triggers of sleepwalk logic:
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_WAKE_VAL_P0]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_WAKE_VAL_P1]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UTMIP_WAKE_VAL_P2]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG1_0[UTMIP_WAKE_VAL_P3]
- APBDEV_PMC_UTMIP_UHSIC_SLEEP_CFG_0[UHSIC_WAKE_VAL_P0]
§ Set the following registers to ‘0’ to power down the line state detectors of the pad:
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P1]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P1]
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P2]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P2]
- APBDEV_PMC_USB_AO_0[USBOP_VAL_PD_P3]
- APBDEV_PMC_USB_AO_0[USBON_VAL_PD_P3]
- APBDEV_PMC_USB_AO_0[DATA0_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[DATA1_VAL_PD_P0]
- APBDEV_PMC_USB_AO_0[STROBE_VAL_PD_P0]
§ Write ‘1’ to the following registers to clear alarm of the sleepwalk logic:
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WAKE_ALARM_P0]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WAKE_ALARM_P1]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WAKE_ALARM_P2]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UTMIP_CLR_WAKE_ALARM_P3]
- APBDEV_PMC_UTMIP_UHSIC_TRIGGERS_0[UHSIC_CLR_WAKE_ALARM_P0]
USB1_UTMIP_BIAS_CFG0_0:
§ UTMIP_BIASPD
§ UTMIP_HSCHIRP_LEVEL
§ UTMIP_HSSQUELCH_LEVEL
§ UTMIP_HSDISCON_LEVEL_MSB
§ UTMIP_HSDISCON_LEVEL
§ UTMIP_ACTIVE_TERM_OFFSET
§ UTMIP_ACTIVE_PULLUP_OFFSET
§ UTMIP_VBUS_LEVEL_LEVEL
§ UTMIP_SESS_LEVEL_LEVEL
USB1_UTMIP_BIAS_CFG1_0:
§ UTMIP_FORCE_PDTRK_POWERUP
§ UTMIP_FORCE_PDTRK_POWERDOWN
§ Set the PLLU_BASE register fields, PLLU_DIVM, PLLU_DIVN, PLLU_VCO_FREQ, PLLU_BYPASS and
PLLU_ENABLE fields as described in this document.
2. Configure USB_OTG
4. Assert and deassert the master USBD reset in the CAR block (SWR_USBD_RST in the RST_DEVICES_L register)
to bring USB_OTG out of reset.
5. Stop the crystal clock by setting UTMIP_PHY_XTAL_CLOCKEN in the UTMIP_MISC_CFG1 register to 0. This only
stops the crystal clocks in the UTMIP units.
o To use the A Session Valid for cable detection logic, set the USB1_VBUS_SENSE_CTL field in the
USB1_LEGACY_CTRL register to A_SESS_VLD (2’b11).
o Set UTMIP_BAT_CHRG_CFG0.UTMIP_PD_CHRG to 1.
o Set UTMIP_XCVR_CFG0.UTMIP_XCVR_LSBIAS_SEL to 0.
o Set UTMIP_HSRX_CFG1.UTMIP_HS_SYNC_START_DLY to 9
10. Restart the crystal clock by setting UTMIP_PHY_XTAL_CLOCKEN in the UTMIP_MISC_CFG1 register to 1 for
USB_OTG.
11. Wait for cable connect on the USB_OTG UTMIP1 port. When cable is connected on USB_OTG UTMIP1 port,
continue to the next step.
12. Bring UTMIP1 out of reset by writing 0 to the UTMIP_RESET bit of the USB1_IF_SUSP_CTRL register.
§ The burst size for the USB controller should be programmed to 8 in the USB2D_BURSTSIZE register. Both
TXPBURST and RXPBURST fields should be programmed to the same value of 8.
§ The ENB_FAST_REARBITRATE field for AHB_MEM gizmo should be set to 1 in the AHB_GIZMO_AHB_MEM
register.
§ The IMMEDIATE field for USB gizmos should be set to 1 in the AHB_GIZMO_USB, AHB_GIZMO_USB2, or
AHB_GIZMO_USB3 register, depending on the controller in use.
§ USB controllers should be set as high-priority masters on AHB by setting the bits corresponding to each USB
controller to 1 in AHB_PRIORITY_SELECT field in the register AHB_ARBITRATION_PRIORITY_CTRL and
setting the priority weight to 7 by setting the AHB_PRIORITY_WEIGHT field in the same register. USB master
numbers are 6 for USB_OTG, 18 for USB2, and 17 for USB3. The priority weight could be relaxed depending on
requirements from other AHB masters in the system as required for different use cases.
§ The prefetch engine needs to be set up correctly to enable prefetching of transmit data packets for USB masters.
Each USB master needs one channel on the prefetch engine. There are 4 channels on the prefetch engine. If all
3 USB masters enable one channel at the same time, it would leave one more channel for another AHB master.
Each prefetch channel is controlled by the AHB_AHB_MEM_PREFETCH_CFG[NO] register, where NO=1,2,3,4.
To enable prefetch for a USB controller on a channel, program AHB_MST_ID_USB, AHB_MST_ID_USB2, or
AHB_MST_ID_USB3 in the AHB_MST_ID field for the AHB_AHB_MEM_PREFETCH_CFG[NO] register. The
ADDR_BNDRY field should be set to log2 (buffer size) according to the buffer size required for the
corresponding USB master. The SPEC_THROTTLE field should be set to 0, and the INACTIVITY_TIMEOUT
field should be set to 0x800.
§ When a particular USB controller is in Host mode, the TXFIFOTHRES field in the USB2D_TXFILLTUNING
register (offset 0x154) should be set to 0x10.
All this programming needs to be done before the RS bit in USB2D_USBCMD is set to RUN (1) for the corresponding USB
controller.
2. When auto resume happens, the system starts restoring the USB controller.
3. Set the RUN bit from the USB controller to start SOFs.
5. Switch the USB bus from the PMC to the USB controller.
6. Wait until a resume complete notification from the USB controller. This is handled by the EHCI driver.
19.13.1.1 USB2_CONTROLLER_USB2D_ID_0
24:21 X REVISION: Revision number of the USB controller. This is set to 0x0.
15:8 X NID: One’s complement version of ID. This field is set to 0xF9.
19.13.1.2 USB2_CONTROLLER_USB2D_HW_HOST_0
3:1 X NPORT: VUSB_HS_NUM_PORT-1: This host controller has only 1 port. So this field will always be 0.
19.13.1.3 USB2_CONTROLLER_USB2D_HW_DEVICE_0
DEVEP: VUSB_HS_DV_EP: Number of endpoints supported by this device controller. Set to 16. This
5:1 X
includes control endpoint 0.
19.13.1.4 USB2_CONTROLLER_USB2D_HW_TXBUF_0
TXCHANADD: VUSB_HS_TX_CHAN_ADD: Total number of address bits for the transmit buffer of each
23:16 X
transmit endpoint. Set to 7. Each transmit buffer is 128 words deep.
TXADD: VUSB_HS_TX_ADD: Total number of address bits for the transmit buffer. Set to 11. The total
15:8 X
depth of the transmit buffer is 2048 words.
TCBURST: VUSB_HS_TX_BURST: Maximum burst size supported by the transmit endpoints for data
7:0 X
transfers. Set to 8.
19.13.1.5 USB2_CONTROLLER_USB2D_HW_RXBUF_0
RXADD: VUSB_HS_RX_ADD: Total number of address bits for the receive buffer. Set to 7. The total
15:8 X
depth of the receive buffer is 128 words
RXBURST: VUSB_HS_RX_BURST: Maximum burst size supported by the receive endpoints for data
7:0 X
transfers. Set to 8.
19.13.1.6 USB2_CONTROLLER_USB2D_GPTIMER0LD_0
The host/device controller drivers can measure time-related activities using these timer registers. These registers are not part
of the standard EHCI controller.
GPTIMER0LD: This field is the value to be loaded into the GPTCNT countdown timer on a reset action.
23:0 0x0
The value in this register represents the time in microseconds minus 1 for the timer duration .
19.13.1.7 USB2_CONTROLLER_USB2D_GPTIMER0CTRL_0
Offset: 0x84 | Read/Write: R/W | Reset: 0x00XXXXXX (0b00xxxxx0xxxxxxxxxxxxxxxxxxxxxxxx)
31 RW 0x0 GTPRUN: This bit enables the general-purpose timer to run. Setting or clearing this bit will not
30 WO 0x0 GPTRST: Writing a one to this bit will reload the GPTCNT with the value in GPTLD.
GPTMODE: This bit selects between a single timer countdown and a looped countdown. In one-
shot mode, the timer will count down to zero, generate an interrupt, and stop until the counter is
24 RW 0x0
reset by software. In repeat mode, the timer will count down to zero, generate an interrupt, and
automatically reload the counter to begin again.
19.13.1.8 USB2_CONTROLLER_USB2D_GPTIMER1LD_0
Offset: 0x88 | Read/Write: R/W | Reset: 0x00000000 (0b000000000000000000000000)
GPTIMER1LD: This field is the value to be loaded into the GPTCNT countdown timer on a reset action.
23:0 0x0
The value in this register represents the time in microseconds minus 1 for the timer duration .
19.13.1.9 USB2_CONTROLLER_USB2D_GPTIMER1CTRL_0
Offset: 0x8c | Read/Write: R/W | Reset: 0x00XXXXXX (0b00xxxxx0xxxxxxxxxxxxxxxxxxxxxxxx)
GTPRUN: This bit enables the general-purpose timer to run. Setting or clearing this bit will not
31 RW 0x0
have an effect on the GPTCNT counter value.
30 WO 0x0 GPTRST: Writing a one to this bit will reload the GPTCNT with the value in GPTLD.
GPTMODE: This bit selects between a single timer countdown and a looped countdown. In one-
shot mode, the timer will count down to zero, generate an interrupt, and stop until the counter is
24 RW 0x0
reset by software. In repeat mode, the timer will count down to zero, generate an interrupt, and
automatically reload the counter to begin again.
19.13.1.10 USB2_CONTROLLER_USB2D_CAPLENGTH_0
CAPLENGTH: Indicates which offset to add to the register base address at the beginning of the
7:0 X
Operational Register. Set to 0x30.
19.13.1.11 USB2_CONTROLLER_USB2D_HCIVERSON_0
HCIVERSION: Contains a BCD encoding of the EHCI revision number supported by this host controller.
15:0 X The most significant byte of this register represents a major revision and the least significant byte is the
minor revision. This host controller supports EHCI revision 1.00.
19.13.1.12 USB2_CONTROLLER_USB2D_HCSPARAMS_0
N_TT: Number of Transaction Translators: Indicates the number of embedded transaction translators
27:24 X associated with the USB2.0 host controller. This field is always set to 1 indicating only 1 embedded TT
is implemented in this implementation. This is a non-EHCI field to support embedded TT.
N_PTT: Number of Ports per Transaction Translator: Indicates the number of ports assigned to each
23:20 X transaction translator within the USB2.0 host controller. Field always equals N_PORTS. This is a non-
EHCI field to support embedded TT.
N_CC: Number of Companion Controller: Indicates the number of companion controllers. This field is
15:12 X
set to 0.
N_PCC: Number of Ports per Companion Controller: Indicates the number of ports supported per
11:8 X
internal companion controller. This field is set to 0.
PPC: Port Power Control: Indicates whether the host controller implementation includes port power
control.
1 = Ports have port power switches
4 X
0= Ports do not have port power switches.
This field affects the functionality of the port Power field in each port status and control register. This
field is set to 1.
N_PORTS: Number of downstream ports. This field specifies the number of physical downstream ports
3:0 X
implemented on this host controller. This field is fixed to 1, since this host controller only supports 1 port.
19.13.1.13 USB2_CONTROLLER_USB2D_HCCPARAMS_0
PPC: Per-Port Change Event Capability - RO. Default = 1b. This field indicates the support for per-port
18 X change events. This field is related to the USBCMD PPE field, USBSTS PPCI field, and USBINTR PPCE
field.
LEN: Link Power Management Capability - RO. Default = 1b. This field indicates the support for LPM L1
17 X state. This field is related to USBCMD HIRD field, POSTSCx SSTS and DA fields and HOSTPCx LEN,
BA, and EPLPM fields.
EECP: EHCI Extended Capabilities Pointer: Indicates a capabilities list exists. A value of 00h indicates no
15:8 X
extended capabilities are implemented. For this implementation this field is always "0".
IST: Isochronous Scheduling Threshold. This field indicates, relative to the current position of the
executing host controller, where software can reliably update the isochronous schedule. When bit [7] is
zero, the value of the least significant 3 bits indicates the number of micro-frames a host controller can
7:4 X
hold a set of isochronous data structures (one or more) before flushing the state. When bit [7] is a one,
then host software assumes the host controller may cache an isochronous data structure for an entire
frame. This field will always be "0".
ASP: Asynchronous Schedule Park Capability. 1 = (Default) the host controller supports the park feature
for high-speed queue heads in the Asynchronous Schedule. The feature can be disabled or enabled and
2 X
set to a specific level by using the Asynchronous Schedule Park Mode Enable and Asynchronous
Schedule Park Mode Count fields in the USBCMD register. This field is always 1.
PFL: Programmable Frame List Flag. 0 = System software must use a frame list length of 1024 elements
with this host controller. The USBCMD register Frame List Size field is a read-only register and must be
set to zero. 1 = System software can specify and use a smaller frame list and configure the host
1 X
controller via the USBCMD register Frame List Size field. The frame list must always be aligned on a 4K-
page boundary. This requirement ensures that the frame list is always physically contiguous. This field
will always be "1".
19.13.1.14 USB2_CONTROLLER_USB2D_DCIVERSION_0
DCIVERSION: The device controller interface conforms to the two-byte BCD encoding of the interface
15:0 X
version number contained in this register.
19.13.1.15 USB2_CONTROLLER_USB2D_DCCPARAMS_0
HC: Host Capable: 1 = This controller can operate as an EHCI compatible USB 2 0 host controller. This
8 X
field is set to 1.
7 X DC: Device Capable: 1 = Controller can operate as a USB 2.0 device. This field is set to 1.
LEN: Link Power Management Capability - RO. Default = 1b. This field indicates the support for LPM L1
5 X
state. This field is related to the DEVLCx ASUS, STL, BA, and NYT fields.
4:0 X DEN: Device Endpoint Number: Number of endpoints built into the device controller. This is set to 16.
19.13.1.16 USB2_CONTROLLER_USB2D_EXTSTS_0
TI1: General Purpose Timer Interrupt 1 - RWC. Default = 0b. This bit is set when the counter in the
4 RW 0x0
GPTIMER1CTRL register transitions to zero. Writing a one to this bit will clear it.
TI0: General Purpose Timer Interrupt 0 - RWC. Default = 0b. This bit is set when the counter in the
3 RW 0x0
GPTIMER1CTRL register transitions to zero. Writing a one to this bit will clear it.
UPA: USB Host Periodic Interrupt (USBHSTPERINT) R/WC. This bit is set by the Host Controller
when the cause of an interrupt is a completion of a USB transaction where the Transfer Descriptor
(TD) has an interrupt on complete (IOC) bit set and the TD was from the periodic schedule. This bit
is also set by the Host Controller when a short packet is detected AND the packet is on the periodic
2 RW 0x0
schedule. A short packet is when the actual number of bytes received was less than the expected
number of bytes. This bit is not used by the device controller and will always be zero.
0 = DISABLE
1 = ENABLE
UAI: USB Host Asynchronous Interrupt (USBHSTASYNCINT) R/WC. This bit is set by the Host
Controller when the cause of an interrupt is a completion of a USB transaction where the Transfer
Descriptor (TD) has an interrupt on complete (IOC) bit set AND the TD was from the asynchronous
schedule. This bit is also set by the Host when a short packet is detected AND the packet is on the
1 RW 0x0
asynchronous schedule. A short packet is when the actual number of bytes received was less than
the expected number of bytes. This bit is not used by the device controller and will always be zero.
0 = DISABLE
1 = ENABLE
NAKI: NAK Interrupt Bit Read Only. This bit is read only. It is set by hardware when for a particular
endpoint both the TX/RX Endpoint NAK bit and the corresponding TX/RX Endpoint NAK Enable bit
are set. This bit is automatically cleared by hardware when the all the enabled TX/RX Endpoint NAK
0 RO X
bits are cleared.
0 = DISABLE
1 = ENABLE
19.13.1.17 USB2_CONTROLLER_USB2D_USBEXTINTR_0
TIE1: General Purpose Timer Interrupt Enable 1 - RWC. Default = 0b. When this bit is a one, and the TI1
4 0x0 bit in the EXTSTS register is a one, the controller will issue an interrupt. The interrupt is acknowledged by
software clearing the TI1 bit.
TIE0: General Purpose Timer Interrupt Enable 0 - RWC. Default = 0b. When this bit is a one, and the TI1
3 0x0 bit in the EXTSTS register is a one, the controller will issue an interrupt. The interrupt is acknowledged by
software clearing the TI1 bit.
UPIE: UPIE Interrupt Enable. 1 = USB controller issues an interrupt if the UPA bit in USBSTS register
transitions.
2 0x0
0 = DISABLE
1 = ENABLE
UAIE: UAIE Interrupt Enable. 1 = USB controller issues an interrupt if the UAI bit in USBSTS register
transitions.
1 0x0
0 = DISABLE
1 = ENABLE
NAKE: NAK Interrupt Enable. 1 = USB controller issues an interrupt if the NAKI bit in USBSTS register
transitions.
0 0x0
0 = DISABLE
1 = ENABLE
19.13.1.18 USB2_CONTROLLER_USB2D_USBCMD_0
HIRD: Host Initiated Resume Duration RW. Default = 0000b. This has the same behavior as bits
7:4 of the BA field of the HOSTPCx register. When writing to this field all BA[7:4] fields of all
HOSTPCx registers will be set to this value. This field is used by system software to specify the
minimum amount of time the host controller will drive the K-state during a host-initiated resume
from an LPM state (e.g., L1), and is conveyed to each LPM-enabled device (via the HIRD bits
within an LPM Tokens bmAttributes field) upon entry into a low-power state. Note the host
27:24 RW 0x0
controller is required to drive resume signaling for at least the amount of time specified in the
HIRD value conveyed to the device during any proceeding host-initiated resume. Also note that
the host controller is not required to observe this requirement during device-initiated resumes.
Encoding for this field is identical to the definition for the similarly named HIRD field within an
LPM Token, specifically: a value 0000b equals 50 µs and each additional increment adds 75 µs.
For example, the value 0001b equals 125 µs, and the value 1111b equals 1,175 µs (~1.2 ms).
ITC: Interrupt Threshold Control .Read/Write. Default 08h. The system software uses this field to
set the maximum rate at which the host/device controller will issue interrupts. ITC contains the
maximum interrupt interval measured in micro-frames. Valid values are shown below. Value
Maximum Interrupt Interval.
00h: Immediate (no threshold).
01h: 1 micro-frame.
02h: 2 micro-frames.
04h: 4 micro-frames.
23:16 RW 0x8 08h: 8 micro-frames.
10h: 16 micro-frames.
20h: 32 micro-frames.
40h: 64 micro-frames
0 = IMMEDIATE
2 = ONE_MF
4 = TWO_MF
8 = EIGHT_MF
16 = SIXTEEN_MF
ATDTW: Add DTD Tripwire. This bit is used as a semaphore when a DTD is added to an active
(primed) endpoint. This bit is set and cleared by software and will be cleared by hardware when a
14 RW 0x0 hazard exists such that adding a dTD to a primed endpoint may go unnoticed.
0 = CLEAR
1 = SET
SUTW: Setup Tripwire. This bit is used as a semaphore when the 8 bytes of setup data read
extracted by the firmware. If the setup lockout mode is off, then there exists a hazard when new
setup data arrives and firmware is copying setup data from the queue head (QH) for a previous
13 RW 0x0 setup packet. This bit is set and cleared by software and will be cleared by hardware when a
hazard exists.
0 = CLEAR
1 = SET
ASPE: Asynchronous Schedule Park mode Enable. Software uses this bit to enable or disable
Park mode. When this bit is one, Park mode is enabled. When this bit is a zero, Park mode is
11 RW 0x1 disabled. This field is set to "1" in this implementation.
0 = DISABLE
1 = ENABLE
LR: Light Host/Device Controller Reset (OPTIONAL). Read Only. Not Implemented. This field will
7 RO X
always be "0".
IAA: Interrupt on Async Advance Doorbell. When the host controller has evicted all appropriate
cached schedule states, it sets the Interrupt on Async Advance status bit in the USBSTS register.
If the Interrupt on Sync Advance Enable bit in the USBINTR register is one, then the host
controller will assert an interrupt at the next interrupt threshold. The host controller sets this bit to
zero after it has set the Interrupt on Sync Advance status bit in the USBSTS register to one.
6 RW 0x0
Software should not write a one to this bit when the asynchronous schedule is inactive. Doing so
will yield undefined results. This bit is only used in host mode. Writing a one to this bit when
device mode is selected will have undefined results.
0 = CLEAR
1 = SET
ASE: Asynchronous Schedule Enable. This bit controls whether the host controller skips
processing the Asynchronous Schedule. 0 = Do not process the Asynchronous Schedule. 1 =
Use the ASYNCLISTADDR register to access the Asynchronous Schedule. Only the host
5 RW 0x0
controller uses this bit.
0 = DISABLE
1 = ENABLE
PSE: Periodic Schedule Enable. This bit controls whether the host controller skips processing the
Periodic Schedule. 0 = Do not process the Periodic Schedule 1 = Use the PERIODICLISTBASE
4 RW 0x0 register to access the Periodic Schedule. Only the host controller uses this bit.
0 = DISABLE
1 = ENABLE
FS1_FS0: Frame List Size. (Read/Write). 000 = (Default). This field is Read/Write only if the
Programmable Frame List Flag in the HCCPARAMS registers is set to one. Hence this field is
Read/Write for this implementation. This field specifies the size of the frame list that controls
which bits in the Frame Index Register should be used for the Frame List Current index. Note that
3:2 RW 0x0 this field is made up from USBCMD bits 15, 3, and 2.
000 = 1024 elements (4096 bytes) Default value
001 = 512 elements (2048 bytes)
010 = 256 elements (1024 bytes)
011 = 128 elements (512 bytes)
RST: Controller Reset. Software uses this bit to reset the controller. This bit is set to zero by the
Host/Device Controller when the reset process is complete. Software cannot terminate the reset
process early by writing a zero to this register.
Host Controller: When software writes a one to this bit, the Host Controller resets its internal
pipelines, timers, counters, state machines etc. to their initial value. Any transaction currently in
progress on USB is immediately terminated. A USB reset is not driven on downstream ports.
Software should not set this bit to a one when the HCHalted bit in the USBSTS register is a zero.
1 RW 0x0
Attempting to reset an actively running host controller results in undefined behavior.
Device Controller: When software writes a one to this bit, the Device Controller resets its internal
pipelines, timers, counters, state machines etc. to their initial value. Any transaction currently in
progress on USB is immediately terminated. Writing a one to this bit in device mode is not
recommended.
0 = CLEAR
1 = SET
RS: Run/Stop: Host Controller: When set to a 1, the Host Controller proceeds with the execution
of the schedule. The Host Controller continues execution as long as this bit is set to a one. When
this bit is set to 0, the Host Controller completes the current transaction on the USB and then
halts. The HCHalted bit in the status register indicates when the Host Controller has finished the
transaction and has entered the stopped state. Software should not write a one to this field unless
the host controller is in the Halted state (i.e., HCHalted in the USBSTS register is a one).
0 RW 0x0 Device Controller: Writing a one to this bit will cause the device controller to enable a pull-up on
D+ and initiate an attach event. This control bit is not directly connected to the pull-up enable, as
the pull-up will become disabled upon transitioning into high-speed mode. Software should use
this bit to prevent an attach event before the device controller has been properly initialized.
Writing a 0 to this will cause a detach event.
0 = STOP
1 = RUN
19.13.1.19 USB2_CONTROLLER_USB2D_USBSTS_0
PPCI: Port-n Change Detect - RW. Default = 0000h. The definition for each bit is identical to the
Port Change Detect field (bit 2 of this register) except these bits are specific to a given port,
31:16 RW 0x0 where bit 16 = Port 1, 17 = Port 2, etc. For example, if bit 17 is set to a one then a port change
event was detected on Port 2. The N_PORTS field in HCSPARAMS specifies how many ports
are exposed by the host controller and thus how many bits in this field are valid.
AS: Asynchronous Schedule Status. This bit reports the current real status of the Asynchronous
Schedule. When set to zero the asynchronous schedule status is disabled and if set to one the
status is enabled. The Host Controller is not required to immediately disable or enable the
Asynchronous Schedule when software transitions the Asynchronous Schedule Enable bit in the
15 RW 0x0
USBCMD register. If AS = ASE: 1= Enable Asynchronous Schedule. 0= Disable Asynchronous
Schedule. Only used by the host controller.
0 = DISABLE
1 = ENABLE
PS: Periodic Schedule Status. This bit reports the current real status of the Periodic Schedule.
When set to zero the periodic schedule is disabled, and if set to one the status is enabled. The
Host Controller is not required to immediately disable or enable the Periodic Schedule when
software transitions the Periodic Schedule Enable bit in the USBCMD register. If PS = PSE then:
14 RW 0x0
1 = Periodic Schedule is enabled or 0 = Periodic Schedule is disabled. Only used by the host
controller.
0 = DISABLE
1 = ENABLE
RCL: Reclamation. This is a read-only status bit used to detect an empty asynchronous schedule.
Only used by the host controller.
13 RO X
0 = DISABLE
1 = ENABLE
HCH: HCHalted. 1 = Default. This bit is a zero whenever the Run/Stop bit is a one. The Host
Controller sets this bit to one after it has stopped executing because of the Run/Stop bit being set
to 0, either by software or by the Host Controller hardware (e.g., internal error). Only used by the
12 RW 0x1
host controller.
0 = UNHALTED
1 = HALTED
UALT_INT: ULPI alt_int Interrupt. 0 = Default. This interrupt bit is set when an RXCMD is
received through the ULPI interface with bit 7 set (alt_int).The alt_int itself is set when an
unmasked event occurs on any bit in the Carkit Interrupt Latch Register, in the ULPI PHY The
software should read the Carkit Interrupt Latch Register (Read to Clear) through the ULPI
11 RW 0x0 Viewport to check the source of the interrupt. Only present in designs where configuration
constant VUSB_HS_PHY_ULPI = 1.
0 = NOT_ULPI_ALT_INT
1 = ULPI_ALT_INT
ULPI_INT: ULPI Interrupt. This bit is set whenever an interrupt is received from ULPI PHY.
Software writes 1 to clear it.
10 RW 0x0
0 = NOT_ULPI_INT
1 = ULPI_INT
SLI: DCSuspend. When a device controller enters a suspend state from an active state, this bit
will be set to a 1. The device controller clears the bit upon exiting from a suspend state. Only
8 RW 0x0 used by the device controller.
0 = NOTSUSPEND
1 = SUSPENDED
SRI: SOF Received. When the device controller detects a Start Of (micro) Frame, this bit will be
set to a one. When an SOF is extremely late, the device controller will automatically set this bit to
indicate that an SOF was expected. Therefore, this bit will be set roughly every 1 ms in device FS
mode and every 125 µs in HS mode and will be synchronized to the actual SOF that is received.
Since the device controller is initialized to FS before connect, this bit will be set at an interval of
7 RW 0x0
1 ms during the prelude to the connect and chirp. In host mode, this bit will be set every 125 µs
and can be used by the host controller driver as a time base. Software writes a 1 to this bit to
clear it. This is a non-EHCI status bit.
0 = SOF_NOT_RCVD
1 = SOF_RCVD
URI: USB Reset Received. When the device controller detects a USB Reset and enters the
default state, this bit is set to a 1. Software can write a 1 to this bit to clear the USB Reset
6 RW 0x0 Received status bit. Only used by the device controller.
0 = NO_USB_RESET
1 = USB_RESET
AAI: Interrupt and Asynchronous Advance. System software can force the host controller to issue
an interrupt the next time the host controller advances the asynchronous schedule by writing a
one to the Interrupt on Async Advance Doorbell bit in the USBCMD register. This status bit
5 RW 0x0
indicates the assertion of that interrupt source. Only used by the host controller
0 = NOT_ADVANCED
1 = ADVANCED
SEI: System Error. This bit is not used in this implementation and will always be set to "0".
4 RO X 0 = NO_ERROR
1 = ERROR
FRI: Frame List Rollover. The Host Controller sets this bit to a 1 when the Frame List Index rolls
over from its maximum value to 0. The exact value at which the rollover occurs depends on the
frame list size. For example. If the frame list size (as programmed in the Frame List Size field of
the USBCMD register) is 1024, the Frame Index Register rolls over every time FRINDEX [1 3]
3 RW 0x0
toggles. Similarly, if the size is 512, the Host Controller sets this bit to a 1 every time FHINDEX
[12] toggles. Only used by the host controller.
0 = NO_ROLLOVER
1 = ROLLOVER
PCI: Port Change Detect. The Host Controller sets this bit to a 1 when on any port a Connect
Status occurs, a Port Enable/Disable Change occurs, or the Force Port Resume bit is set as the
result of a J-K transition on the suspended port. The Device Controller sets this bit to a one when
the port controller enters the full or high-speed operational state. When the port controller exits
2 RW 0x0 the full or high-speed operational states due to Reset or Suspend events, the notification
mechanisms are the USB Reset Received bit and the DCSuspend bits, respectively. This bit is
not EHCI compatible.
0 = NO_PORT_CHANGE
1 = PORT_CHANGE
UEI: USB Error Interrupt. This bit gets set by the Host/Device controller when completion of a
USB transaction results in an error condition. This bit is set along with the USBINT bit, if the TD
1 RW 0x0 on which the error interrupt occurred also had its interrupt on complete (IOC) bit set.
0 = NO_ERROR
1 = ERROR
UI: USB Interrupt. This bit is set by the Host/Device Controller when the cause of an interrupt is a
completion of a USB transaction where the Transfer Descriptor (TD) as an interrupt on complete
(IOC) bit set. This bit is also set by the Host/Device Controller when a short packet is detected. A
0 RW 0x0 short packet is when the actual number of bytes received was less than the expected number of
bytes.
0 = NO_INT
1 = INT
19.13.1.20 USB2_CONTROLLER_USB2D_USBINTR_0
PPCE: Port-n Change Detect Enable - RW. Default = 0000h. The definition for each bit in this field is
identical to bit 2 of this register (Port Change Interrupt Enable) except these bits are specific to a given
port, where bit 16 = Port 1, 17 = Port 2, etc. For example, if bit 17 is set (1b) then a port change event
31:16 0x0
was detected on Port 2. When a bit in this field is a one, and the corresponding Port-n Change Detect
bit in the USBSTS register is a one, the host controller will issue an interrupt. The interrupt is
acknowledged by software clearing the Port-n Change Detect bit.
UALTIE: ULPI alt_int Interrupt Enable. 1 = USB controller issues an interrupt if the ULPI_ALT_INT bit in
the USBSTS register transitions. The interrupt is acknowledged by software by writing a 1 to the
11 0x0 ULPI_ALT_INT bit.
0 = DISABLE
1 = ENABLE
ULPIE: ULPI Interrupt Enable. 1 = USB controller issues an interrupt if ULPI_INT bit in USBSTS register
transitions. The interrupt is acknowledged by software by writing a 1 to the ULPI_INT bit.
10 0x0
0 = DISABLE
1 = ENABLE
SLE: Sleep Enable. 1 = Device controller issues an interrupt if DCSuspend bit in USBSTS register
transitions. The interrupt is acknowledged by software by writing a 1 to the DCSuspend bit. Only used
8 0x0 by the device controller.
0 = DISABLE
1 = ENABLE
SRE: SOF Received Enable. 1 = Device controller issues an interrupt if SOF Received bit in USBSTS
register = 1. The interrupt is acknowledged by software clearing the SOF Received bit.
7 0x0
0 = DISABLE
1 = ENABLE
URE: USB Reset Enable.1 = Device controller issues an interrupt if USB Reset Received bit in USBSTS
register = 1. The interrupt is acknowledged by software clearing the USB Reset Received bit. Only used
6 0x0 by the device controller.
0 = DISABLE
1 = ENABLE
AAE: Interrupt on Asynchronous Advance Enable. 1 = The host controller issues an interrupt at the next
interrupt threshold if Interrupt on Async Advance bit in USBSTS register = 1. The interrupt is
5 0x0 acknowledged by software clearing the Interrupt on Async Advance bit. Only used by the host controller.
0 = DISABLE
1 = ENABLE
SEE: System Error Enable. 1 = Host/device controller issues an interrupt if the System Error bit in
USBSTS register = 1. The interrupt is acknowledged by software clearing the System Error bit.
4 0x0
0 = DISABLE
1 = ENABLE
FRE: Frame List Rollover Enable. 1 = Host controller issues an interrupt if Frame List Rollover bit in the
USBSTS register = 1. The interrupt is acknowledged by software clearing the Frame List Rollover bit.
3 0x0 Only used by the host controller.
0 = DISABLE
1 = ENABLE
PCE: Port Change Detect Enable. 1 = Host/device controller issues an interrupt if Port Change Detect
bit in USBSTS register = 1. The interrupt is acknowledged by software clearing the Port Change Detect
2 0x0 bit.
0 = DISABLE
1 = ENABLE
UEE: USB Error Interrupt Enable. 1 = Host controller issues an interrupt at the next interrupt threshold if
the USBERRINT bit in USBSTS = 1. The interrupt is acknowledged by software clearing the
1 0x0 USBERRINT bit in the USBSTS register.
0 = DISABLE
1 = ENABLE
UE: USB Interrupt Enable. 1 = Host/device issues an interrupt at the next interrupt threshold if the
USBINT bit in USBSTS = 1. The interrupt is acknowledged by software clearing the USBINT bit.
0 0x0
0 = DISABLE
1 = ENABLE
19.13.1.21 USB2_CONTROLLER_USB2D_FRINDEX_0
FRINDEX: Frame Index. The value in this register increments at the end of each time frame (micro-
frame). Bits [N: 3] are used for the Frame List current index. Each location of the frame list is accessed 8
times (frames or micro-frames) before moving to the next index. The following illustrates values of N
based on the value of the Frame List Size field in the USBCMD register, when used in host
mode. USBCMD [Frame List Size] Number Elements N
000b (1024) 12
001b (512) 11
13:0 X 010b (256) 10
011b (128) 9
100b (64) 8
101b (32) 7
110b (16) 6
111b (8) 5
In device mode, the value is the current frame number of the last frame transmitted. It is not used as an
index. In either mode bits 2:0 indicate the current micro-frame.
19.13.1.22 USB2_CONTROLLER_USB2D_PERIODICLISTBASE_0
USBADR: Device mode. The upper seven bits of this register represent the device address. After any
controller reset or a USB reset, the device address is set to the default address (0). The default address
31:25 0x0
will match all incoming addresses. Software shall reprogram the address after receiving a
SET_ADDRESS request.
USBADRA: Device Address Advance. Default=0. When this bit is 0, any writes to USBADR are
instantaneous. When this bit is written to a 1 at the same time or before USBADR is written, the write to
the USBADR field is staged and held in a hidden register. After an IN occurs on endpoint 0 and is
ACKed, USBADR will be loaded from the holding register. Hardware will automatically clear this bit on
the following conditions:
1) IN is ACKed to endpoint 0. (USBADR is updated from staging register).
24 0x0 2) OUT/SETUP occur to endpoint 0. (USBADR is not updated).
3) Device Reset occurs (USBADR is reset to 0).
Note: After the status phase of the SET_ADDRESS descriptor, the DCD has 2 ms to program the
USBADR field. This mechanism will ensure this specification is met when the DCD cannot write of the
device address within 2 ms from the SET_ADDRESS status phase. If the DCD writes the USBADR with
USBADRA=1 after the SET_ADDRESS data phase (before the prime of the status phase), the
USBADR will be programmed instantly at the correct time and meet the 2 ms USB requirement.
BASEADR: Host mode: This 32-bit register contains the beginning address of the Periodic Frame List in
the system memory. The HCD loads this register prior to starting the schedule execution by the Host
Controller. The memory structure referenced by this physical memory pointer is assumed to be 4-Kbyte
31:12 0x0
aligned. The contents of this register are combined with the Frame Index Register (FRINDEX) to enable
the Host Controller to step through the Periodic Frame List in sequence. Base Address (Low). These
bits correspond to memory address signals [31:12], respectively. Only used by the host controller.
19.13.1.23 USB2_CONTROLLER_USB2D_ASYNCLISTADDR_0
EPBASE: Device mode. This register contains the address of the top of the endpoint list in system
31:11 0x0 memory. These bits correspond to memory address signals [31:11], respectively. This field will
reference a list of up to 32 Queue Heads (QHs). Only used by the device controller.
ASYBASE: Host mode. This 32-bit register contains the address of the next asynchronous queue head
31:5 0x0 to be executed by the host. Link Pointer Low (LPL). These bits correspond to memory address signals
[31:5], respectively. This field may only reference a Queue Head (OH). Only used by the host controller.
19.13.1.24 USB2_CONTROLLER_USB2D_ASYNCTTSTS_0
30:24 RW 0x0 TTHA: Internal TT Hub Address representation. This field is used to match the Hub Address field
in Queue Head (QH) and split isochronous transaction descriptor (siTD) to determine if the packet
is routed to the internal transaction translator (TT) for directly attached FS/LS devices. If the Hub
Address in the QH or siTD does not match this address then the packet will be broadcast on the
High Speed ports destined for a downstream High Speed hub with the address in QH/siTD.
1 RW 0x0 TTAC: Embedded TT Async Buffers Clear. (Read/Write to set). This field will clear all pending
transactions in the embedded TT Async Buffer(s). The clear will take as much time as necessary
TTAS: Embedded TT Async Buffers Status. (Read Only). This read only bit will be 1 if one or
0 RO X more transactions are being held in the embedded TT Async. Buffers. When this bit is a zero,
then all outstanding transactions in the embedded TT have been flushed.
19.13.1.25 USB2_CONTROLLER_USB2D_BURSTSIZE_0
TXPBURST: Programmable TX Burst Length. (Read/Write). This register represents the maximum length
15:8 0x8
of a burst in 32-bit words while moving data from system memory to the USB bus.
RXPBURST: Programmable RX Burst Length. (Read/Write). This register represents the maximum
7:0 0x8
length of a burst in 32-bit words while moving data from the USB bus to system memory.
19.13.1.26 USB2_CONTROLLER_USB2D_TXFILLTUNING_0
TXFIFOTHRES: FIFO Burst Threshold. (Read/Write). This register controls the number of data bursts
that are posted to the TX latency FIFO in host mode before the packet begins on to the bus. The
minimum value is 2 and this value should be a low as possible to maximize USB performance. A higher
21:16 0x2 value can be used in systems with unpredictable latency and/or insufficient bandwidth where the FIFO
may underrun because the data transferred from the latency FIFO to USB occurs before it can be
replenished from system memory. This value is ignored if the Stream Disable bit in USBMODE register
is set.
TXSCHOH: Scheduler Overhead. (Read/Write) [Default = 0] This register adds an additional fixed offset
to the schedule time estimator described above as Tff. As an approximation, the value chosen for this
register should limit the number of back-off events captured in the TXSCHHEALTH to less than 10 per
7:0 0x0 second in a highly utilized bus. Choosing a value that is too high for this register is not desired as it can
needlessly reduce USB utilization. The time unit represented in this register is 1.267 µs when a device
is connected in High-Speed Mode. The time unit represented in this register is 6.333 µs when a device
is connected in Low/Full Speed Mode
19.13.1.27 USB2_CONTROLLER_USB2D_ICUSB_CTRL_0
This register enables and controls the ICUSB FS/LS transceiver.
IC_ENB1: ICUSB transceiver enable. This bit enables the ICUSB transceiver. To enable the interface, the
3 0x0 bits PTS must be set to 11 in the PORTSCx. Writing a '1' to this bit selects the IC_USB interface.
0 = DISABLE
IC_VDD1: ICUSB voltage select. It selects which voltage is being supplied to the ICUSB peripheral.
000 = No voltage
001 = 1.0V - reserved
010 = 1.2V - reserved
011 = 1.5V - reserved
2:0 0x0 100 = 1.8V
101 = 3.0V
110 = reserved
111 = reserved
The Voltage negotiation should happen between enabling port power (PP) and asserting the run/stop bit in
register.
19.13.1.28 USB2_CONTROLLER_USB2D_ULPI_VIEWPORT_0
This register provides indirect access to the ULPI PHY register set. Although the USB controller performs access to the ULPI
PHY register set, there may be extraordinary circumstances where software may need direct access.
Note: WRITES TO THE ULPI THROUGH THE VIEWPORT CAN SUBSTANTIALLY HARM STANDARD USB
OPERATIONS. CURRENTLY NO USAGE MODEL HAS BEEN DEFINED WHERE SOFTWARE SHOULD
NEED TO EXECUTE WRITES DIRECTLY TO THE ULPI PHY. SEE EXCEPTION REGARDING
OPTIONAL FEATURES BELOW.
Note: Executing read operations through the ULPI Viewport should have no harmful side effects to standard USB
operations.
There are two operations that can be performed with the ULPI Viewport: wakeup and read /write operations.
The wakeup operation is used to put the ULPI interface into normal operation mode and reenable the clock if necessary. A
wakeup operation is required before accessing the registers when the ULPI interface is operating in low power mode, serial
mode, or carkit mode.
The ULPI state can be determined by reading the sync state bit (ULPI_SYNC_STATE). If this bit is a one, then ULPI interface
is running in normal operation mode and can accept read/write operations. If the ULPI_SYNC_STATE indicates a 0 then then
read/write operations will not be able to execute. Undefined behavior will result if ULPI_SYNC_STATE = 0 and a read or write
operation is performed.
To execute a wakeup operation, write all 32-bits of the ULPI Viewport where ULPI_PORT is constructed appropriately and the
ULPI_WAKEUP bit is a 1 and ULPI_RUN bit is a 0. Poll the ULPI Viewport until ULPI_WAKEUP is zero for the operation to
complete.
To execute a read or write operation, write all 32 bits of the ULPI Viewport where ULPI_DATA_WR, ULPI_REG_ADDR,
ULPI_PORT, ULPI_RD_WR are constructed appropriately and the ULPI_RUN bit is a 1. Poll the ULPI Viewport until
ULPI_RUN is zero for the operation to complete. Once ULPI_RUN is zero, the ULPI_DATA_RD will be valid if the operation
was a read.
The polling method above can be changed to interrupt driven using the ULPI interrupt defined in the USBSTS and USBINTR
registers. When a wakeup or read/write operation is complete, the ULPI_INT interrupt will be set.
There are several optional features that may need to be enabled or disabled by system software as part of system
configuration. These bits are contained in the Interface and OTG Control registers of the ULPI PHY register set. These
registers also contain bits which are controlled by the link dynamically and therefore should be only modified by system
software using the Set/Clear access method. Direct writes to these registers could have harmful side effects to the standard
USB operations. The optional bits are as follows: Bits 3 through 7 in the Interface Control register and Bits 6 and 7 in the OTG
Control register.
Please refer to the ULPI Specification Revision 1.1 for further information on the use of the optional features.
ULPI_WAKEUP: ULPI Wakeup. Writing the 1 to this bit will begin the wakeup operation. The bit
will automatically transition to 0 after the wakeup is complete. Once this bit is set, the driver
cannot set it back to 0. Note: The driver must never execute a wakeup and a read/write operation
31 RW 0x0
at the same time.
0 = CLEAR
1 = SET
ULPI_RUN: ULPI read/write Run. Writing the 1 to this bit will begin the read/write operation. The
bit will automatically transition to 0 after the read/write is complete. Once this bit is set, the driver
cannot set it back to 0. Note: The driver must never execute a wakeup and a read/write operation
30 RW 0x0
at the same time.
0 = CLEAR
1 = SET
ULPI_RD_WR: ULPI read/write control. (0) Read; (1) Write. This bit selects between running a
read or write operation.
29 RW 0x0
0 = READ
1 = WRITE
ULPI_SYNC_STATE: ULPI sync state. (1) Normal Sync. State. (0) In another state (i.e., carkit,
serial, low power). This bit represents the state of the ULPI interface.
27 RO X
0 = NOT_NORMAL
1 = NORMAL
26:24 RW 0x0 ULPI_PORT: ULPI PHY port number. This field should be always written as 0.
ULPI_REG_ADDR: ULPI PHY register address. When doing a read or write operation to the ULPI
23:16 RW 0x0
PHY, the address of the ULPI PHY register being accessed is written to this field.
ULPI_DATA_RD: ULPI PHY data read. The data from the ULPI PHY register can be read from
15:8 RO X
here after the read operation completes.
ULPI_DATA_WR: ULPI PHY data write. The data to write to the ULPI PHY register is written
7:0 RW 0x0
here.
19.13.1.29 USB2_CONTROLLER_USB2D_PORTSC1_0
DA: Device Address - RW. Default = 0000000b. The 7-bit USB device address for the device
attached to an immediately downstream of the associated root port. A value of zero indicates no
31:25 RW 0x0 device is present or software support for this feature is not present. This is used by the Controller
when sending the LPM token. This field is only valid when the core is operating in host mode. If in
device mode it will be read only and always equal to 0000000b.
SSTS: Suspend Status - RO. Default = 00b. These two bits are used by software to determine
whether an L1-based suspend request was successful, specifically:
00b - L1 state entered with success. ACK received from peripheral.
01b - NYET received from peripheral. It was not able to enter L1 state this time.
10b - L1 state not supported by peripheral. STALL received.
11b - Peripheral did not respond or an error occurred.
The value of this field is only valid when the port resides in the L0 state - that is, the meaning of
24:23 RO X these bits is invalid whenever bit 7 of this register (SUSP) is one. Ideally, the Controller driver
should read this register if it receives an interrupt after issuing a suspend using L1 support. In
case of a non-success a port change interrupt will be fired and this field should be checked for a
possible L1 failure. This field is only valid when the core is operating in host mode. If in device
mode, it will be always equal to 00b.
0 = L1STATE_ENTERED
1 = NYET_PERIPH
2 = L1STATE_NOT_SUPPORTED
WKOC: Default = 0b. Wake on Over-current Enable: Writing this bit to a one enables the port to
be sensitive to over-current conditions as wake-up events. This field is zero if Port Power (PP) is
zero. This bit should only be used when operating in Host mode. Writing this bit to 1 while the
22 RW 0x0
controller is working in device mode can result in undefined behavior.
0 = DISABLE
1 = ENABLE
WKDS: Wake on Disconnect Enable: Writing this bit to a one enables the port to be sensitive to
device disconnects as wake-up events. This field is zero if Port Power (PP) is zero or in device
mode. This bit should only be used when operating in Host mode. Writing this bit to 1 while the
controller is working in device mode can result in undefined behavior. This bit should not be
21 RW 0x0
written to 1 if there is no device connected. After the device disconnect is detected, this bit should
be cleared to 0.
0 = DISABLE
1 = ENABLE
WKCN: Wake on Connect Enable: Writing this bit to a one enables the port to be sensitive to
device connects as wake-up events. This field is zero if Port Power (PP) is zero or in device
mode. This bit should only be used when operating in Host mode. Writing this bit to 1 while the
controller is working in device mode can result in undefined behavior. This bit should not be
20 RW 0x0
written to 1 while the device is connected. After the device connection is detected, this bit should
be cleared to 0.
0 = DISABLE
1 = ENABLE
PTC: Port Test Control: Any value other than zero indicates that the port is operating in test
mode. Value Specific Test.
0000b: Not enabled.
0001b: J_ STATE.
0010b: K_STATE.
0011b: SEQ_NAK.
0100b: Packet.
0101b: FORCE_ENABLE.
19:16 RW 0x0 0110b to 1111b: Reserved. | Refer to Chapter 7 of the USB Specification Revision 2.0 for details
on each test mode.
0 = NORMAL_OP
1 = TEST_J
2 = TEST_K
3 = TEST_SE0_NAK
4 = TEST_PKT
5 = TEST_FORCE_ENABLE
PIC: Port Indicator Control: This field is not supported in the current implementation. Please use a
15:14 RO X
GPIO if you wish to use Port Indicators.
PO: Port Owner. Port owner handoff is not implemented in this design, therefore this bit will
13 RO X
always be 0.
PP: Port Power: The function of this bit depends on the value of the Port Power Switching (PPC)
field in the HCSPARAMS register. The behavior is as follows:
PPC PP Operation
0b 0b Read Only. A device controller with no OTG capability does not have port
power control switches.
1b 1b/0b RW. Host/OTG controller requires port power control switches.
12 RW 0x1
This bit represents the current setting of the switch (0=off, 1=on). When power is not available on
a port (i.e., PP equals a 0), the port is non-functional and will not report attaches, detaches, etc.
When an over-current condition is detected on a powered port and PPC is a one, the PP bit in
each affected port may be transitioned by the host controller driver from a one to a zero
(removing power from the port).
0 = NOT_POWERED
1 = POWERED
LS: These bits reflect the current logical levels of the D+ (bit 11) and D- (bit 10) signal lines. The
encoding of the bits is:
00b = SE0.
01b = K-state.
10b = L-state.
11b = Undefined.
11:10 RO X The value of this field is undefined if Port Power (PP) is zero in host mode. In host mode, the use
of line-state by the host controller driver is not necessary (unlike EHCI), because the port
controller state machine and the port routing manage the connection of LS and FS. In device
mode, the use of line-state by the device controller driver is not necessary.
0 = SE0
1 = K_STATE
2 = J_STATE
3 = UNDEFINED
SLP: Suspend using L1 - RW. Default = 0b. When this bit is set to '1' and a non-zero Device
Address (DA) is specified, the Controller will instigate L1 entry during suspend (bit 7) and L1 exit
during resume (bit 6). When this bit is set to zero, the Controller will use the legacy (L2)
9 RW 0x0 mechanism. Software should only set this bit when the device attached immediately downstream
supports L1 transitions. When acting as device, this bit is read-only and set to '1' by the hardware
when the Controller enters is L1 state (LPM token received and accepted). Note: HSP is
redundant with PSPD[27:26]. This bit is not defined in the EHCI specification.
PR: This field is zero if Port Power (PP) is zero. In Host Mode: Read/Write. 1=Port is in Reset.
0=Port is not in Reset. When software writes a one to this bit the bus-reset sequence as defined
in the USB Specification Revision 2.0 is started. This bit will automatically change to zero after
the reset sequence is complete. This behavior is different from EHCI where the host controller
8 RW 0x0 driver is required to set this bit to a zero after the reset duration is timed in the driver. In Device
Mode: This bit is a read only status bit. Device reset from the USB bus is also indicated in the
USBSTS register.
0 = NOT_USB_RESET
1 = USB_RESET
SUSP: Port suspend. 1=Port in suspend state. 0=Port not in suspend state. In Host Mode:
Read/Write. Port Enabled Bit and Suspend bit of this register define the port states as follows:
Bits [Port Enabled, Suspend] Port State
0x Disable
10 Enable
11 Suspend.
When in the suspend state, downstream propagation of data is blocked on this port, except for
port reset. The blocking occurs at the end of the current transaction if a transaction was in
7 RO X progress when this bit was written to 1. In the suspend state, the port is sensitive to resume
detection. Note that the bit status does not change until the port is suspended and that there may
be a delay in suspending a port if there is a transaction currently in progress on the USB. The
host controller will unconditionally set this bit to zero when software sets the Force Port Resume
bit to zero. A write of zero to this bit is ignored by the host controller. If host software sets this bit
to a one when the port is not enabled (i.e., Port enabled bit is a zero), the results are undefined.
This field is zero if Port Power (PP) is zero in host mode.
In Device Mode: Read Only. This bit is a read only status bit.
0 = NOT_SUSPEND
1 = SUSPEND
FPR: Force Port Resume. 1= Resume detected/driven on port. 0=No resume (K state)
detected/driven on port.
In Host Mode: Software sets this bit to one to drive resume signaling. The Host Controller sets
this bit to one if a J-to-K transition is detected while the port is in the Suspend state. When this bit
transitions to a one because a J-to-K transition is detected, the Port Change Detect bit in the
USBSTS register is also set to one. This bit will automatically change to zero after the resume
sequence is complete. This behavior is different from EHCI where the host controller driver is
required to set this bit to a zero after the resume duration is timed in the driver. Note that when
the Host controller owns the port, the resume sequence follows the defined sequence
documented in the USB Specification Revision 2.0. The resume signaling (Full-speed 'K') is
driven on the port as long as this bit remains a one. This bit remains a one until the port has
6 RW 0x0 switched to the high-speed idle. Writing a zero has no effect because the port controller will time
the resume operation to clear the bit when the port control state switches to HS or FS idle. This
field is zero if Port Power (PP) is zero in host mode. This bit is not-EHCI compatible.
In Device mode: After the device has been in Suspend State for 5ms or more, software must set
this bit to one to drive resume signaling before clearing. The Device Controller will set this bit to
one if a J-to-K transition is detected while the port is in the Suspend state. The bit will be cleared
when the device returns to normal operation. Also, when this bit transitions to a one because a J-
to-K transition is detected, the Port Change Detect bit in the USBSTS register is also set to one.
Software should ensure that the PHY clock is operational before writing a 1 to this bit to start the
resume sequence. This is true for both Device and Host modes.
0 = NO_RESUME
1 = RESUME
PEC: Port Enable/Disable Change: 1=Port enabled/disabled status has changed. 0=No change.
In Host Mode: For the root hub, this bit gets set to a one only when a port is disabled due to
disconnect on the port or due to the appropriate conditions existing at the EOF2 point (See
Chapter 11 of the USB Specification). Software clears this by writing a one to it. This field is zero
3 RW 0x0
if Port Power (PP) is zero.
In Device mode: The device port is always enabled. (This bit will be zero.)
0 = NO_CHANGE
1 = CHANGE
CSC: Connect Status Change: 1 =Change in Current Connect Status. 0=No change (default)
In Host Mode: Indicates a change has occurred in the port's Current Connect Status. The
host/device controller sets this bit for all changes to the port device connect status, even if system
software has not cleared an existing connect status change. For example, the insertion status
changes twice before system software has cleared the changed condition, hub hardware will be
1 RW 0x0
'setting' an already-set bit (i.e., the bit will remain set). Software clears this bit by writing a one to
it. This field is zero if Port Power (PP) is zero in host mode.
This bit is undefined in device controller mode.
0 = NO_CHANGE
1 = CHANGE
19.13.1.30 USB2_CONTROLLER_USB2D_HOSTPC1_DEVLC_0
PTS: Parallel transceiver select. This bit is not defined in the EHCI specification.
0 = UTMI
1 = RESERVED
31:29 RW 0x0 2 = ULPI
3 = ICUSB_SER
4 = HSIC
STS: Serial transceiver not selected. This is the only value supported. This bit is not defined in
the EHCI specification.
28 RW 0x0
0 = PARALLEL_IF
1 = SERIAL_IF
PTW: Parallel Transceiver Width. Fixed to 0. This bit is not defined in the EHCI specification.
27 RO X 0 = EIGHT_BIT
1 = RESERVED
PSPD: This register field indicates the speed at which the port is operating. 00 = Full Speed 01 =
Low Speed 10 = High Speed. This bit is not defined in the EHCI specification.
0 = FULL_SPEED
26:25 RO X
1 = LOW_SPEED
2 = HIGH_SPEED
3 = RESERVED
ALPD: Auto Low Power While Disconnect - RW. Default = 0b. If set, this feature will be enabled,
and every time the port enters the disconnect state it will also enter low power state,disabling the
transceiver clock. The behavior will be same as if the PHCD bit was enabled (in fact this bit will
be set to 1 as soon as low power mode is enabled).When this field is set the WKCN field of
PORTSCx register (Wake on Connect Enable) will also be set. This way the core will wake up in
24 RW 0x0 case a connect is detected. There will be a delay between the detection of a disconnect and
actually enter in low power mode. This delay can be controlled by writing to the ALPDD field in
the register USBMODE.
0 = DONT_AUTO_LOW_POWER_WHILE_DISCONNECT
1 = AUTO_LOW_POWER_WHILE_DISCONNECT
PFSC: Port Force Full Speed Connect - RW. Default = 0b. Writing this bit to a '1b' will force the
port to only connect at Full Speed. It disables the chirp sequence that allows the port to identify
itself as High Speed. This is useful for testing FS configurations with an HS host, hub or device.
23 RW 0x0
This bit is not defined in the EHCI specification.
0 = DONT_FORCE_FULL_SPEED
1 = FORCE_FULL_SPEED
PHCD: PHY Low Power Suspend - Clock disable: Writing this bit to a 1 will disable the PHY
clock. Write a 0 enables it. Reading this bit will indicate the status of the PHY clock.
NOTE: The PHY clock cannot be disabled if it is being used as the system clock. In device mode,
the PHY can be put into Low Power Clock Disable when the device is not running (USBCMD
RS=0b) or the host has signaled suspend (PORTSCx SUSP=1b). Low Power Clock Disable will
22 RW 0x0 be cleared automatically when the host has signaled resume. Before forcing a resume from the
device, the Controller driver must clear this bit. In host mode, the PHY can be put into Low Power
Suspend Clock Disable when the downstream device has been put into suspend mode or when
no downstream device is connected. Low Power Clock Disable is completely under the control of
software.
0 = DISABLE
1 = ENABLE
LPMX: Auto LPM set - RW. Default = 00b. This bit field is valid during Host Mode Only. For
Device Mode, this bit is reserved.
Value Meaning
00b Disables auto LPM.
01b If there is no activity for a certain number of SOFs the controller will send an LPM
21:20 RW 0x0 token, enter in suspend and issue a port change interrupt.
10b Same as above but without issuing an interrupt.
11b Reserved for futures LPM enhancements.
The detection of no activity is based on the absence of response from the downstream device.
Because of this limitation this feature should not be used if ISO OUT endpoints are being used
(as no handshake is expected).
ASUS: Auto Low Power - RW. Default = 0b. This bit field is valid during Device Mode Only. In
Host Mode, it is part of the ELPM field. This bit is used to control the auto low power feature. If
set, the auto low power feature will be enabled and every time the port enters in suspend state it
will also enter in low power state, disabling the transceiver clock. The behavior will be the same
17 RW 0x0
as if the PHCD bit was enabled (in fact this bit will be set to '1' as soon as low power mode is
enabled).
0 = DISABLE
1 = ENABLE
EPLPM: Endpoint for LPM token - RW. Default = 0000b. This bit field is valid during Host Mode
Only. For Device Mode, bits [19:18] are reserved and bit 17 is ASUS, while bit 16 is STL. This
19:16 RW 0x0
sets the endpoint number to which the LPM token will be sent. It will be directly mapped to the
ENDP field in the LPM token with the EXT PID.
STL: STALL reply to LPM token - RW. Default = 0b. This bit field is valid during Device Mode
Only. In Host Mode, it is part of the ELPM field. When this bit is set to '1', the Controller will reply
16 RW 0x0 always with STALL to all incoming LPM tokens. This bit overrides the LPM NYET bit (NYT).
0 = DISABLE
1 = ENABLE
LPMFRM: Auto LPM SOF Threshold - RW. Default = 0000b. This bit field is valid during Host
Mode Only. For Device Mode, this field is reserved. This holds the SOF counter threshold. When
15:12 RW 0x0 the number of SOFs with no activity in between reaches this threshold and the auto LPM is
enabled, an LPM token will be sent and the port will enter in suspend state. The SOF counter for
this threshold is incremented each 125 µs, even if the port is not in HS operation.
BA: bmAttributes - RO. Default = 00000000000b. This holds the bmAttributes field of the LPM
11:1 RO X
sub-token received, after the EXT PID token.
NYT_ASUS: NYET reply to LPM token - RW. Default = 0b. This bit is NYT during Device Mode.
Details follow: When this bit is to '1', the device controller will NYET all the LPM tokens. When this
bit is set to '0', the Controller will ACK all the LPM tokens if the STALL bit (STL) is also set to '0'.
This bit is ASUS in Host Mode. Details follow: This bit is used to control the auto low power
feature. If set, the auto low power feature will be enabled and every time the port enters in
0 RW 0x0
suspend state it will also enter in low power state, disabling the transceiver clock. The behavior
will be the same as if the PHCD bit was enabled (in fact this bit will be set to '1' as soon as low
power mode is enabled).
0 = DISABLE
1 = ENABLE
19.13.1.31 USB2_CONTROLLER_USB2D_OTGSC_0
DPIE: Data Pulse Interrupt Enable. Setting this bit enables the Data pulse interrupt.
30 RW 0x0 0 = DISABLE
1 = ENABLE
ONEMSE: 1 millisecond timer Interrupt enable. Setting this bit enables the 1 millisecond timer
interrupt.
29 RW 0x0
0 = DISABLE
1 = ENABLE
BSEIE: B Session End Interrupt Enable. Setting this bit enables the B session end interrupt
28 RW 0x0 0 = DISABLE
1 = ENABLE
BSVIE: B Session Valid Interrupt Enable. Setting this bit enables the B session valid interrupt
27 RW 0x0 0 = DISABLE
1 = ENABLE
ASVIE: A Session Valid Interrupt Enable. Setting this bit enables the A session valid interrupt
26 RW 0x0 0 = DISABLE
1 = ENABLE
AVVIE: A VBus Valid Interrupt Enable. Setting this bit enables the A VBus valid interrupt
25 RW 0x0 0 = DISABLE
1 = ENABLE
IDIE: USB ID Interrupt Enable. Setting this bit enables the USB ID interrupt
24 RW 0x0 0 = DISABLE
1 = ENABLE
DPIS: Data Pulse Interrupt Status. This bit is set when data bus pulsing occurs on DP or DM. Data
bus pulsing is only detected when USBMODE.CM = Host (11) and PORTSC(0). PortPower = Off
22 RW 0x0 (0). Software writes a 1 to clear this bit.
0 = INT_CLEAR
1 = INT_SET
ONEMSS: 1 millisecond timer Interrupt Status: This bit is set once every millisecond. Software
writes a 1 to clear it.
21 RW 0x0
0 = INT_CLEAR
1 = INT_SET
BSEIS: B Session End Interrupt Status. This bit is set when VBus has fallen below the B session
end threshold. Software writes a 1 to clear this bit .
20 RW 0x0
0 = INT_CLEAR
1 = INT_SET
BSVIS: B Session Valid Interrupt Status. This bit is set when VBus has either risen above or fallen
below the B session valid threshold (0.8 VDC). Software writes a 1 to clear this bit.
19 RW 0x0
0 = INT_CLEAR
1 = INT_SET
ASVIS: A Session Valid Interrupt Status. This bit is set when VBus has either risen above or fallen
below the A session valid threshold (0.8 VDC). Software writes a one to clear this bit.
18 RW 0x0
0 = INT_CLEAR
1 = INT_SET
AVVIS: A VBus Valid Interrupt Status. This bit is set when VBus has either risen above or fallen
below the VBus valid threshold (4.4 VDC) on an A device. Software writes a 1 to clear this bit.
17 RW 0x0
0 = INT_CLEAR
1 = INT_SET
IDIS: USB ID Interrupt Status. This bit is set when a change on the ID input has been detected.
Software writes a 1 to clear this bit.
16 RW 0x0
0 = INT_CLEAR
1 = INT_SET
DPS: Data Bus Pulsing Status. A 1 indicates data bus pulsing is being detected on the port.
14 RO X 0 = STS_CLEAR
1 = STS_SET
ONEMST: 1 millisecond timer toggle. This bit toggles once per millisecond
13 RO X 0 = STS_CLEAR
1 = STS_SET
BSE: B session End. Indicates VBus is below the B session end threshold
12 RO X 0 = STS_CLEAR
1 = STS_SET
BSV: B Session Valid. Indicates VBus is above the B session valid threshold
11 RO X 0 = STS_CLEAR
1 = STS_SET
ASV: A Session Valid. Indicates VBus is above the A session valid threshold
10 RO X 0 = STS_CLEAR
1 = STS_SET
AVV: A VBus Valid. Indicates VBus is above the A VBus valid threshold
9 RO X 0 = STS_CLEAR
1 = STS_SET
DP: Data Pulsing. Setting this bit causes the pull-up on DP to be asserted for data pulsing during
SRP.
4 RW 0x0
0 = NO_DATA_PULSE
1 = DATA_PULSE
OT: OTG Termination. This bit must be set when the OTG device is in device mode, this controls
the pulldown on DM.
3 RW 0x0
0 = NO_OTG_TERM
1 = OTG_TERM
VC: VBUS Charge. Setting this bit causes the VBus line to be charged. This is used for VBus
pulsing during SRP.
1 RW 0x0
0 = NO_VBUS_CHRG
1 = VBUS_CHRG
VD: VBUS_Discharge. Read/write. Setting this bit causes Vbus to discharge through a resistor.
0 RW 0x0 0 = NO_VBUS_DISCHRG
1 = VBUS_DISCHRG
19.13.1.32 USB2_CONTROLLER_USB2D_USBMODE_0
ALPDD: Auto Low Power While Disconnect Delay, Used when the ALPD field of the HOSTPCx
register is set. Defines the delay between disconnect detection and entering in low power mode.
31:16 RW 0x0
The delay is <this register value>*64*100/3 in milliseconds. The maximum value is
65535*64*100/3 = 139,808 ms. The minimum value is 0. Only used in host mode.
15 RW 0x0 SRT: Shorten USB Reset Time. Software should never set this to 1.
VBPS: VBUS Power Select This can be used by logic that selects between an on-chip Vbus
power source (charge pump) and an off-chip source in systems when both are available. Only to
5 RW 0x0
be used in Host Mode. No functionality is implemented for this, so software should not use this
bit.
SDIS: Stream disable: 1: Streaming is disabled - helpful to avoid overruns/underruns when the
system load is too high.
4 RO X
0 = STREAM_ENABLE
1 = STREAM_DISABLE
SLOM: Setup Lockout Mode: In device mode, this bit controls the behavior of the setup lockout
mechanism. 0: Setup lockout is ON (default). 1: Setup lockout is OFF. Firmware requires the use
3 RO X of setup tripwire semaphore in USB2D_USBCMD register.
0 = LOCKOUT_ON
1 = LOCKOUT_OFF
ES: Endian Select: Note: For this implementation, this bit should be always set to 0 (little endian).
2 RO X 0 = LITTLE_ENDIAN
1 = RESERVED
CM: Controller Mode: The controller mode will default to an idle state and will need to be
initialized to the desired operating mode after reset. This register can only be written once after
reset. If it is necessary to switch modes, software must reset the controller by writing to the
RESET bit in the USBCMD register before reprogramming this register. 00 = Idle [Default]. 01 =
1:0 RO X Reserved. 10 = Device Controller. 11 = Host Controller.
0 = IDLE
1 = RESERVED
2 = DEVICE_MODE
3 = HOST_MODE
19.13.1.33 USB2_CONTROLLER_USB2D_ENDPTNAK_0
EPTN: TX Endpoint NAK R/WC. Each TX endpoint has 1 bit in this field. The bit is set when the device
sends a NAK handshake on a received IN token for the corresponding endpoint.
31:16 0x0
0 = CLEAR
1 = SET
EPRN: RX Endpoint NAK R/WC. Each RX endpoint has 1 bit in this field. The bit is set when the device
sends a NAK handshake on a received OUT or PING token for the corresponding endpoint.
15:0 0x0
0 = CLEAR
1 = SET
19.13.1.34 USB2_CONTROLLER_USB2D_ENDPTNAK_ENABLE_0
EPTNE: TX Endpoint NAK Enable R/W. Each bit is an enable bit for the corresponding TX Endpoint
NAK bit. If this bit is set and the corresponding TX Endpoint NAK bit is set, the NAK Interrupt bit is set.
31:16 0x0
0 = DISABLE
1 = ENABLE
EPRNE: RX Endpoint NAK Enable R/W. Each bit is an enable bit for the corresponding RX Endpoint
NAK bit. If this bit is set and the corresponding RX Endpoint NAK bit is set, the NAK Interrupt bit is set.
15:0 0x0
0 = DISABLE
1 = ENABLE
19.13.1.35 USB2_CONTROLLER_USB2D_ENDPTSETUPSTAT_0
ENDPTSETUPSTAT15: Endpoint 15 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
15 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT14: Endpoint 14 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
14 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT13: Endpoint 13 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
13 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT12: Endpoint 12 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
12 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT11: Endpoint 11 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
11 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT10: Endpoint 10 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
10 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT9: Endpoint 9 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
9 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT8: Endpoint 8 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
8 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT7: Endpoint 7 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
7 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT6: Endpoint 6 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
6 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT5: Endpoint 5 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
5 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT4: Endpoint 4 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
4 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT3: Endpoint 3 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
3 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT2: Endpoint 2 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
2 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT1: Endpoint 1 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
1 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT0: Endpoint 0 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
0 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
19.13.1.36 USB2_CONTROLLER_USB2D_ENDPTPRIME_0
PETB15: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
31 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB14: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
30 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB13: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
29 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB12: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
28 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB11: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
27 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB10: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
26 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB9: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
25 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB8: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
24 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB7: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
23 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB6: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
22 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB5: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
21 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB4: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
20 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB3: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
19 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB2: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
18 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB1: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
17 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB0: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
16 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB15: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
15 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB14: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
14 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB13: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
13 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB12: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
12 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB11: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
11 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB10: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
10 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB9: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
9 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB8: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
8 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB7: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
7 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB6: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
6 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB5: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
5 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB4: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
4 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB3: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
3 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB2: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
2 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB1: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
1 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB0: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
0 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
19.13.1.37 USB2_CONTROLLER_USB2D_ENDPTFLUSH_0
FETB15: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
31 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB14: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
30 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB13: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
29 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB12: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
28 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB11: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
27 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB10: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
26 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB9: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
25 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB8: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
24 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB7: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
23 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB6: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
22 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB5: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
21 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB4: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
20 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB3: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
19 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB2: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
18 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB1: Writing a one to this bit causes the associated endpoint to clear any primed buffers. If a packet is
in progress for the associated endpoint that transfer will continue until completion. Hardware clears this
17 0x0 register after the endpoint flush operation is successful. This is only used in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB0: Writing a one to this bit causes the associated endpoint to clear any primed buffers. If a packet is
in progress for the associated endpoint that transfer will continue until completion. Hardware clears this
16 0x0 register after the endpoint flush operation is successful. This is only used in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB15: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
15 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB14: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
14 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB13: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
13 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB12: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
12 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB11: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
11 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB10: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
10 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB9: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
9 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB8: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
8 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB7: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
7 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB6: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
6 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB5: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
5 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB4: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
4 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB3: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
3 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB2: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
2 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB1: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
1 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB0: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
0 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
19.13.1.38 USB2_CONTROLLER_USB2D_ENDPTSTATUS_0
ETBR15: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
31 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR14: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
30 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR13: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
29 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR12: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
28 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR11: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
27 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR10: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
26 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR9: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
25 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR8: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
24 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR7: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
23 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR6: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
22 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR5: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
21 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR4: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
20 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR3: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
19 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR2: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
18 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR1: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
17 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR0: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
16 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR15: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
15 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR14: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
14 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR13: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
13 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR12: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
12 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR11: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
11 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR10: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
10 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR9: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
9 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR8: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
8 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR7: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
7 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR6: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
6 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR5: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
5 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR4: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
4 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR3: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
3 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR2: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
2 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR1: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
1 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR0: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
0 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
19.13.1.39 USB2_CONTROLLER_USB2D_ENDPTCOMPLETE_0
ETCE15: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
31 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE14: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
30 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE13: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
29 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE12: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
28 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE11: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
27 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE10: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
26 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE9: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
25 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE8: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
24 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE7: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
23 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE6: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
22 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE5: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
21 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE4: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
20 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE3: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
19 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE2: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
18 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE1: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
17 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE0: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
16 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE15: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
15 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE14: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
14 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE13: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
13 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE12: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
12 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE11: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
11 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE10: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
10 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE9: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
9 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE8: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
8 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE7: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
7 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE6: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
6 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE5: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
5 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE4: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
4 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE3: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
3 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE2: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
2 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE1: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
1 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE0: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
0 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
19.13.1.40 USB2_CONTROLLER_USB2D_ENDPTCTRL0_0
TXS: TX Endpoint Stall: Software can write a one to this bit to force the endpoint to return a STALL
handshake to the Host. It will continue returning STALL until the bit is cleared by software or it will
16 X automatically be cleared upon receipt of a new SETUP request.
0 = EP_OK
1 = EP_STALL
RXS: RX Endpoint Stall: Software can write a one to this bit to force the endpoint to return a STALL
handshake to the Host. It will continue returning STALL until the bit is cleared by software or it will
0 X automatically be cleared upon receipt of a new SETUP request.
0 = EP_OK
1 = EP_STALL
19.13.1.41 USB2_CONTROLLER_USB2D_ENDPTCTRLn_0
USB2D Endpoint Control 1 through 15 registers have the same field definitions and reset value. In the register offset, the value
n is the register number (1 through 15).
TXE: TX Endpoint Enable. An Endpoint should be enabled only after it has been configured.
23 RW 0x0 0 = DISABLE
1 = ENABLE
TXR: TX Data Toggle Reset: Whenever a configuration event is received for this Endpoint,
software must write a one to this bit in order to synchronize the data PIDs between the Host and
22 RW 0x0 device.
0 = KEEP_GOING
1 = RESET_PID_SEQ
TXI: TX Data Toggle Inhibit: This bit is only used for test and should always be written as zero.
Writing a one to this bit will cause this endpoint to ignore the data toggle sequence and always
21 RW 0x0 transmit DATA0 for a data packet.
0 = DIS_PID_SEQ
1 = ENB_PID_SEQ
TXS: TX Endpoint Stall: This bit will be set automatically upon receipt of a SETUP request if this
Endpoint is not configured as a Control Endpoint. It will be cleared automatically upon receipt of a
SETUP request if this Endpoint is configured as a Control Endpoint. Software can write a one to
16 RW 0x0 this bit to force the endpoint to return a STALL handshake to the Host. It will continue to returning
STALL until this bit is either cleared by software or automatically cleared as above.
0 = EP_OK
1 = EP_STALL
RXE: RX Endpoint Enable. An Endpoint should be enabled only after it has been configured.
7 RW 0x0 0 = DISABLE
1 = ENABLE
RXR: RX Data Toggle Reset: Whenever a configuration event is received for this Endpoint,
software must write a one to this bit in order to synchronize the data PIDs between the host and
6 RW 0x0 device.
0 = KEEP_GOING
1 = RESET_PID_SEQ
RXI: RX Data Toggle Inhibit: This bit is only used for test and should always be written as zero.
Writing a one to this bit will cause this endpoint to ignore the data toggle sequence and always
5 RW 0x0 accept data packet regardless of their data PID.
0 = DIS_PID_SEQ
1 = ENB_PID_SEQ
RXS: RX Endpoint Stall: This bit will be set automatically upon receipt of a SETUP request if this
Endpoint is not configured as a Control Endpoint. It will be cleared automatically upon receipt a
SETUP request if this Endpoint is configured as a Control Endpoint. Software can write a one to
0 RW 0x0 this bit to force the endpoint to return a STALL handshake to the Host. It will continue to returning
STALL until this bit is either cleared by software or automatically cleared as above.
0 = EP_OK
1 = EP_STALL
19.13.2.1 USB1_IF_USB_SUSP_CTRL_0
This register controls the suspend and resume behavior of USB controller/PHY.
FAST_WAKEUP_RESP: Enable Fast Response from UTMIP PHY for a Remote Wakeup request
from device. This is used only for cases where wakeup response needs to be within 1 ms of spec.
26 RW 0x0 Used for Host mode ONLY.
0 = DISABLE
1 = ENABLE
25 RW 0x0 UTMIP_SUSPL1_SET: Enable SuspendL1 for UTMIP PHY. Enabling this will only cut off clocks
to the UTMIP logic. The USB PLLs, PllU and UTMIP PLL will still be running.
UTMIP_PHY_ENB: Enable UTMIP PHY mode. Set this to 1 if using UTMIP PHY. Otherwise set
this to 0.
12 RW 0x0
0 = DISABLE
1 = ENABLE
UTMIP_RESET: Reset going to UTMIP PHY (active high). This should be set to 1 whenever
programming the UTMIP config registers. It should be cleared to 0 after the programming of
UTMIP config registers is done. UTMIP config registers should be programmed only once before
11 RW 0x1 doing any transactions on USB. The UTMIP PHY registers should be programmed while UTMIP
is in reset.
0 = DISABLE
1 = ENABLE
USB_SUSP_POL: Polarity of the suspend signal going to USB PHY. 0 = Active low (default). 1 =
Active high. This should not be changed by software.
10 RW 0x0
0 = ACTIVE_LOW
1 = ACTIVE_HIGH
USB_PHY_CLK_VALID_INT_ENB: USB PHY clock valid interrupt enable. If this bit is enabled,
interrupt is generated whenever USB clocks are resumed from a suspend.
9 RW 0x0
0 = DISABLE
1 = ENABLE
USB_PHY_CLK_VALID_INT_STS: USB PHY clock valid interrupt status. This bit is set whenever
the USB PHY clock is woken up from suspend. Software must write a 1 to clear this bit.
8 RO 0x0
0 = UNSET
1 = SET
USB_PHY_CLK_VALID: USB PHY clock valid status. This bit indicates whether the USB PHY is
generating a valid clock to the USB controller. If USB PHY clock is running, this bit is set to 1,
7 RO X else it is set to 0.
0 = UNSET
1 = SET
USB_CLKEN: USB AHB clock enable status. Indicates whether the AHB clock to the USB
controller is enabled or not. If AHB clock to USB controller is enabled, this bit is set to 1, else it is
set to 0. NOTE: even when this is set to 0, all essential blocks that are required to resume USB
6 RO X
clocks from suspend will be active and their AHB clock will not be suspended.
0 = UNSET
1 = SET
USB_SUSP_CLR: Suspend Clear. Software must write a 1 to this bit to bring the PHY out of
suspend mode. This is used when the software stops the PHY clock during suspend and then
wants to initiate a resume. Software should also write 0 to clear it. NOTE: It is required that
5 RW 0x0
software generate a positive pulse on this bit to guarantee proper operation.
0 = UNSET
1 = SET
USB_WAKE_ON_RESUME_EN: Wake on resume enable. If this bit is enabled, USB will wake up
2 RW 0x0 from suspend whenever a resume event is detected on USB. This is valid for both USB device
and USB host modes.
0 = DISABLE
USB_WAKEUP_INT_STS: USB wakeup interrupt status. This bit is set whenever USB wakes up
from suspend (a wakeup event is generated). Software must write a 1 to clear this bit. Note that
during the wakeup sequence, PHY clocks will be resumed from suspend. Software can check
when the PHY clocks are resumed by reading the bit USB_PHY_CLK_VALID. There is also a
0 RO 0x0 separate interrupt generated when PHY clock is resumed if USB_PHY_CLK_VALID_INT_EN is
set. During the wakeup sequence, first USB_WAKEUP_INT_STS will be set, and it will take some
time for the PHY clock to resume, which can be detected by checking USB_PHY_CLK_VALID.
0 = UNSET
1 = SET
19.13.2.2 USB1_IF_USB_PHY_VBUS_SENSORS_0
This register controls the OTG VBUS sensors in the USB PHY. There are 4 VBUS sensors:
§ A_VBUS_VLD
§ A_SESS_VLD
§ B_SESS_VLD
§ B_SESS_END
The debounced status of each sensor can be read from the corresponding _STS bit field of the sensor in this register. The
_CHG_DET field is set to 1 whenever a change is detected in the value of the _STS bit field of the corresponding sensor. If
_INT_EN is set, then an interrupt is generated to the processor. This interrupt can be routed to CPU/AVP by appropriately
writing the USBD bits in the interrupt controller registers.
In case software wants to override the value for a sensor, it can set the corresponding _SW_EN to 1, and set the
corresponding sensor _SW_VALUE to 1 or 0 as per the requirement.
There are two debouncers for each sensor - DEBOUNCE_A and DEBOUNCE_B. The debounce values for them are
controlled by the register UTMIP_DEBOUNCE_CFG0, fields UTMIP_BIAS_DEBOUNCE_A and
UTMIP_BIAS_DEBOUNCE_B. For each sensor, we can select whether to use DEBOUNCE_A or DEBOUNCE_B by setting
the field _DEB_SEL_B to the appropriate value (SEL_A or SEL_B).
Note: Do not set either UTMIP_BIAS_DEBOUNCE_A or UTMIP_BIAS_DEBOUNCE_B to 0x0. If not using one
of the debouncers, keep it at the default value of 0xFFFF.
A_VBUS_VLD_WAKEUP_EN: A_VBUS_VLD wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on A_VBUS_VLD.
30 RW 0x0
0 = DISABLE
1 = ENABLE
28 RW 0x0 A_VBUS_VLD_SW_VALUE: A_VBUS_VLD software value. Software should write the appropriate
value (1/0) to set/unset the A_VBUS_VLD status. This is only valid when A_VBUS_VLD_SW_EN is
A_SESS_VLD_WAKEUP_EN: A_SESS_VLD wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on A_SESS_VLD.
22 RW 0x0
0 = DISABLE
1 = ENABLE
B_SESS_VLD_WAKEUP_EN: B_SESS_VLD wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on B_SESS_VLD.
14 RW 0x0
0 = DISABLE
1 = ENABLE
B_SESS_END_WAKEUP_EN: B_SESS_END wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on B_SESS_END.
6 RW 0x0
0 = DISABLE
1 = ENABLE
19.13.2.3 USB1_IF_USB_PHY_VBUS_WAKEUP_ID_0
This register controls the battery charger (VDCD_DET, VDAT_DET), VBUS_WAKEUP and ID sensors. The following sensors
are in this register:
§ VBUS_WAKEUP
§ ID
§ VDAT_DET
§ VDCD_DET
The debounced status of each sensor can be read from the corresponding _STS bit field of the sensor in this register. The
_CHG_DET field is set to 1 whenever a change is detected in the value of the _STS bit field of the corresponding sensor. If
_INT_EN is set, then an interrupt is generated to the processor. This interrupt can be routed to CPU/AVP by appropriately
writing the USBD bits in the interrupt controller registers.
In case software wants to override the value for a sensor, it can set the corresponding _SW_EN to 1, and set the
corresponding sensor _SW_VALUE to 1 or 0 as per the requirement.
There are two debouncers for each sensor - DEBOUNCE_A and DEBOUNCE_B. The debounce values for them are
controlled by the register UTMIP_DEBOUNCE_CFG0, fields UTMIP_BIAS_DEBOUNCE_A and
UTMIP_BIAS_DEBOUNCE_B. For each sensor, we can select whether to use DEBOUNCE_A or DEBOUNCE_B by setting
the field _DEB_SEL_B to the appropriate value (SEL_A or SEL_B).
Note: Do not set either UTMIP_BIAS_DEBOUNCE_A or UTMIP_BIAS_DEBOUNCE_B to 0x0. If not using one
of the debouncers, keep it at the default value of 0xFFFF.
There are debouncers for VDAT_DET and VDCD_DET. These use separate debouncers -CHRG_DEBOUNCE_PERIOD_A
and CHRG_DEBOUNCE_PERIOD_B. The debounce values for them are controlled by the register
UTMIP_CHRG_DEB_CFG0, fields UTMIP_CHRG_DEBOUNCE_PERIOD_A and UTMIP_CHRG_DEBOUNCE_PERIOD_B.
For each sensor, we can select whether to use CHRG_DEBOUNCE_PERIOD_A or CHRG_DEBOUNCE_PERIOD_B by
setting the field _DEB_SEL_B to the appropriate value (SEL_A or SEL_B).
DIV_DET_EN: Battery charger divider detection enable. This goes to the USB2OTG pad.
31 RW 0x0 0 = DISABLE
1 = ENABLE
VDCD_DET_DEB_SEL_B: VCDT_DET debounce A/B select. Selects the debounce value from
UTMIP_CHRG_DEBOUNCE_PERIOD_A or UTMIP_CHRG_DEBOUNCE_PERIOD_B from the
29 RW 0x0 register UTMIP_CHRG_DEB_CFG0.
0 = SEL_A
1 = SEL_B
VDCD_DET_SW_VALUE: VDCD_DET software value. Software should write the appropriate value
(1/0) to set/unset the VDCD_DET status. This is only valid when VDCD_DET_SW_EN is set.
28 RW 0x0
0 = UNSET
1 = SET
VOP_DIV2P7_DET: This read-only status bit is from the battery charging divider circuit of the
USB2OTG pad
23 RO X
0 = UNSET
1 = SET
VOP_DIV2P0_DET:This read-only status bit is from the battery charging divider circuit of the
USB2OTG pad
22 RO X
0 = UNSET
1 = SET
VDAT_DET_DEB_SEL_B: VDAT_DET debounce A/B select. Selects between the two debounce
values UTMIP_CHRG_DEBOUNCE_PERIOD_A or UTMIP_CHRG_DEBOUNCE_PERIOD_B from
21 RW 0x0 the register UTMIP_DEBOUNCE_CFG0.
0 = SEL_A
1 = SEL_B
VDAT_DET_SW_VALUE: VDAT_DET software value. Software should write the appropriate value
(1/0) to set/unset the VDAT_DET status. This is only valid when VDAT_DET_SW_EN is set.
20 RW 0x0
0 = UNSET
1 = SET
VDAT_DET_STS: VDAT_DET status. This is set to 1 whenever the VDAT_DET sensor output is 1.
18 RO X 0 = UNSET
1 = SET
VON_DIV2P7_DET: This read-only status bit is from the battery charging divider circuit of the
USB2OTG pad
15 RO X
0 = UNSET
1 = SET
VON_DIV2P0_DET: This read-only status bit is from the battery charging divider circuit of the
USB2OTG pad
14 RO X
0 = UNSET
1 = SET
VBUS_WAKEUP_CHG_DET: VBUS wakeup change detect. This field is set by hardware whenever
a change is detected in the value of VBUS_WAKEUP. software writes a 1 to clear it
9 RO 0x0
0 = UNSET
1 = SET
ID_DEB_SEL_B: ID debounce A/B select. Selects between the two debounce values
UTMIP_BIAS_DEBOUNCE_A or UTMIP_BIAS_DEBOUNCE_B from the register
5 RW 0x0 UTMIP_DEBOUNCE_CFG0.
0 = SEL_A
1 = SEL_B
ID_SW_VALUE: ID software value. Software should write the appropriate value (1/0) to set/unset
the ID status. This is only valid when ID_SW_EN is set.
4 RW 0x0
0 = UNSET
1 = SET
ID_SW_EN: ID software enable. Enable Software Controlled ID. Software sets this bit to drive the
value in ID_SW_VALUE to the USB controller
3 RW 0x0
0 = DISABLE
1 = ENABLE
ID_CHG_DET: ID change detect. This field is set by hardware whenever a change is detected in the
value of ID. software writes a 1 to clear it
1 RO 0x0
0 = UNSET
1 = SET
19.13.2.4 USB1_IF_USB_PHY_ALT_VBUS_STS_0
19.13.2.5 USB1_IF_USB_INTER_PKT_DELAY_CTRL_0
This controls the interpacket delay between two consecutive transmit packets in HS mode. This only applies to host mode as
device never transmits two packets in a row.
6:0 0x12 IP_DELAY_TX2TX_HS: HS Tx to Tx inter-packet delay. Software should not change this.
19.13.2.6 USB1_IF_USB_RSM_DLY_0
TIME_TO_RESUME: Send the resume back in number of 60 MHz cycles. Default gives 900 µs delay.
15:0 0x6978
Only applicable in host mode.
19.13.2.7 USB1_IF_SPARE_0
For ICUSB PADCTLS. Spare Register
19.13.2.8 USB1_IF_USB1_NEW_CONTROL_0
MEM_ALIGNMENT_MUX_EN: Mux to select between Tegra 3 style (0) and Tegra K1 style (1) DMA
request generation mechanism
1 0x0
0 = DISABLE
1 = ENABLE
Note: This register has been moved to the Clock and Reset section of this document. PROGRAMMING THIS
REGISTER HERE WILL HAVE NO EFFECT!
19.13.3.2 USB1_UTMIP_PLL_CFG1_0
Note: This register has been moved to the Clock and Reset section of this document. PROGRAMMING THIS
REGISTER HERE WILL HAVE NO EFFECT!
This register was used to configure the PLL inside the UTMIP block prior to Tegra K1 devices. This register has been
defeatured from UTMIP space and moved to CAR space. Refer to the Clock and Reset Controller section for details on this
register.
19.13.3.3 USB1_UTMIP_XCVR_CFG0_0
21 0x1 UTMIP_XCVR_LSBIAS_SEL: Low speed bias selection method for USB transceiver pad
12 0x0 UTMIP_XCVR_HSLOOPBACK: Internal loopback inside XCVR cell. Used for IOBIST.
3:0 0x0 UTMIP_XCVR_SETUP: SETUP[3:0] input of XCVR cell. HS driver output control. 4 LSBs.
19.13.3.4 USB1_UTMIP_BIAS_CFG0_0
22 0x1 UTMIP_IDPD_SEL: 0: Reserved. Refer to the PMC registers for this feature.
19.13.3.5 USB1_UTMIP_HSRX_CFG0_0
29 0x0 UTMIP_ALLOW_CONSEC_UPDN: Allow consecutive ups and downs on the bits, debug only, set to 0.
27:24 0x1 UTMIP_PCOUNT_UPDN_DIV: The number of (edges-1) needed to move the sampling point
23:21 0x3 UTMIP_SQUELCH_EOP_DLY: Limit the delay of the squelch at EOP time
3:2 0x0 UTMIP_PHASE_ADJUST: Based on incoming edges and current sampling position, adjust phase
19.13.3.6 USB1_UTMIP_HSRX_CFG1_0
5:1 0x9 UTMIP_HS_SYNC_START_DLY: How long to wait before start of sync launches RxActive
19.13.3.7 USB1_UTMIP_FSLSRX_CFG0_0
29 0x1 UTMIP_FSLS_SERIAL_SE0_RCV
14 0x0 UTMIP_FSLS_ACTIVE_ON_FULL_SYNC: Require a full sync pattern to declare the data received
13:8 0x4 UTMIP_FSLS_IDLE_WAIT_MAX: 4 bits of SEO should exceed the time limit
7 0x0 UTMIP_FSLS_IDLE_WAIT_LIMIT: Enable the reset of the state machine on extended SE0
6:1 0x14 UTMIP_FSLS_IDLE_COUNT_MAX: 20 bits of idle should end the packet if FsLsIdleCountLimitCfg=1.
19.13.3.8 USB1_UTMIP_FSLSRX_CFG1_0
26 0x0 UTMIP_EARLY_LINE_STATE_FILTER: Assumes line state filtering table is inclusive, not exclusive
16:11 0xe UTMIP_LS_EOP_START_COUNT: Number of SEO clock cycles to block bit extraction
10:5 0x20 UTMIP_LS_SE0_COUNT: Only for this number of 60MHz of SEO and Idle to end packet
0 0x0 UTMIP_FS_EOP_LENGTH: Whether full speed EOP is determined within 3(0) or 4(1) 60MHz cycles
19.13.3.9 USB1_UTMIP_TX_CFG0_0
15 0x0 UTMIP_HS_READY_WAIT_FOR_VALID
19.13.3.10 USB1_UTMIP_MISC_CFG0_0
25 0x1 UTMIP_KEEP_XCVR_PD_ON_SOFT_DISCON
24 0x1 UTMIP_ALLOW_LS_ON_SOFT_DISCON
23 0x1 UTMIP_FORCE_FS_DISABLE_ON_DEV_CHIRP
UTMIP_LS_TO_FS_SKIP_4MS: Do not block changes for 4 ms when going from LS to FS (should not
21 0x1
happen)
7:5 0x3 UTMIP_STABLE_COUNT: Number of cycles of crystal clock of signal not changing to consider stable.
4 0x1 UTMIP_STABLE_ALL: Determines if all signal need to be stable to not change a config.
19.13.3.11 USB1_UTMIP_MISC_CFG1_0
30 0x1 UTMIP_PHY_XTAL_CLOCKEN: Selects whether to enable the crystal clock in the module.
24 0x0 UTMIP_FSLS_TDM
23 0x0 UTMIP_FORCE_IOBIST_CLK_ON
22:18 0x6 UTMIP_PLL_ACTIVE_DLY_COUNT: Reserved. Config moved to the Clock and Reset space.
17:6 0x600 UTMIP_PLLU_STABLE_COUNT: Reserved. Moved to the Clock and Reset space.
5 0x1 UTMIP_RX_ERROR_CNT_CLR
4 0x0 UTMIP_RX_ERROR_CNT_EN
3 0x0 UTMIP_FLIP_FSLS_POLARITY
2 0x1 UTMIP_SUSPEND_TERMSEL
19.13.3.12 USB1_UTMIP_DEBOUNCE_CFG0_0
ms = *1000 / (1/19.2MHz) / 4
19.13.3.13 USB1_UTMIP_BAT_CHRG_CFG0_0
5 0x0 UTMIP_OP_I_SRC_EN
4 0x0 UTMIP_ON_SRC_EN
3 0x0 UTMIP_OP_SRC_EN
2 0x0 UTMIP_ON_SINK_EN
1 0x0 UTMIP_OP_SINK_EN
19.13.3.14 USB1_UTMIP_SPARE_CFG0_0
19.13.3.15 USB1_UTMIP_XCVR_CFG1_0
25:24 0x0 UTMIP_XCVR_HS_IREF_CAP: High-speed Iref cap control for bias current stability.
17 0x0 UTMIP_RCTRL_SW_SET: Use a software override on RCTRL instead of automatic bias control.
11 0x0 UTMIP_TCTRL_SW_SET: Use a software override on TCTRL instead of automatic bias control
19.13.3.16 USB1_UTMIP_BIAS_CFG1_0
UTMIP_BIAS_PDTRK_COUNT: Control the BIAS cell power down lag. The lag should be 20 µs. For a
7:3 0x5
crystal clock of 13 MHz, it should be set to 5.
2 0x1 UTMIP_VBUS_WAKEUP_POWERDOWN: Reserved. See the PMC registers for this functionality.
19.13.3.17 USB1_UTMIP_BIAS_STS0_0
19.13.3.18 USB1_UTMIP_CHRG_DEB_CFG0_0
ms = *1000 / (1/19.2MHz) / 4
19.13.3.19 USB1_UTMIP_MISC_STS0_0
19.13.3.20 USB1_UTMIP_PMC_WAKEUP0_0
19.13.3.21 USB2_QH_USB2D_QH_EP_n_OUT_0
USB2D_QH: Queue Head for OUT endpoint n. This is used to store a local Queue Head data structure
31:0 0x0
for either device mode or host mode. In device mode, it holds the Queue Head for OUT endpoint n.
19.13.3.22 USB2_QH_USB2D_QH_EP_n_IN_0
USB2D_QH: Queue Head for IN endpoint n. This is used to store a local Queue Head data structure for
31:0 0x0
either device mode or host mode. In device mode, it holds the Queue Head for IN endpoint n.
19.13.4.1 USB2_CONTROLLER_1_USB2D_ID_0
24:21 X REVISION: Revision number of the USB controller. This is set to 0x0.
15:8 X NID: One’s complement version of ID. This field is set to 0xF9.
19.13.4.2 USB2_CONTROLLER_1_USB2D_HW_HOST_0
3:1 X NPORT: VUSB_HS_NUM_PORT-1: This host controller has only 1 port. So this field will always be 0.
19.13.4.3 USB2_CONTROLLER_1_USB2D_HW_DEVICE_0
DEVEP: VUSB_HS_DV_EP: Number of endpoints supported by this device controller. Set to 16. This
5:1 X
includes control endpoint 0.
19.13.4.4 USB2_CONTROLLER_1_USB2D_HW_TXBUF_0
TXCHANADD: VUSB_HS_TX_CHAN_ADD: Total number of address bits for the transmit buffer of each
23:16 X
transmit endpoint. Set to 7. Each transmit buffer is 128 words deep.
TXADD: VUSB_HS_TX_ADD: Total number of address bits for the transmit buffer. Set to 11. The total
15:8 X
depth of the transmit buffer is 2048 words.
TCBURST: VUSB_HS_TX_BURST: Maximum burst size supported by the transmit endpoints for data
7:0 X
transfers. Set to 8.
19.13.4.5 USB2_CONTROLLER_1_USB2D_HW_RXBUF_0
RXADD: VUSB_HS_RX_ADD: Total number of address bits for the receive buffer. Set to 7. The total
15:8 X
depth of the receive buffer is 128 words.
RXBURST: VUSB_HS_RX_BURST: Maximum burst size supported by the receive endpoints for data
7:0 X
transfers. Set to 8.
19.13.4.6 USB2_CONTROLLER_1_USB2D_GPTIMER0LD_0
The host/device controller drivers can measure time-related activities using these timer registers. These registers are not part
of the standard EHCI controller.
GPTIMER0LD: This field has the value to be loaded into the GPTCNT countdown timer on a reset action.
23:0 0x0
The value in this register represents the time in microseconds minus 1 for the timer duration .
19.13.4.7 USB2_CONTROLLER_1_USB2D_GPTIMER0CTRL_0
Offset: 0x84 | Read/Write: R/W | Reset: 0x00XXXXXX (0b00xxxxx0xxxxxxxxxxxxxxxxxxxxxxxx)
GTPRUN: This bit enables the general-purpose timer to run. Setting or clearing this bit will not
31 RW 0x0
have an effect on the GPTCNT counter value.
30 WO 0x0 GPTRST: Writing a one to this bit reloads the GPTCNT with the value in GPTLD.
GPTMODE: This bit selects between a single timer countdown and a looped countdown. In one-
shot mode, the timer counts down to zero, generates an interrupt, and stops until the counter is
24 RW 0x0
reset by software. In repeat mode, the timer counts down to zero, generates an interrupt, and
automatically reloads the counter to begin again.
23:0 RO X GPTCNT: This field has the value of the running timer.
19.13.4.8 USB2_CONTROLLER_1_USB2D_GPTIMER1LD_0
Offset: 0x88 | Read/Write: R/W | Reset: 0x00000000 (0b000000000000000000000000)
GPTIMER1LD: This field has the value to be loaded into the GPTCNT countdown timer on a reset action.
23:0 0x0
The value in this register represents the time in microseconds minus 1 for the timer duration .
19.13.4.9 USB2_CONTROLLER_1_USB2D_GPTIMER1CTRL_0
Offset: 0x8c | Read/Write: R/W | Reset: 0x00XXXXXX (0b00xxxxx0xxxxxxxxxxxxxxxxxxxxxxxx)
GTPRUN: This bit enables the general-purpose timer to run. Setting or clearing this bit will not
31 RW 0x0
have an effect on the GPTCNT counter value.
30 WO 0x0 GPTRST: Writing a one to this bit reloads the GPTCNT with the value in GPTLD.
GPTMODE: This bit selects between a single timer countdown and a looped countdown. In one-
shot mode, the timer counts down to zero, generates an interrupt, and stops until the counter is
24 RW 0x0
reset by software. In repeat mode, the timer counts down to zero, generates an interrupt, and
automatically reloads the counter to begin again.
23:0 RO X GPTCNT: This field has the value of the running timer.
19.13.4.10 USB2_CONTROLLER_1_USB2D_CAPLENGTH_0
CAPLENGTH: Indicates which offset to add to the register base address at the beginning of the
7:0 X
Operational Register. Set to 0x30.
19.13.4.11 USB2_CONTROLLER_1_USB2D_HCIVERSON_0
HCIVERSION: Contains a BCD encoding of the EHCI revision number supported by this host controller.
15:0 X The most significant byte of this register represents a major revision and the least significant byte is the
minor revision. This host controller supports EHCI revision 1.00.
19.13.4.12 USB2_CONTROLLER_1_USB2D_HCSPARAMS_0
N_TT: Number of Transaction Translators: Indicates the number of embedded transaction translators
27:24 X associated with the USB2.0 host controller. This field is always set to 1 indicating only 1 embedded TT
is implemented in this implementation. This is a non-EHCI field to support embedded TT.
N_PTT: Number of Ports per Transaction Translator: Indicates the number of ports assigned to each
23:20 X transaction translator within the USB2.0 host controller. Field always equals N_PORTS. This is a non-
EHCI field to support embedded TT.
N_CC: Number of Companion Controller: Indicates the number of companion controllers. This field is
15:12 X
set to 0.
N_PCC: Number of Ports per Companion Controller: Indicates the number of ports supported per
11:8 X
internal companion controller. This field is set to 0.
PPC: Port Power Control: Indicates whether the host controller implementation includes port power
control.
1 = Ports have port power switches
4 X
0= Ports do not have port power switches.
This field affects the functionality of the port Power field in each port status and control register. This
field is set to 1.
N_PORTS: Number of downstream ports. This field specifies the number of physical downstream ports
3:0 X
implemented on this host controller. This field is fixed to 1, since this host controller only supports 1 port.
19.13.4.13 USB2_CONTROLLER_1_USB2D_HCCPARAMS_0
PPC: Per-Port Change Event Capability. Default = 1b. This field indicates the support for per-port change
18 X
events. This field is related to the USBCMD PPE field, USBSTS PPCI field, and USBINTR PPCE field.
LEN: Link Power Management Capability. Default = 1b. This field indicates the support for LPM L1 state.
17 X This field is related to the USBCMD HIRD field, POSTSCx SSTS and DA fields, and HOSTPCx LEN, BA,
and EPLPM fields.
EECP: EHCI Extended Capabilities Pointer: Indicates a capabilities list exists. A value of 00h indicates no
15:8 X
extended capabilities are implemented. For this implementation this field is always "0".
IST: Isochronous Scheduling Threshold. This field indicates, relative to the current position of the
executing host controller, where software can reliably update the isochronous schedule. When bit [7] is
zero, the value of the least significant 3 bits indicates the number of micro-frames a host controller can
7:4 X
hold a set of isochronous data structures (one or more) before flushing the state. When bit [7] is a one,
then host software assumes the host controller may cache an isochronous data structure for an entire
frame. This field will always be "0".
ASP: Asynchronous Schedule Park Capability. 1 = (Default) the host controller supports the park feature
for high-speed queue heads in the Asynchronous Schedule. The feature can be disabled or enabled and
2 X
set to a specific level by using the Asynchronous Schedule Park Mode Enable and Asynchronous
Schedule Park Mode Count fields in the USBCMD register. This field is always 1.
PFL: Programmable Frame List Flag. 0 = System software must use a frame list length of 1024 elements
with this host controller. The USBCMD register Frame List Size field is a read-only register and must be
set to zero. 1 = System software can specify and use a smaller frame list and configure the host
1 X
controller via the USBCMD register Frame List Size field. The frame list must always be aligned on a 4K-
page boundary. This requirement ensures that the frame list is always physically contiguous. This field
will always be "1".
19.13.4.14 USB2_CONTROLLER_1_USB2D_DCIVERSION_0
DCIVERSION: The device controller interface conforms to the two-byte BCD encoding of the interface
15:0 X
version number contained in this register.
19.13.4.15 USB2_CONTROLLER_1_USB2D_DCCPARAMS_0
HC: Host Capable: 1 = This controller is capable of operating as an EHCI compatible USB 2 0 host
8 X
controller operating as an EHCI compatible USB 2.0 host controller. This field is set to 1.
7 X DC: Device Capable: 1 = Controller is capable of operating as USB 2.0 device. This field is set to 1
LEN: Link Power Management Capability - RO. Default = 1b. This field indicates the support for LPM L1
5 X
state. This field is related to the DEVLCx ASUS, STL,BA and NYT fields.
4:0 X DEN: Device Endpoint Number: Number of endpoints built into the device controller. This is set to 16.
19.13.4.16 USB2_CONTROLLER_1_USB2D_EXTSTS_0
TI1: General Purpose Timer Interrupt 1 - RWC. Default = 0b. This bit is set when the counter in the
4 RW 0x0
GPTIMER1CTRL register transitions to zero. Writing a one to this bit will clear it.
TI0: General Purpose Timer Interrupt 0 - RWC. Default = 0b. This bit is set when the counter in the
3 RW 0x0
GPTIMER1CTRL register transitions to zero. Writing a one to this bit will clear it.
UPA: USB Host Periodic Interrupt (USBHSTPERINT) R/WC. This bit is set by the Host Controller
when the cause of an interrupt is a completion of a USB transaction where the Transfer Descriptor
(TD) has an interrupt on complete (IOC) bit set and the TD was from the periodic schedule. This bit
is also set by the Host Controller when a short packet is detected AND the packet is on the periodic
2 RW 0x0
schedule. A short packet is when the actual number of bytes received was less than the expected
number of bytes. This bit is not used by the device controller and will always be zero.
0 = DISABLE
1 = ENABLE
UAI: USB Host Asynchronous Interrupt (USBHSTASYNCINT) R/WC. This bit is set by the Host
Controller when the cause of an interrupt is a completion of a USB transaction where the Transfer
Descriptor (TD) has an interrupt on complete (IOC) bit set AND the TD was from the asynchronous
schedule. This bit is also set by the Host when a short packet is detected AND the packet is on the
1 RW 0x0
asynchronous schedule. A short packet is when the actual number of bytes received was less than
the expected number of bytes. This bit is not used by the device controller and will always be zero.
0 = DISABLE
1 = ENABLE
NAKI: NAK Interrupt Bit Read Only. This bit is read only. It is set by hardware when for a particular
endpoint both the TX/RX Endpoint NAK bit and the corresponding TX/RX Endpoint NAK Enable bit
are set. This bit is automatically cleared by hardware when the all the enabled TX/RX Endpoint NAK
0 RO X
bits are cleared.
0 = DISABLE
1 = ENABLE
19.13.4.17 USB2_CONTROLLER_1_USB2D_USBEXTINTR_0
TIE1: General Purpose Timer Interrupt Enable 1 - RWC. Default = 0b. When this bit is a one, and the TI1
4 0x0 bit in the EXTSTS register is a one, the controller will issue an interrupt. The interrupt is acknowledged by
software clearing the TI1 bit.
TIE0: General Purpose Timer Interrupt Enable 0 - RWC. Default = 0b. When this bit is a one, and the TI1
3 0x0 bit in the EXTSTS register is a one, the controller will issue an interrupt. The interrupt is acknowledged by
software clearing the TI1 bit.
UPIE: UPIE Interrupt Enable. 1 = USB controller issues an interrupt if the UPA bit in USBSTS register
transitions.
2 0x0
0 = DISABLE
1 = ENABLE
UAIE: UAIE Interrupt Enable. 1 = USB controller issues an interrupt if the UAI bit in USBSTS register
transitions.
1 0x0
0 = DISABLE
1 = ENABLE
NAKE: NAK Interrupt Enable. 1 = USB controller issues an interrupt if the NAKI bit in USBSTS register
transitions.
0 0x0
0 = DISABLE
1 = ENABLE
19.13.4.18 USB2_CONTROLLER_1_USB2D_USBCMD_0
HIRD: Host Initiated Resume Duration RW. Default = 0000b. This has the same behavior as bits
7:4 of the BA field of the HOSTPCx register. When writing to this field all BA[7:4] fields of all
HOSTPCx registers will be set to this value. This field is used by system software to specify the
minimum amount of time the host controller will drive the K-state during a host-initiated resume
from an LPM state (e.g., L1), and is conveyed to each LPM-enabled device (via the HIRD bits
within an LPM Tokens bmAttributes field) upon entry into a low-power state. Note the host
27:24 RW 0x0
controller is required to drive resume signaling for at least the amount of time specified in the
HIRD value conveyed to the device during any proceeding host-initiated resume. Also note that
the host controller is not required to observe this requirement during device-initiated resumes.
Encoding for this field is identical to the definition for the similarly named HIRD field within an
LPM Token, specifically: a value 0000b equals 50µs and each additional increment adds 75µs.
For example, the value 0001b equals 125µs, and a value 1111b equals 1,175µs (~1.2ms).
ITC: Interrupt Threshold Control .Read/Write. Default 08h. The system software uses this field to
set the maximum rate at which the host/device controller will issue interrupts. ITC contains the
maximum interrupt interval measured in micro-frames. Valid values are shown below.
Value Maximum Interrupt Interval
00h Immediate (no threshold)
01h 1 micro-frame
02h 2 micro-frames
04h 4 micro-frames
08h 8 micro-frames
23:16 RW 0x8 10h 16 micro-frames
20h 32 micro-frames
40h 64 micro-frames
0 = IMMEDIATE
2 = ONE_MF
4 = TWO_MF
8 = EIGHT_MF
16 = SIXTEEN_MF
32 = THIRTY_TWO_MF
64 = SIXTY_FOUR_MF
ATDTW: Add DTD Tripwire. This bit is used as a semaphore when a dTD is added to an active
(primed) endpoint. This bit is set and cleared by software and will be cleared by hardware when a
14 RW 0x0 hazard exists such that adding a dTD to a primed endpoint may go unnoticed.
0 = CLEAR
1 = SET
SUTW: Setup Tripwire. This bit is used as a semaphore when the 8 bytes of setup data read
extracted by the firmware. If the setup lockout mode is off, then there exists a hazard when new
setup data arrives and firmware is copying setup data from the QH for a previous setup packet.
13 RW 0x0
This bit is set and cleared by software and will be cleared by hardware when a hazard exists.
0 = CLEAR
1 = SET
ASPE: Asynchronous Schedule Park mode Enable. Software uses this bit to enable or disable
Park mode. When this bit is one, Park mode is enabled. When this bit is a zero, Park mode is
11 RW 0x1 disabled. This field is set to "1" in this implementation.
0 = DISABLE
1 = ENABLE
LR: Light Host/Device Controller Reset (OPTIONAL) . Read Only. Not Implemented. This field will
7 RO X
always be "0".
IAA: Interrupt on Async Advance Doorbell. When the host controller has evicted all appropriate
cached schedule states, it sets the Interrupt on Async Advance status bit in the USBSTS register.
If the Interrupt on Sync Advance Enable bit in the USBINTR register is one, then the host
controller will assert an interrupt at the next interrupt threshold. The host controller sets this bit to
zero after it has set the Interrupt on Sync Advance status bit in the USBSTS register to one.
6 RW 0x0
Software should not write a one to this bit when the asynchronous schedule is inactive. Doing so
will yield undefined results. This bit is only used in host mode. Writing a one to this bit when
device mode is selected will have undefined results.
0 = CLEAR
1 = SET
ASE: Asynchronous Schedule Enable. This bit controls whether the host controller skips
processing the Asynchronous Schedule. 0 = Do not process the Asynchronous Schedule. 1 =
Use the ASYNCLISTADDR register to access the Asynchronous Schedule. Only the host
5 RW 0x0
controller uses this bit.
0 = DISABLE
1 = ENABLE
PSE: Periodic Schedule Enable. This bit controls whether the host controller skips processing the
Periodic Schedule. 0 = Do not process the Periodic Schedule 1 = Use the PERIODICLISTBASE
4 RW 0x0 register to access the Periodic Schedule. Only the host controller uses this bit.
0 = DISABLE
1 = ENABLE
FS1_FS0: Frame List Size. (Read/Write). 000 = Default. This field is Read/Write only if
Programmable Frame List Flag in the HCCPARAMS registers is set to one. Hence this field is
Read/Write for this implementation. This field specifies the size of the frame list that controls
which bits in the Frame Index Register should be used for the Frame List Current index. Note that
this field is made up from USBCMD bits 15, 3, and 2.
000 = 1024 elements (4096 bytes) Default value
001 = 512 elements (2048 bytes)
3:2 RW 0x0 010 = 256 elements (1024 bytes)
011 = 128 elements (512 bytes)
100 = 64 elements (256 bytes)
101 = 32 elements (128 bytes)
110 = 16 elements (64 bytes)
111 = 8 elements (32 bytes)
Only the host controller uses this field.
RST: Controller Reset. Software uses this bit to reset the controller. This bit is set to zero by the
Host/Device Controller when the reset process is complete. Software cannot terminate the reset
process early by writing a zero to this register. Host Controller: When software writes a one to this
bit, the Host Controller resets its internal pipelines, timers, counters, state machines etc. to their
initial value. Any transaction currently in progress on USB is immediately terminated. A USB reset
is not driven on downstream ports. Software should not set this bit to a one when the HCHalted
1 RW 0x0 bit in the USBSTS register is a zero. Attempting to reset an actively running host controller results
in undefined behavior. Device Controller: When software writes a one to this bit, the Device
Controller resets its internal pipelines, timers, counters, state machines, etc. to their initial value.
Any transaction currently in progress on USB is immediately terminated. Writing a one to this bit
in device mode is not recommended.
0 = CLEAR
1 = SET
RS: Run/Stop: Host Controller: When set to a 1, the Host Controller proceeds with the execution
of the schedule. The Host Controller continues execution as long as this bit is set to a one. When
this bit is set to 0, the Host Controller completes the current transaction on the USB and then
halts. The HCHalted bit in the status register indicates when the Host Controller has finished the
0 RW 0x0 transaction and has entered the stopped state. Software should not write a one to this field unless
the host controller is in the Halted state (i.e., HCHalted in the USBSTS register is a one). Device
Controller: Writing a one to this bit will cause the device controller to enable a pull-up on D+ and
initiate an attach event. This control bit is not directly connected to the pull-up enable, as the pull-
up will become disabled upon transitioning into high-speed mode. Software should use this bit to
19.13.4.19 USB2_CONTROLLER_1_USB2D_USBSTS_0
PPCI: Port-n Change Detect - RW. Default = 0000h. The definition for each bit is identical to the
Port Change Detect field (bit 2 of this register) except these bits are specific to a given port,
31:16 RW 0x0 where bit 16 = Port 1, 17 = Port 2, etc. For example, if bit 17 is set to a one then a port change
event was detected on Port 2. The N_PORTS field in HCSPARAMS specifies how many ports
are exposed by the host controller and thus how many bits in this field are valid.
AS: Asynchronous Schedule Status. This bit reports the current status of the Asynchronous
Schedule. When set to zero the asynchronous schedule status is disabled and if set to one the
status is enabled. The Host Controller is not required to immediately disable or enable the
Asynchronous Schedule when software transitions the Asynchronous Schedule Enable bit in the
15 RW 0x0 USBCMD register.
If AS = ASE: 1= Enable Asynchronous Schedule. 0= Disable Asynchronous Schedule.
Only used by the host controller.
0 = DISABLE
1 = ENABLE
PS: Periodic Schedule Status. This bit reports the current status of the Periodic Schedule. When
set to zero the periodic schedule is disabled, and if set to one the status is enabled. The Host
Controller is not required to immediately disable or enable the Periodic Schedule when software
transitions the Periodic Schedule Enable bit in the USBCMD register.
14 RW 0x0
If PS = PSE:: 1 = Periodic Schedule is enabled. 0 = Periodic Schedule is disabled.
Only used by the host controller.
0 = DISABLE
1 = ENABLE
RCL: Reclamation. This is a read-only status bit used to detect an empty asynchronous schedule.
Only used by the host controller.
13 RO X
0 = DISABLE
1 = ENABLE
HCH: HCHalted. 1 = Default. This bit is a zero whenever the Run/Stop bit is a one. The Host
Controller sets this bit to one after it has stopped executing because of the Run/Stop bit being set
to 0, either by software or by the Host Controller hardware (e.g., internal error). Only used by the
12 RW 0x1
host controller.
0 = UNHALTED
1 = HALTED
UALT_INT: ULPI alt_int Interrupt. 0 = Default. This interrupt bit is set when an RXCMD is
received through the ULPI interface with bit 7 set (alt_int). The alt_int bit is set when an
unmasked event occurs on any bit in the Carkit Interrupt Latch Register, in the ULPI PHY. The
software should read the Carkit Interrupt Latch Register (Read to Clear) through the ULPI
11 RW 0x0 Viewport to check the source of the interrupt. Only present in designs where configuration
constant VUSB_HS_PHY_ULPI = 1.
0 = NOT_ULPI_ALT_INT
1 = ULPI_ALT_INT
ULPI_INT: ULPI Interrupt. This bit is set whenever an interrupt is received from ULPI PHY.
Software writes 1 to clear it.
10 RW 0x0
0 = NOT_ULPI_INT
1 = ULPI_INT
SLI: DCSuspend. When a device controller enters a suspend state from an active state, this bit
will be set to a 1. The device controller clears the bit upon exiting from a suspend state. Only
8 RW 0x0 used by the device controller.
0 = NOTSUSPEND
1 = SUSPENDED
SRI: SOF Received. When the device controller detects a Start Of (micro) Frame, this bit will be
set to a one. When an SOF is extremely late, the device controller will automatically set this bit to
indicate that an SOF was expected. Therefore, this bit will be set roughly every 1ms in device FS
mode and every 125 µs in HS mode and will be synchronized to the actual SOF that is received.
Since device controller is initialized to FS before connect, this bit will be set at an interval of 1ms
7 RW 0x0
during the prelude to the connect and chirp. In host mode, this bit will be set every 125 µs and
can be used by host controller driver as a time base. Software writes a 1 to this bit to clear it. This
is a non-EHCI status bit.
0 = SOF_NOT_RCVD
1 = SOF_RCVD
URI: USB Reset Received. When the device controller detects a USB Reset and enters the
default state, this bit is set to a 1. Software can write a 1 to this bit to clear the USB Reset
6 RW 0x0 Received status bit. Only used by the device controller.
0 = NO_USB_RESET
1 = USB_RESET
AAI: Interrupt and Asynchronous Advance. System software can force the host controller to issue
an interrupt the next time the host controller advances the asynchronous schedule by writing a
one to the Interrupt on Async Advance Doorbell bit in the USBCMD register. This status bit
5 RW 0x0
indicates the assertion of that interrupt source. Only used by the host controller.
0 = NOT_ADVANCED
1 = ADVANCED
SEI: System Error. This bit is not used in this implementation and will always be set to "0".
4 RO X 0 = NO_ERROR
1 = ERROR
FRI: Frame List Rollover. The Host Controller sets this bit to a 1 when the Frame List Index rolls
over from its maximum value to 0. The exact value at which the rollover occurs depends on the
frame list size. For example. If the frame list size (as programmed in the Frame List Size field of
the USBCMD register) is 1024, the Frame Index Register rolls over every time FRINDEX [1 3]
3 RW 0x0
toggles. Similarly, if the size is 512, the Host Controller sets this bit to a 1 every time FHINDEX
[12] toggles. Only used by the host controller.
0 = NO_ROLLOVER
1 = ROLLOVER
PCI: Port Change Detect. The Host Controller sets this bit to a 1 when on any port a Connect
Status occurs, a Port Enable/Disable Change occurs, or the Force Port Resume bit is set as the
result of a J-K transition on the suspended port. The Device Controller sets this bit to a one when
the port controller enters the full or high-speed operational state. When the port controller exits
2 RW 0x0 the full or high-speed operational states due to Reset or Suspend events, the notification
mechanisms are the USB Reset Received bit and the DCSuspend bits respectively. This bit is not
EHCI compatible.
0 = NO_PORT_CHANGE
1 = PORT_CHANGE
UEI: USB Error Interrupt. This bit gets set by the Host/Device controller when completion of a
USB transaction results in an error condition. This bit is set along with the USBINT bit, if the TD
1 RW 0x0 on which the error interrupt occurred also ad its interrupt on complete (IOC) bit set.
0 = NO_ERROR
1 = ERROR
UI: USB Interrupt. This bit is set by the Host/Device Controller when the cause of an interrupt is a
completion of a USB transaction where the Transfer Descriptor (TD) as an interrupt on complete
(IOC) bit set. This bit is also set by the Host/Device Controller when a short packet is detected. A
0 RW 0x0 short packet is when the actual number of bytes received was less than the expected number of
bytes.
0 = NO_INT
1 = INT
19.13.4.20 USB2_CONTROLLER_1_USB2D_USBINTR_0
PPCE: Port-n Change Detect Enable - RW. Default = 0000h. The definition for each bit in this field is
identical to bit 2 of this register (Port Change Interrupt Enable) except these bits are specific to a given
port, where bit 16 = Port 1, 17 = Port 2, etc. For example, if bit 17 is set (1b) then a port change event
31:16 0x0
was detected on Port 2. When a bit in this field is a one, and the corresponding Port-n Change Detect
bit in the USBSTS register is a one, the host controller will issue an interrupt. The interrupt is
acknowledged by software clearing the Port-n Change Detect bit.
UALTIE: ULPI alt_int Interrupt Enable. 1 = USB controller issues an interrupt if the ULPI_ALT_INT bit in
the USBSTS register transitions. The interrupt is acknowledged by software writing a 1 to the
11 0x0 ULPI_ALT_INT bit.
0 = DISABLE
1 = ENABLE
ULPIE: ULPI Interrupt Enable. 1 = USB controller issues an interrupt if ULPI_INT bit in USBSTS register
transitions. The interrupt is acknowledged by software by writing a 1 to the ULPI_INT bit.
10 0x0
0 = DISABLE
1 = ENABLE
SLE: Sleep Enable. 1 = Device controller issues an interrupt if DCSuspend bit in USBSTS register
transitions. The interrupt is acknowledged by software by writing a 1 to the DCSuspend bit. Only used
8 0x0 by the device controller.
0 = DISABLE
1 = ENABLE
SRE: SOF Received Enable. 1 = Device controller issues an interrupt if SOF Received bit in USBSTS
register = 1. The interrupt is acknowledged by software clearing the SOF Received bit.
7 0x0
0 = DISABLE
1 = ENABLE
URE: USB Reset Enable.1 = Device controller issues an interrupt if USB Reset Received bit in USBSTS
register = 1. The interrupt is acknowledged by software clearing the USB Reset Received bit. Only used
6 0x0 by the device controller.
0 = DISABLE
1 = ENABLE
AAE: Interrupt on Asynchronous Advance Enable. 1 = the host controller issues an interrupt at the next
interrupt threshold if the Interrupt on Async Advance bit in the USBSTS register = 1. The interrupt is
5 0x0 acknowledged by software clearing the Interrupt on Async Advance bit. Only used by the host controller.
0 = DISABLE
1 = ENABLE
SEE: System Error Enable. 1 = Host/device controller issues an interrupt if the System Error bit in the
USBSTS register = 1. The interrupt is acknowledged by software clearing the System Error bit.
4 0x0
0 = DISABLE
1 = ENABLE
FRE: Frame List Rollover Enable. 1 = Host controller issues an interrupt if the Frame List Rollover bit in
the USBSTS register = 1. The interrupt is acknowledged by software clearing the Frame List Rollover
3 0x0 bit. Only used by the host controller.
0 = DISABLE
1 = ENABLE
PCE: Port Change Detect Enable. 1 = Host/device controller issues an interrupt if Port Change Detect
bit in USBSTS register = 1. The interrupt is acknowledged by software clearing the Port Change Detect
2 0x0 bit.
0 = DISABLE
1 = ENABLE
UEE: USB Error Interrupt Enable. 1 = Host controller issues an interrupt at the next interrupt threshold if
the USBERRINT bit in USBSTS = 1. The interrupt is acknowledged by software clearing the
1 0x0 USBERRINT bit in the USBSTS register.
0 = DISABLE
1 = ENABLE
UE: USB Interrupt Enable. 1 = Host/device issues an interrupt at the next interrupt threshold if the
USBINT bit in USBSTS = 1. The interrupt is acknowledged by software clearing the USBINT bit.
0 0x0
0 = DISABLE
1 = ENABLE
19.13.4.21 USB2_CONTROLLER_1_USB2D_FRINDEX_0
FRINDEX: Frame Index. The value in this register increments at the end of each time frame (micro-
frame). Bits [N: 3] are used for the Frame List current index. Each location of the frame list is accessed 8
times (frames or micro-frames) before moving to the next index. The following illustrates values of N
based on the value of the Frame List Size field in the USBCMD register, when used in host mode.
USBCMD [Frame List Size] Number Elements N
000b (1024) 12
001b (512) 11
13:0 X 010b (256) 10
011b (128) 9
100b (64) 8
101b (32) 7
110b (16) 6
111b (8) 5
In device mode, the value is the current frame number of the last frame transmitted. It is not used as an
index. In either mode, bits 2:0 indicate the current micro-frame.
19.13.4.22 USB2_CONTROLLER_1_USB2D_PERIODICLISTBASE_0
USBADR: Device mode. The upper seven bits of this register represent the device address. After any
controller reset or a USB reset, the device address is set to the default address (0). The default address
31:25 0x0
will match all incoming addresses. Software shall reprogram the address after receiving a
SET_ADDRESS request.
USBADRA: Device Address Advance. Default=0. When this bit is 0, any writes to USBADR are
instantaneous. When this bit is written to a 1 at the same time or before USBADR is written, the write to
the USBADR field is staged and held in a hidden register. After an IN occurs on endpoint 0 and is
ACKed, USBADR will be loaded from the holding register. Hardware will automatically clear this bit on
the following conditions:
1) IN is ACKed to endpoint 0. (USBADR is updated from staging register).
24 0x0 2) OUT/SETUP occur to endpoint 0. (USBADR is not updated).
3) Device Reset occurs (USBADR is reset to 0).
Note: After the status phase of the SET_ADDRESS descriptor, the DCD has 2 ms to program the
USBADR field. This mechanism will ensure this specification is met when the DCD cannot write of the
device address within 2ms from the SET_ADDRESS status phase. If the DCD writes the USBADR with
USBADRA=1 after the SET_ADDRESS data phase (before the prime of the status phase), the
USBADR will be programmed instantly at the correct time and meet the 2ms USB requirement.
BASEADR: Host mode: This 32-bit register contains the beginning address of the Periodic Frame List in
the system memory. HCD loads this register prior to starting the schedule execution by the Host
Controller. The memory structure referenced by this physical memory pointer is assumed to be 4-Kbyte
31:12 0x0
aligned. The contents of this register are combined with the Frame Index Register (FRINDEX) to enable
the Host Controller to step through the Periodic Frame List in sequence. Base Address (Low). These
bits correspond to memory address signals [31:12], respectively. Only used by the host controller.
19.13.4.23 USB2_CONTROLLER_1_USB2D_ASYNCLISTADDR_0
EPBASE: Device mode. This register contains the address of the top of the endpoint list in system
31:11 0x0 memory. These bits correspond to memory address signals [31:11], respectively. This field will
reference a list of up to 32 Queue Heads (QH). Only used by the device controller.
ASYBASE: Host mode. This 32-bit register contains the address of the next asynchronous queue head
31:5 0x0 to be executed by the host. Link Pointer Low (LPL). These bits correspond to memory address signals
[31:5], respectively. This field may only reference a Queue Head (OH). Only used by the host controller.
19.13.4.24 USB2_CONTROLLER_1_USB2D_ASYNCTTSTS_0
30:24 RW 0x0 TTHA: Internal TT Hub Address representation. This field is used to match the Hub Address field
in QH (queue head) and siTD to determine if the packet is routed to the internal TT for directly
attached FS/LS devices. If the Hub Address in the QH or siTD does not match this address, then
the packet will be broadcast on the High-Speed ports destined for a downstream High Speed hub
with the address in QH/siTD.
TTAC: Embedded TT Async Buffers Clear. (Read/Write to set). This field will clear all pending
transactions in the embedded TT Async Buffer(s). The clear will take as much time as necessary
1 RW 0x0
to clear buffer without interfering with a transaction in progress. TTAC will return to zero after
being set by software only after the actual clear occurs.
TTAS: Embedded TT Async Buffers Status. (Read Only). This read-only bit will be 1 if one or
0 RO X more transactions are being held in the embedded TT Async. Buffers. When this bit is a zero,
then all outstanding transactions in the embedded TT have been flushed.
19.13.4.25 USB2_CONTROLLER_1_USB2D_BURSTSIZE_0
TXPBURST: Programmable TX Burst Length. (Read/Write). This register represents the maximum length
15:8 0x8
of a burst in 32-bit words while moving data from system memory to the USB bus.
RXPBURST: Programmable RX Burst Length. (Read/Write). This register represents the maximum
7:0 0x8
length of a burst in 32-bit words while moving data from the USB bus to system memory.
19.13.4.26 USB2_CONTROLLER_1_USB2D_TXFILLTUNING_0
TXFIFOTHRES: FIFO Burst Threshold. (Read/Write). This register controls the number of data bursts
21:16 0x2 that are posted to the TX latency FIFO in host mode before the packet begins on to the bus. The
minimum value is 2, and this value should be a low as possible to maximize USB performance. A higher
value can be used in systems with unpredictable latency and/or insufficient bandwidth where the FIFO
TXSCHOH: Scheduler Overhead. (Read/Write) [Default = 0] This register adds an additional fixed offset
to the schedule time estimator described above as Tff. As an approximation, the value chosen for this
register should limit the number of back-off events captured in the TXSCHHEALTH to less than 10 per
7:0 0x0 second in a highly utilized bus. Choosing a value that is too high for this register is not desired as it can
needlessly reduce USB utilization. The time unit represented in this register is 1.267 µs when a device
is connected in High-Speed Mode. The time unit represented in this register is 6.333 µs when a device
is connected in Low/Full Speed Mode
19.13.4.27 USB2_CONTROLLER_1_USB2D_ICUSB_CTRL_0
IC_ENB1: ICUSB transceiver enable. This bit enables the ICUSB transceiver. To enable the interface, the
PTS bits must be set to 11 in the PORTSCx. Writing a '1' to this bit selects the IC_USB interface.
3 0x0
0 = DISABLE
1 = ENABLE
IC_VDD1: ICUSB voltage select. It selects which voltage is being supplied to the ICUSB peripheral.
000= No voltage
001 = 1.0V - reserved
010= 1.2V - reserved
011= 1.5V - reserved
2:0 0x0
100 = 1.8V
101 = 3.0V
110 = reserved
111 = reserved
The Voltage negotiation should happen between enabling port power (PP) and asserting the run/stop bit.
19.13.4.28 USB2_CONTROLLER_1_USB2D_ULPI_VIEWPORT_0
This register provides indirect access to the ULPI PHY register set. Although the USB controller performs access to the ULPI
PHY register set, there may be extraordinary circumstances where software may need direct access.
Note: WRITES TO THE ULPI THROUGH THE VIEWPORT CAN SUBSTANTIALLY HARM STANDARD USB
OPERATIONS. CURRENTLY NO USAGE MODEL HAS BEEN DEFINED WHERE SOFTWARE SHOULD
NEED TO EXECUTE WRITES DIRECTLY TO THE ULPI PHY. SEE EXCEPTION REGARDING
OPTIONAL FEATURES BELOW.
Note: EXECUTING READ OPERATIONS THROUGH THE ULPI VIEWPORT SHOULD HAVE NO HARMFUL
SIDE EFFECTS TO STANDARD USB OPERATIONS.
There are two operations that can be performed with the ULPI Viewport-- wakeup and read /write operations.
The wakeup operation is used to put the ULPI interface into normal operation mode and re-enable the clock if necessary. A
wakeup operation is required before accessing the registers when the ULPI interface is operating in low power mode, serial
mode, or Carkit mode.
The ULPI state can be determined by reading the sync state bit (ULPI_SYNC_STATE). If this bit is a one, then ULPI interface
is running in normal operation mode and can accept read/write operations. If the ULPI_SYNC_STATE indicates a 0 then then
read/write operations will not be able to execute. Undefined behavior will result if ULPI_SYNC_STATE = 0 and a read or write
operation is performed.
To execute a wakeup operation, write all 32 bits of the ULPI Viewport where ULPI_PORT is constructed appropriately and the
ULPI_WAKEUP bit is a 1 and ULPI_RUN bit is a 0. Poll the ULPI Viewport until ULPI_WAKEUP is zero for the operation to
complete.
To execute a read or write operation, write all 32 bits of the ULPI Viewport where ULPI_DATA_WR, ULPI_REG_ADDR,
ULPI_PORT, ULPI_RD_WR are constructed appropriately and the ULPI_RUN bit is a 1. Poll the ULPI Viewport until
ULPI_RUN is zero for the operation to complete. Once ULPI_RUN is zero, the ULPI_DATA_RD will be valid if the operation
was a read.
The polling method above can be changed to interrupt driven using the ULPI interrupt defined in the USBSTS and USBINTR
registers. When a wakeup or read/write operation is complete, the ULPI_INT interrupt will be set.
There are several optional features that may need to be enabled or disabled by system software as part of system
configuration. These bits are contained in the Interface and OTG Control registers of the ULPI PHY register set. These
registers also contain bits which are controlled by the link dynamically and therefore should be only modified by system
software using the Set/Clear access method. Direct writes to these registers could have harmful side effects to the standard
USB operations. The optional bits are as follows: Bits 3 through 7 in the Interface Control register and Bits 6 and 7 in the OTG
Control register.
Please refer to the ULPI Specification Revision 1.1 for further information on the use of the optional features.
ULPI_WAKEUP: ULPI Wakeup. Writing the 1 to this bit will begin the wakeup operation. The bit
will automatically transition to 0 after the wakeup is complete. Once this bit is set, the driver
cannot set it back to 0. Note: The driver must never execute a wakeup and a read/write operation
31 RW 0x0
at the same time.
0 = CLEAR
1 = SET
ULPI_RUN: ULPI read/write Run. Writing the 1 to this bit will begin the read/write operation. The
bit will automatically transition to 0 after the read/write is complete. Once this bit is set, the driver
cannot set it back to 0. Note: The driver must never execute a wakeup and a read/write operation
30 RW 0x0
at the same time.
0 = CLEAR
1 = SET
ULPI_RD_WR: ULPI read/write control. (0) Read; (1) Write. This bit selects between running a
read or write operation.
29 RW 0x0
0 = READ
1 = WRITE
ULPI_SYNC_STATE: ULPI sync state. (1) Normal Sync. State. (0) In another state (i.e., Carkit,
serial, low power). This bit represents the state of the ULPI interface.
27 RO X
0 = NOT_NORMAL
1 = NORMAL
26:24 RW 0x0 ULPI_PORT: ULPI PHY port number. This field should be always written as 0.
ULPI_REG_ADDR: ULPI PHY register address. When doing a read or write operation to the ULPI
23:16 RW 0x0
PHY, the address of the ULPI PHY register being accessed is written to this field.
ULPI_DATA_RD: ULPI PHY data read. The data from the ULPI PHY register can be read from
15:8 RO X
here after the read operation completes.
7:0 RW 0x0 ULPI_DATA_WR: ULPI PHY data write. The data to write to the ULPI PHY register is written
19.13.4.29 USB2_CONTROLLER_1_USB2D_PORTSC1_0
DA: Device Address. Default = 0000000b. The 7-bit USB device address for the device attached
to an immediately downstream of the associated root port. A value of zero indicates no device is
present or software support for this feature is not present. This is used by the Controller when
31:25 RW 0x0 sending the LPM token.
This field is only valid when the core is operating in host mode. If in device mode it will be read
only and always equal to 0000000b.
SSTS: Suspend Status. Default = 00b. These two bits are used by software to determine whether
an L1-based suspend request was successful, specifically:
00b - L1 state entered with success. ACK received from peripheral.
01b - NYET received from peripheral. It was not able to enter L1 state this time.
10b - L1 state not supported by peripheral. STALL received.
11b - Peripheral did not respond or an error occurred.
The value of this field is only valid when the port resides in the L0 state - that is, the meaning of
these bits is invalid whenever bit 7 of this register (SUSP) is one. Ideally, the Controller driver
24:23 RO X
should read this register if it receives an interrupt after issuing a suspend using L1 support. In
case of a non-success a port change interrupt will be fired and this field should be checked for a
possible L1 failure.
This field is only valid when the core is operating in host mode. If in device mode it will be always
equal to 00b.
0 = L1STATE_ENTERED
1 = NYET_PERIPH
2 = L1STATE_NOT_SUPPORTED
3 = PERIPH_NORESP_ERR
WKOC: Default = 0b. Wake on Over-current Enable: Writing this bit to a one enables the port to
be sensitive to over-current conditions as wake-up events. This field is zero if Port Power (PP) is
zero. This bit should only be used when operating in Host mode. Writing this bit to 1 while the
22 RW 0x0
controller is working in device mode can result in undefined behavior.
0 = DISABLE
1 = ENABLE
WKDS: Wake on Disconnect Enable: Writing this bit to a one enables the port to be sensitive to
device disconnects as wake-up events. This field is zero if Port Power (PP) is zero or in device
mode. This bit should only be used when operating in Host mode. Writing this bit to 1 while the
controller is working in device mode can result in undefined behavior. This bit should not be
21 RW 0x0
written to 1 if there is no device connected. After the device disconnect is detected, this bit should
be cleared to 0.
0 = DISABLE
1 = ENABLE
WKCN: Wake on Connect Enable: Writing this bit to a one enables the port to be sensitive to
device connects as wake-up events. This field is zero if Port Power (PP) is zero or in device
mode. This bit should only be used when operating in Host mode. Writing this bit to 1 while the
controller is working in device mode can result in undefined behavior. This bit should not be
20 RW 0x0
written to 1 while the device is connected. After the device connection is detected, this bit should
be cleared to 0.
0 = DISABLE
1 = ENABLE
PTC: Port Test Control: Any value other than zero indicates that the port is operating in test
mode.
Value Specific Test.
19:16 RW 0x0
0000b Not enabled.
0001b J_ STATE.
0010b K_STATE.
PIC: Port Indicator Control: This field is not supported in the current implementation. Please use a
15:14 RO X
GPIO if you wish to use Port Indicators.
PO: Port Owner. Port owner handoff is not implemented in this design, therefore this bit will
13 RO X
always be 0.
PP: Port Power: The function of this bit depends on the value of the Port Power Switching (PPC)
field in the HCSPARAMS register. The behavior is as follows:
PPC PP Operation
0b 0b Read Only. A device controller with no OTG capability does not have port
power control switches.
1b 1b/0b RW. Host/OTG controller requires port power control switches.
12 RW 0x1
This bit represents the current setting of the switch (0=off, 1=on). When power is not available on
a port (i.e., PP equals a 0), the port is non-functional and will not report attaches, detaches, etc.
When an over-current condition is detected on a powered port and PPC is a one, the PP bit in
each affected port may be transitioned by the host controller driver from a one to a zero
(removing power from the port).
0 = NOT_POWERED
1 = POWERED
LS: These bits reflect the current logical levels of the D+ (bit 11) and D- (bit 10) signal lines. The
encoding of the bits is:
00b = SE0
10b = J-state
01b = K-state
11b = Undefined
11:10 RO X The value of this field is undefined if Port Power (PP) is zero in host mode. In host mode, the use
of line state by the host controller driver is not necessary (unlike EHCI), because the port
controller state machine and the port routing manage the connection of LS and FS. In device
mode, the use of line state by the device controller driver is not necessary.
0 = SE0
1 = K_STATE
2 = J_STATE
3 = UNDEFINED
SLP: Suspend using L1 - RW. Default = 0b. When this bit is set to '1' and a non-zero Device
Address (DA) is specified Controller will instigate L1 entry during suspend (bit 7) and L1 exit
during resume (bit 6). When set to zero the Controller will use the legacy (L2) mechanism.
9 RW 0x0 Software should only set this bit when the device attached immediately downstream supports L1
transitions. When acting as device, this bit is read-only and set to '1' by the hardware when the
Controller enters is L1 state (LPM token received and accepted). Note: HSP is redundant with
PSPD(27:26). This bit is not defined in the EHCI specification.
SUSP: Port suspend. 1=Port in suspend state. 0=Port not in suspend state.
In Host Mode: Read/Write. Port Enabled bit and Suspend bit of this register define the port states
as follows:
Bits [Port Enabled, Suspend] Port State
0x Disable
10 Enable
11 Suspend
When in the suspend state, downstream propagation of data is blocked on this port, except for
port reset. The blocking occurs at the end of the current transaction if a transaction was in
7 RO X
progress when this bit was written to 1. In the suspend state, the port is sensitive to resume
detection. Note that the bit status does not change until the port is suspended and that there may
be a delay in suspending a port if there is a transaction currently in progress on the USB. The
host controller will unconditionally set this bit to zero when software sets the Force Port Resume
bit to zero. A write of zero to this bit is ignored by the host controller. If host software sets this bit
to a one when the port is not enabled (i.e., Port enabled bit is a zero), the results are undefined.
This field is zero if Port Power (PP) is zero in host mode.
In Device Mode: Read Only. This bit is a read-only status bit.
0 = NOT_SUSPEND
1 = SUSPEND
FPR: Force Port Resume. 1= Resume detected/driven on port. 0=No resume (K state)
detected/driven on port.
In Host Mode: Software sets this bit to one to drive resume signaling. The Host Controller sets
this bit to one if a J-to-K transition is detected while the port is in the Suspend state. When this bit
transitions to a one because a J-to-K transition is detected, the Port Change Detect bit in the
USBSTS register is also set to one. This bit will automatically change to zero after the resume
sequence is complete. This behavior is different from EHCI where the host controller driver is
required to set this bit to a zero after the resume duration is timed in the driver. Note that when
the Host controller owns the port, the resume sequence follows the defined sequence
documented in the USB Specification Revision 2.0. The resume signaling (Full-speed 'K') is
driven on the port as long as this bit remains a one. This bit remains a one until the port has
6 RW 0x0 switched to the high-speed idle. Writing a zero has no effect because the port controller will time
the resume operation to clear the bit when the port control state switches to HS or FS idle. This
field is zero if Port Power (PP) is zero in host mode. This bit is not-EHCI compatible.
In Device mode: After the device has been in Suspend State for 5 ms or more, software must set
this bit to one to drive resume signaling before clearing. The Device Controller will set this bit to
one if a J-to-K transition is detected while the port is in the Suspend state. The bit will be cleared
when the device returns to normal operation. Also, when this bit transitions to a one because a J-
to-K transition is detected, the Port Change Detect bit in the USBSTS register is also set to one.
Software should ensure that the PHY clock is operational before writing a 1 to this bit to start the
resume sequence. This is true for both Device and Host modes.
0 = NO_RESUME
1 = RESUME
PEC: Port Enable/Disable Change: 1=Port enabled/disabled status has changed. 0=No change.
In Host Mode: For the root hub, this bit gets set to a one only when a port is disabled due to
disconnect on the port or due to the appropriate conditions existing at the EOF2 point (See
Chapter 11 of the USB Specification). Software clears this by writing a one to it. This field is zero
3 RW 0x0
if Port Power (PP) is zero.
In Device mode: The device port is always enabled. (This bit will be zero)
0 = NO_CHANGE
1 = CHANGE
CSC: Connect Status Change: 1 =Change in Current Connect Status. 0=No change (default)
In Host Mode: Indicates a change has occurred in the port's Current Connect Status. The
host/device controller sets this bit for all changes to the port device connect status, even if system
software has not cleared an existing connect status change. For example, the insertion status
changes twice before system software has cleared the changed condition, hub hardware will be
1 RW 0x0
'setting' an already-set bit (i.e., the bit will remain set). Software clears this bit by writing a one to
it. This field is zero if Port Power (PP) is zero in host mode.
This bit is undefined in device controller mode.
0 = NO_CHANGE
1 = CHANGE
19.13.4.30 USB2_CONTROLLER_1_USB2D_HOSTPC1_DEVLC_0
PTS: Parallel transceiver select. This bit is not defined in the EHCI specification.
0 = UTMI
31:29 RW 0x0 1 = RESERVED
2 = ULPI
3 = ICUSB_SER
STS: Serial transceiver not selected. This is the only value supported. This bit is not defined in
the EHCI specification.
28 RW 0x0
0 = PARALLEL_IF
1 = SERIAL_IF
PTW: Parallel Transceiver Width. Fixed to 0. This bit is not defined in the EHCI specification.
27 RO X 0 = EIGHT_BIT
1 = RESERVED
PSPD: This register field indicates the speed at which the port is operating.
00 = Full Speed
01 = Low Speed
10 = High Speed. This bit is not defined in the EHCI specification.
26:25 RO X
0 = FULL_SPEED
1 = LOW_SPEED
2 = HIGH_SPEED
3 = RESERVED
ALPD: Auto Low Power While Disconnect - RW. Default = 0b. If set, this feature will be enabled,
and every time the port enters the disconnect state, it will also enter in low power state, disabling
the transceiver clock. The behavior will be same as if the PHCD bit was enabled (in fact this bit
will be set to 1 as soon as low power mode is enabled).When this field is set the WKCN field of
PORTSCx register (Wake on Connect Enable) will also be set. This way the core will wake up in
24 RW 0x0 case a connect is detected. There will be a delay between the detection of a disconnect and
actually enter in low power mode. This delay can be controlled by writing to the ALPDD field in
the register USBMODE
0 = DONT_AUTO_LOW_POWER_WHILE_DISCONNECT
1 = AUTO_LOW_POWER_WHILE_DISCONNECT
PFSC: Port Force Full Speed Connect - RW. Default = 0b. Writing this bit to a '1b' will force the
port to only connect at Full Speed. It disables the chirp sequence that allows the port to identify
itself as High Speed. This is useful for testing FS configurations with an HS host, hub or device.
23 RW 0x0
This bit is not defined in the EHCI specification.
0 = DONT_FORCE_FULL_SPEED
1 = FORCE_FULL_SPEED
PHCD: PHY Low Power Suspend - Clock disable: Writing this bit to a 1 will disable the PHY
clock. Writing a 0 enables it. Reading this bit will indicate the status of the PHY clock. NOTE: The
PHY clock cannot be disabled if it is being used as the system clock. In device mode, the PHY
can be put into Low Power Clock Disable when the device is not running (USBCMD RS=0b) or
the host has signaled suspend (PORTSCx SUSP=1b). Low Power Clock Disable will be cleared
automatically when the host has signaled resume. Before forcing a resume from the device, the
22 RW 0x0
Controller driver must clear this bit. In host mode, the PHY can be put into Low Power Suspend
Clock Disable when the downstream device has been put into suspend mode or when no
downstream device is connected. Low Power Clock Disable is completely under the control of
software.
0 = DISABLE
1 = ENABLE
LPMX: Auto LPM set - RW. Default = 00b. This bit field is valid during Host Mode Only. For
Device Mode this is reserved.
Value Meaning
00b Disables auto LPM.
01b If there is no activity for a certain number of SOFs the controller will send an LPM
21:20 RW 0x0 token, enter in suspend and issue a port change interrupt.
10b Same as above but without issuing an interrupt.
11b Reserved for futures LPM enhancements.
The detection of no activity is based on the absence of response from the downstream device.
Because of this limitation this feature should not be used if ISO OUT endpoints are being used
(as no handshake is expected).
ASUS: Auto Low Power - RW. Default = 0b. This bit field is valid during Device Mode Only. In
Host Mode it is part of ELPM field. This bit is used to control the auto low power feature. If set, the
auto low power feature will be enabled and every time the port enters in suspend state it will also
17 RW 0x0 enter in low power state, disabling the transceiver clock. The behavior will be the same as if the
PHCD bit was enabled (in fact this bit will be set to '1' as soon as low power mode is enabled).
0 = DISABLE
1 = ENABLE
EPLPM: Endpoint for LPM token - RW. Default = 0000b. This bit field is valid during Host Mode
only. For Device Mode [19:18] is reserved and 17 is ASUS, while 16 is STL. This sets the
19:16 RW 0x0
endpoint number to which the LPM token will be sent. It will be directly mapped to the ENDP field
in the LPM token with the EXT PID.
STL: STALL reply to LPM token - RW. Default = 0b. This bit field is valid during Device Mode
16 RW 0x0 Only. In Host Mode it is a part of ELPM field. When this bit is set to '1', the Controller will reply
always with STALL to all incoming LPM tokens. This bit overrides the LPM NYET bit (NYT).
LPMFRM: Auto LPM SOF Threshold - RW. Default = 0000b. This bit field is valid during Host
Mode Only. For Device Mode this is reserved. This holds the SOF counter threshold. When the
15:12 RW 0x0 number of SOFs with no activity in between reaches this threshold and the auto LPM is enabled,
an LPM token is sent and the port enters the suspend state. The SOF counter for this threshold is
incremented each 125 µs, even if the port is not in HS operation.
BA: bmAttributes - RO. Default = 00000000000b. This holds the bmAttributes field of the LPM
11:1 RO X
sub-token received, after the EXT PID token.
NYT_ASUS: NYET reply to LPM token - RW. Default = 0b. This bit is NYT during Device Mode.
When this bit is '1', the device controller will NYET all the LPM tokens. When this bit is set to '0',
the Controller will ACK all the LPM tokens if the STALL bit (STL) is also set to '0'.
This bit is ASUS in Host Mode. This bit is used to control the auto low power feature. If set, the
0 RW 0x0 auto low power feature is enabled and every time the port enters the suspend state, it also enters
the low power state, disabling the transceiver clock. The behavior is the same as if the PHCD bit
was enabled (this bit is set to '1' as soon as low power mode is enabled).
0 = DISABLE
1 = ENABLE
19.13.4.31 USB2_CONTROLLER_1_USB2D_OTGSC_0
DPIE: Data Pulse Interrupt Enable. Setting this bit enables the Data pulse interrupt.
30 RW 0x0 0 = DISABLE
1 = ENABLE
ONEMSE: 1 millisecond timer Interrupt enable. Setting this bit enables the 1 millisecond timer
interrupt.
29 RW 0x0
0 = DISABLE
1 = ENABLE
BSEIE: B Session End Interrupt Enable. Setting this bit enables the B session end interrupt
28 RW 0x0 0 = DISABLE
1 = ENABLE
BSVIE: B Session Valid Interrupt Enable. Setting this bit enables the B session valid interrupt
27 RW 0x0 0 = DISABLE
1 = ENABLE
ASVIE: A Session Valid Interrupt Enable. Setting this bit enables the A session valid interrupt
26 RW 0x0 0 = DISABLE
1 = ENABLE
AVVIE: A VBus Valid Interrupt Enable. Setting this bit enables the A VBus valid interrupt
25 RW 0x0 0 = DISABLE
1 = ENABLE
IDIE: USB ID Interrupt Enable. Setting this bit enables the USB ID interrupt
24 RW 0x0 0 = DISABLE
1 = ENABLE
DPIS: Data Pulse Interrupt Status. This bit is set when data bus pulsing occurs on DP or DM. Data
bus pulsing is only detected when USBMODE.CM = Host (11) and PORTSC(0). PortPower = Off
22 RW 0x0 (0). Software writes a 1 to clear this bit.
0 = INT_CLEAR
1 = INT_SET
ONEMSS: 1 millisecond timer Interrupt Status: This bit is set once every millisecond. Software
writes a 1 to clear it.
21 RW 0x0
0 = INT_CLEAR
1 = INT_SET
BSEIS: B Session End Interrupt Status. This bit is set when VBus has fallen below the B session
end threshold. Software writes a 1 to clear this bit.
20 RW 0x0
0 = INT_CLEAR
1 = INT_SET
BSVIS: B Session Valid Interrupt Status. This bit is set when VBus has either risen above or fallen
below the B session valid threshold (0.8 VDC). Software writes a 1 to clear this bit.
19 RW 0x0
0 = INT_CLEAR
1 = INT_SET
ASVIS: A Session Valid Interrupt Status. This bit is set when VBus has either risen above or fallen
below the A session valid threshold (0.8 VDC). Software writes a one to clear this bit.
18 RW 0x0
0 = INT_CLEAR
1 = INT_SET
AVVIS: A VBus Valid Interrupt Status. This bit is set when VBus has either risen above or fallen
below the VBus valid threshold (4.4 VDC) on an A device. Software writes a 1 to clear this bit.
17 RW 0x0
0 = INT_CLEAR
1 = INT_SET
IDIS: USB ID Interrupt Status. This bit is set when a change on the ID input has been detected.
Software writes a 1 to clear this bit.
16 RW 0x0
0 = INT_CLEAR
1 = INT_SET
DPS: Data Bus Pulsing Status. A 1 indicates data bus pulsing is being detected on the port.
14 RO X 0 = STS_CLEAR
1 = STS_SET
ONEMST: 1 millisecond timer toggle. This bit toggles once per millisecond
13 RO X 0 = STS_CLEAR
1 = STS_SET
BSE: B session End. Indicates VBus is below the B session end threshold
12 RO X 0 = STS_CLEAR
1 = STS_SET
BSV: B Session Valid. Indicates VBus is above the B session valid threshold
11 RO X 0 = STS_CLEAR
1 = STS_SET
ASV: A Session Valid. Indicates VBus is above the A session valid threshold
10 RO X 0 = STS_CLEAR
1 = STS_SET
AVV: A VBus Valid. Indicates VBus is above the A VBus valid threshold
9 RO X 0 = STS_CLEAR
1 = STS_SET
DP: Data Pulsing. Setting this bit causes the pull-up on DP to be asserted for data pulsing during
SRP.
4 RW 0x0
0 = NO_DATA_PULSE
1 = DATA_PULSE
OT: OTG Termination. This bit must be set when the OTG device is in device mode, this controls
the pulldown on DM.
3 RW 0x0
0 = NO_OTG_TERM
1 = OTG_TERM
VC: VBUS Charge. Setting this bit causes the VBus line to be charged. This is used for VBus
pulsing during SRP.
1 RW 0x0
0 = NO_VBUS_CHRG
1 = VBUS_CHRG
VD: VBUS_Discharge. Read/write. Setting this bit causes Vbus to discharge through a resistor.
0 RW 0x0 0 = NO_VBUS_DISCHRG
1 = VBUS_DISCHRG
19.13.4.32 USB2_CONTROLLER_1_USB2D_USBMODE_0
ALPDD: Auto Low Power While Disconnect Delay. Used when the ALPD field of the HOSTPCx
register is set. Defines the delay between disconnect detection and entering in low power mode.
31:16 RW 0x0
The delay is <this register value>*64*100/3 in milliseconds. The maximum value is
65535*64*100/3 = 139,808 ms. The minimum value is 0. Only used in Host mode.
15 RW 0x0 SRT: Shorten USB Reset Time. Software should never set this to 1.
VBPS: VBUS Power Select This can be used by logic that selects between an on-chip Vbus
5 RW 0x0 power source (charge pump) and an off-chip source in systems when both are available. Only to
be used in Host Mode. Software should not use this.
SDIS: Stream disable: 1 Streaming is disabled - helpful to avoid overruns/underruns when system
load is too high.
4 RO X
0 = STREAM_ENABLE
1 = STREAM_DISABLE
SLOM: Setup Lockout Mode: In device mode, this bit controls the behavior of the setup lockout
mechanism. 0 - Setup lockout is ON (default) 1 Setup lockout is OFF. Firmware requires the use
3 RO X of setup tripwire semaphore in USB2D_USBCMD register.
0 = LOCKOUT_ON
1 = LOCKOUT_OFF
ES: Endian Select: Note: For this implementation, this should be always set to 0 (little endian).
2 RO X 0 = LITTLE_ENDIAN
1 = RESERVED
CM: Controller Mode: The controller mode will default to an idle state and will need to be
initialized to the desired operating mode after reset. This register can only be written once after
reset. If it is necessary to switch modes, software must reset the controller by writing to the
RESET bit in the USBCMD register before reprogramming this register. 00 = Idle [Default]. 01 =
1:0 RO X Reserved. 10 = Device Controller. 11 = Host Controller.
0 = IDLE
1 = RESERVED
2 = DEVICE_MODE
3 = HOST_MODE
19.13.4.33 USB2_CONTROLLER_1_USB2D_ENDPTNAK_0
EPTN: TX Endpoint NAK R/WC. Each TX endpoint has 1 bit in this field. The bit is set when the device
sends a NAK handshake on a received IN token for the corresponding endpoint.
31:16 0x0
0 = CLEAR
1 = SET
EPRN: RX Endpoint NAK R/WC. Each RX endpoint has 1 bit in this field. The bit is set when the device
sends a NAK handshake on a received OUT or PING token for the corresponding endpoint.
15:0 0x0
0 = CLEAR
1 = SET
19.13.4.34 USB2_CONTROLLER_1_USB2D_ENDPTNAK_ENABLE_0
EPTNE: TX Endpoint NAK Enable R/W. Each bit is an enable bit for the corresponding TX Endpoint
NAK bit. If this bit is set and the corresponding TX Endpoint NAK bit is set, the NAK Interrupt bit is set.
31:16 0x0
0 = DISABLE
1 = ENABLE
EPRNE: RX Endpoint NAK Enable R/W. Each bit is an enable bit for the corresponding RX Endpoint
NAK bit. If this bit is set and the corresponding RX Endpoint NAK bit is set, the NAK Interrupt bit is set.
15:0 0x0
0 = DISABLE
1 = ENABLE
19.13.4.35 USB2_CONTROLLER_1_USB2D_ENDPTSETUPSTAT_0
ENDPTSETUPSTAT15: Endpoint 15 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
15 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT14: Endpoint 14 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
14 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT13: Endpoint 13 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
13 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT12: Endpoint 12 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
12 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT11: Endpoint 11 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
11 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT10: Endpoint 10 Setup Status: For every setup transaction that is received, this bit is
10 0x0 set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
ENDPTSETUPSTAT9: Endpoint 9 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
9 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT8: Endpoint 8 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
8 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT7: Endpoint 7 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
7 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT6: Endpoint 6 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
6 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT5: Endpoint 5 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
5 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT4: Endpoint 4 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
4 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT3: Endpoint 3 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
3 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT2: Endpoint 2 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
2 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT1: Endpoint 1 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
1 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT0: Endpoint 0 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
0 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
19.13.4.36 USB2_CONTROLLER_1_USB2D_ENDPTPRIME_0
PETB15: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
31 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB14: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
30 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB13: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
29 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB12: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
28 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB11: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
27 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB10: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
26 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB9: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
25 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB8: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
24 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB7: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
23 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB6: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
22 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB5: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
21 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB4: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
20 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB3: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
19 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB2: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
18 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB1: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
17 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB0: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
16 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB15: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
15 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB14: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
14 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB13: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
13 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB12: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
12 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB11: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
11 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB10: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
10 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB9: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
9 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB8: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
8 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB7: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
7 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB6: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
6 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB5: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
5 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB4: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
4 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB3: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
3 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB2: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
2 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB1: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
1 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB0: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
0 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
19.13.4.37 USB2_CONTROLLER_1_USB2D_ENDPTFLUSH_0
FETB15: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
31 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB14: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
30 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB13: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
29 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB12: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
28 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB11: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
27 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB10: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
26 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB9: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
25 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB8: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
24 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB7: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
23 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB6: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
22 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB5: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
21 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB4: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
20 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB3: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
19 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB2: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
18 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB1: Writing a one to this bit causes the associated endpoint to clear any primed buffers. If a packet is
in progress for the associated endpoint that transfer will continue until completion. Hardware clears this
17 0x0 register after the endpoint flush operation is successful. This is only used in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB0: Writing a one to this bit causes the associated endpoint to clear any primed buffers. If a packet is
in progress for the associated endpoint that transfer will continue until completion. Hardware clears this
16 0x0 register after the endpoint flush operation is successful. This is only used in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB15: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
15 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB14: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
14 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB13: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
13 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB12: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
12 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB11: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
11 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB10: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
10 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB9: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
9 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB8: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
8 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB7: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
7 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB6: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
6 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB5: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
5 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB4: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
4 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB3: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
3 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB2: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
2 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB1: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
1 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB0: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
0 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
19.13.4.38 USB2_CONTROLLER_1_USB2D_ENDPTSTATUS_0
ETBR15: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
31 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR14: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
30 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR13: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
29 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR12: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
28 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR11: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
27 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR10: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
26 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR9: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
25 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR8: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
24 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR7: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
23 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR6: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
22 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR5: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
21 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR4: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
20 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR3: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
19 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR2: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
18 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR1: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
17 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR0: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
16 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR15: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
15 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR14: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
14 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR13: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
13 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR12: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
12 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR11: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
11 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR10: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
10 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR9: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
9 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR8: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
8 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR7: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
7 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR6: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
6 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR5: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
5 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR4: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
4 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR3: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
3 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR2: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
2 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR1: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
1 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR0: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
0 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
19.13.4.39 USB2_CONTROLLER_1_USB2D_ENDPTCOMPLETE_0
ETCE15: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
31 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE14: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
30 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE13: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
29 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE12: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
28 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE11: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
27 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE10: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
26 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE9: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
25 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE8: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
24 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE7: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
23 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE6: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
22 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE5: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
21 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE4: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
20 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE3: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
19 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE2: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
18 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE1: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
17 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE0: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
16 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE15: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
15 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE14: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
14 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE13: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
13 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE12: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
12 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE11: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
11 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE10: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
10 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE9: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
9 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE8: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
8 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE7: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
7 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE6: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
6 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE5: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
5 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE4: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
4 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE3: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
3 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE2: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
2 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE1: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
1 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE0: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
0 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
19.13.4.40 USB2_CONTROLLER_1_USB2D_ENDPTCTRL0_0
TXS: TX Endpoint Stall: Software can write a one to this bit to force the endpoint to return a STALL
handshake to the Host. It will continue returning STALL until the bit is cleared by software or it will
16 X automatically be cleared upon receipt of a new SETUP request.
0 = EP_OK
1 = EP_STALL
RXS: RX Endpoint Stall: Software can write a one to this bit to force the endpoint to return a STALL
handshake to the Host. It will continue returning STALL until the bit is cleared by software or it will
0 X automatically be cleared upon receipt of a new SETUP request.
0 = EP_OK
1 = EP_STALL
19.13.4.41 USB2_CONTROLLER_1_USB2D_ENDPTCTRLn_0
TXE: TX Endpoint Enable. An Endpoint should be enabled only after it has been configured.
23 RW 0x0 0 = DISABLE
1 = ENABLE
TXR: TX Data Toggle Reset: Whenever a configuration event is received for this Endpoint,
software must write a one to this bit in order to synchronize the data PIDs between the Host and
22 RW 0x0 device.
0 = KEEP_GOING
1 = RESET_PID_SEQ
TXI: TX Data Toggle Inhibit: This bit is only used for test and should always be written as zero.
Writing a one to this bit will cause this endpoint to ignore the data toggle sequence and always
21 RW 0x0 transmit DATA0 for a data packet.
0 = DIS_PID_SEQ
1 = ENB_PID_SEQ
TXS: TX Endpoint Stall: This bit will be set automatically upon receipt of a SETUP request if this
Endpoint is not configured as a Control Endpoint. It will be cleared automatically upon receipt of a
16 RW 0x0 SETUP request if this Endpoint is configured as a Control Endpoint. Software can write a one to
this bit to force the endpoint to return a STALL handshake to the Host. It will continue to returning
STALL until this bit is either cleared by software or automatically cleared as above.
RXE: RX Endpoint Enable. An Endpoint should be enabled only after it has been configured.
7 RW 0x0 0 = DISABLE
1 = ENABLE
RXR: RX Data Toggle Reset: Whenever a configuration event is received for this Endpoint,
software must write a one to this bit in order to synchronize the data PIDs between the host and
6 RW 0x0 device.
0 = KEEP_GOING
1 = RESET_PID_SEQ
RXI: RX Data Toggle Inhibit: This bit is only used for test and should always be written as zero.
Writing a one to this bit will cause this endpoint to ignore the data toggle sequence and always
5 RW 0x0 accept data packet regardless of their data PID.
0 = DIS_PID_SEQ
1 = ENB_PID_SEQ
RXS: RX Endpoint Stall: This bit will be set automatically upon receipt of a SETUP request if this
Endpoint is not configured as a Control Endpoint. It will be cleared automatically upon receipt a
SETUP request if this Endpoint is configured as a Control Endpoint. Software can write a one to
0 RW 0x0 this bit to force the endpoint to return a STALL handshake to the Host. It will continue to returning
STALL until this bit is either cleared by software or automatically cleared as above,
0 = EP_OK
1 = EP_STALL
§ Assert ULPIS2S_SLV0_CLAMP_XMIT to ensure that the signals between SLV0 and the line simulator are clean.
§ Assert ULPIS2S_SLV0_RESET
§ Deassert ULPIS2S_SLV0_RESET
§ Deassert ULPIS2S_SLV0_CLAMP_XMIT
NULPI_SLV1_RESET should be used in the same way if there is some explicit way to reset the external ULPI controller
(which is not necessarily the case). There is usually no reason to assert ULPIS2S_LINE_RESET.
19.13.5.1 USB2_IF_USB_SUSP_CTRL_0
This register controls the suspend and resume behavior of the USB controller/PHY.
FAST_WAKEUP_RESP: Enable Fast Response from UTMIP PHY for a Remote Wakeup request
26 RW 0x0 from device. This is used only for cases where wakeup response needs to be within 1ms of spec.
Used for Host mode ONLY.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1133
Tegra K1 Technical Reference Manual
USB Complex
UTMIP_SUSPL1_SET: Enable SuspendL1 for UTMIP PHY Enabling this will only cutoff clocks to
the UTMIP logic. The USB PLLs, PllU and UTMIP PLL will still be running.
25 RW 0x0
0 = DISABLE
1 = ENABLE
ULPI_PADS_CLKEN_RESET: Async reset for the synchronizers that are used in the external
and loopback ULPI 60 MHz clock.
24 RW 0x1
0 = DISABLE
1 = ENABLE
ULPI_PADS_RESET: Async reset for trimmers and line state logic that is implemented in the pad
macros.
23 RW 0x1
0 = DISABLE
1 = ENABLE
ULPIS2S_LINE_RESET: Async reset of the line simulator logic that sits between the two virtual
PHYs (active high). The ULPI PHY registers should be programmed while ULPI is in reset.
22 RW 0x1
0 = DISABLE
1 = ENABLE
ULPIS2S_SLV1_RESET: Async reset of the SLV1 ULPI logic. This corresponds to resetting the
virtual PHY that is connected to the internal ULPI controller (active high). The ULPI PHY registers
21 RW 0x1 should be programmed while ULPI is in reset.
0 = DISABLE
1 = ENABLE
ULPIS2S_SLV0_RESET: Async reset of the SLV0 ULPI logic. This corresponds to resetting the
virtual PHY that is connected to the external ULPI controller. (active high). The ULPI PHY
20 RW 0x1 registers should be programmed while ULPI is in reset.
0 = DISABLE
1 = ENABLE
UHSIC_PHY_ENB: Enable UHSIC PHY mode. Set this to 1 if using UHSIC PHY. Otherwise set
this to 0.
19 RW 0x0
0 = DISABLE
1 = ENABLE
UHSIC_RESET: Reset going to UHSIC PHY (active high). This should be set to 1 whenever
programming the UHSIC config registers. It should be cleared to 0 after the programming of
UHSIC config registers is done. UHSIC config registers should be programmed only once before
14 RW 0x1 doing any transactions on UHSIC. The UHSIC PHY registers should be programmed while
UHSIC is in reset.
0 = DISABLE
1 = ENABLE
ULPI_PHY_ENB: Enable ULPI PHY mode. Set this to 1 if using null or link ULPI PHY. Otherwise
set this to 0.
13 RW 0x0
0 = DISABLE
1 = ENABLE
UTMIP_PHY_ENB: Enable UTMIP PHY mode Set this to 1 if using UTMIP PHY. Otherwise set
this to 0.
12 RW 0x0
0 = DISABLE
1 = ENABLE
UTMIP_RESET: Reset going to UTMIP PHY (active high). This should be set to 1 whenever
programming the UTMIP config registers. It should be cleared to 0 after the programming of
UTMIP config registers is done. UTMIP config registers should be programmed only once before
11 RW 0x1 doing any transactions on UTMIP. The UTMIP PHY registers should be programmed while
UTMIP is in reset.
0 = DISABLE
1 = ENABLE
USB_PHY_CLK_VALID_INT_ENB: USB PHY clock valid interrupt enable. If this bit is enabled,
interrupt is generated whenever USB clocks are resumed from a suspend.
9 RW 0x0
0 = DISABLE
1 = ENABLE
USB_PHY_CLK_VALID_INT_STS: USB PHY clock valid interrupt status. This bit is set whenever
USB PHY clock is woken up from suspend. Software must write a 1 to clear this bit.
8 RO 0x0
0 = UNSET
1 = SET
USB_PHY_CLK_VALID: USB PHY clock valid status. This bit indicates whether the USB PHY is
generating a valid clock to the USB controller. If USB PHY clock is running, this bit is set to 1,
7 RO X else it is set to 0.
0 = UNSET
1 = SET
USB_CLKEN: USB AHB clock enable status. Indicates whether the AHB clock to the USB
controller is enabled or not. If AHB clock to USB controller is enabled, this bit is set to 1, else it is
set to 0. NOTE: even when this is set to 0, all essential blocks that are required to resume USB
6 RO X
clocks from suspend will be active and their AHB clock will not be suspended.
0 = UNSET
1 = SET
USB_SUSP_CLR: Suspend Clear Software must write a 1 to this bit to bring the PHY out of
suspend mode. This is used when the software stops the PHY clock during suspend and then
wants to initiate a resume. Software should also write 0 to clear it. NOTE: It is required that
5 RW 0x0
software generate a positive pulse on this bit to guarantee proper operation.
0 = UNSET
1 = SET
USB_WAKE_ON_RESUME_EN: Wake on resume enable. If this bit is enabled, the USB will
wake up from suspend whenever a resume event is detected on USB. This is valid for both USB
2 RW 0x0 device and USB host modes.
0 = DISABLE
1 = ENABLE
USB_WAKEUP_INT_STS: USB wakeup interrupt status. This bit is set whenever the USB wakes
up from suspend (a wakeup event is generated). Software must write a 1 to clear this bit. Note
that during the wakeup sequence, PHY clocks will be resumed from suspend. Software can
check when the PHY clocks are resumed by reading the bit USB_PHY_CLK_VALID. There is
also a separate interrupt generated when PHY clock is resumed if
0 RO 0x0
USB_PHY_CLK_VALID_INT_EN is set. During the wakeup sequence, first
USB_WAKEUP_INT_STS will be set, and it will take some time for the PHY clock to resume,
which can be detected by checking USB_PHY_CLK_VALID.
0 = UNSET
1 = SET
19.13.5.2 USB2_IF_USB_PHY_VBUS_SENSORS_0
This register controls the OTG VBUS sensors in the USB PHY. There are 4 VBUS sensors:
§ A_VBUS_VLD
§ A_SESS_VLD
§ B_SESS_VLD
§ B_SESS_END
The debounced status of each sensor can be read from the corresponding _STS bit field of the sensor in this register. The
_CHG_DET field is set to 1 whenever a change is detected in the value of the _STS bit field of the corresponding sensor. If
_INT_EN is set, then an interrupt is generated to the processor. This interrupt can be routed to CPU/AVP by appropriately
writing the USBD bits in the interrupt controller registers.
In case software wants to override the value for a sensor, it can set the corresponding _SW_EN to 1, and set the
corresponding sensor _SW_VALUE to 1 or 0 as per the requirement.
There are two debouncers for each sensor - DEBOUNCE_A and DEBOUNCE_B. The debounce values for them are
controlled by the register UTMIP_DEBOUNCE_CFG0, fields UTMIP_BIAS_DEBOUNCE_A and
UTMIP_BIAS_DEBOUNCE_B. For each sensor, we can select whether to use DEBOUNCE_A or DEBOUNCE_B by setting
the field _DEB_SEL_B to the appropriate value (SEL_A or SEL_B).
Note: Do not set either UTMIP_BIAS_DEBOUNCE_A or UTMIP_BIAS_DEBOUNCE_B to 0x0. If not using one
of the debouncers, keep it at the default value of 0xFFFF.
A_VBUS_VLD_WAKEUP_EN: A_VBUS_VLD wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on A_VBUS_VLD.
30 RW 0x0
0 = DISABLE
1 = ENABLE
A_SESS_VLD_WAKEUP_EN: A_SESS_VLD wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on A_SESS_VLD.
22 RW 0x0
0 = DISABLE
1 = ENABLE
B_SESS_VLD_WAKEUP_EN: B_SESS_VLD wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on B_SESS_VLD.
14 RW 0x0
0 = DISABLE
1 = ENABLE
B_SESS_END_WAKEUP_EN: B_SESS_END wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on B_SESS_END.
6 RW 0x0
0 = DISABLE
1 = ENABLE
19.13.5.3 USB2_IF_USB_PHY_VBUS_WAKEUP_ID_0
This register controls the battery charger (VDCD_DET, VDAT_DET), VBUS_WAKEUP and ID sensors. The following sensors
are in this register:
§ VBUS_WAKEUP
§ ID
§ VDAT_DET
§ VDCD_DET
The debounced status of each sensor can be read from the corresponding _STS bit field of the sensor in this register. The
_CHG_DET field is set to 1 whenever a change is detected in the value of the _STS bit field of the corresponding sensor. If
_INT_EN is set, then an interrupt is generated to the processor. This interrupt can be routed to CPU/AVP by appropriately
writing the USBD bits in the interrupt controller registers.
In case software wants to override the value for a sensor, it can set the corresponding _SW_EN to 1, and set the
corresponding sensor _SW_VALUE to 1 or 0 as per the requirement.
There are two debouncers for each sensor - DEBOUNCE_A and DEBOUNCE_B. The debounce values for them are
controlled by the register UTMIP_DEBOUNCE_CFG0, fields UTMIP_BIAS_DEBOUNCE_A and
UTMIP_BIAS_DEBOUNCE_B. For each sensor, we can select whether to use DEBOUNCE_A or DEBOUNCE_B by setting
the field _DEB_SEL_B to the appropriate value (SEL_A or SEL_B).
Note: Do not set either UTMIP_BIAS_DEBOUNCE_A or UTMIP_BIAS_DEBOUNCE_B to 0x0. If not using one
of the debouncers, keep it at the default value of 0xFFFF.
There are debouncers for VDAT_DET and VDCD_DET. These use separate debouncers -CHRG_DEBOUNCE_PERIOD_A
and CHRG_DEBOUNCE_PERIOD_B. The debounce values for them are controlled by the register
UTMIP_CHRG_DEB_CFG0, fields UTMIP_CHRG_DEBOUNCE_PERIOD_A and UTMIP_CHRG_DEBOUNCE_PERIOD_B.
For each sensor, we can select whether to use CHRG_DEBOUNCE_PERIOD_A or CHRG_DEBOUNCE_PERIOD_B by
setting the field _DEB_SEL_B to the appropriate value (SEL_A or SEL_B).
DIV_DET_EN: Battery charger divider detection enable. This goes to the USB2OTG pad.
31 RW 0x0 0 = DISABLE
1 = ENABLE
VDCD_DET_DEB_SEL_B: VCDT_DET debounce A/B select. Selects the debounce value from
UTMIP_CHRG_DEBOUNCE_PERIOD_A or UTMIP_CHRG_DEBOUNCE_PERIOD_B from the
29 RW 0x0 register UTMIP_CHRG_DEB_CFG0.
0 = SEL_A
1 = SEL_B
VDCD_DET_SW_VALUE: VDCD_DET software value. Software should write the appropriate value
(1/0) to set/unset the VDCD_DET status. This is only valid when VDCD_DET_SW_EN is set.
28 RW 0x0
0 = UNSET
1 = SET
23 RO X VOP_DIV2P7_DET:This read-only status bit from battery charging divider circuit of USB2OTG pad
0 = UNSET
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1139
Tegra K1 Technical Reference Manual
USB Complex
VOP_DIV2P0_DET:This read-only status bit from battery charging divider circuit of USB2OTG pad
22 RO X 0 = UNSET
1 = SET
VDAT_DET_DEB_SEL_B: VDAT_DET debounce A/B select. Selects between the two debounce
values UTMIP_CHRG_DEBOUNCE_PERIOD_A or UTMIP_CHRG_DEBOUNCE_PERIOD_B from
21 RW 0x0 the register UTMIP_DEBOUNCE_CFG0.
0 = SEL_A
1 = SEL_B
VDAT_DET_SW_VALUE: VDAT_DET software value. Software should write the appropriate value
(1/0) to set/unset the VDAT_DET status. This is only valid when VDAT_DET_SW_EN is set.
20 RW 0x0
0 = UNSET
1 = SET
VDAT_DET_STS: VDAT_DET status. This is set to 1 whenever the VDAT_DET sensor output is 1.
18 RO X 0 = UNSET
1 = SET
VON_DIV2P7_DET:This read-only status bit from battery charging divider circuit of USB2OTG pad
15 RO X 0 = UNSET
1 = SET
VON_DIV2P0_DET:This read-only status bit from battery charging divider circuit of USB2OTG pad
14 RO X 0 = UNSET
1 = SET
VBUS_WAKEUP_CHG_DET: VBUS wakeup change detect. This field is set by hardware whenever
a change is detected in the value of VBUS_WAKEUP. software writes a 1 to clear it
9 RO 0x0
0 = UNSET
1 = SET
ID_DEB_SEL_B: ID debounce A/B select. Selects between the two debounce values
UTMIP_BIAS_DEBOUNCE_A or UTMIP_BIAS_DEBOUNCE_B from the register
5 RW 0x0 UTMIP_DEBOUNCE_CFG0.
0 = SEL_A
1 = SEL_B
ID_SW_VALUE: ID software value. Software should write the appropriate value (1/0) to set/unset
the ID status. This is only valid when ID_SW_EN is set.
4 RW 0x0
0 = UNSET
1 = SET
ID_SW_EN: ID software enable. Enable Software Controlled ID. Software sets this bit to drive the
value in ID_SW_VALUE to the USB controller
3 RW 0x0
0 = DISABLE
1 = ENABLE
ID_CHG_DET: ID change detect. This field is set by hardware whenever a change is detected in the
value of ID. software writes a 1 to clear it
1 RO 0x0
0 = UNSET
1 = SET
19.13.5.4 USB2_IF_USB_PHY_ALT_VBUS_STS_0
19.13.5.5 USB2_IF_USB_ULPIS2S_CTRL_0
This register is used to set up parameters for ULPI null PHY mode.
Note: Current ULPI configuration registers use settings that support NV software drivers and should NOT be
modified. If designing custom drivers, consult your NV representative prior to modifying these registers
ULPIS2S_CLAMP_LINE_DRIVE: The line drive value that should be sent into the line simulator during
23:20 0x0
transmit clamping. The suggested value is 0x1: tri-state.
ULPIS2S_SLV1_CLAMP_XMIT: When set to 1, the outputs of the SLV1 transmit state machine are
17 0x0 clamped to 0. This bit should be set before the SLV0 async reset is asserted to prevent meta-stability
issues in the line simulator.
ULPIS2S_SLV0_CLAMP_XMIT: When set to 1, the outputs of the SLV0 transmit state machine are
16 0x0 clamped to 0. This bit should be set before the SLV0 async reset is asserted to prevent meta-stability
issues in the line simulator.
ULPIS2S_DISABLE_STP_PU: When set to 1 and in ULPIS2S mode, the pullup on the STP pin will
15 0x0 NOT be active, even if the remote LINK asks to do so. In this case, an external pullup resistor would be
required to ensure valid levels when the remote link is not powered.
ULPIS2S_DISCON_DONT_CHECK_SE0: When enabled, the disconnect detection logic will only check
that that the other side is 'driving' tri-state. It will not check whether or not the local side is driving SE0.
13 0x0
0 = DISABLE
1 = ENABLE
ULPIS2S_PLLU_MASTER_BLASTER60: When enabled, the PLLU 60MHz clock will be forced on.
3 0x0 0 = DISABLE
1 = ENABLE
2 0x0 ULPIS2S_SUPPORT_DISCONNECT: When disabled, the PHY will never detect a Disconnect.
ULPIS2S_SLV1_FORCE_DEVICE: When disabled, the slave port that is connected to the pins can be
programmed to be host or a device depending on the value of the DpPulldown and DmPulldown bits in
the OTG_CTRL ULPI register. When enabled, the values of those bits in the OTG_CTRL register is
1 0x0
ignored and the port will always behave like a device.
0 = DISABLE
1 = ENABLE
ULPIS2S_ENA: When enabled, the ULPI link interface coming out of the USB2 controller enters a NULL
PHY with two slaves. As a result the external pins will have a slave ULPI interface. When disabled, the
0 0x0 ULPI link interface coming out of the USB2 controller go straight to the pins.
0 = DISABLE
1 = ENABLE
19.13.5.6 USB2_IF_USB_ULPIS2S_SLV1_ID_0
This register controls the product and vendor ID fields for ULPI null PHY presented to external ULPI master.
Note: Current ULPI configuration registers use settings that support NV software drivers and should NOT be
modified. If designing custom drivers, consult your NV representative prior to modifying these registers
31:16 0x0 ULPIS2S_SLV1_VENDOR_ID: PHY vendor_id as seen by the external ULPI master
15:0 0x0 ULPIS2S_SLV1_PRODUCT_ID: PHY product_id as seen by the external ULPI master
19.13.5.7 USB2_IF_USB_INTER_PKT_DELAY_CTRL_0
IP_DELAY_TX2TX_HS: HS Tx to Tx inter-packet delay. This is valid only for UHSIC PHY. Software
6:0 0x12
should not change this.
19.13.5.8 USB2_IF_USB_RSM_DLY_0
TIME_TO_RESUME: Send the resume back in number of 60 MHz cycles. Default gives 900 µs delay.
15:0 0x6978
Only applicable in host mode.
19.13.5.9 USB2_IF_SPARE_0
19.13.5.10 USB2_IF_ULPI_DIR_OVERRIDE_0
ULPI Override
Offset: 0x49c | Read/Write: R/W | Reset: 0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1
ULPI_DIR_OVERRIDE: By default, this bit is set. This will override ulpi_dir; i.e., when this bit is set,
0 0x1
ulpi_dir is always asserted. Software needs to explicitly clear this bit, once slv1 Lp0 context is restored.
19.13.5.11 USB2_IF_USB2_NEW_CONTROL_0
MEM_ALIGNMENT_MUX_EN: Mux to select between Tegra 3 style (0) and Tegra K1 style (1) DMA
request generation mechanism
1 0x0
0 = DISABLE
1 = ENABLE
Note: This register has been moved to the Clock and Reset section of this document. PROGRAMMING THIS
REGISTER HERE WILL HAVE NO EFFECT!
19.13.6.2 USB2_UTMIP_PLL_CFG1_0
Note: This register has been moved to the Clock and Reset section of this document. PROGRAMMING THIS
REGISTER HERE WILL HAVE NO EFFECT!
This register was used to configure the PLL inside the UTMIP block prior to Tegra K1 devices. This register has been
defeatured from UTMIP space and moved to CAR space. Refer to the Clock and Reset Controller section for details on this
register.
19.13.6.3 USB2_UTMIP_XCVR_CFG0_0
21 0x1 UTMIP_XCVR_LSBIAS_SEL: Low speed bias selection method for USB transceiver pad
12 0x0 UTMIP_XCVR_HSLOOPBACK: Internal loopback inside XCVR cell. Used for IOBIST.
3:0 0x0 UTMIP_XCVR_SETUP: SETUP[3:0] input of XCVR cell. HS driver output control. 4 LSBs.
19.13.6.4 USB2_UTMIP_BIAS_CFG0_0
29 0x0 UTMIP_IDDIG_C_SEL:
0: IdDig_c = IdDig_c.
27 0x0 UTMIP_IDDIG_B_SEL:
0: IdDig_b = IdDig_b.
1: IdDig_b = IDDIG_B_VAL.
25 0x0 UTMIP_IDDIG_A_SEL:
0: IdDig_a = IdDig_a.
1: IdDig_a = IDDIG_A_VAL.
22 0x1 UTMIP_IDPD_SEL: 0: Reserved. Refer to the PMC registers for this feature.
UTMIP_IDDIG_SEL:
20 0x0 0: IdDig = IdDig.
1: IdDig = IDDIG_VAL.
UTMIP_GPI_SEL:
18 0x0 0: StaticGpi = IdDig.
1: StaticGpi = GPI_VAL.
19.13.6.5 USB2_UTMIP_HSRX_CFG0_0
29 0x0 UTMIP_ALLOW_CONSEC_UPDN: Allow consecutive ups and downs on the bits, debug only, set to 0.
27:24 0x1 UTMIP_PCOUNT_UPDN_DIV: The number of (edges-1) needed to move the sampling point
23:21 0x3 UTMIP_SQUELCH_EOP_DLY: Limit the delay of the squelch at EOP time
3:2 0x0 UTMIP_PHASE_ADJUST: Based on incoming edges and current sampling position, adjust phase
19.13.6.6 USB2_UTMIP_HSRX_CFG1_0
5:1 0x9 UTMIP_HS_SYNC_START_DLY: How long to wait before start of sync launches RxActive
19.13.6.7 USB2_UTMIP_FSLSRX_CFG0_0
29 0x1 UTMIP_FSLS_SERIAL_SE0_RCV
14 0x0 UTMIP_FSLS_ACTIVE_ON_FULL_SYNC: Require a full sync pattern to declare the data received
13:8 0x4 UTMIP_FSLS_IDLE_WAIT_MAX: 4 bits of SEO should exceed the time limit
7 0x0 UTMIP_FSLS_IDLE_WAIT_LIMIT: Enable the reset of the state machine on extended SE0
6:1 0x14 UTMIP_FSLS_IDLE_COUNT_MAX: 20 bits of idle should end the packet if FsLsIdleCountLimitCfg=1.
19.13.6.8 USB2_UTMIP_FSLSRX_CFG1_0
26 0x0 UTMIP_EARLY_LINE_STATE_FILTER: Assumes line state filtering table is inclusive, not exclusive
16:11 0xe UTMIP_LS_EOP_START_COUNT: Number of SEO clock cycles to block bit extraction
10:5 0x20 UTMIP_LS_SE0_COUNT: Only for this number of 60MHz of SEO and Idle to end packet
19.13.6.9 USB2_UTMIP_TX_CFG0_0
15 0x0 UTMIP_HS_READY_WAIT_FOR_VALID
19.13.6.10 USB2_UTMIP_MISC_CFG0_0
25 0x1 UTMIP_KEEP_XCVR_PD_ON_SOFT_DISCON
24 0x1 UTMIP_ALLOW_LS_ON_SOFT_DISCON
23 0x1 UTMIP_FORCE_FS_DISABLE_ON_DEV_CHIRP
UTMIP_LS_TO_FS_SKIP_4MS: Do not block changes for 4 ms when going from LS to FS (should not
21 0x1
happen)
7:5 0x3 UTMIP_STABLE_COUNT: Number of cycles of crystal clock of signal not changing to consider stable.
4 0x1 UTMIP_STABLE_ALL: Determines if all signal need to be stable to not change a config.
19.13.6.11 USB2_UTMIP_MISC_CFG1_0
30 0x1 UTMIP_PHY_XTAL_CLOCKEN: Selects whether to enable the crystal clock in the module.
UTMIP_LINESTATE_XCVRSEL3:
27 0x0 0: Use FS filtering on line state when XcvrSel=3
1: Use LS filtering on line state when XcvrSel=3
24 0x0 UTMIP_FSLS_TDM
23 0x0 UTMIP_FORCE_IOBIST_CLK_ON
22:18 0x6 UTMIP_PLL_ACTIVE_DLY_COUNT: Reserved. Config moved to the Clock and Reset space.
17:6 0x600 UTMIP_PLLU_STABLE_COUNT: Reserved. Moved to the Clock and Reset space.
5 0x1 UTMIP_RX_ERROR_CNT_CLR
4 0x0 UTMIP_RX_ERROR_CNT_EN
3 0x0 UTMIP_FLIP_FSLS_POLARITY
2 0x1 UTMIP_SUSPEND_TERMSEL
UTMIP_XCVRSEL3:
Bit 0:
0: 0xa5 -> treat as KeepAlive
1:0 0x0 1: treat as regular packet
Bit 1:
0: Turn on FS EOP detection
1: Turn off FS EOP detection
19.13.6.12 USB2_UTMIP_DEBOUNCE_CFG0_0
ms = *1000 / (1/19.2MHz) / 4
19.13.6.13 USB2_UTMIP_BAT_CHRG_CFG0_0
5 0x0 UTMIP_OP_I_SRC_EN
4 0x0 UTMIP_ON_SRC_EN
3 0x0 UTMIP_OP_SRC_EN
2 0x0 UTMIP_ON_SINK_EN
1 0x0 UTMIP_OP_SINK_EN
19.13.6.14 USB2_UTMIP_SPARE_CFG0_0
19.13.6.15 USB2_UTMIP_XCVR_CFG1_0
25:24 0x0 UTMIP_XCVR_HS_IREF_CAP: High-speed Iref cap control for bias current stability.
17 0x0 UTMIP_RCTRL_SW_SET: Use a software override on RCTRL instead of automatic bias control.
11 0x0 UTMIP_TCTRL_SW_SET: Use a software override on TCTRL instead of automatic bias control
19.13.6.16 USB2_UTMIP_BIAS_CFG1_0
UTMIP_BIAS_PDTRK_COUNT: Control the BIAS cell power down lag. The lag should be 20 µs. For a
7:3 0x5
crystal clock of 13 MHz, it should be set to 5.
2 0x1 UTMIP_VBUS_WAKEUP_POWERDOWN: Reserved. See the PMC registers for this functionality.
19.13.6.17 USB2_UTMIP_BIAS_STS0_0
19.13.6.18 USB2_UTMIP_CHRG_DEB_CFG0_0
ms = *1000 / (1/19.2MHz) / 4
19.13.6.19 USB2_UTMIP_MISC_STS0_0
19.13.6.20 USB2_UTMIP_PMC_WAKEUP0_0
19.13.7.1 USB2_UHSIC_MISC_STS0_0
19.13.7.2 USB2_UHSIC_PMC_WAKEUP0_0
19.13.7.3 USB2_QH_USB2D_QH_EP_n_OUT_0
USB2D_QH: Queue Head for OUT endpoint n. This is used to store a local Queue Head data structure
31:0 0x0
for either device mode or host mode. In device mode, it holds the Queue Head for OUT endpoint n.
19.13.7.4 USB2_QH_USB2D_QH_EP_n_IN_0
There are 16 USB2D Queue Head for IN Endpoint registers, where n = 0 through 15.
USB2D_QH: Queue Head for IN endpoint n. This is used to store a local Queue Head data structure for
31:0 0x0
either device mode or host mode. In device mode, it holds the Queue Head for IN endpoint n.
19.13.8.1 USB2_CONTROLLER_2_USB2D_ID_0
24:21 X REVISION: Revision number of the USB controller. This is set to 0x0.
15:8 X NID: One’s complement version of ID. This field is set to 0xF9.
19.13.8.2 USB2_CONTROLLER_2_USB2D_HW_HOST_0
3:1 X NPORT: VUSB_HS_NUM_PORT-1: This host controller has only 1 port. So this field will always be 0.
19.13.8.3 USB2_CONTROLLER_2_USB2D_HW_DEVICE_0
DEVEP: VUSB_HS_DV_EP: Number of endpoints supported by this device controller. Set to 16. This
5:1 X
includes control endpoint 0.
19.13.8.4 USB2_CONTROLLER_2_USB2D_HW_TXBUF_0
TXCHANADD: VUSB_HS_TX_CHAN_ADD: Total number of address bits for the transmit buffer of each
23:16 X
transmit endpoint. Set to 7. Each transmit buffer is 128 words deep.
TXADD: VUSB_HS_TX_ADD: Total number of address bits for the transmit buffer. Set to 11. The total
15:8 X
depth of the transmit buffer is 2048 words.
TCBURST: VUSB_HS_TX_BURST: Maximum burst size supported by the transmit endpoints for data
7:0 X
transfers. Set to 8.
19.13.8.5 USB2_CONTROLLER_2_USB2D_HW_RXBUF_0
RXADD: VUSB_HS_RX_ADD: Total number of address bits for the receive buffer. Set to 7. The total
15:8 X
depth of the receive buffer is 128 words.
RXBURST: VUSB_HS_RX_BURST: Maximum burst size supported by the receive endpoints for data
7:0 X
transfers. Set to 8.
19.13.8.6 USB2_CONTROLLER_2_USB2D_GPTIMER0LD_0
The host/device controller drivers can measure time-related activities using these timer registers. These registers are not part
of the standard EHCI controller.
GPTIMER0LD: This field has the value to be loaded into the GPTCNT countdown timer on a reset action.
23:0 0x0
The value in this register represents the time in microseconds minus 1 for the timer duration .
19.13.8.7 USB2_CONTROLLER_2_USB2D_GPTIMER0CTRL_0
Offset: 0x84 | Read/Write: R/W | Reset: 0x00XXXXXX (0b00xxxxx0xxxxxxxxxxxxxxxxxxxxxxxx)
GTPRUN: This bit enables the general-purpose timer to run. Setting or clearing this bit will not
31 RW 0x0
have an effect on the GPTCNT counter value.
30 WO 0x0 GPTRST: Writing a one to this bit reloads the GPTCNT with the value in GPTLD.
GPTMODE: This bit selects between a single timer countdown and a looped countdown. In one-
shot mode, the timer counts down to zero, generates an interrupt, and stops until the counter is
24 RW 0x0
reset by software. In repeat mode, the timer counts down to zero, generates an interrupt, and
automatically reloads the counter to begin again.
23:0 RO X GPTCNT: This field has the value of the running timer.
19.13.8.8 USB2_CONTROLLER_2_USB2D_GPTIMER1LD_0
Offset: 0x88 | Read/Write: R/W | Reset: 0x00000000 (0b000000000000000000000000)
GPTIMER1LD: This field has the value to be loaded into the GPTCNT countdown timer on a reset action.
23:0 0x0
The value in this register represents the time in microseconds minus 1 for the timer duration .
19.13.8.9 USB2_CONTROLLER_2_USB2D_GPTIMER1CTRL_0
Offset: 0x8c | Read/Write: R/W | Reset: 0x00XXXXXX (0b00xxxxx0xxxxxxxxxxxxxxxxxxxxxxxx)
GTPRUN: This bit enables the general-purpose timer to run. Setting or clearing this bit will not
31 RW 0x0
have an effect on the GPTCNT counter value.
30 WO 0x0 GPTRST: Writing a one to this bit reloads the GPTCNT with the value in GPTLD.
GPTMODE: This bit selects between a single timer countdown and a looped countdown. In one-
shot mode, the timer counts down to zero, generates an interrupt, and stops until the counter is
24 RW 0x0
reset by software. In repeat mode, the timer counts down to zero, generates an interrupt, and
automatically reloads the counter to begin again.
23:0 RO X GPTCNT: This field has the value of the running timer.
19.13.8.10 USB2_CONTROLLER_2_USB2D_CAPLENGTH_0
CAPLENGTH: Indicates which offset to add to the register base address at the beginning of the
7:0 X
Operational Register. Set to 0x30.
19.13.8.11 USB2_CONTROLLER_2_USB2D_HCIVERSON_0
HCIVERSION: Contains a BCD encoding of the EHCI revision number supported by this host controller.
15:0 X The most significant byte of this register represents a major revision and the least significant byte is the
minor revision. This host controller supports EHCI revision 1.00.
19.13.8.12 USB2_CONTROLLER_2_USB2D_HCSPARAMS_0
N_TT: Number of Transaction Translators: Indicates the number of embedded transaction translators
27:24 X associated with the USB2.0 host controller. This field is always set to 1 indicating only 1 embedded TT
is implemented in this implementation. This is a non-EHCI field to support embedded TT.
23:20 X N_PTT: Number of Ports per Transaction Translator: Indicates the number of ports assigned to each
N_CC: Number of Companion Controller: Indicates the number of companion controllers. This field is
15:12 X
set to 0.
N_PCC: Number of Ports per Companion Controller: Indicates the number of ports supported per
11:8 X
internal companion controller. This field is set to 0.
PPC: Port Power Control: Indicates whether the host controller implementation includes port power
4 X control. 1 = Ports have port power switches 0= Ports do not have port power switches. This field affects
the functionality of the port Power field in each port status and control register. This field is set to 1.
N_PORTS: Number of downstream ports. This field specifies the number of physical downstream ports
3:0 X
implemented on this host controller. This field is fixed to 1, since this host controller only supports 1 port.
19.13.8.13 USB2_CONTROLLER_2_USB2D_HCCPARAMS_0
PPC: Per-Port Change Event Capability - RO. Default = 1b. This field indicates the support for per-port
18 X change events. This field is related to the USBCMD PPE field, USBSTS PPCI field, and USBINTR PPCE
field.
LEN: Link Power Management Capability - RO. Default = 1b. This field indicates the support for LPM L1
17 X state. This field is related to the USBCMD HIRD field, POSTSCx SSTS and DA fields, and HOSTPCx
LEN, BA, and EPLPM fields.
EECP: EHCI Extended Capabilities Pointer: Indicates a capabilities list exists. A value of 00h indicates no
15:8 X
extended capabilities are implemented. For this implementation this field is always "0".
IST: Isochronous Scheduling Threshold. This field indicates, relative to the current position of the
executing host controller, where software can reliably update the isochronous schedule. When bit [7] is
zero, the value of the least significant 3 bits indicates the number of micro-frames a host controller can
7:4 X
hold a set of isochronous data structures (one or more) before flushing the state. When bit [7] is a one,
then host software assumes the host controller may cache an isochronous data structure for an entire
frame. This field will always be "0".
ASP: Asynchronous Schedule Park Capability. 1 = (Default) the host controller supports the park feature
for high-speed queue heads in the Asynchronous Schedule. The feature can be disabled or enabled and
2 X
set to a specific level by using the Asynchronous Schedule Park Mode Enable and Asynchronous
Schedule Park Mode Count fields in the USBCMD register. This field is always 1.
19.13.8.14 USB2_CONTROLLER_2_USB2D_DCIVERSION_0
DCIVERSION: The device controller interface conforms to the two-byte BCD encoding of the interface
15:0 X
version number contained in this register.
19.13.8.15 USB2_CONTROLLER_2_USB2D_DCCPARAMS_0
LEN: Link Power Management Capability - RO. Default = 1b. This field indicates the support for LPM L1
5 X
state. This field is related to the DEVLCx ASUS, STL, BA, and NYT fields.
4:0 X DEN: Device Endpoint Number: Number of endpoints built into the device controller. This is set to 16.
19.13.8.16 USB2_CONTROLLER_2_USB2D_EXTSTS_0
TI1: General Purpose Timer Interrupt 1 - RWC. Default = 0b. This bit is set when the counter in the
4 RW 0x0
GPTIMER1CTRL register transitions to zero. Writing a one to this bit will clear it.
TI0: General Purpose Timer Interrupt 0 - RWC. Default = 0b. This bit is set when the counter in the
3 RW 0x0
GPTIMER1CTRL register transitions to zero. Writing a one to this bit will clear it.
UPA: USB Host Periodic Interrupt (USBHSTPERINT) R/WC. This bit is set by the Host Controller
when the cause of an interrupt is a completion of a USB transaction where the Transfer Descriptor
(TD) has an interrupt on complete (IOC) bit set and the TD was from the periodic schedule. This bit
is also set by the Host Controller when a short packet is detected AND the packet is on the periodic
2 RW 0x0
schedule. A short packet is when the actual number of bytes received was less than the expected
number of bytes. This bit is not used by the device controller and will always be zero.
0 = DISABLE
1 = ENABLE
UAI: USB Host Asynchronous Interrupt (USBHSTASYNCINT) R/WC. This bit is set by the Host
Controller when the cause of an interrupt is a completion of a USB transaction where the Transfer
Descriptor (TD) has an interrupt on complete (IOC) bit set AND the TD was from the asynchronous
schedule. This bit is also set by the Host when a short packet is detected AND the packet is on the
1 RW 0x0
asynchronous schedule. A short packet is when the actual number of bytes received was less than
the expected number of bytes. This bit is not used by the device controller and will always be zero.
0 = DISABLE
1 = ENABLE
NAKI: NAK Interrupt Bit Read Only. This bit is read only. It is set by hardware when for a particular
endpoint both the TX/RX Endpoint NAK bit and the corresponding TX/RX Endpoint NAK Enable bit
are set. This bit is automatically cleared by hardware when the all the enabled TX/RX Endpoint NAK
0 RO X
bits are cleared.
0 = DISABLE
1 = ENABLE
19.13.8.17 USB2_CONTROLLER_2_USB2D_USBEXTINTR_0
TIE1: General Purpose Timer Interrupt Enable 1 - RWC. Default = 0b. When this bit is a one, and the TI1
4 0x0 bit in the EXTSTS register is a one, the controller will issue an interrupt. The interrupt is acknowledged by
software clearing the TI1 bit.
TIE0: General Purpose Timer Interrupt Enable 0 - RWC. Default = 0b. When this bit is a one, and the TI1
3 0x0 bit in the EXTSTS register is a one, the controller will issue an interrupt. The interrupt is acknowledged by
software clearing the TI1 bit.
UPIE: UPIE Interrupt Enable. 1 = USB controller issues an interrupt if UPA bit in USBSTS register
transitions.
2 0x0
0 = DISABLE
1 = ENABLE
UAIE: UAIE Interrupt Enable. 1 = USB controller issues an interrupt if UAI bit in USBSTS register
transitions.
1 0x0
0 = DISABLE
1 = ENABLE
NAKE: NAK Interrupt Enable. 1 = USB controller issues an interrupt if NAKI bit in USBSTS register
transitions.
0 0x0
0 = DISABLE
1 = ENABLE
19.13.8.18 USB2_CONTROLLER_2_USB2D_USBCMD_0
HIRD: Host Initiated Resume Duration RW. Default = 0000b. This has the same behavior as bits
7:4 of the BA field of the HOSTPCx register. When writing to this field all BA[7:4] fields of all
HOSTPCx registers will be set to this value. This field is used by system software to specify the
minimum amount of time the host controller will drive the K-state during a host-initiated resume
from an LPM state (e.g., L1), and is conveyed to each LPM-enabled device (via the HIRD bits
within an LPM Tokens bmAttributes field) upon entry into a low-power state. Note the host
27:24 RW 0x0
controller is required to drive resume signaling for at least the amount of time specified in the
HIRD value conveyed to the device during any proceeding host-initiated resume. Also note that
the host controller is not required to observe this requirement during device-initiated resumes.
Encoding for this field is identical to the definition for the similarly named HIRD field within an
LPM Token, specifically: a value 0000b equals 50 µs and each additional increment adds 75 µs.
For example, the value 0001b equals 125 µs, and a value 1111b equals 1,175 µs (~1.2ms).
ITC: Interrupt Threshold Control .Read/Write. Default 08h. The system software uses this field to
set the maximum rate at which the host/device controller will issue interrupts. ITC contains the
maximum interrupt interval measured in micro-frames. Valid values are shown below.
Value Maximum Interrupt Interval
00h = Immediate (no threshold)
01h = 1 micro-frame
02h = 2 micro-frames
04h = 4 micro-frames
08h = 8 micro-frames
23:16 RW 0x8 10h = 16 micro-frames
20h = 32 micro-frames
40h = 64 micro-frames
0 = IMMEDIATE
2 = ONE_MF
4 = TWO_MF
8 = EIGHT_MF
16 = SIXTEEN_MF
32 = THIRTY_TWO_MF
64 = SIXTY_FOUR_MF
ATDTW: Add DTD Tripwire. This bit is used as a semaphore when a dTD is added to an active
(primed) endpoint. This bit is set and cleared by software and will be cleared by hardware when a
14 RW 0x0 hazard exists such that adding a dTD to a primed endpoint may go unnoticed.
0 = CLEAR
1 = SET
SUTW: Setup Tripwire. This bit is used as a semaphore when the 8 bytes of setup data read
extracted by the firmware. If the setup lockout mode is off, then there exists a hazard when new
setup data arrives and firmware is copying setup data from the QH for a previous setup packet.
13 RW 0x0
This bit is set and cleared by software and will be cleared by hardware when a hazard exists.
0 = CLEAR
1 = SET
ASPE: Asynchronous Schedule Park mode Enable. Software uses this bit to enable or disable
Park mode. When this bit is one, Park mode is enabled. When this bit is a zero, Park mode is
11 RW 0x1 disabled. This field is set to "1" in this implementation.
0 = DISABLE
1 = ENABLE
LR: Light Host/Device Controller Reset (OPTIONAL). Not Implemented. This field will always be
7 RO X
"0".
IAA: Interrupt on Async Advance Doorbell. When the host controller has evicted all appropriate
cached schedule states, it sets the Interrupt on Async Advance status bit in the USBSTS register.
If the Interrupt on Sync Advance Enable bit in the USBINTR register is one, then the host
controller will assert an interrupt at the next interrupt threshold. The host controller sets this bit to
zero after it has set the Interrupt on Sync Advance status bit in the USBSTS register to one.
6 RW 0x0 Software should not write a one to this bit when the asynchronous schedule is inactive. Doing so
will yield undefined results.
This bit is only used in Host mode. Writing a one to this bit when device mode is selected will
have undefined results.
0 = CLEAR
1 = SET
ASE: Asynchronous Schedule Enable. This bit controls whether the host controller skips
processing the Asynchronous Schedule.
0 = Do not process the Asynchronous Schedule.
5 RW 0x0 1 = Use the ASYNCLISTADDR register to access the Asynchronous Schedule.
Only the host controller uses this bit.
0 = DISABLE
1 = ENABLE
PSE: Periodic Schedule Enable. This bit controls whether the host controller skips processing the
Periodic Schedule.
0 = Do not process the Periodic Schedule
4 RW 0x0 1 = Use the PERIODICLISTBASE register to access the Periodic Schedule. Only the host
controller uses this bit.
0 = DISABLE
1 = ENABLE
FS1_FS0: Frame List Size 000 = Default. This field is Read/Write only if Programmable Frame
List Flag in the HCCPARAMS registers is set to one. Hence this field is Read/Write for this
implementation. This field specifies the size of the frame list that controls which bits in the Frame
Index Register should be used for the Frame List Current index.
3:2 RW 0x0 Note that this field is made up from USBCMD bits 15, 3, and 2.
000 = 1024 elements (4096 bytes) Default value
001 = 512 elements (2048 bytes)
010 = 256 elements (1024 bytes)
011 = 128 elements (512 bytes)
RST: Controller Reset. Software uses this bit to reset the controller. This bit is set to zero by the
Host/Device Controller when the reset process is complete. Software cannot terminate the reset
process early by writing a zero to this register. Host Controller: When software writes a one to this
bit, the Host Controller resets its internal pipelines, timers, counters, state machines etc. to their
initial value. Any transaction currently in progress on USB is immediately terminated. A USB reset
is not driven on downstream ports. Software should not set this bit to a one when the HCHalted
1 RW 0x0 bit in the USBSTS register is a zero. Attempting to reset an actively running host controller results
in undefined behavior. Device Controller: When software writes a one to this bit, the Device
Controller resets its internal pipelines, timers, counters, state machines, etc. to their initial value.
Any transaction currently in progress on USB is immediately terminated. Writing a one to this bit
in device mode is not recommended.
0 = CLEAR
1 = SET
RS: Run/Stop: Host Controller: When set to a 1, the Host Controller proceeds with the execution
of the schedule. The Host Controller continues execution as long as this bit is set to a one. When
this bit is set to 0, the Host Controller completes the current transaction on the USB and then
halts. The HCHalted bit in the status register indicates when the Host Controller has finished the
transaction and has entered the stopped state. Software should not write a one to this field unless
the host controller is in the Halted state (i.e., HCHalted in the USBSTS register is a one). Device
0 RW 0x0 Controller: Writing a one to this bit will cause the device controller to enable a pull-up on D+ and
initiate an attach event. This control bit is not directly connected to the pull-up enable, as the pull-
up will become disabled upon transitioning into high-speed mode. Software should use this bit to
prevent an attach event before the device controller has been properly initialized. Writing a 0 to
this will cause a detach event.
0 = STOP
1 = RUN
19.13.8.19 USB2_CONTROLLER_2_USB2D_USBSTS_0
PPCI: Port-n Change Detect - RW. Default = 0000h. The definition for each bit is identical to the
Port Change Detect field (bit 2 of this register) except these bits are specific to a given port,
31:16 RW 0x0 where bit 16 = Port 1, 17 = Port 2, etc. For example, if bit 17 is set to a one then a port change
event was detected on Port 2. The N_PORTS field in HCSPARAMS specifies how many ports
are exposed by the host controller and thus how many bits in this field are valid.
AS: Asynchronous Schedule Status. This bit reports the current real status of the Asynchronous
Schedule. When set to zero the asynchronous schedule status is disabled and if set to one the
status is enabled. The Host Controller is not required to immediately disable or enable the
Asynchronous Schedule when software transitions the Asynchronous Schedule Enable bit in the
USBCMD register.
15 RW 0x0 If AS = ASE:
1= Enable Asynchronous Schedule
0= Disable Asynchronous Schedule
Only used by the host controller.
0 = DISABLE
1 = ENABLE
PS: Periodic Schedule Status. This bit reports the current real status of the Periodic Schedule.
When set to zero the periodic schedule is disabled, and if set to one the status is enabled. The
Host Controller is not required to immediately disable or enable the Periodic Schedule when
14 RW 0x0 software transitions the Periodic Schedule Enable bit in the USBCMD register.
If PS = PSE:
1 = Periodic Schedule is enabled
RCL: Reclamation. This is a read-only status bit used to detect an empty asynchronous schedule.
Only used by the host controller.
13 RO X
0 = DISABLE
1 = ENABLE
HCH: HCHalted. 1 = Default. This bit is a zero whenever the Run/Stop bit is a one. The Host
Controller sets this bit to one after it has stopped executing because of the Run/Stop bit being set
to 0, either by software or by the Host Controller hardware (e.g., internal error). Only used by the
12 RW 0x1
host controller.
0 = UNHALTED
1 = HALTED
11 RW 0x0 UALT_INT: ULPI alt_int Interrupt. 0 = Default. This interrupt bit is set when an RXCMD is
received through the ULPI interface with bit 7 set (alt_int). The alt_int itself is set when an
unmasked event occurs on any bit in the Carkit Interrupt Latch Register, in the ULPI PHY. The
software should read the Carkit Interrupt Latch Register (Read to Clear) through the ULPI
Viewport to check the source of the interrupt. Only present in designs where configuration
constant VUSB_HS_PHY_ULPI = 1.
0 = NOT_ULPI_ALT_INT
1 = ULPI_ALT_INT
ULPI_INT: ULPI Interrupt. This bit is set whenever an interrupt is received from ULPI PHY.
Software writes 1 to clear it.
10 RW 0x0
0 = NOT_ULPI_INT
1 = ULPI_INT
SLI: DCSuspend. When a device controller enters a suspend state from an active state, this bit
will be set to a 1. The device controller clears the bit upon exiting from a suspend state. Only
8 RW 0x0 used by the device controller.
0 = NOTSUSPEND
1 = SUSPENDED
SRI: SOF Received. When the device controller detects a Start Of (micro) Frame, this bit will be
set to a one. When an SOF is extremely late, the device controller will automatically set this bit to
indicate that an SOF was expected. Therefore, this bit will be set roughly every 1ms in device FS
mode and every 125 µs in HS mode and will be synchronized to the actual SOF that is received.
Since device controller is initialized to FS before connect, this bit will be set at an interval of 1ms
7 RW 0x0
during the prelude to the connect and chirp. In host mode, this bit will be set every 125 µs and
can be used by host controller driver as a time base. Software writes a 1 to this bit to clear it. This
is a non-EHCI status bit.
0 = SOF_NOT_RCVD
1 = SOF_RCVD
URI: USB Reset Received. When the device controller detects a USB Reset and enters the
default state, this bit is set to a 1. Software can write a 1 to this bit to clear the USB Reset
6 RW 0x0 Received status bit. Only used by the device controller.
0 = NO_USB_RESET
1 = USB_RESET
AAI: Interrupt and Asynchronous Advance. System software can force the host controller to issue
an interrupt the next time the host controller advances the asynchronous schedule by writing a
one to the Interrupt on Async Advance Doorbell bit in the USBCMD register. This status bit
5 RW 0x0
indicates the assertion of that interrupt source. Only used by the host controller
0 = NOT_ADVANCED
1 = ADVANCED
SEI: System Error. This bit is not used in this implementation and will always be set to "0".
4 RO X 0 = NO_ERROR
1 = ERROR
FRI: Frame List Rollover. The Host Controller sets this bit to a 1 when the Frame List Index rolls
over from its maximum value to 0. The exact value at which the rollover occurs depends on the
3 RW 0x0 frame list size. For example. If the frame list size (as programmed in the Frame List Size field of
the USBCMD register) is 1024, the Frame Index Register rolls over every time FRINDEX [1 3]
toggles. Similarly, if the size is 512, the Host Controller sets this bit to a 1 every time FHINDEX
PCI: Port Change Detect. The Host Controller sets this bit to a 1 when on any port a Connect
Status occurs, a Port Enable/Disable Change occurs, or the Force Port Resume bit is set as the
result of a J-K transition on the suspended port. The Device Controller sets this bit to a one when
the port controller enters the full or high-speed operational state. When the port controller exits
2 RW 0x0 the full or high-speed operational states due to Reset or Suspend events, the notification
mechanisms are the USB Reset Received bit and the DCSuspend bits respectively. This bit is not
EHCI compatible.
0 = NO_PORT_CHANGE
1 = PORT_CHANGE
UEI: USB Error Interrupt. This bit gets set by the Host/Device controller when completion of a
USB transaction results in an error condition. This bit is set along with the USBINT bit, if the TD
1 RW 0x0 on which the error interrupt occurred also ad its interrupt on complete (IOC) bit set.
0 = NO_ERROR
1 = ERROR
UI: USB Interrupt. This bit is set by the Host/Device Controller when the cause of an interrupt is a
completion of a USB transaction where the Transfer Descriptor (TD) as an interrupt on complete
(IOC) bit set. This bit is also set by the Host/Device Controller when a short packet is detected. A
0 RW 0x0 short packet is when the actual number of bytes received was less than the expected number of
bytes.
0 = NO_INT
1 = INT
19.13.8.20 USB2_CONTROLLER_2_USB2D_USBINTR_0
PPCE: Port-n Change Detect Enable - RW. Default = 0000h. The definition for each bit in this field is
identical to bit 2 of this register (Port Change Interrupt Enable) except these bits are specific to a given
port, where bit 16 = Port 1, 17 = Port 2, etc. For example, if bit 17 is set (1b) then a port change event
31:16 0x0
was detected on Port 2. When a bit in this field is a one, and the corresponding Port-n Change Detect
bit in the USBSTS register is a one, the host controller will issue an interrupt. The interrupt is
acknowledged by software clearing the Port-n Change Detect bit.
UALTIE: ULPI alt_int Interrupt Enable. 1 = USB controller issues an interrupt if ULPI_ALT_INT bit in
USBSTS register transitions. The interrupt is acknowledged by software by writing a 1 to the
11 0x0 ULPI_ALT_INT bit.
0 = DISABLE
1 = ENABLE
ULPIE: ULPI Interrupt Enable. 1 = USB controller issues an interrupt if ULPI_INT bit in USBSTS register
transitions. The interrupt is acknowledged by software by writing a 1 to the ULPI_INT bit.
10 0x0
0 = DISABLE
1 = ENABLE
SLE: Sleep Enable. 1 = Device controller issues an interrupt if DCSuspend bit in USBSTS register
transitions. The interrupt is acknowledged by software by writing a 1 to the DCSuspend bit. Only used
8 0x0 by the device controller.
0 = DISABLE
1 = ENABLE
SRE: SOF Received Enable. 1 = Device controller issues an interrupt if SOF Received bit in USBSTS
register = 1. The interrupt is acknowledged by software clearing the SOF Received bit.
7 0x0
0 = DISABLE
1 = ENABLE
URE: USB Reset Enable.1 = Device controller issues an interrupt if USB Reset Received bit in USBSTS
6 0x0 register = 1. The interrupt is acknowledged by software clearing the USB Reset Received bit. Only used
by the device controller.
AAE: Interrupt on Asynchronous Advance Enable. 1 = the host controller issues an interrupt at the next
interrupt threshold if Interrupt on Async Advance bit in USBSTS register = 1. The interrupt is
5 0x0 acknowledged by software clearing the Interrupt on Async Advance bit. Only used by the host controller.
0 = DISABLE
1 = ENABLE
SEE: System Error Enable. 1 = Host/device controller issues an interrupt if the System Error bit in
USBSTS register = 1. The interrupt is acknowledged by software clearing the System Error bit.
4 0x0
0 = DISABLE
1 = ENABLE
FRE: Frame List Rollover Enable. 1 = Host controller issues an interrupt if Frame List Rollover bit in the
USBSTS register = 1. The interrupt is acknowledged by software clearing the Frame List Rollover bit.
3 0x0 Only used by the host controller.
0 = DISABLE
1 = ENABLE
PCE: Port Change Detect Enable. 1 = Host/device controller issues an interrupt if Port Change Detect
bit in USBSTS register = 1. The interrupt is acknowledged by software clearing the Port Change Detect
2 0x0 bit.
0 = DISABLE
1 = ENABLE
UEE: USB Error Interrupt Enable. 1 = Host controller issues an interrupt at the next interrupt threshold if
the USBERRINT bit in USBSTS = 1. The interrupt is acknowledged by software clearing the
1 0x0 USBERRINT bit in the USBSTS register.
0 = DISABLE
1 = ENABLE
UE: USB Interrupt Enable. 1 = Host/device issues an interrupt at the next interrupt threshold if the
USBINT bit in USBSTS = 1. The interrupt is acknowledged by software clearing the USBINT bit.
0 0x0
0 = DISABLE
1 = ENABLE
19.13.8.21 USB2_CONTROLLER_2_USB2D_FRINDEX_0
FRINDEX: Frame Index. The value in this register increments at the end of each time frame (micro-
frame). Bits [N: 3] are used for the Frame List current index. Each location of the frame list is accessed 8
times (frames or micro-frames) before moving to the next index. The following illustrates values of N
based on the value of the Frame List Size field in the USBCMD register, when used in host mode.
USBCMD [Frame List Size] Number Elements N
000b (1024) 12
001b (512) 11
13:0 X 010b (256) 10
011b (128) 9
100b (64) 8
101b (32) 7
110b (16) 6
111b (8) 5
In device mode, the value is the current frame number of the last frame transmitted. It is not used as an
index. In either mode, bits 2:0 indicate the current micro-frame.
19.13.8.22 USB2_CONTROLLER_2_USB2D_PERIODICLISTBASE_0
USBADR: Device mode. The upper seven bits of this register represent the device address. After any
controller reset or a USB reset, the device address is set to the default address (0). The default address
31:25 0x0
will match all incoming addresses. Software shall reprogram the address after receiving a
SET_ADDRESS request.
USBADRA: Device Address Advance. Default=0. When this bit is 0, any writes to USBADR are
instantaneous. When this bit is written to a 1 at the same time or before USBADR is written, the write to
the USBADR field is staged and held in a hidden register. After an IN occurs on endpoint 0 and is
ACKed, USBADR will be loaded from the holding register. Hardware will automatically clear this bit on
the following conditions:
1) IN is ACKed to endpoint 0. (USBADR is updated from staging register).
24 0x0 2) OUT/SETUP occur to endpoint 0. (USBADR is not updated).
3) Device Reset occurs (USBADR is reset to 0).
Note: After the status phase of the SET_ADDRESS descriptor, the DCD has 2 ms to program the
USBADR field. This mechanism will ensure this specification is met when the DCD cannot write of the
device address within 2 ms from the SET_ADDRESS status phase. If the DCD writes the USBADR with
USBADRA=1 after the SET_ADDRESS data phase (before the prime of the status phase), the
USBADR will be programmed instantly at the correct time and meet the 2ms USB requirement.
BASEADR: Host mode: This 32-bit register contains the beginning address of the Periodic Frame List in
the system memory. HCD loads this register prior to starting the schedule execution by the Host
Controller. The memory structure referenced by this physical memory pointer is assumed to be 4-Kbyte
31:12 0x0
aligned. The contents of this register are combined with the Frame Index Register (FRINDEX) to enable
the Host Controller to step through the Periodic Frame List in sequence. Base Address (Low). These
bits correspond to memory address signals [31:12], respectively. Only used by the host controller.
19.13.8.23 USB2_CONTROLLER_2_USB2D_ASYNCLISTADDR_0
EPBASE: Device mode. This register contains the address of the top of the endpoint list in system
31:11 0x0 memory. These bits correspond to memory address signals [31:11], respectively. This field will
reference a list of up to 32 Queue Heads (QH). Only used by the device controller.
ASYBASE: Host mode. This 32-bit register contains the address of the next asynchronous queue head
31:5 0x0 to be executed by the host. Link Pointer Low (LPL). These bits correspond to memory address signals
[31:5], respectively. This field may only reference a Queue Head (OH). Only used by the host controller.
19.13.8.24 USB2_CONTROLLER_2_USB2D_ASYNCTTSTS_0
TTHA: Internal TT Hub Address representation. This field is used to match the Hub Address field
in QH and siTD to determine if the packet is routed to the internal TT for directly attached FS/LS
30:24 RW 0x0 devices.If the Hub Address in the QH or siTD does not match this address then the packet will be
broadcast on the High Speed ports destined a downstream High Speed hub with the address in
QH/siTD.
1 RW 0x0 TTAC: Embedded TT Async Buffers Clear. (Read/Write to set). This field will clear all pending
transactions in the embedded TT Async Buffer(s). The clear will take as much time as necessary
TTAS: Embedded TT Async Buffers Status. (Read Only). This read only bit will be 1 if one or
0 RO X more transactions are being held in the embedded TT Async. Buffers. When this bit is a zero,
then all outstanding transactions in the embedded TT have been flushed.
19.13.8.25 USB2_CONTROLLER_2_USB2D_BURSTSIZE_0
TXPBURST: Programmable TX Burst Length. (Read/Write). This register represents the maximum length
15:8 0x8
of a burst in 32-bit words while moving data from system memory to the USB bus.
RXPBURST: Programmable RX Burst Length. (Read/Write). This register represents the maximum
7:0 0x8
length of a burst in 32-bit words while moving data from the USB bus to system memory.
19.13.8.26 USB2_CONTROLLER_2_USB2D_TXFILLTUNING_0
TXFIFOTHRES: FIFO Burst Threshold. (Read/Write). This register controls the number of data bursts
that are posted to the TX latency FIFO in host mode before the packet begins on to the bus. The
minimum value is 2 and this value should be a low as possible to maximize USB performance. A higher
21:16 0x2 value can be used in systems with unpredictable latency and/or insufficient bandwidth where the FIFO
may underrun because the data transferred from the latency FIFO to USB occurs before it can be
replenished from system memory. This value is ignored if the Stream Disable bit in USBMODE register
is set.
TXSCHHEALTH: Scheduler Health Counter. (Read/Write To Clear) [Default = 0]. This register
increments when the host controller fails to fill the TX latency FIFO to the level programmed by
12:8 0x0 TXFIFOTHRES before running out of time to send the packet before the next Start-Of-Frame. This
health counter measures the number of times this occurs to provide feedback to selecting a proper
TXSCHOH. Writing to this register will clear the counter and this counter will max out at 31.
TXSCHOH: Scheduler Overhead. (Read/Write) [Default = 0]. This register adds an additional fixed
offset to the schedule time estimator described above as Tff. As an approximation, the value chosen for
this register should limit the number of back-off events captured in the TXSCHHEALTH to less than 10
7:0 0x0 per second in a highly utilized bus. Choosing a value that is too high for this register is not desired as it
can needlessly reduce USB utilization. The time unit represented in this register is 1.267 µs when a
device is connected in High-Speed Mode. The time unit represented in this register is 6.333 µs when a
device is connected in Low/Full Speed Mode.
19.13.8.27 USB2_CONTROLLER_2_USB2D_ICUSB_CTRL_0
IC_ENB1: ICUSB transceiver enable. This bit enables the ICUSB transceiver. To enable the interface, the
bits PTS must be set to 11 in the PORTSCx. Writing a '1' to this bit selects the IC_USB interface.
3 0x0
0 = DISABLE
1 = ENABLE
IC_VDD1: ICUSB voltage select. It selects which voltage is being supplied to the ICUSB peripheral.
000 = No voltage
001 = 1.0V – reserved
010 = 1.2V - reserved
011 = 1.5V - reserved
2:0 0x0 100 = 1.8V
101 = 3.0V
110 = reserved
111 = reserved
The Voltage negotiation should happen between enabling port power (PP) and asserting the run/stop bit in
register.
19.13.8.28 USB2_CONTROLLER_2_USB2D_ULPI_VIEWPORT_0
Note: WRITES TO THE ULPI THROUGH THE VIEWPORT CAN SUBSTANTIALLY HARM STANDARD USB
OPERATIONS. CURRENTLY NO USAGE MODEL HAS BEEN DEFINED WHERE SOFTWARE SHOULD
NEED TO EXECUTE WRITES DIRECTLY TO THE ULPI PHY. SEE EXCEPTION REGARDING
OPTIONAL FEATURES BELOW.
Note: EXECUTING READ OPERATIONS THROUGH THE ULPI VIEWPORT SHOULD HAVE NO HARMFUL
SIDE EFFECTS TO STANDARD USB OPERATIONS.
There are two operations that can be performed with the ULPI Viewport: wakeup and read /write operations.
The wakeup operation is used to put the ULPI interface into normal operation mode and re-enable the clock, if necessary. A
wakeup operation is required before accessing the registers when the ULPI interface is operating in low power mode, serial
mode, or Carkit mode.
The ULPI state can be determined by reading the sync state bit (ULPI_SYNC_STATE). If this bit is a one, then ULPI interface
is running in normal operation mode and can accept read/write operations. If the ULPI_SYNC_STATE indicates a 0 then then
read/write operations will not be able to execute. Undefined behavior will result if ULPI_SYNC_STATE = 0 and a read or write
operation is performed.
To execute a wakeup operation, write all 32 bits of the ULPI Viewport where ULPI_PORT is constructed appropriately and the
ULPI_WAKEUP bit is a 1 and ULPI_RUN bit is a 0. Poll the ULPI Viewport until ULPI_WAKEUP is zero for the operation to
complete.
To execute a read or write operation, write all 32 bits of the ULPI Viewport where ULPI_DATA_WR, ULPI_REG_ADDR,
ULPI_PORT, ULPI_RD_WR are constructed appropriately and the ULPI_RUN bit is a 1. Poll the ULPI Viewport until
ULPI_RUN is zero for the operation to complete. Once ULPI_RUN is zero, the ULPI_DATA_RD will be valid if the operation
was a read.
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1167
Tegra K1 Technical Reference Manual
USB Complex
The polling method above can be changed to interrupt driven using the ULPI interrupt defined in the USBSTS and USBINTR
registers. When a wakeup or read/write operation is complete, the ULPI_INT interrupt will be set.
There are several optional features that may need to be enabled or disabled by system software as part of system
configuration. These bits are contained in the Interface and OTG Control registers of the ULPI PHY register set. These
registers also contain bits which are controlled by the link dynamically and therefore should be only modified by system
software using the Set/Clear access method. Direct writes to these registers could have harmful side effects to the standard
USB operations. The optional bits are as follows: Bits 3 through 7 in the Interface Control register and Bits 6 and 7 in the OTG
Control register.
Refer to the ULPI Specification Revision 1.1 for further information on the use of the optional features.
ULPI_WAKEUP: ULPI Wakeup. Writing the 1 to this bit will begin the wakeup operation. The bit
will automatically transition to 0 after the wakeup is complete. Once this bit is set, the driver
cannot set it back to 0. Note: The driver must never execute a wakeup and a read/write operation
31 RW 0x0
at the same time.
0 = CLEAR
1 = SET
ULPI_RUN: ULPI read/write Run. Writing the 1 to this bit will begin the read/write operation. The
bit will automatically transition to 0 after the read/write is complete. Once this bit is set, the driver
cannot set it back to 0. Note: The driver must never execute a wakeup and a read/write operation
30 RW 0x0
at the same time.
0 = CLEAR
1 = SET
ULPI_RD_WR: ULPI read/write control. (0) Read; (1) Write. This bit selects between running a
read or write operation.
29 RW 0x0
0 = READ
1 = WRITE
ULPI_SYNC_STATE: ULPI sync state. (1) Normal Sync. State. (0) In another state (i.e., Carkit,
serial, low power). This bit represents the state of the ULPI interface.
27 RO X
0 = NOT_NORMAL
1 = NORMAL
26:24 RW 0x0 ULPI_PORT: ULPI PHY port number. This field should be always written as 0.
ULPI_REG_ADDR: ULPI PHY register address. When doing a read or write operation to the ULPI
23:16 RW 0x0
PHY, the address of the ULPI PHY register being accessed is written to this field.
ULPI_DATA_RD: ULPI PHY data read. The data from the ULPI PHY register can be read from
15:8 RO X
here after the read operation completes.
ULPI_DATA_WR: ULPI PHY data write. The data to write to the ULPI PHY register is written
7:0 RW 0x0
here.
19.13.8.29 USB2_CONTROLLER_2_USB2D_PORTSC1_0
DA: Device Address. Default = 0000000b. The 7-bit USB device address for the device attached
to an immediately downstream of the associated root port. A value of zero indicates no device is
present or software support for this feature is not present. This is used by the Controller when
31:25 RW 0x0 sending the LPM token.
This field is only valid when the core is operating in host mode. If in device mode, it will be read
only and always equal to 0000000b.
SSTS: Suspend Status. Default = 00b. These two bits are used by software to determine whether
an L1-based suspend request was successful, specifically:
00b - L1 state entered with success. ACK received from peripheral.
01b - NYET received from peripheral. It was not able to enter L1 state this time.
10b - L1 state not supported by peripheral. STALL received.
11b - Peripheral did not respond or an error occurred.
The value of this field is only valid when the port resides in the L0 state - that is, the meaning of
24:23 RO X these bits is invalid whenever bit 7 of this register (SUSP) is one. Ideally, the Controller driver
should read this register if it receives an interrupt after issuing a suspend using L1 support. In
case of a non-success a port change interrupt will be fired and this field should be checked for a
possible L1 failure. This field is only valid when the core is operating in host mode. If in device
mode it will be always equal to 00b.
0 = L1STATE_ENTERED
1 = NYET_PERIPH
2 = L1STATE_NOT_SUPPORTED
3 = PERIPH_NORESP_ERR
WKOC: Default = 0b. Wake on Over-current Enable: Writing this bit to a one enables the port to
be sensitive to over-current conditions as wake-up events. This field is zero if Port Power (PP) is
zero. This bit should only be used when operating in Host mode. Writing this bit to 1 while the
22 RW 0x0
controller is working in device mode can result in undefined behavior.
0 = DISABLE
1 = ENABLE
WKDS: Wake on Disconnect Enable: Writing this bit to a one enables the port to be sensitive to
device disconnects as wake-up events. This field is zero if Port Power (PP) is zero or in device
mode. This bit should only be used when operating in Host mode. Writing this bit to 1 while the
controller is working in device mode can result in undefined behavior. This bit should not be
21 RW 0x0
written to 1 if there is no device connected. After the device disconnect is detected, this bit should
be cleared to 0.
0 = DISABLE
1 = ENABLE
WKCN: Wake on Connect Enable: Writing this bit to a one enables the port to be sensitive to
device connects as wake-up events. This field is zero if Port Power (PP) is zero or in device
mode. This bit should only be used when operating in Host mode. Writing this bit to 1 while the
controller is working in device mode can result in undefined behavior. This bit should not be
20 RW 0x0
written to 1 while the device is connected. After the device connection is detected, this bit should
be cleared to 0.
0 = DISABLE
1 = ENABLE
PTC: Port Test Control: Any value other than zero indicates that the port is operating in test
mode.
Value Specific Test.
0000b: Not enabled.
0001b: J_ STATE.
0010b: K_STATE.
0011b: SEQ_NAK.
0100b: Packet.
19:16 RW 0x0
0101b: FORCE_ENABLE.
0110b to 1111b: Reserved.
Refer to Chapter 7 of the USB Specification Revision 2.0 for details on each test mode.
0 = NORMAL_OP
1 = TEST_J
2 = TEST_K
3 = TEST_SE0_NAK
4 = TEST_PKT
5 = TEST_FORCE_ENABLE
PIC: Port Indicator Control: This field is not supported in the current implementation. Please use a
15:14 RO X
GPIO if you wish to use Port Indicators.
PO: Port Owner. Port owner handoff is not implemented in this design, therefore this bit will
13 RO X
always be 0.
PP: Port Power: The function of this bit depends on the value of the Port Power Switching (PPC)
field in the HCSPARAMS register. The behavior is as follows:
PPC PP Operation
0b 0b Read Only. A device controller with no OTG capability does not have port
power control switches.
1b 1b/0b RW. Host/OTG controller requires port power control switches.
12 RW 0x1
This bit represents the current setting of the switch (0=off, 1=on). When power is not available on
a port (i.e., PP equals a 0), the port is non-functional and will not report attaches, detaches, etc.
When an over-current condition is detected on a powered port and PPC is a one, the PP bit in
each affected port may be transitioned by the host controller driver from a one to a zero
(removing power from the port).
0 = NOT_POWERED
1 = POWERED
LS: These bits reflect the current logical levels of the D+ (bit 11) and D- (bit 10) signal lines. The
encoding of the bits is:
00b = SE0
01b = K-state
10b = J-state
11b = Undefined
11:10 RO X The value of this field is undefined if Port Power (PP) is zero in host mode. In host mode, the use
of line-state by the host controller driver is not necessary (unlike EHCI), because the port
controller state machine and the port routing manage the connection of LS and FS. In device
mode, the use of line-state by the device controller driver is not necessary.
0 = SE0
1 = K_STATE
2 = J_STATE
3 = UNDEFINED
SLP: Suspend using L1 - RW. Default = 0b. When this bit is set to '1' and a non-zero Device
Address (DA) is specified Controller will instigate L1 entry during suspend (bit 7) and L1 exit
during resume (bit 6). When set to zero the Controller will use the legacy (L2) mechanism.
9 RW 0x0 Software should only set this bit when the device attached immediately downstream supports L1
transitions. When acting as device, this bit is read-only and set to '1' by the hardware when the
Controller enters is L1 state (LPM token received and accepted). Note: HSP is redundant with
PSPD(27:26). This bit is not defined in the EHCI specification.
SUSP: Port suspend. 1=Port in suspend state. 0=Port not in suspend state.
In Host Mode: Read/Write. Port Enabled Bit and Suspend bit of this register define the port states
as follows:
Bits [Port Enabled, Suspend] Port State
0x Disable
10 Enable
11 Suspend
When in suspend state, downstream propagation of data is blocked on this port, except for port
reset. The blocking occurs at the end of the current transaction if a transaction was in progress
7 RO X
when this bit was written to 1. In the suspend state, the port is sensitive to resume detection. Note
that the bit status does not change until the port is suspended and that there may be a delay in
suspending a port if there is a transaction currently in progress on the USB. The host controller
will unconditionally set this bit to zero when software sets the Force Port Resume bit to zero. A
write of zero to this bit is ignored by the host controller. If host software sets this bit to a one when
the port is not enabled (i.e., Port enabled bit is a zero) the results are undefined. This field is zero
if Port Power (PP) is zero in host mode.
In Device Mode: Read Only. This bit is a read only status bit.
0 = NOT_SUSPEND
1 = SUSPEND
FPR: Force Port Resume. 1= Resume detected/driven on port. 0=No resume (K state)
detected/driven on port.
In Host Mode: Software sets this bit to one to drive resume signaling. The Host Controller sets
this bit to one if a J-to-K transition is detected while the port is in the Suspend state. When this bit
transitions to a one because a J-to-K transition is detected, the Port Change Detect bit in the
USBSTS register is also set to one. This bit will automatically change to zero after the resume
sequence is complete. This behavior is different from EHCI where the host controller driver is
required to set this bit to a zero after the resume duration is timed in the driver. Note that when
the Host controller owns the port, the resume sequence follows the defined sequence
documented in the USB Specification Revision 2.0. The resume signaling (Full-speed 'K') is
driven on the port as long as this bit remains a one. This bit remains a one until the port has
6 RW 0x0 switched to the high-speed idle. Writing a zero has no effect because the port controller will time
the resume operation to clear the bit when the port control state switches to HS or FS idle. This
field is zero if Port Power (PP) is zero in host mode. This bit is not-EHCI compatible.
In Device mode: After the device has been in Suspend State for 5ms or more, software must set
this bit to one to drive resume signaling before clearing. The Device Controller will set this bit to
one if a J-to-K transition is detected while the port is in the Suspend state. The bit will be cleared
when the device returns to normal operation. Also, when this bit transitions to a one because a J-
to-K transition is detected, the Port Change Detect bit in the USBSTS register is also set to one.
Software should ensure that the PHY clock is operational before writing a 1 to this bit to start the
resume sequence. This is true for both Device and Host modes.
0 = NO_RESUME
1 = RESUME
PEC: Port Enable/Disable Change: 1=Port enabled/disabled status has changed. 0=No change.
In Host Mode: For the root hub, this bit gets set to a one only when a port is disabled due to
disconnect on the port or due to the appropriate conditions existing at the EOF2 point (See
Chapter 11 of the USB Specification). Software clears this by writing a one to it. This field is zero
3 RW 0x0
if Port Power (PP) is zero.
In Device mode: The device port is always enabled. (This bit will be zero)
0 = NO_CHANGE
1 = CHANGE
CSC: Connect Status Change: 1 =Change in Current Connect Status. 0=No change (default).
In Host Mode: Indicates a change has occurred in the port's Current Connect Status. The
host/device controller sets this bit for all changes to the port device connect status, even if system
software has not cleared an existing connect status change. For example, the insertion status
changes twice before system software has cleared the changed condition, hub hardware will be
1 RW 0x0
'setting' an already-set bit (i.e., the bit will remain set). Software clears this bit by writing a one to
it. This field is zero if Port Power (PP) is zero in host mode.
This bit is undefined in device controller mode.
0 = NO_CHANGE
1 = CHANGE
19.13.8.30 USB2_CONTROLLER_2_USB2D_HOSTPC1_DEVLC_0
PTS: Parallel transceiver select. This bit is not defined in the EHCI specification.
0 = UTMI
1 = RESERVED
31:29 RW 0x0
2 = ULPI
3 = ICUSB_SER
4 = HSIC
STS: Serial transceiver not selected. This is the only value supported. This bit is not defined in
the EHCI specification.
28 RW 0x0
0 = PARALLEL_IF
1 = SERIAL_IF
PTW: Parallel Transceiver Width. Fixed to 0. This bit is not defined in the EHCI specification.
27 RO X 0 = EIGHT_BIT
1 = RESERVED
PSPD: This register field indicates the speed at which the port is operating.
00 = Full Speed
01 = Low Speed
10 = High Speed.
26:25 RO X
This bit is not defined in the EHCI specification.
0 = FULL_SPEED
1 = LOW_SPEED
2 = HIGH_SPEED
3 = RESERVED
ALPD: Auto Low Power While Disconnect - RW. Default = 0b. If set, this feature will be enabled
and every time the port enters the disconnect state it will also enter in low power state, disabling
the transceiver clock. The behavior will be same as if the PHCD bit was enabled(in fact this bit
will be set to 1 as soon as low power mode is enabled).When this field is set the WKCN field of
PORTSCx register(Wake on Connect Enable) will also be set. This way the core will wake up in
24 RW 0x0 case a connect is detected. There will be a delay between the detection of a disconnect and
actually enter in low power mode. This delay can be controlled by writing to the ALPDD field in
the USBMODE register.
0 = DONT_AUTO_LOW_POWER_WHILE_DISCONNECT
1 = AUTO_LOW_POWER_WHILE_DISCONNECT
PFSC: Port Force Full Speed Connect - RW. Default = 0b. Writing this bit to a '1b' will force the
port to only connect at Full Speed. It disables the chirp sequence that allows the port to identify
itself as High Speed. This is useful for testing FS configurations with an HS host, hub or device.
23 RW 0x0
This bit is not defined in the EHCI specification.
0 = DONT_FORCE_FULL_SPEED
1 = FORCE_FULL_SPEED
PHCD: PHY Low Power Suspend - Clock disable: Writing this bit to a 1 will disable the PHY
clock. Write a 0 enables it. Reading this bit will indicate the status of the PHY clock. NOTE: The
PHY clock cannot be disabled if it is being used as the system clock.
In device mode, the PHY can be put into Low Power Clock Disable when the device is not
running (USBCMD RS=0b) or the host has signaled suspend (PORTSCx SUSP=1b). Low Power
Clock Disable will be cleared automatically when the host has signaled resume. Before forcing a
22 RW 0x0
resume from the device, the Controller driver must clear this bit.
In host mode, the PHY can be put into Low Power Suspend Clock Disable when the downstream
device has been put into suspend mode or when no downstream device is connected. Low Power
Clock Disable is completely under the control of software.
0 = DISABLE
1 = ENABLE
LPMX: Auto LPM set. Default = 00b. This bit field is valid during Host Mode Only. For Device
Mode, this is reserved.
Value Meaning
00b Disables auto LPM.
01b If there is no activity for a certain number of SOFs the controller will send an LPM
21:20 RW 0x0 token, enter in suspend and issue a port change interrupt.
10b Same as above but without issuing an interrupt.
11b Reserved for futures LPM enhancements.
The detection of no activity is based on the absence of response from the downstream device.
Because of this limitation this feature should not be used if ISO OUT endpoints are being used
(as no handshake is expected).
ASUS: Auto Low Power. Default = 0b. This bit field is valid during Device Mode Only. In Host
Mode it is part of ELPM field. This bit is used to control the auto low power feature. If set, the auto
low power feature will be enabled and every time the port enters the suspend state, it will also
17 RW 0x0 enter the low power state, disabling the transceiver clock. The behavior will be the same as if the
PHCD bit was enabled (in fact this bit will be set to '1' as soon as low power mode is enabled).
0 = DISABLE
1 = ENABLE
EPLPM: Endpoint for LPM token. Default = 0000b. This bit field is valid during Host Mode only.
For Device Mode, bits [19:18] are reserved and bit 17 is ASUS, while bit 16 is STL. This sets the
19:16 RW 0x0
endpoint number to which the LPM token will be sent. It will be directly mapped to the ENDP field
in the LPM token with the EXT PID.
STL: STALL reply to LPM token. Default = 0b. This bit field is valid during Device Mode only. In
Host Mode it is a part of ELPM field. When this bit is set to '1', the Controller will reply always with
16 RW 0x0 STALL to all incoming LPM tokens. This bit overrides the LPM NYET bit (NYT).
0 = DISABLE
1 = ENABLE
LPMFRM: Auto LPM SOF Threshold. Default = 0000b. This bit field is valid during Host Mode
only. For Device Mode, this is reserved. This holds the SOF counter threshold. When the number
15:12 RW 0x0 of SOF with no activity in between reaches this threshold and the auto LPM is enabled, an LPM
token will be sent and the port will enter in suspend state. The SOF counter for this threshold is
incremented each 125 µs, even if the port is not in HS operation.
BA: BmAttributes . Default = 00000000000b. This holds the bmAttributes field of the LPM sub-
11:1 RO X
token received, after the EXT PID token.
NYT_ASUS: NYET reply to LPM token. Default = 0b. This bit is NYT during Device Mode. Details
follow: When this bit is to '1', the device controller will NYET all the LPM tokens. When this bit is
set to '0', the Controller will ACK all the LPM tokens if the STALL bit (STL) is also set to '0'. This
bit is ASUS in Host Mode. Details follow: This bit is used to control the auto low power feature. If
set, the auto low power feature will be enabled and every time the port enters in suspend state it
0 RW 0x0
will also enter in low power state, disabling the transceiver clock. The behavior will be the same
as if the PHCD bit was enabled (in fact this bit will be set to '1' as soon as low power mode is
enabled).
0 = DISABLE
1 = ENABLE
19.13.8.31 USB2_CONTROLLER_2_USB2D_OTGSC_0
DPIE: Data Pulse Interrupt Enable. Setting this bit enables the Data pulse interrupt.
30 RW 0x0 0 = DISABLE
1 = ENABLE
ONEMSE: 1 millisecond timer Interrupt enable. Setting this bit enables the 1 millisecond timer
interrupt.
29 RW 0x0
0 = DISABLE
1 = ENABLE
BSEIE: B Session End Interrupt Enable. Setting this bit enables the B session end interrupt
28 RW 0x0 0 = DISABLE
1 = ENABLE
BSVIE: B Session Valid Interrupt Enable. Setting this bit enables the B session valid interrupt
27 RW 0x0 0 = DISABLE
1 = ENABLE
ASVIE: A Session Valid Interrupt Enable. Setting this bit enables the A session valid interrupt
26 RW 0x0 0 = DISABLE
1 = ENABLE
AVVIE: A VBus Valid Interrupt Enable. Setting this bit enables the A VBus valid interrupt
25 RW 0x0 0 = DISABLE
1 = ENABLE
IDIE: USB ID Interrupt Enable. Setting this bit enables the USB ID interrupt
24 RW 0x0 0 = DISABLE
1 = ENABLE
DPIS: Data Pulse Interrupt Status. This bit is set when data bus pulsing occurs on DP or DM. Data
bus pulsing is only detected when USBMODE.CM = Host (11) and PORTSC(0).PortPower = Off (0).
22 RW 0x0 Software writes a 1 to clear this bit.
0 = INT_CLEAR
1 = INT_SET
ONEMSS: 1 millisecond timer Interrupt Status: This bit is set once every millisecond. Software
writes a 1 to clear it.
21 RW 0x0
0 = INT_CLEAR
1 = INT_SET
BSEIS: B Session End Interrupt Status. This bit is set when VBus has fallen below the B session
end threshold. Software writes a 1 to clear this bit .
20 RW 0x0
0 = INT_CLEAR
1 = INT_SET
BSVIS: B Session Valid Interrupt Status. This bit is set when VBus has either risen above or fallen
below the B session valid threshold (0.8 VDC). Software writes a 1 to clear this bit.
19 RW 0x0
0 = INT_CLEAR
1 = INT_SET
ASVIS: A Session Valid Interrupt Status. This bit is set when VBus has either risen above or fallen
below the A session valid threshold (0.8 VDC). Software writes a one to clear this bit.
18 RW 0x0
0 = INT_CLEAR
1 = INT_SET
AVVIS: A VBus Valid Interrupt Status. This bit is set when VBus has either risen above or fallen
below the VBus valid threshold (4.4 VDC) on an A device. Software writes a 1 to clear this bit.
17 RW 0x0
0 = INT_CLEAR
1 = INT_SET
IDIS: USB ID Interrupt Status. This bit is set when a change on the ID input has been detected.
Software writes a 1 to clear this bit.
16 RW 0x0
0 = INT_CLEAR
1 = INT_SET
DPS: Data Bus Pulsing Status. A 1 indicates data bus pulsing is being detected on the port.
14 RO X 0 = STS_CLEAR
1 = STS_SET
ONEMST: 1 millisecond timer toggle. This bit toggles once per millisecond
13 RO X 0 = STS_CLEAR
1 = STS_SET
BSE: B session End. Indicates VBus is below the B session end threshold
12 RO X 0 = STS_CLEAR
1 = STS_SET
BSV: B Session Valid. Indicates VBus is above the B session valid threshold
11 RO X 0 = STS_CLEAR
1 = STS_SET
ASV: A Session Valid. Indicates VBus is above the A session valid threshold
10 RO X 0 = STS_CLEAR
1 = STS_SET
AVV: A VBus Valid. Indicates VBus is above the A VBus valid threshold
9 RO X 0 = STS_CLEAR
1 = STS_SET
DP: Data Pulsing. Setting this bit causes the pull-up on DP to be asserted for data pulsing during
SRP.
4 RW 0x0
0 = NO_DATA_PULSE
1 = DATA_PULSE
OT: OTG Termination. This bit must be set when the OTG device is in device mode, this controls
the pulldown on DM.
3 RW 0x0
0 = NO_OTG_TERM
1 = OTG_TERM
VC: VBUS Charge. Setting this bit causes the VBus line to be charged. This is used for VBus
pulsing during SRP.
1 RW 0x0
0 = NO_VBUS_CHRG
1 = VBUS_CHRG
VD: VBUS_Discharge. Read/write. Setting this bit causes Vbus to discharge through a resistor.
0 RW 0x0 0 = NO_VBUS_DISCHRG
1 = VBUS_DISCHRG
19.13.8.32 USB2_CONTROLLER_2_USB2D_USBMODE_0
ALPDD: Auto Low Power While Disconnect Delay, Used when the ALPD field of the HOSTPCx
register is set. Defines the delay between disconnect detection and entering in low power mode.
31:16 RW 0x0
The delay is <this register value>*64*100/3 in milliseconds. The maximum value is
65535*64*100/3 = 139,808 ms. The minimum value is 0. Only used in host mode.
15 RW 0x0 SRT: Shorten USB Reset Time. Software should never set this bit to 1.
VBPS: VBUS Power Select This can be used by logic that selects between an on-chip Vbus
5 RW 0x0 power source (charge pump) and an off-chip source in systems when both are available. Only to
be used in Host Mode. No functionality is implemented for this, so software should not use this.
SDIS: Stream disable: 1 Streaming is disabled - helpful to avoid overruns/underruns when system
load is too high.
4 RO X
0 = STREAM_ENABLE
1 = STREAM_DISABLE
SLOM: Setup Lockout Mode: In device mode, this bit controls the behavior of the setup lockout
mechanism.
0 - Setup lockout is ON (default)
3 RO X 1 - Setup lockout is OFF.
Firmware requires the use of setup tripwire semaphore in USB2D_USBCMD register.
0 = LOCKOUT_ON
1 = LOCKOUT_OFF
ES: Endian Select: Note: For this implementation, this should be always set to 0 (little endian).
2 RO X 0 = LITTLE_ENDIAN
1 = RESERVED
CM: Controller Mode: The controller mode will default to an idle state and will need to be
initialized to the desired operating mode after reset. This register can only be written once after
reset. If it is necessary to switch modes, software must reset the controller by writing to the
RESET bit in the USBCMD register before reprogramming this register.
00 = Idle [Default]
01 = Reserved
1:0 RO X 10 = Device Controller
11 = Host Controller.
0 = IDLE
1 = RESERVED
2 = DEVICE_MODE
3 = HOST_MODE
19.13.8.33 USB2_CONTROLLER_2_USB2D_ENDPTNAK_0
EPTN: TX Endpoint NAK R/WC. Each TX endpoint has 1 bit in this field. The bit is set when the device
sends a NAK handshake on a received IN token for the corresponding endpoint.
31:16 0x0
0 = CLEAR
1 = SET
EPRN: RX Endpoint NAK R/WC. Each RX endpoint has 1 bit in this field. The bit is set when the device
sends a NAK handshake on a received OUT or PING token for the corresponding endpoint.
15:0 0x0
0 = CLEAR
1 = SET
19.13.8.34 USB2_CONTROLLER_2_USB2D_ENDPTNAK_ENABLE_0
EPTNE: TX Endpoint NAK Enable R/W. Each bit is an enable bit for the corresponding TX Endpoint
NAK bit. If this bit is set and the corresponding TX Endpoint NAK bit is set, the NAK Interrupt bit is set.
31:16 0x0
0 = DISABLE
1 = ENABLE
EPRNE: RX Endpoint NAK Enable R/W. Each bit is an enable bit for the corresponding RX Endpoint
NAK bit. If this bit is set and the corresponding RX Endpoint NAK bit is set, the NAK Interrupt bit is set.
15:0 0x0
0 = DISABLE
1 = ENABLE
19.13.8.35 USB2_CONTROLLER_2_USB2D_ENDPTSETUPSTAT_0
ENDPTSETUPSTAT15: Endpoint 15 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
15 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT14: Endpoint 14 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
14 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT13: Endpoint 13 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
13 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT12: Endpoint 12 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
12 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT11: Endpoint 11 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
11 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT10: Endpoint 10 Setup Status: For every setup transaction that is received, this bit is
set to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the
setup data from Queue head. The response to a setup packet (as in the order of operations and total
10 0x0 response time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This
register is only used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT9: Endpoint 9 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
9 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT8: Endpoint 8 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
8 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT7: Endpoint 7 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
7 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT6: Endpoint 6 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
6 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT5: Endpoint 5 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
5 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT4: Endpoint 4 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
4 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT3: Endpoint 3 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
3 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT2: Endpoint 2 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
2 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT1: Endpoint 1 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
1 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
ENDPTSETUPSTAT0: Endpoint 0 Setup Status: For every setup transaction that is received, this bit is set
to 1. Software must clear or acknowledge the setup transfer by writing a 1 to it after it has read the setup
data from Queue head. The response to a setup packet (as in the order of operations and total response
0 0x0 time) is crucial to limit bus time-outs while the setup lock-out mechanism is engaged. This register is only
used in device mode.
0 = NOT_RCVD
1 = SETUP_RCVD
19.13.8.36 USB2_CONTROLLER_2_USB2D_ENDPTPRIME_0
PETB15: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
31 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB14: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
30 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB13: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
29 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB12: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
28 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB11: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
27 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB10: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
26 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB9: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
25 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB8: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
24 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB7: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
23 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB6: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
22 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB5: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
21 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB4: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
20 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB3: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
19 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB2: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
18 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB1: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
17 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PETB0: Prime Endpoint Transmit Buffer: This bit is used to request that a buffer prepared for a transmit
operation in order to respond to a USB IN/INTERRUPT transaction on this endpoint. Software should write
a "1" to this bit when posting a new transfer descriptor to this endpoint. Hardware will automatically use
16 0x0 this bit to begin parsing for a new transfer descriptor from the queue head and prepare a transmit buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB15: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
15 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB14: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
14 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB13: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
13 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB12: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
12 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB11: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
11 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB10: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
10 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB9: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
9 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB8: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
8 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB7: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
7 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB6: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
6 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB5: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
5 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB4: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
4 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB3: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
3 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB2: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
2 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB1: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
1 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
PERB0: Prime Endpoint Receive Buffer: This bit is used to request that a buffer prepared for a receive
operation when a USB host initiates a USB OUT transaction to this endpoint. Software should write a one
to this bit whenever posting a new transfer descriptor to this endpoint. Hardware will automatically use this
0 0x0 bit to begin parsing for a new transfer descriptor from the queue head and prepare a receive buffer.
Hardware will clear this bit when this endpoint is successfully primed. This is only used in device mode.
0 = DONT_PRIME
1 = PRIME
19.13.8.37 USB2_CONTROLLER_2_USB2D_ENDPTFLUSH_0
FETB15: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
31 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB14: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
30 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB13: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
29 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB12: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
28 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB11: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
27 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB10: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
26 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB9: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
25 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB8: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
24 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB7: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
23 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB6: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
22 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB5: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
21 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB4: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
20 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB3: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
19 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB2: Flush Endpoint Transmit Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
18 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB1: Writing a one to this bit causes the associated endpoint to clear any primed buffers. If a packet is
in progress for the associated endpoint that transfer will continue until completion. Hardware clears this
17 0x0 register after the endpoint flush operation is successful. This is only used in device mode.
0 = DONT_FLUSH
1 = FLUSH
FETB0: Writing a one to this bit causes the associated endpoint to clear any primed buffers. If a packet is
in progress for the associated endpoint that transfer will continue until completion. Hardware clears this
16 0x0 register after the endpoint flush operation is successful. This is only used in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB15: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
15 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB14: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
14 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB13: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
13 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB12: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
12 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB11: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
11 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB10: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
10 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB9: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
9 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB8: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
8 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB7: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
7 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB6: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
6 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB5: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
5 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB4: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
4 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB3: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
3 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB2: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
2 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB1: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
1 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
FERB0: Flush Endpoint Receive Buffer: Writing a one to this bit causes the associated endpoint to clear
any primed buffers. If a packet is in progress for the associated endpoint that transfer will continue until
completion. Hardware clears this register after the endpoint flush operation is successful. This is only used
0 0x0
in device mode.
0 = DONT_FLUSH
1 = FLUSH
19.13.8.38 USB2_CONTROLLER_2_USB2D_ENDPTSTATUS_0
ETBR15: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
31 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR14: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
30 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR13: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
29 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR12: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
28 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR11: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
27 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR10: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
26 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR9: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
25 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR8: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
24 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR7: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
23 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR6: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
22 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR5: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
21 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR4: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
20 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR3: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
19 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR2: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
18 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR1: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
17 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ETBR0: Endpoint Transmit Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
16 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR15: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
15 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR14: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
14 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR13: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
13 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR12: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
12 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR11: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
11 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR10: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
10 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR9: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
9 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR8: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
8 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR7: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
7 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR6: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
6 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR5: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
5 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR4: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
4 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR3: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
3 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR2: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
2 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR1: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
1 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
ERBR0: Endpoint Receive Buffer Ready: One bit for each endpoint indicates status of the respective
endpoint buffer. This bit is set to a one by the hardware as a response to receiving a command from a
corresponding bit in the ENDPTPRIME register. There will always be a delay between setting a bit in the
ENDPTPRIME register and endpoint indicating ready. This delay time varies based upon the current USB
0 X
traffic and the number of bits set in the ENDPTPRIME register. Buffer ready is cleared by USB reset, by
the USB DMA system, or through the ENDPTFLUSH register. This is only used in device mode.
0 = NOT_READY
1 = READY
19.13.8.39 USB2_CONTROLLER_2_USB2D_ENDPTCOMPLETE_0
ETCE15: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
31 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE14: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
30 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE13: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
29 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE12: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
28 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE11: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
27 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE10: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT)
occurred and software should read the corresponding endpoint queue to determine the endpoint status. If
the corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
26 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE9: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
25 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE8: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
24 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE7: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
23 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE6: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
22 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE5: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
21 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE4: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
20 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE3: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
19 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE2: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
18 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE1: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
17 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ETCE0: Endpoint Transmit Complete Event: Each bit indicates a transmit event (IN/INTERRUPT) occurred
and software should read the corresponding endpoint queue to determine the endpoint status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
16 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE15: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
15 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE14: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
14 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE13: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
13 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE12: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
12 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE11: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
11 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE10: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
10 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE9: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
9 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE8: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
8 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE7: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
7 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE6: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
6 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE5: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
5 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE4: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
4 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE3: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
3 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE2: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
2 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE1: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
1 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
ERCE0: Endpoint Receive Complete Event: Each bit indicates a received event (OUT/SETUP) occurred
and software should read the corresponding endpoint queue to determine the transfer status. If the
corresponding IOC bit is set in the Transfer Descriptor, then this bit will be set simultaneously with the
0 0x0
USBINT. Writing a one clears the corresponding bit in this register. This is only used in device mode.
0 = NOT_COMPLETE
1 = COMPLETE
19.13.8.40 USB2_CONTROLLER_2_USB2D_ENDPTCTRL0_0
TXS: TX Endpoint Stall: Software can write a one to this bit to force the endpoint to return a STALL
handshake to the Host. It will continue returning STALL until the bit is cleared by software or it will
16 X automatically be cleared upon receipt of a new SETUP request.
0 = EP_OK
1 = EP_STALL
RXS: RX Endpoint Stall: Software can write a one to this bit to force the endpoint to return a STALL
handshake to the Host. It will continue returning STALL until the bit is cleared by software or it will
0 X automatically be cleared upon receipt of a new SETUP request.
0 = EP_OK
1 = EP_STALL
19.13.8.41 USB2_CONTROLLER_2_USB2D_ENDPTCTRLn_0
TXE: TX Endpoint Enable. An Endpoint should be enabled only after it has been configured.
23 RW 0x0 0 = DISABLE
1 = ENABLE
TXR: TX Data Toggle Reset: Whenever a configuration event is received for this Endpoint,
software must write a one to this bit in order to synchronize the data PIDs between the Host and
22 RW 0x0 device.
0 = KEEP_GOING
1 = RESET_PID_SEQ
TXI: TX Data Toggle Inhibit: This bit is only used for test and should always be written as zero.
Writing a one to this bit will cause this endpoint to ignore the data toggle sequence and always
21 RW 0x0 transmit DATA0 for a data packet.
0 = DIS_PID_SEQ
1 = ENB_PID_SEQ
TXS: TX Endpoint Stall: This bit will be set automatically upon receipt of a SETUP request if this
Endpoint is not configured as a Control Endpoint. It will be cleared automatically upon receipt of a
SETUP request if this Endpoint is configured as a Control Endpoint. Software can write a one to
16 RW 0x0 this bit to force the endpoint to return a STALL handshake to the Host. It will continue to returning
STALL until this bit is either cleared by software or automatically cleared as above.
0 = EP_OK
1 = EP_STALL
RXE: RX Endpoint Enable. An Endpoint should be enabled only after it has been configured.
7 RW 0x0 0 = DISABLE
1 = ENABLE
RXR: RX Data Toggle Reset: Whenever a configuration event is received for this Endpoint,
software must write a one to this bit in order to synchronize the data PIDs between the host and
6 RW 0x0 device.
0 = KEEP_GOING
1 = RESET_PID_SEQ
RXI: RX Data Toggle Inhibit: This bit is only used for test and should always be written as zero.
Writing a one to this bit will cause this endpoint to ignore the data toggle sequence and always
5 RW 0x0 accept data packet regardless of their data PID.
0 = DIS_PID_SEQ
1 = ENB_PID_SEQ
RXS: RX Endpoint Stall: This bit will be set automatically upon receipt of a SETUP request if this
Endpoint is not configured as a Control Endpoint. It will be cleared automatically upon receipt a
SETUP request if this Endpoint is configured as a Control Endpoint. Software can write a one to
0 RW 0x0 this bit to force the endpoint to return a STALL handshake to the Host. It will continue to returning
STALL until this bit is either cleared by software or automatically cleared as above,
0 = EP_OK
1 = EP_STALL
19.13.9.1 USB3_IF_USB_SUSP_CTRL_0
FAST_WAKEUP_RESP: Enable Fast Response from UTMIP PHY for a Remote Wakeup request
from device. This is used only for cases where wakeup response needs to be within 1 ms of spec.
26 RW 0x0 Used for Host mode ONLY.
0 = DISABLE
1 = ENABLE
UTMIP_SUSPL1_SET: Enable SuspendL1 for UTMIP PHY. Enabling this will only cut off clocks
to the UTMIP logic. The USB PLLs, PllU and UTMIP PLL will still be running.
25 RW 0x0
0 = DISABLE
1 = ENABLE
UHSIC_RESET: Reset going to UHSIC PHY (active high). This should be set to 1 whenever
programming the UHSIC config registers. It should be cleared to 0 after the programming of
UHSIC config registers is done. UHSIC config registers should be programmed only once before
14 RW 0x1 doing any transactions on UHSIC. The UHSIC PHY registers should be programmed while the
UHSIC is in reset.
0 = DISABLE
1 = ENABLE
ICUSB_PHY_ENB: Enable ICUSB PHY mode. Setting this will enable the PLLU output clock
when ICUSB is not in suspend mode.
13 RW 0x0
0 = DISABLE
1 = ENABLE
UTMIP_PHY_ENB: Enable UTMIP PHY mode. Set this to 1 if using UTMIP PHY. Otherwise set
this to 0.
12 RW 0x0
0 = DISABLE
1 = ENABLE
UTMIP_RESET: Reset going to UTMIP PHY (active high). This should be set to 1 whenever
programming the UTMIP config registers. It should be cleared to 0 after the programming of
UTMIP config registers is done. UTMIP config registers should be programmed only once before
11 RW 0x1 doing any transactions on USB. The UTMIP PHY registers should be programmed while UTMIP
is in reset.
0 = DISABLE
1 = ENABLE
USB_SUSP_POL: Polarity of the suspend signal going to the USB PHY. 0 = Active low (default),
1 = Active high. This should not be changed by software.
10 RW 0x0
0 = ACTIVE_LOW
1 = ACTIVE_HIGH
USB_PHY_CLK_VALID_INT_ENB: USB PHY clock valid interrupt enable. If this bit is enabled,
interrupt is generated whenever USB clocks are resumed from a suspend.
9 RW 0x0
0 = DISABLE
1 = ENABLE
USB_PHY_CLK_VALID_INT_STS: USB PHY clock valid interrupt status. This bit is set whenever
the USB PHY clock is woken up from suspend. Software must write a 1 to clear this bit.
8 RO 0x0
0 = UNSET
1 = SET
USB_PHY_CLK_VALID: USB PHY clock valid status. This bit indicates whether the USB PHY is
generating a valid clock to the USB controller. If USB PHY clock is running, this bit is set to 1,
7 RO X else it is set to 0.
0 = UNSET
1 = SET
6 RO X USB_CLKEN: USB AHB clock enable status. Indicates whether the AHB clock to the USB
controller is enabled or not. If AHB clock to USB controller is enabled, this bit is set to 1, else it is
USB_SUSP_CLR: Suspend Clear. Software must write a 1 to this bit to bring the PHY out of
suspend mode. This is used when the software stops the PHY clock during suspend and then
wants to initiate a resume. Software should also write 0 to clear it. NOTE: It is required that
5 RW 0x0
software generate a positive pulse on this bit to guarantee proper operation.
0 = UNSET
1 = SET
USB_WAKE_ON_RESUME_EN: Wake on resume enable. If this bit is enabled, USB will wake up
from suspend whenever a resume event is detected on USB. This is valid for both USB device
2 RW 0x0 and USB host modes.
0 = DISABLE
1 = ENABLE
USB_WAKEUP_INT_STS: USB wakeup interrupt status. This bit is set whenever USB wakes up
from suspend (a wakeup event is generated). Software must write a 1 to clear this bit. Note that
during the wakeup sequence, PHY clocks will be resumed from suspend. Software can check
when the PHY clocks are resumed by reading the bit USB_PHY_CLK_VALID. There is also a
0 RO 0x0 separate interrupt generated when PHY clock is resumed if USB_PHY_CLK_VALID_INT_EN is
set. During the wakeup sequence, first USB_WAKEUP_INT_STS will be set, and it will take some
time for the PHY clock to resume, which can be detected by checking USB_PHY_CLK_VALID.
0 = UNSET
1 = SET
19.13.9.2 USB3_IF_USB_PHY_VBUS_SENSORS_0
§ A_VBUS_VLD
§ A_SESS_VLD
§ B_SESS_VLD
§ B_SESS_END
The debounced status of each sensor can be read from the corresponding _STS bit field of the sensor in this register. The
_CHG_DET field is set to 1 whenever a change is detected in the value of the _STS bit field of the corresponding sensor. If
_INT_EN is set, then an interrupt is generated to the processor. This interrupt can be routed to CPU/AVP by appropriately
writing the USBD bits in the interrupt controller registers.
In case software wants to override the value for a sensor, it can set the corresponding _SW_EN to 1, and set the
corresponding sensor _SW_VALUE to 1 or 0 as per the requirement.
There are two debouncers for each sensor - DEBOUNCE_A and DEBOUNCE_B. The debounce values for them are
controlled by the register UTMIP_DEBOUNCE_CFG0, fields UTMIP_BIAS_DEBOUNCE_A and
UTMIP_BIAS_DEBOUNCE_B. For each sensor, we can select whether to use DEBOUNCE_A or DEBOUNCE_B by setting
the field _DEB_SEL_B to the appropriate value (SEL_A or SEL_B).
Note: Do not set either UTMIP_BIAS_DEBOUNCE_A or UTMIP_BIAS_DEBOUNCE_B to 0x0. If not using one
of the debouncers, keep it at the default value of 0xFFFF.
A_VBUS_VLD_WAKEUP_EN: A_VBUS_VLD wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on A_VBUS_VLD.
30 RW 0x0
0 = DISABLE
1 = ENABLE
A_SESS_VLD_WAKEUP_EN: A_SESS_VLD wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on A_SESS_VLD.
22 RW 0x0
0 = DISABLE
1 = ENABLE
B_SESS_VLD_WAKEUP_EN: B_SESS_VLD wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on B_SESS_VLD.
14 RW 0x0
0 = DISABLE
1 = ENABLE
B_SESS_END_WAKEUP_EN: B_SESS_END wakeup enable. If this bit is enabled, USB will wake
up from suspend whenever a change is detected on B_SESS_END.
6 RW 0x0
0 = DISABLE
1 = ENABLE
B_SESS_END_SW_EN: Enable Software Controlled B_SESS_END. Software sets this bit to drive
the value in B_SESS_END_SW_VALUE to the USB controller.
3 RW 0x0
0 = DISABLE
1 = ENABLE
19.13.9.3 USB3_IF_USB_PHY_VBUS_WAKEUP_ID_0
§ VBUS_WAKEUP
§ ID
§ VDAT_DET
§ VDCD_DET
The debounced status of each sensor can be read from the corresponding _STS bit field of the sensor in this register. The
_CHG_DET field is set to 1 whenever a change is detected in the value of the _STS bit field of the corresponding sensor. If
_INT_EN is set, then an interrupt is generated to the processor. This interrupt can be routed to CPU/AVP by appropriately
writing the USBD bits in the interrupt controller registers.
In case software wants to override the value for a sensor, it can set the corresponding _SW_EN to 1, and set the
corresponding sensor _SW_VALUE to 1 or 0 as per the requirement.
There are two debouncers for each sensor - DEBOUNCE_A and DEBOUNCE_B. The debounce values for them are
controlled by the register UTMIP_DEBOUNCE_CFG0, fields UTMIP_BIAS_DEBOUNCE_A and
UTMIP_BIAS_DEBOUNCE_B. For each sensor, we can select whether to use DEBOUNCE_A or DEBOUNCE_B by setting
the field _DEB_SEL_B to the appropriate value (SEL_A or SEL_B).
Note: Do not set either UTMIP_BIAS_DEBOUNCE_A or UTMIP_BIAS_DEBOUNCE_B to 0x0. If not using one
of the debouncers, keep it at the default value of 0xFFFF.
There are debouncers for VDAT_DET and VDCD_DET. These use separate debouncers - CHRG_DEBOUNCE_PERIOD_A
and CHRG_DEBOUNCE_PERIOD_B. The debounce values for them are controlled by the register
UTMIP_CHRG_DEB_CFG0, fields UTMIP_CHRG_DEBOUNCE_PERIOD_A and UTMIP_CHRG_DEBOUNCE_PERIOD_B.
For each sensor, we can select whether to use HRG_DEBOUNCE_PERIOD_A or CHRG_DEBOUNCE_PERIOD_B by setting
the field _DEB_SEL_B to the appropriate value (SEL_A or SEL_B).
DIV_DET_EN: Battery charger divider detection enable. This goes to the USB2OTG pad.
31 RW 0x0 0 = DISABLE
1 = ENABLE
VDCD_DET_DEB_SEL_B: VCDT_DET debounce A/B select. Selects the debounce value from
UTMIP_CHRG_DEBOUNCE_PERIOD_A or UTMIP_CHRG_DEBOUNCE_PERIOD_B from the
29 RW 0x0 register UTMIP_CHRG_DEB_CFG0.
0 = SEL_A
1 = SEL_B
VDCD_DET_SW_VALUE: VDCD_DET software value. Software should write the appropriate value
(1/0) to set/unset the VDCD_DET status. This is only valid when VDCD_DET_SW_EN is set.
28 RW 0x0
0 = UNSET
1 = SET
VOP_DIV2P7_DET:This read-only status bit is from the battery charging divider circuit of USB2OTG
pad
23 RO X
0 = UNSET
1 = SET
VOP_DIV2P0_DET:This read-only status bit is from the battery charging divider circuit of USB2OTG
pad
22 RO X
0 = UNSET
1 = SET
VDAT_DET_DEB_SEL_B: VDAT_DET debounce A/B select. Selects between the two debounce
values UTMIP_CHRG_DEBOUNCE_PERIOD_A or UTMIP_CHRG_DEBOUNCE_PERIOD_B from
21 RW 0x0 the register UTMIP_DEBOUNCE_CFG0.
0 = SEL_A
1 = SEL_B
VDAT_DET_SW_VALUE: VDAT_DET software value. Software should write the appropriate value
(1/0) to set/unset the VDAT_DET status. This is only valid when VDAT_DET_SW_EN is set.
20 RW 0x0
0 = UNSET
1 = SET
VDAT_DET_SW_EN: Enable Software Controlled VDAT_DET. Software sets this bit to drive the
value in VDAT_DET_SW_VALUE to the USB controller.
19 RW 0x0
0 = DISABLE
1 = ENABLE
VON_DIV2P7_DET: This read-only status bit is from the battery charging divider circuit of
USB2OTG pad
15 RO X
0 = UNSET
1 = SET
VON_DIV2P0_DET: This read-only status bit is from the battery charging divider circuit of
USB2OTG pad generated whenever VDAT_DET_CHG_DET is set to 1.
14 RO X
0 = UNSET
1 = SET
VBUS_WAKEUP_CHG_DET: VBUS wakeup change detect. This field is set by hardware whenever
a change is detected in the value of VBUS_WAKEUP. software writes a 1 to clear it.
9 RO 0x0
0 = UNSET
1 = SET
ID_DEB_SEL_B: ID debounce A/B select. Selects between the two debounce values
UTMIP_BIAS_DEBOUNCE_A or UTMIP_BIAS_DEBOUNCE_B from the register
5 RW 0x0 UTMIP_DEBOUNCE_CFG0.
0 = SEL_A
1 = SEL_B
ID_SW_VALUE: ID software value. Software should write the appropriate value (1/0) to set/unset
the ID status. This is only valid when ID_SW_EN is set.
4 RW 0x0
0 = UNSET
1 = SET
ID_SW_EN: Enable Software Controlled ID. Software sets this bit to drive the value in
ID_SW_VALUE to the USB controller
3 RW 0x0
0 = DISABLE
1 = ENABLE
ID_CHG_DET: ID change detect. This field is set by hardware whenever a change is detected in the
value of ID. software writes a 1 to clear it
1 RO 0x0
0 = UNSET
1 = SET
19.13.9.4 USB3_IF_USB_PHY_ALT_VBUS_STS_0
19.13.9.5 USB3_IF_ICUSB_XCVR_CFG_0
19.13.9.6 USB3_IF_USB_INTER_PKT_DELAY_CTRL_0
IP_DELAY_TX2TX_HS: HS Tx to Tx inter-packet delay. This is valid only for the UTMIP PHY. Software
6:0 0x12
should not change this.
19.13.9.7 USB3_IF_USB_RSM_DLY_0
TIME_TO_RESUME: Send the resume back in number of 60 MHz cycles. Default gives 900 µs delay.
15:0 0x6978
Only applicable in host mode.
19.13.9.8 USB3_IF_ICUSB_PADCTLS_0
19.13.9.9 USB3_IF_SPARE_0
Spare Register
Offset: 0x498 | Read/Write: R/W | Reset: 0b11111111111111110000000000000000
19.13.9.10 USB3_IF_USB1_NEW_CONTROL_0
MEM_ALIGNMENT_MUX_EN: Mux to select between Tegra 3 style (0) and Tegra K1 style (1) DMA
request generation mechanism
1 0x0
0 = DISABLE
1 = ENABLE
19.13.10.1 XUSB_HOST_AXI_BAR0_SZ_0
Offset: 0x0 | Read/Write: R/W | Reset: 0x00000008 (0bxxxxxxxxxxxx00000000000000001000)
19:0 0x8 AXI_BAR0_SIZE: The size of the address range associated with BARi is in 4K increments. Value of 0
signifies BARi is not used.
19.13.10.2 XUSB_HOST_AXI_BAR1_SZ_0
Offset: 0x4 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxx00000000000000000000)
19:0 0x0 AXI_BAR1_SIZE: The size of the address range associated with BARi is in 4K increments. Value of 0
signifies BARi is not used.
19.13.10.3 XUSB_HOST_AXI_BAR2_SZ_0
Offset: 0x8 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxx00000000000000000000)
19:0 0x0 AXI_BAR2_SIZE: The size of the address range associated with BARi is in 4K increments. Value of 0
signifies BARi is not used.
19.13.10.4 XUSB_HOST_AXI_BAR3_SZ_0
Offset: 0xc | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxx00000000000000000000)
19:0 0x0 AXI_BAR3_SIZE: The size of the address range associated with BARi is in 4K increments. Value of 0
signifies BARi is not used.
19.13.10.5 XUSB_HOST_AXI_BAR0_START_0
Offset: 0x40 | Read/Write: R/W | Reset: 0x70090000 (0b01110000000010010000xxxxxxxxxxxx)
31:12 0x70090 AXI_BAR0_START: The start of the AXI address space for BARi. The AXI target address is
compared to start/size for each BAR to determine if the access is to that BAR.
19.13.10.6 XUSB_HOST_AXI_BAR1_START_0
Offset: 0x44 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000xxxxxxxxxxxx)
31:12 0x0 AXI_BAR1_START: The start of AXI address space for BARi. The AXI target address is compared to
start/size for each BAR to determine if the access is to that BAR.
19.13.10.7 XUSB_HOST_AXI_BAR2_START_0
Offset: 0x48 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000xxxxxxxxxxxx)
31:12 0x0 AXI_BAR2_START: The start of the AXI address space for BARi. The AXI target address is compared
to start/size for each BAR to determine if the access is to that BAR.
19.13.10.8 XUSB_HOST_AXI_BAR3_START_0
Offset: 0x4c | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000xxxxxxxxxxxx)
31:12 0x0 AXI_BAR3_START: The start of the AXI address space for BARi. The AXI target address is compared
to start/size for each BAR to determine if the access is to that BAR.
19.13.10.9 XUSB_HOST_FPCI_BAR0_0
Offset: 0x80 | Read/Write: R/W | Reset: 0x00700901 (0b0000000001110000000010010000xxx1)
31:4 0x70090 FPCI_BAR0_START: The start of the FPCI address space mapped into the BARi range of PCI
memory space. The 40-bit FPCI address is determined by a 12-bit left shift of the value of this register.
0 0x1 FPCI_BAR0_ACCESS_TYPE: Indicates if the address region is memory mapped versus configuration
or I/O space.
0 = memory-mapped access (PW only)
1 = I/O or config access (NPW only)
19.13.10.10 XUSB_HOST_FPCI_BAR1_0
Offset: 0x84 | Read/Write: R/W | Reset: 0x00000001 (0b0000000000000000000000000000xxx1)
31:4 0x0 FPCI_BAR1_START: The start of FPCI address space mapped into the BARi range of PCI memory
space. The 40-bit FPCI address is determined by a 12-bit left shift of the value of this register.
0 0x1 FPCI_BAR1_ACCESS_TYPE: Indicates if the address region is memory mapped versus configuration or
I/O space.
0 = Memory-mapped access (PW only)
1 = I/O or config access (NPW only)
19.13.10.11 XUSB_HOST_FPCI_BAR2_0
Offset: 0x88 | Read/Write: R/W | Reset: 0x00000001 (0b0000000000000000000000000000xxx1)
31:4 0x0 FPCI_BAR2_START: The start of FPCI address space mapped into the BARi range of PCI memory
space. The 40-bit FPCI address is determined by a 12-bit left shift of the value of this register.
0 0x1 FPCI_BAR2_ACCESS_TYPE: Indicates if the address region is memory mapped versus configuration
or I/O space.
0 = Memory-mapped access (PW only)
1 = I/O or config access (NPW only)
19.13.10.12 XUSB_HOST_FPCI_BAR3_0
Offset: 0x8c | Read/Write: R/W | Reset: 0x00000001 (0b0000000000000000000000000000xxx1)
31:4 0x0 FPCI_BAR3_START: The start of FPCI address space mapped into the BARi range of PCI memory
space. The 40-bit FPCI address is determined by a 12-bit left shift of the value of this register.
0 0x1 FPCI_BAR3_ACCESS_TYPE: Indicates if the address region is memory mapped versus configuration or
I/O space.
0 = Memory-mapped access (PW only)
1 = I/O or config access (NPW only)
19.13.10.13 XUSB_HOST_MSI_BAR_SZ_0
19:0 0x0 MSI_BAR_SIZE: The size of the address range associated with MSI BAR is in 4K increments. Value of 0
signifies BAR is not used.
19.13.10.14 XUSB_HOST_MSI_AXI_BAR_ST_0
31:12 0x0 MSI_AXI_BAR_START: The start of the upstream AXI address space for MSI BAR. The upstream FPCI
address is compared to start/1KB range for the MSI BAR to determine if the access is MSI. Bits 31:12 of
MSI BAR start correspond to AXI address bits 31:12.
19.13.10.15 XUSB_HOST_MSI_FPCI_BAR_ST_0
31:4 0x0 MSI_FPCI_BAR_START: The start of the upstream FPCI address space for MSI BAR. The upstream
FPCI address is compared to start/1KB range for MSI BAR to determine if the access is MSI. Bits 31:4 of
MSI BAR start correspond to UFPCI address bits 39:12.
19.13.10.16 XUSB_HOST_MSI_VEC0_0
31:0 0x0 MSI_VECTOR0: Each vector register corresponds to 32 of the possible 256 MSI vectors.VECTOR0
corresponds to MSI vectors 31-0. Vector7 corresponds to MSI vectors 255-223.When an upstream MSI
is sent, the bit corresponding to the MSI vector is set to 1 by hardware if the corresponding enable bit is
1.The bit is set to 0 if a 1 is written to its location.
19.13.10.17 XUSB_HOST_MSI_VEC1_0
Offset: 0x104 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_VECTOR1: Each vector register corresponds to 32 of the possible 256 MSI vectors.VECTOR0
corresponds to MSI vectors 31-0. Vector7 corresponds to MSI vectors 255-223.When an upstream MSI
is sent, the bit corresponding to the MSI vector is set to 1 by hardware if the corresponding enable bit is
1.The bit is set to 0 if a 1 is written to its location.
19.13.10.18 XUSB_HOST_MSI_VEC2_0
Offset: 0x108 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_VECTOR2: Each vector register corresponds to 32 of the possible 256 MSI vectors.VECTOR0
corresponds to MSI vectors 31-0. Vector7 corresponds to MSI vectors 255-223.When an upstream MSI
is sent, the bit corresponding to the MSI vector is set to 1 by hardware if the corresponding enable bit is
1.The bit is set to 0 if a 1 is written to its location.
19.13.10.19 XUSB_HOST_MSI_VEC3_0
Offset: 0x10c | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_VECTOR3: Each vector register corresponds to 32 of the possible 256 MSI vectors.VECTOR0
corresponds to MSI vectors 31-0. Vector7 corresponds to MSI vectors 255-223.When an upstream MSI
is sent, the bit corresponding to the MSI vector is set to 1 by hardware if the corresponding enable bit is
1.The bit is set to 0 if a 1 is written to its location.
19.13.10.20 XUSB_HOST_MSI_VEC4_0
Offset: 0x110 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_VECTOR4: Each vector register corresponds to 32 of the possible 256 MSI vectors.VECTOR0
corresponds to MSI vectors 31-0. Vector7 corresponds to MSI vectors 255-223.When an upstream MSI
is sent, the bit corresponding to the MSI vector is set to 1 by hardware if the corresponding enable bit is
1.The bit is set to 0 if a 1 is written to its location.
19.13.10.21 XUSB_HOST_MSI_VEC5_0
Offset: 0x114 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_VECTOR5: Each vector register corresponds to 32 of the possible 256 MSI vectors.VECTOR0
corresponds to MSI vectors 31-0. Vector7 corresponds to MSI vectors 255-223.When an upstream MSI
is sent, the bit corresponding to the MSI vector is set to 1 by hardware if the corresponding enable bit is
1.The bit is set to 0 if a 1 is written to its location.
19.13.10.22 XUSB_HOST_MSI_VEC6_0
Offset: 0x118 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_VECTOR6: Each vector register corresponds to 32 of the possible 256 MSI vectors.VECTOR0
corresponds to MSI vectors 31-0. Vector7 corresponds to MSI vectors 255-223.When an upstream MSI
is sent, the bit corresponding to the MSI vector is set to 1 by hardware if the corresponding enable bit is
1.The bit is set to 0 if a 1 is written to its location.
19.13.10.23 XUSB_HOST_MSI_VEC7_0
Offset: 0x11c | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_VECTOR7: Each vector register corresponds to 32 of the possible 256 MSI vectors.VECTOR0
corresponds to MSI vectors 31-0. Vector7 corresponds to MSI vectors 255-223.When an upstream MSI
is sent, the bit corresponding to the MSI vector is set to 1 by hardware if the corresponding enable bit is
1.The bit is set to 0 if a 1 is written to its location.
19.13.10.24 XUSB_HOST_MSI_EN_VEC0_0
31:0 0x0 MSI_ENABLE_VECTOR0: Each vector register corresponds to the enable bit for 32 of the possible 256
19.13.10.25 XUSB_HOST_MSI_EN_VEC1_0
Offset: 0x144 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_ENABLE_VECTOR1: Each vector register corresponds to the enable bit for 32 of the possible 256
MSI vectors. ENABLE VECTOR0 corresponds to enable bits for MSI vectors 31-0. Vector7 corresponds
to enable bits for MSI vectors 255-223.When an upstream MSI is sent, the bit corresponding to the MSI
vector is set to 1 by hardware if the corresponding enable bit is 1.
19.13.10.26 XUSB_HOST_MSI_EN_VEC2_0
Offset: 0x148 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_ENABLE_VECTOR2: Each vector register corresponds to the enable bit for 32 of the possible 256
MSI vectors. ENABLE VECTOR0 corresponds to enable bits for MSI vectors 31-0. Vector7 corresponds
to enable bits for MSI vectors 255-223.When an upstream MSI is sent, the bit corresponding to the MSI
vector is set to 1 by hardware if the corresponding enable bit is 1.
19.13.10.27 XUSB_HOST_MSI_EN_VEC3_0
Offset: 0x14c | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_ENABLE_VECTOR3: Each vector register corresponds to the enable bit for 32 of the possible 256
MSI vectors. ENABLE VECTOR0 corresponds to enable bits for MSI vectors 31-0. Vector7 corresponds
to enable bits for MSI vectors 255-223.When an upstream MSI is sent, the bit corresponding to the MSI
vector is set to 1 by hardware if the corresponding enable bit is 1.
19.13.10.28 XUSB_HOST_MSI_EN_VEC4_0
Offset: 0x150 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_ENABLE_VECTOR4: Each vector register corresponds to the enable bit for 32 of the possible 256
MSI vectors. ENABLE VECTOR0 corresponds to enable bits for MSI vectors 31-0. Vector7 corresponds
to enable bits for MSI vectors 255-223.When an upstream MSI is sent, the bit corresponding to the MSI
vector is set to 1 by hardware if the corresponding enable bit is 1.
19.13.10.29 XUSB_HOST_MSI_EN_VEC5_0
Offset: 0x154 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_ENABLE_VECTOR5: Each vector register corresponds to the enable bit for 32 of the possible 256
MSI vectors. ENABLE VECTOR0 corresponds to enable bits for MSI vectors 31-0. Vector7 corresponds
to enable bits for MSI vectors 255-223.When an upstream MSI is sent, the bit corresponding to the MSI
vector is set to 1 by hardware if the corresponding enable bit is 1.
19.13.10.30 XUSB_HOST_MSI_EN_VEC6_0
Offset: 0x158 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_ENABLE_VECTOR6: Each vector register corresponds to the enable bit for 32 of the possible 256
MSI vectors. ENABLE VECTOR0 corresponds to enable bits for MSI vectors 31-0. Vector7 corresponds
to enable bits for MSI vectors 255-223.When an upstream MSI is sent, the bit corresponding to the MSI
vector is set to 1 by hardware if the corresponding enable bit is 1.
19.13.10.31 XUSB_HOST_MSI_EN_VEC7_0
Offset: 0x15c | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
31:0 0x0 MSI_ENABLE_VECTOR7: Each vector register corresponds to the enable bit for 32 of the possible 256
MSI vectors. ENABLE VECTOR0 corresponds to enable bits for MSI vectors 31-0. Vector7 corresponds
to enable bits for MSI vectors 255-223.When an upstream MSI is sent, the bit corresponding to the MSI
vector is set to 1 by hardware if the corresponding enable bit is 1.
19.13.10.32 XUSB_HOST_CONFIGURATION_0
Configuration
Offset: 0x180 | Read/Write: R/W | Reset: 0x800X8X40 (0b1xxxxxxxxxxx1xxx10xxxxxx01000000)
31 RW 0x1 CLKEN_OVERRIDE: This can override the clock enable in case of a malfunction.
19 RW 0x1 PW_NO_DEVSEL_ERR_CYA: Setting this bit disables detection of DECERR due to no DEVSEL for
DS PWs only.
What are DS and PW? PW= pass write?
18 RO X INITIATOR_READ_IDLE: This read-only bit provides status reads on AFI upstream A value of 1b
indicates there are no outstanding reads to the initiator.
17 RO X INITIATOR_WRITE_IDLE: This read-only bit provides status writes on AFI upstream A value of 1b
indicates there are no outstanding writes to the initiator.
15 RW 0x1 WDATA_LEAD_CYA: Used to en(dis)able the handling of write data ahead of requests on IPFS AXI
target.
14 RW 0x0 WR_INTRLV_CYA: Used to en(dis)able the handling of interleaved write requests on IPFS AXI
target.
11 RO X TARGET_READ_IDLE: This read-only bit provides status reads to IPFS target. A value of 1b
indicates there are no outstanding reads to the downstream FPCI.
10 RO X TARGET_WRITE_IDLE: This read-only bit provides status writes to IPFS target. A value of 1b
indicates there are no outstanding writes to the downstream FPCI.
9 RO X MSI_VEC_EMPTY: This read-only bit provides status on whether MSI Vector registers have any
active bits valid or not.
5 RW 0x0 UFPCI_PASSPW: Input to the upstream FPCI. Allows the upstream FPCI reads to pass writes.
4 RW 0x0 UFPCI_PWPASSNPW: Used for the upstream FPCI. Allows the upstream FPCI PWs to pass
NPWs.
3 RW 0x0 DFPCI_PWPASSNPW: Used for the downstream FPCI. Allows the downstream FPCI PWs to pass
NPWs.
2 RW 0x0 DFPCI_RSPPASSPW: Input to the downstream FPCI. Allows the downstream FPCI responses to
pass writes
1 RW 0x0 DFPCI_PASSPW: Input to the downstream FPCI. Allow the downstream FPCI reads to pass writes.
0 RW 0x0 EN_FPCI: When the IPFS device block is disabled, it is completely invisible on the IPFS bus; i.e., it
does not even process IPFS configuration accesses.
19.13.10.33 XUSB_HOST_FPCI_ERROR_MASKS_0
2 0x0 MASK_FPCI_MASTER_ABORT: This bit allows an FPCI error to be forwarded to an AXI response when
the FPCI error response indicates a Master Abort.
1 = Forward error
0 = Return AXI OKAY response (2'b0)
1 0x0 MASK_FPCI_DATA_ERROR: This bit allows an FPCI error to be forwarded to an AXI response when the
FPCI error response indicates a Data Error.
1 = Forward error
0 = Return AXI OKAY response (2'b0)
0 0x0 MASK_FPCI_TARGET_ABORT: This bit allows an FPCI error to be forwarded to an AXI response when
FPCI error response indicates a Target Abort. This bit also covers a decode error generated when there is
no DEVSEL received.
1 = Forward error
0 = Return AXI OKAY response (2'b0)
19.13.10.34 XUSB_HOST_INTR_MASK_0
Interrupt Masks
Offset: 0x188 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxx0xxxxxxx0xxxxxxx0)
16 0x0 IP_INT_MASK: IP (SATA/AZA) interrupt to the CPU complex gated by the mask.
19.13.10.35 XUSB_HOST_INTR_CODE_0
Interrupt Control
Offset: 0x18c | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxx00000)
4:0 0x0 INT_CODE: Eight interrupt codes. If the code is 0, logging of the next interrupt is enabled
0 = INT_CODE_CLEAR : Clear interrupt code
1 = INT_CODE_INI_SLVERR: Interrupt code for CPU AXI SLVERR response to IPFS
2 = INT_CODE_INI_DECERR: Interrupt code for CPU AXI DECERR response to IPFS
3 = INT_CODE_TGT_SLVERR: Interrupt code for PCIe endpoint FPCI target abort or data error response
to IPFS
4 = INT_CODE_TGT_DECERR: Interrupt code for PCIe2 FPCI master abort response to IPFS
5 = INT_CODE_TGT_WRERR: Interrupt code for bufferable write to non-posted write address region
6 = RSVD1: Reserved
19.13.10.36 XUSB_HOST_INTR_SIGNATURE_0
Interrupt Signature
Offset: 0x190 | Read/Write: R/W | Reset: 0x00000000 (0b000000000000000000000000000000x0)
31:2 0x0 INT_INFO: For interrupt codes 1-5/7-8, this field contains address bits [31:2], either in FPCI memory
space or AXI space. For FPCI generated errors, the field contains the FPCI address. For AXI/IPFS
generated errors, the field contains the AXI address.
0 0x0 DIR: Indicates the direction of the AXI/FPCI transaction. 1=RD/0=WRIF signature type is 6 (sideband
message), this field is 1.
0 = WRITE: Interrupt due to a write transaction
1 = READ: Interrupt due to a read transaction
19.13.10.37 XUSB_HOST_UPPER_FPCI_ADDR_0
7:0 0x0 INT_INFO_UPPER: These 8 bits are the upper byte of the captured FPCI address (bits [39:32]) when the
interrupt code is 3, 4, or 7. These bits determine the region in the Hypertransport Address Map that was
accessed.
19.13.10.38 XUSB_HOST_IPFS_INTR_ENABLE_0
19.13.10.39 XUSB_HOST_UFPCI_CONFIG_0
4:0 0x2 UNITID_T0C0: Upstream FPCI Unit ID for controller 0. HyperTransport, upstream FPCI request
19.13.10.40 XUSB_HOST_CFG_REVID_0
CFG_REVID Register
Offset: 0x1a0 | Read/Write: R/W | Reset: 0x000X10XX (0bxxxxxxxxxxxxxxxxxx0100xxxxxxx1xx)
11 RW 0x0 CFG_REVID_WRITE_ENABLE: MCP: The enable to override the rev ID. It can be
programmable.
0 = CLEAR
1 = SET
10 RW 0x0 CFG_REVID_OVERRIDE: MCP: Provides a way to override the current revision ID. It can be
programmable.
0 = DISABLE
1 = ENABLE
3 RO X DEV2LEG_COH_REQUEST_PEND: MCP comment: Tells the leg block that a coherent request
is pending.
0 = NO
1 = YES
19.13.10.41 XUSB_HOST_FPCI_TIMEOUT_0
FPCI_TIMEOUT Register
Offset: 0x1a4 | Read/Write: R/W | Reset: 0x000f0000 (0bxxxxxxxxxxxx11110000000000000000)
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1215
Tegra K1 Technical Reference Manual
USB Complex
19:0 0xf0000 SM2ALL_FPCI_TIMEOUT_THRESH: This field sets the timeout threshold value for the FPCI bus. It
starts counting for each queue (ISO/NISO- RD/WR) with a pending request in the FPCI wrapper, the
count resets when the requests are popped.
19.13.10.42 XUSB_HOST_TOM_0
19.13.10.43 XUSB_HOST_INITIATOR_ISO_PW_RESP_PENDING_0
19.13.10.44 XUSB_HOST_INITIATOR_NISO_PW_RESP_PENDING_0
19.13.10.45 XUSB_HOST_INTR_STATUS_0
19.13.10.46 XUSB_HOST_DFPCI_BEN_0
31 0x0 EN_DFPCI_BEN: Enable bit for BEN. When set, the programmed BE is sent on the DFPCI bus
19.13.10.47 XUSB_HOST_CLKGATE_HYSTERESIS_0
Offset: 0x1bc | Read/Write: R/W | Reset: 0x00000014 (0bxxxxxxxxxxxxxxxxxxxxxxxx00010100)
7:0 0x14 CLK_DISABLE_CNT: Number of IPFS clock cycles to wait after clock gating criteria are met to disable
IPFS/FPCI clocks
19.13.10.48 XUSB_HOST_XUSB_HOST_MCCIF_FIFOCTRL_0
Note: The FIFO timing aspects of this register are no longer supported, but are retained for
software compatibility.
The clock override/ovr_mode fields of this register control the second-level clock gating for the client and MC side of the
MCCIF. All clock gating is enabled by default.
§ With wclk/rclk override mode = LEGACY, the clock reverts to the legacy mode of operation (where the clock is on
whenever the client clock is enabled).
§ With wclk/rclk override mode = ON, the clock is always on inside the MCCIF and PC.
A '1' written to the cclk override field keeps the client's clock always on inside the MCCIF.Offset: 0x1dc | Read/Write: R/W |
Reset: 0x00000000 (0bxxxxxxxxxxx00000xxxxxxxxxxxx0000)
XUSB_HOST_RCLK_OVR_MODE:
20 LEGACY 0 = LEGACY
1 = ON
XUSB_HOST_WCLK_OVR_MODE:
19 LEGACY 0 = LEGACY
1 = ON
18 0x0 XUSB_HOST_CCLK_OVERRIDE
17 0x0 XUSB_HOST_RCLK_OVERRIDE
16 0x0 XUSB_HOST_WCLK_OVERRIDE
3 DISABLE XUSB_HOST_MCCIF_RDCL_RDFAST:
0 = DISABLE
1 = ENABLE
2 DISABLE XUSB_HOST_MCCIF_WRMC_CLLE2X:
0 = DISABLE
1 = ENABLE
1 DISABLE XUSB_HOST_MCCIF_RDMC_RDFAST:
0 = DISABLE
1 = ENABLE
0 DISABLE XUSB_HOST_MCCIF_WRCL_MCLE2X:
0 = DISABLE
1 = ENABLE
19.13.11.1 XUSB_HOST_ORDERING_RULES_0
Offset: 0x1e0 | Read/Write: R/W | Reset: 0x00000000 (0b000)
19.13.11.2 XUSB_HOST_A2F_UFPCI_CFG0_0
Offset: 0x1e4 | Read/Write: R/W | Reset: 0x00000050 (0b00000000xxxxx0000000000001010000)
7 0x0 STATIC_WAIT_CLAMP_EN
6 0x1 STATIC_UFPCI_UFA_DYN_BLOCK_EN
5 0x0 STATIC_UFPCI_UFA_BLK_COHERENT
1 0x0 STATIC_CYA_UFA_ARB
0 0x0 STATIC_CYA_BACK2BACK_UPSTREAM_BLOCK
19.13.11.3 XUSB_HOST_A2F_UFPCI_CFG1_0
Offset: 0x1e8 | Read/Write: R/W | Reset: 0x00000000 (0b00000000)
19.13.12.1 XUSB_PADCTL_BOOT_MEDIA_0
Offset: 0x0 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxxxxxxxx00000)
0 0x0 BOOT_MEDIA_ENABLE:
0 = NO
1 = YES
19.13.12.2 XUSB_PADCTL_USB2_PAD_MUX_0
Offset: 0x4 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxx00x0xxxxxx000000)
15 0x0 USB2_HSIC_PAD_PORT1:
0 = SNPS
1 = XUSB
14 0x0 USB2_HSIC_PAD_PORT0:
0 = SNPS
1 = XUSB
12 0x0 USB2_ULPI_PAD_PORT:
0 = SNPS
1 = XUSB
19.13.12.3 XUSB_PADCTL_USB2_PORT_CAP_0
Offset: 0x8 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxx00xxxxxxxxxxxx000000000000)
25 0x0 ULPI_PORT_INTERNAL:
0 = NO
1 = YES
24 0x0 ULPI_PORT_CAP:
0 = ULPI_MASTER
1 = ULPI_PHY
11 0x0 PORT2_REVERSE_ID:
0 = NO
1 = YES
PORT2_INTERNAL:
10 0x0 0 = NO
1 = YES
PORT2_CAP:
0 = DISABLED
9:8 0x0 1 = HOST_ONLY
2 = DEVICE_ONLY
3 = OTG_CAP
7 0x0 PORT1_REVERSE_ID:
0 = NO
1 = YES
6 0x0 PORT1_INTERNAL:
0 = NO
1 = YES
3 0x0 PORT0_REVERSE_ID:
0 = NO
1 = YES
2 0x0 PORT0_INTERNAL:
0 = NO
1 = YES
19.13.12.4 XUSB_PADCTL_SNPS_OC_MAP_0
Offset: 0xc | Read/Write: R/W | Reset: 0x000001ff (0bxxxxxxxxxxxxxxxxxxxxxxx111111111)
0 = OC_DETECTED0
1 = OC_DETECTED1
2 = OC_DETECTED2
3 = OC_DETECTED3
4 = OC_DETECTED_VBUS_PAD0
5 = OC_DETECTED_VBUS_PAD1
6 = OC_DETECTED_VBUS_PAD2
7 = OC_DETECTION_DISABLED
19.13.12.5 XUSB_PADCTL_USB2_OC_MAP_0
Offset: 0x10 | Read/Write: R/W | Reset: 0x000001ff (0bxxxxxxxxxxxxxxxxxxxxxxx111111111)
PORT2_OC_PIN:
0 = OC_DETECTED0
1 = OC_DETECTED1
2 = OC_DETECTED2
8:6 0x7 3 = OC_DETECTED3
4 = OC_DETECTED_VBUS_PAD0
5 = OC_DETECTED_VBUS_PAD1
6 = OC_DETECTED_VBUS_PAD2
7 = OC_DETECTION_DISABLED
19.13.12.6 XUSB_PADCTL_SS_PORT_MAP_0
Offset: 0x14 | Read/Write: R/W | Reset: 0x00000077 (0bxxxxxxxxxxxxxxxxxxxxxxxx01110111)
7 0x0 PORT1_INTERNAL:
0 = NO
1 = YES
3 0x0 PORT0_INTERNAL:
0 = NO
1 = YES
19.13.12.7 XUSB_PADCTL_OC_DET_0
Offset: 0x18 | Read/Write: R/W | Reset: 0x0000fce0 (0bx0000000x00000001111110011100000)
OC_DETECTED_INTERRUPT_ENABLE_VBUSPAD2:
30 0x0 0 = NO
1 = YES
29 0x0 OC_DETECTED_INTERRUPT_ENABLE_VBUSPAD1:
0 = NO
1 = YES
28 0x0 OC_DETECTED_INTERRUPT_ENABLE_VBUSPAD0:
0 = NO
1 = YES
27 0x0 OC_DETECTED_INTERRUPT_ENABLE3:
0 = NO
1 = YES
26 0x0 OC_DETECTED_INTERRUPT_ENABLE2:
0 = NO
1 = YES
25 0x0 OC_DETECTED_INTERRUPT_ENABLE1:
0 = NO
1 = YES
24 0x0 OC_DETECTED_INTERRUPT_ENABLE0:
0 = NO
1 = YES
OC_DETECTED_VBUS_PAD2:
22 0x0 0 = NO
1 = YES
21 0x0 OC_DETECTED_VBUS_PAD1:
0 = NO
1 = YES
20 0x0 OC_DETECTED_VBUS_PAD0:
0 = NO
1 = YES
19 0x0 OC_DETECTED3:
0 = NO
1 = YES
18 0x0 OC_DETECTED2:
0 = NO
1 = YES
17 0x0 OC_DETECTED1:
0 = NO
1 = YES
16 0x0 OC_DETECTED0:
0 = NO
1 = YES
9 0x0 VBUS_ENABLE1:
0 = NO
1 = YES
8 0x0 VBUS_ENABLE0:
0 = NO
1 = YES
VBUS_ENABLE2_OC_MAP:
0 = OC_DETECTED0
1 = OC_DETECTED1
2 = OC_DETECTED2
7:5 0x7 3 = OC_DETECTED3
4 = OC_DETECTED_VBUS_PAD0
5 = OC_DETECTED_VBUS_PAD1
6 = OC_DETECTED_VBUS_PAD2
7 = OC_DETECTION_DISABLED
VBUS_ENABLE2:
4 0x0 0 = NO
1 = YES
3 0x0 SET_OC_DETECTED3:
0 = NO
1 = YES
2 0x0 SET_OC_DETECTED2:
0 = NO
1 = YES
1 0x0 SET_OC_DETECTED1:
0 = NO
1 = YES
0 0x0 SET_OC_DETECTED0:
0 = NO
1 = YES
19.13.12.8 XUSB_PADCTL_ELPG_PROGRAM_0
Offset: 0x1c | Read/Write: R/W | Reset: 0x07770000 (0bxxxxx111x111x11100x0000000x00000)
AUX_MUX_LP0_VCORE_DOWN:
26 0x1 0 = NO
1 = YES
25 0x1 AUX_MUX_LP0_CLAMP_EN_EARLY:
0 = NO
AUX_MUX_LP0_CLAMP_EN:
24 0x1 0 = NO
1 = YES
22 0x1 SSP1_ELPG_VCORE_DOWN:
0 = NO
1 = YES
21 0x1 SSP1_ELPG_CLAMP_EN_EARLY:
0 = NO
1 = YES
20 0x1 SSP1_ELPG_CLAMP_EN:
0 = NO
1 = YES
18 0x1 SSP0_ELPG_VCORE_DOWN:
0 = NO
1 = YES
17 0x1 SSP0_ELPG_CLAMP_EN_EARLY:
0 = NO
1 = YES
16 0x1 SSP0_ELPG_CLAMP_EN:
0 = NO
1 = YES
15 0x0 SS_PORT1_WAKEUP_EVENT:
0 = NO
1 = YES
14 0x0 SS_PORT0_WAKEUP_EVENT:
0 = NO
1 = YES
12 0x0 USB2_HSIC_PORT1_WAKEUP_EVENT:
0 = NO
1 = YES
11 0x0 USB2_HSIC_PORT0_WAKEUP_EVENT:
0 = NO
1 = YES
USB2_PORT2_WAKEUP_EVENT:
10 0x0 0 = NO
1 = YES
9 0x0 USB2_PORT1_WAKEUP_EVENT:
0 = NO
1 = YES
8 0x0 USB2_PORT0_WAKEUP_EVENT:
0 = NO
1 = YES
7 0x0 SS_PORT1_WAKE_INTERRUPT_ENABLE:
0 = NO
1 = YES
6 0x0 SS_PORT0_WAKE_INTERRUPT_ENABLE:
0 = NO
1 = YES
4 0x0 USB2_HSIC_PORT1_WAKE_INTERRUPT_ENABLE:
0 = NO
1 = YES
3 0x0 USB2_HSIC_PORT0_WAKE_INTERRUPT_ENABLE:
0 = NO
USB2_PORT2_WAKE_INTERRUPT_ENABLE:
2 0x0 0 = NO
1 = YES
1 0x0 USB2_PORT1_WAKE_INTERRUPT_ENABLE:
0 = NO
1 = YES
0 0x0 USB2_PORT0_WAKE_INTERRUPT_ENABLE:
0 = NO
1 = YES
19.13.12.9 XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD0_CTL0_0
Offset: 0x20 | Read/Write: R/W | Reset: 0x00XX00XX (0b000000000x000x000000000000x000x1)
31 RW 0x0 GENERATE_SRP:
0 = NO
1 = YES
30 RW 0x0 SRP_INTR_EN:
0 = NO
1 = YES
29 RW 0x0 SRP_DETECTED:
0 = NO
1 = YES
28 RW 0x0 SRP_DETECT_EN:
0 = NO
1 = YES
27 RW 0x0 DCD_INTR_EN:
0 = NO
1 = YES
26 RW 0x0 DCD_DETECTED:
0 = NO
1 = YES
25 RW 0x0 ZIN_FILTER_EN:
0 = NO
1 = YES
24 RW 0x0 ZIN_CHNG_INTR_EN:
0 = NO
1 = YES
23 RW 0x0 ZIN_ST_CHNG:
0 = NO
1 = YES
22 RO X ZIN:
0 = NO
1 = YES
21 RW 0x0 ZIP_FILTER_EN:
0 = NO
1 = YES
20 RW 0x0 ZIP_CHNG_INTR_EN:
0 = NO
1 = YES
19 RW 0x0 ZIP_ST_CHNG:
0 = NO
1 = YES
18 RO X ZIP:
0 = NO
1 = YES
17 RW 0x0 USBON_RPU:
0 = NO
1 = YES
16 RW 0x0 USBON_RPD:
0 = NO
1 = YES
15 RW 0x0 USBOP_RPU:
0 = NO
1 = YES
14 RW 0x0 USBOP_RPD:
0 = NO
1 = YES
13 RW 0x0 OP_I_SRC_EN:
0 = NO
1 = YES
12 RW 0x0 ON_SRC_EN:
0 = NO
1 = YES
11 RW 0x0 ON_SINK_EN:
0 = NO
1 = YES
10 RW 0x0 OP_SRC_EN:
0 = NO
1 = YES
9 RW 0x0 OP_SINK_EN:
0 = NO
1 = YES
8 RW 0x0 VDAT_DET_FILTER_EN:
0 = NO
1 = YES
7 RW 0x0 VDAT_DET_CHNG_INTR_EN:
0 = NO
1 = YES
6 RW 0x0 VDAT_DET_ST_CHNG:
0 = NO
1 = YES
5 RO X VDAT_DET:
0 = NO
1 = YES
4 RW 0x0 VDCD_DET_FILTER_EN:
0 = NO
1 = YES
3 RW 0x0 VDCD_DET_CHNG_INTR_EN:
0 = NO
1 = YES
2 RW 0x0 VDCD_DET_ST_CHNG:
0 = NO
1 = YES
1 RO X VDCD_DET:
0 = NO
1 = YES
0 RW 0x1 PD_CHG:
0 = NO
1 = YES
19.13.12.10 XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD0_CTL1_0
Offset: 0x24 | Read/Write: R/W | Reset: 0x0000000X (0bxxxxxxxxxxxxxxxxxxxxxxxxxxx0xxxx)
DIV_DET_EN:
4 RW 0x0 0 = NO
1 = YES
VOP_DIV2P7_DET:
3 RO X 0 = NO
1 = YES
VOP_DIV2P0_DET:
2 RO X 0 = NO
1 = YES
VON_DIV2P7_DET:
1 RO X 0 = NO
1 = YES
VON_DIV2P0_DET:
0 RO X 0 = NO
1 = YES
19.13.12.11 XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD1_CTL0_0
Offset: 0x28 | Read/Write: R/W | Reset: 0x00XX00XX (0b000000000x000x000000000000x000x1)
31 RW 0x0 GENERATE_SRP:
0 = NO
1 = YES
30 RW 0x0 SRP_INTR_EN:
0 = NO
1 = YES
29 RW 0x0 SRP_DETECTED:
0 = NO
1 = YES
28 RW 0x0 SRP_DETECT_EN:
0 = NO
1 = YES
27 RW 0x0 DCD_INTR_EN:
0 = NO
1 = YES
26 RW 0x0 DCD_DETECTED:
0 = NO
1 = YES
25 RW 0x0 ZIN_FILTER_EN:
0 = NO
1 = YES
24 RW 0x0 ZIN_CHNG_INTR_EN:
0 = NO
1 = YES
23 RW 0x0 ZIN_ST_CHNG:
22 RO X ZIN:
0 = NO
1 = YES
21 RW 0x0 ZIP_FILTER_EN:
0 = NO
1 = YES
20 RW 0x0 ZIP_CHNG_INTR_EN:
0 = NO
1 = YES
19 RW 0x0 ZIP_ST_CHNG:
0 = NO
1 = YES
18 RO X ZIP:
0 = NO
1 = YES
17 RW 0x0 USBON_RPU:
0 = NO
1 = YES
16 RW 0x0 USBON_RPD:
0 = NO
1 = YES
15 RW 0x0 USBOP_RPU:
0 = NO
1 = YES
14 RW 0x0 USBOP_RPD:
0 = NO
1 = YES
13 RW 0x0 OP_I_SRC_EN:
0 = NO
1 = YES
12 RW 0x0 ON_SRC_EN:
0 = NO
1 = YES
11 RW 0x0 ON_SINK_EN:
0 = NO
1 = YES
10 RW 0x0 OP_SRC_EN:
0 = NO
1 = YES
9 RW 0x0 OP_SINK_EN:
0 = NO
1 = YES
8 RW 0x0 VDAT_DET_FILTER_EN:
0 = NO
1 = YES
7 RW 0x0 VDAT_DET_CHNG_INTR_EN:
0 = NO
1 = YES
6 RW 0x0 VDAT_DET_ST_CHNG:
0 = NO
1 = YES
5 RO X VDAT_DET:
0 = NO
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1228
Tegra K1 Technical Reference Manual
USB Complex
4 RW 0x0 VDCD_DET_FILTER_EN:
0 = NO
1 = YES
3 RW 0x0 VDCD_DET_CHNG_INTR_EN:
0 = NO
1 = YES
2 RW 0x0 VDCD_DET_ST_CHNG:
0 = NO
1 = YES
1 RO X VDCD_DET:
0 = NO
1 = YES
0 RW 0x1 PD_CHG:
0 = NO
1 = YES
19.13.12.12 XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD1_CTL1_0
Offset: 0x2c | Read/Write: R/W | Reset: 0x0000000X (0bxxxxxxxxxxxxxxxxxxxxxxxxxxx0xxxx)
DIV_DET_EN:
4 RW 0x0 0 = NO
1 = YES
VOP_DIV2P7_DET:
3 RO X 0 = NO
1 = YES
VOP_DIV2P0_DET:
2 RO X 0 = NO
1 = YES
VON_DIV2P7_DET:
1 RO X 0 = NO
1 = YES
VON_DIV2P0_DET:
0 RO X 0 = NO
1 = YES
19.13.12.13 XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD2_CTL0_0
Offset: 0x30 | Read/Write: R/W | Reset: 0x00XX00XX (0b000000000x000x000000000000x000x1)
31 RW 0x0 GENERATE_SRP:
0 = NO
1 = YES
30 RW 0x0 SRP_INTR_EN:
0 = NO
1 = YES
29 RW 0x0 SRP_DETECTED:
0 = NO
1 = YES
28 RW 0x0 SRP_DETECT_EN:
0 = NO
1 = YES
27 RW 0x0 DCD_INTR_EN:
0 = NO
1 = YES
26 RW 0x0 DCD_DETECTED:
0 = NO
1 = YES
25 RW 0x0 ZIN_FILTER_EN:
0 = NO
1 = YES
24 RW 0x0 ZIN_CHNG_INTR_EN:
0 = NO
1 = YES
23 RW 0x0 ZIN_ST_CHNG:
0 = NO
1 = YES
22 RO X ZIN:
0 = NO
1 = YES
21 RW 0x0 ZIP_FILTER_EN:
0 = NO
1 = YES
20 RW 0x0 ZIP_CHNG_INTR_EN:
0 = NO
1 = YES
19 RW 0x0 ZIP_ST_CHNG:
0 = NO
1 = YES
18 RO X ZIP:
0 = NO
1 = YES
17 RW 0x0 USBON_RPU:
0 = NO
1 = YES
16 RW 0x0 USBON_RPD:
0 = NO
1 = YES
15 RW 0x0 USBOP_RPU:
0 = NO
1 = YES
14 RW 0x0 USBOP_RPD:
0 = NO
1 = YES
13 RW 0x0 OP_I_SRC_EN:
0 = NO
1 = YES
12 RW 0x0 ON_SRC_EN:
0 = NO
1 = YES
11 RW 0x0 ON_SINK_EN:
0 = NO
1 = YES
10 RW 0x0 OP_SRC_EN:
0 = NO
1 = YES
9 RW 0x0 OP_SINK_EN:
0 = NO
1 = YES
8 RW 0x0 VDAT_DET_FILTER_EN:
0 = NO
1 = YES
7 RW 0x0 VDAT_DET_CHNG_INTR_EN:
0 = NO
1 = YES
6 RW 0x0 VDAT_DET_ST_CHNG:
0 = NO
1 = YES
5 RO X VDAT_DET:
0 = NO
1 = YES
4 RW 0x0 VDCD_DET_FILTER_EN:
0 = NO
1 = YES
3 RW 0x0 VDCD_DET_CHNG_INTR_EN:
0 = NO
1 = YES
2 RW 0x0 VDCD_DET_ST_CHNG:
0 = NO
1 = YES
1 RO X VDCD_DET:
0 = NO
1 = YES
0 RW 0x1 PD_CHG:
0 = NO
1 = YES
19.13.12.14 PADCTL_USB2_BATTERY_CHRG_OTGPAD2_CTL1_0
Offset: 0x34 | Read/Write: R/W | Reset: 0x0000000X (0bxxxxxxxxxxxxxxxxxxxxxxxxxxx0xxxx)
DIV_DET_EN:
4 RW 0x0 0 = NO
1 = YES
VOP_DIV2P7_DET:
3 RO X 0 = NO
1 = YES
VOP_DIV2P0_DET:
2 RO X 0 = NO
1 = YES
VON_DIV2P7_DET:
1 RO X 0 = NO
1 = YES
VON_DIV2P0_DET:
0 RO X 0 = NO
1 = YES
19.13.12.15 XUSB_PADCTL_USB2_BATTERY_CHRG_BIASPAD_0
Offset: 0x38 | Read/Write: R/W | Reset: 0x0000XXXX (0bxxxxxxxxxxx00000000xxxxxx00x00x0)
20 RW 0x0 ID_OVERRIDE:
0 = NO
1 = YES
17 RW 0x0 VBUS_OVERRIDE:
0 = NO
1 = YES
14 RW 0x0 ID_CONNECT_CHNG_INTR_EN:
0 = NO
1 = YES
13 RW 0x0 ID_CONNECT_ST_CHNG:
0 = NO
1 = YES
12 RO X ID_CONNECT_STATUS:
0 = NO
1 = YES
11 RO X IDDIG_C:
0 = NO
1 = YES
10 RO X IDDIG_B:
0 = NO
1 = YES
9 RO X IDDIG_A:
0 = NO
1 = YES
8 RO X IDDIG:
0 = NO
1 = YES
6 RW 0x0 VBUS_VLD_CHNG_INTR_EN:
0 = NO
1 = YES
5 RW 0x0 VBUS_VLD_ST_CHNG:
0 = NO
1 = YES
4 RO X VBUS_VLD:
0 = NO
1 = YES
3 RW 0x0 OTG_VBUS_SESS_VLD_CHNG_INTR_EN:
0 = NO
1 = YES
2 RW 0x0 OTG_VBUS_SESS_VLD_ST_CHNG:
0 = NO
1 = YES
1 RO X OTG_VBUS_SESS_VLD:
0 = NO
1 = YES
0 RW 0x0 PD_OTG:
0 = NO
19.13.12.16 XUSB_PADCTL_USB2_BATTERY_CHRG_TDCD_DBNC_TIMER_0
Offset: 0x3c | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxxx00000000000)
19.13.12.17 XUSB_PADCTL_IOPHY_PLL_P0_CTL1_0
USB3/PCIE PLL0 control signals: One set per PLL
27 RO X PLL1_LOCKDET
24 RW 0x0 PLL1_MODE
19 RO X PLL0_LOCKDET
16 RW 0x0 PLL0_MODE
11 RW 0x0 REFCLK_TERM100
9 RW 0x0 PLL_CKBUFPD_OVR
8 RW 0x0 PLL_CKBUFPD_M
7 RW 0x0 PLL_CKBUFPD_BL
6 RW 0x0 PLL_CKBUFPD_BR
5 RW 0x0 PLL_CKBUFPD_TL
4 RW 0x0 PLL_CKBUFPD_TR
3 RW 0x0 PLL_PWR_OVRD
2 RW 0x0 PLL_EMULATION_RST_
1 RW 0x0 PLL_RST_
0 RW 0x0 PLL_IDDQ
19.13.12.18 XUSB_PADCTL_IOPHY_PLL_P0_CTL2_0
Offset: 0x44 | Read/Write: R/W | Reset: 0xXX880037 (0bxxxxxxxx100010000x00000000110111)
31:24 RO X PLL_MISC_OUT
15 RW 0x0 PLL_BYPASS_EN
13 RW 0x0 PLL_EMULATION_ON
12 RW 0x0 TCLKOUT_EN
7 RW 0x0 XDIGCLK4P5_EN
6 RW 0x0 REFCLKBUF_EN
5 RW 0x1 TXCLKREF_EN
4 RW 0x1 TXCLKREF_SEL
3 RW 0x0 XDIGCLK_EN
19.13.12.19 XUSB_PADCTL_IOPHY_PLL_P0_CTL3_0
Offset: 0x48 | Read/Write: R/W | Reset: 0x0000XX0e (0b0000xx000000xx00x0xxxxxx0xx01110)
15 RO X RCAL_DONE
14 RW 0x0 RCAL_RESET
12:8 RO X RCAL_VAL
7 RW 0x0 RCAL_BYPASS
19.13.12.20 XUSB_PADCTL_IOPHY_PLL_P0_CTL4_0
Offset: 0x4c | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxx000000000000)
19.13.12.21 XUSB_PADCTL_IOPHY_USB3_PAD0_CTL_1_0
USB3 PADS: XUSB Static controls: Unit specific
0 0x0 RATE_MODE
19.13.12.22 XUSB_PADCTL_IOPHY_USB3_PAD1_CTL_1_0
Offset: 0x54 | Read/Write: R/W | Reset: 0x0000ec14 (0bxxxxxxxxx00000001110110000010100)
0 0x0 RATE_MODE
19.13.12.23 XUSB_PADCTL_IOPHY_USB3_PAD0_CTL_2_0
Offset: 0x58 | Read/Write: R/W | Reset: 0x24001000 (0b00100100000000000001000000000000)
19.13.12.24 XUSB_PADCTL_IOPHY_USB3_PAD1_CTL_2_0
Offset: 0x5c | Read/Write: R/W | Reset: 0x24001000 (0b00100100000000000001000000000000)
19.13.12.25 XUSB_PADCTL_IOPHY_USB3_PAD0_CTL_3_0
Offset: 0x60 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxx0000000000000000)
19.13.12.26 XUSB_PADCTL_IOPHY_USB3_PAD1_CTL_3_0
Offset: 0x64 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxx0000000000000000)
19.13.12.27 XUSB_PADCTL_IOPHY_USB3_PAD0_CTL_4_0
Offset: 0x68 | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
19.13.12.28 XUSB_PADCTL_IOPHY_USB3_PAD1_CTL_4_0
Offset: 0x6c | Read/Write: R/W | Reset: 0x00000000 (0b00000000000000000000000000000000)
19.13.12.29 XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_1_0
USB3 PADS: Miscellaneous Dir Control: Common for all USB3/PCIE/SATA
27 RW 0x0 RX_PWR_OVRD
26 RW 0x0 TX_PWR_OVRD
25 RW 0x0 RATE_MODE_OVRD
24 RW 0x0 RATE_MODE
15 RW 0x0 TX_RDET
13 RO X TX_STAT_PRESENT
12 RO X RX_STAT_IDLE
11 RW 0x0 RX_DATA_EN
10 RW 0x0 RX_DATA_READY
7 RW 0x0 TX_DATA_EN
6 RW 0x0 TX_DATA_READY
3 RW 0x0 CKBUFPD_OVRD
2 RW 0x0 CKBUFPD
1 RW 0x0 IDDQ_OVRD
0 RW 0x0 IDDQ
19.13.12.30 XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_1_0
Offset: 0x74 | Read/Write: R/W | Reset: 0x000aX330 (0bxxxx0000000010100xxx001100110000)
27 RW 0x0 RX_PWR_OVRD
26 RW 0x0 TX_PWR_OVRD
25 RW 0x0 RATE_MODE_OVRD
24 RW 0x0 RATE_MODE
15 RW 0x0 TX_RDET
13 RO X TX_STAT_PRESENT
12 RO X RX_STAT_IDLE
11 RW 0x0 RX_DATA_EN
10 RW 0x0 RX_DATA_READY
7 RW 0x0 TX_DATA_EN
6 RW 0x0 TX_DATA_READY
3 RW 0x0 CKBUFPD_OVRD
2 RW 0x0 CKBUFPD
1 RW 0x0 IDDQ_OVRD
0 RW 0x0 IDDQ
19.13.12.31 XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_2_0
Offset: 0x78 | Read/Write: R/W | Reset: 0xX0000000 (0bxx000x00xxxxxxxxxx00000000000000)
31:30 RO X SPARE_OUT
27 RW 0x0 TEST_EN
25 RW 0x0 PRBS_CHK_EN
24 RW 0x0 PRBS_ERROR
13 RW 0x0 RX_CDR_RESET
12 RW 0x0 TX_SYNC
11 RW 0x0 FED_LOOP
7 RW 0x0 FEA_LOOP
3 RW 0x0 NEA_LOOP
2 RW 0x0 NED_LOOP
19.13.12.32 XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_2_0
Offset: 0x7c | Read/Write: R/W | Reset: 0xX0000000 (0bxx000x00xxxxxxxxxx00000000000000)
31:30 RO X SPARE_OUT
27 RW 0x0 TEST_EN
25 RW 0x0 PRBS_CHK_EN
24 RW 0x0 PRBS_ERROR
13 RW 0x0 RX_CDR_RESET
12 RW 0x0 TX_SYNC
11 RW 0x0 FED_LOOP
7 RW 0x0 FEA_LOOP
3 RW 0x0 NEA_LOOP
2 RW 0x0 NED_LOOP
19.13.12.33 XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_3_0
Offset: 0x80 | Read/Write: R/W | Reset: 0x00040200 (0b000000000000010000000010xxxx0000)
19 0x0 RX_IDLE_MODE_OVRD
18 0x1 RX_IDLE_MODE
17 0x0 RX_IDLE_BYP
16 0x0 TX_RDET_BYP
19.13.12.34 XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_3_0
Offset: 0x84 | Read/Write: R/W | Reset: 0x00040200 (0b000000000000010000000010xxxx0000)
19 0x0 RX_IDLE_MODE_OVRD
18 0x1 RX_IDLE_MODE
17 0x0 RX_IDLE_BYP
16 0x0 TX_RDET_BYP
19.13.12.35 XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_4_0
Offset: 0x88 | Read/Write: R/W | Reset: 0xXX000XX0 (0bx100x0000000xxxxxx0000x000x0xxxx)
31 RO X AUX_RX_STAT_IDLE
30 RW 0x1 AUX_RX_IDLE_MODE
29 RW 0x0 AUX_RX_IDLE_EN
28 RW 0x0 AUX_RX_TERM_EN
27 RO X AUX_TX_STAT_PRESENT
26 RW 0x0 AUX_TX_RDET_CLK_EN
25 RW 0x0 AUX_TX_RDET_EN
24 RW 0x0 AUX_TX_TERM_EN
23 RW 0x0 AUX_MODE_OVRD
22 RW 0x0 AUX_HOLD_EN
21 RW 0x0 AUX_IDDQ_OVRD
20 RW 0x0 AUX_IDDQ
13 RW 0x0 TX_BYP_OVRD
12 RW 0x0 RX_BYP_MODE
11 RW 0x0 RX_BYP_EN
10 RW 0x0 RX_BYP_DIR
9 RO X RX_BYP_IN
8 RW 0x0 RX_BYP_OUT
7 RW 0x0 TX_BYP_EN
6 RW 0x0 TX_BYP_DIR
5 RO X TX_BYP_IN
4 RW 0x0 TX_BYP_OUT
19.13.12.36 XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_4_0
Offset: 0x8c | Read/Write: R/W | Reset: 0xXX000XX0 (0bx100x0000000xxxxxx00000x00x0xxxx)
31 RO X AUX_RX_STAT_IDLE
30 RW 0x1 AUX_RX_IDLE_MODE
29 RW 0x0 AUX_RX_IDLE_EN
28 RW 0x0 AUX_RX_TERM_EN
27 RO X AUX_TX_STAT_PRESENT
26 RW 0x0 AUX_TX_RDET_CLK_EN
25 RW 0x0 AUX_TX_RDET_EN
24 RW 0x0 AUX_TX_TERM_EN
23 RW 0x0 AUX_MODE_OVRD
22 RW 0x0 AUX_HOLD_EN
21 RW 0x0 AUX_IDDQ_OVRD
20 RW 0x0 AUX_IDDQ
13 RW 0x0 TX_BYP_OVRD
12 RW 0x0 RX_BYP_MODE
11 RW 0x0 RX_BYP_EN
10 RW 0x0 RX_BYP_DIR
9 RW 0x0 RX_BYP_OUT
8 RO X RX_BYP_IN
7 RW 0x0 TX_BYP_EN
6 RW 0x0 TX_BYP_DIR
5 RO X TX_BYP_IN
4 RW 0x0 TX_BYP_OUT
19.13.12.37 XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_5_0
Offset: 0x90 | Read/Write: R/W | Reset: 0x0000X0XX (0bxxxxxxxxxxxxxxxxxxxxxxx00xx00xx0)
17:12 RO X RX_QEYE_OUT
8 RW 0x0 RX_QEYE_EN
7 RW 0x0 EOM_EN
5 RO X EOM_TRAIN_DONE
4 RW 0x0 EOM_TRAIN_EN
3 RW 0x0 DFE_RESET
1 RO X DFE_TRAIN_DONE
0 RW 0x0 DFE_TRAIN_EN
19.13.12.38 XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_5_0
Offset: 0x94 | Read/Write: R/W | Reset: 0x0000X0XX (0bxxxxxxxxxxxxxxxxxxxxxxx00xx00xx0)
17:12 RO X RX_QEYE_OUT
8 RW 0x0 RX_QEYE_EN
7 RW 0x0 EOM_EN
5 RO X EOM_TRAIN_DONE
4 RW 0x0 EOM_TRAIN_EN
3 RW 0x0 DFE_RESET
1 RO X DFE_TRAIN_DONE
0 RW 0x0 DFE_TRAIN_EN
19.13.12.39 XUSB_PADCTL_IOPHY_MISC_PAD_P0_CTL_6_0
Offset: 0x98 | Read/Write: R/W | Reset: 0xXX000000 (0bxxxxxxxx000000000000000000000000)
31:24 RO X MISC_OUT
19.13.12.40 XUSB_PADCTL_IOPHY_MISC_PAD_P1_CTL_6_0
Offset: 0x9c | Read/Write: R/W | Reset: 0xXX000000 (0bxxxxxxxx000000000000000000000000)
31:24 RO X MISC_OUT
19.13.12.41 XUSB_PADCTL_USB2_OTG_PAD0_CTL_0_0
23 0x0 LSBIAS_SEL
22 0x0 DISCON_DETECT_METHOD
21 0x1 PD_ZI
20 0x1 PD2
19 0x1 PD
18 0x0 TERM_EN
19.13.12.42 XUSB_PADCTL_USB2_OTG_PAD1_CTL_0_0
23 0x0 LSBIAS_SEL
22 0x0 DISCON_DETECT_METHOD
21 0x1 PD_ZI
20 0x1 PD2
19 0x1 PD
18 0x0 TERM_EN
19.13.12.43 XUSB_PADCTL_USB2_OTG_PAD2_CTL_0_0
23 0x0 LSBIAS_SEL
22 0x0 DISCON_DETECT_METHOD
21 0x1 PD_ZI
20 0x1 PD2
19 0x1 PD
18 0x0 TERM_EN
19.13.12.44 XUSB_PADCTL_USB2_OTG_PAD0_CTL_1_0
2 0x1 PD_DR
1 0x0 PD_DISC_FORCE_POWERUP
0 0x0 PD_CHRP_FORCE_POWERUP
19.13.12.45 XUSB_PADCTL_USB2_OTG_PAD1_CTL_1_0
2 0x1 PD_DR
1 0x0 PD_DISC_FORCE_POWERUP
0 0x0 PD_CHRP_FORCE_POWERUP
19.13.12.46 XUSB_PADCTL_USB2_OTG_PAD2_CTL_1_0
2 0x1 PD_DR
1 0x0 PD_DISC_FORCE_POWERUP
0 0x0 PD_CHRP_FORCE_POWERUP
19.13.12.47 XUSB_PADCTL_USB2_BIAS_PAD_CTL_0_0
Offset: 0xb8 | Read/Write: R/W | Reset: 0x00003000 (0bxxxxxxxxxxxxxxx00011000000000000)
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1243
Tegra K1 Technical Reference Manual
USB Complex
13 0x1 PD_TRK
12 0x1 PD
19.13.12.48 XUSB_PADCTL_USB2_BIAS_PAD_CTL_1_0
31:16 X TCTRL
15:0 X RCTRL
19.13.12.49 XUSB_PADCTL_HSIC_PAD0_CTL_0_0
19.13.12.50 XUSB_PADCTL_HSIC_PAD1_CTL_0_0
19.13.12.51 XUSB_PADCTL_HSIC_PAD0_CTL_1_0
10 0x0 RPU_STROBE
9 0x0 RPU_DATA
8 0x1 RPD_STROBE
7 0x1 RPD_DATA
6 0x0 LPBK
5 0x1 PD_ZI
4 0x1 PD_RX
3 0x1 PD_TRX
2 0x0 PD_TX
1 0x0 IDDQ
0 0x0 AUTO_TERM_EN
19.13.12.52 XUSB_PADCTL_HSIC_PAD1_CTL_1_0
10 0x0 RPU_STROBE
9 0x0 RPU_DATA
8 0x1 RPD_STROBE
7 0x1 RPD_DATA
6 0x0 LPBK
5 0x1 PD_ZI
4 0x1 PD_RX
3 0x1 PD_TRX
2 0x0 PD_TX
1 0x0 IDDQ
0 0x0 AUTO_TERM_EN
19.13.12.53 XUSB_PADCTL_HSIC_PAD0_CTL_2_0
31:16 RO X CALIOUT
19.13.12.54 XUSB_PADCTL_HSIC_PAD1_CTL_2_0
31:16 RO X CALIOUT
19.13.12.55 XUSB_PADCTL_ULPI_LINK_TRIM_CONTROL_0
25 0x0 CTL_SEL_DEL1
24 0x0 CTL_SEL_DEL0
10 0x0 DAT_SEL_DEL1
9 0x0 DAT_SEL_DEL0
19.13.12.56 XUSB_PADCTL_ULPI_NULL_CLK_TRIM_CONTROL_0
Offset: 0xdc | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxx00000xxx00000)
19.13.12.57 XUSB_PADCTL_HSIC_STRB_TRIM_CONTROL_0
19.13.12.58 XUSB_PADCTL_WAKE_CTRL_0
5 0x0 LANE_S0_FORCE_TX_RDET_CLK_ENABLE
4 0x0 LANE_P4_FORCE_TX_RDET_CLK_ENABLE
3 0x0 LANE_P3_FORCE_TX_RDET_CLK_ENABLE
2 0x0 LANE_P2_FORCE_TX_RDET_CLK_ENABLE
19.13.12.59 XUSB_PADCTL_PM_SPARE_0
11 0x0 HSIC_PM_SPARE_BIT3
10 0x0 HSIC_PM_SPARE_BIT2
9 0x0 HSIC_PM_SPARE_BIT1
8 0x0 HSIC_PM_SPARE_BIT0
7 0x0 ULPI_PM_SPARE_BIT3
6 0x0 ULPI_PM_SPARE_BIT2
5 0x0 ULPI_PM_SPARE_BIT1
4 0x0 ULPI_PM_SPARE_BIT0
3 0x0 OTG_PM_SPARE_BIT3
2 0x0 OTG_PM_SPARE_BIT2
1 0x0 OTG_PM_SPARE_BIT1
0 0x0 OTG_PM_SPARE_BIT0
19.13.12.60 XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_1_0
USB3 Pads : Miscellaneous Direction Control : The following lanes are only used by PCIe
USB3 Pads : Miscellaneous Ovrd : The following lanes are only used by PCIe
27 RW 0x0 RX_PWR_OVRD
26 RW 0x0 TX_PWR_OVRD
25 RW 0x0 RATE_MODE_OVRD
24 RW 0x0 RATE_MODE
15 RW 0x0 TX_RDET
13 RO X TX_STAT_PRESENT
12 RO X RX_STAT_IDLE
11 RW 0x0 RX_DATA_EN
10 RW 0x0 RX_DATA_READY
7 RW 0x0 TX_DATA_EN
6 RW 0x0 TX_DATA_READY
3 RW 0x0 CKBUFPD_OVRD
2 RW 0x0 CKBUFPD
1 RW 0x0 IDDQ_OVRD
0 RW 0x0 IDDQ
19.13.12.61 XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_1_0
Offset: 0xf0 | Read/Write: R/W | Reset: 0x000aX330 (0bxxxx0000000010100xxx001100110000)
27 RW 0x0 RX_PWR_OVRD
26 RW 0x0 TX_PWR_OVRD
25 RW 0x0 RATE_MODE_OVRD
24 RW 0x0 RATE_MODE
15 RW 0x0 TX_RDET
13 RO X TX_STAT_PRESENT
12 RO X RX_STAT_IDLE
11 RW 0x0 RX_DATA_EN
10 RW 0x0 RX_DATA_READY
7 RW 0x0 TX_DATA_EN
6 RW 0x0 TX_DATA_READY
3 RW 0x0 CKBUFPD_OVRD
2 RW 0x0 CKBUFPD
1 RW 0x0 IDDQ_OVRD
0 RW 0x0 IDDQ
19.13.12.62 XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_1_0
Offset: 0xf4 | Read/Write: R/W | Reset: 0x000aX330 (0bxxxx0000000010100xxx001100110000)
27 RW 0x0 RX_PWR_OVRD
26 RW 0x0 TX_PWR_OVRD
25 RW 0x0 RATE_MODE_OVRD
24 RW 0x0 RATE_MODE
15 RW 0x0 TX_RDET
13 RO X TX_STAT_PRESENT
12 RO X RX_STAT_IDLE
11 RW 0x0 RX_DATA_EN
10 RW 0x0 RX_DATA_READY
7 RW 0x0 TX_DATA_EN
6 RW 0x0 TX_DATA_READY
3 RW 0x0 CKBUFPD_OVRD
2 RW 0x0 CKBUFPD
1 RW 0x0 IDDQ_OVRD
0 RW 0x0 IDDQ
19.13.12.63 XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_2_0
Offset: 0xf8 | Read/Write: R/W | Reset: 0xX0000000 (0bxx000x00xxxxxxxxxx00000000000000)
31:30 RO X SPARE_OUT
27 RW 0x0 TEST_EN
25 RW 0x0 PRBS_CHK_EN
24 RW 0x0 PRBS_ERROR
13 RW 0x0 RX_CDR_RESET
12 RW 0x0 TX_SYNC
11 RW 0x0 FED_LOOP
7 RW 0x0 FEA_LOOP
3 RW 0x0 NEA_LOOP
2 RW 0x0 NED_LOOP
19.13.12.64 XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_2_0
Offset: 0xfc | Read/Write: R/W | Reset: 0xX0000000 (0bxx000x00xxxxxxxxxx00000000000000)
31:30 RO X SPARE_OUT
27 RW 0x0 TEST_EN
25 RW 0x0 PRBS_CHK_EN
24 RW 0x0 PRBS_ERROR
13 RW 0x0 RX_CDR_RESET
12 RW 0x0 TX_SYNC
11 RW 0x0 FED_LOOP
7 RW 0x0 FEA_LOOP
3 RW 0x0 NEA_LOOP
2 RW 0x0 NED_LOOP
19.13.12.65 XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_2_0
Offset: 0x100 | Read/Write: R/W | Reset: 0xX0000000 (0bxx000x00xxxxxxxxxx00000000000000)
31:30 RO X SPARE_OUT
27 RW 0x0 TEST_EN
25 RW 0x0 PRBS_CHK_EN
24 RW 0x0 PRBS_ERROR
13 RW 0x0 RX_CDR_RESET
12 RW 0x0 TX_SYNC
11 RW 0x0 FED_LOOP
7 RW 0x0 FEA_LOOP
3 RW 0x0 NEA_LOOP
2 RW 0x0 NED_LOOP
19.13.12.66 XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_3_0
Offset: 0x104 | Read/Write: R/W | Reset: 0x00040200 (0b000000000000010000000010xxxx0000)
19 0x0 RX_IDLE_MODE_OVRD
18 0x1 RX_IDLE_MODE
17 0x0 RX_IDLE_BYP
16 0x0 TX_RDET_BYP
19.13.12.67 XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_3_0
Offset: 0x108 | Read/Write: R/W | Reset: 0x00040200 (0b000000000000010000000010xxxx0000)
19 0x0 RX_IDLE_MODE_OVRD
18 0x1 RX_IDLE_MODE
17 0x0 RX_IDLE_BYP
16 0x0 TX_RDET_BYP
19.13.12.68 XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_3_0
Offset: 0x10c | Read/Write: R/W | Reset: 0x00040200 (0b000000000000010000000010xxxx0000)
19 0x0 RX_IDLE_MODE_OVRD
18 0x1 RX_IDLE_MODE
17 0x0 RX_IDLE_BYP
16 0x0 TX_RDET_BYP
19.13.12.69 XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_4_0
Offset: 0x110 | Read/Write: R/W | Reset: 0xXX000XX0 (0bx100x0000000xxxxxx0000x000x0xxxx)
31 RO X AUX_RX_STAT_IDLE
30 RW 0x1 AUX_RX_IDLE_MODE
29 RW 0x0 AUX_RX_IDLE_EN
28 RW 0x0 AUX_RX_TERM_EN
27 RO X AUX_TX_STAT_PRESENT
26 RW 0x0 AUX_TX_RDET_CLK_EN
25 RW 0x0 AUX_TX_RDET_EN
24 RW 0x0 AUX_TX_TERM_EN
23 RW 0x0 AUX_MODE_OVRD
22 RW 0x0 AUX_HOLD_EN
21 RW 0x0 AUX_IDDQ_OVRD
20 RW 0x0 AUX_IDDQ
13 RW 0x0 TX_BYP_OVRD
12 RW 0x0 RX_BYP_MODE
11 RW 0x0 RX_BYP_EN
10 RW 0x0 RX_BYP_DIR
9 RO X RX_BYP_IN
8 RW 0x0 RX_BYP_OUT
7 RW 0x0 TX_BYP_EN
6 RW 0x0 TX_BYP_DIR
5 RO X TX_BYP_IN
4 RW 0x0 TX_BYP_OUT
19.13.12.70 XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_4_0
Offset: 0x114 | Read/Write: R/W | Reset: 0xXX000XX0 (0bx100x0000000xxxxxx00000x00x0xxxx)
31 RO X AUX_RX_STAT_IDLE
30 RW 0x1 AUX_RX_IDLE_MODE
29 RW 0x0 AUX_RX_IDLE_EN
28 RW 0x0 AUX_RX_TERM_EN
27 RO X AUX_TX_STAT_PRESENT
26 RW 0x0 AUX_TX_RDET_CLK_EN
25 RW 0x0 AUX_TX_RDET_EN
24 RW 0x0 AUX_TX_TERM_EN
23 RW 0x0 AUX_MODE_OVRD
22 RW 0x0 AUX_HOLD_EN
21 RW 0x0 AUX_IDDQ_OVRD
20 RW 0x0 AUX_IDDQ
13 RW 0x0 TX_BYP_OVRD
12 RW 0x0 RX_BYP_MODE
11 RW 0x0 RX_BYP_EN
10 RW 0x0 RX_BYP_DIR
9 RW 0x0 RX_BYP_OUT
8 RO X RX_BYP_IN
7 RW 0x0 TX_BYP_EN
6 RW 0x0 TX_BYP_DIR
5 RO X TX_BYP_IN
4 RW 0x0 TX_BYP_OUT
19.13.12.71 XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_4_0
Offset: 0x118 | Read/Write: R/W | Reset: 0xXX000XX0 (0bx100x0000000xxxxxx00000x00x0xxxx)
31 RO X AUX_RX_STAT_IDLE
30 RW 0x1 AUX_RX_IDLE_MODE
29 RW 0x0 AUX_RX_IDLE_EN
28 RW 0x0 AUX_RX_TERM_EN
27 RO X AUX_TX_STAT_PRESENT
26 RW 0x0 AUX_TX_RDET_CLK_EN
25 RW 0x0 AUX_TX_RDET_EN
24 RW 0x0 AUX_TX_TERM_EN
23 RW 0x0 AUX_MODE_OVRD
22 RW 0x0 AUX_HOLD_EN
21 RW 0x0 AUX_IDDQ_OVRD
20 RW 0x0 AUX_IDDQ
13 RW 0x0 TX_BYP_OVRD
12 RW 0x0 RX_BYP_MODE
11 RW 0x0 RX_BYP_EN
10 RW 0x0 RX_BYP_DIR
9 RW 0x0 RX_BYP_OUT
8 RO X RX_BYP_IN
7 RW 0x0 TX_BYP_EN
6 RW 0x0 TX_BYP_DIR
5 RO X TX_BYP_IN
4 RW 0x0 TX_BYP_OUT
19.13.12.72 XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_5_0
Offset: 0x11c | Read/Write: R/W | Reset: 0x000XX0XX (0bxxxxxxxxxxxxxxxxxxxxxxx00xx00xx0)
17:12 RO X RX_QEYE_OUT
8 RW 0x0 RX_QEYE_EN
7 RW 0x0 EOM_EN
5 RO X EOM_TRAIN_DONE
4 RW 0x0 EOM_TRAIN_EN
3 RW 0x0 DFE_RESET
1 RO X DFE_TRAIN_DONE
0 RW 0x0 DFE_TRAIN_EN
19.13.12.73 XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_5_0
Offset: 0x120 | Read/Write: R/W | Reset: 0x000XX0XX (0bxxxxxxxxxxxxxxxxxxxxxxx00xx00xx0)
17:12 RO X RX_QEYE_OUT
8 RW 0x0 RX_QEYE_EN
7 RW 0x0 EOM_EN
5 RO X EOM_TRAIN_DONE
4 RW 0x0 EOM_TRAIN_EN
3 RW 0x0 DFE_RESET
1 RO X DFE_TRAIN_DONE
0 RW 0x0 DFE_TRAIN_EN
19.13.12.74 XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_5_0
Offset: 0x124 | Read/Write: R/W | Reset: 0x000XX0XX (0bxxxxxxxxxxxxxxxxxxxxxxx00xx00xx0)
17:12 RO X RX_QEYE_OUT
8 RW 0x0 RX_QEYE_EN
7 RW 0x0 EOM_EN
5 RO X EOM_TRAIN_DONE
4 RW 0x0 EOM_TRAIN_EN
3 RW 0x0 DFE_RESET
1 RO X DFE_TRAIN_DONE
0 RW 0x0 DFE_TRAIN_EN
19.13.12.75 XUSB_PADCTL_IOPHY_MISC_PAD_P2_CTL_6_0
Offset: 0x128 | Read/Write: R/W | Reset: 0xXX000000 (0bxxxxxxxx000000000000000000000000)
31:24 RO X MISC_OUT
19.13.12.76 XUSB_PADCTL_IOPHY_MISC_PAD_P3_CTL_6_0
Offset: 0x12c | Read/Write: R/W | Reset: 0xXX000000 (0bxxxxxxxx000000000000000000000000)
31:24 RO X MISC_OUT
19.13.12.77 XUSB_PADCTL_IOPHY_MISC_PAD_P4_CTL_6_0
Offset: 0x130 | Read/Write: R/W | Reset: 0xXX000000 (0bxxxxxxxx000000000000000000000000)
31:24 RO X MISC_OUT
19.13.12.78 XUSB_PADCTL_USB3_PAD_MUX_0
Offset: 0x134 | Read/Write: R/W | Reset: 0x08000000 (0bxxxx100000000000xxxxxxxxx0000000)
SATA_PAD_LANE0:
0 = PCIE
27:26 0x2 1 = USB3_SS
2 = SATA
3 = RESERVED
PCIE_PAD_LANE4:
0 = PCIE
25:24 0x0 1 = USB3_SS
2 = SATA
3 = RESERVED
PCIE_PAD_LANE3:
0 = PCIE
23:22 0x0 1 = USB3_SS
2 = SATA
3 = RESERVED
PCIE_PAD_LANE2:
0 = PCIE
21:20 0x0 1 = USB3_SS
2 = SATA
3 = RESERVED
PCIE_PAD_LANE1:
19:18 0x0 0 = PCIE
1 = USB3_SS
2 = SATA
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1256
Tegra K1 Technical Reference Manual
USB Complex
PCIE_PAD_LANE0:
0 = PCIE
17:16 0x0 1 = USB3_SS
2 = SATA
3 = RESERVED
FORCE_SATA_PAD_IDDQ_DISABLE_MASK0:
6 0x0 0 = NOT_DISABLED
1 = DISABLED
FORCE_PCIE_PAD_IDDQ_DISABLE_MASK4:
5 0x0 0 = NOT_DISABLED
1 = DISABLED
FORCE_PCIE_PAD_IDDQ_DISABLE_MASK3:
4 0x0 0 = NOT_DISABLED
1 = DISABLED
FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2:
3 0x0 0 = NOT_DISABLED
1 = DISABLED
FORCE_PCIE_PAD_IDDQ_DISABLE_MASK1:
2 0x0 0 = NOT_DISABLED
1 = DISABLED
FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0:
1 0x0 0 = NOT_DISABLED
1 = DISABLED
FORCE_PCIE_PAD_IDDQ_DISABLE:
0 0x0 0 = NOT_DISABLED
1 = DISABLED
19.13.12.79 XUSB_PADCTL_IOPHY_PLL_S0_CTL1_0
USB3/SATA PLL0 control signals : One set per PLL
27 RO X PLL1_LOCKDET
24 RW 0x0 PLL1_MODE
19 RO X PLL0_LOCKDET
16 RW 0x0 PLL0_MODE
11 RW 0x0 REFCLK_TERM100
9 RW 0x0 PLL_CKBUFPD_OVR
8 RW 0x0 PLL_CKBUFPD_M
7 RW 0x0 PLL_CKBUFPD_BL
6 RW 0x0 PLL_CKBUFPD_BR
5 RW 0x0 PLL_CKBUFPD_TL
4 RW 0x0 PLL_CKBUFPD_TR
3 RW 0x0 PLL_PWR_OVRD
2 RW 0x0 PLL_EMULATION_RST_
1 RW 0x0 PLL_RST_
0 RW 0x0 PLL_IDDQ
19.13.12.80 XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0
Offset: 0x13c | Read/Write: R/W | Reset: 0xXX441020 (0bxxxxxxxx010001000x01000000100000)
31:24 RO X PLL_MISC_OUT
15 RW 0x0 PLL_BYPASS_EN
13 RW 0x0 PLL_EMULATION_ON
12 RW 0x1 TCLKOUT_EN
7 RW 0x0 XDIGCLK4P5_EN
6 RW 0x0 REFCLKBUF_EN
5 RW 0x1 TXCLKREF_EN
4 RW 0x0 TXCLKREF_SEL
3 RW 0x0 XDIGCLK_EN
19.13.12.81 XUSB_PADCTL_IOPHY_PLL_S0_CTL3_0
Offset: 0x140 | Read/Write: R/W | Reset: 0x0000XX80 (0b0000xx000000xx00x0xxxxxx1xx00000)
15 RO X RCAL_DONE
14 RW 0x0 RCAL_RESET
12:8 RO X RCAL_VAL
7 RW 0x1 RCAL_BYPASS
19.13.12.82 XUSB_PADCTL_IOPHY_PLL_S0_CTL4_0
Offset: 0x144 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxxxxxxxxxxxxxxx000000000000)
19.13.12.83 XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_1_0
Miscellaneous controls for USB3/SATA pads
27 RW 0x0 RX_PWR_OVRD
26 RW 0x0 TX_PWR_OVRD
25 RW 0x0 RATE_MODE_OVRD
24 RW 0x0 RATE_MODE
15 RW 0x0 TX_RDET
13 RO X TX_STAT_PRESENT
12 RO X RX_STAT_IDLE
11 RW 0x0 RX_DATA_EN
10 RW 0x0 RX_DATA_READY
7 RW 0x0 TX_DATA_EN
6 RW 0x0 TX_DATA_READY
3 RW 0x0 CKBUFPD_OVRD
2 RW 0x0 CKBUFPD
1 RW 0x0 IDDQ_OVRD
0 RW 0x0 IDDQ
19.13.12.84 XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_2_0
Offset: 0x14c | Read/Write: R/W | Reset: 0xX0000000 (0bxx000x00xxxxxxxxxx00000000000000)
31:30 RO X SPARE_OUT
27 RW 0x0 TEST_EN
25 RW 0x0 PRBS_CHK_EN
24 RW 0x0 PRBS_ERROR
13 RW 0x0 RX_CDR_RESET
12 RW 0x0 TX_SYNC
11 RW 0x0 FED_LOOP
7 RW 0x0 FEA_LOOP
3 RW 0x0 NEA_LOOP
2 RW 0x0 NED_LOOP
19.13.12.85 XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_3_0
Offset: 0x150 | Read/Write: R/W | Reset: 0x00040200 (0b000000000000010000000010xxxx0000)
19 0x0 RX_IDLE_MODE_OVRD
18 0x1 RX_IDLE_MODE
17 0x0 RX_IDLE_BYP
16 0x0 TX_RDET_BYP
19.13.12.86 XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_4_0
Offset: 0x154 | Read/Write: R/W | Reset: 0xXX000XX0 (0bx100x0000000xxxxxx0000x000x0xxxx)
31 RO X AUX_RX_STAT_IDLE
30 RW 0x1 AUX_RX_IDLE_MODE
29 RW 0x0 AUX_RX_IDLE_EN
28 RW 0x0 AUX_RX_TERM_EN
27 RO X AUX_TX_STAT_PRESENT
26 RW 0x0 AUX_TX_RDET_CLK_EN
25 RW 0x0 AUX_TX_RDET_EN
24 RW 0x0 AUX_TX_TERM_EN
23 RW 0x0 AUX_MODE_OVRD
22 RW 0x0 AUX_HOLD_EN
21 RW 0x0 AUX_IDDQ_OVRD
20 RW 0x0 AUX_IDDQ
13 RW 0x0 TX_BYP_OVRD
12 RW 0x0 RX_BYP_MODE
11 RW 0x0 RX_BYP_EN
10 RW 0x0 RX_BYP_DIR
9 RO X RX_BYP_IN
8 RW 0x0 RX_BYP_OUT
7 RW 0x0 TX_BYP_EN
6 RW 0x0 TX_BYP_DIR
5 RO X TX_BYP_IN
4 RW 0x0 TX_BYP_OUT
19.13.12.87 XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_5_0
Offset: 0x158 | Read/Write: R/W | Reset: 0x000XX0XX (0bxxxxxxxxxxxxxxxxxxxxxxx00xx00xx0)
17:12 RO X RX_QEYE_OUT
8 RW 0x0 RX_QEYE_EN
7 RW 0x0 EOM_EN
5 RO X EOM_TRAIN_DONE
4 RW 0x0 EOM_TRAIN_EN
3 RW 0x0 DFE_RESET
1 RO X DFE_TRAIN_DONE
0 RW 0x0 DFE_TRAIN_EN
19.13.12.88 XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_6_0
Offset: 0x15c | Read/Write: R/W | Reset: 0xXX000000 (0bxxxxxxxx000000000000000000000000)
31:24 RO X MISC_OUT
19.13.13.2 T_XUSB_CFG_1
26:25 0 R T_XUSB_CFG_1_DEVSEL_TIMING:
0h: DEVSEL_TIMING_FAST (default)
1h: DEVSEL_TIMING_MEDIUM
2h: DEVSEL_TIMING_SLOW
31 0 R T_XUSB_CFG_1_DETECTED_PERR:
0h: DETECTED_PERR_NOT_ACTIVE (default)
1h: DETECTED_PERR_ACTIVE
1h: DETECTED_PERR_CLEAR
30 0 R T_XUSB_CFG_1_SIGNALED_SERR:
0h: SIGNALED_SERR_NOT_ACTIVE (default)
1h: SIGNALED_SERR_ACTIVE
1h: SIGNALED_SERR_CLEAR
18:11 0 R Reserved
29 0 R T_XUSB_CFG_1_RECEIVED_MASTER:
0h: RECEIVED_MASTER_NO_ABORT (default)
1h: RECEIVED_MASTER_ABORT
1h: RECEIVED_MASTER_CLEAR
28 0 R T_XUSB_CFG_1_RECEIVED_TARGET:
0h: RECEIVED_TARGET_NO_ABORT (default)
1h: RECEIVED_TARGET_ABORT
1h: RECEIVED_TARGET_CLEAR
27 0 R T_XUSB_CFG_1_SIGNALED_TARGET:
0h: SIGNALED_TARGET_NO_ABORT (default)
1h: SIGNALED_TARGET_ABORT
1h: SIGNALED_TARGET_CLEAR
24 0 R T_XUSB_CFG_1_MASTER_DATA_PERR:
0h: MASTER_DATA_PERR_NOT_ACTIVE (default)
1h: MASTER_DATA_PERR_ACTIVE
1h: MASTER_DATA_PERR_CLEAR
23 1h R T_XUSB_CFG_1_FAST_BACK2BACK:
0h: FAST_BACK2BACK_INCAPABLE
1h: FAST_BACK2BACK_CAPABLE (default)
22 0 R Reserved
21 1h R T_XUSB_CFG_1_66MHZ:
0h: 66MHZ_INCAPABLE
1h: 66MHZ_CAPABLE (default)
20 1h R T_XUSB_CFG_1_CAPLIST:
0h: CAPLIST_NOT_PRESENT
1h: CAPLIST_PRESENT (default)
19 None R T_XUSB_CFG_1_INTR_STATUS:
0h: INTR_STATUS_0
1h: INTR_STATUS_1
10 0 R/W T_XUSB_CFG_1_INTR_DISABLE:
0h: INTR_DISABLE_ON (default)
1h: INTR_DISABLE_OFF
9 0 R T_XUSB_CFG_1_BACK2BACK:
0h: BACK2BACK_DISABLED (default)
1h: BACK2BACK_ENABLED
8 0 R T_XUSB_CFG_1_SERR:
0h: SERR_DISABLED (default)
1h: SERR_ENABLED
7 0 R T_XUSB_CFG_1_STEP:
0h: STEP_DISABLED (default)
1h: STEP_ENABLED
6 0 R T_XUSB_CFG_1_PERR:
0h: PERR_DISABLED (default)
1h: PERR_ENABLED
5 0 R T_XUSB_CFG_1_PALETTE_SNOOP:
0h: PALETTE_SNOOP_DISABLED (default)
1h: PALETTE_SNOOP_ENABLED
4 0 R T_XUSB_CFG_1_WRITE_AND_INVAL:
0h: WRITE_AND_INVAL_DISABLED (default)
1h: WRITE_AND_INVAL_ENABLED
3 0 R T_XUSB_CFG_1_SPECIAL_CYCLE:
0h: SPECIAL_CYCLE_DISABLED (default)
1h: SPECIAL_CYCLE_ENABLED
2 0 R/W T_XUSB_CFG_1_BUS_MASTER:
0h: BUS_MASTER_DISABLED (default)
1h: BUS_MASTER_ENABLED
1 0 R/W T_XUSB_CFG_1_MEMORY_SPACE:
0h: MEMORY_SPACE_DISABLED (default)
1h: MEMORY_SPACE_ENABLED
0 0 R/W T_XUSB_CFG_1_IO_SPACE:
0h: IO_SPACE_DISABLED (default)
1h: IO_SPACE_ENABLED
19.13.13.3 T_XUSB_CFG_2
31:24 Ch R T_XUSB_CFG_2_BASE_CLASS:
The CLASS_CODE bits identify the generic function of the device and (in some cases) a specific
register-level programming interface. The register is broken into three byte-size fields. The upper
byte (at offset 0BH) is a base class code which broadly classifies the type of function the device
23:16 3h R T_XUSB_CFG_2_SUB_CLASS:
3h: SUB_CLASS_XUSB (default)
19.13.13.4 T_XUSB_CFG_3
31:24 0 R Reserved
23 0 R T_XUSB_CFG_3_HEADER_TYPE_FUNC:
0h: HEADER_TYPE_FUNC_SINGLE (default)
1h: HEADER_TYPE_FUNC_MULTI
22:16 0 R T_XUSB_CFG_3_HEADER_TYPE_DEVICE:
The HEADER_TYPE bits identify the layout of the bytes 10h through 3Fh in configuration space
and also whether or not the device contains multiple functions. Bit 7 in this register is used to
identify a multi-function device. If the bit is 0, then the device is single function. If the bit is 1, then
the device has multiple functions. Bits 6 through 0 specify the layout of bytes 10h through 3Fh.
The LATENCY_TIMER and HEADER_TYPE are defined by parameters per block.
0h: HEADER_TYPE_DEVICE_NON_BRIDGE (default)
1h: HEADER_TYPE_DEVICE_P2P_BRIDGE
15:11 0 R T_XUSB_CFG_3_LATENCY_TIMER:
The LATENCY_TIMER bits contain, in units of PCI bus clocks, the value of the Latency Timer for
this PCI bus master. This register must be implemented as writable by any master that can burst
more than two data phases. This register may be implemented as read-only for devices that burst
two or fewer data phases, but the hardwired value must be limited to 16 or less. A typical
implementation would be to build the five high-order bits (leaving the bottom three as read-only),
resulting in a timer granularity of eight clocks. At reset, the register should be set to 0 (if
programmable). LATENCY_TIMER bits are writable.
0h: LATENCY_TIMER_0_CLOCKS (default)
1h: LATENCY_TIMER_8_CLOCKS
1Eh: LATENCY_TIMER_240_CLOCKS
1Fh: LATENCY_TIMER_248_CLOCKS
10:8 0 R Reserved
7:0 0 R T_XUSB_CFG_3_CACHE_LINE_SIZE:
0h: CACHE_LINE_SIZE_0 (default)
20h: CACHE_LINE_SIZE_32
40h: CACHE_LINE_SIZE_64
19.13.13.5 T_XUSB_CFG_4
14:4 0 R T_XUSB_CFG_4_BAR_SIZE_32KB:
0h: BAR_SIZE_32KB_RSVD (default)
3 1h R T_XUSB_CFG_4_PREFETCHABLE:
0h: PREFETCHABLE_NOT
1h: PREFETCHABLE_MERGABLE (default)
2:1 2h R T_XUSB_CFG_4_ADDRESS_TYPE:
The ADDRESS_TYPE bits contain the type of the Base Address. It can be 32 bits, 20 bits, or 64
bits wide.
0h: ADDRESS_TYPE_32_BIT
2h: ADDRESS_TYPE_64_BIT (default)
0 0 R T_XUSB_CFG_4_SPACE_TYPE:
The SPACE_TYPE bit indicates whether the register maps into Memory or I/O space.
0h: SPACE_TYPE_MEMORY (default)
1h: SPACE_TYPE_IO
19.13.13.6 T_XUSB_CFG_5
Offset: 0x14 | Read/Write: R/W
19.13.13.7 T_XUSB_CFG_6
Offset: 0x18-0x28 | Read/Write: R
31:0 0 R T_XUSB_CFG_6_RSVD:
0h: RSVD_00 (default)
19.13.13.8 T_XUSB_CFG_11
31:16 0 R T_XUSB_CFG_11_SUBSYSTEM_ID:
0h: SUBSYSTEM_ID_NONE (default)
15:0 0 R T_XUSB_CFG_11_SUBSYSTEM_VENDOR_ID:
0h: SUBSYSTEM_VENDOR_ID_NONE (default)
19.13.13.9 T_XUSB_CFG_12
31:0 0 R T_XUSB_CFG_12_RESERVED:
0h: RESERVED_0 (default)
19.13.13.10 T_XUSB_CFG_13
31:8 0 R Reserved
19.13.13.11 T_XUSB_CFG_14
31:0 0 R T_XUSB_CFG_14_RESERVED:
0h: RESERVED_0 (default)
19.13.13.12 T_XUSB_CFG_15
31:24 0 R T_XUSB_CFG_15_MAX_LAT:
The MAX_LAT bits contain the maximum time the device requires to gain
access to the CPI bus. This read-only register is used to specify the device's
desired settings for Latency Timer values. The value specifies a period of time in
units of 1/4 microseconds. Values of 0 indicate that the device has no major
requirements for the settings of Latency Timers. MAX_LAT is nonzero.
The INTR_PIN, MIN_GNT, and MAX_LAT are configurable per block.
For a 64-byte buffer with two 32-byte sections, the maximum tolerable latency
for the XHCI once a large XUSB ISO transaction has begun is about 23 µs. The
latency timer is hardwired to 20 µs. This value only applies in External PCI
operation.
0h: MAX_LAT_NO_REQUIREMENTS (default)
14h: MAX_LAT_5US
50h: MAX_LAT_20US
23:16 0 R T_XUSB_CFG_15_MIN_GNT:
The MIN_GNT bits contain the length of the burst period a device needs
assuming a clock rate of 33 MHz. This read-only register is used to specify the
device's desired settings for Latency Timer values. The value specifies a period
of time in units of 1/4 microsecond. Values of 0 indicate that the device has no
major requirements for the settings of Latency Timers. MIN_GNT is nonzero.
0h: MIN_GNT_NO_REQUIREMENTS (default)
1h: MIN_GNT_240NS
15:8 1h R T_XUSB_CFG_15_INTR_PIN:
The INTR_PIN bits contain the interrupt pin the device (or device function) uses.
A value of 1 corresponds to INTA#. A value of 2 corresponds to INTB#. A value
of 3 corresponds to INTC#. A value of 4 corresponds to INTD#. Devices (or
device functions) that do not use an interrupt pin must put a 0 in this register.
0h: INTR_PIN_NONE
1h: INTR_PIN_INTA (default)
2h: INTR_PIN_INTB
3h: INTR_PIN_INTC
4h: INTR_PIN_INTD
19.13.13.13 T_XUSB_CFG_16
Backdoor register write for updating subsystem ID/vendor ID.
19.13.13.14 T_XUSB_CFG_17
Offset: 0x44 | Read/Write: R
31 1h R T_XUSB_CFG_17_D3CPME_SUPPORT:
1h: D3CPME_SUPPORT_YES
0h: D3CPME_SUPPORT_NO
30 1h R T_XUSB_CFG_17_D3HPME_SUPPORT:
1h: D3HPME_SUPPORT_YES
0h: D3HPME_SUPPORT_NO
29 0 R T_XUSB_CFG_17_D2PME_SUPPORT:
1h: D2PME_SUPPORT_YES
0h: D2PME_SUPPORT_NO
28 0 R T_XUSB_CFG_17_D1PME_SUPPORT:
27 1h R T_XUSB_CFG_17_D0PME_SUPPORT:
1h: D0PME_SUPPORT_YES
0h: D0PME_SUPPORT_NO
26 0 R T_XUSB_CFG_17_D2_SUPPORT:
0h: D2_SUPPORT_NO
1h: D2_SUPPORT_YES
25 0 R T_XUSB_CFG_17_D1_SUPPORT:
0h: D1_SUPPORT_NO
1h: D1_SUPPORT_YES
24:22 0 R T_XUSB_CFG_17_AUXCUR:
0h: AUXCUR_SELF
1h: AUXCUR_55MA
2h: AUXCUR_100MA
3h: AUXCUR_160MA
4h: AUXCUR_220MA
5h: AUXCUR_270MA
6h: AUXCUR_320MA
7h: AUXCUR_375MA
21 0 R T_XUSB_CFG_17_DSI:
0h: DSI_NONE
1h: DSI_NEEDED
20 0 R T_XUSB_CFG_17_RSVD:
0h: RSVD_0
19 0 R T_XUSB_CFG_17_PMECLK:
0h: PMECLK_NOT_REQUIRED
1h: PMECLK_REQUIRED
18:16 3h R T_XUSB_CFG_17_VER:
3h: VER_1P2
7:0 1h R T_XUSB_CFG_17_CAP:
1h: CAP_PCIPM
19.13.13.15 T_XUSB_CFG_18_PMCSR
Offset: 0x48 | Read/Write: R/W
31:24 0 R Reserved
23:16 0 R T_XUSB_CFG_18_PMCSR_BSE_RSVD:
0h: BSE_RSVD_00
15 0 RW1C T_XUSB_CFG_18_PMCSR_PMESTATUS:
0h: PMESTATUS_NOT_PENDING (default)
1h: PMESTATUS_PENDING
1h: PMESTATUS_CLEAR
14:13 0 R T_XUSB_CFG_18_PMCSR_DSCALE:
0h: DSCALE_INIT
12:9 0 R T_XUSB_CFG_18_PMCSR_DSEL:
0h: DSEL_INIT
8 0 R/W T_XUSB_CFG_18_PMCSR_PME:
1h: PME_ENABLE
0h: PME_DISABLE (default)
7:4 0 R T_XUSB_CFG_18_PMCSR_RSVD1:
0h: RSVD1_00
3 1h R T_XUSB_CFG_18_PMCSR_NSR:
1h: NSR_NORESET
0h: NSR_RESET
2 0 R T_XUSB_CFG_18_PMCSR_RSVD0:
0h: RSVD0_0
19.13.13.16 T_XUSB_CFG_24
31:16 0 R Reserved
15:14 0 R T_XUSB_CFG_24_RSVDP:
0h: RSVDP_VALUE
19.13.13.17 T_XUSB_CFG_EMU_RSVD
MSIX is not part of Tegra K1 processors.
The PCIe and HT capabilities are not required. PCIe capability will be trapped by the emulation only IP - the emulation only IP
put the PCIe capability at 80h ~ BBh, and uses BCh ~ BFh, so these regions are reserved for the emulation only IP. (The
emulation only IP will mask the pointers to insert the PCIe capability to the config space of the unit.)
19.13.13.18 T_XUSB_MSI_CTRL
31:25 0 R Reserved
24 0 R T_XUSB_MSI_CTRL_VECTOR_MASK_CAP:
The VECTOR_MASK_CAP field indicates whether or not the controller supports
MSI-per-vector masking.
0h: VECTOR_MASK_CAP_DIS
1h: VECTOR_MASK_CAP_EN
0h: VECTOR_MASK_CAP_DEFAULT (default)
23 1h R T_XUSB_MSI_CTRL_64_ADDR_CAP:
The 64_ADDR_CAP field indicates whether or not the controller is capable of
generating a 64-bit message address. A value of 1 means the controller is
capable of generating a 64-bit message address.
0h: 64_ADDR_CAP_DIS
1h: 64_ADDR_CAP_EN
1h: 64_ADDR_CAP_DEFAULT (default)
19:17 0 R T_XUSB_MSI_CTRL_MULT_MSG_CAP:
System software reads this field to determine the number of requested vectors.
The number of requested vectors must be aligned to a power of two. Values of 6
and 7 in this field are reserved.
0h: MULT_MSG_CAP_1
1h: MULT_MSG_CAP_2
2h: MULT_MSG_CAP_4
3h: MULT_MSG_CAP_8
4h: MULT_MSG_CAP_16
5h: MULT_MSG_CAP_32
0h: MULT_MSG_CAP_DEFAULT (default)
16 0 R/W T_XUSB_MSI_CTRL_MSI_ENABLE:
The MSI_ENABLE field enables the MSI capability. If MSI_ENABLE is written to
a 1, the controller is permitted to use MSI to request service and is prohibited
from using the legacy interrupt. System configuration software sets this bit to
enable MSI.
A device driver is prohibited from writing this bit to mask the controller's service
request.
If this bit is written to a 0, the controller is prohibited from using MSI to request
service.
0h: MSI_ENABLE_OFF
1h: MSI_ENABLE_ON
0h: MSI_ENABLE_DEFAULT (default)
7:0 5h R T_XUSB_MSI_CTRL_CAP_ID:
The CAP_ID field identifies this capability block as the MSI capability block. This
is read-only as 0x5.
5h: CAP_ID_MSI (default)
19.13.13.19 T_XUSB_MSI_ADDR1
1:0 0 R Reserved
19.13.13.20 T_XUSB_MSI_ADDR2
19.13.13.21 T_XUSB_MSI_DATA
31:16 0 R Reserved
19.13.14.1 NV_PROJ__PCIE2_PADS_REFCLK_CFG0
Offset: 0xc8 | Read/Write: R/W
31:28 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK1_DRVI
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK1_DRVI_DEFAULT
27:24 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK1_PREDI
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK1_PREDI_DEFAULT
23 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK1_E_TERM
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK1_E_TERM_DEFAULT
22:18 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK1_TERM
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK1_TERM_DEFAULT
15:12 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK0_DRVI
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK0_DRVI_DEFAULT
11:8 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK0_PREDI
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK0_PREDI_DEFAULT
7 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK0_E_TERM
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK0_E_TERM_DEFAULT
6:2 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK0_TERM
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG0_REFCLK0_TERM_DEFAULT
19.13.14.2 NV_PROJ__PCIE2_PADS_REFCLK_CFG1
Offset: 0xcc | Read/Write: R/W
15:12 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG1_REFCLK2_DRVI
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG1_REFCLK2_DRVI_DEFAULT
Control for reference current on IBIAS outputs of PEX CLK COMP pad.
REF[2:0] IBIAS current output
000 50 µA
001 75 µa
010 100 µA
011 125 µA
100 150 µA
101 200 µA
110 250 µA
111 300 µA
11:8 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG1_REFCLK2_PREDI
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG1_REFCLK2_PREDI_DEFAULT
7 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG1_REFCLK2_E_TERM
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG1_REFCLK2_E_TERM_DEFAULT
6:2 0h NV_PROJ__PCIE2_PADS_REFCLK_CFG1_REFCLK2_TERM
0h: NV_PROJ__PCIE2_PADS_REFCLK_CFG1_REFCLK2_TERM_DEFAULT
19.13.15.1 T_XUSB_CFG_ARU_MAILBOX_CAP
Offset: 0xe0 | Read/Write: R/W | Reset: 0xXXXXXXXX (0b00000000000000000000000000000000)
15:8 0 RW T_XUSB_CFG_ARU_MAILBOX_CAP_NEXTPTR
0h: MAILBOX_CAP_NEXTPTR_NULL
0h: MAILBOX_CAP_NEXTPTR_INIT (default)
7:0 9h RW T_XUSB_CFG_ARU_MAILBOX_CAP_ID:
9h: MAILBOX_CAP_ID_INIT (default)
19.13.15.2 T_XUSB_CFG_ARU_MAILBOX_CMD
Offset: 0xe4 | Read/Write: R/W | Reset: 0xXXXXXXXX (0b00000000000000000000000000000000)
31 0 R/W T_XUSB_CFG_ARU_MAILBOX_CMD_INT_EN:
0h: MAILBOX_CMD_INT_EN_INIT (default)
30 0 RW T_XUSB_CFG_ARU_MAILBOX_CMD_DEST_XHCI:
0h: MAILBOX_CMD_DEST_XHCI_INIT (default)
29 0 RW T_XUSB_CFG_ARU_MAILBOX_CMD_DEST_SMI:
0h: MAILBOX_CMD_DEST_SMI_INIT (default)
28 0 RW T_XUSB_CFG_ARU_MAILBOX_CMD_DEST_PME:
0h: MAILBOX_CMD_DEST_PME_INIT (default)
27 0 RW T_XUSB_CFG_ARU_MAILBOX_CMD_DEST_FALCON:
0h: MAILBOX_CMD_DEST_FALCON_INIT (default)
26:0 0 RW T_XUSB_CFG_ARU_MAILBOX_CMD_RSVD:
0h: MAILBOX_CMD_RSVD_INIT (default)
19.13.15.3 T_XUSB_CFG_ARU_MAILBOX_DATA_IN
Offset: 0xe8 | Read/Write: R/W | Reset: 0xXXXXXXXX (0b00000000000000000000000000000000)
19.13.15.4 T_XUSB_CFG_ARU_MAILBOX_DATA_OUT
Offset: 0xec | Read/Write: R/W | Reset: 0xXXXXXXXX (0b00000000000000000000000000000000)
19.13.15.5 T_XUSB_CFG_ARU_MAILBOX_OWNER
Offset: 0xf0 | Read/Write: R/W | Reset: 0xXXXXXXXX (0b00000000000000000000000000000000)
19.13.16.1 XUSB_CSB_MEMPOOL_ILOAD_ATTR_0
TC
31 RW 0x0
0: TC_DEFAULT
NS
30 RW 0x0
0: NS_DEFAULT
RO
29 RW 0x0
0: RO_DEFAULT
SIZE
19:8 RW 0x0
0: SIZE_DEFAULT
RSVD
7:0 RO 0x0
0: RSVD_DEFAULT
19.13.16.2 XUSB_CSB_MEMPOOL_ILOAD_BASE_LO_0
19.13.16.3 XUSB_CSB_MEMPOOL_ILOAD_BASE_HI_0
19.13.16.4 XUSB_CSB_MEMPOOL_L2IMEMOP_SIZE_0
19.13.16.5 XUSB_CSB_MEMPOOL_L2IMEMOP_TRIG_0
31:24 RW X ACTION
0x10: L2IMEM_LOAD_LOCKED
0x11: L2IMEM_LOAD_LOCKED_RESULT
0x20: L2IMEM_UNLOCK
0x21: L2IMEM_UNLOCK_RESULT
0x22: L2IMEM_UNLOCK_OPTIMIZED
0x23: L2IMEM_UNLOCK_OPTIMIZED_RESULT
0x40: L2IMEM_INVALIDATE_ALL
0x41: L2IMEM_INVALIDATE_ALL_RESULT
0x50: L2IMEM_QUERY_INDEX_RESULT
0x60: L2IMEM_QUERY_SPACE_RESULT
0xFF: WAITFENCE_RESULT
19.13.16.6 XUSB_CSB_MEMPOOL_APMAP_0
31 0x1 BOOTPATH
1: BOOTPATH_DEFAULT
24 0x0 XREQ_READ
0: XREQ_READ_DEFAULT
19.13.17.1 FALCON_CPUCTL_0
Offset: 0x100 | Read/Write: R/W | Reset: 0b0000000000000000000000000000xxxxx
5 X RO STOPPED: This bit indicates whether the CPU is currently in the stopped state. The Falcon processor will exit this state if
a 1 is written to the STARTCPU bit, or if an interrupt arrives on one of its two inputs and the corresponding IE bit in CSW is
set
0: STOPPED_FALSE
1: STOPPED_TRUE
4 X RO HALTED: This bit indicates whether the CPU is currently in the halted state. The Falcon processor can only exit this state
when a 1 is written to the STARTCPU bit.
0: HALTED_FALSE
1: HALTED_TRUE
3 X WO HRESET: Setting HRESET to true will apply a hard reset. This bit will auto-clear and setting to false has no effect.
0: HRESET_FALSE
1: HRESET_TRUE
2 X WO SRESET: Setting SRESET to true will apply a soft reset. This bit will auto-clear and setting to false has no effect.
0: SRESET_FALSE
1: SRESET_TRUE
1 X WO STARTCPU: Setting STARTCPU to true will start CPU execution while in a HALTED state. If a start request is still
pending, setting to false cancel the start request. Writing any value has no effect while the CPU is running.
0: STARTCPU_FALSE
1: STARTCPU_TRUE
0 X WO IINVAL: Setting IINVAL to true causes all blocks in IMEM except block 0 to be marked as INVALID. This bit will auto-clear
and setting to false has no effect.
0: IINVAL_FALSE
1: IINVAL_TRUE
19.13.17.2 FALCON_BOOTVEC_0
The BOOTVEC register stores the initial execution start address of the CPU when it is first started after a reset.
19.13.17.3 FALCON_DMACTL_0
Offset: 0x10c | Read/Write: R/W | Reset: 0b0000000000000000000000000xxxxxxx1
7 X RO SECURE_STAT
6:3 X RO DMAQ_NUM: Indicates the valid request number at the DMA request queue
2 X RO IMEM_SCRUBBING:
1 X RO DMEM_SCRUBBING:
0: Indicates scrubbing is done. For a non-secure Falcon, this value is always 0.
1: Indicates secure scrubber is pending and scrubbing DMEM, any access to DMEM will be blocked until scrubbing is
done
0: DMEM_SCRUBBING_DONE
1: DMEM_SCRUBBING_PENDING
0 0x1 RW REQUIRE_CTX: When REQUIRE_CTX is set to true, a valid context must be loaded before any DMA request can be
serviced. Pending requests without a valid current context remain pending, and do not prevent the engine from reporting
idle. When this bit is set to false, DMA requests are serviced regardless of the current context. Note that once a request is
issued, it must complete before the engine will be able to report idle, as needed for example to process WFI context switch
requests.
0:REQUIRE_CTX_FALSE
1: REQUIRE_CTX_TRUE
1: REQUIRE_CTX_INIT
19.13.17.4 FALCON_IMFILLRNG1_0
IMFILLRNG1 indicates tag values for the low and high end of the PC range to be auto-filled. The PC range is [tag_lo<<8 ..
tag_hi<<8+255].
If the user enables the auto-fill feature and leaves IMFILLRNG1 as zero, instruction 0x0~0x0ff always works as auto-fill range.
19.13.17.5 FALCON_IMFILLCTL_0
Offset: 0x158 | Read/Write: R/W | Reset: 0b000000000000000000000000000000000
19.13.18.2 T_XUSB_XHCI_CAP_HCSPARAMS1
Offset: 0x04 | Read/Write: R
23 0 R Reserved
T_XUSB_XHCI_CAP_HCSPARAMS1_MAXSLOTS:
7:0 Unknown R
FFh: MAXSLOTS_INIT
19.13.18.3 T_XUSB_XHCI_CAP_HCSPARAMS2
Offset: 0x08 | Read/Write: R
26 Unknown R T_XUSB_XHCI_CAP_HCSPARAMS2_SPR:
1h: SPR_TRUE
0h: SPR_FALSE
T_XUSB_XHCI_CAP_HCSPARAMS2_IST:
3:0 Unknown R
8h: IST_INIT
19.13.18.4 T_XUSB_XHCI_CAP_HCSPARAMS3
Offset: 0x0c | Read/Write: R
T_XUSB_XHCI_CAP_HCSPARAMS3_U1LAT:
7:0 Unknown R
2h: U1LAT_INIT
19.13.18.5 T_XUSB_XHCI_CAP_HCCPARAMS
Offset: 0x10 | Read/Write: R
8 Unknown R T_XUSB_XHCI_CAP_HCCPARAMS_PAE:
1h: PAE_TRUE
0h: PAE_FALSE
7 Unknown R T_XUSB_XHCI_CAP_HCCPARAMS_NSS:
1h: NSS_TRUE
0h: NSS_FALSE
6 Unknown R T_XUSB_XHCI_CAP_HCCPARAMS_LTC:
1h: LTC_TRUE
0h: LTC_FALSE
5 Unknown R T_XUSB_XHCI_CAP_HCCPARAMS_LHRC:
1h: LHRC_TRUE
0h: LHRC_FALSE
4 Unknown R T_XUSB_XHCI_CAP_HCCPARAMS_PIND:
1h: PIND_TRUE
0h: PIND_FALSE
3 Unknown R T_XUSB_XHCI_CAP_HCCPARAMS_PPC:
1h: PPC_TRUE
0h: PPC_FALSE
2 Unknown R T_XUSB_XHCI_CAP_HCCPARAMS_CSZ:
1h: CSZ_64B
0h: CSZ_32B
1 Unknown R T_XUSB_XHCI_CAP_HCCPARAMS_BNC:
1h: BNC_TRUE
0h: BNC_FALSE
0 Unknown R T_XUSB_XHCI_CAP_HCCPARAMS_AC64:
1h: AC64_TRUE
0h: AC64_FALSE
19.13.18.6 T_XUSB_XHCI_CAP_DBOFF
Offset: 0x14 | Read/Write: R
19.13.18.7 T_XUSB_XHCI_CAP_RTSOFF
Offset: 0x18 | Read/Write: R
19.13.18.8 T_XUSB_XHCI_CAP_RSVD0
Offset: 0x1c | Read/Write: R
TEGRA K1 | TRM | DP-06905-001_v03p | SUBJECT TO CHANGE WITHOUT NOTICE | www.nvidia.com 1279
Tegra K1 Technical Reference Manual
USB Complex
19.13.18.9 T_XUSB_XHCI_OP_USBCMD
Offset: 0x20 | Read/Write: R/W
31:12 0 R T_XUSB_XHCI_OP_USBCMD_RSVD1:
0h: RSVD1_00 (default)
11 0 R/W T_XUSB_XHCI_OP_USBCMD_EU3S:
0h: EU3S_DISABLE (default)
1h: EU3S_ENABLE
10 0 R/W T_XUSB_XHCI_OP_USBCMD_EWE:
0h: EWE_DISABLE (default)
1h: EWE_ENABLE
9 0 RW1C T_XUSB_XHCI_OP_USBCMD_CRS:
0h: CRS_INIT (default)
1h: CRS_START
0h: CRS_NOOP
8 0 RW1C T_XUSB_XHCI_OP_USBCMD_CSS:
0h: CSS_INIT (default)
1h: CSS_START
0h: CSS_NOOP
7 0 R/W T_XUSB_XHCI_OP_USBCMD_LHCRST:
0h: LHCRST_NOT_PENDING (default)
1h: LHCRST_PENDING
1h: LHCRST_SET
6:4 0 R T_XUSB_XHCI_OP_USBCMD_RSVD0:
0h: RSVD0_00 (default)
3 0 R/W T_XUSB_XHCI_OP_USBCMD_HSEE:
0h: HSEE_DISABLE (default)
1h: HSEE_ENABLE
2 0 R/W T_XUSB_XHCI_OP_USBCMD_INTE:
0h: INTE_DISABLE (default)
1h: INTE_ENABLE
1 0 R/W T_XUSB_XHCI_OP_USBCMD_HCRST:
0h: HCRST_NOT_PENDING (default)
1h: HCRST_PENDING
1h: HCRST_SET
0 0 R/W T_XUSB_XHCI_OP_USBCMD_RS:
0h: RS_STOP (default)
1h: RS_RUN
19.13.18.10 T_XUSB_XHCI_OP_USBSTS
Offset: 0x24 | Read/Write: R/W
31:13 0 R T_XUSB_XHCI_OP_USBSTS_RSVD2:
0h: RSVD2_00 (default)
12 0 R T_XUSB_XHCI_OP_USBSTS_HCE:
0h: HCE_NO_ERROR (default)
1h: HCE_ERROR
11 1 R T_XUSB_XHCI_OP_USBSTS_CNR:
10 0 RW1C T_XUSB_XHCI_OP_USBSTS_SRE:
0h: SRE_NOT_PENDING (default)
1h: SRE_PENDING
1h: SRE_CLEAR
9 0 R T_XUSB_XHCI_OP_USBSTS_RSS:
0h: RSS_NOT_PENDING (default)
1h: RSS_PENDING
8 0 R T_XUSB_XHCI_OP_USBSTS_SSS:
0h: SSS_NOT_PENDING (default)
1h: SSS_PENDING
7:5 0 R T_XUSB_XHCI_OP_USBSTS_RSVD1:
0h: RSVD1_00 (default)
4 0 RW1C T_XUSB_XHCI_OP_USBSTS_PCD:
0h: PCD_NOT_PENDING (default)
1h: PCD_PENDING
1h: PCD_CLEAR
3 0 RW1C T_XUSB_XHCI_OP_USBSTS_EINT:
0h: EINT_NOT_PENDING (default)
1h: EINT_PENDING
1h: EINT_CLEAR
2 0 RW1C T_XUSB_XHCI_OP_USBSTS_HSE:
0h: HSE_NOT_PENDING (default)
1h: HSE_PENDING
1h: HSE_CLEAR
1 0 R T_XUSB_XHCI_OP_USBSTS_RSVD0:
0h: RSVD0_0 (default)
0 1 R T_XUSB_XHCI_OP_USBSTS_HCH:
1h: HCH_HALTED (default)
0h: HCH_RUNNING
19.13.18.11 T_XUSB_XHCI_OP_PGSZ
Offset: 0x28 | Read/Write: R
31:16 0 R T_XUSB_XHCI_OP_PGSZ_RSVD0:
0h: RSVD0_00 (default)
15:0 1 R T_XUSB_XHCI_OP_PGSZ_PAGESIZE:
1h: PAGESIZE_4K (default)
19.13.18.12 T_XUSB_XHCI_OP_DNCTRL
Offset: 0x34 | Read/Write: R/W
31:16 0 R Reserved
15 0 R/W T_XUSB_XHCI_OP_DNCTRL_N15:
0h: N15_DISABLE (default)
1h: N15_ENABLE
14 0 R/W T_XUSB_XHCI_OP_DNCTRL_N14:
0h: N14_DISABLE (default)
1h: N14_ENABLE
13 0 R/W T_XUSB_XHCI_OP_DNCTRL_N13:
0h: N13_DISABLE (default)
1h: N13_ENABLE
12 0 R/W T_XUSB_XHCI_OP_DNCTRL_N12:
0h: N12_DISABLE (default)
1h: N12_ENABLE
11 0 R/W T_XUSB_XHCI_OP_DNCTRL_N11:
0h: N11_DISABLE (default)
1h: N11_ENABLE
10 0 R/W T_XUSB_XHCI_OP_DNCTRL_N10:
0h: N10_DISABLE (default)
1h: N10_ENABLE
9 0 R/W T_XUSB_XHCI_OP_DNCTRL_N9:
0h: N9_DISABLE (default)
1h: N9_ENABLE
8 0 R/W T_XUSB_XHCI_OP_DNCTRL_N8:
0h: N8_DISABLE (default)
1h: N8_ENABLE
7 0 R/W T_XUSB_XHCI_OP_DNCTRL_N7:
0h: N7_DISABLE (default)
1h: N7_ENABLE
6 0 R/W T_XUSB_XHCI_OP_DNCTRL_N6:
0h: N6_DISABLE (default)
1h: N6_ENABLE
5 0 R/W T_XUSB_XHCI_OP_DNCTRL_N5:
0h: N5_DISABLE (default)
1h: N5_ENABLE
4 0 R/W T_XUSB_XHCI_OP_DNCTRL_N4:
0h: N4_DISABLE (default)
1h: N4_ENABLE
3 0 R/W T_XUSB_XHCI_OP_DNCTRL_N3:
0h: N3_DISABLE (default)
1h: N3_ENABLE
2 0 R/W T_XUSB_XHCI_OP_DNCTRL_N2:
0h: N2_DISABLE (default)
1h: N2_ENABLE
1 0 R/W T_XUSB_XHCI_OP_DNCTRL_N1:
0h: N1_DISABLE (default)
1h: N1_ENABLE
0 0 R/W T_XUSB_XHCI_OP_DNCTRL_N0:
0h: N0_DISABLE (default)
1h: N0_ENABLE
19.13.18.13 T_XUSB_XHCI_OP_CRCR0
Offset: 0x38 | Read/Write: R/W
31:6 0 W T_XUSB_XHCI_OP_CRCR0_CRPLO:
0h: CRPLO_INIT (default)
5:4 0 R T_XUSB_XHCI_OP_CRCR0_RSVD0:
0h: RSVD0_00 (default)
3 0 R T_XUSB_XHCI_OP_CRCR0_CRR:
0h: CRR_STOPPED (default)
1h: CRR_RUNNING
2 0 RW1C T_XUSB_XHCI_OP_CRCR0_CA:
0h: CA_INIT (default)
1h: CA_ABORT
1 0 RW1C T_XUSB_XHCI_OP_CRCR0_CS:
0h: CS_INIT (default)
1h: CS_STOP
0 0 RW1C T_XUSB_XHCI_OP_CRCR0_RCS:
0h: RCS_0 (default)
1h: RCS_1
19.13.18.14 T_XUSB_XHCI_OP_CRCR1
Offset: 0x3c | Read/Write: R/W
31:0 0 W T_XUSB_XHCI_OP_CRCR1_CRPHI:
0h: CRPHI_INIT (default)
19.13.18.15 T_XUSB_XHCI_OP_DCBAAP0
Offset: 0x50 | Read/Write: R/W
5:0 0 R T_XUSB_XHCI_OP_DCBAAP0_RSVD0:
0h: RSVD0_00 (default)
19.13.18.16 T_XUSB_XHCI_OP_DCBAAP1
Offset: 0x54 | Read/Write: R/W
19.13.18.17 T_XUSB_XHCI_OP_CONFIG
Offset: 0x58 | Read/Write: R/W
31:8 0 R T_XUSB_XHCI_OP_CONFIG_RSVD0:
0h: RSVD0_00 (default)
19.13.18.18 T_XUSB_XHCI_OP_PORTSC
Offset: 0x420 – 0x510 | Read/Write: R/W
31 0 R T_XUSB_XHCI_OP_PORTSC_WPR:
0h: WPR_NOT_PENDING (default)
1h: WPR_PENDING
1h: WPR_SET
30 0 R T_XUSB_XHCI_OP_PORTSC_DR:
0h: DR_FALSE (default)
1h: DR_TRUE
29:28 0 R T_XUSB_XHCI_OP_PORTSC_RSVD2:
0h: RSVD2_00 (default)
27 0 R/W T_XUSB_XHCI_OP_PORTSC_WOE:
0h: WOE_DISABLED (default)
1h: WOE_ENABLED
26 0 R/W T_XUSB_XHCI_OP_PORTSC_WDE:
0h: WDE_DISABLED (default)
1h: WDE_ENABLED
25 0 R/W T_XUSB_XHCI_OP_PORTSC_WCE:
0h: WCE_DISABLED (default)
1h: WCE_ENABLED
24 0 R T_XUSB_XHCI_OP_PORTSC_CAS:
0h: CAS_INIT (default)
23 0 RW1C T_XUSB_XHCI_OP_PORTSC_CEC:
0h: CEC_NOT_PENDING (default)
1h: CEC_PENDING
1h: CEC_CLEAR
22 0 RW1C T_XUSB_XHCI_OP_PORTSC_PLC:
0h: PLC_NOT_PENDING (default)
1h: PLC_PENDING
1h: PLC_CLEAR
21 0 RW1C T_XUSB_XHCI_OP_PORTSC_PRC:
0h: PRC_NOT_PENDING (default)
1h: PRC_PENDING
1h: PRC_CLEAR
20 0 RW1C T_XUSB_XHCI_OP_PORTSC_OCC:
0h: OCC_NOT_PENDING (default)
1h: OCC_PENDING
1h: OCC_CLEAR
19 0 RW1C T_XUSB_XHCI_OP_PORTSC_WRC:
0h: WRC_NOT_PENDING (default)
1h: WRC_PENDING
1h: WRC_CLEAR
18 0 RW1C T_XUSB_XHCI_OP_PORTSC_PEC:
0h: PEC_NOT_PENDING (default)
1h: PEC_PENDING
1h: PEC_CLEAR
17 0 RW1C T_XUSB_XHCI_OP_PORTSC_CSC:
0h: CSC_NOT_PENDING (default)
1h: CSC_PENDING
1h: CSC_CLEAR
16 0 RW1C T_XUSB_XHCI_OP_PORTSC_LWS:
0h: LWS_DISABLED (default)
1h: LWS_ENABLED
13:10 0 R T_XUSB_XHCI_OP_PORTSC_PSPD:
0h: PSPD_UNDEFINED (default)
1h: PSPD_FS
2h: PSPD_LS
3h: PSPD_HS
9 1 R/W T_XUSB_XHCI_OP_PORTSC_PP:
0h: PP_OFF
1h: PP_ON (default)
4 0 R/W T_XUSB_XHCI_OP_PORTSC_PR:
0h: PR_NOT_PENDING (default)
1h: PR_PENDING
1h: PR_SET
3 0 R T_XUSB_XHCI_OP_PORTSC_OCA:
0h: OCA_FALSE (default)
1h: OCA_TRUE
2 0 R T_XUSB_XHCI_OP_PORTSC_RSVD0:
0h: RSVD0_0 (default)
1 0 RW1C T_XUSB_XHCI_OP_PORTSC_PED:
0h: PED_DISABLED (default)
1h: PED_ENABLED
1h: PED_CLEAR
0 0 R T_XUSB_XHCI_OP_PORTSC_CCS:
0h: CCS_NODEV (default)
1h: CCS_DEV
19.13.18.19 T_XUSB_XHCI_OP_PORTPMSCSS
Offset: 0x424 – 0x514 | Read/Write: R/W
31:17 0 R T_XUSB_XHCI_OP_PORTPMSCSS_RSVD0:
0h: RSVD0_00 (default)
16 0 R/W T_XUSB_XHCI_OP_PORTPMSCSS_FLA:
0h: FLA_INIT (default)
19.13.18.20 T_XUSB_XHCI_OP_PORTPMSCHS
Offset: 0x424 – 0x514 | Read/Write: R/W
27:17 0 R T_XUSB_XHCI_OP_PORTPMSCHS_RSVD0:
0h: RSVD0_00 (default)
16 0 R/W T_XUSB_XHCI_OP_PORTPMSCHS_HLE:
0h: HLE_INIT (default)
3 0 R/W T_XUSB_XHCI_OP_PORTPMSCHS_RWE:
0h: RWE_DISABLED (default)
1h: RWE_ENABLED
2:0 0 R T_XUSB_XHCI_OP_PORTPMSCHS_L1S:
0h: L1S_INVLD (default)
1h: L1S_SUCCESS
2h: L1S_NYET
3h: L1S_STALL
4h: L1S_ERROR
19.13.18.21 T_XUSB_XHCI_OP_PORTLISC
Offset: 0x428 – 0x458 | Read/Write: R
31:16 0 R T_XUSB_XHCI_OP_PORTLISC_RSVD0:
0h: RSVD0_00 (default)
15:0 0 R T_XUSB_XHCI_OP_PORTLISC_LEC:
0h: LEC_INIT (default)
19.13.18.22 T_XUSB_XHCI_OP_PORTHLPMC
Offset: 0x42c – 0x51c | Read/Write: R
13:10 0 R T_XUSB_XHCI_OP_PORTHLPMC_BESLD:
0h: BESLD_INIT (default)
19.13.18.23 T_XUSB_XHCI_EC_USBLEGSUP
Offset: 0x600 | Read/Write: R/W
31:25 0 R T_XUSB_XHCI_EC_USBLEGSUP_RSVD1:
0h: RSVD1_00 (default)
24 0 R/W T_XUSB_XHCI_EC_USBLEGSUP_OSSEM:
0h: OSSEM_INIT (default)
23:17 0 R T_XUSB_XHCI_EC_USBLEGSUP_RSVD0:
0h: RSVD0_00 (default)
16 0 R/W T_XUSB_XHCI_EC_USBLEGSUP_BIOSSEM:
0h: BIOSSEM_INIT (default)
15:8 4h R T_XUSB_XHCI_EC_USBLEGSUP_NEXT:
4h: NEXT_SUPPROT_USB3 (default)
7:0 1h R T_XUSB_XHCI_EC_USBLEGSUP_CAPID:
1h: CAPID_USBLEGSUP (default)
19.13.18.24 T_XUSB_XHCI_EC_USBLEGCTLSTS
Offset: 0x604 | Read/Write: R/W
31 0 RW1C T_XUSB_XHCI_EC_USBLEGCTLSTS_BAR:
0h: BAR_NOT_PENDING (default)
1h: BAR_PENDING
1h: BAR_CLEAR
30 0 RW1C T_XUSB_XHCI_EC_USBLEGCTLSTS_PCIC:
0h: PCIC_NOT_PENDING (default)
1h: PCIC_PENDING
1h: PCIC_CLEAR
29 0 RW1C T_XUSB_XHCI_EC_USBLEGCTLSTS_OSOC:
0h: OSOC_NOT_PENDING (default)
1h: OSOC_PENDING
1h: OSOC_CLEAR
28:21 0 R T_XUSB_XHCI_EC_USBLEGCTLSTS_RSVD3:
0h: RSVD3_00 (default)
20 0 R T_XUSB_XHCI_EC_USBLEGCTLSTS_HSE:
0h: HSE_NOT_PENDING (default)
1h: HSE_PENDING
19:17 0 R T_XUSB_XHCI_EC_USBLEGCTLSTS_RSVD2:
0h: RSVD2_00 (default)
16 0 R T_XUSB_XHCI_EC_USBLEGCTLSTS_EVI:
0h: EVI_NOT_PENDING (default)
1h: EVI_PENDING
15 0 R/W T_XUSB_XHCI_EC_USBLEGCTLSTS_BAREN:
0h: BAREN_DISABLED (default)
1h: BAREN_ENABLED
14 0 R/W T_XUSB_XHCI_EC_USBLEGCTLSTS_PCIEN:
0h: PCIEN_DISABLED (default)
1h: PCIEN_ENABLED
13 0 R/W T_XUSB_XHCI_EC_USBLEGCTLSTS_OSOEN:
0h: OSOEN_DISABLED (default)
1h: OSOEN_ENABLED
12:5 0 R T_XUSB_XHCI_EC_USBLEGCTLSTS_RSVD1:
0h: RSVD1_00 (default)
4 0 R/W T_XUSB_XHCI_EC_USBLEGCTLSTS_HSEEN:
0h: HSEEN_DISABLED (default)
1h: HSEEN_ENABLED
3:1 0 R T_XUSB_XHCI_EC_USBLEGCTLSTS_RSVD0:
0h: RSVD0_00 (default)
0 0 R/W T_XUSB_XHCI_EC_USBLEGCTLSTS_SMIEN:
0h: SMIEN_DISABLED (default)
1h: SMIEN_ENABLED
19.13.18.25 T_XUSB_XHCI_EC_SUPPROT_USB3_0
Offset: 0x610 | Read/Write: R
31:24 3h R T_XUSB_XHCI_EC_SUPPROT_USB3_0_MAJORREV:
3h: MAJORREV_3 (default)
23:16 0 R T_XUSB_XHCI_EC_SUPPROT_USB3_0_MINORREV:
0h: MINORREV_0 (default)
15:8 4h R T_XUSB_XHCI_EC_SUPPROT_USB3_0_NEXT:
4h: NEXT_SUPPROT_USB2 (default)
7:0 2h R T_XUSB_XHCI_EC_SUPPROT_USB3_0_CAPID:
2h: CAPID_SUPPROT_USB3 (default)
19.13.18.26 T_XUSB_XHCI_EC_SUPPROT_USB3_1
Offset: 0x614 | Read/Write: R
19.13.18.27 T_XUSB_XHCI_EC_SUPPROT_USB3_2
Offset: 0x618 | Read/Write: R
31:16 0 R T_XUSB_XHCI_EC_SUPPROT_USB3_2_RSVD0:
0h: RSVD0_00 (default)
7:0 1h R T_XUSB_XHCI_EC_SUPPROT_USB3_2_PORTOFS:
1h: PORTOFS_VAL (default)
19.13.18.28 T_XUSB_XHCI_EC_SUPPROT_USB3_3
Offset: 0x61c | Read/Write: R
31:0 0 R T_XUSB_XHCI_EC_SUPPROT_USB3_3_SLOTTYPE:
0h: SLOTTYPE_VAL (default)
19.13.18.29 T_XUSB_XHCI_EC_SUPPROT_USB2_0
Offset: 0x620 | Read/Write: R
31:24 2h R T_XUSB_XHCI_EC_SUPPROT_USB2_0_MAJORREV:
2h: MAJORREV_3 (default)
23:16 0h R T_XUSB_XHCI_EC_SUPPROT_USB2_0_MINORREV:
0h: MINORREV_0 (default)
15:8 4h R T_XUSB_XHCI_EC_SUPPROT_USB2_0_NEXT:
4h: NEXT_DBCAP (default)
7:0 2h R T_XUSB_XHCI_EC_SUPPROT_USB2_0_CAPID:
2h: CAPID_SUPPROT_USB3 (default)
19.13.18.30 T_XUSB_XHCI_EC_SUPPROT_USB2_1
Offset: 0x624 | Read/Write: R
19.13.18.31 T_XUSB_XHCI_EC_SUPPROT_USB2_2
Offset: 0x628 | Read/Write: R
31:28 0 R T_XUSB_XHCI_EC_SUPPROT_USB2_2_RSVD2:
0h: RSVD2_00 (default)
27:25 0 R T_XUSB_XHCI_EC_SUPPROT_USB2_2_MHD:
0h: MHD (default)
24:21 0 R T_XUSB_XHCI_EC_SUPPROT_USB2_2_RSVD1:
0h: RSVD1_00 (default)
20 1 R T_XUSB_XHCI_EC_SUPPROT_USB2_2_BLC:
1h: BLC_TRUE (default)
19 1 R T_XUSB_XHCI_EC_SUPPROT_USB2_2_HLC:
1h: HLC_TRUE (default)
18 0 R T_XUSB_XHCI_EC_SUPPROT_USB2_2_IHI:
0h: IHI_TRUE (default)
17 0 R T_XUSB_XHCI_EC_SUPPROT_USB2_2_HSO:
0h: HSO_TRUE (default)
16 0 R T_XUSB_XHCI_EC_SUPPROT_USB2_2_RSVD0:
0h: RSVD0_00 (default)
19.13.18.32 T_XUSB_XHCI_EC_SUPPROT_USB2_3
Offset: 0x62c | Read/Write: R
31:0 0 R T_XUSB_XHCI_EC_SUPPROT_USB2_3_SLOTTYPE:
0h: SLOTTYPE_VAL (default)
19.13.18.33 T_XUSB_XHCI_EC_DBCAP_DCID
Offset: 0x630 | Read/Write: R
31:21 0 R Reserved
20:16 1h R T_XUSB_XHCI_EC_DBCAP_DCID_DCERSTM:
15:8 0 R T_XUSB_XHCI_EC_DBCAP_DCID_NEXT:
0h: NEXT_NONE (default)
7:0 Ah R T_XUSB_XHCI_EC_DBCAP_DCID_CAPID:
Ah: CAPID_DBCAP (default)
19.13.18.34 T_XUSB_XHCI_EC_DBCAP_DCDB
Offset: 0x634 | Read/Write: W
31:16 0 R T_XUSB_XHCI_EC_DBCAP_DCDB_RSVD1:
0h: RSVD1_00 (default)
15:8 0 W T_XUSB_XHCI_EC_DBCAP_DCDB_DBTARGET:
0h: DBTARGET_INIT (default)
7:0 0 R T_XUSB_XHCI_EC_DBCAP_DCDB_RSVD0:
0h: RSVD0_00 (default)
19.13.18.35 T_XUSB_XHCI_EC_DBCAP_DCERSTSZ
Offset: 0x638 | Read/Write: R/W
31:16 0 R T_XUSB_XHCI_EC_DBCAP_DCERSTSZ_RSVD0:
0h: RSVD0_00 (default)
19.13.18.36 T_XUSB_XHCI_EC_DBCAP_RSVD0
Offset: 0x63c | Read/Write: R
31:0 0 R T_XUSB_XHCI_EC_DBCAP_RSVD0_RSVD0:
0h: RSVD0_00 (default)
19.13.18.37 T_XUSB_XHCI_EC_DBCAP_DCERSTBALO
Offset: 0x640 | Read/Write: R/W
3:0 0 R T_XUSB_XHCI_EC_DBCAP_DCERSTBALO_RSVD0:
0h: RSVD0_00 (default)
19.13.18.38 T_XUSB_XHCI_EC_DBCAP_DCERSTBAHI
Offset: 0x644 | Read/Write: R/W
19.13.18.39 T_XUSB_XHCI_EC_DBCAP_DCERDPLO
Offset: 0x648 | Read/Write: R/W
3 0 R T_XUSB_XHCI_EC_DBCAP_DCERDPLO_RSVD0:
0h: RSVD0_00 (default)
19.13.18.40 T_XUSB_XHCI_EC_DBCAP_DCERDPHI
Offset: 0x64c | Read/Write: R/W
19.13.18.41 T_XUSB_XHCI_EC_DBCAP_DCCTRL
Offset: 0x650 | Read/Write: R/W
31 0 R/W T_XUSB_XHCI_EC_DBCAP_DCCTRL_DCE:
0h DCE_DIS (default)
1h DCE_EN
30:24 0 R T_XUSB_XHCI_EC_DBCAP_DCCTRL_DEVADR:
0h: DEVADR_INIT (default)
15:5 0 R T_XUSB_XHCI_EC_DBCAP_DCCTRL_RSVD0:
0h: RSVD0_00 (default)
4 0 RW1C T_XUSB_XHCI_EC_DBCAP_DCCTRL_DRC:
0h: DRC_INIT (default)
1h: DRC_SET
1h: DRC_CLEAR
3 0 R/W T_XUSB_XHCI_EC_DBCAP_DCCTRL_HIT:
0h: HIT_FALSE (default)
1h: HIT_TRUE
2 0 R/W T_XUSB_XHCI_EC_DBCAP_DCCTRL_HOT:
0h: HOT_FALSE (default)
1h: HOT_TRUE
1 0 R/W T_XUSB_XHCI_EC_DBCAP_DCCTRL_LSE:
0h: LSE_DIS (default)
1h: LSE_EN
0 0 R T_XUSB_XHCI_EC_DBCAP_DCCTRL_DCR:
0h: DCR_STOP (default)
1h: DCR_RUN
19.13.18.42 T_XUSB_XHCI_EC_DBCAP_DCST
Offset: 0x654 | Read/Write: R
31:24 0 R T_XUSB_XHCI_EC_DBCAP_DCST_DPN:
0h: DPN_INIT (default)
23:1 0 R T_XUSB_XHCI_EC_DBCAP_DCST_RSVD:
0h: RSVD_00 (default)
0 0 R T_XUSB_XHCI_EC_DBCAP_DCST_ER:
0h: ER_EMPTY (default)
1h: ER_NOTEMPTY
19.13.18.43 T_XUSB_XHCI_EC_DBCAP_DCPORTSC
Offset: 0x658 | Read/Write: R/W
31:24 0 R T_XUSB_XHCI_EC_DBCAP_DCPORTSC_RSVD4:
0h: RSVD4_00 (default)
23 0 RW1C T_XUSB_XHCI_EC_DBCAP_DCPORTSC_CEC:
0h: CEC_NOT_PENDING (default)
1h: CEC_PENDING
1h: CEC_CLEAR
22 0 RW1C T_XUSB_XHCI_EC_DBCAP_DCPORTSC_PLC:
0h: PLC_NOT_PENDING (default)
1h: PLC_PENDING
1h: PLC_CLEAR
21 0 RW1C T_XUSB_XHCI_EC_DBCAP_DCPORTSC_PRC:
0h: PRC_NOT_PENDING (default)
1h: PRC_PENDING
1h: PRC_CLEAR
20:18 0 R T_XUSB_XHCI_EC_DBCAP_DCPORTSC_RSVD3:
0h: RSVD3_00 (default)
17 0 RW1C T_XUSB_XHCI_EC_DBCAP_DCPORTSC_CSC:
0h: CSC_NOT_PENDING (default)
1h: CSC_PENDING
1h: CSC_CLEAR
16:14 0 R T_XUSB_XHCI_EC_DBCAP_DCPORTSC_RSVD2:
0h: RSVD2_00 (default)
13:10 0 R T_XUSB_XHCI_EC_DBCAP_DCPORTSC_PS:
0h: PS_UNDEFINED (default)
4h: PS_SS
9 0 R T_XUSB_XHCI_EC_DBCAP_DCPORTSC_RSVD1:
0h: RSVD1_00 (default)
8:5 4h R T_XUSB_XHCI_EC_DBCAP_DCPORTSC_PLS:
0h: PLS_U0
1h: PLS_U1
2h: PLS_U2
3h: PLS_U3
4h: PLS_DISABLED (default)
5h: PLS_RXDETECT
6h: PLS_INACTIVE
7h: PLS_POLLING
8h: PLS_RECOVERY
9h: PLS_HOTRESET
Ah: PLS_COMPLIANCE
Bh: PLS_LOOPBACK
Fh: PLS_RESUME
4 0 R T_XUSB_XHCI_EC_DBCAP_DCPORTSC_PR:
0h: PR_NORST (default)
1h: PR_RST
3:2 0 R T_XUSB_XHCI_EC_DBCAP_DCPORTSC_RSVD0:
0h: RSVD0_00 (default)
1 0 R/W T_XUSB_XHCI_EC_DBCAP_DCPORTSC_PED:
0h: PED_DIS (default)
1h: PED_EN
0 0 R T_XUSB_XHCI_EC_DBCAP_DCPORTSC_CCS:
0h: CCS_NOCON (default)
1h: CCS_CON
19.13.18.44 T_XUSB_XHCI_EC_DBCAP_RSVD1
Offset: 0x65c | Read/Write: R
31:0 0 R T_XUSB_XHCI_EC_DBCAP_RSVD1_RSVD0:
0h: RSVD0_00 (default)
19.13.18.45 T_XUSB_XHCI_EC_DBCAP_DCECPLO
Offset: 0x660 | Read/Write: R/W
3:0 0 R T_XUSB_XHCI_EC_DBCAP_DCECPLO_RSVD0:
0h: RSVD0_00 (default)
19.13.18.46 T_XUSB_XHCI_EC_DBCAP_DCECPHI
Offset: 0x664 | Read/Write: R/W
19.13.18.47 T_XUSB_XHCI_EC_DBCAP_INFO0
Offset: 0x668 | Read/Write: R/W
15:8 0 R Reserved
19.13.18.48 T_XUSB_XHCI_EC_DBCAP_INFO1
Offset: 0x66c | Read/Write: R/W
19.13.18.49 T_XUSB_XHCI_RT_MFINDEX
Offset: 0x800 | Read/Write: R
31:14 0 R T_XUSB_XHCI_RT_MFINDEX_RSVD0:
0h: RSVD0_00
19.13.18.50 T_XUSB_XHCI_RT_IMAN
Offset: 0x820 | Read/Write: R/W
31:2 0 R T_XUSB_XHCI_RT_IMAN_RSVD0:
0h: RSVD0_00
1 0 R/W T_XUSB_XHCI_RT_IMAN_IE:
0h: IE_DISABLED (default)
1h: IE_ENABLED
0 0 RW1C T_XUSB_XHCI_RT_IMAN_IP:
0h: IP_NOT_PENDING (default)
1h: IP_PENDING
1h: IP_CLEAR
19.13.18.51 T_XUSB_XHCI_RT_IMOD
Offset: 0x824 | Read/Write: R/W
19.13.18.52 T_XUSB_XHCI_RT_ERSTSZ
Offset: 0x828 | Read/Write: R/W
31:16 0 R T_XUSB_XHCI_RT_ERSTSZ_RSVD0:
0h: RSVD0_00
19.13.18.53 T_XUSB_XHCI_RT_ERRSVD
Offset: 0x82c | Read/Write: R
31:0 0 R T_XUSB_XHCI_RT_ERRSVD_RSVD0:
19.13.18.54 T_XUSB_XHCI_RT_ERSTBA0
Offset: 0x830 | Read/Write: R/W
3:0 0 R T_XUSB_XHCI_RT_ERSTBA0_RSVD0:
0h: RSVD0_00
19.13.18.55 T_XUSB_XHCI_RT_ERSTBA1
Offset: 0x834 | Read/Write: R/W
19.13.18.56 T_XUSB_XHCI_RT_ERDP0
Offset: 0x838 | Read/Write: R/W
19.13.18.57 T_XUSB_XHCI_RT_ERDP1
Offset: 0x83c | Read/Write: R/W
19.13.18.58 T_XUSB_XHCI_DB
Offset: 0xc00 – 0xffc | Read/Write: W
31:16 0 W T_XUSB_XHCI_DB_STREAMID:
0h: STREAMID_INIT (default)
15:8 0 R T_XUSB_XHCI_DB_RSVD0:
0h: RSVD0_00
7:0 0 W T_XUSB_XHCI_DB_TARGET:
0h: TARGET_INIT (default)
19.13.19.1 USB3_UTMIP_PLL_CFG0_0
Note: This register has been moved to the Clock and Reset section of this document. PROGRAMMING THIS
REGISTER HERE WILL HAVE NO EFFECT!
This register was used to configure the PLL inside UTMIP block prior to Tegra K1 processors. This has been defeatured from
UTMIP space and moved to Clock and Reset (CAR) space. Refer to the UTMIP_PLL register descriptions in the Clock and
Reset Controller section.
19.13.19.2 USB3_UTMIP_PLL_CFG1_0
Note: This register has been moved to the Clock and Reset section of this document. PROGRAMMING THIS
REGISTER HERE WILL HAVE NO EFFECT!
This register was used to configure the PLL inside the UTMIP block prior to Tegra K1 processors. This has been defeatured
from UTMIP space and moved to CAR space. Refer to the UTMIP_PLL register descriptions in the Clock and Reset Controller
section.
19.13.19.3 USB3_UTMIP_XCVR_CFG0_0
21 0x1 UTMIP_XCVR_LSBIAS_SEL: Low speed bias selection method for usb transceiver pad
12 0x0 UTMIP_XCVR_HSLOOPBACK: Internal loopback inside XCVR cell. Used for IOBIST.
3:0 0x0 UTMIP_XCVR_SETUP: SETUP[3:0] input of XCVR cell. HS driver output control. 4 LSBs.
19.13.19.4 USB3_UTMIP_BIAS_CFG0_0
22 0x1 UTMIP_IDPD_SEL: 0: Reserved. Refer to the PMC registers for this feature.
19.13.19.5 USB3_UTMIP_HSRX_CFG0_0
29 0x0 UTMIP_ALLOW_CONSEC_UPDN: Allow consecutive ups and downs on the bits, debug only, set to 0.
27:24 0x1 UTMIP_PCOUNT_UPDN_DIV: The number of (edges-1) needed to move the sampling point
23:21 0x3 UTMIP_SQUELCH_EOP_DLY: Limit the delay of the squelch at EOP time
3:2 0x0 UTMIP_PHASE_ADJUST: Based on incoming edges and current sampling position, adjust phase
19.13.19.6 USB3_UTMIP_HSRX_CFG1_0
5:1 0x9 UTMIP_HS_SYNC_START_DLY: How long to wait before start of sync launches RxActive
19.13.19.7 USB3_UTMIP_FSLSRX_CFG0_0
29 0x1 UTMIP_FSLS_SERIAL_SE0_RCV
14 0x0 UTMIP_FSLS_ACTIVE_ON_FULL_SYNC: Require a full sync pattern to declare the data received
13:8 0x4 UTMIP_FSLS_IDLE_WAIT_MAX: 4 bits of of SEO should exceed the time limit
7 0x0 UTMIP_FSLS_IDLE_WAIT_LIMIT: Enable the reset of the state machine on extended SE0
6:1 0x14 UTMIP_FSLS_IDLE_COUNT_MAX: 20 bits of idle should end the packet if FsLsIdleCountLimitCfg=1.
19.13.19.8 USB3_UTMIP_FSLSRX_CFG1_0
26 0x0 UTMIP_EARLY_LINE_STATE_FILTER: Assumes line state filtering table is inclusive, not exclusive
16:11 0xe UTMIP_LS_EOP_START_COUNT: Number of SEO clock cycles to block bit extraction
10:5 0x20 UTMIP_LS_SE0_COUNT: Only for this number of 60 MHz of SEO and Idle to end packet
0 0x0 UTMIP_FS_EOP_LENGTH: Whether full-speed EOP is determined within 3(0) or 4(1) 60 MHz cycles
19.13.19.9 USB3_UTMIP_TX_CFG0_0
15 0x0 UTMIP_HS_READY_WAIT_FOR_VALID
5 0x0 UTMIP_SIE_RESUME_ON_LINESTATE: SIE, not macrocell, detects Line State change to resume
19.13.19.10 USB3_UTMIP_MISC_CFG0_0
25 0x1 UTMIP_KEEP_XCVR_PD_ON_SOFT_DISCON
24 0x1 UTMIP_ALLOW_LS_ON_SOFT_DISCON
23 0x1 UTMIP_FORCE_FS_DISABLE_ON_DEV_CHIRP
UTMIP_LS_TO_FS_SKIP_4MS: Do not block changes for 4 ms when going from LS to FS (should not
21 0x1
happen)
7:5 0x3 UTMIP_STABLE_COUNT: Number of cycles of crystal clock of signal not changing to consider stable.
4 0x1 UTMIP_STABLE_ALL: Determines if all signal need to be stable to not change a config.
19.13.19.11 USB3_UTMIP_MISC_CFG1_0
30 0x1 UTMIP_PHY_XTAL_CLOCKEN: Selects whether to enable the crystal clock in the module.
24 0x0 UTMIP_FSLS_TDM
23 0x0 UTMIP_FORCE_IOBIST_CLK_ON
22:18 0x6 UTMIP_PLL_ACTIVE_DLY_COUNT: Reserved. Refer to the Clock and Reset registers for this feature.
17:6 0x600 UTMIP_PLLU_STABLE_COUNT: Reserved. Refer to the Clock and Reset registers for this feature.
5 0x1 UTMIP_RX_ERROR_CNT_CLR
4 0x0 UTMIP_RX_ERROR_CNT_EN
3 0x0 UTMIP_FLIP_FSLS_POLARITY
2 0x1 UTMIP_SUSPEND_TERMSEL
UTMIP_XCVRSEL3
1:0 0x0 Bit 0: 0: 0xa5 -> treat as KeepAlive 1: treat as regular packet
Bit 1: 0: Turn on FS EOP detection 1: Turn off FS EOP detection
19.13.19.12 USB3_UTMIP_DEBOUNCE_CFG0_0
ms = *1000 / (1/19.2MHz) / 4
19.13.19.13 USB3_UTMIP_BAT_CHRG_CFG0_0
5 0x0 UTMIP_OP_I_SRC_EN
4 0x0 UTMIP_ON_SRC_EN
3 0x0 UTMIP_OP_SRC_EN
2 0x0 UTMIP_ON_SINK_EN
1 0x0 UTMIP_OP_SINK_EN
19.13.19.14 USB3_UTMIP_SPARE_CFG0_0
19.13.19.15 USB3_UTMIP_XCVR_CFG1_0
25:24 0x0 UTMIP_XCVR_HS_IREF_CAP: High Speed Iref cap control for bias current stability
17 0x0 UTMIP_RCTRL_SW_SET: Use a software override on RCTRL instead of automatic bias control
11 0x0 UTMIP_TCTRL_SW_SET: Use a software override on TCTRL instead of automatic bias control
19.13.19.16 USB3_UTMIP_BIAS_CFG1_0
UTMIP_BIAS_PDTRK_COUNT: Control the BIAS cell power down lag. The lag should be 20 µs. For a
7:3 0x5
crystal clock of 13 MHz, it should be set to 5.
2 0x1 UTMIP_VBUS_WAKEUP_POWERDOWN: Reserved. Refer to the PMC registers for this feature.
19.13.19.17 USB3_UTMIP_BIAS_STS0_0
19.13.19.18 USB3_UTMIP_CHRG_DEB_CFG0_0
ms = *1000 / (1/19.2MHz) / 4
19.13.19.19 USB3_UTMIP_MISC_STS0_0
19.13.19.20 USB3_UTMIP_PMC_WAKEUP0_0
19.13.19.21 USB3_UHSIC_PLL_CFG0_0
19.13.19.22 USB3_UHSIC_PLL_CFG1_0
In normal operation, the following clock generators are in play for USB:
Crystal clock -> enters PLLU to generate 12 MHz clock -> enters USB_PHY PLL to generate 480/60 MHz clock
Wait ~1 ms until PLLU is stable (pll_lock_count == ClkXtal * PLLU_STABLE_COUNT * 256) => USB_PHY
PLL_ENABLE
13 0x0 UHSIC_FORCE_PLLU_POWERUP
12 0x0 UHSIC_FORCE_PLLU_POWERDOWN
19.13.19.23 USB3_UHSIC_HSRX_CFG0_0
19.13.19.24 USB3_UHSIC_HSRX_CFG1_0
23:20 0x8 UHSIC_TX_BLOCK_CNT: Controls how long after the end of transmission the receive path is
blocked
13:9 0x14 UHSIC_INPUT_FIFO_DEPTH: Depth of the 2-bit wide input FIFO. Maximum depth is 20. Can be
tuned
5:1 0x9 UHSIC_HS_SYNC_START_DLY: How long to wait before start of sync launches RxActive
19.13.19.25 USB3_UHSIC_TX_CFG0_0
9 0x0 UHSIC_HS_READY_WAIT_FOR_VALID
5 0x0 UHSIC_SIE_RESUME_ON_LINESTATE: SIE, not macrocell, detects Line State change to resume
4 0x0 UHSIC_SOF_ON_NO_STUFF: SOF when OpMode 3 -- perhaps, when the sending controller
made packets
19.13.19.26 USB3_UHSIC_MISC_CFG0_0
20 0x0 UHSIC_DISABLE_BUSRESET: When 1, the PHY will not send out BusReset during
XcvrSelect0, TermSelect0, and Opmode2. It will send out a non-bit-stuffed, non-encoded packet
instead.
18 0x1 UHSIC_EXTEND_BK_ACTIVE: Drive the bus keeper one cycle longer when going out of IDLE
15 0x0 UHSIC_FORCE_XCVR_MODE: 1: Force the values of XcvrSelect and TermSelect via config bits
instead of via the controller
14 0x1 UHSIC_SYMMETRIC_CONNECT_DATA
0: DATA goes high before STROBE goes low and low before STROBE goes high.
1: DATA goes high before STROBE goes low and goes low *after* STROBE goes high.
13 0x0 UHSIC_ASYNC_CONNECT_DATA
0: DATA keeps setup and hold requirements during CONNECT.
1: DATA moves together with STROBE
12 0x0 UHSIC_LONG_CONNECT_STROBE
0: STROBE is 2 periods long during connect.
1: STROBE is 3 periods long during connect
11 0x1 UHSIC_ACTIVE_BK_DRIVE_RX: 1: Use RX state (EOP, etc.) to determine starting time to drive
bus keeper instead of waiting for IDLE detection.
10 0x1 UHSIC_ACTIVE_BK_DRIVE_TX: 1: Use TX state to determine starting time to drive bus keeper
instead of waiting for IDLE detection.
9 0x1 UHSIC_DETECT_SHORT_IDLE
0: Use 3 edges (negative and positive) to detect an idle state on the line.
1: Use 4 edges.
8 0x0 UHSIC_DETECT_SHORT_CONNECT:
0: Use 3 edges (negative and positive) to detect a connect state on the line.
1: Use 4 edges.
6:5 0x0 UHSIC_INJECT_ERROR_TYPE: Force error insertion into RX path. (Used for IOBIST.)
0 = DISABLE
1 = BIT_ERR
2 = RX_ERR
3 = BIT_RX_ERR
4:2 0x3 UHSIC_STABLE_COUNT: Number of crystal clock cycles of signal not changing to consider
stable.
1 0x1 UHSIC_STABLE_ALL: Determines if all signals need to be stable to not change a config.
19.13.19.27 USB3_UHSIC_MISC_CFG1_0
17 0x1 UHSIC_PHY_XTAL_CLOCKEN: Selects whether to enable the crystal clock in the module.
16:15 0x0 UHSIC_OBS_SEL: Select which one of 4 observation vectors is presented on the observation
bus
14 0x0 UHSIC_FORCE_IOBIST_CLK_ON: Always enable IoBist CLK60. This would be required when
you want to use RX_ERROR_CNT_EN.
0 0x0 UHSIC_RX_ERROR_CNT_EN: Enable IOBIST RxError counter when not in IOBIST mode.
Allows one to read out the number of errors via JTAG during normal operation
19.13.19.28 USB3_UHSIC_PADS_CFG0_0
15:12 0x8 UHSIC_TX_RTUNEN: Fine-tuned 50 Ohm termination resistor for NMOS driver
11:8 0x8 UHSIC_TX_RTUNEP: Fine-tuned 50 Ohm termination resistor for PMOS driver
19.13.19.29 USB3_UHSIC_PADS_CFG1_0
19.13.19.30 USB3_UHSIC_CMD_CFG0_0
Determine start-up behavior.
When AUTO_NEGIOTIATE == 0
HOST
else
§ Asynchronously drive 00
6 0x0 UHSIC_FORCE_ACTIVATED: Force PHY into activated state without connect handshake (both
host and device)
5 0x0 UHSIC_PRETEND_CONNECT_DETECT: While in HOST mode, act as if the input stage has seen
a CONNECT pulse from the external PHY
4 0x0 UHSIC_FORCE_RESET: While in HOST mode, force global state machine into RESET state
3 0x0 UHSIC_FORCE_CONNECT: Upon rising value of this bit, force device to send connect. Only useful
when AUTO_CONNECT is disabled.
1 0x0 UHSIC_FORCE_ACTIVATE: Upon rising value of this bit, instruct state machine to go into
activation mode. Only useful when AUTO_ACTIVATE is disabled.
0 0x1 UHSIC_AUTO_ACTIVATE: Upon power up, automatically move to activation mode and start going
through connect procedure.
19.13.19.31 USB3_UHSIC_STAT_CFG0_0
Offset: 0xc28 | Read/Write: R/W | Reset: 0bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0
31:16 RO X UHSIC_CALIOUT
15:8 RO X UHSIC_SPARE_STATUS
2:1 RO X UHSIC_BUS_STATE
0 RW 0x0 UHSIC_CONNECT_DETECT
19.13.19.32 USB3_UHSIC_SPARE_CFG0_0
19.13.19.33 USB3_UHSIC_MISC_STS0_0
19.13.19.34 USB3_UHSIC_PMC_WAKEUP0_0
19.13.19.35 USB2_QH_USB2D_QH_EP_n_OUT_0
USB2D_QH: Queue Head for OUT endpoint n. This is used to store a local Queue Head data structure for
31:0 0x0
either device mode or host mode. In device mode, it holds the Queue Head for OUT endpoint n.
19.13.19.36 USB2_QH_USB2D_QH_EP_n_IN_0
USB2D_QH: Queue Head for IN endpoint n. This is used to store a local Queue Head data structure for
31:0 0x0
either device mode or host mode. In device mode, it holds the Queue Head for IN endpoint n.
20.1 Crossbar
The crossbar (XBAR) is a 36x39 full crossbar switch with unidirectional data flow, with 36 TX and 39 RX clients. The XBAR
has multicasting capability: A TX client can send audio data to multiple RX clients, while a RX client can receive data from only
one TX at a time. It also has the ability to connect TX clients with Rx clients in many sessions that function independently of
each other.
1. Go to the register corresponding to the receiver, in this case, the I2S1 AUDIO_I2S1_RX0_0 register.
2. Enable the bit that corresponds to the transmitter, in this case, the field DAM1_TX0.
3. Ensure that all other fields in the AUDIO_I2S1_RX0_0 register are disabled. At power on, all the fields are disabled.
So this step is required only while setting up the audio routing after removing the previous use case’s audio routing.
All the AHUB modules have one or more Transmit Audio Client Interfaces (TxCIFs) and one or more Receive Audio Client
Interfaces (RxCIFs). Hence all modules in the AHUB have registers named <module>_AUDIOCIF_<tag>_CTRL that are used
to configure the interfaces. The audio CIF interface includes common functionalities that are used in all the AHUB modules
such as:
Converting the number of channels in the input stream(s) before the stream is fed into the module. This feature is
limited to converting a mono stream to a stereo stream and vice-versa.
Converting the number of bits/sample for the input stream(s) before the stream is fed into the module.
AUDIO_CHANNELS:
0 = CH1
1 = CH2
2 = CH3
3 = CH4
23:20 RW 0x0 4 = CH5
5 = CH6
6 = CH7
7 = CH8
8 = CH9
9 = CH10
CLIENT_CHANNELS:
0 = CH1
1 = CH2
2 = CH3
3 = CH4
4 = CH5
5 = CH6
6 = CH7
19:16 RW 0x0 7 = CH8
8 = CH9
9 = CH10
10 = CH11
11 = CH12
12 = CH13
13 = CH14
14 = CH15
15 = CH16
AUDIO_BITS:
0 = BIT4
1 = BIT8
2 = BIT12
14:12 RW 0x1 3 = BIT16
4 = BIT20
5 = BIT24
6 = BIT28
7 = BIT32
CLIENT_BITS:
0 = BIT4
1 = BIT8
2 = BIT12
10:8 RW 0x1 3 = BIT16
4 = BIT20
5 = BIT24
6 = BIT28
7 = BIT32
EXPAND:
0 = ZERO
7:6 RW 0x0 1 = ONE
2 = LFSR
3 = RSVD
STEREO_CONV:
0 = CH0
5:4 RW 0x0 1 = CH1
2 = AVG
3 = RSVD
REPLICATE:
3 RW 0x0 0 = DISABLE
1 = ENABLE
DIRECTION:
2 RO X 0 = TXCIF
1 = RXCIF
TRUNCATE:
1 RW 0x0 0 = ROUND
1 = CHOP
0 RW 0x0 MONO_CONV:
The following programming guidelines are common for the ACIF registers in all AHUB modules. The programming guidelines
of the respective modules will refer to this subsection when it comes to programming the ACIF registers.
1. Set the AUDIO_CHANNELS field to the number of channels in the input or output stream of a module, depending on
whether the ACIF in question is an RxCIF or TxCIF respectively
2. Set the CLIENT_CHANNELS field to the number of channels of the stream as dealt with inside the module. This
setting is different from AUDIO_CHANNELS only when a conversion of the number of channels of an audio stream is
desired.
3. Similarly, set the AUDIO_BITS and CLIENT_BITS fields.
4. If AUDIO_BITS and CLIENT_BITS do not match, the EXPAND and TRUNCATE fields are used to determine how to
transition from AUDIO_BITS to CLIENT_BITS (in the case of a RxCIF) or from CLIENT_BITS to AUDIO_BITS (in the
case of an TxCIF). Expanding always results in the actual data being shifted to the MSB bits and the rest filled with
zeros, ones, or some random bits from an LFSR. TRUNCATE can be set to chopping or rounding.
5. If AUDIO_CHANNELS and the CLIENT_CHANNELS are different, the STEREO_CONV field is used to determine
how a stereo stream is converted to a mono stream, and the MONO_CONV field is used to determine how a mono
stream is converted to a stereo stream.
20.3 APBIF
Note: Tegra K1 devices contain identical APBIF and APBIF2 functional blocks. Unless specified
otherwise, references to APBIF in this document also apply to APBIF2. Each block has its
own register set.
The AMBA Peripheral Bus Interface (APBIF) is the agent for the APB control flow and DMA operation, which sends or receives
data from/to Memory. The APBIF is composed of N instances of AHUBIF and APB interfaces as shown in the figure below.
TX
AHUBCIF
Channel 0
RX
AHUBCIF
Channel 1
APB AHUB
APBIF
AHUBCIF
Channel N-1
I2S_SCLK
RxCIF I2S_LRCK
RX
I2S Controller
I2S_RST
AHUB I2S Controller of External
Device
I2S_DOUT
TX
TxCIF
I2S_DIN
2
The I S controller can operate both as master and slave. It supports the following data transfer modes:
2
I S mode
Left Justified Mode (LJM)
Right Justified Mode (RJM)
2
DSP mode, as defined in the Philips inter-IC-sound (I S) bus specification
PCM mode with short (one-bit-clock wide) and long-fsync (two bit-clocks wide
Network (Telephony) mode with independent slot selection for both Tx and Rx
TDM mode with flexibility in number of slots with up to 16 slots.
Capability to drive-out a High-Z outside the prescribed slot for transmission
2
The I S controller can transmit and receive word lengths of 8, 16, 24, and 32.
1/Fs
SCLK
DATA 1 2 n 1 2 n
1/Fs
SCLK
DATA 1 2 n 1 2 n
1/Fs
SCLK
DATA 1 2 n 1 2 n
FSYNC Modes
The width of the FSYNC, the offset value, number of slots and number of SCLKs per 1/Fs are all configurable. The slots are
always contiguous.
1/Fs
FSYNC
SCLK
DATA Offset 1 2 3 n 1 2 3 n
Slot1 Slot2
MSB LSB MSB LSB
PCM Mode
Bit Clock
1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0
Rx Data 5 4 3 2 1 0
1 1 1 1 1 1 9 8 7 6 5 4 3 2 1 0
Tx Data 5 4 3 2 1 0
Frame Sync
Bit Clock
Slot 0 Slot 1 Slot 2 Slot 3 Slot 4 Slot 5 Slot 6 Slot 0 Slot 1 Slot 2 Slot 3
TDM Frame
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
CLK
If this calculation returns a fractional value, use the non-symmetry feature of the controller to attain the required sampling rate.
In that case, the channel_bit_cnt value should be programmed with an integer that is closest to the fraction, but less than the
fraction.
The table below contains some examples for common sampling rates with CLK_SOURCE_I2S = 24 MHz:
I2S_NEW_TIMING[12:00]
(mark-space ratio:: Left_channel : Right_channel)
Sampling
Rate
CLK_DIVISOR=0 CLK_DIVISOR=1 CLK_DIVISOR=3 CLK_DIVISOR=5 CLK_DIVISOR=7
BIT_CLK=24 MHz BIT_CLK=12 MHz BIT_CLK=6 MHz BIT_CLK=4 MHz BIT_CLK=3 MHz
Notes:
Ideally, any sampling rate can be generated, either accurately or approximately with any clk_src selected for I2S, if
the clk_divisor and the channel_bit_cnt are programmed accordingly.
The NON_SYM.EN feature is meant to create the sampling rates approximately by realizing an odd bit rate with a
non-50:50 mark/space ratio. However, if the bit rate (2*channel_bit_cnt) itself is a fraction, the resultant sampling rate
will not be accurate. The entries shown as not supported in the above table are attributed to such a deviation.
When the channel_bit_cnt is less than 32, the bit_size should be programmed to be less than channel_bit_cnt.
FRAME_FORMAT 0 0 0 1 1 1 1
LRCK_POLARITY 0 1 1 1 1 1 1
1: Short
CHANNEL_BIT_CNT Fsync
TX_DATA_OFFSET 1 0 1 1 0/1/2
-BITS_PER_SAMPLE 0: Long
Fsync
1:short
CHANNEL_BIT_CNT Fsync
RX_DATA_OFFSET 1 0 – 1 1 0/1/2
BITS_PER_SAMPLE 0:Long
Fsync
HIGHZ_CTRL 0 0 0 0 2 2 0/1/2
EDGE_CTRL 0 0 0 0 1 1 1
TOTAL_SLOTS 0 0 0 1 0 3 0,1..7
* In NW mode, there can only be one active slot. So 0x01, 0x02, 0x04, 0x08 are allowed values.
The only restriction on the programming sequence is that all other registers must be programmed first before the Tx/Rx
channels are enabled (which is done by setting XFER_EN_TX/XFER_EN_RX).
During reception, the audio data is stored in the RX data FIFO, the channel status bit is stored in the RX channel status page
buffer and the user status bit is stored in the RX user FIFO.
In addition to storing the audio data, the RX data FIFO also stores the preamble bits, channel status bit, user status bit and the
valid bit. The reception of the channel bits start after the B-preamble is detected.
The audio-data sample has 16, 20, or 24 bits of data. Firmware has to transmit 16-, 20-, or 24-bit data and read 16-, 20-, or
24-bit data.
During reception, the audio-data, the preamble bits, channel status bits, the user bits and the valid bits are stored in the RX
data FIFO. The user bit is also stored in the RX user FIFO. The channel bit is also stored in the RX channel status page buffer.
But the channel status bits are stored in the RX channel status page buffer only after the B-preamble is detected.
0 3 4 7 8 27 28 29 30 31
SPDIF Input
Sync L M
Aux Audio Sample Word V U C P
Preamble S S
B B
0 3 4 7 8 27 28 29 30 31
L M
Audio Sample Word V U C P
S S
B B
0 3 4 7 8 27 28 29 30 31
L M
Audio Sample Word V U C P
S S
B B 16 X
32-bit
FIFO
0 3 4 7 8 27 28 29 30 31
SPDIF
_DATA
L M _IN
Audio Sample Word V U C P
S S
B B
0 3 4 7 8 27 28 29 30 31
L M
Audio Sample Word V U C P
S S
B B
The SPDIFIN clock source/divider can be selected by programming CAR’s CLK_SOURCE_SPDIF register. Refer to the
SPDIF registers below for the needed oversample frequency.
In addition to reading the sampling rate from the channel status information, one can also read the PERIOD field in the
STROBE_CTRL_0 register to estimate the incoming sample rate. The last two digits of PERIOD indicate the fractional clock
period.
Sample rate ≈ (‘spdifin’ clock frequency * 1000) / (PERIOD * 128)
If using the PERIOD method, it is better to read this field toward the end of the song or just before turning off the SPDIFIN.
Although the hardware can lock onto the SPDIFIN data stream in as little as 2 subframes of time, the hardware is actually
constantly re-adjusting itself (due to jitter, synchronization loss, etc. in the data stream) to provide the strobe point to the center
of the biphase data stream. Over time, the strobe point will vary less and less because the hardware has already adjusted to
all the variations seen in the data stream.
The Sample Rate Converter converts the frame rate of one of the input channels using a collection of Low-Latency Filters
(LLFs):
Input/output frequencies supported: 8, 11.025, 16, 22.05, 44.1, 48, 88.2, 96, 176.4, and192kHz
Mono/Stereo audio for both input channels is supported. Stereo SRC is supported for channel 0. Channel 1, which is
the bypass channel, does not support SRC.
Up-conversion and down-conversion from any supported frequency to any supported frequency
8-, 16-, 24-, 32-bit audio data
Fixed latency on round trip between baseband and codec of ~7 ms.
The bit-width converter at the CIF should convert the input stream to 32 bits because SRC operates only on 32-bit data
A programmable gain controller is available in both input channels. It can be programmed to give a linear gain between -8 and
7.9998.
The DAM Mixer mixes the output from channel 0 (stereo SRC channel) with channel 1 (bypass channel). The Mixer handles
saturation and has the following mixing options:
Both channels wait on each other
Channels wait on none
Channel 0 waits on channel 1
Channel 1 waits on channel 0
For details on the fields within each DAM register, refer to the “DAM Registers” subsection.
A “byte RAM” helps to form an output frame by any combination of bytes from the 4 input frames
Two modes for data synchronization between input frames are available:
Wait For All mode: At the beginning, wait for all enabled input streams to have data before forming the very first
frame.
Wait for Any mode: Start whenever data is available in any one of the enabled input streams.
In either mode, once the first output frame is sent out, AMX always waits for all active streams to have data available before
forming and sending subsequent frames.
A “byte RAM” helps to form output frames by any combination of bytes from the input frame. Its design is identical to that of the
byte RAM in the AMX except that the data flow direction is reversed.
For programming RAM with the HW_ADR_EN bit cleared in the ADX_AUDIORAMCTL_ADX_CTRL register, set the
RAM offset in the RAM_ADR field of the ADX_AUDIORAMCTL_ADX_CTRL register, and set data in the DATA field
in the ADX_AUDIORAMCTL_ADX_DATA register.
For programming RAM with the HW_ADR_EN bit set in the ADX_AUDIORAMCTL_ADX_CTRL register, set the RAM
offset in the RAM_ADR field of the ADX_AUDIORAMCTL_ADX_CTRL register to 0, and set data in DATA field in the
ADX_AUDIORAMCTL_ADX_DATA register. Hardware auto-increments RAM_ADR after each write.
The AFC implements high fidelity interpolation and decimation algorithms that compensate for clock differences.
It can control traffic flow anywhere in the audio route, even to the inputs of AMX blocks.
START_THRESHOLD + 1
2*SRC-BURST 1*SRC-BURST 1*SRC- 1*SRC- 1*SRC-BURST 1*SRC-BURST
I2S DAM AFC I2S (AFC_THRESHOLDS_
+1 +2 BURST BURST + 1 +1 +1
I2S_0)
START_THRESHOLD + 1
I2S DAM AFC AMX 2*SRC-BURST 1*SRC-BURST 1*SRC- 2*SRC- 1*SRC-BURST
(4) (AFC_THRESHOLDS_
I2S +1 +2 BURST BURST + 4 +4
I2S_0)
Example:
reg DAM0_RX0 incr4
0:0 DAM0_TX0 rw i=0
1:1 I2S0_TX0 rw i=0
2:2 I2S1_TX0 rw i=0
;
20.10.1.1 AUDIO_APBIF_RXn_0
There are 10 Audio APBIF RX Registers, one per RX port (n = 0 through 9).
ADX0_TX3:
24 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX2:
23 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX1:
22 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX0:
21 0x0 0 = DISABLE
1 = ENABLE
AMX0_TX0:
20 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX9:
19 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX8:
18 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX7:
17 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX6:
16 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX5:
15 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX4:
14 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX1
13 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX0
12 0x0 0 = DISABLE
1 = ENABLE
DAM2_TX0
11 0x0 0 = DISABLE
1 = ENABLE
DAM1_TX0
10 0x0 0 = DISABLE
1 = ENABLE
DAM0_TX0
9 0x0 0 = DISABLE
1 = ENABLE
I2S4_TX0
8 0x0 0 = DISABLE
1 = ENABLE
I2S3_TX0
7 0x0 0 = DISABLE
1 = ENABLE
I2S2_TX0
6 0x0 0 = DISABLE
1 = ENABLE
I2S1_TX0
5 0x0 0 = DISABLE
1 = ENABLE
I2S0_TX0
4 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX3
3 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX2
2 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX1
1 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX0
0 0x0 0 = DISABLE
1 = ENABLE
20.10.1.2 AUDIO_I2Sn_RX0_0
There are 5 Audio I2S RX0 Registers, one per I2S channel (n = 0 through 4).
ADX0_TX3:
24 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX2:
23 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX1:
22 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX0:
21 0x0 0 = DISABLE
1 = ENABLE
AMX0_TX0:
20 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX9:
19 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX8:
18 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX7:
17 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX6:
16 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX5:
15 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX4:
14 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX1
13 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX0
12 0x0 0 = DISABLE
1 = ENABLE
DAM2_TX0
11 0x0 0 = DISABLE
1 = ENABLE
DAM1_TX0
10 0x0 0 = DISABLE
1 = ENABLE
DAM0_TX0
9 0x0 0 = DISABLE
1 = ENABLE
I2S4_TX0
8 0x0 0 = DISABLE
1 = ENABLE
I2S3_TX0
7 0x0 0 = DISABLE
1 = ENABLE
I2S2_TX0
6 0x0 0 = DISABLE
1 = ENABLE
I2S1_TX0
5 0x0 0 = DISABLE
1 = ENABLE
I2S0_TX0
4 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX3
3 0x0 0 = DISABLE
1 = ENABLE
2 0x0 APBIF_TX2
APBIF_TX1
1 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX0
0 0x0 0 = DISABLE
1 = ENABLE
20.10.1.3 AUDIO_DAMn_RX0_0
There are 3 Audio DAMn RX0 Registers for the RX0 port (n = 0 through 2).
ADX0_TX3:
24 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX2:
23 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX1:
22 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX0:
21 0x0 0 = DISABLE
1 = ENABLE
AMX0_TX0:
20 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX9:
19 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX8:
18 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX7:
17 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX6:
16 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX5:
15 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX4:
14 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX1
13 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX0
12 0x0
0 = DISABLE
DAM2_TX0
11 0x0 0 = DISABLE
1 = ENABLE
DAM1_TX0
10 0x0 0 = DISABLE
1 = ENABLE
DAM0_TX0
9 0x0 0 = DISABLE
1 = ENABLE
I2S4_TX0
8 0x0 0 = DISABLE
1 = ENABLE
I2S3_TX0
7 0x0 0 = DISABLE
1 = ENABLE
I2S2_TX0
6 0x0 0 = DISABLE
1 = ENABLE
I2S1_TX0
5 0x0 0 = DISABLE
1 = ENABLE
I2S0_TX0
4 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX3
3 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX2
2 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX1
1 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX0
0 0x0 0 = DISABLE
1 = ENABLE
20.10.1.4 AUDIO_DAMn_RX1_0
There are 3 Audio DAMn RX1 Registers for the RX1 port (n = 0 through 2).
ADX0_TX3:
24 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX2:
23 0x0 0 = DISABLE
1 = ENABLE
22 0x0 ADX0_TX1:
ADX0_TX0:
21 0x0 0 = DISABLE
1 = ENABLE
AMX0_TX0:
20 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX9:
19 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX8:
18 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX7:
17 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX6:
16 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX5:
15 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX4:
14 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX1
13 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX0
12 0x0 0 = DISABLE
1 = ENABLE
DAM2_TX0
11 0x0 0 = DISABLE
1 = ENABLE
DAM1_TX0
10 0x0 0 = DISABLE
1 = ENABLE
DAM0_TX0
9 0x0 0 = DISABLE
1 = ENABLE
I2S4_TX0
8 0x0 0 = DISABLE
1 = ENABLE
I2S3_TX0
7 0x0 0 = DISABLE
1 = ENABLE
I2S2_TX0
6 0x0 0 = DISABLE
1 = ENABLE
I2S1_TX0
5 0x0 0 = DISABLE
1 = ENABLE
I2S0_TX0
4 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX3
3 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX2
2 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX1
1 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX0
0 0x0 0 = DISABLE
1 = ENABLE
20.10.1.5 AUDIO_SPDIF_RXn_0
There are 2 Audio SPDIF RX Registers, one per RX port (n = 0 through 1).
ADX0_TX3:
24 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX2:
23 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX1:
22 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX0:
21 0x0 0 = DISABLE
1 = ENABLE
AMX0_TX0:
20 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX9:
19 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX8:
18 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX7:
17 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX6:
16 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX5:
15 0x0 0 = DISABLE
1 = ENABLE
14 0x0 APBIF_TX4:
SPDIF_TX1:
13 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX0:
12 0x0 0 = DISABLE
1 = ENABLE
DAM2_TX0:
11 0x0 0 = DISABLE
1 = ENABLE
DAM1_TX0:
10 0x0 0 = DISABLE
1 = ENABLE
DAM0_TX0:
9 0x0 0 = DISABLE
1 = ENABLE
I2S4_TX0:
8 0x0 0 = DISABLE
1 = ENABLE
I2S3_TX0:
7 0x0 0 = DISABLE
1 = ENABLE
I2S2_TX0:
6 0x0 0 = DISABLE
1 = ENABLE
I2S1_TX0:
5 0x0 0 = DISABLE
1 = ENABLE
I2S0_TX0:
4 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX3:
3 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX2:
2 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX1:
1 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX0:
0 0x0 0 = DISABLE
1 = ENABLE
20.10.1.6 AUDIO_AMX0_RXn_0
There are 4 Audio AMX0 RX Registers, one per RX port (n = 0 through 3).
ADX0_TX3:
24 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX2:
23 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX1:
22 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX0:
21 0x0 0 = DISABLE
1 = ENABLE
AMX0_TX0:
20 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX9:
19 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX8:
18 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX7:
17 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX6:
16 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX5:
15 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX4:
14 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX1:
13 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX0:
12 0x0 0 = DISABLE
1 = ENABLE
DAM2_TX0:
11 0x0 0 = DISABLE
1 = ENABLE
DAM1_TX0:
10 0x0 0 = DISABLE
1 = ENABLE
DAM0_TX0:
9 0x0 0 = DISABLE
1 = ENABLE
I2S4_TX0:
8 0x0 0 = DISABLE
1 = ENABLE
I2S3_TX0:
7 0x0 0 = DISABLE
1 = ENABLE
I2S2_TX0:
6 0x0 0 = DISABLE
1 = ENABLE
I2S1_TX0:
5 0x0 0 = DISABLE
1 = ENABLE
I2S0_TX0:
4 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX3:
3 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX2:
2 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX1:
1 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX0:
0 0x0 0 = DISABLE
1 = ENABLE
20.10.1.7 AUDIO_ADX0_RX0_0
Offset: 0x6c │ Read/Write: R/W │ Reset: 0x00000000 (0bxxxxxxx0000000000000000000000000)
ADX0_TX3:
24 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX2:
23 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX1:
22 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX0:
21 0x0 0 = DISABLE
1 = ENABLE
AMX0_TX0:
20 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX9:
19 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX8:
18 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX7:
17 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX6:
16 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX5:
15 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX4:
14 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX1:
13 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX0:
12 0x0 0 = DISABLE
1 = ENABLE
DAM2_TX0:
11 0x0 0 = DISABLE
1 = ENABLE
DAM1_TX0:
10 0x0 0 = DISABLE
1 = ENABLE
DAM0_TX0:
9 0x0 0 = DISABLE
1 = ENABLE
I2S4_TX0:
8 0x0 0 = DISABLE
1 = ENABLE
I2S3_TX0:
7 0x0 0 = DISABLE
1 = ENABLE
I2S2_TX0:
6 0x0 0 = DISABLE
1 = ENABLE
I2S1_TX0:
5 0x0 0 = DISABLE
1 = ENABLE
I2S0_TX0:
4 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX3:
3 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX2:
2 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX1:
1 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX0:
0 0x0 0 = DISABLE
1 = ENABLE
20.10.1.8 AUDIO_BBC1_RXn_0
There are 2 Audio BBC1 RX registers, one per RX port (n = 0 through 1).
24 0x0 ADX0_TX3:
0 = DISABLE
ADX0_TX2:
23 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX1:
22 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX0:
21 0x0 0 = DISABLE
1 = ENABLE
AMX0_TX0:
20 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX9:
19 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX8:
18 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX7:
17 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX6:
16 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX5:
15 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX4:
14 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX1:
13 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX0:
12 0x0 0 = DISABLE
1 = ENABLE
DAM2_TX0:
11 0x0 0 = DISABLE
1 = ENABLE
DAM1_TX0:
10 0x0 0 = DISABLE
1 = ENABLE
DAM0_TX0:
9 0x0 0 = DISABLE
1 = ENABLE
I2S4_TX0:
8 0x0 0 = DISABLE
1 = ENABLE
I2S3_TX0:
7 0x0 0 = DISABLE
1 = ENABLE
6 0x0 I2S2_TX0:
0 = DISABLE
I2S1_TX0:
5 0x0 0 = DISABLE
1 = ENABLE
I2S0_TX0:
4 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX3:
3 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX2:
2 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX1:
1 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX0:
0 0x0 0 = DISABLE
1 = ENABLE
20.10.1.9 AUDIO_AMX1_RXn_0
There are 4 Audio AMX1 RX Registers, one per RX port (n = 0 through 3).
ADX0_TX3:
24 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX2:
23 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX1:
22 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX0:
21 0x0 0 = DISABLE
1 = ENABLE
AMX0_TX0:
20 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX9:
19 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX8:
18 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX7:
17 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX6:
16 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX5:
15 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX4:
14 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX1:
13 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX0:
12 0x0 0 = DISABLE
1 = ENABLE
DAM2_TX0:
11 0x0 0 = DISABLE
1 = ENABLE
DAM1_TX0:
10 0x0 0 = DISABLE
1 = ENABLE
DAM0_TX0:
9 0x0 0 = DISABLE
1 = ENABLE
I2S4_TX0:
8 0x0 0 = DISABLE
1 = ENABLE
I2S3_TX0:
7 0x0 0 = DISABLE
1 = ENABLE
I2S2_TX0:
6 0x0 0 = DISABLE
1 = ENABLE
I2S1_TX0:
5 0x0 0 = DISABLE
1 = ENABLE
I2S0_TX0:
4 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX3:
3 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX2:
2 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX1:
1 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX0:
0 0x0 0 = DISABLE
1 = ENABLE
20.10.1.10 AUDIO_ADX1_RX0_0
Offset: 0x88 | Read/Write: R/W | Reset: 0x00000000 (0bxxxxxxx0000000000000000000000000)
ADX0_TX3:
24 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX2:
23 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX1:
22 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX0:
21 0x0 0 = DISABLE
1 = ENABLE
AMX0_TX0:
20 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX9:
19 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX8:
18 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX7:
17 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX6:
16 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX5:
15 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX4:
14 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX1:
13 0x0 0 = DISABLE
1 = ENABLE
SPDIF_TX0:
12 0x0 0 = DISABLE
1 = ENABLE
DAM2_TX0:
11 0x0 0 = DISABLE
1 = ENABLE
DAM1_TX0:
10 0x0 0 = DISABLE
1 = ENABLE
DAM0_TX0:
9 0x0 0 = DISABLE
1 = ENABLE
I2S4_TX0:
8 0x0 0 = DISABLE
1 = ENABLE
I2S3_TX0:
7 0x0 0 = DISABLE
1 = ENABLE
I2S2_TX0:
6 0x0 0 = DISABLE
1 = ENABLE
I2S1_TX0:
5 0x0 0 = DISABLE
1 = ENABLE
I2S0_TX0:
4 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX3:
3 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX2:
2 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX1:
1 0x0 0 = DISABLE
1 = ENABLE
APBIF_TX0:
0 0x0 0 = DISABLE
1 = ENABLE
20.10.1.11 AUDIO_AFCn_RX0_0
There are 6 Audio AFCn RX Registers for the RX0 port (n = 0 through 5).
ADX0_TX3:
24 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX2:
23 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX1:
22 0x0 0 = DISABLE
1 = ENABLE
ADX0_TX0:
21 0x0 0 = DISABLE