Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

i2c-piix4: Add Hygon Dhyana SMBus support

The Hygon Dhyana CPU has the SMBus device with PCI device ID 0x790b,
which is the same as AMD CZ SMBus device. So add Hygon Dhyana support
to the i2c-piix4 driver by using the code path of AMD.

Signed-off-by: Pu Wen <puwen@hygon.cn>
Reviewed-by: Jean Delvare <jdelvare@suse.de>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>

authored by

Pu Wen and committed by
Wolfram Sang
24beb83a 5d756112

+14 -4
+2
Documentation/i2c/busses/i2c-piix4
··· 15 15 http://support.amd.com/us/Embedded_TechDocs/44413.pdf 16 16 * AMD Hudson-2, ML, CZ 17 17 Datasheet: Not publicly available 18 + * Hygon CZ 19 + Datasheet: Not publicly available 18 20 * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge 19 21 Datasheet: Publicly available at the SMSC website http://www.smsc.com 20 22
+1
drivers/i2c/busses/Kconfig
··· 186 186 AMD Hudson-2 187 187 AMD ML 188 188 AMD CZ 189 + Hygon CZ 189 190 Serverworks OSB4 190 191 Serverworks CSB5 191 192 Serverworks CSB6
+11 -4
drivers/i2c/busses/i2c-piix4.c
··· 19 19 Serverworks OSB4, CSB5, CSB6, HT-1000, HT-1100 20 20 ATI IXP200, IXP300, IXP400, SB600, SB700/SP5100, SB800 21 21 AMD Hudson-2, ML, CZ 22 + Hygon CZ 22 23 SMSC Victory66 23 24 24 25 Note: we assume there can only be one device, with one or more ··· 290 289 PIIX4_dev->revision >= 0x41) || 291 290 (PIIX4_dev->vendor == PCI_VENDOR_ID_AMD && 292 291 PIIX4_dev->device == PCI_DEVICE_ID_AMD_KERNCZ_SMBUS && 293 - PIIX4_dev->revision >= 0x49)) 292 + PIIX4_dev->revision >= 0x49) || 293 + (PIIX4_dev->vendor == PCI_VENDOR_ID_HYGON && 294 + PIIX4_dev->device == PCI_DEVICE_ID_AMD_KERNCZ_SMBUS)) 294 295 smb_en = 0x00; 295 296 else 296 297 smb_en = (aux) ? 0x28 : 0x2c; ··· 364 361 piix4_smba, i2ccfg >> 4); 365 362 366 363 /* Find which register is used for port selection */ 367 - if (PIIX4_dev->vendor == PCI_VENDOR_ID_AMD) { 364 + if (PIIX4_dev->vendor == PCI_VENDOR_ID_AMD || 365 + PIIX4_dev->vendor == PCI_VENDOR_ID_HYGON) { 368 366 switch (PIIX4_dev->device) { 369 367 case PCI_DEVICE_ID_AMD_KERNCZ_SMBUS: 370 368 piix4_port_sel_sb800 = SB800_PIIX4_PORT_IDX_KERNCZ; ··· 798 794 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SBX00_SMBUS) }, 799 795 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_HUDSON2_SMBUS) }, 800 796 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_KERNCZ_SMBUS) }, 797 + { PCI_DEVICE(PCI_VENDOR_ID_HYGON, PCI_DEVICE_ID_AMD_KERNCZ_SMBUS) }, 801 798 { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, 802 799 PCI_DEVICE_ID_SERVERWORKS_OSB4) }, 803 800 { PCI_DEVICE(PCI_VENDOR_ID_SERVERWORKS, ··· 909 904 if ((dev->vendor == PCI_VENDOR_ID_ATI && 910 905 dev->device == PCI_DEVICE_ID_ATI_SBX00_SMBUS && 911 906 dev->revision >= 0x40) || 912 - dev->vendor == PCI_VENDOR_ID_AMD) { 907 + dev->vendor == PCI_VENDOR_ID_AMD || 908 + dev->vendor == PCI_VENDOR_ID_HYGON) { 913 909 bool notify_imc = false; 914 910 is_sb800 = true; 915 911 916 - if (dev->vendor == PCI_VENDOR_ID_AMD && 912 + if ((dev->vendor == PCI_VENDOR_ID_AMD || 913 + dev->vendor == PCI_VENDOR_ID_HYGON) && 917 914 dev->device == PCI_DEVICE_ID_AMD_KERNCZ_SMBUS) { 918 915 u8 imc; 919 916