Chinaunix
标题:
请高手指点:prom.c DDR大小的侦测
[打印本页]
作者:
jyhhappyjyh
时间:
2010-06-30 10:33
标题:
请高手指点:prom.c DDR大小的侦测
void __init
prom_init(int argc, const char **argv)
{
unsigned long mem;
mips_machgroup = MACH_GROUP_BRCM;
mips_machtype = MACH_BCM947XX;
/* Figure out memory size by finding aliases */
for (mem = (1 << 20); mem < (128 << 20); mem <<= 1) {
if (*(unsigned long *)((unsigned long)(prom_init) + mem) ==
*(unsigned long *)(prom_init))
break;
}
#if CONFIG_RAM_SIZE
{
unsigned long config_mem;
config_mem = CONFIG_RAM_SIZE * 0x100000;
if (config_mem < mem)
mem = config_mem;
}
#endif
/* Ignoring the last page when ddr size is 128M. Cached
* accesses to last page is causing the processor to prefetch
* using address above 128M stepping out of the ddr address
* space.
*/
if (MIPS74K(mips_cpu.processor_id) && (mem == 0x8000000))
mem -= 0x1000;
add_memory_region(0, mem, BOOT_MEM_RAM);
}
复制代码
为什么当mem=DDR大小的时候就有
*(unsigned long *)((unsigned long)(prom_init) + mem) == *(unsigned long *)(prom_init)
感觉像是环回了一样!
这个问题困扰我很久了,请高手指点!
作者:
jyhhappyjyh
时间:
2011-04-26 11:24
回复
1#
jyhhappyjyh
这个汇编中也是有这样的机制!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2