Author: jchandra
Date: Fri Dec  2 15:24:39 2011
New Revision: 228201
URL: http://svn.freebsd.org/changeset/base/228201

Log:
  Fix OF_finddevice error return value in case of FDT.
  
  According to the open firmware standard, finddevice call has to return
  a phandle with value of -1 in case of error.
  
  This commit is to:
  - Fix the FDT implementation of this interface (ofw_fdt_finddevice) to
    return (phandle_t)-1 in case of error, instead of 0 as it does now.
  - Fix up the callers of OF_finddevice() to compare the return value with
    -1 instead of 0 to check for errors.
  - Since phandle_t is unsigned, the return value of OF_finddevice should
    be checked with '== -1' rather than '<= 0' or '> 0', fix up these cases
    as well.
  
  Reported by:  nwhitehorn
  
  Reviewed by:  raj
  Approved by:  raj, nwhitehorn

Modified:
  head/sys/arm/mv/common.c
  head/sys/arm/mv/mv_machdep.c
  head/sys/dev/fdt/fdt_common.c
  head/sys/dev/fdt/fdt_powerpc.c
  head/sys/dev/fdt/fdtbus.c
  head/sys/dev/ofw/ofw_fdt.c
  head/sys/dev/ofw/openfirm.c
  head/sys/dev/uart/uart_bus_fdt.c
  head/sys/powerpc/booke/platform_bare.c
  head/sys/powerpc/powermac/platform_powermac.c
  head/sys/sparc64/sparc64/ofw_machdep.c
  head/sys/sparc64/sparc64/vm_machdep.c

