mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Alexander Shiyan <eagle.alexander923@gmail.com>,
	Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH master v3 5/5] ARM64: place PBL malloc area at start of barebox proper malloc area
Date: Thu, 28 May 2026 13:02:19 +0200	[thread overview]
Message-ID: <20260528110401.3920904-6-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20260528110401.3920904-1-a.fatoum@pengutronix.de>

The early PBL malloc area used by the Rockchip code overlaps the region
used for OP-TEE. Moving it a bit lower would overlap the region occupied
by the scratch area.

With the switch to CONFIG_BAREBOX_MEMORY_OFFSET, we can compute the start
of the malloc area in barebox proper without knowing how big barebox will
eventually be, so make use of that and always place the PBL malloc area
exactly at the start of the eventual barebox proper memory area.

The memory will automatically be reclaimed when the TLSF allocator is
instantiated and we will be sure not to overwrite anything by allocating
in PBL.

Reported-by: Alexander Shiyan <eagle.alexander923@gmail.com>
Fixes: 76b1f31275fe ("ARM: rockchip: initialize PBL malloc")
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 arch/arm/cpu/common.c              |  5 +++++
 arch/arm/cpu/uncompress.c          |  4 ++++
 arch/arm/include/asm/barebox-arm.h | 10 ++++++----
 arch/arm/mach-rockchip/atf.c       |  2 +-
 4 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/arch/arm/cpu/common.c b/arch/arm/cpu/common.c
index 6b82ee8b810c..adb5d6a02bc8 100644
--- a/arch/arm/cpu/common.c
+++ b/arch/arm/cpu/common.c
@@ -114,8 +114,13 @@ void print_pbl_mem_layout(ulong membase, ulong endmem, ulong barebox_base)
 #endif
 	printf("arm_mem_barebox_image = 0x%08lx+0x%08lx\n",
 	       barebox_base, arm_mem_barebox_image_end(endmem) - barebox_base);
+#ifdef CONFIG_ARM64
+	printf("pbl_malloc area       = 0x%08lx+0x%08x\n",
+	       barebox_malloc_base(membase, endmem - membase), PBL_MALLOC_SIZE);
+#else
 	printf("arm_mem_early_malloc  = 0x%08lx+0x%08x\n",
 	       barebox_base - PBL_MALLOC_SIZE, PBL_MALLOC_SIZE);
+#endif
 	printf("membase               = 0x%08lx+0x%08lx\n",
 	       membase, endmem - membase);
 }
diff --git a/arch/arm/cpu/uncompress.c b/arch/arm/cpu/uncompress.c
index 61bcba6e8549..55bbe0019cc4 100644
--- a/arch/arm/cpu/uncompress.c
+++ b/arch/arm/cpu/uncompress.c
@@ -75,7 +75,11 @@ void __noreturn barebox_pbl_start(unsigned long membase, unsigned long memsize,
 
 	handoff_data = (void *)barebox_base + ALIGN(uncompressed_len, 8) + MAX_BSS_SIZE;
 
+#ifdef CONFIG_ARM64
+	pbl_malloc_init(barebox_malloc_base(membase, memsize), PBL_MALLOC_SIZE);
+#else
 	pbl_malloc_init(barebox_base - PBL_MALLOC_SIZE, PBL_MALLOC_SIZE);
+#endif
 
 #ifdef DEBUG
 	print_pbl_mem_layout(membase, endmem, barebox_base);
diff --git a/arch/arm/include/asm/barebox-arm.h b/arch/arm/include/asm/barebox-arm.h
index 38cceba010ed..f75cddc77243 100644
--- a/arch/arm/include/asm/barebox-arm.h
+++ b/arch/arm/include/asm/barebox-arm.h
@@ -95,10 +95,12 @@ void *barebox_arm_boot_dtb(void);
  *                       + BSS) rounded to SZ_1M
  *                                   ↓
  *  ---------------------- arm_mem_barebox_image() ---------------------
- *                                   ↑
- *                                SZ_128K
- *                                   ↓
- *  ------------------------ arm_mem_early_malloc ----------------------
+ *     ARM32      ↑                  |                ↕         ARM64
+ *         PBL_MALLOC_SIZE           |------- pbl_malloc area end ------
+ *                ↓                  |                ↑
+ *  --- arm_mem_early_malloc --------|         PBL_MALLOC_SIZE
+ *                                   |                ↓
+ *                                   ----- pbl_malloc area start -------
  */
 void print_pbl_mem_layout(ulong membase, ulong endmem, ulong barebox_base);
 
diff --git a/arch/arm/mach-rockchip/atf.c b/arch/arm/mach-rockchip/atf.c
index 14797a1e0601..74b8cdc2f499 100644
--- a/arch/arm/mach-rockchip/atf.c
+++ b/arch/arm/mach-rockchip/atf.c
@@ -173,7 +173,7 @@ static void rockchip_atf_load_bl31(void *fdt)
 	unsigned long bl31_ep;
 
 	mmu_early_enable(membase[0], memsize[0]);
-	pbl_malloc_init(membase[0] + memsize[0] - PBL_MALLOC_SIZE, PBL_MALLOC_SIZE);
+	pbl_malloc_init(barebox_malloc_base(membase[0], memsize[0]), PBL_MALLOC_SIZE);
 
 	bl31_ep = load_elf64_image_phdr(&bl31);
 
-- 
2.47.3




  parent reply	other threads:[~2026-05-28 11:07 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-28 11:02 [PATCH master v3 0/5] ARM64: unify pbl and proper malloc area start Ahmad Fatoum
2026-05-28 11:02 ` [PATCH master v3 1/5] arch: introduce new CONFIG_ARCH_HAS_MALLOC_SIZE Ahmad Fatoum
2026-05-28 11:02 ` [PATCH master v3 2/5] arch: introduce CONFIG_BAREBOX_MEMORY_OFFSET Ahmad Fatoum
2026-05-28 11:02 ` [PATCH master v3 3/5] ARM64: switch to CONFIG_BAREBOX_MEMORY_OFFSET Ahmad Fatoum
2026-05-28 11:02 ` [PATCH master v3 4/5] ARM64: configs: drop CONFIG_MALLOC_SIZE=0x0 as it's now the default Ahmad Fatoum
2026-05-28 11:02 ` Ahmad Fatoum [this message]
2026-05-28 16:35   ` [PATCH master v3 5/5] ARM64: place PBL malloc area at start of barebox proper malloc area Alexander Shiyan
2026-05-28 11:09 ` [PATCH master v3 0/5] ARM64: unify pbl and proper malloc area start Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260528110401.3920904-6-a.fatoum@pengutronix.de \
    --to=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=eagle.alexander923@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox