Suggestion for subject:

mtd: spinand: Refactor spinand_init* functions

Am 09.08.25 um 03:04 schrieb Mikhail Kshevetskiy:
> No functional changes, just some refactoring to match better linux
> kernel driver.

Nitpick: "... better match Linux kernel driver"

With the subject line improved:

Reviewed-by: Frieder Schrempf <frieder.schre...@kontron.de>

> 
> changes:
>  * move spinand configuration reading out from spinand_init_cfg_cache()
>    to separate function spinand_read_cfg()
>  * move spinand flash initialization to separate function
>    spinand_init_flash()
>  * move direct mapping initialization to the end of spinand_init()>
> Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevets...@iopsys.eu>
> ---
>  drivers/mtd/nand/spi/core.c | 112 ++++++++++++++++++++++--------------
>  1 file changed, 70 insertions(+), 42 deletions(-)
> 
> diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
> index 098ed0c4cd2..df59d3d23ce 100644
> --- a/drivers/mtd/nand/spi/core.c
> +++ b/drivers/mtd/nand/spi/core.c
> @@ -160,20 +160,12 @@ int spinand_select_target(struct spinand_device 
> *spinand, unsigned int target)
>       return 0;
>  }
>  
> -static int spinand_init_cfg_cache(struct spinand_device *spinand)
> +static int spinand_read_cfg(struct spinand_device *spinand)
>  {
>       struct nand_device *nand = spinand_to_nand(spinand);
> -     struct udevice *dev = spinand->slave->dev;
>       unsigned int target;
>       int ret;
>  
> -     spinand->cfg_cache = devm_kzalloc(dev,
> -                                       sizeof(*spinand->cfg_cache) *
> -                                       nand->memorg.ntargets,
> -                                       GFP_KERNEL);
> -     if (!spinand->cfg_cache)
> -             return -ENOMEM;
> -
>       for (target = 0; target < nand->memorg.ntargets; target++) {
>               ret = spinand_select_target(spinand, target);
>               if (ret)
> @@ -192,6 +184,21 @@ static int spinand_init_cfg_cache(struct spinand_device 
> *spinand)
>       return 0;
>  }
>  
> +static int spinand_init_cfg_cache(struct spinand_device *spinand)
> +{
> +     struct nand_device *nand = spinand_to_nand(spinand);
> +     struct udevice *dev = spinand->slave->dev;
> +
> +     spinand->cfg_cache = devm_kcalloc(dev,
> +                                       nand->memorg.ntargets,
> +                                       sizeof(*spinand->cfg_cache),
> +                                       GFP_KERNEL);
> +     if (!spinand->cfg_cache)
> +             return -ENOMEM;
> +
> +     return 0;
> +}
> +
>  static int spinand_init_quad_enable(struct spinand_device *spinand)
>  {
>       bool enable = false;
> @@ -1091,11 +1098,55 @@ static const struct mtd_ooblayout_ops 
> spinand_noecc_ooblayout = {
>       .rfree = spinand_noecc_ooblayout_free,
>  };
>  
> +static int spinand_init_flash(struct spinand_device *spinand)
> +{
> +     struct udevice *dev = spinand->slave->dev;
> +     struct nand_device *nand = spinand_to_nand(spinand);
> +     int ret, i;
> +
> +     ret = spinand_read_cfg(spinand);
> +     if (ret)
> +             return ret;
> +
> +     ret = spinand_init_quad_enable(spinand);
> +     if (ret)
> +             return ret;
> +
> +     ret = spinand_upd_cfg(spinand, CFG_OTP_ENABLE, 0);
> +     if (ret)
> +             return ret;
> +
> +     ret = spinand_manufacturer_init(spinand);
> +     if (ret) {
> +             dev_err(dev,
> +                     "Failed to initialize the SPI NAND chip (err = %d)\n",
> +                     ret);
> +             return ret;
> +     }
> +
> +     /* After power up, all blocks are locked, so unlock them here. */
> +     for (i = 0; i < nand->memorg.ntargets; i++) {
> +             ret = spinand_select_target(spinand, i);
> +             if (ret)
> +                     break;
> +
> +             ret = spinand_lock_block(spinand, BL_ALL_UNLOCKED);
> +             if (ret)
> +                     break;
> +     }
> +
> +     if (ret)
> +             spinand_manufacturer_cleanup(spinand);
> +
> +     return ret;
> +}
> +
>  static int spinand_init(struct spinand_device *spinand)
>  {
> +     struct udevice *dev = spinand->slave->dev;
>       struct mtd_info *mtd = spinand_to_mtd(spinand);
>       struct nand_device *nand = mtd_to_nanddev(mtd);
> -     int ret, i;
> +     int ret;
>  
>       /*
>        * We need a scratch buffer because the spi_mem interface requires that
> @@ -1128,41 +1179,10 @@ static int spinand_init(struct spinand_device 
> *spinand)
>       if (ret)
>               goto err_free_bufs;
>  
> -     ret = spinand_init_quad_enable(spinand);
> +     ret = spinand_init_flash(spinand);
>       if (ret)
>               goto err_free_bufs;
>  
> -     ret = spinand_upd_cfg(spinand, CFG_OTP_ENABLE, 0);
> -     if (ret)
> -             goto err_free_bufs;
> -
> -     ret = spinand_manufacturer_init(spinand);
> -     if (ret) {
> -             dev_err(spinand->slave->dev,
> -                     "Failed to initialize the SPI NAND chip (err = %d)\n",
> -                     ret);
> -             goto err_free_bufs;
> -     }
> -
> -     ret = spinand_create_dirmaps(spinand);
> -     if (ret) {
> -             dev_err(spinand->slave->dev,
> -                     "Failed to create direct mappings for read/write 
> operations (err = %d)\n",
> -                     ret);
> -             goto err_manuf_cleanup;
> -     }
> -
> -     /* After power up, all blocks are locked, so unlock them here. */
> -     for (i = 0; i < nand->memorg.ntargets; i++) {
> -             ret = spinand_select_target(spinand, i);
> -             if (ret)
> -                     goto err_manuf_cleanup;
> -
> -             ret = spinand_lock_block(spinand, BL_ALL_UNLOCKED);
> -             if (ret)
> -                     goto err_manuf_cleanup;
> -     }
> -
>       ret = nanddev_init(nand, &spinand_ops, THIS_MODULE);
>       if (ret)
>               goto err_manuf_cleanup;
> @@ -1189,6 +1209,14 @@ static int spinand_init(struct spinand_device *spinand)
>  
>       mtd->oobavail = ret;
>  
> +     ret = spinand_create_dirmaps(spinand);
> +     if (ret) {
> +             dev_err(dev,
> +                     "Failed to create direct mappings for read/write 
> operations (err = %d)\n",
> +                     ret);
> +             goto err_cleanup_nanddev;
> +     }
> +
>       return 0;
>  
>  err_cleanup_nanddev:

Reply via email to