dm: spi: Return 0 if driver does not implement ops->cs_info
[oweals/u-boot.git] / env / sf.c
index b3dec82c353afea75ef183145c689b34560445e2..590d0cedd852999eec5ea485a92b265d0066401f 100644 (file)
--- a/env/sf.c
+++ b/env/sf.c
@@ -10,7 +10,8 @@
  */
 #include <common.h>
 #include <dm.h>
-#include <environment.h>
+#include <env.h>
+#include <env_internal.h>
 #include <malloc.h>
 #include <spi.h>
 #include <spi_flash.h>
 #include <errno.h>
 #include <dm/device-internal.h>
 
-#ifndef CONFIG_ENV_SPI_BUS
-# define CONFIG_ENV_SPI_BUS    CONFIG_SF_DEFAULT_BUS
-#endif
-#ifndef CONFIG_ENV_SPI_CS
-# define CONFIG_ENV_SPI_CS     CONFIG_SF_DEFAULT_CS
-#endif
-#ifndef CONFIG_ENV_SPI_MAX_HZ
-# define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED
-#endif
-#ifndef CONFIG_ENV_SPI_MODE
-# define CONFIG_ENV_SPI_MODE   CONFIG_SF_DEFAULT_MODE
-#endif
-
 #ifndef CONFIG_SPL_BUILD
 #define CMD_SAVEENV
 #define INITENV
@@ -42,8 +30,6 @@ static ulong env_offset               = CONFIG_ENV_OFFSET;
 static ulong env_new_offset    = CONFIG_ENV_OFFSET_REDUND;
 #endif
 
-#define ACTIVE_FLAG    1
-#define OBSOLETE_FLAG  0
 #endif /* CONFIG_ENV_OFFSET_REDUND */
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -61,7 +47,7 @@ static int setup_flash_device(void)
                                     CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE,
                                     &new);
        if (ret) {
-               set_default_env("spi_flash_probe_bus_cs() failed", 0);
+               env_set_default("spi_flash_probe_bus_cs() failed", 0);
                return ret;
        }
 
@@ -73,7 +59,7 @@ static int setup_flash_device(void)
                        CONFIG_ENV_SPI_CS,
                        CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE);
                if (!env_flash) {
-                       set_default_env("spi_flash_probe() failed", 0);
+                       env_set_default("spi_flash_probe() failed", 0);
                        return -EIO;
                }
        }
@@ -81,46 +67,12 @@ static int setup_flash_device(void)
        return 0;
 }
 
-static int is_end(const char *addr, size_t size)
-{
-       /* The end of env variables is marked by '\0\0' */
-       int i = 0;
-
-       for (i = 0; i < size - 1; ++i)
-               if (addr[i] == 0x0 && addr[i + 1] == 0x0)
-                       return 1;
-       return 0;
-}
-
-static int spi_flash_read_env(struct spi_flash *flash, u32 offset, size_t len,
-                             void *buf)
-{
-       u32 addr = 0;
-       u32 page_size = flash->page_size;
-
-       memset(buf, 0x0, len);
-       for (int i = 0; i < len / page_size; ++i) {
-               int ret = spi_flash_read(flash, offset, page_size,
-                                        &((char *)buf)[addr]);
-
-               if (ret < 0)
-                       return ret;
-
-               if (is_end(&((char *)buf)[addr], page_size))
-                       return 0;
-
-               addr += page_size;
-               offset += page_size;
-       }
-       return 0;
-}
-
 #if defined(CONFIG_ENV_OFFSET_REDUND)
 #ifdef CMD_SAVEENV
 static int env_sf_save(void)
 {
        env_t   env_new;
-       char    *saved_buffer = NULL, flag = OBSOLETE_FLAG;
+       char    *saved_buffer = NULL, flag = ENV_REDUND_OBSOLETE;
        u32     saved_size, saved_offset, sector;
        int     ret;
 
@@ -131,7 +83,7 @@ static int env_sf_save(void)
        ret = env_export(&env_new);
        if (ret)
                return -EIO;
-       env_new.flags   = ACTIVE_FLAG;
+       env_new.flags   = ENV_REDUND_ACTIVE;
 
        if (gd->env_valid == ENV_VALID) {
                env_new_offset = CONFIG_ENV_OFFSET_REDUND;
@@ -150,8 +102,8 @@ static int env_sf_save(void)
                        ret = -ENOMEM;
                        goto done;
                }
-               ret = spi_flash_read_env(env_flash, saved_offset,
-                                        saved_size, saved_buffer);
+               ret = spi_flash_read(env_flash, saved_offset,
+                                       saved_size, saved_buffer);
                if (ret)
                        goto done;
        }
@@ -208,7 +160,7 @@ static int env_sf_load(void)
        tmp_env2 = (env_t *)memalign(ARCH_DMA_MINALIGN,
                        CONFIG_ENV_SIZE);
        if (!tmp_env1 || !tmp_env2) {
-               set_default_env("malloc() failed", 0);
+               env_set_default("malloc() failed", 0);
                ret = -EIO;
                goto out;
        }
@@ -217,10 +169,10 @@ static int env_sf_load(void)
        if (ret)
                goto out;
 
-       read1_fail = spi_flash_read_env(env_flash, CONFIG_ENV_OFFSET,
-                                       CONFIG_ENV_SIZE, tmp_env1);
-       read2_fail = spi_flash_read_env(env_flash, CONFIG_ENV_OFFSET_REDUND,
-                                       CONFIG_ENV_SIZE, tmp_env2);
+       read1_fail = spi_flash_read(env_flash, CONFIG_ENV_OFFSET,
+                                   CONFIG_ENV_SIZE, tmp_env1);
+       read2_fail = spi_flash_read(env_flash, CONFIG_ENV_OFFSET_REDUND,
+                                   CONFIG_ENV_SIZE, tmp_env2);
 
        ret = env_import_redund((char *)tmp_env1, read1_fail, (char *)tmp_env2,
                                read2_fail);
@@ -254,8 +206,8 @@ static int env_sf_save(void)
                if (!saved_buffer)
                        goto done;
 
-               ret = spi_flash_read_env(env_flash, saved_offset,
-                                        saved_size, saved_buffer);
+               ret = spi_flash_read(env_flash, saved_offset,
+                       saved_size, saved_buffer);
                if (ret)
                        goto done;
        }
@@ -303,7 +255,7 @@ static int env_sf_load(void)
 
        buf = (char *)memalign(ARCH_DMA_MINALIGN, CONFIG_ENV_SIZE);
        if (!buf) {
-               set_default_env("malloc() failed", 0);
+               env_set_default("malloc() failed", 0);
                return -EIO;
        }
 
@@ -311,10 +263,10 @@ static int env_sf_load(void)
        if (ret)
                goto out;
 
-       ret = spi_flash_read_env(env_flash, CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
-                                buf);
+       ret = spi_flash_read(env_flash,
+               CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, buf);
        if (ret) {
-               set_default_env("spi_flash_read_env() failed", 0);
+               env_set_default("spi_flash_read() failed", 0);
                goto err_read;
        }