From nobody Sat Jun 13 02:58:37 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 E8DBC3BE147 for ; Mon, 11 May 2026 09:44:30 +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=1778492673; cv=none; b=aE+iwXJVy//f7j6aXh154kyJAXZFwh+Z51BNf05oAE/w77GY/q/DznXd7qSSO1ISJyfw6d4UwMDQvoItrh9b5Mh8KeTtJpTQIR4nR7C4WdIQ91QH3i0JP1ZFHGQJtqisWrNLsP3nKcPNGuzsorzMLCnVT2wn+ZjyhkX5vMLAdf8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778492673; c=relaxed/simple; bh=y8ugfifKWZhQsI6vXzwmg6Z/bZA61CWGb6gUBdjc4es=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=EpPZUivdHEaRPhz66VYphs8y3O9YG+QMG8WODJEt6nM/ehK+eze5wHyvHIgSb8g4v/Dsb9NNYwY7A88qmpGND5ZRHOAbamKwhsIgsf0ANBtgv3QqSBhQmXQ4zGO7d+pvTgL/Qe/VofKfKOhHhjH1FAwg1EODtaVYCah4DJKjdEo= 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=XzKgWgu6; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=RUFMwHwU; 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="XzKgWgu6"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="RUFMwHwU" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64B8HxYL1850375 for ; Mon, 11 May 2026 09:44:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:message-id:mime-version :subject:to; s=qcppdkim1; bh=6kwotBqV6fsxjKPSXJIEDRjr0eq6H68sZL8 sg/0hM0Y=; b=XzKgWgu6iV+/7my+zUSdXkiRyMm1/yAiqWq+jceQiLVeVMr7x0Z sgGIRvocuPpeIpPNuW1Ox8y2zL09ezDl6DiJVIqXIWdfA2yC/X77upph1uHvLW1F GHJNXE9Skka4NX+oayxUmo8aSrRntofCk4ymEuLcrONDFT1ZtCezaUo1rytQ05rf KVOpcZHJy1M574xFhtujW8BNVIiKxvRz87AAKatODN9m82QrtKO6O1ApeFXxptXb 81omALpbNvwa4JC1eoJENu20P3dQPyiPEWiBc+gSeHxRIyJSgh96XLR6/33ByC5a T4XjVhboCLrHwHx7VFOGQ8cPS8sNkDYr+NA== Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e3bfvgb2e-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 11 May 2026 09:44:30 +0000 (GMT) Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-82fa1c94b37so4953249b3a.0 for ; Mon, 11 May 2026 02:44:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778492669; x=1779097469; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=6kwotBqV6fsxjKPSXJIEDRjr0eq6H68sZL8sg/0hM0Y=; b=RUFMwHwUokNRPD+011FTmCDHnlZ+kR9Mm7pLdpYV51E1uMINy/XF2pT3NOAPV56z5M eFQ3DffKPYeTizUV3+Cu8tXlwXHd8Rcvwl4avsz6dBBrBmq2o7DvOxRlQLM9HpymYwEJ Dix8hYy3sb9ZOvkFfgHqC7raiyIVPfzY1hps55+sdHvCyUnpyAjASj5cu3haI1Rj1QRY ozMgihh4GjFHhckx/CY/eojZ4+BGBj3TqAcSrq8gU2bOzMHwPhhthA/QgaQR2nLTn8Mk Ml5ZqKSIhILnCJoHATmLtaUKYlHk0coxJkjbGVCoM+3NPAtAtBxBvztXDUnUEsiWCaOG 1xKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778492669; x=1779097469; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6kwotBqV6fsxjKPSXJIEDRjr0eq6H68sZL8sg/0hM0Y=; b=Q6STwoHraPPt2hllhXtOETvkVZW0NgWvTXX+YxP8rGd9ICBmmLZwW9jjawbA+NR8Jk mJq9invJ77c9/iwebG1KkcPjFZWML9ROYcAxmQkaoWmGdEHIMPRpONfv8885tY7z4hKd ylCed1L1Dbq35k6woVP5Ox8MUUWO5hheG0yPK0rmP3lquR44zHWmvv/NXrquORLyzJ6J S//2rb8hD+PK9mqFKyNqS8tM3d5iw2Bk6aRqcOANbq5pKaFjizD2+xbDxTweLwEE1gaD 2EbxaBvme/ojT9JYnU8y8mJTh9+urSfrXNq9RuG/hB94faIfuslKx5iN25G/JP2VhEje QALQ== X-Forwarded-Encrypted: i=1; AFNElJ9HPoW3WXpfPQCOdaKwrKYNxIJwYQnwtNOfVDh3hWWR1qSfCiJdkgR8NtULkgbIIUNDQdrNb9TLbQF6J5Y=@vger.kernel.org X-Gm-Message-State: AOJu0YwThepiST8RCAuTBRQzlUwaspz6xUhVrt2OeTf3rlcc7cavSTgf 2j6SLj+pU1g75AKA8uXdA9cqm3jdTsm1MukfoxXUV0/KaNnkXNgXdwczkDp/ABCWWkvJIUw56PG CIm69pXJzxIVdFXuFiySQCYLglW4I+grAwtl/bQU4QVo74uaijK5oYDuuu5XCe7MWwTw= X-Gm-Gg: Acq92OEko3QM3mi2oSuLMR9mZf3ruoav8zGfaneG5ExITp1Nyt4H3eT2g+JZrjkdVDH FbE1UgzlH5iwS3zUrNHZT8JCdH6yjkVLCLqEaKAyPaPVn/qu1LlSgrJZwXAb8p2fnCbFdV6QeOR 6Mm4+s5BCDbNyqltVU6yTWMXfyEbTzqUoQHmLamRqdNSJeoUvOnV2BrEvoF26PN1xHphNAVquNu XziD9L6uWKXbX1QfKJTFzfBK4b/qTJ1zO8EXRiSni/VW1yrZtpMiXyPglmFZ74H7IuJ4hmhWO69 91Rn0W3XcUyvzVt60J04OCmJ3pouekRCfGPUlN/PQlrD3uyc/prjTgNY5BtsmSTd228HsB8x/uK nEm9nYJ/dS8XLJ25Dnp+WMCpcS6xCSxTnMgtIRncLv6YD4Ud7UD8HZ4xoJhyra0nQ6KToQT/GOU EVCWqw2bJg6kJwbpY= X-Received: by 2002:a05:6a00:2e96:b0:81f:4e1c:1d3b with SMTP id d2e1a72fcca58-83bb8b74857mr14461533b3a.23.1778492669310; Mon, 11 May 2026 02:44:29 -0700 (PDT) X-Received: by 2002:a05:6a00:2e96:b0:81f:4e1c:1d3b with SMTP id d2e1a72fcca58-83bb8b74857mr14461513b3a.23.1778492668651; Mon, 11 May 2026 02:44:28 -0700 (PDT) Received: from hu-kriskura-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-83965946543sm25070887b3a.16.2026.05.11.02.44.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 May 2026 02:44:28 -0700 (PDT) From: Krishna Kurapati To: Thinh Nguyen , Greg Kroah-Hartman Cc: linux-arm-msm@vger.kernel.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Krishna Kurapati Subject: [PATCH v3] usb: dwc3: qcom: Modify interrupt handling for eUSB2 Phy targets Date: Mon, 11 May 2026 15:14:22 +0530 Message-Id: <20260511094422.3561509-1-krishna.kurapati@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 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=Fa4HAp+6 c=1 sm=1 tr=0 ts=6a01a4fe cx=c_pps a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=5E9VfmP3G3YUVyn1PBUA:9 a=OpyuDcXvxspvyRM73sMx:22 X-Proofpoint-GUID: Fl8uF4Eq9op5fJQu2DgCffeqEKIoOiQI X-Proofpoint-ORIG-GUID: Fl8uF4Eq9op5fJQu2DgCffeqEKIoOiQI X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTExMDEwNCBTYWx0ZWRfX+ciraabeuFL5 iu5sVSxj5uxHEskAqLK8/MAs3yDWd2OUfiFRCwRjsnE4kkAjPxCDM4etqIAqN636MM1jkgaYEpi h1/QJ//xUBqpLLdLyBc9eReZX6aNcdNmTNNxaNSugWB92ujaGZH35bmYlBzQ3TT+fZTCpdL8Lv7 ATd78PcWsGCCv1tM/XhS62A2QcDn9dfrHzSrrTk7JmF1gjYqxy99Yd3yJAbQobmqYdvaUt19iyb ZPD+ZC7vF5LJlfI+O7WocxI9vzEgU1TXSKUV3I9YUKlI/ZZxgzbZPSJ9uDi+AB6Pqg9jBumQoKT irenhSk3AgLLDEYYrhb2LoP7vOJo0xG60MtVCUplDnZrV5jfkl0rfkSIgq6tjmjxZGiUF9cPPSa op7hx4Y+VP5MPrblPpNkEGLvYufQbC9tBmtELhvaLskenrBgqiSSZl0aIxIbkUH1YyEykdqWyTu 1zsCjUS1lPU1sNBYCug== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-11_03,2026-05-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 suspectscore=0 phishscore=0 clxscore=1015 malwarescore=0 spamscore=0 priorityscore=1501 bulkscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2605110104 Content-Type: text/plain; charset="utf-8" eUSB2 targets handle wakeup interrupts differently depending on device speed when operating in host mode. According to the eUSB2 specification, remote wakeup signaling in host mode is detected via different data-line assertions based on the connected device speed. When a low-speed device is connected, the host repeater drives eD+ to logic '1' upon detecting a K-state on the USB lines during remote wakeup (eUSB2 specification, Section 5.5.14). When a full-speed or high-speed device is connected, the host repeater drives eD- to logic '1' upon detecting a K-state on the USB line during remote wakeup (eUSB2 specification, Sections 5.5.15 and 5.5.18). Since the eUSB2 PHY's "DP" and "DM" interrupt lines monitor the eD+ and eD- line states, configure the wakeup interrupts accordingly Signed-off-by: Krishna Kurapati --- Changes in v3: - Removed multiple glymur-dwc3-mp pdata entries - Replaced use of ternary operators with if-else Link to v2: https://lore.kernel.org/all/20260505194242.1947891-1-krishna.kurapati@oss.q= ualcomm.com/ Changes in v2: - Updated commit message - added supported eUSB2 targets Link to v1: https://lore.kernel.org/all/20260502095616.666938-1-krishna.kurapati@oss.qu= alcomm.com/ This patch was tested on Glymur. drivers/usb/dwc3/dwc3-qcom.c | 94 +++++++++++++++++++++++++++++++----- 1 file changed, 83 insertions(+), 11 deletions(-) diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c index f43f73ac36ff..3b025d4beeae 100644 --- a/drivers/usb/dwc3/dwc3-qcom.c +++ b/drivers/usb/dwc3/dwc3-qcom.c @@ -60,6 +60,10 @@ static const u32 pwr_evnt_irq_stat_reg[DWC3_QCOM_MAX_POR= TS] =3D { 0x238, }; =20 +struct dwc3_qcom_platform_data { + bool uses_eusb2_phy; +}; + struct dwc3_qcom_port { int qusb2_phy_irq; int dp_hs_phy_irq; @@ -85,6 +89,7 @@ struct dwc3_qcom { struct icc_path *icc_path_apps; =20 enum usb_role current_role; + bool uses_eusb2_phy; }; =20 #define to_dwc3_qcom(d) container_of((d), struct dwc3_qcom, dwc) @@ -272,15 +277,23 @@ static void dwc3_qcom_disable_wakeup_irq(int irq) disable_irq_nosync(irq); } =20 -static void dwc3_qcom_disable_port_interrupts(struct dwc3_qcom_port *port) +static void dwc3_qcom_disable_port_interrupts(struct dwc3_qcom *qcom, int = port_index) { + struct dwc3_qcom_port *port =3D &qcom->ports[port_index]; + dwc3_qcom_disable_wakeup_irq(port->qusb2_phy_irq); =20 if (port->usb2_speed =3D=3D USB_SPEED_LOW) { - dwc3_qcom_disable_wakeup_irq(port->dm_hs_phy_irq); + if (qcom->uses_eusb2_phy) + dwc3_qcom_disable_wakeup_irq(port->dp_hs_phy_irq); + else + dwc3_qcom_disable_wakeup_irq(port->dm_hs_phy_irq); } else if ((port->usb2_speed =3D=3D USB_SPEED_HIGH) || (port->usb2_speed =3D=3D USB_SPEED_FULL)) { - dwc3_qcom_disable_wakeup_irq(port->dp_hs_phy_irq); + if (qcom->uses_eusb2_phy) + dwc3_qcom_disable_wakeup_irq(port->dm_hs_phy_irq); + else + dwc3_qcom_disable_wakeup_irq(port->dp_hs_phy_irq); } else { dwc3_qcom_disable_wakeup_irq(port->dp_hs_phy_irq); dwc3_qcom_disable_wakeup_irq(port->dm_hs_phy_irq); @@ -289,8 +302,10 @@ static void dwc3_qcom_disable_port_interrupts(struct d= wc3_qcom_port *port) dwc3_qcom_disable_wakeup_irq(port->ss_phy_irq); } =20 -static void dwc3_qcom_enable_port_interrupts(struct dwc3_qcom_port *port) +static void dwc3_qcom_enable_port_interrupts(struct dwc3_qcom *qcom, int p= ort_index) { + struct dwc3_qcom_port *port =3D &qcom->ports[port_index]; + dwc3_qcom_enable_wakeup_irq(port->qusb2_phy_irq, 0); =20 /* @@ -303,12 +318,20 @@ static void dwc3_qcom_enable_port_interrupts(struct d= wc3_qcom_port *port) */ =20 if (port->usb2_speed =3D=3D USB_SPEED_LOW) { - dwc3_qcom_enable_wakeup_irq(port->dm_hs_phy_irq, - IRQ_TYPE_EDGE_FALLING); + if (qcom->uses_eusb2_phy) + dwc3_qcom_enable_wakeup_irq(port->dp_hs_phy_irq, + IRQ_TYPE_EDGE_RISING); + else + dwc3_qcom_enable_wakeup_irq(port->dm_hs_phy_irq, + IRQ_TYPE_EDGE_FALLING); } else if ((port->usb2_speed =3D=3D USB_SPEED_HIGH) || (port->usb2_speed =3D=3D USB_SPEED_FULL)) { - dwc3_qcom_enable_wakeup_irq(port->dp_hs_phy_irq, - IRQ_TYPE_EDGE_FALLING); + if (qcom->uses_eusb2_phy) + dwc3_qcom_enable_wakeup_irq(port->dm_hs_phy_irq, + IRQ_TYPE_EDGE_RISING); + else + dwc3_qcom_enable_wakeup_irq(port->dp_hs_phy_irq, + IRQ_TYPE_EDGE_FALLING); } else { dwc3_qcom_enable_wakeup_irq(port->dp_hs_phy_irq, IRQ_TYPE_EDGE_RISING); @@ -324,7 +347,7 @@ static void dwc3_qcom_disable_interrupts(struct dwc3_qc= om *qcom) int i; =20 for (i =3D 0; i < qcom->num_ports; i++) - dwc3_qcom_disable_port_interrupts(&qcom->ports[i]); + dwc3_qcom_disable_port_interrupts(qcom, i); } =20 static void dwc3_qcom_enable_interrupts(struct dwc3_qcom *qcom) @@ -332,7 +355,7 @@ static void dwc3_qcom_enable_interrupts(struct dwc3_qco= m *qcom) int i; =20 for (i =3D 0; i < qcom->num_ports; i++) - dwc3_qcom_enable_port_interrupts(&qcom->ports[i]); + dwc3_qcom_enable_port_interrupts(qcom, i); } =20 static int dwc3_qcom_suspend(struct dwc3_qcom *qcom, bool wakeup) @@ -609,6 +632,7 @@ struct dwc3_glue_ops dwc3_qcom_glue_ops =3D { =20 static int dwc3_qcom_probe(struct platform_device *pdev) { + const struct dwc3_qcom_platform_data *pdata; struct dwc3_probe_data probe_data =3D {}; struct device *dev =3D &pdev->dev; struct dwc3_qcom *qcom; @@ -624,6 +648,10 @@ static int dwc3_qcom_probe(struct platform_device *pde= v) =20 qcom->dev =3D &pdev->dev; =20 + pdata =3D device_get_match_data(dev); + if (pdata) + qcom->uses_eusb2_phy =3D pdata->uses_eusb2_phy; + qcom->resets =3D devm_reset_control_array_get_optional_exclusive(dev); if (IS_ERR(qcom->resets)) { return dev_err_probe(&pdev->dev, PTR_ERR(qcom->resets), @@ -838,8 +866,52 @@ static const struct dev_pm_ops dwc3_qcom_dev_pm_ops = =3D { .prepare =3D pm_sleep_ptr(dwc3_qcom_prepare), }; =20 +static const struct dwc3_qcom_platform_data dwc3_qcom_glymur_pdata =3D { + .uses_eusb2_phy =3D true, +}; + static const struct of_device_id dwc3_qcom_of_match[] =3D { - { .compatible =3D "qcom,snps-dwc3" }, + { .compatible =3D "qcom,snps-dwc3", }, + { + .compatible =3D "qcom,eliza-dwc3", + .data =3D &dwc3_qcom_glymur_pdata, + }, + { + .compatible =3D "qcom,glymur-dwc3", + .data =3D &dwc3_qcom_glymur_pdata, + }, + { + .compatible =3D "qcom,glymur-dwc3-mp", + .data =3D &dwc3_qcom_glymur_pdata, + }, + { + .compatible =3D "qcom,kaanapali-dwc3", + .data =3D &dwc3_qcom_glymur_pdata, + }, + { + .compatible =3D "qcom,milos-dwc3", + .data =3D &dwc3_qcom_glymur_pdata, + }, + { + .compatible =3D "qcom,sm8550-dwc3", + .data =3D &dwc3_qcom_glymur_pdata, + }, + { + .compatible =3D "qcom,sm8650-dwc3", + .data =3D &dwc3_qcom_glymur_pdata, + }, + { + .compatible =3D "qcom,sm8750-dwc3", + .data =3D &dwc3_qcom_glymur_pdata, + }, + { + .compatible =3D "qcom,x1e80100-dwc3", + .data =3D &dwc3_qcom_glymur_pdata, + }, + { + .compatible =3D "qcom,x1e80100-dwc3-mp", + .data =3D &dwc3_qcom_glymur_pdata, + }, { } }; MODULE_DEVICE_TABLE(of, dwc3_qcom_of_match); --=20 2.34.1