Modified: head/sys/arm/mv/common.c
==============================================================================
--- head/sys/arm/mv/common.c    Fri Dec  2 12:52:33 2011        (r228200)
+++ head/sys/arm/mv/common.c    Fri Dec  2 15:24:39 2011        (r228201)
@@ -1693,7 +1693,7 @@ fdt_get_ranges(const char *nodename, voi
        int len, tuple_size, tuples_count;
 
        node = OF_finddevice(nodename);
-       if (node <= 0)
+       if (node == -1)
                return (EINVAL);
 
        if ((fdt_addrsize_cells(node, &addr_cells, &size_cells)) != 0)
@@ -1762,11 +1762,11 @@ win_cpu_from_dt(void)
        /*
         * Retrieve CESA SRAM data.
         */
-       if ((node = OF_finddevice("sram")) != 0)
+       if ((node = OF_finddevice("sram")) != -1)
                if (fdt_is_compatible(node, "mrvl,cesa-sram"))
                        goto moveon;
 
-       if ((node = OF_finddevice("/")) == 0)
+       if ((node = OF_finddevice("/")) != -1)
                return (ENXIO);
 
        if ((node = fdt_find_compatible(node, "mrvl,cesa-sram", 0)) == 0)
@@ -1796,7 +1796,7 @@ fdt_win_setup(void)
        int err, i;
 
        node = OF_finddevice("/");
-       if (node == 0)
+       if (node == -1)
                panic("fdt_win_setup: no root node");
 
        node = fdt_find_compatible(node, "simple-bus", 1);

Modified: head/sys/arm/mv/mv_machdep.c
==============================================================================
--- head/sys/arm/mv/mv_machdep.c        Fri Dec  2 12:52:33 2011        
(r228200)
+++ head/sys/arm/mv/mv_machdep.c        Fri Dec  2 15:24:39 2011        
(r228201)
@@ -617,13 +617,13 @@ platform_mpp_init(void)
        /*
         * Try to access the MPP node directly i.e. through /aliases/mpp.
         */
-       if ((node = OF_finddevice("mpp")) != 0)
+       if ((node = OF_finddevice("mpp")) != -1)
                if (fdt_is_compatible(node, "mrvl,mpp"))
                        goto moveon;
        /*
         * Find the node the long way.
         */
-       if ((node = OF_finddevice("/")) == 0)
+       if ((node = OF_finddevice("/")) == -1)
                return (ENXIO);
 
        if ((node = fdt_find_compatible(node, "simple-bus", 0)) == 0)
@@ -752,7 +752,7 @@ platform_devmap_init(void)
        /*
         * PCI range(s).
         */
-       if ((root = OF_finddevice("/")) == 0)
+       if ((root = OF_finddevice("/")) == -1)
                return (ENXIO);
 
        for (child = OF_child(root); child != 0; child = OF_peer(child))
@@ -779,7 +779,7 @@ platform_devmap_init(void)
        /*
         * CESA SRAM range.
         */
-       if ((child = OF_finddevice("sram")) != 0)
+       if ((child = OF_finddevice("sram")) != -1)
                if (fdt_is_compatible(child, "mrvl,cesa-sram"))
                        goto moveon;
 

Modified: head/sys/dev/fdt/fdt_common.c
==============================================================================
--- head/sys/dev/fdt/fdt_common.c       Fri Dec  2 12:52:33 2011        
(r228200)
+++ head/sys/dev/fdt/fdt_common.c       Fri Dec  2 15:24:39 2011        
(r228201)
@@ -74,13 +74,13 @@ fdt_immr_addr(vm_offset_t immr_va)
        /*
         * Try to access the SOC node directly i.e. through /aliases/.
         */
-       if ((node = OF_finddevice("soc")) != 0)
+       if ((node = OF_finddevice("soc")) != -1)
                if (fdt_is_compatible_strict(node, "simple-bus"))
                        goto moveon;
        /*
         * Find the node the long way.
         */
-       if ((node = OF_finddevice("/")) == 0)
+       if ((node = OF_finddevice("/")) == -1)
                return (ENXIO);
 
        if ((node = fdt_find_compatible(node, "simple-bus", 1)) == 0)
@@ -576,7 +576,7 @@ fdt_get_mem_regions(struct mem_region *m
 
        max_size = sizeof(reg);
        memory = OF_finddevice("/memory");
-       if (memory <= 0) {
+       if (memory == -1) {
                rv = ENXIO;
                goto out;
        }

Modified: head/sys/dev/fdt/fdt_powerpc.c
==============================================================================
--- head/sys/dev/fdt/fdt_powerpc.c      Fri Dec  2 12:52:33 2011        
(r228200)
+++ head/sys/dev/fdt/fdt_powerpc.c      Fri Dec  2 15:24:39 2011        
(r228201)
@@ -62,7 +62,7 @@ fdt_fixup_busfreq(phandle_t root)
         * This fixup uses /cpus/ bus-frequency prop value to set simple-bus
         * bus-frequency property.
         */
-       if ((cpus = OF_finddevice("/cpus")) == 0)
+       if ((cpus = OF_finddevice("/cpus")) == -1)
                return;
 
        if ((child = OF_child(cpus)) == 0)

Modified: head/sys/dev/fdt/fdtbus.c
==============================================================================
--- head/sys/dev/fdt/fdtbus.c   Fri Dec  2 12:52:33 2011        (r228200)
+++ head/sys/dev/fdt/fdtbus.c   Fri Dec  2 15:24:39 2011        (r228201)
@@ -177,7 +177,7 @@ fdtbus_attach(device_t dev)
        u_long start, end;
        int error;
 
-       if ((root = OF_peer(0)) == 0)
+       if ((root = OF_finddevice("/")) == -1)
                panic("fdtbus_attach: no root node.");
 
        sc = device_get_softc(dev);

Modified: head/sys/dev/ofw/ofw_fdt.c
==============================================================================
--- head/sys/dev/ofw/ofw_fdt.c  Fri Dec  2 12:52:33 2011        (r228200)
+++ head/sys/dev/ofw/ofw_fdt.c  Fri Dec  2 15:24:39 2011        (r228201)
@@ -392,6 +392,8 @@ ofw_fdt_finddevice(ofw_t ofw, const char
        int offset;
 
        offset = fdt_path_offset(fdtp, device);
+       if (offset < 0)
+               return (-1);
        return (fdt_offset_phandle(offset));
 }
 
@@ -420,7 +422,7 @@ ofw_fdt_fixup(ofw_t ofw)
        ssize_t len;
        int i;
 
-       if ((root = ofw_fdt_finddevice(ofw, "/")) == 0)
+       if ((root = ofw_fdt_finddevice(ofw, "/")) == -1)
                return (ENODEV);
 
        if ((len = ofw_fdt_getproplen(ofw, root, "model")) <= 0)

Modified: head/sys/dev/ofw/openfirm.c
==============================================================================
--- head/sys/dev/ofw/openfirm.c Fri Dec  2 12:52:33 2011        (r228200)
+++ head/sys/dev/ofw/openfirm.c Fri Dec  2 15:24:39 2011        (r228201)
@@ -131,7 +131,7 @@ OF_init(void *cookie)
 
        rv = OFW_INIT(ofw_obj, cookie);
 
-       if ((chosen = OF_finddevice("/chosen")) > 0)
+       if ((chosen = OF_finddevice("/chosen")) != -1)
                if (OF_getprop(chosen, "stdout", &stdout, sizeof(stdout)) == -1)
                        stdout = -1;
 

Modified: head/sys/dev/uart/uart_bus_fdt.c
==============================================================================
--- head/sys/dev/uart/uart_bus_fdt.c    Fri Dec  2 12:52:33 2011        
(r228200)
+++ head/sys/dev/uart/uart_bus_fdt.c    Fri Dec  2 15:24:39 2011        
(r228201)
@@ -155,11 +155,11 @@ uart_cpu_getdev(int devtype, struct uart
        /*
         * Retrieve /chosen/std{in,out}.
         */
-       if ((chosen = OF_finddevice("/chosen")) == 0)
+       if ((chosen = OF_finddevice("/chosen")) == -1)
                return (ENXIO);
        if (OF_getprop(chosen, "stdin", buf, sizeof(buf)) <= 0)
                return (ENXIO);
-       if ((node = OF_finddevice(buf)) == 0)
+       if ((node = OF_finddevice(buf)) == -1)
                return (ENXIO);
        if (OF_getprop(chosen, "stdout", buf, sizeof(buf)) <= 0)
                return (ENXIO);

Modified: head/sys/powerpc/booke/platform_bare.c
==============================================================================
--- head/sys/powerpc/booke/platform_bare.c      Fri Dec  2 12:52:33 2011        
(r228200)
+++ head/sys/powerpc/booke/platform_bare.c      Fri Dec  2 15:24:39 2011        
(r228201)
@@ -189,7 +189,7 @@ bare_timebase_freq(platform_t plat, stru
        } else
                ticks = 0;
 
-       if ((cpus = OF_finddevice("/cpus")) == 0)
+       if ((cpus = OF_finddevice("/cpus")) == -1)
                goto out;
 
        if ((child = OF_child(cpus)) == 0)

Modified: head/sys/powerpc/powermac/platform_powermac.c
==============================================================================
--- head/sys/powerpc/powermac/platform_powermac.c       Fri Dec  2 12:52:33 
2011        (r228200)
+++ head/sys/powerpc/powermac/platform_powermac.c       Fri Dec  2 15:24:39 
2011        (r228201)
@@ -163,7 +163,7 @@ powermac_smp_first_cpu(platform_t plat, 
                 * but it can be found directly
                 */
                dev = OF_finddevice("/cpus");
-               if (dev == 0)
+               if (dev == -1)
                        return (ENOENT);
        }
 
@@ -209,7 +209,7 @@ powermac_smp_get_bsp(platform_t plat, st
        int res;
 
        chosen = OF_finddevice("/chosen");
-       if (chosen == 0)
+       if (chosen == -1)
                return (ENXIO);
 
        res = OF_getprop(chosen, "cpu", &inst, sizeof(inst));

Modified: head/sys/sparc64/sparc64/ofw_machdep.c
==============================================================================
--- head/sys/sparc64/sparc64/ofw_machdep.c      Fri Dec  2 12:52:33 2011        
(r228200)
+++ head/sys/sparc64/sparc64/ofw_machdep.c      Fri Dec  2 15:24:39 2011        
(r228201)
@@ -52,7 +52,7 @@ OF_getetheraddr(device_t dev, u_char *ad
        phandle_t node;
        struct idprom idp;
 
-       if ((node = OF_finddevice("/options")) > 0 &&
+       if ((node = OF_finddevice("/options")) != -1 &&
            OF_getprop(node, "local-mac-address?", buf, sizeof(buf)) > 0) {
                buf[sizeof(buf) - 1] = '\0';
                if (strcmp(buf, "true") == 0 &&

Modified: head/sys/sparc64/sparc64/vm_machdep.c
==============================================================================
--- head/sys/sparc64/sparc64/vm_machdep.c       Fri Dec  2 12:52:33 2011        
(r228200)
+++ head/sys/sparc64/sparc64/vm_machdep.c       Fri Dec  2 15:24:39 2011        
(r228201)
@@ -368,7 +368,7 @@ cpu_reset(void)
                (cell_t)bspec
        };
 
-       if ((chosen = OF_finddevice("/chosen")) != 0) {
+       if ((chosen = OF_finddevice("/chosen")) != -1) {
                if (OF_getprop(chosen, "bootpath", bspec, sizeof(bspec)) == -1)
                        bspec[0] = '\0';
                bspec[sizeof(bspec) - 1] = '\0';
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to