diff --git a/ArmVirtPkg/Library/ArmQemuRelocatablePlatformLib/FdtParser.c b/ArmVirtPkg/Library/ArmQemuRelocatablePlatformLib/FdtParser.c index 46a5fe6409..afdc81a883 100644 --- a/ArmVirtPkg/Library/ArmQemuRelocatablePlatformLib/FdtParser.c +++ b/ArmVirtPkg/Library/ArmQemuRelocatablePlatformLib/FdtParser.c @@ -65,17 +65,15 @@ FindMemnode ( return FALSE; } - if (AddressCells == 1) { - *SystemMemoryBase = fdt32_to_cpu (*Prop); - } else { - *SystemMemoryBase = fdt64_to_cpu (*(UINT64 *)Prop); + *SystemMemoryBase = fdt32_to_cpu (Prop[0]); + if (AddressCells > 1) { + *SystemMemoryBase = (*SystemMemoryBase << 32) | fdt32_to_cpu (Prop[1]); } Prop += AddressCells; - if (SizeCells == 1) { - *SystemMemorySize = fdt32_to_cpu (*Prop); - } else { - *SystemMemorySize = fdt64_to_cpu (*(UINT64 *)Prop); + *SystemMemorySize = fdt32_to_cpu (Prop[0]); + if (SizeCells > 1) { + *SystemMemorySize = (*SystemMemorySize << 32) | fdt32_to_cpu (Prop[1]); } return TRUE; diff --git a/ArmVirtPkg/Library/ArmXenRelocatablePlatformLib/FdtParser.c b/ArmVirtPkg/Library/ArmXenRelocatablePlatformLib/FdtParser.c index 992932ee97..38fd5d3ed0 100644 --- a/ArmVirtPkg/Library/ArmXenRelocatablePlatformLib/FdtParser.c +++ b/ArmVirtPkg/Library/ArmXenRelocatablePlatformLib/FdtParser.c @@ -65,17 +65,15 @@ FindMemnode ( return FALSE; } - if (AddressCells == 1) { - *SystemMemoryBase = fdt32_to_cpu (*Prop); - } else { - *SystemMemoryBase = fdt64_to_cpu (*(UINT64 *)Prop); + *SystemMemoryBase = fdt32_to_cpu (Prop[0]); + if (AddressCells > 1) { + *SystemMemoryBase = (*SystemMemoryBase << 32) | fdt32_to_cpu (Prop[1]); } Prop += AddressCells; - if (SizeCells == 1) { - *SystemMemorySize = fdt32_to_cpu (*Prop); - } else { - *SystemMemorySize = fdt64_to_cpu (*(UINT64 *)Prop); + *SystemMemorySize = fdt32_to_cpu (Prop[0]); + if (SizeCells > 1) { + *SystemMemorySize = (*SystemMemorySize << 32) | fdt32_to_cpu (Prop[1]); } return TRUE;