diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ata/libata-core.c | 5 | ||||
-rw-r--r-- | drivers/ata/libata-sff.c | 8 |
2 files changed, 10 insertions, 3 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 7f53ea725bce..47c70392ec4d 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -5681,9 +5681,8 @@ int ata_device_add(const struct ata_probe_ent *ent) | |||
5681 | ap->ioaddr.bmdma_addr, | 5681 | ap->ioaddr.bmdma_addr, |
5682 | irq_line); | 5682 | irq_line); |
5683 | 5683 | ||
5684 | ata_chk_status(ap); | 5684 | /* freeze port before requesting IRQ */ |
5685 | host->ops->irq_clear(ap); | 5685 | ata_eh_freeze_port(ap); |
5686 | ata_eh_freeze_port(ap); /* freeze port before requesting IRQ */ | ||
5687 | } | 5686 | } |
5688 | 5687 | ||
5689 | /* obtain irq, that may be shared between channels */ | 5688 | /* obtain irq, that may be shared between channels */ |
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 95ff186f0ccd..10ee22ae5c15 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
@@ -700,6 +700,14 @@ void ata_bmdma_freeze(struct ata_port *ap) | |||
700 | writeb(ap->ctl, (void __iomem *)ioaddr->ctl_addr); | 700 | writeb(ap->ctl, (void __iomem *)ioaddr->ctl_addr); |
701 | else | 701 | else |
702 | outb(ap->ctl, ioaddr->ctl_addr); | 702 | outb(ap->ctl, ioaddr->ctl_addr); |
703 | |||
704 | /* Under certain circumstances, some controllers raise IRQ on | ||
705 | * ATA_NIEN manipulation. Also, many controllers fail to mask | ||
706 | * previously pending IRQ on ATA_NIEN assertion. Clear it. | ||
707 | */ | ||
708 | ata_chk_status(ap); | ||
709 | |||
710 | ap->ops->irq_clear(ap); | ||
703 | } | 711 | } |
704 | 712 | ||
705 | /** | 713 | /** |