- * [PATCH 01/12] mtd: nand: remove unneeded of_mtd.h inclusions
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-01 13:09   ` Harvey Hunt
  2016-04-12 22:22   ` Boris Brezillon
  2016-04-01 12:54 ` [PATCH 02/12] mtd: nand: atmel: rely on generic DT parsing done in nand_scan_ident() Boris Brezillon
                   ` (12 subsequent siblings)
  13 siblings, 2 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
Some drivers are including linux/of_mtd.h even if they don't use any of
the of_get_nand_xxx() helpers.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/jz4780_nand.c | 1 -
 drivers/mtd/nand/lpc32xx_mlc.c | 1 -
 drivers/mtd/nand/qcom_nandc.c  | 1 -
 drivers/mtd/nand/sunxi_nand.c  | 1 -
 drivers/mtd/nand/vf610_nfc.c   | 1 -
 5 files changed, 5 deletions(-)
diff --git a/drivers/mtd/nand/jz4780_nand.c b/drivers/mtd/nand/jz4780_nand.c
index e1c016c..23a1999 100644
--- a/drivers/mtd/nand/jz4780_nand.c
+++ b/drivers/mtd/nand/jz4780_nand.c
@@ -17,7 +17,6 @@
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/gpio/consumer.h>
-#include <linux/of_mtd.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/mtd/mtd.h>
diff --git a/drivers/mtd/nand/lpc32xx_mlc.c b/drivers/mtd/nand/lpc32xx_mlc.c
index d8c3e7a..8e43978 100644
--- a/drivers/mtd/nand/lpc32xx_mlc.c
+++ b/drivers/mtd/nand/lpc32xx_mlc.c
@@ -35,7 +35,6 @@
 #include <linux/completion.h>
 #include <linux/interrupt.h>
 #include <linux/of.h>
-#include <linux/of_mtd.h>
 #include <linux/of_gpio.h>
 #include <linux/mtd/lpc32xx_mlc.h>
 #include <linux/io.h>
diff --git a/drivers/mtd/nand/qcom_nandc.c b/drivers/mtd/nand/qcom_nandc.c
index f550a57..f3de983 100644
--- a/drivers/mtd/nand/qcom_nandc.c
+++ b/drivers/mtd/nand/qcom_nandc.c
@@ -21,7 +21,6 @@
 #include <linux/mtd/partitions.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
-#include <linux/of_mtd.h>
 #include <linux/delay.h>
 
 /* NANDc reg offsets */
diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
index 1c03eee..3a97093 100644
--- a/drivers/mtd/nand/sunxi_nand.c
+++ b/drivers/mtd/nand/sunxi_nand.c
@@ -30,7 +30,6 @@
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/of_gpio.h>
-#include <linux/of_mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/nand.h>
 #include <linux/mtd/partitions.h>
diff --git a/drivers/mtd/nand/vf610_nfc.c b/drivers/mtd/nand/vf610_nfc.c
index 293feb1..a7f2756 100644
--- a/drivers/mtd/nand/vf610_nfc.c
+++ b/drivers/mtd/nand/vf610_nfc.c
@@ -33,7 +33,6 @@
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/nand.h>
 #include <linux/mtd/partitions.h>
-#include <linux/of_mtd.h>
 #include <linux/of_device.h>
 #include <linux/pinctrl/consumer.h>
 #include <linux/platform_device.h>
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 01/12] mtd: nand: remove unneeded of_mtd.h inclusions
  2016-04-01 12:54 ` [PATCH 01/12] mtd: nand: remove unneeded of_mtd.h inclusions Boris Brezillon
@ 2016-04-01 13:09   ` Harvey Hunt
  2016-04-12 22:22   ` Boris Brezillon
  1 sibling, 0 replies; 29+ messages in thread
From: Harvey Hunt @ 2016-04-01 13:09 UTC (permalink / raw)
  To: linux-arm-kernel
Hi Boris,
On 01/04/16 13:54, Boris Brezillon wrote:
> Some drivers are including linux/of_mtd.h even if they don't use any of
> the of_get_nand_xxx() helpers.
>
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
>   drivers/mtd/nand/jz4780_nand.c | 1 -
>   drivers/mtd/nand/lpc32xx_mlc.c | 1 -
>   drivers/mtd/nand/qcom_nandc.c  | 1 -
>   drivers/mtd/nand/sunxi_nand.c  | 1 -
>   drivers/mtd/nand/vf610_nfc.c   | 1 -
>   5 files changed, 5 deletions(-)
>
> diff --git a/drivers/mtd/nand/jz4780_nand.c b/drivers/mtd/nand/jz4780_nand.c
> index e1c016c..23a1999 100644
> --- a/drivers/mtd/nand/jz4780_nand.c
> +++ b/drivers/mtd/nand/jz4780_nand.c
> @@ -17,7 +17,6 @@
>   #include <linux/of.h>
>   #include <linux/of_address.h>
>   #include <linux/gpio/consumer.h>
> -#include <linux/of_mtd.h>
>   #include <linux/platform_device.h>
>   #include <linux/slab.h>
>   #include <linux/mtd/mtd.h>
Looks good to me.
Acked-by: Harvey Hunt <harvey.hunt@imgtec.com>
Thanks,
Harvey
^ permalink raw reply	[flat|nested] 29+ messages in thread 
- * [PATCH 01/12] mtd: nand: remove unneeded of_mtd.h inclusions
  2016-04-01 12:54 ` [PATCH 01/12] mtd: nand: remove unneeded of_mtd.h inclusions Boris Brezillon
  2016-04-01 13:09   ` Harvey Hunt
@ 2016-04-12 22:22   ` Boris Brezillon
  1 sibling, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-12 22:22 UTC (permalink / raw)
  To: linux-arm-kernel
On Fri,  1 Apr 2016 14:54:21 +0200
Boris Brezillon <boris.brezillon@free-electrons.com> wrote:
> Some drivers are including linux/of_mtd.h even if they don't use any of
> the of_get_nand_xxx() helpers.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Applied.
> ---
>  drivers/mtd/nand/jz4780_nand.c | 1 -
>  drivers/mtd/nand/lpc32xx_mlc.c | 1 -
>  drivers/mtd/nand/qcom_nandc.c  | 1 -
>  drivers/mtd/nand/sunxi_nand.c  | 1 -
>  drivers/mtd/nand/vf610_nfc.c   | 1 -
>  5 files changed, 5 deletions(-)
> 
> diff --git a/drivers/mtd/nand/jz4780_nand.c b/drivers/mtd/nand/jz4780_nand.c
> index e1c016c..23a1999 100644
> --- a/drivers/mtd/nand/jz4780_nand.c
> +++ b/drivers/mtd/nand/jz4780_nand.c
> @@ -17,7 +17,6 @@
>  #include <linux/of.h>
>  #include <linux/of_address.h>
>  #include <linux/gpio/consumer.h>
> -#include <linux/of_mtd.h>
>  #include <linux/platform_device.h>
>  #include <linux/slab.h>
>  #include <linux/mtd/mtd.h>
> diff --git a/drivers/mtd/nand/lpc32xx_mlc.c b/drivers/mtd/nand/lpc32xx_mlc.c
> index d8c3e7a..8e43978 100644
> --- a/drivers/mtd/nand/lpc32xx_mlc.c
> +++ b/drivers/mtd/nand/lpc32xx_mlc.c
> @@ -35,7 +35,6 @@
>  #include <linux/completion.h>
>  #include <linux/interrupt.h>
>  #include <linux/of.h>
> -#include <linux/of_mtd.h>
>  #include <linux/of_gpio.h>
>  #include <linux/mtd/lpc32xx_mlc.h>
>  #include <linux/io.h>
> diff --git a/drivers/mtd/nand/qcom_nandc.c b/drivers/mtd/nand/qcom_nandc.c
> index f550a57..f3de983 100644
> --- a/drivers/mtd/nand/qcom_nandc.c
> +++ b/drivers/mtd/nand/qcom_nandc.c
> @@ -21,7 +21,6 @@
>  #include <linux/mtd/partitions.h>
>  #include <linux/of.h>
>  #include <linux/of_device.h>
> -#include <linux/of_mtd.h>
>  #include <linux/delay.h>
>  
>  /* NANDc reg offsets */
> diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
> index 1c03eee..3a97093 100644
> --- a/drivers/mtd/nand/sunxi_nand.c
> +++ b/drivers/mtd/nand/sunxi_nand.c
> @@ -30,7 +30,6 @@
>  #include <linux/of.h>
>  #include <linux/of_device.h>
>  #include <linux/of_gpio.h>
> -#include <linux/of_mtd.h>
>  #include <linux/mtd/mtd.h>
>  #include <linux/mtd/nand.h>
>  #include <linux/mtd/partitions.h>
> diff --git a/drivers/mtd/nand/vf610_nfc.c b/drivers/mtd/nand/vf610_nfc.c
> index 293feb1..a7f2756 100644
> --- a/drivers/mtd/nand/vf610_nfc.c
> +++ b/drivers/mtd/nand/vf610_nfc.c
> @@ -33,7 +33,6 @@
>  #include <linux/mtd/mtd.h>
>  #include <linux/mtd/nand.h>
>  #include <linux/mtd/partitions.h>
> -#include <linux/of_mtd.h>
>  #include <linux/of_device.h>
>  #include <linux/pinctrl/consumer.h>
>  #include <linux/platform_device.h>
-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply	[flat|nested] 29+ messages in thread 
 
