From nobody Mon Sep 28 17:48:38 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 1EF693AAF72 for ; Wed, 19 Aug 2026 13:26: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=1787145991; cv=none; b=X1E/3qfChORW5/payH9QW3CG5Avqrn3tKg/toUrzihWDJZX5NBkmwV8JNeLBoU84Iwssh0t/sdvpnyfzgmiL8t07CWE+ZkeSMIOAn8E/mgt/dWIoQ/1iirdvk5pwCdNN6lnCC8E7fSLdFVSJWFBdA8OmuO+9auVXCESRFQYQ7PQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787145991; c=relaxed/simple; bh=SxCA5XEAWKCcLkJi+5jHbvA5AUH+9sF5/jS3yVkOn+A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jDtlKqoon6es09NmeL+1lNji+W3h7RdazFc2+7Xecz2gdz7uvK6Lgbtq2eMG2UV6Qywyl+1XvS8wSo5ejNsHKDJyvh+pLQrjJtI+M+maeDIhnzKpVBCMQRPn5srhMcMp6z8i0VK1rN9gZtP2/mLdd0Cfh78a7bfK5la6L/89eSw= 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=anGZIaxG; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Ou4peQ2b; 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="anGZIaxG"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Ou4peQ2b" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67JD0UbI4114720 for ; Wed, 19 Aug 2026 13:26:26 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= uZm8p07OPUwjWzI9g+/BN5XpGEETr3ffQKeDhE670RY=; b=anGZIaxGsLZQRJhu tC8Tf1KIAXcfjXEgxXtHkEnY4f3lRaKQjfFctshUG7cuNcl/+ZxmgTwQCfBUA7Uy GYy/ug4hdsAVNdkcO09ckYeY8AOvxL8djFVmbv8kWey2FvLp1814TzGxxpEC8ad/ k+jR1lBZ/W7mmfIKnzejZLp15yWU/UaqDlLl4CFGVvfwslMi4jBP/nlTZspabY4C k3zDvtC2vqnUSEVdp5LZUiEoO3Cowes/hw4UePbNf2NOOPmXIFgv9+o1tcVHrZ/3 i9h+vbd1SF1P+4rJZe+5in5JdjhYnl1WpQvsm33dbnxQpqI/lHLJMsY3Pae5CEPb pIA6Og== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4yfmbcrt-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 19 Aug 2026 13:26:26 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2cce14a21faso15609845ad.0 for ; Wed, 19 Aug 2026 06:26:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787145985; x=1787750785; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=uZm8p07OPUwjWzI9g+/BN5XpGEETr3ffQKeDhE670RY=; b=Ou4peQ2bCeAFAHi3LIQ20uzK5i1se15YOhTf+LRISY7O7WQ58GXxRf0oK3SZjIOLEw YyUbp4gDaBysmlmsI7MWroD8uvIXO9T9KST3anN3WEN4nsVMxAZIRDas6on/NPTVdj8M 61b4gnN8q2LcFPKhLWJyUCijlIY79kFQflhAn6evMYb3M/Y08DEqF4PT94lCNdKDfkR7 6DB4zsXYV3NCEv/+4hSLQom0HMHa1r049udeBnMpFVmvVEkEAQm4AmQ7zv40EBZ3YX/c 0jdCsZ/L0PzGR3BfteaNpR+E5W187YJ707ZMGzkdzPe6y2Ce5YbbS+x2kTY0d/FdrtCI IUzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787145985; x=1787750785; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=uZm8p07OPUwjWzI9g+/BN5XpGEETr3ffQKeDhE670RY=; b=ZkCtPZVcMRo+tIfjgjnqm1Gum5s2j/82yP6zBQEJZruaEaMDss+nXOa98WMvrrorOh t8lkY8setlsQWcalyP4W5mFyAxBrwYBqqh9Z2TlsG2hjBvO9BFLn0+vp+AISzjBlGA9h ROASDJEh/pF3ePmiGoSX3ZiCo8WaJGbxAVUgUfk9jTh9OfzLMgFMF0MZ9zWHEVF7s9zC r1f2d5ZvvBtqLXz/Iu7XqQ4uTTzWBVOSUnL8SUFDRuKSrcznL84RqwXj2PYu68NOAITp vSJcCBto4KD4aiTzfvxYnfazDJt5+NXp/oPZowf3C4Xw7l8hmOhYLGQOsW7h78XzfiDV z8Mw== X-Forwarded-Encrypted: i=1; AHgh+RqbfI+Hv6TvD6IX5IUGPt714aJLAYAhKRiX3TzquFzp9b60u65DwkAwI0nVB1aQvuXpsyMu/SjOvP5zT+w=@vger.kernel.org X-Gm-Message-State: AFuF++n0pfkQpoZalzJ7d/yK1yP1W17bJquIAl3AEVrAWpErVX7Nz/zw kVAPO5bx0r7Uaqu3/aMR6gvmSE/NjCqCa/3zMu9LBgaXpnmD0pw7mVpy7Zqx9JLWHTa7jO+Ml4+ UzeWoZO9QWOa1rfHRYrpiNMImFUsKY9zGHuNr1keK1S2tDx1+Yif9pxl2mNYCUEy2JFk= X-Gm-Gg: AR+sD12CWys9z4KHt5di/iJowGYZHpOMO6KH5sGaLbvM0Gc9SEVYXQAJWE4Qoq1z/7u 3vmMxvrk2MdH0DbuzBn1cpPX0tqcnCI3JjFQDy6vRZ/nhQ57uexGNiqcdhOG7VnTD7TNxAk+5SM iAgLrUj9ya45InAl7iLrH1BG2GMIW7qcaxcgTK+NpkDRa5ROOKLHUx1YEHgF6rBYNXVpcpqS7C5 eXYA5kR78SVFzRnnuym2nS0Ncm2s28uo59LCQO3p1dmMxDpO5e8zC2RHr6NWipkbHa7dxXRmlhQ tEAecDMb1bW7IYjJiLHjC89gWSidsGmxPOkSpUFKfju1Niy1q9wWe3B1OU3dC3J4TE5HeH8xEfZ OYcxJgrDWw3kBKBfrz9EKgJ6W/snW69aRzg0= X-Received: by 2002:a17:903:32cd:b0:2d2:72b6:556b with SMTP id d9443c01a7336-2d5fca022b5mr42665905ad.13.1787145985196; Wed, 19 Aug 2026 06:26:25 -0700 (PDT) X-Received: by 2002:a17:903:32cd:b0:2d2:72b6:556b with SMTP id d9443c01a7336-2d5fca022b5mr42665355ad.13.1787145984708; Wed, 19 Aug 2026 06:26:24 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-327c2a92406sm6126465eec.11.2026.08.19.06.26.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 06:26:24 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Wed, 19 Aug 2026 18:55:52 +0530 Subject: [PATCH v5 1/6] PCI/bwctrl: Set host bridge OPP and optionally disable ASPM around link retraining Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260819-bwscale-v5-1-6dea79786b37@oss.qualcomm.com> References: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> In-Reply-To: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> To: Bjorn Helgaas , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Jingoo Han , Lorenzo Pieralisi , Rob Herring , Jeff Johnson , Bartosz Golaszewski , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, mhi@lists.linux.dev, linux-wireless@vger.kernel.org, ath11k@lists.infradead.org, qiang.yu@oss.qualcomm.com, Krishna Chaitanya Chundru X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1787145973; l=5454; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=SxCA5XEAWKCcLkJi+5jHbvA5AUH+9sF5/jS3yVkOn+A=; b=+05IMJ0Y0LiMP+RJM/+lS+Ieb366h5UNezsjnd0NgWZJXOIggWGrqhPxMjNciQkqd7wJ9Tsh4 r6NglZRdgamDYFX2v5ULcjIPuRYE0iQYRf+qfr13iweVLysNF1dR4Zo X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfX/T/T0HLIbbqT ooTR/qHPkNk3YtH8NBSkiHc2cpsfIjdDa5uVDp9Owu/V3cBD6uf3NJNO+Iz0Eq1zcpOmT0lJtnk 3GDk5fS0sUr9G/0bfUnIZWW3JKOJSTnj6zUNdkN8zLbgNR/R32jnhfuby+QDLJjy5lD4wX9UbXA 9G65CcXI+gj0z5264kQbzZ8d1+ZWanPcoR30ht9ipfE8nSFhhZ3iGsfg+OZiEzPUW9XBd645QDn xiuRzpi3yiefc0tBjuCjT+9OUfNeYCwmdUjvgkMi348ryxevmBbeU6LilcoONQmwoV18/f3Pp2q j9Qa0pUecQ4Lpqemj8q3aUM1LeVhdMfkvyzOYOqOWiFuLTyGU5F29T4WNIIUCnF6O1UCdWGFH8G e8MsHRWee4hvt8Q/Udp5Cu2Rg+FfBjaSUNp+Ew/U6w7yuZMCHdb1nWpPm96+BFwLKmI9qOHAbXc EVvXxJaocFt+wn9B2cA== X-Proofpoint-Spam-Info: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfX05Lt2SWCN8mo EF3UEp2XYVTmkUngB+CsoQ6ljZU2dA781rvk+1jRzwO+/wmLBoWBvJ7rgDhW00CrCZMfYviaM6T av60eTb39bJHJE48HNqByTULAre//h4= X-Proofpoint-GUID: V2YnNv81gqZlwBILtRIFQRXRJqvrBaFc X-Proofpoint-ORIG-GUID: V2YnNv81gqZlwBILtRIFQRXRJqvrBaFc X-Authority-Analysis: v=2.4 cv=J+SaKgnS c=1 sm=1 tr=0 ts=6a85af02 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=m7h7XtmfQhPoxq-7kmMA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-19_03,2026-08-19_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 impostorscore=0 adultscore=0 clxscore=1015 priorityscore=1501 spamscore=0 lowpriorityscore=0 phishscore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608190104 PCIe host bridge controllers may need their operating point raised before retraining to a higher link speed so that hardware resources (e.g., RPMh votes on Qualcomm platforms) are available at the requested data rate. After retraining, the operating point must be updated to reflect the actual negotiated speed. Add pcie_set_opp() to look up an OPP on the host bridge parent device using a key of (per-lane frequency in kHz, LNKCTL2 Target Link Speed level). Keying by generation rather than total bandwidth lets OPP tables remain width-independent. In pcie_set_target_speed(), call pcie_set_opp() before retraining only when upscaling (speed_req > cur_bus_speed), since only raising the operating point requires pre-staging hardware. After retraining, call pcie_set_opp() unconditionally with the actual cur_bus_speed to settle the votes. Both calls are skipped for downstream ports of PCIe switches, as those are outside the host controller's scope. Some controllers also require ASPM to be disabled around link retraining. Add a disable_aspm_for_retrain flag to pci_host_bridge; when set, pcie_set_target_speed() saves the child device's ASPM state, disables all ASPM link states before retraining, and restores them afterward. Signed-off-by: Krishna Chaitanya Chundru --- drivers/pci/pcie/bwctrl.c | 63 +++++++++++++++++++++++++++++++++++++++++++= +++- include/linux/pci.h | 1 + 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/drivers/pci/pcie/bwctrl.c b/drivers/pci/pcie/bwctrl.c index c4c8d260bf96..6fa1522c47db 100644 --- a/drivers/pci/pcie/bwctrl.c +++ b/drivers/pci/pcie/bwctrl.c @@ -28,9 +28,11 @@ #include #include #include +#include #include #include #include +#include =20 #include "../pci.h" #include "portdrv.h" @@ -120,6 +122,38 @@ static int pcie_bwctrl_change_speed(struct pci_dev *po= rt, u16 target_speed, bool return pcie_retrain_link(port, use_lt); } =20 +static int pcie_set_opp(struct pci_dev *pdev, struct pci_host_bridge *host, + enum pci_bus_speed speed) +{ + struct device *dev =3D host->dev.parent; + struct dev_pm_opp_key key =3D {}; + int ret, freq_mbps, width; + unsigned long freq_kbps; + struct dev_pm_opp *opp; + u16 lnksta; + + pcie_capability_read_word(pdev, PCI_EXP_LNKSTA, &lnksta); + width =3D FIELD_GET(PCI_EXP_LNKSTA_NLW, lnksta); + + freq_mbps =3D pcie_dev_speed_mbps(speed); + if (freq_mbps < 0) + return -EINVAL; + + freq_kbps =3D freq_mbps * KILO; + key.freq =3D freq_kbps; + key.level =3D pci_bus_speed2lnkctl2(speed); + key.bw =3D 0; + opp =3D dev_pm_opp_find_key_exact(dev, &key, true); + if (!IS_ERR(opp)) { + ret =3D dev_pm_opp_set_opp(dev, opp); + if (ret) + dev_err(dev, "Failed to set OPP for freq (%lu): %d\n", + freq_kbps * width, ret); + dev_pm_opp_put(opp); + } + return 0; +} + /** * pcie_set_target_speed - Set downstream Link Speed for PCIe Port * @port: PCIe Port @@ -140,9 +174,12 @@ static int pcie_bwctrl_change_speed(struct pci_dev *po= rt, u16 target_speed, bool int pcie_set_target_speed(struct pci_dev *port, enum pci_bus_speed speed_r= eq, bool use_lt) { + struct pci_host_bridge *host =3D pci_find_host_bridge(port->bus); + bool is_rootbus =3D pci_is_root_bus(port->bus); struct pci_bus *bus =3D port->subordinate; + struct pci_dev *child =3D NULL; + int aspm_state =3D 0, ret; u16 target_speed; - int ret; =20 if (WARN_ON_ONCE(!pcie_valid_speed(speed_req))) return -EINVAL; @@ -152,6 +189,24 @@ int pcie_set_target_speed(struct pci_dev *port, enum p= ci_bus_speed speed_req, =20 target_speed =3D pcie_bwctrl_select_speed(port, speed_req); =20 + /* + * The host bridge driver may need to be scaled for targeted speed + * otherwise link might not come up at requested speed. + */ + if (is_rootbus && host && bus) { + /* Get function 0 of downstream device */ + list_for_each_entry(child, &bus->devices, bus_list) + if (PCI_FUNC(child->devfn) =3D=3D 0) + break; + + if (child && host->disable_aspm_for_retrain) { + aspm_state =3D pcie_aspm_enabled(child); + pci_disable_link_state_locked(child, PCIE_LINK_STATE_ALL); + } + if (speed_req > bus->cur_bus_speed) + pcie_set_opp(port, host, speed_req); + } + scoped_guard(rwsem_read, &pcie_bwctrl_setspeed_rwsem) { struct pcie_bwctrl_data *data =3D port->link_bwctrl; =20 @@ -176,6 +231,12 @@ int pcie_set_target_speed(struct pci_dev *port, enum p= ci_bus_speed speed_req, !list_empty(&bus->devices)) ret =3D -EAGAIN; =20 + if (bus && is_rootbus && host) { + if (child && host->disable_aspm_for_retrain) + pci_enable_link_state_locked(child, aspm_state); + pcie_set_opp(port, host, bus->cur_bus_speed); + } + return ret; } =20 diff --git a/include/linux/pci.h b/include/linux/pci.h index 18e814064b51..d1f2d382189d 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -662,6 +662,7 @@ struct pci_host_bridge { unsigned int msi_domain:1; /* Bridge wants MSI domain */ unsigned int broken_l1ss_resume:1; /* Resuming from L1SS during system suspend is broken */ + unsigned int disable_aspm_for_retrain:1; /* Disable ASPM before link reta= in */ =20 /* Resource alignment requirements */ resource_size_t (*align_resource)(struct pci_dev *dev, --=20 2.34.1 From nobody Mon Sep 28 17:48:38 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 AB00E3AAF63 for ; Wed, 19 Aug 2026 13:26:34 +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=1787146000; cv=none; b=bA99WKyT7gJf1PxFB9D+UyCuw3eSRyDfAJdy4jVtJ9Xy6qU4G7sAETIY1iOf5mZoEtsvqGJb3XcCz7QjvfSllQE4b7UOudiPTtZtEYp5bURrnteHWCIyCRUlOrq0T3AL3L6N8v+kisHknz+apxVznvEHYWHb67YYPVhfrNexVN4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787146000; c=relaxed/simple; bh=WyEzptVv7uRVS+fTWzoU6Xos6GT52swB3MLhrEXcDEg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gv1kLVaQkJ8PDo5ZoO3L+EoHS5fi+nXzmUTrI1ti0SAzU2lDGB26X4mngFhedxJ/evRywmLh9lWV39Fr8u8tBDv1G4IMTbpsv95cLRv3RUbgvsVsg2I3rCUdVopfyvTLjOHZxpKNWUaz+R6dAkpN9ArRA/LKa8+K9gqHsuozbGU= 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=o/OiSXex; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=cyL+VYD+; 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="o/OiSXex"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="cyL+VYD+" 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 67JD0Hms267951 for ; Wed, 19 Aug 2026 13:26:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= GA7vzClWeSwWPtSLmTimBFoLovSegooKkc2VbhIOLI4=; b=o/OiSXexN8V1G/qJ gWfaMRTTi5zuo3GeCBei+dNNHGcXWkq0R/MUJHYxoAhrN03eGN+Jp3kh3qF/zcox vL0l4Cz40c+Ii+79dFKJaoH7efydHgAv4BWPgLZ4yuYZjk6S+Nq9Np8M5aVhsKhw cQp5JAeB0SJrrTWTpU9cghboyHUnTgOI/fjXVklnMZ+Y9mnpJZiHL7KV4mxl+z1M lzQLtlsFn/KXYcEhYHCA7bAK4jlXgwUoyTTJcFU7XG+vXrm8NIFTg5Ts7DAujsO7 KY6sgbhELpDqErttvjV8NxGfuAb4sUObP9ePsNE0vZSoONBpko29SadPBXsY8mqo qZ0iLw== Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4yfnbc6w-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 19 Aug 2026 13:26:31 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-cbedbd182f5so712919a12.1 for ; Wed, 19 Aug 2026 06:26:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787145991; x=1787750791; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=GA7vzClWeSwWPtSLmTimBFoLovSegooKkc2VbhIOLI4=; b=cyL+VYD+/9kxQB5/Tnphn6AodwamIyuTX6y5CIkeHSOKvgcQQXPBTtI8H/VuTzwoAY jmTLcV8mkMuiB1AS8Pvg7W5AV5u4BThAFPYeCwTMijVWaBTAWVOIVrWk6xkGGWLVY9UI NAFKX9opJisnz/99gpXOqSeJbnQuhi1W5QqIYXOu6xtW5BJxAxNkhJvor2BiwupmsFlV i3V01kVt0Ib7iNP7tqqeo7nqNw9FmBH3RBZNhnz7fEUr79YBkMYVjkyVVDiHZO4nkkx9 8Duw7F5oUB8ptM5FZEVor/M6a+j1gWgleWwsr+jxJTeoAtttTaIEWEPVybEu/FlTVDwr E89Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787145991; x=1787750791; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=GA7vzClWeSwWPtSLmTimBFoLovSegooKkc2VbhIOLI4=; b=hclwZsfBZHRev97Ovv2ZloAGweZ0qb3L/cAcyEoDcoHtuYAN7Lle30UZvSRWyVtQLG odvIvAQdQVn93zmoQa5jUPC3kwr2um/cKeFGCcdH4FNQH7Z3+AikIwNZc2g7HUR1Vt9n iRSVmpvdQogiM4JMJostK7Uq3odK9OPy3XiMN8GZmfZwvna2kN1WciolN2g/p0bQfAkq tXagLm6jWV4kIzKFgvRoQGwQU1SBSPD6kSMACu3R4EVwWgxZyfYnW/hUkOcvwol+UVq/ +opEgYcDFU+jp60giABLDtewWDywlvIDDEDBBttTcQFXEuffOBSRxguhIgKNWJ4GtVs+ O9Hg== X-Forwarded-Encrypted: i=1; AHgh+RoDiwsKXfLbA8eDGj7syy2KIrmOl74/DPFFumM53vt4iKCuRrTdi+eA9bLKXRHaWXabS9PTAO+HDpCQmu8=@vger.kernel.org X-Gm-Message-State: AFuF++mOzA6bFSOY19V2BN1IZxbEogNcmy43WLMaduZ+RRPT+MyRDoDt pddJmClS4mt8MNzAgsoe62Hcvd2595v58fr8BLLI5n5NZiv9guL/S7b3Kq47NPZqk547tR9dzkU g7zMweEeVtPoUAbQavl8SZANIW1Ua2SRAMKrAoh6UBdUvfAbccNd/H36CcHtg8L2VBtc= X-Gm-Gg: AR+sD11YLwmv0t167eqUqikg5GJSFCy5zBohA4lUIptrGZoXVHdk5uhSWafNvGDjTOx ks1h/pUKm72e4LEXUAOOdCsh77AAhmxBD1+Pmx7Ixd3Yo9+GGcnhwdkxU5F7/PvEcxBbVCpJSb7 lJWaCxiZbMEJC8bRIoGzF5a0sZSt/KD6uFhAUB5YlFdiQwBR8/AOOxMcQrsk5ahK3sseYSFBH3J H8joIP3yL/McaeCBmtdiYEqF76OiaZGMA0/CvZqj5m6OLYgYZRJW01rMcN73uFmeWKhSJPBA46L ynyvCHxGzGmqbOR+LihOiD7I8TROVrOXKxA9+pt+YV1pz3y7FgBXAbKY3Tyi4OHDYNc3TbUBYwx mITXuRkdtqe52W2Ym39jvaGeKK+Czb1lpltw= X-Received: by 2002:a17:90a:ec83:b0:36b:b903:994 with SMTP id 98e67ed59e1d1-3957f86d960mr7218176a91.4.1787145990557; Wed, 19 Aug 2026 06:26:30 -0700 (PDT) X-Received: by 2002:a17:90a:ec83:b0:36b:b903:994 with SMTP id 98e67ed59e1d1-3957f86d960mr7218129a91.4.1787145990140; Wed, 19 Aug 2026 06:26:30 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-327c2a92406sm6126465eec.11.2026.08.19.06.26.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 06:26:29 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Wed, 19 Aug 2026 18:55:53 +0530 Subject: [PATCH v5 2/6] PCI: Export pci_set_target_speed() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260819-bwscale-v5-2-6dea79786b37@oss.qualcomm.com> References: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> In-Reply-To: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> To: Bjorn Helgaas , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Jingoo Han , Lorenzo Pieralisi , Rob Herring , Jeff Johnson , Bartosz Golaszewski , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, mhi@lists.linux.dev, linux-wireless@vger.kernel.org, ath11k@lists.infradead.org, qiang.yu@oss.qualcomm.com, Krishna Chaitanya Chundru X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1787145973; l=734; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=WyEzptVv7uRVS+fTWzoU6Xos6GT52swB3MLhrEXcDEg=; b=Ck/CEbFLWH7VTG9uktRjIhO+x0ADX2v3SpS1gJJH7UzHym4rKnJTUhEfeNLXMl2jzTD885c9j O0ztEcXozknDPDijfAx6Myn/TJhPpQpE+bnqryQw6/AfJURhBkxpzdQ X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Authority-Analysis: v=2.4 cv=QedWeMbv c=1 sm=1 tr=0 ts=6a85af07 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=QyXUC8HyAAAA:8 a=5E3R6_0bZ0f_H1kkCjQA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-ORIG-GUID: E9quQk7JueQSWNIsCT3wGxE4Y0tmjVvw X-Proofpoint-Spam-Info: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfX/XxrVvtaywYh MZak4p8W7+VKMF7V4C+m/HDFyehCq6CNodj7Y/wKbUXDYhpxmMRUAvHB+8Bm2LulaeENKFrvzf6 V7kGv+aWDuXRj6Ao8SxatI4TMQlifLU= X-Proofpoint-GUID: E9quQk7JueQSWNIsCT3wGxE4Y0tmjVvw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfX5qHIwS3fXqAK 0xN91KfLNGjubBwRTimULN/uNODqhkeqGqhptwliCvQbydWeuT9jrHac3u6gxpG6TyUixaAERPS VRUCVHO8QRVOgm6uWf/Uxg4ru+gwjxHZOkEoXq1N4LsNOy75bZRLtMlxvJezVnkjtKEE13viYdQ oA66gMVUTRZGzQmq3gDgCw/27g2kUWnoMBvHhDxAtOY3RO2pwn/y2CeShR2vu8LQuhfk+sMmlD3 Dac7rJ6fF44XxwtYrOcgm3bQ1V7fd4MPYeYxqGqEmyg1XVfBdt+POvViW4MmnQdw+3R6IG04FzI BNnhfYAa2WZhZkTwXn8A/86Yx4UtBa/xnHGpJdWo8z+JNQ6muLaFoI/Y4+kq9n/+dAY4W5HsPjK X4+bybnwe3GcQnhYQv7EY4CRqRxWKO0Pm8yLepSwv+P79U3vf0NMa4GRAxZ+05dw04dk0ryKHor gT1elzH9eveDi3AFCmA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-19_03,2026-08-19_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 impostorscore=0 priorityscore=1501 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608190104 Export pci_set_target_speed() so that other kernel drivers can use it to change the PCIe data rate. Signed-off-by: Krishna Chaitanya Chundru Acked-by: Ilpo J=C3=A4rvinen Acked-by: Manivannan Sadhasivam --- drivers/pci/pcie/bwctrl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/pci/pcie/bwctrl.c b/drivers/pci/pcie/bwctrl.c index 6fa1522c47db..a337f166465e 100644 --- a/drivers/pci/pcie/bwctrl.c +++ b/drivers/pci/pcie/bwctrl.c @@ -239,6 +239,7 @@ int pcie_set_target_speed(struct pci_dev *port, enum pc= i_bus_speed speed_req, =20 return ret; } +EXPORT_SYMBOL_GPL(pcie_set_target_speed); =20 static void pcie_bwnotif_enable(struct pcie_device *srv) { --=20 2.34.1 From nobody Mon Sep 28 17:48:38 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 B63903AA4EF for ; Wed, 19 Aug 2026 13:26:39 +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=1787146002; cv=none; b=Iu2GwCTp/4fP9QgMfi0AEHrFmwAgUaOb7OewcdDrFTzAoibKqM6wZqweiHAMZ5KvsdVIZBhYv2dA3zYJIPzsYNbUKDQfsIc0cDgvpta5XTJrDctpTVBsace9fuIFmaAZjR0fSQV6sG3gQuMxAitEgOYOcdJp8HpICoDmL9VIZQs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787146002; c=relaxed/simple; bh=gzbJaxCxPVY8JnK4ZtjTaXSHrAoIPOQmaGGP+IIpy80=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X15StdJnXzS+hFk4LsDg5PJQlCZfTxhA0B9QFt3FXxmCzcRgzDbfZ2psDqxW6SzBbnrEQwbqg/SVGRpaKo3OoUeRipOaR7sw56Xn8V/9wRBHvT0EAEq0LSk6nqV5QzwgRkv/fwAe4uQ6hrHMwlUe/dWcqyE1b1EeEv/XooDoJZ4= 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=e/wHwrFY; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=F2RHqk4t; 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="e/wHwrFY"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="F2RHqk4t" 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 67JD0CPU901360 for ; Wed, 19 Aug 2026 13:26:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 7CJo47Rs0M9LCBUMPKGSlXpd8LIC7VDX3pXhIIqAfsk=; b=e/wHwrFYq42rNYiU I1hvIeC9ytkAoW6qxsQOgpdSbzt3axbxn9xFlUl+SLna8EukIwer79oGUe/+VIQx MP+zC6DOWjvWBw2UavA/HQokpKD3SF9vYuIlUjSeCm51sMW3rA2W64cam7BSWulb Zl7BgdaHw6OBlKUb6Ok7RzFfD93cUHxpVH0m1YU7N0BYAcmwXfbht2r0F+4SI9jI 2/WMIqqQG6itQ+xW+47XGUJ8OquEjrw/+8EYCckbQRJWSDEiviaVOiYRv8r9+jTp AOFLh2COC5GxMP/L/vWytpDb9kdYFc3oRQHVPumz/u1PqKIjVvbLmzmItZXi2AcH 1Wpsbg== Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4yfpubv6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 19 Aug 2026 13:26:36 +0000 (GMT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-38dc085b0a7so2255072a91.2 for ; Wed, 19 Aug 2026 06:26:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787145996; x=1787750796; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=7CJo47Rs0M9LCBUMPKGSlXpd8LIC7VDX3pXhIIqAfsk=; b=F2RHqk4tH8hpOsiEfQuSw8FOhpfLDKYAcsjDXJYA4IE6mmSAl4bmtB+6O6QwLJWB/5 fm8ir9O36bePI+CBp7+Lve/+HVErDnez2fXuROJkfLjDxcyUFnLfpvwRDE1FoFcqeQTY +NW/XUjKleSNWxrPlJFMf09mxIRQYNizUFLn3UBIXJqEOKrdl08GDMdMzjmHXcGhvhMB xilxs8EHL7TdXheaIqntBeQeg2e4e7FVECLTeM5hlQefgZHpHvT7Cn60OjTccMQx+Oe3 Uvtx0W+m/zGpycmiBt69c/+hZQxaXXqKNQP/wgG9JpsjUBq3ZKKPlMoQVyCsgjhWU4II Tbig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787145996; x=1787750796; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=7CJo47Rs0M9LCBUMPKGSlXpd8LIC7VDX3pXhIIqAfsk=; b=CaS7OgqGfh8e/mdNemRhK0GfQ5VhRQ5V65efZg2cDHUWt6TFZx/qq+m3Bv+1bs6u3l OTVTqTa3cTTwMGv0O1PV+vx/5i95llAT3jCpsDp5a1v2rtmkown9HuUcKgnLpBpkhL1E nZ0O43JMKfTysXxo0TPLMVgSxnzuomPD/iS06nCqaoXk6sE03dKVFtQwaSnTYAHLAmjv qxt03DVpMWaE0strYrrv3+pW56oZ9tndUqMgAq7bZaVwcz2otswIYv4xC8vGFGJo8qn1 dcfldKADlans21oWOl8hDvnf9pccz5g3HVfaTBKxgbZvC9UK+6EErSspaeu6bgaVmFSe gq/Q== X-Forwarded-Encrypted: i=1; AHgh+RpP8nQP1SBYLKZYuTgb/dQo9YBOESLw8eQsxiilPTmQPQ8I5rk/tZ4ykK0dsB0FuJDKgVAe9uZwAed1X20=@vger.kernel.org X-Gm-Message-State: AFuF++nyIfReTBR4zwHYuixAveH6eF26w6bn9rtf68FDMeZgjpVUzxH2 7CrszcamClAopH66FBv8idRp0T0pgUc4e/OBazJoSslDwK3TIP9bHDWYO9OgyKw2MTfyeUn3qIY tLBqYtK5l4AVepxGdX/5Z5CpHIejAfLenk8ah46/jBzwVLjxsFb+IKWnz3QqYwVZMSCA= X-Gm-Gg: AR+sD10sIiJuKFPCDdUScwZU9DCmAPQch691Kgtk/imLT2WGqV5CfVJ0SFn9mmBfgRa qOk7/UpdT7hiNP0sY++HV4cFYQ7Z3WS5J4ipjlxAQPpkWLFwKM5wdm2voMbKdOZFlrVEiz3YFW2 muW2izkW3Esj6fyNuEtwEfCNtYd8JrPBESkNy6hh+lLx8O5+AO50T4+vtFhkS6wOFd5Vke6GOeE XKrEoZm93Lxz+k6mtgOQLS++NU6SCOMQBo2g9Fhi/JTosjPvxubFe5DNG1wTuKIWMP9+jiZ3NPz JZyatYPA0YMU82aOyumE8tZUjQJ+2NiSE7hnqwAYjpJn6U/LiHVqBZ1p1sM+hKbWj//BH/95rGI HyiCrEpSnJTVKv7NDOxnHyx7p1dgT2FR5f7g= X-Received: by 2002:a17:90b:2792:b0:393:288:29e3 with SMTP id 98e67ed59e1d1-39581212156mr9783588a91.10.1787145995944; Wed, 19 Aug 2026 06:26:35 -0700 (PDT) X-Received: by 2002:a17:90b:2792:b0:393:288:29e3 with SMTP id 98e67ed59e1d1-39581212156mr9783480a91.10.1787145995520; Wed, 19 Aug 2026 06:26:35 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-327c2a92406sm6126465eec.11.2026.08.19.06.26.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 06:26:35 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Wed, 19 Aug 2026 18:55:54 +0530 Subject: [PATCH v5 3/6] PCI: Add pci_lnkctl2_bus_speed() to convert lnkctl2speed to pci_bus_speed Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260819-bwscale-v5-3-6dea79786b37@oss.qualcomm.com> References: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> In-Reply-To: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> To: Bjorn Helgaas , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Jingoo Han , Lorenzo Pieralisi , Rob Herring , Jeff Johnson , Bartosz Golaszewski , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, mhi@lists.linux.dev, linux-wireless@vger.kernel.org, ath11k@lists.infradead.org, qiang.yu@oss.qualcomm.com, Krishna Chaitanya Chundru X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1787145973; l=1763; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=gzbJaxCxPVY8JnK4ZtjTaXSHrAoIPOQmaGGP+IIpy80=; b=loA59unnBaRnNZxvG/WUrecr0BJunX0WpPSWWcivrQvZy9B0XTfHfNyaXVEQX9wEluKQnYWPM L8B/TkvKplZDph1FExIucdFvjt33wTNOLQlKQDL/w7YzJYt5HKKSivy X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-GUID: gTkaLkxGLyJQwZWkM1Uwh_xfqooEo7zx X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfXy9SCGVnMkzDI 7rfJbXjF87FteSiJ3QLejuF2RINyOIZGec0urCVCrKIKb4aAzv6zSJF/RW+BnFjrGk0n2qVcKOm mrpiUdoWJ0Pf0HI2bzc6huN2UavWZqQljuxGUe8vNWSBS4T5N0fuAq5cW2N6iknPOoNReTQTQ24 sawmLuxf+QAjCZSNdhU2hNvHUGFFj8UpABHhdWzOC1F8/Q1FHTg61QFnEt2o0EUw5jU4RBe+Yz0 ZiTsyrGmdhQ64TAoe1uieNvPh8TtN7lkYBnqTUrVLV7vRdETMCbtYUcI95Zc+AiLXL/6g4C3s7y 07k+lsOfx5PJhgt0mcwcqBMN84o4GCoY/BlcXOfzPkbi6KvLsIh6vvBw87L/nsMdHeq+jvDVf/P odzvzRNgG6Toee0vMRm05WBIVntQKFP69c91qqi6O0/jJQUV59D1+t6rkg8ffywaoDcY0WLDfk+ 9lqSTmEMeBvk+pbhIyw== X-Authority-Analysis: v=2.4 cv=aMrAb79m c=1 sm=1 tr=0 ts=6a85af0c cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=rcts_Xg4tTJKaDXoMsUA:9 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 X-Proofpoint-ORIG-GUID: gTkaLkxGLyJQwZWkM1Uwh_xfqooEo7zx X-Proofpoint-Spam-Info: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfX9FzmGzqgJETj pNStx2hK+VJFc5ogBGO3oik5Dv0hofikTW2YkrtJ9WVZ6MbtiB/lXISG2k4NBkDfhdu8wWfaVHc eVV8osArHyTcfUn+WVp6V+lT9r06JIs= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-19_03,2026-08-19_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 spamscore=0 phishscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608190104 Add a exported function to convert lnkctl2speed to enum pci_bus_speed, so that other kernel drivers can use it. Signed-off-by: Krishna Chaitanya Chundru --- drivers/pci/pci.c | 15 +++++++++++++++ include/linux/pci.h | 1 + 2 files changed, 16 insertions(+) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 77b17b13ee61..cda7d210ddbf 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5939,6 +5939,21 @@ int pcie_link_speed_mbps(struct pci_dev *pdev) } EXPORT_SYMBOL(pcie_link_speed_mbps); =20 +/** + * pci_lnkctl2_bus_speed - convert Link Control 2 Target Link Speed to pci= _bus_speed + * @speed: Target Link Speed (TLS) value from Link Control 2 register (0-4= for Gen1-Gen5) + * + * Convert the Target Link Speed (TLS) field value from the Link Control 2= register + * to the corresponding enum pci_bus_speed. + * + * Return: pci_bus_speed corresponding to the TLS value + */ +enum pci_bus_speed pci_lnkctl2_bus_speed(u32 speed) +{ + return pcie_link_speed[speed]; +} +EXPORT_SYMBOL(pci_lnkctl2_bus_speed); + /** * pcie_bandwidth_available - determine minimum link settings of a PCIe * device and its bandwidth limitation diff --git a/include/linux/pci.h b/include/linux/pci.h index d1f2d382189d..244c145af04f 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1727,6 +1727,7 @@ int pci_cfg_space_size(struct pci_dev *dev); unsigned char pci_bus_max_busnr(struct pci_bus *bus); resource_size_t pcibios_window_alignment(struct pci_bus *bus, unsigned long type); +enum pci_bus_speed pci_lnkctl2_bus_speed(u32 speed); =20 #define PCI_VGA_STATE_CHANGE_BRIDGE (1 << 0) #define PCI_VGA_STATE_CHANGE_DECODES (1 << 1) --=20 2.34.1 From nobody Mon Sep 28 17:48:38 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 ABB9436657B for ; Wed, 19 Aug 2026 13:26:45 +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=1787146010; cv=none; b=eiDf/b1DwwjALCmDuNVAA5cYbiODBuHtBrWZmf6kZj6X/5s8QMW+PArxV2kC9Wyy0HqflwruafxuObkBNjZbUEDv3av9F4+MYlvtIM+Rkl+FTsoWvNNkUw5V7/bLVqhlWST0biL0Z+1heKiX5N6LxA5H6mAc55/Sver29cn5Z+0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787146010; c=relaxed/simple; bh=vqIPfxghX6uTA0vKHHb/u35II5suyu/XCxM8mJVVGd4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RdbDlxODCe0d938egWQOAV+c+mR5BBcNfubF58XR/V24vUOKbYcpKnFY4BSsjnzk+WFu2bHHq11utIaT7PFqspMhvvveggmD/9BX++MvNGa+SF0O6ZmDaJvR4O3x0WlSDUBkAWla+J50XnJ//JHnSTvEkgWACgPgo7fX8tVIdN0= 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=pkxyGAih; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=In6umOgf; 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="pkxyGAih"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="In6umOgf" 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 67JD0Pc7372640 for ; Wed, 19 Aug 2026 13:26:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= h5qjbIEG5djsa+d0E1yNhIsx/SvMTuNxv9MnBQROu70=; b=pkxyGAihLNj7+wce 6DTTucQVICQF7Y2FYPtJ5S9zoPsVRmuLeM+OWont32USbPUVoqNUg4KseIghXsc5 Q5c6KtioC6h7h5bLV2SrkVNXCli3LDr1SrOJdhQn8rWQj9K+X34Q7Rtv/Q0mZBdU CMdVyTbEIKM9OYlfrJhGw6vOgAnQ8OqZ6hfN1kR/EgXmZNxFSmVCXKMMIq3pRs5P yL9jBGcQnAAZnppvw7dLw0oZL132S21yoax2GNKmjt4v5Ixz1VMtZdHdAAnqKYd2 83ll2SPWde81OS8G0aOSlJn29HhiBwfP22XIvDU0ziEVX1pQPSLP/yA+wypaPj20 Nqwjig== Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4yfkbdvc-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 19 Aug 2026 13:26:42 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-ca6bd8a190cso1184451a12.0 for ; Wed, 19 Aug 2026 06:26:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787146002; x=1787750802; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=h5qjbIEG5djsa+d0E1yNhIsx/SvMTuNxv9MnBQROu70=; b=In6umOgffW/Y5UoTZ4gnQcjEmBIdeT5bXQTHRCbg4Z3buLj9q2+/Zo6JUSDvJYuCKe 9EzJKqu3gB70wPsDOBCep7+d92hpfh/oEM+JV7kAUioP1s1qFy8DqzD6iNpAeZcSyxFk q2JyojxTk1Lclm+pm6Frmk3LngN4hR3K27Jq30FzyfRQ56spytarXvYKwKNJuZiu49HW DmCoxk1K6/BqV6EtsSu/C06RrHa857qpLFboSkhQznRthhMhburxXuNVFj2Jp8n7rP2E pH6RrPGN6r6Q8GWS6g3P/dbwT5r7Qgt3w594D5q+LEli58vwyqtXEO19g7drilU0LuSO Ol4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787146002; x=1787750802; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=h5qjbIEG5djsa+d0E1yNhIsx/SvMTuNxv9MnBQROu70=; b=ewah0+pR7ngjsU/ygNu3K6yNtBNn44t6fEn1QmzDn3ejX1oU/yNKlutIxWIJbzKYS0 EQsLJQMgj5WHsTA8c/n90uz6XL5kCGBGkMMme6rZckwz2euwXChSCqtBtlVRyRBOxFM8 5L7WzHiCDE67r8JxgPi3W01sh5SEfyQYqmUVypkPTyjZ79LVqcVOPyfutxHuQAuVHfnD xx2z1+F88g/IA39tPzEtdD4TKHQALLd1RG1UrhH1yoe/0tzA0jKaKAF1Y6nMeG3aAa8N xfxw4LoacccEgwV2dWJ94mumqqlD43k+E+E5i1jxSw5TEJyQh16bHkZjh1xfxm1Bp/t9 og3A== X-Forwarded-Encrypted: i=1; AHgh+RrNUFp0cfs4d4IP5pFuawOKpFW9YCgrmOdAIYZbhWN8peYbItjipdZ9ET1oebiA6Vpgjrp8tsnxVQ4TOhE=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0Bm5Tuc97pCpS0tigbCD1P7xUfvc4DhXL1gBQaUJvrm9gCbFO 8WH53STB373dZjuHu2ZDnAxRM5rjjcV/yZDLYWlD2damaqMhSS7rf39VlDrFBEROz1D67yAiNwU UJiX+qr7Tj5kY0s/hZqmCU+uc2em9aJG7q4o8fFt/Osffu6NPGvAcLs0sAmYOoYqwEEY= X-Gm-Gg: AR+sD13YPc7Zlq7UM5Wgvxg0PLcbXzZIQJdF2JpgjfTGJDWwp9a3BhuNMgY2/WvfP/B wO7fcHBXrtxvX2x5SnOwy3OmhAmCLV8N6W27YnK7UMPA8FgdXxfdq3urumOaqOc7vwnlKeBTkfn rhEMiFUzWJZdTDIQhdMFwAJOdp0Jjk/TxkeF9HHGfEtD0dA6SzMw9uaOm1UWdurebXXG6npTHE2 z2ejb6OdJpAduAmxvRjtYHEEH3acCxXFbzn31InIYlR76uWQ8q4xr3Vke3va2m32m3kbvdIGxtS 228dzzx2sleC5WmMRQXqwM+LZgfZRHuefY7MUAjTKgHCbLujeaOw1izNAqA8KIbolyqK4RDLJ/h +5sFXbjGCSG622isbpptzPrVMVIDdJUs53eM= X-Received: by 2002:a05:6a21:1583:b0:3c3:a140:9392 with SMTP id adf61e73a8af0-3cd00aa4483mr10421363637.0.1787146001653; Wed, 19 Aug 2026 06:26:41 -0700 (PDT) X-Received: by 2002:a05:6a21:1583:b0:3c3:a140:9392 with SMTP id adf61e73a8af0-3cd00aa4483mr10421238637.0.1787146001047; Wed, 19 Aug 2026 06:26:41 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-327c2a92406sm6126465eec.11.2026.08.19.06.26.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 06:26:40 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Wed, 19 Aug 2026 18:55:55 +0530 Subject: [PATCH v5 4/6] bus: mhi: host: Add support for Bandwidth scale Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260819-bwscale-v5-4-6dea79786b37@oss.qualcomm.com> References: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> In-Reply-To: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> To: Bjorn Helgaas , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Jingoo Han , Lorenzo Pieralisi , Rob Herring , Jeff Johnson , Bartosz Golaszewski , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, mhi@lists.linux.dev, linux-wireless@vger.kernel.org, ath11k@lists.infradead.org, qiang.yu@oss.qualcomm.com, Krishna Chaitanya Chundru X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1787145973; l=17383; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=vqIPfxghX6uTA0vKHHb/u35II5suyu/XCxM8mJVVGd4=; b=r5PP7HXRcZGud+lWzoxJ8rtNCQNtEJApHPb9w3+69FUbg21sKNKPpXBbcnm0XhtCUSTR3eiDa pbTPbs+YoALCF3tVGyn9cbJJJuNZ8XgdQ3yvZW4vLVJftl3wIb2XOs7 X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-GUID: Rzc3q1Cnsgk6f9TazedJJOeBhQ2oILLq X-Proofpoint-ORIG-GUID: Rzc3q1Cnsgk6f9TazedJJOeBhQ2oILLq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfXyo0xt9FKAfOd rftqIJMCpw4nppwjvSqwybQVR+x1zlxHyInHDVay4Au3viIMAe8myWHRcMvfk8WZkzqQ50U0v0Y B1NBHzot7VsuzSM2XrKaTdoMg8PbYw5aLk3hd8p8f9FMK2TI9xL7wf3Ok2wc+eN+A2suZjxuJM8 BhJq1BL2cv50fdaNJWfiQs7HMAwBRNeJT1bM7FdrKIM/+lyGuL5YMoygLuMIfuMF9uIoAku05d+ SCQGj5xHQOsIdpo0JkDxr3QokbsEBBrK8Ychit8sEi8edk5wvfWubNDbtlJb+I4/MYjT7lZ3WXx bN9R1QN7OS8rKu26NlkTxhrLCemOxU9gQ14icd1q3Vcd0tZi2D40zOKC4ECkTcAFy5/vyVdrGSx 2U5S/Jjaw7DqfgxXQIAD+svfT3jOhI4x2GAE9qADPKJ1XpJCE0aImGwy7afDrOBb+U5qA3DMSG6 ZpW1zGmcmj0XktVlQCA== X-Proofpoint-Spam-Info: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfX0+3mgZItgwWA CsgxkHmXFRlQUCGb2fZXFVC+qElSxU3verDDPU1T54fqeso+HklEeHOBUlou9u1hqdBRoCczSzw j9H7Jrk1SbVtT3KEgu6XyfzSr4WMnvU= X-Authority-Analysis: v=2.4 cv=fvfsol4f c=1 sm=1 tr=0 ts=6a85af12 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=1cv9sBuMcNe9vbkH22sA:9 a=QEXdDO2ut3YA:10 a=O8hF6Hzn-FEA:10 a=_Vgx9l1VpLgwpw_dHYaR:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-19_03,2026-08-19_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 clxscore=1015 impostorscore=0 malwarescore=0 lowpriorityscore=0 bulkscore=0 spamscore=0 priorityscore=1501 suspectscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608190104 As per MHI spec v1.2, sec 14, MHI supports bandwidth scaling to reduce power consumption. MHI bandwidth scaling is advertised by devices that contain the bandwidth scaling capability registers. If enabled, the device aggregates bandwidth requirements and sends them to the host through dedicated mhi event ring. After the host performs the bandwidth switch, it sends an acknowledgment by ringing a doorbell. if the host supports bandwidth scaling events, then it must set BW_CFG.ENABLED bit, set BW_CFG.DB_CHAN_ID to the channel ID to the doorbell that will be used by the host to communicate the bandwidth scaling status and BW_CFG.ER_INDEX to the index for the event ring to which the device should send bandwidth scaling request in the bandwidth scaling capability register. As part of mmio init check if the bw scale capability is present or not, if present advertise host supports bw scale by setting all the required fields. MHI layer will only forward the bw scaling request to the controller driver since MHI doesn't have any idea about transport layer used by the controller, it is responsibility of the controller driver to do actual bw scaling and then pass status to the MHI. MHI will response back to the device based up on the status of the bw scale received. Add a new get_misc_doorbell() to get doorbell for misc capabilities to use the doorbell with mhi events like MHI BW scale etc. Use workqueue & mutex for the bw scale events as the pci_set_target_speed() which will called by the mhi controller driver can sleep. Co-developed-by: Qiang Yu Signed-off-by: Qiang Yu Signed-off-by: Krishna Chaitanya Chundru --- drivers/bus/mhi/common.h | 13 +++++ drivers/bus/mhi/host/init.c | 93 +++++++++++++++++++++++++++++++-- drivers/bus/mhi/host/internal.h | 6 ++- drivers/bus/mhi/host/main.c | 113 ++++++++++++++++++++++++++++++++++++= +++- drivers/bus/mhi/host/pm.c | 10 +++- drivers/bus/mhi/host/trace.h | 7 +++ include/linux/mhi.h | 13 +++++ 7 files changed, 247 insertions(+), 8 deletions(-) diff --git a/drivers/bus/mhi/common.h b/drivers/bus/mhi/common.h index 4c316f3d5a68..267260901a41 100644 --- a/drivers/bus/mhi/common.h +++ b/drivers/bus/mhi/common.h @@ -215,6 +215,19 @@ #define MHI_CAP_ID_MAX_TRB_LEN 0x5 #define MHI_CAP_ID_MAX 0x6 =20 +/* MHI Bandwidth scaling offsets */ +#define MHI_BW_SCALE_CFG_OFFSET 0x4 +#define MHI_BW_SCALE_CAP_ID (3) +#define MHI_BW_SCALE_DB_CHAN_ID GENMASK(31, 25) +#define MHI_BW_SCALE_ENABLED BIT(24) +#define MHI_BW_SCALE_ER_INDEX GENMASK(23, 19) + +#define MHI_TRE_GET_EV_BW_REQ_SEQ(tre) FIELD_GET(GENMASK(15, 8), (MHI_TRE_= GET_DWORD(tre, 0))) + +#define MHI_BW_SCALE_RESULT(status, seq) (FIELD_PREP(GENMASK(11, 8), statu= s) | \ + FIELD_PREP(GENMASK(7, 0), seq)) +#define MHI_BW_SCALE_NACK 0xF + enum mhi_pkt_type { MHI_PKT_TYPE_INVALID =3D 0x0, MHI_PKT_TYPE_NOOP_CMD =3D 0x1, diff --git a/drivers/bus/mhi/host/init.c b/drivers/bus/mhi/host/init.c index 32db4aa4bbe8..d0975b6c2df0 100644 --- a/drivers/bus/mhi/host/init.c +++ b/drivers/bus/mhi/host/init.c @@ -497,10 +497,66 @@ static int mhi_find_capability(struct mhi_controller = *mhi_cntrl, u32 capability) return 0; } =20 +static int mhi_get_er_index(struct mhi_controller *mhi_cntrl, + enum mhi_er_data_type type) +{ + struct mhi_event *mhi_event =3D mhi_cntrl->mhi_event; + int i; + + /* Find event ring for requested type */ + for (i =3D 0; i < mhi_cntrl->total_ev_rings; i++, mhi_event++) { + if (mhi_event->data_type =3D=3D type) + return mhi_event->er_index; + } + + return -ENOENT; +} + +static int mhi_init_bw_scale(struct mhi_controller *mhi_cntrl, + int bw_scale_db) +{ + struct device *dev =3D &mhi_cntrl->mhi_dev->dev; + struct mhi_event *mhi_event; + u32 bw_cfg_offset, val; + int er_index, i; + + bw_cfg_offset =3D mhi_find_capability(mhi_cntrl, MHI_BW_SCALE_CAP_ID); + if (!bw_cfg_offset) + return 0; + + er_index =3D mhi_get_er_index(mhi_cntrl, MHI_ER_BW_SCALE); + if (er_index < 0) + return er_index; + + /* Initialize BW scale event ring resources */ + mhi_event =3D mhi_cntrl->mhi_event; + for (i =3D 0; i < mhi_cntrl->total_ev_rings; i++, mhi_event++) { + if (mhi_event->data_type =3D=3D MHI_ER_BW_SCALE) { + INIT_WORK(&mhi_event->work, mhi_process_ev_work); + mutex_init(&mhi_event->mutex); + break; + } + } + + bw_cfg_offset +=3D MHI_BW_SCALE_CFG_OFFSET; + + /* Advertise host support */ + val =3D FIELD_PREP(MHI_BW_SCALE_DB_CHAN_ID, bw_scale_db) | + FIELD_PREP(MHI_BW_SCALE_ER_INDEX, er_index) | + MHI_BW_SCALE_ENABLED; + + mhi_write_reg(mhi_cntrl, mhi_cntrl->regs, bw_cfg_offset, val); + + dev_dbg(dev, "Bandwidth scaling setup complete with event ring: %d\n", + er_index); + + return 0; +} + int mhi_init_mmio(struct mhi_controller *mhi_cntrl) { - u32 val; - int i, ret; + u32 val, chdb_offset; + int i, ret, doorbell =3D 0; struct mhi_chan *mhi_chan; struct mhi_event *mhi_event; void __iomem *base =3D mhi_cntrl->regs; @@ -581,6 +637,8 @@ int mhi_init_mmio(struct mhi_controller *mhi_cntrl) return -ERANGE; } =20 + chdb_offset =3D val; + /* Setup wake db */ mhi_cntrl->wake_db =3D base + val + (8 * MHI_DEV_WAKE_DB); mhi_cntrl->wake_set =3D false; @@ -634,6 +692,17 @@ int mhi_init_mmio(struct mhi_controller *mhi_cntrl) return ret; } =20 + if (mhi_cntrl->get_misc_doorbell) + doorbell =3D mhi_cntrl->get_misc_doorbell(mhi_cntrl, MHI_ER_BW_SCALE); + + if (doorbell > 0) { + ret =3D mhi_init_bw_scale(mhi_cntrl, doorbell); + if (!ret) + mhi_cntrl->bw_scale_db =3D base + chdb_offset + (8 * doorbell); + else + dev_warn(dev, "Failed to setup bandwidth scaling: %d\n", ret); + } + return 0; } =20 @@ -778,6 +847,9 @@ static int parse_ev_cfg(struct mhi_controller *mhi_cntr= l, case MHI_ER_CTRL: mhi_event->process_event =3D mhi_process_ctrl_ev_ring; break; + case MHI_ER_BW_SCALE: + mhi_event->process_event =3D mhi_process_bw_scale_ev_ring; + break; default: dev_err(dev, "Event Ring type not supported\n"); goto error_ev_cfg; @@ -1001,10 +1073,12 @@ int mhi_register_controller(struct mhi_controller *= mhi_cntrl, =20 mhi_event->mhi_cntrl =3D mhi_cntrl; spin_lock_init(&mhi_event->lock); - if (mhi_event->data_type =3D=3D MHI_ER_CTRL) + if (mhi_event->data_type =3D=3D MHI_ER_CTRL) { tasklet_init(&mhi_event->task, mhi_ctrl_ev_task, (ulong)mhi_event); - else + } else if (mhi_event->data_type =3D=3D MHI_ER_BW_SCALE) { + /* BW scale resources will be initialized in mhi_init_mmio() if capabili= ty exists */ + } else tasklet_init(&mhi_event->task, mhi_ev_task, (ulong)mhi_event); } @@ -1092,6 +1166,7 @@ void mhi_unregister_controller(struct mhi_controller = *mhi_cntrl) { struct mhi_device *mhi_dev =3D mhi_cntrl->mhi_dev; struct mhi_chan *mhi_chan =3D mhi_cntrl->mhi_chan; + struct mhi_event *mhi_event; unsigned int i; =20 mhi_deinit_free_irq(mhi_cntrl); @@ -1101,6 +1176,16 @@ void mhi_unregister_controller(struct mhi_controller= *mhi_cntrl) sysfs_remove_file(&mhi_dev->dev.kobj, &dev_attr_trigger_edl.attr); =20 destroy_workqueue(mhi_cntrl->hiprio_wq); + + /* Clean up BW scale resources */ + mhi_event =3D mhi_cntrl->mhi_event; + for (i =3D 0; i < mhi_cntrl->total_ev_rings; i++, mhi_event++) { + if (mhi_event->data_type =3D=3D MHI_ER_BW_SCALE) { + cancel_work_sync(&mhi_event->work); + mutex_destroy(&mhi_event->mutex); + } + } + kfree(mhi_cntrl->mhi_cmd); kfree(mhi_cntrl->mhi_event); =20 diff --git a/drivers/bus/mhi/host/internal.h b/drivers/bus/mhi/host/interna= l.h index 7b0ee5e3a12d..71d9c1fc5b29 100644 --- a/drivers/bus/mhi/host/internal.h +++ b/drivers/bus/mhi/host/internal.h @@ -250,6 +250,8 @@ struct mhi_event { struct mhi_ring ring; struct db_cfg db_cfg; struct tasklet_struct task; + struct work_struct work; + struct mutex mutex; /* serializes bw_scale event processing */ spinlock_t lock; int (*process_event)(struct mhi_controller *mhi_cntrl, struct mhi_event *mhi_event, @@ -404,6 +406,8 @@ int mhi_process_ctrl_ev_ring(struct mhi_controller *mhi= _cntrl, struct mhi_event *mhi_event, u32 event_quota); void mhi_uevent_notify(struct mhi_controller *mhi_cntrl, enum mhi_ee_type = ee); =20 +int mhi_process_bw_scale_ev_ring(struct mhi_controller *mhi_cntrl, + struct mhi_event *mhi_event, u32 event_quota); /* ISR handlers */ irqreturn_t mhi_irq_handler(int irq_number, void *dev); irqreturn_t mhi_intvec_threaded_handler(int irq_number, void *dev); @@ -419,5 +423,5 @@ void mhi_unmap_single_no_bb(struct mhi_controller *mhi_= cntrl, struct mhi_buf_info *buf_info); void mhi_unmap_single_use_bb(struct mhi_controller *mhi_cntrl, struct mhi_buf_info *buf_info); - +void mhi_process_ev_work(struct work_struct *work); #endif /* _MHI_INT_H */ diff --git a/drivers/bus/mhi/host/main.c b/drivers/bus/mhi/host/main.c index 53c0ffe30070..7b4d2aeb03db 100644 --- a/drivers/bus/mhi/host/main.c +++ b/drivers/bus/mhi/host/main.c @@ -472,7 +472,10 @@ irqreturn_t mhi_irq_handler(int irq_number, void *dev) if (mhi_dev) mhi_notify(mhi_dev, MHI_CB_PENDING_DATA); } else { - tasklet_schedule(&mhi_event->task); + if (mhi_event->data_type =3D=3D MHI_ER_BW_SCALE) + queue_work(mhi_cntrl->hiprio_wq, &mhi_event->work); + else + tasklet_schedule(&mhi_event->task); } =20 return IRQ_HANDLED; @@ -1043,6 +1046,114 @@ int mhi_process_data_event_ring(struct mhi_controll= er *mhi_cntrl, return count; } =20 +int mhi_process_bw_scale_ev_ring(struct mhi_controller *mhi_cntrl, + struct mhi_event *mhi_event, u32 event_quota) +{ + struct mhi_event_ctxt *er_ctxt =3D &mhi_cntrl->mhi_ctxt->er_ctxt[mhi_even= t->er_index]; + struct device *dev =3D &mhi_cntrl->mhi_dev->dev; + struct mhi_ring *ev_ring =3D &mhi_event->ring; + dma_addr_t ptr =3D le64_to_cpu(er_ctxt->rp); + u32 response =3D MHI_BW_SCALE_NACK; + struct mhi_ring_element *dev_rp; + struct mhi_link_info link_info; + bool dev_wake_held =3D false; + int ret =3D 0; + + if (unlikely(MHI_EVENT_ACCESS_INVALID(mhi_cntrl->pm_state))) + return -EIO; + + if (!MHI_IN_MISSION_MODE(mhi_cntrl->ee)) + return -EINVAL; + + if (!is_valid_ring_ptr(ev_ring, ptr)) { + dev_err(dev, + "Event ring rp points outside of the event ring\n"); + return -EIO; + } + + dev_rp =3D mhi_to_virtual(ev_ring, ptr); + if (ev_ring->rp =3D=3D dev_rp) + return 0; + + /* If rp points to base, we need to wrap it around */ + if (dev_rp =3D=3D ev_ring->base) + dev_rp =3D ev_ring->base + ev_ring->len; + dev_rp--; + + /* Fast forward to currently processed element and recycle er */ + ev_ring->rp =3D dev_rp; + ev_ring->wp =3D dev_rp - 1; + if (ev_ring->wp < ev_ring->base) + ev_ring->wp =3D ev_ring->base + ev_ring->len - ev_ring->el_size; + mhi_recycle_ev_ring_element(mhi_cntrl, ev_ring); + + if (WARN_ON(MHI_TRE_GET_EV_TYPE(dev_rp) !=3D MHI_PKT_TYPE_BW_REQ_EVENT)) { + dev_err(dev, "Unexpected event type for BW scale event ring\n"); + return -EINVAL; + } + + trace_mhi_bw_scale_event(mhi_cntrl, dev_rp); + + link_info.target_link_speed =3D MHI_TRE_GET_EV_LINKSPEED(dev_rp); + link_info.target_link_width =3D MHI_TRE_GET_EV_LINKWIDTH(dev_rp); + link_info.sequence_num =3D MHI_TRE_GET_EV_BW_REQ_SEQ(dev_rp); + + dev_dbg(dev, "Received BW_REQ with seq:%d link speed:0x%x width:0x%x\n", + link_info.sequence_num, + link_info.target_link_speed, + link_info.target_link_width); + + read_lock_bh(&mhi_cntrl->pm_lock); + if (likely(MHI_DB_ACCESS_VALID(mhi_cntrl))) + mhi_ring_er_db(mhi_event); + read_unlock_bh(&mhi_cntrl->pm_lock); + + /* Bring host and device out of suspended states */ + ret =3D mhi_device_get_sync(mhi_cntrl->mhi_dev); + if (ret) + goto send_bw_scale_resp; + + mhi_cntrl->runtime_get(mhi_cntrl); + dev_wake_held =3D true; + + ret =3D mhi_cntrl->bw_scale(mhi_cntrl, &link_info); + if (!ret) + response =3D 0; + +send_bw_scale_resp: + response =3D MHI_BW_SCALE_RESULT(response, link_info.sequence_num); + + if (ret) + dev_err(dev, "BW_REQ seq:%d speed:0x%x width:0x%x NACKed, err:%d\n", + link_info.sequence_num, link_info.target_link_speed, + link_info.target_link_width, ret); + + write_lock_bh(&mhi_cntrl->pm_lock); + mhi_write_reg(mhi_cntrl, mhi_cntrl->bw_scale_db, 0, response); + write_unlock_bh(&mhi_cntrl->pm_lock); + + if (dev_wake_held) { + mhi_cntrl->runtime_put(mhi_cntrl); + mhi_device_put(mhi_cntrl->mhi_dev); + } + + return ret; +} + +void mhi_process_ev_work(struct work_struct *work) +{ + struct mhi_event *mhi_event =3D container_of(work, struct mhi_event, + work); + + struct mhi_controller *mhi_cntrl =3D mhi_event->mhi_cntrl; + + if (unlikely(MHI_EVENT_ACCESS_INVALID(mhi_cntrl->pm_state))) + return; + + guard(mutex)(&mhi_event->mutex); + mhi_event->process_event(mhi_cntrl, mhi_event, U32_MAX); +} + void mhi_ev_task(unsigned long data) { struct mhi_event *mhi_event =3D (struct mhi_event *)data; diff --git a/drivers/bus/mhi/host/pm.c b/drivers/bus/mhi/host/pm.c index f799503c8f36..1023fdd699b9 100644 --- a/drivers/bus/mhi/host/pm.c +++ b/drivers/bus/mhi/host/pm.c @@ -524,7 +524,10 @@ static void mhi_pm_disable_transition(struct mhi_contr= oller *mhi_cntrl, if (mhi_event->offload_ev) continue; disable_irq(mhi_cntrl->irq[mhi_event->irq]); - tasklet_kill(&mhi_event->task); + if (mhi_event->data_type =3D=3D MHI_ER_BW_SCALE) + cancel_work_sync(&mhi_event->work); + else + tasklet_kill(&mhi_event->task); } =20 /* Release lock and wait for all pending threads to complete */ @@ -689,7 +692,10 @@ static void mhi_pm_sys_error_transition(struct mhi_con= troller *mhi_cntrl) for (i =3D 0; i < mhi_cntrl->total_ev_rings; i++, mhi_event++) { if (mhi_event->offload_ev) continue; - tasklet_kill(&mhi_event->task); + if (mhi_event->data_type =3D=3D MHI_ER_BW_SCALE) + cancel_work_sync(&mhi_event->work); + else + tasklet_kill(&mhi_event->task); } =20 /* Release lock and wait for all pending threads to complete */ diff --git a/drivers/bus/mhi/host/trace.h b/drivers/bus/mhi/host/trace.h index 3e0c41777429..f7cc3470bcdb 100644 --- a/drivers/bus/mhi/host/trace.h +++ b/drivers/bus/mhi/host/trace.h @@ -212,6 +212,13 @@ DEFINE_EVENT(mhi_process_event_ring, mhi_ctrl_event, TP_ARGS(mhi_cntrl, rp) ); =20 +DEFINE_EVENT(mhi_process_event_ring, mhi_bw_scale_event, + + TP_PROTO(struct mhi_controller *mhi_cntrl, struct mhi_ring_element *rp), + + TP_ARGS(mhi_cntrl, rp) +); + DECLARE_EVENT_CLASS(mhi_update_channel_state, =20 TP_PROTO(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan, int= state, diff --git a/include/linux/mhi.h b/include/linux/mhi.h index 4b86ae6f6a82..22a8d05cf44d 100644 --- a/include/linux/mhi.h +++ b/include/linux/mhi.h @@ -119,10 +119,12 @@ struct image_info { * struct mhi_link_info - BW requirement * target_link_speed - Link speed as defined by TLS bits in LinkControl reg * target_link_width - Link width as defined by NLW bits in LinkStatus reg + * sequence_num - used by device to track bw requests sent to host */ struct mhi_link_info { unsigned int target_link_speed; unsigned int target_link_width; + int sequence_num; }; =20 /** @@ -200,10 +202,12 @@ enum mhi_ch_ee_mask { * enum mhi_er_data_type - Event ring data types * @MHI_ER_DATA: Only client data over this ring * @MHI_ER_CTRL: MHI control data and client data + * @MHI_ER_BW_SCALE: MHI controller bandwidth scale functionality */ enum mhi_er_data_type { MHI_ER_DATA, MHI_ER_CTRL, + MHI_ER_BW_SCALE, }; =20 /** @@ -314,6 +318,7 @@ struct mhi_controller_config { * @bhi: Points to base of MHI BHI register space * @bhie: Points to base of MHI BHIe register space * @wake_db: MHI WAKE doorbell register address + * @bw_scale_db: MHI BW_SCALE doorbell register address * @iova_start: IOMMU starting address for data (required) * @iova_stop: IOMMU stop address for data (required) * @fw_image: Firmware image name for normal booting (optional) @@ -370,6 +375,8 @@ struct mhi_controller_config { * @write_reg: Write a MHI register via the physical link (required) * @reset: Controller specific reset function (optional) * @edl_trigger: CB function to trigger EDL mode (optional) + * @get_misc_doobell: function to get doorbell used for MISC feature like = BW scale etc (optional) + * @bw_scale: CB function for passing BW scale info (optional) * @buffer_len: Bounce buffer length * @index: Index of the MHI controller instance * @bounce_buf: Use of bounce buffer @@ -391,6 +398,7 @@ struct mhi_controller { void __iomem *bhi; void __iomem *bhie; void __iomem *wake_db; + void __iomem *bw_scale_db; =20 dma_addr_t iova_start; dma_addr_t iova_stop; @@ -455,6 +463,11 @@ struct mhi_controller { void (*reset)(struct mhi_controller *mhi_cntrl); int (*edl_trigger)(struct mhi_controller *mhi_cntrl); =20 + int (*get_misc_doorbell)(struct mhi_controller *mhi_cntrl, + enum mhi_er_data_type type); + int (*bw_scale)(struct mhi_controller *mhi_cntrl, + struct mhi_link_info *link_info); + size_t buffer_len; int index; bool bounce_buf; --=20 2.34.1 From nobody Mon Sep 28 17:48:38 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 A468B3AE1B1 for ; Wed, 19 Aug 2026 13:26:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787146016; cv=none; b=DcumvhKWJT5wUcV7c4UI5XhltrDCCbmVDR129ggOAcXcUh5QWYJ8e8nvd/S8Ix9S19aAJB29jjXvmDqscNTd3boH0vNfwtaRwRcx3Cg6AwF4aQivaGV8GLWHlePHhuKmbGRIMAS5RClpd1OpsrgzkAOEUOzITOOfIh+mSjWZSCg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787146016; c=relaxed/simple; bh=aXPhBARn3a/5Ioy0IlYZvcrmKeEeSgZakrcsFrOkcBU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qZjm/SXrMv66U2NkODmmtF83RhEeSjqFsy/O//bAb8d7/tDKcVCwOskd+wksCjwPzlimb1E/EVFSvOaYBeEAHcU6+6g6bYjpvbV/O1aJ6HupajhI406D6i3L8wICZs15EQnn5qgVxhi6o3Pdne1aabXCodoF95QTDbI9ptdYG+k= 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=JdaZdzlK; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Aa4AKdse; 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="JdaZdzlK"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Aa4AKdse" 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 67JD0ZGr3600463 for ; Wed, 19 Aug 2026 13:26:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Whq1lvHGKENYAxLuORynt92vSwisujF7CNlKCmDhdoo=; b=JdaZdzlKmRVUxQc8 oDoG2hB6bAgifxfZdD7ZWfa3Pz97kRCLmhgy4VFqOV36nXQBkmGY2hGsOlimrdrP m0T5p+n/OoHlLtggrIa6T/TRBDRuOvOAcp7qud580ZmlXlqBwoHyjrh6Xex2LexF tW7ykD3VXXP83p9rpzVsg2k1Zw7gtmPZLibteXFY6gSqcipk+BcD7YWeM7GzhLnF PFFlDRvzKpKdAwfdvlWc1Y8r14FS811dBnj9Rv9EdLCSJJqLpafPgR4kuo/dTBb4 RafqeUWOHUKDvUXsz529nRRY4SxOnCWbgR+jq2/DrXwz4x8oLOtgnqK7iyeLPKmW AWFY/w== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4yfm3dcx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 19 Aug 2026 13:26:48 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-3950b1371a7so1599945a91.2 for ; Wed, 19 Aug 2026 06:26:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787146007; x=1787750807; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Whq1lvHGKENYAxLuORynt92vSwisujF7CNlKCmDhdoo=; b=Aa4AKdseelSj7YfgM8+ylUdXhPdC2Po4Blju4dPFI3a5soUJLoZLYVL7DXz7JAQ4pG NkdtKBXgJfPEhealUxaofg6XMez4D0Onk7lATeBKxWcRmhS/7UF7I4kWXx2KlCfz83Nu mOgwB9HhHL+CVo+HvJqwy0zd1FFJyu5mUgzuBT3wtSYlqLMNCQHKBWI4Tt8ypqvvCg+t OlouO5tdIf1pJXSTypiMnJiijcmjLnGupsRKCNrLw5h/xMbmCAY4UVToDOB+6IoO4eCB iqq3ZG389GDCjTpwrU4K1Tetx5ZcVatGBKn2eejNlgif7dYQig4ZK8BzgLfPp+bLngcb wu4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787146007; x=1787750807; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Whq1lvHGKENYAxLuORynt92vSwisujF7CNlKCmDhdoo=; b=IGaULGtXhWI9WOOHmv2S7lvVvhw7BTJ7oz5St2WLELI9jYwA5b4U0f6O8D6Wzjm4S6 xQ/FiUsjB1YqVoMmm+EGgQC2DBZvhk5SkTySLGv7rPnaV+nQ4WEencNCYXXkbP/DCIlm GQDSAgFTqEw6tfx2t32LfSF8d0BRSlaVix1YcGNo2MZfTLll5450sMoU5KGYW6dR5acr sLtly42ib7keMZsz5vR/fmZ5oO2GUz5J8hj9FJt0937+khPskRIW1WrPbj01NTJLZPpX XMwqL8nRwFiADr5gAMqn4TQKu3V/5P6XxQyOvvRiG7K76WSl5oeyVO2EmzsH1EtfKC5h NgxA== X-Forwarded-Encrypted: i=1; AHgh+RoRMMLFc4sfcQhQhKegfpMl4i8xEwfAwYCJprBf09hmlmxI+VskY2WCRYyk5amXNTEaoYZa9qajVhAwKlk=@vger.kernel.org X-Gm-Message-State: AFuF++kUH18MyS7n2VfcFh6ZQbRUa+OLlCBnE7Rkeh8JXVStKNDS75NT cPNY25JBPhLdqIwcn4/k68UCGx65EbAcd5nAvb/aEgXqN2ECO9DWrnEbJZ8+BONQ1TbmtmoiIID 1Fneh6TIhDF1q7j1b7a5upq7JKFMJujmeN5fMpPOXecny6i3MLqfzogUHS1yLZqWbCuY= X-Gm-Gg: AR+sD13r/EaXs/34igGBFHNFaaqls1luR5eClBGET2IX2arxGOcTYflyNTb4+vlqe8G LmArP8ZiHd81HDXrf4OsL6BMx8rAYonKwcXjd70IEHlUjft6FcyI69DxASa22iuA0Rlgk/yDXC9 oUyCfHSgN53PGUg2fLzeDr420D6iwjYYZ4IIcH24Ho4ssA+nb3SA//PRx0BLxrbxAcr/eE/TMcy cafwdKH4cRqg/chPmb7WeV6qW2x0zosRwsaOiiuNCluSuWKilLmhwJSLhc1aGuXZ0OOIEnqDKuw 50w2zh/dTq+xP+/bEGLiNgc+GckzhkGquScTZpLK9MU2G1xpv4cMJHe/tuXdzvMy7ZOLc1gI3FA 7vdjbubPeE9ogfFJFT8om1Wf5tv5q47Zv+6I= X-Received: by 2002:a17:90b:544f:b0:381:152b:d596 with SMTP id 98e67ed59e1d1-3958108a4b0mr8964616a91.11.1787146007283; Wed, 19 Aug 2026 06:26:47 -0700 (PDT) X-Received: by 2002:a17:90b:544f:b0:381:152b:d596 with SMTP id 98e67ed59e1d1-3958108a4b0mr8964492a91.11.1787146006768; Wed, 19 Aug 2026 06:26:46 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-327c2a92406sm6126465eec.11.2026.08.19.06.26.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 06:26:46 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Wed, 19 Aug 2026 18:55:56 +0530 Subject: [PATCH v5 5/6] wifi: ath11k: Add support for MHI bandwidth scaling Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260819-bwscale-v5-5-6dea79786b37@oss.qualcomm.com> References: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> In-Reply-To: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> To: Bjorn Helgaas , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Jingoo Han , Lorenzo Pieralisi , Rob Herring , Jeff Johnson , Bartosz Golaszewski , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, mhi@lists.linux.dev, linux-wireless@vger.kernel.org, ath11k@lists.infradead.org, qiang.yu@oss.qualcomm.com, Krishna Chaitanya Chundru , Miaoqing Pan X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1787145973; l=3078; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=Wrtck8GXON4XPaYha2Uzh6nxCEmpOddneb93cQLxgLo=; b=cSBT2URPwVrqsDuy5hGWyBdZp1hI/lSkcFAI5vkjPChdqQ+eyTWSwxSKthBc4kuovh0RtguJ0 tsFFUp5Qw5zDY6l0/yEEIi3zTQhV/bG++sSU3KrykPB1Nj4wLSR66MY X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Proofpoint-GUID: HkR55MeTWPOJ7KK-tqdLUk-dmTgRh84p X-Authority-Analysis: v=2.4 cv=bth8wkai c=1 sm=1 tr=0 ts=6a85af18 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=COk6AnOGAAAA:8 a=EUspDBNiAAAA:8 a=262QNBeyodYRG1lUGOYA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-ORIG-GUID: HkR55MeTWPOJ7KK-tqdLUk-dmTgRh84p X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfX5HTDta5m7qXt 3m2RpY6lPqNTOK3uDTEe8oX0EOl+EbeaP6GaQqNNOHmT9piqDapxipH9hrwOPeAfZZ/3K/q+JeV FNXlJFeAA7EMJrt4hZ969VDKJvZC6OcrhyGC8qypgEEBNOpixjrDFkWy7JgZ74MxyfEp9Z1hmU6 KqfKkZeO9vz0HauMW/rvSLaxpMZdghBE+Kvh/mOa1DANJcWrVnNQR5AbnUwhqubgFS/sKABQtqf K0RDpFZEFACCL+zBqa2TQa1X4FAjDjFBnB5VqkmUXRsTUn9bP9oE2GMBDffSeZ0ZadYFXKQA7o9 0oiuAePH9V/NtQUQXO3/LUm7ok0PhDgCiw6gjX0i6nR2nNVeLBOM3tDX7902iPJc9E1l8RGhy8M ZCF1rlo3xQX555KvJwzBK7Degqb74EaLrs9XfQDYzm76OFnpALRjQ7tTS0rYbxlRFH1euZV5Sal 558HldMcfLiwS7q37Gg== X-Proofpoint-Spam-Info: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfX9LRC8q/M5xN+ vZ2G7wHGJjN2Xj/5mFch1GmxyH6CV7AgvN6Gi2ODQi5c4fOtZlrrvz0k76/JpjO59Ioke6WgBNS VlTygiFR2iioSpgkytWYajfbnZOiSrs= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-19_03,2026-08-19_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 bulkscore=0 suspectscore=0 spamscore=0 phishscore=0 impostorscore=0 lowpriorityscore=0 adultscore=0 priorityscore=1501 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608190104 From: Miaoqing Pan Add support for MHI bandwidth scaling, which will reduce power consumption if WLAN operates with lower bandwidth. This feature is only enabled for QCA6390. Bandwidth scaling is initiated by the endpoint firmware based upon the bandwidth requirements, if there is high bandwidth data endpoint requests for higher data rates or if there is less bandwidth they request for lower data rates to reduce power. Endpoint initiates this through MHI protocol. Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-04546-QCAHSPSWPL_V1_V2_SILICONZ_I= OE-1 Signed-off-by: Miaoqing Pan Signed-off-by: Krishna Chaitanya Chundru --- drivers/net/wireless/ath/ath11k/mhi.c | 38 +++++++++++++++++++++++++++++++= ++++ 1 file changed, 38 insertions(+) diff --git a/drivers/net/wireless/ath/ath11k/mhi.c b/drivers/net/wireless/a= th/ath11k/mhi.c index a6c9ff112c68..9bff4c4bca3b 100644 --- a/drivers/net/wireless/ath/ath11k/mhi.c +++ b/drivers/net/wireless/ath/ath11k/mhi.c @@ -20,6 +20,7 @@ #define MHI_TIMEOUT_DEFAULT_MS 20000 #define RDDM_DUMP_SIZE 0x420000 #define MHI_CB_INVALID 0xff +#define MHI_BW_SCALE_CHAN_DB 126 =20 static const struct mhi_channel_config ath11k_mhi_channels_qca6390[] =3D { { @@ -71,6 +72,17 @@ static struct mhi_event_config ath11k_mhi_events_qca6390= [] =3D { .client_managed =3D false, .offload_channel =3D false, }, + { + .num_elements =3D 8, + .irq_moderation_ms =3D 0, + .irq =3D 1, + .mode =3D MHI_DB_BRST_DISABLE, + .data_type =3D MHI_ER_BW_SCALE, + .priority =3D 2, + .hardware_event =3D false, + .client_managed =3D false, + .offload_channel =3D false, + }, }; =20 static const struct mhi_controller_config ath11k_mhi_config_qca6390 =3D { @@ -311,6 +323,30 @@ static void ath11k_mhi_op_write_reg(struct mhi_control= ler *mhi_cntrl, writel(val, addr); } =20 +static int ath11k_mhi_op_get_misc_doorbell(struct mhi_controller *mhi_cntr= l, + enum mhi_er_data_type type) +{ + if (type =3D=3D MHI_ER_BW_SCALE) + return MHI_BW_SCALE_CHAN_DB; + + return -EOPNOTSUPP; +} + +static int ath11k_mhi_op_bw_scale(struct mhi_controller *mhi_cntrl, + struct mhi_link_info *link_info) +{ + enum pci_bus_speed speed =3D pci_lnkctl2_bus_speed(link_info->target_link= _speed); + struct ath11k_base *ab =3D dev_get_drvdata(mhi_cntrl->cntrl_dev); + struct pci_dev *pci_dev =3D to_pci_dev(ab->dev); + struct pci_dev *pdev; + + pdev =3D pci_upstream_bridge(pci_dev); + if (!pdev) + return -ENODEV; + + return pcie_set_target_speed(pdev, speed, true); +} + static int ath11k_mhi_read_addr_from_dt(struct mhi_controller *mhi_ctrl) { struct device_node *np; @@ -387,6 +423,8 @@ int ath11k_mhi_register(struct ath11k_pci *ab_pci) mhi_ctrl->status_cb =3D ath11k_mhi_op_status_cb; mhi_ctrl->read_reg =3D ath11k_mhi_op_read_reg; mhi_ctrl->write_reg =3D ath11k_mhi_op_write_reg; + mhi_ctrl->bw_scale =3D ath11k_mhi_op_bw_scale; + mhi_ctrl->get_misc_doorbell =3D ath11k_mhi_op_get_misc_doorbell; =20 switch (ab->hw_rev) { case ATH11K_HW_QCN9074_HW10: --=20 2.34.1 From nobody Mon Sep 28 17:48:38 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 294093AA1AE for ; Wed, 19 Aug 2026 13:26:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787146020; cv=none; b=vEr8FYyiisqrXWeQu2zkK8GFmI8gcR3ZGIjSDEJsaBlen5An5SN2Q5rPdlaYgJ7YYjgFOiOMgOyLIuP4/eCHVwaVdK95Vkn57KsPQpRFg8AzHAU82SsDo6GB6HVJd5J8504LCD9a/feojZbDdSBVoQNuGdXc1Qjf1A7pv8zeNwg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787146020; c=relaxed/simple; bh=f9YlB0Fh+bNAledBbgwJEMD/HQiDELnKiSK0+Ha5n1U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=btVVaRldoUGq3PnrrnTBNW0VLIIs06lOUg4DQr4iY2nLMsQnL64GXT7h5qdK7H4FJCwvPg+5blkVg1aTDWPT73i7/fdWCEWL+vBkf+KXe4+T4YoNHbczHYL8G1oUGFC+hjIKk8SbZAv7q//lp++sQgRmPep7l8cHHpYewwcaGDM= 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=AI4H7C3b; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Xcg3rzA3; 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="AI4H7C3b"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Xcg3rzA3" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67JD0DR44045546 for ; Wed, 19 Aug 2026 13:26:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= tzW5IHj5NxVpXb/NDn7q5pRWgTqd/agwSM5EqGTVbRM=; b=AI4H7C3b2DllNm2C mfg1zG4Qe5AQ2RDvEozScu2JhP59LxOlpO0t8kYdXGsG6rvLT4oTJV6kIKItX2SV 6UpDb80fjlTebjInuL7bYXpQua+NFIF5K3oqhl+VvrorbLWr7wDi/3DrBf72MGco pHGj1IXiBZl9/pmhgeXGOqb9IMVStj9yHg+T8wUsiOVnnHHLbudJIKpRrg2P3lXb y7LEdNPzdVRtknGlZ8dDuDqpuB58QjdDJPujDAtaLqoBnUFcHwWTcGEeAwG/xuaJ ca2vRrZJDCucdQb4oVZb63L2u4Pi81PFW0YmfaA4MZ5g1ZftrY4X4MEE9kA4i2s1 YosDxQ== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4yfkkevg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 19 Aug 2026 13:26:53 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2cf6acd760cso12738365ad.3 for ; Wed, 19 Aug 2026 06:26:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787146013; x=1787750813; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=tzW5IHj5NxVpXb/NDn7q5pRWgTqd/agwSM5EqGTVbRM=; b=Xcg3rzA3Q/mK8mmM+hfU61RH+fysRbbsIhpknE3RYUCWiR/3Cyme8kXCnEZAeZeDaz mJ2Ea3EaosEO1/dfisVgqIjL7/6IBt4dJ4X8koPK2ZGhw1nmVc/SUbrv+TzD7LxkIm1R 5cDxk8esqLrDmamWUK14vGVod23W+s8jTF5cDtbrbBqgFQJDU8NPWk1WH+17IwnIkV1y obeFQy6Gq2ZNmYWCN0fog9v6cnz56b/em6oa9uLaTnMXkuNK+39PpTT6yf4qG3lHwSgN J2vHpYKoeSwZeoWmPzTG0O/SY/iBiiYTQTtnoCGanWPiKk77sL8IUvSFe8DuUYKR57z+ qxMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787146013; x=1787750813; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=tzW5IHj5NxVpXb/NDn7q5pRWgTqd/agwSM5EqGTVbRM=; b=NmDsfaQTU4pTlY+eS+YxBzvqUzpsawIWV25RfBhZm6lfxv3sl1Y9ns0mAkPgkSRxwr YJyxOi/B6pFnWFXXHS9kNUuo688a3fGmVQ7lNMCGw92j6fsNN9mvb7Ix6U03oBAggPQF Dt0fxlsXVy0+N0H+vkJcQIXTGsD2W9W7i5XEf6jLsaNpCttJ2HSlbGYQeQdHHGjQgMfZ 8XrLaCfMWzVNsM+Y92uMLQ27wSxxM0IGRrsMhgLi1KiSoxfMX9foJmo0mG/fqCleqCZ2 VZrNzITmhUhqwT5OiW6r3Is9ZfQE3bmRLKRCAvw4gFOx4eiHw4bHHV36+HVagShZLbC9 kCmw== X-Forwarded-Encrypted: i=1; AHgh+RpUUZDyQj7jT7TxTyu/LhWVA41eje02jj2/r0FG7Q2F18cTUywPBGIwVvjIYA534wzz+YQxjZUu2o73G5c=@vger.kernel.org X-Gm-Message-State: AFuF++mrfudEC3kS3o8EAl13qZ8A2lQt8vgqGTNqBQhBteNLycCisgWx mLoO6fJ6NVjTjhrBqGA1r6bDv4wDPhpQoxlktnZZ62CH6oJobDhW+iNSBL0wdRniFHwshKVKeP/ xk8KWQ1RHkBmJWR758pPX0yBvz24PxnyASJCMEvyt7p9RsMi40BdeiTQb8pJ0jqIdat4= X-Gm-Gg: AR+sD12aEvC292qPdIR26SqbFrrRV5EghZdKXN/A5IwCKC4N99hByvdA3q1AZLyomQM 4yKcQNEMPP+WQzqC6srOoquWZeu/iO83ILpaRXBeGTKc/3YEfEhxBTpx/gkiRiM6AMyWc7mUCfj Og64T8sQzv+c7rZ0jh0bGMXTr5Z31q35MyXX1lRFJGBCTOvCWGECGkePqXLyuhrrN02PfwGiapQ yOnR9r6sCVEZeXa0IUR0WHlHhWtUqL1KDYUR2rppLkylG6h7JZ8KikRv3RtnqMjq5qu+3qMcqz2 1bzo8uHwgyys6sDiAY7aOVKes7+wUr+1+Be+1+wp0kJKcALIGhebNZp3p6jmApPMxXVYxKhGXlD SV89G3Fl9czPIxRMQmW5PhN2prFvGS21CZRc= X-Received: by 2002:a17:90b:510d:b0:38f:18f9:785 with SMTP id 98e67ed59e1d1-39580f2d498mr9334508a91.8.1787146013018; Wed, 19 Aug 2026 06:26:53 -0700 (PDT) X-Received: by 2002:a17:90b:510d:b0:38f:18f9:785 with SMTP id 98e67ed59e1d1-39580f2d498mr9334409a91.8.1787146012498; Wed, 19 Aug 2026 06:26:52 -0700 (PDT) Received: from hu-krichai-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-327c2a92406sm6126465eec.11.2026.08.19.06.26.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Aug 2026 06:26:52 -0700 (PDT) From: Krishna Chaitanya Chundru Date: Wed, 19 Aug 2026 18:55:57 +0530 Subject: [PATCH v5 6/6] PCI: qcom: Enable ASPM disabling during link retraining Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260819-bwscale-v5-6-6dea79786b37@oss.qualcomm.com> References: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> In-Reply-To: <20260819-bwscale-v5-0-6dea79786b37@oss.qualcomm.com> To: Bjorn Helgaas , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Jingoo Han , Lorenzo Pieralisi , Rob Herring , Jeff Johnson , Bartosz Golaszewski , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, mhi@lists.linux.dev, linux-wireless@vger.kernel.org, ath11k@lists.infradead.org, qiang.yu@oss.qualcomm.com, Krishna Chaitanya Chundru , Krishna Chaitanya Chundru X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1787145973; l=907; i=krishna.chundru@oss.qualcomm.com; s=20230907; h=from:subject:message-id; bh=f9YlB0Fh+bNAledBbgwJEMD/HQiDELnKiSK0+Ha5n1U=; b=OgQCeukC0yqHkRBcMr7JYdM2b51+4QKimpjb1JOms87pWnVBZMA/wPJfz26Gp6RTe0N2xIQPZ HXv8nvTacz5BZOz8pgiG9ztzWQqkRsKziXtqPbqDfuD+EpVFPQQZzA2 X-Developer-Key: i=krishna.chundru@oss.qualcomm.com; a=ed25519; pk=10CL2pdAKFyzyOHbfSWHCD0X0my7CXxj8gJScmn1FAg= X-Authority-Analysis: v=2.4 cv=NoPhtcdJ c=1 sm=1 tr=0 ts=6a85af1d cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=LpQP-O61AAAA:8 a=0KoEUwRExAGgTGxQCIUA:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 a=pioyyrs4ZptJ924tMmac:22 X-Proofpoint-ORIG-GUID: mLnJGGdImJF9T_4Y5kHXaxxUh19Bjyg3 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfX9WuiRgd7HPqZ sAhFUeYL3o8Z9+2TNh9FvYBqKYKxevFA9Immmw/ZQ97S5lYNkse5CTuGqd9DZa86WsDaX1GUCaR TvnSkRXfdfKlJXFz9ssKvppI38tKFgU= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDEwNCBTYWx0ZWRfXw3Z3HGghXo7Y YyQuEgnZ15Htcg5p5Dquz9cJZbY2Hd4AK8j1IZbvAZDeI1jdqovUoeVCFC91rtX2BQTMpZjgVDW u4VkYEJ4v+wJjVc4B9W5weOlPqjWlJ3yb6K2EDbPA5owP45WXN9yOTkNO6NkkNV12/FJKODcf9f b8KLuSLJe9FgTUrQqShkR8wyoKFXdhFnFQLEFiCiQgQ4xao1+qzA2eI847fsc1ahJ2Zp2tAkgPU I8+F7OKKr4ov1gSj1tLsX8233SzQvXtfTov35/ws4vsozT9GFQTU6xjIbQqI5cFnneAF9VHJs2P d4+4k5mDmnslLK5cOge86MKP4w993Iq72HBBDLTbQYMQAu4yVXIbsSMkgKECwLI23RxwP5ArO9t k+uqP2eiqh0CCYpAAAZNw0dmiwpxM16ihhRtMJLa8AVdTrMnEdr+ALY+UKmvByNFhD02zDIZj+X yzIrYbUs+Hp0KZB9C6g== X-Proofpoint-GUID: mLnJGGdImJF9T_4Y5kHXaxxUh19Bjyg3 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-19_03,2026-08-19_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 clxscore=1015 adultscore=0 priorityscore=1501 phishscore=0 spamscore=0 malwarescore=0 lowpriorityscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608190104 Set the disable_aspm_for_retrain flag in qcom_pcie_host_init() to ensure ASPM is disabled during link retraining operations. This prevents potential issues with link state transitions during bandwidth scaling on Qualcomm PCIe controllers. Signed-off-by: Krishna Chaitanya Chundru --- drivers/pci/controller/dwc/pcie-qcom.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controlle= r/dwc/pcie-qcom.c index 45f4caeb0814..0237f747b69a 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -1395,6 +1395,8 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *pp) =20 qcom_pcie_perst_deassert(pcie); =20 + pp->bridge->disable_aspm_for_retrain =3D true; + if (pcie->cfg->ops->config_sid) { ret =3D pcie->cfg->ops->config_sid(pcie); if (ret) --=20 2.34.1