28 #include <linux/signal.h>
29 #include <linux/sched.h>
30 #include <linux/kernel.h>
31 #include <linux/errno.h>
32 #include <linux/string.h>
33 #include <linux/types.h>
34 #include <linux/ptrace.h>
35 #include <linux/mman.h>
38 #include <linux/stddef.h>
45 #include <asm/pgalloc.h>
48 #include <asm/mmu_context.h>
49 #include <asm/pgtable.h>
51 #include <asm/uaccess.h>
53 #include <asm/machdep.h>
54 #include <asm/setup.h>
60 #define NUM_TLBCAMS (64)
110 unsigned long size,
unsigned long flags,
unsigned int pid)
114 tsize = __ilog2(size) - 10;
133 if (mmu_has_feature(MMU_FTR_BIG_PHYS))
146 loadcam_entry(index);
152 unsigned int camsize = __ilog2(ram);
154 unsigned long max_cam;
158 max_cam = ((
mfspr(SPRN_TLB1CFG) >> 16) & 0xf) * 2 + 10;
163 max_cam = __ilog2(
mfspr(SPRN_TLB1PS)) + 10;
168 if (camsize > max_cam)
171 return 1
UL << camsize;
179 unsigned long amount_mapped = 0;
182 for (i = 0; ram && i < max_cam_idx; i++) {
183 unsigned long cam_sz;
189 amount_mapped += cam_sz;
195 return amount_mapped;
200 #if defined(CONFIG_LOWMEM_CAM_NUM_BOOL) && (CONFIG_LOWMEM_CAM_NUM >= NUM_TLBCAMS)
201 #error "LOWMEM_CAM_NUM must be less than NUM_TLBCAMS"
217 void __init adjust_total_lowmem(
void)
227 pr_info(
"Memory CAM mapping: ");
231 (
unsigned int)((
total_lowmem - __max_low_memory) >> 20));