[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