Firefly开源社区

打印 上一主题 下一主题

[Linux] LibreELEC 系统内存

371

积分

5

威望

0

贡献

技术达人

Rank: 2

积分
371
发表于 2018-5-30 09:57:52      楼主
diff --git a/arch/arm/mach-rockchip/sdram_common.c b/arch/arm/mach-rockchip/sdram_common.c
index 76dbdc8..5233e7f 100644
--- a/arch/arm/mach-rockchip/sdram_common.c
+++ b/arch/arm/mach-rockchip/sdram_common.c
@@ -14,7 +14,7 @@
DECLARE_GLOBAL_DATA_PTR;
size_t rockchip_sdram_size(phys_addr_t reg)
{
-       u32 rank, col, bk, cs0_row, cs1_row, bw, row_3_4;
+       u32 rank, col, bk, cs0_row, cs1_row, bw, row_3_4, dbw, bg;
        size_t chipsize_mb = 0;
        size_t size_mb = 0;
        u32 ch;
@@ -37,16 +37,19 @@ size_t rockchip_sdram_size(phys_addr_t reg)
                        SYS_REG_BW_MASK));
                row_3_4 = sys_reg >> SYS_REG_ROW_3_4_SHIFT(ch) &
                        SYS_REG_ROW_3_4_MASK;
+               dbw = sys_reg >> SYS_REG_DBW_SHIFT(ch) & SYS_REG_DBW_MASK;
+               /* only used by DDR4 */
+               bg = (dbw == 1) ? 1 : 2;

-               chipsize_mb = (1 << (cs0_row + col + bk + bw - 20));
+               chipsize_mb = (1 << (cs0_row + col + bg + bk + bw - 20));

                if (rank > 1)
                        chipsize_mb += chipsize_mb >> (cs0_row - cs1_row);
                if (row_3_4)
                        chipsize_mb = chipsize_mb * 3 / 4;
                size_mb += chipsize_mb;
-               debug("rank %d col %d bk %d cs0_row %d bw %d row_3_4 %d\n",
-                     rank, col, bk, cs0_row, bw, row_3_4);
+               debug("rank %d col %d bk %d cs0_row %d bw %d row_3_4 %d dbw %d\n",
+                     rank, col, bk, cs0_row, bw, row_3_4, dbw);
        }

        return (size_t)size_mb << 20;
uboot 打上补丁
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表