Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/powerpc/oea parse G5 device paths



details:   https://anonhg.NetBSD.org/src/rev/0d6621a804b8
branches:  trunk
changeset: 365488:0d6621a804b8
user:      macallan <macallan%NetBSD.org@localhost>
date:      Fri Aug 17 15:54:35 2018 +0000

description:
parse G5 device paths

diffstat:

 sys/arch/powerpc/oea/ofw_autoconf.c |  39 +++++++++++++++++++++++++++++++-----
 1 files changed, 33 insertions(+), 6 deletions(-)

diffs (106 lines):

diff -r e09f4516a216 -r 0d6621a804b8 sys/arch/powerpc/oea/ofw_autoconf.c
--- a/sys/arch/powerpc/oea/ofw_autoconf.c       Fri Aug 17 14:47:21 2018 +0000
+++ b/sys/arch/powerpc/oea/ofw_autoconf.c       Fri Aug 17 15:54:35 2018 +0000
@@ -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 @@
                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 @@
                    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 @@
         * 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 @@
 
        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 @@
 
                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;



Home | Main Index | Thread Index | Old Index