libata: clear link->eh_info.serror from ata_std_postreset()
authorTejun Heo <htejun@gmail.com>
Fri, 7 Dec 2007 23:47:01 +0000 (08:47 +0900)
committerJeff Garzik <jeff@garzik.org>
Tue, 18 Dec 2007 01:33:11 +0000 (20:33 -0500)
link->eh_info.serror is used to cache SError for controllers which
need it cleared from interrupt handler to clear IRQ.  It also should
be cleared after reset just like SError itself.

Make ata_std_postreset() clear link->eh_info.serror too and update
sata_sil such that it doesn't care about bookkeeping the value.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/libata-core.c
drivers/ata/sata_sil.c

index e4dea8623a718675f72178fb03c24a3d6ab2837d..b0d1dc3cdb2d8b111769fa1b63a4aa8527026762 100644 (file)
@@ -3923,6 +3923,7 @@ void ata_std_postreset(struct ata_link *link, unsigned int *classes)
        /* clear SError */
        if (sata_scr_read(link, SCR_ERROR, &serror) == 0)
                sata_scr_write(link, SCR_ERROR, serror);
+       link->eh_info.serror = 0;
 
        /* is double-select really necessary? */
        if (classes[0] != ATA_DEV_NONE)
index 025622b14efb5dd141ab59e8487221d45205b048..f5119bf40c24f0e9e65219208e2fd65a47137e1f 100644 (file)
@@ -394,16 +394,7 @@ static void sil_host_intr(struct ata_port *ap, u32 bmdma2)
                 * it's PHYRDY CHG.
                 */
                if (serror & SERR_PHYRDY_CHG) {
-                       /* Trigger hotplug and accumulate SError only
-                        * if the port isn't already frozen.
-                        * Otherwise, PHY events during hardreset
-                        * makes controllers with broken SIEN repeat
-                        * probing needlessly.
-                        */
-                       if (!(ap->pflags & ATA_PFLAG_FROZEN)) {
-                               ata_ehi_hotplugged(&ap->link.eh_info);
-                               ap->link.eh_info.serror |= serror;
-                       }
+                       ap->link.eh_info.serror |= serror;
                        goto freeze;
                }