From nobody Fri Oct 2 09:17:30 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 8BF944E4C51 for ; Tue, 29 Sep 2026 21:35:19 +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=1790717721; cv=none; b=HLpQfZurYig8VjGxr8QsFqBehSlrnBsS+a5YcrwXz1OJcK/WaIxLxoa7/76N6cRu3FmtoeIfokQc1cGPCswZMu9ZrFslvK4nVCm78RimxSe1Kv3HNVejyxerL5rKbD5Bm1MzA3V3JjyQgIEJVEKF1FXYjveHx3FY56JjzZVQlnc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790717721; c=relaxed/simple; bh=NS67m12FohtVTM0LAceMS1EJYY9P5UQk+hL/TSpoW4E=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=CkAvv/vWZgF+wJBYPNO/Wnj+Mph/LbbOFyxrrW8WmTvYffu5YOwwDnfqb9cjD3wqnURaRfkN2OmTmkm3ZfFmLw7hlfu4L8d2jBKEydVAVpLjJfZdE6g64ChWLBWMtthHV3G/NljpdoN/8zBA7xZPjLCWa6w4lGXL3t+3l8sGJhU= 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=K/1nLxeL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=OhFQ3Fnd; 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="K/1nLxeL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="OhFQ3Fnd" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68TL2IP8708107 for ; Tue, 29 Sep 2026 21:35:18 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=mjs3rlDnLUk N31VdHb88E8QJ4KDT+KUi0fn1sZoUpDA=; b=K/1nLxeLKcYSOxfqweu66c3+R1p QbVy+Iu/N3Uv/tIvQL3P1IdYDW4f5g2qsi0jInw/n7+nqih3o5G55Bc8UXRd4QZN Bh1u1YgG+S2HJml3sFEHmvFsHJ8VeLcbbjIXGilmXr8wkdaYKor7dd1/bE3RPn75 WI/oG01P+QNmVVaJj6kwwpe+vPQCSK09wIvENKbbJA2I3pbYaD7WJXCt5OkpE4kk pzYYcRcRTFd9WlRSSjGV4rIdHQjOK4WTV8Y9ewDwirLoHHwwhpa3GOcNf7LQQ4AV TtRS/Rb9R2yn4+2ULGg/ECOmuGrNTCycm/sAK6Zm5iNfttMuchshr/eJEVw== Received: from mail-dy1-f198.google.com (mail-dy1-f198.google.com [74.125.82.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4h0g1ksk8a-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 29 Sep 2026 21:35:18 +0000 (GMT) Received: by mail-dy1-f198.google.com with SMTP id 5a478bee46e88-30c0d568830so9274095eec.1 for ; Tue, 29 Sep 2026 14:35:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1790717717; x=1791322517; 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=mjs3rlDnLUkN31VdHb88E8QJ4KDT+KUi0fn1sZoUpDA=; b=OhFQ3Fnde+X8RiPmzF2tZEPg6aG7CH0/5Xoj1+kHOJvIluaCsjX3aWSXqEOLrYWdnP PZVPuN1+0Y339dGauDBXVFq6IUVcWQKh02fOhWcfrhvMi0cPsEiMChBr5058zjD3bEz+ 0e+AiD98O8/U9tp+4uF15ODFDnsJrNgO8VkKSPrrUayAD+x9A/RS7ehvxQa12VDdfHHI FlLNVYkF4Na4JgkZX5yxEf7RMh7eDJbHkBCObg7uY+w6dnvHuagDbZF3c4tXdVR1413L TVQ8Fa9CNPXG50rdEVk3RPTzKGpNdRp9fTvLTgzpF/KIB8/Wocein4508EKR75BKrBms ghIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790717717; x=1791322517; 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=mjs3rlDnLUkN31VdHb88E8QJ4KDT+KUi0fn1sZoUpDA=; b=LT6qqCnR+7R0zVdXFCEojHe866kXwFShaRunI3iz6QdSZHAKmsAM6IlZojc7AdT+YA 00cXd6/4buAKjMlsXxAalZHz+QmY5dbtPOC4Pz0jU+z6XJRIANuckDjlDVcZwwTIFd05 FCmt8NIBLp9Zpz3ndlXKhdACVzVphC9+LnMX/2ieJUHMxUQ+npOThC43lu/olfUZHktS LE/UOlq14b3cZ5z7slQjXuyEnKDnsqC2yOybcdRI3Bz3KAqdiqZXJ5NBEUg9JdS6v+UL h4+fLKfjtvhp/uSyC0dCLXcX6km5c4WGszfL4Dgk90AyNQsyrzM5W543vm/iLvLtVY4J e4yw== X-Forwarded-Encrypted: i=1; AKwUvBxSikGjtsalcUlSG2CgDbtX0fteoHjf8c1Hi4VTkn95BNuFZ1JKon00wXjdFUdOwTxBoEMOzMcAU3qd4rU=@vger.kernel.org X-Gm-Message-State: AFq9FYJfqRYOtw9j74Fmy9NzBONzRx6OnFEqPpMRjpXEyJDXhPN55Hiq V6MAw9FzhjlWhvUgFFpif6PNCYx3tjCjdVc55Y6KhVNaMGYt86dI1Ko+sy9d8Fm1W5BP0t+j31m glwI7Xg1W7W0EmuhknpwaroeFBcf3YZCQVwMhuR/6dAoN1KAtWHoOsCoO1zceNyIQOX4= X-Gm-Gg: AYBFou08osxib8eT/S9iduVDD1GYWazMZj/cQkRNMH8PnyeHxJ/3jUIw+GI4Fp0rx12 uM8GmpZ64FzpFOVJnK8yYDMQAeoHcFNYvw1KQG2+kCFS8dE/DBw6xGrKpZ5C8Eyl0xa6BuFTiee BJnEPqWGsZkAdPfOc8TsfeJurmaPDQvGALvnmw8YBCL2VIaPbL91A/Uf5Rh/dlt8NviI4H0mTQ+ E5CucCxYeHocqZc6Pax8eybfTwveVRLrtFZ68JytkVsx/qUuTGRO3D/pSfVxMU0aeXn7qmB1VtM THh11iZdhjSe3MLqe+EcZKi38Y7t7sl0AGJGTf7YOkoA71D8P5ZFr3eS6tiwesdmmbjdG5uQX55 hlZQiRedhuG4mgdzPnj/+WdcyHu5DCcx9B70J9JcnWWQU1aI/bv9s X-Received: by 2002:a05:7300:e9c5:10b0:33c:e74:4624 with SMTP id 5a478bee46e88-34c63afc496mr775806eec.27.1790717717131; Tue, 29 Sep 2026 14:35:17 -0700 (PDT) X-Received: by 2002:a05:7300:e9c5:10b0:33c:e74:4624 with SMTP id 5a478bee46e88-34c63afc496mr775765eec.27.1790717716443; Tue, 29 Sep 2026 14:35:16 -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-34c391e25e1sm1512570eec.30.2026.09.29.14.35.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 14:35:15 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , 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 v9 1/8] dt-bindings: soc: qcom: eud: Add per-path child nodes for UTMI routing Date: Tue, 29 Sep 2026 14:35:06 -0700 Message-Id: <20260929213513.2401005-2-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260929213513.2401005-1-elson.serrao@oss.qualcomm.com> References: <20260929213513.2401005-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: J6kSm3SItoQwd56Zwz8Q-CoC2JyQ2eTo X-Proofpoint-ORIG-GUID: J6kSm3SItoQwd56Zwz8Q-CoC2JyQ2eTo X-Proofpoint-Spam-Info: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfX8dmiaB2rmlkU ajWoUSEIO0PkrzsOLv/5L9tp9pu/fXsX6w5dbyOujY8nAHbCOcnHmb3eijIZwPHh8ZWczH4t5S5 AS/+xPkbVvWC3WrPAKKGWipmmT8t4C4= X-Authority-Analysis: v=2.4 cv=Ysia1IYX c=1 sm=1 tr=0 ts=6abc2f16 cx=c_pps a=wEP8DlPgTf/vqF+yE6f9lg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=RJ9lep_nkaVUh_m6BXgA:9 a=bBxd6f-gb0O0v-kibOvt:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfX+uTbpuLHIIoi MQ1K76L/l+6YuDkfS5dwAPOiZrSkXQdaOFX8P4W7B6J8eJyygwCp7+7VR5Ky0wqEuenB24FXpWb rNX406j0Bp4dhucIQAnmET6JBw7VOk6B3J4tn2YZH2ImKOR9nf7+9wOYFgxBOEAK8SCJkkewvoN 3d70qS7kx5FYgT1xZfOnvk3LzH6oUu0HeuiAo4R0W9t2LwufBJpQJaPVmef1B2BHFKHXecEaN7t 23zqDaQz9VLt12xxWAv37Db7cIG0/RmFZzkg5cPnfvN6hzhlpNKiyjsyZuhJel19GnUotZwKL5c 9KhLS9WbqcB/4cSUwXllGsMfrHxbvwNuIqF4r4fvGwa5VkrcG2onyUmOyLnSILHbKvLEWP6tiej zlDcPi/Bu0iUDb6gqepKPZpbcSk4ObMTLIhniaVP63i70QloIZNay0+CHoPIcF+FMtxHGUZpE3g aa0hFJXSw2xjPW44mbg== 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-09-29_04,2026-09-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 suspectscore=0 phishscore=0 adultscore=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 clxscore=1015 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609290086 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 Acked-by: Bjorn Andersson Signed-off-by: Elson Serrao --- .../bindings/soc/qcom/qcom,eud.yaml | 138 +++++++++++++++++- 1 file changed, 137 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..90dc104e4475 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,92 @@ 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 + - '#address-cells' + - '#size-cells' + properties: + ports: false + eud-path@1: false + - if: + properties: + compatible: + contains: + const: qcom,sm8350-eud + then: + required: + - eud-path@0 + - eud-path@1 + - '#address-cells' + - '#size-cells' + properties: + ports: false =20 additionalProperties: false =20 @@ -77,3 +160,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 Fri Oct 2 09:17:30 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 2DB6A4ED1BD for ; Tue, 29 Sep 2026 21:35:21 +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=1790717723; cv=none; b=F1AVxy4LcJiiKfpdPV8Ob5Hu0MnYv5Djiedbv37S3o+uQyJnHOmw0qo0ywuEc98SastEHtrzOdnO/VtpCynX1mBNeiFrm6HIl8iA5RbwRWRPdfh0ulQB85zjp0+mxAFfRe4NtvfiYo3eH+lrEDFTbL9RqWH0qTz0gYfRjt7GQBE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790717723; c=relaxed/simple; bh=RgpScOi/jTx0NmjvnxrAqWvzEjBwpYvY7JrWqQ+DP7g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IzkqtdmSThPfNjf8wRXjOnjnrmwXhCJNFXLIaRcf8IDpDWl+a49+d41NVOTQW/31QhgRiEEy7hwUQLr3/4P0YnnPD9d/cMzynso7o75WTq59kxlpWHnMXAknEielfrKVxB3lcF42xzpQfMRTrDYNRhuvfFR3uBoZamXRmIfbe/E= 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=Tr0V8xdm; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=VLUPJMH0; 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="Tr0V8xdm"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="VLUPJMH0" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68THiSCc1275904 for ; Tue, 29 Sep 2026 21:35:20 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=HnypzRX9jY9 YKeCtZsbOHSIQENZPHY0b36j/Ve8BaVM=; b=Tr0V8xdmtftva82Ku4YcQA70YF/ viSju3XE6Us2hF3qrm8mWeVR5ytd9tEB5oWY3AeBBSTb2zwu/PSt8Ex/4fihdSTH wnqLzMhiW1v6a9lszQN1T57CXidFXJ6a1EHbxSSTZHvSpFJ7XLroPENyEPSWPs0K I7rhBB2kbs46zQZTByJdLY83USgDOVItt6zJ9V7ZRBLBWAJrSGcOIS89RqkFctul ECmTPNk7qiMa6YD1F8fffPUuBLZRYwk0ggGMP0HLMNalYliqD9ZURXvajf+4uCpU Hq1PBPwc24E8JOnKxy2KBnMvXvBXkgEUqz5nWIFz9/57SNYC8cehHagkjKQ== Received: from mail-dy1-f200.google.com (mail-dy1-f200.google.com [74.125.82.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4h0j0egwsy-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 29 Sep 2026 21:35:20 +0000 (GMT) Received: by mail-dy1-f200.google.com with SMTP id 5a478bee46e88-34318e88ba2so3599324eec.1 for ; Tue, 29 Sep 2026 14:35:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1790717719; x=1791322519; 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=HnypzRX9jY9YKeCtZsbOHSIQENZPHY0b36j/Ve8BaVM=; b=VLUPJMH0LzW8FD/rGkms++yok41/xxbDQZbr5qIiHhiHHc5Qj2ksVacxN3OH51GKuB 8XSlscvlf0SY6RgI9Z6k5ZZkKtf93TiyqGs7AXhbf4t2/pceZbkm+z3PwNz8WApDnSYX wvVCirRb7mCuD8qrBPHxuqEUl7Ydm1DogHVGHuT8wyUSy7+cBCZZuYBI+XOo54M48B+l 9egs70Z9V3xgKhJs8MCS74uy7d03brPfYDZ1Usa2krJGJchz3VKTjX73GkHgir48NvWn yPrtNOk17Xem7y0/oIfMedXEP/3g027MwTF4SLn7IW7l5aGQ+x15q7DxuzW1QH/qp0yu 8nkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790717719; x=1791322519; 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=HnypzRX9jY9YKeCtZsbOHSIQENZPHY0b36j/Ve8BaVM=; b=Zn2uDf+Pug1aELgnjXEJxU7ZwzyPmokhnHklbKvJpK9F+RJpYppLp5XwopobFre+0m Ml/cYznZ5xWovV1WoDQTYNxAw9ME5ncIyIequ/MECfQ1IlGFy2YhMPfGjmiodjI9cp7G W3mrqEHd/MqyWFCjc8fgV4bktOaVGFAmbQ7jSUhMGIczaGZZVvoh1BiuCEo8Xzl4BAH5 W3un2HJxs7lMdpOQew+ei4+oZR2pNClx9H7KO8E1HXXR2QH/qSpSuFY7VU6OkWm3D4WH JmQ79IXo/lAocWPNsAHsw0XcQ01d+0elcQtiz5IDw4QDecCv/PaejfxH0lvTnUu4NMIb DDhw== X-Forwarded-Encrypted: i=1; AKwUvBzAAzPnoj1GWBQoN6MNtftQKteM/xpxxBipTy5ttpV/wbQEyP0Du0+5KqjGCE76xC9M/v9PcgpI/ZnsMac=@vger.kernel.org X-Gm-Message-State: AFq9FYKUUb5tl4AlQsq9vvg5UCuGviFwdXhbHWuw9x7oQLO+HrTKVqwJ uiDgrhgPv8VZFAuRicgsaA7AOX0e3heTZpLzfscemkMll23SZ8wtruYJBffeMTW2r4TcgkSGcrm rOXJ+93KeGoVqf5aouBAl6lFhI4BGzzcC8goa2MnM3pK+qFzwg+ZPPGRly3KMpLYM+j0YaY+tqs k= X-Gm-Gg: AYBFou0j3HEORw5URRO+MQPLSw22X7ymP+pBBUNu+cTH8ElQ2+25lN86g19UccnJ/7q jxH5gmrK85Wbuiyirtg25PUaZL45z+SgFPGshFZ215U1UUMP9zJAWnK56ANWgBW9IYZm980NhTo IjKd97ewDf+nJ5mGpN+OdlWOXItUUiGlC/mIQ2HwYrVcLy2Iu3oHgvRoTQG/llpRGZpIdou/bZq 2Ymk5IKrdd2BIJDnYIa4jpCXX4nSLp2rLTylO2SuLXQ67wbbdiOB8qdsX2jX5019ZyHjaKaie9k pXSWtpovDP0XMad26pNyvTSg2xyt79y7EsRgV1DqRg4T+BsALLuPgZDx1Z1FdJbzEbuPY45wunb MwxoKhz3kkqFUVmjRCaSLo5OclBK+5/IYaasxEhTgONH9JK/tiai8 X-Received: by 2002:a05:7301:2105:b0:343:8d77:1d97 with SMTP id 5a478bee46e88-34c676d038emr622141eec.39.1790717718677; Tue, 29 Sep 2026 14:35:18 -0700 (PDT) X-Received: by 2002:a05:7301:2105:b0:343:8d77:1d97 with SMTP id 5a478bee46e88-34c676d038emr622093eec.39.1790717717924; Tue, 29 Sep 2026 14:35:17 -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-34c391e25e1sm1512570eec.30.2026.09.29.14.35.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 14:35:16 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , 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 v9 2/8] usb: misc: qcom_eud: add sysfs attribute for port selection Date: Tue, 29 Sep 2026 14:35:07 -0700 Message-Id: <20260929213513.2401005-3-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260929213513.2401005-1-elson.serrao@oss.qualcomm.com> References: <20260929213513.2401005-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-Authority-Analysis: v=2.4 cv=cqgOAF4i c=1 sm=1 tr=0 ts=6abc2f18 cx=c_pps a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=qXh0dugIJu6lbCvlF8UA:9 a=6Ab_bkdmUrQuMsNx7PHu:22 X-Proofpoint-GUID: PdFkaWlCNozC4P1G9ghOQqreNZelqVp6 X-Proofpoint-ORIG-GUID: PdFkaWlCNozC4P1G9ghOQqreNZelqVp6 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfX/Efoy7NAmnyv o/ANSVmPOjzIzUxSYR9gn77WlC7kfn8WEea/6HYZ6R0Zl5qVsgvck0kyoPpqtF+nbXXqunC3RTc QOYFS3YfEZohrDpuUrkZ6lZq58Nf72I= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfX+uwqECBvt7zi PeZCun8NJCYhG5l8BBg9K88iTQDUxKbnpCOoAg3yWMiH3VeuC7FMF0NTd78tsKeoDxEjTxpNak9 WWFNUzYT42z20yqyXjsIcGMV487sNM208GngKBsdsB4lvw85jG9uPISenN57B1/MeeZeiq1L7+Z +opGCEVjXwEU42tWv84WySI2efkxDz0MN5JhiHtwCUnjGK6wK5DhVMHrsTFlUx2dbNDIRrHmylT MpAAka1SMJNutbSjb/ke8z2KD8scmXr+emLknvfsgIYxupoUF5n8SXiTxQG3b9qAtBpTlXdxTqt 3wVds1jUTfCM1b8qYXnR96BZBXq3TQ+U6Wp8mh6oYibcgBsdPhuQ9vGSu9novF+hU2wRHuixhlm xVaYuUzAEpG+g9WiGJ9Gw5QKc4TXXw4W4XYQO4iN/1AqHmzwqBSbt2lQTFD0lBCjO5nVpUFTDpP XpKO2DCoFjN7PnHT2hg== 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-09-29_04,2026-09-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 clxscore=1015 adultscore=0 bulkscore=0 impostorscore=0 spamscore=0 lowpriorityscore=0 phishscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609290086 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 | 42 ++++++++++++++++++++++ 2 files changed, 60 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 a7b9ed4ac071..fa640e88c88b 100644 --- a/drivers/usb/misc/qcom_eud.c +++ b/drivers/usb/misc/qcom_eud.c @@ -23,13 +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) +#define EUD_PORT_SEL_MASK BIT(0) + +static const char * const eud_port_names[] =3D { + "primary", + "secondary", +}; =20 struct eud_chip { struct device *dev; @@ -40,6 +49,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 +114,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); @@ -218,6 +258,8 @@ static int eud_probe(struct platform_device *pdev) return -ENODEV; chip->mode_mgr =3D res->start; =20 + chip->port_idx =3D readl(chip->base + EUD_REG_PORT_SEL) & EUD_PORT_SEL_MA= SK; + chip->irq =3D platform_get_irq(pdev, 0); if (chip->irq < 0) return chip->irq; --=20 2.34.1 From nobody Fri Oct 2 09:17:30 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 A94E94E9C01 for ; Tue, 29 Sep 2026 21:35:22 +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=1790717726; cv=none; b=BKs4znyHtl066+CrA5NOI92C6hzFKRiBQ9sLQizV0Gx2Q+CZhOHjV6z8gQAgnW7CDarxIodXt/wjhEwREb4NQ2Ox3rUxPDfyhxdqGwaf2O8tFEHbcKULcrlMmBvGDL+d7zXUkyxciItGs3NvOJJonPdPuGxNJzAipfV+gAG7mcc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790717726; c=relaxed/simple; bh=5F7fqXoheI+nQtZUtZ2lGyPnKx0eff5fmA+5h4iYtLc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=MIoYP1NbbagmnISrIK7q7E9BhVp/8x5NhAgC0T6pL7v94/bf3eFsS3T/znIhCIZgbqBBLl3yocDnB3RxMyuSO4W1L58KWdGnH6xJ5AGmL2qmYZ+4G0KlAY1RCcP8poMDVxJGI61ZgFTJgMskJaAha8PaXKJaTLtbjK/pjolzeFY= 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=QeF84HyT; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=RJ2WGz4E; 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="QeF84HyT"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="RJ2WGz4E" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68THdP5O858071 for ; Tue, 29 Sep 2026 21:35:21 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=iNTBdB7D+ki xYkp60HrocRPs7RXWgydmE5O05yA59CM=; b=QeF84HyTfJrF17WRN709rReMMMq WrPMB3pI0KM7RgBfa0eoRxAryfzy7uNtI6wNIYS7KVoR2TrUQKboTTj1pHlJk/Ze vUrQku/RT6JZ2IDAdLwrWP4O0hUeszrGFTRuhCHhSMJw0vrF2kcE9a7roI6drZ40 711OXidwfdsZTf/+pPmQUJJXrNaNM//5I1r4nPwPzIeVrQYyxTNN/744U7v4G/YY oNDuoWGiIZYun+1hA5owcIzS0d09pFUqgeGYfa6MjGPUHJpQ5z99XrYySVcR6HS4 7xpNhAdsIXuv2O92QLHHu8nN3yua1ITGO/VwBYVPC6gDza0iDBk/oIqLYMw== Received: from mail-dy1-f198.google.com (mail-dy1-f198.google.com [74.125.82.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4h08e0kr7r-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 29 Sep 2026 21:35:20 +0000 (GMT) Received: by mail-dy1-f198.google.com with SMTP id 5a478bee46e88-33713e5e6daso6907904eec.0 for ; Tue, 29 Sep 2026 14:35:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1790717720; x=1791322520; 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=iNTBdB7D+kixYkp60HrocRPs7RXWgydmE5O05yA59CM=; b=RJ2WGz4ErJXLuOdlrIm/FOm6NbBxrsvkXrJOEk9mlOgup4dS1SHkB9Y6CIxvsFi3tN fob2azMtVCBDxHcjvgZakYlPnvwpYO/oFj/1s55peLeSCSI1WA2fidVTAB4EnuF3SKey 4i928GOoGko+6g7ezWpEPA2MEnqWjht4Q92m6U+Ip2ab1+xTHfXjpCBnXG+THx2qAcE0 uxl5AaEej5anSAgYGuLN4lJqQPRgGWdb1/HzmON5em8a+LJRuoKp/F4hxd4KjjpUI7+4 d5K03zoWT8qkGN8Ass7W3oIPZ1EZuReipg0uABwW8/QdKg0SKCcat6LgQvvykDH6q7f7 LStg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790717720; x=1791322520; 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=iNTBdB7D+kixYkp60HrocRPs7RXWgydmE5O05yA59CM=; b=qCCij9uhb7+dQMP7j2NpxVphuvpGHO3RU81UyhK6AEBy/bCXDKiZtJ6cH1aMRAFI9Z oN+guHkia9v2lDdRRkZe3/dL7RN8apdGeDnYOhBiCDXQXLAcIQff+jHCOhSxYPvoII7Y u3UDWqbY4uvWLtCEF2kzMpEfPWKypMoO26Hp/BjuM5ReElDGWqXAPxYHi/QVQeKgVWFL A3Gig4XoDbrmBKnRMqKSV8EN16jpmb7vUgQVWrlSieCMobBeQxXavGucVr0OhL2lS46u STMMOx96KTsCh186eFUBD5daksp80Y+PCnKdv9VKHtXSNGWL6nPXl2owfmVu8dTU04ce N4ww== X-Forwarded-Encrypted: i=1; AKwUvBxd4oYeBk8o+H0dP5WDHBROwKp4pJiM7izmw4hoaoX8qMDDpGEAt2dtEK5BUh4TWlIX17K5EL5gYbfk6XU=@vger.kernel.org X-Gm-Message-State: AFq9FYJhLXKT6dByIpUj1ZDthONXy9tb0Amd9ZOnCreLfBiRvBb/bE0B P+psYLrRB3094WCCfY8NEu6oEwgqnA8WPwDIA3QHEcGE5Y37ajSEPsP3v+/5f3WDYFwvjdseilr TwdxnoZURnL+VreG1j2IZBtMMEX2EV7eUigUjLncCsX+jziuzXHshxedh7EfYwXBUX40LoSKv2D k= X-Gm-Gg: AYBFou2+JfQPbbAdb7meh4bvnocoa3tw0+e26fmdmLTTOSj3fQCp/mHp8lmlYXkFIA2 le5S2XaPnFhFG4CAsXO2jdffGt1yUo+OsTjsJWSP8I0wY1pd0hTdZPekNFCoTY8inSjR1KyEMEX oQRhsD8ihR6ixX0mFG4x+54Mj6F32ZzulZKg54hK869VsFErVkjwQXHk8PaYx0v1joyKJEsttus AysOTJo3Jbv/kPlFY8LrWE8cswboALpzADW+0uMuTSqno5pRR7nVwEPjmFdOR/5Sm9j0o9+sJGr hyt4JfxP41AjfmvyXNMQQ7sb0/+2pCkLggf2Vbx3Awoy2syCTQzQ42ZmWjnF2aRlWVBT2lwxAio 1XCpILCkcFymcEJ1uvjN9bY4rh4oP3Oywt/nFbYXNL5ON6bAXd/1s X-Received: by 2002:a05:7300:ae04:b0:33c:e61:e1e5 with SMTP id 5a478bee46e88-34c634268admr796017eec.21.1790717719871; Tue, 29 Sep 2026 14:35:19 -0700 (PDT) X-Received: by 2002:a05:7300:ae04:b0:33c:e61:e1e5 with SMTP id 5a478bee46e88-34c634268admr795975eec.21.1790717719187; Tue, 29 Sep 2026 14:35:19 -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-34c391e25e1sm1512570eec.30.2026.09.29.14.35.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 14:35:18 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , 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 v9 3/8] usb: misc: qcom_eud: add per-path High-Speed PHY control Date: Tue, 29 Sep 2026 14:35:08 -0700 Message-Id: <20260929213513.2401005-4-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260929213513.2401005-1-elson.serrao@oss.qualcomm.com> References: <20260929213513.2401005-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-Info: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfX/hOWPnbPVZI0 LWNm+ehUixffcaG6YMQp0sEPlMyCf4QscCgTgIx0ikvmzX3KkhYsTr5PYaocaVIA/Ecop5qBB0/ yPz03UdN9XCngal37AVpUL+FXWwer+8= X-Proofpoint-ORIG-GUID: Zckhs-iJdvpM5Bpk10570zYa3RfEOsGA X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfXwsGjex8IGhNu LYDmMWX/a3ljez1N67NmDILxgv2JwY2x5zHG4vMCJuNlAnPZsXxtYi+72qhqTKbRDQftKnroHPV lz3WwinX7no9FG0Av7qLY8jUUUk1SUhC/Bhtd9JivXcjlWQbPxBX/yo4cP4ZwQcIFnQdbyZ0yUU jirDqSV82PC7FqDEqOSG82YM39XMGOI5lXaV5PxHptU+FDQyBSYxzd/FPPBwmwp5bTvZv9oNEEN XcHXttB1rl0Tb76XawqHQuVx1hZjb9CXSEhX6jFHlcZUt1tbfCrGXHMePCh2DA06SiQyyXJ5yI/ atmSRwcWpwkcmA1yWXJw5607ITNv9mJX5nEAOOiAWaZiDsyLxrRINU6n2rRLN6a7Wrli8PuCYLm 4AZXG6zq/gJ6oA/wZIWZZkXDIF/TnBMH19iYxnyuMy1l193OUhluM/t6vj5Tz8WvNb96W3SnOld 2qeo10xD2Xg4zhGUEhg== X-Authority-Analysis: v=2.4 cv=WJ7qzXsR c=1 sm=1 tr=0 ts=6abc2f19 cx=c_pps a=wEP8DlPgTf/vqF+yE6f9lg==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=OKkk4dbWoaB1VCfbt-4A:9 a=bBxd6f-gb0O0v-kibOvt:22 X-Proofpoint-GUID: Zckhs-iJdvpM5Bpk10570zYa3RfEOsGA 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-09-29_04,2026-09-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 clxscore=1015 malwarescore=0 bulkscore=0 adultscore=0 spamscore=0 phishscore=0 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609290086 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 | 129 ++++++++++++++++++++- 2 files changed, 130 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 fa640e88c88b..a3afa3bb9348 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 @@ -40,26 +42,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); @@ -76,6 +136,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 @@ -131,6 +193,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; @@ -228,8 +294,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; @@ -258,7 +370,22 @@ static int eud_probe(struct platform_device *pdev) return -ENODEV; chip->mode_mgr =3D res->start; =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->port_idx =3D readl(chip->base + EUD_REG_PORT_SEL) & EUD_PORT_SEL_MA= SK; + if (!chip->paths[chip->port_idx]) { + dev_info(chip->dev, "secondary path not available, falling back to prima= ry\n"); + chip->port_idx =3D 0; + writel(chip->port_idx, chip->base + EUD_REG_PORT_SEL); + } =20 chip->irq =3D platform_get_irq(pdev, 0); if (chip->irq < 0) --=20 2.34.1 From nobody Fri Oct 2 09:17:30 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 D1F144EB846 for ; Tue, 29 Sep 2026 21:35:22 +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=1790717724; cv=none; b=efm7Oim/btmjy7SxF65hd52lqbXwI9UD3+ZbFER+gcymlLLKIqu8liWqHW85lGSuInZ3jXpJKb4CD6s+mpcm2Tr7lgkSQsSipXJrqnm8C1q4MlvRMNe45l9wFpOJ5HWXBWqCys7oEHJAgSYlkzIqpkmq2tNJOvUXA0TDrZdwwGk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790717724; c=relaxed/simple; bh=0MKUhSbsp5faC5piKaIRV4wM0B9K/Hpf0LePl5dcI14=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=UK+vgF8uhctuyKeQOF06yYt7uFrKWWvA7aFAj6paYcHowKHDjzUm7si7qHp6T6QHia36Y3do4OV0lssSaLLR8OCwdZBso5H3ar9GuT72NvBtsNRV4LlZ8tM9Z9yWfHKW8PJhQM6TlVPeibusSs7xWphaVGfIs9OeY1UVN374Uik= 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=CeG+QuxD; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=CLgrTRb2; 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="CeG+QuxD"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="CLgrTRb2" 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 68TL8lqH941993 for ; Tue, 29 Sep 2026 21:35:22 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=j/Lj3EzaynG KsIUEfNURXhZuM92QDUe3E615mrhbvag=; b=CeG+QuxDM1jFQKWzkYFarMrPbxZ ocjzJ+HlmcyINHuvV3Q+/mYyWr9qePCNdXlUqEaqS2wfEAZJ8uTNdMjWU2czmNhA aSesM30Ax84NdyjgZTC9gdbfRkqfik2hY9QPqoTQ8FTj+LYon477Rk5inkCFltQb xfYAVe3GKfIJoKbWAq9jqkaOdDp/+26QcVNngcx16UmgVuqJJSTiPNctxYzs3vVJ QJbDTuSUBGxkkBwzFvqhz2VoWz/VpcHgZdCMiFrD/gxy4gVDjLEcuk9fjD7DkFQI 1gyUh+70quN/jBZY/Cgef1M24tjHthjb3m40ek3MFv+qwdXf7LYTe2wfhDA== Received: from mail-dy1-f199.google.com (mail-dy1-f199.google.com [74.125.82.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4h0ftuhku8-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 29 Sep 2026 21:35:22 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-349ffa249bdso3899826eec.0 for ; Tue, 29 Sep 2026 14:35:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1790717721; x=1791322521; 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=j/Lj3EzaynGKsIUEfNURXhZuM92QDUe3E615mrhbvag=; b=CLgrTRb2qAzpLB9bt/QieqEmglp2kDOfkQWWaDkd2odssZOVC5Vm5o2tAy79qxCgpY gKe9Xd6MtVHlw5USj4nQpQ9t8aMbfAvmlJoEJv0xejj9ZfEVuZublyaFPk96gpJt4aEt Yw0OQalSZWtJeg0DL4/J9dmY33ePK85gl7bpA0UbVhQrCgyd6j0A2vOiw39vL6B5m9VA S/seqaTGJ2t+ik0jv00zNwgOs38NNVmVkou+A7t5A905YASfBVPhWVWVasUuRPa1mrib U6y4yteLtd/6ugZSrOoEVaI2rdXceR3gevS9Z0wdce7VYbbWjp3gOc4Kq8VE6ttfGX+C ocAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790717721; x=1791322521; 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=j/Lj3EzaynGKsIUEfNURXhZuM92QDUe3E615mrhbvag=; b=jXDnCV1+0fYstvZKY5SmgMSkZRY8Wu6IszEX4pnTbiUyk9hy9traHOTTmqhfXrfLnQ 3T0hQrWOlC4bAgz+XUMuDGBzvEn4jEy9E2hRKTbl6s0GPVFziuTg+1vlxl7jObQ4V5BM HWmUW1SUancH2UevfXvRL9xjRo3nip1Y4kUy3/0webtyv5c9htpgkRjL2PnEpLavNb5R PeQh/p2+HO41IpsVQOAULamaC+CkLNQqQz65YgZCortRLddv7GFGQZfk9MKurQuDWvGz +R9oqL2wYNbUs7dcbC6QftvEF50xwHk6djBCffaUHGktH9m/hc/zv7wg+MNlKcmA9DRS hfzw== X-Forwarded-Encrypted: i=1; AKwUvBx0B3B+nYew3hqInOEm8uYXI8KG8GfaPycX9y/NJIFgMaGY+2nNnYhWRxvFL1e+MsBkdWCjv52Y1XnnOqQ=@vger.kernel.org X-Gm-Message-State: AFq9FYLKt/YmW3ZIyimQ10VsTwpsJUpLLDycDP6czTYubYRoOuu1cNsC J90vploUq1xM9xkaRsdQeWmwRp4SbmeQvnzm2NyFIL/omsKoLmSdwexS0EkN37XvSPJ4AZ7HZKU SLHQ4DkOnDjZH4idMqw2M3zqU8NXuNjduxCuQN5G5K7sEcSsISTrwkf/5aVuc/6Kkwrw= X-Gm-Gg: AYBFou2MPvbTnM1wdjL5ALLFuSC96FNaD5UJmo2PQ46OO8SUzNVz3waNoO96eyWvbcg fB/5lDmhu060kPwbAGSE6o89jLIazx5FaeGBb9WuPCif2oqJ7xkdiqRyD0L99pKehQllHGRf8Tk 7V7eGhKspCJxT9HbAg+iAWE36tymHEtRC3QmLwIdyZ+jg2jqOu8mFIqG5ALaF7H2yTrrW7b5pdB CxRIq8BO+b1RpPvE09N/jiIWf+EYzAc5GIiTPKlHzjHbosnnFXs2OSmOBZcmUmlU68mHYrgjgZv ri3InvlfctUsFFzwTxcrx7bDu2PKLk0hWwq6V1jmQnZc3QLCWGzVGqArIT3TXsoIYTn7D4oq46W +Pr/X11Ij5ry2BndFkWQbiLt56p2GkO8c41NwBvCyzG8P/NLJm2w/ X-Received: by 2002:a05:7301:4245:b0:343:bcfc:fd1 with SMTP id 5a478bee46e88-34c67da0d8emr585641eec.39.1790717721287; Tue, 29 Sep 2026 14:35:21 -0700 (PDT) X-Received: by 2002:a05:7301:4245:b0:343:bcfc:fd1 with SMTP id 5a478bee46e88-34c67da0d8emr585618eec.39.1790717720729; Tue, 29 Sep 2026 14:35:20 -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-34c391e25e1sm1512570eec.30.2026.09.29.14.35.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 14:35:19 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , 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 v9 4/8] usb: misc: qcom_eud: add per-path role switch support Date: Tue, 29 Sep 2026 14:35:09 -0700 Message-Id: <20260929213513.2401005-5-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260929213513.2401005-1-elson.serrao@oss.qualcomm.com> References: <20260929213513.2401005-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: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfXwxspRhya4hau SgYLGZo7wQOb44+Pjbslq2xS1W3BY/zfe0wcSn5ucTP5sM5zarj1j3W6ilYyDRlQE4puPncWOou q/9b1tGBPf8Uziy/OBlGHV3z0DB8Vr4Y/UzQu5b9jF1VhXcajJFPQHRLa2bhhCJEjCN9l1qZX+/ Ifp5vONO3dcYYT4JM2fZLZ+JJ9ZJEMy4+nE7qhYZUrDQvtq/F5RDZExM3IGP0/9x9/BRTVIUORV 2N/tneC+tUYh+MmkQb+LC5VOqgzQq5nSNqX0pFx+oV1Bxuq6TvijK4sjVG2hMq/fbfEnV5iLJxA ZuzXvXNfmUofwqWGiiaRrP5L+m8HDusQNC5LiUm8Vr67w76xrlQbSbd1gzfbpS/ifJpZi0orZdK U44piSnh3nl5QZ0Q5ERCTL7f5JSjeSQhIv4IzAYDLNRBlOxW3BUOJy8wyyHqHMexII81Syd/qZv U9koWU+jwrCgSGAYMvA== X-Authority-Analysis: v=2.4 cv=AoB7T+9P c=1 sm=1 tr=0 ts=6abc2f1a cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=KEXfGuhMotGc95kIUyEA:9 a=scEy_gLbYbu1JhEsrz4S:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfX/PfzoBWUs+vE DrHtiIda5ZdIw6hLINJwHntVXAN6I9YPqThMmra161OilnH4w5vcF7F0TKYEGgFEn1dij7vHdTG c9S72t+ocZlUYisCjHPfeQe7YqRm2TM= X-Proofpoint-GUID: wNH13AQ5Eshzxq54Aqhq0IgK2Zp6ZoI6 X-Proofpoint-ORIG-GUID: wNH13AQ5Eshzxq54Aqhq0IgK2Zp6ZoI6 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-09-29_04,2026-09-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 impostorscore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 bulkscore=0 spamscore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609290086 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 | 107 +++++++++++++++++++++++++++++------- 1 file changed, 88 insertions(+), 19 deletions(-) diff --git a/drivers/usb/misc/qcom_eud.c b/drivers/usb/misc/qcom_eud.c index a3afa3bb9348..48e474bdf818 100644 --- a/drivers/usb/misc/qcom_eud.c +++ b/drivers/usb/misc/qcom_eud.c @@ -45,12 +45,16 @@ 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; + struct device_node *np; + 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; @@ -124,7 +128,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) @@ -271,12 +275,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 @@ -287,17 +294,41 @@ 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; + + /* curr_role tracks the role from EUD's point of view */ + path->curr_role =3D role; + + /* 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; + } =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); + of_node_put(path->np); } =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 @@ -328,14 +359,61 @@ 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); + + path->np =3D of_node_get(np); + role_sw_desc.fwnode =3D of_fwnode_handle(path->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); + of_node_put(path->np); + 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 @@ -352,15 +430,6 @@ static int eud_probe(struct platform_device *pdev) =20 chip->dev =3D &pdev->dev; =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 Fri Oct 2 09:17:30 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 0AD4C4F4D17 for ; Tue, 29 Sep 2026 21:35:24 +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=1790717727; cv=none; b=pBjiVA+mKjX9fxGimyqdXAwzQrl4LybfZ9CqO7/t8qQH7kcsJKPa4zDvubheH/kyoMygFCpw/1sXr0q4q5BojBzgBBUhjBOsRP1bvF0z8inORVt7duUHpNtXuVaNOx9p68ZS0y1j0xPTWHQIDCuufJEbGGnwJBbMBVxHSIFro7Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790717727; c=relaxed/simple; bh=CPcxz2/VOvWAWtViNoiWgwxMugTpbWTs7rbDXCSIDRM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=P0DSv8vrA7oEpfbtmKF/woqV1BsblqSsQQjgG/lNcI/tE1Dv8PPL+W53hX3YTJwu3U00amfGhcESETYXFu14xKC+dWO3kYrIA0l3vBblFoDFbpVmNMUHf5mlaQ7PgVrZBP4mBIyCEeInvsUzECgNmAez+yZ+1etPh+0Mvn75kXs= 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=EbbI+5pU; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=DyA7T/pH; 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="EbbI+5pU"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DyA7T/pH" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68THgda13842806 for ; Tue, 29 Sep 2026 21:35:23 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=5t8ikYnzF7L NMYhBBKJ9lgwvuCIn7OqU//hH7kyyOfg=; b=EbbI+5pUuEYeEWFzQkLfdOqBb9r 57jd+IWs2QjkTmw89kSwc+aGvBUmg63mI3/nUsicr7xUzrn30xBOhegxH5CaPcRJ keirJkLIsYhl5B9OEOMVTKBSPnp0LtKWbGwyKaL5XY4ybUE5JjFkZjRaXE9zagrX TP55GFzrKmNxfrg232QezIFFBHybpYij3zv4pz5eLwqNAhMGQLErXH+WD4QOS6mU +0gQC0JLBH4ae6cNYjhjyXL6LJ1lcy6nr+J1Ug6BA3JGazLcDqD2D+eUJhoP875A 2LRSgkblbFgPW4xA5vTwc0+1awhx3NOC0xa8XFTGdGyUZcMABBDLgLglL5w== Received: from mail-dy1-f197.google.com (mail-dy1-f197.google.com [74.125.82.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4h0b0vb1y4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 29 Sep 2026 21:35:23 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-30c0d568830so9274199eec.1 for ; Tue, 29 Sep 2026 14:35:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1790717722; x=1791322522; 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=5t8ikYnzF7LNMYhBBKJ9lgwvuCIn7OqU//hH7kyyOfg=; b=DyA7T/pHueczU4xlfV2Vw9tU7JcdgaiCn069od89nebJEtC9V2uGUEhdpCnJLWnEup d0DkP3XgNEKFPLjAqC4I+S+ad4rl92R8xJqFCk8ehqTnP5TC687OVM0wtwjACS/r5gZj 0OqkqzL4aS4XXM6D9YFb4qe8jQokEJAd+trENttL6jeAkW+WjmUNG3WS0XpsjedV/F0t QP5wRH5EXXnhVCnmA9ZQTkAOSU08JdKcyzWEZsLtSplGwvwW6KNpgjVm5i6+OUhMGUnn /jdncHECl783OWZEsbG05pp9tkXaHV+5/i0Cjyumakq4e1inf+D5mYNr9OGF0mBK0t4f LFlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790717722; x=1791322522; 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=5t8ikYnzF7LNMYhBBKJ9lgwvuCIn7OqU//hH7kyyOfg=; b=ZQTTr5BJt2OzLXE2TXmwAt4fJU1ZuUh8Q2y4u1axyaO5VlwkCNBCGVCRGvAja2RSZ0 uhcL1Cs+lZokEQ/BqqlMilfe7+ibZbEPB/aYP4/krCDANxsb6qKGLw1gSlb7YQpjVoQr n3gpDnUdSOEK1/Yc9aBB9tYt5ksBcWgrnK0mVsQ3P9hwKoRCzEw5GQBAofCMW7uIG7wT i8QX01/iLThUjWXfa8Lcl/N7F2Bhk03TsS0f3VdZSugi5KawUJq2VE6aQQMi5FMo/AP5 81sbkLRyCuGJqIX4F8QxFpyX1P7RSZOIkIMjJz/Pv+colvH4+NQYJwtOhpDfMMO/5POy bnlw== X-Forwarded-Encrypted: i=1; AKwUvBxQGYxfKUd18bEiRdXH7vaipuEQD1ecNwZYMRxUTomkCufsl/iU0IQggCEUEpR2B8udlCn46R3Le5eLtBw=@vger.kernel.org X-Gm-Message-State: AFuF++mtTjTGTVvKN+8S8lDPD1ruDyRMu8Wjpbqjqms115szKRm1qQSl 5SHCSpYQdggM8QkOTkL+UqkpHr1feHblAuH+lrdcL/9U2Rde5yB8TPiSaSj6u0WLAWzd2I3NFmi Dop7utnYDe40j8f/dzubwWap8Feuur04HxqFgHC6ImYpSmEyZKjqJzkoz/Wj9rOj6YPs= X-Gm-Gg: AYBFou1bL6zB+Qptdj7nd0zLRUcSlc6437bsnllbvfTe73CQ0qLnoErMUiKJ0uRQt4E YeKBqvmxg2DRvTEBa1/7+fbxbt3Wz+tdXUnsVYRSxw/DPNjU8Kpzo1MVUEo49zldSRS1J4ZjLwk HRBZwW7HvXxEANkFMM/f7aZnaa+KU2p/nxG2QJFcUkFhs8k/PYLCQ5jsYPa+5MEkNPKDj90l9KP g5AvxisG+hEubNjIfzQtT8B/oqYf8diSTevFHT+SHKdUjmRts/+tlI2ZkQm8XwZ0AbaZM4lqpMB 7Dj16+32ppKJmwco68VjEu3r5fPD4NRGtMkkLCKD/vlvsmXcc/VmfWtA9JgJYzQhcEbiF8L89Qm C/sl2hwi3VFEp8ETkFxWmty+NfA9SGcRaWmMmwkNqCWMUIn6iZbk6 X-Received: by 2002:a05:7022:3a8a:b0:144:c128:4c4d with SMTP id a92af1059eb24-14ca00a17e5mr576255c88.38.1790717722460; Tue, 29 Sep 2026 14:35:22 -0700 (PDT) X-Received: by 2002:a05:7022:3a8a:b0:144:c128:4c4d with SMTP id a92af1059eb24-14ca00a17e5mr576206c88.38.1790717721869; Tue, 29 Sep 2026 14:35:21 -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-34c391e25e1sm1512570eec.30.2026.09.29.14.35.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 14:35:21 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , 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 v9 5/8] usb: misc: qcom_eud: improve enable_store API Date: Tue, 29 Sep 2026 14:35:10 -0700 Message-Id: <20260929213513.2401005-6-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260929213513.2401005-1-elson.serrao@oss.qualcomm.com> References: <20260929213513.2401005-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: Nz1W_tXLkO4SGR_AYhHC33NGhao7dCSD X-Proofpoint-GUID: Nz1W_tXLkO4SGR_AYhHC33NGhao7dCSD X-Authority-Analysis: v=2.4 cv=Z+55j3RA c=1 sm=1 tr=0 ts=6abc2f1b cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=iEam2xx7WbKG8qDqzoQA:9 a=PxkB5W3o20Ba91AHUih5:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfX/faLfKrUCinU VLqF20VrL25etiiYWF0X4OSExobOTbQ/V0xRLc80HQgPMLN4CcMKwnjQbmxfqLjXjrJtspk6Ad1 99d2oIGOj+O17+fMgm4IYPlLvdoXThY1DgqayIjQi1imSiwvRPHPybyXv/nQiwHLwHIe2EnRIjB ONyDSbCTMNXkRIFVhDIpGBw36tBaSTxgE6kPneDr8HYOJ1fCH9EoxJfdhjc9XAaYu+B6urS+ohH l16lFyXFRJQqfZ8yhqNRiAALJuMJkB6JAjdlWAbxsE6C8xAGGRHzQx3pnagnKqLDibtWFdberXG PJXyJieq6FycWDP5eFvWRWFHri8rYZWdkuAcJSodpyAOXCIM6yDiBsv9JCQFlmxvcyo9epC9YOP QuL6v+/jyJLkcFaHviiVfydCqBJ0ctrvTJvuVhCQMXK+tzIaxlsAjAPsNFORCxnWCEt1Rg2eqFj An74js5CqcI50/69gJQ== X-Proofpoint-Spam-Info: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfXyp6H7eDOZAoT PgzMa6BL/Ayoa59eRkOtBsDlfhoqjnCDl7XsmLKVAbQP06G/rLivLwG37RpYO2lfAwqa5oR7/LI DrQoz6a1fKLBTMhywnb1vfKehNjQaF0= 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-09-29_04,2026-09-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 impostorscore=0 phishscore=0 bulkscore=0 malwarescore=0 suspectscore=0 clxscore=1015 lowpriorityscore=0 priorityscore=1501 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609290086 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 48e474bdf818..e227d05cfecd 100644 --- a/drivers/usb/misc/qcom_eud.c +++ b/drivers/usb/misc/qcom_eud.c @@ -164,18 +164,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 Fri Oct 2 09:17:30 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 04B3F4EF13C for ; Tue, 29 Sep 2026 21:35:25 +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=1790717729; cv=none; b=cEd+QnSjnprQkFud1qn2xFdSXhl7ZLkD+qHoEzTmzDjfBGYlewgc7HdO3nzPixOZ99ibFpAorrlAmAQpS+QrxiUV9BCQVl4zFTp9fixNgu7mS+YhUNm3SlpTEXFsIxNIOg423uXDnkLi6r4P7YtkMgzY0PUT/MyldPIFHrS86Rg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790717729; c=relaxed/simple; bh=N4mHNfsnlyveA0/4qNZh7sd+pIptRFkHByxL8A5CUFI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=rlD/MrXOut6xKc7oMvHwoAKlTNBsvW0+x0TdAEtHeHE+FIb2LGTLA2wZ7TAPAyKRaw7U1PK31pgpzcUABibpDSavuCmN60lnHpGrZ15LH1FNASEF62WJVM7OGYOI1pyOmHPiNKStmuK8Z6VTV8kbVB2FGOXoeXXwxGVTuJR35G8= 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=E5qihwiz; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=bH+fH+vG; 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="E5qihwiz"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="bH+fH+vG" 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 68THfeJh3300964 for ; Tue, 29 Sep 2026 21:35:25 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=Y5woa8COobc bxZAHY254heLz5elKvaTjIHSo9KyCdzM=; b=E5qihwizlF09QVi1hoGCSitpd2J IGCDxP0EN+XkkWIkW/xb2PV8S1a1P1XmAP7GqEbza3tN/KzpuxP71qW+BH0Uf467 nQJ5/Ui6mc3eiNCYPzTvUDa5+w/3T6FQhgd7FCwBkpYqHKAKH+T6+vFafTrkGGKn VNz7lcG437XwOPvl5Eg39wqC7TtvLsRd9yR89oZTA4SoIkqymUId8m6T/Ag9MZh3 XJACjiWk0qemyCT6ji+PphJRo1Sr5AXZ9imInQjonOmeDEs83fKVqeBc7G1eM3Wo HTDAVSQ/HDNJtQ0dmQlmB8yOKh15Kj/kM2cRfspz0yEdCW9m+JjynvnuwIA== Received: from mail-dy1-f199.google.com (mail-dy1-f199.google.com [74.125.82.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4h0dsx28rt-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 29 Sep 2026 21:35:25 +0000 (GMT) Received: by mail-dy1-f199.google.com with SMTP id 5a478bee46e88-30f1b904861so6390339eec.0 for ; Tue, 29 Sep 2026 14:35:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1790717724; x=1791322524; 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=Y5woa8COobcbxZAHY254heLz5elKvaTjIHSo9KyCdzM=; b=bH+fH+vGZtwWJ8MJ7xGBbPrmDJ/cMBwLrgF0Ou8IRr0rwPjkVcztxeTQijnF7iUplQ +13n9P5kHRpDTx6TCfzeplmxcepqpc0jtbCFK5lMX3g+qR6OuiNbqHhwZinSJ/BowLY6 E/X+ZaEFEVyVn/oNDqSA9XvHWBzWjRMvXdcejEOLxDWJZ6GnymznyhJXI4Qk1IwIYEPT 7BmqzbSKP0gJlP2M+i/y9xAAl0J82LjrafiM6imWDWY4xM37Akdjdg2Nl2kGezenuxtB u+W5HLbQoWzEnL7/Sbu5volo3smXhcKqYuLqUcVPCyAysUosMhNwtbkKpBnxAUjK2fbp SFTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790717724; x=1791322524; 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=Y5woa8COobcbxZAHY254heLz5elKvaTjIHSo9KyCdzM=; b=aKvcsshfIVSI8d5eiLNw8gCgs9dOFBnakOBsrApWJcTBjq9mjepueXmz51zrnkmniQ vXze5j5urifgczdGenWSqYkU4xXirXCqhs7IHP+NAukVdth4jQPOoaS0mhIA+23zxpT3 aNlNUa2DQUd3MNBAX74+SwcaZKoMn4u8bNzxBakOz+XWuG5geD41QaLIqoIW89+tsrwu 0Otse7sVXPF01LprW47fnVo1KAqxju6zVWRY5c2qqMG/i6dQsCUzFfUk/pI7bTQvN8WD +URdl+a+hXUSh3iL6W5ejkHFxtJ21oTq7DEUK1gzFcM4g+5WsxJIk5eOhNoQn3cfQBd1 o6MQ== X-Forwarded-Encrypted: i=1; AKwUvBzv8qu3zy+CKCyd3U6qwaqPfl/VowlLv6IyxrQDJFxPTTKbVNGxEa9919qz5dZ6PG41CB+Et4zsSDD3Oo8=@vger.kernel.org X-Gm-Message-State: AFq9FYJegU0ZeY/ovVNB7Syhp2QxCkCx3Y5atrryvjUGSvvgJGJngJIk 3XhFUnq4mJUf7w5FRLGbddTISwzhyF6BAYn7kzRbI9aOliQDCWFnKYhvir5f07g5P1Vo5Z2nihl D34Ox6wCOnnzL+/OkkFjhbAyHh97ifuLLLAptKOV4Ag7J8JLjzsWV4zhzn2+yjipXPZw= X-Gm-Gg: AYBFou1eVcUWrYoHRrYvQxAV8rarSOFcZPVIWW/SwEytTN/6GqTHUf9SfA47q1ej3L0 +fkuaHuKmtea3QdL8+NDZyA26LzRRHtIzOsWbesPl9rHhjvuzKjqFPDYpnvu0UtX+lPyMBXy0Aj CXcMr4c7klhVVYw28iXdRppb8BJtkbctc4+ILMVhbwbxTqlq567JevLXI/VnrYY5amKNvuTzvce EmQNY/Im5cAOcevHMsNXT5i/wH5kwdoOG4i0TMprfSEAvUG//KDJhTCyT97/63xZKUuY751u/50 C7UIVcDNVWyKiG1j0iVMRE3rIhp4ujBvFoH061Il9cSksyLqtU9NGcz9ehDdZNLzoXLNOOdgYyh w6JES/vYZBZ+axLJump1zPx6vv4UgIAq5Wwwwaz5fFXBo0GANUhzQ X-Received: by 2002:a05:7300:b08a:b0:328:3944:ee53 with SMTP id 5a478bee46e88-34c63321e69mr739467eec.2.1790717724058; Tue, 29 Sep 2026 14:35:24 -0700 (PDT) X-Received: by 2002:a05:7300:b08a:b0:328:3944:ee53 with SMTP id 5a478bee46e88-34c63321e69mr739409eec.2.1790717723065; Tue, 29 Sep 2026 14:35:23 -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-34c391e25e1sm1512570eec.30.2026.09.29.14.35.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 14:35:22 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , 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 v9 6/8] usb: misc: qcom_eud: add role-based EUD control Date: Tue, 29 Sep 2026 14:35:11 -0700 Message-Id: <20260929213513.2401005-7-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260929213513.2401005-1-elson.serrao@oss.qualcomm.com> References: <20260929213513.2401005-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: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfX7zekP3xhtYqL TFtOD0pNGd4UB8b4r4mcVQViWWilYX8vs1uPZ3XfZ+kMWyPKghQcyib8fIn/NSFTscbBpNJsMGa 2jIL73t4VZC1GKGevNEn7msUgQLp+d09rBEjp8czotEoBvWg1D+P2705KfOAZKSSJ5rUC74QqlO mm4NdAaUes0RVgKBSJsZ/1qUhAlDBEPcpm91k/qijuC43b4fZ39GICmdulY1ynOgB7xP1LtvSyl arcfH0STludHnvlZB4h+hF0sAolVZ7n1QJOo9STqobrb2hJoyWUjZiOJ+gbtcohQ2uqvFLuRwpr oZhkYbfFx+rtHyO7TMwxpoohXfhKce9EBEi+HT2iidby8LOZ17RSN1ofS+f+lU25lHd4zvhb6uR dVRLFYj+nU3oJdTNXSy/HNWTpiZnPjOpUNLZ+Gu27UbHW1/c4NouQ3Py+YGmXQSU/G1GhChJ774 iZJN0AjNftDL7pQ8NwA== X-Proofpoint-ORIG-GUID: d3SBjoHPQGffhs22fHcDybAf93WUWsAB X-Proofpoint-Spam-Info: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfXwjv5vmyUXfH3 RSC5K6uNkgvz+7XS8VdZEdoTgsehmCCB6GLcAzFFkEQV9Z47WQfmKnFVqaKgjY5Uhis+fTE4MFq R49Hi+Y+g10N3lEwhLsjsfe/dUYWSy4= X-Proofpoint-GUID: d3SBjoHPQGffhs22fHcDybAf93WUWsAB X-Authority-Analysis: v=2.4 cv=DqvDa2/+ c=1 sm=1 tr=0 ts=6abc2f1d cx=c_pps a=cFYjgdjTJScbgFmBucgdfQ==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=YKK-c5bBAu3nLoGgrlsA:9 a=scEy_gLbYbu1JhEsrz4S: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-09-29_04,2026-09-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 spamscore=0 phishscore=0 adultscore=0 malwarescore=0 suspectscore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609290086 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. Additionally, synchronize EUD state management across different paths to avoid races and maintain consistent hardware state. Reviewed-by: Peter Chen Reviewed-by: Konrad Dybcio Signed-off-by: Elson Serrao --- drivers/usb/misc/qcom_eud.c | 70 ++++++++++++++++++++++++++++++++----- 1 file changed, 62 insertions(+), 8 deletions(-) diff --git a/drivers/usb/misc/qcom_eud.c b/drivers/usb/misc/qcom_eud.c index e227d05cfecd..5a21a2dd0b0c 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 @@ -57,6 +58,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; @@ -158,17 +161,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"); @@ -206,6 +225,8 @@ static ssize_t port_store(struct device *dev, struct de= vice_attribute *attr, if (port < 0) return port; =20 + guard(mutex)(&chip->state_lock); + /* Check if the corresponding path is available */ if (!chip->paths[port]) return -EOPNOTSUPP; @@ -287,14 +308,18 @@ static irqreturn_t handle_eud_irq_thread(int irq, voi= d *data) struct eud_path *path; int ret; =20 + guard(mutex)(&chip->state_lock); + path =3D chip->paths[chip->port_idx]; =20 - 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); - if (ret) - dev_err(chip->dev, "failed to set role switch\n"); + if (chip->enabled && path->curr_role =3D=3D USB_ROLE_DEVICE) { + 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); + if (ret) + dev_err(chip->dev, "failed to set role switch\n"); + } =20 /* set and clear vbus_int_clr[0] to clear interrupt */ writel(BIT(0), chip->base + EUD_REG_VBUS_INT_CLR); @@ -306,7 +331,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 /* curr_role tracks the role from EUD's point of view */ path->curr_role =3D role; @@ -439,6 +487,8 @@ static int eud_probe(struct platform_device *pdev) =20 chip->dev =3D &pdev->dev; =20 + mutex_init(&chip->state_lock); + chip->base =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(chip->base)) return PTR_ERR(chip->base); @@ -485,8 +535,12 @@ static void eud_remove(struct platform_device *pdev) { struct eud_chip *chip =3D platform_get_drvdata(pdev); =20 - if (chip->enabled) + mutex_lock(&chip->state_lock); + if (chip->enabled) { disable_eud(chip); + chip->enabled =3D false; + } + mutex_unlock(&chip->state_lock); =20 device_init_wakeup(&pdev->dev, false); disable_irq_wake(chip->irq); --=20 2.34.1 From nobody Fri Oct 2 09:17:30 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 B8D9A50129D for ; Tue, 29 Sep 2026 21:35:28 +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=1790717733; cv=none; b=n5yIVnoR0qSn/QT47YgwseGMiV/wUlSqOmVSRrWOnXfhiYXnIGUUX7v77ZavvZKFBT0HNVkefWnNgKAz6i5PeT0YbbyUCkvgOYWSTPHYxQbRmO1HOidPp9bRTPp0RuDn0y4a38pI+fsEm2ayKJH2CqQiENIRMyuV3GFcZDWpT8s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790717733; c=relaxed/simple; bh=DfUyGXAigUOuE5hAQY8vlBtickimUxiN0dtZr1aGGUg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=AAbWje9xVrIser0nTU/2dYdg5IeWYQjuW2mCmNMW8VZt8lREEiXLm/cC6E58+gcHOKCeGYugD2knsX+EVkmtta/Jz/fhO9xOSFStMCfe0dk/idUtb0JasJM8SnYv8Ac7TQyfeDmHSITC8ofMtmHric+jjGAA/RpQ88CFw8K5Gsw= 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=l1J9L1ZA; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ivebPjT9; 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="l1J9L1ZA"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ivebPjT9" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68THf5i1858221 for ; Tue, 29 Sep 2026 21:35:27 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=rNWQbn5BoFz a8fHCsTIRq2Yt6o/OubhO/LVi7rDZ/Jc=; b=l1J9L1ZAExmknpE9xfQcdyPpLvc pf2BO9KDSOTP99Ujb4g91HCHQg1O1qNtPLZLgzsQbcVjBTmtrg3MjyKqb5/ZUk9N +MJI972VCVy5i1C2QxPOspYBq8EFaODpxYiwyqio0tEc9E3+GXZdWrEyma6xmVPf vhKvISlP5eAWcqb7zNTJXk6cLwxv4kW6+S4wh8RjKrNYyM5SWEKTY9f2DCjxkmON THxTOTE/y5I0+FGy7mqKMU0HwKmj2O6VSjZaYTgrkPdBcEo779a+VIHCvZzg+RAo pEPmHxcgwA2xlcXZzJceylKYfSyQgS0LI3l2J7I1u6Yy0+uK/BTF6wlrkvA== Received: from mail-dy1-f197.google.com (mail-dy1-f197.google.com [74.125.82.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4h08e0kr89-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 29 Sep 2026 21:35:27 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-30bcb065bfdso1616443eec.0 for ; Tue, 29 Sep 2026 14:35:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1790717726; x=1791322526; 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=rNWQbn5BoFza8fHCsTIRq2Yt6o/OubhO/LVi7rDZ/Jc=; b=ivebPjT93AyqBUQBFE8CWqU1PSJACUXOOT5K+P8DENp5kvtKVWdqj/j7WcaYIyS55G RxGFJ/4jAkSUbHWIen1PPcP3X9jNJr3der3+pQyGdlEXOk8ZikqAff/y5dZkyRHNw2HA Rb4lbdRuRKSSBCFVFSycM6xhewFnWALsr1+91lk/1wkC+U1qFpFYNzqabPm4k5yYUasd A0bbxgQm5gkfINMjr29KhDcFEHxbLpntnxu0qIq1gMh3GUmASs82Ah2bKbvf3b1gyBjs RL5xcDmbcEvpAO/zsjWjB9fogx4UcA80PPdmF0Go8cJUFXPRDauQp4aPKGBpK4WOfROC wz4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790717726; x=1791322526; 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=rNWQbn5BoFza8fHCsTIRq2Yt6o/OubhO/LVi7rDZ/Jc=; b=dEtUCqoWLflpXXBG7OZUG9fA3nzG38QPfNeIKFkTroahj6d1Jq0Rm8SMwVj9atRKK1 x3Z2EPUTcddFWSfFyYWovFqMsXVpXGLvW8tctNnJitDT9erbf39jvhE0FSimaEfrPpBU piRwSZ5X2i7cVvljgzbD8WMW9wgw3FnydhWa2QItNRuKT6A7DYiFqyO+Rxr6tSuamjtl KtRS7it+5lH/vOcxZrBbNGW6ZBKVbHJ9jihOBHNtzmAcOAWohL6JWDXksyo+dycjBoM3 viRqnAfh4L/evaAXNlOsH5zJ4s2up6+XBkWlhIQIRIcnrZqh8omjuv+a0+8WR17dOiI6 Jb8Q== X-Forwarded-Encrypted: i=1; AKwUvBwMWsFPd5Jkh/rX5VtCymdNCl351DHNhbGaKbGfLHwEw85NdskHS/iRSYMOiEKckEjGY/a87hNjW7uViwA=@vger.kernel.org X-Gm-Message-State: AFq9FYLDtLGQNmD766s8oVjAiVQ5Sw02+yWezTH8No8GGhvA10XBSRTZ 6R25HqeEkpXM71wRrIi0wBzqR/+DWxmeMj71VdQNbGEux6fwxia1WandQhcvcjI1NtVFLjG/PHi 48c9+4dGSS/CDEIFjjQniBNUcu/hbGJkBqMYH3PDOV2NbG+lOjfYQpGS9sVV0PO2+6O0= X-Gm-Gg: AYBFou3RfF4JGwnD95C83IEM+sij1maeNAPDEifqXukoXXSYgxLUJ8QpQCIkFRgeJsF Kei76Usv6kM7tTqXPiB7+wg/3oueTEdWnixoZXvw37sT4a1l8KFPN5wY87u78EF1phteaKCKODA 4TwmxUEJ8KiIQntc6g7h3FNIfeIxHXO3/OtqNpMI1AGvjPRP6i5FLKc8IRnrdfC9iU4obaJg+WR UT1YH9pRBK3mQU+lJnQUnCK2Z5hdnl3PxLmYX2aqSBAOvDJWyiRb/MKXk/PeQHTOgD/bkQETmDc pIHxd+RnJ5L6Vn8imJdRjzL5sRU8y+QE8B9yJMCvYFkCQ7gsv7wGEq7BY8eMwFOgboY5lb4AeGi 7pGekZysMeTlAP1tdkLW+MIBpKyGwJQVSe25gfxE+5gNqI8x6kgnP X-Received: by 2002:a05:7300:e9c7:10b0:342:78aa:51f7 with SMTP id 5a478bee46e88-34c675c97bbmr708987eec.38.1790717724994; Tue, 29 Sep 2026 14:35:24 -0700 (PDT) X-Received: by 2002:a05:7300:e9c7:10b0:342:78aa:51f7 with SMTP id 5a478bee46e88-34c675c97bbmr708947eec.38.1790717724278; Tue, 29 Sep 2026 14:35:24 -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-34c391e25e1sm1512570eec.30.2026.09.29.14.35.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 14:35:23 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , 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 v9 7/8] usb: misc: qcom_eud: fix virtual attach/detach event handling Date: Tue, 29 Sep 2026 14:35:12 -0700 Message-Id: <20260929213513.2401005-8-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260929213513.2401005-1-elson.serrao@oss.qualcomm.com> References: <20260929213513.2401005-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-Info: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfXx9L0F6EKypdi d+Le5uCjBiBX6hX40Pw5ExjbRAihxDn8tC9E/hEvvnnprLWb4IeigHJWMiiipOJUw37NknvuBBH WLz2MX0PrigQ+BGFCgr7Kxd5yNCgflA= X-Proofpoint-ORIG-GUID: BwWAUSHXAFHpgSOUN5YTNvBaHMH63h6n X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfX8pvwPT71YjJT ZMQzjzAkxGBaEbG50uVyX4AG/cfwWh9JBKwr12g37jaVUwYOzBusHpyrL/ah9nyygd4X5udQfnW /k7H07V0+pm+VMD33pzzTQZvKTp3Hqz+hUgYWz2k8y/c1LCwEIMeH6eV3rowA79p7iXhpK+xsgT m3A6J1GWclV9FPSSa79SxoMiWHvGkXfWoIcK2h/X7lLn81Kd0wO1xEwmCz7GC9Vm3bM21rwaAHO YSPeBdA5lm/OJOLaClxYSMX91oXGtFE5+GdNMI+WtvEhZgC7+Jp5fYZ70vVhemTFHqIzn2l7alY PCZ3E50vuihjRVssJ2P9ol0Gupr8fOFUcBad90RutkWAbN4JEXZhLi808ytKExDrdidKiVaxrCG m04VF/nnQfdISpj7JB0zIlL3o/z1VRlDTmoYPjW+y2pXhWdRpaD9CK9NKDGob6g04AcNjkv0Txz eN0qrIIHBifRzz3ij3w== X-Authority-Analysis: v=2.4 cv=WJ7qzXsR c=1 sm=1 tr=0 ts=6abc2f1f cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=dOwNoGVJVf10FbPJOZQA:9 a=PxkB5W3o20Ba91AHUih5:22 X-Proofpoint-GUID: BwWAUSHXAFHpgSOUN5YTNvBaHMH63h6n 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-09-29_04,2026-09-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 clxscore=1015 malwarescore=0 bulkscore=0 adultscore=0 spamscore=0 phishscore=0 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609290086 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 5a21a2dd0b0c..f6a5c2ff03bf 100644 --- a/drivers/usb/misc/qcom_eud.c +++ b/drivers/usb/misc/qcom_eud.c @@ -313,10 +313,26 @@ static irqreturn_t handle_eud_irq_thread(int irq, voi= d *data) path =3D chip->paths[chip->port_idx]; =20 if (chip->enabled && path->curr_role =3D=3D USB_ROLE_DEVICE) { + /* + * 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 2.34.1 From nobody Fri Oct 2 09:17:30 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 7A43D50B8CB for ; Tue, 29 Sep 2026 21:35:28 +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=1790717732; cv=none; b=qhND7OvjT3u9r+56TBKmQYnxWVGEyZCuRpYHcvO+n7ypgxmxu3FMHA/WsF/KBZCy/zB+RxL2d2PlqZKBXwfdl6i3jDAtCo/BoqcHsAi0MdgTCebDkBeO1cCSN2bJjzR9Jv0OXRrjcAy2aSIjfyl8RQfFSF3dommaq0X8WfVvj1U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790717732; c=relaxed/simple; bh=1A45iJPgG2eaWICbOuNDPsZQBzJQom/ntLAZN1oPI8Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=puXZTOBqrWhyHxB6Vu+dlpcZy3JwmuAysStJ1jolBVjPYeQZO/d9GcLZ0ArsH6we+3LExQBrH6b4hX+cFUaNmQV1Qiad8L+ZPFibx0/1NDcGNecPi9C1X8K73AsSBHpscd/6AJEcFyppH/ejODexalb9eqsNFnzLLh1zxRQ3bqs= 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=ls58p89K; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=SmcfqrX0; 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="ls58p89K"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="SmcfqrX0" 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 68TKqvC5941992 for ; Tue, 29 Sep 2026 21:35:27 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=fHQUIw80EnV NRqNf+hbqAdsF4+pOqAxWgT6plbf8HG4=; b=ls58p89K2/xvo+sZUz8aYupK9Ti UM1Lmqq+bEo3yUMgs+AVI3LNE4lDBJOkNFkGwEQ0leVDr0kI0S+llmEa1Tr5jBhA T3AKB7iSH+hCEjBjV/5nsfhBs6FOXzJ2UMMEg8WwHaS6QlDDYgZegUPfNV/Vlm43 WNbiPOsZ3xnBgdOtEIAUl+p7kBuq+YuGSQeS1Cqg2vNSnuxn5ykjd+UPWUDvTKCP 8/0+9FH5HFcZskEoEh1XqnZaDFbVdigfvs+/S9nXtVTj/J+MWRPFnPsl7CBwRmRf l7pHz5env+A65Qbj6OQHaFiQastlkyr5PsvIqcnQNd0sVoe55KA1OmV3/Rw== Received: from mail-dy1-f197.google.com (mail-dy1-f197.google.com [74.125.82.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4h0ftuhkur-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 29 Sep 2026 21:35:27 +0000 (GMT) Received: by mail-dy1-f197.google.com with SMTP id 5a478bee46e88-33713e5e6daso6908020eec.0 for ; Tue, 29 Sep 2026 14:35:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1790717727; x=1791322527; 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=fHQUIw80EnVNRqNf+hbqAdsF4+pOqAxWgT6plbf8HG4=; b=SmcfqrX0yN949N4FZdS81qdFtqkoUiHAXLi1FObdTxHqem90xHfxciRywlZKk9tDuG q+/VjNxtbE183s12GV8vG1n3SnkpSJc1rd4YBWTPh3GH5oGmCki3Vm6L89qZ5lienfnI JL8hmuWBxGT6DuWttGUiBzctDe/EGAUli46YE7G8d1KW9frL4YAyHX6PciMkMvt9AZMQ I2bEyoNSa+A5j5xr1W9mdaitdfvWrJo+QG1PUzPQiY0Z1yuxuBywtH3mVv0D1TDJyPc4 0e7bpDC8/v49zB+0qhe4y8sUaUTALpnPGWiREMPPlLWlTo4cSMBTC1lF3bF8mAbHLZor KMXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790717727; x=1791322527; 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=fHQUIw80EnVNRqNf+hbqAdsF4+pOqAxWgT6plbf8HG4=; b=c89HsALMC9q0akGeXPK3ZzxTL1qdtBxYytn1rV9zXA8Plomw3lWEceorrANkqVXT6a kminCbpygDktk7JGSq+Tane8w1SwwXm3nsuCBqu9GwjnkCH0igwQ5Ah19tOyxPTh4L1H /NFJ6WvVmFwcyRFhe702T1rdSc2XxGwYI/ny2hD8lQQSlrkpJstzt0BtldQHBSqSHE7y xkiywyblMZxvtuJ0/adKorL5O22SNpmcw7K8D74pxv+xxueaKMGNzrLxLU/1iXq4AjiK k0S7AHuxfLmOS3XTVExmc+ymwtOIMKW8onRJz90dzupgVEpzH9mOy5nQiiVslckC1YL+ v+QA== X-Forwarded-Encrypted: i=1; AKwUvBwqbvtcclINIG2ilahsXBmtZcq41Yq53otOQMIEkpdjlbwase4cLx/+ZYk/Z1/jLte7cUidt/xyan8h324=@vger.kernel.org X-Gm-Message-State: AFq9FYJzUqfqtoO+5dOSFHq3y4564ldQkS7o3rPy1EfxvuZKvOGXHM/l jNO2roB8Iu7lkOQhUxQBmpOsLtFFmbqHXUps6zR9onHm4V5FgOjfMpe9Jj9J4rHJAI/PftWWNZy mZ9aI/Hgj95zjNy8qbF2fDRh1ErARyMNqOayy+s/nCv0hgY3WurjpOaizX38A3LoFVDi2ANPrGj Q= X-Gm-Gg: AYBFou3g+C98olcVCp1H4+IImoOddwnPygGAPYgEmLLy9Mfr47q1Hp1F+OwssksvCYK RohRghP8e7jzK3AJlc5jJlU/L1ommfa2ArbQusSoSdzmDBLIxXC2vXWSQKSzlmVH+0Qfbph1Ew/ HHxkPEzdKtE+Js4+L4aV3UnAXfLe1yLdxut78bAyTQL5vaJb12yNNX5qyzU7UddHSkNXXPNsbr+ i506bqz7zv8sgqw6zeUScktikmlbKH6nts2LEGX+AGzfKSbKN2Do7+yD7vAjc6MU//VnY6877hy 4ZLSifV8hs+2Hk4P7lOhG3mGTK2uw+Mjit96rhEgJRPoxjLp6NSjraEF25cANOTINl74kZSB9ic JUByloih7m7lCDIfKo0tHMdl3K0CVrvCeqT+RTqK2Ef7WPKBTuWtC X-Received: by 2002:a05:7301:4294:b0:34b:c0ff:7662 with SMTP id 5a478bee46e88-34c606a7d7amr802335eec.3.1790717726269; Tue, 29 Sep 2026 14:35:26 -0700 (PDT) X-Received: by 2002:a05:7301:4294:b0:34b:c0ff:7662 with SMTP id 5a478bee46e88-34c606a7d7amr802290eec.3.1790717725549; Tue, 29 Sep 2026 14:35:25 -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-34c391e25e1sm1512570eec.30.2026.09.29.14.35.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Sep 2026 14:35:24 -0700 (PDT) From: Elson Serrao To: Bjorn Andersson , Conor Dooley , 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 v9 8/8] arm64: dts: qcom: kodiak: Desribe EUD UTMI routing and connector mapping Date: Tue, 29 Sep 2026 14:35:13 -0700 Message-Id: <20260929213513.2401005-9-elson.serrao@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260929213513.2401005-1-elson.serrao@oss.qualcomm.com> References: <20260929213513.2401005-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: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfXxZZhSHZ9pM5v Zrg7PSPxF16oO6McXR+EUL1JCDvubLfXI/djOH0zlSvvG3jzN6yeODxPSd3X+aahTUmmaA4AdfD H/6BkpE3rIR4zfMn9Yfc8HgcXWTkuV6JKRoACoJn+WA2y63zLOj0c/ORd73+HnThLdj/HzOyAT1 cGtxtH+9FTwo+fCWptXyvMV2BGGaZRvmdMf9I8/3KFU2QGmG6tqtSgPsIxCIMGZdGMYG3Lwx+RU DtGCmWitNenccwUZ7RYmsO0DA3GETYsngyXD2mQ5DwUNccqBHsx1CC0S2Gh2LavpgZGkKp16bGA 8GuY9jWXXYNXGma6ic6cmOQzSqQi3n4pY2QeNDHuJq5ra6q5nhRhudaO8ZNWcO2Om8lJtybIHWm 16iAzVVsNdNO97ctKgg+T2+Pd3nvX44T8AapWF26yet7WWtCef6cjYkbs0nx51s6MzV5vTNWqMY THGl/uwXXKf++K6O0vA== X-Authority-Analysis: v=2.4 cv=AoB7T+9P c=1 sm=1 tr=0 ts=6abc2f1f cx=c_pps a=Uww141gWH0fZj/3QKPojxA==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=IlniPGdpC8QbyWtZVrEA:9 a=PxkB5W3o20Ba91AHUih5:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTI5MDA4NiBTYWx0ZWRfXyvQl+TngTZJu QweFUf7OpziwQOe3KJEpmxJ8cuJ1AhejlsVroZsN50e3gK/O6z1Cl5PcC+5rvDtMFWdEYmfAYlZ iOuSHJqfTDEghypdMn+1DhQ9RuXHzEI= X-Proofpoint-GUID: NfmMeh65hfzNVai3oYslelYKK8ieYLs5 X-Proofpoint-ORIG-GUID: NfmMeh65hfzNVai3oYslelYKK8ieYLs5 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-09-29_04,2026-09-21_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 impostorscore=0 clxscore=1015 phishscore=0 lowpriorityscore=0 bulkscore=0 spamscore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609290086 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 | 10 ++--- .../dts/qcom/qcs6490-thundercomm-rubikpi3.dts | 10 ++--- .../qcom/sm7325-motorola-dubai-common.dtsi | 10 ++--- .../boot/dts/qcom/sm7325-motorola-dubai.dts | 10 ++--- .../boot/dts/qcom/sm7325-nothing-spacewar.dts | 10 ++--- .../boot/dts/qcom/sm7325-xiaomi-lisa.dts | 10 ++--- .../boot/dts/qcom/sm7325-xiaomi-taoyao.dts | 10 ++--- 12 files changed, 78 insertions(+), 69 deletions(-) diff --git a/arch/arm64/boot/dts/qcom/kodiak.dtsi b/arch/arm64/boot/dts/qco= m/kodiak.dtsi index 8c7523602d27..c9c527a6b9b1 100644 --- a/arch/arm64/boot/dts/qcom/kodiak.dtsi +++ b/arch/arm64/boot/dts/qcom/kodiak.dtsi @@ -4434,12 +4434,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 { @@ -4766,16 +4760,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 { + }; }; }; }; @@ -5002,6 +5010,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 2758f1f57ac0..f28b2b4b5d57 100644 --- a/arch/arm64/boot/dts/qcom/qcm6490-fairphone-fp5.dts +++ b/arch/arm64/boot/dts/qcom/qcm6490-fairphone-fp5.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 @@ -776,6 +776,10 @@ eeprom@51 { }; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &gcc { protected-clocks =3D , , @@ -1585,10 +1589,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>; diff --git a/arch/arm64/boot/dts/qcom/qcm6490-particle-tachyon.dts b/arch/a= rm64/boot/dts/qcom/qcm6490-particle-tachyon.dts index 509fc4941a02..d802c04e734e 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 @@ -493,6 +493,10 @@ vreg_bob_3p296: bob { }; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &i2c1 { clock-frequency =3D <100000>; =20 @@ -829,10 +833,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>; diff --git a/arch/arm64/boot/dts/qcom/qcm6490-shift-otter.dts b/arch/arm64/= boot/dts/qcom/qcm6490-shift-otter.dts index cf74b3664cf5..e4be197b482a 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 @@ -476,6 +476,10 @@ vreg_bob: bob { }; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &gcc { protected-clocks =3D , , @@ -951,10 +955,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>; diff --git a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2.dts b/arch/arm64/boot= /dts/qcom/qcs6490-rb3gen2.dts index ed9ba2e5550e..d80198af4889 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 @@ -671,6 +671,10 @@ vreg_bob_3p296: bob { }; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &gcc { protected-clocks =3D , , @@ -1409,10 +1413,6 @@ &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>; }; 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 cfcb22bfb298..af73d0a7c62a 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 @@ -533,6 +533,10 @@ vreg_bob_3p296: bob { }; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &gcc { protected-clocks =3D , , @@ -1044,10 +1048,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>; diff --git a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts b/ar= ch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts index 4ab7771fce1b..4740fd276436 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 @@ -710,6 +710,10 @@ vreg_bob_3p296: bob { }; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &gcc { protected-clocks =3D , , @@ -1114,10 +1118,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>; 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..8d52fde4124f 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 @@ -667,6 +667,10 @@ vreg_bob: bob { }; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &gcc { protected-clocks =3D , , @@ -1429,10 +1433,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>; 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..7e00842da36b 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 @@ -669,6 +669,10 @@ vreg_bob: bob { }; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &gcc { protected-clocks =3D , , @@ -1428,10 +1432,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>; diff --git a/arch/arm64/boot/dts/qcom/sm7325-nothing-spacewar.dts b/arch/ar= m64/boot/dts/qcom/sm7325-nothing-spacewar.dts index 8d8fef940264..ce346320331f 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 @@ -884,6 +884,10 @@ camw_gt24p128e: eeprom@50 { }; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &gcc { protected-clocks =3D , , @@ -1438,10 +1442,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>; diff --git a/arch/arm64/boot/dts/qcom/sm7325-xiaomi-lisa.dts b/arch/arm64/b= oot/dts/qcom/sm7325-xiaomi-lisa.dts index 28a19c96c8c9..ac628425331f 100644 --- a/arch/arm64/boot/dts/qcom/sm7325-xiaomi-lisa.dts +++ b/arch/arm64/boot/dts/qcom/sm7325-xiaomi-lisa.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 @@ -538,6 +538,10 @@ vreg_bob: bob { }; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &gcc { protected-clocks =3D , , @@ -1085,10 +1089,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>; diff --git a/arch/arm64/boot/dts/qcom/sm7325-xiaomi-taoyao.dts b/arch/arm64= /boot/dts/qcom/sm7325-xiaomi-taoyao.dts index 87f267aaeec0..a8b65c308e94 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 @@ -584,6 +584,10 @@ &dispcc { status =3D "disabled"; }; =20 +&eud_con { + remote-endpoint =3D <&pmic_glink_hs_in>; +}; + &gcc { protected-clocks =3D , , @@ -882,10 +886,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>; vdda18-supply =3D <&vreg_l1c_1p8>; --=20 2.34.1