Mercurial > flash_v2
changeset 910:97d8ec828260
ixp425 support for non-host mode
| author | msalter |
|---|---|
| date | Sun, 06 Apr 2003 23:19:40 +0000 |
| parents | 97ac17e0e4de |
| children | e890ffec4503 |
| files | packages/hal/arm/xscale/ixp425/current/ChangeLog packages/hal/arm/xscale/ixp425/current/src/ixp425_pci.c |
| diffstat | 2 files changed, 40 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/hal/arm/xscale/ixp425/current/ChangeLog +++ b/packages/hal/arm/xscale/ixp425/current/ChangeLog @@ -1,3 +1,7 @@ +2003-04-06 Mark Salter <msalter@redhat.com> + + * src/ixp425_pci.c (cyg_hal_plf_pci_init): Support non-host mode. + 2003-02-22 Mark Salter <msalter@redhat.com> * src/ixp425_pci.c (cyg_hal_plf_pci_init): Don't reinit PCI
--- a/packages/hal/arm/xscale/ixp425/current/src/ixp425_pci.c +++ b/packages/hal/arm/xscale/ixp425/current/src/ixp425_pci.c @@ -394,6 +394,7 @@ void cyg_hal_plf_pci_init(void) { static int inited = 0; + int is_host = (*IXP425_PCI_CSR & PCI_CSR_HOST); if (inited) return; @@ -412,35 +413,45 @@ cyg_hal_plf_pci_init(void) // in 4 16MB BARs that begin at the physical memory start *IXP425_PCI_AHBMEMBASE = 0x00010203; - HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_0, 0x00000000); - HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_1, 0x01000000); - HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_2, 0x02000000); - HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_3, 0x03000000); + if (is_host) { + + HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_0, 0x00000000); + HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_1, 0x01000000); + HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_2, 0x02000000); + HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_3, 0x03000000); + + cyg_pci_set_memory_base(HAL_PCI_ALLOC_BASE_MEMORY); + cyg_pci_set_io_base(HAL_PCI_ALLOC_BASE_IO); - cyg_pci_set_memory_base(HAL_PCI_ALLOC_BASE_MEMORY); - cyg_pci_set_io_base(HAL_PCI_ALLOC_BASE_IO); + // This one should never get used, as we request the memory for + // work with PCI with GFP_DMA, which will return mem in the first 64 MB. + // But we still must initialize it so that it wont intersect with first 4 + // BARs + // XXX: Should we initialize the BAR5 to some very large value, so that + // it also will not be hit? + // + HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_4, 0x80000000); + HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_5, 0x90000000); - // This one should never get used, as we request the memory for - // work with PCI with GFP_DMA, which will return mem in the first 64 MB. - // But we still must initialize it so that it wont intersect with first 4 - // BARs - // XXX: Should we initialize the BAR5 to some very large value, so that - // it also will not be hit? - // - HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_4, 0x80000000); - HAL_PCI_CFG_WRITE_UINT32(0, 0, CYG_PCI_CFG_BAR_5, 0x90000000); + *IXP425_PCI_ISR = PCI_ISR_PSE | PCI_ISR_PFE | PCI_ISR_PPE | PCI_ISR_AHBE; - *IXP425_PCI_ISR = PCI_ISR_PSE | PCI_ISR_PFE | PCI_ISR_PPE | PCI_ISR_AHBE; - - // - // Set Initialize Complete in PCI Control Register: allow IXP425 to - // respond to PCI configuration cycles. Specify that the AHB bus is - // operating in big endian mode. Set up byte lane swapping between - // little-endian PCI and the big-endian AHB bus - *IXP425_PCI_CSR = PCI_CSR_IC | PCI_CSR_ABE | PCI_CSR_PDS | PCI_CSR_ADS; + // + // Set Initialize Complete in PCI Control Register: allow IXP425 to + // respond to PCI configuration cycles. Specify that the AHB bus is + // operating in big endian mode. Set up byte lane swapping between + // little-endian PCI and the big-endian AHB bus + *IXP425_PCI_CSR = PCI_CSR_IC | PCI_CSR_ABE | PCI_CSR_PDS | PCI_CSR_ADS; - HAL_PCI_CFG_WRITE_UINT16(0, 0, CYG_PCI_CFG_COMMAND, - CYG_PCI_CFG_COMMAND_MASTER | CYG_PCI_CFG_COMMAND_MEMORY); + HAL_PCI_CFG_WRITE_UINT16(0, 0, CYG_PCI_CFG_COMMAND, + CYG_PCI_CFG_COMMAND_MASTER | CYG_PCI_CFG_COMMAND_MEMORY); + } else { + // + // Set Initialize Complete in PCI Control Register: allow IXP425 to + // respond to PCI configuration cycles. Specify that the AHB bus is + // operating in big endian mode. Set up byte lane swapping between + // little-endian PCI and the big-endian AHB bus + *IXP425_PCI_CSR = PCI_CSR_IC | PCI_CSR_ABE | PCI_CSR_PDS | PCI_CSR_ADS; + } } #endif // CYGPKG_IO_PCI
