|
@@ -21,6 +21,9 @@
|
|
|
*
|
|
|
* CSB6: `Champion South Bridge' IDE Interface (optional: third channel)
|
|
|
*
|
|
|
+ * HT1000: AKA BCM5785 - Hypertransport Southbridge for Opteron systems. IDE
|
|
|
+ * controller same as the CSB6. Single channel ATA100 only.
|
|
|
+ *
|
|
|
* Documentation:
|
|
|
* Available under NDA only. Errata info very hard to get.
|
|
|
*
|
|
@@ -71,6 +74,8 @@ static u8 svwks_ratemask (ide_drive_t *drive)
|
|
|
if (!svwks_revision)
|
|
|
pci_read_config_byte(dev, PCI_REVISION_ID, &svwks_revision);
|
|
|
|
|
|
+ if (dev->device == PCI_DEVICE_ID_SERVERWORKS_HT1000IDE)
|
|
|
+ return 2;
|
|
|
if (dev->device == PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) {
|
|
|
u32 reg = 0;
|
|
|
if (isa_dev)
|
|
@@ -109,6 +114,7 @@ static u8 svwks_csb_check (struct pci_dev *dev)
|
|
|
case PCI_DEVICE_ID_SERVERWORKS_CSB5IDE:
|
|
|
case PCI_DEVICE_ID_SERVERWORKS_CSB6IDE:
|
|
|
case PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2:
|
|
|
+ case PCI_DEVICE_ID_SERVERWORKS_HT1000IDE:
|
|
|
return 1;
|
|
|
default:
|
|
|
break;
|
|
@@ -438,6 +444,13 @@ static unsigned int __devinit init_chipset_svwks (struct pci_dev *dev, const cha
|
|
|
btr |= (svwks_revision >= SVWKS_CSB5_REVISION_NEW) ? 0x3 : 0x2;
|
|
|
pci_write_config_byte(dev, 0x5A, btr);
|
|
|
}
|
|
|
+ /* Setup HT1000 SouthBridge Controller - Single Channel Only */
|
|
|
+ else if (dev->device == PCI_DEVICE_ID_SERVERWORKS_HT1000IDE) {
|
|
|
+ pci_read_config_byte(dev, 0x5A, &btr);
|
|
|
+ btr &= ~0x40;
|
|
|
+ btr |= 0x3;
|
|
|
+ pci_write_config_byte(dev, 0x5A, btr);
|
|
|
+ }
|
|
|
|
|
|
return (dev->irq) ? dev->irq : 0;
|
|
|
}
|
|
@@ -629,6 +642,15 @@ static ide_pci_device_t serverworks_chipsets[] __devinitdata = {
|
|
|
.channels = 1, /* 2 */
|
|
|
.autodma = AUTODMA,
|
|
|
.bootable = ON_BOARD,
|
|
|
+ },{ /* 4 */
|
|
|
+ .name = "SvrWks HT1000",
|
|
|
+ .init_setup = init_setup_svwks,
|
|
|
+ .init_chipset = init_chipset_svwks,
|
|
|
+ .init_hwif = init_hwif_svwks,
|
|
|
+ .init_dma = init_dma_svwks,
|
|
|
+ .channels = 1, /* 2 */
|
|
|
+ .autodma = AUTODMA,
|
|
|
+ .bootable = ON_BOARD,
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -653,6 +675,7 @@ static struct pci_device_id svwks_pci_tbl[] = {
|
|
|
{ PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
|
|
|
{ PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
|
|
|
{ PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3},
|
|
|
+ { PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_HT1000IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4},
|
|
|
{ 0, },
|
|
|
};
|
|
|
MODULE_DEVICE_TABLE(pci, svwks_pci_tbl);
|