From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752606AbcADVQH (ORCPT ); Mon, 4 Jan 2016 16:16:07 -0500 Received: from mail-bl2on0142.outbound.protection.outlook.com ([65.55.169.142]:7238 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751523AbcADVQD (ORCPT ); Mon, 4 Jan 2016 16:16:03 -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; Date: Mon, 4 Jan 2016 15:02:24 -0600 From: Han Xu To: Yuan Yao CC: , , , , Subject: Re: [PATCH v2 4/4] mtd: spi-nor: fsl-quadspi: extend support for some special requerment. Message-ID: <20160104210223.GB27554@chopperman.am.freescale.net> References: <1450954821-7483-1-git-send-email-yao.yuan@freescale.com> <1450954821-7483-4-git-send-email-yao.yuan@freescale.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1450954821-7483-4-git-send-email-yao.yuan@freescale.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11OLC009;1:F3SrMO9mCezF5TYn2P1zU0tetCeQKkzOvRaFVACVV6CDM6EvPAo+/RVJ6bGvdRVin6oqXChM4hZ0jVQO8k58BR1/G4U8itgOaMiiNyIf23E9va7GfqkqzW6+TWSqcRMKOmAM9vCFwdyWQUBwwwViq+chllR/df/ZouaKIEOymVBdo+90JiPfJIlIx/47XXnnpqPAD9DFxIIkcOivbjCzE+UbXzZKNHNgp/AWb6NgyDDjKJKNb7DNUBVJKcgagKu6S9lsX6gx2H2OnVdRm7uiPreGxv1uHlcEwY5T4VtVf+k7NoAIYWmfWfP9oe3k3g12+N1EWQ/aGDaRJUdF8hK8TwfGkj1RiNXFuUMwRF/xo6V+a1XuIDqBwu57rmRd6GZvi8QS0CQPWK3/doWTHGKH1w== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(448002)(24454002)(199003)(189002)(106466001)(110136002)(92566002)(189998001)(33656002)(6806005)(86362001)(19580395003)(54356999)(19580405001)(50986999)(83506001)(81156007)(97756001)(4001450100002)(5003600100002)(87936001)(104016004)(85326001)(50466002)(5001960100002)(76176999)(1096002)(2950100001)(1220700001)(11100500001)(4326007)(5008740100001)(23726003)(77096005)(4001350100001)(97736004)(586003)(46406003)(47776003)(1076002)(7059030);DIR:OUT;SFP:1102;SCL:1;SRVR:BL2PR03MB132;H:tx30smr01.am.freescale.net;FPR:;SPF:PermError;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2PR03MB132;2:98Mkhq1qMC/kn1lJ/3v+vKbcgVCmJrGuq1l7aGYpFksVYO4hmb5HYTag/+BdFxi4PaC7H6Fcbbbz/BjxJnWJqlg+TmyMt5mbZ4LL+ZZG5dgCyKjLLqNpZVoh5cEuUYy+m73ThliSjdZKbldxCxxK7w==;3:Eb28fYGq9hMEY4ABqCTV4W6Lcj3qC/pSnPx4DsG8g/2xsvArFCCEjzYQu7NDuZPWRK+ejWQo9+gkNxLWM/LRLzigdyHmrIclXvs9uq2XLz7NZeD9aU+aWRK+nW2O/MI52yzKeTK3CVN77v0/MR/bttcllBB+IGoh9UplOZMT1q//DTPS4CJSMWD6W3LPTv1PGAT3uBfyiEL9x2DaBs5MO5wTlR81Xqql1L/0ZdQLhDo=;25:7amYz/bVAOHlsvC2CD0F9UjaqlDatRDddM5usJSuHCam9NuR9hWL5U2DiodWHNgOChyOkKawj/F8n+NwmBdTUeAyGDDJnulGUvwdq4KzHX97DFhp8jEEXrAm/6tM6DBru2D3vPO+2Sq2Ogs2Okd18E9t0CWk95ofeWlRxwmBCmmJULxQ8QNOtShi2112WgAhmvfH60WaF4Pmdx4j6onvE/TElbqwwF82datKZ3B410fMWNhqG/BcSeAlPNxTWMJesmCe56SnMad48fvW7qmkBw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BL2PR03MB132; X-Microsoft-Exchange-Diagnostics: 1;BL2PR03MB132;20:6CgH53BwP+8v+DDkWg4RE5r8ObubfSxd8cFw2w7sL0MXJiiM6t0R4t33kg/gSFMrrNFx1p9AnTGQR59qU5aag86ujXp+6jcogKlG9FTMUO7O8YlS0bFKQNqs4+3kEALQnJrU3YZwS65XSLuR/R7o65hdjwV/ptRAQ2N1Pnb7tS8gU58eOyGHIVXvRA6huojg7Kw3v0qX/tCVuJOwILvtpgdKjyO625VmmfjKuL4maYNBKXdGM/CY3h+Xk0wy/VjrPKclsUTuEkmVDiLpm3sNND4dPfe+qShb6gPzHmZOmlpTD5c0kVMdBR6x5aDNjKQU48NC1iiSpuVWixUSU2Kh5qWs+5g0eP5evAmF1HHQz1Q=;4:zjeiI1FpFqnzdi1OWZtSelAKct9jQYXCmQ2GoSNm3RSQYRk4fIUYl7/q57BzNc7Oqye/FjbxbniSUaUAm31yUZc4eh7ZpLLf8ef6Ltp7aDG+qCrL7FwfSDnf5dXyeXMC+f6MnR6X3saBYzIQk9lyYpt/9iJp4UvDJiS+PQzafo/vjjVCQ5ZlzSHEtbwDVXGcnOa8wjnPGzNX920jJf71x5ztYvAbMqIXVuGRn+yU5kgRXGmK9PkeAA0xy+FmQJUhhNCn/8wFuQgyeuyyvtKghQGuim4H5EcoPe0cMjdduvDJXXiBZ5nLIsEjW/qfLvNNEl4FRtyazP75qUNNnAdRZbnBnPsXn3TIK8ri/GFTJX/8ALGKKTNVDW89fiEwheeMgkuZnzwrOQu+vawxpweuoYFRU5sGM3OIsiFOgLwTBpkbHNqEgwP5uLXfvxg9gsia 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)(8121501046)(520078)(3002001)(10201501046);SRVR:BL2PR03MB132;BCL:0;PCL:0;RULEID:;SRVR:BL2PR03MB132; X-Forefront-PRVS: 08118EFC2B X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BL2PR03MB132;23:G8Tdy2cN8U3wQ2ye5hHx8ECv1GK4tT6aD7+1WUm0pH?= =?us-ascii?Q?XRzSogIIg8uTv2Q1C4sPbmSZ2/lsgu4JTwoQ4vJCAvVENZWp0k16GtdPXNp9?= =?us-ascii?Q?+uSiUC5JazIT01FU92qjCs/w1qFQYwuvHhoKr/cuZD0ipFxxeJxprVVjNRhl?= =?us-ascii?Q?WA7dpv+HBOMfTtvgt3wHO3dINLpqif9S51dUtacVGgoEi2euvyB9pk20B/8z?= =?us-ascii?Q?OQ/HlEr2BEeAtVUsu8hJfrAw6Yb692WZpfS9NNxBEXiRcp9BOnzgCMfCXNHY?= =?us-ascii?Q?e8M+ONOMYmzFfUwDjPm6xKUyDVuSqwCeBrtzN+Ve3d2rnCwJCcEcwwSx0KBx?= =?us-ascii?Q?LSjBFxq/XIUtD+IASsvo/58hrWsaorHrVSZd3J+ENoD1b9RspZDbdP4ThtlR?= =?us-ascii?Q?AwJlY20DfMbUkzhqAHtUE/Ryv2F8T9LN1C6YunThnp6v7ki/gTkIcxLj0n1M?= =?us-ascii?Q?UwA/EbLqgh7KlFIPwkY2TogXd6lXTez89/FW8sFTFSz326RSXAqshfuKbnFk?= =?us-ascii?Q?lxgOPd18BYSPUfJ0THgtc4wJmXN4q+TXEvwaPzMTKf/8o3YGzujGMK/Gu1MZ?= =?us-ascii?Q?DL/zcbRdwZ4/0Q5kJDLmW/mKkxfhOheMepxneK7Z5a0h/3sRNX1Lq4MADsP3?= =?us-ascii?Q?nHDSRevCGRz2FL+VmAk5EMjUqUK4ESAdeuUpkljYFq5Wk5BuC77C7ud6y/8K?= =?us-ascii?Q?orn/xcuv5bNi4A3eGbWSeEsYx4ufzVygYcxtxfK6HvGXsnfh5HjrTL60t/MA?= =?us-ascii?Q?MJO+3thH9d+4u4WFjSIzhLCJLFEK8EN7Hr409KpbX2yTnRWuPsxJ3T/3IIw1?= =?us-ascii?Q?DUgDg7K4rF3vSa64ez7YvJymZBDb3BL9LEEQwweYiaRkNdO69lEZaalkX+uC?= =?us-ascii?Q?uAw2EFsa1HoH4lj2Iqp+Q37i8gK1annP4RGICXEsZO5QMnGrZzCPZVDKBCsJ?= =?us-ascii?Q?8soWjqirwLY2yuKnxQstyq0xik9aCgRZSQg3rTbyDRwLKmOhvV8KT4S1yzpp?= =?us-ascii?Q?jSVgd8IdG4EVA0mD+E6UMNs3z4BGSBeiIz3B9dmQFUiiPJ47YAbh1MFs7Gvd?= =?us-ascii?Q?2g8ZcdZUj4NcJZAgT+/BasM6+XLz69vpFxrDd3y7dSbdj+SaeOFTUE4hEIVw?= =?us-ascii?Q?1g3td9wkfDGZK1wPmb3EpiHYjFdMqg?= X-Microsoft-Exchange-Diagnostics: 1;BL2PR03MB132;5:1E4kaFx68RMmOL8af8lT4QMk2rIhNSGxX64+gwvFhMymihO1Mlv9EbRQi8g3gepuyFR0i2JbsoF4EWpnWWKRryEtC65aEBaWLEZKUWOlD0RosXwSA2Fw9NReIuMlLID+WzPgQAbCKuSEHOs/Ynu6DQ==;24:gUsfdrr8012+fXke/Tmp+k4rM5D4BzKETel7f8VMBv34iECQdTMvQ88mp6FNaprv9Kb7FjozcwYXZBE87WgeGcGzVcOiX/y0UfHwDqzUyjQ= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jan 2016 21:15:59.4426 (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: BL2PR03MB132 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Dec 24, 2015 at 07:00:21PM +0800, Yuan Yao wrote: > Add extra info in LUT table to support some special requerments. > Spansion S25FS-S family flash need some special operations. What's the special requirement, detail it. > > 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); RADR or WRAR? This is hacking code, why need these two commands? > > 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 > -- Best Regards, Han "Allen" Xu