mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-11-29 06:31:28 +01:00
Merge branch 'next' of git://git.denx.de/u-boot-spi
This commit is contained in:
commit
2f92629112
@ -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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#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)
|
|||||||
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)
|
|||||||
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:
|
|||||||
#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)
|
|||||||
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)
|
|||||||
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
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user