From patchwork Fri Jan 22 10:58:27 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhiqiang Hou X-Patchwork-Id: 8089201 Return-Path: X-Original-To: patchwork-linux-spi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 48519BEEE5 for ; Fri, 22 Jan 2016 11:22:24 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 2CBFE2038A for ; Fri, 22 Jan 2016 11:22:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1854E202F0 for ; Fri, 22 Jan 2016 11:22:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752730AbcAVLWV (ORCPT ); Fri, 22 Jan 2016 06:22:21 -0500 Received: from mail-bn1bon0141.outbound.protection.outlook.com ([157.56.111.141]:56576 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752561AbcAVLWU (ORCPT ); Fri, 22 Jan 2016 06:22:20 -0500 X-Greylist: delayed 899 seconds by postgrey-1.27 at vger.kernel.org; Fri, 22 Jan 2016 06:22:20 EST Received: from BLUPR0301CA0038.namprd03.prod.outlook.com (10.162.113.176) by BLUPR03MB312.namprd03.prod.outlook.com (10.141.48.28) with Microsoft SMTP Server (TLS) id 15.1.365.19; Fri, 22 Jan 2016 11:07:15 +0000 Received: from BN1BFFO11FD038.protection.gbl (2a01:111:f400:7c10::1:116) by BLUPR0301CA0038.outlook.office365.com (2a01:111:e400:5259::48) with Microsoft SMTP Server (TLS) id 15.1.390.13 via Frontend Transport; Fri, 22 Jan 2016 11:07:15 +0000 Authentication-Results: spf=permerror (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; Received-SPF: PermError (protection.outlook.com: domain of freescale.com used an invalid SPF mechanism) 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.355.15 via Frontend Transport; Fri, 22 Jan 2016 11:07:12 +0000 Received: from titan.ap.freescale.net ([10.192.208.233]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id u0MB73QU025111; Fri, 22 Jan 2016 04:07:08 -0700 From: Zhiqiang Hou To: , CC: , , , , Hou Zhiqiang Subject: [PATCH 2/2] spi/fsl-espi: Remove the address conversion operation Date: Fri, 22 Jan 2016 18:58:27 +0800 Message-ID: <1453460307-9768-2-git-send-email-Zhiqiang.Hou@freescale.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1453460307-9768-1-git-send-email-Zhiqiang.Hou@freescale.com> References: <1453460307-9768-1-git-send-email-Zhiqiang.Hou@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD038; 1:/VANvBo/gmwO3X7XS/BX70GOk2LhDvo3xYyL+KkprOrX8Yfi4UhsL1ljZ+0uBMIAFxmyE0a+5g3uU/jgkBBTNTE7U61ViOqYhKJTdgczUV6QvSdyCrx8QDgxJr/sf0r1RjZ8UsAnHRMEyrvcscfDSeLMv9KJaibd6ZdNDMA2eUJXOQApGzh18ezzwIG3Rvs2198fr84bszsnHEsy2HtG2bIU3GMtMOMO8LLSBmTAVi2kS9JiZBpXyl2pMk1qToabM9mm813GYfiR2pq/ybaUwGpdfMheFwF2/ZKeh/hN0g4wpb+/ucDZ1T2Ib/G1KAxY5nwlxPCweguHOK69IgKcuAG7f1Cjrkvr+ad8kRz0K6CN3MMreVcAns9bqDHYWP+pvIcF7/VZA//IQ6d92KLjwzqzAIT71Ac5I8TUsOl3xu7PFgR4m2GfsFb+5s2nd+FILaG5s4c3TMGfkTs5JZ0O9AH8IqjOhFoCPxMfO6auvQE= X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(448002)(3190300001)(199003)(189002)(19580395003)(2950100001)(107886002)(50466002)(4001430100002)(48376002)(15975445007)(586003)(5001770100001)(4326007)(5001960100002)(11100500001)(50986999)(106466001)(87936001)(77096005)(47776003)(551934003)(97736004)(92566002)(5008740100001)(86362001)(50226001)(229853001)(81156007)(104016004)(85326001)(575784001)(36756003)(76176999)(2906002)(1220700001)(6806005)(19580405001)(189998001)(1096002)(5003940100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BLUPR03MB312; H:tx30smr01.am.freescale.net; FPR:; SPF:PermError; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 438a5139-7356-4054-edf8-08d3231c2f24 X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB312; 2:Kw+3hgUc5LDCvKjjQIimu7idlffGYmYbYPp5sEicW7kNUBvhSUAeNGScXQg6YJ8kah/rU+k23TzrGshvan6lyRS0SAl4vGlK4SnLYnY8jxliDe3QDHnl5LMRuFiZjKtrRhAnO8OKHbv07fE8E6x2qcysl0T/jKSY47qWj1Pl6f7b3ixtdtFFWWOt64Q74JY0; 3:DJr2uvHjmtJ+ZBimntOU1hfjdS8fxBZFuSwLfIbMqeWBOxk9PbkRncPnwS+kmo3quI7W+YUpz9lyBqSpaiVsDBPmxByKjOW9WxefE1B/gUR9v0mQ5gKUV3GaidEqjIgoKnnngUy8QOaYynyHmtY/2FR2Vm8F0I1oFkaQKxwJnWYOLBDLMYYrY2Hds2PyqFRGo1LL5z8xjZD1+4HSzSb8fxfdox+Rn/sGmS48BjIhXNo=; 25:xZ6W5yQ8TknRf3q9RFPuyj2GU4Xfp1+mcXEOnso1up3WGGj3wBJsqHFsFKVQzD9bkhZtHU5cRiIsWbX6zd0Lb6RaJlHhliNwYCJnUBq58G64wA1pKki/CKS6RIup5JXpCHgT7znh+sSSDwm1v7eLMNAXaSk1iIUWoB8j4VqfdEmQB+Wk9MSLpHOj+y600jvuYuevR+XMqW7hX1d/pvzDxNmxOKQpddcyXoB52R5t1Punw5WiSQ3qy4StmQRBjmon X-Exchange-Antispam-Report-Test: UriScan:; BCL:0; PCL:0; RULEID:; SRVR:BLUPR03MB312; UriScan:(101931422205132); X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB312; 20:/grbfW+hj6o5fbUlZNJujKdT0r2lBzbRtmhg1hwowbBvQwkZRt5HOKgIqj3gKYva/VQrrZa/S/AYX4d4nXBqTEOmElozvaOuO3MKCnH3SAq02/31OWoO8FAivi0gy+QQTO/8PDqATbdvRHzPyzZKaUJQSn2hri2mJtyi1VJpzgq+gbJQ6k0G7ii4L1/mJKvGTrCmPhIR7IhsyG7okTG90ra4EnYDtXu02m02k71joUVh1B/QVlrcPOgqeV+FaH1yRrXijw3+AvoQA3dBuIni95ED+oEuWOe+AVn0YmHPZ9WmHAElV/duHh7rEeU1R/uJTIcxBZwlBPAALYXGefQyE3jlOoW3vCY3Lw/3OOC8x4LCYBJ9X+PCjn2sBkU32w0KtXi9TgHptpfLsLFSB0kU2Q1W/fXGWkgxZRYL+wfad7IAy7hOx6NC6wIZw9ypbuni X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(13023025)(13018025)(13015025)(13017025)(13024025)(520078)(8121501046)(5005006)(3002001)(10201501046); SRVR:BLUPR03MB312; BCL:0; PCL:0; RULEID:; SRVR:BLUPR03MB312; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB312; 4:QidHjYGslMlv9GUrKKMRe3mrFN2j0e5UGAKsO496WYXMDNORdFXi7ucENPZvr0s2rloLWh527r+sneFFxN15Q09PFWDJEEuvmDEalVzfc2IzjU5GPfUgm247tnxOIj7SlYABYsQHdvPtQ/BOc/i+I6ogMw0rZgmb26aUKFfij0mQBqgrPb5A5+V6ZPrtGxfi2r7rAPm05tGCSZ0ivYuYyDOz9X7iELjUHDtLI4fmBZs4ksfOVxedB1NUdJEiITa6jFce0OOMFaR2BAafX9J8YgqIN/VeDY5hoGvrHljkVnhKYu0+EZKSyq0NmZ8qoABKCuTjaf7Gokpxy11/DKJSY5rtL1W+8DztRnCOA68WnI0lUUk82tfmp5s8r4CsJVwwmY6NYKHTTMhE70NF2U/a4bI7Z7KIu6Q/Rwbr8LUgjG3ytEyyshkF0wiDjUNFhpGDi8jAqeMzHo6wfINITF3Kp6n5fjdDZIphZEDR8qN2l3JeaWk0TUFGkSEWkdqmn4HO+xYb//Ex6wdtgqGQwpD94Q== X-Forefront-PRVS: 08296C9B35 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR03MB312; 23:53rDKEQKtIlE4djKlzpBNhgqK1EPvWRttS7SSIhTut?= =?us-ascii?Q?JhkmxNaiesUSCtMHlwiGAyKqmccAeFzkwQOPl3ig5Jw3YdDld3uDDsHyhu0D?= =?us-ascii?Q?34rlEi/M2TSKGGiDeOVG911pztMitQfSWR+WhDyXPnHJadr0wqqrAgoa1JvP?= =?us-ascii?Q?LCjBtFiEDcTi7CNIXjw3C4Y4eZarPtrdj6W07GhQ/tVvVVTcTmcSq/CLZFFg?= =?us-ascii?Q?XPAxHOCxSukDL7agYe5lIrdzLNCr47RDvbuVL2hOXQQgOFms736J7D5WCZ95?= =?us-ascii?Q?/zvhasgHjGEfAv8J9t0ws8R8DYCFvIlGJI02pUBlu3Yt6gHz1nPh9cNHQt24?= =?us-ascii?Q?sWCZXSWNcFDBO66z1lD5B4EZuFOs9NLwdk7FyPxo3eHLtFE11kIQxkMmEDCA?= =?us-ascii?Q?8CBpZ8gAYhRVAcVtvrJPz+vMkG38TUtKmjnqw4FWmw/H2q+nxgcltalCHyTu?= =?us-ascii?Q?8n8GgAFUbsDEYwMxhXMKzsV+STSZ311w0+TuyllV2uQfC7Vy0kK0ckdxlP0Z?= =?us-ascii?Q?nVSsOcyJUQkvLDVAWLgvGq4ci0FuqH8aCFpEyOtaS9AcDUOY1d93QB0czY/7?= =?us-ascii?Q?gz5kNDjzSGvqmgzBW7rols3XK7es9aac+/Sblb4hbr2gYtWMFyVrUJetNQiN?= =?us-ascii?Q?piKyEhq+6xfRDXmUW9zPQDiuA6ThPrvEo5AmX6G11Pebq8AzuhdkHAsnrzwc?= =?us-ascii?Q?FaRBZTh6K4CaFQXj1Ot2NFSW/KXLl1Wt76oc53LjyoMkID8DYDOBl4pHiKdu?= =?us-ascii?Q?54Xoap+4Vp/d112+K3+5wGZtBydSD2X8QFME+mmaznet9DzbMKeAIDthfkyT?= =?us-ascii?Q?IZtmnCxIMJbfJBIvm8ExaX07v2nF5xtY8nXMWusxJgBGiPP4dQfU1BoVhT6n?= =?us-ascii?Q?jUlrFHGI5EMAES2N/6K6Ny0iEtY3oniWP2PDjCcTqEdDGJna/62w9GwiRxRY?= =?us-ascii?Q?x5HOwwGPtPMgZ/Az5iP4jjLr3XjQVLjFOZowrfLuAmbFyJXCbwnA+nnUS82t?= =?us-ascii?Q?fTYg4DX9d12jtZVwLI5ooIpMRu5yLhw2r3fHahZGYrjS8hwwHmBMuO4oaeJV?= =?us-ascii?Q?5PJp+CUcxv/crandHrHbHMvyTRq07S8kBcTHMa6Nfz8lB5ovZZbolulQYF/Q?= =?us-ascii?Q?p4UP+GOOhRVJHWUw4spHLEnvR+fRJDy9GNWDa7xkar6W55wBagrQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB312; 5:yEYZiRWgpX0lL3HoNsBW3kbDcnQDcchYCts2/xTcm66Y/ynMX0WuyrPTbAwhl9iWwtedEnkLDJ1A2IGzOcMH2wm0Fo0pgkOHexYDwmCwzDXusS62nJL8fHLrwrXbfLC86/JGDiIrWJg8JHD+i47W3A==; 24:hzPbjD2BgGfbRe2WReYE86N+VQH8vJhZCx7bqZoec7PMztuzk1QOxCprbJHQrKDl7rl6vAGIf73tDzf+wYsgpUATI8Uyy+Dl3wzIdBsLJmU= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jan 2016 11:07:12.0013 (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: BLUPR03MB312 Sender: linux-spi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Hou Zhiqiang The eSPI bus driver should not touch the protocol layer drivers' operations. It makes the eSPI driver isn't compatiable with devices except 3-Byte addressing SPI flash. So, remove the address conversion operations to make it compatible for most SPI interface devices. The eSPI controller is able to transfer maxminum 64KiB each time. If the transaction length exceed the limited length, the eSPI controller driver will add the address by length of the last time transferred with assuming that the SPI flash address width is 3 Bytes. With this patch, if the transaction length exceed the limited length, it will truncate the transaction to max-length and return the actual length transferred. Signed-off-by: Hou Zhiqiang --- Tested on T1042D4RDB. This patch depend on patchset: http://patchwork.ozlabs.org/patch/551304/ http://patchwork.ozlabs.org/patch/551308/ http://patchwork.ozlabs.org/patch/551305/ http://patchwork.ozlabs.org/patch/551306/ http://patchwork.ozlabs.org/patch/551309/ http://patchwork.ozlabs.org/patch/551307/ http://patchwork.ozlabs.org/patch/551310/ http://patchwork.ozlabs.org/patch/551311/ and patch: http://patchwork.ozlabs.org/patch/571581/ drivers/spi/spi-fsl-espi.c | 84 ++++++++++++---------------------------------- 1 file changed, 21 insertions(+), 63 deletions(-) diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c index 7cb0c19..66ebb02 100644 --- a/drivers/spi/spi-fsl-espi.c +++ b/drivers/spi/spi-fsl-espi.c @@ -253,23 +253,6 @@ static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t) return mpc8xxx_spi->count; } -static inline void fsl_espi_addr2cmd(unsigned int addr, u8 *cmd) -{ - if (cmd) { - cmd[1] = (u8)(addr >> 16); - cmd[2] = (u8)(addr >> 8); - cmd[3] = (u8)(addr >> 0); - } -} - -static inline unsigned int fsl_espi_cmd2addr(u8 *cmd) -{ - if (cmd) - return cmd[1] << 16 | cmd[2] << 8 | cmd[3] << 0; - - return 0; -} - static void fsl_espi_do_trans(struct spi_message *m, struct fsl_espi_transfer *tr) { @@ -366,12 +349,9 @@ static void fsl_espi_rw_trans(struct spi_message *m, struct spi_transfer *t; u8 *local_buf; u8 *rx_buf = rx_buff; - unsigned int trans_len; - unsigned int addr; - unsigned int tx_only; - unsigned int rx_pos = 0; - unsigned int pos; - int i, loop; + unsigned int trans_len = total_len; + unsigned int tx_only = 0; + int i = 0; local_buf = kzalloc(SPCOM_TRANLEN_MAX, GFP_KERNEL); if (!local_buf) { @@ -379,51 +359,29 @@ static void fsl_espi_rw_trans(struct spi_message *m, return; } - for (pos = 0, loop = 0; pos < total_len; pos += trans_len, loop++) { - trans_len = total_len - pos; - - i = 0; - tx_only = 0; - list_for_each_entry(t, &m->transfers, transfer_list) { - if (t->tx_buf) { - memcpy(local_buf + i, t->tx_buf, t->len); - i += t->len; - if (!t->rx_buf) - tx_only += t->len; - } - } - - /* Add additional TX bytes to compensate SPCOM_TRANLEN_MAX */ - if (loop > 0) - trans_len += tx_only; - - if (trans_len > SPCOM_TRANLEN_MAX) - trans_len = SPCOM_TRANLEN_MAX; - - /* Update device offset */ - if (pos > 0) { - addr = fsl_espi_cmd2addr(local_buf); - addr += rx_pos; - fsl_espi_addr2cmd(addr, local_buf); + list_for_each_entry(t, &m->transfers, transfer_list) { + if (t->tx_buf) { + memcpy(local_buf + i, t->tx_buf, t->len); + i += t->len; + if (!t->rx_buf) + tx_only += t->len; } + } - espi_trans->len = trans_len; - espi_trans->tx_buf = local_buf; - espi_trans->rx_buf = local_buf; - fsl_espi_do_trans(m, espi_trans); + if (trans_len > SPCOM_TRANLEN_MAX) + trans_len = SPCOM_TRANLEN_MAX; - /* If there is at least one RX byte then copy it to rx_buf */ - if (tx_only < SPCOM_TRANLEN_MAX) - memcpy(rx_buf + rx_pos, espi_trans->rx_buf + tx_only, - trans_len - tx_only); + espi_trans->len = trans_len; + espi_trans->tx_buf = local_buf; + espi_trans->rx_buf = local_buf; + fsl_espi_do_trans(m, espi_trans); - rx_pos += trans_len - tx_only; + /* If there is at least one RX byte then copy it to rx_buf */ + if (tx_only < SPCOM_TRANLEN_MAX) + memcpy(rx_buf, espi_trans->rx_buf + tx_only, + trans_len - tx_only); - if (loop > 0) - espi_trans->actual_length += espi_trans->len - tx_only; - else - espi_trans->actual_length += espi_trans->len; - } + espi_trans->actual_length += espi_trans->len; kfree(local_buf); }