Chinaunix

标题: 请高手指点:prom.c DDR大小的侦测 [打印本页]

作者: jyhhappyjyh    时间: 2010-06-30 10:33
标题: 请高手指点:prom.c DDR大小的侦测
  1. void __init
  2. prom_init(int argc, const char **argv)
  3. {
  4.     unsigned long mem;
  5.     mips_machgroup = MACH_GROUP_BRCM;
  6.     mips_machtype = MACH_BCM947XX;

  7. /* Figure out memory size by finding aliases */
  8.         for (mem = (1 << 20); mem < (128 << 20); mem <<= 1) {
  9.                 if (*(unsigned long *)((unsigned long)(prom_init) + mem) ==
  10.                     *(unsigned long *)(prom_init))
  11.                         break;
  12.         }
  13. #if CONFIG_RAM_SIZE
  14.         {
  15.                 unsigned long config_mem;       
  16.                 config_mem = CONFIG_RAM_SIZE * 0x100000;
  17.                 if (config_mem < mem)
  18.                         mem = config_mem;
  19.         }
  20. #endif

  21.         /* Ignoring the last page when ddr size is 128M. Cached
  22.          * accesses to last page is causing the processor to prefetch
  23.          * using address above 128M stepping out of the ddr address
  24.          * space.
  25.          */
  26.         if (MIPS74K(mips_cpu.processor_id) && (mem == 0x8000000))
  27.                 mem -= 0x1000;

  28.         add_memory_region(0, mem, BOOT_MEM_RAM);
  29. }
复制代码
为什么当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