From patchwork Wed Oct 21 21:40:06 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Han Xu X-Patchwork-Id: 534100 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2001:1868:205::9]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id B939A140D7F for ; Thu, 22 Oct 2015 08:55:16 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Zp1IS-0002iD-7n; Wed, 21 Oct 2015 21:51:48 +0000 Received: from mail-bl2on0123.outbound.protection.outlook.com ([65.55.169.123] helo=na01-bl2-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Zp1I8-0002Zg-Di for linux-mtd@lists.infradead.org; Wed, 21 Oct 2015 21:51:30 +0000 Received: from BY2PR03CA054.namprd03.prod.outlook.com (10.141.249.27) by BLUPR03MB552.namprd03.prod.outlook.com (10.141.77.145) with Microsoft SMTP Server (TLS) id 15.1.300.14; Wed, 21 Oct 2015 21:51:05 +0000 Received: from BN1BFFO11FD038.protection.gbl (2a01:111:f400:7c10::1:152) by BY2PR03CA054.outlook.office365.com (2a01:111:e400:2c5d::27) with Microsoft SMTP Server (TLS) id 15.1.306.13 via Frontend Transport; Wed, 21 Oct 2015 21:51:05 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=freescale.com; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1BFFO11FD038.mail.protection.outlook.com (10.58.144.101) with Microsoft SMTP Server (TLS) id 15.1.300.4 via Frontend Transport; Wed, 21 Oct 2015 21:51:04 +0000 Received: from chopperman.am.freescale.net (chopperman.am.freescale.net [10.81.16.64]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id t9LLp2qb010327; Wed, 21 Oct 2015 14:51:04 -0700 From: Han Xu To: Subject: [PATCH v4 4/6] mtd: nand: gpmi: add GPMI NAND support for i.MX7D Date: Wed, 21 Oct 2015 16:40:06 -0500 Message-ID: <1445463608-5836-5-git-send-email-b45815@freescale.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1445463608-5836-1-git-send-email-b45815@freescale.com> References: <1445463608-5836-1-git-send-email-b45815@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD038; 1:ZdiENmXZL0ZqQzlAs+Hps2eaalZanqGWYHscdciM/tyAbOHegvBUnZQoMxUBCO/n/Nt3j7QUtiOybpxcNMcp9XlvfAitMomDHY4FH0Jl56q741OytjQoudAD73z8JxxHx9FElqKb32AqFs9KqBAsZGoCRbnRSnIR87AGIANHV5TiKeHr3ovdAu3J0sV5CuyHcYlYyZaknbdKL94363KFE7/pE0e7iIsyrW3RJrnhnKVYf9eRyKP+mXiUdWTR5xgboOB/pQJCwDf+mAZ2zHgxLBkGqCvegnFgLmGr1jXxco21/sfR5nyyX2HAaDPfOpjbsw/jarV+UM32NQjB9APNOJ/QZUSINZZmCNFxpsVzq+7xe4LgXT5jMsZXt7uXD9vRvx1E6JjItahdD6yKlI3AIA== X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(229853001)(2351001)(110136002)(575784001)(105606002)(92566002)(106466001)(50986999)(76176999)(5001960100002)(36756003)(77096005)(64706001)(2950100001)(50466002)(48376002)(47776003)(5007970100001)(87936001)(46102003)(5008740100001)(5003940100001)(81156007)(85426001)(50226001)(6806005)(19580395003)(33646002)(19580405001)(189998001)(5001920100001)(11100500001)(104016004)(97736004)(2004002)(217873001); DIR:OUT; SFP:1102; SCL:1; SRVR:BLUPR03MB552; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB552; 2:SQ7cLKZuHOmHoc5AXjLSTDbzI7QRazPgAwRn/Ib/zo9nLb248LwhoUHS6Twp5pCROzM9c9wLHmoE2NTEb6iS3hjNAwAKyeupelXGQc4hjPJVm/3g2OXIRp+soMKqX+N3AshKedjTCvZKwgTYxeSDI5YZ7lyJ2Ls842k6iRKxq+0=; 3:LADeFyUtvoMBvuIOLAYV60qCURdSb+3jDnDqQN6yCXrKntD0PUwTIE+PX2jnSF1AwojGr9zPkvLqdL0JLJbS1+HZe5eSS3KEXIGZdJU9usiecQEsWltkrXIXGxUKgrIGY4cM/tw2N1fZ+1ce2vkzJPmDzlFzt8WXmLWJbtyVCJ+0DfH90MMIzjeB3ysuPF/VE9p/nYn7QP/Uj29Vqah/wwrzot7H4DAb2UfefoIDTbI=; 25:2NL43B94OScTyt7boq0MoR5N777yYDrbvEXWCJprUXrS3uut9m/lmO9iOihR2DeUN791c6GHxBHx+jyuMVWf9c2Kn105nVfgDdqDnVABgv+G2saSpcHEAk5sd6HlJGpj/yPvlOM8k/KrJEGBL9p06Fr6U/kQBmYf468vYMtVG8QQUm2C31T7LLE+hFSQTTIVelO5aagNzc2aEqrPxUhvKBgqMzlUXFXHFEwh9KaueAMzHCn5XUsed74mGlI2v9hA X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB552; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB552; 20:VHavfvLBXQeo8k0jMXdgMpattN/TirY3wnYvwSxSkLH1cwWvkMrM8f94H2sIfd++bZ/eL22sTqkGAJyJmbr/OQlJg07h3pGGGlPMK+RFKvPCRqhngoCpETPf6evfMhoC40jQgVDRCLwtHmI4mlq1rIcHEZCbOiVkVuxUNHDeguRTMe+pc77trVTUO2ncNz9j0HsxJWSHjsm/RlgvyS9sgClaGZt8HFa5FygBuAjltNbjChfdHuvxm/CkRzmB9pBvWUWBnOo1in3IL3DkdrOrxkImz/5OmmDxrsXcdr/50fOggmfQcTjXk2BugbHvGnBK6EYdr7ZOcJa8NM+sKhTzIoPr8TyYVXfgBa1rH9LV3uQ=; 4:jPXhY49AvWaroNgbOD173WYdLJF10vmDHJdYOuHHnobGzHO11EJt9dfNMXpgsmpRSk14ZniPxNTp+TIMlXEnAClR0nJxQkJPZhGKSdsyX9m76osvw6ZX/2UsG7Kw1C8dyWvOLgMpC1nh4y+pYa6z08wcPpIffGmM69x73T/1jr11f77ceyb7lPJE1+6A5jGzonR8HDANKjldUvYST0UaxQA9sJWhn3ZsPeF0KfNtnrhpTXsb4Sm1awdky3rL74H4U3LCPDBY+C4i1IG1mO8gnCYgvKh0b+mBd/XiY1xuSnQqrMTq0EWO3g7EJcbTOZxbd5J0Uq6ltYqla2KKgCiKBqkAG5K5E0Tg7A1Y//ohX0S9WveSFOpiNAewuuEqwpfd X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(3002001)(102115026); SRVR:BLUPR03MB552; BCL:0; PCL:0; RULEID:; SRVR:BLUPR03MB552; X-Forefront-PRVS: 073631BD3D X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR03MB552; 23:RBlmaY9hH2RCYY3mcrm+FJLOodw7xm/NkdV83cesi1?= =?us-ascii?Q?KYvBdWayrco7/0NQz6qH2QkRAw+u/B0bAygFJDjr8otyp/H5KLvL2OCmtCqb?= =?us-ascii?Q?BLeyQHENWy24wsqhHWAdaqfDKD+uNXmMAoawR50dR43DhW16Mr022UCLcB4a?= =?us-ascii?Q?vFWIAnYM8vGptP65GgfRYHXKdaGKHjawHVbPIdTmDk5CltcSVWxn6psjcPe8?= =?us-ascii?Q?lq49JwAeR1qdwD+9jzRM7GQD7/tukl9GgDtnoWlF21jz2oX+A9Z1mJO/0zlo?= =?us-ascii?Q?Y7nc2oxZEuyE5epH4Dg4k/f8mWCOb5Xvo05DUbZ0/t5I+oJ/oyfmJj/ZrcIu?= =?us-ascii?Q?j511mmAJDOM+SgFpSE+veU//DDnxpxrd7PhXDW4FNKdI9aAJuHBWY3E5xwWh?= =?us-ascii?Q?NcdZ6bCLZoobygr/f5MnLBt51fPkEc2+xwAeBi1Vo1mojFE6oAFU84uPkDgd?= =?us-ascii?Q?LPpzhRPUvnBFLUPnZtc8yqtp1sAi1V9sxZ/3CVXEnMKIBgYrCSG+AXaTM5Ko?= =?us-ascii?Q?n9kAejwnn4dTSCfa+sEw/1nD2MEyzYIEgeY3Xq5wLrHERbqA4EHmzlLzpvBB?= =?us-ascii?Q?mPeCZqzOPei7liVxe0e8U8E2uPZ04VCzRM4ljY41dNKXWccIgseSxK4Q/+Ip?= =?us-ascii?Q?zpfPZdkKd051rYEZrVHr6HaIMwkujOsVBH6tzQVERJVWI9xiz6uDGWaLu5Yk?= =?us-ascii?Q?ljIajUw0NkcPh5gG/Szx4DGy1RmYIUDiDbZgrPbJ7TcFX/GHFyfms2xdlZKc?= =?us-ascii?Q?4TKt9h+e/iP/7xzWkCRSrraRslS5EGKVOcpK87wNgpkIqQ7rQsTtnPFQw1JP?= =?us-ascii?Q?cuHewaHjaKtjr1Wio3l6x+Mi/dDvvkjRJaKm/giEEdPvJpT8nrZlzbNbdWtH?= =?us-ascii?Q?J3HPAqxuXHbobF6gIPoDHdflX0sLV0LaXKYeK3WeScpOtqtYmmDZ0pfTx5c/?= =?us-ascii?Q?FsBMrCo8v7gjonqYLr7pdRVuSNXbBwetHarIIPOwBzj9ZxDYHAZcCu6rd9sL?= =?us-ascii?Q?3xr9jptynn1MoDoAB8GPK+6ISY9kcvU9c99OMO096Gn8Ye5H7MGM6ZKxetB+?= =?us-ascii?Q?u4GPbxROJ37fmJv/DhiVzxsyQH9Zfrg95109HOMPkINhGoKIv0ZsOMzYsvhe?= =?us-ascii?Q?01ZZPohyQpz4wVFv8CNOA7ackwqDLByN2bsw9ARFatCbFM4fNdNw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB552; 5:4GiWhRGgf5t5+ywhfBf3Ku8Ra9rQInKBxi6HBeMxykCA//Cz8J9zuom4JgeFujafVNGKsUhKPL2poPmmOQMjA9e5XRMi8WskQ3mX+ltBgS8vLUc+05Ivp4m95ySNqG7r2Lb+0hT3Mea8AwcG5ELHdw==; 24:eR6q33l/TX33+eAEt3ZYBmzaHJ2cQNicqGiE2sFyCsc27B6PPuaDVY5TFLpNqwyEl5RaAsIFfDPisGi6j7MkNN41g9fzc1wvki1Rec64EPM=; 20:Ild1Md8MbDaEF50f5XPjNXAcgRKgM0ELqXWyS4Mw69VaSIKPhNOEN1hB4vP5gd0gbAZidDL7i1tvyKjVrigQfg== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Oct 2015 21:51:04.5904 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB552 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20151021_145128_769633_F8FAE3BF X-CRM114-Status: GOOD ( 25.41 ) X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-1.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [65.55.169.123 listed in list.dnswl.org] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [65.55.169.123 listed in wl.mailspike.net] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: fabio.estevam@freescale.com, boris.brezillon@free-electrons.com, vinod.koul@intel.com, linux-kernel@vger.kernel.org, b45815@freescale.com, linux-mtd@lists.infradead.org, hofrat@osadl.org, dmaengine@vger.kernel.org, dan.j.williams@intel.com, computersforpeace@gmail.com, dwmw2@infradead.org Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org support GPMI NAND on i.MX7D Signed-off-by: Han Xu --- drivers/mtd/nand/gpmi-nand/bch-regs.h | 14 +++++++------- drivers/mtd/nand/gpmi-nand/gpmi-lib.c | 10 ++++++---- drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 26 +++++++++++++++++++++----- drivers/mtd/nand/gpmi-nand/gpmi-nand.h | 7 +++++-- 4 files changed, 39 insertions(+), 18 deletions(-) diff --git a/drivers/mtd/nand/gpmi-nand/bch-regs.h b/drivers/mtd/nand/gpmi-nand/bch-regs.h index 05bb91f..53e58bc 100644 --- a/drivers/mtd/nand/gpmi-nand/bch-regs.h +++ b/drivers/mtd/nand/gpmi-nand/bch-regs.h @@ -1,7 +1,7 @@ /* * Freescale GPMI NAND Flash Driver * - * Copyright 2008-2011 Freescale Semiconductor, Inc. + * Copyright 2008-2015 Freescale Semiconductor, Inc. * Copyright 2008 Embedded Alley Solutions, Inc. * * This program is free software; you can redistribute it and/or modify @@ -54,7 +54,7 @@ #define MX6Q_BP_BCH_FLASH0LAYOUT0_ECC0 11 #define MX6Q_BM_BCH_FLASH0LAYOUT0_ECC0 (0x1f << MX6Q_BP_BCH_FLASH0LAYOUT0_ECC0) #define BF_BCH_FLASH0LAYOUT0_ECC0(v, x) \ - (GPMI_IS_MX6(x) \ + ((GPMI_IS_MX6(x) || GPMI_IS_MX7(x)) \ ? (((v) << MX6Q_BP_BCH_FLASH0LAYOUT0_ECC0) \ & MX6Q_BM_BCH_FLASH0LAYOUT0_ECC0) \ : (((v) << BP_BCH_FLASH0LAYOUT0_ECC0) \ @@ -65,7 +65,7 @@ #define MX6Q_BM_BCH_FLASH0LAYOUT0_GF_13_14 \ (0x1 << MX6Q_BP_BCH_FLASH0LAYOUT0_GF_13_14) #define BF_BCH_FLASH0LAYOUT0_GF(v, x) \ - ((GPMI_IS_MX6(x) && ((v) == 14)) \ + (((GPMI_IS_MX6(x) || GPMI_IS_MX7(x)) && ((v) == 14))\ ? (((1) << MX6Q_BP_BCH_FLASH0LAYOUT0_GF_13_14) \ & MX6Q_BM_BCH_FLASH0LAYOUT0_GF_13_14) \ : 0 \ @@ -77,7 +77,7 @@ #define MX6Q_BM_BCH_FLASH0LAYOUT0_DATA0_SIZE \ (0x3ff << BP_BCH_FLASH0LAYOUT0_DATA0_SIZE) #define BF_BCH_FLASH0LAYOUT0_DATA0_SIZE(v, x) \ - (GPMI_IS_MX6(x) \ + ((GPMI_IS_MX6(x) || GPMI_IS_MX7(x)) \ ? (((v) >> 2) & MX6Q_BM_BCH_FLASH0LAYOUT0_DATA0_SIZE) \ : ((v) & BM_BCH_FLASH0LAYOUT0_DATA0_SIZE) \ ) @@ -96,7 +96,7 @@ #define MX6Q_BP_BCH_FLASH0LAYOUT1_ECCN 11 #define MX6Q_BM_BCH_FLASH0LAYOUT1_ECCN (0x1f << MX6Q_BP_BCH_FLASH0LAYOUT1_ECCN) #define BF_BCH_FLASH0LAYOUT1_ECCN(v, x) \ - (GPMI_IS_MX6(x) \ + ((GPMI_IS_MX6(x) || GPMI_IS_MX7(x)) \ ? (((v) << MX6Q_BP_BCH_FLASH0LAYOUT1_ECCN) \ & MX6Q_BM_BCH_FLASH0LAYOUT1_ECCN) \ : (((v) << BP_BCH_FLASH0LAYOUT1_ECCN) \ @@ -107,7 +107,7 @@ #define MX6Q_BM_BCH_FLASH0LAYOUT1_GF_13_14 \ (0x1 << MX6Q_BP_BCH_FLASH0LAYOUT1_GF_13_14) #define BF_BCH_FLASH0LAYOUT1_GF(v, x) \ - ((GPMI_IS_MX6(x) && ((v) == 14)) \ + (((GPMI_IS_MX6(x) || GPMI_IS_MX7(x)) && ((v) == 14))\ ? (((1) << MX6Q_BP_BCH_FLASH0LAYOUT1_GF_13_14) \ & MX6Q_BM_BCH_FLASH0LAYOUT1_GF_13_14) \ : 0 \ @@ -119,7 +119,7 @@ #define MX6Q_BM_BCH_FLASH0LAYOUT1_DATAN_SIZE \ (0x3ff << BP_BCH_FLASH0LAYOUT1_DATAN_SIZE) #define BF_BCH_FLASH0LAYOUT1_DATAN_SIZE(v, x) \ - (GPMI_IS_MX6(x) \ + ((GPMI_IS_MX6(x) || GPMI_IS_MX7(x)) \ ? (((v) >> 2) & MX6Q_BM_BCH_FLASH0LAYOUT1_DATAN_SIZE) \ : ((v) & BM_BCH_FLASH0LAYOUT1_DATAN_SIZE) \ ) diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c index 43fa16b..1f26a79 100644 --- a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c +++ b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c @@ -1,7 +1,7 @@ /* * Freescale GPMI NAND Flash Driver * - * Copyright (C) 2008-2011 Freescale Semiconductor, Inc. + * Copyright (C) 2008-2015 Freescale Semiconductor, Inc. * Copyright (C) 2008 Embedded Alley Solutions, Inc. * * This program is free software; you can redistribute it and/or modify @@ -971,7 +971,8 @@ int gpmi_extra_init(struct gpmi_nand_data *this) struct nand_chip *chip = &this->nand; /* Enable the asynchronous EDO feature. */ - if (GPMI_IS_MX6(this) && chip->onfi_version) { + if ((GPMI_IS_MX6(this) || GPMI_IS_MX7(this)) && + chip->onfi_version) { int mode = onfi_get_async_timing_mode(chip); /* We only support the timing mode 4 and mode 5. */ @@ -1093,12 +1094,13 @@ int gpmi_is_ready(struct gpmi_nand_data *this, unsigned chip) if (GPMI_IS_MX23(this)) { mask = MX23_BM_GPMI_DEBUG_READY0 << chip; reg = readl(r->gpmi_regs + HW_GPMI_DEBUG); - } else if (GPMI_IS_MX28(this) || GPMI_IS_MX6(this)) { + } else if (GPMI_IS_MX28(this) || GPMI_IS_MX6(this) || + GPMI_IS_MX7(this)) { /* * In the imx6, all the ready/busy pins are bound * together. So we only need to check chip 0. */ - if (GPMI_IS_MX6(this)) + if (GPMI_IS_MX6(this) || GPMI_IS_MX7(this)) chip = 0; /* MX28 shares the same R/B register as MX6Q. */ diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c index 632876c..d161569 100644 --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c @@ -77,6 +77,12 @@ static const struct gpmi_devdata gpmi_devdata_imx6sx = { .max_chain_delay = 12, }; +static const struct gpmi_devdata gpmi_devdata_imx7d = { + .type = IS_MX7D, + .bch_max_ecc_strength = 62, + .max_chain_delay = 12, +}; + static irqreturn_t bch_irq(int irq, void *cookie) { struct gpmi_nand_data *this = cookie; @@ -575,6 +581,10 @@ static char *extra_clks_for_mx6q[GPMI_CLK_MAX] = { "gpmi_apb", "gpmi_bch", "gpmi_bch_apb", "per1_bch", }; +static char *extra_clks_for_mx7d[GPMI_CLK_MAX] = { + "gpmi_bch_apb", +}; + static int gpmi_get_clks(struct gpmi_nand_data *this) { struct resources *r = &this->resources; @@ -592,6 +602,8 @@ static int gpmi_get_clks(struct gpmi_nand_data *this) /* Get extra clocks */ if (GPMI_IS_MX6(this)) extra_clks = extra_clks_for_mx6q; + if (GPMI_IS_MX7(this)) + extra_clks = extra_clks_for_mx7d; if (!extra_clks) return 0; @@ -608,7 +620,7 @@ static int gpmi_get_clks(struct gpmi_nand_data *this) r->clock[i] = clk; } - if (GPMI_IS_MX6(this)) + if (GPMI_IS_MX6(this) || GPMI_IS_MX7(this)) /* * Set the default value for the gpmi clock. * @@ -1869,8 +1881,8 @@ static int gpmi_init_last(struct gpmi_nand_data *this) * (1) the chip is imx6, and * (2) the size of the ECC parity is byte aligned. */ - if (GPMI_IS_MX6(this) && - ((bch_geo->gf_len * bch_geo->ecc_strength) % 8) == 0) { + if ((GPMI_IS_MX6(this) || GPMI_IS_MX7(this)) && + ((bch_geo->gf_len * bch_geo->ecc_strength) % 8) == 0) { ecc->read_subpage = gpmi_ecc_read_subpage; chip->options |= NAND_SUBPAGE_READ; } @@ -1936,7 +1948,8 @@ static int gpmi_nand_init(struct gpmi_nand_data *this) if (ret) goto err_out; - ret = nand_scan_ident(mtd, GPMI_IS_MX6(this) ? 2 : 1, NULL); + ret = nand_scan_ident(mtd, GPMI_IS_MX6(this) || + GPMI_IS_MX7(this) ? 2 : 1, NULL); if (ret) goto err_out; @@ -1980,7 +1993,10 @@ static const struct of_device_id gpmi_nand_id_table[] = { }, { .compatible = "fsl,imx6sx-gpmi-nand", .data = &gpmi_devdata_imx6sx, - }, {} + }, { + .compatible = "fsl,imx7d-gpmi-nand", + .data = (void *)&gpmi_devdata_imx7d, + } }; MODULE_DEVICE_TABLE(of, gpmi_nand_id_table); diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.h b/drivers/mtd/nand/gpmi-nand/gpmi-nand.h index 544062f..58b3d69 100644 --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.h +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.h @@ -1,7 +1,7 @@ /* * Freescale GPMI NAND Flash Driver * - * Copyright (C) 2010-2011 Freescale Semiconductor, Inc. + * Copyright (C) 2010-2015 Freescale Semiconductor, Inc. * Copyright (C) 2008 Embedded Alley Solutions, Inc. * * This program is free software; you can redistribute it and/or modify @@ -123,7 +123,8 @@ enum gpmi_type { IS_MX23, IS_MX28, IS_MX6Q, - IS_MX6SX + IS_MX6SX, + IS_MX7D, }; struct gpmi_devdata { @@ -306,6 +307,8 @@ void gpmi_copy_bits(u8 *dst, size_t dst_bit_off, #define GPMI_IS_MX28(x) ((x)->devdata->type == IS_MX28) #define GPMI_IS_MX6Q(x) ((x)->devdata->type == IS_MX6Q) #define GPMI_IS_MX6SX(x) ((x)->devdata->type == IS_MX6SX) +#define GPMI_IS_MX7D(x) ((x)->devdata->type == IS_MX7D) #define GPMI_IS_MX6(x) (GPMI_IS_MX6Q(x) || GPMI_IS_MX6SX(x)) +#define GPMI_IS_MX7(x) (GPMI_IS_MX7D(x)) #endif