From 3fe4e198b7e9d10953a9d43a3cd820cc571b55ed Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Mon, 12 Jun 2006 18:45:55 +0900 Subject: [PATCH] --- yaml --- r: 29519 b: refs/heads/master c: d4c85325a817d3351e61c4be64b437116e8483b4 h: refs/heads/master i: 29517: 273380e0941614b06681d53d0a2fc60d855bd980 29515: d6c52d2275736b1c430d07af94e82dc6b76a507d 29511: 40be92ac9c3f4c10feceaffb9e7a648c8da2bea9 29503: e9f89f284dd01e14e2c2bdc46030272d2304bcb7 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/sata_sil.c | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index ef3c3f44f90d..5f2f8e9f843c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: aeb2ecd6096182cc080d37679080c0f088dcd4a4 +refs/heads/master: d4c85325a817d3351e61c4be64b437116e8483b4 diff --git a/trunk/drivers/scsi/sata_sil.c b/trunk/drivers/scsi/sata_sil.c index a7e99a1def2f..bc9f918a7f28 100644 --- a/trunk/drivers/scsi/sata_sil.c +++ b/trunk/drivers/scsi/sata_sil.c @@ -344,7 +344,25 @@ static void sil_host_intr(struct ata_port *ap, u32 bmdma2) u8 status; if (unlikely(bmdma2 & SIL_DMA_SATA_IRQ)) { - ata_ehi_hotplugged(&ap->eh_info); + u32 serror; + + /* SIEN doesn't mask SATA IRQs on some 3112s. Those + * controllers continue to assert IRQ as long as + * SError bits are pending. Clear SError immediately. + */ + serror = sil_scr_read(ap, SCR_ERROR); + sil_scr_write(ap, SCR_ERROR, serror); + + /* 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->flags & ATA_FLAG_FROZEN)) { + ata_ehi_hotplugged(&ap->eh_info); + ap->eh_info.serror |= serror; + } + goto freeze; }