- * [PATCH 02/12] mtd: nand: atmel: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
  2016-04-01 12:54 ` [PATCH 01/12] mtd: nand: remove unneeded of_mtd.h inclusions Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-13 12:31   ` Boris Brezillon
                     ` (2 more replies)
  2016-04-01 12:54 ` [PATCH 03/12] mtd: nand: omap2: " Boris Brezillon
                   ` (11 subsequent siblings)
  13 siblings, 3 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/atmel_nand.c | 133 +++++++++++++++++++++++-------------------
 1 file changed, 73 insertions(+), 60 deletions(-)
diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
index 0b5da72..5e716f2 100644
--- a/drivers/mtd/nand/atmel_nand.c
+++ b/drivers/mtd/nand/atmel_nand.c
@@ -36,7 +36,6 @@
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/of_gpio.h>
-#include <linux/of_mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/nand.h>
 #include <linux/mtd/partitions.h>
@@ -434,14 +433,13 @@ err_buf:
 static void atmel_read_buf(struct mtd_info *mtd, u8 *buf, int len)
 {
 	struct nand_chip *chip = mtd_to_nand(mtd);
-	struct atmel_nand_host *host = nand_get_controller_data(chip);
 
 	if (use_dma && len > mtd->oobsize)
 		/* only use DMA for bigger than oob size: better performances */
 		if (atmel_nand_dma_op(mtd, buf, len, 1) == 0)
 			return;
 
-	if (host->board.bus_width_16)
+	if (chip->options & NAND_BUSWIDTH_16)
 		atmel_read_buf16(mtd, buf, len);
 	else
 		atmel_read_buf8(mtd, buf, len);
@@ -450,14 +448,13 @@ static void atmel_read_buf(struct mtd_info *mtd, u8 *buf, int len)
 static void atmel_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
 {
 	struct nand_chip *chip = mtd_to_nand(mtd);
-	struct atmel_nand_host *host = nand_get_controller_data(chip);
 
 	if (use_dma && len > mtd->oobsize)
 		/* only use DMA for bigger than oob size: better performances */
 		if (atmel_nand_dma_op(mtd, (void *)buf, len, 0) == 0)
 			return;
 
-	if (host->board.bus_width_16)
+	if (chip->options & NAND_BUSWIDTH_16)
 		atmel_write_buf16(mtd, buf, len);
 	else
 		atmel_write_buf8(mtd, buf, len);
@@ -1507,58 +1504,17 @@ static void atmel_nand_hwctl(struct mtd_info *mtd, int mode)
 		ecc_writel(host->ecc, CR, ATMEL_ECC_RST);
 }
 
-static int atmel_of_init_port(struct atmel_nand_host *host,
-			      struct device_node *np)
+static int atmel_of_init_ecc(struct atmel_nand_host *host,
+			     struct device_node *np)
 {
-	u32 val;
 	u32 offset[2];
-	int ecc_mode;
-	struct atmel_nand_data *board = &host->board;
-	enum of_gpio_flags flags = 0;
-
-	host->caps = (struct atmel_nand_caps *)
-		of_device_get_match_data(host->dev);
-
-	if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
-		if (val >= 32) {
-			dev_err(host->dev, "invalid addr-offset %u\n", val);
-			return -EINVAL;
-		}
-		board->ale = val;
-	}
-
-	if (of_property_read_u32(np, "atmel,nand-cmd-offset", &val) == 0) {
-		if (val >= 32) {
-			dev_err(host->dev, "invalid cmd-offset %u\n", val);
-			return -EINVAL;
-		}
-		board->cle = val;
-	}
-
-	ecc_mode = of_get_nand_ecc_mode(np);
-
-	board->ecc_mode = ecc_mode < 0 ? NAND_ECC_SOFT : ecc_mode;
-
-	board->on_flash_bbt = of_get_nand_on_flash_bbt(np);
-
-	board->has_dma = of_property_read_bool(np, "atmel,nand-has-dma");
-
-	if (of_get_nand_bus_width(np) == 16)
-		board->bus_width_16 = 1;
-
-	board->rdy_pin = of_get_gpio_flags(np, 0, &flags);
-	board->rdy_pin_active_low = (flags == OF_GPIO_ACTIVE_LOW);
-
-	board->enable_pin = of_get_gpio(np, 1);
-	board->det_pin = of_get_gpio(np, 2);
+	u32 val;
 
 	host->has_pmecc = of_property_read_bool(np, "atmel,has-pmecc");
 
-	/* load the nfc driver if there is */
-	of_platform_populate(np, NULL, NULL, host->dev);
-
-	if (!(board->ecc_mode == NAND_ECC_HW) || !host->has_pmecc)
-		return 0;	/* Not using PMECC */
+	/* Not using PMECC */
+	if (!(host->nand_chip.ecc.mode == NAND_ECC_HW) || !host->has_pmecc)
+		return 0;
 
 	/* use PMECC, get correction capability, sector size and lookup
 	 * table offset.
@@ -1599,16 +1555,64 @@ static int atmel_of_init_port(struct atmel_nand_host *host,
 		/* Will build a lookup table and initialize the offset later */
 		return 0;
 	}
+
 	if (!offset[0] && !offset[1]) {
 		dev_err(host->dev, "Invalid PMECC lookup table offset\n");
 		return -EINVAL;
 	}
+
 	host->pmecc_lookup_table_offset_512 = offset[0];
 	host->pmecc_lookup_table_offset_1024 = offset[1];
 
 	return 0;
 }
 
+static int atmel_of_init_port(struct atmel_nand_host *host,
+			      struct device_node *np)
+{
+	u32 val;
+	struct atmel_nand_data *board = &host->board;
+	enum of_gpio_flags flags = 0;
+
+	host->caps = (struct atmel_nand_caps *)
+		of_device_get_match_data(host->dev);
+
+	if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
+		if (val >= 32) {
+			dev_err(host->dev, "invalid addr-offset %u\n", val);
+			return -EINVAL;
+		}
+		board->ale = val;
+	}
+
+	if (of_property_read_u32(np, "atmel,nand-cmd-offset", &val) == 0) {
+		if (val >= 32) {
+			dev_err(host->dev, "invalid cmd-offset %u\n", val);
+			return -EINVAL;
+		}
+		board->cle = val;
+	}
+
+	board->has_dma = of_property_read_bool(np, "atmel,nand-has-dma");
+
+	board->rdy_pin = of_get_gpio_flags(np, 0, &flags);
+	board->rdy_pin_active_low = (flags == OF_GPIO_ACTIVE_LOW);
+
+	board->enable_pin = of_get_gpio(np, 1);
+	board->det_pin = of_get_gpio(np, 2);
+
+	/* load the nfc driver if there is */
+	of_platform_populate(np, NULL, NULL, host->dev);
+
+	/*
+	 * Initialize ECC mode to NAND_ECC_SOFT so that we have a correct value
+	 * even if the nand-ecc-mode property is not defined.
+	 */
+	host->nand_chip.ecc.mode = NAND_ECC_SOFT;
+
+	return 0;
+}
+
 static int atmel_hw_nand_init_params(struct platform_device *pdev,
 					 struct atmel_nand_host *host)
 {
@@ -2150,6 +2154,11 @@ static int atmel_nand_probe(struct platform_device *pdev)
 	} else {
 		memcpy(&host->board, dev_get_platdata(&pdev->dev),
 		       sizeof(struct atmel_nand_data));
+		nand_chip->ecc.mode = host->board.ecc_mode;
+
+		/* 16-bit bus width */
+		if (host->board.bus_width_16)
+			nand_chip->options |= NAND_BUSWIDTH_16;
 	}
 
 	 /* link the private data structures */
@@ -2191,11 +2200,8 @@ static int atmel_nand_probe(struct platform_device *pdev)
 		nand_chip->cmd_ctrl = atmel_nand_cmd_ctrl;
 	}
 
-	nand_chip->ecc.mode = host->board.ecc_mode;
 	nand_chip->chip_delay = 40;		/* 40us command delay time */
 
-	if (host->board.bus_width_16)	/* 16-bit bus width */
-		nand_chip->options |= NAND_BUSWIDTH_16;
 
 	nand_chip->read_buf = atmel_read_buf;
 	nand_chip->write_buf = atmel_write_buf;
@@ -2228,11 +2234,6 @@ static int atmel_nand_probe(struct platform_device *pdev)
 		}
 	}
 
-	if (host->board.on_flash_bbt || on_flash_bbt) {
-		dev_info(&pdev->dev, "Use On Flash BBT\n");
-		nand_chip->bbt_options |= NAND_BBT_USE_FLASH;
-	}
-
 	if (!host->board.has_dma)
 		use_dma = 0;
 
@@ -2259,6 +2260,18 @@ static int atmel_nand_probe(struct platform_device *pdev)
 		goto err_scan_ident;
 	}
 
+	if (host->board.on_flash_bbt || on_flash_bbt)
+		nand_chip->bbt_options |= NAND_BBT_USE_FLASH;
+
+	if (nand_chip->bbt_options & NAND_BBT_USE_FLASH)
+		dev_info(&pdev->dev, "Use On Flash BBT\n");
+
+	if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) {
+		res = atmel_of_init_ecc(host, pdev->dev.of_node);
+		if (res)
+			goto err_hw_ecc;
+	}
+
 	if (nand_chip->ecc.mode == NAND_ECC_HW) {
 		if (host->has_pmecc)
 			res = atmel_pmecc_nand_init_params(pdev, host);
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 02/12] mtd: nand: atmel: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 ` [PATCH 02/12] mtd: nand: atmel: rely on generic DT parsing done in nand_scan_ident() Boris Brezillon
@ 2016-04-13 12:31   ` Boris Brezillon
  2016-04-13 12:55   ` Nicolas Ferre
  2016-04-13 13:51   ` Boris Brezillon
  2 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-13 12:31 UTC (permalink / raw)
  To: linux-arm-kernel
On Fri,  1 Apr 2016 14:54:22 +0200
Boris Brezillon <boris.brezillon@free-electrons.com> wrote:
> The core now takes care of parsing generic DT properties in
> nand_scan_ident() when nand_set_flash_node() has been called.
> Rely on this initialization instead of calling of_get_nand_xxx()
> manually.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Tested on sama5d4ek.
Tested-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
>  drivers/mtd/nand/atmel_nand.c | 133 +++++++++++++++++++++++-------------------
>  1 file changed, 73 insertions(+), 60 deletions(-)
> 
> diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
> index 0b5da72..5e716f2 100644
> --- a/drivers/mtd/nand/atmel_nand.c
> +++ b/drivers/mtd/nand/atmel_nand.c
> @@ -36,7 +36,6 @@
>  #include <linux/of.h>
>  #include <linux/of_device.h>
>  #include <linux/of_gpio.h>
> -#include <linux/of_mtd.h>
>  #include <linux/mtd/mtd.h>
>  #include <linux/mtd/nand.h>
>  #include <linux/mtd/partitions.h>
> @@ -434,14 +433,13 @@ err_buf:
>  static void atmel_read_buf(struct mtd_info *mtd, u8 *buf, int len)
>  {
>  	struct nand_chip *chip = mtd_to_nand(mtd);
> -	struct atmel_nand_host *host = nand_get_controller_data(chip);
>  
>  	if (use_dma && len > mtd->oobsize)
>  		/* only use DMA for bigger than oob size: better performances */
>  		if (atmel_nand_dma_op(mtd, buf, len, 1) == 0)
>  			return;
>  
> -	if (host->board.bus_width_16)
> +	if (chip->options & NAND_BUSWIDTH_16)
>  		atmel_read_buf16(mtd, buf, len);
>  	else
>  		atmel_read_buf8(mtd, buf, len);
> @@ -450,14 +448,13 @@ static void atmel_read_buf(struct mtd_info *mtd, u8 *buf, int len)
>  static void atmel_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
>  {
>  	struct nand_chip *chip = mtd_to_nand(mtd);
> -	struct atmel_nand_host *host = nand_get_controller_data(chip);
>  
>  	if (use_dma && len > mtd->oobsize)
>  		/* only use DMA for bigger than oob size: better performances */
>  		if (atmel_nand_dma_op(mtd, (void *)buf, len, 0) == 0)
>  			return;
>  
> -	if (host->board.bus_width_16)
> +	if (chip->options & NAND_BUSWIDTH_16)
>  		atmel_write_buf16(mtd, buf, len);
>  	else
>  		atmel_write_buf8(mtd, buf, len);
> @@ -1507,58 +1504,17 @@ static void atmel_nand_hwctl(struct mtd_info *mtd, int mode)
>  		ecc_writel(host->ecc, CR, ATMEL_ECC_RST);
>  }
>  
> -static int atmel_of_init_port(struct atmel_nand_host *host,
> -			      struct device_node *np)
> +static int atmel_of_init_ecc(struct atmel_nand_host *host,
> +			     struct device_node *np)
>  {
> -	u32 val;
>  	u32 offset[2];
> -	int ecc_mode;
> -	struct atmel_nand_data *board = &host->board;
> -	enum of_gpio_flags flags = 0;
> -
> -	host->caps = (struct atmel_nand_caps *)
> -		of_device_get_match_data(host->dev);
> -
> -	if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
> -		if (val >= 32) {
> -			dev_err(host->dev, "invalid addr-offset %u\n", val);
> -			return -EINVAL;
> -		}
> -		board->ale = val;
> -	}
> -
> -	if (of_property_read_u32(np, "atmel,nand-cmd-offset", &val) == 0) {
> -		if (val >= 32) {
> -			dev_err(host->dev, "invalid cmd-offset %u\n", val);
> -			return -EINVAL;
> -		}
> -		board->cle = val;
> -	}
> -
> -	ecc_mode = of_get_nand_ecc_mode(np);
> -
> -	board->ecc_mode = ecc_mode < 0 ? NAND_ECC_SOFT : ecc_mode;
> -
> -	board->on_flash_bbt = of_get_nand_on_flash_bbt(np);
> -
> -	board->has_dma = of_property_read_bool(np, "atmel,nand-has-dma");
> -
> -	if (of_get_nand_bus_width(np) == 16)
> -		board->bus_width_16 = 1;
> -
> -	board->rdy_pin = of_get_gpio_flags(np, 0, &flags);
> -	board->rdy_pin_active_low = (flags == OF_GPIO_ACTIVE_LOW);
> -
> -	board->enable_pin = of_get_gpio(np, 1);
> -	board->det_pin = of_get_gpio(np, 2);
> +	u32 val;
>  
>  	host->has_pmecc = of_property_read_bool(np, "atmel,has-pmecc");
>  
> -	/* load the nfc driver if there is */
> -	of_platform_populate(np, NULL, NULL, host->dev);
> -
> -	if (!(board->ecc_mode == NAND_ECC_HW) || !host->has_pmecc)
> -		return 0;	/* Not using PMECC */
> +	/* Not using PMECC */
> +	if (!(host->nand_chip.ecc.mode == NAND_ECC_HW) || !host->has_pmecc)
> +		return 0;
>  
>  	/* use PMECC, get correction capability, sector size and lookup
>  	 * table offset.
> @@ -1599,16 +1555,64 @@ static int atmel_of_init_port(struct atmel_nand_host *host,
>  		/* Will build a lookup table and initialize the offset later */
>  		return 0;
>  	}
> +
>  	if (!offset[0] && !offset[1]) {
>  		dev_err(host->dev, "Invalid PMECC lookup table offset\n");
>  		return -EINVAL;
>  	}
> +
>  	host->pmecc_lookup_table_offset_512 = offset[0];
>  	host->pmecc_lookup_table_offset_1024 = offset[1];
>  
>  	return 0;
>  }
>  
> +static int atmel_of_init_port(struct atmel_nand_host *host,
> +			      struct device_node *np)
> +{
> +	u32 val;
> +	struct atmel_nand_data *board = &host->board;
> +	enum of_gpio_flags flags = 0;
> +
> +	host->caps = (struct atmel_nand_caps *)
> +		of_device_get_match_data(host->dev);
> +
> +	if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
> +		if (val >= 32) {
> +			dev_err(host->dev, "invalid addr-offset %u\n", val);
> +			return -EINVAL;
> +		}
> +		board->ale = val;
> +	}
> +
> +	if (of_property_read_u32(np, "atmel,nand-cmd-offset", &val) == 0) {
> +		if (val >= 32) {
> +			dev_err(host->dev, "invalid cmd-offset %u\n", val);
> +			return -EINVAL;
> +		}
> +		board->cle = val;
> +	}
> +
> +	board->has_dma = of_property_read_bool(np, "atmel,nand-has-dma");
> +
> +	board->rdy_pin = of_get_gpio_flags(np, 0, &flags);
> +	board->rdy_pin_active_low = (flags == OF_GPIO_ACTIVE_LOW);
> +
> +	board->enable_pin = of_get_gpio(np, 1);
> +	board->det_pin = of_get_gpio(np, 2);
> +
> +	/* load the nfc driver if there is */
> +	of_platform_populate(np, NULL, NULL, host->dev);
> +
> +	/*
> +	 * Initialize ECC mode to NAND_ECC_SOFT so that we have a correct value
> +	 * even if the nand-ecc-mode property is not defined.
> +	 */
> +	host->nand_chip.ecc.mode = NAND_ECC_SOFT;
> +
> +	return 0;
> +}
> +
>  static int atmel_hw_nand_init_params(struct platform_device *pdev,
>  					 struct atmel_nand_host *host)
>  {
> @@ -2150,6 +2154,11 @@ static int atmel_nand_probe(struct platform_device *pdev)
>  	} else {
>  		memcpy(&host->board, dev_get_platdata(&pdev->dev),
>  		       sizeof(struct atmel_nand_data));
> +		nand_chip->ecc.mode = host->board.ecc_mode;
> +
> +		/* 16-bit bus width */
> +		if (host->board.bus_width_16)
> +			nand_chip->options |= NAND_BUSWIDTH_16;
>  	}
>  
>  	 /* link the private data structures */
> @@ -2191,11 +2200,8 @@ static int atmel_nand_probe(struct platform_device *pdev)
>  		nand_chip->cmd_ctrl = atmel_nand_cmd_ctrl;
>  	}
>  
> -	nand_chip->ecc.mode = host->board.ecc_mode;
>  	nand_chip->chip_delay = 40;		/* 40us command delay time */
>  
> -	if (host->board.bus_width_16)	/* 16-bit bus width */
> -		nand_chip->options |= NAND_BUSWIDTH_16;
>  
>  	nand_chip->read_buf = atmel_read_buf;
>  	nand_chip->write_buf = atmel_write_buf;
> @@ -2228,11 +2234,6 @@ static int atmel_nand_probe(struct platform_device *pdev)
>  		}
>  	}
>  
> -	if (host->board.on_flash_bbt || on_flash_bbt) {
> -		dev_info(&pdev->dev, "Use On Flash BBT\n");
> -		nand_chip->bbt_options |= NAND_BBT_USE_FLASH;
> -	}
> -
>  	if (!host->board.has_dma)
>  		use_dma = 0;
>  
> @@ -2259,6 +2260,18 @@ static int atmel_nand_probe(struct platform_device *pdev)
>  		goto err_scan_ident;
>  	}
>  
> +	if (host->board.on_flash_bbt || on_flash_bbt)
> +		nand_chip->bbt_options |= NAND_BBT_USE_FLASH;
> +
> +	if (nand_chip->bbt_options & NAND_BBT_USE_FLASH)
> +		dev_info(&pdev->dev, "Use On Flash BBT\n");
> +
> +	if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) {
> +		res = atmel_of_init_ecc(host, pdev->dev.of_node);
> +		if (res)
> +			goto err_hw_ecc;
> +	}
> +
>  	if (nand_chip->ecc.mode == NAND_ECC_HW) {
>  		if (host->has_pmecc)
>  			res = atmel_pmecc_nand_init_params(pdev, host);
-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply	[flat|nested] 29+ messages in thread
- * [PATCH 02/12] mtd: nand: atmel: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 ` [PATCH 02/12] mtd: nand: atmel: rely on generic DT parsing done in nand_scan_ident() Boris Brezillon
  2016-04-13 12:31   ` Boris Brezillon
@ 2016-04-13 12:55   ` Nicolas Ferre
  2016-04-13 13:51   ` Boris Brezillon
  2 siblings, 0 replies; 29+ messages in thread
From: Nicolas Ferre @ 2016-04-13 12:55 UTC (permalink / raw)
  To: linux-arm-kernel
Le 01/04/2016 14:54, Boris Brezillon a ?crit :
> The core now takes care of parsing generic DT properties in
> nand_scan_ident() when nand_set_flash_node() has been called.
> Rely on this initialization instead of calling of_get_nand_xxx()
> manually.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
It seems okay:
Reviewed-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Thanks Boris, bye,
> ---
>  drivers/mtd/nand/atmel_nand.c | 133 +++++++++++++++++++++++-------------------
>  1 file changed, 73 insertions(+), 60 deletions(-)
> 
> diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
> index 0b5da72..5e716f2 100644
> --- a/drivers/mtd/nand/atmel_nand.c
> +++ b/drivers/mtd/nand/atmel_nand.c
> @@ -36,7 +36,6 @@
>  #include <linux/of.h>
>  #include <linux/of_device.h>
>  #include <linux/of_gpio.h>
> -#include <linux/of_mtd.h>
>  #include <linux/mtd/mtd.h>
>  #include <linux/mtd/nand.h>
>  #include <linux/mtd/partitions.h>
> @@ -434,14 +433,13 @@ err_buf:
>  static void atmel_read_buf(struct mtd_info *mtd, u8 *buf, int len)
>  {
>  	struct nand_chip *chip = mtd_to_nand(mtd);
> -	struct atmel_nand_host *host = nand_get_controller_data(chip);
>  
>  	if (use_dma && len > mtd->oobsize)
>  		/* only use DMA for bigger than oob size: better performances */
>  		if (atmel_nand_dma_op(mtd, buf, len, 1) == 0)
>  			return;
>  
> -	if (host->board.bus_width_16)
> +	if (chip->options & NAND_BUSWIDTH_16)
>  		atmel_read_buf16(mtd, buf, len);
>  	else
>  		atmel_read_buf8(mtd, buf, len);
> @@ -450,14 +448,13 @@ static void atmel_read_buf(struct mtd_info *mtd, u8 *buf, int len)
>  static void atmel_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
>  {
>  	struct nand_chip *chip = mtd_to_nand(mtd);
> -	struct atmel_nand_host *host = nand_get_controller_data(chip);
>  
>  	if (use_dma && len > mtd->oobsize)
>  		/* only use DMA for bigger than oob size: better performances */
>  		if (atmel_nand_dma_op(mtd, (void *)buf, len, 0) == 0)
>  			return;
>  
> -	if (host->board.bus_width_16)
> +	if (chip->options & NAND_BUSWIDTH_16)
>  		atmel_write_buf16(mtd, buf, len);
>  	else
>  		atmel_write_buf8(mtd, buf, len);
> @@ -1507,58 +1504,17 @@ static void atmel_nand_hwctl(struct mtd_info *mtd, int mode)
>  		ecc_writel(host->ecc, CR, ATMEL_ECC_RST);
>  }
>  
> -static int atmel_of_init_port(struct atmel_nand_host *host,
> -			      struct device_node *np)
> +static int atmel_of_init_ecc(struct atmel_nand_host *host,
> +			     struct device_node *np)
>  {
> -	u32 val;
>  	u32 offset[2];
> -	int ecc_mode;
> -	struct atmel_nand_data *board = &host->board;
> -	enum of_gpio_flags flags = 0;
> -
> -	host->caps = (struct atmel_nand_caps *)
> -		of_device_get_match_data(host->dev);
> -
> -	if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
> -		if (val >= 32) {
> -			dev_err(host->dev, "invalid addr-offset %u\n", val);
> -			return -EINVAL;
> -		}
> -		board->ale = val;
> -	}
> -
> -	if (of_property_read_u32(np, "atmel,nand-cmd-offset", &val) == 0) {
> -		if (val >= 32) {
> -			dev_err(host->dev, "invalid cmd-offset %u\n", val);
> -			return -EINVAL;
> -		}
> -		board->cle = val;
> -	}
> -
> -	ecc_mode = of_get_nand_ecc_mode(np);
> -
> -	board->ecc_mode = ecc_mode < 0 ? NAND_ECC_SOFT : ecc_mode;
> -
> -	board->on_flash_bbt = of_get_nand_on_flash_bbt(np);
> -
> -	board->has_dma = of_property_read_bool(np, "atmel,nand-has-dma");
> -
> -	if (of_get_nand_bus_width(np) == 16)
> -		board->bus_width_16 = 1;
> -
> -	board->rdy_pin = of_get_gpio_flags(np, 0, &flags);
> -	board->rdy_pin_active_low = (flags == OF_GPIO_ACTIVE_LOW);
> -
> -	board->enable_pin = of_get_gpio(np, 1);
> -	board->det_pin = of_get_gpio(np, 2);
> +	u32 val;
>  
>  	host->has_pmecc = of_property_read_bool(np, "atmel,has-pmecc");
>  
> -	/* load the nfc driver if there is */
> -	of_platform_populate(np, NULL, NULL, host->dev);
> -
> -	if (!(board->ecc_mode == NAND_ECC_HW) || !host->has_pmecc)
> -		return 0;	/* Not using PMECC */
> +	/* Not using PMECC */
> +	if (!(host->nand_chip.ecc.mode == NAND_ECC_HW) || !host->has_pmecc)
> +		return 0;
>  
>  	/* use PMECC, get correction capability, sector size and lookup
>  	 * table offset.
> @@ -1599,16 +1555,64 @@ static int atmel_of_init_port(struct atmel_nand_host *host,
>  		/* Will build a lookup table and initialize the offset later */
>  		return 0;
>  	}
> +
>  	if (!offset[0] && !offset[1]) {
>  		dev_err(host->dev, "Invalid PMECC lookup table offset\n");
>  		return -EINVAL;
>  	}
> +
>  	host->pmecc_lookup_table_offset_512 = offset[0];
>  	host->pmecc_lookup_table_offset_1024 = offset[1];
>  
>  	return 0;
>  }
>  
> +static int atmel_of_init_port(struct atmel_nand_host *host,
> +			      struct device_node *np)
> +{
> +	u32 val;
> +	struct atmel_nand_data *board = &host->board;
> +	enum of_gpio_flags flags = 0;
> +
> +	host->caps = (struct atmel_nand_caps *)
> +		of_device_get_match_data(host->dev);
> +
> +	if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
> +		if (val >= 32) {
> +			dev_err(host->dev, "invalid addr-offset %u\n", val);
> +			return -EINVAL;
> +		}
> +		board->ale = val;
> +	}
> +
> +	if (of_property_read_u32(np, "atmel,nand-cmd-offset", &val) == 0) {
> +		if (val >= 32) {
> +			dev_err(host->dev, "invalid cmd-offset %u\n", val);
> +			return -EINVAL;
> +		}
> +		board->cle = val;
> +	}
> +
> +	board->has_dma = of_property_read_bool(np, "atmel,nand-has-dma");
> +
> +	board->rdy_pin = of_get_gpio_flags(np, 0, &flags);
> +	board->rdy_pin_active_low = (flags == OF_GPIO_ACTIVE_LOW);
> +
> +	board->enable_pin = of_get_gpio(np, 1);
> +	board->det_pin = of_get_gpio(np, 2);
> +
> +	/* load the nfc driver if there is */
> +	of_platform_populate(np, NULL, NULL, host->dev);
> +
> +	/*
> +	 * Initialize ECC mode to NAND_ECC_SOFT so that we have a correct value
> +	 * even if the nand-ecc-mode property is not defined.
> +	 */
> +	host->nand_chip.ecc.mode = NAND_ECC_SOFT;
> +
> +	return 0;
> +}
> +
>  static int atmel_hw_nand_init_params(struct platform_device *pdev,
>  					 struct atmel_nand_host *host)
>  {
> @@ -2150,6 +2154,11 @@ static int atmel_nand_probe(struct platform_device *pdev)
>  	} else {
>  		memcpy(&host->board, dev_get_platdata(&pdev->dev),
>  		       sizeof(struct atmel_nand_data));
> +		nand_chip->ecc.mode = host->board.ecc_mode;
> +
> +		/* 16-bit bus width */
> +		if (host->board.bus_width_16)
> +			nand_chip->options |= NAND_BUSWIDTH_16;
>  	}
>  
>  	 /* link the private data structures */
> @@ -2191,11 +2200,8 @@ static int atmel_nand_probe(struct platform_device *pdev)
>  		nand_chip->cmd_ctrl = atmel_nand_cmd_ctrl;
>  	}
>  
> -	nand_chip->ecc.mode = host->board.ecc_mode;
>  	nand_chip->chip_delay = 40;		/* 40us command delay time */
>  
> -	if (host->board.bus_width_16)	/* 16-bit bus width */
> -		nand_chip->options |= NAND_BUSWIDTH_16;
>  
>  	nand_chip->read_buf = atmel_read_buf;
>  	nand_chip->write_buf = atmel_write_buf;
> @@ -2228,11 +2234,6 @@ static int atmel_nand_probe(struct platform_device *pdev)
>  		}
>  	}
>  
> -	if (host->board.on_flash_bbt || on_flash_bbt) {
> -		dev_info(&pdev->dev, "Use On Flash BBT\n");
> -		nand_chip->bbt_options |= NAND_BBT_USE_FLASH;
> -	}
> -
>  	if (!host->board.has_dma)
>  		use_dma = 0;
>  
> @@ -2259,6 +2260,18 @@ static int atmel_nand_probe(struct platform_device *pdev)
>  		goto err_scan_ident;
>  	}
>  
> +	if (host->board.on_flash_bbt || on_flash_bbt)
> +		nand_chip->bbt_options |= NAND_BBT_USE_FLASH;
> +
> +	if (nand_chip->bbt_options & NAND_BBT_USE_FLASH)
> +		dev_info(&pdev->dev, "Use On Flash BBT\n");
> +
> +	if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) {
> +		res = atmel_of_init_ecc(host, pdev->dev.of_node);
> +		if (res)
> +			goto err_hw_ecc;
> +	}
> +
>  	if (nand_chip->ecc.mode == NAND_ECC_HW) {
>  		if (host->has_pmecc)
>  			res = atmel_pmecc_nand_init_params(pdev, host);
> 
-- 
Nicolas Ferre
^ permalink raw reply	[flat|nested] 29+ messages in thread
- * [PATCH 02/12] mtd: nand: atmel: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 ` [PATCH 02/12] mtd: nand: atmel: rely on generic DT parsing done in nand_scan_ident() Boris Brezillon
  2016-04-13 12:31   ` Boris Brezillon
  2016-04-13 12:55   ` Nicolas Ferre
