[PATCH v2] rockchip: rk35xx: expand space for decompressed kernel

Hugh Cole-Baker sigmaris at gmail.com
Tue Jan 9 00:53:57 CET 2024


Hi Jonas,

On Sun, 7 Jan 2024 at 17:35, Jonas Karlman <jonas at 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 at 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


More information about the U-Boot mailing list