From: <cah...@po...> - 2002-09-24 12:35:24
|
On Tue, 24 Sep 2002, Roman Zippel wrote: > On Tue, 24 Sep 2002, Geert Uytterhoeven wrote: > > > I took a closer look at ide-probe.c and compared it to plain 2.4.18 from > > Marcelo. Apparently the enable_irq() (and some other code) is present in the > > APUS version only! Although there are m68k comments in the changes, these > > changes are not present in the Linux/m68k tree. > > > > Anyone who knows why APUS changed ide-probe.c? > > I changed it while adapting the APUS irq code to the generic ppc irq code, > but I don't really remember what caused that change. > Anyway, that code works with an A4000, so there must be another problem, > that just never triggered before, my guess is a timing problem. > > > Perhaps you can try with the original ide-probe.c from Marcelo's tree? > > It's better to find the real problem, that code is bascially already in > 2.5. Two things which could be tried: > 1. Add this call to the acknowledge routine before enabling interrupts: > hwif->hw.ack_intr(hwif); > 2. Move reenabling of interrupts after the request_irq() call. > > The first solution hopefullly works, since the second one would be an ugly > hack. I don't know how, but my kernel's started booting. I modified kernel as you said: __restore_flags(flags); /* local CPU only */ if (hwif->hw.ack_intr && hwif->irq) { hwif->hw.ack_intr(hwif); enable_irq(hwif->irq); } for (unit = 0; unit < MAX_DRIVES; ++unit) { ide_drive_t *drive = &hwif->drives[unit]; if (drive->present) { ide_tuneproc_t *tuneproc = HWIF(drive)->tuneproc; if (tuneproc != NULL && drive->autotune == 1) tuneproc(drive, 255); } } Regards Krystian Baclawski |