@ 2016-04-13 13:51   ` Boris Brezillon
  2 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-13 13:51 UTC (permalink / raw)
  To: linux-arm-kernel
On Fri,  1 Apr 2016 14:54:22 +0200
Boris Brezillon <boris.brezillon@free-electrons.com> wrote:
> The core now takes care of parsing generic DT properties in
> nand_scan_ident() when nand_set_flash_node() has been called.
> Rely on this initialization instead of calling of_get_nand_xxx()
> manually.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Applied.
-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply	[flat|nested] 29+ messages in thread 
 
- * [PATCH 03/12] mtd: nand: omap2: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
  2016-04-01 12:54 ` [PATCH 01/12] mtd: nand: remove unneeded of_mtd.h inclusions Boris Brezillon
  2016-04-01 12:54 ` [PATCH 02/12] mtd: nand: atmel: rely on generic DT parsing done in nand_scan_ident() Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-04  7:23   ` Roger Quadros
  2016-04-12 22:22   ` Boris Brezillon
  2016-04-01 12:54 ` [PATCH 04/12] mtd: nand: brcm: " Boris Brezillon
                   ` (10 subsequent siblings)
  13 siblings, 2 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/memory/omap-gpmc.c | 7 -------
 drivers/mtd/nand/omap2.c   | 9 ++++++---
 2 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
index 21825dd..85aa85e 100644
--- a/drivers/memory/omap-gpmc.c
+++ b/drivers/memory/omap-gpmc.c
@@ -25,7 +25,6 @@
 #include <linux/platform_device.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
-#include <linux/of_mtd.h>
 #include <linux/of_device.h>
 #include <linux/of_platform.h>
 #include <linux/omap-gpmc.h>
@@ -1876,12 +1875,6 @@ static int gpmc_probe_nand_child(struct platform_device *pdev,
 				break;
 			}
 
-	gpmc_nand_data->flash_bbt = of_get_nand_on_flash_bbt(child);
-
-	val = of_get_nand_bus_width(child);
-	if (val == 16)
-		gpmc_nand_data->devsize = NAND_BUSWIDTH_16;
-
 	gpmc_read_timings_dt(child, &gpmc_t);
 	gpmc_nand_init(gpmc_nand_data, &gpmc_t);
 
diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
index 0749ca1..8921283 100644
--- a/drivers/mtd/nand/omap2.c
+++ b/drivers/mtd/nand/omap2.c
@@ -1704,9 +1704,7 @@ static int omap_nand_probe(struct platform_device *pdev)
 	}
 
 	if (pdata->flash_bbt)
-		nand_chip->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB;
-	else
-		nand_chip->options |= NAND_SKIP_BBTSCAN;
+		nand_chip->bbt_options |= NAND_BBT_USE_FLASH;
 
 	/* scan NAND device connected to chip controller */
 	nand_chip->options |= pdata->devsize & NAND_BUSWIDTH_16;
@@ -1716,6 +1714,11 @@ static int omap_nand_probe(struct platform_device *pdev)
 		goto return_error;
 	}
 
+	if (nand_chip->bbt_options & NAND_BBT_USE_FLASH)
+		nand_chip->bbt_options |= NAND_BBT_NO_OOB;
+	else
+		nand_chip->options |= NAND_SKIP_BBTSCAN;
+
 	/* re-populate low-level callbacks based on xfer modes */
 	switch (pdata->xfer_type) {
 	case NAND_OMAP_PREFETCH_POLLED:
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 03/12] mtd: nand: omap2: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 ` [PATCH 03/12] mtd: nand: omap2: " Boris Brezillon
@ 2016-04-04  7:23   ` Roger Quadros
  2016-04-12 22:22   ` Boris Brezillon
  1 sibling, 0 replies; 29+ messages in thread
