[patch 2.6.1] Silicon Image 3512 SATA Controller - Tested

From: Aron Rubin
Date: Mon Jan 12 2004 - 09:46:58 EST


This patch enables the Silicon Image 3512 SATA Controller and has been tested and functioning without any apparent bugs (I do not have a full test suite but I am not booting off a device attached to this controller). This patch is against the Dave Jones 2.6.1-1.34 kernel source rpm.

You may remember I was trying to get help on this chipset before. My patch is simply a duplicate of the entries for the 3112 chipset. It did not work fully with prior kernels, giving me a "Interrupt Lost" errors. Whatever else was done to 2.6.1 had made it happy again. Also I did not have to use any special commandline options.

Aron

--

ssh aron@xxxxxxxxxxxx cat /dev/brain | grep ^work:

Aron Rubin Member, Engineering Staff
Lockheed Martin E-Mail: arubin@xxxxxxxxxxxx
Advanced Technology Laboratories Phone: 856.792.9865
3 Executive Campus Fax: 856.792.9930
Cherry Hill, NJ USA 08002 Web: http://www.atl.lmco.com
--- linux-2.6.1-1.34/include/linux/pci_ids.h.orig 2004-01-11 10:30:11.000000000 -0500
+++ linux-2.6.1-1.34/include/linux/pci_ids.h 2004-01-11 10:44:25.000000000 -0500
@@ -883,6 +883,7 @@

#define PCI_DEVICE_ID_SII_680 0x0680
#define PCI_DEVICE_ID_SII_3112 0x3112
+#define PCI_DEVICE_ID_SII_3512 0x3512
#define PCI_DEVICE_ID_SII_1210SA 0x0240

#define PCI_VENDOR_ID_VISION 0x1098
--- linux-2.6.1-1.34/drivers/scsi/sata_sil.c.orig 2004-01-11 21:41:36.968803995 -0500
+++ linux-2.6.1-1.34/drivers/scsi/sata_sil.c 2004-01-11 10:43:09.000000000 -0500
@@ -39,6 +39,7 @@

enum {
sil_3112 = 0,
+ sil_3512 = 1,

SIL_IDE0_TF = 0x80,
SIL_IDE0_CTL = 0x8A,
@@ -62,6 +63,7 @@

static struct pci_device_id sil_pci_tbl[] = {
{ 0x1095, 0x3112, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3112 },
+ { 0x1095, 0x3512, PCI_ANY_ID, PCI_ANY_ID, 0, 0, sil_3512 },
{ } /* terminate list */
};

@@ -121,6 +123,15 @@
.udma_mask = 0x7f, /* udma0-6; FIXME */
.port_ops = &sil_ops,
},
+ /* sil_3512 */
+ {
+ .sht = &sil_sht,
+ .host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
+ ATA_FLAG_SRST | ATA_FLAG_MMIO,
+ .pio_mask = 0x03, /* pio3-4 */
+ .udma_mask = 0x7f, /* udma0-6; FIXME */
+ .port_ops = &sil_ops,
+ },
};

MODULE_AUTHOR("Jeff Garzik");
--- linux-2.6.1-1.34/drivers/ide/pci/siimage.c.orig 2004-01-11 10:14:19.000000000 -0500
+++ linux-2.6.1-1.34/drivers/ide/pci/siimage.c 2004-01-11 10:44:12.000000000 -0500
@@ -55,6 +55,7 @@
switch(pdev->device)
{
case PCI_DEVICE_ID_SII_3112:
+ case PCI_DEVICE_ID_SII_3512:
case PCI_DEVICE_ID_SII_1210SA:
return 1;
case PCI_DEVICE_ID_SII_680:
@@ -1179,6 +1180,7 @@
{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_680, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_3112, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_1210SA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},
+ { PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_SII_3512, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3},
{ 0, },
};

--- linux-2.6.1-1.34/drivers/ide/pci/siimage.h.orig 2004-01-11 10:15:21.000000000 -0500
+++ linux-2.6.1-1.34/drivers/ide/pci/siimage.h 2004-01-11 10:43:41.000000000 -0500
@@ -82,6 +82,18 @@
.enablebits = {{0x00,0x00,0x00}, {0x00,0x00,0x00}},
.bootable = ON_BOARD,
.extra = 0,
+ },{ /* 3 */
+ .vendor = PCI_VENDOR_ID_CMD,
+ .device = PCI_DEVICE_ID_SII_3512,
+ .name = "SiI3512 Serial ATA",
+ .init_chipset = init_chipset_siimage,
+ .init_iops = init_iops_siimage,
+ .init_hwif = init_hwif_siimage,
+ .channels = 2,
+ .autodma = AUTODMA,
+ .enablebits = {{0x00,0x00,0x00}, {0x00,0x00,0x00}},
+ .bootable = ON_BOARD,
+ .extra = 0,
},{
.vendor = 0,
.device = 0,