Module Name: src Committed By: macallan Date: Fri Aug 17 15:54:35 UTC 2018
Modified Files: src/sys/arch/powerpc/oea: ofw_autoconf.c Log Message: parse G5 device paths To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 src/sys/arch/powerpc/oea/ofw_autoconf.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/powerpc/oea/ofw_autoconf.c diff -u src/sys/arch/powerpc/oea/ofw_autoconf.c:1.21 src/sys/arch/powerpc/oea/ofw_autoconf.c:1.22 --- src/sys/arch/powerpc/oea/ofw_autoconf.c:1.21 Sun Mar 4 00:21:20 2018 +++ src/sys/arch/powerpc/oea/ofw_autoconf.c Fri Aug 17 15:54:35 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: ofw_autoconf.c,v 1.21 2018/03/04 00:21:20 macallan Exp $ */ +/* $NetBSD: ofw_autoconf.c,v 1.22 2018/08/17 15:54:35 macallan Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. * Copyright (C) 1995, 1996 TooLs GmbH. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ofw_autoconf.c,v 1.21 2018/03/04 00:21:20 macallan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ofw_autoconf.c,v 1.22 2018/08/17 15:54:35 macallan Exp $"); #ifdef ofppc #include "gtpci.h" @@ -231,6 +231,11 @@ device_register(device_t dev, void *aux) return; } + /* skip over CPUs */ + if (device_is_a(dev, "cpu")) { + return; + } + if (device_is_a(dev, "valkyriefb")) { struct confargs *ca = aux; prop_dictionary_t dict; @@ -306,7 +311,10 @@ device_register(device_t dev, void *aux) CACHELINESIZE); } #endif - if (device_is_a(dev, "atapibus") || device_is_a(dev, "pci") || + if (device_is_a(dev, "atapibus") || +#ifndef PMAC_G5 + device_is_a(dev, "pci") || +#endif device_is_a(dev, "scsibus") || device_is_a(dev, "atabus")) return; @@ -379,13 +387,17 @@ device_register(device_t dev, void *aux) * Skip over devices that are really just layers of NetBSD * autoconf(9) we should just skip as they do not have any * OFW devices. + * XXX except on G5, where we have /ht/pci* instead of /pci* */ if (device_is_a(device_parent(dev), "atapibus") || device_is_a(device_parent(dev), "atabus") || +#ifndef PMAC_G5 device_is_a(device_parent(dev), "pci") || +#endif device_is_a(device_parent(dev), "scsibus")) { - if (device_parent(device_parent(dev)) != parent) + if (device_parent(device_parent(dev)) != parent) { return; + } } else { if (device_parent(dev) != parent) return; @@ -416,13 +428,14 @@ device_register(device_t dev, void *aux) if (device_is_a(device_parent(dev), "mainbus")) { struct confargs *ca = aux; - if (strcmp(ca->ca_name, "ofw") == 0) /* XXX */ return; if (strcmp(ca->ca_name, "gt") == 0) parent = dev; if (addr != ca->ca_reg[0]) return; + if (addr2 != 0 && addr2 != ca->ca_reg[1]) + return; } else if (device_is_a(device_parent(dev), "gt")) { /* * Special handle for MV64361 on PegasosII(ofppc). @@ -477,13 +490,27 @@ device_register(device_t dev, void *aux) if (addr != adev->adev_drv_data->drive) return; + } else if (device_is_a(dev, "pci")) { + if (addr != device_unit(dev)) + return; + } else if (device_is_a(device_parent(dev), "atabus")) { + /* + * XXX + * on svwsata this is the channel number and we ignore the + * drive number which is always 0 anyway + * needs to be revisited for other (S)ATA cards + */ + struct ata_device *adev = aux; + if (addr != adev->adev_channel) + return; + /* we have our match, cut off the rest */ + if (p) *p = 0; } else return; /* If we reach this point, then dev is a match for the current * path component. */ - if (p && *p) { parent = dev; cp = p;