Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp13469845ybl; Sun, 29 Dec 2019 12:39:15 -0800 (PST) X-Google-Smtp-Source: APXvYqw6k0dtLObBdjuOyJesqcFy6KZmL/dzivBKkVyaWNdUxcyEc3gdze1v1tjTP/Lx/oNW29v3 X-Received: by 2002:a05:6830:147:: with SMTP id j7mr71354973otp.44.1577651955137; Sun, 29 Dec 2019 12:39:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1577651955; cv=none; d=google.com; s=arc-20160816; b=T4YdULSG4iwLIupQiL8QK/zTVl0ctVNpKisBV3tnU16xz23NupW933rud2LIb/FHuo 4b9G283PWgvX2xY/iAL+bJOzj98pY3XIooBmvJO+QJOz4ZxQGzwCP7ZPhD6F38tdkSuQ GUieGlRR5uSay3JyxH0mlJtABCR1OMuXoB9wf4dsCEnjPcK436+pSP11pTEVRchphOdW chOKAzjZ1fYNfZePeAeXbC2uJOX7sj9TgUfu9HVelwOKaVlQV9Fnnpd6CmdGbs+VDS6X 9ONjrHk5rQIUE8hOTuE4FvoLDZs49CNDN0KdYXC6oqq3l9tGZkaR70XuUK2yi4x99r8t VKNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=dOTDR0lEOE8Oif8PgPvDYRsZtKd0Xnlkyku8JMTDT/E=; b=MnK/NWM5STmbk81iBDDJ5AHTWaLtAYsSFsoHQcA7LZeKw1+Y0HoyBFSU8U+NnJuEhL HNS1lH8Ue57wyIOfo3kRyMcDveGud9rHAupkAoUG08ob+4DxDsvjlmEEVCMfrVg5SJhE y2K0TKFREnoQxuTEemo+34NLFXOfoeb1a5/PUqoj9w7FAk7vl0+k6F7x7nFZ8P8H6i8e yLeTOu3L1cXmWoOLU7EXSRE4N6zLe+Akd9rmMkY6Xz3FPvFCG0OktDoRP+26TRpTXmz9 a7t2rHbsxuBkfhXiw2whYPwsMnnVdtVDSkjO2TlUZe0qwKghXjRDZtFYZUEbMgxtQ3Q4 CmIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wSVTdw34; 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 l18si21976959oth.236.2019.12.29.12.39.03; Sun, 29 Dec 2019 12:39:15 -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=@kernel.org header.s=default header.b=wSVTdw34; 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 S1730049AbfL2Rg1 (ORCPT + 99 others); Sun, 29 Dec 2019 12:36:27 -0500 Received: from mail.kernel.org ([198.145.29.99]:41726 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729769AbfL2RgZ (ORCPT ); Sun, 29 Dec 2019 12:36:25 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 4C659206DB; Sun, 29 Dec 2019 17:36:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1577640984; bh=aHv3j7rYRPDzFNDOD/MH+u/hrx39JXvqbLREUVDbUlw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wSVTdw34DXLDAyV2D1ujxHmqfrKb+NAZ+fpwPT2aw7MlDiG1LXqtjpqS5jN8N2Yss PlIVV8jKoau1TBwA4s6FKycSSnlzwgqJfcQfSK/3+WXWCXxHa3Wrlx3teCXj97zzCY V/n5uzkZORBlhcRTjj7P7005cP2UsYO3fbPNiuCI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Veerabhadrarao Badiganti , Ulf Hansson Subject: [PATCH 4.19 213/219] mmc: sdhci-msm: Correct the offset and value for DDR_CONFIG register Date: Sun, 29 Dec 2019 18:20:15 +0100 Message-Id: <20191229162542.647203338@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191229162508.458551679@linuxfoundation.org> References: <20191229162508.458551679@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Veerabhadrarao Badiganti commit fa56ac9792265354b565f28def7164e7d7db2b1e upstream. 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 Link: https://lore.kernel.org/r/0101016ea738ec72-fa0f852d-20f8-474a-80b2-4b0ef63b132c-000000@us-west-2.amazonses.com Fixes: f15358885dda ("mmc: sdhci-msm: Define new Register address map") Cc: stable@vger.kernel.org Signed-off-by: Ulf Hansson Signed-off-by: Greg Kroah-Hartman --- drivers/mmc/host/sdhci-msm.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c @@ -108,7 +108,7 @@ #define CORE_PWRSAVE_DLL BIT(3) -#define DDR_CONFIG_POR_VAL 0x80040853 +#define DDR_CONFIG_POR_VAL 0x80040873 #define INVALID_TUNING_PHASE -1 @@ -157,8 +157,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 = { @@ -186,8 +187,8 @@ static const struct sdhci_msm_offset sdh .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 = { @@ -216,8 +217,8 @@ static const struct sdhci_msm_offset sdh .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 { @@ -260,6 +261,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) @@ -931,8 +933,10 @@ out: 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); @@ -945,8 +949,11 @@ static int sdhci_msm_cm_dll_sdc4_calibra * 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 + @@ -1862,6 +1869,9 @@ static int sdhci_msm_probe(struct platfo 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