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

Eugen Hristev eugen.hristev at collabora.com
Tue Feb 21 09:35:18 CET 2023


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 ?

> 
>> 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