Message ID | 20240531213841.3246055-2-wei.huang2@amd.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | PCIe TPH and cache direct injection support | expand |
On Fri, 31 May 2024 16:38:33 -0500 Wei Huang <wei.huang2@amd.com> wrote: > This patch implements the framework for PCIe TPH support. It introduces > tph.c source file, along with CONFIG_PCIE_TPH, to Linux PCIe subsystem. > A new member, named tph_cap, is also introduced in pci_dev to cache TPH > capability offset. > > Co-developed-by: Eric Van Tassell <Eric.VanTassell@amd.com> > Signed-off-by: Eric Van Tassell <Eric.VanTassell@amd.com> > Signed-off-by: Wei Huang <wei.huang2@amd.com> > Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com> > Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com> > Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com> One trivial comment inline. With that fixed. Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > diff --git a/drivers/pci/pcie/tph.c b/drivers/pci/pcie/tph.c > new file mode 100644 > index 000000000000..5f0cc06b74bb > --- /dev/null > +++ b/drivers/pci/pcie/tph.c > @@ -0,0 +1,28 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * TPH (TLP Processing Hints) support > + * > + * Copyright (C) 2024 Advanced Micro Devices, Inc. > + * Eric Van Tassell <Eric.VanTassell@amd.com> > + * Wei Huang <wei.huang2@amd.com> > + */ > + > +#define pr_fmt(fmt) "TPH: " fmt > +#define dev_fmt pr_fmt > + > +#include <linux/acpi.h> > +#include <uapi/linux/pci_regs.h> > +#include <linux/kernel.h> > +#include <linux/errno.h> > +#include <linux/msi.h> > +#include <linux/pci.h> > +#include <linux/msi.h> > +#include <linux/pci-acpi.h> Introduce headers as you first use them. That way we can more easily see if there are unused ones in this list. > + > +#include "../pci.h" > + > +void pcie_tph_init(struct pci_dev *dev) > +{ > + dev->tph_cap = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_TPH); > +} > + > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c > index 15168881ec94..1f1ae55a5f83 100644 > --- a/drivers/pci/probe.c > +++ b/drivers/pci/probe.c > @@ -2484,6 +2484,7 @@ static void pci_init_capabilities(struct pci_dev *dev) > pci_dpc_init(dev); /* Downstream Port Containment */ > pci_rcec_init(dev); /* Root Complex Event Collector */ > pci_doe_init(dev); /* Data Object Exchange */ > + pcie_tph_init(dev); /* TLP Processing Hints */ > > pcie_report_downtraining(dev); > pci_init_reset_methods(dev); > diff --git a/include/linux/pci.h b/include/linux/pci.h > index 5bece7fd11f8..d75a88ec5136 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -530,6 +530,10 @@ struct pci_dev { > > /* These methods index pci_reset_fn_methods[] */ > u8 reset_methods[PCI_NUM_RESET_METHODS]; /* In priority order */ > + > +#ifdef CONFIG_PCIE_TPH > + u16 tph_cap; /* TPH capability offset */ > +#endif > }; > > static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
On Fri, May 31, 2024 at 04:38:33PM -0500, Wei Huang wrote: > This patch implements the framework for PCIe TPH support. It introduces > tph.c source file, along with CONFIG_PCIE_TPH, to Linux PCIe subsystem. > A new member, named tph_cap, is also introduced in pci_dev to cache TPH > capability offset. s/This patch implements/Implement/ s/It introduces/Introduce/ s/is also introduced/Add tph_cap .../ https://chris.beams.io/posts/git-commit/ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?id=v6.9#n94 > + This option adds support for PCIE TLP Processing Hints (TPH). > + TPH allows endpoint devices to provide optimization hints, such as > + desired caching behavior, for requests that target memory space. > + These hints, called steering tags, can empower the system hardware > + to optimize the utilization of platform resources. s/PCIE TLP/PCIe TLP/ to match context. > +++ b/drivers/pci/pcie/tph.c > +#define pr_fmt(fmt) "TPH: " fmt > +#define dev_fmt pr_fmt Add when used. > +void pcie_tph_init(struct pci_dev *dev) > +{ > + dev->tph_cap = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_TPH); > +} > + $ git am m/v2_20240531_wei_huang2_pcie_tph_and_cache_direct_injection_support.mbx Applying: PCI: Introduce PCIe TPH support framework .git/rebase-apply/patch:88: new blank line at EOF. + warning: 1 line adds whitespace errors.
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index fd44565c4756..b371b5b45f86 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -506,6 +506,12 @@ static inline int pci_iov_bus_range(struct pci_bus *bus) #endif /* CONFIG_PCI_IOV */ +#ifdef CONFIG_PCIE_TPH +void pcie_tph_init(struct pci_dev *dev); +#else +static inline void pcie_tph_init(struct pci_dev *dev) {} +#endif + #ifdef CONFIG_PCIE_PTM void pci_ptm_init(struct pci_dev *dev); void pci_save_ptm_state(struct pci_dev *dev); diff --git a/drivers/pci/pcie/Kconfig b/drivers/pci/pcie/Kconfig index 17919b99fa66..d22857325b3e 100644 --- a/drivers/pci/pcie/Kconfig +++ b/drivers/pci/pcie/Kconfig @@ -155,3 +155,13 @@ config PCIE_EDR the PCI Firmware Specification r3.2. Enable this if you want to support hybrid DPC model which uses both firmware and OS to implement DPC. + +config PCIE_TPH + bool "TLP Processing Hints" + default n + help + This option adds support for PCIE TLP Processing Hints (TPH). + TPH allows endpoint devices to provide optimization hints, such as + desired caching behavior, for requests that target memory space. + These hints, called steering tags, can empower the system hardware + to optimize the utilization of platform resources. diff --git a/drivers/pci/pcie/Makefile b/drivers/pci/pcie/Makefile index 6461aa93fe76..3542b42ea0b9 100644 --- a/drivers/pci/pcie/Makefile +++ b/drivers/pci/pcie/Makefile @@ -13,3 +13,4 @@ obj-$(CONFIG_PCIE_PME) += pme.o obj-$(CONFIG_PCIE_DPC) += dpc.o obj-$(CONFIG_PCIE_PTM) += ptm.o obj-$(CONFIG_PCIE_EDR) += edr.o +obj-$(CONFIG_PCIE_TPH) += tph.o diff --git a/drivers/pci/pcie/tph.c b/drivers/pci/pcie/tph.c new file mode 100644 index 000000000000..5f0cc06b74bb --- /dev/null +++ b/drivers/pci/pcie/tph.c @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * TPH (TLP Processing Hints) support + * + * Copyright (C) 2024 Advanced Micro Devices, Inc. + * Eric Van Tassell <Eric.VanTassell@amd.com> + * Wei Huang <wei.huang2@amd.com> + */ + +#define pr_fmt(fmt) "TPH: " fmt +#define dev_fmt pr_fmt + +#include <linux/acpi.h> +#include <uapi/linux/pci_regs.h> +#include <linux/kernel.h> +#include <linux/errno.h> +#include <linux/msi.h> +#include <linux/pci.h> +#include <linux/msi.h> +#include <linux/pci-acpi.h> + +#include "../pci.h" + +void pcie_tph_init(struct pci_dev *dev) +{ + dev->tph_cap = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_TPH); +} + diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 15168881ec94..1f1ae55a5f83 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -2484,6 +2484,7 @@ static void pci_init_capabilities(struct pci_dev *dev) pci_dpc_init(dev); /* Downstream Port Containment */ pci_rcec_init(dev); /* Root Complex Event Collector */ pci_doe_init(dev); /* Data Object Exchange */ + pcie_tph_init(dev); /* TLP Processing Hints */ pcie_report_downtraining(dev); pci_init_reset_methods(dev); diff --git a/include/linux/pci.h b/include/linux/pci.h index 5bece7fd11f8..d75a88ec5136 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -530,6 +530,10 @@ struct pci_dev { /* These methods index pci_reset_fn_methods[] */ u8 reset_methods[PCI_NUM_RESET_METHODS]; /* In priority order */ + +#ifdef CONFIG_PCIE_TPH + u16 tph_cap; /* TPH capability offset */ +#endif }; static inline struct pci_dev *pci_physfn(struct pci_dev *dev)