Messages in this thread Patches in this message | | | From | Bartlomiej Zolnierkiewicz <> | Subject | Re: PROBLEM: Oops when using both channels of the PDC20262 | Date | Sun, 25 Apr 2004 03:31:25 +0200 |
| |
On Sunday 25 of April 2004 02:20, Sebastian Witt wrote: > Bartlomiej Zolnierkiewicz wrote: > > There were some change in pdc202xx_old.c driver in 2.6.2. > > Please revert this patch and report if it helps. > > I've tested 2.6.2 with the reverted patch and it seems to work. > Normally it takes <1min to crash the system when I access the discs > on the controller, with the patched driver it works >1 hour without a > error.
Ok, so now I know I screwed something but don't know what (yet). :-)
Please return back to 2.6.5 and try this patch, it disables PIO autotune. It fixed hangs for people disabling Promise BIOS but...
linux-2.6.6-rc2-bk1-bzolnier/drivers/ide/pci/pdc202xx_old.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-)
diff -puN drivers/ide/pci/pdc202xx_old.c~pdc_old_notune drivers/ide/pci/pdc202xx_old.c --- linux-2.6.6-rc2-bk1/drivers/ide/pci/pdc202xx_old.c~pdc_old_notune 2004-04-25 03:25:49.962088200 +0200 +++ linux-2.6.6-rc2-bk1-bzolnier/drivers/ide/pci/pdc202xx_old.c 2004-04-25 03:26:59.749478904 +0200 @@ -728,7 +728,7 @@ static void __init init_hwif_pdc202xx (i hwif->speedproc = &pdc202xx_tune_chipset; - hwif->drives[0].autotune = hwif->drives[1].autotune = 1; +// hwif->drives[0].autotune = hwif->drives[1].autotune = 1; hwif->ultra_mask = 0x3f; hwif->mwdma_mask = 0x07; _
If it doesn't help try this one instead (reverts old way of setting 66MHz clock):
linux-2.6.6-rc2-bk1-bzolnier/drivers/ide/pci/pdc202xx_old.c | 13 ++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff -puN drivers/ide/pci/pdc202xx_old.c~pdc_old_fix drivers/ide/pci/pdc202xx_old.c --- linux-2.6.6-rc2-bk1/drivers/ide/pci/pdc202xx_old.c~pdc_old_fix 2004-04-25 03:09:26.692567888 +0200 +++ linux-2.6.6-rc2-bk1-bzolnier/drivers/ide/pci/pdc202xx_old.c 2004-04-25 03:21:30.607516088 +0200 @@ -405,10 +405,15 @@ static int config_chipset_for_dma (ide_d if (ultra_66 && cable) { printk(KERN_WARNING "Warning: %s channel requires an 80-pin cable for operation.\n", hwif->channel ? "Secondary":"Primary"); printk(KERN_WARNING "%s reduced to Ultra33 mode.\n", drive->name); + pdc_old_disable_66MHz_clock(drive->hwif); } - if (dev->device != PCI_DEVICE_ID_PROMISE_20246) - pdc_old_disable_66MHz_clock(drive->hwif); + if (ultra_66 && !cable) { + if (hwif->drives[!(drive->dn%2)].id->dma_ultra & 0x0078) + pdc_old_enable_66MHz_clock(drive->hwif); + else + pdc_old_disable_66MHz_clock(drive->hwif); + } drive_pci = 0x60 + (drive->dn << 2); pci_read_config_dword(dev, drive_pci, &drive_conf); @@ -507,8 +512,6 @@ static int pdc202xx_quirkproc (ide_drive static int pdc202xx_old_ide_dma_begin(ide_drive_t *drive) { - if (drive->current_speed > XFER_UDMA_2) - pdc_old_enable_66MHz_clock(drive->hwif); if (drive->addressing == 1) { struct request *rq = HWGROUP(drive)->rq; ide_hwif_t *hwif = HWIF(drive); @@ -542,8 +545,6 @@ static int pdc202xx_old_ide_dma_end(ide_ clock = hwif->INB(high_16 + 0x11); hwif->OUTB(clock & ~(hwif->channel ? 0x08:0x02), high_16+0x11); } - if (drive->current_speed > XFER_UDMA_2) - pdc_old_disable_66MHz_clock(drive->hwif); return __ide_dma_end(drive); } _
Thanks, Bartlomiej
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |