\r
PCI_TRACE ("PCIe Setting up Address Translation");\r
\r
- PCIE_ROOTPORT_WRITE32 (PCIE_BAR_WIN, PCIE_BAR_WIN_SUPPORT_IO | PCIE_BAR_WIN_SUPPORT_MEM | PCIE_BAR_WIN_SUPPORT_MEM64);\r
+ // The Juno PIO window is 8M, so we need full 32-bit PIO decoding.\r
+ PCIE_ROOTPORT_WRITE32 (PCIE_BAR_WIN, PCIE_BAR_WIN_SUPPORT_IO | PCIE_BAR_WIN_SUPPORT_IO32 |\r
+ PCIE_BAR_WIN_SUPPORT_MEM | PCIE_BAR_WIN_SUPPORT_MEM64);\r
\r
// Setup the PCI Configuration Registers\r
// Offset 0a: SubClass 04 PCI-PCI Bridge\r
SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_ECAM_BASE, PCI_ECAM_BASE, PCI_ECAM_SIZE, PCI_ATR_TRSLID_PCIE_CONF);\r
TranslationTable += PCI_ATR_ENTRY_SIZE;\r
\r
- // PCI IO Support\r
- SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_IO_BASE, PCI_IO_BASE, PCI_IO_SIZE, PCI_ATR_TRSLID_PCIE_IO);\r
+ // PCI IO Support, the PIO space is translated from the arm MMIO PCI_IO_BASE address to the PIO base address of 0\r
+ // AKA, PIO addresses used by endpoints are generally in the range of 0-64K.\r
+ SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_IO_BASE, 0, PCI_IO_SIZE, PCI_ATR_TRSLID_PCIE_IO);\r
TranslationTable += PCI_ATR_ENTRY_SIZE;\r
\r
// PCI MEM32 Support\r