From: Roger Quadros @ 2016-04-04  7:23 UTC (permalink / raw)
  To: linux-arm-kernel
On 01/04/16 15:54, Boris Brezillon wrote:
> The core now takes care of parsing generic DT properties in
> nand_scan_ident() when nand_set_flash_node() has been called.
> Rely on this initialization instead of calling of_get_nand_xxx()
> manually.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Roger Quadros <rogerq@ti.com>
cheers,
-roger
> ---
>  drivers/memory/omap-gpmc.c | 7 -------
>  drivers/mtd/nand/omap2.c   | 9 ++++++---
>  2 files changed, 6 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
> index 21825dd..85aa85e 100644
> --- a/drivers/memory/omap-gpmc.c
> +++ b/drivers/memory/omap-gpmc.c
> @@ -25,7 +25,6 @@
>  #include <linux/platform_device.h>
>  #include <linux/of.h>
>  #include <linux/of_address.h>
> -#include <linux/of_mtd.h>
>  #include <linux/of_device.h>
>  #include <linux/of_platform.h>
>  #include <linux/omap-gpmc.h>
> @@ -1876,12 +1875,6 @@ static int gpmc_probe_nand_child(struct platform_device *pdev,
>  				break;
>  			}
>  
> -	gpmc_nand_data->flash_bbt = of_get_nand_on_flash_bbt(child);
> -
> -	val = of_get_nand_bus_width(child);
> -	if (val == 16)
> -		gpmc_nand_data->devsize = NAND_BUSWIDTH_16;
> -
>  	gpmc_read_timings_dt(child, &gpmc_t);
>  	gpmc_nand_init(gpmc_nand_data, &gpmc_t);
>  
> diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
> index 0749ca1..8921283 100644
> --- a/drivers/mtd/nand/omap2.c
> +++ b/drivers/mtd/nand/omap2.c
> @@ -1704,9 +1704,7 @@ static int omap_nand_probe(struct platform_device *pdev)
>  	}
>  
>  	if (pdata->flash_bbt)
> -		nand_chip->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB;
> -	else
> -		nand_chip->options |= NAND_SKIP_BBTSCAN;
> +		nand_chip->bbt_options |= NAND_BBT_USE_FLASH;
>  
>  	/* scan NAND device connected to chip controller */
>  	nand_chip->options |= pdata->devsize & NAND_BUSWIDTH_16;
> @@ -1716,6 +1714,11 @@ static int omap_nand_probe(struct platform_device *pdev)
>  		goto return_error;
>  	}
>  
> +	if (nand_chip->bbt_options & NAND_BBT_USE_FLASH)
> +		nand_chip->bbt_options |= NAND_BBT_NO_OOB;
> +	else
> +		nand_chip->options |= NAND_SKIP_BBTSCAN;
> +
>  	/* re-populate low-level callbacks based on xfer modes */
>  	switch (pdata->xfer_type) {
>  	case NAND_OMAP_PREFETCH_POLLED:
> 
^ permalink raw reply	[flat|nested] 29+ messages in thread
- * [PATCH 03/12] mtd: nand: omap2: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 ` [PATCH 03/12] mtd: nand: omap2: " Boris Brezillon
  2016-04-04  7:23   ` Roger Quadros
@ 2016-04-12 22:22   ` Boris Brezillon
  1 sibling, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-12 22:22 UTC (permalink / raw)
  To: linux-arm-kernel
On Fri,  1 Apr 2016 14:54:23 +0200
Boris Brezillon <boris.brezillon@free-electrons.com> wrote:
> The core now takes care of parsing generic DT properties in
> nand_scan_ident() when nand_set_flash_node() has been called.
> Rely on this initialization instead of calling of_get_nand_xxx()
> manually.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Applied.
> ---
>  drivers/memory/omap-gpmc.c | 7 -------
>  drivers/mtd/nand/omap2.c   | 9 ++++++---
>  2 files changed, 6 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
> index 21825dd..85aa85e 100644
> --- a/drivers/memory/omap-gpmc.c
> +++ b/drivers/memory/omap-gpmc.c
> @@ -25,7 +25,6 @@
>  #include <linux/platform_device.h>
>  #include <linux/of.h>
>  #include <linux/of_address.h>
> -#include <linux/of_mtd.h>
>  #include <linux/of_device.h>
>  #include <linux/of_platform.h>
>  #include <linux/omap-gpmc.h>
> @@ -1876,12 +1875,6 @@ static int gpmc_probe_nand_child(struct platform_device *pdev,
>  				break;
>  			}
>  
> -	gpmc_nand_data->flash_bbt = of_get_nand_on_flash_bbt(child);
> -
> -	val = of_get_nand_bus_width(child);
> -	if (val == 16)
> -		gpmc_nand_data->devsize = NAND_BUSWIDTH_16;
> -
>  	gpmc_read_timings_dt(child, &gpmc_t);
>  	gpmc_nand_init(gpmc_nand_data, &gpmc_t);
>  
> diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
> index 0749ca1..8921283 100644
> --- a/drivers/mtd/nand/omap2.c
> +++ b/drivers/mtd/nand/omap2.c
> @@ -1704,9 +1704,7 @@ static int omap_nand_probe(struct platform_device *pdev)
>  	}
>  
>  	if (pdata->flash_bbt)
> -		nand_chip->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB;
> -	else
> -		nand_chip->options |= NAND_SKIP_BBTSCAN;
> +		nand_chip->bbt_options |= NAND_BBT_USE_FLASH;
>  
>  	/* scan NAND device connected to chip controller */
>  	nand_chip->options |= pdata->devsize & NAND_BUSWIDTH_16;
> @@ -1716,6 +1714,11 @@ static int omap_nand_probe(struct platform_device *pdev)
>  		goto return_error;
>  	}
>  
> +	if (nand_chip->bbt_options & NAND_BBT_USE_FLASH)
> +		nand_chip->bbt_options |= NAND_BBT_NO_OOB;
> +	else
> +		nand_chip->options |= NAND_SKIP_BBTSCAN;
> +
>  	/* re-populate low-level callbacks based on xfer modes */
>  	switch (pdata->xfer_type) {
>  	case NAND_OMAP_PREFETCH_POLLED:
-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply	[flat|nested] 29+ messages in thread
 
- * [PATCH 04/12] mtd: nand: brcm: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
                   ` (2 preceding siblings ...)
  2016-04-01 12:54 ` [PATCH 03/12] mtd: nand: omap2: " Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-12 22:31   ` Brian Norris
  2016-04-01 12:54 ` [PATCH 05/12] mtd: nand: davinci: " Boris Brezillon
                   ` (9 subsequent siblings)
  13 siblings, 1 reply; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/brcmnand/brcmnand.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c
index e052839..6e2a52d 100644
--- a/drivers/mtd/nand/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/brcmnand/brcmnand.c
@@ -32,7 +32,6 @@
 #include <linux/mtd/nand.h>
 #include <linux/mtd/partitions.h>
 #include <linux/of.h>
-#include <linux/of_mtd.h>
 #include <linux/of_platform.h>
 #include <linux/slab.h>
 #include <linux/list.h>
@@ -2001,8 +2000,8 @@ static int brcmnand_init_cs(struct brcmnand_host *host, struct device_node *dn)
 	 */
 	chip->options |= NAND_USE_BOUNCE_BUFFER;
 
-	if (of_get_nand_on_flash_bbt(dn))
-		chip->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB;
+	if (chip->bbt_options & NAND_BBT_USE_FLASH)
+		chip->bbt_options |= NAND_BBT_NO_OOB;
 
 	if (brcmnand_setup_dev(host))
 		return -ENXIO;
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 04/12] mtd: nand: brcm: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 ` [PATCH 04/12] mtd: nand: brcm: " Boris Brezillon
@ 2016-04-12 22:31   ` Brian Norris
  2016-04-13  7:42     ` Boris Brezillon
  0 siblings, 1 reply; 29+ messages in thread
From: Brian Norris @ 2016-04-12 22:31 UTC (permalink / raw)
  To: linux-arm-kernel
On Fri, Apr 01, 2016 at 02:54:24PM +0200, Boris Brezillon wrote:
> The core now takes care of parsing generic DT properties in
> nand_scan_ident() when nand_set_flash_node() has been called.
> Rely on this initialization instead of calling of_get_nand_xxx()
> manually.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Brian Norris <computersforpeace@gmail.com>
^ permalink raw reply	[flat|nested] 29+ messages in thread 
- * [PATCH 04/12] mtd: nand: brcm: rely on generic DT parsing done in nand_scan_ident()
  2016-04-12 22:31   ` Brian Norris
@ 2016-04-13  7:42     ` Boris Brezillon
  0 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-13  7:42 UTC (permalink / raw)
  To: linux-arm-kernel
On Tue, 12 Apr 2016 15:31:11 -0700
Brian Norris <computersforpeace@gmail.com> wrote:
> On Fri, Apr 01, 2016 at 02:54:24PM +0200, Boris Brezillon wrote:
> > The core now takes care of parsing generic DT properties in
> > nand_scan_ident() when nand_set_flash_node() has been called.
> > Rely on this initialization instead of calling of_get_nand_xxx()
> > manually.
> > 
> > Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> 
> Acked-by: Brian Norris <computersforpeace@gmail.com>
Applied.
-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply	[flat|nested] 29+ messages in thread 
 
 
- * [PATCH 05/12] mtd: nand: davinci: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
                   ` (3 preceding siblings ...)
  2016-04-01 12:54 ` [PATCH 04/12] mtd: nand: brcm: " Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-01 12:54 ` [PATCH 06/12] mtd: nand: gpmi: " Boris Brezillon
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/davinci_nand.c | 85 +++++++++++++++++++----------------------
 1 file changed, 40 insertions(+), 45 deletions(-)
diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c
index 8cb821b..5bb6245 100644
--- a/drivers/mtd/nand/davinci_nand.c
+++ b/drivers/mtd/nand/davinci_nand.c
@@ -34,7 +34,6 @@
 #include <linux/slab.h>
 #include <linux/of_device.h>
 #include <linux/of.h>
-#include <linux/of_mtd.h>
 
 #include <linux/platform_data/mtd-davinci.h>
 #include <linux/platform_data/mtd-davinci-aemif.h>
@@ -576,9 +575,9 @@ static struct davinci_nand_pdata
 		if (!of_property_read_u32(pdev->dev.of_node,
 			"ti,davinci-mask-chipsel", &prop))
 			pdata->mask_chipsel = prop;
+
+
 		if (!of_property_read_string(pdev->dev.of_node,
-			"nand-ecc-mode", &mode) ||
-		    !of_property_read_string(pdev->dev.of_node,
 			"ti,davinci-ecc-mode", &mode)) {
 			if (!strncmp("none", mode, 4))
 				pdata->ecc_mode = NAND_ECC_NONE;
@@ -591,14 +590,11 @@ static struct davinci_nand_pdata
 			"ti,davinci-ecc-bits", &prop))
 			pdata->ecc_bits = prop;
 
-		prop = of_get_nand_bus_width(pdev->dev.of_node);
-		if (0 < prop || !of_property_read_u32(pdev->dev.of_node,
-			"ti,davinci-nand-buswidth", &prop))
-			if (prop == 16)
-				pdata->options |= NAND_BUSWIDTH_16;
+		if (!of_property_read_u32(pdev->dev.of_node,
+			"ti,davinci-nand-buswidth", &prop) && prop == 16)
+			pdata->options |= NAND_BUSWIDTH_16;
+
 		if (of_property_read_bool(pdev->dev.of_node,
-			"nand-on-flash-bbt") ||
-		    of_property_read_bool(pdev->dev.of_node,
 			"ti,davinci-nand-use-bbt"))
 			pdata->bbt_options = NAND_BBT_USE_FLASH;
 
@@ -628,7 +624,6 @@ static int nand_davinci_probe(struct platform_device *pdev)
 	void __iomem			*base;
 	int				ret;
 	uint32_t			val;
-	nand_ecc_modes_t		ecc_mode;
 	struct mtd_info			*mtd;
 
 	pdata = nand_davinci_get_pdata(pdev);
