rk2928: common: fix rk2928_get_ddr_size
author黄涛 <huangtao@rock-chips.com>
Thu, 13 Sep 2012 09:00:34 +0000 (17:00 +0800)
committer黄涛 <huangtao@rock-chips.com>
Thu, 13 Sep 2012 09:00:46 +0000 (17:00 +0800)
arch/arm/mach-rk2928/Makefile
arch/arm/mach-rk2928/common.c

index 9c99e31323edcf9cbd49e789952ca29d6bcf82fb..341998a8083623200c7c15eb8dc41bb61f526e86 100755 (executable)
@@ -1,4 +1,5 @@
 obj-y += common.o
+CFLAGS_common.o += -DTEXT_OFFSET=$(TEXT_OFFSET)
 obj-y += io.o
 obj-y += reset.o
 obj-y += timer.o
index 8c93626a649af2729bd37d400a1c41634860b1b4..5968a7557eb5f147ce43a8f1a71c4f1784da5c1a 100755 (executable)
@@ -147,7 +147,20 @@ static __init u32 rk2928_get_ddr_size(void)
 #ifdef CONFIG_MACH_RK2928_FPGA
        return SZ_64M;
 #else
-       return SZ_512M;
+       u32 size;
+       u32 v[1], a[1];
+       u32 pgtbl = PAGE_OFFSET + TEXT_OFFSET - 0x4000;
+       u32 flag = PMD_TYPE_SECT | PMD_SECT_XN | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ;
+
+       a[0] = pgtbl + (((u32)RK2928_GRF_BASE >> 20) << 2);
+       v[0] = readl_relaxed(a[0]);
+       writel_relaxed(flag | ((RK2928_GRF_PHYS >> 20) << 20), a[0]);
+
+       size = ddr_get_cap();
+
+       writel_relaxed(v[0], a[0]);
+
+       return size;
 #endif
 }