Merge branch 'pci/misc'
- Mark fall-through switch cases before enabling -Wimplicit-fallthrough (Gustavo A. R. Silva) - Move DMA-debug PCI init from arch code to PCI core (Christoph Hellwig) - Fix pci_request_irq() usage of IRQF_ONESHOT when no handler is supplied (Heiner Kallweit) - Unify PCI and DMA direction #defines (Shunyong Yang) - Add PCI_DEVICE_DATA() macro (Andy Shevchenko) - Check for VPD completion before checking for timeout (Bert Kenward) - Limit Netronome NFP5000 config space size to work around erratum (Jakub Kicinski) * pci/misc: PCI: Limit config space size for Netronome NFP5000 PCI/VPD: Check for VPD access completion before checking for timeout PCI: Add PCI_DEVICE_DATA() macro to fully describe device ID entry PCI: Unify PCI and normal DMA direction definitions PCI: Use IRQF_ONESHOT if pci_request_irq() called with no handler PCI: Call dma_debug_add_bus() for pci_bus_type from PCI core PCI: Mark fall-through switch cases before enabling -Wimplicit-fallthrough # Conflicts: # drivers/pci/hotplug/pciehp_ctrl.c
This commit is contained in:
commit
a40f72db8a
|
@ -357,9 +357,6 @@ EXPORT_SYMBOL_GPL(dma_get_required_mask);
|
||||||
|
|
||||||
static int __init dma_init(void)
|
static int __init dma_init(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_PCI
|
|
||||||
dma_debug_add_bus(&pci_bus_type);
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_IBMVIO
|
#ifdef CONFIG_IBMVIO
|
||||||
dma_debug_add_bus(&vio_bus_type);
|
dma_debug_add_bus(&vio_bus_type);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -160,8 +160,6 @@ static int __init pcibios_init(void)
|
||||||
for (hose = hose_head; hose; hose = hose->next)
|
for (hose = hose_head; hose; hose = hose->next)
|
||||||
pcibios_scanbus(hose);
|
pcibios_scanbus(hose);
|
||||||
|
|
||||||
dma_debug_add_bus(&pci_bus_type);
|
|
||||||
|
|
||||||
pci_initialized = 1;
|
pci_initialized = 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -155,9 +155,6 @@ static int __init pci_iommu_init(void)
|
||||||
{
|
{
|
||||||
struct iommu_table_entry *p;
|
struct iommu_table_entry *p;
|
||||||
|
|
||||||
#ifdef CONFIG_PCI
|
|
||||||
dma_debug_add_bus(&pci_bus_type);
|
|
||||||
#endif
|
|
||||||
x86_init.iommu.iommu_init();
|
x86_init.iommu.iommu_init();
|
||||||
|
|
||||||
for (p = __iommu_table; p < __iommu_table_end; p++) {
|
for (p = __iommu_table; p < __iommu_table_end; p++) {
|
||||||
|
|
|
@ -27,12 +27,6 @@
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
|
||||||
/*
|
|
||||||
* This variable should be used with the
|
|
||||||
* pci_driver structure initialization.
|
|
||||||
*/
|
|
||||||
#define PCI_DEVICE_DATA(__ops) .driver_data = (kernel_ulong_t)(__ops)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PCI driver handlers.
|
* PCI driver handlers.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -654,6 +654,7 @@ int shpchp_sysfs_enable_slot(struct slot *p_slot)
|
||||||
switch (p_slot->state) {
|
switch (p_slot->state) {
|
||||||
case BLINKINGON_STATE:
|
case BLINKINGON_STATE:
|
||||||
cancel_delayed_work(&p_slot->work);
|
cancel_delayed_work(&p_slot->work);
|
||||||
|
/* fall through */
|
||||||
case STATIC_STATE:
|
case STATIC_STATE:
|
||||||
p_slot->state = POWERON_STATE;
|
p_slot->state = POWERON_STATE;
|
||||||
mutex_unlock(&p_slot->lock);
|
mutex_unlock(&p_slot->lock);
|
||||||
|
@ -689,6 +690,7 @@ int shpchp_sysfs_disable_slot(struct slot *p_slot)
|
||||||
switch (p_slot->state) {
|
switch (p_slot->state) {
|
||||||
case BLINKINGOFF_STATE:
|
case BLINKINGOFF_STATE:
|
||||||
cancel_delayed_work(&p_slot->work);
|
cancel_delayed_work(&p_slot->work);
|
||||||
|
/* fall through */
|
||||||
case STATIC_STATE:
|
case STATIC_STATE:
|
||||||
p_slot->state = POWEROFF_STATE;
|
p_slot->state = POWEROFF_STATE;
|
||||||
mutex_unlock(&p_slot->lock);
|
mutex_unlock(&p_slot->lock);
|
||||||
|
|
|
@ -86,13 +86,17 @@ int pci_request_irq(struct pci_dev *dev, unsigned int nr, irq_handler_t handler,
|
||||||
va_list ap;
|
va_list ap;
|
||||||
int ret;
|
int ret;
|
||||||
char *devname;
|
char *devname;
|
||||||
|
unsigned long irqflags = IRQF_SHARED;
|
||||||
|
|
||||||
|
if (!handler)
|
||||||
|
irqflags |= IRQF_ONESHOT;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
devname = kvasprintf(GFP_KERNEL, fmt, ap);
|
devname = kvasprintf(GFP_KERNEL, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
ret = request_threaded_irq(pci_irq_vector(dev, nr), handler, thread_fn,
|
ret = request_threaded_irq(pci_irq_vector(dev, nr), handler, thread_fn,
|
||||||
IRQF_SHARED, devname, dev_id);
|
irqflags, devname, dev_id);
|
||||||
if (ret)
|
if (ret)
|
||||||
kfree(devname);
|
kfree(devname);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -1668,7 +1668,7 @@ static int __init pci_driver_init(void)
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
#endif
|
#endif
|
||||||
|
dma_debug_add_bus(&pci_bus_type);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
postcore_initcall(pci_driver_init);
|
postcore_initcall(pci_driver_init);
|
||||||
|
|
|
@ -2044,6 +2044,7 @@ static pci_power_t pci_target_state(struct pci_dev *dev, bool wakeup)
|
||||||
case PCI_D2:
|
case PCI_D2:
|
||||||
if (pci_no_d1d2(dev))
|
if (pci_no_d1d2(dev))
|
||||||
break;
|
break;
|
||||||
|
/* else: fall through */
|
||||||
default:
|
default:
|
||||||
target_state = state;
|
target_state = state;
|
||||||
}
|
}
|
||||||
|
|
|
@ -460,6 +460,7 @@ static void quirk_nfp6000(struct pci_dev *dev)
|
||||||
}
|
}
|
||||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP4000, quirk_nfp6000);
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP4000, quirk_nfp6000);
|
||||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP6000, quirk_nfp6000);
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP6000, quirk_nfp6000);
|
||||||
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP5000, quirk_nfp6000);
|
||||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP6000_VF, quirk_nfp6000);
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NETRONOME_NFP6000_VF, quirk_nfp6000);
|
||||||
|
|
||||||
/* On IBM Crocodile ipr SAS adapters, expand BAR to system page size */
|
/* On IBM Crocodile ipr SAS adapters, expand BAR to system page size */
|
||||||
|
@ -2105,6 +2106,7 @@ static void quirk_netmos(struct pci_dev *dev)
|
||||||
if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
|
if (dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
|
||||||
dev->subsystem_device == 0x0299)
|
dev->subsystem_device == 0x0299)
|
||||||
return;
|
return;
|
||||||
|
/* else: fall through */
|
||||||
case PCI_DEVICE_ID_NETMOS_9735:
|
case PCI_DEVICE_ID_NETMOS_9735:
|
||||||
case PCI_DEVICE_ID_NETMOS_9745:
|
case PCI_DEVICE_ID_NETMOS_9745:
|
||||||
case PCI_DEVICE_ID_NETMOS_9845:
|
case PCI_DEVICE_ID_NETMOS_9845:
|
||||||
|
|
|
@ -146,7 +146,7 @@ static int pci_vpd_wait(struct pci_dev *dev)
|
||||||
if (!vpd->busy)
|
if (!vpd->busy)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
while (time_before(jiffies, timeout)) {
|
do {
|
||||||
ret = pci_user_read_config_word(dev, vpd->cap + PCI_VPD_ADDR,
|
ret = pci_user_read_config_word(dev, vpd->cap + PCI_VPD_ADDR,
|
||||||
&status);
|
&status);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -160,10 +160,13 @@ static int pci_vpd_wait(struct pci_dev *dev)
|
||||||
if (fatal_signal_pending(current))
|
if (fatal_signal_pending(current))
|
||||||
return -EINTR;
|
return -EINTR;
|
||||||
|
|
||||||
|
if (time_after(jiffies, timeout))
|
||||||
|
break;
|
||||||
|
|
||||||
usleep_range(10, max_sleep);
|
usleep_range(10, max_sleep);
|
||||||
if (max_sleep < 1024)
|
if (max_sleep < 1024)
|
||||||
max_sleep *= 2;
|
max_sleep *= 2;
|
||||||
}
|
} while (true);
|
||||||
|
|
||||||
pci_warn(dev, "VPD access failed. This is likely a firmware bug on this device. Contact the card vendor for a firmware update\n");
|
pci_warn(dev, "VPD access failed. This is likely a firmware bug on this device. Contact the card vendor for a firmware update\n");
|
||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
#ifndef _LINUX_DMA_DIRECTION_H
|
#ifndef _LINUX_DMA_DIRECTION_H
|
||||||
#define _LINUX_DMA_DIRECTION_H
|
#define _LINUX_DMA_DIRECTION_H
|
||||||
/*
|
|
||||||
* These definitions mirror those in pci.h, so they can be used
|
|
||||||
* interchangeably with their PCI_ counterparts.
|
|
||||||
*/
|
|
||||||
enum dma_data_direction {
|
enum dma_data_direction {
|
||||||
DMA_BIDIRECTIONAL = 0,
|
DMA_BIDIRECTIONAL = 0,
|
||||||
DMA_TO_DEVICE = 1,
|
DMA_TO_DEVICE = 1,
|
||||||
DMA_FROM_DEVICE = 2,
|
DMA_FROM_DEVICE = 2,
|
||||||
DMA_NONE = 3,
|
DMA_NONE = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -8,10 +8,10 @@
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
/* This defines the direction arg to the DMA mapping routines. */
|
/* This defines the direction arg to the DMA mapping routines. */
|
||||||
#define PCI_DMA_BIDIRECTIONAL 0
|
#define PCI_DMA_BIDIRECTIONAL DMA_BIDIRECTIONAL
|
||||||
#define PCI_DMA_TODEVICE 1
|
#define PCI_DMA_TODEVICE DMA_TO_DEVICE
|
||||||
#define PCI_DMA_FROMDEVICE 2
|
#define PCI_DMA_FROMDEVICE DMA_FROM_DEVICE
|
||||||
#define PCI_DMA_NONE 3
|
#define PCI_DMA_NONE DMA_NONE
|
||||||
|
|
||||||
static inline void *
|
static inline void *
|
||||||
pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
|
pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
|
||||||
|
|
|
@ -820,6 +820,21 @@ struct pci_driver {
|
||||||
.vendor = PCI_VENDOR_ID_##vend, .device = (dev), \
|
.vendor = PCI_VENDOR_ID_##vend, .device = (dev), \
|
||||||
.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 0, 0
|
.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 0, 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PCI_DEVICE_DATA - macro used to describe a specific PCI device in very short form
|
||||||
|
* @vend: the vendor name (without PCI_VENDOR_ID_ prefix)
|
||||||
|
* @dev: the device name (without PCI_DEVICE_ID_<vend>_ prefix)
|
||||||
|
* @data: the driver data to be filled
|
||||||
|
*
|
||||||
|
* This macro is used to create a struct pci_device_id that matches a
|
||||||
|
* specific PCI device. The subvendor, and subdevice fields will be set
|
||||||
|
* to PCI_ANY_ID.
|
||||||
|
*/
|
||||||
|
#define PCI_DEVICE_DATA(vend, dev, data) \
|
||||||
|
.vendor = PCI_VENDOR_ID_##vend, .device = PCI_DEVICE_ID_##vend##_##dev, \
|
||||||
|
.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 0, 0, \
|
||||||
|
.driver_data = (kernel_ulong_t)(data)
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PCI_REASSIGN_ALL_RSRC = 0x00000001, /* Ignore firmware setup */
|
PCI_REASSIGN_ALL_RSRC = 0x00000001, /* Ignore firmware setup */
|
||||||
PCI_REASSIGN_ALL_BUS = 0x00000002, /* Reassign all bus numbers */
|
PCI_REASSIGN_ALL_BUS = 0x00000002, /* Reassign all bus numbers */
|
||||||
|
|
|
@ -2541,6 +2541,7 @@
|
||||||
#define PCI_DEVICE_ID_NETRONOME_NFP3200 0x3200
|
#define PCI_DEVICE_ID_NETRONOME_NFP3200 0x3200
|
||||||
#define PCI_DEVICE_ID_NETRONOME_NFP3240 0x3240
|
#define PCI_DEVICE_ID_NETRONOME_NFP3240 0x3240
|
||||||
#define PCI_DEVICE_ID_NETRONOME_NFP4000 0x4000
|
#define PCI_DEVICE_ID_NETRONOME_NFP4000 0x4000
|
||||||
|
#define PCI_DEVICE_ID_NETRONOME_NFP5000 0x5000
|
||||||
#define PCI_DEVICE_ID_NETRONOME_NFP6000 0x6000
|
#define PCI_DEVICE_ID_NETRONOME_NFP6000 0x6000
|
||||||
#define PCI_DEVICE_ID_NETRONOME_NFP6000_VF 0x6003
|
#define PCI_DEVICE_ID_NETRONOME_NFP6000_VF 0x6003
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue