aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-12-07 18:47:01 -0500
committerJeff Garzik <jeff@garzik.org>2007-12-17 20:33:11 -0500
commitf7fe7ad4bcaba17f05d5cbf1119772c645783b08 (patch)
treeb267cfb43c39aa7a038b13acf620bd1e0cab29a8 /drivers/ata
parent8cf32ac6578a70025be1103466da9d1d6141429e (diff)
libata: clear link->eh_info.serror from ata_std_postreset()
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>
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/libata-core.c1
-rw-r--r--drivers/ata/sata_sil.c11
2 files changed, 2 insertions, 10 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index e4dea8623a71..b0d1dc3cdb2d 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -3923,6 +3923,7 @@ void ata_std_postreset(struct ata_link *link, unsigned int *classes)
3923 /* clear SError */ 3923 /* clear SError */
3924 if (sata_scr_read(link, SCR_ERROR, &serror) == 0) 3924 if (sata_scr_read(link, SCR_ERROR, &serror) == 0)
3925 sata_scr_write(link, SCR_ERROR, serror); 3925 sata_scr_write(link, SCR_ERROR, serror);
3926 link->eh_info.serror = 0;
3926 3927
3927 /* is double-select really necessary? */ 3928 /* is double-select really necessary? */
3928 if (classes[0] != ATA_DEV_NONE) 3929 if (classes[0] != ATA_DEV_NONE)
diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c
index 025622b14efb..f5119bf40c24 100644
--- a/drivers/ata/sata_sil.c
+++ b/drivers/ata/sata_sil.c
@@ -394,16 +394,7 @@ static void sil_host_intr(struct ata_port *ap, u32 bmdma2)
394 * it's PHYRDY CHG. 394 * it's PHYRDY CHG.
395 */ 395 */
396 if (serror & SERR_PHYRDY_CHG) { 396 if (serror & SERR_PHYRDY_CHG) {
397 /* Trigger hotplug and accumulate SError only 397 ap->link.eh_info.serror |= serror;
398 * if the port isn't already frozen.
399 * Otherwise, PHY events during hardreset
400 * makes controllers with broken SIEN repeat
401 * probing needlessly.
402 */
403 if (!(ap->pflags & ATA_PFLAG_FROZEN)) {
404 ata_ehi_hotplugged(&ap->link.eh_info);
405 ap->link.eh_info.serror |= serror;
406 }
407 goto freeze; 398 goto freeze;
408 } 399 }
409 400