-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
generic: mtd: spinand: add support for FORESEE F35SQA002G
Add support for FORESEE F35SQA002G SPI NAND. Datasheet: https://www.longsys.com/uploads/LM-00006FORESEEF35SQA002GDatasheet_1650183701.pdf Refresh all affected patch with make target/linux/refresh. Signed-off-by: Martin Kurbanov <[email protected]> Signed-off-by: Miquel Raynal <[email protected]> Signed-off-by: Bohdan Chubuk <[email protected]> Link: openwrt/openwrt#16915 (cherry picked from commit 5348e2e) Link: openwrt/openwrt#17188 Signed-off-by: Christian Marangi <[email protected]>
- Loading branch information
Showing
7 changed files
with
163 additions
and
17 deletions.
There are no files selected for viewing
146 changes: 146 additions & 0 deletions
146
.../linux/generic/backport-6.6/411-v6.7-mtd-spinand-add-support-for-FORESEE-F35SQA002G.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,146 @@ | ||
From 49c8e854869d673df8452f24dfa8989cd0f615a8 Mon Sep 17 00:00:00 2001 | ||
From: Martin Kurbanov <[email protected]> | ||
Date: Mon, 2 Oct 2023 17:04:58 +0300 | ||
Subject: [PATCH] mtd: spinand: add support for FORESEE F35SQA002G | ||
|
||
Add support for FORESEE F35SQA002G SPI NAND. | ||
Datasheet: | ||
https://www.longsys.com/uploads/LM-00006FORESEEF35SQA002GDatasheet_1650183701.pdf | ||
|
||
Signed-off-by: Martin Kurbanov <[email protected]> | ||
Signed-off-by: Miquel Raynal <[email protected]> | ||
Link: https://lore.kernel.org/linux-mtd/[email protected] | ||
--- | ||
drivers/mtd/nand/spi/Makefile | 2 +- | ||
drivers/mtd/nand/spi/core.c | 1 + | ||
drivers/mtd/nand/spi/foresee.c | 95 ++++++++++++++++++++++++++++++++++ | ||
include/linux/mtd/spinand.h | 1 + | ||
4 files changed, 98 insertions(+), 1 deletion(-) | ||
create mode 100644 drivers/mtd/nand/spi/foresee.c | ||
|
||
--- a/drivers/mtd/nand/spi/Makefile | ||
+++ b/drivers/mtd/nand/spi/Makefile | ||
@@ -1,4 +1,4 @@ | ||
# SPDX-License-Identifier: GPL-2.0 | ||
-spinand-objs := core.o alliancememory.o ato.o esmt.o gigadevice.o macronix.o | ||
+spinand-objs := core.o alliancememory.o ato.o esmt.o foresee.o gigadevice.o macronix.o | ||
spinand-objs += micron.o paragon.o toshiba.o winbond.o xtx.o | ||
obj-$(CONFIG_MTD_SPI_NAND) += spinand.o | ||
--- a/drivers/mtd/nand/spi/core.c | ||
+++ b/drivers/mtd/nand/spi/core.c | ||
@@ -940,6 +940,7 @@ static const struct spinand_manufacturer | ||
&alliancememory_spinand_manufacturer, | ||
&ato_spinand_manufacturer, | ||
&esmt_c8_spinand_manufacturer, | ||
+ &foresee_spinand_manufacturer, | ||
&gigadevice_spinand_manufacturer, | ||
¯onix_spinand_manufacturer, | ||
µn_spinand_manufacturer, | ||
--- /dev/null | ||
+++ b/drivers/mtd/nand/spi/foresee.c | ||
@@ -0,0 +1,95 @@ | ||
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT) | ||
+/* | ||
+ * Copyright (c) 2023, SberDevices. All Rights Reserved. | ||
+ * | ||
+ * Author: Martin Kurbanov <[email protected]> | ||
+ */ | ||
+ | ||
+#include <linux/device.h> | ||
+#include <linux/kernel.h> | ||
+#include <linux/mtd/spinand.h> | ||
+ | ||
+#define SPINAND_MFR_FORESEE 0xCD | ||
+ | ||
+static SPINAND_OP_VARIANTS(read_cache_variants, | ||
+ SPINAND_PAGE_READ_FROM_CACHE_X4_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 f35sqa002g_ooblayout_ecc(struct mtd_info *mtd, int section, | ||
+ struct mtd_oob_region *region) | ||
+{ | ||
+ return -ERANGE; | ||
+} | ||
+ | ||
+static int f35sqa002g_ooblayout_free(struct mtd_info *mtd, int section, | ||
+ struct mtd_oob_region *region) | ||
+{ | ||
+ if (section) | ||
+ return -ERANGE; | ||
+ | ||
+ /* Reserve 2 bytes for the BBM. */ | ||
+ region->offset = 2; | ||
+ region->length = 62; | ||
+ | ||
+ return 0; | ||
+} | ||
+ | ||
+static const struct mtd_ooblayout_ops f35sqa002g_ooblayout = { | ||
+ .ecc = f35sqa002g_ooblayout_ecc, | ||
+ .free = f35sqa002g_ooblayout_free, | ||
+}; | ||
+ | ||
+static int f35sqa002g_ecc_get_status(struct spinand_device *spinand, u8 status) | ||
+{ | ||
+ struct nand_device *nand = spinand_to_nand(spinand); | ||
+ | ||
+ switch (status & STATUS_ECC_MASK) { | ||
+ case STATUS_ECC_NO_BITFLIPS: | ||
+ return 0; | ||
+ | ||
+ case STATUS_ECC_HAS_BITFLIPS: | ||
+ return nanddev_get_ecc_conf(nand)->strength; | ||
+ | ||
+ default: | ||
+ break; | ||
+ } | ||
+ | ||
+ /* More than 1-bit error was detected in one or more sectors and | ||
+ * cannot be corrected. | ||
+ */ | ||
+ return -EBADMSG; | ||
+} | ||
+ | ||
+static const struct spinand_info foresee_spinand_table[] = { | ||
+ SPINAND_INFO("F35SQA002G", | ||
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x72, 0x72), | ||
+ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1), | ||
+ NAND_ECCREQ(1, 512), | ||
+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, | ||
+ &write_cache_variants, | ||
+ &update_cache_variants), | ||
+ SPINAND_HAS_QE_BIT, | ||
+ SPINAND_ECCINFO(&f35sqa002g_ooblayout, | ||
+ f35sqa002g_ecc_get_status)), | ||
+}; | ||
+ | ||
+static const struct spinand_manufacturer_ops foresee_spinand_manuf_ops = { | ||
+}; | ||
+ | ||
+const struct spinand_manufacturer foresee_spinand_manufacturer = { | ||
+ .id = SPINAND_MFR_FORESEE, | ||
+ .name = "FORESEE", | ||
+ .chips = foresee_spinand_table, | ||
+ .nchips = ARRAY_SIZE(foresee_spinand_table), | ||
+ .ops = &foresee_spinand_manuf_ops, | ||
+}; | ||
--- a/include/linux/mtd/spinand.h | ||
+++ b/include/linux/mtd/spinand.h | ||
@@ -263,6 +263,7 @@ struct spinand_manufacturer { | ||
extern const struct spinand_manufacturer alliancememory_spinand_manufacturer; | ||
extern const struct spinand_manufacturer ato_spinand_manufacturer; | ||
extern const struct spinand_manufacturer esmt_c8_spinand_manufacturer; | ||
+extern const struct spinand_manufacturer foresee_spinand_manufacturer; | ||
extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; | ||
extern const struct spinand_manufacturer macronix_spinand_manufacturer; | ||
extern const struct spinand_manufacturer micron_spinand_manufacturer; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -53,7 +53,7 @@ Signed-off-by: Daniel Golle <[email protected]> | |
|
||
--- a/drivers/mtd/nand/spi/core.c | ||
+++ b/drivers/mtd/nand/spi/core.c | ||
@@ -1286,6 +1286,7 @@ static int spinand_init(struct spinand_d | ||
@@ -1287,6 +1287,7 @@ static int spinand_init(struct spinand_d | ||
/* Propagate ECC information to mtd_info */ | ||
mtd->ecc_strength = nanddev_get_ecc_conf(nand)->strength; | ||
mtd->ecc_step_size = nanddev_get_ecc_conf(nand)->step_size; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -42,9 +42,9 @@ Submitted-by: Daniel Danzberger <[email protected]> | |
+++ b/drivers/mtd/nand/spi/Makefile | ||
@@ -1,4 +1,4 @@ | ||
# SPDX-License-Identifier: GPL-2.0 | ||
-spinand-objs := core.o alliancememory.o ato.o esmt.o gigadevice.o macronix.o | ||
-spinand-objs := core.o alliancememory.o ato.o esmt.o foresee.o gigadevice.o macronix.o | ||
-spinand-objs += micron.o paragon.o toshiba.o winbond.o xtx.o | ||
+spinand-objs := core.o alliancememory.o ato.o esmt.o etron.o gigadevice.o | ||
+spinand-objs := core.o alliancememory.o ato.o esmt.o etron.o foresee.o gigadevice.o | ||
+spinand-objs += macronix.o micron.o paragon.o toshiba.o winbond.o xtx.o | ||
obj-$(CONFIG_MTD_SPI_NAND) += spinand.o | ||
--- a/drivers/mtd/nand/spi/core.c | ||
|
@@ -54,9 +54,9 @@ Submitted-by: Daniel Danzberger <[email protected]> | |
&ato_spinand_manufacturer, | ||
&esmt_c8_spinand_manufacturer, | ||
+ &etron_spinand_manufacturer, | ||
&foresee_spinand_manufacturer, | ||
&gigadevice_spinand_manufacturer, | ||
¯onix_spinand_manufacturer, | ||
µn_spinand_manufacturer, | ||
--- /dev/null | ||
+++ b/drivers/mtd/nand/spi/etron.c | ||
@@ -0,0 +1,98 @@ | ||
|
@@ -165,6 +165,6 @@ Submitted-by: Daniel Danzberger <[email protected]> | |
extern const struct spinand_manufacturer ato_spinand_manufacturer; | ||
extern const struct spinand_manufacturer esmt_c8_spinand_manufacturer; | ||
+extern const struct spinand_manufacturer etron_spinand_manufacturer; | ||
extern const struct spinand_manufacturer foresee_spinand_manufacturer; | ||
extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; | ||
extern const struct spinand_manufacturer macronix_spinand_manufacturer; | ||
extern const struct spinand_manufacturer micron_spinand_manufacturer; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -18,18 +18,18 @@ Signed-off-by: Davide Fioravanti <[email protected]> | |
+++ b/drivers/mtd/nand/spi/Makefile | ||
@@ -1,4 +1,4 @@ | ||
# SPDX-License-Identifier: GPL-2.0 | ||
-spinand-objs := core.o alliancememory.o ato.o esmt.o etron.o gigadevice.o | ||
+spinand-objs := core.o alliancememory.o ato.o esmt.o etron.o fidelix.o gigadevice.o | ||
-spinand-objs := core.o alliancememory.o ato.o esmt.o etron.o foresee.o gigadevice.o | ||
+spinand-objs := core.o alliancememory.o ato.o esmt.o etron.o fidelix.o foresee.o gigadevice.o | ||
spinand-objs += macronix.o micron.o paragon.o toshiba.o winbond.o xtx.o | ||
obj-$(CONFIG_MTD_SPI_NAND) += spinand.o | ||
--- a/drivers/mtd/nand/spi/core.c | ||
+++ b/drivers/mtd/nand/spi/core.c | ||
@@ -941,6 +941,7 @@ static const struct spinand_manufacturer | ||
&alliancememory_spinand_manufacturer, | ||
@@ -942,6 +942,7 @@ static const struct spinand_manufacturer | ||
&ato_spinand_manufacturer, | ||
&esmt_c8_spinand_manufacturer, | ||
+ &fidelix_spinand_manufacturer, | ||
&etron_spinand_manufacturer, | ||
+ &fidelix_spinand_manufacturer, | ||
&foresee_spinand_manufacturer, | ||
&gigadevice_spinand_manufacturer, | ||
¯onix_spinand_manufacturer, | ||
--- /dev/null | ||
|
@@ -118,6 +118,6 @@ Signed-off-by: Davide Fioravanti <[email protected]> | |
extern const struct spinand_manufacturer esmt_c8_spinand_manufacturer; | ||
extern const struct spinand_manufacturer etron_spinand_manufacturer; | ||
+extern const struct spinand_manufacturer fidelix_spinand_manufacturer; | ||
extern const struct spinand_manufacturer foresee_spinand_manufacturer; | ||
extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; | ||
extern const struct spinand_manufacturer macronix_spinand_manufacturer; | ||
extern const struct spinand_manufacturer micron_spinand_manufacturer; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,7 +11,7 @@ Signed-off-by: SkyLake.Huang <[email protected]> | |
|
||
--- a/drivers/mtd/nand/spi/core.c | ||
+++ b/drivers/mtd/nand/spi/core.c | ||
@@ -979,6 +979,56 @@ static int spinand_manufacturer_match(st | ||
@@ -980,6 +980,56 @@ static int spinand_manufacturer_match(st | ||
return -ENOTSUPP; | ||
} | ||
|
||
|
@@ -68,7 +68,7 @@ Signed-off-by: SkyLake.Huang <[email protected]> | |
static int spinand_id_detect(struct spinand_device *spinand) | ||
{ | ||
u8 *id = spinand->id.data; | ||
@@ -1229,6 +1279,10 @@ static int spinand_init(struct spinand_d | ||
@@ -1230,6 +1280,10 @@ static int spinand_init(struct spinand_d | ||
if (!spinand->scratchbuf) | ||
return -ENOMEM; | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,7 +12,7 @@ Signed-off-by: SkyLake.Huang <[email protected]> | |
|
||
--- a/drivers/mtd/nand/spi/core.c | ||
+++ b/drivers/mtd/nand/spi/core.c | ||
@@ -1020,7 +1020,10 @@ int spinand_cal_read(void *priv, u32 *ad | ||
@@ -1021,7 +1021,10 @@ int spinand_cal_read(void *priv, u32 *ad | ||
if (ret) | ||
return ret; | ||
|
||
|