[PATCH 15/29] pxa3xx_nand: add more attribute that platform

Lei Wen leiwen at marvell.com
Tue Jun 22 10:08:13 EDT 2010


could choose from

Signed-off-by: Lei Wen <leiwen at marvell.com>
---
 arch/arm/mach-mmp/aspenite.c                 |    3 ++-
 arch/arm/mach-mmp/avengers_lite.c            |    3 ++-
 arch/arm/mach-pxa/cm-x300.c                  |    3 +--
 arch/arm/mach-pxa/colibri-pxa3xx.c           |    3 +--
 arch/arm/mach-pxa/littleton.c                |    2 +-
 arch/arm/mach-pxa/mxm8x10.c                  |    3 +--
 arch/arm/mach-pxa/raumfeld.c                 |    3 +--
 arch/arm/mach-pxa/zylonite.c                 |    2 +-
 arch/arm/plat-pxa/include/plat/pxa3xx_nand.h |   23 +++++++++++++----------
 drivers/mtd/nand/pxa3xx_nand.c               |   11 +++++++----
 10 files changed, 30 insertions(+), 26 deletions(-)

diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c
index 81ad58d..8d739d1 100644
--- a/arch/arm/mach-mmp/aspenite.c
+++ b/arch/arm/mach-mmp/aspenite.c
@@ -125,7 +125,8 @@ static struct mtd_partition aspenite_nand_partitions[] = {
 };

 static struct pxa3xx_nand_platform_data aspenite_nand_info = {
-	.enable_arbiter	= 1,
+	.controller_attrs = PXA3XX_ARBI_EN | PXA3XX_NAKED_CMD_EN | PXA3XX_DMA_EN
+				| PXA3XX_ADV_TIME_TUNING | PXA3XX_TWO_CHIP_EN,
 	.parts[0]	= aspenite_nand_partitions,
 	.nr_parts[0]	= ARRAY_SIZE(aspenite_nand_partitions),
 };
diff --git a/arch/arm/mach-mmp/avengers_lite.c
b/arch/arm/mach-mmp/avengers_lite.c
index a828b1c..3a07613 100644
--- a/arch/arm/mach-mmp/avengers_lite.c
+++ b/arch/arm/mach-mmp/avengers_lite.c
@@ -77,7 +77,8 @@ static void __init avengers_init_flash(void)
 	avengers_nand_info.nr_parts[0] = ARRAY_SIZE(avengers_nand_partitions_0);
 	avengers_nand_info.parts[1] = avengers_nand_partitions_1;
 	avengers_nand_info.nr_parts[1] = ARRAY_SIZE(avengers_nand_partitions_1);
-	avengers_nand_info.enable_arbiter = 1;
+	avengers_nand_info.controller_attrs = PXA3XX_ARBI_EN | PXA3XX_NAKED_CMD_EN
+		| PXA3XX_DMA_EN | PXA3XX_ADV_TIME_TUNING | PXA3XX_TWO_CHIP_EN;
 	pxa168_add_nand(&avengers_nand_info);
 }

diff --git a/arch/arm/mach-pxa/cm-x300.c b/arch/arm/mach-pxa/cm-x300.c
index ce1f6d3..9f0282b 100644
--- a/arch/arm/mach-pxa/cm-x300.c
+++ b/arch/arm/mach-pxa/cm-x300.c
@@ -417,8 +417,7 @@ static struct mtd_partition cm_x300_nand_partitions[] = {
 };

 static struct pxa3xx_nand_platform_data cm_x300_nand_info = {
-	.enable_arbiter	= 1,
-	.keep_config	= 1,
+	.controller_attrs = PXA3XX_ARBI_EN | PXA3XX_DMA_EN | PXA3XX_KEEP_CONFIG,
 	.parts[0]	= cm_x300_nand_partitions,
 	.nr_parts[0]	= ARRAY_SIZE(cm_x300_nand_partitions),
 };
