Messages in this thread Patch in this message | | | Date | Thu, 23 Jun 2005 10:05:36 -0700 | From | Rajesh Shah <> | Subject | Re: 2.6.12-mm1 |
| |
On Thu, Jun 23, 2005 at 08:25:22AM +0200, Brice Goglin wrote: > > You're right. I reverted this one two days ago and got a working > system. Actually, the system had other problems (got an oops when > reading /proc/ioports). But they might be caused by dependencies > between Grekgh's PCI patches that were still applied and and the > one I removed, right ? > Anyway, this fixed my maestro3 divide error and the yenta hang > during boot. > Reverting the host bridge patch should not affect /proc/ioports, that's probably something different. I'd like to see what your ACPI tables look like and what the firmware reported for host bridge resources. Can you send me the system DSDT (cat /proc/acpi/dsdt > dsdt.hex). Also, can you apply this debug hack patch to 2.6.12-mm1 and send me the dmesg output? You will have to change your .config (e.g. disable yenta support?) to avoid the system hang you seeing with 2.6.12-mm1 (or, you could capture debug messages via serial console).
Rajesh ---------
Index: linux-2.6.12-mm1/arch/i386/pci/acpi.c =================================================================== --- linux-2.6.12-mm1.orig/arch/i386/pci/acpi.c +++ linux-2.6.12-mm1/arch/i386/pci/acpi.c @@ -9,6 +9,13 @@ static void inline add_resource_range(int idx, struct pci_bus *bus, struct acpi_resource_address64 *addr, unsigned long flags) { + printk("%s: adding resource %Lx:%Lx, flags %lx @ bus %x:%x\n", + __FUNCTION__, + addr->min_address_range, + addr->max_address_range, + flags, + bus->number, + idx); memset(bus->resource[idx], 0, sizeof(*(bus->resource[idx]))); bus->resource[idx]->name = bus->name; bus->resource[idx]->start = addr->min_address_range; @@ -72,10 +79,28 @@ add_resources(struct acpi_resource *acpi /* Consolidate adjacent resource ranges */ if (busr->end + 1 == address.min_address_range) { busr->end = address.max_address_range; + printk("%s: consolidating %Lx:%Lx flags %lx for bus %x:%x, new %lx:%lx\n", + __FUNCTION__, + address.min_address_range, + address.max_address_range, + flags, + bus->number, + idx, + busr->start, + busr->end); return AE_OK; } if (address.max_address_range + 1 == busr->start) { busr->start = address.min_address_range; + printk("%s: consolidating %Lx:%Lx flags %lx for bus %x:%x, new %lx:%lx\n", + __FUNCTION__, + address.min_address_range, + address.max_address_range, + flags, + bus->number, + idx, + busr->start, + busr->end); return AE_OK; } /* Consolidate overlapping resource ranges */ @@ -87,6 +112,15 @@ add_resources(struct acpi_resource *acpi busr->start = address.min_address_range; if (address.max_address_range > busr->end) busr->end = address.max_address_range; + printk("%s: consolidating %Lx:%Lx flags %lx for bus %x:%x, new %lx:%lx\n", + __FUNCTION__, + address.min_address_range, + address.max_address_range, + flags, + bus->number, + idx, + busr->start, + busr->end); return AE_OK; } printk(KERN_WARNING @@ -125,6 +159,25 @@ verify_root_windows(struct pci_bus *bus) return 0; } +static void dump_bridge_resources(struct pci_bus *bus) +{ + int i; + unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM; + + printk("%s: Bus resources for bus %s, num %2x, prim %2x, sec %2x, sub %2x\n", + __FUNCTION__, + ((bus->self)? pci_name(bus->self): "root"), + bus->number, + bus->primary, bus->secondary, bus->subordinate); + for (i=0; i<PCI_BUS_NUM_RESOURCES; i++) { + struct resource *res = bus->resource[i]; + if ((res) && (res->flags & type_mask)) { + printk("\tbus resouce #%2x, start %lx, end %lx, flags %lx\n", + i, res->start, res->end, res->flags); + } + } +} + static void __devinit pcibios_setup_root_windows(struct pci_bus *bus, acpi_handle handle) { @@ -141,6 +194,8 @@ pcibios_setup_root_windows(struct pci_bu status = acpi_walk_resources(handle, METHOD_NAME__CRS, add_resources, bus); if (ACPI_FAILURE(status) || !verify_root_windows(bus)) { + printk("%s: Falling back to default host bridge resources\n", + __FUNCTION__); printk(KERN_WARNING "PCI: Falling back to default host bridge resources\n"); for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { @@ -148,6 +203,7 @@ pcibios_setup_root_windows(struct pci_bu bus->resource[i] = bres[i]; } } + dump_bridge_resources(bus); } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |