![]() | |||||||||||||
Messages in this thread |
Alan Cox wrote: >> The second FIXME area is ata_irq_ack - it is unconditionally coded >> for SFF-type interfaces. I believe that using this function in >> non-BMDMA interfaces is wrong - it attempts to read from the BMDMA >> registers irrespective of whether ap->ioaddr.bmdma_addr is set or >> not. The question this poses is: what should non-BMDMA implementations >> use for this method? Note that pata_platform also uses this >> function despite not supporting BMDMA which seems even more suspicious. > > Thats a bug that has arrived again. The older code was corrected to > handle this properly but the fix appears to have become lost. The > ioread/iowrite code actually made quite a mess (all the address reporting > is also broken) and we do some iffy things like compare the iomap result > with zero and assume thats the same as checking for true bus zero > addresses. > > ata_irq_ack is part of the SFF layer so its fine that it assumes SFF but > its wrong that it is used unconditionally and it shouldn't be used this > way. It just needs a (!ap->ioaddr.bmdma_addr) test adding (assuming thats > valid for iomap) No. It does not need such a test, as it requires BMDMA, not just an SFF-style Status register. It is up to the driver to decide whether or not ata_irq_ack() is appropriate for your hardware. pata_icside needs its own ata_irq_ack -- which may just be as simple as reading the Status register to clear the interrupt condition. If others need this as well, ata_sff_irq_ack() would be a good generic function to create. Jeff - 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/ | ||||||||||||
| Last update: 2007-04-09 01:05 [from the cache] ©2003-2008 | |||||||||||||