Re: [PATCH V2] mtd: spinand: Add support for XTX SPINAND

2024-03-11 Thread Bruce Sun



On 3/11/2024 4:50 PM, Frieder Schrempf wrote:

Hi Bruce,

On 11.03.24 03:54, Bruce Suen wrote:

[Sie erhalten nicht häufig E-Mails vonbruce_s...@163.com. Weitere 
Informationen, warum dies wichtig ist, finden Sie 
unterhttps://aka.ms/LearnAboutSenderIdentification  ]

Add support for XTX XT26G0xA and XT26xxxD,the driver is ported from
linux-6.7.1.

Please, fix the spelling like this:

Add support for XTX XT26G0xA and XT26xxxD. The driver is ported from
Linux 6.7.1.

ok,I will change it like this in next version.


Also, did you test this driver in U-Boot with some specific board and
SPI NAND chip? Then please add the information about your setup to the
commit message. Thanks!


I have test this drvier on Banana BPI-R3with  XT26G01A and XT26G12D.

I will add this information in next version.


Signed-off-by: Bruce Suen
---
V1->V2:
- remove patch errors

Checkpatch still produces the following warnings, please fix them!

sorry, I will fix this in next version.


CHECK: Alignment should match open parenthesis
#90: FILE: drivers/mtd/nand/spi/xtx.c:44:
+static int xt26g0xa_ooblayout_ecc(struct mtd_info *mtd, int section,
+   struct mtd_oob_region *region)

CHECK: Alignment should match open parenthesis
#102: FILE: drivers/mtd/nand/spi/xtx.c:56:
+static int xt26g0xa_ooblayout_free(struct mtd_info *mtd, int section,
+   struct mtd_oob_region *region)

Thanks
Frieder


---
  drivers/mtd/nand/spi/Makefile |   2 +-
  drivers/mtd/nand/spi/core.c   |   1 +
  drivers/mtd/nand/spi/xtx.c| 266 ++
  include/linux/mtd/spinand.h   |   1 +
  4 files changed, 269 insertions(+), 1 deletion(-)
  create mode 100644 drivers/mtd/nand/spi/xtx.c

diff --git a/drivers/mtd/nand/spi/Makefile b/drivers/mtd/nand/spi/Makefile
index f172f4787f..65b836b34c 100644
--- a/drivers/mtd/nand/spi/Makefile
+++ b/drivers/mtd/nand/spi/Makefile
@@ -1,5 +1,5 @@
  # SPDX-License-Identifier: GPL-2.0

  spinand-objs := core.o esmt.o gigadevice.o macronix.o micron.o paragon.o
-spinand-objs += toshiba.o winbond.o
+spinand-objs += toshiba.o winbond.o xtx.o
  obj-$(CONFIG_MTD_SPI_NAND) += spinand.o
diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
index 8ca33459f9..62c28aa422 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -829,6 +829,7 @@ static const struct spinand_manufacturer 
*spinand_manufacturers[] = {
 _spinand_manufacturer,
 _spinand_manufacturer,
 _c8_spinand_manufacturer,
+   _spinand_manufacturer,
  };

  static int spinand_manufacturer_match(struct spinand_device *spinand,
diff --git a/drivers/mtd/nand/spi/xtx.c b/drivers/mtd/nand/spi/xtx.c
new file mode 100644
index 00..6b7b265136
--- /dev/null
+++ b/drivers/mtd/nand/spi/xtx.c
@@ -0,0 +1,266 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Author:
+ * Felix Matouschek
+ */
+
+#include 
+#ifndef __UBOOT__
+#include 
+#include 
+#endif
+#include 
+
+#define SPINAND_MFR_XTX0x0B
+
+#define XT26G0XA_STATUS_ECC_MASK   GENMASK(5, 2)
+#define XT26G0XA_STATUS_ECC_NO_DETECTED(0 << 2)
+#define XT26G0XA_STATUS_ECC_8_CORRECTED(3 << 4)
+#define XT26G0XA_STATUS_ECC_UNCOR_ERROR(2 << 4)
+
+#define XT26XXXD_STATUS_ECC3_ECC2_MASK GENMASK(7, 6)
+#define XT26XXXD_STATUS_ECC_NO_DETECTED (0)
+#define XT26XXXD_STATUS_ECC_1_7_CORRECTED   (1)
+#define XT26XXXD_STATUS_ECC_8_CORRECTED (3)
+#define XT26XXXD_STATUS_ECC_UNCOR_ERROR (2)
+
+static SPINAND_OP_VARIANTS(read_cache_variants,
+   SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0));
+
+static SPINAND_OP_VARIANTS(write_cache_variants,
+   SPINAND_PROG_LOAD_X4(true, 0, NULL, 0),
+   SPINAND_PROG_LOAD(true, 0, NULL, 0));
+
+static SPINAND_OP_VARIANTS(update_cache_variants,
+   SPINAND_PROG_LOAD_X4(false, 0, NULL, 0),
+   SPINAND_PROG_LOAD(false, 0, NULL, 0));
+
+static int xt26g0xa_ooblayout_ecc(struct mtd_info *mtd, int section,
+   struct mtd_oob_region *region)
+{
+   if (section)
+   return -ERANGE;
+
+   region->offset = 48;
+   region->length = 16;
+
+   return 0;
+}
+
+static int xt26g0xa_ooblayout_free(struct mtd_info *mtd, int section,
+   struct mtd_oob_region *region)
+{
+   if (section)
+   return -ERANGE;
+
+   region->offset = 1;
+   region->length = 47;
+
+   return 0;
+}
+
+static const struct mtd_ooblayout_ops xt26g0xa_ooblayout = {
+   .ecc = xt26g0xa_ooblayout_ecc,
+   .rfree = 

[PATCH] mtd: spinand: Add support for XTX SPI NAND

2024-03-01 Thread Bruce Sun

Add support for XTX XT26G0xA and XT26xxxD,the driver is ported from
linux-6.7.1.
---
 drivers/mtd/nand/spi/Makefile |   2 +-
 drivers/mtd/nand/spi/core.c   |   1 +
 drivers/mtd/nand/spi/xtx.c| 265 ++
 include/linux/mtd/spinand.h   |   1 +
 4 files changed, 268 insertions(+), 1 deletion(-)
 create mode 100755 drivers/mtd/nand/spi/xtx.c

diff --git a/drivers/mtd/nand/spi/Makefile b/drivers/mtd/nand/spi/Makefile
index f172f4787f..65b836b34c 100644
--- a/drivers/mtd/nand/spi/Makefile
+++ b/drivers/mtd/nand/spi/Makefile
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: GPL-2.0
 
 spinand-objs := core.o esmt.o gigadevice.o macronix.o micron.o paragon.o

-spinand-objs += toshiba.o winbond.o
+spinand-objs += toshiba.o winbond.o xtx.o
 obj-$(CONFIG_MTD_SPI_NAND) += spinand.o
diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
index 8ca33459f9..62c28aa422 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -829,6 +829,7 @@ static const struct spinand_manufacturer 
*spinand_manufacturers[] = {
_spinand_manufacturer,
_spinand_manufacturer,
_c8_spinand_manufacturer,
+   _spinand_manufacturer,
 };
 
 static int spinand_manufacturer_match(struct spinand_device *spinand,

diff --git a/drivers/mtd/nand/spi/xtx.c b/drivers/mtd/nand/spi/xtx.c
new file mode 100755
index 00..dde0564c56
--- /dev/null
+++ b/drivers/mtd/nand/spi/xtx.c
@@ -0,0 +1,265 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Author:
+ * Felix Matouschek
+ */
+
+#include 
+#ifndef __UBOOT__
+#include 
+#include 
+#endif
+#include 
+
+#define SPINAND_MFR_XTX0x0B
+
+#define XT26G0XA_STATUS_ECC_MASK   GENMASK(5, 2)
+#define XT26G0XA_STATUS_ECC_NO_DETECTED(0 << 2)
+#define XT26G0XA_STATUS_ECC_8_CORRECTED(3 << 4)
+#define XT26G0XA_STATUS_ECC_UNCOR_ERROR(2 << 4)
+
+#define XT26XXXD_STATUS_ECC3_ECC2_MASK GENMASK(7, 6)
+#define XT26XXXD_STATUS_ECC_NO_DETECTED (0)
+#define XT26XXXD_STATUS_ECC_1_7_CORRECTED   (1)
+#define XT26XXXD_STATUS_ECC_8_CORRECTED (3)
+#define XT26XXXD_STATUS_ECC_UNCOR_ERROR (2)
+
+static SPINAND_OP_VARIANTS(read_cache_variants,
+   SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0));
+
+static SPINAND_OP_VARIANTS(write_cache_variants,
+   SPINAND_PROG_LOAD_X4(true, 0, NULL, 0),
+   SPINAND_PROG_LOAD(true, 0, NULL, 0));
+
+static SPINAND_OP_VARIANTS(update_cache_variants,
+   SPINAND_PROG_LOAD_X4(false, 0, NULL, 0),
+   SPINAND_PROG_LOAD(false, 0, NULL, 0));
+
+static int xt26g0xa_ooblayout_ecc(struct mtd_info *mtd, int section,
+  struct mtd_oob_region *region)
+{
+   if (section)
+   return -ERANGE;
+
+   region->offset = 48;
+   region->length = 16;
+
+   return 0;
+}
+
+static int xt26g0xa_ooblayout_free(struct mtd_info *mtd, int section,
+  struct mtd_oob_region *region)
+{
+   if (section)
+   return -ERANGE;
+
+   region->offset = 1;
+   region->length = 47;
+
+   return 0;
+}
+
+static const struct mtd_ooblayout_ops xt26g0xa_ooblayout = {
+   .ecc = xt26g0xa_ooblayout_ecc,
+   .rfree = xt26g0xa_ooblayout_free,
+};
+
+static int xt26g0xa_ecc_get_status(struct spinand_device *spinand,
+u8 status)
+{
+   status = status & XT26G0XA_STATUS_ECC_MASK;
+
+   switch (status) {
+   case XT26G0XA_STATUS_ECC_NO_DETECTED:
+   return 0;
+   case XT26G0XA_STATUS_ECC_8_CORRECTED:
+   return 8;
+   case XT26G0XA_STATUS_ECC_UNCOR_ERROR:
+   return -EBADMSG;
+   default:
+   break;
+   }
+
+   /* At this point values greater than (2 << 4) are invalid  */
+   if (status > XT26G0XA_STATUS_ECC_UNCOR_ERROR)
+   return -EINVAL;
+
+   /* (1 << 2) through (7 << 2) are 1-7 corrected errors */
+   return status >> 2;
+}
+
+static int xt26xxxd_ooblayout_ecc(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *region)
+{
+   if (section)
+   return -ERANGE;
+
+   region->offset = mtd->oobsize / 2;
+   region->length = mtd->oobsize / 2;
+
+   return 0;
+}
+
+static int xt26xxxd_ooblayout_free(struct mtd_info *mtd, int section,
+  struct mtd_oob_region *region)
+{
+   if (section)
+   return -ERANGE;
+
+   region->offset = 2;
+   region->length = mtd->oobsize / 2 - 2;
+
+   return 0;
+}
+
+static const struct 

Re: [PATCH] mtd: spinand: Add support for XTX XT26xxxDxxxxx

2024-02-29 Thread Bruce Sun
Thans for your advice, I will port the driver from linux driver(xtx.c) 
later.


On 2/29/2024 5:05 PM, Frieder Schrempf wrote:

Hi Bruce,

On 26.12.23 08:58, Bruce Suen wrote:

[Sie erhalten nicht häufig E-Mails von bruce_s...@163.com. Weitere 
Informationen, warum dies wichtig ist, finden Sie unter 
https://aka.ms/LearnAboutSenderIdentification ]

Add Support XTX Technology XT26G01DX, XT26G11DX, XT26Q01DX,
XT26G02DX, XT26G12DX, XT26Q02DX, XT26G04DX, and
XT26Q04DX SPI NAND.

These are 3V/1.8V 1G/2G/4Gbit serial SLC NAND flash device with on-die
ECC(8bit strength per 512bytes).

Datasheet Links:
- http://www.xtxtech.com/download/?AId=458
- http://www.xtxtech.com/download/?AId=495

Signed-off-by: Bruce Suen 

Below you seem to have written a new driver based on gigadevice.c. Can
you please instead port the existing Linux driver (xtx.c). This will
help us to sync the drivers in the future if new chips will be added.

Thanks
Frieder


---
  drivers/mtd/nand/spi/Makefile |   1 +
  drivers/mtd/nand/spi/core.c   |   1 +
  drivers/mtd/nand/spi/xtx.c| 180 ++
  include/linux/mtd/spinand.h   |   1 +
  4 files changed, 183 insertions(+)
  create mode 100644 drivers/mtd/nand/spi/xtx.c

diff --git a/drivers/mtd/nand/spi/Makefile b/drivers/mtd/nand/spi/Makefile
index 3051de4f7e..e46cfed446 100644
--- a/drivers/mtd/nand/spi/Makefile
+++ b/drivers/mtd/nand/spi/Makefile
@@ -1,4 +1,5 @@
  # SPDX-License-Identifier: GPL-2.0

  spinand-objs := core.o gigadevice.o macronix.o micron.o paragon.o toshiba.o 
winbond.o
+spinand-objs += xtx.o
  obj-$(CONFIG_MTD_SPI_NAND) += spinand.o
diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
index 597b088ca7..0b4c067425 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -828,6 +828,7 @@ static const struct spinand_manufacturer 
*spinand_manufacturers[] = {
 _spinand_manufacturer,
 _spinand_manufacturer,
 _spinand_manufacturer,
+   _spinand_manufacturer,
  };

  static int spinand_manufacturer_match(struct spinand_device *spinand,
diff --git a/drivers/mtd/nand/spi/xtx.c b/drivers/mtd/nand/spi/xtx.c
new file mode 100644
index 00..602861c77b
--- /dev/null
+++ b/drivers/mtd/nand/spi/xtx.c
@@ -0,0 +1,180 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2018 Stefan Roese 
+ *
+ * Derived from drivers/mtd/nand/spi/micron.c
+ *   Copyright (c) 2016-2017 Micron Technology, Inc.
+ */
+
+#ifndef __UBOOT__
+#include 
+#include 
+#endif
+#include 
+#include 
+
+#define SPINAND_MFR_XTX0x0B
+
+#define XT26XXXD_STATUS_ECC3_ECC2_MASK GENMASK(7, 6)
+#define XT26XXXD_STATUS_ECC_NO_DETECTED (0)
+#define XT26XXXD_STATUS_ECC_1_7_CORRECTED   (1)
+#define XT26XXXD_STATUS_ECC_8_CORRECTED (3)
+#define XT26XXXD_STATUS_ECC_UNCOR_ERROR (2)
+
+static SPINAND_OP_VARIANTS(read_cache_variants,
+   SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0),
+   SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0));
+
+static SPINAND_OP_VARIANTS(write_cache_variants,
+   SPINAND_PROG_LOAD_X4(true, 0, NULL, 0),
+   SPINAND_PROG_LOAD(true, 0, NULL, 0));
+
+static SPINAND_OP_VARIANTS(update_cache_variants,
+   SPINAND_PROG_LOAD_X4(false, 0, NULL, 0),
+   SPINAND_PROG_LOAD(false, 0, NULL, 0));
+
+static int xt26xxxd_ooblayout_ecc(struct mtd_info *mtd, int section,
+ struct mtd_oob_region *region)
+{
+   if (section)
+   return -ERANGE;
+
+   region->offset = mtd->oobsize / 2;
+   region->length = mtd->oobsize / 2;
+
+   return 0;
+}
+
+static int xt26xxxd_ooblayout_free(struct mtd_info *mtd, int section,
+  struct mtd_oob_region *region)
+{
+   if (section)
+   return -ERANGE;
+
+   region->offset = 2;
+   region->length = mtd->oobsize / 2 - 2;
+
+   return 0;
+}
+
+static const struct mtd_ooblayout_ops xt26xxxd_ooblayout = {
+   .ecc = xt26xxxd_ooblayout_ecc,
+   .rfree = xt26xxxd_ooblayout_free,
+};
+
+static int xt26xxxd_ecc_get_status(struct spinand_device *spinand,
+  u8 status)
+{
+   switch (FIELD_GET(STATUS_ECC_MASK, status)) {
+   case XT26XXXD_STATUS_ECC_NO_DETECTED:
+   return 0;
+   case XT26XXXD_STATUS_ECC_UNCOR_ERROR:
+   return -EBADMSG;
+   case XT26XXXD_STATUS_ECC_1_7_CORRECTED:
+   return 4 + FIELD_GET(XT26XXXD_STATUS_ECC3_ECC2_MASK, status);
+   case XT26XXXD_STATUS_ECC_8_CORRECTED:
+   return 8;
+   default:
+   break;
+   }
+
+   return 

Re: [PATCH] mtd: spinand: Add support for XTX XT26xxxDxxxxx

2024-01-29 Thread Bruce Sun



On 1/29/2024 8:00 PM, Jagan Teki wrote:

On Tue, Dec 26, 2023 at 1:28 PM Bruce Suen  wrote:

Add Support XTX Technology XT26G01DX, XT26G11DX, XT26Q01DX,
XT26G02DX, XT26G12DX, XT26Q02DX, XT26G04DX, and
XT26Q04DX SPI NAND.

These are 3V/1.8V 1G/2G/4Gbit serial SLC NAND flash device with on-die
ECC(8bit strength per 512bytes).

Datasheet Links:
-http://www.xtxtech.com/download/?AId=458
-http://www.xtxtech.com/download/?AId=495

Signed-off-by: Bruce Suen
---

This won't apply on my spi tree, maybe some out-of-master changes are stopping.
can you give me your spi tree? I use 
"https://source.denx.de/u-boot/custodians/u-boot-nand-flash.git“ before.