-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* ARC700 has VIPT L1 Caches * Caches don't snoop and are not coherent * Given the PAGE_SIZE and Cache associativity, we don't support aliasing D$ configurations (yet), but do allow aliasing I$ configs Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
- Loading branch information
Vineet Gupta
committed
Feb 15, 2013
1 parent
55bb948
commit 95d6976
Showing
5 changed files
with
954 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
/* | ||
* Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
|
||
#ifndef __ARC_ASM_CACHECTL_H | ||
#define __ARC_ASM_CACHECTL_H | ||
|
||
/* | ||
* ARC ABI flags defined for Android's finegrained cacheflush requirements | ||
*/ | ||
#define CF_I_INV 0x0002 | ||
#define CF_D_FLUSH 0x0010 | ||
#define CF_D_FLUSH_INV 0x0020 | ||
|
||
#define CF_DEFAULT (CF_I_INV | CF_D_FLUSH) | ||
|
||
/* | ||
* Standard flags expected by cacheflush system call users | ||
*/ | ||
#define ICACHE CF_I_INV | ||
#define DCACHE CF_D_FLUSH | ||
#define BCACHE (CF_I_INV | CF_D_FLUSH) | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
/* | ||
* Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* vineetg: May 2011: for Non-aliasing VIPT D-cache following can be NOPs | ||
* -flush_cache_dup_mm (fork) | ||
* -likewise for flush_cache_mm (exit/execve) | ||
* -likewise for flush_cache_{range,page} (munmap, exit, COW-break) | ||
* | ||
* vineetg: April 2008 | ||
* -Added a critical CacheLine flush to copy_to_user_page( ) which | ||
* was causing gdbserver to not setup breakpoints consistently | ||
*/ | ||
|
||
#ifndef _ASM_CACHEFLUSH_H | ||
#define _ASM_CACHEFLUSH_H | ||
|
||
#include <linux/mm.h> | ||
|
||
void flush_cache_all(void); | ||
|
||
void flush_icache_range(unsigned long start, unsigned long end); | ||
void flush_icache_page(struct vm_area_struct *vma, struct page *page); | ||
void flush_icache_range_vaddr(unsigned long paddr, unsigned long u_vaddr, | ||
int len); | ||
|
||
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 | ||
|
||
void flush_dcache_page(struct page *page); | ||
|
||
void dma_cache_wback_inv(unsigned long start, unsigned long sz); | ||
void dma_cache_inv(unsigned long start, unsigned long sz); | ||
void dma_cache_wback(unsigned long start, unsigned long sz); | ||
|
||
#define flush_dcache_mmap_lock(mapping) do { } while (0) | ||
#define flush_dcache_mmap_unlock(mapping) do { } while (0) | ||
|
||
/* TBD: optimize this */ | ||
#define flush_cache_vmap(start, end) flush_cache_all() | ||
#define flush_cache_vunmap(start, end) flush_cache_all() | ||
|
||
/* | ||
* VM callbacks when entire/range of user-space V-P mappings are | ||
* torn-down/get-invalidated | ||
* | ||
* Currently we don't support D$ aliasing configs for our VIPT caches | ||
* NOPS for VIPT Cache with non-aliasing D$ configurations only | ||
*/ | ||
#define flush_cache_dup_mm(mm) /* called on fork */ | ||
#define flush_cache_mm(mm) /* called on munmap/exit */ | ||
#define flush_cache_range(mm, u_vstart, u_vend) | ||
#define flush_cache_page(vma, u_vaddr, pfn) /* PF handling/COW-break */ | ||
|
||
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \ | ||
do { \ | ||
memcpy(dst, src, len); \ | ||
if (vma->vm_flags & VM_EXEC) \ | ||
flush_icache_range_vaddr((unsigned long)(dst), vaddr, len);\ | ||
} while (0) | ||
|
||
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \ | ||
memcpy(dst, src, len); \ | ||
|
||
#endif |
Oops, something went wrong.