[PATCH v2 06/15] mtd: rawnand: Prepare things to reuse the generic NAND layer

Miquel Raynal miquel.raynal at bootlin.com
Mon Mar 4 12:15:13 PST 2019

From: Boris Brezillon <bbrezillon at kernel.org>

The generic NAND layer provides abstraction of NAND devices no matter
the bus that is used to communicate with the chip. Basing the raw NAND
core on this generic layer should avoid duplication of common
operations, like iterating over all pages/blocks for MTD IO/erase

In order to re-use this layer, we must first inherit from nand_device
and then initialize the nand_device struct appropriately. This patch
is taking care of the former.

Signed-off-by: Boris Brezillon <bbrezillon at kernel.org>
Signed-off-by: Miquel Raynal <miquel.raynal at bootlin.com>
Reviewed-by: Frieder Schrempf <frieder.schrempf at kontron.de>
 include/linux/mtd/rawnand.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h
index c20ea012aab6..dfeedfe2f3e0 100644
--- a/include/linux/mtd/rawnand.h
+++ b/include/linux/mtd/rawnand.h
@@ -22,6 +22,7 @@
 #include <linux/mtd/flashchip.h>
 #include <linux/mtd/bbm.h>
 #include <linux/mtd/jedec.h>
+#include <linux/mtd/nand.h>
 #include <linux/mtd/onfi.h>
 #include <linux/of.h>
 #include <linux/types.h>
@@ -861,6 +862,7 @@ struct nand_operation {
 int nand_op_parser_exec_op(struct nand_chip *chip,
 			   const struct nand_op_parser *parser,
 			   const struct nand_operation *op, bool check_only);
  * struct nand_controller_ops - Controller operations
@@ -973,7 +975,7 @@ struct nand_legacy {
  * struct nand_chip - NAND Private Flash Chip Data
- * @mtd:		MTD device registered to the MTD framework
+ * @base:		Inherit from the generic NAND device
  * @legacy:		All legacy fields/hooks. If you develop a new driver,
  *			don't even try to use any of these fields/hooks, and if
  *			you're modifying an existing driver that is using those
@@ -1050,7 +1052,7 @@ struct nand_legacy {
 struct nand_chip {
-	struct mtd_info mtd;
+	struct nand_device base;
 	struct nand_legacy legacy;
@@ -1115,12 +1117,12 @@ extern const struct mtd_ooblayout_ops nand_ooblayout_lp_ops;
 static inline struct nand_chip *mtd_to_nand(struct mtd_info *mtd)
-	return container_of(mtd, struct nand_chip, mtd);
+	return container_of(mtd, struct nand_chip, base.mtd);
 static inline struct mtd_info *nand_to_mtd(struct nand_chip *chip)
-	return &chip->mtd;
+	return &chip->base.mtd;
 static inline void *nand_get_controller_data(struct nand_chip *chip)

More information about the linux-arm-kernel mailing list