Hi, On 2/10/06, Jordan Crouse <jordan.crouse@xxxxxxx> wrote: > Greetings all - the attached patch enables MwDMA mode for the AU1200 > IDE driver. If one heavily uses the USB on the DB1200 board with IDE > in PIO mode, you may experience hangs from overloading the bus with > interrupts - this should help. Since it is obvious that this is the > desired mode, I'm adding it to the defconfig to enable by default. > > Also, I snuck in a fix for a warning (mixed code and declarations = evil!). if this refers to drive_list_entry - it is fixed in Linus' tree > Applies against latest lmo git, but it should work for linux-ide as well. > [PATCH] Enable MWDMA mode for the AU1200 IDE driver > > This enables MwDMA mode for the AU1200 driver - this will benefit > anybody using IDE + USB, which together seem to cause hangs when IDE is > in PIO due to the large number of interrupts on the same bus. ide-au1xxx driver enables IRQ unmasking unconditionally, could it be that hardware actually needs IRQs to be masked during PIO transfers? > Signed-off-by: Jordan Crouse <jordan.crouse@xxxxxxx> > --- > > arch/mips/configs/db1200_defconfig | 4 ++-- > drivers/ide/mips/au1xxx-ide.c | 14 ++++++++++++-- > include/asm-mips/mach-au1x00/au1xxx_ide.h | 9 --------- > 3 files changed, 14 insertions(+), 13 deletions(-) > > diff --git a/arch/mips/configs/db1200_defconfig b/arch/mips/configs/db1200_defconfig > index 9288847..355b32f 100644 > --- a/arch/mips/configs/db1200_defconfig > +++ b/arch/mips/configs/db1200_defconfig > @@ -497,8 +497,8 @@ CONFIG_BLK_DEV_IDECS=m > # > CONFIG_IDE_GENERIC=y > CONFIG_BLK_DEV_IDE_AU1XXX=y > -CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA=y > -# CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA is not set > +#CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA is not set > +CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y > CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128 > # CONFIG_IDE_ARM is not set > # CONFIG_BLK_DEV_IDEDMA is not set > diff --git a/drivers/ide/mips/au1xxx-ide.c b/drivers/ide/mips/au1xxx-ide.c > index 32431dc..c2bf766 100644 > --- a/drivers/ide/mips/au1xxx-ide.c > +++ b/drivers/ide/mips/au1xxx-ide.c > @@ -652,6 +652,7 @@ static int au_ide_probe(struct device *d > struct platform_device *pdev = to_platform_device(dev); > _auide_hwif *ahwif = &auide_hwif; > ide_hwif_t *hwif; > + hw_regs_t *hw; > struct resource *res; > int ret = 0; > > @@ -690,17 +691,26 @@ static int au_ide_probe(struct device *d > /* FIXME: This might possibly break PCMCIA IDE devices */ > > hwif = &ide_hwifs[pdev->id]; > - hw_regs_t *hw = &hwif->hw; > + hw = &hwif->hw; > hwif->irq = hw->irq = ahwif->irq; > hwif->chipset = ide_au1xxx; > > auide_setup_ports(hw, ahwif); > memcpy(hwif->io_ports, hw->io_ports, sizeof(hwif->io_ports)); > > +#ifdef CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ > + hwif->rqsize = CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ; > + hwif->rqsize = ((hwif->rqsize > AU1XXX_ATA_RQSIZE) > + || (hwif->rqsize < 32)) > + ? AU1XXX_ATA_RQSIZE : hwif->rqsize; > +#else /* if kernel config is not set */ > + hwif->rqsize = AU1XXX_ATA_RQSIZE; > +#endif > + Patch description says nothing about this change... NAK. Please don't re-introduce CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ. Either this controller works reliably with rqsize > 32 or not. > hwif->ultra_mask = 0x0; /* Disable Ultra DMA */ > #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA > hwif->mwdma_mask = 0x07; /* Multimode-2 DMA */ > - hwif->swdma_mask = 0x00; > + hwif->swdma_mask = 0x07; Also not mentioned in the patch description. I don't see any code in the driver to handle SWDMA? Thanks, Bartlomiej