From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753627AbcHRIGc (ORCPT ); Thu, 18 Aug 2016 04:06:32 -0400 Received: from mail-co1nam03on0123.outbound.protection.outlook.com ([104.47.40.123]:33440 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751255AbcHRIG2 (ORCPT ); Thu, 18 Aug 2016 04:06:28 -0400 X-Greylist: delayed 998 seconds by postgrey-1.27 at vger.kernel.org; Thu, 18 Aug 2016 04:06:27 EDT Authentication-Results: spf=fail (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;nxp.com; dkim=none (message not signed) header.d=none; From: Yunhui Cui To: , , , CC: , , , , Yunhui Cui Subject: [PATCH v3 7/9] mtd: fsl-quadspi: Solve Micron Spansion flash command conflict Date: Thu, 18 Aug 2016 15:38:02 +0800 Message-ID: <1471505884-33996-7-git-send-email-B56489@freescale.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1471505884-33996-1-git-send-email-B56489@freescale.com> References: <1471505884-33996-1-git-send-email-B56489@freescale.com> X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:192.88.168.50;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(7916002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(2201001)(586003)(8676002)(48376002)(77096005)(5003940100001)(8936002)(85426001)(2950100001)(5001770100001)(50466002)(81156014)(97736004)(50986999)(189998001)(81166006)(76176999)(11100500001)(19580395003)(87936001)(105606002)(229853001)(19580405001)(106466001)(305945005)(104016004)(68736007)(7846002)(356003)(2906002)(8666005)(92566002)(36756003)(50226002)(4326007)(626004)(47776003)(7059030);DIR:OUT;SFP:1102;SCL:1;SRVR:CY1PR0301MB1977;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD009;1:JN4PN6ZPkTtYNDWo7baFHXcE6hNIpyqi0ZB/Ja+O4+WNvzZ9g8kHqEDz0vw6qLy1WmVj0WYoDjiSDPjFlmpwl1e8WetUI6SMwJ9nkQFbFfmpAHvE3e8NpZ8E20fsxUkaM6jSP8MHkJKIsehOcnjWYDq9zXUhVZp/20qCnpxHOQXUwK+yz6vAd17/RmE2SZS/1EgJootr+szOmNdQKeLmGpr9+/1+cyjD1LZZ4qBTbPLwDjNRQ2ZW45VgxKBGj76Q4VSmLwPkvV0pAd+RoIlaCD7PNATHWY/omV0LY2i9bZDK5G00g5yrTglC1BgmN8hs8/MIFc5BtsCW/iZDCbRQFJfBeSaB1LrIlWT6sZ+iQQ21N9Ry++g9/mDju9K5hk/wqxPD73ziZhjcgJzJKQz3YPrGjc5PM+RPngGzzkNC9MWahTx1I1ElEIF+v1D8LlJPoGp1q/ITtyXRIoB/zw/hT5WFxh9Rz66QVlKjpZwgO3gXYAO+VTwAMPgB7Lsq4+enOp0EfuZRypNetLz2AP+xc7+OPWEr1PaW5z9lUwcarVHLZ7NV15CyCXJV02H3ihI9V/Fa54A6xYEreahaFz4MokI/lOfL1S7aeweYfMf6yhU= MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 9100bad0-dbf1-40a7-7f63-08d3c73c3f0e X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1977;2:eWCpIxK7XNcYI2Di5Mg4/qPzMqi2Cyr8H0kkhM1XWsAfqm0fweYqSYHF6r1HZr2dCvm1Ikjv2nsqT1nGnMns+PACXj5gl2dDHZ6lW/ZmiZEyAWxk81H5RokcmWwSZP7ObQnK87+zzC8qUBtlmEAeZpTaURiYM7iii+n8oeXJeFL55wgwbelu62TppksNt/G6;3:6NNBXGNbZhmeRVZrnjBgnaSoS36g/32DBVYe9hWCoA7HV1NcoF0o5SXBA+Mxl+VmLoNFvU3jKAmjcYbSJQRxwjh6/Wx2TApjw9XyMtPr11f/pXH+ShgYsc3qrrhJqlLRFO1+QUiq2psBTj/bgotmLnhk8e54AHWGui2JU+pJxCfNqKdQG6Q3t4duIS2EZ6jGIZdvAxa/Y/5AJX39UayrcBZDiowLF1rmWdpjKU1Rnus= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB1977; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1977;25:MbtWVht19qQYDL9nDxnlFvUXvZwJdwIKs3xfz8UipzBK1aKcic9ji7M4rU3uI14OmFGv7nXKCpOg3c/WPU4CWYXsNzKqAyOQFqi1b849qwb5WxRcwhvbWczvZQUaoIHfvMnnpJbu2K+YEUZrSCKb0Zf+cjhh31y5W1MMMi3FIVB/mp0wSA7PmTpw7gV+T8CDw/08wj9zQ5qvHTmjHp7rpzWPTPJyQDwac38fnWqK1f1CI64du7VSxb10LrP7rcfucSnTrxyFGTHpBh/T/yo9v8HMjgGPVc9/HtDuL4co023NImeJf6zRKe3TLRlrfBLylUJLiSvKeeA04o0yIbpNfy/aY4aeEyPmqmyHf1nk6Dr87RJARkbq25fB1w0vdXrqrXKOpTxjyhIjn4BlrP80sLrLvPSWiZDmy823i/OL9qmkdVnHDQYMxlqE3A7yOctWzvXlSNUlqKG49BQWLZktRe6bWbgFoZCYcQcKtL38ITCBN/ioN2JYd9WWbbWDlUxRHCDfl73tFkxM5wUbORp4TuptYsnZlbB7rLqeIRNNL9h8G2rtMWShey5cg9p6Z4pzgO8nRfI0wB3gdAyhz8C9bIdTYETIDclzbjjCV4vaxvnzNITOoFoHQtN7BgFRqj3Rs65j7bxRnuxEc3XdbVWj+rvvpGnkmM1a5fkxOHLEbMyHDl6Y7upzzgHCzGYRy0VJhGAtZb3jvDAkhCqJOnOGftuGZq7EvLehGkL2ssSNbVXbcZtbi3FxpegPnkGDsqjkfLu8wr3aRA1iY8U2UfZcLQ== X-LD-Processed: 710a03f5-10f6-4d38-9ff4-a80b81da590d,ExtAddr X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1977;31:EOuyBnvXbn/yn3fM16cypWcGXwaSCkNCyJ+ak8nqFUmyBrlnhuVDfL3Gnf6OwL9cYLeWuTalyjEnPvsTj4yhjjS7AGBRFvewqLy8NMPD+lMzIzDmOVGxqjWp6LA5MZlkypjt/z/OlIaBSCEeKssQ/fbkEltnYn2e57xDwi/u+XmWwErNWYv+8yokqvNiX99SyihWJsn0NgGbPpca+JMBaASxjxLFXMstAn7J29GdUjM=;20:ImF4mZdEuII73eY7XOuMnz1LYJv4nwYFt3VIR/OxQG8mE+U0/dLcnviq8jgUIm8AX463dvjXLCgP2KsVXzwMok9lRHe2AweZz9HuiJe14ST0s3tR1QKzaK0tTu0JLnSNmAStSXJUcsrluRkZk3ztdIfF/1LVP/OWZx7TuQMrHLBKN1Xdzq3LzIsfOEo6dE11eC3rGRvOfxYITZMD8YVvNRGqMcTbP7BW8VAhiTyO6RfHY0VoIe3jkNsS/MFqqI/J5hWP94FWZhd4yuJb3Uj7Lt3WCNRRj2oGwyJqcZpOvcw+KpZXBPaF/Z43e0KgW4CHzJra+TarPsdBU4sHvteShFK3FxTdey7WetvDfQv+CWgJXnHzQrJyfdTWz42/vtG1phF/9SfEnMH+A6bUxMzhUoU9ZO6bSJZOrRJHJjSgszYKKHugonrkYF7Ynb9vbF2iRFgv0xqWoUs5BM5uqtEbLWLzDTo/F+YJpcrJJUTnn2fyj2L/KMwXpuIOZ8f9DV3rYJt2BCrfXR3SYuLO5l9A2W8U7B8A0j8pKVZmbsVzkQYEobnnoVVd1TtS2tPhmLkllzm+s18+U17qzh8UZUhkuRzH5K0bHq+4XJCezKPASlw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(13018025)(13015025)(13023025)(13017025)(13024025)(3002001)(10201501046)(6055026);SRVR:CY1PR0301MB1977;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB1977; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1977;4:E1JlzpC61PxpbxRu/yRJu69qnw5/rVBTsyhpIVMuoxVZPbzKNrXuaP9lKK/nrJanOQhGhwFJFrcicPCseBXEj/SQ6o2lR5vdHXuI49srAogIBOyx7A5sR2ObOzYFWm80e1zoGDf/QJEN88vuzByV/31NfuA1i4Emzs2pXjd7SDrSTnS+/Olc14qJYUSi9fm66hDSGCP89UREYUxazVHUrnLKS8o1Y61vbSJ2oKGKl9Bmfxvq1eboExblAYf11gcpUdv/p5ioQFTfkbNKBbTUC8BAlcVbaByB7oXwNmazOvgdePYnq6cVCJviAsBQIWZrzSi5CS3oRxY7lqyATMn6MIGxPN2Q+zG2T1+Z5RXQhKT/7QhHGiuVi9LWRW/h1ZG828uUvl7ntHIv6b/yY+K22MUo4+4jIjJcuOYFqJkoW+vde+Ijo1XbFZlKgiIAG6c9EbMahKDB8jcCXkj4i1+wwGUgtHjG/bKZTR+1K1UFj30Q8f62XjT6ZsRs79oo4+7uTuvJOFjrD9JCSH7mCAHfxgAWsuHnhdTgcQPM/u6xjYg= X-Forefront-PRVS: 0038DE95A2 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR0301MB1977;23:wKPFjILqBJWz1tINHI4cSYlIiQyHrRWHhJsess1?= =?us-ascii?Q?YGWgyVsRAFYCbXxYV4dO7c4JOrfcgeP4oFcIkI6i9/REJOHt7NWBXQ6qRKSS?= =?us-ascii?Q?+COSdIBUqkqIWvpItodYJLuZkQA9YYVgUbhJUGyR9QK2X9l+Y9IVWirnHbNY?= =?us-ascii?Q?0/BccknQTa5dPsUhgi0WcwK9OcssKqbeAI/vPoVU8FdIE/gTgi03QQw1Nw7f?= =?us-ascii?Q?cdzFHkfvRS51OwX22bN5eI0CQrNZK6tSwX/y+Qsqn7PhPMrR/W4bkfmoaP+k?= =?us-ascii?Q?lO+qci5ftTZkk0Di5ji2xPJ8HSXt4tE0gThpN2gKTyBpgZAktrvXJkmNyezC?= =?us-ascii?Q?UWeudwBC+rL0NqLvTotchWnrBZFGmeVI8JAXCWzVm4DOBJfa0STjpYSSi86Z?= =?us-ascii?Q?8khVJBYtu/z5nSSIbL7UDLb9AuxGMeijia3b7s0m0ug8jvyLX21AZhRqf9M8?= =?us-ascii?Q?JudRiT8rWaEm7CIe1eYPH5dxaYXFNxR9zB1bMofsFfxQG+SyBuzs+pH5KuoC?= =?us-ascii?Q?OG5aLHShvYOhTo3/LNdT4S2fmXA+Gvhvt7E4Qy7X9Go7Ey/aJ1QUOELzu9CA?= =?us-ascii?Q?oi11gFDriX3VlQewsthUJ9Wof/OxJEtlTbjtBsXtTf/0ezh0doT6t7zIxCFe?= =?us-ascii?Q?j9d6DQ/WmyoawqcmUeYQjlZBVTMpcISxZKqyhXZ5JmH4CHHXkLiFGeX2jVEM?= =?us-ascii?Q?QPH+L9+Yf9rzX7/vKF8cHBkLCZ32g63eUuCD6gpz5MpM0j4dI6VcEqAIc07U?= =?us-ascii?Q?jhS7DiMWG7ur6Mxiso0cDy7uRfqYM4sC2tczWXXNqIvcFbnT1Csawz6/S7KK?= =?us-ascii?Q?RneAsfQEW//oPihnNwzhsbEfy4L8Zmssu60rF3/HLsCcrmKDFzWIEhasMxFs?= =?us-ascii?Q?6P3fl8eXudh3XuqNue7ljz2VLKRWDhTqLxWh27bP5Q/YrXwxMNSZFxWPtF0U?= =?us-ascii?Q?ZrARwCEcqF0vd8l5U1R/UUlUhFuKJ250hfOLNrAEsnCXtPWWKsQa8c5MW/9g?= =?us-ascii?Q?ptqjKsXYyhVX/xX0YGbREqhe7+bxT0VpMA2L/7py1eYJlFAJTRAkjVSKp9Oq?= =?us-ascii?Q?oeIGis3OdORNetICzGjPH59uIUQJpCNss3+RN9tp/Q/2zpfgzUVrjuDDUiiY?= =?us-ascii?Q?lJaqzDZjJcpk=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1977;6:44thn5335PfThIY1DenJhiYANTXqsFgqdc49THZySYUXkziz7tLShGECv1u1amExN8LTzT9/znO/1tqX2t7kY/fC6fdVWkrjlaAtdA6mrFVuRcRNFLDi/RTOei40rCCJcbDYCcOp9A/wZm6twBv3Gk90hxb+4nGcdMjRG9Zjcg9ReX0lQ6gvtS7w33zOhqv731FYlfWqg+gmSFvPiSnC5xrMj3kR5t/1YOekrNzNVbwvUNbcM2otCBRj+5PTMFsVTXR/NWhoXLHeMgbKD8OCI+H8FnBsPZ8CHjagsyLytYNCnGRgDA7Mu3AORybKsuJH8RE11GgE1E0VWrvpudsbXg==;5:DZBEugwZR2fPbg16wz4Fo6K4NYKU/t6bspNtsgjvEIdRdy4w5newR6MMUxY1AbYyxcuXvu8FMbX3wUL7Gybp+ehimvjhGrUdzey56AiRfuDErP2oZ+McBmHLbu11H5uOean8CaXdbS0od0lojcqRTA==;24:xyc/gL8NsScgjXipwLYve91dS8yZCr4ASKSPvqoICoIsw+rSXm4el3Ng7lo0bcc42VpLa+ReMCtJ+mXasvQ9p8kEaad7GtCDy/QvCCC2VNY=;7:qnVVdAcqpQbKz/yBKUjeasBhFcRAWv2BbnpkQHQVq09dN2zpq3ftQCNTW/Yg/9TKGTptKqY73i4SR85NUGwONgB+yOGNBnMWaunvQDkbAwpafp4pdH/0KfmqAZ13za7DWAvls7FtZZHK5KtaedRF4mXCVBJq2YCzRruKRP1vhdpeQ5kAqZqOYIceJuuCe6M2qrrtnPdFrQhzQUc0KMxQ07QPCSbJdtBOiq5bd9Kw06AGS/hApGsFXxovWVzH+w1O SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2016 07:49:55.7535 (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: CY1PR0301MB1977 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yunhui Cui Add some lut_tables to support quad mode for flash n25q128 on the board ls1021a-twr and solve flash Spansion and Micron command conflict. In switch {}, The value of command SPINOR_OP_RD_EVCR and SPINOR_OP_SPANSION_RDAR is the same. They have to share the same seq_id: SEQID_RDAR_OR_RD_EVCR. Signed-off-by: Yunhui Cui --- drivers/mtd/spi-nor/fsl-quadspi.c | 47 ++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/drivers/mtd/spi-nor/fsl-quadspi.c b/drivers/mtd/spi-nor/fsl-quadspi.c index 57eed3c..f9a7d4b 100644 --- a/drivers/mtd/spi-nor/fsl-quadspi.c +++ b/drivers/mtd/spi-nor/fsl-quadspi.c @@ -207,9 +207,9 @@ #define SEQID_RDCR 9 #define SEQID_EN4B 10 #define SEQID_BRWR 11 -#define SEQID_RDAR 12 +#define SEQID_RDAR_OR_RD_EVCR 12 #define SEQID_WRAR 13 - +#define SEQID_WD_EVCR 14 #define QUADSPI_MIN_IOMAP SZ_4M @@ -393,6 +393,7 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) int rxfifo = q->devtype_data->rxfifo; u32 lut_base; int i; + const struct fsl_qspi_devtype_data *devtype_data = q->devtype_data; struct spi_nor *nor = &q->nor[0]; u8 addrlen = (nor->addr_width == 3) ? ADDR24BIT : ADDR32BIT; @@ -489,16 +490,26 @@ 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. + * Flash Micron and Spansion command confilict + * use the same value 0x65. But it indicates different meaning. */ - 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)); + lut_base = SEQID_RDAR_OR_RD_EVCR * 4; + if (devtype_data->devtype == FSL_QUADSPI_LS2080A) { + /* + * Read any device register. + * Used for Spansion S25FS-S family flash only. + */ + 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)); + } else { + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_RD_EVCR), + base + QUADSPI_LUT(lut_base)); + } /* * Write any device register. @@ -511,6 +522,11 @@ static void fsl_qspi_init_lut(struct fsl_qspi *q) qspi_writel(q, LUT0(FSL_WRITE, PAD1, 1), base + QUADSPI_LUT(lut_base + 1)); + /* Write EVCR register */ + lut_base = SEQID_WD_EVCR * 4; + qspi_writel(q, LUT0(CMD, PAD1, SPINOR_OP_WD_EVCR), + base + QUADSPI_LUT(lut_base)); + fsl_qspi_lock_lut(q); } @@ -523,8 +539,15 @@ static int fsl_qspi_get_seqid(struct fsl_qspi *q, u8 cmd) case SPINOR_OP_READ_FAST: case SPINOR_OP_READ4_FAST: return SEQID_READ; + /* + * Spansion & Micron use the same command value 0x65 + * Spansion: SPINOR_OP_SPANSION_RDAR, read any register. + * Micron: SPINOR_OP_RD_EVCR, + * read enhanced volatile configuration register. + * case SPINOR_OP_RD_EVCR: + */ case SPINOR_OP_SPANSION_RDAR: - return SEQID_RDAR; + return SEQID_RDAR_OR_RD_EVCR; case SPINOR_OP_SPANSION_WRAR: return SEQID_WRAR; case SPINOR_OP_WREN: @@ -550,6 +573,8 @@ static int fsl_qspi_get_seqid(struct fsl_qspi *q, u8 cmd) return SEQID_EN4B; case SPINOR_OP_BRWR: return SEQID_BRWR; + case SPINOR_OP_WD_EVCR: + return SEQID_WD_EVCR; default: if (cmd == q->nor[0].erase_opcode) return SEQID_SE; -- 2.1.0.27.g96db324