On Tue, May 10, 2022 at 12:56 AM Peng Fan <peng....@nxp.com> wrote: > > > Subject: [PATCH] armv8: Fix TCR 64-bit writes > > > > The AArch64 TCR_ELx register is a 64-bit register, and many newer > > architecture > > features use bits in the upper half. So far U-Boot was igorant of those > > bits, > > trying to leave them alone. > > However, in an effort to set bit 31 to 1, it failed doing so, because the > > compiler > > sign-extended "1 << 31", so that all bits[63:31] got set. > > > > Older ARMv8.0 cores don't define anything dangerous up there, but newer > > architecture revisions do, and setting all those bits will end badly: > > ================= > > $ qemu-system-aarch64 -cpu max .... > > U-Boot 2022.07-rc1 (May 09 2022 - 15:21:00 +0100) > > > > DRAM: 1.5 GiB > > ================= (hangs here) > > > > Defining TCR_ELx_RSVD to "1U << 31" avoids the sign-extension, so all upper > > bits stay at a safe 0 value. This means no more surprises when U-Boot runs > > on a > > more capable CPU core. > > > > Reported-by: Balaji Anandapadmanaban <balaji.anandapadmana...@arm.com> > > Signed-off-by: Andre Przywara <andre.przyw...@arm.com> > > Reviewed-by: Peng Fan <peng....@nxp.com>
I ran into the same problem as you and developed the same fix. I was about to send it out before I found your patch on the list. Tested-by: Peter Collingbourne <p...@google.com> Reviewed-by: Peter Collingbourne <p...@google.com> You may also want to add: Fixes: ad3d6e88a1a4 ("armv8/mmu: Set bits marked RES1 in TCR") Peter