Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp5185477ybl; Tue, 10 Dec 2019 01:52:45 -0800 (PST) X-Google-Smtp-Source: APXvYqwjfk/cpjbf/b8WkgNxU2DZun6x2lpsF6Ew+GmrxpiREVv3XgufSYFTtovsPSwhbWh2GK56 X-Received: by 2002:aca:5083:: with SMTP id e125mr3309437oib.96.1575971565228; Tue, 10 Dec 2019 01:52:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575971565; cv=none; d=google.com; s=arc-20160816; b=r1jMEGFsyzOS+FoLW1ZSjCLxVFAVz6yk5Et43Fbp25lNiTrTmuI+IPhdWjMcvNuWfr qmBTpw0CqqPqNq9DCehb1tGY/WeIApidz0iwwBfQ5u1PXu/qCb1L2LPPl/cW62h26XAX bia1DjfUofBdOWNVX+PPeaET9qZ74mbpKggnL67q6FzRZ823raSgdo1shw+123pXYX6D c5VgQcxTu/Fo1gXzx+JDUwvhlMGUD50XEG+2QThSiOLDfbXeR5iPPSUauPwLwP2ZY1fI Mm9eLkyMUgVOFB+WpXxkJevTXFf8snzTe4fEAFXNtc7aAb+KYQvWejJFd6Gm/I1XCTYf dkXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=cBbBEnPUIIoW2OTGVU3g0EnMYCU75p2JMvnnrLqCOyA=; b=ig++E+nKvFJZFC3xgM/zUk1uTMP3R4HzsOPp4nSVC+NTl/0R52x++zwSJNoLTr9deZ OmCz/9wwzcrZng7e0ShkMgXtGqUGzEcJXJbE/2uNHVBbr7IOCz0sb1clycF1JM5R9BBF wk12dKo/Q5J01+WIiXjdjm1ChkR90MqGtkg9mTNTs29V7GaGfte4KOgd9SVAAozs8m9R Tc/tVfTAawmW7L6dWWTfj9jv4oxcDION8Dzr9XSk1mlOkSkJj73D6bOdYUIq2n4WkH8u N/Z7ozK9WUl8J7gifon1zCufsUXxjSIQJG8GU8x2X3OZgNp601V1f+EWIfAqfTZLzffH W9Aw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=TDIBXQba; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d17si1643398oij.136.2019.12.10.01.52.33; Tue, 10 Dec 2019 01:52:45 -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; dkim=pass header.i=@linaro.org header.s=google header.b=TDIBXQba; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727564AbfLJJvu (ORCPT + 99 others); Tue, 10 Dec 2019 04:51:50 -0500 Received: from mail-vs1-f68.google.com ([209.85.217.68]:36398 "EHLO mail-vs1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727541AbfLJJvt (ORCPT ); Tue, 10 Dec 2019 04:51:49 -0500 Received: by mail-vs1-f68.google.com with SMTP id m5so12577962vsj.3 for ; Tue, 10 Dec 2019 01:51:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=cBbBEnPUIIoW2OTGVU3g0EnMYCU75p2JMvnnrLqCOyA=; b=TDIBXQbaiBCARQwCl+GxHekTgJMIj4Gx6RVVCVV0k2Gkg/7F5iss0Bu6hy3g1XXUCi xvL+9lss/j/EfuGHgJZs9MLCHCL+uSx3jhjBN4w2uTjZw3Gorz6R/Kce5+SAFpr2llCo 1ECz79V7wYJbeKYrqxY0PnIKYwmBi3GayhduI6pOe5KYpRPsVqJCthFG1ZtoPzxccWkm VNf0bCZQjSYJCVv2KmMttgTt3TST9rTBNP3Jp1vOoVxqa/ehjaso9JxYGPcg2+mH/0m1 9KDwgGUVTMATlT2TtcZC43JBPqmjwuYtSvxWH/l+JWuD9AHaVk4eZp5FfGf72MzZzGpG whKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=cBbBEnPUIIoW2OTGVU3g0EnMYCU75p2JMvnnrLqCOyA=; b=tKGDsNPiodYvEaqUWHwvOAoR22Zeijm09njJ6mH8WfLI81tIZ7HdrIngP44E7u/jIT A0A+roOROum7S9pvY2JWETEgzQXN7g79r+JAMwCrMk3C0vYcfSYNXZV+aJoPFZ/PWIwM SBCJidiTYo1tT1XcwokdbYukzdZQRxzva0AHYCIc0xWanhK5ghd0Rr6InJ+6UymIfb4Z FV496MYdQvRWVa5A4k5FXZjQlGwuN+Wj3XQ+h2kZIsZwn/R66auAZonoUy7ice+xqPGZ SxWGH8XAbmNWhQFUlbb8MMKcKf+k0YaveKFD7fBUxqq8vo6HbLYTBFqbe0AveyK5LqUj b+Ag== X-Gm-Message-State: APjAAAXDiaDbrAI+uMLldOyO1WDffZ2zEpcRFv/QhtrducNibj9B5rk1 fto1bUun4B4e/l6cm1sQEUglp4wBxwzZTCQHR9Ilfw== X-Received: by 2002:a67:2087:: with SMTP id g129mr24103910vsg.191.1575971508490; Tue, 10 Dec 2019 01:51:48 -0800 (PST) MIME-Version: 1.0 References: <0101016ea738eb52-8c362755-205a-4383-9181-1a867e82eeed-000000@us-west-2.amazonses.com> In-Reply-To: <0101016ea738eb52-8c362755-205a-4383-9181-1a867e82eeed-000000@us-west-2.amazonses.com> From: Ulf Hansson Date: Tue, 10 Dec 2019 10:51:12 +0100 Message-ID: Subject: Re: [PATCH] mmc: sdhci-msm: Correct the offset and value for DDR_CONFIG register To: Veerabhadrarao Badiganti Cc: Adrian Hunter , Asutosh Das , Sahitya Tummala , Sayali Lokhande , cang@codeaurora.org, Ram Prakash Gupta , "linux-mmc@vger.kernel.org" , Linux Kernel Mailing List , linux-arm-msm 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 On Tue, 26 Nov 2019 at 11:19, Veerabhadrarao Badiganti wrote: > > The DDR_CONFIG register offset got updated after a specific > minor version of sdcc V4. This offset change has not been properly > taken care of while updating register changes for sdcc V5. > > Correcting proper offset for this register. > Also updating this register value to reflect the recommended RCLK > delay. > > Signed-off-by: Veerabhadrarao Badiganti I have applied this for fixes, however it seems like this should also be tagged for stable, right? Is there a specific commit this fixes or should we just find the version it applies to? Kind regards Uffe > --- > drivers/mmc/host/sdhci-msm.c | 28 +++++++++++++++++++--------- > 1 file changed, 19 insertions(+), 9 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c > index b75c82d..3d0bb5e 100644 > --- a/drivers/mmc/host/sdhci-msm.c > +++ b/drivers/mmc/host/sdhci-msm.c > @@ -99,7 +99,7 @@ > > #define CORE_PWRSAVE_DLL BIT(3) > > -#define DDR_CONFIG_POR_VAL 0x80040853 > +#define DDR_CONFIG_POR_VAL 0x80040873 > > > #define INVALID_TUNING_PHASE -1 > @@ -148,8 +148,9 @@ struct sdhci_msm_offset { > u32 core_ddr_200_cfg; > u32 core_vendor_spec3; > u32 core_dll_config_2; > + u32 core_dll_config_3; > + u32 core_ddr_config_old; /* Applicable to sdcc minor ver < 0x49 */ > u32 core_ddr_config; > - u32 core_ddr_config_2; > }; > > static const struct sdhci_msm_offset sdhci_msm_v5_offset = { > @@ -177,8 +178,8 @@ struct sdhci_msm_offset { > .core_ddr_200_cfg = 0x224, > .core_vendor_spec3 = 0x250, > .core_dll_config_2 = 0x254, > - .core_ddr_config = 0x258, > - .core_ddr_config_2 = 0x25c, > + .core_dll_config_3 = 0x258, > + .core_ddr_config = 0x25c, > }; > > static const struct sdhci_msm_offset sdhci_msm_mci_offset = { > @@ -207,8 +208,8 @@ struct sdhci_msm_offset { > .core_ddr_200_cfg = 0x184, > .core_vendor_spec3 = 0x1b0, > .core_dll_config_2 = 0x1b4, > - .core_ddr_config = 0x1b8, > - .core_ddr_config_2 = 0x1bc, > + .core_ddr_config_old = 0x1b8, > + .core_ddr_config = 0x1bc, > }; > > struct sdhci_msm_variant_ops { > @@ -253,6 +254,7 @@ struct sdhci_msm_host { > const struct sdhci_msm_offset *offset; > bool use_cdr; > u32 transfer_mode; > + bool updated_ddr_cfg; > }; > > static const struct sdhci_msm_offset *sdhci_priv_msm_offset(struct sdhci_host *host) > @@ -924,8 +926,10 @@ static int sdhci_msm_cdclp533_calibration(struct sdhci_host *host) > static int sdhci_msm_cm_dll_sdc4_calibration(struct sdhci_host *host) > { > struct mmc_host *mmc = host->mmc; > - u32 dll_status, config; > + u32 dll_status, config, ddr_cfg_offset; > int ret; > + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); > + struct sdhci_msm_host *msm_host = sdhci_pltfm_priv(pltfm_host); > const struct sdhci_msm_offset *msm_offset = > sdhci_priv_msm_offset(host); > > @@ -938,8 +942,11 @@ static int sdhci_msm_cm_dll_sdc4_calibration(struct sdhci_host *host) > * bootloaders. In the future, if this changes, then the desired > * values will need to be programmed appropriately. > */ > - writel_relaxed(DDR_CONFIG_POR_VAL, host->ioaddr + > - msm_offset->core_ddr_config); > + if (msm_host->updated_ddr_cfg) > + ddr_cfg_offset = msm_offset->core_ddr_config; > + else > + ddr_cfg_offset = msm_offset->core_ddr_config_old; > + writel_relaxed(DDR_CONFIG_POR_VAL, host->ioaddr + ddr_cfg_offset); > > if (mmc->ios.enhanced_strobe) { > config = readl_relaxed(host->ioaddr + > @@ -1899,6 +1906,9 @@ static int sdhci_msm_probe(struct platform_device *pdev) > msm_offset->core_vendor_spec_capabilities0); > } > > + if (core_major == 1 && core_minor >= 0x49) > + msm_host->updated_ddr_cfg = true; > + > /* > * Power on reset state may trigger power irq if previous status of > * PWRCTL was either BUS_ON or IO_HIGH_V. So before enabling pwr irq > -- > Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project >