diff --git a/src/arch/ppc/lib/pci_dev.c b/src/arch/ppc/lib/pci_dev.c new file mode 100644 index 0000000000..adb047e3fe --- /dev/null +++ b/src/arch/ppc/lib/pci_dev.c @@ -0,0 +1,54 @@ +#include +#include + +/* + * Direct access to PCI hardware... + */ + +uint8_t pci_ppc_read_config8(unsigned char bus, int devfn, int where) +{ + uint8_t res; + + out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); + res = in_8((unsigned char *)PCIC0_CFGDATA + (where & 3)); + return res; +} + +uint16_t pci_ppc_read_config16(unsigned char bus, int devfn, int where) +{ + uint16_t res; + + out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); + res = in_le16((unsigned short *)PCIC0_CFGDATA + (where & 2)); + return res; +} + +uint32_t pci_ppc_read_config32(unsigned char bus, int devfn, int where) +{ + uint32_t res; + + out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); + res = in_le32((unsigned *)PCIC0_CFGDATA); + return res; +} + +int pci_ppc_write_config8(unsigned char bus, int devfn, int where, uint8_t data) +{ + out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); + out_8((unsigned char *)PCIC0_CFGDATA + (where & 3), data); + return 0; +} + +int pci_ppc_write_config16(unsigned char bus, int devfn, int where, uint16_t data) +{ + out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); + out_le16((unsigned short *)PCIC0_CFGDATA + (where & 2), data); + return 0; +} + +int pci_ppc_write_config32(unsigned char bus, int devfn, int where, uint32_t data) +{ + out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); + out_le32((unsigned *)PCIC0_CFGDATA, data); + return 0; +} diff --git a/src/arch/ppc/lib/pci_ops.c b/src/arch/ppc/lib/pci_ops.c index 69f34e8fc9..1e72fb0599 100644 --- a/src/arch/ppc/lib/pci_ops.c +++ b/src/arch/ppc/lib/pci_ops.c @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -17,13 +16,6 @@ struct pci_ops { struct pci_ops pci_direct_ppc; -#define CONFIG_CMD(bus,devfn,where) \ - ((bus << 16) | (devfn << 8) | (where & ~3) | 0x80000000) - -/* - * Direct access to PCI hardware... - */ - /* * Before we decide to use direct hardware access mechanisms, we try to do some * trivial checks to ensure it at least _seems_ to be working -- we just test @@ -101,60 +93,6 @@ void pci_set_method(void) pci_sanity_check(conf); } -static uint8_t pci_ppc_read_config8(unsigned char bus, int devfn, int where) -{ - uint8_t res; - - out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); - res = in_8((unsigned char *)PCIC0_CFGDATA + (where & 3)); - printk_spew("read8(0x%x,0x%x,0x%x)=0x%x\n", bus, devfn, where, res); - return res; -} - -static uint16_t pci_ppc_read_config16(unsigned char bus, int devfn, int where) -{ - uint16_t res; - - out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); - res = in_le16((unsigned short *)PCIC0_CFGDATA + (where & 2)); - printk_spew("read16(0x%x,0x%x,0x%x)=0x%x\n", bus, devfn, where, res); - return res; -} - -static uint32_t pci_ppc_read_config32(unsigned char bus, int devfn, int where) -{ - uint32_t res; - - out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); - res = in_le32((unsigned *)PCIC0_CFGDATA); - printk_spew("read32(0x%x,0x%x,0x%x)=0x%x\n", bus, devfn, where, res); - return res; -} - -static int pci_ppc_write_config8(unsigned char bus, int devfn, int where, uint8_t data) -{ - out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); - out_8((unsigned char *)PCIC0_CFGDATA + (where & 3), data); - printk_spew("write8(0x%x,0x%x,0x%x)<-0x%x\n", bus, devfn, where, data); - return 0; -} - -static int pci_ppc_write_config16(unsigned char bus, int devfn, int where, uint16_t data) -{ - out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); - out_le16((unsigned short *)PCIC0_CFGDATA + (where & 2), data); - printk_spew("write16(0x%x,0x%x,0x%x)<-0x%x\n", bus, devfn, where, data); - return 0; -} - -static int pci_ppc_write_config32(unsigned char bus, int devfn, int where, uint32_t data) -{ - out_le32((unsigned *)PCIC0_CFGADDR, CONFIG_CMD(bus, devfn, where)); - out_le32((unsigned *)PCIC0_CFGDATA, data); - printk_spew("write32(0x%x,0x%x,0x%x)<-0x%x\n", bus, devfn, where, data); - return 0; -} - struct pci_ops pci_direct_ppc = { pci_ppc_read_config8,