@@ -712,10 +707,41 @@ static int nand_davinci_probe(struct platform_device *pdev)
 	info->chip.write_buf    = nand_davinci_write_buf;
 
 	/* Use board-specific ECC config */
-	ecc_mode		= pdata->ecc_mode;
+	info->chip.ecc.mode	= pdata->ecc_mode;
 
 	ret = -EINVAL;
-	switch (ecc_mode) {
+
+	info->clk = devm_clk_get(&pdev->dev, "aemif");
+	if (IS_ERR(info->clk)) {
+		ret = PTR_ERR(info->clk);
+		dev_dbg(&pdev->dev, "unable to get AEMIF clock, err %d\n", ret);
+		return ret;
+	}
+
+	ret = clk_prepare_enable(info->clk);
+	if (ret < 0) {
+		dev_dbg(&pdev->dev, "unable to enable AEMIF clock, err %d\n",
+			ret);
+		goto err_clk_enable;
+	}
+
+	spin_lock_irq(&davinci_nand_lock);
+
+	/* put CSxNAND into NAND mode */
+	val = davinci_nand_readl(info, NANDFCR_OFFSET);
+	val |= BIT(info->core_chipsel);
+	davinci_nand_writel(info, NANDFCR_OFFSET, val);
+
+	spin_unlock_irq(&davinci_nand_lock);
+
+	/* Scan to find existence of the device(s) */
+	ret = nand_scan_ident(mtd, pdata->mask_chipsel ? 2 : 1, NULL);
+	if (ret < 0) {
+		dev_dbg(&pdev->dev, "no NAND chip(s) found\n");
+		goto err;
+	}
+
+	switch (info->chip.ecc.mode) {
 	case NAND_ECC_NONE:
 	case NAND_ECC_SOFT:
 		pdata->ecc_bits = 0;
@@ -754,37 +780,6 @@ static int nand_davinci_probe(struct platform_device *pdev)
 	default:
 		return -EINVAL;
 	}
-	info->chip.ecc.mode = ecc_mode;
-
-	info->clk = devm_clk_get(&pdev->dev, "aemif");
-	if (IS_ERR(info->clk)) {
-		ret = PTR_ERR(info->clk);
-		dev_dbg(&pdev->dev, "unable to get AEMIF clock, err %d\n", ret);
-		return ret;
-	}
-
-	ret = clk_prepare_enable(info->clk);
-	if (ret < 0) {
-		dev_dbg(&pdev->dev, "unable to enable AEMIF clock, err %d\n",
-			ret);
-		goto err_clk_enable;
-	}
-
-	spin_lock_irq(&davinci_nand_lock);
-
-	/* put CSxNAND into NAND mode */
-	val = davinci_nand_readl(info, NANDFCR_OFFSET);
-	val |= BIT(info->core_chipsel);
-	davinci_nand_writel(info, NANDFCR_OFFSET, val);
-
-	spin_unlock_irq(&davinci_nand_lock);
-
-	/* Scan to find existence of the device(s) */
-	ret = nand_scan_ident(mtd, pdata->mask_chipsel ? 2 : 1, NULL);
-	if (ret < 0) {
-		dev_dbg(&pdev->dev, "no NAND chip(s) found\n");
-		goto err;
-	}
 
 	/* Update ECC layout if needed ... for 1-bit HW ECC, the default
 	 * is OK, but it allocates 6 bytes when only 3 are needed (for
@@ -850,7 +845,7 @@ err:
 
 err_clk_enable:
 	spin_lock_irq(&davinci_nand_lock);
-	if (ecc_mode == NAND_ECC_HW_SYNDROME)
+	if (info->chip.ecc.mode == NAND_ECC_HW_SYNDROME)
 		ecc4_busy = false;
 	spin_unlock_irq(&davinci_nand_lock);
 	return ret;
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 06/12] mtd: nand: gpmi: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
                   ` (4 preceding siblings ...)
  2016-04-01 12:54 ` [PATCH 05/12] mtd: nand: davinci: " Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-16  9:07   ` Boris Brezillon
  2016-04-01 12:54 ` [PATCH 07/12] mtd: nand: hisi504: " Boris Brezillon
                   ` (7 subsequent siblings)
  13 siblings, 1 reply; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
index 8122c69..c6e8a1c 100644
--- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
+++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
@@ -25,7 +25,6 @@
 #include <linux/mtd/partitions.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
-#include <linux/of_mtd.h>
 #include "gpmi-nand.h"
 #include "bch-regs.h"
 
@@ -1914,16 +1913,6 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
 	/* Set up swap_block_mark, must be set before the gpmi_set_geometry() */
 	this->swap_block_mark = !GPMI_IS_MX23(this);
 
-	if (of_get_nand_on_flash_bbt(this->dev->of_node)) {
-		chip->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB;
-
-		if (of_property_read_bool(this->dev->of_node,
-						"fsl,no-blockmark-swap"))
-			this->swap_block_mark = false;
-	}
-	dev_dbg(this->dev, "Blockmark swapping %sabled\n",
-		this->swap_block_mark ? "en" : "dis");
-
 	/*
 	 * Allocate a temporary DMA buffer for reading ID in the
 	 * nand_scan_ident().
@@ -1938,6 +1927,16 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
 	if (ret)
 		goto err_out;
 
+	if (chip->bbt_options & NAND_BBT_USE_FLASH) {
+		chip->bbt_options |= NAND_BBT_NO_OOB;
+
+		if (of_property_read_bool(this->dev->of_node,
+						"fsl,no-blockmark-swap"))
+			this->swap_block_mark = false;
+	}
+	dev_dbg(this->dev, "Blockmark swapping %sabled\n",
+		this->swap_block_mark ? "en" : "dis");
+
 	ret = gpmi_init_last(this);
 	if (ret)
 		goto err_out;
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 06/12] mtd: nand: gpmi: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 ` [PATCH 06/12] mtd: nand: gpmi: " Boris Brezillon
@ 2016-04-16  9:07   ` Boris Brezillon
  0 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-16  9:07 UTC (permalink / raw)
  To: linux-arm-kernel
Hi Han,
On Fri,  1 Apr 2016 14:54:26 +0200
Boris Brezillon <boris.brezillon@free-electrons.com> wrote:
> The core now takes care of parsing generic DT properties in
> nand_scan_ident() when nand_set_flash_node() has been called.
> Rely on this initialization instead of calling of_get_nand_xxx()
> manually.
Can you review/test this patch? I'd like to have the whole series
merged in this release.
Thanks,
Boris
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> ---
>  drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 21 ++++++++++-----------
>  1 file changed, 10 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
> index 8122c69..c6e8a1c 100644
> --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
> +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
> @@ -25,7 +25,6 @@
>  #include <linux/mtd/partitions.h>
>  #include <linux/of.h>
>  #include <linux/of_device.h>
> -#include <linux/of_mtd.h>
>  #include "gpmi-nand.h"
>  #include "bch-regs.h"
>  
> @@ -1914,16 +1913,6 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
>  	/* Set up swap_block_mark, must be set before the gpmi_set_geometry() */
>  	this->swap_block_mark = !GPMI_IS_MX23(this);
>  
> -	if (of_get_nand_on_flash_bbt(this->dev->of_node)) {
> -		chip->bbt_options |= NAND_BBT_USE_FLASH | NAND_BBT_NO_OOB;
> -
> -		if (of_property_read_bool(this->dev->of_node,
> -						"fsl,no-blockmark-swap"))
> -			this->swap_block_mark = false;
> -	}
> -	dev_dbg(this->dev, "Blockmark swapping %sabled\n",
> -		this->swap_block_mark ? "en" : "dis");
> -
>  	/*
>  	 * Allocate a temporary DMA buffer for reading ID in the
>  	 * nand_scan_ident().
> @@ -1938,6 +1927,16 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
>  	if (ret)
>  		goto err_out;
>  
> +	if (chip->bbt_options & NAND_BBT_USE_FLASH) {
> +		chip->bbt_options |= NAND_BBT_NO_OOB;
> +
> +		if (of_property_read_bool(this->dev->of_node,
> +						"fsl,no-blockmark-swap"))
> +			this->swap_block_mark = false;
> +	}
> +	dev_dbg(this->dev, "Blockmark swapping %sabled\n",
> +		this->swap_block_mark ? "en" : "dis");
> +
>  	ret = gpmi_init_last(this);
>  	if (ret)
>  		goto err_out;
-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply	[flat|nested] 29+ messages in thread
 
- * [PATCH 07/12] mtd: nand: hisi504: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
                   ` (5 preceding siblings ...)
  2016-04-01 12:54 ` [PATCH 06/12] mtd: nand: gpmi: " Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-01 12:54 ` [PATCH 08/12] mtd: nand: lpc32xx: " Boris Brezillon
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/hisi504_nand.c | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/drivers/mtd/nand/hisi504_nand.c b/drivers/mtd/nand/hisi504_nand.c
index 96502b6..38cdc84 100644
--- a/drivers/mtd/nand/hisi504_nand.c
+++ b/drivers/mtd/nand/hisi504_nand.c
@@ -19,7 +19,6 @@
  * GNU General Public License for more details.
  */
 #include <linux/of.h>
-#include <linux/of_mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/sizes.h>
 #include <linux/clk.h>
@@ -642,10 +641,9 @@ static int hisi_nfc_ecc_probe(struct hinfc_host *host)
 	struct device *dev = host->dev;
 	struct nand_chip *chip = &host->chip;
 	struct mtd_info *mtd = nand_to_mtd(chip);
-	struct device_node *np = host->dev->of_node;
 
-	size = of_get_nand_ecc_step_size(np);
-	strength = of_get_nand_ecc_strength(np);
+	size = chip->ecc.size;
+	strength = chip->ecc.strength;
 	if (size != 1024) {
 		dev_err(dev, "error ecc size: %d\n", size);
 		return -EINVAL;
@@ -695,7 +693,7 @@ static int hisi_nfc_ecc_probe(struct hinfc_host *host)
 
 static int hisi_nfc_probe(struct platform_device *pdev)
 {
-	int ret = 0, irq, buswidth, flag, max_chips = HINFC504_MAX_CHIP;
+	int ret = 0, irq, flag, max_chips = HINFC504_MAX_CHIP;
 	struct device *dev = &pdev->dev;
 	struct hinfc_host *host;
 	struct nand_chip  *chip;
@@ -747,12 +745,6 @@ static int hisi_nfc_probe(struct platform_device *pdev)
 	chip->read_buf		= hisi_nfc_read_buf;
 	chip->chip_delay	= HINFC504_CHIP_DELAY;
 
-	chip->ecc.mode = of_get_nand_ecc_mode(np);
-
-	buswidth = of_get_nand_bus_width(np);
-	if (buswidth == 16)
-		chip->options |= NAND_BUSWIDTH_16;
-
 	hisi_nfc_host_init(host);
 
 	ret = devm_request_irq(dev, irq, hinfc_irq_handle, 0x0, "nandc", host);
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 08/12] mtd: nand: lpc32xx: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
                   ` (6 preceding siblings ...)
  2016-04-01 12:54 ` [PATCH 07/12] mtd: nand: hisi504: " Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-01 12:54 ` [PATCH 09/12] mtd: nand: mxc: " Boris Brezillon
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/lpc32xx_slc.c | 24 +++++++++---------------
 1 file changed, 9 insertions(+), 15 deletions(-)
diff --git a/drivers/mtd/nand/lpc32xx_slc.c b/drivers/mtd/nand/lpc32xx_slc.c
index 3b8f373..99925a2 100644
--- a/drivers/mtd/nand/lpc32xx_slc.c
+++ b/drivers/mtd/nand/lpc32xx_slc.c
@@ -194,7 +194,6 @@ struct lpc32xx_nand_cfg_slc {
 	uint32_t rwidth;
 	uint32_t rhold;
 	uint32_t rsetup;
-	bool use_bbt;
 	int wp_gpio;
 	struct mtd_partition *parts;
 	unsigned num_parts;
@@ -747,7 +746,6 @@ static struct lpc32xx_nand_cfg_slc *lpc32xx_parse_dt(struct device *dev)
 		return NULL;
 	}
 
-	ncfg->use_bbt = of_get_nand_on_flash_bbt(np);
 	ncfg->wp_gpio = of_get_named_gpio(np, "gpios", 0);
 
 	return ncfg;
@@ -882,19 +880,15 @@ static int lpc32xx_nand_probe(struct platform_device *pdev)
 	chip->ecc.bytes = LPC32XX_SLC_DEV_ECC_BYTES;
 	chip->ecc.prepad = chip->ecc.postpad = 0;
 
-	/* Avoid extra scan if using BBT, setup BBT support */
-	if (host->ncfg->use_bbt) {
-		chip->bbt_options |= NAND_BBT_USE_FLASH;
-
-		/*
-		 * Use a custom BBT marker setup for small page FLASH that
-		 * won't interfere with the ECC layout. Large and huge page
-		 * FLASH use the standard layout.
-		 */
-		if (mtd->writesize <= 512) {
-			chip->bbt_td = &bbt_smallpage_main_descr;
-			chip->bbt_md = &bbt_smallpage_mirror_descr;
-		}
+	/*
+	 * Use a custom BBT marker setup for small page FLASH that
+	 * won't interfere with the ECC layout. Large and huge page
+	 * FLASH use the standard layout.
+	 */
+	if ((chip->bbt_options & NAND_BBT_USE_FLASH) &&
+	    mtd->writesize <= 512) {
+		chip->bbt_td = &bbt_smallpage_main_descr;
+		chip->bbt_md = &bbt_smallpage_mirror_descr;
 	}
 
 	/*
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 09/12] mtd: nand: mxc: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
                   ` (7 preceding siblings ...)
  2016-04-01 12:54 ` [PATCH 08/12] mtd: nand: lpc32xx: " Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-01 12:54 ` [PATCH 10/12] mtd: nand: pxa3xx: " Boris Brezillon
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/mxc_nand.c | 50 ++++++++++++++++++++++-----------------------
 1 file changed, 25 insertions(+), 25 deletions(-)
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c
index 854c832..f25913b 100644
--- a/drivers/mtd/nand/mxc_nand.c
+++ b/drivers/mtd/nand/mxc_nand.c
@@ -34,7 +34,6 @@
 #include <linux/completion.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
-#include <linux/of_mtd.h>
 
 #include <asm/mach/flash.h>
 #include <linux/platform_data/mtd-mxc_nand.h>
@@ -1461,25 +1460,12 @@ MODULE_DEVICE_TABLE(of, mxcnd_dt_ids);
 static int __init mxcnd_probe_dt(struct mxc_nand_host *host)
 {
 	struct device_node *np = host->dev->of_node;
-	struct mxc_nand_platform_data *pdata = &host->pdata;
 	const struct of_device_id *of_id =
 		of_match_device(mxcnd_dt_ids, host->dev);
-	int buswidth;
 
 	if (!np)
 		return 1;
 
-	if (of_get_nand_ecc_mode(np) >= 0)
-		pdata->hw_ecc = 1;
-
-	pdata->flash_bbt = of_get_nand_on_flash_bbt(np);
-
-	buswidth = of_get_nand_bus_width(np);
-	if (buswidth < 0)
-		return buswidth;
-
-	pdata->width = buswidth / 8;
-
 	host->devtype_data = of_id->data;
 
 	return 0;
@@ -1578,25 +1564,18 @@ static int mxcnd_probe(struct platform_device *pdev)
 	this->ecc.size = 512;
 	this->ecc.layout = host->devtype_data->ecclayout_512;
 
-	if (host->pdata.hw_ecc) {
-		this->ecc.calculate = mxc_nand_calculate_ecc;
-		this->ecc.hwctl = mxc_nand_enable_hwecc;
-		this->ecc.correct = host->devtype_data->correct_data;
+	if (host->pdata.hw_ecc)
 		this->ecc.mode = NAND_ECC_HW;
-	} else {
+	else
 		this->ecc.mode = NAND_ECC_SOFT;
-	}
 
 	/* NAND bus width determines access functions used by upper layer */
 	if (host->pdata.width == 2)
 		this->options |= NAND_BUSWIDTH_16;
 
-	if (host->pdata.flash_bbt) {
-		this->bbt_td = &bbt_main_descr;
-		this->bbt_md = &bbt_mirror_descr;
-		/* update flash based bbt */
+	/* update flash based bbt */
+	if (host->pdata.flash_bbt)
 		this->bbt_options |= NAND_BBT_USE_FLASH;
-	}
 
 	init_completion(&host->op_completion);
 
@@ -1637,6 +1616,27 @@ static int mxcnd_probe(struct platform_device *pdev)
 		goto escan;
 	}
 
+	switch (this->ecc.mode) {
+	case NAND_ECC_HW:
+		this->ecc.calculate = mxc_nand_calculate_ecc;
+		this->ecc.hwctl = mxc_nand_enable_hwecc;
+		this->ecc.correct = host->devtype_data->correct_data;
+		break;
+
+	case NAND_ECC_SOFT:
+	case NAND_ECC_SOFT_BCH:
+		break;
+
+	default:
+		err = -EINVAL;
+		goto escan;
+	}
+
+	if (this->bbt_options & NAND_BBT_USE_FLASH) {
+		this->bbt_td = &bbt_main_descr;
+		this->bbt_md = &bbt_mirror_descr;
+	}
+
 	/* allocate the right size buffer now */
 	devm_kfree(&pdev->dev, (void *)host->data_buf);
 	host->data_buf = devm_kzalloc(&pdev->dev, mtd->writesize + mtd->oobsize,
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 10/12] mtd: nand: pxa3xx: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
                   ` (8 preceding siblings ...)
  2016-04-01 12:54 ` [PATCH 09/12] mtd: nand: mxc: " Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-13 14:48   ` Ezequiel Garcia
  2016-04-01 12:54 ` [PATCH 11/12] mtd: nand: sh_flctl: " Boris Brezillon
                   ` (3 subsequent siblings)
  13 siblings, 1 reply; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/pxa3xx_nand.c | 28 +++++++++++-----------------
 1 file changed, 11 insertions(+), 17 deletions(-)
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
index d650885..38d26ab 100644
--- a/drivers/mtd/nand/pxa3xx_nand.c
+++ b/drivers/mtd/nand/pxa3xx_nand.c
@@ -29,7 +29,6 @@
 #include <linux/slab.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
-#include <linux/of_mtd.h>
 #include <linux/platform_data/mtd-nand-pxa3xx.h>
 
 #define	CHIP_DELAY_TIMEOUT	msecs_to_jiffies(200)
@@ -1651,6 +1650,12 @@ static int pxa3xx_nand_scan(struct mtd_info *mtd)
 	if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370)
 		nand_writel(info, NDECCCTRL, 0x0);
 
+	if (pdata->flash_bbt)
+		chip->bbt_options |= NAND_BBT_USE_FLASH;
+
+	chip->ecc.strength = pdata->ecc_strength;
+	chip->ecc.size = pdata->ecc_step_size;
+
 	if (nand_scan_ident(mtd, 1, NULL))
 		return -ENODEV;
 
@@ -1663,13 +1668,12 @@ static int pxa3xx_nand_scan(struct mtd_info *mtd)
 		}
 	}
 
