|
@@ -724,14 +724,37 @@ static const struct sdhci_pci_fixes sdhci_rtsx = {
|
|
|
.probe_slot = rtsx_probe_slot,
|
|
|
};
|
|
|
|
|
|
+/*AMD chipset generation*/
|
|
|
+enum amd_chipset_gen {
|
|
|
+ AMD_CHIPSET_BEFORE_ML,
|
|
|
+ AMD_CHIPSET_CZ,
|
|
|
+ AMD_CHIPSET_NL,
|
|
|
+ AMD_CHIPSET_UNKNOWN,
|
|
|
+};
|
|
|
+
|
|
|
static int amd_probe(struct sdhci_pci_chip *chip)
|
|
|
{
|
|
|
struct pci_dev *smbus_dev;
|
|
|
+ enum amd_chipset_gen gen;
|
|
|
|
|
|
smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
|
|
|
PCI_DEVICE_ID_AMD_HUDSON2_SMBUS, NULL);
|
|
|
+ if (smbus_dev) {
|
|
|
+ gen = AMD_CHIPSET_BEFORE_ML;
|
|
|
+ } else {
|
|
|
+ smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
|
|
|
+ PCI_DEVICE_ID_AMD_KERNCZ_SMBUS, NULL);
|
|
|
+ if (smbus_dev) {
|
|
|
+ if (smbus_dev->revision < 0x51)
|
|
|
+ gen = AMD_CHIPSET_CZ;
|
|
|
+ else
|
|
|
+ gen = AMD_CHIPSET_NL;
|
|
|
+ } else {
|
|
|
+ gen = AMD_CHIPSET_UNKNOWN;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- if (smbus_dev && (smbus_dev->revision < 0x51)) {
|
|
|
+ if ((gen == AMD_CHIPSET_BEFORE_ML) || (gen == AMD_CHIPSET_CZ)) {
|
|
|
chip->quirks2 |= SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD;
|
|
|
chip->quirks2 |= SDHCI_QUIRK2_BROKEN_HS200;
|
|
|
}
|