On Tue, Dec 09, 2008 at 11:45:30PM +0200, Felipe Balbi wrote:
> Ok, simple change ;-)

Here you are.

==================== cut here ====================

>From da4850424fc1f6260aa147e672c37caedeb585c7 Mon Sep 17 00:00:00 2001
From: Felipe Balbi <[EMAIL PROTECTED]>
Date: Fri, 5 Dec 2008 22:03:32 +0200
Subject: [PATCH 01/14] arch: davinci: pass emif control base via resource

Later patch will come to use it in davinci_nand.c and get
rid of a define there. In DM355, the base is different, so
better to apply this patch before adding support for DM355
nand chip.

Signed-off-by: Felipe Balbi <[EMAIL PROTECTED]>
---
 arch/arm/mach-davinci/board-dm644x-evm.c |   19 +++++++++++++------
 arch/arm/mach-davinci/board-sffsdr.c     |   19 +++++++++++++------
 drivers/mtd/nand/davinci_nand.c          |   15 +++++++++------
 3 files changed, 35 insertions(+), 18 deletions(-)

diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c 
b/arch/arm/mach-davinci/board-dm644x-evm.c
index be0e856..db6a28b 100644
--- a/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -43,6 +43,7 @@
 
 #define DAVINCI_CFC_ATA_BASE             0x01C66000
 
+#define DAVINCI_ASYNC_EMIF_CONTROL_BASE   0x01e00000
 #define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE  0x02000000
 #define DAVINCI_ASYNC_EMIF_DATA_CE1_BASE  0x04000000
 #define DAVINCI_ASYNC_EMIF_DATA_CE2_BASE  0x06000000
@@ -118,10 +119,16 @@ static struct flash_platform_data 
davinci_evm_nandflash_data = {
        .nr_parts       = ARRAY_SIZE(davinci_evm_nandflash_partition),
 };
 
