diff options
author | Sam Protsenko <semen.protsenko@linaro.org> | 2024-03-29 19:55:53 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2024-04-12 08:53:31 -0600 |
commit | 16b80c93e2d16d9b18f1bb1d884254281dc4bec2 (patch) | |
tree | 25e1b5d5bb527d5fb8172250a4143d5d6ef3913c /test/fs | |
parent | d2e4b2fa04cfeb71b821f9d0100d886b7f9e166c (diff) | |
download | u-boot-16b80c93e2d16d9b18f1bb1d884254281dc4bec2.tar.gz u-boot-16b80c93e2d16d9b18f1bb1d884254281dc4bec2.tar.bz2 u-boot-16b80c93e2d16d9b18f1bb1d884254281dc4bec2.zip |
fdt: Fix fdt_pack_reg() on 64-bit platforms
When "memory" node is being processed in fdt_pack_reg() on ARM64
platforms, an unaligned bus access might happen, which leads to
"synchronous abort" CPU exception. Consider next dts example:
/ {
#address-cells = <2>;
#size-cells = <1>;
memory@80000000 {
device_type = "memory";
reg = <0x0 0x80000000 0x3ab00000>,
<0x0 0xc0000000 0x40000000>,
<0x8 0x80000000 0x80000000>;
};
};
After fdt_pack_reg() reads the first addr/size entry from such memory
node, the "p" pointer becomes 12 bytes shifted from its original value
(8 bytes for two address cells + 4 bytes for one size cell). So now it's
not 64-bit aligned, and an attempt to do 64-bit bus access to that
address will cause an abort like this:
"Synchronous Abort" handler, esr 0x96000021, far 0xba235efc
This issue was originally reported by David Virag [1] who observed it
happening on Samsung Exynos7885 SoC (ARM64), and later the same issue
was observed on Samsung Exynos850 (ARM64).
Fix the issue by using put_unaligned_be64() helper, which takes care of
possible unaligned 64-bit accesses. That solution was proposed by Simon
Glass in the original thread [1].
[1] https://lists.denx.de/pipermail/u-boot/2023-July/522074.html
Fixes: 739a01ed8e02 ("fdt_support: fix an endian bug of fdt_fixup_memory_banks")
Suggested-by: Simon Glass <sjg@google.com>
Reported-by: David Virag <virag.david003@gmail.com>
Closes: https://lists.denx.de/pipermail/u-boot/2023-July/522074.html
Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'test/fs')
0 files changed, 0 insertions, 0 deletions