diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2009-03-18 23:55:41 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-03-23 22:47:32 -0400 |
commit | 2319f1239592d0de80414ad2338c2bd7384a2a41 (patch) | |
tree | 805de041dfc84ae9ca767c9767d833977654dbe0 /arch/powerpc/kernel/cputable.c | |
parent | eb3436a0139a651a39dbb37a75b10a2cccd00ad5 (diff) |
powerpc/mm: e300c2/c3/c4 TLB errata workaround
Complete workaround for DTLB errata in e300c2/c3/c4 processors.
Due to the bug, the hardware-implemented LRU algorythm always goes to way
1 of the TLB. This fix implements the proposed software workaround in
form of a LRW table for chosing the TLB-way.
Based on patch from David Jander <david@protonic.nl>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/cputable.c')
-rw-r--r-- | arch/powerpc/kernel/cputable.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index ccea2431ddf8..cd1b687544f3 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -1090,7 +1090,8 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1090 | .cpu_name = "e300c2", | 1090 | .cpu_name = "e300c2", |
1091 | .cpu_features = CPU_FTRS_E300C2, | 1091 | .cpu_features = CPU_FTRS_E300C2, |
1092 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, | 1092 | .cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU, |
1093 | .mmu_features = MMU_FTR_USE_HIGH_BATS, | 1093 | .mmu_features = MMU_FTR_USE_HIGH_BATS | |
1094 | MMU_FTR_NEED_DTLB_SW_LRU, | ||
1094 | .icache_bsize = 32, | 1095 | .icache_bsize = 32, |
1095 | .dcache_bsize = 32, | 1096 | .dcache_bsize = 32, |
1096 | .cpu_setup = __setup_cpu_603, | 1097 | .cpu_setup = __setup_cpu_603, |
@@ -1103,7 +1104,8 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1103 | .cpu_name = "e300c3", | 1104 | .cpu_name = "e300c3", |
1104 | .cpu_features = CPU_FTRS_E300, | 1105 | .cpu_features = CPU_FTRS_E300, |
1105 | .cpu_user_features = COMMON_USER, | 1106 | .cpu_user_features = COMMON_USER, |
1106 | .mmu_features = MMU_FTR_USE_HIGH_BATS, | 1107 | .mmu_features = MMU_FTR_USE_HIGH_BATS | |
1108 | MMU_FTR_NEED_DTLB_SW_LRU, | ||
1107 | .icache_bsize = 32, | 1109 | .icache_bsize = 32, |
1108 | .dcache_bsize = 32, | 1110 | .dcache_bsize = 32, |
1109 | .cpu_setup = __setup_cpu_603, | 1111 | .cpu_setup = __setup_cpu_603, |
@@ -1118,7 +1120,8 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1118 | .cpu_name = "e300c4", | 1120 | .cpu_name = "e300c4", |
1119 | .cpu_features = CPU_FTRS_E300, | 1121 | .cpu_features = CPU_FTRS_E300, |
1120 | .cpu_user_features = COMMON_USER, | 1122 | .cpu_user_features = COMMON_USER, |
1121 | .mmu_features = MMU_FTR_USE_HIGH_BATS, | 1123 | .mmu_features = MMU_FTR_USE_HIGH_BATS | |
1124 | MMU_FTR_NEED_DTLB_SW_LRU, | ||
1122 | .icache_bsize = 32, | 1125 | .icache_bsize = 32, |
1123 | .dcache_bsize = 32, | 1126 | .dcache_bsize = 32, |
1124 | .cpu_setup = __setup_cpu_603, | 1127 | .cpu_setup = __setup_cpu_603, |