diff options
author | jchandra <jchandra@FreeBSD.org> | 2011-12-02 15:24:39 +0000 |
---|---|---|
committer | jchandra <jchandra@FreeBSD.org> | 2011-12-02 15:24:39 +0000 |
commit | e5b89f2d70c0092ae178473393348aa3de7e2745 (patch) | |
tree | 282cdd7ec20de7056adfd64b8aed0bd16d32eb50 /sys/dev | |
parent | 9be1bfa322fff9a906d73bb1d09940d86d489415 (diff) | |
download | FreeBSD-src-e5b89f2d70c0092ae178473393348aa3de7e2745.zip FreeBSD-src-e5b89f2d70c0092ae178473393348aa3de7e2745.tar.gz |
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
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/fdt/fdt_common.c | 6 | ||||
-rw-r--r-- | sys/dev/fdt/fdt_powerpc.c | 2 | ||||
-rw-r--r-- | sys/dev/fdt/fdtbus.c | 2 | ||||
-rw-r--r-- | sys/dev/ofw/ofw_fdt.c | 4 | ||||
-rw-r--r-- | sys/dev/ofw/openfirm.c | 2 | ||||
-rw-r--r-- | sys/dev/uart/uart_bus_fdt.c | 4 |
6 files changed, 11 insertions, 9 deletions
diff --git a/sys/dev/fdt/fdt_common.c b/sys/dev/fdt/fdt_common.c index d25715b..8702df2 100644 --- a/sys/dev/fdt/fdt_common.c +++ b/sys/dev/fdt/fdt_common.c @@ -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 *mr, int *mrcnt, uint32_t *memsize) max_size = sizeof(reg); memory = OF_finddevice("/memory"); - if (memory <= 0) { + if (memory == -1) { rv = ENXIO; goto out; } diff --git a/sys/dev/fdt/fdt_powerpc.c b/sys/dev/fdt/fdt_powerpc.c index ea614db..ac81c08 100644 --- a/sys/dev/fdt/fdt_powerpc.c +++ b/sys/dev/fdt/fdt_powerpc.c @@ -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) diff --git a/sys/dev/fdt/fdtbus.c b/sys/dev/fdt/fdtbus.c index a2530cd..50db7cd 100644 --- a/sys/dev/fdt/fdtbus.c +++ b/sys/dev/fdt/fdtbus.c @@ -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); diff --git a/sys/dev/ofw/ofw_fdt.c b/sys/dev/ofw/ofw_fdt.c index 806f17c..7b3b0e9 100644 --- a/sys/dev/ofw/ofw_fdt.c +++ b/sys/dev/ofw/ofw_fdt.c @@ -392,6 +392,8 @@ ofw_fdt_finddevice(ofw_t ofw, const char *device) 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) diff --git a/sys/dev/ofw/openfirm.c b/sys/dev/ofw/openfirm.c index 9ff72df..af6ee80 100644 --- a/sys/dev/ofw/openfirm.c +++ b/sys/dev/ofw/openfirm.c @@ -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; diff --git a/sys/dev/uart/uart_bus_fdt.c b/sys/dev/uart/uart_bus_fdt.c index f8204b1..8088db4 100644 --- a/sys/dev/uart/uart_bus_fdt.c +++ b/sys/dev/uart/uart_bus_fdt.c @@ -155,11 +155,11 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di) /* * 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); |