From patchwork Mon Mar 27 07:49:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yangbo Lu X-Patchwork-Id: 9645501 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 75894602D6 for ; Mon, 27 Mar 2017 08:04:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6787E2815E for ; Mon, 27 Mar 2017 08:04:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5BE402832F; Mon, 27 Mar 2017 08:04:26 +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=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C5DF12815E for ; Mon, 27 Mar 2017 08:04:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751584AbdC0IEZ (ORCPT ); Mon, 27 Mar 2017 04:04:25 -0400 Received: from mail-by2nam01on0075.outbound.protection.outlook.com ([104.47.34.75]:8000 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751465AbdC0IEW (ORCPT ); Mon, 27 Mar 2017 04:04:22 -0400 Received: from BY2PR03CA046.namprd03.prod.outlook.com (10.141.249.19) by BY2PR03MB190.namprd03.prod.outlook.com (10.242.36.141) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.977.11; Mon, 27 Mar 2017 08:04:19 +0000 Received: from BN1AFFO11OLC004.protection.gbl (2a01:111:f400:7c10::184) by BY2PR03CA046.outlook.office365.com (2a01:111:e400:2c5d::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.991.14 via Frontend Transport; Mon, 27 Mar 2017 08:04:19 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11OLC004.mail.protection.outlook.com (10.58.53.75) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.977.7 via Frontend Transport; Mon, 27 Mar 2017 08:04:18 +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 v2R842kn024493; Mon, 27 Mar 2017 01:04:15 -0700 From: Yangbo Lu To: , , , , Adrian Hunter , Rob Herring , Mark Rutland , Catalin Marinas , Will Deacon CC: Xiaobo Xie , Yangbo Lu Subject: [v3, 3/7] mmc: sdhci-of-esdhc: add tuning support Date: Mon, 27 Mar 2017 15:49:38 +0800 Message-ID: <1490600982-5410-4-git-send-email-yangbo.lu@nxp.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1490600982-5410-1-git-send-email-yangbo.lu@nxp.com> References: <1490600982-5410-1-git-send-email-yangbo.lu@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131350754591999290; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39400400002)(39450400003)(39840400002)(39860400002)(39380400002)(39410400002)(39850400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(9170700003)(105606002)(8656002)(5660300001)(77096006)(76176999)(50986999)(104016004)(305945005)(189998001)(47776003)(81166006)(8676002)(4326008)(38730400002)(6666003)(2906002)(7416002)(33646002)(68736007)(50466002)(2950100002)(5003940100001)(356003)(36756003)(50226002)(53936002)(106466001)(8936002)(2201001)(54906002)(86362001)(85426001)(230783001)(48376002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR03MB190; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11OLC004; 1:czxBY5/wqy3snjdi4/wIkg8JqZHnIHRUCXHI5t5MSupgvjO4B1TJ/yya8VVhi6Ax0MjvaLuRuuOG/L1G4YqLrYIKouLl17dEpdOLMSo0L2tD/AncToybdZAhkZRvMBz0AnMbGiD02URd/kYVYyMxp/rzdVfaeOPcXOHn095+UhrKnlfp5T1PBy6xzXcJzLnb/05tUgoPHkfhc5J20M4f88726+vfCV3wkUjXyPbglOwWbQb997HfYqDXTcHvkJ11GMnY4kQfeSImkf4Lhjhh+eor3v7S8JTXVEY46VpofPDtD7eP39ZQz+92cdEXlHda0kXz4Mpuc9z7ejPKjy3+E1hueAKrjCxKnm7iMS7o+fqXpKo+u1VX2zaW80L/Sx6/lLwXhLdrk5jobgBPF3wzkz/1vk/1bgn3u9c0pqtjr+1keID+BsDLR31Z3q81DpkJ0BL6Xd+E+o8Uy2ea6mB3GqPQwuea+UKSlCzh0Y5Mw2K0rv//Iq7s9plghndXUzG4mtpNHdUVx8lwlGmpZWT/5+o6bWidJTadOe3eHnuUp5UFKiPRsKHUf6l36/RnLZB1lrrrg+THdF7GSEhqiDYDOKFm5TbdsKQsoUKCdHUIlxCqL4jKr4ml1QvIF/gPj4VpsgZelLu01Bx6PJgo6OUJBxRjy7NcBAZUs6f7icSiYixwfCQJCa8DvLmdjdFYikGUukKFfPNsSH1bcNcgAO1Rf9VPZDf8urk6C0PX2XaYhyC+86a2PabII+MWn2N3ozj5 MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: a077c346-5f2d-499a-23df-08d474e7dee4 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BY2PR03MB190; X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB190; 3:4cBAMfIwYXCAMkjLCW534WxUn+U4ppiL0z6CTSw8R3NSXYh6ZMCj/2rU1pQEvJSt0y4/F7FBBPJ1ccf5Hx8DfYfF7adZp0/Uv1/yI6zdd4EcpT94ZY/eMakbvTwkS75hRXik12y/kUhWTTySXifQ0te154zzEwXeC7S/uS5FsGTXienCoyHW+WyXckV2WGEPk1aIedyg0r+YSR8INlJTbEU6pGA78Y7SyBMX9NiqJIJSZ5f441nywNT/dpzXjTsbOipYXugoa5MVHQDO9NPwh5BTFVq0F1TcCIeCM4vJ25xkbIEjV9oEbSuhHtQ8l8Mx8MHdY4QfJBKiIwCH5jZyebf9bYpCGIgDWcsevKVlr1lE8a7chAyODSt+Aj2YLtTE; 25:ETa7T6Ku1k49vShScoNPupxRvO0Qp9mdAHQRyzzqCPywK7ZrMCWnxqIMGs6R0UlTNT4M9AVpnkH8ufvZpUdwgbw0nlH4EcS31S5QHyA+QnIhgDFhdIbJKFlzELPXlWPy5hswI3LM6nX4HFnn2jbE8VnLFyd47PzxWWshYB+o2p5Zsmzk3sR4+VaqnbR5RoPytnTmr1oyWjM3xcjL3qiUJ/d7l/Zkp8LXHWo1BV52q5xqH67pZtM1s/d8i//Q/TK+mZSe691Ea0iTR0BECyjfwwt/aJjgzoYCEt3fd16V7FYEU8jux4wHhfxUEyQtfpq2Kpp14SjmymaUvgOSIrVUSdJScothrYLkE5+z9DiB1WKQC0ART5DvKlyqneSkvrazNyDMsI1BKAvTLy0/1Coj/S+N/IsPx7B4iNVeFz3LRse9MtbevavWt+4Fg5RkO8K1MBaEpLaI3GEvrvYTQCNCgg== X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB190; 31:6bncZj7IoEscC2QEOszhl/GrOS9B7FxcWmAtFwT+GVCvDNzrujOcVCZCbqgl+IQk7DUT/EcL93g9YyEu+aLblGX3ccQUg3GYj+Wh2OlJQx/QO3YOBgqc+7jR9uDM3vKvBWpSGhYUUWHJOlkgm48aO5KeSaV3nENUGfPPGWnRcphEEPv6imIYGfHY56pcH8dFwX0AfOFmPupzFieIHUUiPl51mytTlvgbO6voaTDK0UYVFsRJ/Df8VGlSxE3bST4Zh44rxT+fKloadUPnyoQsvSadfUltdgoK7DMvX1N4f9c= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(13024025)(13023025)(13018025)(8121501046)(13017025)(13015025)(5005006)(10201501046)(3002001)(6055026)(6096035)(20161123563025)(20161123559025)(20161123565025)(20161123561025)(20161123556025); SRVR:BY2PR03MB190; BCL:0; PCL:0; RULEID:(400006); SRVR:BY2PR03MB190; X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB190; 4:ptCDUgjkMsIEk9iZaq1EYjUDZUAxKTj+zZ/ulzff4j77bxfK0ZA0f0HgAbqAx0kVSwq9ZJH+1aunLdZ4FWejtV2+iBMHwukNiynLMNksO94LH7jig3BD4TgBt25MuKlu7wk84+gKqpJq08d/nuH0YrAxOdEoc+aaLeZWq3eloRNVT43Vt1xpFQqEr2qnOhuDusXGYi8Lwy2IF7y9U+nWPp54fIEq7rJfwaAqo9wriB6J/47fhvIbEmbdLgzPwEjlHUnYojnjqc/xNpyr9CH0B6bMWcjvReYjoQ0LIukuFzo8L2eN548qiUNSvV4ev4ArrpcFIVhGSiW5haK/kbxTCsWIitsTlC0q9/73KL2LB6XSsQ6gF60Jd35Tf0yapWi4zeWyJqUygYIoQSK7D8de67RE48LN/aXowOOOsih19QD8nvJ/GFWRzT7kzximV/sKy4YnbOjyPqVX8dZu1gCwLFBMqI4EvqpFe0BNcr4yESx8yibsnbkjtmyCMYfYHL8Wp9a1vNJdXLdVBZQ1jhIKtk4LivkprIzhpCIRGfxeOgcSfbPAp2j1ZngpQgSmlSfJkzIXQYhahQTUN4HZ2RF9wIFsmdmFgvbCG0Geu5uHDayczBHNMAlg3D/ot8amWrRC+JVxpoRDuLEZIgCf9JMNAwHMprKW/GI04MLwh1XtNYgTBfh2/Kt4VJyDH3j65K4kAOUyHXGoVZ6e/2nZnPIIjMCmSrXAO29hygk+yHG8xwhCGpieSQqYVgZKa6qfvVCh X-Forefront-PRVS: 02596AB7DA X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR03MB190; 23:YKS/Sl0vdhG1skoSVQvFCrpwAhCrGv3vjqHdFVTeYZ?= =?us-ascii?Q?F+IW+F4uEr1tM+vP4QprJlj+QIm5JYDr0eldBkWWxdm6zP/RnhUr8uKKhYPO?= =?us-ascii?Q?+qiP176/mMidP4gmzc30Xr5aDEOUDE8qAEIf+xcRwgduWmSSaPgDhzQZysdU?= =?us-ascii?Q?DVd/AulV10DReoIHUmLoB5gOBIRiwQexV1RwC5SwNKKYB4+UiqrPTBjioC5P?= =?us-ascii?Q?mEMKTISG4+gNxwHmkeafP9Z14Ld4Dxz1RMZuOntvjBgd+SiYBp2jxxrli8hC?= =?us-ascii?Q?rI1Kzd0Aq0Es+MyaGu9j4XQ6BpNNwntFsTwKmu3lb2PQ8RF5RSbMnj7LH+Dz?= =?us-ascii?Q?ss4v10SnvS+sN9Po+WZlpB8f75okgSqVh/+9qy6cbm2s+ZB7EVZWmdKpQSE3?= =?us-ascii?Q?sO8WASsTkkOYSMTEQyV0VmE77+1q25CmNxvLx/GA3+3khUK+M/1+u2RiABoB?= =?us-ascii?Q?9QiuVWW5EdzmbkdWMeI1Qaw1/ApvvY8wLHBOlExFaPCuIKIZLwRHWOnuDWwj?= =?us-ascii?Q?Yrpzz/9l3I2O3ImLTtkoxsPoTleG4dy+mZWYnZlilSrBkEaNc9qs5Z+M8jUB?= =?us-ascii?Q?b65gnRDlKi5WIeeUqUpUwLxojgunwjJsLJXZ7Pa1I47B3OZUiMjXP3sWEFCa?= =?us-ascii?Q?K19G1pQ+ZtiuPQ1Xl63ioQEs8jFEy8tlYQOy5ImEXY4nLms70GTsLevpTHAu?= =?us-ascii?Q?LHUye3mVy0dBLop5n4gg8fiUhwVsKQ5h5QPmx/P4JGxEBPeYgWlTq6LERtRL?= =?us-ascii?Q?rlF6hsiSrOQt2oYLFGd486hEEoeHmzt8zpfPWZHS022rJATDG0Z/HTEmGHoe?= =?us-ascii?Q?IZtv6va3Zq6hTyf1C5XrpbbXf3ys17n2C/CTMkdrtrO324M5aBIcrodgRRgO?= =?us-ascii?Q?ByiMgK8qe1YJQgrNg2dDKs6j73AZHibHefvrSO8zegOp/hR2H9nJ0aztvDd5?= =?us-ascii?Q?6Lux3czfCiQNdP5VVFnNDQr1sm38mRiSF5TFCPoXPircaFFe9Nrywm+f6XLU?= =?us-ascii?Q?nrUsh4D/5zUDP9f9xOuKoosy9rhNd6daPtaTSDqIP2Fq87PkuhncWgkcdhjA?= =?us-ascii?Q?0rLj0FZr8OSoDGQrOewCiLv8wu+W3yvBDMp9Ak+CgKq66dnsyN2LL3v4kQjg?= =?us-ascii?Q?F9yRlMgjp5n/XpHIfK5q2OUnXOPAtHVP9jN4kiaAJXPxUCidRBxOR/6WgQC0?= =?us-ascii?Q?fnbkOBCLnKz3wyTG7+MJSfSjjm/xqxV2ZRQaNZoRiPr8Yk2rKbH4Wl9Q=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB190; 6:Qw+5OM2ecObCL6xtJrT7TMh0F8t+ypI8MNVv4SrqwARBzyhb9ud99gcpt/yhyOukgbfRNObT2w4lxHnaixq1OZ7RvLknGNxzH/lycADVwigWo8+TDhllZc8NgPtZ42+uvxZMmgkRXaBagVv5PbLW8zhrKlO8w00ewSqtign4D4CthfoP7RpY2Rxg1w6pw6aGGHP7CuUIQtymnkd+tqBgAURsN3R+06dNHMDUf+Fbkd+CeJhm7CLt6ZCidQjiEo9SHiVPZXF4wlF7GMddl//y8AJJlB2oioiKuOC4nfzpqXB1NHF2EYZr3GpLVoIqG4zmb4pMHeQ+EO7jOoxq6AOIGkmpdYZPDfv7UHH6DndGzKPyXWK4WerM2jkplHi5tDMcZrQeZ4VTJV0jFT6E2owbSw==; 5:aifZh3i1ICe2G6IVUWWkC5ET0F8pbob8C3QuDGSXgASz5beBqHMuF/CJC0J8xEQzOVmXwHbeoBdij71EgUSASlCsP7JPfCcdP86u0+6eaXhlYrBjGRBs/TIC1U2x6cDO7HSBUbhPbYJDczcE9yUqyvq+/qrn9+H/xQ71FxazYUqvpqgoB7bCZc9QJCAccQQJ; 24:/GdrY8iMrVVj8WG5OICI2rC8BXiCHStFy6P5gtuJVIqWZGH7wjx6//GeChecMY3mRZg3LLJpUg2r4WteBtYtAj3QlfzLXl1533K9Aw51pKg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB190; 7:e8efDj7ySI9+jQc2F7PEXa5Ckg4StGumjZ8p1Jg+Pn1ayJovEe1DS/bJ2dpiW2aNDEFymM5jwXjodpWtyOy1M8HQkZyy2DviF4UN7v6dDAqjazO8BqkEzw3iyDyMIh8nQD9N8mAKMHisAfaqS3i1O6VznWOyy20vJDl0tAUBVHKKLW/o5H6UHwww3+wN3zqe6SxiinuIM9fNawZPcH/zEaX611UFuEX8ZYN6wPxVSL4jCaGb7p3hN6hQt0waSvD9nWQtCfc70CsKOLjvrU9Tx9c63XZbvJwTS6D5KH9kokXoOmGdztsQo8pTbkG7GL7tJ702EQnYRf7NKCUSr1SKWg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2017 08:04:18.9503 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR03MB190 Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP eSDHC uses tuning block for tuning procedure. So the tuning block control register must be configured properly before tuning. Signed-off-by: Yangbo Lu Acked-by: Adrian Hunter --- Changes for v2: - Replaced old function for mmc_host_ops.execute_tuning with esdhc_execute_tuning to support eSDHC tuning. Changes for v3: - Put .execute_tuning assigning after after IS_ERR(host) check. --- drivers/mmc/host/sdhci-esdhc.h | 5 +++++ drivers/mmc/host/sdhci-of-esdhc.c | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/drivers/mmc/host/sdhci-esdhc.h b/drivers/mmc/host/sdhci-esdhc.h index 6869567..c4bbd74 100644 --- a/drivers/mmc/host/sdhci-esdhc.h +++ b/drivers/mmc/host/sdhci-esdhc.h @@ -53,9 +53,14 @@ #define ESDHC_CLOCK_HCKEN 0x00000002 #define ESDHC_CLOCK_IPGEN 0x00000001 +/* Tuning Block Control Register */ +#define ESDHC_TBCTL 0x120 +#define ESDHC_TB_EN 0x00000004 + /* Control Register for DMA transfer */ #define ESDHC_DMA_SYSCTL 0x40c #define ESDHC_PERIPHERAL_CLK_SEL 0x00080000 +#define ESDHC_FLUSH_ASYNC_FIFO 0x00040000 #define ESDHC_DMA_SNOOP 0x00000040 #endif /* _DRIVERS_MMC_SDHCI_ESDHC_H */ diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c index a70499a..8c8e147 100644 --- a/drivers/mmc/host/sdhci-of-esdhc.c +++ b/drivers/mmc/host/sdhci-of-esdhc.c @@ -630,6 +630,25 @@ static int esdhc_signal_voltage_switch(struct mmc_host *mmc, } } +static int esdhc_execute_tuning(struct mmc_host *mmc, u32 opcode) +{ + struct sdhci_host *host = mmc_priv(mmc); + u32 val; + + /* Use tuning block for tuning procedure */ + esdhc_clock_enable(host, false); + val = sdhci_readl(host, ESDHC_DMA_SYSCTL); + val |= ESDHC_FLUSH_ASYNC_FIFO; + sdhci_writel(host, val, ESDHC_DMA_SYSCTL); + + val = sdhci_readl(host, ESDHC_TBCTL); + val |= ESDHC_TB_EN; + sdhci_writel(host, val, ESDHC_TBCTL); + esdhc_clock_enable(host, true); + + return sdhci_execute_tuning(mmc, opcode); +} + #ifdef CONFIG_PM_SLEEP static u32 esdhc_proctl; static int esdhc_of_suspend(struct device *dev) @@ -787,6 +806,7 @@ static int sdhci_esdhc_probe(struct platform_device *pdev) host->mmc_host_ops.start_signal_voltage_switch = esdhc_signal_voltage_switch; + host->mmc_host_ops.execute_tuning = esdhc_execute_tuning; esdhc_init(pdev, host);