diff --git a/src/system/boot/platform/openfirmware/arch/sparc/mmu.cpp b/src/system/boot/platform/openfirmware/arch/sparc/mmu.cpp index 28a70272d3..8b61d21c62 100644 --- a/src/system/boot/platform/openfirmware/arch/sparc/mmu.cpp +++ b/src/system/boot/platform/openfirmware/arch/sparc/mmu.cpp @@ -80,14 +80,19 @@ find_physical_memory_ranges(size_t &total) // #address-cells and #size-cells matches the number of 32-bit 'cells' // representing the length of the base address and size fields intptr_t root = of_finddevice("/"); - int32 regAddressCells = of_address_cells(root); int32 regSizeCells = of_size_cells(root); - if (regAddressCells == OF_FAILED || regSizeCells == OF_FAILED) { - dprintf("finding base/size length counts failed, assume 32-bit.\n"); - regAddressCells = 1; + if (regSizeCells == OF_FAILED) { + dprintf("finding size of memory cells failed, assume 32-bit.\n"); regSizeCells = 1; } + int32 regAddressCells = of_address_cells(root); + if (regAddressCells == OF_FAILED) { + // Sun Netra T1-105 is missing this, but we can guess that if the size + // is 64bit, the address also likely is. + regAddressCells = regSizeCells; + } + if (regAddressCells != 2 || regSizeCells != 2) { panic("%s: Unsupported OpenFirmware cell count detected.\n" "Address Cells: %" B_PRId32 "; Size Cells: %" B_PRId32