diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-17 09:53:04 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-17 09:53:04 -0700 |
commit | abf5940dad78dde95edd7f6ba6e329cd10a92a5c (patch) | |
tree | eebc8af6a41ad11c92d8f2858700c11bec558eb3 /arch/blackfin/mach-common/cache-c.c | |
parent | 66bc4a6f34a950c7aede597c578352c3eba82017 (diff) | |
parent | 5bf9cbef9972f851172391a37261b12bba63f733 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier/blackfin
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier/blackfin: (75 commits)
Blackfin: update ftrace for latest toolchain
Blackfin: fix elf_fpregset_t definition
Blackfin: unify cache init functions
Blackfin: swap clocksource ratings for gptimer/cycles
Blackfin: update ftrace_push_return_trace() breakage
Blackfin: update cm board resources
Blackfin: cm-bf537u: split board from cm-bf537e
Blackfin: bf538-ezkit: add SPI IRQ resources
Blackfin: increase default async timings for parallel flashes
Blackfin: add ICPLB coverage for async banks
Blackfin: use KERN_ALERT in all kgdb_test output
Blackfin: fix BF54x SPI CS resources
Blackfin: fix typo in isram_write()
Blackfin: bf537-stamp: add adp5588 gpio resources
Blackfin: add some isram-driver self tests
Blackfin: workaround anomaly 05000283
Blackfin: fix spelling in a few comments
Blackfin: use raw_smp_processor_id() in exception code
Blackfin: remove useless duplicated assignment in gpio code
Blackfin: Fix link errors with binutils 2.19 and GCC 4.3
...
Diffstat (limited to 'arch/blackfin/mach-common/cache-c.c')
-rw-r--r-- | arch/blackfin/mach-common/cache-c.c | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/arch/blackfin/mach-common/cache-c.c b/arch/blackfin/mach-common/cache-c.c index b59ce3cb380..4ebbd78db3a 100644 --- a/arch/blackfin/mach-common/cache-c.c +++ b/arch/blackfin/mach-common/cache-c.c @@ -1,14 +1,16 @@ /* * Blackfin cache control code (simpler control-style functions) * - * Copyright 2004-2008 Analog Devices Inc. + * Copyright 2004-2009 Analog Devices Inc. * * Enter bugs at http://blackfin.uclinux.org/ * * Licensed under the GPL-2 or later. */ +#include <linux/init.h> #include <asm/blackfin.h> +#include <asm/cplbinit.h> /* Invalidate the Entire Data cache by * clearing DMC[1:0] bits @@ -34,3 +36,43 @@ void blackfin_invalidate_entire_icache(void) SSYNC(); } +#if defined(CONFIG_BFIN_ICACHE) || defined(CONFIG_BFIN_DCACHE) + +static void +bfin_cache_init(struct cplb_entry *cplb_tbl, unsigned long cplb_addr, + unsigned long cplb_data, unsigned long mem_control, + unsigned long mem_mask) +{ + int i; + + for (i = 0; i < MAX_CPLBS; i++) { + bfin_write32(cplb_addr + i * 4, cplb_tbl[i].addr); + bfin_write32(cplb_data + i * 4, cplb_tbl[i].data); + } + + _enable_cplb(mem_control, mem_mask); +} + +#ifdef CONFIG_BFIN_ICACHE +void __cpuinit bfin_icache_init(struct cplb_entry *icplb_tbl) +{ + bfin_cache_init(icplb_tbl, ICPLB_ADDR0, ICPLB_DATA0, IMEM_CONTROL, + (IMC | ENICPLB)); +} +#endif + +#ifdef CONFIG_BFIN_DCACHE +void __cpuinit bfin_dcache_init(struct cplb_entry *dcplb_tbl) +{ + /* + * Anomaly notes: + * 05000287 - We implement workaround #2 - Change the DMEM_CONTROL + * register, so that the port preferences for DAG0 and DAG1 are set + * to port B + */ + bfin_cache_init(dcplb_tbl, DCPLB_ADDR0, DCPLB_DATA0, DMEM_CONTROL, + (DMEM_CNTR | PORT_PREF0 | (ANOMALY_05000287 ? PORT_PREF1 : 0))); +} +#endif + +#endif |