Skip to contentSkip to conversation

ATMEL: fix nand ecc support

PATCH New Jean-Christophe PLAGNIOL-VILLARD 4 participants 6 messages Jan 7, 2012 – Jan 11, 2012

Subsystems (6)
lore
Share & tools
lore
#0 lore raw

PATCH 1/3 ATMEL: fix nand ecc support

so we can now choose for the board the ecc mode (ecc soft, soft bch, no ecc and hardware)

set ecc mode in the boards to soft as currently in the driver

move platform data to a common header
include/linux/atmel_nand.h

Cc Nicolas Ferre <[email protected]>
Cc Hans-Christian Egtvedt <[email protected]>
Cc linux-mtd at lists.infradead.org

---
Hi David,

If you don't
I'll apply this via ARM tree

Best Regards,
J.

 arch/arm/mach-at91/board-afeb-9260v1.c      |    1 +
 arch/arm/mach-at91/board-cam60.c            |    1 +
 arch/arm/mach-at91/board-cap9adk.c          |    1 +
 arch/arm/mach-at91/board-cpu9krea.c         |    1 +
 arch/arm/mach-at91/board-dt.c               |    1 +
 arch/arm/mach-at91/board-kb9202.c           |    1 +
 arch/arm/mach-at91/board-neocore926.c       |    1 +
 arch/arm/mach-at91/board-qil-a9260.c        |    1 +
 arch/arm/mach-at91/board-rm9200dk.c         |    1 +
 arch/arm/mach-at91/board-sam9-l9260.c       |    1 +
 arch/arm/mach-at91/board-sam9260ek.c        |    1 +
 arch/arm/mach-at91/board-sam9261ek.c        |    1 +
 arch/arm/mach-at91/board-sam9263ek.c        |    1 +
 arch/arm/mach-at91/board-sam9g20ek.c        |    1 +
 arch/arm/mach-at91/board-sam9m10g45ek.c     |    1 +
 arch/arm/mach-at91/board-sam9rlek.c         |    1 +
 arch/arm/mach-at91/board-snapper9260.c      |    1 +
 arch/arm/mach-at91/board-stamp9g20.c        |    1 +
 arch/arm/mach-at91/board-usb-a926x.c        |    1 +
 arch/arm/mach-at91/board-yl-9200.c          |    1 +
 arch/arm/mach-at91/include/mach/board.h     |   13 +------------
 arch/avr32/boards/atngw100/setup.c          |    1 +
 arch/avr32/boards/atstk1000/atstk1002.c     |    1 +
 arch/avr32/mach-at32ap/include/mach/board.h |   13 +------------
 drivers/mtd/nand/atmel_nand.c               |   25 ++++++-------------------
 include/linux/atmel_nand.h                  |   26 ++++++++++++++++++++++++++
 26 files changed, 56 insertions(+), 43 deletions(-)
 create mode 100644 include/linux/atmel_nand.h
arch/arm/mach-at91/board-afeb-9260v1.c +1 -0
index 3bb4069..161efba 100644
@@ -138,6 +138,7 @@ static struct atmel_nand_data __initdata afeb9260_nand_data = {
 	.rdy_pin	= AT91_PIN_PC13,
 	.enable_pin	= AT91_PIN_PC14,
 	.bus_width_16	= 0,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= afeb9260_nand_partition,
 	.num_parts	= ARRAY_SIZE(afeb9260_nand_partition),
 	.det_pin	= -EINVAL,
arch/arm/mach-at91/board-cam60.c +1 -0
index 8510e9e..c6d44ee 100644
@@ -140,6 +140,7 @@ static struct atmel_nand_data __initdata cam60_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= AT91_PIN_PA9,
 	.enable_pin	= AT91_PIN_PA7,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= cam60_nand_partition,
 	.num_parts	= ARRAY_SIZE(cam60_nand_partition),
 };