diff --git a/arch/arm/mach-pxa/colibri-pxa3xx.c
b/arch/arm/mach-pxa/colibri-pxa3xx.c
index b33559c..627b289 100644
--- a/arch/arm/mach-pxa/colibri-pxa3xx.c
+++ b/arch/arm/mach-pxa/colibri-pxa3xx.c
@@ -186,8 +186,7 @@ static struct mtd_partition colibri_nand_partitions[] = {
 };

 static struct pxa3xx_nand_platform_data colibri_nand_info = {
-	.enable_arbiter	= 1,
-	.keep_config	= 1,
+	.controller_attrs = PXA3XX_ARBI_EN | PXA3XX_DMA_EN | PXA3XX_KEEP_CONFIG,
 	.parts[0]	= colibri_nand_partitions,
 	.nr_parts[0]	= ARRAY_SIZE(colibri_nand_partitions),
 };
diff --git a/arch/arm/mach-pxa/littleton.c b/arch/arm/mach-pxa/littleton.c
index 717cf92..e63451c 100644
--- a/arch/arm/mach-pxa/littleton.c
+++ b/arch/arm/mach-pxa/littleton.c
@@ -324,7 +324,7 @@ static struct mtd_partition littleton_nand_partitions[] = {
 };

 static struct pxa3xx_nand_platform_data littleton_nand_info = {
-	.enable_arbiter	= 1,
+	.controller_attrs = PXA3XX_ARBI_EN | PXA3XX_DMA_EN,
 	.parts[0]	= littleton_nand_partitions,
 	.nr_parts[0]	= ARRAY_SIZE(littleton_nand_partitions),
 };
diff --git a/arch/arm/mach-pxa/mxm8x10.c b/arch/arm/mach-pxa/mxm8x10.c
index 66c2086..baca736 100644
--- a/arch/arm/mach-pxa/mxm8x10.c
+++ b/arch/arm/mach-pxa/mxm8x10.c
@@ -389,8 +389,7 @@ static struct mtd_partition mxm_8x10_nand_partitions[] = {
 };

 static struct pxa3xx_nand_platform_data mxm_8x10_nand_info = {
-	.enable_arbiter	= 1,
-	.keep_config	= 1,
+	.controller_attrs = PXA3XX_ARBI_EN | PXA3XX_DMA_EN | PXA3XX_KEEP_CONFIG,
 	.parts[0]	= mxm_8x10_nand_partitions,
 	.nr_parts[0]	= ARRAY_SIZE(mxm_8x10_nand_partitions)
 };
diff --git a/arch/arm/mach-pxa/raumfeld.c b/arch/arm/mach-pxa/raumfeld.c
index df75d4d..8761775 100644
--- a/arch/arm/mach-pxa/raumfeld.c
+++ b/arch/arm/mach-pxa/raumfeld.c
@@ -348,8 +348,7 @@ static struct mtd_partition raumfeld_nand_partitions[] = {
 };

 static struct pxa3xx_nand_platform_data raumfeld_nand_info = {
-	.enable_arbiter	= 1,
-	.keep_config	= 1,
+	.controller_attrs = PXA3XX_ARBI_EN | PXA3XX_DMA_EN | PXA3XX_KEEP_CONFIG,
 	.parts[0]	= raumfeld_nand_partitions,
 	.nr_parts[0]	= ARRAY_SIZE(raumfeld_nand_partitions),
 };
diff --git a/arch/arm/mach-pxa/zylonite.c b/arch/arm/mach-pxa/zylonite.c
index 9e5c6cd..5cf3d10 100644
--- a/arch/arm/mach-pxa/zylonite.c
+++ b/arch/arm/mach-pxa/zylonite.c
@@ -355,7 +355,7 @@ static struct mtd_partition zylonite_nand_partitions[] = {
 };

 static struct pxa3xx_nand_platform_data zylonite_nand_info = {
-	.enable_arbiter	= 1,
+	.controller_attrs = PXA3XX_ARBI_EN | PXA3XX_DMA_EN,
 	.parts[0]	= zylonite_nand_partitions,
 	.nr_parts[0]	= ARRAY_SIZE(zylonite_nand_partitions),
 };
