Thread (3 messages) flat view 3 messages, 3 authors, 2008-10-18

Re: Cache control

From: Marco Stornelli <hidden>
Date: 2008-10-17 07:17:22

Hi Robert,

Robert Woodworth ha scritto:
I have a Virtex4 VF60 device with 256MB DDR2.

I have told the Linux kernel that the device has only 128MB and its
working fine. 
How? Have you used the mem kernel option?

 There is an HDL module that is populating the next 16MB
with sensor data (0x08000000 - 0x09000000)  I mapped the area into my
driver via `ioremap()` and also via `mmap / remap_pfn_range()`  It works
fine.

I know that PPC cache regions work in 128MB blocks.  I assume that the
kernel bootup is turning on cache in the first 128, because it thinks
that its the full RAM range, and not cached in the next 128MB.

I know that if I declare the area cached, and invalidate the region
before I read it,  the reads should be much faster than if it's not cached.


How can I control if the area is cached? and then invalidate it when new
data arrives?
If you use the ioremap, it provides non-cacheable guarded mappings,
indeed it calls __ioremap with _PAGE_NO_CACHE and _PAGE_GUARDED flags.
You can try to call directly __ioremap with the proper flags.
Is there a PPC/Linux API call to declare the region cached and
invalidate regions before read?
Yes, of course. You can see the arch/powerpc/include/asm/cacheflush.h
file to view the API to manage the cache.



Rob.
_______________________________________________
Linuxppc-embedded mailing list
Linuxppc-embedded@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-embedded
Regards,

-- 
Marco Stornelli
Embedded Software Engineer
CoRiTeL - Consorzio di Ricerca sulle Telecomunicazioni
http://www.coritel.it

marco.stornelli@coritel.it
+39 06 72582838
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help