From 623b75859814ef8d25b09fd574668080821d3510 Mon Sep 17 00:00:00 2001 From: Alex Forencich Date: Tue, 15 Mar 2022 17:55:29 -0700 Subject: [PATCH] Print PCIe bridge information during driver load --- modules/mqnic/mqnic_main.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/modules/mqnic/mqnic_main.c b/modules/mqnic/mqnic_main.c index b3a2cbbba..c2168e22d 100644 --- a/modules/mqnic/mqnic_main.c +++ b/modules/mqnic/mqnic_main.c @@ -290,6 +290,7 @@ static int mqnic_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent int ret = 0; struct mqnic_dev *mqnic; struct device *dev = &pdev->dev; + struct pci_dev *bridge = pci_upstream_bridge(pdev); dev_info(dev, DRIVER_NAME " PCI probe"); dev_info(dev, " Vendor: 0x%04x", pdev->vendor); @@ -299,6 +300,7 @@ static int mqnic_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent dev_info(dev, " Class: 0x%06x", pdev->class); dev_info(dev, " PCI ID: %04x:%02x:%02x.%d", pci_domain_nr(pdev->bus), pdev->bus->number, PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn)); + if (pdev->pcie_cap) { u16 devctl; u32 lnkcap; @@ -325,9 +327,29 @@ static int mqnic_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent dev_info(dev, " No snoop: %s", devctl & PCI_EXP_DEVCTL_NOSNOOP_EN ? "enabled" : "disabled"); } + #ifdef CONFIG_NUMA dev_info(dev, " NUMA node: %d", pdev->dev.numa_node); #endif + + if (bridge) { + dev_info(dev, " PCI ID (bridge): %04x:%02x:%02x.%d", pci_domain_nr(bridge->bus), + bridge->bus->number, PCI_SLOT(bridge->devfn), PCI_FUNC(bridge->devfn)); + } + + if (bridge && bridge->pcie_cap) { + u32 lnkcap; + u16 lnksta; + + pci_read_config_dword(bridge, bridge->pcie_cap + PCI_EXP_LNKCAP, &lnkcap); + pci_read_config_word(bridge, bridge->pcie_cap + PCI_EXP_LNKSTA, &lnksta); + + dev_info(dev, " Link capability (bridge): gen %d x%d", + lnkcap & PCI_EXP_LNKCAP_SLS, (lnkcap & PCI_EXP_LNKCAP_MLW) >> 4); + dev_info(dev, " Link status (bridge): gen %d x%d", + lnksta & PCI_EXP_LNKSTA_CLS, (lnksta & PCI_EXP_LNKSTA_NLW) >> 4); + } + #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) pcie_print_link_status(pdev); #endif