[U-Boot] [PATCH] sf: remove spi-flash chip names from SPL binary

Simon Goldschmidt simon.k.r.goldschmidt at gmail.com
Fri Sep 28 17:58:46 UTC 2018


On 28.09.2018 19:20, Jagan Teki wrote:
> On Fri, Aug 17, 2018 at 12:23 PM Simon Goldschmidt
> <simon.k.r.goldschmidt at gmail.com> wrote:
>> The table of spi flash chips 'spi_flash_ids' currently
>> includes chip names. The only usage of these is to
>> print the name when the chip is probed.
>>
>> Since this message is not shown in SPL, we can remove
>> the names from the SPL binary.
>>
>> Removing the chip names saves ~890 Byte from the SPL
>> binary in my configuration (socfpga_socrates_defconfig,
>> MACRONIX, SPANSION and STMICRO enabled).
>>
>> Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt at gmail.com>
>> ---
>>
>>   drivers/mtd/spi/sf_internal.h   |  10 ++
>>   drivers/mtd/spi/spi_flash.c     |   7 +-
>>   drivers/mtd/spi/spi_flash_ids.c | 270 +++++++++++++++++---------------
>>   3 files changed, 156 insertions(+), 131 deletions(-)
>>
>> diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
>> index 4f63cacc64..e5f91ca952 100644
>> --- a/drivers/mtd/spi/sf_internal.h
>> +++ b/drivers/mtd/spi/sf_internal.h
>> @@ -113,9 +113,18 @@ int sst_write_bp(struct spi_flash *flash, u32 offset, size_t len,
>>   #define JEDEC_EXT(info)                (((info)->id[3]) << 8 | ((info)->id[4]))
>>   #define SPI_FLASH_MAX_ID_LEN   6
>>
>> +/* Exclude chip names for SPL to save space */
>> +#ifdef CONFIG_SPL_BUILD
>> +#define SPI_FLASH_INCLUDE_NAME 0
>> +#else
>> +#define SPI_FLASH_INCLUDE_NAME 1
> No need for extra macro, define macros wherever needed and expand SPL
> and non-SPL?

So directly use #ifdef CONFIG_SPL_BUILD everywhere instead of 
SPI_FLASH_INCLUDE_NAME? No problem.


>> +#endif
>> +
>>   struct spi_flash_info {
>> +#if SPI_FLASH_INCLUDE_NAME
>>          /* Device name ([MANUFLETTER][DEVTYPE][DENSITY][EXTRAINFO]) */
>>          const char      *name;
>> +#endif
>>
>>          /*
>>           * This array stores the ID bytes.
>> @@ -147,6 +156,7 @@ struct spi_flash_info {
>>   };
>>
> [snip]
>
>>          {},     /* Empty entry to terminate the list */
>>          /*
>> @@ -205,3 +213,5 @@ const struct spi_flash_info spi_flash_ids[] = {
>>           * (w25q256fw, w25q256fv_qpi)
>>           */
>>   };
>> +
>> +const size_t spi_flash_ids_size = ARRAY_SIZE(spi_flash_ids);
> Check array size directly in for loop.

That desn't work as the array is defined in spi_flash_ids.c and the for 
loop in spi_flash.c doesn't know its size at compile time.

I can change the code to check for 'info->sector_size != 0' instead of 
'info->name != NULL' if this is preferred.


Simon



More information about the U-Boot mailing list