2 * Copyright (C) 2017 Google, Inc
3 * Written by Simon Glass <sjg@chromium.org>
5 * SPDX-License-Identifier: GPL-2.0+
9 #include <environment.h>
11 DECLARE_GLOBAL_DATA_PTR;
13 static struct env_driver *env_driver_lookup(enum env_location loc)
15 struct env_driver *drv;
16 const int n_ents = ll_entry_count(struct env_driver, env_driver);
17 struct env_driver *entry;
19 drv = ll_entry_start(struct env_driver, env_driver);
20 for (entry = drv; entry != drv + n_ents; entry++) {
21 if (loc == entry->location)
29 static enum env_location env_get_default_location(void)
31 if IS_ENABLED(CONFIG_ENV_IS_IN_DATAFLASH)
32 return ENVL_DATAFLASH;
33 else if IS_ENABLED(CONFIG_ENV_IS_IN_EEPROM)
35 else if IS_ENABLED(CONFIG_ENV_IS_IN_FAT)
37 else if IS_ENABLED(CONFIG_ENV_IS_IN_FLASH)
39 else if IS_ENABLED(CONFIG_ENV_IS_IN_MMC)
41 else if IS_ENABLED(CONFIG_ENV_IS_IN_NAND)
43 else if IS_ENABLED(CONFIG_ENV_IS_IN_NVRAM)
45 else if IS_ENABLED(CONFIG_ENV_IS_IN_REMOTE)
47 else if IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH)
48 return ENVL_SPI_FLASH;
49 else if IS_ENABLED(CONFIG_ENV_IS_IN_UBI)
51 else if IS_ENABLED(CONFIG_ENV_IS_NOWHERE)
57 struct env_driver *env_driver_lookup_default(void)
59 enum env_location loc = env_get_default_location();
60 struct env_driver *drv;
62 drv = env_driver_lookup(loc);
64 debug("%s: No environment driver for location %d\n", __func__,
72 int env_get_char(int index)
74 struct env_driver *drv = env_driver_lookup_default();
77 if (gd->env_valid == ENV_INVALID)
78 return default_environment[index];
82 return *(uchar *)(gd->env_addr + index);
83 ret = drv->get_char(index);
85 debug("%s: Environment failed to load (err=%d)\n",
94 struct env_driver *drv = env_driver_lookup_default();
103 debug("%s: Environment failed to load (err=%d)\n", __func__,
113 struct env_driver *drv = env_driver_lookup_default();
122 debug("%s: Environment failed to save (err=%d)\n", __func__,
132 struct env_driver *drv = env_driver_lookup_default();
139 if (ret == -ENOENT) {
140 gd->env_addr = (ulong)&default_environment[0];
141 gd->env_valid = ENV_VALID;
145 debug("%s: Environment failed to init (err=%d)\n", __func__,