arch/arm/mach-at91/board-cap9adk.c +1 -0
index ac3de4f..602ea25 100644
@@ -178,6 +178,7 @@ static struct atmel_nand_data __initdata cap9adk_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= -EINVAL,
 	.enable_pin	= AT91_PIN_PD15,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= cap9adk_nand_partitions,
 	.num_parts	= ARRAY_SIZE(cap9adk_nand_partitions),
 };
arch/arm/mach-at91/board-cpu9krea.c +1 -0
index 9ab3d1e..6119dd6 100644
@@ -116,6 +116,7 @@ static struct atmel_nand_data __initdata cpu9krea_nand_data = {
 	.enable_pin	= AT91_PIN_PC14,
 	.bus_width_16	= 0,
 	.det_pin	= -EINVAL,
+	.ecc_mode	= NAND_ECC_SOFT,
 };
 
 #ifdef CONFIG_MACH_CPU9260
arch/arm/mach-at91/board-dt.c +1 -0
index bb6b434..552390d 100644
@@ -53,6 +53,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= AT91_PIN_PC8,
 	.enable_pin	= AT91_PIN_PC14,
+	.ecc_mode	= NAND_ECC_SOFT,
 };
 
 static struct sam9_smc_config __initdata ek_nand_smc_config = {
arch/arm/mach-at91/board-kb9202.c +1 -0
index d75a4a2..726670e 100644
@@ -107,6 +107,7 @@ static struct atmel_nand_data __initdata kb9202_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= AT91_PIN_PC29,
 	.enable_pin	= AT91_PIN_PC28,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= kb9202_nand_partition,
 	.num_parts	= ARRAY_SIZE(kb9202_nand_partition),
 };
