From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755916AbcA2MD7 (ORCPT ); Fri, 29 Jan 2016 07:03:59 -0500 Received: from mail-bn1on0138.outbound.protection.outlook.com ([157.56.110.138]:10903 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755828AbcA2MD4 (ORCPT ); Fri, 29 Jan 2016 07:03:56 -0500 Authentication-Results: spf=permerror (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=freescale.com; From: Yunhui Cui To: , , CC: , , , Subject: [PATCH 1/3] mtd:fsl-quadspi:use the property fields of SPI-NOR Date: Fri, 29 Jan 2016 19:41:07 +0800 Message-ID: <1454067669-35274-2-git-send-email-B56489@freescale.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1454067669-35274-1-git-send-email-B56489@freescale.com> References: <1454067669-35274-1-git-send-email-B56489@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD014;1:eyfiDKUE0Uw/sEK3eujIMZHWucNQHdAHzwvYNflHs+hKJLkkfFH/TYneUyRHBfpg8+ycuWUxLNAdo+tTmcgc6uuFsKOLagqu1fnQHxC6Hp/923atzTR1tsyOeUapcy7Hk35iJOexHYpjgCFJhs7Ch72Zd8S0Eerh+YCddSFv/e4sY+EqtA1XSTbGZe7CR8mIEpq28CGKMVAHbeh+N37hniXUI688EitV2hiv4M8fUPbvzSImYRP55OKiep/LfxNMV1FYlyYwUJfjH0hZILZTF4S9Z/ZkpZaySBe3CfCpEdhsU6dXD0AzrOJzGzapefUWvHFvef96u76T3HIu8qFC5Caare7wSKA143jRzeJy/LPO0w7CIx+qvh24ByE45I+Olr5i/hKvpcoMKHCaVrItrskvr56+ZHbvAoG3dSGRaQk6fY3qge70MUOQQGBT2p0MetzTwZpLwKc+5hUfExqIPw== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(448002)(189002)(199003)(106466001)(2950100001)(229853001)(104016004)(36756003)(5001960100002)(11100500001)(77096005)(1220700001)(48376002)(1096002)(6806005)(19580395003)(50986999)(5008740100001)(586003)(3470700001)(76176999)(47776003)(189998001)(87936001)(2201001)(4326007)(19580405001)(5003940100001)(86362001)(5001770100001)(4001450100002)(85326001)(92566002)(2906002)(50226001)(50466002)(7059030);DIR:OUT;SFP:1102;SCL:1;SRVR:SN2PR03MB080;H:tx30smr01.am.freescale.net;FPR:;SPF:PermError;MLV:sfv;MX:1;A:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 36d749b8-aba0-4d0e-3ad1-08d328a24141 X-Microsoft-Exchange-Diagnostics: 1;SN2PR03MB080;2:8os1v/31JuizMH6RnpO97gdPadzgB+TQp/EAEbGZJlJtXlNnu2xVC/gahL93mEbLznx0Jn4zun88EwGu/VsferNb23b0gqYWkZbSNdlJABnVS8W2pMybS1Yb2S/5dYq7bPQe9dggxcOpActCflO497eQhvQk2JuvCbAiATK96YJ5H7SnSHqYkI6xPy7gk5Yr;3:Nf9uDH40PrkxlO0EI4EIg8VpLyOr/rap9utUxxgezE7HCpP6pkAnA+6tYVRAP5diC5RtFsSmSc3Ggdg+Q7ixp0a7MHrjYCEgQgFQ/T09b5ZiO/D2psWoEQZhQZzAtvs1hnnFPH//YXWgUoCJGmkoSMCnH/TDPMKFFmJc9Pc/cNXRl+zP4jarRH3ENeA2WXmdEAI8f0M7NvbBYJ7/r+XJinTnvbzOTZglKpTJp1u+Ap0=;25:H2jbWrWjbuvlx0xSMZABZ2AejCUqtzZNHb7287DIwgd2BqrZZcVqDXXFY5TzGOA5qD+8rSUJptRUTJkKTlqcl6NDSaosI8fkaIElGeIL33GEaQmFHKcZNu+vVvnpKdYbezCPOYvre8+ZuqZJr4utlTx4f85L49WryB0Bv3Kv2ganSm+Q1uXr3HMjpEPuNfiZoEn8OsCqUHUpUpsfSOMyqgcYnL7o4Vdt80F8wryysrDMPcEvdx3p9ugO2jlhSCxR X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN2PR03MB080; X-Microsoft-Exchange-Diagnostics: 1;SN2PR03MB080;20:0ohNXda0WuN1IAy50JsrsSGJCVZ1OdsPQlBN6w+cexwOnui3u5gpomU+sxlqDUXkEK+MNVQZb/u9MzQYO3f/fwOh+/AUsbx+lmC8RkGnbGrxxFfPNf/SmJlMRnksHRt75WnZjuklMZztt/ePNjjR9u130bnVvu6Dlwgl4D47BWUNKCT0vuhcrn4l58/JaEIr+0TA6n+PFynmFZ2J3ixuTt9wrybsALH8hHafjaAsy25fohA20xJz1/XsmhcKifKBXi4QjFauy/9E7ETtNOj/S6W1u9cGjlzWcOzEeESOkbq5DYQ49RWBcgbpSScILyj+BUDKU0Bk+oo2A3urDF6sVer+QQZFEZPcx6buGUX4qjDgEffaDTA+yoBhufgF7/SUb4GR6KdKl+UEMl0Pljiy9Q053iY92+Uwpbp+NbxiDgMGq3+oCGet9RC/6Sv2+1b7;4:OjsYMJt1ok3engHPSM+ZgtCxHUnqt2VUy25sK1AXLiwHS1zFofL0lFbimLsuZcemlhjwZEtr68ex6K/VlltEWse9jAU4mCv7BxRtesvHPiZ7GYeD2FLfPMTJ9xt8A3iKF1QNNaUHoNk+tU+bborm2Ragwvsp+dR6dvVpaxe+tePt9VBB2Fgj70QM8ZTKGNAAB/q1Iv4JPUpPrs7UsmlGPF1k8kP66P623oFibQkR4n3RsRdFjDftHAM6DL6LYEapA52Nfcz01aGaZ4Hi8ZZJQlougmFjRqEJm9i/hnlKH8yb6UH8dfeE/glN0T1ATbkoOyMYp/E+4RsTYZZqdfeXmzDDgqRtFmlV4EvXAFqDgKqkP5LHk97aEZMRSRQ/3Y2KbnpkoLHXaSzeODxvvHxzzoFaiBq1YbILOfJnioF/15Jn1qoYHwYHoQmXLHFaar1M9URBOh1gFb6cXk1Ciq5SKF3SuwtJfotAKCSoINm4lBj/0cSgPaPHzlIS/CqKJb/5 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)(13024025)(13023025)(13015025)(13018025)(5005006)(13017025)(3002001)(10201501046);SRVR:SN2PR03MB080;BCL:0;PCL:0;RULEID:;SRVR:SN2PR03MB080; X-Forefront-PRVS: 083691450C X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN2PR03MB080;23:eP8StxxUfbnIawWZgXJftZ75q5kYa2ehHCQSRzrkpE?= =?us-ascii?Q?nevmk5AOZme+AGUjloE6cxcOmsMohod1lUdhlq7nT5nn0dbBpGCIHOujBAit?= =?us-ascii?Q?5Vun/2YS518Wzi7RmukWrvIsKaP/RCzZHyzVvfQNIn0vMmjuZzSKGwbqnu3v?= =?us-ascii?Q?87L+I4+JmcT2yVwj6NOURYoZnOqt2DoWFX7XzdbqB1c030fMlwAgBVYFlQYo?= =?us-ascii?Q?eSRKenMfJFqiH98bn7uzQGWVp9Dq3tBSkHf21U7Dh+plkaKfpXJKXnDKuVpp?= =?us-ascii?Q?vJfEyinmSf4QWm06Q1I3x0pPppgRlMIGucPIYKEuJnhZ5/fQtpUl6n2/F4s/?= =?us-ascii?Q?Y9XjpbOtkzGqXNXiReD1Bx9xumhjaDZRUSztMJZNoP97kwC85Sl/fKXCLsJK?= =?us-ascii?Q?1XqR6iYfP15vF1njBqfSe2/PDyoep9WhiZW0F1ZS42K2xDkt2vDzFrZXoj8/?= =?us-ascii?Q?1BdlQa0aap5HqvqYRKMRp/8eLq5MPKrftWxEeWjfpnG9CDW5a3wI8c1YwVgp?= =?us-ascii?Q?100MQXOubP22daJq0ehYlSzPEH74X4IBdU3bWdDrIcfis/OeG99T4nPatVdx?= =?us-ascii?Q?G3wAs3kMtaJUOFPD/Ia9dMOoUgTYyQB2gleIhPKeh1Ug8iyxsl10DlDBBboE?= =?us-ascii?Q?Trj6M1qu2W8tsUpciYZPUIZUqjhuNA4w1zf4QbOHLnHsKy4X+sLzijQEk9r7?= =?us-ascii?Q?LzByB6VFPcH93U5oWo4LIljbCPOuNl8Uq7IacA2FTR/Dhcb4aRK92gbHoSMx?= =?us-ascii?Q?1a3TBniobaSrKpWsfP8CQvBmDzpk96mkC+M0O3apWNcy69xoDulTSfXPUJ0S?= =?us-ascii?Q?Ni7k8ZmFN1cYOmVjxChS9b+KJIPuYKTfVY2K7A1fCFToQLGnj+2bzd4Wf1Zp?= =?us-ascii?Q?f2PldanxJ6DIAD6D023JHht+2s+tMQnslfZnFN2nRCt/WVyoHIH8MAMZPcad?= =?us-ascii?Q?yGRLMuZynWagUA+ayS+v3OLhKs4bYRiJFqm5MrOKW90LD+hlReTaVpkYTqB8?= =?us-ascii?Q?LT4LJ2QP3BlGdnQdr3SH6j7xoGijVzzW+pet07gfIgM2sJjpaZ0c4ryFzU83?= =?us-ascii?Q?xURoQ=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN2PR03MB080;5:f2yE3uZFSQjhrjBuEgf8z+EEOZ+myvZb4oCH6AIePCd7Z+dYQgaRYrwGy4/dmgrcT7YqNu9ghCVWbZA/cwQyH9LaXYGVoPj4fTT0Kzo0UUQhFQDf0iRvlqHJstePJlPVGjpKdMcROR50R0J1ZXHGwQ==;24:1wHaDs9n8jTXTM7yuTHv30B0oOuC2abcqu884l1tXsO/enB4kucWFJ8uSYcUx0e//P2g0auJT4iHQMjpykdJkhXJdVsrkuU2yhLMkMx6WX4= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jan 2016 11:49:33.2262 (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: SN2PR03MB080 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We can get the read/write/erase opcode from the spi nor framework directly. This patch uses the information stored in the SPI-NOR to remove the hardcode in the fsl_qspi_init_lut(). Signed-off-by: Yunhui Cui --- drivers/mtd/spi-nor/fsl-quadspi.c | 40 ++++++++++++--------------------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c index 9ab2b51..517ffe2 100644 --- a/drivers/mtd/spi-nor/fsl-quadspi.c +++ b/drivers/mtd/spi-nor/fsl-quadspi.c @@ -373,9 +373,13 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) void __iomem *base = q->iobase; int rxfifo = q->devtype_data->rxfifo; u32 lut_base; - u8 cmd, addrlen, dummy; int i; + struct spi_nor *nor = &q->nor[0]; + u8 addrlen = (nor->addr_width == 3) ? ADDR24BIT : ADDR32BIT; + u8 read_op = nor->read_opcode; + u8 read_dm = nor->read_dummy; + fsl_qspi_unlock_lut(q); /* Clear all the LUT table */ @@ -385,20 +389,10 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) /* Quad Read */ lut_base = SEQID_QUAD_READ * 4; - if (q->nor_size <= SZ_16M) { - cmd = SPINOR_OP_READ_1_1_4; - addrlen = ADDR24BIT; - dummy = 8; - } else { - /* use the 4-byte address */ - cmd = SPINOR_OP_READ_1_1_4; - addrlen = ADDR32BIT; - dummy = 8; - } - - qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), + qspi_writel(q, LUT0(CMD, PAD1, read_op) | LUT1(ADDR, PAD1, addrlen), base + QUADSPI_LUT(lut_base)); - qspi_writel(q, LUT0(DUMMY, PAD1, dummy) | LUT1(FSL_READ, PAD4, rxfifo), + qspi_writel(q, LUT0(DUMMY, PAD1, read_dm) | + LUT1(FSL_READ, PAD4, rxfifo), base + QUADSPI_LUT(lut_base + 1)); /* Write enable */ @@ -409,16 +403,8 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) /* Page Program */ lut_base = SEQID_PP * 4; - if (q->nor_size <= SZ_16M) { - cmd = SPINOR_OP_PP; - addrlen = ADDR24BIT; - } else { - /* use the 4-byte address */ - cmd = SPINOR_OP_PP; - addrlen = ADDR32BIT; - } - - qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), + qspi_writel(q, LUT0(CMD, PAD1, nor->program_opcode) | + LUT1(ADDR, PAD1, addrlen), base + QUADSPI_LUT(lut_base)); qspi_writel(q, LUT0(FSL_WRITE, PAD1, 0), base + QUADSPI_LUT(lut_base + 1)); @@ -432,10 +418,8 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) /* Erase a sector */ lut_base = SEQID_SE * 4; - cmd = q->nor[0].erase_opcode; - addrlen = q->nor_size <= SZ_16M ? ADDR24BIT : ADDR32BIT; - - qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), + qspi_writel(q, LUT0(CMD, PAD1, nor->erase_opcode) | + LUT1(ADDR, PAD1, addrlen), base + QUADSPI_LUT(lut_base)); /* Erase the whole chip */ -- 2.1.0.27.g96db324 From mboxrd@z Thu Jan 1 00:00:00 1970 From: B56489@freescale.com (Yunhui Cui) Date: Fri, 29 Jan 2016 19:41:07 +0800 Subject: [PATCH 1/3] mtd:fsl-quadspi:use the property fields of SPI-NOR In-Reply-To: <1454067669-35274-1-git-send-email-B56489@freescale.com> References: <1454067669-35274-1-git-send-email-B56489@freescale.com> Message-ID: <1454067669-35274-2-git-send-email-B56489@freescale.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org We can get the read/write/erase opcode from the spi nor framework directly. This patch uses the information stored in the SPI-NOR to remove the hardcode in the fsl_qspi_init_lut(). Signed-off-by: Yunhui Cui --- drivers/mtd/spi-nor/fsl-quadspi.c | 40 ++++++++++++--------------------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c index 9ab2b51..517ffe2 100644 --- a/drivers/mtd/spi-nor/fsl-quadspi.c +++ b/drivers/mtd/spi-nor/fsl-quadspi.c @@ -373,9 +373,13 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) void __iomem *base = q->iobase; int rxfifo = q->devtype_data->rxfifo; u32 lut_base; - u8 cmd, addrlen, dummy; int i; + struct spi_nor *nor = &q->nor[0]; + u8 addrlen = (nor->addr_width == 3) ? ADDR24BIT : ADDR32BIT; + u8 read_op = nor->read_opcode; + u8 read_dm = nor->read_dummy; + fsl_qspi_unlock_lut(q); /* Clear all the LUT table */ @@ -385,20 +389,10 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) /* Quad Read */ lut_base = SEQID_QUAD_READ * 4; - if (q->nor_size <= SZ_16M) { - cmd = SPINOR_OP_READ_1_1_4; - addrlen = ADDR24BIT; - dummy = 8; - } else { - /* use the 4-byte address */ - cmd = SPINOR_OP_READ_1_1_4; - addrlen = ADDR32BIT; - dummy = 8; - } - - qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), + qspi_writel(q, LUT0(CMD, PAD1, read_op) | LUT1(ADDR, PAD1, addrlen), base + QUADSPI_LUT(lut_base)); - qspi_writel(q, LUT0(DUMMY, PAD1, dummy) | LUT1(FSL_READ, PAD4, rxfifo), + qspi_writel(q, LUT0(DUMMY, PAD1, read_dm) | + LUT1(FSL_READ, PAD4, rxfifo), base + QUADSPI_LUT(lut_base + 1)); /* Write enable */ @@ -409,16 +403,8 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) /* Page Program */ lut_base = SEQID_PP * 4; - if (q->nor_size <= SZ_16M) { - cmd = SPINOR_OP_PP; - addrlen = ADDR24BIT; - } else { - /* use the 4-byte address */ - cmd = SPINOR_OP_PP; - addrlen = ADDR32BIT; - } - - qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), + qspi_writel(q, LUT0(CMD, PAD1, nor->program_opcode) | + LUT1(ADDR, PAD1, addrlen), base + QUADSPI_LUT(lut_base)); qspi_writel(q, LUT0(FSL_WRITE, PAD1, 0), base + QUADSPI_LUT(lut_base + 1)); @@ -432,10 +418,8 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) /* Erase a sector */ lut_base = SEQID_SE * 4; - cmd = q->nor[0].erase_opcode; - addrlen = q->nor_size <= SZ_16M ? ADDR24BIT : ADDR32BIT; - - qspi_writel(q, LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen), + qspi_writel(q, LUT0(CMD, PAD1, nor->erase_opcode) | + LUT1(ADDR, PAD1, addrlen), base + QUADSPI_LUT(lut_base)); /* Erase the whole chip */ -- 2.1.0.27.g96db324