Author: nwhitehorn
Date: Mon Sep  9 12:54:08 2013
New Revision: 255420
URL: http://svnweb.freebsd.org/changeset/base/255420

Log:
  Attach only on hardware that is actually supported as opposed to hardware
  that seems like it has some of the problems we might want.
  
  Approved by:  re (kib)

Modified:
  head/sys/powerpc/ofw/ofw_syscons.c
  head/sys/powerpc/powermac/platform_powermac.c

Modified: head/sys/powerpc/ofw/ofw_syscons.c
==============================================================================
--- head/sys/powerpc/ofw/ofw_syscons.c  Mon Sep  9 12:52:34 2013        
(r255419)
+++ head/sys/powerpc/ofw/ofw_syscons.c  Mon Sep  9 12:54:08 2013        
(r255420)
@@ -218,6 +218,7 @@ ofwfb_configure(int flags)
         ihandle_t stdout;
        phandle_t node;
        uint32_t fb_phys;
+       ssize_t proplen;
        int depth;
        int disable;
        int len;
@@ -264,12 +265,21 @@ ofwfb_configure(int flags)
        } else
                return (0);
 
+       if (OF_getproplen(node, "height") != sizeof(sc->sc_height) ||
+           OF_getproplen(node, "width") != sizeof(sc->sc_width))
+               return (0);
+
        sc->sc_depth = depth;
        sc->sc_node = node;
        sc->sc_console = 1;
+       sc->sc_stride = -1;
        OF_getprop(node, "height", &sc->sc_height, sizeof(sc->sc_height));
        OF_getprop(node, "width", &sc->sc_width, sizeof(sc->sc_width));
-       OF_getprop(node, "linebytes", &sc->sc_stride, sizeof(sc->sc_stride));
+       proplen = OF_getprop(node, "linebytes", &sc->sc_stride,
+           sizeof(sc->sc_stride));
+       if (proplen != sizeof(sc->sc_stride) ||
+           sc->sc_stride < sc->sc_width*sc->sc_depth/4)
+               sc->sc_stride = sc->sc_width*sc->sc_depth/4;
 
        /*
         * Grab the physical address of the framebuffer, and then map it
@@ -278,6 +288,8 @@ ofwfb_configure(int flags)
         *
         * XXX We assume #address-cells is 1 at this point.
         */
+       if (OF_getproplen(node, "address") != sizeof(fb_phys))
+               return (0);
        OF_getprop(node, "address", &fb_phys, sizeof(fb_phys));
 
        bus_space_map(&bs_be_tag, fb_phys, sc->sc_height * sc->sc_stride,

Modified: head/sys/powerpc/powermac/platform_powermac.c
==============================================================================
--- head/sys/powerpc/powermac/platform_powermac.c       Mon Sep  9 12:52:34 
2013        (r255419)
+++ head/sys/powerpc/powermac/platform_powermac.c       Mon Sep  9 12:54:08 
2013        (r255420)
@@ -91,8 +91,22 @@ PLATFORM_DEF(powermac_platform);
 static int
 powermac_probe(platform_t plat)
 {
-       if (OF_finddevice("/memory") != -1 || OF_finddevice("/memory@0") != -1)
-               return (BUS_PROBE_GENERIC);
+       char compat[255];
+       ssize_t compatlen;
+       char *curstr;
+       phandle_t root;
+
+       root = OF_peer(0);
+       if (root == 0)
+               return (ENXIO);
+
+       compatlen = OF_getprop(root, "compatible", compat, sizeof(compat));
+       
+       for (curstr = compat; curstr < compat + compatlen;
+           curstr += strlen(curstr) + 1) {
+               if (strncmp(curstr, "MacRISC", 7) == 0)
+                       return (BUS_PROBE_SPECIFIC);
+       }
 
        return (ENXIO);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to