Cache coherency question
DaveLiu at freescale.com
Fri Aug 25 13:26:16 EST 2006
Tim> I'm using an MVME6100 with Linux 2.6.14 and experiencing what
Tim> I think is a cache coherency problem. An external PCIX
Tim> master performs a DMA transfer of a well known data pattern
Tim> into SDRAM, but when the device driver goes to look at the
Tim> data it is mostly okay, but occasionally has garbage.
If the hardware is reliable, I think you are right. The cache coherency
Tim> I'm allocating the memory using alloc_skb, then giving a PCI
Tim> translated pointer to the PCIX master. Since I think it is a
Tim> cache coherency problem, I tried to use the dma_cache_inv
Tim> macro to invalidate the cache before looking at the data, but
Tim> realized that for this board, that function does nothing
Tim> since CONFIG_NOT_COHERENT_CACHE is undefined. So
If the CONFIG_NOT_COHERENT_CACHE is not set.
You are assuming and using the hardware cache coherency mechanism.
Tim> 1) Should the processor bus cache snooping actually work on
Tim> an MVME6100?
Tim> E.g. is it correct that CONFIG_NOT_COHERENT_CACHE is undefined?
Yes, you can undefine the CONFIG_NOT_COHERENT_CACHE, but you must
make sure the host bridge did the snooping setup for PCI inbound
If you setup the snooping window, I think the host bridge will assert
to processor. The processor will snoop the 60x/MPX bus to keep cache
Also, you can define the CONFIG_NOT_COHERENT_CACHE, then you are
The system has not hardware coherency. You need use the software to keep
Tim> 1a) Does this type of bus snooping work when a bus master
Tim> physically external to the PowerPC chip is doing the transfer?
As above, you must tell the bridge what address need snoop. If you did,
The proceesor will do snooping.
Tim> 2) If this really is a cache coherency problem, are there
Tim> other cache management functions available in ppc linux
Tim> besides the dma_cache_inv, dma_cache_wback,
Tim> dma_cache_wback_inv macros I should be looking at?
I think it is a cache coherency problem,
if you define the CONFIG_NOT_COHERENT_CACHE
You can get these functions, dma_map_single
More information about the Linuxppc-embedded