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

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. Move fdt_addr_r and ramdisk_addr_r higher in memory to allow 96MB for uncompressing kernels.
Signed-off-by: Hugh Cole-Baker sigmaris@gmail.com Cc: Simon Glass sjg@chromium.org Cc: Philipp Tomsich philipp.tomsich@vrull.eu Cc: Kever Yang kever.yang@rock-chips.com Cc: Jonas Karlman jonas@kwiboo.se --- include/configs/rk3568_common.h | 4 ++-- include/configs/rk3588_common.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/configs/rk3568_common.h b/include/configs/rk3568_common.h index 1b7d3437b1..da5b38803e 100644 --- a/include/configs/rk3568_common.h +++ b/include/configs/rk3568_common.h @@ -20,10 +20,10 @@ "script_offset_f=0xffe000\0" \ "script_size_f=0x2000\0" \ "pxefile_addr_r=0x00e00000\0" \ - "fdt_addr_r=0x0a100000\0" \ + "fdt_addr_r=0x0e000000\0" \ "fdtoverlay_addr_r=0x02000000\0" \ "kernel_addr_r=0x02080000\0" \ - "ramdisk_addr_r=0x0a200000\0" \ + "ramdisk_addr_r=0x0e100000\0" \ "kernel_comp_addr_r=0x08000000\0" \ "kernel_comp_size=0x2000000\0"
diff --git a/include/configs/rk3588_common.h b/include/configs/rk3588_common.h index 46389d087d..5fdbdb6fd7 100644 --- a/include/configs/rk3588_common.h +++ b/include/configs/rk3588_common.h @@ -19,10 +19,10 @@ "script_offset_f=0xffe000\0" \ "script_size_f=0x2000\0" \ "pxefile_addr_r=0x00e00000\0" \ - "fdt_addr_r=0x0a100000\0" \ + "fdt_addr_r=0x0e000000\0" \ "fdtoverlay_addr_r=0x02000000\0" \ "kernel_addr_r=0x02080000\0" \ - "ramdisk_addr_r=0x0a200000\0" \ + "ramdisk_addr_r=0x0e100000\0" \ "kernel_comp_addr_r=0x08000000\0" \ "kernel_comp_size=0x2000000\0"

On Sat, Dec 23, 2023 at 12:13:10PM +0000, 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. Move fdt_addr_r and ramdisk_addr_r higher in memory to allow 96MB for uncompressing kernels.
Signed-off-by: Hugh Cole-Baker sigmaris@gmail.com Cc: Simon Glass sjg@chromium.org Cc: Philipp Tomsich philipp.tomsich@vrull.eu Cc: Kever Yang kever.yang@rock-chips.com Cc: Jonas Karlman jonas@kwiboo.se
include/configs/rk3568_common.h | 4 ++-- include/configs/rk3588_common.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/configs/rk3568_common.h b/include/configs/rk3568_common.h index 1b7d3437b1..da5b38803e 100644 --- a/include/configs/rk3568_common.h +++ b/include/configs/rk3568_common.h @@ -20,10 +20,10 @@ "script_offset_f=0xffe000\0" \ "script_size_f=0x2000\0" \ "pxefile_addr_r=0x00e00000\0" \
- "fdt_addr_r=0x0a100000\0" \
- "fdt_addr_r=0x0e000000\0" \ "fdtoverlay_addr_r=0x02000000\0" \ "kernel_addr_r=0x02080000\0" \
- "ramdisk_addr_r=0x0a200000\0" \
- "ramdisk_addr_r=0x0e100000\0" \ "kernel_comp_addr_r=0x08000000\0" \ "kernel_comp_size=0x2000000\0"
I think this shows the real problem is that the defaults here need to be re-thought with functional maximums in mind. There's a practical limit of 128MB for the kernel so we should have the kernel, then the kernel decompression buffer, then device tree and overlays space, then ramdisk at the end.

On 12/23/23 11:09 AM, Tom Rini wrote:
On Sat, Dec 23, 2023 at 12:13:10PM +0000, 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. Move fdt_addr_r and ramdisk_addr_r higher in memory to allow 96MB for uncompressing kernels.
Signed-off-by: Hugh Cole-Baker sigmaris@gmail.com Cc: Simon Glass sjg@chromium.org Cc: Philipp Tomsich philipp.tomsich@vrull.eu Cc: Kever Yang kever.yang@rock-chips.com Cc: Jonas Karlman jonas@kwiboo.se
include/configs/rk3568_common.h | 4 ++-- include/configs/rk3588_common.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/configs/rk3568_common.h b/include/configs/rk3568_common.h index 1b7d3437b1..da5b38803e 100644 --- a/include/configs/rk3568_common.h +++ b/include/configs/rk3568_common.h @@ -20,10 +20,10 @@ "script_offset_f=0xffe000\0" \ "script_size_f=0x2000\0" \ "pxefile_addr_r=0x00e00000\0" \
- "fdt_addr_r=0x0a100000\0" \
- "fdt_addr_r=0x0e000000\0" \ "fdtoverlay_addr_r=0x02000000\0" \ "kernel_addr_r=0x02080000\0" \
- "ramdisk_addr_r=0x0a200000\0" \
- "ramdisk_addr_r=0x0e100000\0" \ "kernel_comp_addr_r=0x08000000\0" \ "kernel_comp_size=0x2000000\0"
I think this shows the real problem is that the defaults here need to be re-thought with functional maximums in mind. There's a practical limit of 128MB for the kernel so we should have the kernel, then the kernel decompression buffer, then device tree and overlays space, then ramdisk at the end.
kernel_comp_size needs to be adjusted with this change
participants (3)
-
Hugh Cole-Baker
-
John Clark
-
Tom Rini