LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] ide-cd: Handle strange interrupt on the Intel ESB2
@ 2006-12-04 16:30 Alan
2006-12-05 23:23 ` Bartlomiej Zolnierkiewicz
0 siblings, 1 reply; 4+ messages in thread
From: Alan @ 2006-12-04 16:30 UTC (permalink / raw)
To: linux-kernel, linux-ide, akpm
The ESB2 appears to emit spurious DMA interrupts when configured for
native mode and handling ATAPI devices. Stratus were able to pin this bug
down and produce a patch. This is a rework which applies the fixup only
to the ESB2 (for now). We can apply it to other chips later if the same
problem is found.
This code has been tested and confirmed to fix the problem on the tested
systems.
Signed-off-by: Alan Cox <alan@redhat.com>
(Most of the hard work done by Stratus however)
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.19-rc6-mm1/drivers/ide/ide-cd.c linux-2.6.19-rc6-mm1/drivers/ide/ide-cd.c
--- linux.vanilla-2.6.19-rc6-mm1/drivers/ide/ide-cd.c 2006-11-24 13:58:06.000000000 +0000
+++ linux-2.6.19-rc6-mm1/drivers/ide/ide-cd.c 2006-12-01 19:24:58.000000000 +0000
@@ -687,8 +687,15 @@
static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
{
struct request *rq = HWGROUP(drive)->rq;
+ ide_hwif_t *hwif = HWIF(drive);
int stat, err, sense_key;
+ /* We may have bogus DMA interrupts in PIO state here */
+ if (HWIF(drive)->dma_status && hwif->atapi_irq_bogon) {
+ stat = hwif->INB(hwif->dma_status);
+ /* Should we force the bit as well ? */
+ hwif->OUTB(stat, hwif->dma_status);
+ }
/* Check for errors. */
stat = HWIF(drive)->INB(IDE_STATUS_REG);
if (stat_ret)
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.19-rc6-mm1/drivers/ide/pci/piix.c linux-2.6.19-rc6-mm1/drivers/ide/pci/piix.c
--- linux.vanilla-2.6.19-rc6-mm1/drivers/ide/pci/piix.c 2006-11-24 13:58:29.000000000 +0000
+++ linux-2.6.19-rc6-mm1/drivers/ide/pci/piix.c 2006-12-01 19:20:46.000000000 +0000
@@ -473,6 +473,10 @@
/* This is a painful system best to let it self tune for now */
return;
}
+ /* ESB2 appears to generate spurious DMA interrupts in PIO mode
+ when in native mode */
+ if (hwif->pci_dev->device == PCI_DEVICE_ID_INTEL_ESB2_18)
+ hwif->atapi_irq_bogon = 1;
hwif->autodma = 0;
hwif->tuneproc = &piix_tune_drive;
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.19-rc6-mm1/include/linux/ide.h linux-2.6.19-rc6-mm1/include/linux/ide.h
--- linux.vanilla-2.6.19-rc6-mm1/include/linux/ide.h 2006-11-24 13:58:12.000000000 +0000
+++ linux-2.6.19-rc6-mm1/include/linux/ide.h 2006-12-01 19:16:27.000000000 +0000
@@ -796,6 +796,7 @@
unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */
unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */
unsigned err_stops_fifo : 1; /* 1=data FIFO is cleared by an error */
+ unsigned atapi_irq_bogon : 1; /* Generates spurious DMA interrupts in PIO mode */
struct device gendev;
struct completion gendev_rel_comp; /* To deal with device release() */
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] ide-cd: Handle strange interrupt on the Intel ESB2
2006-12-04 16:30 [PATCH] ide-cd: Handle strange interrupt on the Intel ESB2 Alan
@ 2006-12-05 23:23 ` Bartlomiej Zolnierkiewicz
2006-12-05 23:57 ` Alan
0 siblings, 1 reply; 4+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2006-12-05 23:23 UTC (permalink / raw)
To: Alan; +Cc: linux-kernel, linux-ide, akpm, Jeff Garzik, Tejun Heo
[ added Jeff and Tejun to cc: ]
On 12/4/06, Alan <alan@lxorguk.ukuu.org.uk> wrote:
> The ESB2 appears to emit spurious DMA interrupts when configured for
> native mode and handling ATAPI devices. Stratus were able to pin this bug
> down and produce a patch. This is a rework which applies the fixup only
> to the ESB2 (for now). We can apply it to other chips later if the same
> problem is found.
Looks good but aren't this trying to fix the same ICH
issue that is fixed in libata by ap->ops->irq_clear(ap)?
[ please see Tejun's mail: http://lkml.org/lkml/2006/11/15/94 ]
If so shouldn't we apply this fix for all ICH5/6/7/8 chipsets?
> This code has been tested and confirmed to fix the problem on the tested
> systems.
Also shouldn't the fix be in IRQ handler? Currently the fix is limited
to ide-cd driver which seems to be the wrong place as the problem
is supposed to happen also when using other IDE device drivers
or/and other ATA/ATAPI devices?
> Signed-off-by: Alan Cox <alan@redhat.com>
> (Most of the hard work done by Stratus however)
>
> diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.19-rc6-mm1/drivers/ide/ide-cd.c linux-2.6.19-rc6-mm1/drivers/ide/ide-cd.c
> --- linux.vanilla-2.6.19-rc6-mm1/drivers/ide/ide-cd.c 2006-11-24 13:58:06.000000000 +0000
> +++ linux-2.6.19-rc6-mm1/drivers/ide/ide-cd.c 2006-12-01 19:24:58.000000000 +0000
> @@ -687,8 +687,15 @@
> static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
> {
> struct request *rq = HWGROUP(drive)->rq;
> + ide_hwif_t *hwif = HWIF(drive);
> int stat, err, sense_key;
>
> + /* We may have bogus DMA interrupts in PIO state here */
> + if (HWIF(drive)->dma_status && hwif->atapi_irq_bogon) {
> + stat = hwif->INB(hwif->dma_status);
> + /* Should we force the bit as well ? */
> + hwif->OUTB(stat, hwif->dma_status);
> + }
> /* Check for errors. */
> stat = HWIF(drive)->INB(IDE_STATUS_REG);
> if (stat_ret)
> diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.19-rc6-mm1/drivers/ide/pci/piix.c linux-2.6.19-rc6-mm1/drivers/ide/pci/piix.c
> --- linux.vanilla-2.6.19-rc6-mm1/drivers/ide/pci/piix.c 2006-11-24 13:58:29.000000000 +0000
> +++ linux-2.6.19-rc6-mm1/drivers/ide/pci/piix.c 2006-12-01 19:20:46.000000000 +0000
> @@ -473,6 +473,10 @@
> /* This is a painful system best to let it self tune for now */
> return;
> }
> + /* ESB2 appears to generate spurious DMA interrupts in PIO mode
> + when in native mode */
> + if (hwif->pci_dev->device == PCI_DEVICE_ID_INTEL_ESB2_18)
> + hwif->atapi_irq_bogon = 1;
>
> hwif->autodma = 0;
> hwif->tuneproc = &piix_tune_drive;
> diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.19-rc6-mm1/include/linux/ide.h linux-2.6.19-rc6-mm1/include/linux/ide.h
> --- linux.vanilla-2.6.19-rc6-mm1/include/linux/ide.h 2006-11-24 13:58:12.000000000 +0000
> +++ linux-2.6.19-rc6-mm1/include/linux/ide.h 2006-12-01 19:16:27.000000000 +0000
> @@ -796,6 +796,7 @@
> unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */
> unsigned no_io_32bit : 1; /* 1 = can not do 32-bit IO ops */
> unsigned err_stops_fifo : 1; /* 1=data FIFO is cleared by an error */
> + unsigned atapi_irq_bogon : 1; /* Generates spurious DMA interrupts in PIO mode */
>
> struct device gendev;
> struct completion gendev_rel_comp; /* To deal with device release() */
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] ide-cd: Handle strange interrupt on the Intel ESB2
2006-12-05 23:23 ` Bartlomiej Zolnierkiewicz
@ 2006-12-05 23:57 ` Alan
2006-12-06 0:15 ` Tejun Heo
0 siblings, 1 reply; 4+ messages in thread
From: Alan @ 2006-12-05 23:57 UTC (permalink / raw)
To: Bartlomiej Zolnierkiewicz, linux-kernel, akpm, Tejun Heo, Jeff Garzik
On Wed, 6 Dec 2006 00:23:03 +0100
"Bartlomiej Zolnierkiewicz" <bzolnier@gmail.com> wrote:
> Looks good but aren't this trying to fix the same ICH
> issue that is fixed in libata by ap->ops->irq_clear(ap)?
>
> [ please see Tejun's mail: http://lkml.org/lkml/2006/11/15/94 ]
>
> If so shouldn't we apply this fix for all ICH5/6/7/8 chipsets?
Possibly. Thats one reason I made it a quirk bit. I'd certainly expect it
to be a group of related chipsets.
> Also shouldn't the fix be in IRQ handler? Currently the fix is limited
> to ide-cd driver which seems to be the wrong place as the problem
> is supposed to happen also when using other IDE device drivers
> or/and other ATA/ATAPI devices?
The problem has only be observed with CD devices doing PIO ATAPI
commands. I am not aware of an Intel errata document that characterises
this errata so anything else so cannot guess further. Perhaps Intel can
advise ?
Alan
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] ide-cd: Handle strange interrupt on the Intel ESB2
2006-12-05 23:57 ` Alan
@ 2006-12-06 0:15 ` Tejun Heo
0 siblings, 0 replies; 4+ messages in thread
From: Tejun Heo @ 2006-12-06 0:15 UTC (permalink / raw)
To: Alan; +Cc: Bartlomiej Zolnierkiewicz, linux-kernel, akpm, Jeff Garzik
Alan wrote:
> On Wed, 6 Dec 2006 00:23:03 +0100
> "Bartlomiej Zolnierkiewicz" <bzolnier@gmail.com> wrote:
>
>> Looks good but aren't this trying to fix the same ICH
>> issue that is fixed in libata by ap->ops->irq_clear(ap)?
>>
>> [ please see Tejun's mail: http://lkml.org/lkml/2006/11/15/94 ]
>>
>> If so shouldn't we apply this fix for all ICH5/6/7/8 chipsets?
>
> Possibly. Thats one reason I made it a quirk bit. I'd certainly expect it
> to be a group of related chipsets.
>
>> Also shouldn't the fix be in IRQ handler? Currently the fix is limited
>> to ide-cd driver which seems to be the wrong place as the problem
>> is supposed to happen also when using other IDE device drivers
>> or/and other ATA/ATAPI devices?
>
> The problem has only be observed with CD devices doing PIO ATAPI
> commands. I am not aware of an Intel errata document that characterises
> this errata so anything else so cannot guess further. Perhaps Intel can
> advise ?
FWIW, on my ICH7, the IRQ storm does occur on ATA devices.
--
tejun
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2006-12-06 0:15 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-12-04 16:30 [PATCH] ide-cd: Handle strange interrupt on the Intel ESB2 Alan
2006-12-05 23:23 ` Bartlomiej Zolnierkiewicz
2006-12-05 23:57 ` Alan
2006-12-06 0:15 ` Tejun Heo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).