Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 138405
b: refs/heads/master
c: f88747e
h: refs/heads/master
i:
  138403: 22cbd54
v: v3
  • Loading branch information
Trent Piepho authored and Kumar Gala committed Jan 29, 2009
1 parent 7a3ba53 commit 22f107b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 49 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 105c31df6fc5a424b480321763b5598cf3817821
refs/heads/master: f88747e7f68866f2f82cef1363c5b8e7aa13b0a3
79 changes: 31 additions & 48 deletions trunk/arch/powerpc/mm/fsl_booke_mmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@

extern void loadcam_entry(unsigned int index);
unsigned int tlbcam_index;
static unsigned long __cam0, __cam1, __cam2;
static unsigned long cam[3];

#define NUM_TLBCAMS (16)

Expand Down Expand Up @@ -152,19 +152,19 @@ void invalidate_tlbcam_entry(int index)
loadcam_entry(index);
}

void __init cam_mapin_ram(unsigned long cam0, unsigned long cam1,
unsigned long cam2)
unsigned long __init mmu_mapin_ram(void)
{
settlbcam(0, PAGE_OFFSET, memstart_addr, cam0, _PAGE_KERNEL, 0);
tlbcam_index++;
if (cam1) {
tlbcam_index++;
settlbcam(1, PAGE_OFFSET+cam0, memstart_addr+cam0, cam1, _PAGE_KERNEL, 0);
}
if (cam2) {
unsigned long virt = PAGE_OFFSET;
phys_addr_t phys = memstart_addr;

while (cam[tlbcam_index] && tlbcam_index < ARRAY_SIZE(cam)) {
settlbcam(tlbcam_index, virt, phys, cam[tlbcam_index], _PAGE_KERNEL, 0);
virt += cam[tlbcam_index];
phys += cam[tlbcam_index];
tlbcam_index++;
settlbcam(2, PAGE_OFFSET+cam0+cam1, memstart_addr+cam0+cam1, cam2, _PAGE_KERNEL, 0);
}

return virt - PAGE_OFFSET;
}

/*
Expand All @@ -175,51 +175,34 @@ void __init MMU_init_hw(void)
flush_instruction_cache();
}

unsigned long __init mmu_mapin_ram(void)
{
cam_mapin_ram(__cam0, __cam1, __cam2);

return __cam0 + __cam1 + __cam2;
}


void __init
adjust_total_lowmem(void)
{
phys_addr_t max_lowmem_size = __max_low_memory;
phys_addr_t cam_max_size = 0x10000000;
phys_addr_t ram;
unsigned int max_cam = 28; /* 2^28 = 256 Mb */
char buf[ARRAY_SIZE(cam) * 5 + 1], *p = buf;
int i;

/* adjust CAM size to max_lowmem_size */
if (max_lowmem_size < cam_max_size)
cam_max_size = max_lowmem_size;

/* adjust lowmem size to max_lowmem_size */
ram = min(max_lowmem_size, total_lowmem);
/* adjust lowmem size to __max_low_memory */
ram = min((phys_addr_t)__max_low_memory, (phys_addr_t)total_lowmem);

/* Calculate CAM values */
__cam0 = 1UL << 2 * (__ilog2(ram) / 2);
if (__cam0 > cam_max_size)
__cam0 = cam_max_size;
ram -= __cam0;
if (ram) {
__cam1 = 1UL << 2 * (__ilog2(ram) / 2);
if (__cam1 > cam_max_size)
__cam1 = cam_max_size;
ram -= __cam1;
}
if (ram) {
__cam2 = 1UL << 2 * (__ilog2(ram) / 2);
if (__cam2 > cam_max_size)
__cam2 = cam_max_size;
ram -= __cam2;
__max_low_memory = 0;
for (i = 0; ram && i < ARRAY_SIZE(cam); i++) {
unsigned int camsize = __ilog2(ram) & ~1U;
if (camsize > max_cam)
camsize = max_cam;
cam[i] = 1UL << camsize;
ram -= cam[i];
__max_low_memory += cam[i];

p += sprintf(p, "%lu/", cam[i] >> 20);
}
for (; i < ARRAY_SIZE(cam); i++)
p += sprintf(p, "0/");
p[-1] = '\0';

printk(KERN_INFO "Memory CAM mapping: CAM0=%ldMb, CAM1=%ldMb,"
" CAM2=%ldMb residual: %ldMb\n",
__cam0 >> 20, __cam1 >> 20, __cam2 >> 20,
(long int)((total_lowmem - __cam0 - __cam1 - __cam2)
>> 20));
__max_low_memory = __cam0 + __cam1 + __cam2;
pr_info("Memory CAM mapping: %s Mb, residual: %ldMb\n", buf,
(total_lowmem - __max_low_memory) >> 20);
__initial_memory_limit_addr = memstart_addr + __max_low_memory;
}

0 comments on commit 22f107b

Please sign in to comment.