[U-Boot] FDT: alignment of 64-bits integers
sjg at chromium.org
Fri Sep 27 01:48:53 UTC 2019
On Fri, 20 Sep 2019 at 09:18, Jean-Jacques Hiblot <jjhiblot at ti.com> wrote:
> Hi Simon,
> while working with the FDT in the SPL, I came across an alignment issue.
> I have seen 64-bits integers not aligned on a 64-bit boundary, although
> is doesn't happen very often. According to the FDT spec, the requirement
> is to be aligned on 32-bits, so it is OK.
> However on ARM64, until the cache is enabled, it is not possible to
> access 64-bits integers not aligned on a 64-bits boundary. This issue
> has been discussed here :
> I have a patch for this but I am not sure, this is the right approach:
> diff --git a/include/linux/libfdt_env.h b/include/linux/libfdt_env.h
> index e2bf79c7ee..b6b7176a8a 100644
> --- a/include/linux/libfdt_env.h
> +++ b/include/linux/libfdt_env.h
> @@ -15,7 +15,7 @@
> typedef __be16 fdt16_t;
> typedef __be32 fdt32_t;
> -typedef __be64 fdt64_t;
> +typedef __be64 fdt64_t __aligned(4);
> The trouble with this patch is that for every fdt64_t the access will be
> aligned on 32-bits, inducing an overall performance penalty.
> The other approach will be to fix the problem where it happens. So far
> I had the issue only ofnode_read_u64() because that is what the driver I
> worked with is using.
> What do you think?
Probably if you can fix it in the ofnode function that would be more efficient.
For some reason this shows up with a 'corrupt patch' error when I try
to apply it.
More information about the U-Boot