On Wed, 28 Apr 2021 at 18:00, Nikita Ermakov <arei@xxxxxxxxxxxx> wrote: > > On Tue, 27 Apr 2021 at 15:43, Ard Biesheuvel <ardb@xxxxxxxxxx> wrote: > > > > On Tue, 27 Apr 2021 at 14:07, Nikita Ermakov <arei@xxxxxxxxxxxx> wrote: > > > > > > Try to get the base of the DRAM from a DTB to use it as a lowest address > > > in physical memory to relocate the kernel. If it is not possible to > > > obtain the base from a /memory node of the DTB let's make an assumption > > > that the DRAM base at the beginning of the memory. > > > > > > > Why? > > > > You right, this patch is useless. I made it because I overlooked > efi_low_alloc_above() in libstub/relocate.c > Sorry for bothering. > > I had an issue with booting a Linux kernel with EFI stub on a HiFive > Unleashed board. > My boot chain was as follows: ZSBL -> FSBL -> OpenSBI -> U-Boot > (bootefi) -> Linux > When I tried to boot the kernel, U-Boot throws an Store/AMO access > fault exception. > I checked the riscv-stub.c and libstub/relocate.c and I thought that > it tries to relocate the kernel at the 2 MiB. > With this patch the kernel started to boot and I thought that the > theory was right. > But, after further investigation I found out that U-Boot EFI does not > mark the first 4 KiB page of DRAM as EFI_BOOT_SERVICE_DATA on the > board and efi_low_alloc_above() allocates this region as conventional > memory. The lowest region of DRAM is protected and that is why I got > the exception when the kernel tries to relocate to the 0x80000000. The > reason why U-Boot EFI does not mark the first 4 KiB of DRAM as > EFI_BOOT_SERVICE_DATA was that there wasn't /reserved-memory node in a > DTB. I had the FSBL with a patch which enables an entire L2 cache and > it does not preserve a0, a1 registers before a jump to the OpenSBI. > So, OpenSBI didn't fixup the DTB where it adds the /reserved-memory > node. > OK, thanks for the explanation. I will disregard this patch then.