PXA270 Errata and Data Cache question

Michael Cashwell mboards at prograde.net
Wed Apr 28 16:20:06 EDT 2010


On Apr 27, 2010, at 9:51 PM, Eric Miao wrote:

>> So setting that confusion aside, it seems simpler to use an uncached kernel SDRAM VA. In other instances I've used: "arch/arm/mach-pxa/include/mach/hardware.h:#define UNCACHED_ADDR UNCACHED_PHYS_0"
>> I could extend this to provide an uncached SDRAM page but choosing the VA and PA looks tricky.
>> 
>> Before I embark on all of that I'm wondering if such an uncached SDRAM mapping might not already exist.
> 
> Not such mapping as far as I know.

OK, I was being a little dense I think. What I've gone with for the errata workaround is to have the cpufreq-pxa2xx.c module do this in its init function:

/* Errata E88 workaround needs to do uncached reads from SDRAM.		*/
/* so we allocate a small amount of memory suitable for DMA.		*/
/* since all PXA2xx CPUs have incoherent DMA this forces the		*/
/* UNCACHED attribute on the mapping for the returned address.		*/
/* it's a bit hinky since DMA has nothing to do with our intent,	*/
/* but lacking a more appropirate API this seems to be a reasonable	*/
/* way to do it. these CPUs are not going to reatroactively get 	*/
/* coherent DMA engines and later CPUs neither use this code nor 	*/
/* suffer from from this errata anyway.					*/

uncachedSDRAM = (unsigned int *)kmalloc(sizeof(unsigned int), GFP_KERNEL | GFP_DMA);
if (!uncachedSDRAM)
	return -ENOMEM;

I can then dereference that where needed. This seems to work well.

I am planning on submitting all this once I have it wrapped up, but to that end does anyone have significant heartburn over using a DMA allocation this way? If there's a more direct alternative, I'm all ears.

-Mike




More information about the linux-arm-kernel mailing list