14 #include <linux/kernel.h>
18 #include <asm/mmu_context.h>
19 #include <asm/traps.h>
33 #ifdef CONFIG_EXCPT_IRQ_SYSC_L1
34 #define MGR_ATTR __attribute__((l1_text))
39 static inline void write_dcplb_data(
int cpu,
int idx,
unsigned long data,
47 #ifdef CONFIG_CPLB_INFO
53 static inline void write_icplb_data(
int cpu,
int idx,
unsigned long data,
61 #ifdef CONFIG_CPLB_INFO
74 static int evict_one_icplb(
int cpu)
81 icplb_rr_index[
cpu]++;
85 static int evict_one_dcplb(
int cpu)
92 dcplb_rr_index[
cpu]++;
96 MGR_ATTR static int icplb_miss(
int cpu)
101 unsigned long i_data,
base,
addr1, eaddr;
114 }
while (++idx < icplb_nr_bounds);
116 if (
unlikely(idx == icplb_nr_bounds))
126 if (addr1 >= base && (addr1 +
SIZE_4M) <= eaddr) {
136 idx = evict_one_icplb(cpu);
138 write_icplb_data(cpu, idx, i_data, addr);
143 MGR_ATTR static int dcplb_miss(
int cpu)
148 unsigned long d_data, base,
addr1, eaddr;
151 if (
unlikely(status & FAULT_USERSUPV))
161 }
while (++idx < dcplb_nr_bounds);
163 if (
unlikely(idx == dcplb_nr_bounds))
173 if (addr1 >= base && (addr1 +
SIZE_4M) <= eaddr) {
189 idx = evict_one_dcplb(cpu);
191 write_dcplb_data(cpu, idx, d_data, addr);
198 int cause = seqstat & 0x3f;
202 return icplb_miss(cpu);
204 return dcplb_miss(cpu);