-	if (pdata->flash_bbt) {
+	if (chip->bbt_options & NAND_BBT_USE_FLASH) {
 		/*
 		 * We'll use a bad block table stored in-flash and don't
 		 * allow writing the bad block marker to the flash.
 		 */
-		chip->bbt_options |= NAND_BBT_USE_FLASH |
-				     NAND_BBT_NO_OOB_BBM;
+		chip->bbt_options |= NAND_BBT_NO_OOB_BBM;
 		chip->bbt_td = &bbt_main_descr;
 		chip->bbt_md = &bbt_mirror_descr;
 	}
@@ -1689,10 +1693,9 @@ static int pxa3xx_nand_scan(struct mtd_info *mtd)
 		}
 	}
 
-	if (pdata->ecc_strength && pdata->ecc_step_size) {
-		ecc_strength = pdata->ecc_strength;
-		ecc_step = pdata->ecc_step_size;
-	} else {
+	ecc_strength = chip->ecc.strength;
+	ecc_step = chip->ecc.size;
+	if (!ecc_strength || !ecc_step) {
 		ecc_strength = chip->ecc_strength_ds;
 		ecc_step = chip->ecc_step_ds;
 	}
@@ -1903,15 +1906,6 @@ static int pxa3xx_nand_probe_dt(struct platform_device *pdev)
 	if (of_get_property(np, "marvell,nand-keep-config", NULL))
 		pdata->keep_config = 1;
 	of_property_read_u32(np, "num-cs", &pdata->num_cs);
-	pdata->flash_bbt = of_get_nand_on_flash_bbt(np);
-
-	pdata->ecc_strength = of_get_nand_ecc_strength(np);
-	if (pdata->ecc_strength < 0)
-		pdata->ecc_strength = 0;
-
-	pdata->ecc_step_size = of_get_nand_ecc_step_size(np);
-	if (pdata->ecc_step_size < 0)
-		pdata->ecc_step_size = 0;
 
 	pdev->dev.platform_data = pdata;
 
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 10/12] mtd: nand: pxa3xx: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 ` [PATCH 10/12] mtd: nand: pxa3xx: " Boris Brezillon
@ 2016-04-13 14:48   ` Ezequiel Garcia
  2016-04-13 14:53     ` Boris Brezillon
  0 siblings, 1 reply; 29+ messages in thread
From: Ezequiel Garcia @ 2016-04-13 14:48 UTC (permalink / raw)
  To: linux-arm-kernel
On 01 Apr 02:54 PM, Boris Brezillon wrote:
> The core now takes care of parsing generic DT properties in
> nand_scan_ident() when nand_set_flash_node() has been called.
> Rely on this initialization instead of calling of_get_nand_xxx()
> manually.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Thanks,
> ---
>  drivers/mtd/nand/pxa3xx_nand.c | 28 +++++++++++-----------------
>  1 file changed, 11 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
> index d650885..38d26ab 100644
> --- a/drivers/mtd/nand/pxa3xx_nand.c
> +++ b/drivers/mtd/nand/pxa3xx_nand.c
> @@ -29,7 +29,6 @@
>  #include <linux/slab.h>
>  #include <linux/of.h>
>  #include <linux/of_device.h>
> -#include <linux/of_mtd.h>
>  #include <linux/platform_data/mtd-nand-pxa3xx.h>
>  
>  #define	CHIP_DELAY_TIMEOUT	msecs_to_jiffies(200)
> @@ -1651,6 +1650,12 @@ static int pxa3xx_nand_scan(struct mtd_info *mtd)
>  	if (info->variant == PXA3XX_NAND_VARIANT_ARMADA370)
>  		nand_writel(info, NDECCCTRL, 0x0);
>  
> +	if (pdata->flash_bbt)
> +		chip->bbt_options |= NAND_BBT_USE_FLASH;
> +
> +	chip->ecc.strength = pdata->ecc_strength;
> +	chip->ecc.size = pdata->ecc_step_size;
> +
>  	if (nand_scan_ident(mtd, 1, NULL))
>  		return -ENODEV;
>  
> @@ -1663,13 +1668,12 @@ static int pxa3xx_nand_scan(struct mtd_info *mtd)
>  		}
>  	}
>  
> -	if (pdata->flash_bbt) {
> +	if (chip->bbt_options & NAND_BBT_USE_FLASH) {
>  		/*
>  		 * We'll use a bad block table stored in-flash and don't
>  		 * allow writing the bad block marker to the flash.
>  		 */
> -		chip->bbt_options |= NAND_BBT_USE_FLASH |
> -				     NAND_BBT_NO_OOB_BBM;
> +		chip->bbt_options |= NAND_BBT_NO_OOB_BBM;
>  		chip->bbt_td = &bbt_main_descr;
>  		chip->bbt_md = &bbt_mirror_descr;
>  	}
> @@ -1689,10 +1693,9 @@ static int pxa3xx_nand_scan(struct mtd_info *mtd)
>  		}
>  	}
>  
> -	if (pdata->ecc_strength && pdata->ecc_step_size) {
> -		ecc_strength = pdata->ecc_strength;
> -		ecc_step = pdata->ecc_step_size;
> -	} else {
> +	ecc_strength = chip->ecc.strength;
> +	ecc_step = chip->ecc.size;
> +	if (!ecc_strength || !ecc_step) {
>  		ecc_strength = chip->ecc_strength_ds;
>  		ecc_step = chip->ecc_step_ds;
>  	}
> @@ -1903,15 +1906,6 @@ static int pxa3xx_nand_probe_dt(struct platform_device *pdev)
>  	if (of_get_property(np, "marvell,nand-keep-config", NULL))
>  		pdata->keep_config = 1;
>  	of_property_read_u32(np, "num-cs", &pdata->num_cs);
> -	pdata->flash_bbt = of_get_nand_on_flash_bbt(np);
> -
> -	pdata->ecc_strength = of_get_nand_ecc_strength(np);
> -	if (pdata->ecc_strength < 0)
> -		pdata->ecc_strength = 0;
> -
> -	pdata->ecc_step_size = of_get_nand_ecc_step_size(np);
> -	if (pdata->ecc_step_size < 0)
> -		pdata->ecc_step_size = 0;
>  
>  	pdev->dev.platform_data = pdata;
>  
> -- 
> 2.5.0
> 
-- 
Ezequiel Garcia, VanguardiaSur
www.vanguardiasur.com.ar
^ permalink raw reply	[flat|nested] 29+ messages in thread
- * [PATCH 10/12] mtd: nand: pxa3xx: rely on generic DT parsing done in nand_scan_ident()
  2016-04-13 14:48   ` Ezequiel Garcia
@ 2016-04-13 14:53     ` Boris Brezillon
  0 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-13 14:53 UTC (permalink / raw)
  To: linux-arm-kernel
On Wed, 13 Apr 2016 11:48:22 -0300
Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> wrote:
> On 01 Apr 02:54 PM, Boris Brezillon wrote:
> > The core now takes care of parsing generic DT properties in
> > nand_scan_ident() when nand_set_flash_node() has been called.
> > Rely on this initialization instead of calling of_get_nand_xxx()
> > manually.
> > 
> > Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> 
> Acked-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Applied.
-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply	[flat|nested] 29+ messages in thread 
 
 
- * [PATCH 11/12] mtd: nand: sh_flctl: rely on generic DT parsing done in nand_scan_ident()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
                   ` (9 preceding siblings ...)
  2016-04-01 12:54 ` [PATCH 10/12] mtd: nand: pxa3xx: " Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-01 12:54 ` [PATCH 12/12] mtd: nand: move of_get_nand_xxx() helpers into nand_base.c Boris Brezillon
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/sh_flctl.c | 31 ++++++++++++++-----------------
 1 file changed, 14 insertions(+), 17 deletions(-)
diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c
index 4814402..8d4e97c 100644
--- a/drivers/mtd/nand/sh_flctl.c
+++ b/drivers/mtd/nand/sh_flctl.c
@@ -31,7 +31,6 @@
 #include <linux/io.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
-#include <linux/of_mtd.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 #include <linux/sh_dma.h>
@@ -1044,8 +1043,6 @@ static struct sh_flctl_platform_data *flctl_parse_dt(struct device *dev)
 	const struct of_device_id *match;
 	struct flctl_soc_config *config;
 	struct sh_flctl_platform_data *pdata;
-	struct device_node *dn = dev->of_node;
-	int ret;
 
 	match = of_match_device(of_flctl_match, dev);
 	if (match)
@@ -1065,15 +1062,6 @@ static struct sh_flctl_platform_data *flctl_parse_dt(struct device *dev)
 	pdata->has_hwecc = config->has_hwecc;
 	pdata->use_holden = config->use_holden;
 
-	/* parse user defined options */
-	ret = of_get_nand_bus_width(dn);
-	if (ret == 16)
-		pdata->flcmncr_val |= SEL_16BIT;
-	else if (ret != 8) {
-		dev_err(dev, "%s: invalid bus width\n", __func__);
-		return NULL;
-	}
-
 	return pdata;
 }
 
