X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=drivers%2Fpci%2Fpci.c;h=b5eea89e7d42d6e49ff7091411b1e3bfdefccc5b;hb=4fb09b81920e5dfdfc4576883186733f0bd6059c;hp=7944b6684aeee601b2ec7bd380728988ac469c9e;hpb=3596d55eb22703d3f4f1b839fe4b000fabe081b3;p=u-boot diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 7944b6684a..b5eea89e7d 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -30,16 +30,14 @@ #include -#ifdef CONFIG_PCI - #include #include #include #include #define PCI_HOSE_OP(rw, size, type) \ -int pci_hose_##rw##_config_##size(struct pci_controller *hose, \ - pci_dev_t dev, \ +int pci_hose_##rw##_config_##size(struct pci_controller *hose, \ + pci_dev_t dev, \ int offset, type value) \ { \ return hose->rw##_##size(hose, dev, offset, value); \ @@ -77,7 +75,7 @@ PCI_OP(write, dword, u32, ) #define PCI_READ_VIA_DWORD_OP(size, type, off_mask) \ int pci_hose_read_config_##size##_via_dword(struct pci_controller *hose,\ - pci_dev_t dev, \ + pci_dev_t dev, \ int offset, type val) \ { \ u32 val32; \ @@ -94,7 +92,7 @@ int pci_hose_read_config_##size##_via_dword(struct pci_controller *hose,\ #define PCI_WRITE_VIA_DWORD_OP(size, type, off_mask, val_mask) \ int pci_hose_write_config_##size##_via_dword(struct pci_controller *hose,\ - pci_dev_t dev, \ + pci_dev_t dev, \ int offset, type val) \ { \ u32 val32, mask, ldata, shift; \ @@ -221,7 +219,7 @@ pci_dev_t pci_find_device(unsigned int vendor, unsigned int device, int index) */ unsigned long pci_hose_phys_to_bus (struct pci_controller *hose, - unsigned long phys_addr, + phys_addr_t phys_addr, unsigned long flags) { struct pci_region *res; @@ -253,9 +251,9 @@ Done: return 0; } -unsigned long pci_hose_bus_to_phys(struct pci_controller* hose, - unsigned long bus_addr, - unsigned long flags) +phys_addr_t pci_hose_bus_to_phys(struct pci_controller* hose, + unsigned long bus_addr, + unsigned long flags) { struct pci_region *res; int i; @@ -411,6 +409,40 @@ void pci_cfgfunc_do_nothing(struct pci_controller *hose, extern int pciauto_config_device(struct pci_controller *hose, pci_dev_t dev); extern void pciauto_config_init(struct pci_controller *hose); +int __pci_skip_dev(struct pci_controller *hose, pci_dev_t dev) +{ + /* + * Check if pci device should be skipped in configuration + */ + if (dev == PCI_BDF(hose->first_busno, 0, 0)) { +#if defined(CONFIG_PCI_CONFIG_HOST_BRIDGE) /* don't skip host bridge */ + /* + * Only skip configuration if "pciconfighost" is not set + */ + if (getenv("pciconfighost") == NULL) + return 1; +#else + return 1; +#endif + } + + return 0; +} +int pci_skip_dev(struct pci_controller *hose, pci_dev_t dev) + __attribute__((weak, alias("__pci_skip_dev"))); + +#ifdef CONFIG_PCI_SCAN_SHOW +int __pci_print_dev(struct pci_controller *hose, pci_dev_t dev) +{ + if (dev == PCI_BDF(hose->first_busno, 0, 0)) + return 0; + + return 1; +} +int pci_print_dev(struct pci_controller *hose, pci_dev_t dev) + __attribute__((weak, alias("__pci_print_dev"))); +#endif /* CONFIG_PCI_SCAN_SHOW */ + int pci_hose_scan_bus(struct pci_controller *hose, int bus) { unsigned int sub_bus, found_multi=0; @@ -423,25 +455,10 @@ int pci_hose_scan_bus(struct pci_controller *hose, int bus) for (dev = PCI_BDF(bus,0,0); dev < PCI_BDF(bus,PCI_MAX_PCI_DEVICES-1,PCI_MAX_PCI_FUNCTIONS-1); - dev += PCI_BDF(0,0,1)) - { + dev += PCI_BDF(0,0,1)) { - /* Bus 0 is not necessarily PCI bridge. */ -#if defined(CONFIG_PCI_SKIP_HOST_BRIDGE) - /* Skip our host bridge */ - if ( dev == PCI_BDF(hose->first_busno,0,0) ) { -#if defined(CONFIG_PCI_CONFIG_HOST_BRIDGE) /* don't skip host bridge */ - /* - * Only skip hostbridge configuration if "pciconfighost" is not set - */ - if (getenv("pciconfighost") == NULL) { - continue; /* Skip our host bridge */ - } -#else /* CONFIG_PCI_CONFIG_HOST_BRIDGE */ - continue; /* Skip our host bridge */ -#endif /* CONFIG_PCI_CONFIG_HOST_BRIDGE */ - } -#endif /* CONFIG_PCI_SKIP_HOST_BRIDGE */ + if (pci_skip_dev(hose, dev)) + continue; if (PCI_FUNC(dev) && !found_multi) continue; @@ -477,18 +494,14 @@ int pci_hose_scan_bus(struct pci_controller *hose, int bus) hose->fixup_irq(hose, dev); #ifdef CONFIG_PCI_SCAN_SHOW -#if defined(CONFIG_PCI_SKIP_HOST_BRIDGE) - /* Skip our host bridge */ - if ( dev != PCI_BDF(hose->first_busno,0,0) ) -#endif - { - unsigned char int_line; - - pci_hose_read_config_byte(hose, dev, PCI_INTERRUPT_LINE, - &int_line); - printf(" %02x %02x %04x %04x %04x %02x\n", - PCI_BUS(dev), PCI_DEV(dev), vendor, device, class, - int_line); + if (pci_print_dev(hose, dev)) { + unsigned char int_line; + + pci_hose_read_config_byte(hose, dev, PCI_INTERRUPT_LINE, + &int_line); + printf(" %02x %02x %04x %04x %04x %02x\n", + PCI_BUS(dev), PCI_DEV(dev), vendor, device, class, + int_line); } #endif } @@ -529,5 +542,3 @@ void pci_init(void) /* now call board specific pci_init()... */ pci_init_board(); } - -#endif /* CONFIG_PCI */