Merge branch 'pci/misc' into next
* pci/misc: PCI: Enable access to non-standard VPD for Chelsio devices (cxgb3) PCI: Expand "VPD access disabled" quirk message PCI: pciehp: Remove loading message PCI: hotplug: Remove hotplug core message PCI: Remove service driver load/unload messages PCI/AER: Log AER IRQ when claiming Root Port PCI/AER: Log errors with PCI device, not PCIe service device PCI/AER: Remove unused version macros PCI/PME: Log PME IRQ when claiming Root Port PCI/PME: Drop unused support for PMEs from Root Complex Event Collectors PCI: Move config space size macros to pci_regs.h
This commit is contained in:
commit
c1f2e80c19
@ -23,6 +23,9 @@
|
|||||||
*
|
*
|
||||||
* Send feedback to <kristen.c.accardi@intel.com>
|
* Send feedback to <kristen.c.accardi@intel.com>
|
||||||
*
|
*
|
||||||
|
* Authors:
|
||||||
|
* Greg Kroah-Hartman <greg@kroah.com>
|
||||||
|
* Scott Murray <scottm@somanetworks.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/module.h> /* try_module_get & module_put */
|
#include <linux/module.h> /* try_module_get & module_put */
|
||||||
@ -50,15 +53,9 @@
|
|||||||
#define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME, ## arg)
|
#define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME, ## arg)
|
||||||
#define warn(format, arg...) printk(KERN_WARNING "%s: " format, MY_NAME, ## arg)
|
#define warn(format, arg...) printk(KERN_WARNING "%s: " format, MY_NAME, ## arg)
|
||||||
|
|
||||||
|
|
||||||
/* local variables */
|
/* local variables */
|
||||||
static bool debug;
|
static bool debug;
|
||||||
|
|
||||||
#define DRIVER_VERSION "0.5"
|
|
||||||
#define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Scott Murray <scottm@somanetworks.com>"
|
|
||||||
#define DRIVER_DESC "PCI Hot Plug PCI Core"
|
|
||||||
|
|
||||||
|
|
||||||
static LIST_HEAD(pci_hotplug_slot_list);
|
static LIST_HEAD(pci_hotplug_slot_list);
|
||||||
static DEFINE_MUTEX(pci_hp_mutex);
|
static DEFINE_MUTEX(pci_hp_mutex);
|
||||||
|
|
||||||
@ -534,7 +531,6 @@ static int __init pci_hotplug_init(void)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
device_initcall(pci_hotplug_init);
|
device_initcall(pci_hotplug_init);
|
||||||
|
@ -25,6 +25,10 @@
|
|||||||
*
|
*
|
||||||
* Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
|
* Send feedback to <greg@kroah.com>, <kristen.c.accardi@intel.com>
|
||||||
*
|
*
|
||||||
|
* Authors:
|
||||||
|
* Dan Zink <dan.zink@compaq.com>
|
||||||
|
* Greg Kroah-Hartman <greg@kroah.com>
|
||||||
|
* Dely Sy <dely.l.sy@intel.com>"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
@ -42,10 +46,6 @@ bool pciehp_poll_mode;
|
|||||||
int pciehp_poll_time;
|
int pciehp_poll_time;
|
||||||
static bool pciehp_force;
|
static bool pciehp_force;
|
||||||
|
|
||||||
#define DRIVER_VERSION "0.4"
|
|
||||||
#define DRIVER_AUTHOR "Dan Zink <dan.zink@compaq.com>, Greg Kroah-Hartman <greg@kroah.com>, Dely Sy <dely.l.sy@intel.com>"
|
|
||||||
#define DRIVER_DESC "PCI Express Hot Plug Controller Driver"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* not really modular, but the easiest way to keep compat with existing
|
* not really modular, but the easiest way to keep compat with existing
|
||||||
* bootargs behaviour is to continue using module_param here.
|
* bootargs behaviour is to continue using module_param here.
|
||||||
@ -333,7 +333,6 @@ static int __init pcied_init(void)
|
|||||||
|
|
||||||
retval = pcie_port_service_register(&hpdriver_portdrv);
|
retval = pcie_port_service_register(&hpdriver_portdrv);
|
||||||
dbg("pcie_port_service_register = %d\n", retval);
|
dbg("pcie_port_service_register = %d\n", retval);
|
||||||
info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
|
|
||||||
if (retval)
|
if (retval)
|
||||||
dbg("Failure to register service\n");
|
dbg("Failure to register service\n");
|
||||||
|
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
#ifndef DRIVERS_PCI_H
|
#ifndef DRIVERS_PCI_H
|
||||||
#define DRIVERS_PCI_H
|
#define DRIVERS_PCI_H
|
||||||
|
|
||||||
#define PCI_CFG_SPACE_SIZE 256
|
|
||||||
#define PCI_CFG_SPACE_EXP_SIZE 4096
|
|
||||||
|
|
||||||
#define PCI_FIND_CAP_TTL 48
|
#define PCI_FIND_CAP_TTL 48
|
||||||
|
|
||||||
extern const unsigned char pcie_link_speed[];
|
extern const unsigned char pcie_link_speed[];
|
||||||
|
@ -30,13 +30,6 @@
|
|||||||
#include "aerdrv.h"
|
#include "aerdrv.h"
|
||||||
#include "../../pci.h"
|
#include "../../pci.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* Version Information
|
|
||||||
*/
|
|
||||||
#define DRIVER_VERSION "v1.0"
|
|
||||||
#define DRIVER_AUTHOR "tom.l.nguyen@intel.com"
|
|
||||||
#define DRIVER_DESC "Root Port Advanced Error Reporting Driver"
|
|
||||||
|
|
||||||
static int aer_probe(struct pcie_device *dev);
|
static int aer_probe(struct pcie_device *dev);
|
||||||
static void aer_remove(struct pcie_device *dev);
|
static void aer_remove(struct pcie_device *dev);
|
||||||
static pci_ers_result_t aer_error_detected(struct pci_dev *dev,
|
static pci_ers_result_t aer_error_detected(struct pci_dev *dev,
|
||||||
@ -297,12 +290,12 @@ static int aer_probe(struct pcie_device *dev)
|
|||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
struct aer_rpc *rpc;
|
struct aer_rpc *rpc;
|
||||||
struct device *device = &dev->device;
|
struct device *device = &dev->port->dev;
|
||||||
|
|
||||||
/* Alloc rpc data structure */
|
/* Alloc rpc data structure */
|
||||||
rpc = aer_alloc_rpc(dev);
|
rpc = aer_alloc_rpc(dev);
|
||||||
if (!rpc) {
|
if (!rpc) {
|
||||||
dev_printk(KERN_DEBUG, device, "alloc rpc failed\n");
|
dev_printk(KERN_DEBUG, device, "alloc AER rpc failed\n");
|
||||||
aer_remove(dev);
|
aer_remove(dev);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
@ -310,7 +303,8 @@ static int aer_probe(struct pcie_device *dev)
|
|||||||
/* Request IRQ ISR */
|
/* Request IRQ ISR */
|
||||||
status = request_irq(dev->irq, aer_irq, IRQF_SHARED, "aerdrv", dev);
|
status = request_irq(dev->irq, aer_irq, IRQF_SHARED, "aerdrv", dev);
|
||||||
if (status) {
|
if (status) {
|
||||||
dev_printk(KERN_DEBUG, device, "request IRQ failed\n");
|
dev_printk(KERN_DEBUG, device, "request AER IRQ %d failed\n",
|
||||||
|
dev->irq);
|
||||||
aer_remove(dev);
|
aer_remove(dev);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@ -318,8 +312,8 @@ static int aer_probe(struct pcie_device *dev)
|
|||||||
rpc->isr = 1;
|
rpc->isr = 1;
|
||||||
|
|
||||||
aer_enable_rootport(rpc);
|
aer_enable_rootport(rpc);
|
||||||
|
dev_info(device, "AER enabled with IRQ %d\n", dev->irq);
|
||||||
return status;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -300,8 +300,6 @@ static irqreturn_t pcie_pme_irq(int irq, void *context)
|
|||||||
*/
|
*/
|
||||||
static int pcie_pme_set_native(struct pci_dev *dev, void *ign)
|
static int pcie_pme_set_native(struct pci_dev *dev, void *ign)
|
||||||
{
|
{
|
||||||
dev_info(&dev->dev, "Signaling PME through PCIe PME interrupt\n");
|
|
||||||
|
|
||||||
device_set_run_wake(&dev->dev, true);
|
device_set_run_wake(&dev->dev, true);
|
||||||
dev->pme_interrupt = true;
|
dev->pme_interrupt = true;
|
||||||
return 0;
|
return 0;
|
||||||
@ -319,23 +317,8 @@ static int pcie_pme_set_native(struct pci_dev *dev, void *ign)
|
|||||||
static void pcie_pme_mark_devices(struct pci_dev *port)
|
static void pcie_pme_mark_devices(struct pci_dev *port)
|
||||||
{
|
{
|
||||||
pcie_pme_set_native(port, NULL);
|
pcie_pme_set_native(port, NULL);
|
||||||
if (port->subordinate) {
|
if (port->subordinate)
|
||||||
pci_walk_bus(port->subordinate, pcie_pme_set_native, NULL);
|
pci_walk_bus(port->subordinate, pcie_pme_set_native, NULL);
|
||||||
} else {
|
|
||||||
struct pci_bus *bus = port->bus;
|
|
||||||
struct pci_dev *dev;
|
|
||||||
|
|
||||||
/* Check if this is a root port event collector. */
|
|
||||||
if (pci_pcie_type(port) != PCI_EXP_TYPE_RC_EC || !bus)
|
|
||||||
return;
|
|
||||||
|
|
||||||
down_read(&pci_bus_sem);
|
|
||||||
list_for_each_entry(dev, &bus->devices, bus_list)
|
|
||||||
if (pci_is_pcie(dev)
|
|
||||||
&& pci_pcie_type(dev) == PCI_EXP_TYPE_RC_END)
|
|
||||||
pcie_pme_set_native(dev, NULL);
|
|
||||||
up_read(&pci_bus_sem);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -364,12 +347,14 @@ static int pcie_pme_probe(struct pcie_device *srv)
|
|||||||
ret = request_irq(srv->irq, pcie_pme_irq, IRQF_SHARED, "PCIe PME", srv);
|
ret = request_irq(srv->irq, pcie_pme_irq, IRQF_SHARED, "PCIe PME", srv);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
kfree(data);
|
kfree(data);
|
||||||
} else {
|
return ret;
|
||||||
pcie_pme_mark_devices(port);
|
|
||||||
pcie_pme_interrupt_enable(port, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
dev_info(&port->dev, "Signaling PME with IRQ %d\n", srv->irq);
|
||||||
|
|
||||||
|
pcie_pme_mark_devices(port);
|
||||||
|
pcie_pme_interrupt_enable(port, true);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool pcie_pme_check_wakeup(struct pci_bus *bus)
|
static bool pcie_pme_check_wakeup(struct pci_bus *bus)
|
||||||
|
@ -499,7 +499,6 @@ static int pcie_port_probe_service(struct device *dev)
|
|||||||
if (status)
|
if (status)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
dev_printk(KERN_DEBUG, dev, "service driver %s loaded\n", driver->name);
|
|
||||||
get_device(dev);
|
get_device(dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -524,8 +523,6 @@ static int pcie_port_remove_service(struct device *dev)
|
|||||||
pciedev = to_pcie_device(dev);
|
pciedev = to_pcie_device(dev);
|
||||||
driver = to_service_driver(dev->driver);
|
driver = to_service_driver(dev->driver);
|
||||||
if (driver && driver->remove) {
|
if (driver && driver->remove) {
|
||||||
dev_printk(KERN_DEBUG, dev, "unloading service driver %s\n",
|
|
||||||
driver->name);
|
|
||||||
driver->remove(pciedev);
|
driver->remove(pciedev);
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
}
|
}
|
||||||
|
@ -2156,7 +2156,7 @@ static void quirk_blacklist_vpd(struct pci_dev *dev)
|
|||||||
{
|
{
|
||||||
if (dev->vpd) {
|
if (dev->vpd) {
|
||||||
dev->vpd->len = 0;
|
dev->vpd->len = 0;
|
||||||
dev_warn(&dev->dev, FW_BUG "VPD access disabled\n");
|
dev_warn(&dev->dev, FW_BUG "disabling VPD access (can't determine size of non-standard VPD format)\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3255,6 +3255,25 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CACTUS_RIDGE_4C
|
|||||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PORT_RIDGE,
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PORT_RIDGE,
|
||||||
quirk_thunderbolt_hotplug_msi);
|
quirk_thunderbolt_hotplug_msi);
|
||||||
|
|
||||||
|
static void quirk_chelsio_extend_vpd(struct pci_dev *dev)
|
||||||
|
{
|
||||||
|
pci_set_vpd_size(dev, 8192);
|
||||||
|
}
|
||||||
|
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x20, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x21, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x22, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x23, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x24, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x25, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x26, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x30, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x31, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x32, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x35, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x36, quirk_chelsio_extend_vpd);
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x37, quirk_chelsio_extend_vpd);
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
/*
|
/*
|
||||||
* Apple: Shutdown Cactus Ridge Thunderbolt controller.
|
* Apple: Shutdown Cactus Ridge Thunderbolt controller.
|
||||||
|
@ -31,8 +31,6 @@
|
|||||||
|
|
||||||
#include "vfio_pci_private.h"
|
#include "vfio_pci_private.h"
|
||||||
|
|
||||||
#define PCI_CFG_SPACE_SIZE 256
|
|
||||||
|
|
||||||
/* Fake capability ID for standard config space */
|
/* Fake capability ID for standard config space */
|
||||||
#define PCI_CAP_ID_BASIC 0
|
#define PCI_CAP_ID_BASIC 0
|
||||||
|
|
||||||
|
@ -22,6 +22,14 @@
|
|||||||
#ifndef LINUX_PCI_REGS_H
|
#ifndef LINUX_PCI_REGS_H
|
||||||
#define LINUX_PCI_REGS_H
|
#define LINUX_PCI_REGS_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Conventional PCI and PCI-X Mode 1 devices have 256 bytes of
|
||||||
|
* configuration space. PCI-X Mode 2 and PCIe devices have 4096 bytes of
|
||||||
|
* configuration space.
|
||||||
|
*/
|
||||||
|
#define PCI_CFG_SPACE_SIZE 256
|
||||||
|
#define PCI_CFG_SPACE_EXP_SIZE 4096
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Under PCI, each device has 256 bytes of configuration address space,
|
* Under PCI, each device has 256 bytes of configuration address space,
|
||||||
* of which the first 64 bytes are standardized as follows:
|
* of which the first 64 bytes are standardized as follows:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user