From nobody Sun Dec 14 19:15:49 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.20]) (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 14E12165FBF; Fri, 10 May 2024 10:07:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335672; cv=none; b=FTrvvIbN/aKLpp0ZgLLnDrn+Ej3VJEQU0BtY2ak2EtgAE8hH/d0qqe4KPViufUP0mjVidmwAYGPUwY6x6Y60cjWVk+W7srHJmbr9t+AaeRPnowSoANbJcYWDt/wU6SZJCmPEzyp9ot3f6KiK7to/s5PnX/KWoZZjtdNfI0eY2x8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335672; c=relaxed/simple; bh=nDVHo/uGXMDlWtWQD47FWInWDYtBZPj5d51tV3Jx/N8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=Hoy0JdHXt90v4Yi4MvMI7J8wzIRPwlPOVpNk7AqWfz4lw8P+xXRnyN2n6CJp6tWp4HNWk9VdxeLoMddKsCVKshVfdo8lmi1S97CKl4CfLNeitp1VOnLBRl+ORFVUFoij3ZzKKGpk26s2cKWgp5C52rAOY/SB3RPHY0Ba00R1Yqw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=VZMiwdgg; arc=none smtp.client-ip=198.175.65.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="VZMiwdgg" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1715335672; x=1746871672; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nDVHo/uGXMDlWtWQD47FWInWDYtBZPj5d51tV3Jx/N8=; b=VZMiwdgggRUq6kb/2d8FnZp8g5SSmY0gihAUf0dSlSd1y35nMidKbLjx db+0Cg2qpxxDamisy5NlawNuQuACuliulm5oiX8/jOhPmQrfsPbuSQv8N aO+uU70oNqiMgySNSXOUuCNhrYZDeGJ+yoIezWB7zVCKrtJjqVzh5BNy/ WzxL4pNFVBZfM/zKZFZUR+CuZjsD8fH6tf/Qv0KdqHFLElU4vuA8u2UYD n2+ia5bnS1R6oxAO2FO4lDv0NpP0/BhVGLllX3GY916dT9bQdD1S54626 cqpOhPe3x/MELEt3ues6UUbqYTPJ7hgHKvAhmKbqpda6JbmU1qn2pxD9f A==; X-CSE-ConnectionGUID: RNHkBdnDSe+9HmcrVl/znA== X-CSE-MsgGUID: FMG+yppzR3+kiFJTFhNcHw== X-IronPort-AV: E=McAfee;i="6600,9927,11068"; a="11144834" X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="11144834" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:07:51 -0700 X-CSE-ConnectionGUID: yOnt0tdzTlSsylo/hwrqwA== X-CSE-MsgGUID: 3R/di1/XRPKcEASqYMoq2Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="29588248" Received: from ijarvine-desk1.ger.corp.intel.com (HELO localhost) ([10.245.247.85]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:07:47 -0700 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Mahesh J Salgaonkar , Oliver O'Halloran , Lukas Wunner , linux-kernel@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org, =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= Subject: [PATCH v4 1/7] PCI: Don't expose pcie_read_tlp_log() outside of PCI subsystem Date: Fri, 10 May 2024 13:07:24 +0300 Message-Id: <20240510100730.18805-2-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> References: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> 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 pcie_read_tlp_log() was exposed by the commit 0a5a46a6a61b ("PCI/AER: Generalize TLP Header Log reading") but this is now considered a mistake. No drivers outside of PCI subsystem should build their own diagnostic logging but should rely on PCI core doing it for them. There's currently one driver (ixgbe) doing it independently which was the initial reason why the export was added but it was decided by the PCI maintainer that it's something that should be eliminated. Remove the unwanted EXPORT of pcie_read_tlp_log() and remove it from include/linux/aer.h. Link: https://lore.kernel.org/all/20240322193011.GA701027@bhelgaas/ Signed-off-by: Ilpo J=C3=A4rvinen --- drivers/pci/pci.c | 1 - drivers/pci/pci.h | 4 ++++ include/linux/aer.h | 2 -- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index e5f243dd4288..54ab1d6b8e53 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -1092,7 +1092,6 @@ int pcie_read_tlp_log(struct pci_dev *dev, int where, =20 return 0; } -EXPORT_SYMBOL_GPL(pcie_read_tlp_log); =20 /** * pci_restore_bars - restore a device's BAR values (e.g. after wake-up) diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 17fed1846847..9c968df86a92 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -4,6 +4,8 @@ =20 #include =20 +struct pcie_tlp_log; + /* Number of possible devfns: 0.0 to 1f.7 inclusive */ #define MAX_NR_DEVFNS 256 =20 @@ -419,6 +421,8 @@ int aer_get_device_error_info(struct pci_dev *dev, stru= ct aer_err_info *info); void aer_print_error(struct pci_dev *dev, struct aer_err_info *info); #endif /* CONFIG_PCIEAER */ =20 +int pcie_read_tlp_log(struct pci_dev *dev, int where, struct pcie_tlp_log = *log); + #ifdef CONFIG_PCIEPORTBUS /* Cached RCEC Endpoint Association */ struct rcec_ea { diff --git a/include/linux/aer.h b/include/linux/aer.h index 4b97f38f3fcf..190a0a2061cd 100644 --- a/include/linux/aer.h +++ b/include/linux/aer.h @@ -37,8 +37,6 @@ struct aer_capability_regs { u16 uncor_err_source; }; =20 -int pcie_read_tlp_log(struct pci_dev *dev, int where, struct pcie_tlp_log = *log); - #if defined(CONFIG_PCIEAER) int pci_aer_clear_nonfatal_status(struct pci_dev *dev); int pcie_aer_is_native(struct pci_dev *dev); --=20 2.39.2 From nobody Sun Dec 14 19:15:49 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.20]) (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 884621635A9; Fri, 10 May 2024 10:07:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.20 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335681; cv=none; b=CuiVkg4nHAJHVTgOLemMNRhJjxvW2YLR5i8iiRQY/YI8x2V5hGrO5GQ7MCLM327EbfVGD3GsYMWJ9rxOfsA30s4oFw4MrSTj9Pgcu5wHdJQQBRjUsiosA1xuwmWl/P4PdnQLCGkogWHXUemMEVs/YrdUWuwLYLsBQnqKLe/6Qsk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335681; c=relaxed/simple; bh=8lcN3GvS4xT+weTctxWkQ4vlzKc0rZNrscZi4UP5ads=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=pi1mImfguPzzerXKtZEz4kFCSvAAzZ01ELHI+ElT8UtwI21t4jibZ2PN/7CphI9cOU6euJ6dYTlFoYwAvrIQDF+48HhLUE7tdeEJaZmIHO3sZWUr6B6odnaaxDtpDqm9q/4DS2MlaTzudebcu3Mt+K0E+vkD206PsarlrYEDrDY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=AYNlnFvy; arc=none smtp.client-ip=198.175.65.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="AYNlnFvy" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1715335680; x=1746871680; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=8lcN3GvS4xT+weTctxWkQ4vlzKc0rZNrscZi4UP5ads=; b=AYNlnFvyrNPO3JBPDOynmuPpaJfEjx295/lkqqNGcCikTHqJSOCD6/OI S4BnHoNZl5ZHgyYGjfWJK63KteF6D+EH926IZns1jHSu7P/VVsiLIpue0 QltkBBr+MM997q+0JYgsQpujC1eSvn3Iy4Eo3LmM5K7DPB/PeoLw7cqBU dYlh/SbMRkKoVCaeZ055SRYOMIA1sBy/DW67Q/p/CUOqVkclBDaxAMyZX QT7EX+5gb2yo2l2G1eD9eh5XUgkhTIo9Z0wIG43YcjguxgdfT3NtC35Gr 7wO/sud21kFz74+1huz0KvDWUOTZThPQGYEjnFP9zo3M5bbsyKCLk6mhw Q==; X-CSE-ConnectionGUID: hA53SGAPRBSrkNqcTMXv5w== X-CSE-MsgGUID: /3rkEyyETzeAgtGvFOupvQ== X-IronPort-AV: E=McAfee;i="6600,9927,11068"; a="11144848" X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="11144848" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:07:59 -0700 X-CSE-ConnectionGUID: y5H58zCzR4euTLi5HtuVjA== X-CSE-MsgGUID: TUNcp/VlQFSLPdoCTvFmDg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="29588305" Received: from ijarvine-desk1.ger.corp.intel.com (HELO localhost) ([10.245.247.85]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:07:56 -0700 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Mahesh J Salgaonkar , Oliver O'Halloran , Lukas Wunner , linux-kernel@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org, =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= Subject: [PATCH v4 2/7] PCI: Move TLP Log handling to own file Date: Fri, 10 May 2024 13:07:25 +0300 Message-Id: <20240510100730.18805-3-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> References: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> 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 TLP Log is PCIe feature and is processed only by AER and DPC. Configwise, DPC depends AER being enabled. In lack of better place, the TLP Log handling code was initially placed into pci.c but it can be easily placed in a separate file. Move TLP Log handling code to own file under pcie/ subdirectory and include it only when AER is enabled. Signed-off-by: Ilpo J=C3=A4rvinen --- drivers/pci/pci.c | 27 --------------------------- drivers/pci/pci.h | 2 +- drivers/pci/pcie/Makefile | 2 +- drivers/pci/pcie/tlp.c | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 29 deletions(-) create mode 100644 drivers/pci/pcie/tlp.c diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 54ab1d6b8e53..2cc875f60fef 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -1066,33 +1066,6 @@ static void pci_enable_acs(struct pci_dev *dev) pci_disable_acs_redir(dev); } =20 -/** - * pcie_read_tlp_log - read TLP Header Log - * @dev: PCIe device - * @where: PCI Config offset of TLP Header Log - * @tlp_log: TLP Log structure to fill - * - * Fill @tlp_log from TLP Header Log registers, e.g., AER or DPC. - * - * Return: 0 on success and filled TLP Log structure, <0 on error. - */ -int pcie_read_tlp_log(struct pci_dev *dev, int where, - struct pcie_tlp_log *tlp_log) -{ - int i, ret; - - memset(tlp_log, 0, sizeof(*tlp_log)); - - for (i =3D 0; i < 4; i++) { - ret =3D pci_read_config_dword(dev, where + i * 4, - &tlp_log->dw[i]); - if (ret) - return pcibios_err_to_errno(ret); - } - - return 0; -} - /** * pci_restore_bars - restore a device's BAR values (e.g. after wake-up) * @dev: PCI device to have its BARs restored diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 9c968df86a92..0e9917f8bf3f 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -419,9 +419,9 @@ struct aer_err_info { =20 int aer_get_device_error_info(struct pci_dev *dev, struct aer_err_info *in= fo); void aer_print_error(struct pci_dev *dev, struct aer_err_info *info); -#endif /* CONFIG_PCIEAER */ =20 int pcie_read_tlp_log(struct pci_dev *dev, int where, struct pcie_tlp_log = *log); +#endif /* CONFIG_PCIEAER */ =20 #ifdef CONFIG_PCIEPORTBUS /* Cached RCEC Endpoint Association */ diff --git a/drivers/pci/pcie/Makefile b/drivers/pci/pcie/Makefile index 6461aa93fe76..591ef3177777 100644 --- a/drivers/pci/pcie/Makefile +++ b/drivers/pci/pcie/Makefile @@ -7,7 +7,7 @@ pcieportdrv-y :=3D portdrv.o rcec.o obj-$(CONFIG_PCIEPORTBUS) +=3D pcieportdrv.o =20 obj-y +=3D aspm.o -obj-$(CONFIG_PCIEAER) +=3D aer.o err.o +obj-$(CONFIG_PCIEAER) +=3D aer.o err.o tlp.o obj-$(CONFIG_PCIEAER_INJECT) +=3D aer_inject.o obj-$(CONFIG_PCIE_PME) +=3D pme.o obj-$(CONFIG_PCIE_DPC) +=3D dpc.o diff --git a/drivers/pci/pcie/tlp.c b/drivers/pci/pcie/tlp.c new file mode 100644 index 000000000000..3f053cc62290 --- /dev/null +++ b/drivers/pci/pcie/tlp.c @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * PCIe TLP Log handling + * + * Copyright (C) 2024 Intel Corporation + */ + +#include +#include +#include + +#include "../pci.h" + +/** + * pcie_read_tlp_log - read TLP Header Log + * @dev: PCIe device + * @where: PCI Config offset of TLP Header Log + * @tlp_log: TLP Log structure to fill + * + * Fill @tlp_log from TLP Header Log registers, e.g., AER or DPC. + * + * Return: 0 on success and filled TLP Log structure, <0 on error. + */ +int pcie_read_tlp_log(struct pci_dev *dev, int where, + struct pcie_tlp_log *tlp_log) +{ + int i, ret; + + memset(tlp_log, 0, sizeof(*tlp_log)); + + for (i =3D 0; i < 4; i++) { + ret =3D pci_read_config_dword(dev, where + i * 4, + &tlp_log->dw[i]); + if (ret) + return pcibios_err_to_errno(ret); + } + + return 0; +} --=20 2.39.2 From nobody Sun Dec 14 19:15:49 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) (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 084451635A9; Fri, 10 May 2024 10:08:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335688; cv=none; b=Zu7pVHlR57q5xsGqLYCDULEzkhtexNj1Iz8GBB2vI5+SNIrIHOywMSz/idwtckIg0qonUXtEdmEzMAQB2wsbKF2BS859cflUu1F95sDgYGkWhnGRGVdRIrHeBo1iLCg1o/YQjyNtMs/Ge1PnUMo3v/fL2UQ7p8oZ0zQCMvklW8k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335688; c=relaxed/simple; bh=TVMIEcYV4lRuU2NwGaITevK1+8W4KKh6YOoRO/qra7M=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=EgyfXNKkf/p5XcJwt57fTFdJQD/AlRB5LeYx9DjBu2SfqJuAehCMN31GyxOwMgMgjcLIFe90UXHqvu5w5MHYAGjczOCzYeTtoDy5Lcb1Zwjvc47HzpzCsVlMh0GbkXvsMOTU0yZP80u5z0diVkosyUJejCfaLw1Uu400eDc9yd0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=IDBynAai; arc=none smtp.client-ip=192.198.163.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="IDBynAai" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1715335687; x=1746871687; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=TVMIEcYV4lRuU2NwGaITevK1+8W4KKh6YOoRO/qra7M=; b=IDBynAaii/KUwt2RmAHLrndOky546SImXrMzYfjr+EpImkPfZE3Ony+A WetsDXO3WcQhMQ0rJseyXc/C4PfXI9ml4HZvL1LhCY7k2cROBa/4/cx02 KAQ+08Uq9xCbIabq167PAFD6MBFKv390CuE54ClDgILmrMsAq1I5zEfh5 hoXTS4TtO2DOK2hJoVP0dPplpMDX4CA+5dROaCIhEmQbdq9+Ix4Gs4gfz TjUILlppRNYlcvwLHmmRTLpeJFS7hbRgYPNCCN1K6XJgEcujKrzckqlrR crMed61vDbx0QxSfBqDS4VcCy1raeUdIRcZc0C7i87LkvPgBEIAbtZayy g==; X-CSE-ConnectionGUID: Vym4ihDVRxqkee9wxjxYYg== X-CSE-MsgGUID: 5XQexlUyRrS49cv88cb7nw== X-IronPort-AV: E=McAfee;i="6600,9927,11068"; a="36687473" X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="36687473" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:08:06 -0700 X-CSE-ConnectionGUID: RV+ByP7IRaqW++iFvT79NQ== X-CSE-MsgGUID: TQZAEOqrR1u/FZX9fdQiBg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="29571396" Received: from ijarvine-desk1.ger.corp.intel.com (HELO localhost) ([10.245.247.85]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:08:05 -0700 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Mahesh J Salgaonkar , Oliver O'Halloran , Lukas Wunner , linux-kernel@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org, =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= Subject: [PATCH v4 3/7] PCI: Make pcie_read_tlp_log() signature same Date: Fri, 10 May 2024 13:07:26 +0300 Message-Id: <20240510100730.18805-4-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> References: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> 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 pcie_read_tlp_log()'s prototype and function signature diverged due to changes made while applying. Make the parameters of pcie_read_tlp_log() named identically. Signed-off-by: Ilpo J=C3=A4rvinen --- drivers/pci/pcie/tlp.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/pci/pcie/tlp.c b/drivers/pci/pcie/tlp.c index 3f053cc62290..2bf15749cd31 100644 --- a/drivers/pci/pcie/tlp.c +++ b/drivers/pci/pcie/tlp.c @@ -15,22 +15,21 @@ * pcie_read_tlp_log - read TLP Header Log * @dev: PCIe device * @where: PCI Config offset of TLP Header Log - * @tlp_log: TLP Log structure to fill + * @log: TLP Log structure to fill * - * Fill @tlp_log from TLP Header Log registers, e.g., AER or DPC. + * Fill @log from TLP Header Log registers, e.g., AER or DPC. * * Return: 0 on success and filled TLP Log structure, <0 on error. */ int pcie_read_tlp_log(struct pci_dev *dev, int where, - struct pcie_tlp_log *tlp_log) + struct pcie_tlp_log *log) { int i, ret; =20 - memset(tlp_log, 0, sizeof(*tlp_log)); + memset(log, 0, sizeof(*log)); =20 for (i =3D 0; i < 4; i++) { - ret =3D pci_read_config_dword(dev, where + i * 4, - &tlp_log->dw[i]); + ret =3D pci_read_config_dword(dev, where + i * 4, &log->dw[i]); if (ret) return pcibios_err_to_errno(ret); } --=20 2.39.2 From nobody Sun Dec 14 19:15:49 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) (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 ADC88165FC4; Fri, 10 May 2024 10:08:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335696; cv=none; b=stDqeP0n3ZBfWCfQG5urLxcGbuFwj75jsQFpHtcQTIoeIZaz6pGa1sKZ1T3Gsca1SGz2fA0afpxngwDv4r+VakSjIDbZxiFf4PCtYVxIJ6+WNhL930+d4EeZDSJ5OHcxe2W59bGrGeccdytevvmD0mZFRXOl0Nd6HLJtagH29mU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335696; c=relaxed/simple; bh=vrR9lSZtbojiA2EubTfEXC7NUqhoH2bBkEIK7kkkTFA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=rF8qjQrsgSuZR8YYcf5UkrAdXJGGu/lvs571DS/gtx+Chw4ABeNztfY3nTfTE4kXt1VJtYg/S3RbMFGl/E/claqtpunm1cLAFLNRM1/dhDm060oOh+N2DM4rOwvDmogWXcs8bX8/YGwvv2d932p6EAoeYTN2MfiQFZXdwjwKRmw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=dMdD1rT1; arc=none smtp.client-ip=192.198.163.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="dMdD1rT1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1715335694; x=1746871694; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vrR9lSZtbojiA2EubTfEXC7NUqhoH2bBkEIK7kkkTFA=; b=dMdD1rT1wCXjknL6u3kVdpgSWShI3n7smQ46V/Hc4ovqBPzSGZPiONL3 5JEhk0cE3kki0WMYUtK2o0JpbIW5mxfihjUAdLa+0YmAPmSWjbAbs/lAk 1Q3CxCmcid8xkYINBJ4fgm1x4OJybQjTMgj20y9OLWYoEGt+FEkVEYVpV qeU6KJ5aCNRU6OfulF5GE283ds9tkZccQGKUIp4pBhJziEMyJ/wd6+glO bnRnlqfjy9BxZMOGgJAPTlSXO7FE/kRFpXLVumZHffRcqF3cGZk3LcuX6 nYOSzljsLoeINxZX87dmhKOzPNHby8qzKfvxaiETI5BN8gVTxfzzdIJA8 Q==; X-CSE-ConnectionGUID: eesOHA6wTHqc0KQKKtpQUw== X-CSE-MsgGUID: 0PY78xEdRoKXbp9UAbU2Pg== X-IronPort-AV: E=McAfee;i="6600,9927,11068"; a="36687482" X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="36687482" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:08:14 -0700 X-CSE-ConnectionGUID: LCOPFPlFQIG/MpZZyDUn+A== X-CSE-MsgGUID: gs9lu6idT8WLMHgAx9nHtA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="29571419" Received: from ijarvine-desk1.ger.corp.intel.com (HELO localhost) ([10.245.247.85]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:08:12 -0700 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Mahesh J Salgaonkar , Oliver O'Halloran , Lukas Wunner , linux-kernel@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org, =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= Subject: [PATCH v4 4/7] PCI: Use unsigned int i in pcie_read_tlp_log() Date: Fri, 10 May 2024 13:07:27 +0300 Message-Id: <20240510100730.18805-5-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> References: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> 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 Loop variable i counting from 0 upwards does not need to be signed so make it unsigned int. Signed-off-by: Ilpo J=C3=A4rvinen --- drivers/pci/pcie/tlp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/pci/pcie/tlp.c b/drivers/pci/pcie/tlp.c index 2bf15749cd31..65ac7b5d8a87 100644 --- a/drivers/pci/pcie/tlp.c +++ b/drivers/pci/pcie/tlp.c @@ -24,7 +24,8 @@ int pcie_read_tlp_log(struct pci_dev *dev, int where, struct pcie_tlp_log *log) { - int i, ret; + unsigned int i; + int ret; =20 memset(log, 0, sizeof(*log)); =20 --=20 2.39.2 From nobody Sun Dec 14 19:15:49 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.11]) (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 DBEFA165FC4; Fri, 10 May 2024 10:08:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.11 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335706; cv=none; b=YaL91t5IpmXUgp07fwVJa4IdIlwI87JCs+rxyp7KJaUXGh2Df5Kka/r81IE1wvCelfSiqwj0X2CjvdGkx0GqJStMxMnUoHTB1CfWV9hTkIGdu12WTHVQFJWRG5bUC0Ue3zF/r246R/ZPUEgbV+46xQf0XOxIRwnxZho+rV6vo+k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335706; c=relaxed/simple; bh=ycAlJAFDIexTuV0gkyQkoIj4+wwZGM3l2xmJQx719nA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=L3Uhwcvpu2WXlXoyArAGf8+oGZqc8Gxv13igdSM1jQax/yi3YDnavK0P3Lc8cO160KeuvtNusWTVJ6M1RU99hC/9DsHmOXOu6URxl7ufDSpvNX5BiKOc2XRWi2aQeq1s/lsxm54UysorIn7nrLqlwnUcK38KK2iP1vFzquiWXhY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=ZXO54RaS; arc=none smtp.client-ip=198.175.65.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="ZXO54RaS" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1715335705; x=1746871705; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ycAlJAFDIexTuV0gkyQkoIj4+wwZGM3l2xmJQx719nA=; b=ZXO54RaSHwSxyReEQ7JuZSJXDe8h2Obz1L0iIXVu/AKjdZpxVg53mqKF 4hzyBS+fpjbDMWcFBohARhLZ0ZSFhivoe3NLDqPRWogOCcDaiimUN6RuP ADHBXKI8hAquoXc/dVYSk4+GtXKjsaFA1V8VOMiW5KlQe5kdSeW9sL4lx 1mX7oWIAy9uBvXZN3gTZLUpEXHQ9i/58hXUgD3ZMSuAo29MUqsg6BZN4F XHOME3PZJNyrwNt62q/NJ1q9oH1+QSsASnJSsvIsRe8n3NT5fLkXlFaR+ b/rvJwfPrZ79VA2VE0vT2Y7yLVDtaBz5/tFSQ30iKbwEzAbBqc5eDR68Z A==; X-CSE-ConnectionGUID: BMtCfJ4hQ/OSFxPa3QOPjg== X-CSE-MsgGUID: Mw797VzwSeWwfxSjyomkPw== X-IronPort-AV: E=McAfee;i="6600,9927,11068"; a="21884188" X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="21884188" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by orvoesa103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:08:23 -0700 X-CSE-ConnectionGUID: rFfR3aNcREWrwsQpH8kLlA== X-CSE-MsgGUID: ikeVDMsfRKOQLAyZAug4qg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="30125306" Received: from ijarvine-desk1.ger.corp.intel.com (HELO localhost) ([10.245.247.85]) by orviesa008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:08:21 -0700 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Mahesh J Salgaonkar , Oliver O'Halloran , Lukas Wunner , linux-kernel@vger.kernel.org Cc: linuxppc-dev@lists.ozlabs.org, =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= Subject: [PATCH v4 5/7] PCI: Store # of supported End-End TLP Prefixes Date: Fri, 10 May 2024 13:07:28 +0300 Message-Id: <20240510100730.18805-6-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> References: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> 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 eetlp_prefix_path in the struct pci_dev tells if End-End TLP Prefixes are supported by the path or not, the value is only calculated if CONFIG_PCI_PASID is set. The Max End-End TLP Prefixes field in the Device Capabilities Register 2 also tells how many (1-4) End-End TLP Prefixes are supported (PCIe r6 sec 7.5.3.15). The number of supported End-End Prefixes is useful for reading correct number of DWORDs from TLP Prefix Log register in AER capability (PCIe r6 sec 7.8.4.12). Replace eetlp_prefix_path with eetlp_prefix_max and determine the number of supported End-End Prefixes regardless of CONFIG_PCI_PASID so that an upcoming commit generalizing TLP Prefix Log register reading does not have to read extra DWORDs for End-End Prefixes that never will be there. Signed-off-by: Ilpo J=C3=A4rvinen --- drivers/pci/ats.c | 2 +- drivers/pci/probe.c | 14 +++++++++----- include/linux/pci.h | 2 +- include/uapi/linux/pci_regs.h | 1 + 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c index c570892b2090..e13433dcfc82 100644 --- a/drivers/pci/ats.c +++ b/drivers/pci/ats.c @@ -377,7 +377,7 @@ int pci_enable_pasid(struct pci_dev *pdev, int features) if (WARN_ON(pdev->pasid_enabled)) return -EBUSY; =20 - if (!pdev->eetlp_prefix_path && !pdev->pasid_no_tlp) + if (!pdev->eetlp_prefix_max && !pdev->pasid_no_tlp) return -EINVAL; =20 if (!pasid) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 1325fbae2f28..02035b005a53 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -2211,8 +2211,8 @@ static void pci_configure_relaxed_ordering(struct pci= _dev *dev) =20 static void pci_configure_eetlp_prefix(struct pci_dev *dev) { -#ifdef CONFIG_PCI_PASID struct pci_dev *bridge; + unsigned int eetlp_max; int pcie_type; u32 cap; =20 @@ -2224,15 +2224,19 @@ static void pci_configure_eetlp_prefix(struct pci_d= ev *dev) return; =20 pcie_type =3D pci_pcie_type(dev); + + eetlp_max =3D FIELD_GET(PCI_EXP_DEVCAP2_EE_PREFIX_MAX, cap); + /* 00b means 4 */ + eetlp_max =3D eetlp_max ?: 4; + if (pcie_type =3D=3D PCI_EXP_TYPE_ROOT_PORT || pcie_type =3D=3D PCI_EXP_TYPE_RC_END) - dev->eetlp_prefix_path =3D 1; + dev->eetlp_prefix_max =3D eetlp_max; else { bridge =3D pci_upstream_bridge(dev); - if (bridge && bridge->eetlp_prefix_path) - dev->eetlp_prefix_path =3D 1; + if (bridge && bridge->eetlp_prefix_max) + dev->eetlp_prefix_max =3D eetlp_max; } -#endif } =20 static void pci_configure_serr(struct pci_dev *dev) diff --git a/include/linux/pci.h b/include/linux/pci.h index 16493426a04f..29c51325b1d9 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -397,7 +397,7 @@ struct pci_dev { supported from root to here */ #endif unsigned int pasid_no_tlp:1; /* PASID works without TLP Prefix */ - unsigned int eetlp_prefix_path:1; /* End-to-End TLP Prefix */ + unsigned int eetlp_prefix_max:3; /* Max # of End-End TLP Prefixes, 0=3Dno= t supported */ =20 pci_channel_state_t error_state; /* Current connectivity state */ struct device dev; /* Generic device interface */ diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h index a39193213ff2..09e0c300c952 100644 --- a/include/uapi/linux/pci_regs.h +++ b/include/uapi/linux/pci_regs.h @@ -661,6 +661,7 @@ #define PCI_EXP_DEVCAP2_OBFF_MSG 0x00040000 /* New message signaling */ #define PCI_EXP_DEVCAP2_OBFF_WAKE 0x00080000 /* Re-use WAKE# for OBFF */ #define PCI_EXP_DEVCAP2_EE_PREFIX 0x00200000 /* End-End TLP Prefix */ +#define PCI_EXP_DEVCAP2_EE_PREFIX_MAX 0x00c00000 /* Max End-End TLP Prefi= xes */ #define PCI_EXP_DEVCTL2 0x28 /* Device Control 2 */ #define PCI_EXP_DEVCTL2_COMP_TIMEOUT 0x000f /* Completion Timeout Value */ #define PCI_EXP_DEVCTL2_COMP_TMOUT_DIS 0x0010 /* Completion Timeout Disab= le */ --=20 2.39.2 From nobody Sun Dec 14 19:15:49 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) (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 27DBB168AEE; Fri, 10 May 2024 10:08:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335713; cv=none; b=lgBYYvDemWS1AV/311sT6I9U3//tSf5zRIaSGT1PspJ9h6tXDG4LsXAHEeltJ6KQuv6MaeaCRkhl+KSxH9SkpvOMg2jYMIs8Hdy7iSYIU9af7TF5KUWb510PUaRGK0vjvVfidSyFCurF6iooNjqLE6fjkagymXqGjL3YgmSfwe8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335713; c=relaxed/simple; bh=Ln6A9FXjB49Xv4HQEV5WpRsUXQiV7GotPoymZGH7vfk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=tnMNtBvTEeZHd3AJp4hX1P6tD7ANxoZIZ25H6jTDfjBhOgvNe6M1Aqb1cyp/BqPgPMnYRbRTtonobLNQJiqz7BirlLeaZ4k4H15N4HV2wSecrlRM1XsCEpcic6H3a8byLYh24RtQHuOvQ/O6qUv66taGFo5l30r+6/nXXrrEMWg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=XcdXwBxf; arc=none smtp.client-ip=192.198.163.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="XcdXwBxf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1715335712; x=1746871712; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Ln6A9FXjB49Xv4HQEV5WpRsUXQiV7GotPoymZGH7vfk=; b=XcdXwBxfw9H+eKhSU7NurhIRc/CAUDLwD8ktS9VvkLPL7I/Oz7jAu3zS +je4ysm85xiuPK/TsO4vj11M1AA1wTFw+Zkshwp07xp5a6N+WsMuBiy1X mdBwJ/dhkeqX/pNgdNpFv2ViwybPnDdXunycfcnmQLAHNOuFKD9NHoHiz bQqyOf6kHLMDcuRD5LCRkDLniUBdL2cYVjaSXdkrTurCa2mHkLYs3a9GV pedYkRANax5BxllHVDTotbD6JtG8suRDcLS6i1JIF+Rsw7dAe7q9RIJq7 /jfka5GqiuuIiGSwgIhuQMS7SXUvUKTHbW6bac1/eoUHl01jhVxh3g+wa A==; X-CSE-ConnectionGUID: 992GB+VkSZe8N0rmUTMesQ== X-CSE-MsgGUID: P2FGjAH1Ru+IHbK5x7X8BQ== X-IronPort-AV: E=McAfee;i="6600,9927,11068"; a="36687506" X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="36687506" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:08:31 -0700 X-CSE-ConnectionGUID: semGJcXgSAGBGRvllMhlnA== X-CSE-MsgGUID: ewHx2XrGRFiE/EA+6Pp2LQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="29571482" Received: from ijarvine-desk1.ger.corp.intel.com (HELO localhost) ([10.245.247.85]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:08:30 -0700 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Mahesh J Salgaonkar , Oliver O'Halloran , Lukas Wunner , linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= Subject: [PATCH v4 6/7] PCI: Add TLP Prefix reading into pcie_read_tlp_log() Date: Fri, 10 May 2024 13:07:29 +0300 Message-Id: <20240510100730.18805-7-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> References: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> 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 pcie_read_tlp_log() handles only 4 Header Log DWORDs but TLP Prefix Log (PCIe r6.1 secs 7.8.4.12 & 7.9.14.13) may also be present. Generalize pcie_read_tlp_log() and struct pcie_tlp_log to handle also TLP Prefix Log. The relevant registers are formatted identically in AER and DPC Capability, but has these variations: a) The offsets of TLP Prefix Log registers vary. b) DPC RP PIO TLP Prefix Log register can be < 4 DWORDs. Therefore callers must pass the offset of the TLP Prefix Log register and the entire length to pcie_read_tlp_log() to be able to read the correct number of TLP Prefix DWORDs from the correct offset. Signed-off-by: Ilpo J=C3=A4rvinen --- drivers/pci/pci.h | 5 +++- drivers/pci/pcie/aer.c | 4 ++- drivers/pci/pcie/dpc.c | 13 +++++----- drivers/pci/pcie/tlp.c | 47 +++++++++++++++++++++++++++++++---- include/linux/aer.h | 1 + include/uapi/linux/pci_regs.h | 1 + 6 files changed, 57 insertions(+), 14 deletions(-) diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 0e9917f8bf3f..3d9034d89be8 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -420,7 +420,10 @@ struct aer_err_info { int aer_get_device_error_info(struct pci_dev *dev, struct aer_err_info *in= fo); void aer_print_error(struct pci_dev *dev, struct aer_err_info *info); =20 -int pcie_read_tlp_log(struct pci_dev *dev, int where, struct pcie_tlp_log = *log); +int pcie_read_tlp_log(struct pci_dev *dev, int where, int where2, + unsigned int tlp_len, struct pcie_tlp_log *log); +unsigned int aer_tlp_log_len(struct pci_dev *dev); +unsigned int dpc_tlp_log_len(struct pci_dev *dev); #endif /* CONFIG_PCIEAER */ =20 #ifdef CONFIG_PCIEPORTBUS diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index ac6293c24976..ecc1dea5a208 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -1245,7 +1245,9 @@ int aer_get_device_error_info(struct pci_dev *dev, st= ruct aer_err_info *info) =20 if (info->status & AER_LOG_TLP_MASKS) { info->tlp_header_valid =3D 1; - pcie_read_tlp_log(dev, aer + PCI_ERR_HEADER_LOG, &info->tlp); + pcie_read_tlp_log(dev, aer + PCI_ERR_HEADER_LOG, + aer + PCI_ERR_PREFIX_LOG, + aer_tlp_log_len(dev), &info->tlp); } } =20 diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c index a668820696dc..5056cc6961ec 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -190,7 +190,7 @@ pci_ers_result_t dpc_reset_link(struct pci_dev *pdev) static void dpc_process_rp_pio_error(struct pci_dev *pdev) { u16 cap =3D pdev->dpc_cap, dpc_status, first_error; - u32 status, mask, sev, syserr, exc, log, prefix; + u32 status, mask, sev, syserr, exc, log; struct pcie_tlp_log tlp_log; int i; =20 @@ -217,20 +217,19 @@ static void dpc_process_rp_pio_error(struct pci_dev *= pdev) =20 if (pdev->dpc_rp_log_size < 4) goto clear_status; - pcie_read_tlp_log(pdev, cap + PCI_EXP_DPC_RP_PIO_HEADER_LOG, &tlp_log); + pcie_read_tlp_log(pdev, cap + PCI_EXP_DPC_RP_PIO_HEADER_LOG, + cap + PCI_EXP_DPC_RP_PIO_TLPPREFIX_LOG, + dpc_tlp_log_len(pdev), &tlp_log); pci_err(pdev, "TLP Header: %#010x %#010x %#010x %#010x\n", tlp_log.dw[0], tlp_log.dw[1], tlp_log.dw[2], tlp_log.dw[3]); + for (i =3D 0; i < pdev->dpc_rp_log_size - 5; i++) + pci_err(pdev, "TLP Prefix Header: dw%d, %#010x\n", i, tlp_log.prefix[i]); =20 if (pdev->dpc_rp_log_size < 5) goto clear_status; pci_read_config_dword(pdev, cap + PCI_EXP_DPC_RP_PIO_IMPSPEC_LOG, &log); pci_err(pdev, "RP PIO ImpSpec Log %#010x\n", log); =20 - for (i =3D 0; i < pdev->dpc_rp_log_size - 5; i++) { - pci_read_config_dword(pdev, - cap + PCI_EXP_DPC_RP_PIO_TLPPREFIX_LOG + i * 4, &prefix); - pci_err(pdev, "TLP Prefix Header: dw%d, %#010x\n", i, prefix); - } clear_status: pci_write_config_dword(pdev, cap + PCI_EXP_DPC_RP_PIO_STATUS, status); } diff --git a/drivers/pci/pcie/tlp.c b/drivers/pci/pcie/tlp.c index 65ac7b5d8a87..3615ca520c9a 100644 --- a/drivers/pci/pcie/tlp.c +++ b/drivers/pci/pcie/tlp.c @@ -11,26 +11,63 @@ =20 #include "../pci.h" =20 +/** + * aer_tlp_log_len - Calculates AER Capability TLP Header/Prefix Log length + * @dev: PCIe device + * + * Return: TLP Header/Prefix Log length + */ +unsigned int aer_tlp_log_len(struct pci_dev *dev) +{ + return 4 + dev->eetlp_prefix_max; +} + +/** + * dpc_tlp_log_len - Calculates DPC RP PIO TLP Header/Prefix Log length + * @dev: PCIe device + * + * Return: TLP Header/Prefix Log length + */ +unsigned int dpc_tlp_log_len(struct pci_dev *pdev) +{ + /* Remove ImpSpec Log register from the count */ + if (pdev->dpc_rp_log_size >=3D 5) + return pdev->dpc_rp_log_size - 1; + + return pdev->dpc_rp_log_size; +} + /** * pcie_read_tlp_log - read TLP Header Log * @dev: PCIe device * @where: PCI Config offset of TLP Header Log + * @where2: PCI Config offset of TLP Prefix Log + * @tlp_len: TLP Log length (Header Log + TLP Prefix Log in DWORDs) * @log: TLP Log structure to fill * * Fill @log from TLP Header Log registers, e.g., AER or DPC. * * Return: 0 on success and filled TLP Log structure, <0 on error. */ -int pcie_read_tlp_log(struct pci_dev *dev, int where, - struct pcie_tlp_log *log) +int pcie_read_tlp_log(struct pci_dev *dev, int where, int where2, + unsigned int tlp_len, struct pcie_tlp_log *log) { unsigned int i; - int ret; + int off, ret; + u32 *to; =20 memset(log, 0, sizeof(*log)); =20 - for (i =3D 0; i < 4; i++) { - ret =3D pci_read_config_dword(dev, where + i * 4, &log->dw[i]); + for (i =3D 0; i < tlp_len; i++) { + if (i < 4) { + off =3D where + i * 4; + to =3D &log->dw[i]; + } else { + off =3D where2 + (i - 4) * 4; + to =3D &log->prefix[i - 4]; + } + + ret =3D pci_read_config_dword(dev, off, to); if (ret) return pcibios_err_to_errno(ret); } diff --git a/include/linux/aer.h b/include/linux/aer.h index 190a0a2061cd..dc498adaa1c8 100644 --- a/include/linux/aer.h +++ b/include/linux/aer.h @@ -20,6 +20,7 @@ struct pci_dev; =20 struct pcie_tlp_log { u32 dw[4]; + u32 prefix[4]; }; =20 struct aer_capability_regs { diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h index 09e0c300c952..cf7a07fa4a3b 100644 --- a/include/uapi/linux/pci_regs.h +++ b/include/uapi/linux/pci_regs.h @@ -803,6 +803,7 @@ #define PCI_ERR_ROOT_FATAL_RCV 0x00000040 /* Fatal Received */ #define PCI_ERR_ROOT_AER_IRQ 0xf8000000 /* Advanced Error Interrupt Mess= age Number */ #define PCI_ERR_ROOT_ERR_SRC 0x34 /* Error Source Identification */ +#define PCI_ERR_PREFIX_LOG 0x38 /* TLP Prefix LOG Register (up to 16 bytes= ) */ =20 /* Virtual Channel */ #define PCI_VC_PORT_CAP1 0x04 --=20 2.39.2 From nobody Sun Dec 14 19:15:49 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) (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 712F5168AF9; Fri, 10 May 2024 10:08:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.9 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335722; cv=none; b=KXIQOP7xp05UhGA8v2ARGv6kF+aF72x52m3+NZJFvsWQRU9VQuxzKWCctSZxen/DQmvUPTJ+JxIYRbBP9eu9S9rK9pnlot7xBdSkcL6z45sykFpxcYXuvaRgBl4QwWtgt3po5GU2/aHo1GTSvxe9hBrEVdHSMxtIq08sATquceg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715335722; c=relaxed/simple; bh=pYTxNr/L4Gjfg/Z/BGNiuJOEbWyvLqpfs+1c7rEX78Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=orWnoJ6+VLIHascnHtThYYJ8H6/soPW/foxq2Q228YhymdO2iZmcJG2rfiNc9rDXUG8xH/qq0fXW72BbRUyqRApiuf26yD4f63AVKDymOP4VeZlMwAWcR9o692phP9MocGrCP5NyxRSAsReHUGQnGUbf3/khKC4EPGDZ97zGgB0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=koNvEGm2; arc=none smtp.client-ip=198.175.65.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="koNvEGm2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1715335722; x=1746871722; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=pYTxNr/L4Gjfg/Z/BGNiuJOEbWyvLqpfs+1c7rEX78Q=; b=koNvEGm2YeleaqGpq7O3ubdIT6hALS7b8HJyMqy55sYlvXkI3G3RpBtA +ap0YVi9Ini9Nhz7O05GoGObS4inJAEE7TR+RMH2dlip+r/xGZ3vuVb+a BJWPv74nW9j1lq8vVcmnwxp2TpumUFVDGnepImy5ef0QXl/aRctR7yTMR k8m96cM5Kzxn1zaa7Jl3Ltn2cqY0pKuS3poqHpEOsp/ZpxcuY3TyYwuKa THguW5y592NpT7SrzXpPN6Adqtcuut66WnqNuO7eDsI91j1Q2Ny63gYPR R21rv5ifSAu2Gu+B+C8glF2ODiugbACbEjfN4I7mnH/iVmEoi4KyPuSpB Q==; X-CSE-ConnectionGUID: tLt/khsbTL+kDMaSAJ/3Ew== X-CSE-MsgGUID: MnacxkrfTpucpWzJuESFkA== X-IronPort-AV: E=McAfee;i="6600,9927,11068"; a="33819873" X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="33819873" Received: from fmviesa008.fm.intel.com ([10.60.135.148]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:08:41 -0700 X-CSE-ConnectionGUID: ZYrlwfHdSGe7z9FmAwQgvQ== X-CSE-MsgGUID: F/V7B8E1RuWHq3yMYoA0dw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,150,1712646000"; d="scan'208";a="29511653" Received: from ijarvine-desk1.ger.corp.intel.com (HELO localhost) ([10.245.247.85]) by fmviesa008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2024 03:08:37 -0700 From: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= To: linux-pci@vger.kernel.org, Bjorn Helgaas , Mahesh J Salgaonkar , Oliver O'Halloran , Lukas Wunner , linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= Subject: [PATCH v4 7/7] PCI: Create helper to print TLP Header and Prefix Log Date: Fri, 10 May 2024 13:07:30 +0300 Message-Id: <20240510100730.18805-8-ilpo.jarvinen@linux.intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> References: <20240510100730.18805-1-ilpo.jarvinen@linux.intel.com> 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 Add pcie_print_tlp_log() helper to print TLP Header and Prefix Log. Print End-End Prefixes only if they are non-zero. Consolidate the few places which currently print TLP using custom formatting. The first attempt used pr_cont() instead of building a string first but it turns out pr_cont() is not compatible with pci_err() and prints on a separate line. When I asked about this, Andy Shevchenko suggested pr_cont() should not be used in the first place (to eventually get rid of it) so pr_cont() is now replaced with building the string first. Signed-off-by: Ilpo J=C3=A4rvinen --- drivers/pci/pci.h | 2 ++ drivers/pci/pcie/aer.c | 10 ++-------- drivers/pci/pcie/dpc.c | 5 +---- drivers/pci/pcie/tlp.c | 31 +++++++++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 3d9034d89be8..bf13d2fc4bb7 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -424,6 +424,8 @@ int pcie_read_tlp_log(struct pci_dev *dev, int where, i= nt where2, unsigned int tlp_len, struct pcie_tlp_log *log); unsigned int aer_tlp_log_len(struct pci_dev *dev); unsigned int dpc_tlp_log_len(struct pci_dev *dev); +void pcie_print_tlp_log(const struct pci_dev *dev, + const struct pcie_tlp_log *log, const char *pfx); #endif /* CONFIG_PCIEAER */ =20 #ifdef CONFIG_PCIEPORTBUS diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index ecc1dea5a208..efb9e728fe94 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c @@ -664,12 +664,6 @@ static void pci_rootport_aer_stats_incr(struct pci_dev= *pdev, } } =20 -static void __print_tlp_header(struct pci_dev *dev, struct pcie_tlp_log *t) -{ - pci_err(dev, " TLP Header: %08x %08x %08x %08x\n", - t->dw[0], t->dw[1], t->dw[2], t->dw[3]); -} - static void __aer_print_error(struct pci_dev *dev, struct aer_err_info *info) { @@ -724,7 +718,7 @@ void aer_print_error(struct pci_dev *dev, struct aer_er= r_info *info) __aer_print_error(dev, info); =20 if (info->tlp_header_valid) - __print_tlp_header(dev, &info->tlp); + pcie_print_tlp_log(dev, &info->tlp, " "); =20 out: if (info->id && info->error_dev_num > 1 && info->id =3D=3D id) @@ -796,7 +790,7 @@ void pci_print_aer(struct pci_dev *dev, int aer_severit= y, aer->uncor_severity); =20 if (tlp_header_valid) - __print_tlp_header(dev, &aer->header_log); + pcie_print_tlp_log(dev, &aer->header_log, " "); =20 trace_aer_event(dev_name(&dev->dev), (status & ~mask), aer_severity, tlp_header_valid, &aer->header_log); diff --git a/drivers/pci/pcie/dpc.c b/drivers/pci/pcie/dpc.c index 5056cc6961ec..598f74384471 100644 --- a/drivers/pci/pcie/dpc.c +++ b/drivers/pci/pcie/dpc.c @@ -220,10 +220,7 @@ static void dpc_process_rp_pio_error(struct pci_dev *p= dev) pcie_read_tlp_log(pdev, cap + PCI_EXP_DPC_RP_PIO_HEADER_LOG, cap + PCI_EXP_DPC_RP_PIO_TLPPREFIX_LOG, dpc_tlp_log_len(pdev), &tlp_log); - pci_err(pdev, "TLP Header: %#010x %#010x %#010x %#010x\n", - tlp_log.dw[0], tlp_log.dw[1], tlp_log.dw[2], tlp_log.dw[3]); - for (i =3D 0; i < pdev->dpc_rp_log_size - 5; i++) - pci_err(pdev, "TLP Prefix Header: dw%d, %#010x\n", i, tlp_log.prefix[i]); + pcie_print_tlp_log(pdev, &tlp_log, ""); =20 if (pdev->dpc_rp_log_size < 5) goto clear_status; diff --git a/drivers/pci/pcie/tlp.c b/drivers/pci/pcie/tlp.c index 3615ca520c9a..59a28485696f 100644 --- a/drivers/pci/pcie/tlp.c +++ b/drivers/pci/pcie/tlp.c @@ -6,6 +6,7 @@ */ =20 #include +#include #include #include =20 @@ -74,3 +75,33 @@ int pcie_read_tlp_log(struct pci_dev *dev, int where, in= t where2, =20 return 0; } + +/** + * pcie_print_tlp_log - Print TLP Header / Prefix Log contents + * @dev: PCIe device + * @log: TLP Log structure + * @pfx: String prefix (for print out indentation) + * + * Prints TLP Header and Prefix Log information held by @log. + */ +void pcie_print_tlp_log(const struct pci_dev *dev, + const struct pcie_tlp_log *log, const char *pfx) +{ + char buf[(10 + 1) * (4 + ARRAY_SIZE(log->prefix)) + 14 + 1]; + unsigned int i; + int len; + + len =3D scnprintf(buf, sizeof(buf), "%#010x %#010x %#010x %#010x", + log->dw[0], log->dw[1], log->dw[2], log->dw[3]); + + if (log->prefix[0]) + len +=3D scnprintf(buf + len, sizeof(buf) - len, " E-E Prefixes:"); + for (i =3D 0; i < ARRAY_SIZE(log->prefix); i++) { + if (!log->prefix[i]) + break; + len +=3D scnprintf(buf + len, sizeof(buf) - len, + " %#010x", log->prefix[i]); + } + + pci_err(dev, "%sTLP Header: %s\n", pfx, buf); +} --=20 2.39.2