All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Anderson <seanga2@gmail.com>
To: u-boot@lists.denx.de
Subject: [PATCH v3 1/1] env: sf: single function env_sf_save()
Date: Mon, 1 Mar 2021 18:10:35 -0500	[thread overview]
Message-ID: <4857412c-0a63-3c0d-aeda-db3620792c43@gmail.com> (raw)
In-Reply-To: <60bb9cc5-1bfb-4957-7c20-7dcf2de28760@men.de>

On 3/1/21 11:39 AM, Harry Waschkeit wrote:
> ?Hi again,
> 
> gentle ping for that patch, also in view of subsequently sent patch ...
> 
>   https://lists.denx.de/pipermail/u-boot/2021-February/439797.html
> 
> ... which saw a competing patch by Patrick Delaunay a week later:
> 
>   https://lists.denx.de/pipermail/u-boot/2021-February/440769.html
> 
> However, the latter doesn't seem to take embedded environments into account.

Can you give an example of where your patch would work while Patrick's wouldn't?

Thanks.

--Sean

> 
> Best regards,
> Harry
> 
> 
> On 02.02.21 09:21, Harry Waschkeit wrote:
>> Instead of implementing redundant environments in two very similar
>> functions env_sf_save(), handle redundancy in one function, placing the
>> few differences in appropriate pre-compiler sections depending on config
>> option CONFIG_ENV_OFFSET_REDUND.
>>
>> Additionally, several checkpatch complaints were addressed.
>>
>> This patch is in preparation for adding support for env erase.
>>
>> Signed-off-by: Harry Waschkeit <Harry.Waschkeit@men.de>
>> Reviewed-by: Stefan Roese <sr@denx.de>
>> ---
>> Change in v3:
>>   - no change in patch, only added "reviewed-by" to commit log
>>
>> Change in v2:
>>   - remove one more #ifdef, instead take advantage of compiler attribute
>>     __maybe_unused for one variable used only in case of redundant
>>     environments
>>
>>   env/sf.c | 130 ++++++++++++++++++-------------------------------------
>>   1 file changed, 41 insertions(+), 89 deletions(-)
>>
>> diff --git a/env/sf.c b/env/sf.c
>> index 937778aa37..199114fd3b 100644
>> --- a/env/sf.c
>> +++ b/env/sf.c
>> @@ -66,13 +66,14 @@ static int setup_flash_device(void)
>>       return 0;
>>   }
>> -#if defined(CONFIG_ENV_OFFSET_REDUND)
>>   static int env_sf_save(void)
>>   {
>>       env_t    env_new;
>> -    char    *saved_buffer = NULL, flag = ENV_REDUND_OBSOLETE;
>> +    char    *saved_buffer = NULL;
>>       u32    saved_size, saved_offset, sector;
>> +    ulong    offset;
>>       int    ret;
>> +    __maybe_unused char flag = ENV_REDUND_OBSOLETE;
>>       ret = setup_flash_device();
>>       if (ret)
>> @@ -81,27 +82,33 @@ static int env_sf_save(void)
>>       ret = env_export(&env_new);
>>       if (ret)
>>           return -EIO;
>> -    env_new.flags    = ENV_REDUND_ACTIVE;
>> -    if (gd->env_valid == ENV_VALID) {
>> -        env_new_offset = CONFIG_ENV_OFFSET_REDUND;
>> -        env_offset = CONFIG_ENV_OFFSET;
>> -    } else {
>> -        env_new_offset = CONFIG_ENV_OFFSET;
>> -        env_offset = CONFIG_ENV_OFFSET_REDUND;
>> -    }
>> +#if CONFIG_IS_ENABLED(SYS_REDUNDAND_ENVIRONMENT)
>> +        env_new.flags    = ENV_REDUND_ACTIVE;
>> +
>> +        if (gd->env_valid == ENV_VALID) {
>> +            env_new_offset = CONFIG_ENV_OFFSET_REDUND;
>> +            env_offset = CONFIG_ENV_OFFSET;
>> +        } else {
>> +            env_new_offset = CONFIG_ENV_OFFSET;
>> +            env_offset = CONFIG_ENV_OFFSET_REDUND;
>> +        }
>> +        offset = env_new_offset;
>> +#else
>> +        offset = CONFIG_ENV_OFFSET;
>> +#endif
>>       /* Is the sector larger than the env (i.e. embedded) */
>>       if (CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE) {
>>           saved_size = CONFIG_ENV_SECT_SIZE - CONFIG_ENV_SIZE;
>> -        saved_offset = env_new_offset + CONFIG_ENV_SIZE;
>> +        saved_offset = offset + CONFIG_ENV_SIZE;
>>           saved_buffer = memalign(ARCH_DMA_MINALIGN, saved_size);
>>           if (!saved_buffer) {
>>               ret = -ENOMEM;
>>               goto done;
>>           }
>> -        ret = spi_flash_read(env_flash, saved_offset,
>> -                    saved_size, saved_buffer);
>> +        ret = spi_flash_read(env_flash, saved_offset, saved_size,
>> +                     saved_buffer);
>>           if (ret)
>>               goto done;
>>       }
>> @@ -109,35 +116,39 @@ static int env_sf_save(void)
>>       sector = DIV_ROUND_UP(CONFIG_ENV_SIZE, CONFIG_ENV_SECT_SIZE);
>>       puts("Erasing SPI flash...");
>> -    ret = spi_flash_erase(env_flash, env_new_offset,
>> -                sector * CONFIG_ENV_SECT_SIZE);
>> +    ret = spi_flash_erase(env_flash, offset,
>> +                  sector * CONFIG_ENV_SECT_SIZE);
>>       if (ret)
>>           goto done;
>>       puts("Writing to SPI flash...");
>> -    ret = spi_flash_write(env_flash, env_new_offset,
>> -        CONFIG_ENV_SIZE, &env_new);
>> +    ret = spi_flash_write(env_flash, offset,
>> +                  CONFIG_ENV_SIZE, &env_new);
>>       if (ret)
>>           goto done;
>>       if (CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE) {
>> -        ret = spi_flash_write(env_flash, saved_offset,
>> -                    saved_size, saved_buffer);
>> +        ret = spi_flash_write(env_flash, saved_offset, saved_size,
>> +                      saved_buffer);
>>           if (ret)
>>               goto done;
>>       }
>> -    ret = spi_flash_write(env_flash, env_offset + offsetof(env_t, flags),
>> -                sizeof(env_new.flags), &flag);
>> -    if (ret)
>> -        goto done;
>> +#if CONFIG_IS_ENABLED(SYS_REDUNDAND_ENVIRONMENT)
>> +        ret = spi_flash_write(env_flash, env_offset + offsetof(env_t, flags),
>> +                      sizeof(env_new.flags), &flag);
>> +        if (ret)
>> +            goto done;
>> -    puts("done\n");
>> +        puts("done\n");
>> -    gd->env_valid = gd->env_valid == ENV_REDUND ? ENV_VALID : ENV_REDUND;
>> +        gd->env_valid = gd->env_valid == ENV_REDUND ? ENV_VALID : ENV_REDUND;
>> -    printf("Valid environment: %d\n", (int)gd->env_valid);
>> +        printf("Valid environment: %d\n", (int)gd->env_valid);
>> +#else
>> +        puts("done\n");
>> +#endif
>>    done:
>>       if (saved_buffer)
>> @@ -146,6 +157,7 @@ static int env_sf_save(void)
>>       return ret;
>>   }
>> +#if CONFIG_IS_ENABLED(SYS_REDUNDAND_ENVIRONMENT)
>>   static int env_sf_load(void)
>>   {
>>       int ret;
>> @@ -183,66 +195,6 @@ out:
>>       return ret;
>>   }
>>   #else
>> -static int env_sf_save(void)
>> -{
>> -    u32    saved_size, saved_offset, sector;
>> -    char    *saved_buffer = NULL;
>> -    int    ret = 1;
>> -    env_t    env_new;
>> -
>> -    ret = setup_flash_device();
>> -    if (ret)
>> -        return ret;
>> -
>> -    /* Is the sector larger than the env (i.e. embedded) */
>> -    if (CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE) {
>> -        saved_size = CONFIG_ENV_SECT_SIZE - CONFIG_ENV_SIZE;
>> -        saved_offset = CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE;
>> -        saved_buffer = malloc(saved_size);
>> -        if (!saved_buffer)
>> -            goto done;
>> -
>> -        ret = spi_flash_read(env_flash, saved_offset,
>> -            saved_size, saved_buffer);
>> -        if (ret)
>> -            goto done;
>> -    }
>> -
>> -    ret = env_export(&env_new);
>> -    if (ret)
>> -        goto done;
>> -
>> -    sector = DIV_ROUND_UP(CONFIG_ENV_SIZE, CONFIG_ENV_SECT_SIZE);
>> -
>> -    puts("Erasing SPI flash...");
>> -    ret = spi_flash_erase(env_flash, CONFIG_ENV_OFFSET,
>> -        sector * CONFIG_ENV_SECT_SIZE);
>> -    if (ret)
>> -        goto done;
>> -
>> -    puts("Writing to SPI flash...");
>> -    ret = spi_flash_write(env_flash, CONFIG_ENV_OFFSET,
>> -        CONFIG_ENV_SIZE, &env_new);
>> -    if (ret)
>> -        goto done;
>> -
>> -    if (CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE) {
>> -        ret = spi_flash_write(env_flash, saved_offset,
>> -            saved_size, saved_buffer);
>> -        if (ret)
>> -            goto done;
>> -    }
>> -
>> -    ret = 0;
>> -    puts("done\n");
>> -
>> - done:
>> -    if (saved_buffer)
>> -        free(saved_buffer);
>> -
>> -    return ret;
>> -}
>> -
>>   static int env_sf_load(void)
>>   {
>>       int ret;
>> @@ -258,8 +210,8 @@ static int env_sf_load(void)
>>       if (ret)
>>           goto out;
>> -    ret = spi_flash_read(env_flash,
>> -        CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, buf);
>> +    ret = spi_flash_read(env_flash, CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
>> +                 buf);
>>       if (ret) {
>>           env_set_default("spi_flash_read() failed", 0);
>>           goto err_read;
>> @@ -292,7 +244,7 @@ static int env_sf_init(void)
>>       env_t *env_ptr = (env_t *)env_sf_get_env_addr();
>>       if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
>> -        gd->env_addr    = (ulong)&(env_ptr->data);
>> +        gd->env_addr    = (ulong)&env_ptr->data;
>>           gd->env_valid    = 1;
>>       } else {
>>           gd->env_addr = (ulong)&default_environment[0];
>>
> 
> 

  reply	other threads:[~2021-03-01 23:10 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-02  8:21 [PATCH v3 1/1] env: sf: single function env_sf_save() Harry Waschkeit
2021-02-02  9:30 ` Stefan Roese
2021-02-02 14:43   ` Harry Waschkeit
2021-02-02 14:54     ` Stefan Roese
2021-02-02 17:09       ` Harry Waschkeit
2021-02-03  6:10         ` Stefan Roese
2021-03-01 16:39 ` Harry Waschkeit
2021-03-01 23:10   ` Sean Anderson [this message]
2021-03-02 18:09     ` Harry Waschkeit
2021-03-02 23:06       ` Sean Anderson
2021-03-03 17:52         ` Harry Waschkeit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4857412c-0a63-3c0d-aeda-db3620792c43@gmail.com \
    --to=seanga2@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.