From: Benjamin Herrenschmidt ppc64 has a global called "pci_probe_only" which, when set, prevents the arch PCI code from calling pci_assign_unassigned_resources(). This was cleared by pmac so far, but a bug in the definition of the variable make that ineffective until 2.6.10, and so we never called pci_assign_unassigned_resources(). With 2.6.10, that bug was fixed and so we now call it, which results in some problems. Some devices who have perfectly valid assigned addresses by firmware end up beeing moved around anyway, which is a BAD thing can can break boot on some machines since it breaks the relationship between addresses in Open Firmware device-tree and actual location of PCI devices. (Some low level things like the PIC are ioremap'ed based on their OF address, way before the PCI based ASIC hosting them has been found). This also break the "offb" default framebuffer driver since the video card ends up beeing moved around as well. For now, the fix is to set pci_probe_only on pmac, thus reverting to the old behaviour. In the long run, it would be interesting to "fix" pci_assign_unassigned_resources() so that it does what it's name claims, and only assigns things that have been left unassigned instead of moving things around gratuituously... Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Andrew Morton --- 25-akpm/arch/ppc64/kernel/pmac_pci.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff -puN arch/ppc64/kernel/pmac_pci.c~ppc64-workaround-pci-issue-on-g5 arch/ppc64/kernel/pmac_pci.c --- 25/arch/ppc64/kernel/pmac_pci.c~ppc64-workaround-pci-issue-on-g5 Thu Dec 9 14:22:19 2004 +++ 25-akpm/arch/ppc64/kernel/pmac_pci.c Thu Dec 9 14:22:19 2004 @@ -739,8 +739,8 @@ void __init pmac_pci_init(void) pmac_check_ht_link(); - /* Tell pci.c to use the common resource allocation mecanism */ - pci_probe_only = 0; + /* Tell pci.c to not use the common resource allocation mecanism */ + pci_probe_only = 1; /* Allow all IO */ io_page_mask = -1; _