diff options
author | Eugeniu Rosca <erosca@de.adit-jv.com> | 2019-04-01 12:52:52 +0200 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2019-04-23 20:26:43 -0600 |
commit | 62392675cdea46ca38a4d2b9be2c82e29b3b6da3 (patch) | |
tree | 68ac73ec569bca62e24218d12d1cd18dc0bfea55 /common | |
parent | 18b8f2c49e9b0620caf5b661986c01c575e29b9b (diff) | |
download | u-boot-62392675cdea46ca38a4d2b9be2c82e29b3b6da3.tar.gz u-boot-62392675cdea46ca38a4d2b9be2c82e29b3b6da3.tar.bz2 u-boot-62392675cdea46ca38a4d2b9be2c82e29b3b6da3.zip |
fdt: boot_get_fdt: android: use ENV 'fdtaddr' as fallback
Our platform doesn't store the DTB into the Android image second area,
but rather copies the DTB to RAM from a dedicated dtb.img partition [0],
prior to booting the Android image by calling bootm.
Similar to [1], we find it useful to just call 'bootm' and have the
right DTB being passed to OS (assuming its address has been previously
stored in 'fdtaddr' by calling `fdt addr <dtb-addr>`).
Booting Android with DTB from 'fdtaddr' will only occur if:
- No DTB is embedded in the second area of Android image
- 'fdtaddr' points to a valid DTB in RAM
[0] https://source.android.com/devices/architecture/dto/partitions
[1] https://patchwork.ozlabs.org/patch/1046652/
("Support boot Android image without address on bootm command")
Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common')
-rw-r--r-- | common/image-fdt.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/common/image-fdt.c b/common/image-fdt.c index a5d8b41d02..3aa5ffff0f 100644 --- a/common/image-fdt.c +++ b/common/image-fdt.c @@ -469,7 +469,15 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, debug("## Using FDT in Android image second area\n"); } else { - goto no_fdt; + fdt_addr = env_get_hex("fdtaddr", 0); + if (!fdt_addr) + goto no_fdt; + + fdt_blob = map_sysmem(fdt_addr, 0); + if (fdt_check_header(fdt_blob)) + goto no_fdt; + + debug("## Using FDT at ${fdtaddr}=Ox%lx\n", fdt_addr); } #endif } else { |