env: sf: Free the old env_flash
authorJagan Teki <jagan@amarulasolutions.com>
Wed, 13 May 2020 11:02:42 +0000 (16:32 +0530)
committerJagan Teki <jagan@amarulasolutions.com>
Mon, 1 Jun 2020 12:25:24 +0000 (17:55 +0530)
env_flash is a global flash pointer, and the probe would
happen only if env_flash is NULL, but there is no checking
and free the pointer if is not NULL.

So, this patch frees the old env_flash, and get the probed
flash in to env_flash pointer and finally check if is not NULL.

Cc: Simon Glass <sjg@chromium.org>
Cc: Vignesh R <vigneshr@ti.com>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
env/sf.c

index 23de5a3495b9a40227b41b2d1b4a2387bd077929..02ed846fc73d0ce892641aedaf708c530f3bd842 100644 (file)
--- a/env/sf.c
+++ b/env/sf.c
@@ -53,15 +53,14 @@ static int setup_flash_device(void)
 
        env_flash = dev_get_uclass_priv(new);
 #else
+       if (env_flash)
+               spi_flash_free(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) {
-               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) {
-                       env_set_default("spi_flash_probe() failed", 0);
-                       return -EIO;
-               }
+               env_set_default("spi_flash_probe() failed", 0);
+               return -EIO;
        }
 #endif
        return 0;