@@ -1141,20 +1129,29 @@ static int flctl_probe(struct platform_device *pdev)
 	nand->select_chip = flctl_select_chip;
 	nand->cmdfunc = flctl_cmdfunc;
 
-	if (pdata->flcmncr_val & SEL_16BIT) {
-		nand->options |= NAND_BUSWIDTH_16;
-		nand->read_word = flctl_read_word;
-	}
-
 	pm_runtime_enable(&pdev->dev);
 	pm_runtime_resume(&pdev->dev);
 
 	flctl_setup_dma(flctl);
 
+	if (pdata->flcmncr_val & SEL_16BIT)
+		nand->options |= NAND_BUSWIDTH_16;
+
 	ret = nand_scan_ident(flctl_mtd, 1, NULL);
 	if (ret)
 		goto err_chip;
 
+	if (nand->options & NAND_BUSWIDTH_16) {
+		/*
+		 * NAND_BUSWIDTH_16 may have been set by nand_scan_ident().
+		 * Add the SEL_16BIT flag in pdata->flcmncr_val and re-assign
+		 * flctl->flcmncr_base to pdata->flcmncr_val.
+		 */
+		pdata->flcmncr_val |= SEL_16BIT;
+		flctl->flcmncr_base = pdata->flcmncr_val;
+		nand->read_word = flctl_read_word;
+	}
+
 	ret = flctl_chip_init_tail(flctl_mtd);
 	if (ret)
 		goto err_chip;
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 12/12] mtd: nand: move of_get_nand_xxx() helpers into nand_base.c
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
                   ` (10 preceding siblings ...)
  2016-04-01 12:54 ` [PATCH 11/12] mtd: nand: sh_flctl: " Boris Brezillon
@ 2016-04-01 12:54 ` Boris Brezillon
  2016-04-01 14:13   ` kbuild test robot
  2016-04-06 23:33 ` [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Franklin S Cooper Jr.
  2016-04-22  9:14 ` Boris Brezillon
  13 siblings, 1 reply; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 12:54 UTC (permalink / raw)
  To: linux-arm-kernel
Now that all drivers go through nand_set_flash_node() to parse the generic
NAND properties, we can move all of_get_nand_xxx() helpers in to
nand_base.c, make them static and remove of_mtd.c and of_mtd.h.
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/mtd/nand/nand_base.c |  99 ++++++++++++++++++++++++++-
 drivers/of/Makefile          |   1 -
 drivers/of/of_mtd.c          | 155 -------------------------------------------
 include/linux/of_mtd.h       |  56 ----------------
 4 files changed, 98 insertions(+), 213 deletions(-)
 delete mode 100644 drivers/of/of_mtd.c
 delete mode 100644 include/linux/of_mtd.h
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index c3733a1..21f43e3 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -46,7 +46,7 @@
 #include <linux/leds.h>
 #include <linux/io.h>
 #include <linux/mtd/partitions.h>
-#include <linux/of_mtd.h>
+#include <linux/of.h>
 
 /* Define default oob placement schemes for large and small page devices */
 static struct nand_ecclayout nand_oob_8 = {
@@ -3964,6 +3964,103 @@ ident_done:
 	return type;
 }
 
