Received: by 10.223.185.116 with SMTP id b49csp728296wrg; Wed, 21 Feb 2018 06:03:31 -0800 (PST) X-Google-Smtp-Source: AH8x226C6v0BP5C6abhkH6me39sU6dpdxWLsOVgAv5AAAuUd4k+0dBER1bO821sg3+v6Dfg5LdKG X-Received: by 10.99.174.66 with SMTP id e2mr664699pgp.269.1519221811116; Wed, 21 Feb 2018 06:03:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519221811; cv=none; d=google.com; s=arc-20160816; b=F1D/5JAD9oOID/ZmQHyBNic1k4jXB/Eqc+xby06mlz8P5RX4KRCa/0YDv0/G0SK7lu ZA1dQ4qgaAiiCMxHil2HsfU6bQRRv6Fkg9Cu3OVH4YSmzvIZLI4NdMAIbgFjE6+1XtRs KZxJXb3lzpWTXxir78DHlCmRKzoVhQpsX4rTbgf/awj0KHt/t54ADKk4ANXeceRmgwCH kVQwpNLBu5Vo0GZuvZM/O0igpZAbzSSY+EAJ1LsmxKTRcHhjM8LXBQ3Cqh4zrm3EeZs/ p1wAQT9O61WCAkARjD8Y9JfY4ZFBbFYaoelupBKAylONw9LdPYf8+eC7IOzQQC/OeC8v b9Vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=lUtaF07w3xk4d/BTRd5bcUSENwGO92ja21MaPDF3GKw=; b=pboKOJ0hTeZVQijf6rxIhQurOpD1RZ20QWhXNYb1apuN3JrW98aCue/3XA936kC51o yTbbCKkQE7lMDq+WOOz2mG35AhPa5i7XzGWBI9MNfYUT9aOzbHP4y3l1JOg68wxWk2tf SAKDY/uEXn/7Wa7/7H26td8yXjzdL4I5d8rxbLZ6pRDeSHRNb+1rn/Vjr+/wuhvVpPU2 K2XGD97pF4SlxOKXv7jiKxyyx+pOnHNDHh2jVzJl2mNZVxFYYSYMFhBa2tFkNvf6ik2K pEb9Meu71DsO9e0y2USAvjHx/+C6NiNL0KIktJBM12xn8S/q0hoSHNTVJm8+aB4ZlGZn YnUQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k13-v6si1736282pln.380.2018.02.21.06.02.34; Wed, 21 Feb 2018 06:03:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935999AbeBUNFR (ORCPT + 99 others); Wed, 21 Feb 2018 08:05:17 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:40220 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964819AbeBUNFP (ORCPT ); Wed, 21 Feb 2018 08:05:15 -0500 Received: from localhost (LFbn-1-12258-90.w90-92.abo.wanadoo.fr [90.92.71.90]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 69474115B; Wed, 21 Feb 2018 13:05:14 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Yangbo Lu , Adrian Hunter , Ulf Hansson , Rasmus Villemoes Subject: [PATCH 4.14 163/167] mmc: sdhci-of-esdhc: disable SD clock for clock value 0 Date: Wed, 21 Feb 2018 13:49:34 +0100 Message-Id: <20180221124533.760885592@linuxfoundation.org> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180221124524.639039577@linuxfoundation.org> References: <20180221124524.639039577@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: yangbo lu commit dd3f6983b4a468efca9e8caa0e2b4aa20946d801 upstream. SD clock should be disabled for clock value 0. It's not right to just return. This may cause failure of signal voltage switching. Signed-off-by: Yangbo Lu Acked-by: Adrian Hunter Signed-off-by: Ulf Hansson Cc: Rasmus Villemoes Signed-off-by: Greg Kroah-Hartman --- drivers/mmc/host/sdhci-of-esdhc.c | 58 +++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 28 deletions(-) --- a/drivers/mmc/host/sdhci-of-esdhc.c +++ b/drivers/mmc/host/sdhci-of-esdhc.c @@ -458,6 +458,33 @@ static unsigned int esdhc_of_get_min_clo return clock / 256 / 16; } +static void esdhc_clock_enable(struct sdhci_host *host, bool enable) +{ + u32 val; + ktime_t timeout; + + val = sdhci_readl(host, ESDHC_SYSTEM_CONTROL); + + if (enable) + val |= ESDHC_CLOCK_SDCLKEN; + else + val &= ~ESDHC_CLOCK_SDCLKEN; + + sdhci_writel(host, val, ESDHC_SYSTEM_CONTROL); + + /* Wait max 20 ms */ + timeout = ktime_add_ms(ktime_get(), 20); + val = ESDHC_CLOCK_STABLE; + while (!(sdhci_readl(host, ESDHC_PRSSTAT) & val)) { + if (ktime_after(ktime_get(), timeout)) { + pr_err("%s: Internal clock never stabilised.\n", + mmc_hostname(host->mmc)); + break; + } + udelay(10); + } +} + static void esdhc_of_set_clock(struct sdhci_host *host, unsigned int clock) { struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); @@ -469,8 +496,10 @@ static void esdhc_of_set_clock(struct sd host->mmc->actual_clock = 0; - if (clock == 0) + if (clock == 0) { + esdhc_clock_enable(host, false); return; + } /* Workaround to start pre_div at 2 for VNN < VENDOR_V_23 */ if (esdhc->vendor_ver < VENDOR_V_23) @@ -558,33 +587,6 @@ static void esdhc_pltfm_set_bus_width(st sdhci_writel(host, ctrl, ESDHC_PROCTL); } -static void esdhc_clock_enable(struct sdhci_host *host, bool enable) -{ - u32 val; - ktime_t timeout; - - val = sdhci_readl(host, ESDHC_SYSTEM_CONTROL); - - if (enable) - val |= ESDHC_CLOCK_SDCLKEN; - else - val &= ~ESDHC_CLOCK_SDCLKEN; - - sdhci_writel(host, val, ESDHC_SYSTEM_CONTROL); - - /* Wait max 20 ms */ - timeout = ktime_add_ms(ktime_get(), 20); - val = ESDHC_CLOCK_STABLE; - while (!(sdhci_readl(host, ESDHC_PRSSTAT) & val)) { - if (ktime_after(ktime_get(), timeout)) { - pr_err("%s: Internal clock never stabilised.\n", - mmc_hostname(host->mmc)); - break; - } - udelay(10); - } -} - static void esdhc_reset(struct sdhci_host *host, u8 mask) { sdhci_reset(host, mask);