diff --git a/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h
b/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h
index 9b1f9df..ed7d623 100644
--- a/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h
+++ b/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h
@@ -49,17 +49,20 @@ struct pxa3xx_nand_flash {
 };

 #define NUM_CHIP_SELECT		(2)
+/* the data flash bus is shared between the Static Memory
+ * Controller and the Data Flash Controller,  the arbiter
+ * controls the ownership of the bus
+ */
+#define PXA3XX_ARBI_EN		(1)
+#define PXA3XX_NAKED_CMD_EN	(1 << 1)
+#define PXA3XX_TWO_CHIP_EN	(1 << 2)
+#define PXA3XX_DMA_EN		(1 << 3)
+/* for newer controller support more precise timing tuning, only
+ * enable such tuning for those platform which support it */
+#define PXA3XX_ADV_TIME_TUNING	(1 << 4)
+#define PXA3XX_KEEP_CONFIG	(1 << 5)
 struct pxa3xx_nand_platform_data {
-
-	/* the data flash bus is shared between the Static Memory
-	 * Controller and the Data Flash Controller,  the arbiter
-	 * controls the ownership of the bus
-	 */
-	int	enable_arbiter;
-
-	/* allow platform code to keep OBM/bootloader defined NFC config */
-	int	keep_config;
-
+	unsigned int				controller_attrs;
 	const struct mtd_partition		*parts[NUM_CHIP_SELECT];
 	unsigned int				nr_parts[NUM_CHIP_SELECT];

diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
index 94df2bd..204c9d6 100644
--- a/drivers/mtd/nand/pxa3xx_nand.c
+++ b/drivers/mtd/nand/pxa3xx_nand.c
@@ -816,7 +816,7 @@ static int pxa3xx_nand_config_flash(struct
pxa3xx_nand_info *info,
 	else
 		info->row_addr_cycles = 2;

-	ndcr |= (pdata->enable_arbiter) ? NDCR_ND_ARB_EN : 0;
+	ndcr |= (pdata->controller_attrs & PXA3XX_ARBI_EN) ? NDCR_ND_ARB_EN : 0;
 	ndcr |= (info->col_addr_cycles == 2) ? NDCR_RA_START : 0;
 	ndcr |= (f->page_per_block == 64) ? NDCR_PG_PER_BLK : 0;
 	ndcr |= (f->page_size == 2048) ? NDCR_PAGE_SZ : 0;
@@ -947,7 +947,7 @@ static int __devinit pxa3xx_nand_scan(struct mtd_info *mtd)
 	uint64_t chipsize;
 	int i, ret;

-	if (pdata->keep_config) {
+	if (pdata->controller_attrs & PXA3XX_KEEP_CONFIG) {
 		if (pxa3xx_nand_detect_config(nand) == 0)
 			goto KEEP_CONFIG;
 	}
@@ -1215,7 +1215,7 @@ static int __devinit pxa3xx_nand_probe(struct
platform_device *pdev)
 	struct mtd_info *mtd;
 	static const char *probes[] = { "cmdlinepart", NULL };
 	struct mtd_partition *parts;
-	int nr_parts, ret, cs, probe_success = 0;
+	int nr_parts, ret, cs, probe_success = 0, cs_to_scan;

 	pdata = pdev->dev.platform_data;
 	if (!pdata) {
@@ -1223,12 +1223,15 @@ static int __devinit pxa3xx_nand_probe(struct
platform_device *pdev)
 		return -ENODEV;
 	}

+	if (!(pdata->controller_attrs & PXA3XX_DMA_EN))
+		use_dma = 0;
 	ret = alloc_nand_resource(pdev);
 	if (ret)
 		return ret;

 	nand = platform_get_drvdata(pdev);
-	for (cs = 0; cs < NUM_CHIP_SELECT; cs++) {
+	cs_to_scan = (pdata->controller_attrs & PXA3XX_TWO_CHIP_EN)? 2 : 1;
+	for (cs = 0; cs < cs_to_scan; cs++) {
 		info = nand->info[cs];
 		mtd = get_mtd_by_info(info);
 		if (pxa3xx_nand_scan(mtd)) {
-- 
1.7.0.4



More information about the linux-mtd mailing list