Hi Jean-Jacques, On Fri, 20 Sep 2019 at 09:18, Jean-Jacques Hiblot <jjhib...@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 : > 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?
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. Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot