=== modified file 'firmware/target/arm/ata-pp5020.c' --- firmware/target/arm/ata-pp5020.c 2009-07-09 16:45:40 +0000 +++ firmware/target/arm/ata-pp5020.c 2009-07-20 14:46:03 +0000 @@ -160,6 +160,9 @@ bool ata_dma_setup(void *addr, unsigned long bytes, bool write) { if (bytes <= 512 || ((unsigned long)addr & 3)) return false; + /* Require cacheline alignment for reads to prevent interference */ + if (!write && ((unsigned long)addr & 15)) + return false; #if ATA_MAX_UDMA > 2 if (dma_needs_boost && !dma_boosted) { @@ -175,8 +178,6 @@ else { /* Invalidate cache because new data may be present in RAM */ cpucache_invalidate(); - /* TODO: Alignment to cache line boundaries should be performed - pre/post DMA */ } /* Clear pending interrupts so ata_dma_finish() can wait for an