
On Fri, 10 Nov 2023 at 08:29, Devarsh Thakkar devarsht@ti.com wrote:
Start reservations needed for init sequence only after catching bloblists from previous stage.
This is to avoid catching bloblists in the middle causing gaps while u-boot is reserving.
Adjust the relocaddr as per video hand-off information received from previous stage so that further reservations start only after regions reserved for previous stages
Skip reservation for video memory if it was already filled by a bloblist.
Signed-off-by: Devarsh Thakkar devarsht@ti.com
V2: Fix typo in commit title and checkpatch warnings/checks V3: No change
common/board_f.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org
diff --git a/common/board_f.c b/common/board_f.c index d4d7d01f8f..acf802c9cb 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -403,7 +403,7 @@ __weak int arch_reserve_mmu(void) return 0; }
-static int reserve_video(void) +static int reserve_video_from_videoblob(void) { if (IS_ENABLED(CONFIG_SPL_VIDEO_HANDOFF) && spl_phase() > PHASE_SPL) { struct video_handoff *ho; @@ -412,8 +412,34 @@ static int reserve_video(void) if (!ho) return log_msg_ret("blf", -ENOENT); video_reserve_from_bloblist(ho);
gd->relocaddr = ho->fb;
} else if (CONFIG_IS_ENABLED(VIDEO)) {
/* Sanity check fb from blob is before current relocaddr */
if (likely(gd->relocaddr > (unsigned long)ho->fb))
gd->relocaddr = ho->fb;
}
return 0;
+}
+/*
- Check if any bloblist received specifying reserved areas from previous stage and adjust
- gd->relocaddr accordingly, so that we start reserving after pre-reserved areas
- from previous stage.
- NOTE:
- IT is recommended that all bloblists from previous stage are reserved from ram_top
- as next stage will simply start reserving further regions after them.
- */
+static int setup_relocaddr_from_bloblist(void) +{
reserve_video_from_videoblob();
return 0;
+}
+static int reserve_video(void) +{
if (CONFIG_IS_ENABLED(VIDEO)) { ulong addr; int ret;
@@ -923,6 +949,7 @@ static const init_fnc_t init_sequence_f[] = { reserve_pram, #endif reserve_round_4k,
setup_relocaddr_from_bloblist, arch_reserve_mmu, reserve_video, reserve_trace,
-- 2.34.1