On Thursday, June 28, 2001, at 09:19 PM, Yang, Neil L wrote:

>       if( (((unsigned long)td->hwCBP) & 0x100000) ) {
>               printk("td_fill() hwCBP %p, a20!\n", (void *)td->hwCBP);
>
>       }

See the SA-1111 specification update. DMA transfers having a particular 
address bit set generate an erroneous SDRAM AUTOPRECHARGE command, which 
can result in corruption. (The bit is always A10 on the SDRAM, but from 
the perspective of software, the bit can be in different locations 
depending on the SDRAM row/column geometry.)

Testing just for A20 is insufficient; I think sa1111_check_dma_bug() in 
dma-sa1111.c is more thorough. In modern kernels, SA-1111 drivers should 
be allocating DMA-safe buffers from a region in low SDRAM known to have 
immunity from this bug.

-jd

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
http://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to