mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 22:52:19 +02:00
PCI updates for v3.19:
Enumeration
- Scan all device numbers on NEC as well as Stratus (Charlotte Richardson)
Resource management
- Handle read-only BARs on AMD CS553x devices (Myron Stowe)
Synopsys DesignWare
- Reject MSI-X IRQs (Lucas Stach)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABAgAGBQJU0m7MAAoJEFmIoMA60/r8zQoP/iZpoDfkIrvJWhLjRO1agVCd
7Y5Hrzr+AmESq4n3D7IQt7c+wzaR+05gOG/orDvaFfpbUMamTHlFxUjsk7ib3lLv
Qg+WUX/I444pt/jDxRlqZbqWC8AkvYrTWPZoR+fagdWMuIGnKYNvjIAdmzRgMwB0
C3AFGa1S61tqD0+b2Dc177vPZowOUgPBq+ta0Ld8RJ7zBfNnL/GdgCqWxo0OyPNv
uSeQuCmKEL5J1Sn1D+j0EKL5FdSDN+LJeU4k5hdF3I+GaervFkOYVqstAqv1kqML
2I9LBjMndRueseArqq7oCAeMn+lCEqleiYr+Y0DtlLOo68eZzh2YWNRV/PcRGMnj
xOJo59rDSw5amg4baL7DVdPFIW3NGZiVThNiM3ye5CuhfAl3U/PY1xiDxQ85KY2F
htc5rhnm1b9dE5LrJN0iChX4fT60sYyc4IMHuu3wuS5fRNDgZWscs0TT6GSIXSCH
ua1xiaq0hLc8XoWdV0A/7R9kX37KJ0kyjCmSFJV/uVWKgKpS3eGi6Ex67qCU1w0C
Vw2JT/H8V7vbNCpF/+8fYhXYzsTx6Oa0qLfcBEgT7xxjPTMTsH0LUW0wAivL60rV
J9PPcIBrDui6fBVLDkOlgMBjokkShkSay0MUuaUaZib3BdcDY14RVfm8K8MhYS/I
ViaWaM1bQ4DGzjnz5dQg
=hsLb
-----END PGP SIGNATURE-----
Merge tag 'pci-v3.19-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
Pull PCI fixes from Bjorn Helgaas:
"Enumeration
- Scan all device numbers on NEC as well as Stratus (Charlotte Richardson)
Resource management
- Handle read-only BARs on AMD CS553x devices (Myron Stowe)
Synopsys DesignWare
- Reject MSI-X IRQs (Lucas Stach)"
* tag 'pci-v3.19-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci:
PCI: Handle read-only BARs on AMD CS553x devices
PCI: Add NEC variants to Stratus ftServer PCIe DMI check
PCI: designware: Reject MSI-X IRQs
This commit is contained in:
commit
f3c2352df1
|
|
@ -448,6 +448,22 @@ static const struct dmi_system_id pciprobe_dmi_table[] __initconst = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "ftServer"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = set_scan_all,
|
||||
.ident = "Stratus/NEC ftServer",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Express5800/R32"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = set_scan_all,
|
||||
.ident = "Stratus/NEC ftServer",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Express5800/R31"),
|
||||
},
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -283,6 +283,9 @@ static int dw_msi_setup_irq(struct msi_controller *chip, struct pci_dev *pdev,
|
|||
struct msi_msg msg;
|
||||
struct pcie_port *pp = sys_to_pcie(pdev->bus->sysdata);
|
||||
|
||||
if (desc->msi_attrib.is_msix)
|
||||
return -EINVAL;
|
||||
|
||||
irq = assign_irq(1, desc, &pos);
|
||||
if (irq < 0)
|
||||
return irq;
|
||||
|
|
|
|||
|
|
@ -324,18 +324,52 @@ static void quirk_s3_64M(struct pci_dev *dev)
|
|||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_868, quirk_s3_64M);
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_968, quirk_s3_64M);
|
||||
|
||||
static void quirk_io(struct pci_dev *dev, int pos, unsigned size,
|
||||
const char *name)
|
||||
{
|
||||
u32 region;
|
||||
struct pci_bus_region bus_region;
|
||||
struct resource *res = dev->resource + pos;
|
||||
|
||||
pci_read_config_dword(dev, PCI_BASE_ADDRESS_0 + (pos << 2), ®ion);
|
||||
|
||||
if (!region)
|
||||
return;
|
||||
|
||||
res->name = pci_name(dev);
|
||||
res->flags = region & ~PCI_BASE_ADDRESS_IO_MASK;
|
||||
res->flags |=
|
||||
(IORESOURCE_IO | IORESOURCE_PCI_FIXED | IORESOURCE_SIZEALIGN);
|
||||
region &= ~(size - 1);
|
||||
|
||||
/* Convert from PCI bus to resource space */
|
||||
bus_region.start = region;
|
||||
bus_region.end = region + size - 1;
|
||||
pcibios_bus_to_resource(dev->bus, res, &bus_region);
|
||||
|
||||
dev_info(&dev->dev, FW_BUG "%s quirk: reg 0x%x: %pR\n",
|
||||
name, PCI_BASE_ADDRESS_0 + (pos << 2), res);
|
||||
}
|
||||
|
||||
/*
|
||||
* Some CS5536 BIOSes (for example, the Soekris NET5501 board w/ comBIOS
|
||||
* ver. 1.33 20070103) don't set the correct ISA PCI region header info.
|
||||
* BAR0 should be 8 bytes; instead, it may be set to something like 8k
|
||||
* (which conflicts w/ BAR1's memory range).
|
||||
*
|
||||
* CS553x's ISA PCI BARs may also be read-only (ref:
|
||||
* https://bugzilla.kernel.org/show_bug.cgi?id=85991 - Comment #4 forward).
|
||||
*/
|
||||
static void quirk_cs5536_vsa(struct pci_dev *dev)
|
||||
{
|
||||
static char *name = "CS5536 ISA bridge";
|
||||
|
||||
if (pci_resource_len(dev, 0) != 8) {
|
||||
struct resource *res = &dev->resource[0];
|
||||
res->end = res->start + 8 - 1;
|
||||
dev_info(&dev->dev, "CS5536 ISA bridge bug detected (incorrect header); workaround applied\n");
|
||||
quirk_io(dev, 0, 8, name); /* SMB */
|
||||
quirk_io(dev, 1, 256, name); /* GPIO */
|
||||
quirk_io(dev, 2, 64, name); /* MFGPT */
|
||||
dev_info(&dev->dev, "%s bug detected (incorrect header); workaround applied\n",
|
||||
name);
|
||||
}
|
||||
}
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA, quirk_cs5536_vsa);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user