Fix bug of get_addr() in fdt_decode.c. The original description is to match the field holding "one address with no trailing data". So the if condition should be equal length: if (cell && len != sizeof(addr_t)) But it still worked fine except the lcd frame-buffer value because all other fields are somethings like: reg = <0x70006040 0x40>, not exactly one address. So this CL fixed the matching to either one address or two addresses. BUG=chrome-os-partner:5338 TEST=build without error and manually print the frame-buffer value to verify. Change-Id: I7a1a64feafc4e883f23044c1d04da09b2122ff40
diff --git a/common/fdt_decode.c b/common/fdt_decode.c index 960a2e8..57ae9ae 100644 --- a/common/fdt_decode.c +++ b/common/fdt_decode.c
@@ -66,8 +66,8 @@ /** * Look up an address property in a node and return it as an address. - * The property must hold exactly one address with no trailing data. - * This is only tested on 32-bit machines. + * The property must hold either one address with no trailing data or + * one address with a length. This is only tested on 32-bit machines. * * @param blob FDT blob * @param node node to examine @@ -80,7 +80,7 @@ int len; cell = fdt_getprop(blob, node, prop_name, &len); - if (cell && len != sizeof(addr_t)) + if (cell && (len == sizeof(addr_t) || len == sizeof(addr_t) * 2)) return addr_to_cpu(*cell); return ADDR_T_NONE; }