Compiling sata_sil.c

Michael Hipp Michael
Tue Mar 6 14:20:55 PST 2007


Still on my quest to get a SATA card working. It uses the sata_sil module.

How hard would it be to download the latest version of sata_sil.c from 
kernel 2.6.19 and compile it against 2.6.17? Is there a written 
procedure somewhere? Or is it too easy to need one?

This says it went from v0.9 to v2.0 at 2.6.18. I'm at v0.9.

   http://www.linuxhq.com/kernel/v2.6/18/drivers/scsi/sata_sil.c

This is scary:   (from 2.6.19)

CODE---------------------------------------------------------
static const struct sil_drivelist {
-   const char * product;
-   unsigned int quirk;
-} sil_blacklist [] = {
-   { "ST320012AS",      SIL_QUIRK_MOD15WRITE },
-   { "ST330013AS",      SIL_QUIRK_MOD15WRITE },
-   { "ST340017AS",      SIL_QUIRK_MOD15WRITE },
-   { "ST360015AS",      SIL_QUIRK_MOD15WRITE },
-   { "ST380013AS",      SIL_QUIRK_MOD15WRITE },
-   { "ST380023AS",      SIL_QUIRK_MOD15WRITE },
-   { "ST3120023AS",   SIL_QUIRK_MOD15WRITE },
-   { "ST3160023AS",   SIL_QUIRK_MOD15WRITE },
-   { "ST3120026AS",   SIL_QUIRK_MOD15WRITE },
-   { "ST3200822AS",   SIL_QUIRK_MOD15WRITE },
-   { "ST340014ASL",   SIL_QUIRK_MOD15WRITE },
-   { "ST360014ASL",   SIL_QUIRK_MOD15WRITE },
-   { "ST380011ASL",   SIL_QUIRK_MOD15WRITE },
-   { "ST3120022ASL",   SIL_QUIRK_MOD15WRITE },
-   { "ST3160021ASL",   SIL_QUIRK_MOD15WRITE },
-   { "Maxtor 4D060H3",   SIL_QUIRK_UDMA5MAX },
-   { }
-};
CODE---------------------------------------------------------

I've been reading changelogs where that list has been growing. Seems 
there's something weird about Seagate SATA drives or this chip/driver. 
It gets better:

http://www.mail-archive.com/linux-ide at vger.kernel.org/msg00958.html
CODE---------------------------------------------------------
Also I found this code in siimage.c (old driver for AAC-1210SA):
static int is_dev_seagate_sata(ide_drive_t *drive)
{
         const char *s = &drive->id->model[0];
         unsigned len;


         if (!drive->present)
                 return 0;


         len = strnlen(s, sizeof(drive->id->model));


         if ((len > 4) && (!memcmp(s, "ST", 2))) {
                 if ((!memcmp(s + len - 2, "AS", 2)) ||
                     (!memcmp(s + len - 3, "ASL", 3))) {
                         printk(KERN_INFO "%s: applying pessimistic 
Seagate "
                                          "errata fix\n", drive->name);
                         return 1;
                 }
         }
         return 0;
}
May be all Seagate SATA hard drives must be blacklisted in sata_sil.c ?
CODE---------------------------------------------------------

Naturally every SATA drive I own is Seagate. Not that I mind. I try to 
buy good stuff. But right now I wouldn't mind having a beater WDC to try.

Michael



More information about the Linux-users mailing list