> Date: Tue, 21 Feb 2023 10:35:18 +0200 > From: Eugen Hristev <eugen.hris...@collabora.com> > > On 2/21/23 00:47, Mark Kettenis wrote: > >> From: Eugen Hristev <eugen.hris...@collabora.com> > >> Date: Thu, 16 Feb 2023 15:29:05 +0200 > >> > >> RK3588 has two memory gaps when using 16 GiB DRAM size: > >> [0x3fc000000 , 0x3fc500000] > >> and > >> [0x3fff00000 , 0x3ffffffff] > >> > >> If the kernel is agnostic to these gaps, accessing the area causes > >> a SError panic. > >> > >> Hence, add reserved memory areas in kernel's DTB before booting. > > > > I can confirm that using the full 16GB of memory on the rock5b causes > > prolems for OpenBSD as well. > > > > Was wondering whether excluding these regions was better done by > > adding reserved-memory nodes in the device tree though like what is > > done in the meson-g12-common.dtsi file for example. > > But does it work fine with this patch ?
Yes, it does. > >> Signed-off-by: Eugen Hristev <eugen.hris...@collabora.com> > >> --- > >> > >> Hi, > >> > >> These memory gaps are required because the kernel crashes with a SError if > >> accessing that area. > >> It appears the ATAGs provide DDR banks that do not include those specific > >> two regions. > >> To be able to boot the kernel, those areas have to be reserved. > >> Maybe someone from Rockchip could have an explanation to this behavior? > >> Otherwise we have to block them at this level. > >> If those memory ranges are reserved for a dedicated purpose we can come up > >> with a better solution, w.r.t. the purpose of the regions. > >> > >> Thanks ! > >> Eugen > >> > >> board/radxa/rock5b-rk3588/rock5b-rk3588.c | 35 +++++++++++++++++++++++ > >> configs/rock5b-rk3588_defconfig | 1 + > >> 2 files changed, 36 insertions(+) > >> > >> diff --git a/board/radxa/rock5b-rk3588/rock5b-rk3588.c > >> b/board/radxa/rock5b-rk3588/rock5b-rk3588.c > >> index b5d74798f3b9..5c3b52b94898 100644 > >> --- a/board/radxa/rock5b-rk3588/rock5b-rk3588.c > >> +++ b/board/radxa/rock5b-rk3588/rock5b-rk3588.c > >> @@ -2,3 +2,38 @@ > >> /* > >> * Copyright (c) 2023 Collabora Ltd. > >> */ > >> + > >> +#include <fdtdec.h> > >> +#include <fdt_support.h> > >> + > >> +#ifdef CONFIG_OF_BOARD_SETUP > >> +int rock5b_add_reserved_memory_fdt_nodes(void *new_blob) > >> +{ > >> + struct fdt_memory gap1 = { > >> + .start = 0x3fc000000, > >> + .end = 0x3fc4fffff, > >> + }; > >> + struct fdt_memory gap2 = { > >> + .start = 0x3fff00000, > >> + .end = 0x3ffffffff, > >> + }; > >> + unsigned long flags = FDTDEC_RESERVED_MEMORY_NO_MAP; > >> + unsigned int ret; > >> + > >> + /* > >> + * Inject the reserved-memory nodes into the DTS > >> + */ > >> + ret = fdtdec_add_reserved_memory(new_blob, "gap1", &gap1, NULL, 0, > >> + NULL, flags); > >> + if (ret) > >> + return ret; > >> + > >> + return fdtdec_add_reserved_memory(new_blob, "gap2", &gap2, NULL, 0, > >> + NULL, flags); > >> +} > >> + > >> +int ft_board_setup(void *blob, struct bd_info *bd) > >> +{ > >> + return rock5b_add_reserved_memory_fdt_nodes(blob); > >> +} > >> +#endif > >> diff --git a/configs/rock5b-rk3588_defconfig > >> b/configs/rock5b-rk3588_defconfig > >> index 9b7db7de64be..f3026c7ea166 100644 > >> --- a/configs/rock5b-rk3588_defconfig > >> +++ b/configs/rock5b-rk3588_defconfig > >> @@ -26,6 +26,7 @@ CONFIG_FIT=y > >> CONFIG_FIT_VERBOSE=y > >> CONFIG_SPL_FIT_SIGNATURE=y > >> CONFIG_SPL_LOAD_FIT=y > >> +CONFIG_OF_BOARD_SETUP=y > >> CONFIG_DEFAULT_FDT_FILE="rockchip/rk3588-rock-5b.dtb" > >> # CONFIG_DISPLAY_CPUINFO is not set > >> CONFIG_DISPLAY_BOARDINFO_LATE=y > >> -- > >> 2.34.1 > >> > >> > >