From: Lothar Waßmann Date: Mon, 25 Aug 2014 12:20:00 +0000 (+0200) Subject: karo: fdt: fix karo_fdt_del_prop() function X-Git-Tag: KARO-TX-2014-08-27~9 X-Git-Url: https://git.kernelconcepts.de/?p=karo-tx-uboot.git;a=commitdiff_plain;h=2ff1c867261fddde575e0858696a7bda95312862 karo: fdt: fix karo_fdt_del_prop() function Don't delete the nodes referenced by the phandle found in the designated property. --- diff --git a/board/karo/common/fdt.c b/board/karo/common/fdt.c index 24618a22eb..997239a04a 100644 --- a/board/karo/common/fdt.c +++ b/board/karo/common/fdt.c @@ -1,5 +1,5 @@ /* - * (C) Copyright 2012,2013 Lothar Waßmann + * (C) Copyright 2012-2014 Lothar Waßmann * * See file CREDITS for list of people who contributed to this * project. @@ -413,37 +413,28 @@ void karo_fdt_fixup_flexcan(void *blob, int xcvr_present) } } -void karo_fdt_del_prop(void *blob, const char *compat, phys_addr_t offs, - const char *prop) +void karo_fdt_del_prop(void *blob, const char *compat, u32 offs, + const char *propname) { - int ret; - int offset; - const uint32_t *phandle; - uint32_t ph = 0; - - offset = fdt_node_offset_by_compat_reg(blob, compat, offs); - if (offset <= 0) - return; + int offset = -1; + const fdt32_t *reg = NULL; - phandle = fdt_getprop(blob, offset, prop, NULL); - if (phandle) { - ph = fdt32_to_cpu(*phandle); - } - - debug("Removing property '%s' from node %s@%08lx\n", prop, compat, offs); - ret = fdt_delprop(blob, offset, prop); - if (ret == 0) - karo_set_fdtsize(blob); + while (1) { + offset = fdt_node_offset_by_compatible(blob, offset, compat); + if (offset <= 0) + return; - if (!ph) - return; + reg = fdt_getprop(blob, offset, "reg", NULL); + if (reg == NULL) + return; - offset = fdt_node_offset_by_phandle(blob, ph); - if (offset <= 0) - return; + if (fdt32_to_cpu(*reg) == offs) + break; + } + debug("Removing property '%s' from node %s@%x\n", + propname, compat, offs); + fdt_delprop(blob, offset, propname); - debug("Removing node @ %08x\n", offset); - fdt_del_node(blob, offset); karo_set_fdtsize(blob); } diff --git a/board/karo/common/karo.h b/board/karo/common/karo.h index fac2ecb2ce..7264df1ab7 100644 --- a/board/karo/common/karo.h +++ b/board/karo/common/karo.h @@ -30,7 +30,7 @@ void karo_fdt_fixup_touchpanel(void *blob, const char *panels[], void karo_fdt_fixup_usb_otg(void *blob, const char *node, const char *phy, const char *phy_supply); void karo_fdt_fixup_flexcan(void *blob, int xcvr_present); -void karo_fdt_del_prop(void *blob, const char *compat, phys_addr_t offs, +void karo_fdt_del_prop(void *blob, const char *compat, u32 offs, const char *prop); void karo_fdt_enable_node(void *blob, const char *node, int enable); int karo_fdt_get_fb_mode(void *blob, const char *name, @@ -59,7 +59,7 @@ static inline void karo_fdt_fixup_flexcan(void *blob, int xcvr_present) { } static inline void karo_fdt_del_prop(void *blob, const char *compat, - phys_addr_t offs, const char *prop) + u32 offs, const char *prop) { } static inline void karo_fdt_enable_node(void *blob, const char *node,