
Hi Jonas,
On Sun, 7 Jan 2024 at 17:35, Jonas Karlman jonas@kwiboo.se wrote:
Hi Hugh,
On 2023-12-26 17:43, Hugh Cole-Baker wrote:
An uncompressed 6.7.0-rc1 Linux kernel Image built with the arm64 defconfig is about 40MB. This does not fit in to the space between kernel_comp_addr_r and fdt_addr_r, so when uncompressing an Image.gz to this size, the FDT will be overwritten. Rearrange addresses to have 128MiB for the kernel and its decompression buffer, then devicetree, overlay and ramdisk at the end.
Signed-off-by: Hugh Cole-Baker sigmaris@gmail.com
Changes from v1: Reorder things to have to have 128MiB for kernel and decompression space, then devicetree, overlays and ramdisk. Update kernel_comp_size to 128MiB.
include/configs/rk3568_common.h | 12 ++++++------ include/configs/rk3588_common.h | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/include/configs/rk3568_common.h b/include/configs/rk3568_common.h index 1b7d3437b1..48f93083de 100644 --- a/include/configs/rk3568_common.h +++ b/include/configs/rk3568_common.h @@ -20,12 +20,12 @@ "script_offset_f=0xffe000\0" \ "script_size_f=0x2000\0" \ "pxefile_addr_r=0x00e00000\0" \
"fdt_addr_r=0x0a100000\0" \
"fdtoverlay_addr_r=0x02000000\0" \
"kernel_addr_r=0x02080000\0" \
"ramdisk_addr_r=0x0a200000\0" \
"kernel_comp_addr_r=0x08000000\0" \
"kernel_comp_size=0x2000000\0"
"kernel_addr_r=0x02000000\0" \
"kernel_comp_addr_r=0x0a000000\0" \
"fdt_addr_r=0x12000000\0" \
"fdtoverlay_addr_r=0x12100000\0" \
"ramdisk_addr_r=0x12180000\0" \
"kernel_comp_size=0x8000000\0"
This (and the prior) memory layout extend over the possible memory region that OPTEE may use, 32 MiB at 132 MiB offset.
The following regions is typically reserved for TF-A and OPTEE:
0x00000000 - 0x00200000 - reserved for TF-A, pstore, shmem, etc (0-2 MiB) 0x08400000 - 0x0a400000 - reserved for OPTEE (132-164 MiB)
Thanks, I wasn't aware of this reserved memory. Out of curiosity, is it documented anywhere more about this & how to use OPTEE on RK3588? I'd like to try it out, I tried to simply include it in a U-Boot build via "export TEE=rk3588_bl32_v1.13.bin" but binman expects the given file to be an ELF.
Following offsets are used by U-Boot on rockchip rk35xx:
@0 - U-Boot SPL @40000 - TF-A (@256 KiB) @a00000 - U-Boot proper (@10 MiB) @c00000 - scriptaddr (@12 MiB) @c00800 - loadaddr (@12 MiB + 2 KiB) @e00000 - pxefile_addr_r (@14 MiB) @8400000 - optional OPTEE (@132 MiB)
May I suggest a memory layout similar to the following be used:
@1800000 - fdtoverlay_addr_r (@24 MiB) @1c00000 - fdt_addr_r (@28 MiB) @2000000 - kernel_addr_r (@32 MiB) @a800000 - kernel_comp_addr_r (@168 MiB) // could also be a400000 (@164 MiB) @12c00000 - ramdisk_addr_r (@300 MiB) // kernel_comp_addr_r + kernel_comp_size and kernel_comp_size = 0x8000000 (128 MiB)
With that it should allow for a 100-136 MiB kernel starting at @32 MiB, depending on if memory is reserved for OPTEE or not. It also leave 4 MiB for FDT and FDT overlay in memory just before the kernel. And finally do not overlap kernel_comp_addr_r with possible OPTEE memory.
If we need more space then 2 MiB for U-Boot proper we should also revise the offsets used for loadaddr, scriptaddr and pxefile_addr_r.
Regards, Jonas
#define CFG_EXTRA_ENV_SETTINGS \ ENV_MEM_LAYOUT_SETTINGS \ diff --git a/include/configs/rk3588_common.h b/include/configs/rk3588_common.h index 46389d087d..70430612ef 100644 --- a/include/configs/rk3588_common.h +++ b/include/configs/rk3588_common.h @@ -19,12 +19,12 @@ "script_offset_f=0xffe000\0" \ "script_size_f=0x2000\0" \ "pxefile_addr_r=0x00e00000\0" \
"fdt_addr_r=0x0a100000\0" \
"fdtoverlay_addr_r=0x02000000\0" \
"kernel_addr_r=0x02080000\0" \
"ramdisk_addr_r=0x0a200000\0" \
"kernel_comp_addr_r=0x08000000\0" \
"kernel_comp_size=0x2000000\0"
"kernel_addr_r=0x02000000\0" \
"kernel_comp_addr_r=0x0a000000\0" \
"fdt_addr_r=0x12000000\0" \
"fdtoverlay_addr_r=0x12100000\0" \
"ramdisk_addr_r=0x12180000\0" \
"kernel_comp_size=0x8000000\0"
#define CFG_EXTRA_ENV_SETTINGS \ "fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
Regards, Hugh