From nobody Mon Oct 6 13:42:04 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 49A052DAFC3 for ; Tue, 22 Jul 2025 07:23:35 +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=1753169016; cv=none; b=EN5LT1df6ro34tbyU9f5G6i+Me/alpCmDmVBTO5/gOPpZH5z1T/8x1h9DHMC3PWZ9TCnNc0ZzqTe+i9mPvHk4eWz/LyHyMiL5/om4ue/nnKh1qv9aEOPEk1qu72W3cLAHhS0AbUkR3wyBn370uC7tI6s+4yI2oH5MzxjuhCFtjg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753169016; c=relaxed/simple; bh=x52wj5u+rb6dbB9m5Z9EVaM2Qq3LqnWRHa5RdOZnzXM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DYpSrCIEdWBs3uApcpOtyVHkSxUgPnPEHRuVi2tzglrlN9zM6WW0irfYUCP7gMMMdGi1rV7Y5gCV9E1pm0atRi3S7R6G+em4m2DOt1C+zzyv5iCo2/jiXJad5Xz/r4aXEEQqMKynRuAlnide9hD70lBoSqJwkCjikfXRjsFmXZ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=cBt+M+UI; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="cBt+M+UI" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56M2Xm4Q016289 for ; Tue, 22 Jul 2025 07:23:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= SRoknLhESGJkp/W59IYd/1yIvuO8rKzibCESNkSnMiA=; b=cBt+M+UIJuLQzsUe WWeUa0SdQ6edqvThTF2bTw/Wu+iMg3JtCyK29PyhTe/DP7aeq/IIpbOwmleTHBBL c4bAwVXhZ23icfbCpFeqVmDRRHZ5oTUuE+Q8Z3WRi3BhZFjI+9t/mHao5p7Utp2t CR06uTWPKapPTfLAbLKTsIOLxWbGmZX1foQAgVYgRA7aGimYPnXiI7qXYomGPhut BYbLL3C5f4rlfK4a76Z5L71bn/yuldDJ+e3YQFZ9tK7Isv1L/ekoujcZxk26Nx6a 6pOVw008CXEatIHEknT25levLSKz7JzqeKKPOECWxD9r5IulLAKR3ykKPmz+OMoF Cf6wbg== Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 48048s0htk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 22 Jul 2025 07:23:34 +0000 (GMT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-3132c0c961cso1553479a91.2 for ; Tue, 22 Jul 2025 00:23:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753169013; x=1753773813; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SRoknLhESGJkp/W59IYd/1yIvuO8rKzibCESNkSnMiA=; b=oIJ1Jpp6xEhsXGTfypnydjHPcEYFLfsD0HqJOP7VQSCo9J/4yyLMZvty7rSu1GszOx UAo5hmynYo75mr6SGVFqEqyrCub5azC8jahtsc3WfAQ1X17/WCrPDtlEwJLwuJEW3OE+ G4M2ynmuHIshSGBX5d8+R+E49jwS8p0eg3PE5V0flQ2Mo+03cAXQC76KBDZ4UnnZFJPu mA9+hPK/XSgAi6N7i7sGF6AWApzansq9u8PBeYVZCDdgdqi3JYnat8oiBFaNCFuCM9Lh K0aYZORVzJF5meLx0VidwElxOuFldxL012Nua9KUb5py7JxR5j1zOzhQq3lxe2qXlO1z nFrw== X-Forwarded-Encrypted: i=1; AJvYcCXx4m9l5cNbDfdNXj582VperUZjwE+hL2gu0X+YeKKPoz1dbkZhem91s8jprZfZNhJgOJBbxXEB3OJThig=@vger.kernel.org X-Gm-Message-State: AOJu0YxHCMFdXqRpDSJhkwNeCGROYM03FBmCWcD/YFc2UtZ/z1Yk5iD2 K0A4HQQWtQSm24kTwtav6LQM73EQ/OnhUrB7UkfE/CwWPYuy4KXDdXSo/IJDSRaObkzJfBL2i2O p6r233lMdY09yB9019a7x8ucZvtyXRAl80R+jxWR+1ayfsrW+kNdPkvbZLYtZ53JdVZI= X-Gm-Gg: ASbGnctkmlRfk+NpWdlveRZUDXrj8O7T9FvpeCBlVTUXpNDam3+MG1BCb45ZS2CFhGw HWXIUiSlgB7D3qFNwoJrW+/RCGCLbqRsKdzgJNqCNVY2oFxG/DzVlpQq3ugCMDK8CCBw5y3fVCB jVAonQ1Qd6DCGnk2ODrnwlW/KFn4IntiMexS1dssUAMImmv7IpOnTyd186VhR90RC3YBkzH7zXf 9LnHx7Ze3K/EafOZ6/RpWzEmD+c6YuEJhIsDmFPICufmBywDhC5DfVkIu3DsiS1ohpgvKdxAr1V IPejaXEqNIxAo8lkv9KRveFcCGfyjOZX8R+6S77mhB4UCkmZdjV2zFwpNMj7xibfqLT3vjYhUsD UrY3sHX2BlqX+aKCP1rPj9frKa3KcFdV9db2RTGCuF7OR1Iox0x6DAJgj X-Received: by 2002:a17:90b:518d:b0:312:ec:411a with SMTP id 98e67ed59e1d1-31c9e76ae7amr13793102a91.3.1753169012532; Tue, 22 Jul 2025 00:23:32 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFko6zdDLS9yGWBWKIKCenAy/9fb0yFHvW+++dTlsCyxV/jrbgXYH4ktmzFN6HzFm/3zlSHSw== X-Received: by 2002:a17:90b:518d:b0:312:ec:411a with SMTP id 98e67ed59e1d1-31c9e76ae7amr13793061a91.3.1753169012023; Tue, 22 Jul 2025 00:23:32 -0700 (PDT) Received: from sziotdisp01-gv.qualcomm.com.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-31cc3e45e6csm7490753a91.3.2025.07.22.00.23.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Jul 2025 00:23:31 -0700 (PDT) From: Xiangxu Yin Date: Tue, 22 Jul 2025 15:22:11 +0800 Subject: [PATCH v2 10/13] phy: qcom: qmp-usbc: Track PHYs for standalone DP/USB3.0 handling Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250722-add-displayport-support-for-qcs615-platform-v2-10-42b4037171f8@oss.qualcomm.com> References: <20250722-add-displayport-support-for-qcs615-platform-v2-0-42b4037171f8@oss.qualcomm.com> In-Reply-To: <20250722-add-displayport-support-for-qcs615-platform-v2-0-42b4037171f8@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Kuogee Hsieh , Vinod Koul , Kishon Vijay Abraham I Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, dmitry.baryshkov@oss.qualcomm.com, konrad.dybcio@oss.qualcomm.com, fange.zhang@oss.qualcomm.com, quic_lliu6@quicinc.com, quic_yongmou@quicinc.com, Xiangxu Yin X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1753168938; l=4083; i=xiangxu.yin@oss.qualcomm.com; s=20241125; h=from:subject:message-id; bh=x52wj5u+rb6dbB9m5Z9EVaM2Qq3LqnWRHa5RdOZnzXM=; b=htKC4pfBN+sR8v9mfOnbuVOX4GlHHUEvwakJuhy6tTezZjlR8N3uaHroW6IAc7yy0WQJgl5V7 Q7hKjifp+bVBs2A+gPwSVkicyslpzb5ZWiQa7F77q4VpAWJJKTjDhlO X-Developer-Key: i=xiangxu.yin@oss.qualcomm.com; a=ed25519; pk=F1TwipJzpywfbt3n/RPi4l/A4AVF+QC89XzCHgZYaOc= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzIyMDA1OSBTYWx0ZWRfX+O4umfDAWnPJ XQUi7sAuqgQ551b07zyNEpJR4eLrDy8rkX7XR6XcTJELdNL6Z4tDVKACTBX+PhhyiLz2odVnbHm y/64G9Khdm3ge6C7OdsnNiXKWdGEWySb1Y/27lTSgcrqbqgpOUXI8/BIgnt0/gsCaOKE/3J8Or/ MZITbFJPnHAGdDCRfUmjtS8oi1fH4lmztZfh8UAEZIRCO4TniNDkQryKkaxTb127MTIgOGyoTMR MC+DXYH8jET8qV3Zr6WIv1Ngf7LV0Db3qWwViNx+oKZVkvbRo4zjwPLM7wNgPy8A5Gt29hdbJYS 49VbDdVWMUfM7ZPZSaTGsL/dwIhI+5qpDzCV3lMFpKKMWDb5Z/a0y+qOIoAoW3lg1NN8G1s2xjp q2GnrcqM/LooYJ/0JhmV2nURuuxIaaHpPT2FrOXVmqatIFEQGFD7TyvJy8st0J88RD9poaWr X-Proofpoint-ORIG-GUID: MAiDpPsb-rRkBcAF0QFQWM7P9yzKNJSt X-Proofpoint-GUID: MAiDpPsb-rRkBcAF0QFQWM7P9yzKNJSt X-Authority-Analysis: v=2.4 cv=OPUn3TaB c=1 sm=1 tr=0 ts=687f3c76 cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=Wb1JkmetP80A:10 a=EUspDBNiAAAA:8 a=vLThFRzmIc36aVVRt4AA:9 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 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-07-22_01,2025-07-21_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015 mlxlogscore=999 lowpriorityscore=0 suspectscore=0 spamscore=0 mlxscore=0 bulkscore=0 priorityscore=1501 phishscore=0 malwarescore=0 impostorscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507220059 Introduce a local list to track registered PHY instances, enabling identification of standalone DP and USB3.0 PHYs that share the same TCSR region. This allows the driver to detect and manage mutually exclusive PHYs at runtime, preventing configuration conflicts when both PHYs are present on the same platform but operate independently. Signed-off-by: Xiangxu Yin --- drivers/phy/qualcomm/phy-qcom-qmp-usbc.c | 51 ++++++++++++++++++++++++++++= ++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-usbc.c b/drivers/phy/qualcom= m/phy-qcom-qmp-usbc.c index 6291298904de9717283e59f1ca2a845b46146d52..e97a206a10554b2d157d1fadd66= d66386eec6c40 100644 --- a/drivers/phy/qualcomm/phy-qcom-qmp-usbc.c +++ b/drivers/phy/qualcomm/phy-qcom-qmp-usbc.c @@ -514,8 +514,13 @@ struct qmp_usbc { u32 dp_phy_mode_reg; =20 struct typec_switch_dev *sw; + + struct list_head list; }; =20 +static LIST_HEAD(phy_list); +static DEFINE_MUTEX(phy_list_mutex); + static inline void qphy_setbits(void __iomem *base, u32 offset, u32 val) { u32 reg; @@ -1107,6 +1112,25 @@ static int qmp_usbc_usb_power_off(struct phy *phy) return 0; } =20 +static int qmp_check_mutex_phy(struct qmp_usbc *qmp) +{ + struct qmp_usbc *mutex_qmp =3D NULL; + + mutex_lock(&phy_list_mutex); + list_for_each_entry(mutex_qmp, &phy_list, list) { + if (qmp->type !=3D mutex_qmp->type && + mutex_qmp->dp_phy_mode_reg =3D=3D qmp->dp_phy_mode_reg && + mutex_qmp->init_count > 0) { + dev_info(qmp->dev, "Mutex phy busy!\n"); + mutex_unlock(&phy_list_mutex); + return -EBUSY; + } + } + mutex_unlock(&phy_list_mutex); + + return 0; +} + static int qmp_usbc_usb_enable(struct phy *phy) { struct qmp_usbc *qmp =3D phy_get_drvdata(phy); @@ -1114,6 +1138,10 @@ static int qmp_usbc_usb_enable(struct phy *phy) =20 mutex_lock(&qmp->phy_mutex); =20 + ret =3D qmp_check_mutex_phy(qmp); + if (ret) + goto out_unlock; + ret =3D qmp_usbc_generic_init(phy); if (ret) goto out_unlock; @@ -1166,6 +1194,10 @@ static int qmp_usbc_dp_enable(struct phy *phy) =20 mutex_lock(&qmp->phy_mutex); =20 + ret =3D qmp_check_mutex_phy(qmp); + if (ret) + goto dp_init_unlock; + ret =3D qmp_usbc_generic_init(phy); if (ret) { dev_err(qmp->dev, "type(%d) com_init fail\n", qmp->type); @@ -1772,15 +1804,16 @@ static int qmp_usbc_parse_usb_dt(struct qmp_usbc *q= mp) return 0; } =20 -static int qmp_usbc_parse_vls_clamp(struct qmp_usbc *qmp) +static int qmp_usbc_parse_usb_tcsr(struct qmp_usbc *qmp) { struct of_phandle_args tcsr_args; struct device *dev =3D qmp->dev; int ret; =20 - /* for backwards compatibility ignore if there is no property */ + /* for backwards compatibility ignore if there is 1 or no property */ ret =3D of_parse_phandle_with_fixed_args(dev->of_node, "qcom,tcsr-reg", 1= , 0, &tcsr_args); + if (ret =3D=3D -ENOENT) return 0; else if (ret < 0) @@ -1793,6 +1826,13 @@ static int qmp_usbc_parse_vls_clamp(struct qmp_usbc = *qmp) =20 qmp->vls_clamp_reg =3D tcsr_args.args[0]; =20 + ret =3D of_parse_phandle_with_fixed_args(dev->of_node, "qcom,tcsr-reg", 1= , 1, + &tcsr_args); + if (ret =3D=3D -ENOENT) + return 0; + + qmp->dp_phy_mode_reg =3D tcsr_args.args[0]; + return 0; } =20 @@ -2051,6 +2091,7 @@ static int qmp_usbc_probe(struct platform_device *pde= v) return -EINVAL; =20 mutex_init(&qmp->phy_mutex); + INIT_LIST_HEAD(&qmp->list); =20 qmp->type =3D data_cfg->type; qmp->cfg =3D data_cfg->cfg; @@ -2064,7 +2105,7 @@ static int qmp_usbc_probe(struct platform_device *pde= v) if (!qmp->layout) return -ENOMEM; =20 - ret =3D qmp_usbc_parse_vls_clamp(qmp); + ret =3D qmp_usbc_parse_usb_tcsr(qmp); if (ret) return ret; =20 @@ -2139,6 +2180,10 @@ static int qmp_usbc_probe(struct platform_device *pd= ev) } } =20 + mutex_lock(&phy_list_mutex); + list_add_tail(&qmp->list, &phy_list); + mutex_unlock(&phy_list_mutex); + phy_set_drvdata(qmp->phy, qmp); =20 of_node_put(np); --=20 2.34.1