Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sh/mm/cache-shx3.c
26439 views
1
/*
2
* arch/sh/mm/cache-shx3.c - SH-X3 optimized cache ops
3
*
4
* Copyright (C) 2010 Paul Mundt
5
*
6
* This file is subject to the terms and conditions of the GNU General Public
7
* License. See the file "COPYING" in the main directory of this archive
8
* for more details.
9
*/
10
#include <linux/init.h>
11
#include <linux/kernel.h>
12
#include <linux/io.h>
13
#include <asm/cache.h>
14
#include <asm/cacheflush.h>
15
16
#define CCR_CACHE_SNM 0x40000 /* Hardware-assisted synonym avoidance */
17
#define CCR_CACHE_IBE 0x1000000 /* ICBI broadcast */
18
19
void __init shx3_cache_init(void)
20
{
21
unsigned int ccr;
22
23
ccr = __raw_readl(SH_CCR);
24
25
/*
26
* If we've got cache aliases, resolve them in hardware.
27
*/
28
if (boot_cpu_data.dcache.n_aliases || boot_cpu_data.icache.n_aliases) {
29
ccr |= CCR_CACHE_SNM;
30
31
boot_cpu_data.icache.n_aliases = 0;
32
boot_cpu_data.dcache.n_aliases = 0;
33
34
pr_info("Enabling hardware synonym avoidance\n");
35
}
36
37
#ifdef CONFIG_SMP
38
/*
39
* Broadcast I-cache block invalidations by default.
40
*/
41
ccr |= CCR_CACHE_IBE;
42
#endif
43
44
writel_uncached(ccr, SH_CCR);
45
}
46
47