+/**
+ * It maps 'enum nand_ecc_modes_t' found in include/linux/mtd/nand.h
+ * into the device tree binding of 'nand-ecc', so that MTD
+ * device driver can get nand ecc from device tree.
+ */
+static const char * const nand_ecc_modes[] = {
+	[NAND_ECC_NONE]		= "none",
+	[NAND_ECC_SOFT]		= "soft",
+	[NAND_ECC_HW]		= "hw",
+	[NAND_ECC_HW_SYNDROME]	= "hw_syndrome",
+	[NAND_ECC_HW_OOB_FIRST]	= "hw_oob_first",
+	[NAND_ECC_SOFT_BCH]	= "soft_bch",
+};
+
+static int of_get_nand_ecc_mode(struct device_node *np)
+{
+	const char *pm;
+	int err, i;
+
+	err = of_property_read_string(np, "nand-ecc-mode", &pm);
+	if (err < 0)
+		return err;
+
+	for (i = 0; i < ARRAY_SIZE(nand_ecc_modes); i++)
+		if (!strcasecmp(pm, nand_ecc_modes[i]))
+			return i;
+
+	return -ENODEV;
+}
+
+static int of_get_nand_ecc_algo(struct device_node *np)
+{
+	const char *pm;
+	int err;
+
+	/*
+	 * TODO: Read ECC algo OF property and map it to enum nand_ecc_algo.
+	 * It's not implemented yet as currently NAND subsystem ignores
+	 * algorithm explicitly set this way. Once it's handled we should
+	 * document & support new property.
+	 */
+
+	/*
+	 * For backward compatibility we also read "nand-ecc-mode" checking
+	 * for some obsoleted values that were specifying ECC algorithm.
+	 */
+	err = of_property_read_string(np, "nand-ecc-mode", &pm);
+	if (err < 0)
+		return err;
+
+	if (!strcasecmp(pm, "soft"))
+		return NAND_ECC_HAMMING;
+	else if (!strcasecmp(pm, "soft_bch"))
+		return NAND_ECC_BCH;
+
+	return -ENODEV;
+}
+
+static int of_get_nand_ecc_step_size(struct device_node *np)
+{
+	int ret;
+	u32 val;
+
+	ret = of_property_read_u32(np, "nand-ecc-step-size", &val);
+	return ret ? ret : val;
+}
+
+static int of_get_nand_ecc_strength(struct device_node *np)
+{
+	int ret;
+	u32 val;
+
+	ret = of_property_read_u32(np, "nand-ecc-strength", &val);
+	return ret ? ret : val;
+}
+
+static int of_get_nand_bus_width(struct device_node *np)
+{
+	u32 val;
+
+	if (of_property_read_u32(np, "nand-bus-width", &val))
+		return 8;
+
+	switch (val) {
+	case 8:
+	case 16:
+		return val;
+	default:
+		return -EIO;
+	}
+}
+
+static bool of_get_nand_on_flash_bbt(struct device_node *np)
+{
+	return of_property_read_bool(np, "nand-on-flash-bbt");
+}
+
 static int nand_dt_init(struct nand_chip *chip)
 {
 	struct device_node *dn = nand_get_flash_node(chip);
diff --git a/drivers/of/Makefile b/drivers/of/Makefile
index 156c072..e31bdc1 100644
--- a/drivers/of/Makefile
+++ b/drivers/of/Makefile
@@ -10,7 +10,6 @@ obj-$(CONFIG_OF_UNITTEST) += unittest.o
 obj-$(CONFIG_OF_MDIO)	+= of_mdio.o
 obj-$(CONFIG_OF_PCI)	+= of_pci.o
 obj-$(CONFIG_OF_PCI_IRQ)  += of_pci_irq.o
-obj-$(CONFIG_OF_MTD)	+= of_mtd.o
 obj-$(CONFIG_OF_RESERVED_MEM) += of_reserved_mem.o
 obj-$(CONFIG_OF_RESOLVE)  += resolver.o
 obj-$(CONFIG_OF_OVERLAY) += overlay.o
diff --git a/drivers/of/of_mtd.c b/drivers/of/of_mtd.c
deleted file mode 100644
index 15d056e..0000000
--- a/drivers/of/of_mtd.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
- *
- * OF helpers for mtd.
- *
- * This file is released under the GPLv2
- *
- */
-#include <linux/kernel.h>
-#include <linux/of_mtd.h>
-#include <linux/mtd/nand.h>
-#include <linux/export.h>
-
-/**
- * It maps 'enum nand_ecc_modes_t' found in include/linux/mtd/nand.h
- * into the device tree binding of 'nand-ecc', so that MTD
- * device driver can get nand ecc from device tree.
- */
-static const char *nand_ecc_modes[] = {
-	[NAND_ECC_NONE]		= "none",
-	[NAND_ECC_SOFT]		= "soft",
-	[NAND_ECC_HW]		= "hw",
-	[NAND_ECC_HW_SYNDROME]	= "hw_syndrome",
-	[NAND_ECC_HW_OOB_FIRST]	= "hw_oob_first",
-	[NAND_ECC_SOFT_BCH]	= "soft_bch",
-};
-
-/**
- * of_get_nand_ecc_mode - Get nand ecc mode for given device_node
- * @np:	Pointer to the given device_node
- *
- * The function gets ecc mode string from property 'nand-ecc-mode',
- * and return its index in nand_ecc_modes table, or errno in error case.
- */
-int of_get_nand_ecc_mode(struct device_node *np)
-{
-	const char *pm;
-	int err, i;
-
-	err = of_property_read_string(np, "nand-ecc-mode", &pm);
-	if (err < 0)
-		return err;
-
-	for (i = 0; i < ARRAY_SIZE(nand_ecc_modes); i++)
-		if (!strcasecmp(pm, nand_ecc_modes[i]))
-			return i;
-
-	return -ENODEV;
-}
-EXPORT_SYMBOL_GPL(of_get_nand_ecc_mode);
-
-/**
- * of_get_nand_ecc_algo - Get nand ecc algorithm for given device_node
- * @np:	Pointer to the given device_node
- *
- * The function gets ecc algorithm and returns its enum value, or errno in error
- * case.
- */
-int of_get_nand_ecc_algo(struct device_node *np)
-{
-	const char *pm;
-	int err;
-
-	/*
-	 * TODO: Read ECC algo OF property and map it to enum nand_ecc_algo.
-	 * It's not implemented yet as currently NAND subsystem ignores
-	 * algorithm explicitly set this way. Once it's handled we should
-	 * document & support new property.
-	 */
-
-	/*
-	 * For backward compatibility we also read "nand-ecc-mode" checking
-	 * for some obsoleted values that were specifying ECC algorithm.
-	 */
-	err = of_property_read_string(np, "nand-ecc-mode", &pm);
-	if (err < 0)
-		return err;
-
-	if (!strcasecmp(pm, "soft"))
-		return NAND_ECC_HAMMING;
-	else if (!strcasecmp(pm, "soft_bch"))
-		return NAND_ECC_BCH;
-
-	return -ENODEV;
-}
-EXPORT_SYMBOL_GPL(of_get_nand_ecc_algo);
-
-/**
- * of_get_nand_ecc_step_size - Get ECC step size associated to
- * the required ECC strength (see below).
- * @np:	Pointer to the given device_node
- *
- * return the ECC step size, or errno in error case.
- */
-int of_get_nand_ecc_step_size(struct device_node *np)
-{
-	int ret;
-	u32 val;
-
-	ret = of_property_read_u32(np, "nand-ecc-step-size", &val);
-	return ret ? ret : val;
-}
-EXPORT_SYMBOL_GPL(of_get_nand_ecc_step_size);
-
-/**
- * of_get_nand_ecc_strength - Get required ECC strength over the
- * correspnding step size as defined by 'nand-ecc-size'
- * @np:	Pointer to the given device_node
- *
- * return the ECC strength, or errno in error case.
- */
-int of_get_nand_ecc_strength(struct device_node *np)
-{
-	int ret;
-	u32 val;
-
-	ret = of_property_read_u32(np, "nand-ecc-strength", &val);
-	return ret ? ret : val;
-}
-EXPORT_SYMBOL_GPL(of_get_nand_ecc_strength);
-
-/**
- * of_get_nand_bus_width - Get nand bus witdh for given device_node
- * @np:	Pointer to the given device_node
- *
- * return bus width option, or errno in error case.
- */
-int of_get_nand_bus_width(struct device_node *np)
-{
-	u32 val;
-
-	if (of_property_read_u32(np, "nand-bus-width", &val))
-		return 8;
-
-	switch(val) {
-	case 8:
-	case 16:
-		return val;
-	default:
-		return -EIO;
-	}
-}
-EXPORT_SYMBOL_GPL(of_get_nand_bus_width);
-
-/**
- * of_get_nand_on_flash_bbt - Get nand on flash bbt for given device_node
- * @np:	Pointer to the given device_node
- *
- * return true if present false other wise
- */
-bool of_get_nand_on_flash_bbt(struct device_node *np)
-{
-	return of_property_read_bool(np, "nand-on-flash-bbt");
-}
-EXPORT_SYMBOL_GPL(of_get_nand_on_flash_bbt);
diff --git a/include/linux/of_mtd.h b/include/linux/of_mtd.h
deleted file mode 100644
index 0f6aca5..0000000
--- a/include/linux/of_mtd.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
- *
- * OF helpers for mtd.
- *
- * This file is released under the GPLv2
- */
-
-#ifndef __LINUX_OF_MTD_H
-#define __LINUX_OF_MTD_H
-
-#ifdef CONFIG_OF_MTD
-
-#include <linux/of.h>
-int of_get_nand_ecc_mode(struct device_node *np);
-int of_get_nand_ecc_algo(struct device_node *np);
-int of_get_nand_ecc_step_size(struct device_node *np);
-int of_get_nand_ecc_strength(struct device_node *np);
-int of_get_nand_bus_width(struct device_node *np);
-bool of_get_nand_on_flash_bbt(struct device_node *np);
-
-#else /* CONFIG_OF_MTD */
-
-static inline int of_get_nand_ecc_mode(struct device_node *np)
-{
-	return -ENOSYS;
-}
-
-static inline int of_get_nand_ecc_algo(struct device_node *np)
-{
-	return -ENOSYS;
-}
-
-static inline int of_get_nand_ecc_step_size(struct device_node *np)
-{
-	return -ENOSYS;
-}
-
-static inline int of_get_nand_ecc_strength(struct device_node *np)
-{
-	return -ENOSYS;
-}
-
-static inline int of_get_nand_bus_width(struct device_node *np)
-{
-	return -ENOSYS;
-}
-
-static inline bool of_get_nand_on_flash_bbt(struct device_node *np)
-{
-	return false;
-}
-
-#endif /* CONFIG_OF_MTD */
-
-#endif /* __LINUX_OF_MTD_H */
-- 
2.5.0
^ permalink raw reply related	[flat|nested] 29+ messages in thread
- * [PATCH 12/12] mtd: nand: move of_get_nand_xxx() helpers into nand_base.c
  2016-04-01 12:54 ` [PATCH 12/12] mtd: nand: move of_get_nand_xxx() helpers into nand_base.c Boris Brezillon
@ 2016-04-01 14:13   ` kbuild test robot
  2016-04-01 15:34     ` Boris Brezillon
  0 siblings, 1 reply; 29+ messages in thread
From: kbuild test robot @ 2016-04-01 14:13 UTC (permalink / raw)
  To: linux-arm-kernel
Hi Boris,
[auto build test WARNING on next-20160401]
[cannot apply to v4.6-rc1 v4.5-rc7 v4.5-rc6 v4.6-rc1]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]
url:    https://github.com/0day-ci/linux/commits/Boris-Brezillon/mtd-get-rid-of-of_mtd-c-h-and-of_get_nand_xx/20160401-210220
reproduce: make htmldocs
All warnings (new ones prefixed by >>):
>> drivers/mtd/nand/nand_base.c:3972: warning: cannot understand function prototype: 'const char * const nand_ecc_modes[] = '
   drivers/mtd/nand/nand_bbt.c:1: warning: no structured comments found
>> drivers/mtd/nand/nand_base.c:3972: warning: cannot understand function prototype: 'const char * const nand_ecc_modes[] = '
vim +3972 drivers/mtd/nand/nand_base.c
  3956					chip->jedec_params.model);
  3957		else
  3958			pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
  3959					type->name);
  3960	
  3961		pr_info("%d MiB, %s, erase size: %d KiB, page size: %d, OOB size: %d\n",
  3962			(int)(chip->chipsize >> 20), nand_is_slc(chip) ? "SLC" : "MLC",
  3963			mtd->erasesize >> 10, mtd->writesize, mtd->oobsize);
  3964		return type;
  3965	}
  3966	
  3967	/**
  3968	 * It maps 'enum nand_ecc_modes_t' found in include/linux/mtd/nand.h
  3969	 * into the device tree binding of 'nand-ecc', so that MTD
  3970	 * device driver can get nand ecc from device tree.
  3971	 */
> 3972	static const char * const nand_ecc_modes[] = {
  3973		[NAND_ECC_NONE]		= "none",
  3974		[NAND_ECC_SOFT]		= "soft",
  3975		[NAND_ECC_HW]		= "hw",
  3976		[NAND_ECC_HW_SYNDROME]	= "hw_syndrome",
  3977		[NAND_ECC_HW_OOB_FIRST]	= "hw_oob_first",
  3978		[NAND_ECC_SOFT_BCH]	= "soft_bch",
  3979	};
  3980	
---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/octet-stream
Size: 6305 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160401/75ff6d71/attachment.obj>
^ permalink raw reply	[flat|nested] 29+ messages in thread
- * [PATCH 12/12] mtd: nand: move of_get_nand_xxx() helpers into nand_base.c
  2016-04-01 14:13   ` kbuild test robot
@ 2016-04-01 15:34     ` Boris Brezillon
  0 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-01 15:34 UTC (permalink / raw)
  To: linux-arm-kernel
On Fri, 1 Apr 2016 22:13:43 +0800
kbuild test robot <lkp@intel.com> wrote:
> Hi Boris,
> 
> [auto build test WARNING on next-20160401]
> [cannot apply to v4.6-rc1 v4.5-rc7 v4.5-rc6 v4.6-rc1]
> [if your patch is applied to the wrong git tree, please drop us a note to help improving the system]
> 
> url:    https://github.com/0day-ci/linux/commits/Boris-Brezillon/mtd-get-rid-of-of_mtd-c-h-and-of_get_nand_xx/20160401-210220
> reproduce: make htmldocs
> 
> All warnings (new ones prefixed by >>):
> 
> >> drivers/mtd/nand/nand_base.c:3972: warning: cannot understand function prototype: 'const char * const nand_ecc_modes[] = '
>    drivers/mtd/nand/nand_bbt.c:1: warning: no structured comments found
> >> drivers/mtd/nand/nand_base.c:3972: warning: cannot understand function prototype: 'const char * const nand_ecc_modes[] = '
> 
> vim +3972 drivers/mtd/nand/nand_base.c
> 
>   3956					chip->jedec_params.model);
>   3957		else
>   3958			pr_info("%s %s\n", nand_manuf_ids[maf_idx].name,
>   3959					type->name);
>   3960	
>   3961		pr_info("%d MiB, %s, erase size: %d KiB, page size: %d, OOB size: %d\n",
>   3962			(int)(chip->chipsize >> 20), nand_is_slc(chip) ? "SLC" : "MLC",
>   3963			mtd->erasesize >> 10, mtd->writesize, mtd->oobsize);
>   3964		return type;
>   3965	}
>   3966	
>   3967	/**
>   3968	 * It maps 'enum nand_ecc_modes_t' found in include/linux/mtd/nand.h
>   3969	 * into the device tree binding of 'nand-ecc', so that MTD
>   3970	 * device driver can get nand ecc from device tree.
>   3971	 */
I'll remove this kerneldoc header to avoid this warning.
> > 3972	static const char * const nand_ecc_modes[] = {
>   3973		[NAND_ECC_NONE]		= "none",
>   3974		[NAND_ECC_SOFT]		= "soft",
>   3975		[NAND_ECC_HW]		= "hw",
>   3976		[NAND_ECC_HW_SYNDROME]	= "hw_syndrome",
>   3977		[NAND_ECC_HW_OOB_FIRST]	= "hw_oob_first",
>   3978		[NAND_ECC_SOFT_BCH]	= "soft_bch",
>   3979	};
>   3980	
> 
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply	[flat|nested] 29+ messages in thread
 
 
- * [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
                   ` (11 preceding siblings ...)
  2016-04-01 12:54 ` [PATCH 12/12] mtd: nand: move of_get_nand_xxx() helpers into nand_base.c Boris Brezillon
@ 2016-04-06 23:33 ` Franklin S Cooper Jr.
  2016-04-22  9:14 ` Boris Brezillon
  13 siblings, 0 replies; 29+ messages in thread
From: Franklin S Cooper Jr. @ 2016-04-06 23:33 UTC (permalink / raw)
  To: linux-arm-kernel
On 04/01/2016 07:54 AM, Boris Brezillon wrote:
> Hello,
> 
> of_mtd.{h,c} are providing the of_get_nand_xxx() helpers to help NAND
> controller drivers parse some generic NAND DT properties.
> An infrastructure has recently been added to NAND core to automatically
> parse those properties when nand_scan_ident() is called, thus removing
> the need for NAND controller drivers to manually parse them.
> 
> This series modifies drivers still making use of those helpers to rely
> on NAND core initialization, and get rid of the of_mtd.{c,h} files by
> moving the of_get_nand_xx() helpers into nand_base.c.
> 
Nothing broke when I ran some NAND tests on my AM335x GP EVM (OMAP SOC).
Tested-by: Franklin S Cooper Jr. <fcooper@ti.com>
> Best Regards,
> 
> Boris
> 
> Boris Brezillon (12):
>   mtd: nand: remove unneeded of_mtd.h inclusions
>   mtd: nand: atmel: rely on generic DT parsing done in nand_scan_ident()
>   mtd: nand: omap2: rely on generic DT parsing done in nand_scan_ident()
>   mtd: nand: brcm: rely on generic DT parsing done in nand_scan_ident()
>   mtd: nand: davinci: rely on generic DT parsing done in
>     nand_scan_ident()
>   mtd: nand: gpmi: rely on generic DT parsing done in nand_scan_ident()
>   mtd: nand: hisi504: rely on generic DT parsing done in
>     nand_scan_ident()
>   mtd: nand: lpc32xx: rely on generic DT parsing done in
>     nand_scan_ident()
>   mtd: nand: mxc: rely on generic DT parsing done in nand_scan_ident()
>   mtd: nand: pxa3xx: rely on generic DT parsing done in
>     nand_scan_ident()
>   mtd: nand: sh_flctl: rely on generic DT parsing done in
>     nand_scan_ident()
>   mtd: nand: move of_get_nand_xxx() helpers into nand_base.c
> 
>  drivers/memory/omap-gpmc.c             |   7 --
>  drivers/mtd/nand/atmel_nand.c          | 133 +++++++++++++++-------------
>  drivers/mtd/nand/brcmnand/brcmnand.c   |   5 +-
>  drivers/mtd/nand/davinci_nand.c        |  85 +++++++++---------
>  drivers/mtd/nand/gpmi-nand/gpmi-nand.c |  21 +++--
>  drivers/mtd/nand/hisi504_nand.c        |  14 +--
>  drivers/mtd/nand/jz4780_nand.c         |   1 -
>  drivers/mtd/nand/lpc32xx_mlc.c         |   1 -
>  drivers/mtd/nand/lpc32xx_slc.c         |  24 ++---
>  drivers/mtd/nand/mxc_nand.c            |  50 +++++------
>  drivers/mtd/nand/nand_base.c           |  99 ++++++++++++++++++++-
>  drivers/mtd/nand/omap2.c               |   9 +-
>  drivers/mtd/nand/pxa3xx_nand.c         |  28 +++---
>  drivers/mtd/nand/qcom_nandc.c          |   1 -
>  drivers/mtd/nand/sh_flctl.c            |  31 +++----
>  drivers/mtd/nand/sunxi_nand.c          |   1 -
>  drivers/mtd/nand/vf610_nfc.c           |   1 -
>  drivers/of/Makefile                    |   1 -
>  drivers/of/of_mtd.c                    | 155 ---------------------------------
>  include/linux/of_mtd.h                 |  56 ------------
>  20 files changed, 291 insertions(+), 432 deletions(-)
>  delete mode 100644 drivers/of/of_mtd.c
>  delete mode 100644 include/linux/of_mtd.h
> 
^ permalink raw reply	[flat|nested] 29+ messages in thread
- * [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx()
  2016-04-01 12:54 [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Boris Brezillon
                   ` (12 preceding siblings ...)
  2016-04-06 23:33 ` [PATCH 00/12] mtd: get rid of of_mtd.{c,h} and of_get_nand_xx() Franklin S Cooper Jr.
@ 2016-04-22  9:14 ` Boris Brezillon
  13 siblings, 0 replies; 29+ messages in thread
From: Boris Brezillon @ 2016-04-22  9:14 UTC (permalink / raw)
  To: linux-arm-kernel
On Fri,  1 Apr 2016 14:54:20 +0200
Boris Brezillon <boris.brezillon@free-electrons.com> wrote:
> Hello,
> 
> of_mtd.{h,c} are providing the of_get_nand_xxx() helpers to help NAND
> controller drivers parse some generic NAND DT properties.
> An infrastructure has recently been added to NAND core to automatically
> parse those properties when nand_scan_ident() is called, thus removing
> the need for NAND controller drivers to manually parse them.
> 
> This series modifies drivers still making use of those helpers to rely
> on NAND core initialization, and get rid of the of_mtd.{c,h} files by
> moving the of_get_nand_xx() helpers into nand_base.c.
Applied remaining patches.
> 
> Best Regards,
> 
> Boris
> 
> Boris Brezillon (12):
>   mtd: nand: remove unneeded of_mtd.h inclusions
>   mtd: nand: atmel: rely on generic DT parsing done in nand_scan_ident()
>   mtd: nand: omap2: rely on generic DT parsing done in nand_scan_ident()
>   mtd: nand: brcm: rely on generic DT parsing done in nand_scan_ident()
>   mtd: nand: davinci: rely on generic DT parsing done in
>     nand_scan_ident()
>   mtd: nand: gpmi: rely on generic DT parsing done in nand_scan_ident()
>   mtd: nand: hisi504: rely on generic DT parsing done in
>     nand_scan_ident()
>   mtd: nand: lpc32xx: rely on generic DT parsing done in
>     nand_scan_ident()
>   mtd: nand: mxc: rely on generic DT parsing done in nand_scan_ident()
>   mtd: nand: pxa3xx: rely on generic DT parsing done in
>     nand_scan_ident()
>   mtd: nand: sh_flctl: rely on generic DT parsing done in
>     nand_scan_ident()
>   mtd: nand: move of_get_nand_xxx() helpers into nand_base.c
> 
>  drivers/memory/omap-gpmc.c             |   7 --
>  drivers/mtd/nand/atmel_nand.c          | 133 +++++++++++++++-------------
>  drivers/mtd/nand/brcmnand/brcmnand.c   |   5 +-
>  drivers/mtd/nand/davinci_nand.c        |  85 +++++++++---------
>  drivers/mtd/nand/gpmi-nand/gpmi-nand.c |  21 +++--
>  drivers/mtd/nand/hisi504_nand.c        |  14 +--
>  drivers/mtd/nand/jz4780_nand.c         |   1 -
>  drivers/mtd/nand/lpc32xx_mlc.c         |   1 -
>  drivers/mtd/nand/lpc32xx_slc.c         |  24 ++---
>  drivers/mtd/nand/mxc_nand.c            |  50 +++++------
>  drivers/mtd/nand/nand_base.c           |  99 ++++++++++++++++++++-
>  drivers/mtd/nand/omap2.c               |   9 +-
>  drivers/mtd/nand/pxa3xx_nand.c         |  28 +++---
>  drivers/mtd/nand/qcom_nandc.c          |   1 -
>  drivers/mtd/nand/sh_flctl.c            |  31 +++----
>  drivers/mtd/nand/sunxi_nand.c          |   1 -
>  drivers/mtd/nand/vf610_nfc.c           |   1 -
>  drivers/of/Makefile                    |   1 -
>  drivers/of/of_mtd.c                    | 155 ---------------------------------
>  include/linux/of_mtd.h                 |  56 ------------
>  20 files changed, 291 insertions(+), 432 deletions(-)
>  delete mode 100644 drivers/of/of_mtd.c
>  delete mode 100644 include/linux/of_mtd.h
> 
-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply	[flat|nested] 29+ messages in thread