diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-12-15 15:46:48 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-12-15 15:46:48 -0500 |
commit | 0ab7b12c49b6fbf2d4d0381374b82935f949be5f (patch) | |
tree | 7a1b48e644638c6a0a275e65715d8db37d20c88e /drivers/pci/quirks.c | |
parent | a9a16a6d136593c9e6f72e481b2b86ae1d8d1fce (diff) | |
parent | b08d2e61a6f9ebf5210a047868362a5a4ff37144 (diff) |
Merge tag 'pci-v4.10-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
Pull PCI updates from Bjorn Helgaas:
"PCI changes:
- add support for PCI on ARM64 boxes with ACPI. We already had this
for theoretical spec-compliant hardware; now we're adding quirks
for the actual hardware (Cavium, HiSilicon, Qualcomm, X-Gene)
- add runtime PM support for hotplug ports
- enable runtime suspend for Intel UHCI that uses platform-specific
wakeup signaling
- add yet another host bridge registration interface. We hope this is
extensible enough to subsume the others
- expose device revision in sysfs for DRM
- to avoid device conflicts, make sure any VF BAR updates are done
before enabling the VF
- avoid unnecessary link retrains for ASPM
- allow INTx masking on Mellanox devices that support it
- allow access to non-standard VPD for Chelsio devices
- update Broadcom iProc support for PAXB v2, PAXC v2, inbound DMA,
etc
- update Rockchip support for max-link-speed
- add NVIDIA Tegra210 support
- add Layerscape LS1046a support
- update R-Car compatibility strings
- add Qualcomm MSM8996 support
- remove some uninformative bootup messages"
* tag 'pci-v4.10-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (115 commits)
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
x86/platform/intel-mid: Constify mid_pci_platform_pm
PCI/ASPM: Don't retrain link if ASPM not possible
PCI: iproc: Skip check for legacy IRQ on PAXC buses
PCI: pciehp: Leave power indicator on when enabling already-enabled slot
PCI: pciehp: Prioritize data-link event over presence detect
PCI: rcar: Add gen3 fallback compatibility string for pcie-rcar
PCI: rcar: Use gen2 fallback compatibility last
PCI: rcar-gen2: Use gen2 fallback compatibility last
PCI: rockchip: Move the deassert of pm/aclk/pclk after phy_init()
..
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r-- | drivers/pci/quirks.c | 182 |
1 files changed, 144 insertions, 38 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index c232729f5b1b..9236e40ac055 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -2156,7 +2156,7 @@ static void quirk_blacklist_vpd(struct pci_dev *dev) | |||
2156 | { | 2156 | { |
2157 | if (dev->vpd) { | 2157 | if (dev->vpd) { |
2158 | dev->vpd->len = 0; | 2158 | dev->vpd->len = 0; |
2159 | dev_warn(&dev->dev, FW_BUG "VPD access disabled\n"); | 2159 | dev_warn(&dev->dev, FW_BUG "disabling VPD access (can't determine size of non-standard VPD format)\n"); |
2160 | } | 2160 | } |
2161 | } | 2161 | } |
2162 | 2162 | ||
@@ -3137,8 +3137,9 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x22b5, quirk_remove_d3_delay); | |||
3137 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x22b7, quirk_remove_d3_delay); | 3137 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x22b7, quirk_remove_d3_delay); |
3138 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2298, quirk_remove_d3_delay); | 3138 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2298, quirk_remove_d3_delay); |
3139 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x229c, quirk_remove_d3_delay); | 3139 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x229c, quirk_remove_d3_delay); |
3140 | |||
3140 | /* | 3141 | /* |
3141 | * Some devices may pass our check in pci_intx_mask_supported if | 3142 | * Some devices may pass our check in pci_intx_mask_supported() if |
3142 | * PCI_COMMAND_INTX_DISABLE works though they actually do not properly | 3143 | * PCI_COMMAND_INTX_DISABLE works though they actually do not properly |
3143 | * support this feature. | 3144 | * support this feature. |
3144 | */ | 3145 | */ |
@@ -3146,53 +3147,139 @@ static void quirk_broken_intx_masking(struct pci_dev *dev) | |||
3146 | { | 3147 | { |
3147 | dev->broken_intx_masking = 1; | 3148 | dev->broken_intx_masking = 1; |
3148 | } | 3149 | } |
3149 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_CHELSIO, 0x0030, | 3150 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x0030, |
3150 | quirk_broken_intx_masking); | 3151 | quirk_broken_intx_masking); |
3151 | DECLARE_PCI_FIXUP_HEADER(0x1814, 0x0601, /* Ralink RT2800 802.11n PCI */ | 3152 | DECLARE_PCI_FIXUP_FINAL(0x1814, 0x0601, /* Ralink RT2800 802.11n PCI */ |
3152 | quirk_broken_intx_masking); | 3153 | quirk_broken_intx_masking); |
3154 | |||
3153 | /* | 3155 | /* |
3154 | * Realtek RTL8169 PCI Gigabit Ethernet Controller (rev 10) | 3156 | * Realtek RTL8169 PCI Gigabit Ethernet Controller (rev 10) |
3155 | * Subsystem: Realtek RTL8169/8110 Family PCI Gigabit Ethernet NIC | 3157 | * Subsystem: Realtek RTL8169/8110 Family PCI Gigabit Ethernet NIC |
3156 | * | 3158 | * |
3157 | * RTL8110SC - Fails under PCI device assignment using DisINTx masking. | 3159 | * RTL8110SC - Fails under PCI device assignment using DisINTx masking. |
3158 | */ | 3160 | */ |
3159 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_REALTEK, 0x8169, | 3161 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_REALTEK, 0x8169, |
3160 | quirk_broken_intx_masking); | 3162 | quirk_broken_intx_masking); |
3161 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MELLANOX, PCI_ANY_ID, | ||
3162 | quirk_broken_intx_masking); | ||
3163 | 3163 | ||
3164 | /* | 3164 | /* |
3165 | * Intel i40e (XL710/X710) 10/20/40GbE NICs all have broken INTx masking, | 3165 | * Intel i40e (XL710/X710) 10/20/40GbE NICs all have broken INTx masking, |
3166 | * DisINTx can be set but the interrupt status bit is non-functional. | 3166 | * DisINTx can be set but the interrupt status bit is non-functional. |
3167 | */ | 3167 | */ |
3168 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1572, | 3168 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1572, |
3169 | quirk_broken_intx_masking); | 3169 | quirk_broken_intx_masking); |
3170 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1574, | 3170 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1574, |
3171 | quirk_broken_intx_masking); | 3171 | quirk_broken_intx_masking); |
3172 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1580, | 3172 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1580, |
3173 | quirk_broken_intx_masking); | 3173 | quirk_broken_intx_masking); |
3174 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1581, | 3174 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1581, |
3175 | quirk_broken_intx_masking); | 3175 | quirk_broken_intx_masking); |
3176 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1583, | 3176 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1583, |
3177 | quirk_broken_intx_masking); | 3177 | quirk_broken_intx_masking); |
3178 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1584, | 3178 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1584, |
3179 | quirk_broken_intx_masking); | 3179 | quirk_broken_intx_masking); |
3180 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1585, | 3180 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1585, |
3181 | quirk_broken_intx_masking); | 3181 | quirk_broken_intx_masking); |
3182 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1586, | 3182 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1586, |
3183 | quirk_broken_intx_masking); | 3183 | quirk_broken_intx_masking); |
3184 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1587, | 3184 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1587, |
3185 | quirk_broken_intx_masking); | 3185 | quirk_broken_intx_masking); |
3186 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1588, | 3186 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1588, |
3187 | quirk_broken_intx_masking); | 3187 | quirk_broken_intx_masking); |
3188 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x1589, | 3188 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1589, |
3189 | quirk_broken_intx_masking); | 3189 | quirk_broken_intx_masking); |
3190 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x37d0, | 3190 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x37d0, |
3191 | quirk_broken_intx_masking); | 3191 | quirk_broken_intx_masking); |
3192 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x37d1, | 3192 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x37d1, |
3193 | quirk_broken_intx_masking); | 3193 | quirk_broken_intx_masking); |
3194 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x37d2, | 3194 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x37d2, |
3195 | quirk_broken_intx_masking); | 3195 | quirk_broken_intx_masking); |
3196 | |||
3197 | static u16 mellanox_broken_intx_devs[] = { | ||
3198 | PCI_DEVICE_ID_MELLANOX_HERMON_SDR, | ||
3199 | PCI_DEVICE_ID_MELLANOX_HERMON_DDR, | ||
3200 | PCI_DEVICE_ID_MELLANOX_HERMON_QDR, | ||
3201 | PCI_DEVICE_ID_MELLANOX_HERMON_DDR_GEN2, | ||
3202 | PCI_DEVICE_ID_MELLANOX_HERMON_QDR_GEN2, | ||
3203 | PCI_DEVICE_ID_MELLANOX_HERMON_EN, | ||
3204 | PCI_DEVICE_ID_MELLANOX_HERMON_EN_GEN2, | ||
3205 | PCI_DEVICE_ID_MELLANOX_CONNECTX_EN, | ||
3206 | PCI_DEVICE_ID_MELLANOX_CONNECTX_EN_T_GEN2, | ||
3207 | PCI_DEVICE_ID_MELLANOX_CONNECTX_EN_GEN2, | ||
3208 | PCI_DEVICE_ID_MELLANOX_CONNECTX_EN_5_GEN2, | ||
3209 | PCI_DEVICE_ID_MELLANOX_CONNECTX2, | ||
3210 | PCI_DEVICE_ID_MELLANOX_CONNECTX3, | ||
3211 | PCI_DEVICE_ID_MELLANOX_CONNECTX3_PRO, | ||
3212 | }; | ||
3213 | |||
3214 | #define CONNECTX_4_CURR_MAX_MINOR 99 | ||
3215 | #define CONNECTX_4_INTX_SUPPORT_MINOR 14 | ||
3216 | |||
3217 | /* | ||
3218 | * Check ConnectX-4/LX FW version to see if it supports legacy interrupts. | ||
3219 | * If so, don't mark it as broken. | ||
3220 | * FW minor > 99 means older FW version format and no INTx masking support. | ||
3221 | * FW minor < 14 means new FW version format and no INTx masking support. | ||
3222 | */ | ||
3223 | static void mellanox_check_broken_intx_masking(struct pci_dev *pdev) | ||
3224 | { | ||
3225 | __be32 __iomem *fw_ver; | ||
3226 | u16 fw_major; | ||
3227 | u16 fw_minor; | ||
3228 | u16 fw_subminor; | ||
3229 | u32 fw_maj_min; | ||
3230 | u32 fw_sub_min; | ||
3231 | int i; | ||
3232 | |||
3233 | for (i = 0; i < ARRAY_SIZE(mellanox_broken_intx_devs); i++) { | ||
3234 | if (pdev->device == mellanox_broken_intx_devs[i]) { | ||
3235 | pdev->broken_intx_masking = 1; | ||
3236 | return; | ||
3237 | } | ||
3238 | } | ||
3239 | |||
3240 | /* Getting here means Connect-IB cards and up. Connect-IB has no INTx | ||
3241 | * support so shouldn't be checked further | ||
3242 | */ | ||
3243 | if (pdev->device == PCI_DEVICE_ID_MELLANOX_CONNECTIB) | ||
3244 | return; | ||
3245 | |||
3246 | if (pdev->device != PCI_DEVICE_ID_MELLANOX_CONNECTX4 && | ||
3247 | pdev->device != PCI_DEVICE_ID_MELLANOX_CONNECTX4_LX) | ||
3248 | return; | ||
3249 | |||
3250 | /* For ConnectX-4 and ConnectX-4LX, need to check FW support */ | ||
3251 | if (pci_enable_device_mem(pdev)) { | ||
3252 | dev_warn(&pdev->dev, "Can't enable device memory\n"); | ||
3253 | return; | ||
3254 | } | ||
3255 | |||
3256 | fw_ver = ioremap(pci_resource_start(pdev, 0), 4); | ||
3257 | if (!fw_ver) { | ||
3258 | dev_warn(&pdev->dev, "Can't map ConnectX-4 initialization segment\n"); | ||
3259 | goto out; | ||
3260 | } | ||
3261 | |||
3262 | /* Reading from resource space should be 32b aligned */ | ||
3263 | fw_maj_min = ioread32be(fw_ver); | ||
3264 | fw_sub_min = ioread32be(fw_ver + 1); | ||
3265 | fw_major = fw_maj_min & 0xffff; | ||
3266 | fw_minor = fw_maj_min >> 16; | ||
3267 | fw_subminor = fw_sub_min & 0xffff; | ||
3268 | if (fw_minor > CONNECTX_4_CURR_MAX_MINOR || | ||
3269 | fw_minor < CONNECTX_4_INTX_SUPPORT_MINOR) { | ||
3270 | dev_warn(&pdev->dev, "ConnectX-4: FW %u.%u.%u doesn't support INTx masking, disabling. Please upgrade FW to %d.14.1100 and up for INTx support\n", | ||
3271 | fw_major, fw_minor, fw_subminor, pdev->device == | ||
3272 | PCI_DEVICE_ID_MELLANOX_CONNECTX4 ? 12 : 14); | ||
3273 | pdev->broken_intx_masking = 1; | ||
3274 | } | ||
3275 | |||
3276 | iounmap(fw_ver); | ||
3277 | |||
3278 | out: | ||
3279 | pci_disable_device(pdev); | ||
3280 | } | ||
3281 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MELLANOX, PCI_ANY_ID, | ||
3282 | mellanox_check_broken_intx_masking); | ||
3196 | 3283 | ||
3197 | static void quirk_no_bus_reset(struct pci_dev *dev) | 3284 | static void quirk_no_bus_reset(struct pci_dev *dev) |
3198 | { | 3285 | { |
@@ -3255,6 +3342,25 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CACTUS_RIDGE_4C | |||
3255 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PORT_RIDGE, | 3342 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PORT_RIDGE, |
3256 | quirk_thunderbolt_hotplug_msi); | 3343 | quirk_thunderbolt_hotplug_msi); |
3257 | 3344 | ||
3345 | static void quirk_chelsio_extend_vpd(struct pci_dev *dev) | ||
3346 | { | ||
3347 | pci_set_vpd_size(dev, 8192); | ||
3348 | } | ||
3349 | |||
3350 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x20, quirk_chelsio_extend_vpd); | ||
3351 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x21, quirk_chelsio_extend_vpd); | ||
3352 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x22, quirk_chelsio_extend_vpd); | ||
3353 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x23, quirk_chelsio_extend_vpd); | ||
3354 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x24, quirk_chelsio_extend_vpd); | ||
3355 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x25, quirk_chelsio_extend_vpd); | ||
3356 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x26, quirk_chelsio_extend_vpd); | ||
3357 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x30, quirk_chelsio_extend_vpd); | ||
3358 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x31, quirk_chelsio_extend_vpd); | ||
3359 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x32, quirk_chelsio_extend_vpd); | ||
3360 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x35, quirk_chelsio_extend_vpd); | ||
3361 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x36, quirk_chelsio_extend_vpd); | ||
3362 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CHELSIO, 0x37, quirk_chelsio_extend_vpd); | ||
3363 | |||
3258 | #ifdef CONFIG_ACPI | 3364 | #ifdef CONFIG_ACPI |
3259 | /* | 3365 | /* |
3260 | * Apple: Shutdown Cactus Ridge Thunderbolt controller. | 3366 | * Apple: Shutdown Cactus Ridge Thunderbolt controller. |