Module Name: src Committed By: macallan Date: Mon Mar 17 08:23:13 UTC 2025
Modified Files: src/sys/arch/macppc/macppc: rbus_machdep.c Log Message: when looking for the cardbus bridge's memory range: - check 'reserved-segment' first, all core99 machines should have it - if that fails, look at 'assigned-addresses' which has the range on older OF, notably the 3400c - if that doesn't return anything useful, fall back to the default should fix PR59176 To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/sys/arch/macppc/macppc/rbus_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/macppc/macppc/rbus_machdep.c diff -u src/sys/arch/macppc/macppc/rbus_machdep.c:1.20 src/sys/arch/macppc/macppc/rbus_machdep.c:1.21 --- src/sys/arch/macppc/macppc/rbus_machdep.c:1.20 Mon Mar 17 07:39:55 2025 +++ src/sys/arch/macppc/macppc/rbus_machdep.c Mon Mar 17 08:23:13 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: rbus_machdep.c,v 1.20 2025/03/17 07:39:55 macallan Exp $ */ +/* $NetBSD: rbus_machdep.c,v 1.21 2025/03/17 08:23:13 macallan Exp $ */ /* * Copyright (c) 1999 @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rbus_machdep.c,v 1.20 2025/03/17 07:39:55 macallan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rbus_machdep.c,v 1.21 2025/03/17 08:23:13 macallan Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -74,22 +74,40 @@ md_space_unmap(bus_space_tag_t t, bus_sp rbus_tag_t rbus_pccbb_parent_mem(struct pci_attach_args *pa) { - bus_addr_t start; - bus_size_t size; + bus_addr_t start = 0; + bus_size_t size = 0; int node, reg[5]; macppc_cardbus_init(pa->pa_pc, pa->pa_tag); node = pcidev_to_ofdev(pa->pa_pc, pa->pa_tag); - OF_getprop(node, "assigned-addresses", reg, sizeof(reg)); - start = reg[2]; - size = reg[4]; - - /* XXX PowerBook G3 */ - if (size < 0x10000) { - start = 0x90000000; - size = 0x10000000; + /* + * the Powerbook 3400c has the cardbus controller's memory space in + * 'assigned-addresses', at 0xa0000000. Core99 machines do not, they + * have 'reserved-segment' instead, which points at 0x90000000 on + * my Pismo, TiBook and AluBook. + * This leaves the older G3 Powerbooks with pre-3.0 OF, I suspect they + * behave like the 3400c. + */ + + /* first we look for 'reserved-segment' */ + if (OF_getprop(node, "reserved-segment", &start, 4) == 4) { + size = 0x10000000; + printf("found reserved-segment %08x\n", start); + } else { + /* if that fails look at assigned-addresses */ + OF_getprop(node, "assigned-addresses", reg, sizeof(reg)); + /* see if the range is big enough */ + if (reg[4] < 0x10000) { + /* nope, use the default */ + start = 0x90000000; + size = 0x10000000; + } else { + start = reg[2]; + size = reg[4]; + printf("found assigned-addresses %08x\n", start); + } } return rbus_new_root_delegate(pa->pa_memt, start, size, 0);