Re: [PATCH] mtd: spi-nor: gigadevice: gd25q256: replace gd25q256_default_init with gd25q256_post_bfpt

From: Yaliang Wang
Date: Tue Sep 13 2022 - 23:06:30 EST


In case the mail list can't receive the email, I'd like to send the email again.

Sorry, I didn't make it clear.
I'm doing this because the flash info member parse_sfdp is initialized to "true" by PARSE_SFDP macro, as you can see below
{ "gd25q256", INFO(0xc84019, 0, 64 * 1024, 512)
PARSE_SFDP
FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_TB_SR_BIT6)
FIXUP_FLAGS(SPI_NOR_4B_OPCODES)
.fixups = &gd25q256_fixups },

And when parse_sfdp is true, the function spi_nor_init_params() will call spi_nor_parse_sfdp() to initialize the parameters, and I can't see any other place to call the original default_init() hook in the fixups other than in spi_nor_init_params_deprecated() -> spi_nor_manufacturer_init_params().

After checking the history of why we are adding this, that is to say the commit 48e4d973aefe ("mtd: spi-nor: Add a default_init() fixup hook for gd25q256") and the corresponding disscusions, I believe it was added for some reason, and we need to add back this function.

On 9/13/22 18:46, Vanessa Page wrote:
**[Please note: This e-mail is from an EXTERNAL e-mail address]

Why are you doing this?
------------------------------------------------------------------------
*From:* linux-mtd <linux-mtd-bounces@xxxxxxxxxxxxxxxxxxx> on behalf of yaliang.wang@xxxxxxxxxxxxx <yaliang.wang@xxxxxxxxxxxxx>
*Sent:* Tuesday, September 13, 2022 4:40 AM
*To:* tudor.ambarus@xxxxxxxxxxxxx <tudor.ambarus@xxxxxxxxxxxxx>; pratyush@xxxxxxxxxx <pratyush@xxxxxxxxxx>; michael@xxxxxxxx <michael@xxxxxxxx>; miquel.raynal@xxxxxxxxxxx <miquel.raynal@xxxxxxxxxxx>; richard@xxxxxx <richard@xxxxxx>; vigneshr@xxxxxx <vigneshr@xxxxxx>
*Cc:* linux-mtd@xxxxxxxxxxxxxxxxxxx <linux-mtd@xxxxxxxxxxxxxxxxxxx>; linux-kernel@xxxxxxxxxxxxxxx <linux-kernel@xxxxxxxxxxxxxxx>
*Subject:* [PATCH] mtd: spi-nor: gigadevice: gd25q256: replace gd25q256_default_init with gd25q256_post_bfpt
From: Yaliang Wang <Yaliang.Wang@xxxxxxxxxxxxx>

When utilizing PARSE_SFDP to initialize the flash parameter, the
deprecated initializing method spi_nor_init_params_deprecated() and the
function spi_nor_manufacturer_init_params() within it will never be
executed, which results in the default_init hook function will also never
be executed. As we do have quad enable function defined in BFPT, the
post_bfpt hook will be the right place to tweak the function.

Cc: stable@xxxxxxxxxxxxxxx
Fixes: 047275f7de18 ("mtd: spi-nor: gigadevice: gd25q256: Init flash based on SFDP")
Reported-by: kernel test robot <lkp@xxxxxxxxx>
Signed-off-by: Yaliang Wang <Yaliang.Wang@xxxxxxxxxxxxx>
---
 drivers/mtd/spi-nor/gigadevice.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/spi-nor/gigadevice.c b/drivers/mtd/spi-nor/gigadevice.c
index 119b38e6fc2a..bdc4d73424af 100644
--- a/drivers/mtd/spi-nor/gigadevice.c
+++ b/drivers/mtd/spi-nor/gigadevice.c
@@ -8,19 +8,24 @@

 #include "core.h"

-static void gd25q256_default_init(struct spi_nor *nor)
+static int
+gd25q256_post_bfpt(struct spi_nor *nor,
+                  const struct sfdp_parameter_header *bfpt_header,
+                  const struct sfdp_bfpt *bfpt)
 {
         /*
          * Some manufacturer like GigaDevice may use different
          * bit to set QE on different memories, so the MFR can't
          * indicate the quad_enable method for this case, we need
-        * to set it in the default_init fixup hook.
+        * to set it in the post_bfpt fixup hook.
          */
         nor->params->quad_enable = spi_nor_sr1_bit6_quad_enable;
+
+       return 0;
 }

 static const struct spi_nor_fixups gd25q256_fixups = {
-       .default_init = gd25q256_default_init,
+       .post_bfpt = gd25q256_post_bfpt,
 };

 static const struct flash_info gigadevice_nor_parts[] = {
--
2.34.1


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/ <https://urldefense.com/v3/__http://lists.infradead.org/mailman/listinfo/linux-mtd/__;!!AjveYdw8EvQ!cFcIju_6rdasA67JAVB5Ww727YTj7uzWhJ8HjkRjEJmn-BFGWsga9mPTqCo_m8WFT4Jcu8Uj0iME34B3OOc$>