[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [microblaze-uclinux] [PATCH 09/56] microblaze_v2: cache support
- To: <microblaze-uclinux@xxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>
- Subject: RE: [microblaze-uclinux] [PATCH 09/56] microblaze_v2: cache support
- From: "Stephen Neuendorffer" <stephen.neuendorffer@xxxxxxxxxx>
- Date: Mon, 5 May 2008 10:37:33 -0700
- Cc: <arnd@xxxxxxxx>, <linux-arch@xxxxxxxxxxxxxxx>, "John Linn" <linnj@xxxxxxxxxx>, <john.williams@xxxxxxxxxxxxx>, <matthew@xxxxxx>, <will.newton@xxxxxxxxx>, <drepper@xxxxxxxxxx>, <grant.likely@xxxxxxxxxxxx>, "Michal Simek" <monstr@xxxxxxxxx>
- In-reply-to: <2f801c33caee22e112af51ae927c264ce99ead01.1209897266.git.monstr@xxxxxxxxx>
- References: <a4a778e34c66d126f5c4bf1ca423cf32950ea5ab.1209897266.git.monstr@xxxxxxxxx> <2f801c33caee22e112af51ae927c264ce99ead01.1209897266.git.monstr@xxxxxxxxx>
- Reply-to: microblaze-uclinux@xxxxxxxxxxxxxx
- Sender: owner-microblaze-uclinux@xxxxxxxxxxxxxx
- Thread-index: AciuuOdg6X3lbMZWTnSUV66TJ1nTswAHTdFw
- Thread-topic: [microblaze-uclinux] [PATCH 09/56] microblaze_v2: cache support
The microblaze has a write through data cache, hence 'flush' is really a
misnomer here and interesting methods are 'invalidate'. In addition,
most of these functions should be used directly by an implementation of
dma-coherent.c (which I can't find in your patches).
I'll try to cook up a patch for you with this today.
Steve
> +#define flush_cache_all() __flush_cache_all()
> +#define flush_cache_mm(mm) do { } while (0)
> +#define flush_cache_range(vma, start, end) __flush_cache_all()
> +#define flush_cache_page(vma, vmaddr, pfn) do { } while (0)
> +
> +#define flush_dcache_range(start, end)
__flush_dcache_range(start, end)
> +#define flush_dcache_page(page) do { } while (0)
> +#define flush_dcache_mmap_lock(mapping) do { } while (0)
> +#define flush_dcache_mmap_unlock(mapping) do { } while (0)
> +
> +#define flush_icache_range(start, len)
__flush_icache_range(start, len)
> +#define flush_icache_page(vma, pg) do { } while (0)
> +#define flush_icache_user_range(start, len) do { } while (0)
> +
> +#define flush_cache_vmap(start, end) do { } while (0)
> +#define flush_cache_vunmap(start, end) do { } while (0)
> +
> +struct page;
> +struct mm_struct;
> +struct vm_area_struct;
> +
> +/* see arch/microblaze/kernel/cache.c */
> +extern void __flush_icache_all(void);
> +extern void __flush_icache_range(unsigned long start, unsigned long
end);
> +extern void __flush_icache_page(struct vm_area_struct *vma, struct
page *page);
> +extern void __flush_icache_user_range(struct vm_area_struct *vma,
> + struct page *page,
> + unsigned long adr, int len);
> +extern void __flush_cache_sigtramp(unsigned long addr);
> +
> +extern void __flush_dcache_all(void);
> +extern void __flush_dcache_range(unsigned long start, unsigned long
end);
> +extern void __flush_dcache_page(struct vm_area_struct *vma, struct
page *page);
> +extern void __flush_dcache_user_range(struct vm_area_struct *vma,
> + struct page *page,
> + unsigned long adr, int len);
> +
> +extern inline void __flush_cache_all(void)
> +{
> + __flush_icache_all();
> + __flush_dcache_all();
> +}
> +
> +#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
> +do { memcpy(dst, src, len); \
> + flush_icache_user_range(vma, page, vaddr, len); \
> +} while (0)
> +#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
> + memcpy(dst, src, len)
> +
> +#endif /* _ASM_MICROBLAZE_CACHEFLUSH_H */
> --
> 1.5.4.GIT
>
> ___________________________
> microblaze-uclinux mailing list
> microblaze-uclinux@xxxxxxxxxxxxxx
> Project Home Page :
http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
> Mailing List Archive :
http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/
>
___________________________
microblaze-uclinux mailing list
microblaze-uclinux@xxxxxxxxxxxxxx
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/