Skip to content

Commit

Permalink
libata: clear link->eh_info.serror from ata_std_postreset()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Tejun Heo authored and Jeff Garzik committed Dec 18, 2007
1 parent 8cf32ac commit f7fe7ad
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 10 deletions.
1 change: 1 addition & 0 deletions drivers/ata/libata-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
11 changes: 1 addition & 10 deletions drivers/ata/sata_sil.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit f7fe7ad

Please sign in to comment.