aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/mm
diff options
context:
space:
mode:
authorSteven J. Hill <sjhill@mips.com>2012-06-26 00:11:03 -0400
committerSteven J. Hill <sjhill@mips.com>2012-09-13 16:21:47 -0400
commit006a851b10a395955c153a145ad8241494d43688 (patch)
treee636786a07cf84b2e587c5403564465a9d5e8fd4 /arch/mips/mm
parentfea7a08acb13524b47711625eebea40a0ede69a0 (diff)
MIPS: Add support for the 1074K core.
Signed-off-by: Steven J. Hill <sjhill@mips.com>
Diffstat (limited to 'arch/mips/mm')
-rw-r--r--arch/mips/mm/c-r4k.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
index f092c265dc63..4c32ede464b5 100644
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
@@ -786,6 +786,25 @@ static inline void rm7k_erratum31(void)
786 } 786 }
787} 787}
788 788
789static inline void alias_74k_erratum(struct cpuinfo_mips *c)
790{
791 /*
792 * Early versions of the 74K do not update the cache tags on a
793 * vtag miss/ptag hit which can occur in the case of KSEG0/KUSEG
794 * aliases. In this case it is better to treat the cache as always
795 * having aliases.
796 */
797 if ((c->processor_id & 0xff) <= PRID_REV_ENCODE_332(2, 4, 0))
798 c->dcache.flags |= MIPS_CACHE_VTAG;
799 if ((c->processor_id & 0xff) == PRID_REV_ENCODE_332(2, 4, 0))
800 write_c0_config6(read_c0_config6() | MIPS_CONF6_SYND);
801 if (((c->processor_id & 0xff00) == PRID_IMP_1074K) &&
802 ((c->processor_id & 0xff) <= PRID_REV_ENCODE_332(1, 1, 0))) {
803 c->dcache.flags |= MIPS_CACHE_VTAG;
804 write_c0_config6(read_c0_config6() | MIPS_CONF6_SYND);
805 }
806}
807
789static char *way_string[] __cpuinitdata = { NULL, "direct mapped", "2-way", 808static char *way_string[] __cpuinitdata = { NULL, "direct mapped", "2-way",
790 "3-way", "4-way", "5-way", "6-way", "7-way", "8-way" 809 "3-way", "4-way", "5-way", "6-way", "7-way", "8-way"
791}; 810};
@@ -1056,6 +1075,8 @@ static void __cpuinit probe_pcache(void)
1056 case CPU_34K: 1075 case CPU_34K:
1057 case CPU_74K: 1076 case CPU_74K:
1058 case CPU_1004K: 1077 case CPU_1004K:
1078 if (c->cputype == CPU_74K)
1079 alias_74k_erratum(c);
1059 if ((read_c0_config7() & (1 << 16))) { 1080 if ((read_c0_config7() & (1 << 16))) {
1060 /* effectively physically indexed dcache, 1081 /* effectively physically indexed dcache,
1061 thus no virtual aliases. */ 1082 thus no virtual aliases. */