}
        }
 
+       if ((dev->horkage & ATA_HORKAGE_FIRMWARE_WARN) && print_info) {
+               ata_dev_printk(dev, KERN_WARNING, "WARNING: device requires "
+                              "firmware update to be fully functional.\n");
+               ata_dev_printk(dev, KERN_WARNING, "         contact the vendor "
+                              "or visit http://ata.wiki.kernel.org.\n");
+       }
+
        return 0;
 
 err_out_nosup:
        { "ST380817AS",         "3.42",         ATA_HORKAGE_NONCQ },
        { "ST3160023AS",        "3.42",         ATA_HORKAGE_NONCQ },
 
+       /* Seagate NCQ + FLUSH CACHE firmware bug */
+       { "ST31500341AS",       "9JU138",       ATA_HORKAGE_NONCQ |
+                                               ATA_HORKAGE_FIRMWARE_WARN },
+       { "ST31000333AS",       "9FZ136",       ATA_HORKAGE_NONCQ |
+                                               ATA_HORKAGE_FIRMWARE_WARN },
+       { "ST3640623AS",        "9FZ164",       ATA_HORKAGE_NONCQ |
+                                               ATA_HORKAGE_FIRMWARE_WARN },
+       { "ST3640323AS",        "9FZ134",       ATA_HORKAGE_NONCQ |
+                                               ATA_HORKAGE_FIRMWARE_WARN },
+       { "ST3320813AS",        "9FZ182",       ATA_HORKAGE_NONCQ |
+                                               ATA_HORKAGE_FIRMWARE_WARN },
+       { "ST3320613AS",        "9FZ162",       ATA_HORKAGE_NONCQ |
+                                               ATA_HORKAGE_FIRMWARE_WARN },
+
        /* Blacklist entries taken from Silicon Image 3124/3132
           Windows driver .inf file - also several Linux problem reports */
        { "HTS541060G9SA00",    "MB3OC60D",     ATA_HORKAGE_NONCQ, },
 
        ATA_HORKAGE_BRIDGE_OK   = (1 << 10),    /* no bridge limits */
        ATA_HORKAGE_ATAPI_MOD16_DMA = (1 << 11), /* use ATAPI DMA for commands
                                                    not multiple of 16 bytes */
+       ATA_HORKAGE_FIRMWARE_WARN = (1 << 12),  /* firwmare update warning */
 
         /* DMA mask for user DMA control: User visible values; DO NOT
            renumber */