lkml.org 
[lkml]   [2019]   [Jul]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/7] mtd: spi-nor: Add default_init() hook to tweak flash parameters
    Date
    From: Tudor Ambarus <tudor.ambarus@microchip.com>

    As of now, the flash parameters initialization logic is as following:

    a/ default flash parameters init in spi_nor_init_params()
    b/ manufacturer specific flash parameters updates, split across entire
    spi-nor core code
    c/ flash parameters updates based on SFDP tables
    d/ post BFPT flash parameter updates

    In the quest of removing the manufacturer specific code from the spi-nor
    core, we want to impose a timeline/priority on how the flash parameters
    are updated. The following sequence of calls is pursued:

    1/ spi-nor core legacy flash parameters init:
    spi_nor_default_init_params()

    2/ MFR-based manufacturer flash parameters init:
    nor->manufacturer->fixups->default_init()

    3/ specific flash_info tweeks done when decisions can not be done just on
    MFR:
    nor->info->fixups->default_init()

    4/ SFDP tables flash parameters init - SFDP knows better:
    spi_nor_sfdp_init_params()

    5/ post SFDP tables flash parameters updates - in case manufacturers get
    the serial flash tables wrong or incomplete.
    nor->info->fixups->post_sfdp()
    The later can be extended to nor->manufacturer->fixups->post_sfdp() if
    needed.

    This patch opens doors for steps 2/ and 3/.

    Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    ---
    drivers/mtd/spi-nor/spi-nor.c | 15 +++++++++++++++
    1 file changed, 15 insertions(+)

    diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
    index 28a64dbdaea9..ac00f90ebaa9 100644
    --- a/drivers/mtd/spi-nor/spi-nor.c
    +++ b/drivers/mtd/spi-nor/spi-nor.c
    @@ -219,12 +219,17 @@ struct sfdp_bfpt {

    /**
    * struct spi_nor_fixups - SPI NOR fixup hooks
    + * @default_init: called after default flash parameters init. Used to tweak
    + * flash parameters when information provided by the flash_info
    + * table is incomplete or wrong.
    * @post_bfpt: called after the BFPT table has been parsed
    *
    * Those hooks can be used to tweak the SPI NOR configuration when the SFDP
    * table is broken or not available.
    */
    struct spi_nor_fixups {
    + void (*default_init)(struct spi_nor *nor,
    + struct spi_nor_flash_parameter *params);
    int (*post_bfpt)(struct spi_nor *nor,
    const struct sfdp_parameter_header *bfpt_header,
    const struct sfdp_bfpt *bfpt,
    @@ -4267,6 +4272,14 @@ static int spi_nor_parse_sfdp(struct spi_nor *nor,
    return err;
    }

    +static void
    +spi_nor_manufacturer_init_params(struct spi_nor *nor,
    + struct spi_nor_flash_parameter *params)
    +{
    + if (nor->info->fixups && nor->info->fixups->default_init)
    + return nor->info->fixups->default_init(nor, params);
    +}
    +
    static int spi_nor_init_params(struct spi_nor *nor,
    struct spi_nor_flash_parameter *params)
    {
    @@ -4370,6 +4383,8 @@ static int spi_nor_init_params(struct spi_nor *nor,
    params->quad_enable = info->quad_enable;
    }

    + spi_nor_manufacturer_init_params(nor, params);
    +
    if ((info->flags & (SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)) &&
    !(info->flags & SPI_NOR_SKIP_SFDP)) {
    struct spi_nor_flash_parameter sfdp_params;
    --
    2.9.5
    \
     
     \ /
      Last update: 2019-07-31 11:03    [W:3.722 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site