summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Simek <[email protected]>2025-01-06 10:20:40 +0100
committerMichal Simek <[email protected]>2025-01-14 08:29:45 +0100
commitd1de34798a5b829f38357a4faa1a31f6f44ab83b (patch)
tree7b04371c761e9aaca25e557956bc72285ded47e9
parenta6ca9310ef0e929c57ad8873463cc483fc716e59 (diff)
arm64: versal: RO multi_boot register in non JTAG bootmode
The main reason for this change is that upstream QEMU has no multiboot register implemented that's why access to it fails which ends up in CI failure for our target. That's why in JTAG bootmode returns 0 which is correct behaviour because multiboot register is not used in this mode and value should be ignored and as a side effect it is also fixing CI/Qemu issue. Also move versal_get_bootmode() to avoid function declaration. Signed-off-by: Michal Simek <[email protected]> Link: https://lore.kernel.org/r/484b9cafc45e72308a1a29a3ab772020f96784cc.1736155238.git.michal.simek@amd.com
-rw-r--r--board/xilinx/versal/board.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/board/xilinx/versal/board.c b/board/xilinx/versal/board.c
index d05220f96ff..cff810e02ad 100644
--- a/board/xilinx/versal/board.c
+++ b/board/xilinx/versal/board.c
@@ -36,8 +36,29 @@ static xilinx_desc versalpl = {
};
#endif
+static u8 versal_get_bootmode(void)
+{
+ u8 bootmode;
+ u32 reg = 0;
+
+ reg = readl(&crp_base->boot_mode_usr);
+
+ if (reg >> BOOT_MODE_ALT_SHIFT)
+ reg >>= BOOT_MODE_ALT_SHIFT;
+
+ bootmode = reg & BOOT_MODES_MASK;
+
+ return bootmode;
+}
+
static u32 versal_multi_boot(void)
{
+ u8 bootmode = versal_get_bootmode();
+
+ /* Mostly workaround for QEMU CI pipeline */
+ if (bootmode == JTAG_MODE)
+ return 0;
+
return readl(0xF1110004);
}
@@ -120,21 +141,6 @@ unsigned long do_go_exec(ulong (*entry)(int, char * const []), int argc,
return ret;
}
-static u8 versal_get_bootmode(void)
-{
- u8 bootmode;
- u32 reg = 0;
-
- reg = readl(&crp_base->boot_mode_usr);
-
- if (reg >> BOOT_MODE_ALT_SHIFT)
- reg >>= BOOT_MODE_ALT_SHIFT;
-
- bootmode = reg & BOOT_MODES_MASK;
-
- return bootmode;
-}
-
static int boot_targets_setup(void)
{
u8 bootmode;