summaryrefslogtreecommitdiff
path: root/env
diff options
context:
space:
mode:
authorVenkatesh Yadav Abbarapu <venkatesh.abbarapu@amd.com>2024-06-14 18:18:10 +0530
committerMichal Simek <michal.simek@amd.com>2024-08-05 16:10:36 +0200
commit7d84ad1da0e32f4525cee9b35bc5a4f3b5585ed8 (patch)
tree510151b9bcf2bd22bd6352bd84bc16a8ac954418 /env
parentc43d65e2664397141834bad6f08711bdb8b2df70 (diff)
downloadu-boot-7d84ad1da0e32f4525cee9b35bc5a4f3b5585ed8.tar.gz
u-boot-7d84ad1da0e32f4525cee9b35bc5a4f3b5585ed8.tar.bz2
u-boot-7d84ad1da0e32f4525cee9b35bc5a4f3b5585ed8.zip
env_spi: support overriding spi dev from board code
This enables boards to choose where to/from the environment should be saved/loaded. They can then for example support using the same device (dynamically) from which the bootloader was launched to load and save env data and do not have to define CONFIG_ENV_SPI_BUS statically. In my use case, the environment needs to be on the same device I booted from. It can be the QSPI or OSPI device. I therefore would override spi_get_env_dev in the board code, read the bootmode registers to determine where we booted from and return the corresponding device index. Signed-off-by: Venkatesh Yadav Abbarapu <venkatesh.abbarapu@amd.com> Link: https://lore.kernel.org/r/20240614124811.22945-2-venkatesh.abbarapu@amd.com Signed-off-by: Michal Simek <michal.simek@amd.com> # Move spi_get_env_dev to sf.c
Diffstat (limited to 'env')
-rw-r--r--env/sf.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/env/sf.c b/env/sf.c
index c747e175e3..906b85b0db 100644
--- a/env/sf.c
+++ b/env/sf.c
@@ -38,14 +38,24 @@ static ulong env_new_offset = CONFIG_ENV_OFFSET_REDUND;
DECLARE_GLOBAL_DATA_PTR;
+__weak int spi_get_env_dev(void)
+{
+#ifdef CONFIG_ENV_SPI_BUS
+ return CONFIG_ENV_SPI_BUS;
+#else
+ return 0;
+#endif
+}
+
static int setup_flash_device(struct spi_flash **env_flash)
{
#if CONFIG_IS_ENABLED(DM_SPI_FLASH)
struct udevice *new;
int ret;
+ int dev = spi_get_env_dev();
/* speed and mode will be read from DT */
- ret = spi_flash_probe_bus_cs(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
+ ret = spi_flash_probe_bus_cs(dev, CONFIG_ENV_SPI_CS,
&new);
if (ret) {
env_set_default("spi_flash_probe_bus_cs() failed", 0);