From nobody Tue Feb 10 13:16:41 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 C03672F5A31 for ; Tue, 2 Dec 2025 14:23:09 +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=1764685391; cv=none; b=k3ctq15d0iVBclwsCbS6hRjEHWtbQls6RlTMNoesAOH4EeGgury8D33NprNRJIcw6I4a+4qhj1UYcRIlvqij1YVA7ENi6gWfze1n/rcdSy56rnJ3qMWBhCIQ6WVX2vn3E8MKuJrkIY9Ba+rclvhZgB20mBeG704u8bQk6a5RzsE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764685391; c=relaxed/simple; bh=DhqZPv/0aWBnunXhwhTfHEiUQFo6lSXbuazcurYzQjA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RTSkD2pNc+0ZDJg1Gf4/YJYBD4DsaxKK4hjeh3vMHokEe8RCmYpmnIjl9a9x8brTTax86kZgWNmKhwo1S+zeQR+JviitpdqgdAu9CkIkbMlNIIfgzh7V6TrzLaQTMfOF8+jndFn7EVi+/jxo9hLDufaJ/ZefZU5xEqb/VfBSERE= 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=B/uLkYr3; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=JxQAQzwA; 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="B/uLkYr3"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="JxQAQzwA" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5B26t5TP1146923 for ; Tue, 2 Dec 2025 14:23:09 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= /DcZ/qO2H5yuWrIIc81AedSaXbGKplExVCuz7hlc7lQ=; b=B/uLkYr32qvdAtOj cLnamVoRFfgpYSSOZQLfeqE7fGNRhJKIbr0Jm28gEGmOblFtJNN3Kfe4dhpi0PJ/ c3fmYiz/NSDj+eyBMnWF/AS5irTXPoYslnTLE5yGZb9Fan8qkEZXkdhQD0Ljlaiq 8+SN3be3kjRgUU66cY+Mk41xbXAv/c5B24tw/xyZVIu0RNEmxsflGiuNXvuKAJdT uLErWHPXm7QrZWiFQMRR/6zmb4WZ7Iwuyt5o4wRSgLhntAXdWQmfgtyJ3+qAus/t qi6oLan9JAtVJJpj0ewjXCSbxUvgeS1+jgDbq9x4NiIFU9mBmnA4p5eiiieufBIO 2dv1NA== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4asj5eax4d-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 02 Dec 2025 14:23:09 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-3416dc5754fso9982531a91.1 for ; Tue, 02 Dec 2025 06:23:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1764685388; x=1765290188; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/DcZ/qO2H5yuWrIIc81AedSaXbGKplExVCuz7hlc7lQ=; b=JxQAQzwAru8bqUVfGdfWuH8ldqWdL6ovIEKBKGgTXACbeNEhzKYH6UiSohDZwBjngX 42eLWkLiQ5d0GsQE7XLlQbhrZzksj9u6nRlMafaf0io6J1foP19xhdxUmTtQgVrpbb3S JF9DGarN2PHbS9BHhi6RdcpmjiQCcNp/LY2gIovNfDAHXrQBfv54T8Nr2q39lXxIgIpx hHC6KC/O2du4oI3NUDoaGaDsnowvOogyn2yrcV3tsUZFYfLdzuRomXSW1Vnc1CGW+EfL BQAhjjsYkB1QhRAn7XMqkUNMJpP/nL7qSHIheUZrl8iAhu7PzNYElzBJJRHdtGIna28L N/IA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764685388; x=1765290188; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=/DcZ/qO2H5yuWrIIc81AedSaXbGKplExVCuz7hlc7lQ=; b=OO9A4+pwpMvXPryOEoguUIplzEywbHEGgTtB/GwaEE6ErOfQ6y64jtsocX5hpKtlr1 ItRTK1Y3aGO0Ug25YTwwwZFXITCP3jxcsoIEvJRIKNLHCHugkimhX0NK6negXLXPqoXS M+qWWuSZtOc44gpw7Hzz7bS/bAmmbDdPUYJyISDq8T+4vONUsweyfDF4/Yb0WAb1OfFo x0TX62/xpUFMlmxyiAvGi2oAqj6pkt//Eop1bSkq6Z/O8sCtmTrC6wVDSVyeQQq8uIMD znHNzeqjWxqROX+a+QIchMq3UCWbzhkVeU//InoxzvQoYuz1jAF/bBcMlf/6nEgGIvIu FR/g== X-Forwarded-Encrypted: i=1; AJvYcCU+g7YqlZhoEjG0BPqt+6HXiM7ANVXfwkuOagVRrXFctiSgHuc4bjifHcRqkPSwPIGZL5R5A7Ct6UdfL5M=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3zHNbxnvZGqvRxS4i+nQ9b7sIKFjM05cCYD+3XW0NB7OKb6Ga JV+JeTHfIrhk0Xl2UMRZmsS+3rsmMJqyCUiLWZoxxCNZBadZXmXK/+V/Nd2Jvvm1k2v1VHAA+9Y QOl5NEgmVMeevHuMImtWR001+2fT5ILgLZOHRrqd6O+O3sQ9FaWPoJn1pLu4BR+jw1d4= X-Gm-Gg: ASbGncv79+8CzBjpewAMfylWVznk4D9SFGRXuFNFxpaDm4Tv2NlFn+dVZ2b0CP2Dmu3 5SkHrnPcJ24B5WX+80nsw4df6NM85CkDoFCObuTUPS0vd+eR45s7WMBC3giV0/QvP266MBZjTFN IPhDaL6B7agC+Slo8ciVBugp+PjcBDojoV53Ngo9vrFRccufX3mSAxm/Q3BhqK2jN597sRd1GH5 vgU7IenROss7idHKI+m33O8gQlq0U5ugArOeYM4Jes96jCbFrLkhdOWCF5nunA2Rs6GX0dTqAy4 WWbZzCX7Lj1OiGynA76wXAHFgLuJ9fyQLZJvTB1LlyAjP2uFHOphsRx4F4xDSlCclC6dvk9ajW7 wXyGalcVq+fzwunnx0nxmH7ykcBvrC8wIlYIU8wc= X-Received: by 2002:a17:90b:3502:b0:341:8bdd:5cf3 with SMTP id 98e67ed59e1d1-34733e55015mr47143842a91.7.1764685388508; Tue, 02 Dec 2025 06:23:08 -0800 (PST) X-Google-Smtp-Source: AGHT+IHmJreXIxtC7QqwcAohA6pn3gbslnhbRvbp4ehG7lAwm1lgqaC+sUN5cC5F2+qBMdTsdTSDcA== X-Received: by 2002:a17:90b:3502:b0:341:8bdd:5cf3 with SMTP id 98e67ed59e1d1-34733e55015mr47143796a91.7.1764685388019; Tue, 02 Dec 2025 06:23:08 -0800 (PST) Received: from [192.168.1.102] ([120.60.68.196]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-be5095a4821sm15659084a12.29.2025.12.02.06.23.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Dec 2025 06:23:07 -0800 (PST) From: Manivannan Sadhasivam Date: Tue, 02 Dec 2025 19:52:49 +0530 Subject: [PATCH v2 2/4] PCI: Cache ACS capabilities 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: <20251202-pci_acs-v2-2-5d2759a71489@oss.qualcomm.com> References: <20251202-pci_acs-v2-0-5d2759a71489@oss.qualcomm.com> In-Reply-To: <20251202-pci_acs-v2-0-5d2759a71489@oss.qualcomm.com> To: Bjorn Helgaas Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, iommu@lists.linux.dev, Naresh Kamboju , Pavankumar Kondeti , Xingang Wang , Marek Szyprowski , Robin Murphy , Jason Gunthorpe , Manivannan Sadhasivam , Manivannan Sadhasivam X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3778; i=manivannan.sadhasivam@oss.qualcomm.com; h=from:subject:message-id; bh=DhqZPv/0aWBnunXhwhTfHEiUQFo6lSXbuazcurYzQjA=; b=owGbwMvMwMUYOl/w2b+J574ynlZLYsjU++bwaMOrxteL72S1ui6vDb/luSzu78qTHxz2GSUFF jelSR9/0MlozMLAyMUgK6bIkr7UWavR4/SNJRHq02EGsTKBTGHg4hSAiVR/Zv8fzv9IKenA0QAG JuHc585XHRbxvQq00wkWc2e7mjmBqWd7qFCF/WHtgsTvvxkiNLaY5noqqjW0XReduIjJ9eK3q2/ XaPVbJKufUy0su+sTKMb871Z1yplNu0zMwwMC7jIdWakq31zwpuD0Ou+zMdUvpjMrsXT3P+i509 vmrLlQz+fT7uvuq64vl3nemn+heFJ2UnO4q4ahyJK6vqls2uuu7hMSnJfJ1q3jyRxifqH77vT7Q imhpjIPf5WnJGdIL7z6QVIw5Tuj5Oa3+wJncG6926mr9PB3otW7rMwPrJFythkK1lWfOe7sYuiM kBRp+mO/OEJtV7zFrO91tU8brrwruFDGb7ddPHHTjZgOAA== X-Developer-Key: i=manivannan.sadhasivam@oss.qualcomm.com; a=openpgp; fpr=C668AEC3C3188E4C611465E7488550E901166008 X-Proofpoint-GUID: Gh4ZkodRSj8Ne9MIKkoamnKYALjDfwLd X-Authority-Analysis: v=2.4 cv=GMsF0+NK c=1 sm=1 tr=0 ts=692ef64d cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=8ziBJk15IZ5r+wOU3RLduA==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=4sYZdrzHdZFwjucz0qEA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjAyMDExNSBTYWx0ZWRfXxhcKql+h2OuU Np6qphcl6pHKCC9/vFEHeqmKmda9ECQHNPMXXox7qw7d2gWtd0EpcNvQYiOi0zC6UGdLdhBZgZA hqD4cbnT2C8d6gJj9CqDFEgPIjhvw+IsDDizklut6OAojwRAlL35i5l5eX+cHS9yY8w06fxTXr0 me3OWhI4PWj3uah23fVjV4sw3tZVgO2vP2OyIuCdTPmRZMXTqLN0tFO/lSfm9SUruNGdHedOjGG ilbOpUAfA4bwjdiALw5QVIJoCBOe7jmzUuW1dgf1V/1oivaGHhY4bavjlqSM8boTlv1m0l1VaLz BkTmXOdujwNi1JgZyribGhC9adqtDhiLj6/Mr9CeRfsAa101V7ISVsJUWMxhD24XsSDFjA98I7U AiBHAJIWbc1jBY4uQ1BY398ky8+QoQ== X-Proofpoint-ORIG-GUID: Gh4ZkodRSj8Ne9MIKkoamnKYALjDfwLd X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-01_01,2025-11-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 lowpriorityscore=0 bulkscore=0 malwarescore=0 impostorscore=0 suspectscore=0 clxscore=1015 adultscore=0 phishscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512020115 ACS capabilities are the RO values set by the hardware. Cache them to avoid reading it all the time when required and also to override any capability in quirks. Signed-off-by: Manivannan Sadhasivam --- drivers/pci/pci.c | 26 +++++++++++++++----------- include/linux/pci.h | 1 + 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 9f594fc6dade..4eb5b487c982 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -892,7 +892,6 @@ static const char *disable_acs_redir_param; static const char *config_acs_param; =20 struct pci_acs { - u16 cap; u16 ctrl; u16 fw_ctrl; }; @@ -995,27 +994,27 @@ static void __pci_config_acs(struct pci_dev *dev, str= uct pci_acs *caps, static void pci_std_enable_acs(struct pci_dev *dev, struct pci_acs *caps) { /* Source Validation */ - caps->ctrl |=3D (caps->cap & PCI_ACS_SV); + caps->ctrl |=3D (dev->acs_capabilities & PCI_ACS_SV); =20 /* P2P Request Redirect */ - caps->ctrl |=3D (caps->cap & PCI_ACS_RR); + caps->ctrl |=3D (dev->acs_capabilities & PCI_ACS_RR); =20 /* P2P Completion Redirect */ - caps->ctrl |=3D (caps->cap & PCI_ACS_CR); + caps->ctrl |=3D (dev->acs_capabilities & PCI_ACS_CR); =20 /* Upstream Forwarding */ - caps->ctrl |=3D (caps->cap & PCI_ACS_UF); + caps->ctrl |=3D (dev->acs_capabilities & PCI_ACS_UF); =20 /* Enable Translation Blocking for external devices and noats */ if (pci_ats_disabled() || dev->external_facing || dev->untrusted) - caps->ctrl |=3D (caps->cap & PCI_ACS_TB); + caps->ctrl |=3D (dev->acs_capabilities & PCI_ACS_TB); } =20 /** * pci_enable_acs - enable ACS if hardware support it * @dev: the PCI device */ -static void pci_enable_acs(struct pci_dev *dev) +void pci_enable_acs(struct pci_dev *dev) { struct pci_acs caps; bool enable_acs =3D false; @@ -1031,7 +1030,6 @@ static void pci_enable_acs(struct pci_dev *dev) if (!pos) return; =20 - pci_read_config_word(dev, pos + PCI_ACS_CAP, &caps.cap); pci_read_config_word(dev, pos + PCI_ACS_CTRL, &caps.ctrl); caps.fw_ctrl =3D caps.ctrl; =20 @@ -3543,7 +3541,7 @@ void pci_configure_ari(struct pci_dev *dev) static bool pci_acs_flags_enabled(struct pci_dev *pdev, u16 acs_flags) { int pos; - u16 cap, ctrl; + u16 ctrl; =20 pos =3D pdev->acs_cap; if (!pos) @@ -3554,8 +3552,7 @@ static bool pci_acs_flags_enabled(struct pci_dev *pde= v, u16 acs_flags) * or only required if controllable. Features missing from the * capability field can therefore be assumed as hard-wired enabled. */ - pci_read_config_word(pdev, pos + PCI_ACS_CAP, &cap); - acs_flags &=3D (cap | PCI_ACS_EC); + acs_flags &=3D (pdev->acs_capabilities | PCI_ACS_EC); =20 pci_read_config_word(pdev, pos + PCI_ACS_CTRL, &ctrl); return (ctrl & acs_flags) =3D=3D acs_flags; @@ -3676,7 +3673,14 @@ bool pci_acs_path_enabled(struct pci_dev *start, */ void pci_acs_init(struct pci_dev *dev) { + int pos; + dev->acs_cap =3D pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS); + pos =3D dev->acs_cap; + if (!pos) + return; + + pci_read_config_word(dev, pos + PCI_ACS_CAP, &dev->acs_capabilities); } =20 void pci_rebar_init(struct pci_dev *pdev) diff --git a/include/linux/pci.h b/include/linux/pci.h index bf97d49c23cf..c6ee1dfdb0fb 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -543,6 +543,7 @@ struct pci_dev { struct npem *npem; /* Native PCIe Enclosure Management */ #endif u16 acs_cap; /* ACS Capability offset */ + u16 acs_capabilities; /* ACS Capabilities */ u8 supported_speeds; /* Supported Link Speeds Vector */ phys_addr_t rom; /* Physical address if not from BAR */ size_t romlen; /* Length if not from BAR */ --=20 2.48.1