summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlivier Martin <olivier.martin@arm.com>2014-12-12 19:15:37 +0000
committeroliviermartin <oliviermartin@Edk2>2014-12-12 19:15:37 +0000
commit85774874bcd13dba0ed8886ab5eb36b1ccdc44c1 (patch)
treef742a0a76ff163a882eaf0682bf9f133b6959779
parent061568e2d5f21aeafa942891b15768c57fa0ffac (diff)
downloadedk2-85774874bcd13dba0ed8886ab5eb36b1ccdc44c1.tar.gz
edk2-85774874bcd13dba0ed8886ab5eb36b1ccdc44c1.tar.bz2
edk2-85774874bcd13dba0ed8886ab5eb36b1ccdc44c1.zip
ArmPkg/BdsLib: Update the size of the Device Tree before booting Linux
The memory reserved to load the device tree is over-allocated when UEFI loads the blob to update the device tree with additional information such as the command line, the initrd, etc. This change ensures the total size declared by the device tree matches the actual data (and not the over-allocated size value). Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16517 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r--ArmPkg/Library/BdsLib/BdsLinuxFdt.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/ArmPkg/Library/BdsLib/BdsLinuxFdt.c b/ArmPkg/Library/BdsLib/BdsLinuxFdt.c
index fb7bd5646e..e3795527f2 100644
--- a/ArmPkg/Library/BdsLib/BdsLinuxFdt.c
+++ b/ArmPkg/Library/BdsLib/BdsLinuxFdt.c
@@ -554,6 +554,9 @@ PrepareFdt (
// If we succeeded to generate the new Device Tree then free the old Device Tree
gBS->FreePages (*FdtBlobBase, EFI_SIZE_TO_PAGES (*FdtBlobSize));
+ // Update the real size of the Device Tree
+ fdt_pack ((VOID*)(UINTN)(NewFdtBlobBase));
+
*FdtBlobBase = NewFdtBlobBase;
*FdtBlobSize = (UINTN)fdt_totalsize ((VOID*)(UINTN)(NewFdtBlobBase));
return EFI_SUCCESS;