|
|
@@ -169,7 +169,8 @@ unsigned long calc_cam_sz(unsigned long ram, unsigned long virt,
|
|
|
}
|
|
|
|
|
|
static unsigned long map_mem_in_cams_addr(phys_addr_t phys, unsigned long virt,
|
|
|
- unsigned long ram, int max_cam_idx)
|
|
|
+ unsigned long ram, int max_cam_idx,
|
|
|
+ bool dryrun)
|
|
|
{
|
|
|
int i;
|
|
|
unsigned long amount_mapped = 0;
|
|
|
@@ -179,7 +180,9 @@ static unsigned long map_mem_in_cams_addr(phys_addr_t phys, unsigned long virt,
|
|
|
unsigned long cam_sz;
|
|
|
|
|
|
cam_sz = calc_cam_sz(ram, virt, phys);
|
|
|
- settlbcam(i, virt, phys, cam_sz, pgprot_val(PAGE_KERNEL_X), 0);
|
|
|
+ if (!dryrun)
|
|
|
+ settlbcam(i, virt, phys, cam_sz,
|
|
|
+ pgprot_val(PAGE_KERNEL_X), 0);
|
|
|
|
|
|
ram -= cam_sz;
|
|
|
amount_mapped += cam_sz;
|
|
|
@@ -187,6 +190,9 @@ static unsigned long map_mem_in_cams_addr(phys_addr_t phys, unsigned long virt,
|
|
|
phys += cam_sz;
|
|
|
}
|
|
|
|
|
|
+ if (dryrun)
|
|
|
+ return amount_mapped;
|
|
|
+
|
|
|
loadcam_multi(0, i, max_cam_idx);
|
|
|
tlbcam_index = i;
|
|
|
|
|
|
@@ -199,12 +205,12 @@ static unsigned long map_mem_in_cams_addr(phys_addr_t phys, unsigned long virt,
|
|
|
return amount_mapped;
|
|
|
}
|
|
|
|
|
|
-unsigned long map_mem_in_cams(unsigned long ram, int max_cam_idx)
|
|
|
+unsigned long map_mem_in_cams(unsigned long ram, int max_cam_idx, bool dryrun)
|
|
|
{
|
|
|
unsigned long virt = PAGE_OFFSET;
|
|
|
phys_addr_t phys = memstart_addr;
|
|
|
|
|
|
- return map_mem_in_cams_addr(phys, virt, ram, max_cam_idx);
|
|
|
+ return map_mem_in_cams_addr(phys, virt, ram, max_cam_idx, dryrun);
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_PPC32
|
|
|
@@ -235,7 +241,7 @@ void __init adjust_total_lowmem(void)
|
|
|
ram = min((phys_addr_t)__max_low_memory, (phys_addr_t)total_lowmem);
|
|
|
|
|
|
i = switch_to_as1();
|
|
|
- __max_low_memory = map_mem_in_cams(ram, CONFIG_LOWMEM_CAM_NUM);
|
|
|
+ __max_low_memory = map_mem_in_cams(ram, CONFIG_LOWMEM_CAM_NUM, false);
|
|
|
restore_to_as0(i, 0, 0, 1);
|
|
|
|
|
|
pr_info("Memory CAM mapping: ");
|
|
|
@@ -303,10 +309,12 @@ notrace void __init relocate_init(u64 dt_ptr, phys_addr_t start)
|
|
|
n = switch_to_as1();
|
|
|
/* map a 64M area for the second relocation */
|
|
|
if (memstart_addr > start)
|
|
|
- map_mem_in_cams(0x4000000, CONFIG_LOWMEM_CAM_NUM);
|
|
|
+ map_mem_in_cams(0x4000000, CONFIG_LOWMEM_CAM_NUM,
|
|
|
+ false);
|
|
|
else
|
|
|
map_mem_in_cams_addr(start, PAGE_OFFSET + offset,
|
|
|
- 0x4000000, CONFIG_LOWMEM_CAM_NUM);
|
|
|
+ 0x4000000, CONFIG_LOWMEM_CAM_NUM,
|
|
|
+ false);
|
|
|
restore_to_as0(n, offset, __va(dt_ptr), 1);
|
|
|
/* We should never reach here */
|
|
|
panic("Relocation error");
|