From nobody Tue Oct 7 05:21:04 2025 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B56532749C0 for ; Tue, 15 Jul 2025 08:00:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752566437; cv=none; b=TrRyk3jBtTjusqLwqD+HgPEKXusPSN5OgggS/hhGqsn6SuVkL6myjx8NNwMqXpdBOnIqFExvfQx3ZZspTuPPwQWUBlR//6vzQMw0/N1QnpjtiZHXv6q5dQPuMDp85MF6av1OrQGIHzlLOz18qhZmyY5yWeIaVIT2ryG9lcz3q9w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752566437; c=relaxed/simple; bh=4JhhB1mQygUC88Tou4uhVLdc03cPbzCj4an+sUn3wpI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=j6+hpexiMmMw4U/TMZnUhpSAvAagijhXyS8hDpTec6cZ5E7TGwj0FBK0sDM1FwO7NdknPJcuGfatkqK4vZjAe3opCxP7Iq3mgQhzLZuIHAZJLLTmRWamduMI+zqlnbJOGPrctA0nOUY+9VELyikjt4miBmtyq/qMAg1QAuaK4VI= 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=V10h7ulx; 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="V10h7ulx" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56EJeLMf004347 for ; Tue, 15 Jul 2025 08:00:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= kEhIYqJbOaIa1Xc2HyDfChdym/dNhQN5pFztVZHEzbA=; b=V10h7ulxeguclmyH WE+NqBM6BeQc74JWzqoM7zCwesQYgpVJPJhsD/8Zn9CZjwHyyafjN0A4dp658lbr SvQYn9qm9Umt2easVTAtsETGHBKU/LYc4u9U78zQBg4DYVOgwrwK366bWoROGCK7 2JlpQicAL+tmsdBG/5WcVrWYHwigxqvaZNiu47Zzc4F6zzgxjb3RAeuw2MSC0yIj zXoEijMd2Adm2SlK8Eb09O5k441W9fYMRwb2InR/+0+65s5VFjeR7aRBqQmSgdjI IY7wcRHrf7ALqBpqyra1nxxdC27cTsnthQH/qBhRLro/F1P6EXRC7msrwzYGIAO/ J6NMbw== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47ufxaycy8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 15 Jul 2025 08:00:34 +0000 (GMT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-4ab401e333bso55247641cf.1 for ; Tue, 15 Jul 2025 01:00:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752566434; x=1753171234; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kEhIYqJbOaIa1Xc2HyDfChdym/dNhQN5pFztVZHEzbA=; b=LCnXttfChHb6S2gD/f32KtkP72nG5mU+Ae/r8Yxq1HvcBIiv8QKwWoN6HpJnDA4KFz kYAAsSKtdY1zmv/fbJsaOYggp+eo18Nxn3z9D5ywQ5lpjGQMDd9M8oOIEGHHcuGFEvxL IMX+1VKhe2dKozYbGkk0zlbUmaM1e2ubcxLhWgD7a/wIFGVpIWH6btqK7cfHJIJUmX4K YcDQtTiz2mCZnioZrWVDzQJfAOYKOiXjUJ7K1sw5O8GTXFl7yziOObUKZRyZAdvZvFrj JvWtH8wP3FD4Z2PtnBPr/mnu2dyfqCK3p1JJ6HlMfxKWZ5PBdcaX7MjWYbrhyR+UQ+4C GBpw== X-Forwarded-Encrypted: i=1; AJvYcCXZQkq9MQvhVHOqaBPR2Tc2/k7JDpgQzkPQbPXA6V04T0FlWgoZDo87OgyY55nbmJMB27kHJ2L6uhi0fzc=@vger.kernel.org X-Gm-Message-State: AOJu0YyI8C2RwIa2aez8ADqPrf6HLjh/C9i1A4rJcOgTGVLXqX9epalb 0w75+/5Rh0777ZBp2YIuCxxlPLIlJSAmQeYaho45tz1u+0JW7STihOUoZ/3duqq6+41O/02ibJK CQXr24jRZ3CmOSFlWad6fOvzlff8Um9HcKUXp26jkrhdhGjed5qsIhCHds0bMl04qa0M= X-Gm-Gg: ASbGnctOIVL4Fg1epBpxkYzCCSaxwpqg7pQC5RLneQb4fWbUBA+WjoSc9uYL5EHjbsP E++GxvFJgpskRvtHNlSvL0uGvCu83zCKkl5V4hKUddqKlW+IGzENLSFdLM+NSGQb+i/DQ3UGi1Q Lm/TNaAgEwm9bohfZt1gpfsp/9ovuoY61KCUyb+plfXkanEG3fshgVIRlHkMPJF2A5EIix8etid c0ff93y8CU08hX2S+yR5L3iU9z7rqMoHaUhid69JKPsI6HvbCflaq5fhnByZ5MUHC0Ba7MLe1zA M3dsxEqJtcJ23fYYUtYHv7UclZmFDyt5CfNt5zFDPBgaYkiyGKixOcfp60qgal8w86guRw== X-Received: by 2002:ac8:6907:0:b0:4ab:622b:fffb with SMTP id d75a77b69052e-4ab7f742dc4mr41248881cf.5.1752566433352; Tue, 15 Jul 2025 01:00:33 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH796r6lrIztsRgeIxSf9ms5hlmcL8dEtWpdycBQuSpvlLV+rRBV+Q2s2WU+1kv+eVUhKz0lw== X-Received: by 2002:ac8:6907:0:b0:4ab:622b:fffb with SMTP id d75a77b69052e-4ab7f742dc4mr41248021cf.5.1752566432691; Tue, 15 Jul 2025 01:00:32 -0700 (PDT) Received: from [192.168.1.17] ([120.60.140.219]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4ab3f1c9a2csm37792461cf.67.2025.07.15.01.00.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Jul 2025 01:00:31 -0700 (PDT) From: Manivannan Sadhasivam Date: Tue, 15 Jul 2025 13:29:20 +0530 Subject: [PATCH v5 3/4] PCI: qcom: Add support for resetting the Root Port due to link down event 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: <20250715-pci-port-reset-v5-3-26a5d278db40@oss.qualcomm.com> References: <20250715-pci-port-reset-v5-0-26a5d278db40@oss.qualcomm.com> In-Reply-To: <20250715-pci-port-reset-v5-0-26a5d278db40@oss.qualcomm.com> To: Bjorn Helgaas , Mahesh J Salgaonkar , Oliver O'Halloran , Will Deacon , Lorenzo Pieralisi , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Manivannan Sadhasivam , Rob Herring , Heiko Stuebner , Philipp Zabel Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-rockchip@lists.infradead.org, Niklas Cassel , Wilfred Mallawa , Krishna Chaitanya Chundru , mani@kernel.org, Manivannan Sadhasivam , Manivannan Sadhasivam X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8942; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=hcHUE0Es+rhE1k65uaN43jzCwIv2KxCfrP4I/tTARuY=; b=owEBbQGS/pANAwAKAVWfEeb+kc71AcsmYgBodgqB1QE0utBqY/jYrvA6r/I4HDgTWPrqjaBa7 NuYHzQIJeWJATMEAAEKAB0WIQRnpUMqgUjL2KRYJ5dVnxHm/pHO9QUCaHYKgQAKCRBVnxHm/pHO 9RqtB/4jqXKRNf4PwhYqoPJL9auiFCZf55Z05d3Hi72i2jKZ/jwqcR/hE7ZmwkjCJeSpDWy2Z9c XE0PdD0dGB2PX0gi03PtmZXx5DgVGOscG2SbLIaWM8B520UYAFXJ4kFtGq7DsFEd8QMLIsSTwOh NLpHt9hhJ7+gePNTmy8AXfv3xjOLnt1gcWT0Ac8u7EZP2ylznMv6XBYfMuBhg6ij5IMfed73BG8 GmSweylGR5sBGMCVChkClYBC88UDi8aFzR3/NiLpAqiilRb43EB6dNgVkputG0R/+h1zlAIOO2g zj0SoVNnLN4DiUdxKZ2OcDH0gSugoamD2sY2hJMZfBRqJIhH X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Proofpoint-GUID: m0XJNaHuFGWolR4YZzdbW9XukfU1lO_D X-Proofpoint-ORIG-GUID: m0XJNaHuFGWolR4YZzdbW9XukfU1lO_D X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE1MDA3MiBTYWx0ZWRfXy9G76lWDloT8 AN+JnAhZXQPT9owurtebHEn3kYr8CcH3vGqEYm/6SGxelcGNR1Uf1JutoXjgAX84/bN0SQR2pS2 SGY4Z4k54RQYjspejg9mfBLQIhnio2bboZlqBbESy0MKcfrR6DgrCQOOf26ZM7/nX6Eopfx/+Hp SSZAv6EhF6bzhzVPlln31Vf0HdlO7WIl6Pcun5aVp9eXXikfnvdcCRg1WRa7ceVBLRYiAm53QOI DaPFlRLLavPdaOdWr23BQWRBozkrewpJKoyE54c5jSM+kmVwR4jXM0eYWl969tWaob72/91sHK9 n1F4KWzsfNkIJwIQvYiOVe0Dz9m8B7UnJTZQwaMdamffwaob4ltLbF0+3+caXZ9kee/Ftrc6WCL CX+LSw9UU0UALtMyZquFXMoV+9RORezp4yGLEeYUqR2Mm4Kt4WvhwE/vpnGBn7RfBHRuXck9 X-Authority-Analysis: v=2.4 cv=Xc2JzJ55 c=1 sm=1 tr=0 ts=68760aa2 cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=HOswsyiB/7FCIMMjk980kA==:17 a=NZ62LyZXjo_B3Dgd:21 a=IkcTkHD0fZMA:10 a=Wb1JkmetP80A:10 a=VwQbUJbxAAAA:8 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=y4pR3j7WNrOdjUP15kUA:9 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-14_03,2025-07-14_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 mlxscore=0 priorityscore=1501 adultscore=0 mlxlogscore=999 phishscore=0 suspectscore=0 spamscore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 malwarescore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507150072 From: Manivannan Sadhasivam The PCIe link can go down under circumstances such as the device firmware crash, link instability, etc... When that happens, the PCIe Root Port needs to be reset to make it operational again. Currently, the driver is not handling the link down event, due to which the users have to restart the machine to make PCIe link operational again. So fix it by detecting the link down event and resetting the Root Port. Since the Qcom PCIe controllers report the link down event through the 'global' IRQ, enable the link down event by setting PARF_INT_ALL_LINK_DOWN bit in PARF_INT_ALL_MASK register. In the case of the event, iterate through the available Root Ports and call pci_host_handle_link_down() API with Root Port 'pci_dev' to let the PCI core handle the link down condition. Note that both link up and link down events could be set at a time when the handler runs. So always handle link down first. Since Qcom PCIe controllers only support one Root Port per controller instance, the API will be called only once. But the looping is necessary as there is no PCI API available to fetch the Root Port instance without the child 'pci_dev'. The API will internally call, 'pci_host_bridge::reset_root_port()' callback to reset the Root Port in a platform specific way. So implement the callback to reset the Root Port by first resetting the PCIe core, followed by reinitializing the resources and then finally starting the link again. Signed-off-by: Manivannan Sadhasivam Signed-off-by: Manivannan Sadhasivam --- drivers/pci/controller/dwc/Kconfig | 1 + drivers/pci/controller/dwc/pcie-qcom.c | 120 +++++++++++++++++++++++++++++= +--- 2 files changed, 113 insertions(+), 8 deletions(-) diff --git a/drivers/pci/controller/dwc/Kconfig b/drivers/pci/controller/dw= c/Kconfig index d9f0386396edf66ad0e514a0f545ed24d89fcb6c..ce04ee6fbd99cbcce5d2f3a75eb= d72a17070b7b7 100644 --- a/drivers/pci/controller/dwc/Kconfig +++ b/drivers/pci/controller/dwc/Kconfig @@ -296,6 +296,7 @@ config PCIE_QCOM select PCIE_DW_HOST select CRC8 select PCIE_QCOM_COMMON + select PCI_HOST_COMMON help Say Y here to enable PCIe controller support on Qualcomm SoCs. The PCIe controller uses the DesignWare core plus Qualcomm-specific diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controlle= r/dwc/pcie-qcom.c index c789e3f856550bcfa1ce09962ba9c086d117de05..5f7b2b80aace742780e5bc5b479= f4f64ab778453 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -34,6 +34,7 @@ #include =20 #include "../../pci.h" +#include "../pci-host-common.h" #include "pcie-designware.h" #include "pcie-qcom-common.h" =20 @@ -55,6 +56,7 @@ #define PARF_INT_ALL_STATUS 0x224 #define PARF_INT_ALL_CLEAR 0x228 #define PARF_INT_ALL_MASK 0x22c +#define PARF_STATUS 0x230 #define PARF_SID_OFFSET 0x234 #define PARF_BDF_TRANSLATE_CFG 0x24c #define PARF_DBI_BASE_ADDR_V2 0x350 @@ -130,9 +132,14 @@ =20 /* PARF_LTSSM register fields */ #define LTSSM_EN BIT(8) +#define SW_CLEAR_FLUSH_MODE BIT(10) +#define FLUSH_MODE BIT(11) =20 /* PARF_INT_ALL_{STATUS/CLEAR/MASK} register fields */ -#define PARF_INT_ALL_LINK_UP BIT(13) +#define INT_ALL_LINK_DOWN 1 +#define INT_ALL_LINK_UP 13 +#define PARF_INT_ALL_LINK_DOWN BIT(INT_ALL_LINK_DOWN) +#define PARF_INT_ALL_LINK_UP BIT(INT_ALL_LINK_UP) #define PARF_INT_MSI_DEV_0_7 GENMASK(30, 23) =20 /* PARF_NO_SNOOP_OVERRIDE register fields */ @@ -145,6 +152,9 @@ /* PARF_BDF_TO_SID_CFG fields */ #define BDF_TO_SID_BYPASS BIT(0) =20 +/* PARF_STATUS fields */ +#define FLUSH_COMPLETED BIT(8) + /* ELBI_SYS_CTRL register fields */ #define ELBI_SYS_CTRL_LT_ENABLE BIT(0) =20 @@ -169,6 +179,7 @@ PCIE_CAP_SLOT_POWER_LIMIT_SCALE) =20 #define PERST_DELAY_US 1000 +#define FLUSH_TIMEOUT_US 100 =20 #define QCOM_PCIE_CRC8_POLYNOMIAL (BIT(2) | BIT(1) | BIT(0)) =20 @@ -274,11 +285,14 @@ struct qcom_pcie { struct icc_path *icc_cpu; const struct qcom_pcie_cfg *cfg; struct dentry *debugfs; + int global_irq; bool suspended; bool use_pm_opp; }; =20 #define to_qcom_pcie(x) dev_get_drvdata((x)->dev) +static int qcom_pcie_reset_root_port(struct pci_host_bridge *bridge, + struct pci_dev *pdev); =20 static void qcom_ep_reset_assert(struct qcom_pcie *pcie) { @@ -1263,6 +1277,8 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *pp) goto err_assert_reset; } =20 + pp->bridge->reset_root_port =3D qcom_pcie_reset_root_port; + return 0; =20 err_assert_reset: @@ -1517,6 +1533,78 @@ static void qcom_pcie_icc_opp_update(struct qcom_pci= e *pcie) } } =20 +/* + * Qcom PCIe controllers only support one Root Port per controller instanc= e. So + * this function ignores the 'pci_dev' associated with the Root Port and j= ust + * resets the host bridge, which in turn resets the Root Port also. + */ +static int qcom_pcie_reset_root_port(struct pci_host_bridge *bridge, + struct pci_dev *pdev) +{ + struct pci_bus *bus =3D bridge->bus; + struct dw_pcie_rp *pp =3D bus->sysdata; + struct dw_pcie *pci =3D to_dw_pcie_from_pp(pp); + struct qcom_pcie *pcie =3D to_qcom_pcie(pci); + struct device *dev =3D pcie->pci->dev; + u32 val; + int ret; + + /* Wait for the pending transactions to be completed */ + ret =3D readl_relaxed_poll_timeout(pcie->parf + PARF_STATUS, val, + val & FLUSH_COMPLETED, 10, + FLUSH_TIMEOUT_US); + if (ret) { + dev_err(dev, "Flush completion failed: %d\n", ret); + goto err_host_deinit; + } + + /* Clear the FLUSH_MODE to allow the core to be reset */ + val =3D readl(pcie->parf + PARF_LTSSM); + val |=3D SW_CLEAR_FLUSH_MODE; + writel(val, pcie->parf + PARF_LTSSM); + + /* Wait for the FLUSH_MODE to clear */ + ret =3D readl_relaxed_poll_timeout(pcie->parf + PARF_LTSSM, val, + !(val & FLUSH_MODE), 10, + FLUSH_TIMEOUT_US); + if (ret) { + dev_err(dev, "Flush mode clear failed: %d\n", ret); + goto err_host_deinit; + } + + qcom_pcie_host_deinit(pp); + + ret =3D qcom_pcie_host_init(pp); + if (ret) { + dev_err(dev, "Host init failed\n"); + return ret; + } + + ret =3D dw_pcie_setup_rc(pp); + if (ret) + goto err_host_deinit; + + /* + * Re-enable global IRQ events as the PARF_INT_ALL_MASK register is + * non-sticky. + */ + if (pcie->global_irq) + writel_relaxed(PARF_INT_ALL_LINK_UP | PARF_INT_ALL_LINK_DOWN | + PARF_INT_MSI_DEV_0_7, pcie->parf + PARF_INT_ALL_MASK); + + qcom_pcie_start_link(pci); + dw_pcie_wait_for_link(pci); + + dev_dbg(dev, "Root Port reset completed\n"); + + return 0; + +err_host_deinit: + qcom_pcie_host_deinit(pp); + + return ret; +} + static int qcom_pcie_link_transition_count(struct seq_file *s, void *data) { struct qcom_pcie *pcie =3D (struct qcom_pcie *)dev_get_drvdata(s->private= ); @@ -1559,11 +1647,24 @@ static irqreturn_t qcom_pcie_global_irq_thread(int = irq, void *data) struct qcom_pcie *pcie =3D data; struct dw_pcie_rp *pp =3D &pcie->pci->pp; struct device *dev =3D pcie->pci->dev; - u32 status =3D readl_relaxed(pcie->parf + PARF_INT_ALL_STATUS); + struct pci_dev *port; + unsigned long status =3D readl_relaxed(pcie->parf + PARF_INT_ALL_STATUS); =20 writel_relaxed(status, pcie->parf + PARF_INT_ALL_CLEAR); =20 - if (FIELD_GET(PARF_INT_ALL_LINK_UP, status)) { + /* + * It is possible that both Link Up and Link Down events might have + * happended. So always handle Link Down first. + */ + if (test_and_clear_bit(INT_ALL_LINK_DOWN, &status)) { + dev_dbg(dev, "Received Link down event\n"); + for_each_pci_bridge(port, pp->bridge->bus) { + if (pci_pcie_type(port) =3D=3D PCI_EXP_TYPE_ROOT_PORT) + pci_host_handle_link_down(port); + } + } + + if (test_and_clear_bit(INT_ALL_LINK_UP, &status)) { dev_dbg(dev, "Received Link up event. Starting enumeration!\n"); /* Rescan the bus to enumerate endpoint devices */ pci_lock_rescan_remove(); @@ -1571,11 +1672,12 @@ static irqreturn_t qcom_pcie_global_irq_thread(int = irq, void *data) pci_unlock_rescan_remove(); =20 qcom_pcie_icc_opp_update(pcie); - } else { - dev_WARN_ONCE(dev, 1, "Received unknown event. INT_STATUS: 0x%08x\n", - status); } =20 + if (status) + dev_WARN_ONCE(dev, 1, "Received unknown event. INT_STATUS: 0x%08x\n", + (u32) status); + return IRQ_HANDLED; } =20 @@ -1732,8 +1834,10 @@ static int qcom_pcie_probe(struct platform_device *p= dev) goto err_host_deinit; } =20 - writel_relaxed(PARF_INT_ALL_LINK_UP | PARF_INT_MSI_DEV_0_7, - pcie->parf + PARF_INT_ALL_MASK); + writel_relaxed(PARF_INT_ALL_LINK_UP | PARF_INT_ALL_LINK_DOWN | + PARF_INT_MSI_DEV_0_7, pcie->parf + PARF_INT_ALL_MASK); + + pcie->global_irq =3D irq; } =20 qcom_pcie_icc_opp_update(pcie); --=20 2.45.2