[][kernel][mt7988][spi nand][Support of spi nand W25N01KV]

[Description]
Change ids and config support of spi nand W25N01KV according to the
spec, QVL test passed after modified the code.

[Release-log]
N/A

Change-Id: I69fdb8f179e0629647ae6ccf3a95fe02962840a6
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6894701
diff --git a/target/linux/mediatek/patches-5.4/0490-mtd-spinand-winbond-Support-for-W25MxxGV-W25NxxKV-series.patch b/target/linux/mediatek/patches-5.4/0490-mtd-spinand-winbond-Support-for-W25MxxGV-W25NxxKV-series.patch
index 8a2af8d..860a8d9 100644
--- a/target/linux/mediatek/patches-5.4/0490-mtd-spinand-winbond-Support-for-W25MxxGV-W25NxxKV-series.patch
+++ b/target/linux/mediatek/patches-5.4/0490-mtd-spinand-winbond-Support-for-W25MxxGV-W25NxxKV-series.patch
@@ -1,6 +1,6 @@
 --- a/drivers/mtd/nand/spi/winbond.c
 +++ b/drivers/mtd/nand/spi/winbond.c
-@@ -15,6 +15,25 @@
+@@ -15,6 +15,23 @@
  
  #define WINBOND_CFG_BUF_READ		BIT(3)
  
@@ -15,18 +15,16 @@
 +#define W25N01_M02GV_STATUS_ECC_1_BITFLIPS	(1 << 4)
 +#define W25N01_M02GV_STATUS_ECC_UNCOR_ERROR	(2 << 4)
 +
-+#if IS_ENABLED(CONFIG_MTD_SPI_NAND_W25N01KV)
 +#define W25N01KV_STATUS_ECC_MASK		(3 << 4)
 +#define W25N01KV_STATUS_ECC_NO_BITFLIPS		(0 << 4)
 +#define W25N01KV_STATUS_ECC_1_3_BITFLIPS	(1 << 4)
 +#define W25N01KV_STATUS_ECC_4_BITFLIPS		(3 << 4)
 +#define W25N01KV_STATUS_ECC_UNCOR_ERROR		(2 << 4)
-+#endif
 +
  static SPINAND_OP_VARIANTS(read_cache_variants,
  		SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0),
  		SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
-@@ -31,6 +50,29 @@ static SPINAND_OP_VARIANTS(update_cache_
+@@ -31,6 +48,29 @@ static SPINAND_OP_VARIANTS(update_cache_
  		SPINAND_PROG_LOAD_X4(false, 0, NULL, 0),
  		SPINAND_PROG_LOAD(false, 0, NULL, 0));
  
@@ -56,11 +54,10 @@
  static int w25m02gv_ooblayout_ecc(struct mtd_info *mtd, int section,
  				  struct mtd_oob_region *region)
  {
-@@ -74,9 +116,63 @@ static int w25m02gv_select_target(struct
+@@ -74,9 +114,61 @@ static int w25m02gv_select_target(struct
  	return spi_mem_exec_op(spinand->spimem, &op);
  }
  
-+#if IS_ENABLED(CONFIG_MTD_SPI_NAND_W25N01KV)
 +static int w25n01kv_ecc_get_status(struct spinand_device *spinand,
 +					u8 status)
 +{
@@ -83,7 +80,6 @@
 +
 +	return -EINVAL;
 +}
-+#endif
 +
 +static int w25n02kv_n04kv_ecc_get_status(struct spinand_device *spinand,
 +					u8 status)
@@ -121,14 +117,13 @@
  		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 2),
  		     NAND_ECCREQ(1, 512),
  		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
-@@ -85,8 +181,20 @@ static const struct spinand_info winbond
+@@ -85,8 +177,18 @@ static const struct spinand_info winbond
  		     0,
  		     SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL),
  		     SPINAND_SELECT_TARGET(w25m02gv_select_target)),
-+#if IS_ENABLED(CONFIG_MTD_SPI_NAND_W25N01KV)
 +	SPINAND_INFO("W25N01KV",
-+		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x21),
-+		     NAND_MEMORG(1, 2048, 96, 64, 1024, 20, 1, 1, 1),
++		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xae, 0x21),
++		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
 +		     NAND_ECCREQ(4, 512),
 +		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
 +					      &write_cache_variants,
@@ -136,18 +131,16 @@
 +		     0,
 +		     SPINAND_ECCINFO(&w25n02kv_n04kv_ooblayout,
 +				     w25n01kv_ecc_get_status)),
-+#else
  	SPINAND_INFO("W25N01GV",
 -		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa),
 +		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x21),
  		     NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
  		     NAND_ECCREQ(1, 512),
  		     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
-@@ -94,6 +202,30 @@ static const struct spinand_info winbond
+@@ -94,6 +196,29 @@ static const struct spinand_info winbond
  					      &update_cache_variants),
  		     0,
  		     SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)),
-+#endif
 +	SPINAND_INFO("W25N02KV",
 +		     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x22),
 +		     NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 2, 1, 1),
@@ -174,18 +167,3 @@
  };
  
  static int winbond_spinand_init(struct spinand_device *spinand)
---- a/drivers/mtd/nand/spi/Kconfig
-+++ b/drivers/mtd/nand/spi/Kconfig
-@@ -6,3 +6,12 @@ menuconfig MTD_SPI_NAND
- 	select SPI_MEM
- 	help
- 	  This is the framework for the SPI NAND device drivers.
-+
-+config MTD_SPI_NAND_W25N01KV
-+	tristate "Winbond W25N01KV Support"
-+	select MTD_SPI_NAND
-+	default n
-+	help
-+	  Winbond W25N01KV share the same ID with W25N01GV. However, they have
-+	  different attributes.
-+