From nobody Sun Oct 5 18:17:28 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 26AB821D3E6; Fri, 1 Aug 2025 08:45:38 +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=1754037940; cv=none; b=QyEzJ/akYWoiFCI+GBfX03CyhOh1NAshbHnyvxyMx3/Y7JqnhetTbecuiAl9cualu8PUK7XUdKXuyUlOk2RvyVtl5NrSYwFFewiePhXzGdT+dzxGD6b5q7PMQeaWhFSIFE+BToffeXkYDX9CrQ19Y4jqLeqnNjxLFdw+8ukiyV4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754037940; c=relaxed/simple; bh=j7T4RCmlTXgVKzLCcUgiXlV4EZ/RVhIa7wLCrX0oMds=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=f6q1GQ4mkPTf+tLyGwvceePcU/Axm7h/XOVowC44dAXmZD92CnxS3OfsyPXOxaX/jw+/u9kD29kQa4eApdbXuJiJS+3VCGTHc6xV/1iekCvo67rMoaMaPSgt6pvJf0mELc3Y8UxIIKwi7asLfjNgFpfNq8lt/7yjKpvuUl7DA1g= 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=FKwh+rwq; 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="FKwh+rwq" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5710nph3018834; Fri, 1 Aug 2025 08:45:34 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=FKwh+rwqQYd0yB4zqCCjnD8f9Lm id6bL12hwdkRwnPfDVE3hcv6lQEnAQWSeRCXLNiy5MRAxiW09inU8e32Fao8d1iR QOR5FXKHFlcdNRHNBHCp/Ecw5CtC0qjIJ28wZWVsarF/+guMZpI2ml+6CjgR71/2 lMrcV0gXJb1J3qBii83vzmBBnMWSt2WD0XKQHZ3xSZgpwk5t25yatOytul1QfZY1 qgYCR/IJHbMU7EDiPcSmRJi9kejPQs5n1IXMxSN1pM3XoMQc17eos3Uw27ZBknpa OzQJaAPaQxE9GPRx/kjeO1rdPUHLXtwrV+c/Fw0rJ1Vt727wwXZ9iC8Xp6Q== Received: from apblrppmta01.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 484qdab096-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 01 Aug 2025 08:45:33 +0000 (GMT) Received: from pps.filterd (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTP id 5718jU1c016901; Fri, 1 Aug 2025 08:45:30 GMT Received: from pps.reinject (localhost [127.0.0.1]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 4859bemgsf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 01 Aug 2025 08:45:30 +0000 Received: from APBLRPPMTA01.qualcomm.com (APBLRPPMTA01.qualcomm.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 5718jTJe016891; Fri, 1 Aug 2025 08:45:29 GMT Received: from hu-devc-hyd-u22-c.qualcomm.com (hu-sartgarg-hyd.qualcomm.com [10.147.242.251]) by APBLRPPMTA01.qualcomm.com (PPS) with ESMTPS id 5718jT9i016888 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 01 Aug 2025 08:45:29 +0000 Received: by hu-devc-hyd-u22-c.qualcomm.com (Postfix, from userid 2339771) id 8D4C05C4; Fri, 1 Aug 2025 14:15:28 +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_cang@quicinc.com, 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 V4 1/4] mmc: sdhci-msm: Enable tuning for SDR50 mode for SD card Date: Fri, 1 Aug 2025 14:15:15 +0530 Message-Id: <20250801084518.2259767-2-quic_sartgarg@quicinc.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250801084518.2259767-1-quic_sartgarg@quicinc.com> References: <20250801084518.2259767-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-ORIG-GUID: Gd92aS0f5G9-AejK_KyDhBfWE9nB1pUi X-Authority-Analysis: v=2.4 cv=Pfv/hjhd c=1 sm=1 tr=0 ts=688c7ead cx=c_pps a=Ou0eQOY4+eZoSc0qltEV5Q==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=2OwXVqhp2XgA:10 a=COk6AnOGAAAA:8 a=QyXUC8HyAAAA:8 a=nNGJRMnCL2qTWb1COHkA:9 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-GUID: Gd92aS0f5G9-AejK_KyDhBfWE9nB1pUi X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODAxMDA2MyBTYWx0ZWRfX53BbD52jhB4F 5fsMDxJ4ODDVeuBY7nExzk8VC1QaZLDc8WMHETEVnfX3L25YskZJnKyIDwKmNHVGUDlb584bfha 6fP6zS0H6N9i/bORyPxSwd7opJKZ4qXFyUz1m/ZkZm8l+E497hJU6Vmz3WGD6r0nxSxVsyoRulr Gzg/zlbmgaKBA5z7cwjyXywUXfzi/R+9ftgu8Py/zAGLLwwCQdSJx82YhuQ0JF4vIZaC5J68UEL dziIUIc87J1F2dGTHTARGj+xtS5uZBsvltN3+JGB22VZtPTgt4o+jEQFoYh6EN4CVEeyqjfyOzO i1jUiK223s+Zpjxkg7b/QG8UNOn/wUan7xlS3FNkDZCK2nHPLTRxSMz2W1FgCcK+18UM3iu4FzM sKmixWsp+3vjfmeCMuUN72qSJDvdXgdRtUG02/AgaMTSaDgbrth07j79aM3dIB7LxVCr/Dcm X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-01_02,2025-07-31_03,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 clxscore=1015 adultscore=0 priorityscore=1501 mlxscore=0 spamscore=0 suspectscore=0 phishscore=0 lowpriorityscore=0 malwarescore=0 impostorscore=0 bulkscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2508010063 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