From nobody Fri Oct 3 10:13:15 2025 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D57912E8B92; Wed, 3 Sep 2025 08:04:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756886667; cv=none; b=kMgsnfDVvnQfg5IHdIqDk1aZebYstly8OscFDRZdf+glsC2npjvBCCONZt4CJBWNyxbli5cOoYiLqlkgaRKx6OsUVPb6YSkaUnKzm5qhQbngX32vm4zA8YKvROVkFwLkN7Z4b4yUsH86o2hDRuTPX6062t0YgkIhYkTJVMOchW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756886667; c=relaxed/simple; bh=j7T4RCmlTXgVKzLCcUgiXlV4EZ/RVhIa7wLCrX0oMds=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=BJlkAd4gISFqiU1+F6L2lh/GodJPuI9KTjmsbgakByOWM4jVZPdS3j6BBBZyanAFQPSuOy7iufank5X8Rvz6sYM13ZQbi2nBTVndYyXp4Ryp27Dxl0QJJ60EMj0aRt8p4+788pa9EcJhMY3Rps/0t+8/993gxq1Wb+JA730HPxk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=qualcomm.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=l76bOIZj; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="l76bOIZj" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58321b3Q019583; Wed, 3 Sep 2025 08:04:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=8vsxZBlhE5Z Q93p3zKECfKGTMVUpC6yACQ9x1b1vKpI=; b=l76bOIZjm7KftPRybN5PpyqFwuq C3cmLvLoG8fOIkm7S2BAGJYzM2PTxhsVJdKJDhGEbdK0aUsLhMCqJ4Dbqqv4z8PK O4s71lhJFvizkS4RanstIqsRLVWnfHO8QfMDXU7Nejrx4/8kq0/OBmtxdu060B7X gkzAWRp2zw33C+Tk39Rhwi8qqtnde51OFIenGUHnPix/RSUIwxkvtVbO2tolNCpR GtiamUE877ylA9dGTTHC+WggBE6fW4QczlT4NMVCQchJ+RtfRVUk3e7e2mGttI75 XOoJj3AzBbi4AeFkPP7FO6Al7fPQB3Y/W9MA4USfaXYjUfDynmN4B0fy30w== Received: from apblrppmta02.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 48urw02snx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 03 Sep 2025 08:04:20 +0000 (GMT) Received: from pps.filterd (APBLRPPMTA02.qualcomm.com [127.0.0.1]) by APBLRPPMTA02.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTP id 58384GP6011535; Wed, 3 Sep 2025 08:04:16 GMT Received: from pps.reinject (localhost [127.0.0.1]) by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 48utcm1wc5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 03 Sep 2025 08:04:16 +0000 Received: from APBLRPPMTA02.qualcomm.com (APBLRPPMTA02.qualcomm.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 58384EJl011492; Wed, 3 Sep 2025 08:04:15 GMT Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-sartgarg-hyd.qualcomm.com [10.147.242.251]) by APBLRPPMTA02.qualcomm.com (PPS) with ESMTPS id 58384EXP011487 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 03 Sep 2025 08:04:14 +0000 Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 2339771) id 349F15C5; Wed, 3 Sep 2025 13:34:13 +0530 (+0530) From: Sarthak Garg To: Ulf Hansson , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , Adrian Hunter Cc: linux-mmc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, quic_nguyenb@quicinc.com, quic_rampraka@quicinc.com, quic_pragalla@quicinc.com, quic_sayalil@quicinc.com, quic_nitirawa@quicinc.com, quic_bhaskarv@quicinc.com, kernel@oss.qualcomm.com, Sarthak Garg Subject: [PATCH V5 1/4] mmc: sdhci-msm: Enable tuning for SDR50 mode for SD card Date: Wed, 3 Sep 2025 13:34:01 +0530 Message-Id: <20250903080404.3260135-2-quic_sartgarg@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250903080404.3260135-1-quic_sartgarg@quicinc.com> References: <20250903080404.3260135-1-quic_sartgarg@quicinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-QCInternal: smtphost X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: qrGn-ZRBT1IF6RB_9PDIgnvyys9KtRhS X-Proofpoint-ORIG-GUID: qrGn-ZRBT1IF6RB_9PDIgnvyys9KtRhS X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODMwMDAyNyBTYWx0ZWRfX1nQPqm+Ek82w 6+6ue+/dTibXf52mUjOCbM7WoL8K3nXntgO+FfO2sixXJOpLkADKWUKlbkx9GnrFZlKQnWa8/gO jTu9KamvBvhwobOjsNZcmPM33DtrnqkBVzyyb4PoH4snkZRpw8YGMpkA53HGPSWQ2ZFUk0RyKwW RdNeVAvgeTQHNgfXozfrx1g2WYX0vwn9NImLU1I50q4sc7/3dFz0Kf83IXb2wL7AKi8nV8fpz5j QVePQpKtB1KmKfxhwPHQbW5c8h1Y6EmiC3y6wyz9Ct+a2TDMIeBjLlxH0IktknZtZBl2X0Q+JlS q3cavY2obTvjHnlEAb3xa6P7AeHey0Vt3cSZUjGNyWGdojXF6zcaA5bQcIRpW1dYrQGELRO42nd g53jJ8x2 X-Authority-Analysis: v=2.4 cv=NrDRc9dJ c=1 sm=1 tr=0 ts=68b7f684 cx=c_pps a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=yJojWOMRYYMA:10 a=COk6AnOGAAAA:8 a=QyXUC8HyAAAA:8 a=nNGJRMnCL2qTWb1COHkA:9 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-03_04,2025-08-28_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 malwarescore=0 priorityscore=1501 phishscore=0 impostorscore=0 spamscore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508300027 Content-Type: text/plain; charset="utf-8" For Qualcomm SoCs which needs level shifter for SD card, extra delay is seen on receiver data path. To compensate this delay enable tuning for SDR50 mode for targets which has level shifter. SDHCI_SDR50_NEEDS_TUNING caps will be set for targets with level shifter on Qualcomm SOC's. Signed-off-by: Sarthak Garg Acked-by: Adrian Hunter --- drivers/mmc/host/sdhci-msm.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c index 66c0d1ba2a33..bf91cb96a0ea 100644 --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c @@ -81,6 +81,7 @@ #define CORE_IO_PAD_PWR_SWITCH_EN BIT(15) #define CORE_IO_PAD_PWR_SWITCH BIT(16) #define CORE_HC_SELECT_IN_EN BIT(18) +#define CORE_HC_SELECT_IN_SDR50 (4 << 19) #define CORE_HC_SELECT_IN_HS400 (6 << 19) #define CORE_HC_SELECT_IN_MASK (7 << 19) =20 @@ -1133,6 +1134,10 @@ static bool sdhci_msm_is_tuning_needed(struct sdhci_= host *host) { struct mmc_ios *ios =3D &host->mmc->ios; =20 + if (ios->timing =3D=3D MMC_TIMING_UHS_SDR50 && + host->flags & SDHCI_SDR50_NEEDS_TUNING) + return true; + /* * Tuning is required for SDR104, HS200 and HS400 cards and * if clock frequency is greater than 100MHz in these modes. @@ -1201,6 +1206,8 @@ static int sdhci_msm_execute_tuning(struct mmc_host *= mmc, u32 opcode) struct mmc_ios ios =3D host->mmc->ios; struct sdhci_pltfm_host *pltfm_host =3D sdhci_priv(host); struct sdhci_msm_host *msm_host =3D sdhci_pltfm_priv(pltfm_host); + const struct sdhci_msm_offset *msm_offset =3D msm_host->offset; + u32 config; =20 if (!sdhci_msm_is_tuning_needed(host)) { msm_host->use_cdr =3D false; @@ -1217,6 +1224,14 @@ static int sdhci_msm_execute_tuning(struct mmc_host = *mmc, u32 opcode) */ msm_host->tuning_done =3D 0; =20 + if (ios.timing =3D=3D MMC_TIMING_UHS_SDR50 && + host->flags & SDHCI_SDR50_NEEDS_TUNING) { + config =3D readl_relaxed(host->ioaddr + msm_offset->core_vendor_spec); + config &=3D ~CORE_HC_SELECT_IN_MASK; + config |=3D CORE_HC_SELECT_IN_EN | CORE_HC_SELECT_IN_SDR50; + writel_relaxed(config, host->ioaddr + msm_offset->core_vendor_spec); + } + /* * For HS400 tuning in HS200 timing requires: * - select MCLK/2 in VENDOR_SPEC --=20 2.34.1