sound/radeon: Add quirk for broken 64-bit MSI
PATCH v3 4/7 sound/radeon: Add quirk for broken 64-bit MSI
From: Signed-off-by: Alex Deucher <[email protected]>
A number of radeon cards have a HW limitation causing them to be unable to generate the full 64-bit of address bits for MSIs. This breaks MSIs on some platforms such as POWER machines.
We used to have a powerpc specific quirk to address that on a single card, but this doesn't scale very well, this is better put under control of the drivers who know precisely what a given HW revision can do.
This moves the setting of the quirk flag to the audio driver.
While recent ASICs have that problem fixed, they don't seem to be listed in the PCI IDs of the current driver, so let's quirk all the ATI HDMI for now. The consequences are nil on x86 anyway.
--- sound/pci/hda/hda_intel.c | 96 +++++++++++++++++++++++++++++++++-------------- sound/pci/hda/hda_priv.h | 1 + 2 files changed, 69 insertions(+), 28 deletions(-)
sound/pci/hda/hda_intel.c +68 -28
@@ -1506,9 +1506,14 @@ static int azx_first_init(struct azx *chip)return -ENXIO ; } -if (chip->msi) +if (chip->msi) { +if (chip->driver_caps &AZX_DCAPS_NO_MSI64 ) { +dev_dbg (card->dev,"Disabling 64bit MSI\n" ); + pci->no_64bit_msi = true; + }if (pci_enable_msi (pci) <0 ) chip->msi =0 ; + }if (azx_acquire_irq (chip,0 ) <0 )return -EBUSY ;
@@ -2070,58 +2075,93 @@ static const struct pci_device_id azx_ids[] = { { PCI_DEVICE(0x1022, 0x780d), .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB }, /* ATI HDMI */ - { PCI_DEVICE(0x1002, 0x793b), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + { PCI_DEVICE(0x1002, 0x1314), + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0x7919), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, + { PCI_DEVICE(0x1002, 0x7969), + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, + { PCI_DEVICE(0x1002, 0x793b), + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0x960f), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, + { PCI_DEVICE(0x1002, 0x9646), + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0x970f), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa00), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa08), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa10), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa18), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa20), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa28), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa30), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa38), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa40), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa48), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa50), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa58), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa60), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa68), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa80), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa88), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa90), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa98), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0x9902), - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI_NS |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaaa0), - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI_NS |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaaa8), - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI_NS |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaab0), - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI_NS |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, /* VIA VT8251/VT8237A */ { PCI_DEVICE(0x1106, 0x3288), .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },
sound/pci/hda/hda_priv.h +1 -0
@@ -171,6 +171,7 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };#define AZX_DCAPS_PM_RUNTIME (1 << 26)/* runtime PM support */ #define AZX_DCAPS_I915_POWERWELL (1 << 27)/* HSW i915 powerwell support */ #define AZX_DCAPS_CORBRP_SELF_CLEAR (1 << 28)/* CORBRP clears itself after reset */ +#define AZX_DCAPS_NO_MSI64 (1 << 29)/* Stick to 32-bit MSIs */ /* HD Audio class code */ #define PCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403
Quoted 13 lines · Benjamin Herrenschmidt
From: Signed-off-by: Alex Deucher <[email protected]>
A number of radeon cards have a HW limitation causing them to be unable to generate the full 64-bit of address bits for MSIs. This breaks MSIs on some platforms such as POWER machines.
We used to have a powerpc specific quirk to address that on a single card, but this doesn't scale very well, this is better put under control of the drivers who know precisely what a given HW revision can do.
This moves the setting of the quirk flag to the audio driver.
Quoted 7 lines
While recent ASICs have that problem fixed, they don't seem to be listed in the PCI IDs of the current driver, so let's quirk all the ATI HDMI for now. The consequences are nil on x86 anyway.
Signed-off-by Alex Deucher <[email protected]>Signed-off-by Benjamin Herrenschmidt <[email protected]>CC <[email protected]>
Further discussion with the hw teams have revealed that this is still an issue on newer asics so I think your original patch is correct after all. Just disable 64 bit MSIs on all AMD audio PCI ids.
Alex
Quoted 160 lines
--- sound/pci/hda/hda_intel.c | 96 +++++++++++++++++++++++++++++++++-------------- sound/pci/hda/hda_priv.h | 1 + 2 files changed, 69 insertions(+), 28 deletions(-)sound/pci/hda/hda_intel.c +68
-28@@ -1506,9 +1506,14 @@ static int azx_first_init(struct azx *chip)return -ENXIO ; } -if (chip->msi) +if (chip->msi) { +if (chip->driver_caps &AZX_DCAPS_NO_MSI64 ) { +dev_dbg (card->dev,"Disabling 64bit MSI\n" ); + pci->no_64bit_msi = true; + }if (pci_enable_msi (pci) <0 ) chip->msi =0 ; + }if (azx_acquire_irq (chip,0 ) <0 )return -EBUSY ;@@ -2070,58 +2075,93 @@ static const struct pci_device_id azx_ids[] = { { PCI_DEVICE(0x1022, 0x780d), .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB }, /* ATI HDMI */ - { PCI_DEVICE(0x1002, 0x793b), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + { PCI_DEVICE(0x1002, 0x1314), + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0x7919), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, + { PCI_DEVICE(0x1002, 0x7969), + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, + { PCI_DEVICE(0x1002, 0x793b), + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0x960f), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, + { PCI_DEVICE(0x1002, 0x9646), + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0x970f), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa00), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa08), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa10), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa18), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa20), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa28), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa30), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa38), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa40), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa48), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa50), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa58), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa60), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa68), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa80), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa88), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa90), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaa98), - .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0x9902), - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI_NS |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaaa0), - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI_NS |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaaa8), - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI_NS |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, { PCI_DEVICE(0x1002, 0xaab0), - .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, + .driver_data =AZX_DRIVER_ATIHDMI_NS |AZX_DCAPS_PRESET_ATI_HDMI | + AZX_DCAPS_NO_MSI64 }, /* VIA VT8251/VT8237A */ { PCI_DEVICE(0x1106, 0x3288), .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },sound/pci/hda/hda_priv.h +1
-0@@ -171,6 +171,7 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };#define AZX_DCAPS_PM_RUNTIME (1 << 26)/* runtime PM support */ #define AZX_DCAPS_I915_POWERWELL (1 << 27)/* HSW i915 powerwell support */ #define AZX_DCAPS_CORBRP_SELF_CLEAR (1 << 28)/* CORBRP clears itself after reset */ +#define AZX_DCAPS_NO_MSI64 (1 << 29)/* Stick to 32-bit MSIs */ /* HD Audio class code */ #define PCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403
Quoted 11 lines · Alex Deucher
Quoted 7 lines
While recent ASICs have that problem fixed, they don't seem to be listed in the PCI IDs of the current driver, so let's quirk all the ATI HDMI for now. The consequences are nil on x86 anyway.
Signed-off-by Alex Deucher <[email protected]>Signed-off-by Benjamin Herrenschmidt <[email protected]>CC <[email protected]>Further discussion with the hw teams have revealed that this is still an issue on newer asics so I think your original patch is correct after all. Just disable 64 bit MSIs on all AMD audio PCI ids.
Ok. You confirm that this is however good on newer video side right ?
Also, is there a known issue that if MSI were once enabled, the chip still shoots them even if we disable them in config space ?
When testing my new patch set, I was trying to test the error path when the arch does *not* honor the limitation. The error went back up to the driver as far as I can tell (ie, pci_enable_msi() failed), but the system still got into error state as if the card had tried to shoot an MSI to the wrong address.
(I suspect the graphics side)
Cheers,
Ben.
Quoted 9 lines · Benjamin Herrenschmidt
Quoted 8 lines · Alex Deucher
Quoted 7 lines
While recent ASICs have that problem fixed, they don't seem to be listed in the PCI IDs of the current driver, so let's quirk all the ATI HDMI for now. The consequences are nil on x86 anyway.
Signed-off-by Alex Deucher <[email protected]>Signed-off-by Benjamin Herrenschmidt <[email protected]>CC <[email protected]>
Quoted 6 lines
Quoted 3 lines
Further discussion with the hw teams have revealed that this is still an issue on newer asics so I think your original patch is correct after all. Just disable 64 bit MSIs on all AMD audio PCI ids.
Ok. You confirm that this is however good on newer video side right ?
Yes, this was definitely fixed on the GPU side.
Quoted 10 lines
Also, is there a known issue that if MSI were once enabled, the chip still shoots them even if we disable them in config space ?
When testing my new patch set, I was trying to test the error path when the arch does *not* honor the limitation. The error went back up to the driver as far as I can tell (ie,
pci_enable_msi()failed), but the system still got into error state as if the card had tried to shoot an MSI to the wrong address.(I suspect the graphics side)
I'm not aware of any such issue, but I can ask the hw guys if there is anything special required to disable MSIs beyond the pci config space settings.
Alex
Quoted 5 lines
Cheers,
Ben.
Quoted 6 lines · Alex Deucher
Quoted 6 lines
This moves the setting of the quirk flag to the audio driver.
While recent ASICs have that problem fixed, they don't seem to be listed in the PCI IDs of the current driver, so let's quirk all the ATI HDMI for now. The consequences are nil on x86 anyway.
Quoted 7 lines
Quoted 3 lines
Signed-off-by Alex Deucher <[email protected]>Signed-off-by Benjamin Herrenschmidt <[email protected]>CC <[email protected]>Further discussion with the hw teams have revealed that this is still an issue on newer asics so I think your original patch is correct after all. Just disable 64 bit MSIs on all AMD audio PCI ids.
Allright, I won't resend the whole series, I can just pickup my previous patch. Takashi, Bjorn, Dave, this series covers your 3 areas of maintainership, how do you want to proceed ? I'm happy to merge the whole lot via powerpc ASAP (since it's all CC'ed stable) if you guys send me the appropriate acks, otherwise, let me know.
Cheers,
Ben.
Alex Deucher
Reviewed-byQuoted 15 lines · Benjamin Herrenschmidt
Quoted 6 lines · Alex Deucher
Quoted 6 lines
This moves the setting of the quirk flag to the audio driver.
While recent ASICs have that problem fixed, they don't seem to be listed in the PCI IDs of the current driver, so let's quirk all the ATI HDMI for now. The consequences are nil on x86 anyway.
Quoted 7 lines
Quoted 3 lines
Signed-off-by Alex Deucher <[email protected]>Signed-off-by Benjamin Herrenschmidt <[email protected]>CC <[email protected]>Further discussion with the hw teams have revealed that this is still an issue on newer asics so I think your original patch is correct after all. Just disable 64 bit MSIs on all AMD audio PCI ids.
Quoted 6 lines
Allright, I won't resend the whole series, I can just pickup my previous patch. Takashi, Bjorn, Dave, this series covers your 3 areas of maintainership, how do you want to proceed ? I'm happy to merge the whole lot via powerpc ASAP (since it's all CC'ed stable) if you guys send me the appropriate acks, otherwise, let me know.
I don't remember if I gave my formal review of your original patch, so if not,
Alex
Takashi Iwai
Reviewed-byAt Wed, 08 Oct 2014 16:28:16 +1100,
Quoted 16 lines · Benjamin Herrenschmidt
Quoted 6 lines · Alex Deucher
Quoted 6 lines
This moves the setting of the quirk flag to the audio driver.
While recent ASICs have that problem fixed, they don't seem to be listed in the PCI IDs of the current driver, so let's quirk all the ATI HDMI for now. The consequences are nil on x86 anyway.
Quoted 7 lines
Quoted 3 lines
Signed-off-by Alex Deucher <[email protected]>Signed-off-by Benjamin Herrenschmidt <[email protected]>CC <[email protected]>Further discussion with the hw teams have revealed that this is still an issue on newer asics so I think your original patch is correct after all. Just disable 64 bit MSIs on all AMD audio PCI ids.
Quoted 5 lines
Allright, I won't resend the whole series, I can just pickup my previous patch. Takashi, Bjorn, Dave, this series covers your 3 areas of maintainership, how do you want to proceed ? I'm happy to merge the whole lot via powerpc ASAP (since it's all CC'ed stable) if you guys send me the appropriate acks, otherwise, let me know.
Feel free to merge through your tree.
thanks,
Takashi
Quoted 9 lines · Benjamin Herrenschmidt
Quoted 3 lines
Further discussion with the hw teams have revealed that this is still an issue on newer asics so I think your original patch is correct after all. Just disable 64 bit MSIs on all AMD audio PCI ids.
Allright, I won't resend the whole series, I can just pickup my previous patch. Takashi, Bjorn, Dave, this series covers your 3 areas of maintainership, how do you want to proceed ? I'm happy to merge the whole lot via powerpc ASAP (since it's all CC'ed stable) if you guys send me the appropriate acks, otherwise, let me know.
So I got an Ack from Takashi but so far silence from Bjorn and Dave :-)
Ping ?
Cheers,
Ben.
Quoted 12 lines · Benjamin Herrenschmidt
Quoted 9 lines · Benjamin Herrenschmidt
Quoted 3 lines
Further discussion with the hw teams have revealed that this is still an issue on newer asics so I think your original patch is correct after all. Just disable 64 bit MSIs on all AMD audio PCI ids.
Allright, I won't resend the whole series, I can just pickup my previous patch. Takashi, Bjorn, Dave, this series covers your 3 areas of maintainership, how do you want to proceed ? I'm happy to merge the whole lot via powerpc ASAP (since it's all CC'ed stable) if you guys send me the appropriate acks, otherwise, let me know.
Quoted 3 lines
So I got an Ack from Takashi but so far silence from Bjorn and Dave :-)
Ping ?
I'm fine with the radeon patches going through your tree rather than through my tree.
Alex
Bjorn Helgaas
maintainerQuoted 12 lines · Benjamin Herrenschmidt
Quoted 9 lines · Benjamin Herrenschmidt
Quoted 3 lines
Further discussion with the hw teams have revealed that this is still an issue on newer asics so I think your original patch is correct after all. Just disable 64 bit MSIs on all AMD audio PCI ids.
Allright, I won't resend the whole series, I can just pickup my previous patch. Takashi, Bjorn, Dave, this series covers your 3 areas of maintainership, how do you want to proceed ? I'm happy to merge the whole lot via powerpc ASAP (since it's all CC'ed stable) if you guys send me the appropriate acks, otherwise, let me know.
Quoted 3 lines
So I got an Ack from Takashi but so far silence from Bjorn and Dave :-)
Ping ?
Sorry, I've been taking a breather after the v3.17 release. I'll try to look at these soon, but I will be on vacation Thu-Fri this week).
Bjorn
Quoted 15 lines · Benjamin Herrenschmidt
Quoted 6 lines · Alex Deucher
Quoted 6 lines
This moves the setting of the quirk flag to the audio driver.
While recent ASICs have that problem fixed, they don't seem to be listed in the PCI IDs of the current driver, so let's quirk all the ATI HDMI for now. The consequences are nil on x86 anyway.
Quoted 7 lines
Quoted 3 lines
Signed-off-by Alex Deucher <[email protected]>Signed-off-by Benjamin Herrenschmidt <[email protected]>CC <[email protected]>Further discussion with the hw teams have revealed that this is still an issue on newer asics so I think your original patch is correct after all. Just disable 64 bit MSIs on all AMD audio PCI ids.
Quoted 5 lines
Allright, I won't resend the whole series, I can just pickup my previous patch. Takashi, Bjorn, Dave, this series covers your 3 areas of maintainership, how do you want to proceed ? I'm happy to merge the whole lot via powerpc ASAP (since it's all CC'ed stable) if you guys send me the appropriate acks, otherwise, let me know.
It all looks beautiful to me.
If I were merging it, I would change this:
pci/msi: Add device flag indicating that 64-bit MSIs don't work
to this:
PCI/MSI: Add device flag indicating that 64-bit MSIs don't work
I'd be happy to merge it, but given what I know now, I would wait and merge it during the v3.19 merge window. It sounds like it's more urgent than that and should be merged earlier, but from the changelogs, it looks like we're just replacing the powerpc-specific quirk with a more generic one.
So I assume you'll merge it via powerpc unless I hear otherwise.
Bjorn
Quoted 8 lines · Bjorn Helgaas
PCI/MSI: Add device flag indicating that 64-bit MSIs don't work
I'd be happy to merge it, but given what I know now, I would wait and merge it during the v3.19 merge window. It sounds like it's more urgent than that and should be merged earlier, but from the changelogs, it looks like we're just replacing the powerpc-specific quirk with a more generic one.
So I assume you'll merge it via powerpc unless I hear otherwise.
Either way works but it's easy to keep it all in one series in one tree.
The urgency is that the current powerpc quirk works only with one specific card (ie, one device ID for gfx and one for audio) and misses the DMA limitation of the sound driver (which is a somewhat orthogonal issue but the patch for it is in the series).
Any other radeon card causes the machine to crash at boot (the driver doesn't recover well from the EEH error triggered by the bad MSI address and the world falls over from there).
So I want this to go back into distros.
Cheers,
Ben.
Bjorn Helgaas
maintainerQuoted 17 lines · Benjamin Herrenschmidt
Quoted 8 lines · Bjorn Helgaas
PCI/MSI: Add device flag indicating that 64-bit MSIs don't work
I'd be happy to merge it, but given what I know now, I would wait and merge it during the v3.19 merge window. It sounds like it's more urgent than that and should be merged earlier, but from the changelogs, it looks like we're just replacing the powerpc-specific quirk with a more generic one.
So I assume you'll merge it via powerpc unless I hear otherwise.
Either way works but it's easy to keep it all in one series in one tree.
The urgency is that the current powerpc quirk works only with one specific card (ie, one device ID for gfx and one for audio) and misses the DMA limitation of the sound driver (which is a somewhat orthogonal issue but the patch for it is in the series).
Quoted 5 lines
Any other radeon card causes the machine to crash at boot (the driver doesn't recover well from the EEH error triggered by the bad MSI address and the world falls over from there).
So I want this to go back into distros.
I'm still assuming you're going to merge this series, but I don't see it in your tree (https://git.kernel.org/cgit/linux/kernel/git/benh/powerpc.git/)
yet. Do you want me to do anything with it?
Bjorn
Quoted 7 lines · Bjorn Helgaas
Quoted 2 lines · Benjamin Herrenschmidt
Quoted 1 line · Bjorn Helgaas
PCI/MSI: Add device flag indicating that 64-bit MSIs don't work
I'm still assuming you're going to merge this series, but I don't see it in your tree (https://git.kernel.org/cgit/linux/kernel/git/benh/powerpc.git/)
yet. Do you want me to do anything with it?
I'm doing the powerpc tree this cycle, so it'd be in my tree, but it's not:
https://git.kernel.org/cgit/linux/kernel/git/mpe/linux.git/
Ben if you want me to take it let me know.
cheers
Quoted 9 lines · Michael Ellerman
Quoted 7 lines · Bjorn Helgaas
Quoted 2 lines · Benjamin Herrenschmidt
Quoted 1 line · Bjorn Helgaas
PCI/MSI: Add device flag indicating that 64-bit MSIs don't work
I'm still assuming you're going to merge this series, but I don't see it in your tree (https://git.kernel.org/cgit/linux/kernel/git/benh/powerpc.git/)
yet. Do you want me to do anything with it?
Quoted 5 lines
I'm doing the powerpc tree this cycle, so it'd be in my tree, but it's not:
https://git.kernel.org/cgit/linux/kernel/git/mpe/linux.git/
Ben if you want me to take it let me know.
Hrm, I might have dropped the ball accidentally here. Bjorn did you actually Ack the core changes ? In that case we should probably pick it up.
Cheers,
Ben.
Bjorn Helgaas
maintainerQuoted 12 lines · Benjamin Herrenschmidt
Quoted 11 lines · Michael Ellerman
Quoted 7 lines · Bjorn Helgaas
Quoted 2 lines · Benjamin Herrenschmidt
Quoted 1 line · Bjorn Helgaas
PCI/MSI: Add device flag indicating that 64-bit MSIs don't work
I'm still assuming you're going to merge this series, but I don't see it in your tree (https://git.kernel.org/cgit/linux/kernel/git/benh/powerpc.git/)
yet. Do you want me to do anything with it?I'm doing the powerpc tree this cycle, so it'd be in my tree, but it's not:
Quoted 7 lines
Quoted 3 lines
https://git.kernel.org/cgit/linux/kernel/git/mpe/linux.git/
Ben if you want me to take it let me know.
Hrm, I might have dropped the ball accidentally here. Bjorn did you actually Ack the core changes ? In that case we should probably pick it up.
Yep, I acked it earlier in this thread (Oct 15).
Bjorn
Michael Ellerman
Acked-by Bjorn HelgaasQuoted 12 lines · Benjamin Herrenschmidt
Quoted 11 lines · Michael Ellerman
Quoted 7 lines · Bjorn Helgaas
Quoted 2 lines · Benjamin Herrenschmidt
Quoted 1 line · Bjorn Helgaas
PCI/MSI: Add device flag indicating that 64-bit MSIs don't work
I'm still assuming you're going to merge this series, but I don't see it in your tree (https://git.kernel.org/cgit/linux/kernel/git/benh/powerpc.git/)
yet. Do you want me to do anything with it?I'm doing the powerpc tree this cycle, so it'd be in my tree, but it's not:
Quoted 7 lines
Quoted 3 lines
https://git.kernel.org/cgit/linux/kernel/git/mpe/linux.git/
Ben if you want me to take it let me know.
Hrm, I might have dropped the ball accidentally here. Bjorn did you actually Ack the core changes ? In that case we should probably pick it up.
I tried piecing together this series with v2 of patch 3 as you described, I think, but it didn't apply cleanly, and I'm not confident I won't screw it up.
So please resend the series the way you want it to go in.
You got an ack from Bjorn:
And he asked you change the subject on patch 2 to:
PCI/MSI: Add device flag indicating that 64-bit MSIs don't work
cheers