|
|
@@ -98,7 +98,7 @@
|
|
|
#define SB800_PIIX4_PORT_IDX_MASK 0x06
|
|
|
#define SB800_PIIX4_PORT_IDX_SHIFT 1
|
|
|
|
|
|
-/* On kerncz, SmBus0Sel is at bit 20:19 of PMx00 DecodeEn */
|
|
|
+/* On kerncz and Hudson2, SmBus0Sel is at bit 20:19 of PMx00 DecodeEn */
|
|
|
#define SB800_PIIX4_PORT_IDX_KERNCZ 0x02
|
|
|
#define SB800_PIIX4_PORT_IDX_MASK_KERNCZ 0x18
|
|
|
#define SB800_PIIX4_PORT_IDX_SHIFT_KERNCZ 3
|
|
|
@@ -362,18 +362,16 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
|
|
|
|
|
|
/* Find which register is used for port selection */
|
|
|
if (PIIX4_dev->vendor == PCI_VENDOR_ID_AMD) {
|
|
|
- switch (PIIX4_dev->device) {
|
|
|
- case PCI_DEVICE_ID_AMD_KERNCZ_SMBUS:
|
|
|
+ if (PIIX4_dev->device == PCI_DEVICE_ID_AMD_KERNCZ_SMBUS ||
|
|
|
+ (PIIX4_dev->device == PCI_DEVICE_ID_AMD_HUDSON2_SMBUS &&
|
|
|
+ PIIX4_dev->revision >= 0x1F)) {
|
|
|
piix4_port_sel_sb800 = SB800_PIIX4_PORT_IDX_KERNCZ;
|
|
|
piix4_port_mask_sb800 = SB800_PIIX4_PORT_IDX_MASK_KERNCZ;
|
|
|
piix4_port_shift_sb800 = SB800_PIIX4_PORT_IDX_SHIFT_KERNCZ;
|
|
|
- break;
|
|
|
- case PCI_DEVICE_ID_AMD_HUDSON2_SMBUS:
|
|
|
- default:
|
|
|
+ } else {
|
|
|
piix4_port_sel_sb800 = SB800_PIIX4_PORT_IDX_ALT;
|
|
|
piix4_port_mask_sb800 = SB800_PIIX4_PORT_IDX_MASK;
|
|
|
piix4_port_shift_sb800 = SB800_PIIX4_PORT_IDX_SHIFT;
|
|
|
- break;
|
|
|
}
|
|
|
} else {
|
|
|
if (!request_muxed_region(SB800_PIIX4_SMB_IDX, 2,
|