Loading arch/x86/kernel/setup_64.c +5 −0 Original line number Diff line number Diff line Loading @@ -361,6 +361,11 @@ void __init setup_arch(char **cmdline_p) parse_early_param(); #ifdef CONFIG_PCI if (pci_early_dump_regs) early_dump_pci_devices(); #endif #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT if (init_ohci1394_dma_early) init_ohci1394_dma_on_all_controllers(); Loading arch/x86/pci/common.c +4 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 | PCI_PROBE_MMCONF; unsigned int pci_early_dump_regs; static int pci_bf_sort; int pci_routeirq; int pcibios_last_bus = -1; Loading Loading @@ -511,6 +512,9 @@ char * __devinit pcibios_setup(char *str) } else if (!strcmp(str, "use_crs")) { pci_probe |= PCI_USE__CRS; return NULL; } else if (!strcmp(str, "earlydump")) { pci_early_dump_regs = 1; return NULL; } else if (!strcmp(str, "routeirq")) { pci_routeirq = 1; return NULL; Loading arch/x86/pci/early.c +51 −0 Original line number Diff line number Diff line Loading @@ -64,3 +64,54 @@ int early_pci_allowed(void) return (pci_probe & (PCI_PROBE_CONF1|PCI_PROBE_NOEARLY)) == PCI_PROBE_CONF1; } void early_dump_pci_device(u8 bus, u8 slot, u8 func) { int i; int j; u32 val; printk("PCI: %02x:%02x:%02x", bus, slot, func); for (i = 0; i < 256; i += 4) { if (!(i & 0x0f)) printk("\n%04x:",i); val = read_pci_config(bus, slot, func, i); for (j = 0; j < 4; j++) { printk(" %02x", val & 0xff); val >>= 8; } } printk("\n"); } void early_dump_pci_devices(void) { unsigned bus, slot, func; if (!early_pci_allowed()) return; for (bus = 0; bus < 256; bus++) { for (slot = 0; slot < 32; slot++) { for (func = 0; func < 8; func++) { u32 class; u8 type; class = read_pci_config(bus, slot, func, PCI_CLASS_REVISION); if (class == 0xffffffff) break; early_dump_pci_device(bus, slot, func); /* No multi-function device? */ type = read_pci_config_byte(bus, slot, func, PCI_HEADER_TYPE); if (!(type & 0x80)) break; } } } } include/asm-x86/pci-direct.h +3 −0 Original line number Diff line number Diff line Loading @@ -15,4 +15,7 @@ extern void write_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset, u16 val); extern int early_pci_allowed(void); extern unsigned int pci_early_dump_regs; extern void early_dump_pci_device(u8 bus, u8 slot, u8 func); extern void early_dump_pci_devices(void); #endif Loading
arch/x86/kernel/setup_64.c +5 −0 Original line number Diff line number Diff line Loading @@ -361,6 +361,11 @@ void __init setup_arch(char **cmdline_p) parse_early_param(); #ifdef CONFIG_PCI if (pci_early_dump_regs) early_dump_pci_devices(); #endif #ifdef CONFIG_PROVIDE_OHCI1394_DMA_INIT if (init_ohci1394_dma_early) init_ohci1394_dma_on_all_controllers(); Loading
arch/x86/pci/common.c +4 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 | PCI_PROBE_MMCONF; unsigned int pci_early_dump_regs; static int pci_bf_sort; int pci_routeirq; int pcibios_last_bus = -1; Loading Loading @@ -511,6 +512,9 @@ char * __devinit pcibios_setup(char *str) } else if (!strcmp(str, "use_crs")) { pci_probe |= PCI_USE__CRS; return NULL; } else if (!strcmp(str, "earlydump")) { pci_early_dump_regs = 1; return NULL; } else if (!strcmp(str, "routeirq")) { pci_routeirq = 1; return NULL; Loading
arch/x86/pci/early.c +51 −0 Original line number Diff line number Diff line Loading @@ -64,3 +64,54 @@ int early_pci_allowed(void) return (pci_probe & (PCI_PROBE_CONF1|PCI_PROBE_NOEARLY)) == PCI_PROBE_CONF1; } void early_dump_pci_device(u8 bus, u8 slot, u8 func) { int i; int j; u32 val; printk("PCI: %02x:%02x:%02x", bus, slot, func); for (i = 0; i < 256; i += 4) { if (!(i & 0x0f)) printk("\n%04x:",i); val = read_pci_config(bus, slot, func, i); for (j = 0; j < 4; j++) { printk(" %02x", val & 0xff); val >>= 8; } } printk("\n"); } void early_dump_pci_devices(void) { unsigned bus, slot, func; if (!early_pci_allowed()) return; for (bus = 0; bus < 256; bus++) { for (slot = 0; slot < 32; slot++) { for (func = 0; func < 8; func++) { u32 class; u8 type; class = read_pci_config(bus, slot, func, PCI_CLASS_REVISION); if (class == 0xffffffff) break; early_dump_pci_device(bus, slot, func); /* No multi-function device? */ type = read_pci_config_byte(bus, slot, func, PCI_HEADER_TYPE); if (!(type & 0x80)) break; } } } }
include/asm-x86/pci-direct.h +3 −0 Original line number Diff line number Diff line Loading @@ -15,4 +15,7 @@ extern void write_pci_config_16(u8 bus, u8 slot, u8 func, u8 offset, u16 val); extern int early_pci_allowed(void); extern unsigned int pci_early_dump_regs; extern void early_dump_pci_device(u8 bus, u8 slot, u8 func); extern void early_dump_pci_devices(void); #endif