]> err.no Git - linux-2.6/blobdiff - drivers/ata/sata_mv.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/shaggy...
[linux-2.6] / drivers / ata / sata_mv.c
index 8d864e5e97edd46f27556a7290502ce4242e2ed7..37b850ae084559d573e125a096cbdfe0eac3f958 100644 (file)
@@ -2503,6 +2503,35 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
 
        case chip_7042:
                hp_flags |= MV_HP_PCIE;
+               if (pdev->vendor == PCI_VENDOR_ID_TTI &&
+                   (pdev->device == 0x2300 || pdev->device == 0x2310))
+               {
+                       /*
+                        * Highpoint RocketRAID PCIe 23xx series cards:
+                        *
+                        * Unconfigured drives are treated as "Legacy"
+                        * by the BIOS, and it overwrites sector 8 with
+                        * a "Lgcy" metadata block prior to Linux boot.
+                        *
+                        * Configured drives (RAID or JBOD) leave sector 8
+                        * alone, but instead overwrite a high numbered
+                        * sector for the RAID metadata.  This sector can
+                        * be determined exactly, by truncating the physical
+                        * drive capacity to a nice even GB value.
+                        *
+                        * RAID metadata is at: (dev->n_sectors & ~0xfffff)
+                        *
+                        * Warn the user, lest they think we're just buggy.
+                        */
+                       printk(KERN_WARNING DRV_NAME ": Highpoint RocketRAID"
+                               " BIOS CORRUPTS DATA on all attached drives,"
+                               " regardless of if/how they are configured."
+                               " BEWARE!\n");
+                       printk(KERN_WARNING DRV_NAME ": For data safety, do not"
+                               " use sectors 8-9 on \"Legacy\" drives,"
+                               " and avoid the final two gigabytes on"
+                               " all RocketRAID BIOS initialized drives.\n");
+               }
        case chip_6042:
                hpriv->ops = &mv6xxx_ops;
                hp_flags |= MV_HP_GEN_IIE;