From patchwork Fri Jun 18 05:35:02 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Haojian Zhuang X-Patchwork-Id: 56121 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id A16311007D4 for ; Fri, 18 Jun 2010 15:40:02 +1000 (EST) Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.72 #1 (Red Hat Linux)) id 1OPUHG-0002Ax-13; Fri, 18 Jun 2010 05:38:06 +0000 Received: from mail-pw0-f49.google.com ([209.85.160.49]) by bombadil.infradead.org with esmtp (Exim 4.72 #1 (Red Hat Linux)) id 1OPUEJ-0007FM-PP; Fri, 18 Jun 2010 05:35:07 +0000 Received: by pwj6 with SMTP id 6so354181pwj.36 for ; Thu, 17 Jun 2010 22:35:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=cN7CLXpxEF2qhn3bAtcF4tjSPybBeUznxJWaqMZF1Vw=; b=hJIfWdoedNVHRuRQmbFqXnNjAm8hGMBk/k43JsMaDczrEHGS7wUaK66EhaM/oMGLi8 FcVuBfaq542c9hLlFoZiK1ZQiX81ylyLVYuMv2RVs+icy4odFw+k/rb9qeVsn0qSOTqp RLdaSbMH0L4GmfUpF2ruJ+J0xJu5UYZPKA5no= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=mbkuTd1d+B1uMIALfyXG0sniscCoWfM47karzdLyzRyo5/IDcCVgehfXE4+LrBOp2D Ox0MRe6ujmwWJyVlDMdCWHUZAYywhVhu0tcsYqOrUodEz2oimgk5w25xpYm5c3DUhXuz pSi9e9DPiRABh7j74Qe2uYU5OqnPEkqOQPegg= MIME-Version: 1.0 Received: by 10.142.55.4 with SMTP id d4mr359477wfa.309.1276839302655; Thu, 17 Jun 2010 22:35:02 -0700 (PDT) Received: by 10.142.114.3 with HTTP; Thu, 17 Jun 2010 22:35:02 -0700 (PDT) Date: Fri, 18 Jun 2010 13:35:02 +0800 Message-ID: Subject: [PATCH 12/25] pxa3xx_nand: add more attribute that platform could choose from From: Haojian Zhuang To: Marc Kleine-Budde , David Woodhouse , David Woodhouse , linux-mtd@lists.infradead.org, Eric Miao , linux-arm-kernel X-CRM114-Version: 20090807-BlameThorstenAndJenny ( TRE 0.7.6 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20100618_013505_154261_F1D93214 X-CRM114-Status: GOOD ( 23.52 ) X-Spam-Score: -0.1 (/) X-Spam-Report: SpamAssassin version 3.3.1 on bombadil.infradead.org summary: Content analysis details: (-0.1 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, low trust [209.85.160.49 listed in list.dnswl.org] 0.0 FREEMAIL_FROM Sender email is freemail (haojian.zhuang[at]gmail.com) -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-mtd-bounces@lists.infradead.org Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From f90b97dcfdfe04264a190764aadac7e89508716e Mon Sep 17 00:00:00 2001 From: Lei Wen Date: Sun, 6 Jun 2010 22:02:08 +0800 Subject: [PATCH 12/25] pxa3xx_nand: add more attribute that platform could choose from Signed-off-by: Lei Wen --- 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(-) ndcr |= (f->page_size == 2048) ? NDCR_PAGE_SZ : 0; @@ -975,7 +975,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; } @@ -1243,7 +1243,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) { @@ -1251,12 +1251,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)) { 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 56015bd..72bb70e 100644 --- a/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h +++ b/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h @@ -5,17 +5,20 @@ #include #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 c75bed6..8ec9172 100644 --- a/drivers/mtd/nand/pxa3xx_nand.c +++ b/drivers/mtd/nand/pxa3xx_nand.c @@ -849,7 +849,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;