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 : http://u-boot.10912.n7.nabble.com/memcpy-memset-on-arm64-platforms-td353928.html#a354348

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?


Thanks,

JJ




_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to