]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
x86: Allow logging to be used in SPL reliably
authorSimon Glass <sjg@chromium.org>
Sun, 16 Jul 2023 03:39:05 +0000 (21:39 -0600)
committerBin Meng <bmeng@tinylab.org>
Mon, 17 Jul 2023 09:12:26 +0000 (17:12 +0800)
When global_data is relocated, log_head moves in memory, meaning that
the items in that list point to the wrong place.

Disable logging when making the change, then reenable it afterwards, so
that logging works normally.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
arch/x86/lib/spl.c

index 039f219f50aed762b51a2064027d291512bfc007..92a5e6aec7112e9ac21a1294dfd42d02a83e4788 100644 (file)
@@ -144,9 +144,22 @@ static int x86_spl_init(void)
         */
        gd->new_gd = (struct global_data *)ptr;
        memcpy(gd->new_gd, gd, sizeof(*gd));
+
+       /*
+        * Make sure logging is disabled when we switch, since the log system
+        * list head will move
+        */
+       gd->new_gd->flags &= ~GD_FLG_LOG_READY;
        arch_setup_gd(gd->new_gd);
        gd->start_addr_sp = (ulong)ptr;
 
+       /* start up logging again, with the new list-head location */
+       ret = log_init();
+       if (ret) {
+               log_debug("Log setup failed (err=%d)\n", ret);
+               return ret;
+       }
+
        if (_LOG_DEBUG) {
                ret = mtrr_list(mtrr_get_var_count(), MP_SELECT_BSP);
                if (ret)