Index: fdt_common.c =================================================================== --- fdt_common.c (revision 239938) +++ fdt_common.c (working copy) @@ -269,10 +269,13 @@ fdt_parent_addr_cells(phandle_t node) /* Find out #address-cells of the superior bus. */ if (OF_searchprop(OF_parent(node), "#address-cells", &addr_cells, - sizeof(addr_cells)) <= 0) + sizeof(addr_cells)) <= 0) { addr_cells = 2; + } else { + addr_cells = fdt32_to_cpu(addr_cells); + } - return ((int)fdt32_to_cpu(addr_cells)); + return ((int)addr_cells); } int @@ -322,16 +325,22 @@ fdt_addrsize_cells(phandle_t node, int *addr_cells * Retrieve #{address,size}-cells. */ cell_size = sizeof(cell); - if (OF_getprop(node, "#address-cells", &cell, cell_size) < cell_size) - cell = 2; - *addr_cells = fdt32_to_cpu((int)cell); + if (OF_getprop(node, "#address-cells", &cell, cell_size) < cell_size) { + *addr_cells = 2; + } else { + *addr_cells = fdt32_to_cpu((int)cell); + if (*addr_cells > 3) + return (ERANGE); + } - if (OF_getprop(node, "#size-cells", &cell, cell_size) < cell_size) - cell = 1; - *size_cells = fdt32_to_cpu((int)cell); + if (OF_getprop(node, "#size-cells", &cell, cell_size) < cell_size) { + *size_cells = 1; + } else { + *size_cells = fdt32_to_cpu((int)cell); + if (*size_cells > 2) + return (ERANGE); + } - if (*addr_cells > 3 || *size_cells > 2) - return (ERANGE); return (0); } @@ -523,8 +532,7 @@ fdt_intr_to_rl(phandle_t node, struct resource_lis sizeof(intr_cells)) <= 0) { debugf("no intr-cells defined, defaulting to 1\n"); intr_cells = 1; - } - else + } else intr_cells = fdt32_to_cpu(intr_cells); intr_num = OF_getprop_alloc(node, "interrupts", Index: fdt_pci.c =================================================================== --- fdt_pci.c (revision 239333) +++ fdt_pci.c (working copy) @@ -202,8 +202,9 @@ fdt_interrupt_cells(phandle_t node) sizeof(intr_cells)) <= 0) { debugf("no intr-cells defined, defaulting to 1\n"); intr_cells = 1; + } else { + intr_cells = fdt32_to_cpu(intr_cells); } - intr_cells = fdt32_to_cpu(intr_cells); return ((int)intr_cells); }