[PATCH v2 2/2] board: rock5b-rk3588: add memory gaps into kernel's DTB

Kever Yang kever.yang at rock-chips.com
Tue Feb 28 04:10:27 CET 2023


On 2023/2/22 17:05, Eugen Hristev wrote:
> 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.
>
> Signed-off-by: Eugen Hristev <eugen.hristev at collabora.com>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>

Thanks,
- Kever
> ---
>
> 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


More information about the U-Boot mailing list