Skip to content
Snippets Groups Projects
Commit 2f926291 authored by Tom Rini's avatar Tom Rini
Browse files

Merge branch 'next' of git://git.denx.de/u-boot-spi

parents a6d4cd47 0b2e5bbe
No related branches found
No related tags found
No related merge requests found
...@@ -45,15 +45,11 @@ char *env_name_spec = "SPI Flash"; ...@@ -45,15 +45,11 @@ char *env_name_spec = "SPI Flash";
static struct spi_flash *env_flash; static struct spi_flash *env_flash;
#if defined(CONFIG_ENV_OFFSET_REDUND) static int setup_flash_device(void)
int saveenv(void)
{ {
env_t env_new;
char *saved_buffer = NULL, flag = OBSOLETE_FLAG;
u32 saved_size, saved_offset, sector = 1;
int ret;
#ifdef CONFIG_DM_SPI_FLASH #ifdef CONFIG_DM_SPI_FLASH
struct udevice *new; struct udevice *new;
int ret;
/* speed and mode will be read from DT */ /* 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(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
...@@ -76,6 +72,20 @@ int saveenv(void) ...@@ -76,6 +72,20 @@ int saveenv(void)
} }
} }
#endif #endif
return 0;
}
#if defined(CONFIG_ENV_OFFSET_REDUND)
int saveenv(void)
{
env_t env_new;
char *saved_buffer = NULL, flag = OBSOLETE_FLAG;
u32 saved_size, saved_offset, sector;
int ret;
ret = setup_flash_device();
if (ret)
return ret;
ret = env_export(&env_new); ret = env_export(&env_new);
if (ret) if (ret)
...@@ -105,11 +115,7 @@ int saveenv(void) ...@@ -105,11 +115,7 @@ int saveenv(void)
goto done; goto done;
} }
if (CONFIG_ENV_SIZE > CONFIG_ENV_SECT_SIZE) { sector = DIV_ROUND_UP(CONFIG_ENV_SIZE, CONFIG_ENV_SECT_SIZE);
sector = CONFIG_ENV_SIZE / CONFIG_ENV_SECT_SIZE;
if (CONFIG_ENV_SIZE % CONFIG_ENV_SECT_SIZE)
sector++;
}
puts("Erasing SPI flash..."); puts("Erasing SPI flash...");
ret = spi_flash_erase(env_flash, env_new_offset, ret = spi_flash_erase(env_flash, env_new_offset,
...@@ -166,12 +172,9 @@ void env_relocate_spec(void) ...@@ -166,12 +172,9 @@ void env_relocate_spec(void)
goto out; goto out;
} }
env_flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS, ret = setup_flash_device();
CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE); if (ret)
if (!env_flash) {
set_default_env("!spi_flash_probe() failed");
goto out; goto out;
}
ret = spi_flash_read(env_flash, CONFIG_ENV_OFFSET, ret = spi_flash_read(env_flash, CONFIG_ENV_OFFSET,
CONFIG_ENV_SIZE, tmp_env1); CONFIG_ENV_SIZE, tmp_env1);
...@@ -238,34 +241,14 @@ out: ...@@ -238,34 +241,14 @@ out:
#else #else
int saveenv(void) int saveenv(void)
{ {
u32 saved_size, saved_offset, sector = 1; u32 saved_size, saved_offset, sector;
char *saved_buffer = NULL; char *saved_buffer = NULL;
int ret = 1; int ret = 1;
env_t env_new; env_t env_new;
#ifdef CONFIG_DM_SPI_FLASH
struct udevice *new;
/* speed and mode will be read from DT */ ret = setup_flash_device();
ret = spi_flash_probe_bus_cs(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS, if (ret)
0, 0, &new); return ret;
if (ret) {
set_default_env("!spi_flash_probe_bus_cs() failed");
return 1;
}
env_flash = dev_get_uclass_priv(new);
#else
if (!env_flash) {
env_flash = spi_flash_probe(CONFIG_ENV_SPI_BUS,
CONFIG_ENV_SPI_CS,
CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE);
if (!env_flash) {
set_default_env("!spi_flash_probe() failed");
return 1;
}
}
#endif
/* Is the sector larger than the env (i.e. embedded) */ /* Is the sector larger than the env (i.e. embedded) */
if (CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE) { if (CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE) {
...@@ -281,16 +264,12 @@ int saveenv(void) ...@@ -281,16 +264,12 @@ int saveenv(void)
goto done; goto done;
} }
if (CONFIG_ENV_SIZE > CONFIG_ENV_SECT_SIZE) {
sector = CONFIG_ENV_SIZE / CONFIG_ENV_SECT_SIZE;
if (CONFIG_ENV_SIZE % CONFIG_ENV_SECT_SIZE)
sector++;
}
ret = env_export(&env_new); ret = env_export(&env_new);
if (ret) if (ret)
goto done; goto done;
sector = DIV_ROUND_UP(CONFIG_ENV_SIZE, CONFIG_ENV_SECT_SIZE);
puts("Erasing SPI flash..."); puts("Erasing SPI flash...");
ret = spi_flash_erase(env_flash, CONFIG_ENV_OFFSET, ret = spi_flash_erase(env_flash, CONFIG_ENV_OFFSET,
sector * CONFIG_ENV_SECT_SIZE); sector * CONFIG_ENV_SECT_SIZE);
...@@ -326,30 +305,31 @@ void env_relocate_spec(void) ...@@ -326,30 +305,31 @@ void env_relocate_spec(void)
char *buf = NULL; char *buf = NULL;
buf = (char *)memalign(ARCH_DMA_MINALIGN, CONFIG_ENV_SIZE); buf = (char *)memalign(ARCH_DMA_MINALIGN, CONFIG_ENV_SIZE);
env_flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS, if (!buf) {
CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE); set_default_env("!malloc() failed");
if (!env_flash) {
set_default_env("!spi_flash_probe() failed");
if (buf)
free(buf);
return; return;
} }
ret = setup_flash_device();
if (ret)
goto out;
ret = spi_flash_read(env_flash, ret = spi_flash_read(env_flash,
CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, buf); CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, buf);
if (ret) { if (ret) {
set_default_env("!spi_flash_read() failed"); set_default_env("!spi_flash_read() failed");
goto out; goto err_read;
} }
ret = env_import(buf, 1); ret = env_import(buf, 1);
if (ret) if (ret)
gd->env_valid = 1; gd->env_valid = 1;
out:
err_read:
spi_flash_free(env_flash); spi_flash_free(env_flash);
if (buf)
free(buf);
env_flash = NULL; env_flash = NULL;
out:
free(buf);
} }
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment