mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-14 20:06:34 +07:00
26dca6dbd6
-----BEGIN PGP SIGNATURE----- iQJIBAABCgAyFiEEgMe7l+5h9hnxdsnuWYigwDrT+vwFAl40PWgUHGJoZWxnYWFz QGdvb2dsZS5jb20ACgkQWYigwDrT+vwclA/+Id/7Uc5S0r7xgFQRr3lbn0hHcx7f oBgmm6kGl8bu77MDiY32WLmPsp9e4BlK2M765cKQL5n20y8CzJ+kthZM8tZEDba4 pnrZnWZ0A2xaBKzJqqYDtCqAeP97noCs4zBLo3JCA6jYCYI5bkvmdMQRlRjTUofO tkenGE+vexaJsLB7ghNskL3xGMueXLtLf/hXvaC6WGbSI9/zUmliHDL53DoKDPRo /9TGYDMwItZz+BhmBJz8hAL4naQIhIcDk2mz7CzWkY9xDhCJ1yeEwFvtvJwq0uM2 Nmtq1g6yCB3sjlx+bRzrioLnouflztK1PGRbNugrMkR5XM9HIFmNwaDrqpU11ffA LQabMpbS3RWH3hbh4LYVMW13hbO+ld7/NG8jMFce2LHBWaGj6YejUQGdifz6vGRk JnDOgP19v5gWw08ibwkdfYzznPfMXp5IzFdJQFKhK+ugGDSJ8VeXiQ/pWtzghl3z P/puRw0BiL7ob/FUmhwn4J1Ytml7PZE+cJVN2l4C/CwKxR583GRUDgSHNL7Dky+o GcH9Tmjt4hQMNYRP01PACUmFYJwDfB+zgQ64a+uJsQwl/j+yfMnc1t/kqdM6yC9J GgkqLp989G/a3n9w5IC1P8aDYiwRqABvAFzlP9OZcIMUwmWbrhH175Qf6skKYIhH q9RKcLVXZdRS3mc= =fQ0E -----END PGP SIGNATURE----- Merge tag 'pci-v5.6-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci Pull PCI updates from Bjorn Helgaas: "Resource management: - Improve resource assignment for hot-added nested bridges, e.g., Thunderbolt (Nicholas Johnson) Power management: - Optionally print config space of devices before suspend (Chen Yu) - Increase D3 delay for AMD Ryzen5/7 XHCI controllers (Daniel Drake) Virtualization: - Generalize DMA alias quirks (James Sewart) - Add DMA alias quirk for PLX PEX NTB (James Sewart) - Fix IOV memory leak (Navid Emamdoost) AER: - Log which device prevents error recovery (Yicong Yang) Peer-to-peer DMA: - Whitelist Intel SkyLake-E (Armen Baloyan) Broadcom iProc host bridge driver: - Apply PAXC quirk whether driver is built-in or module (Wei Liu) Broadcom STB host bridge driver: - Add Broadcom STB PCIe host controller driver (Jim Quinlan) Intel Gateway SoC host bridge driver: - Add driver for Intel Gateway SoC (Dilip Kota) Intel VMD host bridge driver: - Add support for DMA aliases on other buses (Jon Derrick) - Remove dma_map_ops overrides (Jon Derrick) - Remove now-unused X86_DEV_DMA_OPS (Christoph Hellwig) NVIDIA Tegra host bridge driver: - Fix Tegra30 afi_pex2_ctrl register offset (Marcel Ziswiler) Panasonic UniPhier host bridge driver: - Remove module code since driver can't be built as a module (Masahiro Yamada) Qualcomm host bridge driver: - Add support for SDM845 PCIe controller (Bjorn Andersson) TI Keystone host bridge driver: - Fix "num-viewport" DT property error handling (Kishon Vijay Abraham I) - Fix link training retries initiation (Yurii Monakov) - Fix outbound region mapping (Yurii Monakov) Misc: - Add Switchtec Gen4 support (Kelvin Cao) - Add Switchtec Intercomm Notify and Upstream Error Containment support (Logan Gunthorpe) - Use dma_set_mask_and_coherent() since Switchtec supports 64-bit addressing (Wesley Sheng)" * tag 'pci-v5.6-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (60 commits) PCI: Allow adjust_bridge_window() to shrink resource if necessary PCI: Set resource size directly in adjust_bridge_window() PCI: Rename extend_bridge_window() to adjust_bridge_window() PCI: Rename extend_bridge_window() parameter PCI: Consider alignment of hot-added bridges when assigning resources PCI: Remove local variable usage in pci_bus_distribute_available_resources() PCI: Pass size + alignment to pci_bus_distribute_available_resources() PCI: Rename variables PCI: vmd: Add two VMD Device IDs PCI: Remove unnecessary braces PCI: brcmstb: Add MSI support PCI: brcmstb: Add Broadcom STB PCIe host controller driver x86/PCI: Remove X86_DEV_DMA_OPS PCI: vmd: Remove dma_map_ops overrides iommu/vt-d: Remove VMD child device sanity check iommu/vt-d: Use pci_real_dma_dev() for mapping PCI: Introduce pci_real_dma_dev() x86/PCI: Expose VMD's pci_dev in struct pci_sysdata x86/PCI: Add to_pci_sysdata() helper PCI/AER: Initialize aer_fifo ...
153 lines
3.5 KiB
C
153 lines
3.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_X86_PCI_H
|
|
#define _ASM_X86_PCI_H
|
|
|
|
#include <linux/mm.h> /* for struct page */
|
|
#include <linux/types.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/string.h>
|
|
#include <linux/scatterlist.h>
|
|
#include <linux/numa.h>
|
|
#include <asm/io.h>
|
|
#include <asm/memtype.h>
|
|
#include <asm/x86_init.h>
|
|
|
|
struct pci_sysdata {
|
|
int domain; /* PCI domain */
|
|
int node; /* NUMA node */
|
|
#ifdef CONFIG_ACPI
|
|
struct acpi_device *companion; /* ACPI companion device */
|
|
#endif
|
|
#ifdef CONFIG_X86_64
|
|
void *iommu; /* IOMMU private data */
|
|
#endif
|
|
#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
|
|
void *fwnode; /* IRQ domain for MSI assignment */
|
|
#endif
|
|
#if IS_ENABLED(CONFIG_VMD)
|
|
struct pci_dev *vmd_dev; /* VMD Device if in Intel VMD domain */
|
|
#endif
|
|
};
|
|
|
|
extern int pci_routeirq;
|
|
extern int noioapicquirk;
|
|
extern int noioapicreroute;
|
|
|
|
#ifdef CONFIG_PCI
|
|
|
|
static inline struct pci_sysdata *to_pci_sysdata(const struct pci_bus *bus)
|
|
{
|
|
return bus->sysdata;
|
|
}
|
|
|
|
#ifdef CONFIG_PCI_DOMAINS
|
|
static inline int pci_domain_nr(struct pci_bus *bus)
|
|
{
|
|
return to_pci_sysdata(bus)->domain;
|
|
}
|
|
|
|
static inline int pci_proc_domain(struct pci_bus *bus)
|
|
{
|
|
return pci_domain_nr(bus);
|
|
}
|
|
#endif
|
|
|
|
#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
|
|
static inline void *_pci_root_bus_fwnode(struct pci_bus *bus)
|
|
{
|
|
return to_pci_sysdata(bus)->fwnode;
|
|
}
|
|
|
|
#define pci_root_bus_fwnode _pci_root_bus_fwnode
|
|
#endif
|
|
|
|
#if IS_ENABLED(CONFIG_VMD)
|
|
static inline bool is_vmd(struct pci_bus *bus)
|
|
{
|
|
return to_pci_sysdata(bus)->vmd_dev != NULL;
|
|
}
|
|
#else
|
|
#define is_vmd(bus) false
|
|
#endif /* CONFIG_VMD */
|
|
|
|
/* Can be used to override the logic in pci_scan_bus for skipping
|
|
already-configured bus numbers - to be used for buggy BIOSes
|
|
or architectures with incomplete PCI setup by the loader */
|
|
|
|
extern unsigned int pcibios_assign_all_busses(void);
|
|
extern int pci_legacy_init(void);
|
|
#else
|
|
static inline int pcibios_assign_all_busses(void) { return 0; }
|
|
#endif
|
|
|
|
extern unsigned long pci_mem_start;
|
|
#define PCIBIOS_MIN_IO 0x1000
|
|
#define PCIBIOS_MIN_MEM (pci_mem_start)
|
|
|
|
#define PCIBIOS_MIN_CARDBUS_IO 0x4000
|
|
|
|
extern int pcibios_enabled;
|
|
void pcibios_scan_root(int bus);
|
|
|
|
struct irq_routing_table *pcibios_get_irq_routing_table(void);
|
|
int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq);
|
|
|
|
|
|
#define HAVE_PCI_MMAP
|
|
#define arch_can_pci_mmap_wc() pat_enabled()
|
|
#define ARCH_GENERIC_PCI_MMAP_RESOURCE
|
|
|
|
#ifdef CONFIG_PCI
|
|
extern void early_quirks(void);
|
|
#else
|
|
static inline void early_quirks(void) { }
|
|
#endif
|
|
|
|
extern void pci_iommu_alloc(void);
|
|
|
|
#ifdef CONFIG_PCI_MSI
|
|
/* implemented in arch/x86/kernel/apic/io_apic. */
|
|
struct msi_desc;
|
|
int native_setup_msi_irqs(struct pci_dev *dev, int nvec, int type);
|
|
void native_teardown_msi_irq(unsigned int irq);
|
|
void native_restore_msi_irqs(struct pci_dev *dev);
|
|
#else
|
|
#define native_setup_msi_irqs NULL
|
|
#define native_teardown_msi_irq NULL
|
|
#endif
|
|
|
|
/* generic pci stuff */
|
|
#include <asm-generic/pci.h>
|
|
|
|
#ifdef CONFIG_NUMA
|
|
/* Returns the node based on pci bus */
|
|
static inline int __pcibus_to_node(const struct pci_bus *bus)
|
|
{
|
|
return to_pci_sysdata(bus)->node;
|
|
}
|
|
|
|
static inline const struct cpumask *
|
|
cpumask_of_pcibus(const struct pci_bus *bus)
|
|
{
|
|
int node;
|
|
|
|
node = __pcibus_to_node(bus);
|
|
return (node == NUMA_NO_NODE) ? cpu_online_mask :
|
|
cpumask_of_node(node);
|
|
}
|
|
#endif
|
|
|
|
struct pci_setup_rom {
|
|
struct setup_data data;
|
|
uint16_t vendor;
|
|
uint16_t devid;
|
|
uint64_t pcilen;
|
|
unsigned long segment;
|
|
unsigned long bus;
|
|
unsigned long device;
|
|
unsigned long function;
|
|
uint8_t romdata[0];
|
|
};
|
|
|
|
#endif /* _ASM_X86_PCI_H */
|