Trademarks
AMD, the AMD Arrow logo, Athlon, and combinations thereof, A TI, ATI logo, Radeon, and Crossfire are trademarks of Advanced Micro Devices, Inc.
HyperTransport is a licensed trademark of the HyperTransport Technology Consortium.
Microsoft and Windows are registered trademarks and Windows Vista is trademark of Microsoft Corporation.
Other product names used in this publication are for identification purposes only and may be trademarks of their respective companies.
Disclaimer
The contents of this document are provided in connection with Advanced Micro Devices, Inc. ("AMD") products. AMD makes no representations or warranties with
respect to the accuracy or completeness of the contents of this publication and reserves the right to make changes to specifications and product descriptions at any time
without notice. No license, w hether express, implied, aris ing by estoppel, or otherwi se, to any intellectual property rights are granted by this publication. Except as set forth
in AMD's Standard Terms and Conditions of Sale, AMD assumes no liability whatsoever, and disclaims any express or implied warranty, relating to its products including,
but not limited to, the implied warranty of merchantability, fitness for a particular purpose, or infringement of any in tellectual property right.
AMD's products are not designed, intended, authorize d or warranted for use as components in systems intended for surgical implant into the body, or in other applications
intended to support or sustain life, or in any other application in which the failure of AMD's product could create a situation where personal injury, death, or severe
property or environmental damage may occur. AMD reserves the righ t to discontinue or make changes to its products at any time without notice.
2.1.4.1 Generic Host Control ............................................................................................................................................ 25
2.1.4.2 Port Registers (One Set Per Port) ........................................................................................................................ 31
2.2 OCHI USB 1.1 and EHCI USB 2.0 Controllers ............................................................................ 44
2.2.2.2 System Requirements .......................................................................................................................................... 67
2.3.3.1.1 IO-Mapped Control Registers.....................................................................................................................126
2.3.3.1.2 Client Management Registers (Accessed through C50h and C51h) .........................................................137
2.3.3.1.3 System Reset Register (IO CF9)................................................................................................................139
2.3.3.2 Power Management (PM) Registers................................................................................................................... 139
2.4.2 IDE I/O Registers ...............................................................................................................................195
4.2.1 GEVENT as GPIO..............................................................................................................................283
4.2.2 General Purpose Event (GPE)...........................................................................................................283
4.2.3 GPM as GPIO ....................................................................................................................................286
4.2.3.1 GPM Pins as Input.............................................................................................................................................. 286
4.2.3.2 GPM pins as Output ........................................................................................................................................... 287
4.2.4.1 ExtEvent as GPIO............................................................................................................................................... 287
4.2.4.2 ExtEvent to Generate SMI# ................................................................................................................................ 287
Table 2-2 Legacy Support Registers............................................................................................................................68
This manual is a register reference guide for the AMD SB600 Southbridge. It integrates the key I/O,
communications, and audio features required in a state-of-the-art PC into a single device. It is specifically
designed to operate with AMD’s RADEON IGP Xpress family of integrated graphics processor products in
both desktop and mobile PCs.
1.2 Nomenclature and Conventions
1.2.1 Recent Updates
Updates recent to each revision are highlighted in red.
1.2.2 Numeric Representations
• Hexadecimal numbers are prefixed with “0x” or suffixed with “h,” whenever there is a possibility
of confusion. Other numbers are decimal.
• Registers (or fields) of an identical function are sometimes indicated by a single expression in
which the part of the signal name that changes is enclosed in square brackets. For example,
registers HOST_DATA0 through to HOST_DATA7 is represented by the single expression
HOST_DATA[7:0].
1.2.3 Register Description
All registers in this document are described with the format of the sample table below. All offsets are
in hexadecimal notation, while programmed bits are in either binomial or hexadecimal notation.
Latency Timer (R/W) 7:0 00h This bit field is used to specify the time in number of PCI
clocks, the SATA controller as a master is still allowed to
control the PCI bus after its GRANT_L is deasserted. The
lower three bits [0A:08] are hardwired to 0
time granularity of 8 clocks.
* Note: There maybe more than one address; the convention used is as follows:
[aperName:offset] - single mapping, to one aperture/decode and one offset
[aperName1, aperName2, …, aperNameN:offset] - multiple mappings to different apertures/decodes but same
offset
[aperName:startOffset-endOffset] - mapped to an offset range in the same aperture/decode
RW
Warning: Do not attempt to modify values of registers or bit fields marked "Reserved." Doing so may cause
This section contains two block diagrams for the SB600. Figure 1 shows the SB600 internal PCI devices with
their assigned bus, device, and function numbers. Figure 2 shows the SB600 internal PCI devices and the
Note: Some SATA functions are controlled by, and associated with, certain PCI configuration registers in the
SMBus/ACPI device. For more information refer to section 2.3: SMBus Module and ACPI Block (Device 20,
Function 0). The diagram below lists these SATA functions and the associated registers.
SATA
SATA Enables
SATA power saving
SATA Interrupt Map register
SATA Smart Power Control
PCI_Reg:
5Ch98h
2.1.1 PCI Configuration Space
The PCI Configuration Space registers define the operation of the SB600’s SATA controller on the PCI bus.
These registers are accessible only when the SATA controller detects a Configuration Read or Write
operation, with its IDSEL asserted, on the 32-bit PCI bus.
Register Name Offset Address
Vendor ID 00h
Device ID 02h
Command 04h
Status 06h
Revision ID/Class Code 08h
Cache Link Size 0Ch
Master Latency Timer 0Dh
Header Type 0Eh
BIST Mode Type 0Fh
Base Address 0 10h
Base Address 1 14h
Base Address 2 18h
Base Address 3 1Ch
Serial ATA Capability Register 0 70h
Serial ATA Capability Register 1 74h
IDP Index 78h
IDP Data 7Ch
PHY Port0 Control 88h
PHY Port1 Control 8Ch
PHY Port2 Control 90h
PHY Port3 Control 94h
BIST pattern Count C0h
PCI Target Control TimeOut Counter C4h
Vendor ID - R - 16 bits - [PCI_Reg:00h]
Field Name Bits Default Description
Vendor ID 15:0 1002h This register holds a unique 16-bit value assigned to a vendor.
Combined with the device ID, it identifies any PCI device.
Device ID - R - 16 bits - [PCI_Reg:02h]
Field Name Bits Default Description
Device ID 15:0 4380h This register holds a unique 16-bit value assigned to a device.
Combined with the vendor ID, it identifies any PCI device.
4380h for the non-Raid5 controller
4381h for the Raid5 controller.
Bonding option default to the non-Raid 5 controller.
Command - RW - 16 bits - [PCI_Reg:04h]
Field Name Bits Default Description
I/O Access Enable 0 0b This bit controls access to the I/O space registers. When this
bit is 1, it enables the SATA controller to respond to PCI IO
space access.
Memory Access Enable 1 0b This bit controls access to the memory space registers. When
this bit is 1, it enables the SATA controller to respond to PCI
memory space access
Bus Master Enable 2 0b Bus master function enable.
1 = Enable
0 = Disable.
Special Cycle
Recognition Enable
Memory Write and
Invalidate Enable
VGA Palette Snoop
Enable
PERR- Detection Enable 6 0b If set to 1, the IDE host controller asserts PERR- when it is the
Wait Cycle Enable 7 0b Read Only.
SERR- Enable 8 0b If set to 1, and bit 6 is set, then the SATA controller asserts
Fast Back-to-Back
Enable
Interrupt Disable 10 0b Complies with the PCI 2.3 specification.
Reserved 15:11 Reserved.
3 0b Read Only. Hardwired to ‘0’
4 0b Read Only. Hardwired to ‘0’
5 0b Read Only. Hard-wired to ‘0’ indicating that the SATA host
controller does not need to snoop VGA palette cycles.
agent receiving data AND it detects a parity error. PERR- is
not asserted if this bit is 0.
Hard-wired to ‘0’ to indicate that the SATA controller does not
need to insert a wait state between the address and data on
the AD lines.
SERR- when it detects an address parity error. SERR- is not
asserted if this bit is 0.
9 0b Read Only. Hard-wired to ‘0’ to indicate that fast back to back
Reserved 2:0 Reserved.
Interrupt Status 3 0b Interrupt status bit. Complies with the PCI 2.3 specification.
Capabilities List 4 1b Read Only. Hardwired to 1 to indicate that the Capabilities
Pointer is located at 34h.
66MHz Support 5 1b 66MHz capable. This feature is supported in the SATA
controller.
Reserved 6
Fast Back-to-Back
Capable
Data Parity Error 8 0b Data Parity reported. Set to 1 if the SATA controller detects
DEVSEL- Timing 10:9 01b Read only.
Signaled Target Abort 11 0b Signaled Target Abort. This bit is set to 1, when the SATA
Received Target Abort 12 0b Received Target Abort. This bit is set to 1 when the SATA
Received Master Abort
Status
SERR- Status 14 0b SERR- status. This bit is set to 1 when the SATA controller
Detected Parity Error 15 0b Detected Parity Error. This bit is set to 1 when the SATA
7 0b Read Only. Hard-wired to ‘0’ to indicate that it is fast back to
13 0b Received Master Abort Status. Set to 1 when the SATA
Reserved.
back incapable.
PERR- asserted while acting as the PCI master (whether
PERR- was driven by the SATA controller or not.). Write ‘1’ to
clear this bit.
These bits indicate DEVSEL- timing when performing a
positive decode. Since DEVSEL- is asserted to meet the
medium timing, these bits are encoded as 01b.
controller signals Target Abort. Write ‘1’ to clear this bit.
controller that generated the PCI cycle (SATA controller is the
PCI master) is aborted by a PCI target. Write ‘1’ to clear this
bit.
controller, acting as a PCI master, aborts a PCI bus memory
cycle. Write ‘1’ to clear this bit..
detects a PCI address parity error. Write ‘1’to clear this bit.
controller detects a parity error. Write ‘1’ to clear this bit.
Revision ID/Class Code- R - 32 bits - [PCI_Reg:08h]
Field Name Bits Default Description
Revision ID 7:0 00h These bits are hardwired to 00h to indicate the revision level of
the chip design.
Operating Mode
Selection
Sub-Class Code 23:16 01h Sub-Class Code. 01h to indicate an IDE Controller. See Note.
Class Code 31:24 01h Class Code. These 8 bits are read only and wired to 01h to
15:8 8Fh RW
Programmable I/F.
Bit [15] = Master IDE Device. Always 1.
Bits [14:12] = Reserved. Always read as 0’s.
Bit [11] = Programmable indicator for Secondary. Always 1 to
indicate that both modes are supported.
Bit [10] = Operating Mode for Secondary.
1 = Native PCI-mode.
0 = Compatibility Mode
Bit [9] = Programmable indicator for Primary. Always 1 to
Reserved 2:0 Reserved.
Master Latency Timer 7:3 00h Master Latency Timer. This number, in units of clocks,
represents the guaranteed time slice allowed to the IDE host
controller for burst transactions.
Header Type - R - 8 bits - [PCI_Reg:0Eh]
Field Name Bits Default Description
Header Type 7:0 00h Header Type. Since the IDE host controller is a single-function
device, this register contains a value of 00h.
BIST Mode Type - RW - 8 bits - [PCI_Reg:0Fh]
Field Name Bits Default Description
Completion Code 3:0 0h Read Only.
Indicates the completion code status of BIST. A non-zero
value indicates a failure.
Reserved 5:4 Reserved.
Start BIST 6 0b Since bit [7] is 0, program this bit take no effect.
BIST Capable 7 0b Read Only. Hard-wired to ‘0’ indicating that there is no HBA
related BIST function.
Base Address 0 - RW - 32 bits - [PCI_Reg:10h]
Field Name Bits Default Description
Resource Type Indicator 0 1b RTE (Resource Type Indicator). This bit is wired to 1 to
indicate that the base address field in this register maps to I/O
space.
Reserved 2:1 Reserved.
Primary IDE CS0 Base
Address
31:3 0000_
0000h
Base Address for Primary IDE Bus CS0. This register is used
for native mode only. Base Address 0 is not used in
compatibility mode.
Base Address 1 - RW - 32 bits - [PCI_Reg:14h]
Field Name Bits Default Description
Resource Type Indicator 0 1b RTE (Resource Type Indicator). This bit is wired to 1 to
indicate that the base address field in this register maps to I/O
space.
Reserved 1 Reserved.
Primary IDE CS1 Base
Address
31:2 0000_
0000h
Base Address for Primary IDE Bus CS1. This register is used
for native mode only. Base Address 1 is not used in
Minimum Grant 7:0 00h This register specifies the desired settings for how long of a
burst the SATA controller needs. The value specifies a period
of time in units of ¼ microseconds.
Hard-wired to 0’s and always read as 0’s.
Max_latency - R - 8 bits - [PCI_Reg:3Fh]
Field Name Bits Default Description
Maximum Latency 7:0 00h This register specifies the Maximum Latency time required
before the SATA controller as a bus-master can start an
accesses
Hard-wired to 0’s and always read as 0’s.
Misc Control - RW - 32 bits - [PCI_Reg:40h]
Field Name Bits Default Description
Subclass code write
Enable
Disable Dynamic Sata
Memory Power Saving
Enable dynamic Sata
Core Power Saving
Reserved 3 Reserved.
Disable Speed up XP
Boot
Reserved 5 0b Reserved
Reserved 15:6 Reserved.
Disable port0 16 0b When set, port0 is disabled and port0 clock is shut down.
Disable port1 17 0b When set, port1 is disabled and port1 clock is shut down.
Disable port2 18 0b When set, port2 is disabled and port2 clock is shut down.
Disable port3 19 0b When set, port3 is disabled and port3 clock is shut down.
Reserved 31:20 Reserved.
0 0b Once set, Program Interface register (PCI_Reg:09h), subclass
code register (PCI_Reg:0Ah) and Multiple Message Capable
bits (PCI_Reg50h[19:17]) can be programmable.
1 0b When clear, dynamic power saving function for SATA internal
memory macros will be performed to reduce power
consumption.
2 0b When set, dynamic power saving function for SATA core clock
will be performed during partial/slumber mode to reduce power
consumption.
4 0b When clear, it fastens XP boot up in IDE mode. However, this
bit needs to be set, when enable SATA partial/slumber power
function is in IDE mode.
When set, the SATA partial/slumber power function can be
enabled in IDE mode, but the BIOS IO trap is needed to speed
up XP boot-up in IDE mode.
Please refer to BAR5 + offset 12C/1Ac/22C/2AC[11:8] for the
SATA partial/slumber modes that are allowed.
Watch Dog Control And Status - RW - 16 bits - [PCI_Reg:44h]
Field Name Bits Default Description
Watchdog Enable 0 0b Set this bit to enable the watchdog counter for all the PCI
down stream transaction.
Watchdog Timeout
Status
Reserved 15:2 Reserved.
1 0b Watchdog Counter Timeout Status bit. This bit indicates that
the watchdog counter has expired for PCI down stream
transaction and the transaction got aborted due to counter has
expired.
Software writes 1 to clear the status.
Watch Dog Counter - RW - 16 bits - [PCI_Reg:46h]
Field Name Bits Default Description
Watchdog Counter 7:0 80h Specifies the timeout retry count for PCI down stream retries.
Reserved 15:8 Reserved.
Reserved 1:0 Reserved.
MSI Address 31:2 0000_0000h Lower 32 bits of the system specified message address
always DW aligned.
MSI Upper Address - RW- 32 bits - [PCI_Reg:58h]
Field Name Bits Default Description
MSI Upper Address 31:0 0000_0000h Upper 32 bits of the system specified message address.
This register is optional and only implemented if
MC.C64=1.
MSI Data - RW- 16 bits - [PCI_Reg:5Ch]
Field Name Bits Default Description
MSI Data 15:0 0000h MSI Data
Power Management Capability ID - R- 16 bits - [PCI_Reg:60h]
Field Name Bits Default Description
Capability ID 7:0 01h Capability ID. Indicates this is power management capability
ID.
Capability Next Pointer 15:8 50h Next Pointer.
Power Management Capability - R- 16 bits - [PCI_Reg:62h]
Field Name Bits Default Description
Version 2:0 010b Indicates support for Revision 1.1 of the PCI Power
Management Specification.
PME Clock 3 0b Indicates that PCI clock is not required to generate PME#.
Reserved 4 Reserved
Device Specific
Initialization
Aux_Current 8:6 000b Reports the maximum Suspend well current required when
D1_Support 9 0b The D1 state is not supported.
D2_Support 10 0b The D2 state is not supported.
PME_Support 15:11 00h Read-Only.
5 1b Indicates whether device-specific initialization is required.
PCI Power Management Control And Status - RW- 16 bits - [PCI_Reg:64h]
Field Name Bits Default Description
Power State 1:0 00b
Reserved 7:2 Reserved
PME Enable 8 0b Read-only. Hard-wired to ‘0’ indicates PME disable
Reserved 14:9 Reserved.
PME Status 15 0b Read-only. Hard-wired to ‘0’ as PME disable
This field is used both to determine the current power state
of the HBA and to set a new power state. The values are:
00 – D0 state
11 – D3
The D1 and D2 states are not supported. When in the
state, the configuration space is available, but the
D3
HOT
register memory spaces are not. Additionally, interrupts
are blocked.
HOT
state
Serial ATA Capability Register 0 - R- 32 bits - [PCI_Reg:70h]
Field Name Bits Default Description
Capability ID 7:0 12h Capability ID. Indicates this is a Serial ATA Capability ID.
Capability Next Pointer 15:8 00h Next Pointer, end of the list.
Minor Revision 19:16 0h Minor revision number of the SATA Capability Pointer
implemented.
Major Revision 23:20 1h Major revision number of the SATA Capability Pointer
implemented.
Reserved 31:24 Reserved
Serial ATA Capability Register 1 - R- 32 bits - [PCI_Reg:74h]
Field Name Bits Default Description
BAR Location 3:0 1111b Value 1111b indicates that the Index-Data Pair is implemented
in Dwords directly following SATACR1 in the PCI configuration
space.
BAR Offset 23:4 00000h Indicates the offset into the BAR where the Index-Data Pair
are located in Dword granularity. Since the BAR location is
setting at 1111b, this field is not used anymore.
Reserved 31:24 Reserved
IDP Index Register - RW- 32 bits - [PCI_Reg:78h]
Field Name Bits Default Description
Reserved 1:0 Reserved
IDP Index 9:2 00h This register selects the Dword offset of the memory mapped
AHCI register to be accessed. The IDP Index should be sized
such that it can access the entire ABAR register space for the
particular implementation. See Note.
Reserved 31:10 Reserved
Note: ABAR is AHCI memory map registers located at AHCI base address (BAR5) space.
IDP Data Register - RW- 32 bits - [PCI_Reg:7Ch ]
Field Name Bits Default Description
IDP Data 31:0 This register is a “window” through which data is read or
written to the memory mapped register pointed to by the IDP
Index register. Note that a physical register is not actually
implemented as the data is actually stored in the memory
mapped registers.
Since this is not a physical register, the “default” value is the
same as the default value of the register pointed to by IDP
Index.
All register accesses to IDP Data are Dword granularity
2.1.2 BAR0/BAR2/BAR1/BAR3 Registers (SATA I/O Register for IDE mode)
BAR0/BAR2 uses 8 bytes of I/O space. BAR0 is used for Primary channel and BAR2 is used for Secondary
channel during IDE native mode. BAR1/BAR3 uses 2 bytes of I/O space. BAR1 is used for Primary channel
and BAR3 is used for Secondary channel during IDE native mode.
Address (hex) Name and Function
Compatibility Mode Native Mode (Offset) Read Function Write Function
IDE Command Block Registers
Primary Secondary BAR0/BAR2
1F0 170 (Primary or Secondary)
Base Address 0 + 0
1F1 171 (Primary or Secondary)
Base Address 0 + 1
1F2 172 (Primary or Secondary)
Base Address 0 + 2
1F3 173 (Primary or Secondary)
Base Address + 3
1F4 174 (Primary or Secondary)
Base Address + 4
1F5 175 (Primary or Secondary)
Base Address + 5
1F6 176 (Primary or Secondary)
Base Address + 6
1F7 177 (Primary or Secondary)
Base Address + 7
IDE Control Block Registers
Primary Secondary BAR1/BAR3
3F6 376 (Primary or Secondary)
Base Address + 2
Data (16 bit) Data (16 bit)
Error register Features register
Sector Count Sector Count
Sector Number Sector Number
Cylinder Low Cylinder Low
Cylinder High Cylinder High
Drive/Head Drive/Head
Status Command
Alternate Status Device Control
2.1.3 BAR4 Registers (SATA I/O Register for IDE mode)
BAR4 uses 16 bytes of I/O space. The Bus-master interface base address register (BAR4) defines the base
address of the IO spare.
Bus-master IDE Status - RW- 8 bits - [IO_Reg: BAR4 + 02/0Ah]
Field Name Bits Default Description
Bus Master Active 0 0b Bus Master IDE active. This bit is set to 1 when bit 0 in the Bus
Master IDE command address register is set to 1. The IDE host
controller sets this bit to 0 when the last transfer for a region is
performed. This bit is also set to 0 when bit 0 of the Bus Master
IDE command register is set to 0.
Bus Master DMA Error 1 0b IDE DMA error. This bit is set when the IDE host controller
encounters a target abort, master abort, or Parity error while
transferring data on the PCI bus. Write ‘1’ clears this bit
IDE Interrupt 2 0b IDE Interrupt. Indicates when an IDE device has asserted its
interrupt line. IRQ14 is used for the Primary channel and IRQ15 is
used for the secondary channel. If the interrupt status bit is set to
0, by writing a 1 to this bit while the interrupt line is still at the
active level, this bit remains 0 until another assertion edge is
detected on the interrupt line.
Reserved 4:3 Reserved.
Master Device DMA
Capable
Slave Device DMA
Capable
Simplex Only 7 0b Read Only
Reserved 1:0 0h Reserved. Always read as 0’s.
Descriptor Table Base
Address
31:2 0000_0000h Base Address of Descriptor Table. These bits correspond to
Address [31-02].
2.1.4 BAR5 Registers
These are the AHCI memory map registers. The base address is defined through the ABAR (BAR5) register.
Register Name Offset Address
Generic Host Control 00h-23h
Reserved
Vendor Specific registers A0h-FFh
Port 0 port control registers 100h-17Fh
Port 1 port control registers 180h-1FFh
Port 2 port control registers 200h-27Fh
Port 3 port control registers 280h-2FFh
HBA Capabilities – R - 32bits [Mem_reg: ABAR + 00h]
Field Name Bits Default Description
Number of Ports(NP) 4:0 00011b 0’s based value indicating the maximum number of ports
supported by the HBA silicon. A maximum of 32 ports can be
supported. A value of ‘0h’, indicating one port, is the
minimum requirement. Note that the number of ports
indicated in this field may be more than the number of ports
indicated in the GHC.PI register.
Supports External SATA
(SXS)
Enclosure Management
Supported (EMS)
Command Completion
Coalescing Supported
(CCCS)
Number of Command
Slots (NCS)
Partial State Capable
(PSC)
Slumber State Capable
(SSC)
PIO Multiple DRQ Block
(PMD)
FIS-based Switching
Supported (FBSS)
5 0b When set to ‘1’, indicates that the HBA has one or more
Serial ATA ports that has a signal only connector that is
externally accessible. If this bit is set to ‘1’, software may
refer to the PxCMD.ESP bit to determine whether a specific
port has its signal connector externally accessible as a signal
only connector (i.e. power is not part of that connector).
When the bit is cleared to ‘0’, indicates that the HBA has no
Serial ATA ports that have a signal only connector externally
accessible.
6 0b When set to ‘1’, indicates that the HBA supports enclosure
management. When enclosure management is supported,
the HBA has implemented the EM_LOC and EM_CTL global
HBA registers. When cleared to ‘0’, indicates that the HBA
does not support enclosure management and the EM_LOC
and EM_CTL global HBA registers are not implemented.
7 1b When set to ‘1’, indicates that the HBA supports command
completion coalescing. When command completion
coalescing is supported, the HBA has implemented the
CCC_CTL and the CCC_PORTS global HBA registers.
When cleared to ‘0’, indicates that the HBA does not support
command completion coalescing and the CCC_CTL and
CCC_PORTS global HBA registers are not implemented.
12:8 11111b 0’s based value indicating the number of command slots per
port supported by this HBA. A minimum of 1 and maximum
of 32 slots per port can be supported. The same number of
command slots is available on each implemented port.
13 1b Indicates whether the HBA can support transitions to the
Partial state. When cleared to ‘0’, software must not allow
the HBA to initiate transitions to the Partial state via
aggressive link power management nor the PxCMD.ICC field
in each port, and the PxSCTL.IPM field in each port must be
programmed to disallow device initiated Partial requests.
When set to ‘1’, HBA and device initiated Partial requests can
be supported.
14 1b Indicates whether the HBA can support transitions to the
Slumber state. When cleared to ‘0’, software must not allow
the HBA to initiate transitions to the Slumber state via
aggressive link power management nor the PxCMD.ICC field
in each port, and the PxSCTL.IPM field in each port must be
programmed to disallow device initiated Slumber requests.
When set to ‘1’, HBA and device initiated Slumber requests
can be supported.
15 1b If set to ‘1’, the HBA supports multiple DRQ block data
transfers for the PIO command protocol. If cleared to ‘0’ the
HBA only supports single DRQ block data transfers for the
PIO command protocol.
16 0b When set to ‘1’, indicates that the HBA supports Port
Multiplier FIS-based switching. When cleared to ‘0’, indicates
that the HBA does not support FIS-based switching. AHCI
1.0 and 1.1 HBAs shall have this bit cleared to ‘0’.
HBA Capabilities – R - 32bits [Mem_reg: ABAR + 00h]
Field Name Bits Default Description
Supports Port Multiplier
(SPM)
Supports AHCI mode
only (SAM)
Supports Non-Zero DMA
Offsets (SNZO)
Interface Speed Support
(ISS)
Supports Command List
Override (SCLO)
Supports Activity LED
(SAL)
Supports Aggressive
Link Power Management
(SALP)
Supports Staggered
Spin-up (SSS)
Supports Mechanical
Presence Switch (SMPS)
Supports SNotification
Register (SSNTF)
17 1b Indicates whether the HBA can support a Port Multiplier.
When set, a Port Multiplier using command-based switching
is supported. When cleared to ‘0’, a Port Multiplier is not
supported, and a Port Multiplier may not be attached to this
HBA.
18 0b The SATA controller may optionally support AHCI access
mechanisms only. A value of '0' indicates that in addition to
the native AHCI mechanism (via ABAR), the SATA controller
implements a legacy, task-file based register interface such
as SFF-8038i. A value of '1' indicates that the SATA
controller does not implement a legacy, task-file based
register interface.
19 0b When set to ‘1’, indicates that the HBA can support non-zero
DMA offsets for DMA Setup FISes. This bit is reserved for
future AHCI enhancements. AHCI 1.0 and 1.1 HBAs shall
have this bit cleared to ‘0’.
23:20 2h
24 1b When set to ‘1’, the HBA supports the PxCMD.CLO bit and its
25 1b When set to ‘1’, the HBA supports a single activity indication
26 1b When set to ‘1’, the HBA can support auto-generating link
27 0b When set to ‘1’, the HBA supports staggered spin-up on its
28 1b When set to ‘1’, the HBA supports mechanical presence
29 1b
Indicates the maximum speed the HBA can support on its
ports. These encodings match the system software
programmable PxSCTL.DET.SPD field. Values are:
Bits Definition
0000 Reserved
0001 Gen 1 (1.5 Gbps)
0010
0011 - 1111 Reserved
associated function. When cleared to ‘0’, the HBA is not
capable of clearing the BSY and DRQ bits in the Status
register in order to issue a software reset if these bits are still
set from a previous operation.
output pin. This pin can be connected to an LED on the
platform to indicate device activity on any drive. When
cleared to ‘0’, this function is not supported.
requests to the Partial or Slumber states when there are no
commands to process. When cleared to ‘0’, this function is
not supported and software shall treat the PxCMD.ALPE and
PxCMD.ASP bits as reserved.
ports, for use in balancing power spikes. When cleared to ‘0’,
this function is not supported. This value is loaded by the
BIOS prior to OS initialization.
switches on its ports for use in hot plug operations. When
cleared to ‘0’, this function is not supported. This value is
loaded by the BIOS prior to OS initialization.
When set to ‘1’, the
HBA supports the PxSNTF
(SNotification) register and its associated functionality.
When cleared to ‘0’, the HBA does not support the
PxSNTF (SNotification) register and its associated
functionality.
HBA Capabilities – R - 32bits [Mem_reg: ABAR + 00h]
Field Name Bits Default Description
Supports Native
Command Queuing
(SNCQ)
Supports 64-bit
Addressing (S64A)
30 1b Indicates whether the HBA supports Serial ATA native
command queuing. If set to ‘1’, an HBA shall handle DMA
Setup FISes natively, and shall handle the auto-activate
optimization through that FIS. If cleared to ‘0’, native
command queuing is not supported and software should not
issue any native command queuing commands.
31 1b Indicates whether the HBA can access 64-bit data structures.
When set to ‘1’, the HBA shall make the 32-bit upper bits of
the port DMA Descriptor, the PRD Base, and each PRD entry
read/write. When cleared to ‘0’, these are read-only and
treated as ‘0’ by the HBA.
Global HBA Control – RW - 32bits [Mem_reg: ABAR + 04h]
Field Name Bits Default Description
HBA Reset (HR) 0 0b
Interrupt Enable (IE) 1 0b This global bit enables interrupts from the HBA. When
MSI Revert to Single
Message (MRSM)
Reserved 30:3 Reserved.
2 0b
When set by SW, this bit causes an internal reset of the HBA.
All state machines that relate to data transfers and queuing
shall return to an idle condition, and all ports shall be reinitialized via COMRESET (if staggered spin-up is not
supported). If staggered spin-up is supported, then it is the
responsibility of software to spin-up each port after the reset
has completed.
When the HBA has performed the reset action, it shall reset
this bit to ‘0’. A software write of ‘0’ shall have no effect. For
a description on which bits are reset when this bit is set.
cleared (reset default), all interrupt sources from all ports are
disabled. When set, interrupts are enabled.
Read Only
When set to ‘1’ by hardware, indicates that the HBA
requested more than one MSI vector but has reverted to
using the first vector only. When this bit is cleared to ‘0’, the
HBA has not reverted to single MSI mode (i.e. hardware is
already in single MSI mode, software has allocated the
number of messages requested, or hardware is sharing
interrupt vectors if MC.MME < MC.MMC).
The HBA may revert to single MSI mode when the number of
vectors allocated by the host is less than the number
requested. This bit shall only be set to ‘1’ when the following
conditions hold:
• MC.MSIE = ‘1’ (MSI is enabled)
• MC.MMC > 0 (multiple messages requested)
• MC.MME > 0 (more than one message allocated)
• MC.MME != MC.MMC (messages allocated not
equal to number requested)
When this bit is set to ‘1’, single MSI mode operation is in use
and software is responsible for clearing bits in the IS register
to clear interrupts.
This bit shall be cleared to ‘0’ by hardware when any of the
four conditions stated is false. This bit is also cleared to ‘0’
when MC.MSIE = ‘1’ and MC.MME = 0h. In this case, the
hardware has been programmed to use single MSI mode,
and is not “reverting” to that mode.
Global HBA Control – RW - 32bits [Mem_reg: ABAR + 04h]
Field Name Bits Default Description
AHCI Enable (AE) 31 0b
Interrupt Status - RW -32 bits [Mem_reg: ABAR + 08h]
Field Name Bits Default Description
Interrupt Pending Status
(IPS)
Write 1 to clear these status bits.
31:0 0000_
0000h
When set, indicates that communication to the HBA shall be
via AHCI mechanisms. This can be used by an HBA that
supports both legacy mechanisms (such as SFF-8038i) and
AHCI to know when the HBA is running under an AHCI
driver.
When set, software shall only communicate with the HBA
using AHCI. When cleared, software shall only communicate
with the HBA using legacy mechanisms. When cleared
FISes are not posted to memory and no commands are sent
via AHCI mechanisms.
Software shall set this bit to ‘1’ before accessing other AHCI
registers.
If set, indicates that the corresponding port has an interrupt
pending. Software can use this information to determine
which ports require service after an interrupt.
The IPS[x] bit is only defined for ports that are implemented
or for the command completion coalescing interrupt defined
by CCC_CTL.INT. All other bits are reserved.
Port Implemented (PI) 31:0 0000000Fh This register is bit significant. If a bit is set to ‘1’, the
corresponding port is available for software to use. If a bit is
cleared to ‘0’, the port is not available for software to use.
The maximum number of bits set to ‘1’ shall not exceed
CAP.NP + 1, although the number of bits set in this register
may be fewer than CAP.NP + 1. At least one bit shall be set
to ‘1’.
AHCI Version- R – 32 bits [Mem_reg: ABAR + 10h]
Field Name Bits Default Description
Minor Version Number
(MNR)
Major Version Number
(MJR)
Version: V1.10
CCC_CTL Enable 0 0b When cleared to ‘0’, the command completion coalescing
feature is disabled and no CCC interrupts are generated.
When set to ‘1’, the command completion coalescing feature
is enabled and CCC interrupts may be generated based on
timeout or command completion conditions. Software shall
only change the contents of the TV and CC fields when EN is
cleared to ‘0’. On transition of this bit from ‘0’ to ‘1’, any
updated values for the TV and CC fields shall take effect.
Specifies the interrupt used by the CCC feature. This
interrupt must be marked as unused in the Ports
Implemented (PI) register by the corresponding bit being set
to ‘0’. Thus, the CCC interrupt corresponds to the interrupt
for an unimplemented port on the controller. When a CCC
interrupt occurs, the IS.IPS[INT] bit shall be asserted to ‘1’.
This field also specifies the interrupt vector used for MSI.
Command Completions
(CC)
Timeout Value (TV) 31:16 0001h The timeout value is specified in 1 millisecond intervals. The
15:8 01h Specifies the number of command completions that are
necessary to cause a CCC interrupt. The HBA has an
internal command completion counter, hCccComplete.
hCccComplete is incremented by one each time a selected
port has a command completion. When hCccComplete is
equal to the command completions value, a CCC interrupt is
signaled. The internal command completion counter is reset
to ‘0’ on the assertion of each CCC interrupt. A value of ‘0’
for this field shall disable CCC interrupts being generated
based on the number of commands completed, i.e. CCC
interrupts are only generated based on the timer in this case.
timer accuracy shall be within 5%. hCccTimer is loaded with
this timeout value. The hCccTimer is only decremented when
commands are outstanding on selected ports. The HBA will
signal a CCC interrupt when hCccTimer has decremented to
‘0’. The hCccTimer is reset to the timeout value on the
assertion of each CCC interrupt. A timeout value of ‘0’ is
reserved.
Ports (PRT) 31:0 00000000h This register is bit significant. Each bit corresponds to a
particular port, where bit 0 corresponds to port 0. If a bit is
set to ‘1’, the corresponding port is part of the command
completion coalescing feature. If a bit is cleared to ‘0’, the
port is not part of the command completion coalescing
feature. Bits set to ‘1’ in this register must also have the
corresponding bit set to ‘1’ in the Ports Implemented register.
An updated value for this field shall take effect within one
timer increment (1 millisecond).
The algorithm for the software to determine the offset is as follows:
•Port offset = 100h + (PI Asserted Bit Position * 80h)
Register Name Offset Address
Port-N Command List Base Address(PNCLB) 00h-03h + Port offset
Port-N Command List Base Address Upper 32-
Bits(PNCLBU)
Port-N FIS Base Address(PNFB) 08h-0Bh + Port offset
Port-N FIS Base Address Upper 32-Bits(PNFBU) 0Ch-0Fh + Port offset
Port-N Interrupt Status(PNIS) 10h-13h + Port offset
Port-N Interrupt Enable(PNIE) 14h-17h + Port offset
Port-N Command and Status(PNCMD) 18h-1Bh + Port offset
Reserved 1Ch-1Fh + Port offset
Port-N Task File Data(PNTFD) 20h-23h + Port offset
Port-N Signature(PNSIG) 24h-27h + Port offset
Port-N Serial ATA Status (PNSSTS) 28h-2Bh + Port offset
Port-N Serial ATA Control (PNSCTL) 2Ch-2Fh + Port offset
Port-N Serial ATA Error (PNSERR) 30h-33h + Port offset
Port-N Serial ATA Active (PNSACT) 34h-37h + Port offset
Port-N Command Issue(PNCI) 38h-3Bh + Port offset
Port-N SNotification (PNSNTF) 3Ch-3Fh + Port offset
Reserved for FIS-based Switching Definition 40h-43h + Port offset
Reserved 44h-6Fh + Port offset
Port-N Vendor Specific(PNVS) 70h-7Fh + Port offset
*N is the port number, 0 ~ 3
04h-07h + Port offset
Port-N Command List Base Address -RW -32 bits [Mem_reg: ABAR + port offset + 00h ]
Field Name Bits Default Description
Reserved 9:0 Reserved.
Command List Base
Address (CLB)
31:10 000000h Indicates the 32-bit base physical address for the command
list for this port. This base is used when fetching commands
to execute. The structure pointed to by this address range is
1K-bytes in length. This address must be 1K-byte aligned as
indicated by bits 09:00 being read only.
Port-N Command List Base Upper Address -RW - 32 bits [Mem_reg: ABAR + port offset + 04h]
Field Name Bits Default Description
Command List Base
Address Upper (CLBU)
31:0 00000000h
Indicates the upper 32-bits for the command list base
physical address for this port. This base is used when
fetching commands to execute.
This register shall be read only ‘0’ for HBAs that do not
support 64-bit addressing.
Port–N FIS Base Address -RW -32 bits [Mem_reg: ABAR + port offset + 08h]
Field Name Bits Default Description
Reserved 7:0 Reserved.
FIS Base Address (FB) 31:8 000000h Indicates the 32-bit base physical address for received FISes.
The structure pointed to by this address range is 256 bytes in
length. This address must be 256-byte aligned as indicated
by bits 07:00 being read only.
Descriptor Processed
(DPS)
Port Connect Change
Status (PCS)
Device Mechanical
Presence Status (DMPS)
Reserved 21:8 Reserved
PhyRdy Change Status
(PRCS)
Incorrect Port Multiplier
Status (IPMS)
Overflow Status (OFS) 24 0b Indicates that the HBA received more bytes from a device
Reserved 25 Reserved
Interface Non-fatal Error
Status (INFS)
Interface Fatal Error
Status (IFS)
0 0b A D2H Register FIS has been received with the ‘I’ bit set, and
has been copied into system memory.
1 0b A PIO Setup FIS has been received with the ‘I’ bit set, it has
been copied into system memory, and the data related to that
FIS has been transferred. This bit shall be set even if the
data transfer resulted in an error.
2 0b A DMA Setup FIS has been received with the ‘I’ bit set and
has been copied into system memory.
3 0b A Set Device Bits FIS has been received with the ‘I’ bit set
and has been copied into system memory.
4 0b Read Only
When set to ‘1’, indicates that an unknown FIS was received
and has been copied into system memory. This bit is cleared
to ‘0’ by software clearing the PxSERR.DIAG.F bit to ‘0’.
Note that this bit does not directly reflect the PxSERR.DIAG.F
bit. PxSERR.DIAG.F is set immediately when an unknown
FIS is detected, whereas this bit is set when that FIS is
posted to memory. Software should wait to act on an
unknown FIS until this bit is set to ‘1’ or the two bits may
become out of sync.
5 0b
6 0b Read Only
7 0b When set, indicates that a mechanical presence switch
22 0b Read Only
23 0b Indicates that the HBA received a FIS from a device whose
26 0b Indicates that the HBA encountered an error on the Serial
27 0b Indicates that the HBA encountered an error on the Serial
A PRD with the ‘I’ bit set has transferred all of its data.
1=Change in Current Connect Status. 0=No change in
Current Connect Status. This bit reflects the state of
PxSERR.DIAG.X. This bit is only cleared when
PxSERR.DIAG.X is cleared.
attached to this port has been opened or closed, which may
lead to a change in the connection state of the device. This
bit is only valid if both CAP.SMPS and P0CMD.MPSP are set
to ‘1’.
When set to ‘1’ indicates the internal PhyRdy signal changed
state. This bit reflects the state of P0SERR.DIAG.N. To
clear this bit, software must clear P0SERR.DIAG.N to ‘0’.
Port Multiplier field did not match what was expected. The
IPMS bit may be set during enumeration of devices on a Port
Multiplier due to the normal Port Multiplier enumeration
process. It is recommended that IPMS only be used after
enumeration is complete on the Port Multiplier.
than was specified in the PRD table for the command.
Port–N Interrupt Status - RW - 32 bits [Mem_reg: ABAR + port o ffset + 10h]
Field Name Bits Default Description
Host Bus Data Error
Status (HBDS)
Host Bus Fatal Error
Status (HBFS)
Task File Error Status
(TFES)
Cold Port Detect Status
(CPDS)
Write 1 to clear these status bits.
28 0b Indicates that the HBA encountered a data error
(uncorrectable ECC / parity) when reading from or writing to
system memory.
29 0b Indicates that the HBA encountered a host bus error that it
cannot recover from, such as a bad software pointer. In PCI,
such an indication would be a target or master abort.
30 0b This bit is set whenever the status register is updated by the
device and the error bit (bit 0) is set.
31 0b When set, a device status has changed as detected by the
cold presence detect logic. This bit can either be set due to a
non-connected port receiving a device, or a connected port
having its device removed. This bit is only valid if the port
supports cold presence detect as indicated by PxCMD.CPD
set to ‘1’.
Reserved 21:8 Reserved
PhyRdy Change Interrupt
Enable (PRCE)
Incorrect Port Multiplier
Enable (IPME)
Overflow Enable (OFE) 24 0b When set, and GHC.IE and P0IS.OFS are set, the HBA shall
Reserved 25 Reserved
Interface Non-fatal Error
Enable (INFE)
Interface Fatal Error
Enable (IFE)
Host Bus Data Error
Enable (HBDE)
Host Bus Fatal Error
Enable (HBFE)
Task File Error Enable
(TFEE)
0 0b When set, GHC.IE is set, and P0IS.DHRS is set, the HBA
shall generate an interrupt.
1 0b When set, GHC.IE is set, and P0IS.PSS is set, the HBA shall
generate an interrupt.
2 0b When set, GHC.IE is set, and P0IS.DSS is set, the HBA shall
generate an interrupt.
3 0b When set, GHC.IE is set, and P0IS.SDBS is set, the HBA
shall generate an interrupt.
4 0b When set, GHC.IE is set, and P0IS.UFS is set to ‘1’, the HBA
shall generate an interrupt.
5 0b When set, GHC.IE is set, and P0IS.DPS is set, the HBA shall
generate an interrupt.
6 0b When set, GHC.IE is set, and P0IS.PCS is set, the HBA shall
generate an interrupt.
7 0b
22 0b When set to ‘1’, and GHC.IE is set to ‘1’, and P0IS.PRCS is
23 0b When set, and GHC.IE and P0IS.IPMS are set, the HBA shall
26 0b When set, GHC.IE is set, and P0IS.INFS is set, the HBA shall
27 0b When set, GHC.IE is set, and P0IS.IFS is set, the HBA shall
28 0b When set, GHC.IE is set, and P0IS.HBDS is set, the HBA
29 0b When set, GHC.IE is set, and P0IS.HBFS is set, the HBA
30 0b When set, GHC.IE is set, and P0S.TFES is set, the HBA shall
When set, and GHC.IE is set to ‘1’, and P0IS.DMPS is set,
the HBA shall generate an interrupt.
For systems that do not support a mechanical presence
switch, this bit shall be a read-only ‘0’.
When set, GHC.IE is set, and P0S.CPDS is set, the HBA
shall generate an interrupt.
For systems that do not support cold presence detect, this bit
shall be a read-only ‘0’.
Port-N Command and Status - R - 32 bits [Mem_reg: ABAR + port offset + 18h]
Field Name Bits Default Description
Start (ST) 0 0b RW
When set, the HBA may process the command list. When
cleared, the HBA may not process the command list.
Whenever this bit is changed from a ‘0’ to a ‘1’, the HBA
starts processing the command list at entry ‘0’. Whenever
this bit is changed from a ‘1’ to a ‘0’, the PxCI register is
cleared by the HBA upon the HBA putting the controller into
an idle state. This bit shall only be set to ‘1’ by software after
PxCMD.FRE has been set to ‘1’.
Spin-Up Device (SUD) 1 1b This bit is read/write for HBAs that support staggered spin-up
via CAP.SSS. This bit is read only ‘1’ for HBAs that do not
support staggered spin-up. On an edge detect from ‘0’ to ‘1’,
the HBA shall start a COMRESET initialization sequence to
the device. Clearing this bit to ‘0’ does not cause any OOB
signal to be sent on the interface. When this bit is cleared to
‘0’ and PxSCTL.DET=0h, the HBA will enter listen mode.
Power On Device (POD) 2 1b This bit is read/write for HBAs that support cold presence
detection on this port as indicated by PxCMD.CPD set to ‘1’.
This bit is read only ‘1’ for HBAs that do not support cold
presence detect. When set, the HBA sets the state of a pin
on the HBA to ‘1’ so that it may be used to provide power to a
cold-presence detectable port.
Command List Override
(CLO)
FIS Receive Enable
(FRE)
Reserved 7:5 Reserved
3 0b
4 0b
RW
Setting this bit to ‘1’ causes PxTFD.STS.BSY and
PxTFD.STS.DRQ to be cleared to ‘0’. This allows a software
reset to be transmitted to the device regardless of whether
the BSY and DRQ bits are still set in the PxTFD.STS register.
The HBA sets this bit to ‘0’ when PxTFD.STS.BSY and
PxTFD.STS.DRQ have been cleared to ‘0’. A write to this
register with a value of ‘0’ shall have no effect.
This bit shall only be set to ‘1’ immediately prior to setting the
PxCMD.ST bit to ‘1’ from a previous value of ‘0’. Setting this
bit to ‘1’ at any other time is not supported and will result in
indeterminate behavior. Software must wait for CLO to be
cleared to ‘0’ before setting PxCMD.ST to ‘1’.
RW
When set, the HBA may post received FISes into the FIS
receive area pointed to by PxFB (and for 64-bit HBAs,
PxFBU). When cleared, received FISes are not accepted by
the HBA, except for the first D2H register FIS after the
initialization sequence, and no FISes are posted to the FIS
receive area.
System software must not set this bit until PxFB (PxFBU)
have been programmed with a valid pointer to the FIS receive
area, and if software wishes to move the base, this bit must
first be cleared, and software must wait for the FR bit in this
register to be cleared
Port-N Command and Status - R - 32 bits [Mem_reg: ABAR + port offset + 18h]
Field Name Bits Default Description
Current Command Slot
(CCS)
Mechanical Presence
Switch State (MPSS)
FIS Receive Running
(FR)
Command List Running
(CR)
Cold Presence State
(CPS)
Port Multiplier Attached
(PMA)
Hot Plug Capable Port
(HPCP)
Mechanical Presence
Switch Attached to Port
(MPSP)
Cold Presence Detection
(CPD)
External SATA Port
(ESP)
Reserved 23:22 Reserved
12:8 00h This field is valid when P0CMD.ST is set to ‘1’ and shall be
set to the command slot value of the command that is
currently being issued by the HBA. When P0CMD.ST
transitions from ‘1’ to ‘0’, this field shall be reset to ‘0’. After
P0CMD.ST transitions from ‘0’ to ‘1’, the highest priority slot
to issue from next is command slot 0. After the first
command has been issued, the highest priority slot to issue
from next is P0CMD.CCS + 1. For example, after the HBA
has issued its first command, if CCS = 0h and P0CI is set to
3h, the next command that will be issued is from command
slot 1.
13 1b The MPSS bit reports the state of a mechanical presence
switch attached to this port. If CAP.SMPS is set to ‘1’ and the
mechanical presence switch is closed then this bit is cleared
to ‘0’. If CAP.SMPS is set to ‘1’ and the mechanical presence
switch is open then this bit is set to ‘1’. If CAP.SMPS is set to
‘0’ then this bit is cleared to ‘0’. Software should only use this
bit if both CAP.SMPS and P0CMD.MPSP are set to ‘1’.
14 0b When set, the FIS Receive DMA engine for the port is
running.
15 0b When this bit is set, the command list DMA engine for the
port is running. See the AHCI state machine in section.
16 0b The CPS bit reports whether a device is currently detected on
this port via cold presence detection. If CPS is set to ‘1’, then
the HBA detects via cold presence that a device is attached
to this port. If CPS is cleared to ‘0’ , then the HBA detects via
cold presence that there is no device attached to this port.
17 0b RW
This bit is read/write for HBAs that support a Port Multiplier
(CAP.SPM = ‘1’). This bit is read-only for HBAs that do not
support a port Multiplier (CAP.SPM = ‘0’). When set to ‘1’ by
software, a Port Multiplier is attached to the HBA for this port.
When cleared to ‘0’ by software, a Port Multiplier is not
attached to the HBA for this port. Software is responsible for
detecting whether a Port Multiplier is present; hardware does
not auto-detect the presence of a Port Multiplier.
18 1b When set to ‘1’, indicates that this port’s signal and power
connectors are externally accessible via a joint signal and
power connector for blindmate device hot plug. When
cleared to ‘0’, indicates that this port’s signal and power
connectors are not externally accessible via a joint signal and
power connector.
19 0b If set to ‘1’, the platform supports an mechanical presence
switch attached to this port. If cleared to ‘0’, the platform
does not support a mechanical presence switch attached to
this port. When this bit is set to ‘1’, P0CMD.HPCP should
also be set to ‘1’.
20 0b If set to ‘1’, the platform supports cold presence detection on
this port. If cleared to ‘0’, the platform does not support cold
presence detection on this port. When this bit is set to ‘1’,
P0CMD.HPCP should also be set to ‘1’.
21 0b When set to '1', indicates that this port’s signal connector is
externally accessible on a signal only connector. When set to
'1', CAP.SXS shall be set to '1'. When cleared to ‘0’, indicates
that this port’s signal connector is not externally accessible
on a signal only connector. ESP is mutually exclusive with
the HPCP bit in this register.
Port-N Command and Status - R - 32 bits [Mem_reg: ABAR + port offset + 18h]
Field Name Bits Default Description
Device is ATAPI (ATAPI) 24 0b RW
When set to ‘1’, the connected device is an ATAPI device.
This bit is used by the HBA to control whether or not to
generate the desktop LED when commands are active.
Drive LED on ATAPI
Enable (DLAE)
Aggressive Link Power
Management Enable
(ALPE)
Aggressive Slumber /
Partial (ASP)
25 0b RW
When set to ‘1’, the HBA shall drive the LED pin active for
commands regardless of the state of P0CMD.ATAPI. When
cleared, the HBA shall only drive the LED pin active for
commands if P0CMD.ATAPI set to ‘0’.
26 0b RW
When set to ‘1’, the HBA shall aggressively enter a lower link
power state (Partial or Slumber) based upon the setting of the
ASP bit. Software shall only set this bit to ‘1’ if CAP.SALP is
set to ‘1’; if CAP.SALP is cleared to ‘0’ software shall treat
this bit as reserved.
27 0b RW
When set to ‘1’, and ALPE is set, the HBA shall aggressively
enter the Slumber state when it clears the PxCI register and
the PxSACT register is cleared or when it clears the PxSACT
register and PxCI is cleared. When cleared, and ALPE is set,
the HBA shall aggressively enter the Partial state when it
clears the PxCI register and the PxSACT register is cleared
or when it clears the PxSACT register and PxCI is cleared. If
CAP.SALP is cleared to ‘0’ software shall treat this bit as
reserved.
Port-N Command and Status - R - 32 bits [Mem_reg: ABAR + port offset + 18h]
Field Name Bits Default Description
Interface Communication
Control (ICC)
31:28 0h
RW
This field is used to control power management states of the
interface. If the Link layer is currently in the L_IDLE state,
writes to this field shall cause the HBA to initiate a transition
to the interface power management state requested. If the
Link layer is not currently in the L_IDLE state, writes to this
field shall have no effect.
Value Definition
Fh - 7h Reserved
6h
5h - 3hReserved
2h
1h
0h
Slumber: This shall cause the HBA to
request a transition of the interface to the
Slumber state. The SATA device may
reject the request and the interface shall
remain in its current state.
Partial: This shall cause the HBA to
request a transition of the interface to the
Partial state. The SATA device may reject
the request and the interface shall remain
in its current state.
Active: This shall cause the HBA to
request a transition of the interface into the
active state.
No-Op / Idle: When software reads this
value, it indicates the HBA is ready to
accept a new interface control command,
although the transition to the previously
selected state may not yet have occurred.
When the system software writes a non-reserved value other
than No-Op (0h), the HBA shall perform the action and
update this field back to Idle (0h).
If software writes to this field to change the state to a state
the link is already in (i.e. interface is in the active state and a
request is made to go to the active state), the HBA shall take
no action and return this field to Idle. If the interface is in a
low power state and software wants to transition to a different
low power state, software must first bring the link to active
and then initiate the transition to the desired low power state.
Port-N Serial ATA Status – R – 32 bits [Mem_reg: ABAR + port offset + 28h]
Field Name Bits Default Description
Interface Power
Management (IPM)
Reserved 31:12 Reserved
11:8 0h
Indicates the current interface state:
0h Device not present or communication not
established
1h Interface in active state
2h Interface in Partial power management state
6h Interface in Slumber power management state
All other values reserved. Read Only
Port-N Serial ATA Control – RW – 32 bits [Mem_reg: ABAR + port offset + 2Ch]
Field Name Bits Default Description
Device Detection
Initialization (DET)
Speed Allowed (SPD) 7:4 0h
3:0 0h
Controls the HBA’s device detection and interface
initialization.
0h No device detection or initialization action
1h Perform interface communication initialization
4h Disable the Serial ATA interface and put Phy in
All other values reserved
This field may only be modified when P0CMD.ST is ‘0’.
Changing this field while the P0CMD.ST bit is set to ‘1’
results in undefined behavior. When P0CMD.ST is set to ‘1’,
this field should have a value of 0h.
Note: It is permissible to implement any of the Serial ATA
defined behaviors for transmission of COMRESET when
DET=1h.
Indicates the highest allowable speed of the interface.
0h No speed negotiation restrictions
1h Limit speed negotiation to Generation 1
communication rate
2h Limit speed negotiation to a rate not greater than
All other values reserved
requested
sequence to establish communication. This is
functionally equivalent to a hard reset and results
in the interface being reset and communications
reinitialized. While this field is 1h, COMRESET is
transmitted on the interface. Software should
leave the DET field set to 1h for a minimum of 1
millisecond to ensure that a COMRESET is sent
on the interface.
Port-N Serial ATA Control – RW – 32 bits [Mem_reg: ABAR + port offset + 2Ch]
Field Name Bits Default Description
Interface Power
Management Transitions
Allowed (IPM)
Select Power
Management (SPM)
Port Multiplier Port
(PMP)
Reserved 31:20 Reserved
11:8 0h
15:12 0h Read Only
19:16 0h Read Only
Indicates which power states the HBA is allowed to transition
to. If an interface power management state is disabled, the
HBA is not allowed to initiate that state and the HBA must
PMNAKP any request from the device to enter that state.
0h No interface restrictions
1h Transitions to the Partial state disabled
2h Transitions to the Slumber state disabled
3h Transitions to both Partial and Slumber states
disabled
Port-N Serial ATA Error – RW – 32 bits [Mem_reg: ABAR + port offset + 30h]
Field Name Bits Default Description
ERROR 15:0 0000h The ERR field contains error information for use by host
software in determining the appropriate response to the error
condition.
15:12 Reserved
Internal Error (E): The host bus adapter
experienced an internal error that caused the
operation to fail and may have put the host bus
adapter into an error state. The internal error
may include a master or target abort when
attempting to access system memory, an
elasticity buffer overflow, a primitive mis-
11
alignment, a synchronization FIFO overflow, and
other internal error conditions. Typically when an
internal error occurs, a non-fatal or fatal status bit
in the PxIS register will also be set to give
software guidance on the recovery mechanism
required.
Protocol Error (P): A violation of the Serial ATA
10
protocol was detected.
Persistent Communication or Data Integrity
Error (C): A communication error that was not
recovered occurred that is expected to be
persistent. Persistent communications errors
9
may arise from faulty interconnect with the
device, from a device that has been removed or
has failed, or a number of other causes.
Transient Data Integrity Error (T): A data
integrity error occurred that was not recovered by
8
the interface. This bit is set upon any error when
a Data FIS is received, including reception FIFO
overflow, CRC error or 10b8b decoding error.
7:2 Reserved
Recovered Communications Error (M):
Communications between the device and host
was temporarily lost but was re-established. This
can arise from a device temporarily being
1
removed, from a temporary loss of Phy
synchronization, or from other causes and may
be derived from the PhyNRdy signal between the
Phy and Link layers.
Recovered Data Integrity Error (I): A data
integrity error occurred that was recovered by the
interface through a retry operation or other
recovery action. This bit is set upon any error
0
when a Data FIS is received, including reception
FIFO overflow, CRC error or 10b8b decoding
error.
This field is bit significant. Each bit corresponds to the TAG
and command slot of a native queued command, where bit 0
corresponds to TAG 0 and command slot 0. This field is set
by software prior to issuing a native queued command for a
particular command slot. Prior to writing PxCI[TAG] to ‘1’,
software will set DS[TAG] to ‘1’ to indicate that a command
with that TAG is outstanding. The device clears bits in this
field by sending a Set Device Bits FIS to the host. The HBA
clears bits in this field that are set to ‘1’ in the SActive field of
the Set Device Bits FIS. The HBA only clears bits that
correspond to native queued commands that have completed
successfully.
Software should only write this field when PxCMD.ST is set to
‘1’. This field is cleared when PxCMD.ST is written from a ‘1’
to a ‘0’ by software. This field is not cleared by a
COMRESET or a software reset.
This field is bit significant. Each bit corresponds to a
command slot, where bit 0 corresponds to command slot 0.
This field is set by software to indicate to the HBA that a
command has been built in system memory for a command
slot and may be sent to the device. When the HBA receives
a FIS which clears the BSY, DRQ, and ERR bits for the
command, it clears the corresponding bit in this register for
that command slot. Bits in this field shall only be set to ‘1’ by
software when PxCMD.ST is set to ‘1’.
This field is also cleared when PxCMD.ST is written from a ‘1’
to a ‘0’ by software.
Port- N SNotification – RWC – 32 bits [Mem_reg: ABAR + port offset + 3Ch]
Field Name Bits Default Description
PM Notify (PMN)
Reserved 31:16 Reserved
15:0 0000h This field indicates whether a particular device with the
corresponding PM Port number issued a Set Device Bits FIS
to the host with the Notification bit set.
Individual bits are cleared by software writing 1’s to the
corresponding bit positions.
This field is reset to default on a HBA Reset, but it is not reset
by COMRESET or software reset.
There are 5 Open-HCI compatible USB host controllers present (functions 0, 1, 2, 3, and 4), and each has
their own set of registers. This section describes the configuration registers necessary for the OpenHCIcompliant USB Host Controllers to interface with other system components in a PCI-based PC host. These
registers are accessed for set-up during PCI initialization or through special cycles during normal system
runtime. Below is summary of the registers that are necessary for the OpenHCI-compliant USB Host
Controller to be successfully configured in a PCI-based PC host.
OHCI0 – PCI config
Register Name Offset Address
Device / Vendor ID 00h
Command 04h
Status 06h
Revision ID / Class Code 08h
Miscellaneous 0Ch
BAR_OHCI 10h
Subsystem Vendor ID / Subsystem ID 2Ch
Capability Pointer 34h
Interrupt Line 3Ch
Config Timers / MSI Disable 40h – 41h
Port Disable Control 42h – 43h
OHCI Misc Control 50h
Over Current Control 1 58h
Over Current Control 2 5Ch
Device / Vendor ID – R - 32 bits - [PCI_Reg : 00h]
Field Name Bits Default Description
DEV_ID 31:16 Function 0: 4387h
Function 1: 4388h
Function 2: 4389h
Function 3: 438Ah
Function 4: 438Bh
Device ID
Command – RW - 16 bits - [PCI_Reg : 04h]
Field Name Bits Default Description
IO Space
Accesses
Memory Space
Accesses
Bus Master 2 0b A value of 0 disables the device from generating PCI accesses.
Special Cycle 3 0b Hard-wired to 0, indicating no Special Cycle support.
Memory Write
and Invalidate
Command
VGA Palette
Register
Accesses
Parity Enable 6 0b When it is 1, the device must take its normal action when a parity error is
Reserved 7 0b Hard-wired to 0 per PCI2.3 spec.
SERR# Enable 8 0b A value of 0 disables the SERR# driver.
Fast Back-toBack Enable
Interrupt Disable 10 0b A value of 0 enables the assertion of the device/function’s INTx# signal.
Reserved 15:11 Reserved
0 0b A value of 0 disables the device response.
A value of 1 allows the device to respond to I/O Space accesses.
1 0b A value of 0 disables the device response.
A value of 1 allows the device to respond to Memory Space accesses.
A value of 1 allows the device to behave as a bus master.
4 0b When it is 0, Memory Write must be used.
When it is 1, masters may generate the command.
5 0b Hard-wired to 0, indicating the device should treat palette write accesses
like all other accesses.
detected.
When it is 0, the device sets its Detected Parity Error status bit (bit 15 in
the Status register) when an error is detected, but continues normal
operations without asserting PERR#.
A value of 1 enables the SERR# driver.
Address parity errors are reported only if this bit and bit [6] are 1.
9 0b A value of 0 means that only fast back-to-back transactions to the same
agent are allowed.
A value of 1 means the master is allowed to generate fast back-to-back
transactions to different agents.
A value of 1 disables the assertion of the device/function’s INTx# signal.
Status – R - 16 bits - [PCI_Reg : 06h]
Field Name Bits Default Description
Reserved 2:0 Reserved
Interrupt Status 3 0b This bit reflects the state of the interrupt in the device/function. Only
when the Interrupt Disable bit in the command register is a 0 and this
Interrupt Status bit is a 1 will the device’s/function’s INTx# signal be
asserted. Setting the Interrupt Disable bit to a 1 has no effect on the
state of this bit.
Capabilities List 4 1b A value of 0 indicates that no New Capabilities linked list is available.
A value of 1 indicates that the value read at offset 34h is a pointer in
Configuration Space to a linked list of new capabilities.
66 MHz Capable 5 1b Hard-wired to 1, indicating 66MHz capable.
Reserved 6 Reserved
Fast Back-toBack Capable
DEVSEL timing 10:9 01b Hard-wired to 01b – medium timing
Signaled Target
Abort
Received Target
Abort
Received Master
Abort
Signaled System
Error
Detected Parity
Error
8 0b This bit is set only when three conditions are met: 1) the bus agent
asserted PERR# itself (on a read) or observed PERR# asserted (on a
write); 2) the agent setting the bit acted as the bus master for the
operation in which the error occurred; and 3) the Parity Error Response
bit (Command register) is set.
11 0b This bit is set by a target device whenever it terminates a transaction
with Target-Abort.
12 0b This bit is set by a master device whenever its transaction is terminated
with Target-Abort.
13 0b This bit is set by a master device whenever its transaction (except for
Special Cycle) is terminated with Master-Abort.
14 0b This bit is set whenever the device asserts SERR#.
15 0b This bit is set by the device whenever it detects a parity error, even if
parity error handling is disabled (as controlled by bit 6 in the Command
register).
Revision ID / Class Code – R - 32 bits - [PCI_Reg : 08h]
Field Name Bits Default Description
Revision ID 7:0 00h Revision ID.
PI 15:8 10h Programming Interface. A constant value of ‘10h’ indentifies the device
being an OpenHCI Host Controller.
SC 23:16 03h Sub Class. A constant value of ‘03h’ indentifies the device being of
Universal Serial Bus.
BC 31:24 0Ch Base Class. A constant value of ‘0Ch’ identifies the device being a Serial
Bus Controller.
Miscellaneous – RW/R - 32 bits - [PCI_Reg : 0Ch]
Field Name Bits Default Description
Cache Line Size 7:0 00h This read/write field specifies the system cacheline size in units of
DWORDs and must be initialized to 00h.
Latency Timer 15:8 00h [9:8] hard-wired to 00b, resulting in a timer granularity of at least four
clocks. This field specifies, in units of PCI bus clocks, the value of the
Latency Timer for this PCI bus master.
Header Type 23:16 80h/00h This field identifies the layout of the second part of the predefined header
(beginning at byte 10h in Configuration Space) and also whether or not
the device contains multiple functions.
Function 0: Bit[23] hard-wired to 1 Æ the device has multiple functions.
Function 1: Bit[23] hard-wired to 0 Æ the device is single function.
Function 2: Bit[23] hard-wired to 0 Æ the device is single function.
Function 3: Bit[23] hard-wired to 0 Æ the device is single function.
Function 4: Bit[23] hard-wired to 0 Æ the device is single function.
Bits [22:16] are hard-wired to 00h.
BIST 31:24 00h Hard-wired to 00h, indicating no build-in BIST support.
Bar_OHCI – RW - 32 bits - [PCI_Reg : 10h]
Field Name Bits Default Description
IND 0 0b Indicator. A constant value of ‘0’ indicates that the operational registers
of the device are mapped into memory space of the main memory of the
PC host system. Read Only.
TP 2:1 0h Type. A constant value of ‘00b’ indicates that the base register is 32-bit
wide and can be placed anywhere in the 32-bit memory space; i.e., lower
4 GB of the main memory of the PC host. Read Only.
PM 3 0b Prefetch memory. A constant value of ‘0’ indicates that there is no
support for “prefetchable memory”. Read Only.
11:4 00h Represents a maximum of 4-KB addressing space for the OpenHCi’s
operational registers. Read Only.
BAR 31:12 000h Base Address. Specifies the upper 20 bits of the 32-bit starting base
address. This represent a maximum of 4-KB addressing space for the
OpenHCI’s operational registers.
Subsystem Vendor ID / Subsystem ID – RW - 32 bits - [PCI_Reg : 2Ch]
Field Name Bits Default Description
Subsystem Vendor ID 15:0 0000h Can only be written once by software.
Subsystem ID 31:16 0000h Can only be written once by software.
Capability Pointer – R - 8 bits - [PCI_Reg : 34h]
Field Name Bits Default Description
Capability Pointer 7:0 D0h Address of the 1st element of capability link.
Interrupt Line – RW – 32 bits - [PCI_Reg : 3Ch]
Field Name Bits Default Description
Interrupt Line 7:0 00h The Interrupt Line register is an eight-bit register used to
communicate interrupt line routing information. The register
is read/write and must be implemented by any device (or
device function) that uses an interrupt pin. POST software
will write the routing information into this register as it
initializes and configures the system.
The value in this register tells which input of the system
interrupt controller(s) the device's interrupt pin is connected
to. The device itself does not use this value; rather it is used
by device drivers and operating systems. Device drivers
and operating systems can use this information to determine
priority and vector information. Values in this register are
system architecture specific.
Interrupt Pin 15:8
01h
02h
03h
02h
03h
MIN_GNT 23:16 00h Read Only. Hardwired to 00h to indicate no major
MAX_LAT 31:24 00h Read Only. Hardwired to 00h to indicate no major
Read Only by default.
OHCI0: Hard-wired to 01h, corresponding to using INTA#.
OHCI1: Hard-wired to 02h, corresponding to using INTB#.
OHCI2: Hard-wired to 03h, corresponding to using INTC#.
OHCI3: Hard-wired to 02h, corresponding to using INTB#.
OHCI4: Hard-wired to 03h, corresponding to using INTC#.
requirements for the settings of Latency Timers.
requirements for the settings of the Latency Timers.
Port_disable 9:0 00h When these bits are set the corresponding ports are
disabled. For example, if bit-0 is set, then port-0 (its
corresponding port) is disabled; if bit-1 is set, then its
corresponding port (port-1) is disabled (and so on).
Reserved 7:0 00h Reserved.
DisUsbS3OvrCur 8 0b Set to 1 to disable over-current detection for both EHCII and
OHCI.
Reserved 9 0b Reserved.
OHCI Cache Enable 10 1b Enable bit for 64 byte OHCI DMA cache.
OHCI Prefetch Enable 11 1b Enable bit to prefetch next cache line for OHCI DMA reads.
SMI Handshake Disable 12 0b If this bit is set the Handshake between USB and ACPI is
disabled when SMI is requested by USB
Reserved 15: 13 0h Reserved.
Over Current Control 1 (OHCI0 only) – R - 32 bits - [PCI_Reg : 58h]
Field Name Bits Default Description
Port0 OverCurrent Control 3:0 Fh The register is to control the OverCurrent pin mapping for
Port-0. There are 10 OverCurrent pins (USB_OC0 ~
USB_OC9), any value greater than 0x9h will disable the
OverCurrent function for port-0.
Port1 OverCurrent Control 7:4 Fh The register is to control the OverCurrent pin mapping for
Port-1. There are 10 OverCurrent pins (USB_OC0 ~
USB_OC9), any value greater than 0x9h will disable the
OverCurrent function for port-1.
Port2 OverCurrent Control 11:8 Fh The register is to control the OverCurrent pin mapping for
Port-2. There are 10 OverCurrent pins (USB_OC0 ~
USB_OC9), any value greater than 0x9h will disable the
OverCurrent function for port-2.
Port3 OverCurrent Control 15:12 Fh The register is to control the OverCurrent pin mapping for
Port-3. There are 10 OverCurrent pins (USB_OC0 ~
USB_OC9), any value greater than 0x9h will disable the
OverCurrent function for port-3.
Port4 OverCurrent Control 19:16 Fh The register is to control the OverCurrent pin mapping for
Port-4. There are 10 OverCurrent pins (USB_OC0 ~
USB_OC9), any value greater than 0x9h will disable the
Over Current Control 1 (OHCI0 only) – R - 32 bits - [PCI_Reg : 58h]
Field Name Bits Default Description
Port5 OverCurrent Control 23:20 Fh The register is to control the OverCurrent pin mapping for
Port-5. There are 10 OverCurrent pins (USB_OC0 ~
USB_OC9), any value greater than 0x9h will disable the
OverCurrent function for port-5.
Port6 OverCurrent Control 27:24 Fh The register is to control the OverCurrent pin mapping for
Port-6. There are 10 OverCurrent pins (USB_OC0 ~
USB_OC9), any value greater than 0x9h will disable the
OverCurrent function for port-6.
Port7 OverCurrent Control 31:28 Fh The register is to control the OverCurrent pin mapping for
Port-7. There are 10 OverCurrent pins (USB_OC0 ~
USB_OC9), any value greater than 0x9h will disable the
OverCurrent function for port-7.
There are 10 pins can be used as USB OverCurrent function –
USB_OC0#/GPM0# USB_OC1#/GPM1# USB_OC2#/GPM2# USB_OC3#/GPM3#
USB_OC4#/GPM4# USB_OC5#/GPM5# USB_OC6#/GEVENT6# USB_OC7#/GEVENT7#
USB_OC8#/GPM8# USB_OC9#/SLP_S2/GPM9#
* Note: Since OverCurrent pins can be used as GPM# as well, the corresponding register bits to set the pin as
OverCurrent have to be set in Smbus Controller.
Over Current Control 2 (OHCI0 only) – R - 32 bits - [PCI_Reg : 5Ch]
Field Name Bits Default Description
Port8 OverCurrent Control 3:0 Fh The register is to control the OverCurrent pin mapping for
Port-8. There are 10 OverCurrent pins (USB_OC0 ~
USB_OC9), any value greater than 0x9h will disable the
OverCurrent function for port-8.
Port9 OverCurrent Control 7:4 Fh The register is to control the OverCurrent pin mapping for
Port-9. There are 10 OverCurrent pins (USB_OC0 ~
USB_OC9), any value greater than 0x9h will disable the
OverCurrent function for port-9.
Reserved 31:8 Reserved
There are 10 pins can be used as USB OverCurrent function –
USB_OC0#/GPM0# USB_OC1#/GPM1# USB_OC2#/GPM2# USB_OC3#/GPM3#
USB_OC4#/GPM4# USB_OC5#/GPM5# USB_OC6#/GEVENT6# USB_OC7#/GEVENT7#
USB_OC8#/GPM8# USB_OC9#/SLP_S2/GPM9#
*Note: Since OverCurrent pins can be used as GPM# as well, the corresponding register bits to set the pin as
OverCurrent have to be set in Smbus Controller.
Retry counter 7:0 FFh Counter to control the purge of the delay queue when the
host controller does not return the ack. After the counter
expires the transaction is target aborted.
The retry counter can be disabled by writing 00h in this
Register.
Reserved 23:8 0000h Reserved
Timeout Timer 31:24 80h Timer to control the purge of the delay queue when the
master that has initiated the access does not return to
complete the transaction. After the timer expires the queue
is invalidated and the next transaction is serviced.
MSI Control – RW - 32 bits - [PCI_Reg : D0h]
Field Name Bits Default Description
MSI USB 7:0 05h MSI USB ID. Read only.
Next Item Pointer 15:8 00h Pointer to next capability structure
MSI Control Out 16 0b Set to 1 to disable IRQ. Use MSI instead.
Reserved 19:17 0h Reserved
MSI Control 22:20 0h MSI control field
Reserved 31:23 00h Reserved
The Host Controller (HC) contains a set of on-chip operational registers, which are mapped into a noncacheable portion of the system addressable space. These registers are used by the Host Controller Driver
(HCD) and should be read and written as Dwords.
Reserved bits may be allocated in future releases and should not be assumed to contain 0. The Host
Controller Driver should always preserve the value(s) of the reserved field. When a write to set/clear register
is written, bits written to reserved fields should be 0.
This read-only field contains the version of HCI specification.
Legacy
This read-only field is 1, indicating that the legacy support registers are
present in this HC.
HcControl - 32 bits - [MEM_Reg : 04h]
Field Name Bits Default HCD HC Description
CBSR 1:0 00b RW R
ControlBulkServiceRatio
This specifies the service ratio between Control and
Bulk Eds. Before processing any of the non-periodic
lists, HC must compare the ratio specified with its
internal count on how many nonempty Control Eds
have been processed, in determining whether to
continue serving another Control ED or switching to
Bulk Eds.
No. of Control Eds Over Bulk Eds Served
PLE 2 0b RW R
PeriodicListEnable
This bit is set to enable the processing of the periodic
list in the next Frame. If cleared by HCD, processing
of the periodic list does not occur after the next SOF.
HC must check this bit before it starts processing the
list.
This bit is used by HCD to enable/disable processing
of isochronous Eds. While processing the periodic list
in a Frame, HC checks he status of this bit when it
finds an Isochronous ED (F=1). If set (enabled), HC
continues processing the Eds. If cleared (disabled),
HC halts processing of the periodic list (which now
contains only isochronous Eds) and begins
processing the Bulk/Control lists. Setting this bit is
guaranteed to take effect in the next Frame (not the
current Frame).
ControlListEnable
This bit is set to enable the processing of the Control
list in the next Frame. If cleared by HCD, processing
of the Control list does not occur after the next SOF.
HC must check this bit whenever it determines to
process the list. When disabled, HCD may modify the
list. If HcControlCurrentED is pointing to an ED to be
removed, HCD must advance the pointer by updating
HcControlCurrentED before re-enabling processing of
the list.
BulkListEnable
This bit is set to enable the processing of the Bulk list
in the next Frame. If cleared by HCD, processing of
the Bulk list does not occur after the next SOF. HC
checks this bit whenever it determines to process the
list. When disabled, HCD may modify the list. If
HcBulkCurrentED is pointing to an ED to be removed,
HCD must advance the pointer by updating
HcBulkCurrentED before re-enabling processing of
the list.
HostControllerFunctionalState for USB
00b: U
SBRESET
01b: USBRESUME
10b: USBOPERATIONAL
11b: USBSUSPEND
A transition to USBOPERATIONAL from another
state causes SOF generation to begin 1 ms
later. HCD may determine whether HC has
begun sending SOFs by reading the
StartofFrame field of HcInterruptStatus.
This field may be changed by HC only when in
the U
SBSUSPEND state. HC may move from the
USBSUSPEND state to the USBRESUME state after
detecting the resume signaling from a
downstream port.
HC enters U
whereas it enters U
SBSUSPEND after a software reset,
SBRESET after a hardware
reset. The latter also resets the Root Hub and
asserts subsequent reset signaling to
downstream ports.
This bit determines the routing of interrupts generated
by events registered in HcInterruptStatus. If clear, all
interrupts are routed to the normal host bus interrupt
mechanism. If set, interrupts are routed to the System
Management Interrupt. HCD clears this bit upon a
hardware reset, but it does not alter this bit upon a
software reset. HCD uses this bit as a tag to indicate
the ownership of HC.
RemoteWakeupConnected
This bit indicates whether HC supports remote
wakeup signaling. If remote wakeup is supported and
used by the system it is the responsibility of system
firmware to set this bit during POST. HC clears the bit
upon a hardware reset but does not alter it upon a
software reset. Remote wakeup signaling of the host
system is host-bus-specific and is not described in
this specification.
RemoteWakeupEnable
This bit is used by HCD to enable or disable the
remote wakeup feature upon the detection of
upstream resume signaling. When this bit is set and
the ResumeDetected bit in HcInterruptStatus is set, a
remote wakeup is signaled to the host system.
Setting this bit has no impact on the generation of
hardware interrupt.
Reserved
HcCommandStatus - 32 bits - [MEM_Reg : 08h]
Field Name Bits Default HCD HC Description
HCR 0 0b RW RW
HostControllerReset
This bit is set by HCD to initiate a software reset of
HC.Regardless of the functional state of HC, it moves
to the
USBSUSPEND state in which most of the
operational registers are reset except those stated
otherwise; e.g., the InterruptRouting field of
HcControl, and no Host bus accesses are allowed.
This bit is cleared by HC upon the completion of the
reset operation. The reset operation must be
completed within 10 ms. This bit, when set, should
not cause a reset to the Root Hub and no subsequent
reset signaling should be asserted to its downstream
ports.
This bit is used to indicate whether there are any TDs
on the Control list. It is set by HCD whenever it adds
a TD to an ED in the Control list. When HC begins to
process the head of the Control list, it checks CLF. As
long as ControlListFilled is 0, HC will not start
processing the Control list. If CF is 1, HC will start
processing the Control list and will set
ControlListFilled to 0. If HC finds a TD on the list,
then HC will set ControlListFilled to 1 causing
the Control list processing to continue. If no TD is
found on the Control list, and if the HCD does not set
ControlListFilled, then ControlListFilled will still be 0
when HC completes processing the Control list and
Control list processing will stop.
BulkListFilled
This bit is used to indicate whether there are any TDs
on the Bulk list. It is set by HCD whenever it adds a
TD to an ED in the Bulk list. When HC begins to
process the head of the Bulk list, it checks BF. As
long as BulkListFilled is 0, HC will not start
processing the Bulk list. If BulkListFilled is 1, HC will
start processing the Bulk list and will set BF to 0. If
HC finds a TD on the list, then HC will set
BulkListFilled to 1 causing the Bulk list processing to
continue. If no TD is found on the Bulk list, and if
HCD does not set BulkListFilled, then BulkListFilled
will still be 0 when HC completes processing the Bulk
list and Bulk list processing will stop. BulkListFilled
This bit is used to indicate whether there are any TDs
on the Bulk list. It is set by HCD whenever it adds a
TD to an ED in the Bulk list. When HC begins to
process the head of the Bulk list, it checks BF. As
long as BulkListFilled is 0, HC will not start
processing the Bulk list. If BulkListFilled is 1, HC will
start processing the
Bulk list and will set BF to 0. If HC finds a TD on the
list, then HC will set BulkListFilled to 1 causing the
Bulk list processing to continue. If no TD is found on
the Bulk list, and if HCD does not set BulkListFilled,
then BulkListFilled will still be 0 when HC completes
processing the Bulk list and Bulk list processing will
stop.
OwnershipChangeRequest
This bit is set by an OS HCD to request a change of
control of the HC. When set HC will set the
OwnershipChange field in HcInterruptStatus. After
the changeover, this bit is cleared and remains so
until the next request from OS HCD.
SchedulingOverrunCount
These bits are incremented on each scheduling
overrun error. It is initialized to 00b and wraps around
at 11b. This will be incremented when a scheduling
overrun is detected even if SchedulingOverrun in HcInterruptStatus has already been set. This is used
by HCD to monitor any persistent scheduling
problems.
This bit is set when the USB schedule for the current
Frame overruns and after the update of
HccaFrameNumber. A scheduling overrun will also
cause the SchedulingOverrunCount of HcCommandStatus to be incremented.
WritebackDoneHead
This bit is set immediately after HC has written
HcDoneHead to HccaDoneHead. Further updates of
the HccaDoneHead will not occur until this bit has
been cleared. HCD should only clear this bit after it
has saved the content of HccaDoneHead.
StartofFrame
This bit is set by HC at each start of a frame and after
the update of HccaFrameNumber. HC also generates
a SOF token at the same time.
ResumeDetected
This bit is set when HC detects that a device on the
USB is asserting resume signaling. It is the transition
from no resume signaling to resume signaling
causing this bit to be set. This bit is not set when
HCD sets the
UnrecoverableError
This bit is set when HC detects a system error not
related to USB. HC should not proceed with any
processing nor signaling before the system error has
been corrected. HCD clears this bit after HC has
been reset.
FrameNumberOverflow
This bit is set when the MSb of HcFmNumber (bit 15)
changes value, from 0 to 1 or from 1 to 0, and after
HccaFrameNumber has been updated.
RootHubStatusChange
This bit is set when the content of HcRhStatus or the
content of any of HcRhPortStatus
[NumberofDownstreamPort] has changed.
OwnershipChange
This bit is set by HC when HCD sets the
OwnershipChangeRequest field in
HcCommandStatus. This event, when unmasked, will
always generate an System Management Interrupt
(SMI) immediately.
This bit is tied to 0b when the SMI pin is not
implemented.
USBRESUME state.
HcInterruptEnable - 32 bits - [MEM_Reg : 10h]
Field Name Bits Default HCD HC Description
SO 0 0b RW RW 0 - Ignore
1 - Enable interrupt generation due to Scheduling
Overrun.
WDH 1 0b RW RW 0 - Ignore
1 - Enable interrupt generation due to HcDoneHead
Writeback.
SF 2 0b RW RW 0 - Ignore
1 - Enable interrupt generation due to Start of Frame.
event occurs. The HCD writes a ‘1’ to clear this bit.
Writing a ‘0’ has no effect. If CurrentConnectStatus
is cleared when a SetPortReset, SetPortEnable, or
SetPortSuspend write occurs, this bit is set to force
the driver to re-evaluate the connection status since
these writes should not occur if the port is
disconnected.
0 = No change in CurrentConnectStatus
1 = Change in CurrentConnectStatus
Note: If the DeviceRemovable[NDP] bit is set, this
bit is set only after a Root Hub reset to inform the
system that the device is attached.
PortEnableStatusChange
This bit is set when hardware events cause the
PortEnableStatus bit to be cleared. Changes from
HCD writes do not set this bit. The HCD writes a ‘1’ to
clear this bit. Writing a ‘0’ has no effect.
0 = No change in PortEnableStatus
1 = Change in PortEnableStatus
PortSuspendStatusChange
This bit is set when the full resume sequence has
been completed. This sequence includes the 20-s
resume pulse, LS EOP, and 3-ms resychronization
delay. The HCD writes a ‘1’ to clear this bit. Writing a
‘0’ has no effect. This bit is also cleared when
ResetStatusChange is set.
0 = Resume is not completed
1 = Resume completed
PortOverCurrentIndicatorChange
This bit is valid only if overcurrent conditions are
reported on a per-port basis. This bit is set when Root
Hub changes the PortOverCurrentIndicator bit. The
HCD writes a ‘1’ to clear this bit. Writing a ‘0’ has no
effect.
0 = No change in PortOverCurrentIndicator
1 = PortOverCurrentIndicator has changed
PortResetStatusChange
This bit is set at the end of the 10-ms port reset
signal.
The HCD writes a ‘1’ to clear this bit. Writing a ‘0’ has
no effect.
0 = Port reset is not complete
1 = Port reset is complete
2.2.2 USB Legacy Keyboard Operation
2.2.2.1 Overview
To support applications and drivers in non-USB-aware environments (e.g., DOS), the Host Controller needs
to provide some amount of hardware support for the emulation of a PS/2 keyboard and/or mouse by their
USB equivalents. For Open HCI, this emulation support is provided by a set of registers that are controlled
by code running in SMM. Working in conjunction, this hardware and software produces approximately the
same behavior-to-application code as would be produced by a PS/2-compatible keyboard and/or mouse
interface.
To minimize hardware impact, the Host Controller accesses a USB keyboard and/or mouse using the
standard OpenHCI descriptor-based accesses. The emulation code sets up the appropriate Endpoint
Descriptors and Transfer Descriptors that cause data to be sent to or received from a USB keyboard/mouse
using the normal USB protocols. When data is received from the keyboard/mouse, the emulation code is
notified and becomes responsible for translating the USB keyboard/mouse data into a data sequence that is
equivalent to what would be produced by a PS/2-compatible keyboard/mouse interface. The translated data
is made available to the system through the legacy keyboard interface I/O addresses at 60h and 64h.
Likewise, when data/control is to be sent to the keyboard (as indicated by the system writing to the legacy
keyboard interface), the emulation code is notified and becomes responsible for translating the information
into appropriate data to be sent to the USB keyboard/mouse through the transfer descriptor mechanism.
On the PS/2 keyboard/mouse interface, a read of I/O port 60h returns the current contents of the keyboard
output buffer; a read of I’O port 64h returns the contents of the keyboard status register. An I/O write to port
60h or 64h puts data into the keyboard input buffer (data is being input into the keyboard subsystem). When
emulation is enabled, reads and writes of registers 60h and 64h are captured in HceOutput, HceStatus,
and/or HceInput operational registers.
The emulation hardware described in this document supports a mixed environment in which either the
keyboard or mouse is located on USB, and the other device is attached to a standard PS/2 interface.
2.2.2.2 System Requirements
The sections below define the system requirements that must be met in order for the OpenHCI legacy
support to function properly.
Host Controller Mapping
The Host Controller uses memory addresses to enable system software to access its operational registers.
In a PCI implementation, the address of the Host Controller operations registers is set in BAR_OHCI. The
address range specified in BAR_OHCI must be accessible to SMM code. The address in BAR_OHCI should
not be modified by any software while the emulation software has control of the Host Controller. The only
exception to this is when the OS is booting and is trying to interrogate the PCI bus. It is common for an OS,
as it is loaded, to enumerate and ‘size’ the various buses on the machine. For a PCI system, the OS typically
writes a value to each card’s BAR to determine the memory space occupied by that card. If emulation is
running during enumeration, the Host Controller may generate an SMI as the OS is changing the BAR from
the value that the emulation code is using.
Intercept Port 60h and 64h Accesses
When emulation is enabled, I/O accesses of I/O ports 60h and 64h must be handled by the Host Controller.
The Host Controller must be positioned in the system so that it can do a positive decode of accesses to I/O
addresses 60h and 64h on the PCI bus. If a keyboard controller is present in the system, it must either use
subtractive decode or have provisions to disable its decode of ports 60h and 64h. If the legacy keyboard
controller uses positive decode and is turned off during emulation, it must be possible for the emulation code
to quickly re-enable and disable the legacy keyboard controller’s 60h and 64h decode. This is necessary to
support a mixed operating environment.
Interrupts
The Host Controller must connect to IRQ1 and IRQ12 on the system board and be wired OR with other nonlegacy IRQ1 and IRQ12 sources. IRQ1 and IRQ12 from the legacy keyboard controller (if present) must be
routed through the Host Controller.
Run-time Memory
Legacy emulation requires that the Host Controller have read/write access to a portion of system memory
that is not used by a system OS for any purpose. In addition, this memory must be accessible by the host
CPU while the host CPU is in SMM.
The following modification is needed for the HcRevision register:
Table 2-1 HcRevision Register
HcRevision - 32 bits
Field Name Bits Reset HCD HC Description
Revision 7:0 10h R R This read-only field contains the BCD representation
of the version of the HCI specification that is
implemented by this HC. For example, a value of 11h
corresponds to version 1.1. All of the HC
implementations that are compliant with this
specification will have a value of 10h.
Legacy 8 1b R R This read-only field is 1 to indicate that the legacy
support registers are present in this HC.
Reserved 31:9 Reserved
Legacy Support Registers
Four operational registers are used to provide the legacy support. Each of these registers is located on a 32bit boundary. The offset of these registers is relative to the base address of the Host Controller operational
registers with HceControl located at offset 100h.
Table 2-2 Legacy Support Registers
Offset Register Description
100h HceControl Used to enable and control the emulation hardware and report various status
information.
104h HceInput The emulation side of the legacy Input Buffer register.
108h HceOutput The emulation side of the legacy Output Buffer register where the keyboard and
mouse data is to be written by software.
10Ch HceStatus The emulation side of the legacy Status register.
Three of the operational registers (HceStatus, HceInput, HceOutput) are accessible at I/O address 60h and
64h when emulation is enabled. Reads and writes to the registers using I/O addresses have side effects as
outlined in Table 2-3.
Table 2-3 Emulated Registers
I/O
Address
60h IN HceOutput IN from port 60h will set OutputFull in
60h OUT HceInput OUT to port 60h will set InputFull to 1 and
64h IN HceStatus IN from port 64h returns current value of
64h OUT HceInput OUT to port 64h will set InputFull to 0 and
InputData 7:0 00h This register holds data that is written to I/O ports 60h and 64h.
Reserved 31:8 Reserved
I/O data that is written to ports 60h and 64h is captured in this register when emulation is enabled. This
register may be read or written directly by accessing it with its memory address in the Host Controller’s
operational register space. When accessed directly with a memory cycle, reads and writes of this register
have no side effects.
HceOutput Register
Table 2-5 HceOutput Register
HceOutput – RW - 32 bits
Field Name Bits Default Description
OutputData 7:0 00h This register hosts data that is returned when an I/O read of port 60h
is performed by application software.
Reserved 31:8 Reserved
The data placed in this register by the emulation software is returned when I/O port 60h is read and
emulation is enabled. On a read of this location, the OutputFull bit in HceStatus is set to 0.
HceStatus Register
Table 2-6 HceStatus Register
HceStatus – RW - 32 bits
Field Name Bits Default Description
OutputFull 0 0b The HC sets this bit to 0 on a read of I/O port 60h. If IRQEn is set and
AuxOutputFull is set to 0, then an IRQ1 is generated as long as this bit
is set to 1. If IRQEn is set and AuxOutputFull is set to 1, then an IRQ12
is generated as long as this bit is set to 1. While this bit is 0 and
CharacterPending in HceControl is set to 1, an emulation interrupt
condition exists.
InputFull 1 0b Except for the case of a Gate A20 sequence, this bit is set to 1 on an
I/O write to address 60h or 64h. While this bit is set to 1 and emulation
is enabled, an emulation interrupt condition exists.
Flag 2 0b Nominally used as a system flag by software to indicate a warm or cold
boot.
CmdData 3 0b The HC sets this bit to 0 on an I/O write to port 60h and to 1 on an I/O
write to port 64h.
Inhibit Switch 4 0b This bit reflects the state of the keyboard inhibit switch and is set if the
keyboard is NOT inhibited.
AuxOutputFull 5 0b IRQ12 is asserted whenever this bit is set to 1 and OutputFull is set to 1
and the IRQEn bit is set.
Time-out 6 0b Used to indicate a time-out
Parity 7 0b Indicates parity error on keyboard/mouse data.
Reserved 31:8 Reserved
The contents of the HceStatus Register are returned on an I/O Read of port 64h when emulation is enabled.
Reads and writes of port 60h and writes to port 64h can cause changes in this register. Emulation software
can directly access this register through its memory address in the Host Controller’s operational register
space. Accessing this register through its memory address produces no side effects.
EmulationEnable 0 0b When set to 1, the HC is enabled for legacy emulation.
The HC decodes accesses to I/O registers 60h and 64h and
generates IRQ1 and/or IRQ12 when appropriate.
Additionally, the HC generate s an emulation interrupt at
appropriate times to invoke the emulation software.
EmulationInterrupt 1 - This bit is a static decode of the emulation interrupt
condition. [Read-only]
CharacterPending 2 0b When set, an emulation interrupt is generated when the
OutputFull bit of the HceStatus register is set to 0.
IRQEn 3 0b When set, the HC generates IRQ1 or IRQ12 as long as the
OutputFull bit in HceStatus is set to 1. If the
AuxOutputFull bit of HceStatus is 0, then IRQ1 is
generated; if it is 1, then an IRQ12 is generated.
ExternalIRQEn 4 0b When set to 1, IRQ1 and IRQ12 from the keyboard
controller causes an emulation interrupt. The function
controlled by this bit is independent of the setting of the
EmulationEnable bit in this register.
GateA20Sequence 5 0b Set by HC when a data value of D1h is written to I/O port
64h. Cleared by HC on write to I/O port 64h of any value
other than D1h.
IRQ1Active 6 0b Indicates that a positive transition on IRQ1 from keyboard
controller has occurred. SW may write a 1 to this bit to
clear it (set it to 0). SW write of a 0 to this bit has no effect.
IRQ12Active 7 0b Indicates that a positive transition on IRQ12 from keyboard
controller has occurred. SW may write a 1 to this bit to
clear it (set it to 0). SW write of a 0 to this bit has no effect.
A20State 8 0b Indicates current state of Gate A20 on keyboard controller.
Used to compare against value written to 60h when
GateA20Sequence is active.
Reserved 31:9 - Must read as 0s.
2.2.3 EHCI Registers (Device 19, Function 5)
The Enhanced USB Host Controller contains two sets of software accessible hardware registers—Memorymapped Host Controller Registers and optional PCI configuration registers (PCI_Reg).
Mapping into non-cacheable memory, Memory-mapped USB Host Controller Registers consists of a set of
read-only Capability registers (MEM_Reg) , a set of read/write operational registers(EOR_Reg) and a set of
read/write Debug Port registers (DBUG_Reg). Implemented as memory-mapped I/O space, the operational
registers are 32 bits in length and should be read and written as Dwords.
USB Legacy Support Extended Capability – USBLEGSUP EECP+0h1
1
The EECP field is in the read-only HCCPARAMS register [MEM_Reg: 08h] with the value of A0h.
USB Legacy Support Control/Status - USBLEGCTLSTS EECP+4h1
DEVICE / VENDOR ID – R - 32 bits - [PCI_Reg : 00h]
Field Name Bits Default Description
VEND_ID 15:0 1002h Vendor ID
DEV_ID 31:16 Function 5: 4386h Device ID
Command – RW - 16 bits - [PCI_Reg : 04h]
Field Name Bits Default Description
IO Space Accesses 0 0b A value of 0 disables the device response.
A value of 1 allows the device to respond to I/O Space
accesses.
Memory Space Accesses 1 0b A value of 0 disables the device response.
A value of 1 allows the device to respond to Memory Space
accesses.
Bus Master 2 0b A value of 0 disables the device from generating PCI
accesses.
A value of 1 allows the device to behave as a bus master.
Special Cycle 3 0b Hard-wired to 0, indicating no Special Cycle support.
Memory Write and
Invalidate Command
VGA Palette Register
Accesses
Parity Enable 6 0b When it is 1, the device must take its normal action when a
Reserved 7 0b Hard-wired to 0 per PCI2.3 spec.
SERR# Enable 8 0b A value of 0 disables the SERR# driver.
Fast Back-to-Back Enable 9 0b A value of 0 means fast back-to-back transactions to the
Interrupt Disable 10 0b A value of 0 enables the assertion of the device/function’s
Reserved 15:11 Reserved
4 0b When it is 0, Memory Write must be used.
When it is 1, masters may generate the command.
5 0b Hard-wired to 0, indicating the device should treat palette
write accesses like all other accesses.
parity error is detected.
When it is 0, the device sets its Detected Parity Error status
bit (bit 15 in the Status register) when an error is detected,
but does not assert PERR# and continues normal operation.
A value of 1 enables the SERR# driver.
Address parity errors are reported only if this bit and bit [6]
are 1.
same agent only are allowed.
A value of 1 means the master is allowed to generate fast
back-to-back transactions to different agents.
INTx# signal.
A value of 1 disables the assertion of the device/function’s
Reserved 2:0 Reserved
Interrupt Status 3 0b This bit reflects the state of the interrupt in the
device/function. Only when the Interrupt Disable bit in the
command register is a 0 and this Interrupt Status bit is a 1,
will the device’s/function’s INTx# signal be asserted. Setting
the Interrupt Disable bit to a 1 has no effect on the state of
this bit.
Capabilities List 4 1b A value of 0 indicates that no New Capabilities linked list is
available.
A value of 1 indicates that the value read at offset 34h is a
pointer in Configuration Space to a linked list of new
capabilities.
66 MHz Capable 5 1b Hard-wired to 1, indicating 66MHz capable.
Reserved 6 Reserved
Fast Back-to-Back
Capable
Master Data Parity Error 8 0b This bit is set only when three conditions are met: 1) the bus
DEVSEL timing 10:9 01b Hard-wired to 01b – medium timing
Signaled Target Abort 11 0b This bit is set by a target device whenever it terminates a
Received Target Abort 12 0b This bit is set by a master device whenever its transaction is
Received Master Abort 13 0b This bit is set by a master device whenever its transaction
Signaled System Error 14 0b This bit is set whenever the device asserts SERR#.
Detected Parity Error 15 0b This bit is set by the device whenever it detects a parity error,
7 1b Hard-wired to 1, indicating Fast Back-to-Back capable.
agent asserted PERR# itself (on a read) or observed PERR#
asserted (on a write); 2) the agent setting the bit acted as the
bus master for the operation in which the error occurred; and
3) the Parity Error Response bit (Command register) is set.
transaction with Target-Abort.
terminated with Target-Abort.
(except for Special Cycle) is terminated with Master-Abort.
even if parity error handling is disabled (as controlled by bit 6
in the Command register).
Revision ID / Class Code – R - 32 bits - [PCI_Reg : 08h]
Field Name Bits Default Description
Revision ID 7:0 00h Revision ID.
PI 15:8 20h Programming Interface. A constant value of ‘20h’ indentifies
the device being an EHCI Host Controller.
SC 23:16 03h Sub Class. A constant value of ‘03h’ indentifies the device
being of Universal Serial Bus.
BC 31:24 0Ch Base Class. A constant value of ‘0Ch’ identifies the device
being a Serial Bus Controller.
Miscellaneous – RW - 32 bits - [PCI_Reg : 0Ch]
Field Name Bits Default Description
Cache Line Size 7:0 00h This read/write field specifies the system cacheline size in
units of DWORDs and must be initialized to 00h.
Latency Timer 15:8 00h [9:8] hard-wired to 00b, resulting in a timer granularity of at
least four clocks. This field specifies, in units of PCI bus
clocks, the value of the Latency Timer for this PCI bus
master.
Header Type 23:16 00h This field identifies the layout of the second part of the
predefined header (beginning at byte 10h in Configuration
Space) and also whether or not the device contains multiple
functions.
EHCI has single function and bit[23:16] hard-wired to 00h.
Read Only.
BIST 31:24 00h Hard-wired to 00h, indicating no build-in BIST support.
BAR_EHCI – RW - 32 bits - [PCI_Reg : 10h]
Field Name Bits Default Description
IND 0 0b Indicator. A constant value of ‘0’ indicates that the
operational registers of the device are mapped into memory
space of the main memory of the PC host system.
Read Only.
TP 2:1 0h Type. A constant value of ‘00b’ indicates that the base
register is 32-bit wide and can be placed anywhere in the
32-bit memory space; i.e., lower 4 GB of the main memory
of the PC host.
Read Only.
PM 3 0b Prefetch Memory. A constant value of ‘0’ indicates that
there is no support for “prefetchable memory”.
Read Only.
Reserved 7:4 0h Read Only.
BA 31:8 0h Base Address. Corresponds to memory address signals
[31:8].
BAR register. Base address used for the memory mapped capability and operational registers.
Subsystem ID / Subsystem Vendor ID – RW - 32 bits - [PCI_Reg : 2Ch]
Field Name Bits Default Description
Subsystem Vendor ID 15:0 0000h Can only be written once by software.
Subsystem ID 31:16 0h Can only be written once by software.
Capability Pointer – R - 8 bits - [PCI_Reg : 34h]
Field Name Bits Default Description
Capability Pointer 7:0 C0h Address of the 1st element of capability link.
Reserved 4:0 00h Reserved
PME Disable 5 0b Set to 1 to disable EHCI PME support
MSI Disable 6 0b Set to 1 to disable EHCI MSI support
Reserved 15:7 000h Reserved
Cache Timer Control 19:16 Eh Control the purge timeout timer if HC doesn't come back to
Disable Async QH Cache
on OUT xfer
Disable Async Data
Cache
Disable Periodic List
Cache
Reserved 31:28 0h Reserved
25 0b Set to 1 to disable async QH/QTD cache during OUT xfer.
26 0b Set to 1 to disable async data cache request.
27 0b Set to 1 to disable periodic list cache.
SBRN – R - 8 bits - [PCI_Reg : 60h]
Field Name Bits Default Description
SBRN 7:0 20h Hard-wired to 20h.
FLADJ – RW - 8 bits - [PCI_Reg : 61h]
Field Name Bits Default Description
FLADJ 5:0 20h Frame Length Timing Value. Each decimal value change to
this register corresponds to 16 high-speed
bit times. The SOF cycle time (number of SOF counter clock
periods to generate a SOF micro-frame length) is equal to
59488 + value in this field. The default value is decimal 32
(20h), which gives a SOF cycle time of 60000.
FLADJ Value in decimals
[hexadecimal value]
0 [00h] 59488
1 [01h] 59504
2 [02h] 59520
… …
31 [1Fh] 59984
32 [20h] 60000
… …
62 [3Eh] 60480
Reserved 7:6 Reserved.
63 [3Fh] 60496
Frame Length
(# High Speed bit
times in decimals)
PME Control – RW - 32 bits - [PCI_Reg : C0h]
Field Name Bits Default Description
Cap_ID 7:0 01h Read only.
A value of “01h” identifies the linked list item as being the
PCI Power Management registers.
Next ItemPointer 15:8 D0h Read only.
This field provides an offset into the function’s PCI
Configuration Space pointing to the location of next item in
the function’s capability list. If there are no additional items
in the Capabilities List, this register is set to 00h.
Version 18:16 010b Read only.
A value of “010b” indicates that this function complies with
Revision 1.1 of the PCI Power Management Interface
Specification.
PME clock 19 0b Read only.
When this bit is a “0”, it indicates that no PCI clock is
required for the function to generate PME#.
The Device Specific Initialization bit indicates whether
special initialization of this function is required (beyond the
standard PCI configuration header) before the generic class
device driver is able to use it.
Aux_Current 24:22 000b Read only.
This 3 bit field reports the 3.3Vaux auxiliary current
requirements for the PCI function.
If the Data Register has been implemented by this function:
• Reads of this field must return a value of “000b”.
• The Data Register takes precedence over this field for
3.3Vaux current requirement reporting.
D1_Support 25 1b If this bit is a “1”, this function supports the D1
Power Management State.
D2_Support 26 1b If this bit is a “1”, this function supports the D2
Power Management State.
PME_Support 31:27 0Fh Read only.
This 5-bit field indicates the power states in which the
function may assert PME#. A value of 0b for any bit
indicates that the function is not capable of asserting the
PME# signal while in that power state.
bit(31) 1XXXXb - PME# can be asserted from D3cold bit(30)
X1XXXb - PME# can be asserted from D3hot
bit(29) XX1XXb - PME# can be asserted from D2
bit(28) XXX1Xb - PME# can be asserted from D1
bit(27) XXXX1b - PME# can be asserted from D0
PME Data / Status – RW - 32 bits - [PCI_Reg : C4h]
Field Name Bits Default Description
PowerState 1:0 00b This 2-bit field is used both to determine the current power
state of a function and to set the function into a new power
state. The definition of the field values is given below.
00b - D0
01b - D1
10b - D2
11b - D3hot
If software attempts to write an unsupported, optional state to
this field, the write operation must be completed normally on
the bus; however, the data is discarded and no state change
occurs.
Reserved 7:2 Reserved
PME_En 8 0b A “1” enables the function to assert PME#. When “0”, PME#
assertion is disabled. This bit defaults to “0” if the function
does not support PME# generation from D3cold.
Data_Select 12:9 0000b This 4-bit field is used to select which data is to be reported
through the Data register and Data_Scale field.
Data_Scale 14:13 00b This 2-bit read-only field indicates the scaling factor to be
used when interpreting the value of the Data register. The
value and meaning of this field will vary depending on which
data value has been selected by the Data_Select field.
PME_Status 15 0b This bit is set when the function would normally assert the
PME# signal independent of the state of the PME_En bit.
Reserved 21:16 Reserved
PME Data / Status – RW - 32 bits - [PCI_Reg : C4h]
Field Name Bits Default Description
B2_B3# 22 1b Read only.
The state of this bit determines the action that is to occur as a
direct result of programming the function to D3hot.. A “1”
indicates that when the bridge function is programmed to
D3
hot, its secondary bus’s PCI clock will be stopped (B2).
BPCC_En 23 0b Read only.
A “0” indicates that the bus power/clock control policies are
disabled. When the Bus Power/Clock Control mechanism is
disabled, the bridge’s PMCSR PowerState field cannot be
used by the system software to control the power or clock of
the bridge’s secondary bus.
Data 31:24 00h Read only.
This register is used to report the state dependent data
requested by the Data_Select field. The value of this register
is scaled by the value reported by the Data_Scale field.
MSI Control – RW - 32 bits - [PCI_Reg : D0h]
Field Name Bits Default Description
MSI USB 7:0 05h MSI USB ID. Read only.
Next Item Pointer 15:8 E4h Pointer to next capability structure
MSI Control Out 16 0b Set to 1 to disable IRQ. Use MSI instead.
Reserved 19:17 0h Reserved
MSI Control 22:20 0h MSI control field
64-bit Address Capable 23 0b If EHCI is in 64 bit address mode as specified by 64-bit
Addressing Capability bit in HCCPARAMS register [MEM
Reg: 08h] , this bit is set to 1 indicating that EHCI is capable
of generating a 64-bit message address. Otherwise it is set
to 0 indicating the EHCI is not capable of generating a 64-bit
address.
Read only
CAP_ID 7:0 0Ah The value of 0Ah in this field identifies that the function
supports a Debug Port.
Next Item Pointer 15:8 00h Pointer to next capability structure
Offset 28:16 0E0h This 12 bit field indicates the byte offset (up to 4K) within the
BAR indicated by BAR#. This offset is required to be
DWORD aligned and therefore bits 16 and 17 are always
SMI on OS Ownership
Enable
SMI on PCI Command
Enable
SMI on BAR Enable 15 0b When this bit is one and SMI on BAR is one, then the host
SMI on USB Complete 16 0b Shadow bit of USB Interrupt (USBINT) bit in the USBSTS
SMI on USB Error 17 0b Shadow bit of USB Error Interrupt (USBERRINT) bit in the
SMI on Port Change
Detect.
SMI on Frame List Rollover 19 0b Shadow bit of Frame List Rollover bit in the USBSTS
SMI on Host System Error 20 0b Shadow bit of Host System Error bit in the USBSTS register.
SMI on Async Advance 21 0b Shadow bit of the Interrupt on Async Advance bit in the
Reserved. 28:22 These bits are reserved and must be set to zero.
SMI on OS Ownership
Change
SMI on PCI Command 30 0b This bit is set to one whenever the PCI Command Register
SMI on BAR R/WC 31 0b This bit is set to one whenever the Base Address Register
13 0b When this bit is a one AND the OS Ownership Change bit is
one, the host controller will issue an SMI.
14 0b When this bit is one and SMI on PCI Command is one, then
the host controller will issue an SMI.
controller will issue an SMI.
register. To set this bit to a zero, system software must
write a one to the USB Interrupt bit in the USBSTS register.
Read Only.
USBSTS register. To set this bit to a zero, system software
must write a one to the USB Error Interrupt bit in the
USBSTS register.
Read Only.
18 0b Shadow bit of Port Change Detect bit in the USBSTS
register. To set this bit to a zero, system software must write
a one to the Port Change Detect bit in the USBSTS register.
Read Only.
register. To set this bit to a zero, system software must write
a one to the Frame List Rollover bit in the USBSTS register.
Read Only.
To set this bit to a zero, system software must write a one to
the Host System Error bit in the USBSTS register.
Read Only.
USBSTS register. To set this bit to a zero, system software
must write a one to the Interrupt on Async
Advance bit in the USBSTS register.
Read Only.
29 0b This bit is set to one whenever the HC OS Owned
Semaphore bit in the USBLEGSUP register transitions from
This register is used as an offset to add to register base to find the beginning of the Operational Register Space.
Default value = 20h.
HCIVERSION – R - 16 bits - [MEM_Reg : 02h]
Field Name Bits Default Description
HCIVERSION 15:0 0100h This is a two-byte register containing a BCD encoding of the
version number of interface to which this host controller
interface conforms.
HCSPARAMS – R - 32 bits - [MEM_Reg : 04h]
Field Name Bits Default Description
N_PORTS 3:0 Ah This field specifies the number of physical downstream ports
implemented on this host controller. The value of this field
determines how many port registers are addressable in the
Operational Register Space. Valid values are in the range
of 1H to FH. A zero in this field is undefined.
Port Power Control (PPC) 4 0b This field indicates whether the host controller
implementation includes port power control. A one in this bit
indicates the ports have port power switches. A zero in this
bit indicates the port does not have port power switches.
The value of this field affects the functionality of the Port
Power field in each port status and control register.
Reserved 6:5 These bits are reserved and should be set to zero.
Port Routing Rules 7 0b This field indicates the method used by this implementation
for how all ports are mapped to companion controllers. The
value of this field has the following interpretation:
0 = The first N_PCC ports are routed to the lowest
numbered function companion host controller, the next
N_PCC port are routed to the next lowest function
companion controller, and so on.
1 = The port routing is explicitly enumerated by the first
N_PORTS elements of the HCSP-PORTROUTE array.
Number of Ports per
Companion Controller
(N_PCC)
Number of Companion
Controller (N_CC)
Port Indicators
(P_INDICATOR)
11:8 2h This field indicates the number of ports supported per
companion host controller. It is used to indicate the port
routing configuration to system software. For example, if
N_PORTS has a value of 6 and N_CC has a value of 2 then
N_PCC could have a value of 3. The convention is that the
first N_PCC ports are assumed to be routed to companion
controller 1, the next N_PCC ports to companion controller
2, etc. In the previous example, the N_PCC could have
been 4, where the first 4 are routed to companion controller
1 and the last two are routed to companion controller 2. The
number in this field must be consistent with N_PORTS and
N_CC.
15:12 5h This field indicates the number of companion controllers
associated with this USB 2.0 host controller. A zero in this
field indicates there are no companion host controllers.
Port-ownership hand-off is not supported. Only high-speed
devices are supported on the host controller root ports. A
value larger than zero in this field indicates there are
companion USB 1.1 host controller(s). Port-ownership
hand-offs are supported. High, Full- and Low-speed devices
are supported on the host controller root ports.
16 0b This bit indicates whether the ports support port indicator
control. When this bit is a one, the port status and control
registers include a read/writeable field for controlling the
This optional field is valid only if Port Routing Rules field in the HCSPARAMS register is set to a one. This field is a
15-element nibble array (each 4 bits is one array element). Each array location corresponds one-to-one with a
physical port provided by the host controller.
Frame List Base Address – PERIODICLISTBASE EHCI_EOR + 14h
Next Asynchronous List Address – ASYNCLISTADDR EHCI_EOR + 18h
Reserved EHCI_EOR + (1Ch~3Fh)
Configured Flag – CONFIGFLAG EHCI_EOR + 40h
Port Status/Control – PORTSC (1-N_PORTS) EHCI_EOR + (44h~68h)
Packet Buffer Threshold Values EHCI_EOR + 84h
USB PHY Status 0 EHCI_EOR + 88h
USB PHY Status 1 EHCI_EOR + 8Ch
USB PHY Status 2 EHCI_EOR + 90h
UTMI Control EHCI_EOR + 94h
Bist Control / Loopback Test EHCI_EOR + 98h
EOR MISC Control EHCI_EOR + 9Ch
USB Phy Calibration EHCI_EOR + A0h
EOR Debug Purpose EHCI_EOR + A8h
USB Debug Port 0E0h~0F0h (* Note)
The base offset of Debug Port registers is defined directly in DBUG_PRT Control register (EHCI_PCI_CFG xE4[28:16]),
regardless of the value in CAPLENGTH register (MEM_Reg: 00h) so range is equivalent to EHCI_EOR + (C0h~D0h).
When set to a 1, the Host Controller proceeds with execution of the
schedule. The Host Controller continues execution as long as this bit is
set to a 1. When this bit is set to 0, the Host Controller completes the
current and any actively pipelined transactions on the USB and then
halts. The Host Controller must halt within 16 micro-frames after
software clears the Run bit. The HC Halted bit in the status register
indicates when the Host Controller has finished its pending pipelined
transactions and has entered the stopped state. Software must 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). Doing so will yield
Frame List Size 3:2 00b This field is R/W only if Programmable Fr ame List Flag in the
Periodic
Schedule
Enable
Asynchronous
Schedule
Enable
Interrupt on
Async Advance
Doorbell
Light Host
Controller Reset
(Optional)
1 0b This control bit is used by software to reset the host controller. The
effects of this on Root Hub registers are similar to a Chip Hardware
Reset. 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. PCI
Configuration registers are not affected by this reset. All operational
registers, including port registers and port state machines are set to their
initial values. Port ownership reverts to the companion host controller(s).
Software must reinitialize the host controller in order to return the host
controller to an operational state. This bit is set to zero by the Host
Controller when the reset process is complete. Software cannot
terminate the reset process early by writing a zero to this register.
Software should not set this bit to a one when the HCHalted bit in the
USBSTS register is a zero. Attempting to reset an actively running host
controller will result in undefined behavior.
HCCPARAMS registers is set to a one. This field specifies the size of
the frame list. The size the frame list controls which bits in the Frame
Index Register should be used for the Frame List Current index. Values
mean:
00b = 1024 elements (4096 bytes) Default value
01b = 512 elements (2048 bytes)
10b = 256 elements (1024 bytes) – for resource-constrained
environments
11b = Reserved
[Read/Write or Read-only]
4 0b This bit controls whether the host controller skips processing the Periodic
Schedule.
0 = Do not process the Periodic Schedule
1 = Use the PERIODICLISTBASE register to access the Periodic
Schedule.
5 0b This bit controls whether the host controller skips processing the
Asynchronous Schedule.
0b = Do not process the Asynchronous Schedule
1b = Use the ASYNCLISTADDR register to access the Asynchronous
Schedule.
6 0b This bit is used as a doorbell by software to tell the host controller to
issue an interrupt the next time it advances asynchronous schedule.
Software must write a 1 to this bit to ring the doorbell. When the host
controller has evicted all appropriate cached schedule state, it sets the
Interrupt on Async Advance status bit in the USBSTS register. If the
Interrupt on Async Advance Enable bit in the USBINTR register is a one
then the host controller will assert an interrupt at the next interrupt
threshold. The host controller sets this bit to a zero after it has set the
Interrupt on Async Advance status bit in the USBSTS register to a one.
Software should not write a one to this bit when the asynchronous
schedule is disabled. Doing so will yield undefined results.
7 0b This control bit is not required. If implemented, it allows the driver to
reset the EHCI controller without affecting the state of the ports or the
relationship to the companion host controllers. For example, the
PORSTC registers should not be reset to their default values and the CF
bit setting should not go to zero (retaining port ownership relationships).
A host software read of this bit as zero indicates the Light Host Controller
Reset has completed and it is safe for host software to re-initialize the
host controller. A host software read of this bit as a one indicates the
Light Host Controller Reset has not yet completed.
If not implemented a read of this field will always return a zero.
Reserved 10 This bit is reserved and should be set to Zero.
Asynchronous
Schedule Park
Mode Enable
(Optional)
Reserved 15:12 This bit is reserved and should be set to Zero.
Interrupt
Threshold
Control
Reserved 31:24 These bits are reserved and should be set to Zeros.
9:8 00b If the Asynchronous Park Capability bit in the HCCPARAMS register is a
one, then this field defaults to 3h and is R/W. Otherwise it defaults to
zero and is RO. It contains a count of the number of successive
transactions the host controller is allowed to execute from a high-speed
queue head on the Asynchronous schedule before continuing traversal
of the Asynchronous schedule. Valid values are 1h to 3h. Software
must not write a zero to this bit when Park Mode Enable is a one as this
will result in undefined behavior.
[Read/Write or Read-only]
11 0b [Read-only]
If the Asynchronous Park Capability bit in the HCCPARAMS register is a
one, then this bit defaults to a 1h and is R/W. Otherwise the bit must be
a zero and is RO. 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 disabled.
23:16 08h This field is used by system software to select the maximum rate at
which the host controller will issue interrupts. The only valid values are
defined below. If software writes an invalid value to this register, the
results are undefined.
Any other value in this register yields undefined results. Software
modifications to this bit while HCHalted bit is equal to zero results in
undefined behavior.
USBINT 0 0b USB Interrupt. The Host Controller sets this bit to 1 on the completion of
a USB transaction, which results in the retirement of a Transfer Descriptor
that had its IOC bit set. The Host Controller also sets this bit to 1 when a
short packet is detected (actual number of bytes received was less than
the expected number of bytes).
USBERRINT 1 0b USB Error Interrupt . The Host Controller sets this bit to 1 when
completion of a USB transaction results in an error condition (e.g., error
counter underflow). If the TD on which the error interrupt occurred also
had its IOC bit set, both this bit and USBINT bit are set.
Host System Error 4 0b Host System Error. The Host Controller sets this bit to 1 when a serious
Interrupt on Async
Advance
Reserved 11:6 These bits are reserved and should be set to zero.
HCHalted 12 1b HCHalted. This bit is a zero whenever the Run/Stop bit is a one. The Host
Reclamation 13 0b Reclamation. This is a read-only status bit, which is used to detect an
Periodic Schedule
Status
Asynchronous
Schedule Status
Reserved 31:16 These bits are reserved and should be set to zero.
2 0b Port Change Detect. The Host Controller sets this bit to a one when any
port for which the Port Owner bit is set to zero (see Section 2.3.9) has a
change bit transition from a zero to a one or a Force Port Resume bit
transition from a zero to a one as a result of a J-K transition detected on a
suspended port. This bit will also be set as a result of the Connect Status
Change being set to a one after system software has relinquished
ownership of a connected port by writing a zero to a port's Port Owner bit.
This bit is allowed to be maintained in the Auxiliary power well.
Alternatively, it is also acceptable that on a D3 to D0 transition of the
EHCI HC device, this bit is loaded with the OR of all of the PORTSC
change bits (including: Force port resume, over-current change,
enable/disable change and connect status change).
3 0b Frame List Rollover. The Host Controller sets this bit to a one when the
Frame List Index rolls over from its maximum value to zero. 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[13] toggles. Similarly, if the size is 512, the Host
Controller sets this bit to a one every time FRINDEX[12] toggles.
error occurs during a host system access involving the Host Controller
module. In a PCI system, conditions that set this bit to 1 include PCI
Parity error, PCI Master Abort, and PCI Target Abort. When this error
occurs, the Host Controller clears the Run/Stop bit in the Command
register to prevent further execution of the scheduled TDs.
5 0b Interrupt on Async 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 indicates the
assertion of that interrupt source.
Controller sets this bit to one after it has stopped executing as a result of
the Run/Stop bit being set to 0, either by software or by the Host
Controller hardware (e.g. internal error). [Read-only]
empty asynchronous schedule. [Read-only]
14 0b Periodic Schedule Status. The bit reports the current real status of the
Periodic Schedule. If this bit is a zero then the status of the Periodic
Schedule is disabled. If this bit is a one then the status of the Periodic
Schedule 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. When this bit and
the Periodic Schedule Enable bit are the same value, the Periodic
Schedule is either enabled (1) or disabled (0). [Read-only]
15 0b Asynchronous Schedule Status. The bit reports the current real status of
the Asynchronous Schedule. If this bit is a zero then the status of the
Asynchronous Schedule is disabled. If this bit is a one then the status of
the Asynchronous Schedule 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. When this bit and the Asynchronous Schedule Enable
bit are the same value, the Asynchronous Schedule is either enabled (1)
or disabled (0). [Read-only]
Reserved 31:6 These bits are reserved and should be zero
0 0b When this bit is a one, and the USBINT bit in the USBSTS register is a
one, the host controller will issue an interrupt at the next interrupt
threshold. The interrupt is acknowledged by software clearing the
USBINT bit.
1 0b When this bit is a one, and the USBERRINT bit in the USBSTS register is
a one, the host controller will issue an interrupt at the next interrupt
threshold. The interrupt is acknowledged by software clearing the
USBERRINT bit.
2 0b When this bit is a one, and the Port 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 Change Detect bit.
3 0b When this bit is a one, and the Frame List Rollover bit in the USBSTS
register is a one, the host controller will issue an interrupt. The interrupt is
acknowledged by software clearing the Frame List Rollover bit.
4 0b When this bit is a one, and the Host System Error Status bit in the
USBSTS register is a one, the host controller will issue an interrupt. The
interrupt is acknowledged by software clearing the Host System Error bit.
5 0b When this bit is a one, and the Interrupt on Async Advance bit in the
USBSTS register is a one, the host controller will issue an interrupt at the
next interrupt threshold. The interrupt is acknowledged by software
31:0 0h This 32-bit register corresponds to the most significant address bits
[63:32] for all EHCI data structures. If the 64-bit Addressing Capability
field in HCCPARAMS is a zero, then this register is not used. Software
cannot write to it and a read from this register will return zeros.
If the 64-bit Addressing Capability
this register is used with the link pointers to construct 64-bit addresses to
EHCI control data structures. This register is concatenated with the
link pointer from either the PERIODICLISTBASE, ASYNCLISTADDR, or
any control data structure link field to construct a 64-bit address.
This register allows the host software to locate all control data structures
within the same 4 Gigabyte memory segment.
Reserved 31:1 These bits are reserved and should be set to zero.
0 0b Host software sets this bit as the last action in its process of configuring
the Host Controller. This bit controls the default port-routing control
logic. Bit values and side-effects are listed below:
0b = Port routing control logic default-routes each port to an
implementation dependent classic host controller.
1b = Port routing control logic default-routes all ports to this host
controller.
0 = No device is present.
This value reflects the current state of the port, and may not correspond
directly to the event that caused the Connect Status Change bit (Bit 1) to
be set. This field is zero if Port Power is zero. [Read-only]
1 0b 1 = Change in Current Connect Status.
0 = No change.
Indicates a change has occurred in the port’s Current Connect Status.
The host 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
“setting” an already-set bit (i.e., the bit will remain set). Software sets this
bit to 0 by writing a 1 to it. This field is zero if Port Power is zero.
2 0b 1 = Enable.
0 = Disable
Ports can only be enabled by the host controller as a part of the reset and
enable. Software cannot enable a port by writing a one to this field. The
host controller will only set this bit to a one when the reset sequence
determines that the attached device is a high-speed device. Ports can be
disabled by either a fault condition (disconnect event or other fault
condition) or by host software. Note that the bit status does not change
until the port state actually changes. There may be a delay in disabling or
enabling a port due to other host controller and bus events. When the port
is disabled (0b) downstream propagation of data is blocked on this port,
except for reset. This field is zero if Port Power is zero.
3 0b 1 = Port enabled/disabled status has changed.
0 = No change.
For the root hub, this bit gets set to a one only when a port is disabled due
to the appropriate conditions existing at the EOF2. Software clears this bit
by writing a 1 to it. This field is zero if Port Power is zero.
4 0b 1 = This port currently has an over-current condition.
0 = This port does not have an over-current condition.
This bit will automatically transition from a one to a zero when the over
current condition is removed.
0 = No resume (K-state) detected/driven on port.
This functionality defined for manipulating this bit depends on the value of
the Suspend bit. For example, if the port is not suspended (Suspend and
Enabled bits are a one) and software transitions this bit to a one, then the
effects on the bus are undefined. Software sets this bit to a 1 to drive
resume signaling. The Host Controller sets this bit to a 1 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 a one. If software
sets this bit to a one, the host controller must not set the Port Change Detect bit. Note that when the EHCI 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. Software must appropriately
time the Resume and set this bit to a zero when the appropriate amount
of time has elapsed. Writing a zero (from one) causes the port to return to
high-speed mode (forcing the bus below the port into a high-speed idle).
This bit will remain a one until the port has switched to the high-speed
idle. The host controller must complete this transition within 2 milliseconds
of software setting this bit to a zero. This field is zero if Port Power is zero.
0 = Port not in suspend state.
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 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. A write of zero to this bit is
ignored by the host controller. The host controller will unconditionally set
this bit to a zero when:
- Software sets the Force Port Resume bit to a zero (from a one).
- Software sets the Port Reset bit to a one (from a zero).
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
0 = Port is not in Reset.
When software writes a one to this bit (from a zero), the bus reset
sequence as defined in the USB Specification Revision 2.0 is started.
Software writes a zero to this bit to terminate the bus reset sequence.
Software must keep this bit at a one long enough to ensure the reset
sequence, as specified in the USB Specification Revision 2.0, completes.
Note: when software writes this bit to a one, it must also write a zero to
the Port Enable bit.
Note that when software writes a zero to this bit there may be a delay
before the bit status changes to a zero. The bit status will not read as a
zero until after the reset has completed. If the port is in high-speed mode
after reset is complete, the host controller will automatically enable this
port (e.g. set the Port Enable bit to a one). A host controller must
terminate the reset and stabilize the state of the port within 2 milliseconds
of software transitioning this bit from a one to a zero. For example: if the
port detects that the attached device is high-speed during reset, then the
host controller must have the port in the enabled state within 2ms of
software writing this bit to a zero.
The HCHalted bit in the USBSTS register should be a zero before
software attempts to use this bit. The host controller may hold Port Reset
asserted to a one when the
HCHalted bit is a one. This field is zero if Port Power is zero.
Reserved 9 This bit is reserved for future use, and should return a value of zero when
read.
Line Status 11:10 These bits reflect the current logical levels of the D+ (bit 11) and D-
(bit 10) signal lines. These bits are used for detection of low-speed USB
devices prior to the port reset and enable sequence. This field is valid
only when the port enable bit is zero and the current connect status bit is
set to a one.
The encoding of the bits are:
Bits[11:10] USB State Interpretation
00b SE0 Not Low-speed device, perform EHCI reset
10b J-state Not Low-speed device, perform EHCI reset
01b K-state Low-speed device, release ownership of port
11b Undefined Not Low-speed device, perform EHCI reset.
This value of this field is undefined if Port Power is zero.
[Read-only]
Port Power 12 The function of this bit depends on the value of the Port Power Control
(PPC) field in the HCSPARAMS register. The behavior is as follows:
PPC PP Operation
0b 1b RO - Host controller does not have port power control
switches. Each port is hard-wired to power.
1b 1b/0b RW - Host controller has port power control switches.
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 from a 1 to 0 (removing power from the port).
[Read-write or Read-only]
Port Owner 13 1b This bit unconditionally goes to a 0b when the Configured bit in the
CONFIGFLAG register makes a 0b to 1b transition. This bit
unconditionally goes to 1b whenever the Configured bit is zero.
System software uses this field to release ownership of the port to a
selected host controller (in the event that the attached device is not a
high-speed device). Software writes a one to this bit when the attached
device is not a high-speed device. A one in this bit means that a
companion host controller owns and controls the port.
Port Indicator
Control
Port Test Control 19:16 0000b When this field is zero, the port is NOT operating in a test mode. A non-
Wake on Connect
Enable
Wake on
Disconnect
Enable
Wake on Overcurrent Enable
Reserved 31:23 Reserved
15:14 00b Writing to this bit has no effect if the P_INDICATOR bit in the
HCSPARAMS register is a zero. If P_INDICATOR bit is a one, then the bit
encodings are:
Bit Value Meaning
00b Port indicators are off
01b Amber
10b Green
11b Undefined
Refer to the USB Specification Revision 2.0 for a description on how
these bits are to be used. This field is zero if Port Power is zero.
zero value indicates that it is operating in test mode and the specific test
mode is indicated by the specific value. The encoding of the test mode
bits are (0110b - 1111b are reserved):
Bits Test Mode
0000b Test mode not enabled
0001b Test J_STATE
0010b Test K_STATE
0011b Test SE0_NAK
0100b Test Packet
0101b Test FORCE_ENABLE
20 0b 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 is zero.
21 0b 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 is zero.
22 0b 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 is zero.
IN Threshold 7:0 10h The PCI transaction starts when threshold of internal FIFO for receive
packet is reached.
The value represents multiple of 8 bytes – 10h means 128 bytes. The
smallest acceptable value is 08h (64 bytes).
Reserved 15:8 Reserved
OUT Threshold 23:16 60h The transmit packet starts at UTMI interface when threshold of internal
FIFO for transmit packet is reached.
The value represents multiple of 8 bytes – 10h means 128 bytes. The
smallest acceptable value is 08h (64 bytes).
Reserved 31:24 Reserved
USB PHY Status 0 – RW - 32 bits - [EOR_Reg: EHCI_EOR + 88h]
Field Name Bits Default Description
PORT0_PHYStatus 7:0 00h Read only. PHY Status of Port0
PORT1_PHYStatus 15:8 00h Read only. PHY Status of Port1
PORT2_PHYStatus 23:16 00h Read only. PHY Status of Port2
PORT3_PHYStatus 31:24 00h Read only. PHY Status of Port3
Note: PORTx_PHYStatus[7:0] = { 0, RCKSEL, DUTYADJ[2:0], HSADJ[2:0] } where x=0 ~ 3
USB PHY Status 1 – RW - 32 bits - [EOR_Reg: EHCI_EOR + 8Ch]
Field Name Bits Default Description
PORT4_PHYStatus 7:0 00h Read only. PHY Status of Port4
PORT5_PHYStatus 15:8 00h Read only. PHY Status of Port5
PORT6_PHYStatus 23:16 00h Read only. PHY Status of Port6
PORT7_PHYStatus 31:24 00h Read only. PHY Status of Port7
USB PHY Status 2 – RW - 32 bits - [EOR_Reg: EHCI_EOR + 90h]
Field Name Bits Default Description
Reserved 15:0 Reserved
PORT8_PHYStatus 23:16 00h Read only. PHY Status of Port8
PORT9_PHYStatus 31:24 00h Read only. PHY Status of Port9
Reserved 11:0 000h Reserved
EHCI Power
Saving Enable
Reserved 31:13 00000h Reserved
12 0b Enable power saving clock gating. When enabled, dynamic clock gating
is enabled when EHCI is not at operational mode. The clock goes to all
memory module will be gated off, and the internal bus clock also gets
gated off unless the connection interrupt is detected.
USB Common PHY Calibration – RW - 32 bits - [EOR_Reg: EHCI_EOR + A0h ]
Field Name Bits Default Description
ComCalBus
Reserved 7 0b Reserved
NewCalBus 15:8 00h New calibration bus signed value. Bit-15 is the signed bit.
UsbCommonCalib
ration
AddToCommonCa
libration
Reserved 31:18 0000h Reserved
Note:
1. The equation for calibration resistor is as follows: Rcal = 1/ [1/59.4 + CalValue/(1.05*3.8k ohm)], where the
CalValue is the final 7 bits of calibration setting send to PHY.
2. The total termination resistance value for HS USB D+/D- should include another 5 ohm resistance from FS
driver.
6:0 xx Enables power saving clock gating (this was original at bit-31). When
enabled, dynamic clock gating is enabled when EHCI is not at
operational mode. The clock goes to all memory module will be gated
off, The blink clock also is gated off unless the connection interrupt is
detected.
16 0b If set, the PHY’s calibration value in bit[6:0] is returned to the PHY ports.
If clear, the value after adjustment is returned to the PHY ports.
17 0b If set, the signed NewCalBus is added to the ComCalBus and returned
to the PHY ports. Any overflow is clamped to all ones. Any underflow is
clamped to all zeros.
If clear, the NewCalBus (bit-14:8) replaces the ComCalBus and returns
to the PHY ports.
2.2.3.4 USB2.0 Debug Port Registers
This block of registers is memory-mapped. The base offset, Dbase, is directly defined in DBUG_PRT
2.3 SMBus Module and ACPI Block (Device 20, Function 0)
Some registers in the SMBus/ACPI PCI configuration space (PCI_reg, see section 2.3.1)contain controls
and settings for a number of blocks within the SB600. Figure 4 below shows these blocks, with their affected
functions and the associated PCI_reg registers.
SATA
SATA Enables
SATA power saving
SATA Interrupt Map register
SATA Smart Power Control
VendorID 15:0 1002h Vendor ID
Vendor ID register: Vendor Identification
DeviceID - R - 16 bits - [PCI_Reg: 02h]
Field Name Bits Default Description
DeviceID 31:16 4385h Device ID
Device ID register: Device Identification Number
Command- RW - 16 bits - [PCI_Reg: 04h]
Field Name Bits Default Description
I/O Space 0 1b This bit controls a device’s response to IO space accesses. A
value of 1 enables it and a value of 0 disables it. Since this
module does claim certain legacy IO cycles, this bit is default
to 1.
Memory Space 1 1b This bit controls a device’s response to memory space
accesses. A value of 1 enables it and a value of 0 disables it.
Since this module does claim certain memory cycles if BIOS is
strapped to the PCI bus, this bit is default to 1.
Bus Master 2 0b A value of 0 disables the device from generating PCI
accesses. A value of 1 allows it to behave as a bus master.
ACPI/SMBus does not have PCI master and so it is always 0.
[Read-only]
Special Cycle 3 0b A value of 0 causes the devices to ignore all special cycle
operations. A value of 1 allows the device to monitor Special
Cycle operations. This module does not respond to special
cycle and so this is hardcoded to 0
Memory Write &
Invalidate Enable
VGA Palette Snoop 5 0b This bit controls how VGA compatible and graphics devices
4 0b This bit is an enable bit for using the Memory Write and
Invalidate command. This module will not generate this
command and so it is always 0. [Read-only]
handle accesses to VGA pallette registers. This does not
apply to this module and so it is always 0. [Read-only]
Parity Error Response 6 0b This bit controls the device’s response to parity errors. When
the bit is set, the device must take its normal action when a
parity error is detected. When the bit is 0, the device must
ignore any parity errors that it detects and continue normal
operation.
Wait Cycle Control 7 0b This bit is used to control whether or not a device does
address/data stepping. This module does not use address
stepping. [Read-only]
SERR# Enable 8 0b This bit is an enable bit for SERR# driver. A value of 0
disables the SERR# and a value of 1 enables it.
Fast Back-to-Back
Enable
Reserved 15:10 00h
PCI Command register
9 0b This bit indicates whether device is fast back-to-back capable.
ACPI/SMbus does not support this function and so this bit is
always 0. [Read-only]
STATUS- RW - 16 bits - [PCI_Reg: 06h]
Field Name Bits Default Description
Reserved 3:0
MSI Mapping Capability 4 1/0b [Read-only] This bit indicates whether the device can support
MSI mapping. For K8 system this device is MSI mapping
capable so default value is 1; for P4 system this device does
not support MSI mapping so default value is 0.
66 MHz Capable 5 1b This bit indicates whether the device can support 66 MHz.
This device is 66 MHz capable. [Read-only]
UDF Supported 6 0b This bit indicates whether the device supports user definable
feature. This module does not support this feature and so it is
always 0. [Read-only]
Fast Back-to-Back
Capable
Data Parity Error
Detected
DEVSEL Timing 10:9 01b These bits encode the timing of DEVSEL#. This module will
Signaled Target Abort 11 0b This bit is set by a slave device whenever it terminates a cycle
Received Target Abort 12 0b This bit is set by a master device whenever its transaction is
Received Master Abort 13 0b This bit is set by a slave device whenever it terminates its
Signaled System Error 14 0b This bit is set by device whenever the device asserts SERR#.
Detected Parity Error 15 0b This bit is set by device whenever it detects a parity error,
PCI device status register
7 0b This bit indicates whether the device is capable of fast back-to-
back cycles. This module does not support this feature and so
it is always 0. [Read-only]
8 0b Set to 1 if the Parity Error Response bit is set, and the module
has detected PERR# asserted while acting as a PCI master
(regardless PERR# was driven by this module).
always respond in medium timing and so these bits are always