Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754225AbbLXLYR (ORCPT ); Thu, 24 Dec 2015 06:24:17 -0500 Received: from mail-bl2on0131.outbound.protection.outlook.com ([65.55.169.131]:50384 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754087AbbLXLYM (ORCPT ); Thu, 24 Dec 2015 06:24:12 -0500 Authentication-Results: spf=permerror (sender IP is 192.88.158.2) 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: Yuan Yao To: , , CC: , , Subject: [PATCH v2 4/4] mtd: spi-nor: fsl-quadspi: extend support for some special requerment. Date: Thu, 24 Dec 2015 19:00:21 +0800 Message-ID: <1450954821-7483-4-git-send-email-yao.yuan@freescale.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1450954821-7483-1-git-send-email-yao.yuan@freescale.com> References: <1450954821-7483-1-git-send-email-yao.yuan@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD012;1:SpGZoPKATvHYAGMfgKnqM+M6aHpJHgxFFXZYq3vLm+ELDn0Jckw2JdnJDdkENNT2dUhoG8CbfB16HCbnzFx8/JdyAc06CZYNXLfrcwK8zWUhfSrd8GDf7h2MaqUv2IC98NoWzj2OUH/+P38zkxq75/OSO2jDmdlZkrJs+aKyixGkZgSnLoRLYgXw6vamW646NLnkTssUb5Btbw6vMqGRYltlqqvoGgL0LnneFz2n4zM4gH+oDUqaPpLM7SAX2JbRemUmh8PZ2OqQyNh243KUrtN/HWog5nTk+5hgh3Ml4nYUpwRrdLdF7qlRXEjvTFzlg67ZdB8BUKHiji6I1cce/leY4ABzBz03siiy6Aaz/mg+2uZtN5WGqmgSAEutoxlOX+6pYovivG7RanwkrenIwZvM/yUU1Q5q6dyxoMpQWbc= X-Forefront-Antispam-Report: CIP:192.88.158.2;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(448002)(189002)(199003)(4001450100002)(2201001)(11100500001)(2950100001)(81156007)(97736004)(86362001)(50226001)(48376002)(69596002)(50466002)(5001770100001)(189998001)(106466001)(92566002)(5001960100002)(85326001)(33646002)(87936001)(50986999)(36756003)(5003940100001)(19580395003)(229853001)(76176999)(47776003)(586003)(1096002)(1220700001)(104016004)(6806005)(19580405001)(5008740100001)(77096005)(7059030);DIR:OUT;SFP:1102;SCL:1;SRVR:BLUPR03MB067;H:az84smr01.freescale.net;FPR:;SPF:PermError;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB067;2:pOv9Bp+opJ/M49is2HFRd49iivcEORWti/n8xLxpD9ow7bopT1c4N24igkOrhIz0LyODazLtq9EJJ51zJcGUymRC22POlKCESABMVyWbilz9j7acwefTL4eoH0kSnGfbYoJSUKr1Se1x3JOex8jxKg==;3:A8LRMMN2i2ZzP8Pq+bqzvWXgHSqomurWfzdPhiV94paxp4vygwTB6L9t078CH6rYvVMKoy9geoCmO+0tV57W/OdL2V1dwhB4T7xUvfpy8ePRWloRnT9Ovv6+QrOw22fbX0VCYUng6NZvdb1yAiP8du/8fRLTxex8T/bDKi+vAbn37qjHpFAmZWxymMwlKlyWmKBd7HSQ6k+DubElgrskF6jkLfneKxkDh5kVcJ556eo=;25:iBMbH//vphY7DcL+yWWarPXhcAzQ5q7fvTPkEjLHWtOtD6f10gSrucseytN7bPdhtMhet79J7BHveJZAVSR1BCbOyMeDVwY0zdPEcPezJFEz58QPnTNiOlvWIJpctQwK5atznKFzha1rCyduZcHlMDDEcUdUIOh0r/Wg8V4UBa9v7qPvT5XQ9QO8B/JyFJbKAh6ayXVc55nLnrnBfidgw9ngVkbWWeP3JYzwmlBV3QSSV9jM0FNzQST//NAvULrfjedgVMcUruzi+roGAWs/vg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB067; X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB067;20:rETGuvta5ZZY0Mtazu7qBZnujSbSqzzdELIQwwPvqY/QwozxEk0tkS1UbEh1z1ihyqtVkmWc/G4OrJACeR0i3GSvcNjy8zcKgBIGpiirVAAwM5E0RLPSp7X+WRnynhuc2tqHdbrJBp2YXIAzzbeJPpuyS1zrsMrKsliYpOvchqGjRjs1nHX0iU+8v6jnD//3Pp2Im54b2r1R5llmLj6RHvndF1/s/UDTG8oU1cytLBeU1hy0CT+DaFFj+cPpJQmlNo69EXsYb50eMquxT2dqDtFOTZ8wsCuZILrWdUq0xjRTlMlhiFs7HikWrMAX4ELDqyq4/AXtdjDNN3x/SBipoOhkcdNBLJnQafXreul6L3w=;4:HsbP+DBzjd+XJI5JCG/N52BR8DTLVdUT2TFTO24ju0LZpWNROECTLLqiM2tz9wtWH57fL9G3f+x18uSHjX35gaSppa7eUpAdmXZoS/+7skXerGSBOOooY84CgHpl+sStSRO7NwhrxIOYKmdJ0EyF0T6Fb7p3Yer5hRXawbF9Tr58ORPPag3Ckl9nNzmz3BzQVnPMoL8TFwkjnnSzdHaK8valg+90spG/EDCVnKro7CvICzkvETcYdDhCUMFTJReFmYhOd4q3L495W4kJRCA+9Orq8imXrQN1mItI6e6kU72DFz1o3oIO16PUkTF0XaivkWz5AtWT1liEIqglQxojNPLoOKkvE5ZuPMhoUJylKQD7oRSvWUW6txX+2DpqPEFBRhktzEAG4/sQRQFBWQ923e5crShGkrrSQOJSleofSQDyFdcRn39/zDrh0rvhH1my X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(10201501046)(3002001);SRVR:BLUPR03MB067;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB067; X-Forefront-PRVS: 0800C0C167 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR03MB067;23:fb/QcMAmjIV0be8mKcZuqgbzzckaVxuOg7pgJV33tC?= =?us-ascii?Q?dDzNcU7OX8ocxRMgVAmwFYjsCoYD/FnV6YCsThz6Vngc35ku9A2KpHMcRfyG?= =?us-ascii?Q?ySsLX3SXnmb/xbEwoGHLMGrZL1wjX8+FDoGGRq2LS2/6+3ycQCc3sF6qgmYJ?= =?us-ascii?Q?G4mpvRvOVBu4IwTbKELHCOe7NiiRLESxMW89qNvFvZSfntEJBXPVWSTx1U3D?= =?us-ascii?Q?nRPmDeq5iMcf5jFdobokL1BCBghSipL2sFog0YrRb1nWUijtIhFiWQHHjI1N?= =?us-ascii?Q?MCVIi8UBSUi1RZ+TwSFMdoTetBkbS0m0aYRgwIA6+6H/kXLygxpYs8WVUlKo?= =?us-ascii?Q?wL59JLDeqA9ivWURm2JSwFiq25K32rPaJyWTa8dDnMdyx/55bpBv+XZJk4d3?= =?us-ascii?Q?OP+mcawdYKNkdVvqipaNRxZ9pP0ws1LUnIKl+dAczog8QVTAjtJ+4M0wGBpN?= =?us-ascii?Q?YrONj+YXjlp1zqh7gAqWsWMVzlRsPAXjOyV3oCvuU1hBw+1Rwb564dBO403V?= =?us-ascii?Q?ekrtDXllkMEc/6xJz6zOzlt6PE2F9RzaTnf42wLQSRqdSwPx2RQrDuq7vSHw?= =?us-ascii?Q?ctDXDMzkG/zAXS8Df9YogZt8WTe90oNWsZm+QB8vJ9aEYTfwW2IWakGdGlHD?= =?us-ascii?Q?hdNyyaXNhXMbXIvhVkwYhUheeNk7p0hLxATrYYyTjFAcvH00sowhaOoO3QMR?= =?us-ascii?Q?5NPE5MkTrGck9IqZyDm1X8zetwOyLL3X7s1C9FL08ABGTDp+OO8c5xX9QGTN?= =?us-ascii?Q?dZFTVs2eED0hhO3Mt1MTYsQjicfjKbiCB79QXPYcMsBbluJL2zB3oDUl12zc?= =?us-ascii?Q?WMNprhFr+CVjZBUUMfbrW0uUQGPvCSCB/1QEu4sNtfTwMMnO9xYgif4pqDpo?= =?us-ascii?Q?OQbqo4MgVwPjSdehpcVY0iR78W7ohBV97DXBBQjGNfloNyaQIJovOfStu17W?= =?us-ascii?Q?DppKRybfE4jiQSluh6sMVc9ASM5zph/zbx/gPR3uRyxKwvqWrzkGuEU+pcre?= =?us-ascii?Q?aQF7PrHvf6DU+1WXj3Hcnjx3W9PxhS5+q9c0wsZJR0lrBS/c/tGakzlXshLV?= =?us-ascii?Q?3L0GjZAWfAsE9DEzqooqkYpKtl?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB067;5:FjVRzj/vKg7Ntf2k2HBlyPZbPmKvnDCRLYeX2YCLdgrwXy3QWGxXpxQxQS//4kcTW0JrhM18EFyrbUPcbOhdwXfwaa8kCAedOqabJnwghVX02+1wIuGofIh8WTFK7DrljHEDLq/IcbIwQ6vRL5HU7w==;24:hEFHQr8XLsIF1I/M60oMqnpzga8VoW2HmH0DxoEiZPSkIFkW/YYlxqZAzFZb/jUvrMeKD6l1ptVaWcMC4R2iqlPlm+E72CH93VcmBPsxNRc= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Dec 2015 11:08:08.9525 (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.158.2];Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB067 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3656 Lines: 119 Add extra info in LUT table to support some special requerments. Spansion S25FS-S family flash need some special operations. Signed-off-by: Yuan Yao --- Changed in v2: Update my email to --- drivers/mtd/spi-nor/fsl-quadspi.c | 41 +++++++++++++++++++++++++++++++++++++-- include/linux/mtd/spi-nor.h | 4 ++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c index 9ab2b51..081ae85 100644 --- a/drivers/mtd/spi-nor/fsl-quadspi.c +++ b/drivers/mtd/spi-nor/fsl-quadspi.c @@ -205,6 +205,8 @@ #define SEQID_RDCR 9 #define SEQID_EN4B 10 #define SEQID_BRWR 11 +#define SEQID_RDAR 12 +#define SEQID_WRAR 13 #define QUADSPI_MIN_IOMAP SZ_4M @@ -476,6 +478,28 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_BRWR), base + QUADSPI_LUT(lut_base)); + /* + * Read any device register. + * Used for Spansion S25FS-S family flash only. + */ + lut_base = SEQID_RDAR * 4; + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_SPANSION_RDAR) | + LUT1(ADDR, PAD1, ADDR24BIT), + base + QUADSPI_LUT(lut_base)); + qspi_writel(q, LUT0(DUMMY, PAD1, 8) | LUT1(FSL_READ, PAD1, 1), + base + QUADSPI_LUT(lut_base + 1)); + + /* + * Write any device register. + * Used for Spansion S25FS-S family flash only. + */ + lut_base = SEQID_WRAR * 4; + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_SPANSION_WRAR) | + LUT1(ADDR, PAD1, ADDR24BIT), + base + QUADSPI_LUT(lut_base)); + qspi_writel(q, LUT0(FSL_WRITE, PAD1, 1), + base + QUADSPI_LUT(lut_base + 1)); + fsl_qspi_lock_lut(q); } @@ -484,7 +508,12 @@ static int fsl_qspi_get_seqid(struct fsl_qspi *q, u8 cmd) { switch (cmd) { case SPINOR_OP_READ_1_1_4: + case SPINOR_OP_READ4_1_1_4: return SEQID_QUAD_READ; + case SPINOR_OP_SPANSION_RDAR: + return SEQID_RDAR; + case SPINOR_OP_SPANSION_WRAR: + return SEQID_WRAR; case SPINOR_OP_WREN: return SEQID_WREN; case SPINOR_OP_WRDI: @@ -835,8 +864,12 @@ static int fsl_qspi_read_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) { int ret; struct fsl_qspi *q = nor->priv; + u32 to = 0; + + if (opcode == SPINOR_OP_SPANSION_RDAR) + memcpy(&to, nor->cmd_buf, 4); - ret = fsl_qspi_runcmd(q, opcode, 0, len); + ret = fsl_qspi_runcmd(q, opcode, to, len); if (ret) return ret; @@ -848,9 +881,13 @@ static int fsl_qspi_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len) { struct fsl_qspi *q = nor->priv; int ret; + u32 to = 0; + + if (opcode == SPINOR_OP_SPANSION_RDAR) + memcpy(&to, nor->cmd_buf, 4); if (!buf) { - ret = fsl_qspi_runcmd(q, opcode, 0, 1); + ret = fsl_qspi_runcmd(q, opcode, to, 1); if (ret) return ret; diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h index fac3f6f..7a2f193 100644 --- a/include/linux/mtd/spi-nor.h +++ b/include/linux/mtd/spi-nor.h @@ -74,6 +74,10 @@ /* Used for Spansion flashes only. */ #define SPINOR_OP_BRWR 0x17 /* Bank register write */ +/* Used for Spansion S25FS-S family flash only. */ +#define SPINOR_OP_SPANSION_RDAR 0x65 /* Read any device register */ +#define SPINOR_OP_SPANSION_WRAR 0x71 /* Write any device register */ + /* Used for Micron flashes only. */ #define SPINOR_OP_RD_EVCR 0x65 /* Read EVCR register */ #define SPINOR_OP_WD_EVCR 0x61 /* Write EVCR register */ -- 2.1.0.27.g96db324 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/