arch/arm/mach-at91/board-neocore926.c +1 -0
index 3f8617c..57d5f6a 100644
@@ -190,6 +190,7 @@ static struct atmel_nand_data __initdata neocore926_nand_data = {
 	.rdy_pin		= AT91_PIN_PB19,
 	.rdy_pin_active_low	= 1,
 	.enable_pin		= AT91_PIN_PD15,
+	.ecc_mode		= NAND_ECC_SOFT,
 	.parts			= neocore926_nand_partition,
 	.num_parts		= ARRAY_SIZE(neocore926_nand_partition),
 	.det_pin		= -EINVAL,
arch/arm/mach-at91/board-qil-a9260.c +1 -0
index e029d22..97907e4 100644
@@ -138,6 +138,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= AT91_PIN_PC13,
 	.enable_pin	= AT91_PIN_PC14,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-rm9200dk.c +1 -0
index 782f379..851013c 100644
@@ -149,6 +149,7 @@ static struct atmel_nand_data __initdata dk_nand_data = {
 	.det_pin	= AT91_PIN_PB1,
 	.rdy_pin	= AT91_PIN_PC2,
 	.enable_pin	= -EINVAL,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= dk_nand_partition,
 	.num_parts	= ARRAY_SIZE(dk_nand_partition),
 };
arch/arm/mach-at91/board-sam9-l9260.c +1 -0
index 84bce58..e8b116b 100644
@@ -139,6 +139,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= AT91_PIN_PC13,
 	.enable_pin	= AT91_PIN_PC14,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-sam9260ek.c +1 -0
index be8233b..3118ab1 100644
@@ -181,6 +181,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= AT91_PIN_PC13,
 	.enable_pin	= AT91_PIN_PC14,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-sam9261ek.c +1 -0
index 4089507..60cf37b 100644
@@ -187,6 +187,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= AT91_PIN_PC15,
 	.enable_pin	= AT91_PIN_PC14,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-sam9263ek.c +1 -0
index 29f6605..aeabf85 100644
@@ -187,6 +187,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= AT91_PIN_PA22,
 	.enable_pin	= AT91_PIN_PD15,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-sam9g20ek.c +1 -0
index 843d628..419e0d5 100644
@@ -166,6 +166,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.rdy_pin	= AT91_PIN_PC13,
 	.enable_pin	= AT91_PIN_PC14,
 	.det_pin	= -EINVAL,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-sam9m10g45ek.c +1 -0
index ea0d1b9..452ec37 100644
@@ -146,6 +146,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.rdy_pin	= AT91_PIN_PC8,
 	.enable_pin	= AT91_PIN_PC14,
 	.det_pin	= -EINVAL,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-sam9rlek.c +1 -0
index c1366d0..70a026d 100644
@@ -94,6 +94,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= AT91_PIN_PD17,
 	.enable_pin	= AT91_PIN_PB6,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-snapper9260.c +1 -0
index 4770db0..8898c1a 100644
@@ -110,6 +110,7 @@ static struct atmel_nand_data __initdata snapper9260_nand_data = {
 	.bus_width_16	= 0,
 	.enable_pin	= -EINVAL,
 	.det_pin	= -EINVAL,
+	.ecc_mode	= NAND_ECC_SOFT,
 };
 
 static struct sam9_smc_config __initdata snapper9260_nand_smc_config = {
arch/arm/mach-at91/board-stamp9g20.c +1 -0
index e8d3d5b..c0924d7 100644
@@ -86,6 +86,7 @@ static struct atmel_nand_data __initdata nand_data = {
 	.enable_pin	= AT91_PIN_PC14,
 	.bus_width_16	= 0,
 	.det_pin	= -EINVAL,
+	.ecc_mode	= NAND_ECC_SOFT,
 };
 
 static struct sam9_smc_config __initdata nand_smc_config = {
arch/arm/mach-at91/board-usb-a926x.c +1 -0
index 26c36fc..cc93152 100644
@@ -198,6 +198,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= AT91_PIN_PA22,
 	.enable_pin	= AT91_PIN_PD15,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-yl-9200.c +1 -0
index bbd553e..06cbae1 100644
@@ -181,6 +181,7 @@ static struct atmel_nand_data __initdata yl9200_nand_data = {
 	.det_pin	= -EINVAL,
 	.rdy_pin	= AT91_PIN_PC14,	/* R/!B (Sheet10) */
 	.enable_pin	= AT91_PIN_PC15,	/* !CE  (Sheet10) */
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= yl9200_nand_partition,
 	.num_parts	= ARRAY_SIZE(yl9200_nand_partition),
 };
arch/arm/mach-at91/include/mach/board.h +1 -12
index d0b377b..f3f33bc 100644
@@ -39,6 +39,7 @@
 #include <linux/usb/atmel_usba_udc.h>
 #include <linux/atmel-mci.h>
 #include <sound/atmel-ac97c.h>
+#include <linux/atmel_nand.h>
 #include <linux/serial.h>
 #include <linux/platform_data/macb.h>
 
@@ -98,18 +99,6 @@ extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
 extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data);
 extern void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data);
 
- /* NAND / SmartMedia */
-struct atmel_nand_data {
-	int		enable_pin;	/* chip enable */
-	int		det_pin;	/* card detect */
-	int		rdy_pin;	/* ready/busy */
-	u8              rdy_pin_active_low;     /* rdy_pin value is inverted */
-	u8		ale;		/* address line number connected to ALE */
-	u8		cle;		/* address line number connected to CLE */
-	u8		bus_width_16;	/* buswidth is 16 bit */
-	struct mtd_partition *parts;
-	unsigned int	num_parts;
-};
 extern void __init at91_add_device_nand(struct atmel_nand_data *data);
 
  /* I2C*/
arch/avr32/boards/atngw100/setup.c +1 -0
index 7c756fb..afeae89 100644
@@ -97,6 +97,7 @@ static struct atmel_nand_data atngw100mkii_nand_data __initdata = {
 	.rdy_pin	= GPIO_PIN_PB(28),
 	.enable_pin	= GPIO_PIN_PE(23),
 	.bus_width_16	= true,
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= nand_partitions,
 	.num_parts	= ARRAY_SIZE(nand_partitions),
 };
arch/avr32/boards/atstk1000/atstk1002.c +1 -0
index c56ddac..dc52633 100644
@@ -95,6 +95,7 @@ static struct atmel_nand_data atstk1006_nand_data __initdata = {
 	.ale		= 22,
 	.rdy_pin	= GPIO_PIN_PB(30),
 	.enable_pin	= GPIO_PIN_PB(29),
+	.ecc_mode	= NAND_ECC_SOFT,
 	.parts		= nand_partitions,
 	.num_parts	= ARRAY_SIZE(num_partitions),
 };
arch/avr32/mach-at32ap/include/mach/board.h +1 -12
index 67b111c..e4cd3f8 100644
@@ -7,6 +7,7 @@
 #include <linux/types.h>
 #include <linux/serial.h>
 #include <linux/platform_data/macb.h>
+#include <linux/atmel_nand.h>
 
 #define GPIO_PIN_NONE	(-1)
 
@@ -116,18 +117,6 @@ struct platform_device *
 at32_add_device_cf(unsigned int id, unsigned int extint,
 		struct cf_platform_data *data);
 
-/* NAND / SmartMedia */
-struct atmel_nand_data {
-	int	enable_pin;	/* chip enable */
-	int	det_pin;	/* card detect */
-	int	rdy_pin;	/* ready/busy */
-	u8	rdy_pin_active_low;	/* rdy_pin value is inverted */
-	u8	ale;		/* address line number connected to ALE */
-	u8	cle;		/* address line number connected to CLE */
-	u8	bus_width_16;	/* buswidth is 16 bit */
-	struct mtd_partition *parts;
-	unsigned int	num_parts;
-};
 struct platform_device *
 at32_add_device_nand(unsigned int id, struct atmel_nand_data *data);
 
drivers/mtd/nand/atmel_nand.c +6 -19
index 4dd056e..c267113 100644
@@ -34,22 +34,10 @@
 #include <linux/dmaengine.h>
 #include <linux/gpio.h>
 #include <linux/io.h>
+#include <linux/atmel_nand.h>
 
-#include <mach/board.h>
 #include <mach/cpu.h>
 
-#ifdef CONFIG_MTD_NAND_ATMEL_ECC_HW
-#define hard_ecc	1
-#else
-#define hard_ecc	0
-#endif
-
-#ifdef CONFIG_MTD_NAND_ATMEL_ECC_NONE
-#define no_ecc		1
-#else
-#define no_ecc		0
-#endif
-
 static int use_dma = 1;
 module_param(use_dma, int, 0);
 
@@ -495,23 +483,22 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
 	if (gpio_is_valid(host->board->rdy_pin))
 		nand_chip->dev_ready = atmel_nand_device_ready;
 
+	nand_chip->ecc.mode = host->board->ecc_mode;
+
 	regs = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-	if (!regs && hard_ecc) {
+	if (!regs && nand_chip->ecc.mode == NAND_ECC_HW) {
 		printk(KERN_ERR "atmel_nand: can't get I/O resource "
 				"regs\nFalling back on software ECC\n");
+		nand_chip->ecc.mode = NAND_ECC_SOFT;
 	}
 
-	nand_chip->ecc.mode = NAND_ECC_SOFT;	/* enable ECC */
-	if (no_ecc)
-		nand_chip->ecc.mode = NAND_ECC_NONE;
-	if (hard_ecc && regs) {
+	if (nand_chip->ecc.mode == NAND_ECC_HW) {
 		host->ecc = ioremap(regs->start, resource_size(regs));
 		if (host->ecc == NULL) {
 			printk(KERN_ERR "atmel_nand: ioremap failed\n");
 			res = -EIO;
 			goto err_ecc_ioremap;
 		}
-		nand_chip->ecc.mode = NAND_ECC_HW;
 		nand_chip->ecc.calculate = atmel_nand_calculate;
 		nand_chip->ecc.correct = atmel_nand_correct;
 		nand_chip->ecc.hwctl = atmel_nand_hwctl;
include/linux/atmel_nand.h new file +26 -0
new file mode 100644
index 0000000..f6d4193
@@ -0,0 +1,26 @@
+/*
+ * atmel_nand platform data
+ *
+ * GPL v2 Only
+ */
+
+#ifndef __ATMEL_NAND_H__
+#define __ATMEL_NAND_H__
+
+#include <linux/mtd/nand.h>
+
+ /* NAND / SmartMedia */
+struct atmel_nand_data {
+	int		enable_pin;		/* chip enable */
+	int		det_pin;		/* card detect */
+	int		rdy_pin;		/* ready/busy */
+	u8		rdy_pin_active_low;	/* rdy_pin value is inverted */
+	u8		ale;			/* address line number connected to ALE */
+	u8		cle;			/* address line number connected to CLE */
+	u8		bus_width_16;		/* buswidth is 16 bit */
+	u8		ecc_mode;		/* ecc mode */
+	struct mtd_partition *parts;
+	unsigned int	num_parts;
+};
+
+#endif /* __ATMEL_NAND_H__ */
Signature · 1 line
1.7.7
#1 lore raw

PATCH 2/3 mtd/atmel_nand: add on_flash_bbt to enable the use of On Flash BBT

from the board

Cc Nicolas Ferre <[email protected]>
Cc linux-mtd at lists.infradead.org
---
 drivers/mtd/nand/atmel_nand.c |    2 +-
 include/linux/atmel_nand.h    |    1 +
 2 files changed, 2 insertions(+), 1 deletions(-)
drivers/mtd/nand/atmel_nand.c +1 -1
index c267113..d7ff628 100644
@@ -525,7 +525,7 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
 		}
 	}
 
-	if (on_flash_bbt) {
+	if (host->board->on_flash_bbt || on_flash_bbt) {
 		printk(KERN_INFO "atmel_nand: Use On Flash BBT\n");
 		nand_chip->bbt_options |= NAND_BBT_USE_FLASH;
 	}
include/linux/atmel_nand.h +1 -0
index f6d4193..57b651b 100644
@@ -19,6 +19,7 @@ struct atmel_nand_data {
 	u8		cle;			/* address line number connected to CLE */
 	u8		bus_width_16;		/* buswidth is 16 bit */
 	u8		ecc_mode;		/* ecc mode */
+	u8		on_flash_bbt;		/* bbt on flash */
 	struct mtd_partition *parts;
 	unsigned int	num_parts;
 };
Signature · 1 line
1.7.7
#2 lore raw

PATCH 3/3 ARM: at91: enable on flash bbt for Atmel Reference and DT boards

In reply to Jean-Christophe PLAGNIOL-VILLARD

enable it on Calao board too

---
 arch/arm/mach-at91/board-cap9adk.c      |    1 +
 arch/arm/mach-at91/board-dt.c           |    1 +
 arch/arm/mach-at91/board-qil-a9260.c    |    1 +
 arch/arm/mach-at91/board-rm9200dk.c     |    1 +
 arch/arm/mach-at91/board-sam9260ek.c    |    1 +
 arch/arm/mach-at91/board-sam9261ek.c    |    1 +
 arch/arm/mach-at91/board-sam9263ek.c    |    1 +
 arch/arm/mach-at91/board-sam9g20ek.c    |    1 +
 arch/arm/mach-at91/board-sam9m10g45ek.c |    1 +
 arch/arm/mach-at91/board-sam9rlek.c     |    1 +
 arch/arm/mach-at91/board-usb-a926x.c    |    1 +
 11 files changed, 11 insertions(+), 0 deletions(-)
arch/arm/mach-at91/board-cap9adk.c +1 -0
index 602ea25..1f9fba4 100644
@@ -179,6 +179,7 @@ static struct atmel_nand_data __initdata cap9adk_nand_data = {
 	.rdy_pin	= -EINVAL,
 	.enable_pin	= AT91_PIN_PD15,
 	.ecc_mode	= NAND_ECC_SOFT,
+	.on_flash_bbt	= 1,
 	.parts		= cap9adk_nand_partitions,
 	.num_parts	= ARRAY_SIZE(cap9adk_nand_partitions),
 };
arch/arm/mach-at91/board-dt.c +1 -0
index 552390d..a42cad8 100644
@@ -54,6 +54,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.rdy_pin	= AT91_PIN_PC8,
 	.enable_pin	= AT91_PIN_PC14,
 	.ecc_mode	= NAND_ECC_SOFT,
+	.on_flash_bbt	= 1,
 };
 
 static struct sam9_smc_config __initdata ek_nand_smc_config = {
arch/arm/mach-at91/board-qil-a9260.c +1 -0
index 97907e4..b6ed5ed 100644
@@ -139,6 +139,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.rdy_pin	= AT91_PIN_PC13,
 	.enable_pin	= AT91_PIN_PC14,
 	.ecc_mode	= NAND_ECC_SOFT,
+	.on_flash_bbt	= 1,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-rm9200dk.c +1 -0
index 851013c..ae4b3c0 100644
@@ -150,6 +150,7 @@ static struct atmel_nand_data __initdata dk_nand_data = {
 	.rdy_pin	= AT91_PIN_PC2,
 	.enable_pin	= -EINVAL,
 	.ecc_mode	= NAND_ECC_SOFT,
+	.on_flash_bbt	= 1,
 	.parts		= dk_nand_partition,
 	.num_parts	= ARRAY_SIZE(dk_nand_partition),
 };
arch/arm/mach-at91/board-sam9260ek.c +1 -0
index 3118ab1..d5aec55 100644
@@ -182,6 +182,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.rdy_pin	= AT91_PIN_PC13,
 	.enable_pin	= AT91_PIN_PC14,
 	.ecc_mode	= NAND_ECC_SOFT,
+	.on_flash_bbt	= 1,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-sam9261ek.c +1 -0
index 60cf37b..c3f9944 100644
@@ -188,6 +188,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.rdy_pin	= AT91_PIN_PC15,
 	.enable_pin	= AT91_PIN_PC14,
 	.ecc_mode	= NAND_ECC_SOFT,
+	.on_flash_bbt	= 1,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-sam9263ek.c +1 -0
index aeabf85..66f0ddf 100644
@@ -188,6 +188,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.rdy_pin	= AT91_PIN_PA22,
 	.enable_pin	= AT91_PIN_PD15,
 	.ecc_mode	= NAND_ECC_SOFT,
+	.on_flash_bbt	= 1,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-sam9g20ek.c +1 -0
index 419e0d5..8923ec9 100644
@@ -167,6 +167,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.enable_pin	= AT91_PIN_PC14,
 	.det_pin	= -EINVAL,
 	.ecc_mode	= NAND_ECC_SOFT,
+	.on_flash_bbt	= 1,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-sam9m10g45ek.c +1 -0
index 452ec37..31eb24a 100644
@@ -147,6 +147,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.enable_pin	= AT91_PIN_PC14,
 	.det_pin	= -EINVAL,
 	.ecc_mode	= NAND_ECC_SOFT,
+	.on_flash_bbt	= 1,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-sam9rlek.c +1 -0
index 70a026d..b109ce2 100644
@@ -95,6 +95,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.rdy_pin	= AT91_PIN_PD17,
 	.enable_pin	= AT91_PIN_PB6,
 	.ecc_mode	= NAND_ECC_SOFT,
+	.on_flash_bbt	= 1,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
arch/arm/mach-at91/board-usb-a926x.c +1 -0
index cc93152..b7483a3 100644
@@ -199,6 +199,7 @@ static struct atmel_nand_data __initdata ek_nand_data = {
 	.rdy_pin	= AT91_PIN_PA22,
 	.enable_pin	= AT91_PIN_PD15,
 	.ecc_mode	= NAND_ECC_SOFT,
+	.on_flash_bbt	= 1,
 	.parts		= ek_nand_partition,
 	.num_parts	= ARRAY_SIZE(ek_nand_partition),
 };
Signature · 1 line
1.7.7
#3 lore raw

PATCH 1/3 ATMEL: fix nand ecc support

In reply to Jean-Christophe PLAGNIOL-VILLARD
Quoted 10 lines · Jean-Christophe PLAGNIOL-VILLARD
include/linux/atmel_nand.h new file +10 -0
+#ifndef __ATMEL_NAND_H__
+#define __ATMEL_NAND_H__
+
+#include <linux/mtd/nand.h>
+
+ /* NAND / SmartMedia */
+struct atmel_nand_data {
+	int		enable_pin;		/* chip enable */
+	int		det_pin;		/* card detect */
+	int		rdy_pin;		/* ready/busy */

include/linux/atmel_nand.h line 26

Quoted 10 lines
include/linux/atmel_nand.h new file +10 -0
+	u8		rdy_pin_active_low;	/* rdy_pin value is inverted */
+	u8		ale;			/* address line number connected to ALE */
+	u8		cle;			/* address line number connected to CLE */
+	u8		bus_width_16;		/* buswidth is 16 bit */
+	u8		ecc_mode;		/* ecc mode */
+	struct mtd_partition *parts;
+	unsigned int	num_parts;
+};
+
+#endif /* __ATMEL_NAND_H__ */

The "include/linux" directory, I think, should generally contain only those headers which define some "userspace-kernel" or "kernel subsystem" API. This file defines Atmel NAND driver's, so it should not be placed there.

I am not sure "include/linux" is the best place for this header - is it?

Artem.

#4 lore raw

PATCH 1/3 ATMEL: fix nand ecc support

Quoted 28 lines · Artem Bityutskiy
Quoted 10 lines · Jean-Christophe PLAGNIOL-VILLARD
include/linux/atmel_nand.h new file +10 -0
+#ifndef __ATMEL_NAND_H__
+#define __ATMEL_NAND_H__
+
+#include <linux/mtd/nand.h>
+
+ /* NAND / SmartMedia */
+struct atmel_nand_data {
+	int		enable_pin;		/* chip enable */
+	int		det_pin;		/* card detect */
+	int		rdy_pin;		/* ready/busy */

include/linux/atmel_nand.h line 26

Quoted 10 lines
include/linux/atmel_nand.h new file +10 -0
+	u8		rdy_pin_active_low;	/* rdy_pin value is inverted */
+	u8		ale;			/* address line number connected to ALE */
+	u8		cle;			/* address line number connected to CLE */
+	u8		bus_width_16;		/* buswidth is 16 bit */
+	u8		ecc_mode;		/* ecc mode */
+	struct mtd_partition *parts;
+	unsigned int	num_parts;
+};
+
+#endif /* __ATMEL_NAND_H__ */

The "include/linux" directory, I think, should generally contain only those headers which define some "userspace-kernel" or "kernel subsystem" API. This file defines Atmel NAND driver's, so it should not be placed there.

Quoted 1 line

I am not sure "include/linux" is the best place for this header - is it?

If this is platform data, which it looks like to me then include/linux/platform_data would be a great home for it.

Jamie

#5 lore raw

PATCH 1/3 ATMEL: fix nand ecc support

In reply to Jean-Christophe PLAGNIOL-VILLARD

Around Sat 07 Jan 2012 11:49:28 +0100 or thereabout, Jean-Christophe PLAGNIOL-VILLARD wrote:

Hello,

Quoted 5 lines

so we can now choose for the board the ecc mode (ecc soft, soft bch, no ecc and hardware)

set ecc mode in the boards to soft as currently in the driver

Quoted 7 lines

move platform data to a common header
include/linux/atmel_nand.h

Cc Nicolas Ferre <[email protected]>
Cc Hans-Christian Egtvedt <[email protected]>
Cc linux-mtd at lists.infradead.org
Quoted 5 lines

---
Hi David,

If you don't
I'll apply this via ARM tree

Sounds fine by me.

<snipp AT91 changes>

Quoted 3 lines
 arch/avr32/boards/atngw100/setup.c          |    1 +
 arch/avr32/boards/atstk1000/atstk1002.c     |    1 +
 arch/avr32/mach-at32ap/include/mach/board.h |   13 +------------

These AVR32 changes seems sane, thanks for the update.

<snipp diff>

Signature · 2 lines
mvh
Hans-Christian Egtvedt