-static struct resource davinci_evm_nandflash_resource = {
-       .start          = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE,
-       .end            = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE + SZ_16M - 1,
-       .flags          = IORESOURCE_MEM,
+static struct resource davinci_evm_nandflash_resource[] = {
+       {
+               .start          = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE,
+               .end            = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE + SZ_16M - 1,
+               .flags          = IORESOURCE_MEM,
+       }, {
+               .start          = DAVINCI_ASYNC_EMIF_CONTROL_BASE,
+               .end            = DAVINCI_ASYNC_EMIF_CONTROL_BASE + SZ_4K - 1,
+               .flags          = IORESOURCE_MEM,
+       },
 };
 
 static struct platform_device davinci_evm_nandflash_device = {
@@ -130,8 +137,8 @@ static struct platform_device davinci_evm_nandflash_device 
= {
        .dev            = {
                .platform_data  = &davinci_evm_nandflash_data,
        },
-       .num_resources  = 1,
-       .resource       = &davinci_evm_nandflash_resource,
+       .num_resources  = ARRAY_SIZE(davinci_evm_nandflash_resource),
+       .resource       = davinci_evm_nandflash_resource,
 };
 
 static u64 davinci_fb_dma_mask = DMA_32BIT_MASK;
diff --git a/arch/arm/mach-davinci/board-sffsdr.c 
b/arch/arm/mach-davinci/board-sffsdr.c
index a9f1627..9dab21d 100644
--- a/arch/arm/mach-davinci/board-sffsdr.c
+++ b/arch/arm/mach-davinci/board-sffsdr.c
@@ -54,6 +54,7 @@
 #include <mach/serial.h>
 #include <mach/psc.h>
 
+#define DAVINCI_ASYNC_EMIF_CONTROL_BASE   0x01e00000
 #define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE  0x02000000
 
 struct mtd_partition davinci_sffsdr_nandflash_partition[] = {
@@ -82,10 +83,16 @@ static struct flash_platform_data 
davinci_sffsdr_nandflash_data = {
        .nr_parts       = ARRAY_SIZE(davinci_sffsdr_nandflash_partition),
 };
 
-static struct resource davinci_sffsdr_nandflash_resource = {
-       .start          = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE,
-       .end            = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE + SZ_16M - 1,
-       .flags          = IORESOURCE_MEM,
+static struct resource davinci_sffsdr_nandflash_resource[] = {
+       {
+               .start          = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE,
+               .end            = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE + SZ_16M - 1,
+               .flags          = IORESOURCE_MEM,
+       }, {
+               .start          = DAVINCI_ASYNC_EMIF_CONTROL_BASE,
+               .end            = DAVINCI_ASYNC_EMIF_CONTROL_BASE + SZ_4K - 1,
+               .flags          = IORESOURCE_MEM,
+       },
 };
 
 static struct platform_device davinci_sffsdr_nandflash_device = {
@@ -94,8 +101,8 @@ static struct platform_device 
davinci_sffsdr_nandflash_device = {
        .dev            = {
                .platform_data  = &davinci_sffsdr_nandflash_data,
        },
-       .num_resources  = 1,
-       .resource       = &davinci_sffsdr_nandflash_resource,
+       .num_resources  = ARRAY_SIZE(davinci_sffsdr_nandflash_resource),
+       .resource       = davinci_sffsdr_nandflash_resource,
 };
 
 /* Get Ethernet address from kernel boot params */
diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c
index 97aa645..7056dcc 100644
--- a/drivers/mtd/nand/davinci_nand.c
+++ b/drivers/mtd/nand/davinci_nand.c
@@ -52,9 +52,6 @@
 
 #include <asm/mach/flash.h>
 
-/* FIXME: this should be passed in using platform_data */
-#define DAVINCI_ASYNC_EMIF_CNTRL_BASE           (0x01E00000)
-
 #ifdef CONFIG_NAND_FLASH_HW_ECC
 #define DAVINCI_NAND_ECC_MODE NAND_ECC_HW3_512
 #else
@@ -65,6 +62,7 @@
 
 static struct clk *nand_clock;
 static void __iomem *nand_vaddr;
+static void __iomem *emif_base;
 
 /*
  * MTD structure for DaVinici board
@@ -95,12 +93,12 @@ static struct nand_bbt_descr davinci_memorybased_large = {
 
 inline unsigned int davinci_nand_readl(int offset)
 {
-       return davinci_readl(DAVINCI_ASYNC_EMIF_CNTRL_BASE + offset);
+       return davinci_readl(emif_base + offset);
 }
 
 inline void davinci_nand_writel(unsigned long value, int offset)
 {
-       davinci_writel(value, DAVINCI_ASYNC_EMIF_CNTRL_BASE + offset);
+       davinci_writel(value, emif_base + offset);
 }
 
 /*
@@ -479,6 +477,7 @@ int __devinit nand_davinci_probe(struct platform_device 
*pdev)
 {
        struct flash_platform_data *pdata = pdev->dev.platform_data;
        struct resource           *res = pdev->resource;
+       struct resource           *res2 = platform_get_resource(pdev, 
IORESOURCE_MEM, 1);
        struct nand_chip          *chip;
        struct device             *dev = NULL;
        u32                       nand_rev_code;
@@ -524,7 +523,8 @@ int __devinit nand_davinci_probe(struct platform_device 
*pdev)
               (nand_rev_code >> 8) & 0xff, nand_rev_code & 0xff);
 
        nand_vaddr = ioremap(res->start, res->end - res->start);
-       if (nand_vaddr == NULL) {
+       emif_base = ioremap(res2->start, res2->end - res2->start);
+       if (nand_vaddr == NULL || emif_base == NULL) {
                printk(KERN_ERR "DaVinci NAND: ioremap failed.\n");
                clk_disable(nand_clock);
                kfree(nand_davinci_mtd);
@@ -602,6 +602,9 @@ static int nand_davinci_remove(struct platform_device *pdev)
        if (nand_vaddr)
                iounmap(nand_vaddr);
 
+       if (emif_base)
+               iounmap(emif_base);
+
        /* Release resources, unregister device */
        nand_release(nand_davinci_mtd);
 
-- 
1.6.0.4.617.g2baf1



-- 
balbi

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to