summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuraj Kakade <[email protected]>2026-06-10 16:35:31 +0530
committerMichal Simek <[email protected]>2026-07-08 08:55:50 +0200
commitd6e7db8f11fde6d79c5e9b5a41ba8a9625b113a8 (patch)
tree03141ac9943a0cd5586de744941a41f7ec6d7514
parent0659f97f1879a4987503494925a153c8c7ad9173 (diff)
amd: versal2: detect spi env bus from boot mode
Add spi_get_env_dev() to dynamically detect the correct SPI bus based on the actual boot mode at runtime. This ensures environment variables are always loaded from the correct SPI flash controller regardless of the bus numbering. For example, on some Versal Gen 2 boards, SPI is disabled in DTS leaving bus 0 empty in DM. Only QSPI is enabled at bus 1. The default CONFIG_ENV_SPI_BUS=0 causes U-Boot to search for environment at bus 0 which does not exist, triggering the warning "spi_flash_probe_bus_cs() failed, using default environment". Signed-off-by: Suraj Kakade <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Michal Simek <[email protected]>
-rw-r--r--board/amd/versal2/board.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/board/amd/versal2/board.c b/board/amd/versal2/board.c
index ec28e60c410..6e4f0c6e9b8 100644
--- a/board/amd/versal2/board.c
+++ b/board/amd/versal2/board.c
@@ -605,3 +605,31 @@ void set_dfu_alt_info(char *interface, char *devstr)
env_set("dfu_alt_info", buf);
}
#endif
+
+int spi_get_env_dev(void)
+{
+ struct udevice *dev;
+ const char *name;
+ int bootseq;
+
+ switch (versal2_get_bootmode()) {
+ case QSPI_MODE_24BIT:
+ case QSPI_MODE_32BIT:
+ name = "spi@f1030000";
+ break;
+ case OSPI_MODE:
+ name = "spi@f1010000";
+ break;
+ default:
+ return -1;
+ }
+
+ if (uclass_get_device_by_name(UCLASS_SPI, name, &dev)) {
+ debug("SPI driver for %s is not present\n", name);
+ return -1;
+ }
+
+ bootseq = dev_seq(dev);
+ debug("bootseq %d\n", bootseq);
+ return bootseq;
+}