[PATCH 2/2] board: rock5b-rk3588: add memory gaps into kernel's DTB
Mark Kettenis
mark.kettenis at xs4all.nl
Wed Feb 22 00:08:37 CET 2023
> Date: Tue, 21 Feb 2023 10:35:18 +0200
> From: Eugen Hristev <eugen.hristev at collabora.com>
>
> On 2/21/23 00:47, Mark Kettenis wrote:
> >> From: Eugen Hristev <eugen.hristev at 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.hristev at 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
> >>
> >>
>
>
More information about the U-Boot
mailing list