PA-RISC PCI Support
PA-RISC Linux supports four different types of Host Bus PCI Controllers:
- Built-in Dino (GSC to PCI)
- Card-Mode Dino (GSC to PCI)
- Elroy (Ropes to PCI) with "Legacy PDC"
- Elroy and Mercury (Ropes+ to PCI-X) with "PAT PDC"
PA-RISC Linux does NOT currently support EPIC nor the V-class systems where EPIC is found.
PA-RISC describes three different kinds of MMIO address space:
- lmmio:: Low (<4GB) MMIO. Legacy PA-RISC MMIO space is the 256MB below 4GB.
- elmmio:: Extra Low MMIO. Only found in Elroy and successors. This is an "Extra" LMMIO range register which allows the chipset to redirect unused MMIO space to a PCI bus that needs more than the default lmmio space.
- gmmio:: Greater than 4GB MMIO. 64-bit MMIO space above 4GB physical address range. Also only found on Elroy and successors. Typically not used.
PCI I/O Port and Configuration space cycles are generated by accessing two registers. One writes the desired address into one register and reads or writes a second register to generate the desired PCI bus cycle.
Built-in Dino is exactly that: on mother-board and initialized by Firmware. Built-in Dino is found in B132L, B160L, B180L, C180, C200, C240, C360 and J2240 workstations and A180 server.
Dino hrev 1 (v3.0 or older) may exhibit data corruption. See Service Note Numbers: A4190A-01, A4191A-01. Systems shipped after Aug 20, 1997 will not exhibit this problem. Models affected: C180, C160, C160L, B160L, and B132L workstations.
Dino does NOT support Dual Address Cycle (DAC). Dino's bigger brother, Cujo does support 64-bit data path but also does not support DAC.
"Legacy PDC" (system firmware, see ProcessorDependentCode) is responsible for filling in most of the PCI Configuration space for each PCI device.
PDC fills in `PCI_INTERRUPT_LINE` (becomes `pci_dev->irq`) value with the DINO input Interrupt Line (ie index into `dino->global_irq`). This is used by dino code instead of a "Routing Table".
Other PA-RISC and most architectures use some form of "IRQ Line Routing Table" to communicate PCI device `IRQ_PIN` output to Interrupt Controller input lines mappings to the OS.
HP produced a number of GSC cards which use a Dino to talk to a PCI chip. Examples include gigabit ethernet (acenic) and single- and dual- 100Mbit ethernet (tulip). When used in this way, Dino is referred to as being in Card-Mode. These cards were available for B/C/J class workstations, as well as D, K, R and T class servers. While not officially supported on the 715/Mirage, 725 and 755 workstations, they do at least partially work.
Card-Mode Dino primarily differs from Built-in Dino in initialization. No firmware will touch Card-Mode Dino devices. The OS has to do everything. And PA-RISC Linux does. Card-mode Dino support attempts to allocate MMIO space for child PCI devices and routes MMIO address range to the PCI bus. Normally system firmware (PDC) takes care of this.
Elroy with Legacy PDC
Elroy is a PCI-4X bus controller that support 66Mhz and 64-bit devices. Elroy is used in second generation B-, C-, J-xxxx workstations which also used Astro IO and memory controller. Elroy is also in A400/A500, L-class and N-class servers as well as some rpxxxx servers.
Elroy supports DAC (Dual Address Cycle), 66Mhz operation and 64-bit data path.
The workstations all used a hybrid "Legacy PDC" that could also support 64-bit PDC calls. IODC is still 32-bit only in those platforms.
Elroy incorporates an IO-SAPIC and a separate iosapic driver deals with IRQ routing and delivery at run-time.
Mercury with PAT PDC
Mercury is a PCI-X 1.0 controller with a programming model essentially compatible with Elroy.
Mercury supports DAC, 133Mhz PCI-X 1.0, 66 Mhz PCI-X, 66Mhz PCI 2.3 at 64-bit data width. While Mercury supports AGP 2.0, it is not used in this mode by any PA-RISC machine. The C8000 uses the Quicksilver ASIC for its AGP-8X slot instead. Quicksilver is closely related to Mercury.
Mercury is part of the ZX1 chipset and found in rp34xx and bigger servers. Mercury is used only in conjunction with PA8800 and PA8900 CPUs.
All servers with Mercury only use PAT PDC. PAT PDC only initializes the Boot and Console PCI devices. PAT PDC does provide MMIO routing information and an IRQ routing Table. The OS has to then work with that information to initialize the PCI devices.
Mercury is also found in all HP ZX1 and SX1000 IA64 platforms.
Like Elroy, Mercury also includes an IO-SAPIC on-chip.