From patchwork Thu Aug 23 10:08:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jisheng Zhang X-Patchwork-Id: 10573689 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E86BA112E for ; Thu, 23 Aug 2018 10:11:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C9C2E2B956 for ; Thu, 23 Aug 2018 10:11:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BDE812B961; Thu, 23 Aug 2018 10:11:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED,DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 468592B956 for ; Thu, 23 Aug 2018 10:11:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AZ9zIe9UkHHrrQZL577V8ShesngLhq9Cc0adn1BjBcU=; b=uDq2sIQigwSq7Q q9iSCEuRVIGHhz1t6eQOw6358U2Iona4f9ySdksxKn+l03mLqdKWmG9LishTMyxz1/ljTLh84I+lW VqAnrACvHP1OMS4E43AhCEmLd4X4/1ziSV+W3ikqqPMmSIv+JxVdySbF4VkN2Zm5/1rVVKKUnudij S+NKTNpBHZ8SW+8oawT+8B4eW2FhfW1aScrjFIDkt6O85MO94PJSRFVj9ZECaboLJmPrjKSwtBJjR nTjjrYMQKpkkcJvN0PerTZ6ON+Hks1paely2RLVA4a44IP4nmU3SYlt7fTZuIupqxyCSrdedP/tI0 8S5W7LPWNgjJnvO/fWOQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1fsmaT-0003Fb-9M; Thu, 23 Aug 2018 10:11:33 +0000 Received: from mail-bn3nam01on0084.outbound.protection.outlook.com ([104.47.33.84] helo=NAM01-BN3-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fsmaQ-0003E8-25 for linux-arm-kernel@lists.infradead.org; Thu, 23 Aug 2018 10:11:31 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Synaptics.onmicrosoft.com; s=selector1-synaptics-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XHSZSuyjNGrT+Sf76Mxn24jsh+NJ/0VMIqAwG89hV98=; b=II0i/UJnI8SEJBqwXhHSdNTAFkADBNO3hn8Itwe1NPXycnktJ19KJhQYJJhSqVVqPhYXpDRYvW6KoYRvXGgUx/yva4rEU8l3cJDCojXaPRPSLgmFaen/gAn7pO9v3i+Nw1Vt34kRA/B87hEmUTkkCupZXmEb2ikJE1tasD/nx6E= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jisheng.Zhang@synaptics.com; Received: from xhacker.debian (124.74.246.114) by SN1PR0301MB1584.namprd03.prod.outlook.com (2a01:111:e400:5232::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1080.13; Thu, 23 Aug 2018 10:11:16 +0000 Date: Thu, 23 Aug 2018 18:08:22 +0800 From: Jisheng Zhang To: Adrian Hunter , Ulf Hansson Subject: [PATCH v4 2/3] mmc: sdhci: introduce adma_write_desc() hook to struct sdhci_ops Message-ID: <20180823180822.7e904f73@xhacker.debian> In-Reply-To: <20180823180549.78e508db@xhacker.debian> References: <20180823180549.78e508db@xhacker.debian> X-Mailer: Claws Mail 3.17.0 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-Originating-IP: [124.74.246.114] X-ClientProxiedBy: TYAPR01CA0166.jpnprd01.prod.outlook.com (2603:1096:404:7e::34) To SN1PR0301MB1584.namprd03.prod.outlook.com (2a01:111:e400:5232::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6a759829-6b39-4e1a-d4e1-08d608e0c41a X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:SN1PR0301MB1584; X-Microsoft-Exchange-Diagnostics: 1; SN1PR0301MB1584; 3:vtRkCvRmfvL/hYVEl9lJdTyq+HucFaH2UIMIkrQqrQ3r4v4sp1LpJ9VEyNbsTJ7XXpd3u9GAwoeRLXuPpwfRv4FxqX36C8bMKMKKWyWuUdBjpUuZkdqQiISMAf4zB59YQIFanWKCIaGYVT3SDgH2WBBOtCGL+Yx5UZoDnxOn/WidWZ+aZhgUBK9B1krztRTs7k5ER8432fAOtXYWILV2b+1KhF6px/pmp8WAtnG5t/hy1QiTgZxAaseImjaHuf+r; 25:thr29tHJonoA16VcoEzb8pmNEoKQ5CJtELj/eU+DHv9SXST77QfxSoMND1AE+UpbOWsAbqbauKjxV6mkURWuKiS10cTqt49QlQECoGcuX9NGU2yEts3ydj9XqRSLk1V+XMLFOQRI74KTG2+hvPCqEsDhtF66oM8m2SmdkrxELx9YtleB4+QfDOmuEhOTOEaH8KIIHa3LlKBIyfs6esQ029c7X6HjIoGYit09SlRfZIwoghGJEf7epwGcoULy8yATTRkBO6JNWO+ziz0yMV6pwqnDxUk5rAMK5UjKlAyfxye8WxmzAKNZTlQltH6ozfcFSwzLXEM8TeV/Jd2OO7zsFQ==; 31:A0bfOGHL/lECFWut0io8fWI04dzj597THxqShFTEzERuSK9YGuPP1VHsy4kPuiBU+bs9KOLBZGKoy2vSbsGiQVvqN3RnZRacCi54fVZqdbngAp860b9aEKOswqNjZWrKvwfESWG7RAgU0hMoZ1fv81pm/2q7JzaIM8QL3tes4Uw3CgQlW5a7Yqym4JYVlMZQhD44ZPSYefihnlMzYhdQShD0n9Qr9HGWB5oeRCfpsz4= X-MS-TrafficTypeDiagnostic: SN1PR0301MB1584: X-Microsoft-Exchange-Diagnostics: 1; SN1PR0301MB1584; 20:lNlGD9QkzpWSdVvNB2sYwKui2COfXXjRBdh01yHwMFJ9uNSgQbyE5LhbyLx5FgkL4Mq8znLhv3gVx5WKz3TD/WJ38LdXuujz+ROrkj/qAWYn1YPIbkQ/ZisVh+3RUvyjEJbrfNjT2gc2gTWWw2P6A+3B2BHKg/7PzBI1uTwikOyRIIgaoJ2/0P/IeVHdq7oifu9FCi/OjtfW/9EqEBvPqcVhn0vs6w8XCG37Fh5Sx9ZczHMH4H8Xd3EI5GSP2gHoXProD8sroah1aMrvPl3anr/JrPrMVMc4dJvXaDp6TlBi0eQFFCgTN4RcF6vWcm9/jUBlZSzyqPZmMp8wDJ90FKg8PO9+JVi/HYz+it4jNmfT1Tybg3jr9KT9YpbjnJiKDzpLI159riTW8NKyFTBomY4TFhuLSJzo0vufoDjTpGJRolhgwmGWNeU6I+DJf6S/PRmI3qQ2VYq+pEnM4AdtjUfauhZwQlxE82YDqfhxEsgeiH4Ls31jEIrveoBswRl9; 4:UisnWzMJfyp4aUnN6LI+I+dWPBLQ0REUKkBgxge4PQvGa1GFvNP2D5zY1Spbz5RMkZvRL4UZ7EEhM+6Eu+MXpK5vzyyCg4ZAI3BxIVxO2z+MUYOPMl/m5HJ8wIYWcFGRh263Cy9ZrhqdBRoHX5F/fM6BntsiEcq5N6qk1plFd06q/rdtuJMx1olwsEtX9SI225E55EzQYAkDjAZDCTRHyYXH1ERvbeiKSi7PWg1b+JjUTCho1aplrqL+P0JguMaYMKusgBNtEStHFEh3U6NX+Q== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(5005006)(8121501046)(3231311)(944501410)(52105095)(10201501046)(3002001)(93006095)(93001095)(149027)(150027)(6041310)(20161123564045)(20161123558120)(20161123560045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699016); SRVR:SN1PR0301MB1584; BCL:0; PCL:0; RULEID:; SRVR:SN1PR0301MB1584; X-Forefront-PRVS: 0773BB46AC X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(39860400002)(346002)(136003)(376002)(396003)(199004)(189003)(6116002)(33896004)(76176011)(68736007)(3846002)(23726003)(50466002)(2906002)(1076002)(50226002)(14444005)(305945005)(8936002)(106356001)(86362001)(25786009)(7696005)(52116002)(7736002)(97736004)(230700001)(81166006)(16526019)(316002)(6666003)(186003)(5660300001)(81156014)(956004)(47776003)(11346002)(9686003)(26005)(4326008)(386003)(6506007)(54906003)(105586002)(110136005)(8676002)(72206003)(478600001)(486006)(446003)(476003)(55016002)(66066001)(53936002)(39210200001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR0301MB1584; H:xhacker.debian; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: synaptics.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR0301MB1584; 23:q3shqjl0WNRsOm7UqLMxA6vHJs9TULO2xho0o28?= NSnMdJP4qOyDtABmfIFbELn+SxDOBI2wK8WT7TUJO7WUQWhtuBopVGR0pLccrY/hRoeO3vZ55yhA2Jnh2iuL4KU84z0mkENSf948cy0lvCFJLorM65eLA4txwLLM2aLWQYT9x9aRR6sTqJ20P+GKF3z0Web5cp//C2PJcDQSLX8I0mj9Nnc9OixaJ2Mx4iv2j5lDDwRQLTH0BJG2vJblioksnnBSKNiF72QjRI22Hi6YWfbnoOkVh5FZv5VBzPZ4P1AQSDlYfxucIbiE+GTaAqy7YODrDgUjWt9apvyyrbm0mYjVHqY0HV2coR0JIBm2QC+vwM/icPNH0a9xncBV8AK1ohREVQ9nyq0BbVsCVdAp+DZXFne+5DPE1ieT2KxcbFxcP4GuisrvENGS6Xj7bO3E4NvU96IOt6VYs7zYI2fVGFU2pXV+EzCdQc8d/pm8OocfwABw+sz4E5I7fnuWvIlwO0/UFiReSUlAvGe0ge1nLlwuKNLsNKd5LXUj0YAQ9JqFzn1pe91I54FaHW1CuQf5sBeytPMnsS4OFjsuqYEwKGimokGSatKx6YEeNf7hd0yxscdtWY/aDixVagnP0w2tpf8XODLVw1CIXEKmzPvvh6of3jQAWn34RnmOvonY34sXeTB20IF0IKuEAUas6n5rlWioxgWrgNxF+/IEcL6GHbafQsOA/o2fqWfXrCoyN+CR35uUNzdOtqDDmnahc1KlePLtC7PG6OxcuhrhU667UDTzGfvjy3nQdmI7mmH5NLvZ/UBBoFFyzjBPcG3F/lYVz11PnohwutNKMQy/yzadMCHZwKq0BMxbwdoY4CKk8kI0E+9GgxOCGRmXqqKX4pmAdNln3nYaZipwCPz3bECzQ8v8UzZcp5Um0Z0YMJtPbKnBYpQW3yyHsNrWgcvR2J7bw8IqGjY4uZOZ8SflEjffWRvg/79FmpdfaAmEo0336G/0D8mIucRxWMGFB2bXQu3GZo8cAeNWvoeN+3sLz2E3xFXe2QwH/oO+Cn+KpSQEu5NH2L0ynkQaql+MVkP69AZxHJV/Q8NfHz2iPhrxujnso2dbxvLPqVVs9IBGE5cb02KFJ3p5fgllxxZBgpvtmC/jX1/PfyVZZ7vglCCaNM7hWb2idoFOR9LGEclJFtR4c6wmnOlk5Sawj7cCVq9kufpO8cUBVu26r4B/9ZbmDGU8wRdJiBg6RnJyjKwkOp7UK3zgOhQQ5xLWjnfXqmVk80CRr X-Microsoft-Antispam-Message-Info: s80DVqHr9IJmdeLkcIPfYHTFBCMtKMRHEv1nXXObXZVFwHkdbapo/7vEULTopen3MLeP5neZqvDwFvBw6bSuGRAiQNYCH34WD/B77MpH8nIZvBdLL2mTM+MgDTjb8Ebtl9UIQktqKKx9WWqPHqocNj0Hmmejl423H6mPAYg0+mDcrG6OO0rKa3wfbZjSDYMwAD8MPvXt7l1ekyPBIBLO2FLDKrs3cG15ZTqBUU8fuEfe9MbRPsXqNihI+AmB+2lw3WRUAiQXsZb1FvCm5cj/OfNOu4D+WRCRR8Zy+3YTtUReu3MNcc3UwxViHfK0isigH2wFdITY0KkF/NgRejfA1N1nZwyZjL+xcoXTS0n8t88= X-Microsoft-Exchange-Diagnostics: 1; SN1PR0301MB1584; 6:+cXFhbb39SRQJZd729J5mWdt2krXN7X7eVAMm9prBBg85cTcrI/jU6dh/Z2vySbyWg6McggxWQLgpOtzXZfPGZgu6YtkXoCUtlW1e0xUSxGVMORy8r2EMNk2VNcO8IBBEhd6sAwHFV1r87VA/CdZTGeNAd3x70Mse/YMDScGuZSoJvbmouatSk/4iIwVRQseQ+neB1OBuC991yDvPQuxTLQPZtsYih7XPbo4npZfDY6/66vr+5C7gY58MW7wsZM+kuzVRItnl9U+V9UUftuJPCwJMNNq21NJmWQFVMiHUQwNXesZs+9cGoF/fK7WGUZzK4/aiftn7HqTz8pmE2+qMxMLt4G0NwKa3X1jfqyD1Sn9ohZS/zMW4WrsqSaDffCBjEL1e4y8KkGWk4lePFyVX7sK2SxBT+3oS+updHuOJbb/Fd5CpkM7UYSaEDycuFMT0azRpp3G3NKFmAxPkresMQ==; 5:FMy+3tQpU0Sipuutc99Tj/ifjGuZ/zOxOim103okZUTOWLj4Xlvb06JuEousgsPCXku09Ha+/Td3L+s+wEwmdxB1gcD8brIb1pB6Kia+5Tc4QW0h952CjrThyUhI8lj3VX7KcAVeiESXtUbPyIVgbxPdBIMYS4EjGUm2iklkJAw=; 7:8G1vtTEqorXc2dTzve+uUlPXKO9kvfVvvvaXp13HxzjydqZwaubLbjk7IZZaMtuijDrrBDMxA9q2MpdE4mdn+2/vg/Ly1EOiS6C5odQfgX/LE6AzyC/eVv+U+G/cH5/m3gaCmdW1TDW2Rs0AWU1GelawwVim3lzOBohPQUESashOfnRjwag9nA+wjm1LEALsx71lr3noWsc97SuDgK6stNbfvfwyvS+APnkaYsydH9TJcSrwXahDBd0aiD73tYdw SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: synaptics.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Aug 2018 10:11:16.1041 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6a759829-6b39-4e1a-d4e1-08d608e0c41a X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335d1fbc-2124-4173-9863-17e7051a2a0e X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR0301MB1584 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180823_031130_170639_8B628AF6 X-CRM114-Status: GOOD ( 10.69 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Add this hook so that it can be overridden with driver specific implementations. We also let the original sdhci_adma_write_desc() accept &desc so that the function can set its new value. Then export the function so that it could be reused by driver's specific implementations. Signed-off-by: Jisheng Zhang Acked-by: Adrian Hunter --- drivers/mmc/host/sdhci.c | 37 +++++++++++++++++++++++-------------- drivers/mmc/host/sdhci.h | 4 ++++ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 52ccf4644384..eb21d2db7f05 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -554,10 +554,10 @@ static void sdhci_kunmap_atomic(void *buffer, unsigned long *flags) local_irq_restore(*flags); } -static void sdhci_adma_write_desc(struct sdhci_host *host, void *desc, - dma_addr_t addr, int len, unsigned cmd) +void sdhci_adma_write_desc(struct sdhci_host *host, void **desc, + dma_addr_t addr, int len, unsigned int cmd) { - struct sdhci_adma2_64_desc *dma_desc = desc; + struct sdhci_adma2_64_desc *dma_desc = *desc; /* 32-bit and 64-bit descriptors have these members in same position */ dma_desc->cmd = cpu_to_le16(cmd); @@ -566,6 +566,19 @@ static void sdhci_adma_write_desc(struct sdhci_host *host, void *desc, if (host->flags & SDHCI_USE_64_BIT_DMA) dma_desc->addr_hi = cpu_to_le32((u64)addr >> 32); + + *desc += host->desc_sz; +} +EXPORT_SYMBOL_GPL(sdhci_adma_write_desc); + +static inline void __sdhci_adma_write_desc(struct sdhci_host *host, + void **desc, dma_addr_t addr, + int len, unsigned int cmd) +{ + if (host->ops->adma_write_desc) + host->ops->adma_write_desc(host, desc, addr, len, cmd); + + sdhci_adma_write_desc(host, desc, addr, len, cmd); } static void sdhci_adma_mark_end(void *desc) @@ -618,28 +631,24 @@ static void sdhci_adma_table_pre(struct sdhci_host *host, } /* tran, valid */ - sdhci_adma_write_desc(host, desc, align_addr, offset, - ADMA2_TRAN_VALID); + __sdhci_adma_write_desc(host, &desc, align_addr, + offset, ADMA2_TRAN_VALID); BUG_ON(offset > 65536); align += SDHCI_ADMA2_ALIGN; align_addr += SDHCI_ADMA2_ALIGN; - desc += host->desc_sz; - addr += offset; len -= offset; } BUG_ON(len > 65536); - if (len) { - /* tran, valid */ - sdhci_adma_write_desc(host, desc, addr, len, - ADMA2_TRAN_VALID); - desc += host->desc_sz; - } + /* tran, valid */ + if (len) + __sdhci_adma_write_desc(host, &desc, addr, len, + ADMA2_TRAN_VALID); /* * If this triggers then we have a calculation bug @@ -656,7 +665,7 @@ static void sdhci_adma_table_pre(struct sdhci_host *host, } } else { /* Add a terminating entry - nop, end, valid */ - sdhci_adma_write_desc(host, desc, 0, 0, ADMA2_NOP_END_VALID); + __sdhci_adma_write_desc(host, &desc, 0, 0, ADMA2_NOP_END_VALID); } } diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index 25bddd21de31..2115416f973a 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -606,6 +606,8 @@ struct sdhci_ops { void (*adma_workaround)(struct sdhci_host *host, u32 intmask); void (*card_event)(struct sdhci_host *host); void (*voltage_switch)(struct sdhci_host *host); + void (*adma_write_desc)(struct sdhci_host *host, void **desc, + dma_addr_t addr, int len, unsigned int cmd); }; #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS @@ -736,6 +738,8 @@ void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios); int sdhci_start_signal_voltage_switch(struct mmc_host *mmc, struct mmc_ios *ios); void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable); +void sdhci_adma_write_desc(struct sdhci_host *host, void **desc, + dma_addr_t addr, int len, unsigned int cmd); #ifdef CONFIG_PM int sdhci_suspend_host(struct sdhci_host *host);