From nobody Sat Sep 26 20:29:07 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 DFDDF351C06 for ; Mon, 31 Aug 2026 03:01:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145313; cv=none; b=HI+ZyuC13gxSmsS3e7/nrKj3dQRzf/TZajCkPY3EuYHJM5EMyarZrS6yGb1PY+/XuL+/jF/QtbkhuzsSlwUo3a4NHTpliqgARxSqIgl3jqbHsFjopP9OXU9KWMa0Oo0Ko80/EmzpAFFfqhXdCfIGpNecLMnJw8fiSPtUs2qeTuM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145313; c=relaxed/simple; bh=iWIKG0GsxJ37P8HUU/8Um+QELLwdikK/1FiCSUl8mYU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=hH+h1ztxFqTOaLK9LVFF2/pHOpDSxTVrYRtdVVeQlEHE2w5ynWeMEeIpnw3mjc2nSo1AlpAwIKAmWTjSHXcaue2Tx+dLRHiqRADv62kPiiPyXxhRyjrJ78eOdlQtZwJEAr4LUyQfXGyyq46ZF/hVI6i81NXARKw2hKC+Ric1PS0= 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=pfvXYaml; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=eL+wbcgS; arc=none smtp.client-ip=205.220.168.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="pfvXYaml"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="eL+wbcgS" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67V1bV6u2179632 for ; Mon, 31 Aug 2026 03:01:51 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=aWYKs7l6+KL Di2n39qvOHhp68UV5V4YMkiiC01L1WMc=; b=pfvXYamlRMnG3qIWKlLQ5TRkpbL Oa90EyscGEd59WvIwmhkM33ImEYeWJVWZDj10VsZA7rU6kcCeboCfqcj4/oL9PqA hsE/nRBM7TG12wyNkXUL7S3+M+Cc/yWkWbx0h4Ox3HQN+BXEVn8XfJEGXMlo8qP7 25HzjD+rh62Sere2GSLtMLxapjZllEHNV7IZ9F63D3mE9BuuMDIFo7AxmdomTz06 OU2PW1AUmnALJk0DSM3P4bxW6+UfCG9S+GLtLLwUoV3ptsN3D/XGpbbGIAuPuAYn J2MvQHDv/dJGJM2gT4WKEhFbKdHl/yMH6oMcqTK+klvgASZ+LjK+TeFZgBg== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gbqn2m9jg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 31 Aug 2026 03:01:51 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cc6dd43737so60927815ad.2 for ; Sun, 30 Aug 2026 20:01:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788145310; x=1788750110; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=aWYKs7l6+KLDi2n39qvOHhp68UV5V4YMkiiC01L1WMc=; b=eL+wbcgSZGFR96j9mxmC2MTpuILOxJgaeOW31INURJAmimbWQDtea2f7s1AnXaiy/Q CMzQ0+aDQ3n1tYuF9QgwGt0bcduIMazE331qoKYYYjeCjib/DsTmGOPOQKy7zS7VbAWE PH8aUXJzHrV+E6jj4aWTLGiXJg2SxhmXli5cWX6VffPSZ9mSu6naLdFJPzd/3scDrhGC iFfyjeVg1l54wbAWNgKoLpRyO4KtjaAc8rvMLQ8S9akUSHENa/xx0FwMJMhAiS2Q4QAe omqebczFKPsGP6iVMRoCBYDhVrNKQ0fYAQMcz/j13Zb1A9JJ6IFTOORG4UWBcytuUV3p riQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788145310; x=1788750110; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=aWYKs7l6+KLDi2n39qvOHhp68UV5V4YMkiiC01L1WMc=; b=kZzDqwDI+A8fNAhy18WZiY0BBrp2n+Njh0ZEUZv21PsF5+4P1su9UcfZK1fEaM2R5Q JIj/j892y7v+zwg0IcCGthZre1yAyH1IRLizkgP5GUADPYKwpiJK4eQ4BKs+vrFnGxhc fC+QwU1aFO+zfupJ4vEtbzE/Ft4M9vqkWB5sFpv2lGKVv1MuAIS4KoiaPmU3kynK1aB6 z/U/C7leiDJjGrz0+xY/lDnAyfRTjv8ZqVHxUPPvg/vx+XB77OCbZQId20k9yn/g9Xpz 5KeGBfVniJuHgLTnBIz/1NdifXjh1V/qAVBxUmzTWS1ItYmHP7QuEvJns1SBccnvO0Ux ppVg== X-Forwarded-Encrypted: i=1; AKwUvByZMdwcJZ11iJ45YtcTEAr483NuuxZTbwB5Btu1O/9gNLywbyF650GekKqgC/FaTT/f+zwCrA8ELGaRlJo=@vger.kernel.org X-Gm-Message-State: AFuF++npj6Lt54PkiWilx0uUUDFonPMZJnZLxWQeqSqk4GSsfaW1xgQI 1l7BruV5ZgvNl/WpuJMcEvvs6d3SQHkbSTe9I/kOnH+PAV3zwMabNz4mfGQVQKrXIIoP9CEwtUq ehLwUj0a2qgrEGkI5c3bxEXyQLaw5SqTcjLSC7SN6qeWYrtdEdhxLEo1H85aIJeYY9EJKmljnEY o= X-Gm-Gg: AYBFou0cjqUhqeehIQDZNPJzxNGVqJokTsty95gWdPFma4htUVdEqPoeJEkgDbBoyoe ixPO556ObQ4KURTq4bC/NRk4Rvx17x6QX7zSjG6e0GIzt+RDydDT3PgKvhxRrmotK3T15iwt2xT 9tht2Kp7FEDyOYYpLrp2n4Z+K6437PE+BD9fwzgcEwKtFlGGs4TzbkBoZGefXXUF/l7+67CWYNt gCga2MS5VJHu2U9jd/MHLQ06HQb09jwpczWvxBM8HU9ul3D6q6GJ4GLRxrVsqhayUkEk/id52M8 /VPP64kWjfAeBzZ7lEVAkWcL7eK/Rml7UXELxzwlqIRlYuWYr1zdYRjn5IAGmwRhcXUraAPvafq W7Ru9onpWndvwt7Ph2dNwlnR1QusOCTO//Q7JYPAZxi/znZ1CFM1+bQ== X-Received: by 2002:a17:902:ce8d:b0:2d8:d4cc:be63 with SMTP id d9443c01a7336-2d93fa2fc9bmr5106915ad.16.1788145310322; Sun, 30 Aug 2026 20:01:50 -0700 (PDT) X-Received: by 2002:a17:902:ce8d:b0:2d8:d4cc:be63 with SMTP id d9443c01a7336-2d93fa2fc9bmr5106315ad.16.1788145309878; Sun, 30 Aug 2026 20:01:49 -0700 (PDT) Received: from hu-eserrao-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f7bc825sm30011973eec.9.2026.08.30.20.01.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 20:01:49 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , Dmitry Baryshkov , Greg Kroah-Hartman , Konrad Dybcio , Krzysztof Kozlowski , Rob Herring Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski Subject: [PATCH v7 1/8] dt-bindings: soc: qcom: eud: Add per-path child nodes for UTMI routing Date: Sun, 30 Aug 2026 20:01:40 -0700 Message-Id: <20260831030147.1500616-2-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.com> References: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.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-Proofpoint-ORIG-GUID: zpYGPXZQQergvoT99kxd-rCbThBv8QZQ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX4Oq2qGZH2Mw+ giU5UjRDn5X1EfDc0xmThWS9buLnpVKJzZmxHGjNajrNEI3f+4mqBSFnyeHlVBin9b9+P3CdcXK NuJfp4chlMqeQzl292KrrbVPb8IxNK/N2gUlIGH5bPELVVVckCfndzCJJ11oVRJVROrQBVxMex/ wo406TLoceSzOt4TWRZ9o/tb66wKl2fF/JVqkG37LJ0a+R4eWY2KkINCfin0/Wa91nzQy2YVGdt 5wfGI7BZUhLuXUh+RS2nZ2nv/v+Q1As+E/65DQr+1ZOs5cC58eYV7VRmc7bMTJIxQHFtLj01OGK 1zZhpOHUcS8EWJJpKPEqlXund8I+ZX1rFCVKDIs6O97z2dELSz2XVzn7etmpDn5PvBTAwax3Upo ArwzR6Q1qkUVr+v9b9w/3snslFdioLdgij5HcSpsbFi8QwAjZtWF0um+Z+Bc/7ddWUQK4HXLngB V1NqCtJAyGJnHFWluzA== X-Proofpoint-GUID: zpYGPXZQQergvoT99kxd-rCbThBv8QZQ X-Proofpoint-Spam-Info: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX1tGm12jhu/f/ fWIW8vFttQgBQ1ZDNdgmdend9T0/+k0wdMrqFiRDy+EJNkHZvkfK7e/5n+h8UBaq6XgELxntGF4 v2BltWgMxn2jhCVmB+j6qPLKVl+ijnQ= X-Authority-Analysis: v=2.4 cv=a5kAM0SF c=1 sm=1 tr=0 ts=6a94ee9f cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=RJ9lep_nkaVUh_m6BXgA:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-31_01,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 bulkscore=0 malwarescore=0 phishscore=0 clxscore=1015 adultscore=0 priorityscore=1501 spamscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608310024 Content-Type: text/plain; charset="utf-8" The Qualcomm Embedded USB Debugger (EUD) can intercept one or two High-Speed UTMI paths depending on the SoC. For example, SC7280 supports EUD on the primary UTMI path only, while SM8350 supports EUD on both primary and secondary UTMI paths. Each UTMI path connects an independent USB controller/connector pair and forms its own role-switch domain. EUD routes traffic based on USB role. In device role the debug hub is inserted, while in host role it is bypassed. The existing binding models EUD using a flattened ports representation. While sufficient for fixed device-role configurations, it cannot naturally associate a controller, connector, and role switch with a specific EUD-routable path. This is problematic for role-switch capable ports and becomes more pronounced on SoCs with multiple paths. In such cases, each path forms an independent role-switch domain and requires per-path role awareness. Model each UTMI path as a separate child node with its own OF graph. This representation is used for role-aware EUD routing regardless of whether a SoC exposes one or two UTMI paths. Add an SM8350 compatible for dual-path EUD topologies. Retain support for the legacy flat ports representation on SC7280 for backward compatibility. Reviewed-by: Krzysztof Kozlowski Signed-off-by: Elson Serrao Acked-by: Bjorn Andersson --- .../bindings/soc/qcom/qcom,eud.yaml | 134 +++++++++++++++++- 1 file changed, 133 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,eud.yaml b/Doc= umentation/devicetree/bindings/soc/qcom/qcom,eud.yaml index 84218636c0d8..c377a77d623c 100644 --- a/Documentation/devicetree/bindings/soc/qcom/qcom,eud.yaml +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,eud.yaml @@ -18,6 +18,7 @@ properties: items: - enum: - qcom,sc7280-eud + - qcom,sm8350-eud - const: qcom,eud =20 reg: @@ -45,10 +46,88 @@ properties: $ref: /schemas/graph.yaml#/properties/port description: This port is to be attached to the type C connector. =20 + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + +patternProperties: + "^eud-path@[0-1]$": + type: object + description: + Represents one High-Speed UTMI path that EUD intercepts. Use eud-pat= h nodes + to associate role-switching behavior with specific port connections,= allowing + EUD to manage role transitions independently for each UTMI path. + + properties: + reg: + maxItems: 1 + description: Path number + + usb-role-switch: + type: boolean + description: + Indicates that EUD relays USB role-switch events for this path a= nd + performs role-dependent UTMI routing accordingly. In device role, + the EUD hub is inserted into this path to enable debug + functionality. In host role, the EUD hub is bypassed and UTMI + traffic flows directly between the PHY and the USB controller. + + ports: + $ref: /schemas/graph.yaml#/properties/ports + description: + These ports are to be attached to the endpoint of the USB contro= ller node + and USB connector node. + + properties: + port@0: + $ref: /schemas/graph.yaml#/properties/port + description: This port is to be attached to the USB controller. + + port@1: + $ref: /schemas/graph.yaml#/properties/port + description: This port is to be attached to the USB connector. + + required: + - reg + - ports + + additionalProperties: false + required: - compatible - reg - - ports + +allOf: + - if: + properties: + compatible: + contains: + const: qcom,sc7280-eud + then: + oneOf: + - required: + - ports + properties: + eud-path@0: false + eud-path@1: false + - required: + - eud-path@0 + properties: + ports: false + eud-path@1: false + - if: + properties: + compatible: + contains: + const: qcom,sm8350-eud + then: + required: + - eud-path@0 + - eud-path@1 + properties: + ports: false =20 additionalProperties: false =20 @@ -77,3 +156,56 @@ examples: }; }; }; + - | + eud@88e0000 { + compatible =3D "qcom,sm8350-eud", "qcom,eud"; + reg =3D <0x88e0000 0x2000>, + <0x88e2000 0x1000>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + eud-path@0 { + reg =3D <0>; + usb-role-switch; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + port@0 { + reg =3D <0>; + eud_usb0: endpoint { + remote-endpoint =3D <&usb_1_dwc3_hs>; + }; + }; + + port@1 { + reg =3D <1>; + eud_con0: endpoint { + remote-endpoint =3D <&pmic_glink_hs_in>; + }; + }; + }; + }; + + eud-path@1 { + reg =3D <1>; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + port@0 { + reg =3D <0>; + eud_usb1: endpoint { + remote-endpoint =3D <&usb_2_dwc3_hs>; + }; + }; + + port@1 { + reg =3D <1>; + eud_con1: endpoint { + remote-endpoint =3D <&conn_2_hs_in>; + }; + }; + }; + }; + }; --=20 2.34.1 From nobody Sat Sep 26 20:29:07 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 0635337646E for ; Mon, 31 Aug 2026 03:01:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145314; cv=none; b=sKgba+in8W4r0/Wd/4p1Q5twByDt1G+w9EUxu9VQAnDNzOHX8xW6hQxWkA5ZWXgeC895ltdYJjJbR8L7mNWeuFChGtmIhWOBsjYvHsU4A+Op7CvGaTKpBpT99f4F6JlvwWWwsR2u7J6p33u66a5ewJLDMLuTiakFXrVMLhBrRVY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145314; c=relaxed/simple; bh=ldhObfEr4z0Xrekc9qI5UQO3v16oHY3sXmgjk69PNKU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=JVUpZpDV5DlzU0FTa4p4IovWzOhUtH6ftWeksDBp80e88nGcf0WhOR3G+lsR8jbX9htS0bHoQAlXuOGS9xZVwf0PZgqdzW55GczNbdKhkuvC1qGddDOozOwU9ZJ6eZJhF3+/2x2mcO0UXXa8757kemCMOjeuhpXdBMyDCDweh58= 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=dN2WzrZJ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=fRg3lup+; arc=none smtp.client-ip=205.220.168.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="dN2WzrZJ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="fRg3lup+" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67V1bNfS1496273 for ; Mon, 31 Aug 2026 03:01:52 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=nvOjwEmlXGk kLlIdjY1MOSExUXg8PKOSC1XZVD1rwvw=; b=dN2WzrZJp3M1uhzQzoTNtKHu0x2 Iy6JEv8AQoyB0mf5+q3Q7T9qGPEjSXeiL3Bp9EDa8V4t1Zj7FF8t4N2bb+A3QuNE qOAN4rNYpFi97HSiRhMnbWN1+B7ITZYX2LddaykF13xOTrvsFBtKwoKugziqfF2A YwY7pGLT9Y1LmpwTAAM6VD6P7P+V5BwpvajM/jSrwHviza/ac+F1PcLYdSRacLpM p8surQx9+uDCEQWj0ffiyBEWCG8zOP6aWXkivmoNeMhdzBX6hOdteeq16xiZKFrU JbVLtj+mTWJHTM6PY2WTroZAmdwNBIjPsEdyGibQxEXkrWSbsbsgk87SS9g== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gbrq844m2-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 31 Aug 2026 03:01:51 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2cc73f47bdcso35950715ad.3 for ; Sun, 30 Aug 2026 20:01:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788145311; x=1788750111; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=nvOjwEmlXGkkLlIdjY1MOSExUXg8PKOSC1XZVD1rwvw=; b=fRg3lup+oCEjKSusD8QB1bFkFCzBgr5w4Jlxumhs3A89CutduiOvQ+xldd2b0GnmJz vswHAKiqxLaSmcrUJ8WzezCd+ZBOj1CBwK8FAPKdiwL2KWLGvD3+nD5heDHhBClLNlP2 5dnjdKQs6ez9+9rO9fBGC/7GpYMwU/PDfSkz0Puln2grXhrMxwPUVr8zoix8J3IGuUl7 s32I8bjgs29flIFksx44CQak2l4uF8fs9w/FgfbmQxSHwp1AXFJew4BCzuQo89B6UFoZ mSMZBlyx7v1YB8RnOqKbAn2p2sykH+GG/TOzkbq6wl9CtOEputmeWTyqWAC45dC6fToj rtXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788145311; x=1788750111; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=nvOjwEmlXGkkLlIdjY1MOSExUXg8PKOSC1XZVD1rwvw=; b=WHcfNtFV6/1nN3l/SaUv2aml2EYyDcy6bKYAL8UnYF5HMdE6JOn3GheCXbgNxQAx74 PCRZ+lagTpYx5k0xutj2HHHQM7eGdN0005hT+cVscFgZ7ALHZSidcK/+KT92BS+fhF94 pb83M/VOF3aqJiz0wmm7zSDvwdiifSnbmCFNK4Y/l4JGiSczVD0UJ+885toO1TSibOZb okVuLIL3qFmLeivtJ+aDt8hyNsXIWU6yJf9B8IWRbXPR6kczRjbfPuLFogttqVWaSKXC ak9pGEbCq7xJiwKLzuI0fVg2lciIypiW4gra4BR06aeBriJc0A/BZChPBlAR/7C3qPr6 Pc3w== X-Forwarded-Encrypted: i=1; AKwUvBwoHYRU0mG8GV2RcxeeS92flmsYUHvb0YMMONDyn8GnIuIihfohcCP7X73gTBhoWO0REm3A8mt/xC2vteM=@vger.kernel.org X-Gm-Message-State: AFuF++lEb8ZJ9CGUPs/ar9HFymGP/8WMgkE/NtxaUXUYOu9zdkoaOmKB 8anH/hxriPc+J9ggphWhur6sWFqcnQf1Mh8Ie4LzopLUQzr9CpwOJ6E+VjRxRpjGahrYi36tmvQ fVCa9Sps91WdDRDuRiBLK0bn/dxOfF1gBnf2EOIeMSAQIvoUtmAGvPJiV2JtI0VbI7E8= X-Gm-Gg: AYBFou3Uy2KngPUoZxBaMEvRnHKGYTS30jE54xyr65GYUd/+HGUFWpArRJgrnla8sy3 E1F9E1yhuhEpvPd3i6f16N6GIIWrq5nkr6q6TNUx309C7b+30H8FVWFxvf4WhwbY9BknY5D1Hox VXTGi2TZcYQ40Yt0SKlzrYQKLV9ho1BSQApEw0WMntVyTgY9Uf/zz004oFBdRH1AENpGOsb0G0q 2+aisjlRE4s+Wlp/ahliGN2ACScePaEsDamFRjLAvVOJJV2f5phWTghvwBn3w5mpZyZLMKBEPOu MSpq0xXp9TaJMN+dWl7W9km77svjlhzC6839XzFzCIeSpWwtgyuYme3C7tCrZR9YWIzGi+4Nkb3 HDkfjl/fSfmMvu8mr3s5vM0X04GYiWkhYUqvY6L+PwXIHsh9jwynM0g== X-Received: by 2002:a17:902:d4c7:b0:2d8:d4d3:da51 with SMTP id d9443c01a7336-2d93fa47634mr5176155ad.21.1788145311311; Sun, 30 Aug 2026 20:01:51 -0700 (PDT) X-Received: by 2002:a17:902:d4c7:b0:2d8:d4d3:da51 with SMTP id d9443c01a7336-2d93fa47634mr5175235ad.21.1788145310807; Sun, 30 Aug 2026 20:01:50 -0700 (PDT) Received: from hu-eserrao-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f7bc825sm30011973eec.9.2026.08.30.20.01.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 20:01:50 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , Dmitry Baryshkov , Greg Kroah-Hartman , Konrad Dybcio , Krzysztof Kozlowski , Rob Herring Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Peter Chen , Konrad Dybcio Subject: [PATCH v7 2/8] usb: misc: qcom_eud: add sysfs attribute for port selection Date: Sun, 30 Aug 2026 20:01:41 -0700 Message-Id: <20260831030147.1500616-3-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.com> References: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.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-Proofpoint-GUID: snKXQLAwAeEDGSHI_b39rifFd7DNZFvM X-Proofpoint-Spam-Info: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX962mcMx6On8u ROQP6LQG94kpN/GaA3CRU1qkflunAWmg6KATONfbmYFo+B76SWINi13HGF3Ay8AFIyo0yzxKsqJ JLNeO9GdgTDwmCJrTv/PRM3eYDR8YZw= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX/vbUeSh9V5f6 0ciYhPjry8bO0iUUo5mfUWlYnkYvh0sZ5yAS+1K35d4706mjmX8h6mq96tfZYAS2ClUYqIjeIF4 Yeyt1OsatZm1LgL02J7DDrEyiojcgOqzEghpvDZQ7ca/IVNR+ulxkMV9320Hn6dWILqDa0dbo+X p2KKIsRc/m5Tep8kcefG7VKfSOp49JeRZn+mOTNUPhqvsvETe5Ob8LuWN+gYr2V0cWYaALp1ZHc JYguqsGqn9Mz9z4vkrJSwj5Gx2wMZ9nm05rRWdKfOlYZcF/fv/3vIWLNg9d75ey2I1Q3nuwZgVB SJOtL1QdjPtCd+6hGN7p7T02YytG4AXUup+wm165m4O/WTLEwVUmC3mGWJDxVHvveRN6PifjtnP aAcDK6rqLWfn4JyakFrTgtFdIwDPLnLw5tpN+KT5hspwZ8wXhEMh6BJxwqyptPLH1S3yltvygt7 +9pLjVGoa1yITLvr7cQ== X-Authority-Analysis: v=2.4 cv=ZOPnX37b c=1 sm=1 tr=0 ts=6a94eea0 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=qXh0dugIJu6lbCvlF8UA:9 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-ORIG-GUID: snKXQLAwAeEDGSHI_b39rifFd7DNZFvM X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-31_01,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 adultscore=0 bulkscore=0 impostorscore=0 phishscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608310024 Content-Type: text/plain; charset="utf-8" EUD can be mapped to either the primary USB port or the secondary USB port depending on the value of the EUD_PORT_SEL register. Add a 'port' sysfs attribute to allow userspace to select which port EUD should operate on and update the ABI documentation. This is needed for systems with dual USB ports where EUD needs to be accessible on either port depending on the system configuration and use case. Reviewed-by: Peter Chen Reviewed-by: Konrad Dybcio Signed-off-by: Elson Serrao --- Documentation/ABI/testing/sysfs-driver-eud | 18 ++++++++++ drivers/usb/misc/qcom_eud.c | 39 ++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-driver-eud b/Documentation/ABI= /testing/sysfs-driver-eud index 2bab0db2d2f0..fb927a003596 100644 --- a/Documentation/ABI/testing/sysfs-driver-eud +++ b/Documentation/ABI/testing/sysfs-driver-eud @@ -7,3 +7,21 @@ Description: EUD based on a 1 or a 0 value. By enabling EUD, the user is able to activate the mini-usb hub of EUD for debug and trace capabilities. + +What: /sys/bus/platform/drivers/qcom_eud/.../port +Date: January 2026 +Contact: Elson Serrao +Description: + Selects which USB port the Embedded USB Debugger (EUD) + is mapped to on platforms providing multiple High-Speed + USB ports. + + Valid values: + primary - Primary USB port + secondary - Secondary USB port + + Writing any other value returns -EINVAL. + + The attribute is writable only while EUD is disabled. + Writing it while EUD is enabled returns -EBUSY. Reading + the attribute returns the currently selected USB port. diff --git a/drivers/usb/misc/qcom_eud.c b/drivers/usb/misc/qcom_eud.c index 926419ca560f..25a6a8f110ec 100644 --- a/drivers/usb/misc/qcom_eud.c +++ b/drivers/usb/misc/qcom_eud.c @@ -23,14 +23,22 @@ #define EUD_REG_VBUS_INT_CLR 0x0080 #define EUD_REG_CSR_EUD_EN 0x1014 #define EUD_REG_SW_ATTACH_DET 0x1018 +#define EUD_REG_PORT_SEL 0x1028 #define EUD_REG_EUD_EN2 0x0000 =20 +#define EUD_MAX_PORTS 2 + #define EUD_ENABLE BIT(0) #define EUD_INT_PET_EUD BIT(0) #define EUD_INT_VBUS BIT(2) #define EUD_INT_SAFE_MODE BIT(4) #define EUD_INT_ALL (EUD_INT_VBUS | EUD_INT_SAFE_MODE) =20 +static const char * const eud_port_names[] =3D { + "primary", + "secondary", +}; + struct eud_chip { struct device *dev; struct usb_role_switch *role_sw; @@ -40,6 +48,7 @@ struct eud_chip { int irq; bool enabled; bool usb_attached; + u8 port_idx; }; =20 static int enable_eud(struct eud_chip *priv) @@ -104,8 +113,38 @@ static ssize_t enable_store(struct device *dev, =20 static DEVICE_ATTR_RW(enable); =20 +static ssize_t port_show(struct device *dev, struct device_attribute *attr= , char *buf) +{ + struct eud_chip *chip =3D dev_get_drvdata(dev); + + return sysfs_emit(buf, "%s\n", eud_port_names[chip->port_idx]); +} + +static ssize_t port_store(struct device *dev, struct device_attribute *att= r, + const char *buf, size_t count) +{ + struct eud_chip *chip =3D dev_get_drvdata(dev); + int port; + + port =3D sysfs_match_string(eud_port_names, buf); + if (port < 0) + return port; + + /* Port selection must be done before enabling EUD */ + if (chip->enabled) + return -EBUSY; + + writel(port, chip->base + EUD_REG_PORT_SEL); + chip->port_idx =3D port; + + return count; +} + +static DEVICE_ATTR_RW(port); + static struct attribute *eud_attrs[] =3D { &dev_attr_enable.attr, + &dev_attr_port.attr, NULL, }; ATTRIBUTE_GROUPS(eud); --=20 2.34.1 From nobody Sat Sep 26 20:29:07 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 917C93AEF2E for ; Mon, 31 Aug 2026 03:01:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145316; cv=none; b=JIOa2waO8ApS6xwlVGkHnUmDbBOs0NdSR9149R9VxuOAqXJRSvfi2/8X3FH8Yk3jV+SDindcpKdCSBzMGmYjflROyWpIIOW6fIZc2m+bVfLb1NQ2Iv43AkvGCjCrJFe+9mhCZXQ3hzEVwqWp/jEf7k6GNBrKl99BUO9ni1u2VT4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145316; c=relaxed/simple; bh=R8KpCF/tj/saJ0e6s22Xksl17Y7JkdV0utje1Ij4Vt4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=bTmo8QDxUOQMoy3LfSbWiq6znl6Obdccv8P3Z6RUwnXAO7inF2m9uaf8Lf7CX2WI2gMvDvblxOJ4ywsTO43exeKPsKKmMcWt/9ni9db7081TKS227LlJD/JR4rmbV3Y+0K9V9ztdi0ay3DLKLXFirSng6WfbxRkN3JjfnJ8DVpA= 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=W35J9VtX; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=eCwug3c1; arc=none smtp.client-ip=205.220.168.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="W35J9VtX"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="eCwug3c1" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67V1bfM61010202 for ; Mon, 31 Aug 2026 03:01:53 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=7Ohy3u/9WSj jm8gEuubT6LFGULSlHd1rzPN3gs8pn8s=; b=W35J9VtX8C+IEF6/eThwpIOrULt uVSs6BOuJAbp74TUjdwkdZi+Y2G1BqQg/Oy5XfIKUwEoakvVezyUlKd2av6LzAfx I7UY81zVqoXBcNoZrVC10IopmU1A4Uo4TY1KePL0ze0ea1z3CMgCd+MoSZaJPlm9 wcicv0vsJz9v3T2kaFU+r9BvNyX1Ik15Cr27sP2r/Ku4CVjRtJ2EIUD7uhtgvSDm FAvHXB1df6LMJrazuRSkbti2QepVhIzENzQzUDQ0p28J/SxCdBPBO9BiCYWxudyG tg6v8jzbmlbW+nxfhF7kkP9nnUU+hgJUiDrARbVYoM2xxppotd84miZ84Fw== Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gbrkgv4gt-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 31 Aug 2026 03:01:53 +0000 (GMT) Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-3968dfff779so2805355a91.1 for ; Sun, 30 Aug 2026 20:01:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788145313; x=1788750113; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=7Ohy3u/9WSjjm8gEuubT6LFGULSlHd1rzPN3gs8pn8s=; b=eCwug3c1/mLue6D3SqnrOLzuIIC1N/ttIaHLrIcW9p8DddGugp7I/VjaXVhg+92D5e xwFle86wWA80Jc0GioGPzb/P7fIoMGWkKHsUUgr6+8xP7izHOQcDLV6RLU7+y3LEdYhA TvyR41tD2AzXQthGAlcIqw2/Rw9h+oopLSVX9dqGVobJ/f8iFa/h+YRNncnaLSDUM0BP Ek0mXFfUC5Y72r/gGwlubRAreO7F11UJCiPetnx9R2VY/wkWaUEb68IkdSqIT5/Fdixh evh/4IVdsn+LP2hl2r9mK7yrIng2XO3WrjNny4ehjDuMr1GDXUf1EHEyio3AJ1x3OOS3 UuiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788145313; x=1788750113; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=7Ohy3u/9WSjjm8gEuubT6LFGULSlHd1rzPN3gs8pn8s=; b=SuIZ6ErEawgWZPQac0pFAbe47F8nNMRYszmb+yMOCIV3HeUSPtzMTq8UHxdcSzidCt txBxWP4k0xaUpjsxJJHikZxupOfuHzPtfAoJxu5oUMkTABDIu9kW+cG7v9fLiT/7Ow80 h+pFlfOpfwl7O2IxJ4UTiDBJ8SysG5z9Bt4YG0sYrz8b7C+X5JoiGqqq9XWM+rq8+5l3 6u8NkiZo8FdKxaQxhWhoa4J1eUM97B3VF4lcMbhlt7l5EZL71Es/bqqCJWS2jCdO5JrY 4RCjpMGV5lQmhodwNWqO13LN5IzvO5PzPa6F6afVp+EP085s5fm9VYoGA3qd7mDh/oc0 /Fjw== X-Forwarded-Encrypted: i=1; AKwUvBxBu05lPXTyxJDTfPi9efTel6FxqDRdq6CpubEgaA6bzXFvimnP8bCChjfRwBuepDWPhY0DDDibFlL+THE=@vger.kernel.org X-Gm-Message-State: AFuF++k1iPQppn1Yq9QMiHzu0/zAjN9j3L/uSP3EFaacp8ghqXYXzs9R qx9OERekTI1SYjWUMv+w5/adczwu7WhpglXjeyhrFsZzci4mqtBuJZwov7IemqoxI2d5yT2k1N9 NfSTGqFUGVMGSqJ8S6VpfTPc5Qov+7pOG4Fx0JkqUpHyfUh7yv/M8BHah9A5/ty3fQn4= X-Gm-Gg: AYBFou2ISNXoyugRBhSNbLJc/FwDqFH8ow+3Dt9Tj0JUVQkbvaDDwJNC4AqKSrMcWRN ZUYHoTvAFR7/FUrcRBsqlhQSfQbW6DhH+BNK9NsbG83YqqQuZIgxGVKCb9tsPMzVC+q6RlQ+dTe rhXW7GqmgdmqRUptxnC5KFgq/Nte1Tq+IjBzkJW6TCMA8bHXDHUCBQy7EUO/fHZlAETLJexUPn1 1hyLv5d5VW15xJninrwyNgpazZ2YHSI08aO+ERXvN+EqIR0MoA18HpWT7pTAdARu2zIwLvU6PnD qvepdF9ZKHHkuBiQGGvti8+I4GLYSo+xB1qPpifpU9m7lwRV2gAtqiaUANBo1b3XezsT/OHqbyL luS3kl9cqI9Rra4GugC3toq1gIqWy/FmSFHjb17e9OGcjgXpbIVBtPw== X-Received: by 2002:a17:90b:3c8d:b0:395:c3f7:2895 with SMTP id 98e67ed59e1d1-398da5fcb72mr4875840a91.7.1788145312752; Sun, 30 Aug 2026 20:01:52 -0700 (PDT) X-Received: by 2002:a17:90b:3c8d:b0:395:c3f7:2895 with SMTP id 98e67ed59e1d1-398da5fcb72mr4875748a91.7.1788145312012; Sun, 30 Aug 2026 20:01:52 -0700 (PDT) Received: from hu-eserrao-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f7bc825sm30011973eec.9.2026.08.30.20.01.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 20:01:51 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , Dmitry Baryshkov , Greg Kroah-Hartman , Konrad Dybcio , Krzysztof Kozlowski , Rob Herring Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Peter Chen , Konrad Dybcio Subject: [PATCH v7 3/8] usb: misc: qcom_eud: add per-path High-Speed PHY control Date: Sun, 30 Aug 2026 20:01:42 -0700 Message-Id: <20260831030147.1500616-4-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.com> References: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.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-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX3WoOIGVuGDkR /2amWYigg4Rh1AzrEewN6e5OkEWutM+t5IxFkoaZG9vUG3EgYpjN1uVWjsVgocVxtyHNxKORNNh 5Psm4jod2GNxNDDaVOMvUne/em6fa7zRVPZBAEyMLywStytnqZ83sjStTLrccROhTwDmuVn7Tll GGskL9YEzAm4jvf+eDP7WqbpboyLUXMN1NjNBuc/T5Om5Kai8HSHfDCBeyMmfEcXYvntEYsjrRs JRvggJPG3iLSKuh4rcKF+juasOMuV1rJ6IZlJXqBtFI6VAO6c2Uyekp8vaz/8CKxilKEFxhtxaF ed3O2F2NYvEfcp5ytGmQfhmS+eXZCWHnHPMuVcPlJ/rIfAnrwh/SW8wlZnPkznmZ6c13Nx+UsiE vxe/0tS2U0h3TFNXTdQ1KuTspXNKZcmJoKB1xOgfyAr9xV2rLiUBE7MtSrbj4q2D/o0l472w5Rs lApDS22Aru+VXRSeGig== X-Proofpoint-Spam-Info: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX1vK0rQqHk5pI XiltNoQbYNT9X5sB9vmBUXNqjrOYQrzk0GyDU5lDP+FWvq8mveop3ZojiB5PqsYaTwFzZWv6iGZ GWMk5xKpLZCP0XCc+fN6ZsYRjhcPAFs= X-Proofpoint-ORIG-GUID: zg3rykfwuXRlnE6vBcA_nH2UA59vKEVz X-Authority-Analysis: v=2.4 cv=Cr6PtH4D c=1 sm=1 tr=0 ts=6a94eea1 cx=c_pps a=RP+M6JBNLl+fLTcSJhASfg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=OKkk4dbWoaB1VCfbt-4A:9 a=iS9zxrgQBfv6-_F4QbHw:22 X-Proofpoint-GUID: zg3rykfwuXRlnE6vBcA_nH2UA59vKEVz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-31_01,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 phishscore=0 bulkscore=0 adultscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608310024 Content-Type: text/plain; charset="utf-8" EUD hardware can support multiple High-Speed USB paths, each routed through its own PHY. The active path is selected in hardware via the EUD_PORT_SEL register. As a High-Speed hub, EUD requires access to the High-Speed PHY associated with the active path. To support this multi-path capability, the driver must manage PHY resources on a per-path basis, ensuring that the PHY for the currently selected path is properly initialized and powered. This patch restructures the driver to implement per-path PHY management. The driver now powers the appropriate PHY based on the selected and enabled UTMI path, ensuring correct operation when EUD is enabled. Historically, EUD appeared to work on single-path systems because the USB controller kept the PHY initialized. However, EUD is designed to operate independently of the USB controller and therefore requires explicit PHY control for proper operation. Reviewed-by: Peter Chen Reviewed-by: Konrad Dybcio Signed-off-by: Elson Serrao --- Documentation/ABI/testing/sysfs-driver-eud | 3 +- drivers/usb/misc/qcom_eud.c | 124 ++++++++++++++++++++- 2 files changed, 125 insertions(+), 2 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-driver-eud b/Documentation/ABI= /testing/sysfs-driver-eud index fb927a003596..f20b82b5a38a 100644 --- a/Documentation/ABI/testing/sysfs-driver-eud +++ b/Documentation/ABI/testing/sysfs-driver-eud @@ -20,7 +20,8 @@ Description: primary - Primary USB port secondary - Secondary USB port =20 - Writing any other value returns -EINVAL. + Writing any other value returns -EINVAL. Writing a port + not supported on the current platform returns -EOPNOTSUPP. =20 The attribute is writable only while EUD is disabled. Writing it while EUD is enabled returns -EBUSY. Reading diff --git a/drivers/usb/misc/qcom_eud.c b/drivers/usb/misc/qcom_eud.c index 25a6a8f110ec..03d1c200658c 100644 --- a/drivers/usb/misc/qcom_eud.c +++ b/drivers/usb/misc/qcom_eud.c @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include #include #include @@ -39,26 +41,84 @@ static const char * const eud_port_names[] =3D { "secondary", }; =20 +struct eud_path { + struct eud_chip *chip; + struct phy *phy; + u8 num; +}; + struct eud_chip { struct device *dev; struct usb_role_switch *role_sw; void __iomem *base; + struct eud_path *paths[EUD_MAX_PORTS]; phys_addr_t mode_mgr; unsigned int int_status; int irq; bool enabled; bool usb_attached; + bool phy_enabled; u8 port_idx; }; =20 +static int eud_phy_enable(struct eud_chip *chip) +{ + struct phy *phy; + int ret; + + if (chip->phy_enabled) + return 0; + + phy =3D chip->paths[chip->port_idx]->phy; + + ret =3D phy_init(phy); + if (ret) { + dev_err(chip->dev, "Failed to initialize USB2 PHY for port %u: %d\n", + chip->port_idx, ret); + return ret; + } + + ret =3D phy_power_on(phy); + if (ret) { + dev_err(chip->dev, "Failed to power on USB2 PHY for port %u: %d\n", + chip->port_idx, ret); + phy_exit(phy); + return ret; + } + + chip->phy_enabled =3D true; + + return 0; +} + +static void eud_phy_disable(struct eud_chip *chip) +{ + struct phy *phy; + + if (!chip->phy_enabled) + return; + + phy =3D chip->paths[chip->port_idx]->phy; + + phy_power_off(phy); + phy_exit(phy); + chip->phy_enabled =3D false; +} + static int enable_eud(struct eud_chip *priv) { int ret; =20 - ret =3D qcom_scm_io_writel(priv->mode_mgr + EUD_REG_EUD_EN2, 1); + ret =3D eud_phy_enable(priv); if (ret) return ret; =20 + ret =3D qcom_scm_io_writel(priv->mode_mgr + EUD_REG_EUD_EN2, 1); + if (ret) { + eud_phy_disable(priv); + return ret; + } + writel(EUD_ENABLE, priv->base + EUD_REG_CSR_EUD_EN); writel(EUD_INT_VBUS | EUD_INT_SAFE_MODE, priv->base + EUD_REG_INT1_EN_MASK); @@ -75,6 +135,8 @@ static int disable_eud(struct eud_chip *priv) return ret; =20 writel(0, priv->base + EUD_REG_CSR_EUD_EN); + eud_phy_disable(priv); + return 0; } =20 @@ -130,6 +192,10 @@ static ssize_t port_store(struct device *dev, struct d= evice_attribute *attr, if (port < 0) return port; =20 + /* Check if the corresponding path is available */ + if (!chip->paths[port]) + return -EOPNOTSUPP; + /* Port selection must be done before enabling EUD */ if (chip->enabled) return -EBUSY; @@ -227,8 +293,54 @@ static void eud_role_switch_release(void *data) usb_role_switch_put(chip->role_sw); } =20 +static int eud_init_path(struct eud_chip *chip, struct device_node *np) +{ + struct device_node *controller_node; + struct eud_path *path; + u32 path_num; + int ret; + + ret =3D of_property_read_u32(np, "reg", &path_num); + if (ret) { + /* Legacy DT uses 'ports' node without 'reg' property; treat as path 0 */ + if (of_node_name_eq(np, "ports")) + path_num =3D 0; + else + return dev_err_probe(chip->dev, ret, "unexpected child node '%s'\n", + np->name); + } + + if (path_num >=3D EUD_MAX_PORTS) + return dev_err_probe(chip->dev, -EINVAL, "invalid path number: %u (max %= d)\n", + path_num, EUD_MAX_PORTS - 1); + + path =3D devm_kzalloc(chip->dev, sizeof(*path), GFP_KERNEL); + if (!path) + return -ENOMEM; + + path->chip =3D chip; + path->num =3D path_num; + + controller_node =3D of_graph_get_remote_node(np, 0, -1); + if (!controller_node) + return dev_err_probe(chip->dev, -ENODEV, + "failed to get controller node for path %u\n", path_num); + + path->phy =3D devm_of_phy_get_by_index(chip->dev, controller_node, 0); + of_node_put(controller_node); + + if (IS_ERR(path->phy)) + return dev_err_probe(chip->dev, PTR_ERR(path->phy), + "failed to get PHY for path %d\n", path_num); + + chip->paths[path_num] =3D path; + + return 0; +} + static int eud_probe(struct platform_device *pdev) { + struct device_node *np =3D pdev->dev.of_node; struct eud_chip *chip; struct resource *res; int ret; @@ -239,6 +351,16 @@ static int eud_probe(struct platform_device *pdev) =20 chip->dev =3D &pdev->dev; =20 + for_each_child_of_node_scoped(np, child) { + ret =3D eud_init_path(chip, child); + if (ret) + return ret; + } + + /* Primary path is mandatory. Secondary is optional */ + if (!chip->paths[0]) + return dev_err_probe(chip->dev, -ENODEV, "primary path not found\n"); + chip->role_sw =3D usb_role_switch_get(&pdev->dev); if (IS_ERR(chip->role_sw)) return dev_err_probe(chip->dev, PTR_ERR(chip->role_sw), --=20 2.34.1 From nobody Sat Sep 26 20:29:07 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 E3B473AF65B for ; Mon, 31 Aug 2026 03:01:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145316; cv=none; b=oTJJ0km1MEMU37nOrBmPWEUJ+ISzSGWxcD6gQ0OusouwbH7lWRm966B47tLN+h+AFQSpvY14F3SAFB232QZG5tV3tMKpPn0IG9FRzuatHs74YkWvCVqUqC/rIo7fZUIXgJiZWPpm1HJ9d6yl3ANeW5z3ARAfde6NLBY2HOvdC68= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145316; c=relaxed/simple; bh=OleKFQ3nFPTvbQVvEfoYRzbPaXY2iSygWgPBtMcL4gU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=JNckDC0YLZvhlUmCo7zloXoehb8GNNEKBAFdVXOaGevs+KEUpwvfAfi3UCTZtE9BelG+NZkOcLUrNyCaogLMcD7R/PIEJd+XHNB8Ui79S1LN3NnkoX2+aAN+bybiwlORnNWX+yPjZUYYNFlxLjQ/2EaLIVdu9wPXlUm+SZkPpWk= 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=KxOtVUOv; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=X5/kDv4K; arc=none smtp.client-ip=205.220.168.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="KxOtVUOv"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="X5/kDv4K" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67V1bUOh2819936 for ; Mon, 31 Aug 2026 03:01:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=XSONNlxqzGS nred13ZjZPjtjOkQ6ypl/A3ljwR4Mbqw=; b=KxOtVUOvJECthAKRZIVk8sLYms9 01p29ABE33ZuZ/Xwsb0D3UrkLp1d2PvFZy1fMRsMA5e9gon/AXYWh3Vb5wzhR/o2 ixG+BlWbHLz94uaDI+6DSanhDmZ+b6ji0+YK4SDHjlioUjvQe6bu0PgltqwF1nIA Agqp1FHLK3D91IP+dE+qKMLkXrnXlTj+KrnBaHvfhrfELrc3bOfbxZVikR7gQLs7 gT3irkK0B8XtbGhAANPNW1k+hnK5ecLOsXdwY4kAv+YtToAWJ25tEknkvAhw/Rtt Y7S1fCIvhwmn6tfVb/xdSK+NkTWFQnayqWj41+QmFW3LcPo5TP0dHk8dEHg== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gbqdfma47-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 31 Aug 2026 03:01:54 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2d6f80c76e6so48519595ad.3 for ; Sun, 30 Aug 2026 20:01:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788145313; x=1788750113; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=XSONNlxqzGSnred13ZjZPjtjOkQ6ypl/A3ljwR4Mbqw=; b=X5/kDv4KnYd0XwYbae+pwEuQvJjCbS+o/bTKxA49LOxycvbXL0FtR4LKXDk0RWHnkF U8iLHp0vH8F4ZCU294CJJ+jq4I7JYfk4zXbPRqAI2vXSW06MrNAsmDy3SXLnIv+LrRW7 7+yMyfh+EcjUG3Frwe/20P+UfZd7wCNiyVbhgTN7ag6tkKGFvv5ttB06ia8sZH6+3WWl zF53qZJ2MQe3yVjaAp1/GhrCDB6tMnVuy4tMhFd4ScdyDC0kWtkG+mO/YHfXYSJ4be3O 7feEsAmj8YIp3kG8ChYf7fAmQltF8lxEXs35SCaJRE9BpuvuNm//jHInS0qb1sYzVjKA nEEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788145313; x=1788750113; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=XSONNlxqzGSnred13ZjZPjtjOkQ6ypl/A3ljwR4Mbqw=; b=CXH3j4dA8PlELpJaXZMlgM3oDWZDdv4fcpZ13DxLOMBunNb2tpU3EaLqRwpNziQB0K xAT2BnT7aGWNX365cnzqGW5SfAQkBHpEEZAzB4y7vjzPHBmfGEPqsVQP0EfW0IRycasJ ttGzbroL+hv2H61gWJz5WC5Qg5QS7w3cY8TfptzCE+1hgX6t7mVZbg4SLgJiSQmigAec eidFZymJnvrsKh8aYLlVuDaXu+WeJEVSq4CDw8KeYFbzyLudZEIhN8vP6Xmi8XVav/k2 XkHNuliDYFl4rzq/oNibkDbVc6nyGaAYrXGFrBQs3byr45KIPNhn2YVybvY6ybgZdAcE Q6ew== X-Forwarded-Encrypted: i=1; AKwUvBxxLdFWpeH34DSOfV25mUoVKLFiOmadSLfci+3jhMESoPAoLDT3CZZ6rQ/kSSaQm53EOwvbhOmJyvqZSLY=@vger.kernel.org X-Gm-Message-State: AFuF++mkgxDxsPIU/d2mCxa/rAOQb+p14IF8iPebEfIFprrqiHgMKsa3 PE04TM+7LWqw/aO2DeB7mB6uuWbEZZ5Q3461XmefPuTEo6QdySjGTIC5jgRwMzTIoStDlZ1j1Rw T9AhXyIMJ9wmJqULaUvAVmCwGTI+RvDRXbirGYqBOea9rz3j8IDp2c7jIKh4lJ6QnlX4= X-Gm-Gg: AYBFou1vdCtQZwm5BPKi/peH5FqAls3bQf01uyFh+zrvY4x5NzXSi1jfFM5u9oqzmsS fr2fiDxZuJlBjtP++JI6ZweFtZ9tbajiFMWPmmYuHzpik62xaqbHK/wmdccKekfoZ2I12DBtPq0 KouFpZfS41cI61LHvud/pMkOvH9C2QyrAxw7sC7CHfyZhI0iQw+LHGP6+9kOAOjfa1COMzH6eQq G1uUW6SK5xs94Ky7ybGtM4t4wGPxjMh6MYNyB/NMWjQDGOR4S42ANQ0tiIqAtW0BKZebzP3kg+7 Wgb9iJ5lgWF6fluAEuzDjSU5JEO326zL3Txq8DCj6Ot+yhxoyfdGgGcIatIbcH6YiSAEI+jtqyT pmKTjbMQvOTypRyYNVikRC4CwoC7kReDceZZb/FmDkQv055hoZH0EtA== X-Received: by 2002:a17:902:c40b:b0:2d9:123c:8c49 with SMTP id d9443c01a7336-2d93fa0c365mr4501975ad.14.1788145313387; Sun, 30 Aug 2026 20:01:53 -0700 (PDT) X-Received: by 2002:a17:902:c40b:b0:2d9:123c:8c49 with SMTP id d9443c01a7336-2d93fa0c365mr4501265ad.14.1788145312899; Sun, 30 Aug 2026 20:01:52 -0700 (PDT) Received: from hu-eserrao-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f7bc825sm30011973eec.9.2026.08.30.20.01.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 20:01:52 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , Dmitry Baryshkov , Greg Kroah-Hartman , Konrad Dybcio , Krzysztof Kozlowski , Rob Herring Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Peter Chen Subject: [PATCH v7 4/8] usb: misc: qcom_eud: add per-path role switch support Date: Sun, 30 Aug 2026 20:01:43 -0700 Message-Id: <20260831030147.1500616-5-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.com> References: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.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-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX24zoKCdHj3ik jg7InSehDrUyWV/er9zzFvbshwz0BimhhwzepAyJ0+A6pyf3y4PNO0WrxBxSZzKpMiUp1P3inG0 q2GcOBh+YGNSeIW4lhGwa7iBJ0A3Hq0/CvFnjE+tcLyhLf/PoXKCk0wNh/QDIuj6CXyiRXS74g/ GKvcmVk5kPzHZU3GuTarskcsboNFis4nOtItSBcdUSpTCyurc0UIQbZBypze+GumxFa9f7fVK6i Dq+elK/3JmWFgHPGWPwYY2SdwHg9oJPazCAHIcHMwBDvFKW3XwDAhxUvJCkhlOwkSu1FTL/vt1f IG3tYQnS8QAdwUBA7CO3ALofvgL1CjHgLXgLapzMxZjkZhK/pt6LhDl4V13ZkwrJ3nyiYlReLPE Of83aNuNepFv75N0ZngARAKj8IFRUurZUDjozsH0/uhtUIja594fAG/SQLHKHdSNpuzKHcfZUa8 6It5E6jmn/P9lto62Ow== X-Proofpoint-Spam-Info: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX9UicD0wINa+y boSXuy1fiDxVOd9Mvevb+FlppK6jFvNt42red8KbpiDcLUk0P3uZ3L0PGN7pA3tk9Y07uJugkuM ptKq9KKCQSytFqnit55BglOGNLIjnaI= X-Authority-Analysis: v=2.4 cv=B7eJFutM c=1 sm=1 tr=0 ts=6a94eea2 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=7LOY1QleUuiESi-gyjEA:9 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-GUID: FS3Ln6P0jizAsr3ZiV_lh6t2n2Cp96-q X-Proofpoint-ORIG-GUID: FS3Ln6P0jizAsr3ZiV_lh6t2n2Cp96-q X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-31_01,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 lowpriorityscore=0 suspectscore=0 impostorscore=0 clxscore=1015 phishscore=0 malwarescore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608310024 Content-Type: text/plain; charset="utf-8" The EUD hardware can support multiple High-Speed USB paths, each connected to different USB controllers. The current implementation uses a single chip-level role switch, which cannot properly handle multi-path configurations where each path needs independent role management. Since EUD is physically present between the USB connector and the controller, it should also relay the role change requests from the connector. Restructure the driver to support per-path role switches and remove the chip-level role switch. Additionally, as EUD need not modify the USB role upon enabling, remove the unnecessary role switch call from enable_eud(). Reviewed-by: Peter Chen Signed-off-by: Elson Serrao --- drivers/usb/misc/qcom_eud.c | 102 +++++++++++++++++++++++++++++------- 1 file changed, 83 insertions(+), 19 deletions(-) diff --git a/drivers/usb/misc/qcom_eud.c b/drivers/usb/misc/qcom_eud.c index 03d1c200658c..45c90d9f3b1f 100644 --- a/drivers/usb/misc/qcom_eud.c +++ b/drivers/usb/misc/qcom_eud.c @@ -44,12 +44,15 @@ static const char * const eud_port_names[] =3D { struct eud_path { struct eud_chip *chip; struct phy *phy; + struct usb_role_switch *controller_sw; + struct usb_role_switch *eud_sw; + enum usb_role curr_role; + char name[16]; u8 num; }; =20 struct eud_chip { struct device *dev; - struct usb_role_switch *role_sw; void __iomem *base; struct eud_path *paths[EUD_MAX_PORTS]; phys_addr_t mode_mgr; @@ -123,7 +126,7 @@ static int enable_eud(struct eud_chip *priv) writel(EUD_INT_VBUS | EUD_INT_SAFE_MODE, priv->base + EUD_REG_INT1_EN_MASK); =20 - return usb_role_switch_set_role(priv->role_sw, USB_ROLE_DEVICE); + return 0; } =20 static int disable_eud(struct eud_chip *priv) @@ -270,12 +273,15 @@ static irqreturn_t handle_eud_irq(int irq, void *data) static irqreturn_t handle_eud_irq_thread(int irq, void *data) { struct eud_chip *chip =3D data; + struct eud_path *path; int ret; =20 + path =3D chip->paths[chip->port_idx]; + if (chip->usb_attached) - ret =3D usb_role_switch_set_role(chip->role_sw, USB_ROLE_DEVICE); + ret =3D usb_role_switch_set_role(path->controller_sw, USB_ROLE_DEVICE); else - ret =3D usb_role_switch_set_role(chip->role_sw, USB_ROLE_HOST); + ret =3D usb_role_switch_set_role(path->controller_sw, USB_ROLE_HOST); if (ret) dev_err(chip->dev, "failed to set role switch\n"); =20 @@ -286,17 +292,39 @@ static irqreturn_t handle_eud_irq_thread(int irq, voi= d *data) return IRQ_HANDLED; } =20 -static void eud_role_switch_release(void *data) +static int eud_role_switch_set(struct usb_role_switch *sw, enum usb_role r= ole) { - struct eud_chip *chip =3D data; + struct eud_path *path =3D usb_role_switch_get_drvdata(sw); + int ret; + + /* Forward the role request to the USB controller */ + ret =3D usb_role_switch_set_role(path->controller_sw, role); + if (ret) { + dev_err(path->chip->dev, "failed to set role %s for port %u: %d\n", + usb_role_string(role), path->num, ret); + return ret; + } + + path->curr_role =3D role; =20 - usb_role_switch_put(chip->role_sw); + return 0; +} + +static void eud_path_role_switch_release(void *data) +{ + struct eud_path *path =3D data; + + usb_role_switch_unregister(path->eud_sw); + usb_role_switch_put(path->controller_sw); } =20 static int eud_init_path(struct eud_chip *chip, struct device_node *np) { + struct usb_role_switch_desc role_sw_desc =3D {NULL}; + struct usb_role_switch *sw; struct device_node *controller_node; struct eud_path *path; + const char *dr_mode =3D ""; u32 path_num; int ret; =20 @@ -327,14 +355,59 @@ static int eud_init_path(struct eud_chip *chip, struc= t device_node *np) "failed to get controller node for path %u\n", path_num); =20 path->phy =3D devm_of_phy_get_by_index(chip->dev, controller_node, 0); - of_node_put(controller_node); - - if (IS_ERR(path->phy)) + if (IS_ERR(path->phy)) { + of_node_put(controller_node); return dev_err_probe(chip->dev, PTR_ERR(path->phy), "failed to get PHY for path %d\n", path_num); + } =20 chip->paths[path_num] =3D path; =20 + of_property_read_string(controller_node, "dr_mode", &dr_mode); + + /* No role switch needed for fixed role controllers */ + if (!strcmp(dr_mode, "host")) { + path->curr_role =3D USB_ROLE_HOST; + of_node_put(controller_node); + return 0; + } + + if (!strcmp(dr_mode, "peripheral")) { + path->curr_role =3D USB_ROLE_DEVICE; + of_node_put(controller_node); + return 0; + } + + path->curr_role =3D USB_ROLE_NONE; + + sw =3D usb_role_switch_find_by_fwnode(of_fwnode_handle(controller_node)); + if (!sw) { + of_node_put(controller_node); + return dev_err_probe(chip->dev, -EPROBE_DEFER, + "Failed to get controller role switch for path %d\n", + path_num); + } + path->controller_sw =3D sw; + + of_node_put(controller_node); + + role_sw_desc.fwnode =3D of_fwnode_handle(np); + role_sw_desc.set =3D eud_role_switch_set; + role_sw_desc.driver_data =3D path; + snprintf(path->name, sizeof(path->name), "eud-path%u", path_num); + role_sw_desc.name =3D path->name; + + path->eud_sw =3D usb_role_switch_register(chip->dev, &role_sw_desc); + if (IS_ERR(path->eud_sw)) { + usb_role_switch_put(path->controller_sw); + return dev_err_probe(chip->dev, PTR_ERR(path->eud_sw), + "Failed to register EUD role switch for path %d\n", path_num); + } + + ret =3D devm_add_action_or_reset(chip->dev, eud_path_role_switch_release,= path); + if (ret) + return ret; + return 0; } =20 @@ -361,15 +434,6 @@ static int eud_probe(struct platform_device *pdev) if (!chip->paths[0]) return dev_err_probe(chip->dev, -ENODEV, "primary path not found\n"); =20 - chip->role_sw =3D usb_role_switch_get(&pdev->dev); - if (IS_ERR(chip->role_sw)) - return dev_err_probe(chip->dev, PTR_ERR(chip->role_sw), - "failed to get role switch\n"); - - ret =3D devm_add_action_or_reset(chip->dev, eud_role_switch_release, chip= ); - if (ret) - return ret; - chip->base =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(chip->base)) return PTR_ERR(chip->base); --=20 2.34.1 From nobody Sat Sep 26 20:29:07 2026 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 21DAE3AFD0A for ; Mon, 31 Aug 2026 03:01:56 +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=1788145319; cv=none; b=fvkYipDk7863NmTqGOd2WS8sEjwEqZq3gz79SzIFUxjHsR4CeCnLFDLZgydFqnAjLG2x9xf4YgeEwZC4bTtw5cGkWbmBKWYwI0GA8PZN01vorDwP8Q+VEi7B7d7MsxGqjzljYq+ULuv6NPIGiaJzf0eM41QlaEGM7AYj+RNlS40= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145319; c=relaxed/simple; bh=nAVPYtVkkmUPMPzolZ4GiQCytUZdX/k5v26r2I/PRq8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=aihUFe8RZenvCN9MsNqrZjuQO8hEBvf5VGZuf+6+AiYUeHlqgShCSNTnhzXPbf3vJr1Xzh6su3PMNlSfutx3HCQmfdpTbcgBQeXNEuGMnNFPq4L+5ldG6bIfCEcBeFcD+CCcHVkuxrc9MlZEMU2bpjWKINTdPc6L8jxqnvHPecQ= 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=cX6iZ+rG; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=cM9fi3aK; 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="cX6iZ+rG"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="cM9fi3aK" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67V1bgJV2587077 for ; Mon, 31 Aug 2026 03:01:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=8XJcp3X4Tby 0WLraLkWLYA7pOP6v/I2LJsWbNkpbmuQ=; b=cX6iZ+rGEUcVwB++UydCp7M+0Zs UMHVIDWsgObvKAZ/r2jm7t2Vv5cR0SiFx3V5wHatefqeQR5PVKdwKDrsy3pTq+FS fqbtyQFnydbjGDl0h7kG1DesWuFvdrZqAfWeO4PJuqxRhKoJMAV2Djez5ujD0/+b JoaZw6dygO1ilT8jhOh6cs26NgdJpSH/0DWmZSafDV2YtcXBAltabDe+lCSwO0M6 oqO65qXSbW4CJeEWOlqKZCUzbXNWJnCYMUBHGKRqxphoyPY92oHMj/tOcn9P9DBa GL7RHn4ORlJ4g2sT+/5BlcKvjNgoQfCFgkm4+9IfjhPUo6DUschzLwFW1BA== Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gbqdvm9x6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 31 Aug 2026 03:01:55 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cc1b80835d5so4892256a12.2 for ; Sun, 30 Aug 2026 20:01:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788145314; x=1788750114; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=8XJcp3X4Tby0WLraLkWLYA7pOP6v/I2LJsWbNkpbmuQ=; b=cM9fi3aK1jH95ldNgz2ySPb/ei2yY8cV/tl1cqQLsHUotqd8MZYy454Bp1+fSh0oqw YmjiysR784oVMNB+f/+e6yEYWB23243vuPvtmjXY4O1Eh2mBtSiLa6/UxgJ9Uo+iFKGQ aFaqi16nrbnz8JLrnbh1zYtuiqkB0Oel55Hr36XH8TxXgB5NrBukaQvVuQy5f6wViLi+ 6F7whlKZaDosGAhO250Tuo2gSQhX987ad+KNiuV88tHEYnHUgVXYE/zq1VQvC2gM+oZl LwG03UwM9O+WxXJjvAmQbKSVDOww1eXjfXVazTnrMo9ydkh7y8By1gUTMKti2gm+yd64 1Fjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788145314; x=1788750114; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=8XJcp3X4Tby0WLraLkWLYA7pOP6v/I2LJsWbNkpbmuQ=; b=MQx1Uy7DCbAubtk9iDRURy23e712iGnAfn4aHt+jnF/2NfyjgP18EHvZU/ME00bbjN xPJR90xYqiaQK3gI2/eUXPha7p3Z+Lv5cDSFtC9DQ2A0CV3uPKvKej2wK6tzrDK6OpwV 4MLAw8s9SNYyAh7tb95Pfnu2ACDqPg6/Xaocyypb6WojWrt0p0Zyuqkj5BP8l3Q9C4Gn qgcscj+KoSs4zs6RAQLbGtaQfDb2x3/L4FAI663UkwM1m5i94y5pI7lBFBpUP8fNJC3d JSHOE1c5pKrZamNRzMoi/Lzxx6LEycbLuy3P048/77DsLVyg8iKZRiDMfverhivYKrtL Xz0w== X-Forwarded-Encrypted: i=1; AKwUvBw2tZHq4qH6IIJcYEUeGenUP/vsyPgn8GfTEadDP++VfO8Sep3QsiE0eDEw5E5Woma1cJq9DXuDFpbICBo=@vger.kernel.org X-Gm-Message-State: AFuF++md9ZhZ1OEq13kv0/Ky1A+HYne1RvM1HqIs7NQf7eDBh2xvHWNm 3Wgldt4GiNv97YS1pQf4qkwE408zfxFawQfY9L5ipi0azn5Z0BkdQWCVPw2ZSVHKJ6V6SSG7s+m hL6gmHhMqnwDHnpOV0QeL/YFGZXTA/Np+dSD/g8XT8HqEfop9uUIPRCTEZujZqaB8MyQ= X-Gm-Gg: AYBFou11KWld/YpHnZ6gZzmc5aomPx+/VYQzyBlbOfWx3hKgnv1uceHxI3md6oNkUEi GngMjJxthruTNC/wHVIJoqxP9jaVF25spELgcCUVeRGjVRojPbBlrzekmW0YfmpQgLEsTfomXMO gxBr4fMMKDOPJJ9kej1YTymIuEJJTUKfrEdVATGh5KXOvq8Y+3EawQLI90sSICxjfpDrjDNxa8O 4IAXD/JQE5uHle5H6ORrfhPQMffAXS45xaQAd0K88QKCLsQUqCvVb0ZeAwyZd5V+xUm9wj4T+72 mDq0NPBc/UrI3Y9/Xt+65djL64fYAmJxgGvbw/PQbtN+/g46ki9x2GxCPoXAa8JwH9Siv56+ymY kwglfjhhJTrQF/N194cnm/hbJRvF4SnsK/pwdjekTnNsD74m1jnNArQ== X-Received: by 2002:a17:90b:2f10:b0:395:4de4:92be with SMTP id 98e67ed59e1d1-398f845feb8mr607828a91.13.1788145314295; Sun, 30 Aug 2026 20:01:54 -0700 (PDT) X-Received: by 2002:a17:90b:2f10:b0:395:4de4:92be with SMTP id 98e67ed59e1d1-398f845feb8mr607780a91.13.1788145313824; Sun, 30 Aug 2026 20:01:53 -0700 (PDT) Received: from hu-eserrao-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f7bc825sm30011973eec.9.2026.08.30.20.01.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 20:01:53 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , Dmitry Baryshkov , Greg Kroah-Hartman , Konrad Dybcio , Krzysztof Kozlowski , Rob Herring Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Konrad Dybcio , Peter Chen Subject: [PATCH v7 5/8] usb: misc: qcom_eud: improve enable_store API Date: Sun, 30 Aug 2026 20:01:44 -0700 Message-Id: <20260831030147.1500616-6-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.com> References: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.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-Proofpoint-GUID: Git5PMzdvdX0LT7OthHtx-IMCZhZlhMd X-Authority-Analysis: v=2.4 cv=P6EKQCAu c=1 sm=1 tr=0 ts=6a94eea3 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=iEam2xx7WbKG8qDqzoQA:9 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX/VzeZ6RfXwPr IybBdF9N4Xa47C73kRp/0C1sERiPPg01jUwhMe7lhyMAN3wevA2fgAi/XX4KGREBsm1XoN+aHT6 OFVewFN7pffOAeExNmtf4jwNiA3gNQ7NLb3lHCszUp39mGWWribPVu2rpMzFgAgIiz2Zdx4Y0PZ AJcnyyibjrLH7Kfc/6EpkyKuGHQRLUuJ7sG9cO21qikcmVixCvEbW11wXAS6Slsc0OsRZPllsYP gIVWpSNmtSOmsyFy3mtAJnVjyDSI+RDQVfliLGOUk+0gvyN6ap2z3067C1bDSRwGqLt1EfRvUiz nk4VRAf/q079POm5vbvMTXeEF91nQUHPLoUpzznw2F+ibTiGwetm2auC2LpMw1rcObUZCbSpbfp bfbfotdQNKlbt0r2IpEeCS8rtlH0tgkwYrnxA3HsQMD0TUu7VWam2goouVQRGFApd7JFxuoRTEv BuLrFQ96WPwMqMjI5FA== X-Proofpoint-Spam-Info: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfXxkQ3REd9AsS5 UU1JBTcN4CUNziNgg3JUmSGnlHeVDITPzzmerfIqzWBjoUmj8JluAK2CY+mqVY1qGtwkS62b1P5 MaL/Z3/QK8NINCmZMDlGC9+ZMBGkRIM= X-Proofpoint-ORIG-GUID: Git5PMzdvdX0LT7OthHtx-IMCZhZlhMd X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-31_01,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 adultscore=0 impostorscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 malwarescore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608310024 Content-Type: text/plain; charset="utf-8" Currently enable_store() allows operations irrespective of the EUD state, which can result in redundant operations. Avoid this by adding duplicate state checks to skip requests when EUD is already in the desired state. Additionally, improve error handling with explicit logging to provide better feedback. Reviewed-by: Konrad Dybcio Reviewed-by: Peter Chen Signed-off-by: Elson Serrao --- drivers/usb/misc/qcom_eud.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/usb/misc/qcom_eud.c b/drivers/usb/misc/qcom_eud.c index 45c90d9f3b1f..07522225a8f8 100644 --- a/drivers/usb/misc/qcom_eud.c +++ b/drivers/usb/misc/qcom_eud.c @@ -162,18 +162,27 @@ static ssize_t enable_store(struct device *dev, if (kstrtobool(buf, &enable)) return -EINVAL; =20 + /* Skip operation if already in desired state */ + if (chip->enabled =3D=3D enable) + return count; + if (enable) { ret =3D enable_eud(chip); - if (!ret) - chip->enabled =3D enable; - else - disable_eud(chip); - + if (ret) { + dev_err(chip->dev, "failed to enable eud\n"); + return ret; + } } else { ret =3D disable_eud(chip); + if (ret) { + dev_err(chip->dev, "failed to disable eud\n"); + return ret; + } } =20 - return ret < 0 ? ret : count; + chip->enabled =3D enable; + + return count; } =20 static DEVICE_ATTR_RW(enable); --=20 2.34.1 From nobody Sat Sep 26 20:29:07 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 E3BCB3AE1AD for ; Mon, 31 Aug 2026 03:01:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145319; cv=none; b=Prbi8T035xeVn0yzmj1QMmUhxkaYI7jr9r9LyWPGf7GCNDuUkNywrULSU6FWZQ/SioujT5Ilz5Z3RK8trej1Tm3hlzNcvTnWVg0aamxkl+A++eQJbcHLjXw82ufAMC7UYX6oYlr/9s+Lwb2Uy/drhUwvRCPZBr4wyr/7axE6pW0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145319; c=relaxed/simple; bh=nkS4OyzZOkgIJyCEgiO8DDdg0IqU+H1YgFT9CPkNXic=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=MVOH67Mf13eGy5HiRAC+Rgt2HKvQ05aO2mLz95nGLtomKBLqO69AbhkBbo2U1YRVGapRJX8yPlpBlHigC0+eT9Rw5xLcWoLDjeAxuJkkzuxcGb6at90EHoZpXMrUi6IHFC3NfQrg09Kc/rs8FZB6X1J7tjhgSKWIq2St/ZjCNFI= 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=c22JV5Qy; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=XJlDYRw+; arc=none smtp.client-ip=205.220.168.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="c22JV5Qy"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="XJlDYRw+" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67V1bPH81496291 for ; Mon, 31 Aug 2026 03:01:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=2sd7Yaq8LYK WFa1rNtDRDd8+anZIsb0dma1UriPcrYE=; b=c22JV5QysiJEVOEhystbX8L70W2 OgRPd8povQemCwVhC5uBBA7BRH5lHfLBZ7nES0IVJ5BP5dS0uRNZJBVceVRu5qOx xC3iLDG0W9HZ4m9Vr2sLQLtku1ZYyeaf08JhhDiwcTwSDESvcf4M2cC1y1bPcPqD lI+Vn2W2RQfmV0YYB1rJscTobFTBNsdJuRR0u0GyKYOKx5XWhWqBpWsr/4/HCUBO Rm8DAW9H8CY/5aTw9BYZ50+9ULtwly+zGNC05iqr0TI8sgpLVB2Ar/NnGVuwyDrS 6pZL6UGcFjgmOqSDdGX2fFZXSMqUmsxGBFv/Mr98cQKbBLY9RnKxn+pbmCQ== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gbrq844mm-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 31 Aug 2026 03:01:56 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-38ea32e57e2so5508354a91.1 for ; Sun, 30 Aug 2026 20:01:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788145315; x=1788750115; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=2sd7Yaq8LYKWFa1rNtDRDd8+anZIsb0dma1UriPcrYE=; b=XJlDYRw+5DM0ICTDqLcqCPZT9rUdaCp663io9EYDs9sIz5904lSSrslHGBag87E1vT Axz/U4ZrpAs6SMlJhyTPz29T7Er7uNKUxmT09bL8Tt86qzSW3F+1ATde9cuH3eLjECEz OTPiS8tIa1k9dQBZsdZkcMWsNX6sq42Auvnu0pZTi11jqizmSpUdyVrNIJTipb+FDexo bXZxxi7MoRB9tTxhoXs5qrIv0jl72oNquI/7l6U3sf4RZVMGdMJPeFfa1kC328CIZNhm e9uNx0UZJlcWdN6W4khYLKlG1NluEuRl1Oh9mO0wYbz8DnjQb/HWuQLna5UaGikVjOeb +yFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788145315; x=1788750115; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=2sd7Yaq8LYKWFa1rNtDRDd8+anZIsb0dma1UriPcrYE=; b=YcFaM1d9VPMG5hsbq6D9SKvLaieoWzj1s4pgrCb/39lWmlnCUTRqedirKocW+MjM/R AJ2PwPx9P8T5BTzZ/nxUWdCpSxYnI7anEhA+qOM4o2lWHWCo0bi1Cz1OiDd6J1dvuGWq pIdyeNmTNZtFmC8Iqh1VMnGCNEO8KN9IbjFMFTciteC+THeY8Am2iTxCME3snr3ThEhB AjCmPgyr28LitPAY6Iub2R00LnBLcLZgYdw6TdeNGhl0EcYIRckiW9qIFzmvGijb9Qz1 AWb+EVyaJDz/yAx2ZwYTgzKu2jkCmjF1KsxvimhqEV6VrV7axyxNVj3VRQKWHIJQS41r n6vg== X-Forwarded-Encrypted: i=1; AKwUvBwhnteLvYZ8LlQSfxJqildDmP/8YpgQjXlOy2ayLwld8xVel7wI8pEl4jwB9hgmPCr0XSlWVfnlv8GDBcA=@vger.kernel.org X-Gm-Message-State: AFuF++lV/PxM+6UW/Y1EfWZ5LYpoZ2tQTjaUWgr7GlYAs6BHSfwOiPaV 1BvWXd7HoLzONcUt76QcX5kt0n+x4uZzNxx/btTHgCLXw/mQkUMRnma+rj/RpKutywqk4ppHPgD qsgCxWZVKpvfG1uUFC8BelPUh2rAyY2/VlPx8PVVMZj51oZToGodWl5MUAKUR71C8LNE= X-Gm-Gg: AYBFou22OSKps6BgtBrxqbkPsaEEH314YNunSRaTk0ROVUUaH+pFgXBqFTVRDsZN6Vf 6x74SaR7v6OmJYBdN+LczWfeRtNbsDRmsWpN7+1fbxiBv8/GGWL6jJvGaIw4r5oxkWRiZjZ6xbb sZh4/qPhrlN8hB9GMfAkwVr7Z9ecXw6K+5d/i5iH132cvuk7DTVvYora8MkwZgWrkYajFcq4O3F 71CWl9lATaNciCn6CJK+nPHIB6Isc0DOy0ShaBrLuA/QrDf6OT17LALEYJOh8CrkcbKF+Tt/OHa Kx/Sh+ygC89UpPUrwI+OawLqSAwIzJIWYlFJhz1Cd3V+Uh4RBVrr4RctWV60u5qWRZ7HhGJGMCs 3gPefsgGzib7tVeRaHb2XXUs3aVj7BeekYNzfITAILRwjZ+EfSySAiA== X-Received: by 2002:a17:90b:57c8:b0:398:9bd5:4910 with SMTP id 98e67ed59e1d1-3989bd54c5cmr21269418a91.23.1788145315448; Sun, 30 Aug 2026 20:01:55 -0700 (PDT) X-Received: by 2002:a17:90b:57c8:b0:398:9bd5:4910 with SMTP id 98e67ed59e1d1-3989bd54c5cmr21269337a91.23.1788145314998; Sun, 30 Aug 2026 20:01:54 -0700 (PDT) Received: from hu-eserrao-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f7bc825sm30011973eec.9.2026.08.30.20.01.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 20:01:54 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , Dmitry Baryshkov , Greg Kroah-Hartman , Konrad Dybcio , Krzysztof Kozlowski , Rob Herring Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Peter Chen , Konrad Dybcio Subject: [PATCH v7 6/8] usb: misc: qcom_eud: add role-based EUD control Date: Sun, 30 Aug 2026 20:01:45 -0700 Message-Id: <20260831030147.1500616-7-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.com> References: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.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-Proofpoint-GUID: 0c-NH9WdZjpEKggAi8Bvolu_cH6KKKg4 X-Proofpoint-Spam-Info: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX5I8jRwVEifiV 9Fu7R7WuQhGTP+iNy4ZXTUmwcZN5AHG+rgVmeakQgI6GtsDPsN+sm5J+WXw21/otyq6Fv65GIlu TKXWUQa0FRuIUihJ9OuY5wMTaPlYJ7s= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX1HaQpGEN6D1/ h02bZEbGXknwzP0QpimSeJ5liET1X8uqLZ3tAmcNWenwu4n3UF2urVJzW/nQu74mxDRhcVxzrTP TngFiJLxmmjq7duOq0/E/PhZ0RXnhibPOtQ0Dj092lHO2M6a2nNq35/KT2muIX7Ia+CzGHRPajR ivCVzB2//B2AluaEQOYWN9Ns7sujCOzhYbH+UrQ1DxduEpHK7dvJg/IzR5axEicSjMyVwKkgvJb jbJ25CK22YRFCrg1RZaBc0/W5YnAuJ5c0dWS2hMNnTU5hOgvCuJ43PqizO9Pmtupf+d+mhaC5U+ VVsUY6w/OBq0i78tLJwl17qyGX/HjNgXn6RJ2DNC5SxGsFU4/rvmajJcZvpt3dR+FpcGwtatdAc cKZ2NitNb4+GKMIygtxJQb57CztI2O3G2uSLlliY483emG2lvcspsNblixQAw9qAP7PsTX8JWJt lySj2vmaCpe5fQ8OuoQ== X-Authority-Analysis: v=2.4 cv=ZOPnX37b c=1 sm=1 tr=0 ts=6a94eea4 cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=4GSD5CdKrKcBI9kQVZUA:9 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-ORIG-GUID: 0c-NH9WdZjpEKggAi8Bvolu_cH6KKKg4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-31_01,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 spamscore=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 adultscore=0 bulkscore=0 impostorscore=0 phishscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608310024 Content-Type: text/plain; charset="utf-8" EUD functions by presenting itself as a USB device to the host PC and is therefore only applicable when the port operates in device role. Keeping EUD enabled in other roles provides no benefit and unnecessarily keeps the associated PHY resources enabled. Furthermore, enabling EUD in host role can cause the USB controller to misbehave because the EUD hub supports only a single upstream-facing port. Address this by treating EUD as usable only in device role. The role-switch callback enables or disables EUD as the port enters or leaves device role. A sysfs enable request made outside device role is recorded and honored when the port subsequently switches to device role. Reviewed-by: Peter Chen Reviewed-by: Konrad Dybcio Signed-off-by: Elson Serrao --- drivers/usb/misc/qcom_eud.c | 46 ++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/drivers/usb/misc/qcom_eud.c b/drivers/usb/misc/qcom_eud.c index 07522225a8f8..549c0d852bbb 100644 --- a/drivers/usb/misc/qcom_eud.c +++ b/drivers/usb/misc/qcom_eud.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -55,6 +56,8 @@ struct eud_chip { struct device *dev; void __iomem *base; struct eud_path *paths[EUD_MAX_PORTS]; + /* serializes EUD control operations */ + struct mutex state_lock; phys_addr_t mode_mgr; unsigned int int_status; int irq; @@ -156,17 +159,33 @@ static ssize_t enable_store(struct device *dev, const char *buf, size_t count) { struct eud_chip *chip =3D dev_get_drvdata(dev); + struct eud_path *path; bool enable; int ret; =20 if (kstrtobool(buf, &enable)) return -EINVAL; =20 + guard(mutex)(&chip->state_lock); + /* Skip operation if already in desired state */ if (chip->enabled =3D=3D enable) return count; =20 if (enable) { + path =3D chip->paths[chip->port_idx]; + + /* + * If not yet in device role, honor the userspace request and defer + * EUD enablement until the port transitions to device role in the + * set_role callback. + */ + if (path->curr_role !=3D USB_ROLE_DEVICE) { + dev_info(chip->dev, "Deferring EUD enable until port enters device mode= \n"); + chip->enabled =3D enable; + return count; + } + ret =3D enable_eud(chip); if (ret) { dev_err(chip->dev, "failed to enable eud\n"); @@ -304,7 +323,30 @@ static irqreturn_t handle_eud_irq_thread(int irq, void= *data) static int eud_role_switch_set(struct usb_role_switch *sw, enum usb_role r= ole) { struct eud_path *path =3D usb_role_switch_get_drvdata(sw); - int ret; + struct eud_chip *chip =3D path->chip; + int ret =3D 0; + + guard(mutex)(&chip->state_lock); + + /* + * EUD is usable only in device role. Power it down for every other + * role to avoid keeping an unusable module 'ON'. chip->enabled + * preserves user's sysfs configuration and is not modified across + * role transitions. + */ + if (chip->enabled && path->num =3D=3D chip->port_idx && role !=3D path->c= urr_role) { + if (role =3D=3D USB_ROLE_DEVICE) + ret =3D enable_eud(chip); + else if (path->curr_role =3D=3D USB_ROLE_DEVICE) + ret =3D disable_eud(chip); + + if (ret) { + dev_err(chip->dev, "failed to %s EUD for role %s: %d\n", + str_enable_disable(role =3D=3D USB_ROLE_DEVICE), + usb_role_string(role), ret); + return ret; + } + } =20 /* Forward the role request to the USB controller */ ret =3D usb_role_switch_set_role(path->controller_sw, role); @@ -433,6 +475,8 @@ static int eud_probe(struct platform_device *pdev) =20 chip->dev =3D &pdev->dev; =20 + mutex_init(&chip->state_lock); + for_each_child_of_node_scoped(np, child) { ret =3D eud_init_path(chip, child); if (ret) --=20 2.34.1 From nobody Sat Sep 26 20:29:07 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 2D5703AF641 for ; Mon, 31 Aug 2026 03:01:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145321; cv=none; b=FwnbWoUdC0Gcs8XEyiD1ELvtzixzNshIgNDx2tyZkmxV+KN82gxRelE7rmrLi/2XKr8EdB6IYJbVuLYaP18LXsbvSNEqsvGXTJl65hkotNjaODOA8K1auyLkYhlIRMKbqyaoqBZPsaX+Afz7ewb8PShuCVO2DOZgLsS9WTomcPE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145321; c=relaxed/simple; bh=Msj1DOVWipO41oW51gTwfsyr27KLZriNHjyoIbm6njM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=L8N90AZD2GMugZtUbZcgmh6PWuLDOf0RXB/P7w+mNb2V8uFwnBY2JBtXLBmBapIeJV4owwnTeDq9ZobpCvAG5ePx3Yp2mhJMV/FTYsHOGmx1m0JorXWnqzprwdUtah7UCgtLpx7ah8PDCjcAd3JBE63FBB6KqnwLzTk8cUH87A0= 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=Imt6HGc0; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=iwzn0Jb8; arc=none smtp.client-ip=205.220.168.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="Imt6HGc0"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="iwzn0Jb8" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67V1bd7V1010126 for ; Mon, 31 Aug 2026 03:01:58 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=oEsuGii2+Ra 6CMzyXnbZHPQh8RNg3JuatHxegyg2aPI=; b=Imt6HGc0AG/UqhSQQCuDFCb+NGD HBD0cwRhzfBgGiXJxy3XorwadI/1p7vQgC/Re4ZIF/Om3++JVL11Ss2D5A2XurE4 pGjyZaX1cB2vVZL3GCCQfs+E16dP1wkJO3IjVu6JRfK4fNwl5p/vggKuVpwqgCbr FqInYKZG1juGu8kd1qLu/KUwb504ApKNaheWivhX4zcrH6ixWfx6lQoOMJwjdBK7 8nJlUxWQr0Fm/yaAQQBPplmG3Af4PsTgsIeZmJwK/qMOSfOyWZiX9P1AlckSgyC/ WnlrdjJbdxEvNkIszYulVUMcQz3VRJTnbTV28B9SV+K8x1pgDnuk76JB41Q== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gbrkgv4ha-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 31 Aug 2026 03:01:57 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-38e22137fb3so5093404a91.0 for ; Sun, 30 Aug 2026 20:01:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788145316; x=1788750116; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=oEsuGii2+Ra6CMzyXnbZHPQh8RNg3JuatHxegyg2aPI=; b=iwzn0Jb8Px2K9rqul8CJHlGHfrS5zZ77FTUfLhfUEJBo1Gqw5tfnUj1Ygw7KEO1md3 Unx3VpCGLOFp1UVdiXvC8n5ty1uRCd+vcxxxtqNYkt8K4dGwzVv1dNf11bXnZKo4eJ2l 0xkY3rXs1XzPi+OUU9UV37jpk2WrXrxfhtR4txK4gKhFiz4evqGs2nK3+eAmlnluXouR ZZ0HcYZAUF207WVpfEwTc7nHQfoZGxG2s/Wd/cQh43NoYahPqfdW9L0wWge+N1tUcfPC PtucdCLzc1Hm4sbZTO3Wpy8Ay+Gp5WSM4gBGWu31TqVvcEwLJdu6gHGO6n9PSj02lg8P VGjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788145316; x=1788750116; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=oEsuGii2+Ra6CMzyXnbZHPQh8RNg3JuatHxegyg2aPI=; b=s9mVu1z9TP9PbwXqGorI9HYEWpWl+8fVAn4aR6Opj3R7KkmBbnKY8yHpvuUywU5fIM emjtjvOJE0tpizNIUE8lgnVQG7pVy6qvLhSGiHSI5Y8ForcWt4y0G+3xyjscKDQuRNQG rjmJ+nCmUk5XUbHxLmWvZ2wKsxuYQa65HWwI2VnFVjk13hB/xn9KW+c86e1GxE0wi0Ih 1L1hlGSU22Fl8fwKxR3RtqNXZCj++x4/4IMQ2TNYE71AoWwx1kfc+d41ddoJ0uveI7oR EzIEkquaFeah+61ncXpp4dV1d2X+87wonjN0jKtMnHFPsSrY5w8Q2h+dwNnn/TH2N3xg OtCg== X-Forwarded-Encrypted: i=1; AKwUvBwk+qjQyf/ZpFUuZNjSLQl6Jh4Ifnad2CZ/Prh/ursrzbh7j9U23IcUNE5mlnfIw/p/2vEu3LqMpvMOgLg=@vger.kernel.org X-Gm-Message-State: AFuF++l/L3i17nAxtfHV4tB55QY7DhuoWp+gZ3Q/l8B0Q/O+03LCZAyS sxsdqHjCtrqvOgJpH/PF0+QNsvAgosm+TFPcGj/ftta3l24GZILwRBJ7S48x2ZfE4MRvN6xmmUb uEFJ3I2vvblK8Yy3+gic0q71B/xXHtbpc9iTHYQJ88lyyYeH7TNrs1IQ3zlQ5ZyBfSdE= X-Gm-Gg: AYBFou3H9GTfswMIN2KVTD5mcMSJI2vGogRHtyHW9bbTr2pCnPQsMgd4q+l6XR+tmrD W5i6GXbmRAmreVhEZrI8llD7lOH/k8R1Zm38aZgferhatw3DmKhNgRBkvNxZsSeA/fOrQQkMxRv 149v1FS012N7enqOqR5mb6ECmUGQqsULYAUuKsrb7IYAYUGX6SoEShzP+UDlamog7XfNLMqaek8 KZwpIKH9jcsq2IL6vaXJKmlE7ZgJ7IbPTd6LgJ/t8LKsYcwuA0wwUzCT4NnwfBxifd5yRSr4xHb nOqwq3ZZ+IVqQW8uGtOvcKHVZP7PnompON8FMEoTPIJyeQ9XQfY1jtNnaVqVrASSY/tfMmLAKjV N4uAJZKXv/gA1uGq8VxPto8xZ9Qxo6deoqwZQhNwBUNRCJKR03eWq7Q== X-Received: by 2002:a17:90b:4c4c:b0:396:635a:9b10 with SMTP id 98e67ed59e1d1-396d0ebfb0amr33823022a91.11.1788145316460; Sun, 30 Aug 2026 20:01:56 -0700 (PDT) X-Received: by 2002:a17:90b:4c4c:b0:396:635a:9b10 with SMTP id 98e67ed59e1d1-396d0ebfb0amr33822975a91.11.1788145315996; Sun, 30 Aug 2026 20:01:55 -0700 (PDT) Received: from hu-eserrao-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f7bc825sm30011973eec.9.2026.08.30.20.01.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 20:01:55 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , Dmitry Baryshkov , Greg Kroah-Hartman , Konrad Dybcio , Krzysztof Kozlowski , Rob Herring Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Konrad Dybcio , Peter Chen Subject: [PATCH v7 7/8] usb: misc: qcom_eud: fix virtual attach/detach event handling Date: Sun, 30 Aug 2026 20:01:46 -0700 Message-Id: <20260831030147.1500616-8-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.com> References: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.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-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX/KYsRS7Qdcb1 WPSJ81PrOOhk8K/BDlodUlr5eOTgc2GuQyKjMcP2og0hasutgdiwJpPPBC5nly6pRgpUKsU435e RXKUYiShOFcXpz1NtqLwiwB6kRFCP7JRnC3m56IXu09Wo8NVdGgqWhlCQWEUiI3pgmIIgszj36h wIV5ntOxn6lN7n0hRcfXT8xXUg4/EanEFxswKDuOGieRdPPUVsoqwoCSCUlHU6za1tNdfDDr5Kc I9a/N+4Xw9YH9sitnjF4f5r514BkbmVQD9T8NJYXqpJA+MkNtaruJZmZPf1z1OPf/YxXdWsXhAA YVq/Jb3RtaR7Upc7nAvPOKzhVUHcdEpBbcaLo7akHlPycJty4e22OLYokR/HuTEX1vXv9ZhHuf9 rR3HRywd3zzpepWooehLD4ROC0ybmg/mCWosjacHxaKm46aClBdE8B32QR4n2n5jMySMY2lZymG AfpAyB3I1tRt7IXtAzg== X-Proofpoint-Spam-Info: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX0ULcLlGf53FL ACQTtZ96NMVpGFaKuF/YIWKrwr2Mvyxrh27yyO4EDczDvxl956mYPkdJh98FuOoIeZ6n4A32T4M F8ud1miv8csPkwqf1na3HHomy/ZxFzo= X-Proofpoint-ORIG-GUID: CJunv6o3GfA62-W_XAYrGlX6S_QimUVh X-Authority-Analysis: v=2.4 cv=Cr6PtH4D c=1 sm=1 tr=0 ts=6a94eea5 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=oDIJ3hVRoRHbvujwG_AA:9 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-GUID: CJunv6o3GfA62-W_XAYrGlX6S_QimUVh X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-31_01,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 phishscore=0 bulkscore=0 adultscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608310024 Content-Type: text/plain; charset="utf-8" EUD provides virtual USB attach/detach events to simulate cable plug/unplug while maintaining the physical debug connection. However, the current implementation incorrectly sets the USB role to HOST on virtual detach, which doesn't represent the disconnected state. Fix the virtual detach handling by setting the USB role to NONE instead of HOST, correctly representing the disconnected state. Reviewed-by: Konrad Dybcio Reviewed-by: Peter Chen Signed-off-by: Elson Serrao --- drivers/usb/misc/qcom_eud.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/usb/misc/qcom_eud.c b/drivers/usb/misc/qcom_eud.c index 549c0d852bbb..605f675ec7dd 100644 --- a/drivers/usb/misc/qcom_eud.c +++ b/drivers/usb/misc/qcom_eud.c @@ -306,10 +306,26 @@ static irqreturn_t handle_eud_irq_thread(int irq, voi= d *data) =20 path =3D chip->paths[chip->port_idx]; =20 + /* + * EUD virtual attach/detach event handling for low power debugging: + * + * When EUD is enabled in debug mode, the device remains physically + * connected to the PC throughout the debug session, keeping the USB + * controller active. This prevents testing of low power scenarios that + * require USB disconnection. + * + * EUD solves this by providing virtual USB attach/detach events while + * maintaining the physical connection. These events are triggered from + * the Host PC via the enumerated EUD control interface and delivered + * to the EUD driver as interrupts. + * + * These notifications are forwarded to the USB controller through role + * switch framework. + */ if (chip->usb_attached) ret =3D usb_role_switch_set_role(path->controller_sw, USB_ROLE_DEVICE); else - ret =3D usb_role_switch_set_role(path->controller_sw, USB_ROLE_HOST); + ret =3D usb_role_switch_set_role(path->controller_sw, USB_ROLE_NONE); if (ret) dev_err(chip->dev, "failed to set role switch\n"); =20 --=20 2.34.1 From nobody Sat Sep 26 20:29:07 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 530783B2FDF for ; Mon, 31 Aug 2026 03:02:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145328; cv=none; b=qnhEPBCHMFIDlQD8IG5/DK3rsCz4Zc/Y2JgfSOK7bWy5MLQytweEXQZpoiul9uqTd4YVKzrmVNbBU3PeFdWIxdIl76fS5Je5Jk2+4lL3MU4IxEJ29gt9WuiPBSsxcuD5MOcHilN3dM0zkoAd3z5dmOoEoITDT/HwvTEKYnoc/oQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788145328; c=relaxed/simple; bh=xG76HuP7tzhD8LeKXLwS4A2xWTUE4msRqgi9yo1dq6s=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=O0VXgNNBR+A0EguATBRgRUvAzX+lJxBIdvaqMZ5KcKvELIPuedHac/Ce+VUDQoHPterkvwM85IqF8zf7n9rJlgM2gY11iG5/KnUIytQsOKjDXC31FvG59y0fvEun3CbTQ1rlwzc6tH7YNxvUxyy4DVk/axUvR9Q7tBT4eK8Bjq0= 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=EfGnKw3f; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=U0ri874g; arc=none smtp.client-ip=205.220.168.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="EfGnKw3f"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="U0ri874g" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67V1bQLk2819890 for ; Mon, 31 Aug 2026 03:01:59 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=3Y3x7GkERcn jU8Lmk2bouk97IELQPDZ/jAQTBQzkuWI=; b=EfGnKw3fg5nD+LI8qXcUzuHYKM1 yfq+Z/kwC30qbwVSRvaqsBJK2XM11qtY9jnP4VRTjaqPejvh/jr//u2nsZMP8XDd Cbbk9P2w1NTOR8ysYNLjn8mA5ThYEEM1O6zAy1Ly2Sdsee+nTWPuLjMTCmBunsH7 K7rKiENT0MytNQZjejD7PFt5tyz7+GaiCZhkCdnb1SRg5I2rDhMRnbsCrVUuVzfU GTA1eObQFawEhRT+33XOuKQZ0ATms1dEVRppRg3vaM20/en9kHUo/T++Ji6IG2ee LpyECLiBNPu1mOON+7b+jNbcL4oU1/i5Cp8Un9VN00UxeHqtr0KYI6kDM+A== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gbqdfma4w-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 31 Aug 2026 03:01:59 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2cec4226c70so35168595ad.1 for ; Sun, 30 Aug 2026 20:01:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1788145319; x=1788750119; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3Y3x7GkERcnjU8Lmk2bouk97IELQPDZ/jAQTBQzkuWI=; b=U0ri874gge6DOdxyY3p2zvxiZSI/yjoHK5JGbWFKMpfRHL4P4YPNLqFSiK6dHFlVrg N2IVsAl3FH8coKXVwYPc67PW75l4gJoVQX2iWND+JC9haZL1cHrhETKQCPzr40V2wrlQ z83NuOWlU4AzuCrJcir+SLFgHRfMYH8t92NAAZao3qhryuGDHnqhJO1xHp59AGizgorK e75BfBT3nY1RqgXU4s24biPEJHnqZrsjJEoi6+HWOYUR2AKUlqeawJFPEUY89bjCsxa4 tuRDBMZi+iopUyguwsEzZA2mXueI1A6QqjtiTGefsuuTgtapyBBcV1ZLgtD5B7BYco9w JZ9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788145319; x=1788750119; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=3Y3x7GkERcnjU8Lmk2bouk97IELQPDZ/jAQTBQzkuWI=; b=fTtlwRG4XZ6rUnmj2dK5beENO/y9n8PkC+NwcwMqcQfJiXXbzfEbhxysRxjKrhQD4C OQF7jDObcH+1WbPo2FVvGlHSUaZrpHndCRJPebIXu/nfLQeRbLu08rrcJyGw9vFQX9bc USXNSsJ6epbsAreh3pOvSJS2+6TBPgT4qfiY/TSYNTtl1cMa3BoqWfK3bpg3vOd6+VbP HbSqd6ENGNj2SRrVySZZUHup6/Ie2Ha/RgQVd9p9jT2Ph7jeD/hTi7kL/91b7vCNCqIb 8VUJIkIaY8RTdxo8uKoophXOenpxJlO0pFjyUPwb26KfBtF2HSBlKT9UxKUmaq+uxOiG W3/g== X-Forwarded-Encrypted: i=1; AKwUvBz3SMZC9oIZyviOhv6m/T4sk1mjktGcVc/Grjr63z1XITITyuKc0fIeupQiFtlhyMbnqk0NL+obRG4NM0w=@vger.kernel.org X-Gm-Message-State: AFuF++nqIyOI1o212ClzCM+EleVoUotVgyuYLKMguUlYKPpou5BLAVig IG/PPW3Dv9war66KKyNj8vBDUJSfBRYl8FD4uKwFKzgxulb5F+2bdLXHW1pLp2PGtrhEeSl21MT 5irws4i4Iilwfw5giZIwn5f2wL6RAgvu9RM9yFyBDz2DlvxYfb0c8duc+nXL1QiF+18fqUUp1Xo g= X-Gm-Gg: AYBFou1yQNBZxy2T9BaXO9dIHi9zrNuGAt496pkuoC7tI/Jehh5Cqs/Fxtm1uaEg8ge Du4tU3a7uZ0yHgIH/QVYjSmJH94pehAp+2/pErfq01cFUaGYnM9cjlXdpBxg3V+whupr4D12mPt MonVY8OZv2hca8L0jfQUl6hw8sbFnFynjQBl1lUHWu04UA9OgPr1LMrYGaKX7d/P7c7wKUyibN0 XvPucxwHeu9LPaqa/3FvQFpZ49hXufA5+4qIhdEBg5seBZBpibV7FVg1XTxRuggNmi2SXLL9hJ9 bRHeuuY5bjhEsPENn2L+QikGWSaM12FMsljRrYSKEWZdkD9gYlYEU27pzcNL+2FgWcsIYCSNJ1j VW4WBEuE0OGtJ2hZLMxACgHpKNLnA88PtAalGdd4u03KmOLPwx9xBeA== X-Received: by 2002:a17:902:ef45:b0:2d9:1c02:5a19 with SMTP id d9443c01a7336-2d93fa54fa8mr5047645ad.22.1788145318095; Sun, 30 Aug 2026 20:01:58 -0700 (PDT) X-Received: by 2002:a17:902:ef45:b0:2d9:1c02:5a19 with SMTP id d9443c01a7336-2d93fa54fa8mr5046285ad.22.1788145317367; Sun, 30 Aug 2026 20:01:57 -0700 (PDT) Received: from hu-eserrao-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f7bc825sm30011973eec.9.2026.08.30.20.01.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Aug 2026 20:01:56 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , Dmitry Baryshkov , Greg Kroah-Hartman , Konrad Dybcio , Krzysztof Kozlowski , Rob Herring Cc: linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 8/8] arm64: dts: qcom: kodiak: Desribe EUD UTMI routing and connector mapping Date: Sun, 30 Aug 2026 20:01:47 -0700 Message-Id: <20260831030147.1500616-9-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.com> References: <20260831030147.1500616-1-elson.serrao@oss.qualcomm.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-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfX3dOyyB94MXCZ 9FAgqCaPWr617eGwQezDYQyVG0tdW1tG2ybXx1h0r4eIPEXLMs/2EBL/x1d+KcAH/8sIQgFDUfI COpYPxT1YSLskhI6BYPswS1UzOIXlR5yJzzNUmfEbhfSpJIa98tVtQp+WUm0xRJJnqE4JA5cBjP ZRBhFE+6lxyDGz557zX/fhfvx1mn6iwttEoPk46954LJRragF1k2xgSzwuF0V8tCLb+/fte43jw 4dOxH3fPMJOshd8nVapXiluO4F9xi8gHr+7Al4rnR7oc1o9ukMHSt93HFPay4jU8tW4JuDP69rf zfkVg4v1BaKbxhVE9iSHvB932+ecuc2P8P2QfVhCM1N0huO4gdWkdelkH+G/mFxMvdlVicFeIOt lH0n8z0B/g7VwhQ3iUNl3MTkBcPLY7ihhfJl6GUwVP5+w/43AqFugNFbLn2byT8/tQ9crhuPqQR hzSMXd78MS7vJonXxvg== X-Proofpoint-Spam-Info: AW1haW4tMjYwODMxMDAyNCBTYWx0ZWRfXwu9ENTe/j6gN SqrLvB0GUO9MhQJQFihDG8XRi8qVxesdUo9Y9PX6WydZ6YpGmO12inDRY99UtM1L8GC1q1D9suP PiJAVbRIJcU7j7f4QLVYMZ8YZ+LejwU= X-Authority-Analysis: v=2.4 cv=B7eJFutM c=1 sm=1 tr=0 ts=6a94eea7 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=EqwfFjFrxzYmPp_XjFsA:9 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-GUID: WMPehxTo2d5XsGPnL3OMkUcCaD8UBz9I X-Proofpoint-ORIG-GUID: WMPehxTo2d5XsGPnL3OMkUcCaD8UBz9I X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-31_01,2026-08-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 lowpriorityscore=0 suspectscore=0 impostorscore=0 clxscore=1015 phishscore=0 malwarescore=0 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608310024 Content-Type: text/plain; charset="utf-8" The existing EUD description uses a legacy single-path representation that assumes uniform UTMI routing. This was sufficient for minimal configurations where the USB port operated only in device mode and role switching was not considered. Update the description to explicitly model the topology using eud path child node and add a role-switch declaration to reflect role-dependent UTMI routing. Also on this SoC, the EUD hardware intercepts only the primary UTMI path. So remove the USB endpoint mapping to the secondary controller and associate it with the primary controller. With the intermediate EUD node now in place, update the Kodiak board descriptions to map the USB connector endpoint to the EUD instead of directly to the USB controller, reflecting the intended hardware topology. Enable the EUD by default now that the complete topology is described. Signed-off-by: Elson Serrao --- arch/arm64/boot/dts/qcom/kodiak.dtsi | 37 ++++++++++++------- .../boot/dts/qcom/qcm6490-fairphone-fp5.dts | 10 ++--- .../dts/qcom/qcm6490-particle-tachyon.dts | 10 ++--- .../boot/dts/qcom/qcm6490-shift-otter.dts | 10 ++--- arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts | 10 ++--- .../qcom/qcs6490-thundercomm-minipc-g1iot.dts | 4 +- .../dts/qcom/qcs6490-thundercomm-rubikpi3.dts | 10 ++--- .../qcom/sm7325-motorola-dubai-common.dtsi | 4 +- .../boot/dts/qcom/sm7325-motorola-dubai.dts | 4 +- .../boot/dts/qcom/sm7325-nothing-spacewar.dts | 10 ++--- .../boot/dts/qcom/sm7325-xiaomi-taoyao.dts | 4 +- 11 files changed, 61 insertions(+), 52 deletions(-) diff --git a/arch/arm64/boot/dts/qcom/kodiak.dtsi b/arch/arm64/boot/dts/qco= m/kodiak.dtsi index f2da3706d5c8..6c64dc9902e4 100644 --- a/arch/arm64/boot/dts/qcom/kodiak.dtsi +++ b/arch/arm64/boot/dts/qcom/kodiak.dtsi @@ -4421,12 +4421,6 @@ usb_2: usb@8c00000 { phy-names =3D "usb2-phy"; maximum-speed =3D "high-speed"; usb-role-switch; - - port { - usb2_role_switch: endpoint { - remote-endpoint =3D <&eud_ep>; - }; - }; }; =20 qspi: spi@88dc000 { @@ -4753,16 +4747,30 @@ eud: eud@88e0000 { <0 0x88e2000 0 0x1000>; interrupts-extended =3D <&pdc 11 IRQ_TYPE_LEVEL_HIGH>; =20 - status =3D "disabled"; + #address-cells =3D <1>; + #size-cells =3D <0>; =20 - ports { - #address-cells =3D <1>; - #size-cells =3D <0>; + eud0: eud-path@0 { + reg =3D <0>; + usb-role-switch; =20 - port@0 { - reg =3D <0>; - eud_ep: endpoint { - remote-endpoint =3D <&usb2_role_switch>; + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0>; + + eud_usb: endpoint { + remote-endpoint =3D <&usb_1_dwc3_hs>; + }; + }; + + port@1 { + reg =3D <1>; + + eud_con: endpoint { + }; }; }; }; @@ -4989,6 +4997,7 @@ port@0 { reg =3D <0>; =20 usb_1_dwc3_hs: endpoint { + remote-endpoint =3D <&eud_usb>; }; }; =20 diff --git a/arch/arm64/boot/dts/qcom/qcm6490-fairphone-fp5.dts b/arch/arm6= 4/boot/dts/qcom/qcm6490-fairphone-fp5.dts index f41ad446a39e..b1f1ff6b99e6 100644 --- a/arch/arm64/boot/dts/qcom/qcm6490-fairphone-fp5.dts +++ b/arch/arm64/boot/dts/qcom/qcm6490-fairphone-fp5.dts @@ -98,7 +98,7 @@ port@0 { reg =3D <0>; =20 pmic_glink_hs_in: endpoint { - remote-endpoint =3D <&usb_1_dwc3_hs>; + remote-endpoint =3D <&eud_con>; }; }; =20 @@ -1530,10 +1530,6 @@ &usb_1 { status =3D "okay"; }; =20 -&usb_1_dwc3_hs { - remote-endpoint =3D <&pmic_glink_hs_in>; -}; - &usb_1_hsphy { vdda-pll-supply =3D <&vreg_l10c>; vdda18-supply =3D <&vreg_l1c>; @@ -1573,3 +1569,7 @@ &wifi { qcom,calibration-variant =3D "Fairphone_5"; status =3D "okay"; }; + +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; diff --git a/arch/arm64/boot/dts/qcom/qcm6490-particle-tachyon.dts b/arch/a= rm64/boot/dts/qcom/qcm6490-particle-tachyon.dts index 5bb33a8a9830..41836afd3acd 100644 --- a/arch/arm64/boot/dts/qcom/qcm6490-particle-tachyon.dts +++ b/arch/arm64/boot/dts/qcom/qcm6490-particle-tachyon.dts @@ -74,7 +74,7 @@ port@0 { reg =3D <0>; =20 pmic_glink_hs_in: endpoint { - remote-endpoint =3D <&usb_1_dwc3_hs>; + remote-endpoint =3D <&eud_con>; }; }; =20 @@ -828,10 +828,6 @@ &usb_1 { status =3D "okay"; }; =20 -&usb_1_dwc3_hs { - remote-endpoint =3D <&pmic_glink_hs_in>; -}; - &usb_1_hsphy { vdda-pll-supply =3D <&vreg_l10c_0p88>; vdda33-supply =3D <&vreg_l2b_3p072>; @@ -864,3 +860,7 @@ &usb_2_hsphy { &usb_dp_qmpphy_out { remote-endpoint =3D <&pmic_glink_ss_in>; }; + +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; diff --git a/arch/arm64/boot/dts/qcom/qcm6490-shift-otter.dts b/arch/arm64/= boot/dts/qcom/qcm6490-shift-otter.dts index cf74b3664cf5..45b9318ab54e 100644 --- a/arch/arm64/boot/dts/qcom/qcm6490-shift-otter.dts +++ b/arch/arm64/boot/dts/qcom/qcm6490-shift-otter.dts @@ -84,7 +84,7 @@ port@0 { reg =3D <0>; =20 pmic_glink_hs_in: endpoint { - remote-endpoint =3D <&usb_1_dwc3_hs>; + remote-endpoint =3D <&eud_con>; }; }; =20 @@ -951,10 +951,6 @@ &usb_1 { status =3D "okay"; }; =20 -&usb_1_dwc3_hs { - remote-endpoint =3D <&pmic_glink_hs_in>; -}; - &usb_1_hsphy { vdda-pll-supply =3D <&vreg_l10c>; vdda18-supply =3D <&vreg_l1c>; @@ -985,6 +981,10 @@ &usb_dp_qmpphy_out { remote-endpoint =3D <&pmic_glink_ss_in>; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &venus { firmware-name =3D "qcom/qcm6490/SHIFT/otter/venus.mbn"; =20 diff --git a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts b/arch/arm64/boot= /dts/qcom/qcs6490-rb3gen2.dts index a13315bf0fb0..6520e920a844 100644 --- a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts +++ b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts @@ -211,7 +211,7 @@ port@0 { reg =3D <0>; =20 pmic_glink_hs_in: endpoint { - remote-endpoint =3D <&usb_1_dwc3_hs>; + remote-endpoint =3D <&eud_con>; }; }; =20 @@ -1402,14 +1402,14 @@ &usb_1 { status =3D "okay"; }; =20 -&usb_1_dwc3_hs { - remote-endpoint =3D <&pmic_glink_hs_in>; -}; - &usb_1_dwc3_ss { remote-endpoint =3D <&usb_dp_qmpphy_usb_ss_in>; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &usb_1_hsphy { vdda-pll-supply =3D <&vreg_l10c_0p88>; vdda33-supply =3D <&vreg_l2b_3p072>; diff --git a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-minipc-g1iot.dts = b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-minipc-g1iot.dts index 31bafa2cf51d..4c4afe691d64 100644 --- a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-minipc-g1iot.dts +++ b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-minipc-g1iot.dts @@ -77,7 +77,7 @@ port@0 { reg =3D <0>; =20 pmic_glink_hs_in: endpoint { - remote-endpoint =3D <&usb_1_dwc3_hs>; + remote-endpoint =3D <&eud_con>; }; }; =20 @@ -1052,7 +1052,7 @@ &usb_1 { status =3D "okay"; }; =20 -&usb_1_dwc3_hs { +&eud_con { remote-endpoint =3D <&pmic_glink_hs_in>; }; =20 diff --git a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts b/ar= ch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts index 13e8e62f6205..b9f92bcf84ab 100644 --- a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts +++ b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts @@ -93,7 +93,7 @@ port@0 { reg =3D <0>; =20 pmic_glink_hs_in: endpoint { - remote-endpoint =3D <&usb_1_dwc3_hs>; + remote-endpoint =3D <&eud_con>; }; }; =20 @@ -1098,10 +1098,6 @@ &usb_1 { status =3D "okay"; }; =20 -&usb_1_dwc3_hs { - remote-endpoint =3D <&pmic_glink_hs_in>; -}; - &usb_1_hsphy { vdda-pll-supply =3D <&vreg_l10c_0p88>; vdda33-supply =3D <&vreg_l2b_3p072>; @@ -1135,6 +1131,10 @@ &usb_dp_qmpphy_out { remote-endpoint =3D <&pmic_glink_ss_in>; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &ufs_mem_hc { reset-gpios =3D <&tlmm 175 GPIO_ACTIVE_LOW>; vcc-supply =3D <&vreg_l7b_2p952>; diff --git a/arch/arm64/boot/dts/qcom/sm7325-motorola-dubai-common.dtsi b/a= rch/arm64/boot/dts/qcom/sm7325-motorola-dubai-common.dtsi index 3860ab8508a0..2a90de989dad 100644 --- a/arch/arm64/boot/dts/qcom/sm7325-motorola-dubai-common.dtsi +++ b/arch/arm64/boot/dts/qcom/sm7325-motorola-dubai-common.dtsi @@ -96,7 +96,7 @@ port@0 { reg =3D <0>; =20 pmic_glink_hs_in: endpoint { - remote-endpoint =3D <&usb_1_dwc3_hs>; + remote-endpoint =3D <&eud_con>; }; }; =20 @@ -1429,7 +1429,7 @@ &usb_1 { status =3D "okay"; }; =20 -&usb_1_dwc3_hs { +&eud_con { remote-endpoint =3D <&pmic_glink_hs_in>; }; =20 diff --git a/arch/arm64/boot/dts/qcom/sm7325-motorola-dubai.dts b/arch/arm6= 4/boot/dts/qcom/sm7325-motorola-dubai.dts index d94571c05a59..7a97a3eedd5f 100644 --- a/arch/arm64/boot/dts/qcom/sm7325-motorola-dubai.dts +++ b/arch/arm64/boot/dts/qcom/sm7325-motorola-dubai.dts @@ -98,7 +98,7 @@ port@0 { reg =3D <0>; =20 pmic_glink_hs_in: endpoint { - remote-endpoint =3D <&usb_1_dwc3_hs>; + remote-endpoint =3D <&eud_con>; }; }; =20 @@ -1428,7 +1428,7 @@ &usb_1 { status =3D "okay"; }; =20 -&usb_1_dwc3_hs { +&eud_con { remote-endpoint =3D <&pmic_glink_hs_in>; }; =20 diff --git a/arch/arm64/boot/dts/qcom/sm7325-nothing-spacewar.dts b/arch/ar= m64/boot/dts/qcom/sm7325-nothing-spacewar.dts index 7db9ae1c3cef..4729779d50a0 100644 --- a/arch/arm64/boot/dts/qcom/sm7325-nothing-spacewar.dts +++ b/arch/arm64/boot/dts/qcom/sm7325-nothing-spacewar.dts @@ -99,7 +99,7 @@ port@0 { reg =3D <0>; =20 pmic_glink_hs_in: endpoint { - remote-endpoint =3D <&usb_1_dwc3_hs>; + remote-endpoint =3D <&eud_con>; }; }; =20 @@ -1438,10 +1438,6 @@ &usb_1 { status =3D "okay"; }; =20 -&usb_1_dwc3_hs { - remote-endpoint =3D <&pmic_glink_hs_in>; -}; - &usb_1_hsphy { vdda-pll-supply =3D <&vdd_a_usbhs_core>; vdda18-supply =3D <&vdd_a_usbhs_1p8>; @@ -1457,3 +1453,7 @@ &venus { &wifi { status =3D "okay"; }; + +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; diff --git a/arch/arm64/boot/dts/qcom/sm7325-xiaomi-taoyao.dts b/arch/arm64= /boot/dts/qcom/sm7325-xiaomi-taoyao.dts index 87f267aaeec0..b0bdbcd47503 100644 --- a/arch/arm64/boot/dts/qcom/sm7325-xiaomi-taoyao.dts +++ b/arch/arm64/boot/dts/qcom/sm7325-xiaomi-taoyao.dts @@ -94,7 +94,7 @@ port@0 { reg =3D <0>; =20 pmic_glink_hs_in: endpoint { - remote-endpoint =3D <&usb_1_dwc3_hs>; + remote-endpoint =3D <&eud_con>; }; }; =20 @@ -882,7 +882,7 @@ &usb_1 { status =3D "okay"; }; =20 -&usb_1_dwc3_hs { +&eud_con { remote-endpoint =3D <&pmic_glink_hs_in>; }; =20 --=20 2.34.1