nemonic27

nemonic27

0个粉丝

6

问答

0

专栏

0

资料

nemonic27  发布于  2016-08-07 10:17:28
采纳率 0%
6个问答
8130

关于HI3531板子的内存配置与扩大DDR问题

 
1 Demo板提供了1G的内存,MMZ.KO占据绝大部分供海思各个内置模块只有。留给内核使用的只有64M。设备上要跑web server,跑sip,明显内存是不够用的, 你们如何解决这个问题?
我也尝试过按照论坛的方案,修改boot参数和mmz参数;但是这样会很不稳定,海思内置模块各种报内存不足。

2 由于不了解好的解决方案,我现在重新做了一块2GB DDR内存的板子,换成了单片512MB的三星颗粒。我修改了DDRC_RNKCFG为0x142,但是烧写boot时,依然会出现“failed  to download boot please check ddr init state and ....” 。谁有相关问题的解决经验?

非常感谢。
我来回答
回答10个
时间排序
认可量排序

nemonic27

0个粉丝

6

问答

0

专栏

0

资料

nemonic27 2016-08-07 11:01:45
认可0
其实第一个问题, ngswfx 和 zhuangweiye 两位大神以前回复过我。  关于内存够用不够用的话题后续再说。

其实,我主要想问第二个问题, 海思hi3531我现在就想支持2G内存的话, 我应该做什么? 按照网上提的那5步去做,到底正确不正确?  
我现在做完第一部,重新烧写boot后 (二进制比对验证了, 肯定DDRC_RNKCFG已经改成0x142了),还是不管用。

----
1.修改DDRC_RNKCFG 为 0x142

2.修改arch/arm/mach-godnet/include/mach/vmalloc.h 扩大 vmalloc 区域为 0x7e000000

3.修改内核配置 Memory split 为 2G/2G user/kernel split

4.修改uboot参数,给操作系统配1GByte内存
setenv bootargs 'mem=1G console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs);hinand:16G(nand)'

5.修改load3531脚本,给mmz配置1GByte内存
insmod mmz.ko mmz=anonymous,0,0xC0000000,1024M anony=1 || report_error

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-08 08:37:38
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35667&ptid=12217]nemonic27 发表于 2016-8-7 11:01[/url]
其实第一个问题, ngswfx 和 zhuangweiye 两位大神以前回复过我。  关于内存够用不够用的话题后续再说。
...[/quote]

3531的DDR 问题比价特殊

主要原因不是DDR不够, 而是DDR分成了两部分, 而程序又必须为每个模块(VI/VPSS/VENC/...)指定使用的DDR, 不然默认都分在DDR0上,导致出现MMZ不够的假象


来看个例子:

+---ZONE: PHYS(0xC0000000, 0xCFFFFFFF), GFP=0, nBYTES=262144KB, NAME="ddr1"
   |-MMB: phys(0xC0000000, 0xC2FDBFFF), kvirt=0x  (null), flags=0x00000000, length=49008KB,     name="vb"
        ... 中间忽略N行...
     |-MMB: phys(0xCA09D000, 0xCA114FFF), kvirt=0x  (null), flags=0x00000000, length=480KB,       name="Vdec1_Ctx"
   |-MMB: phys(0xCA115000, 0xCA214FFF), kvirt=0x  (null), flags=0x00000000, length=1024KB,      name="Vdec1_Scd"
   |-MMB: phys(0xCA215000, 0xCA81AFFF), kvirt=0x  (null), flags=0x00000000, length=6168KB,      name="Vdec1_Vdh"
   |-MMB: phys(0xCA81B000, 0xCA918FFF), kvirt=0x  (null), flags=0x00000000, length=1016KB,      name="Vdec1_StreamBuf"
   |-MMB: phys(0xCA919000, 0xCA91AFFF), kvirt=0x  (null), flags=0x00000000, length=8KB, name="Vdec1_UsrBuf"
+---ZONE: PHYS(0x86900000, 0x8FFFFFFF), GFP=0, nBYTES=154624KB, NAME="anonymous"
   |-MMB: phys(0x86900000, 0x869BFFFF), kvirt=0xc7300000, flags=0x00000003, length=768KB,       name="TDE_MEMPOOL_MMB"
        ... 中间忽略N行...
   |-MMB: phys(0x8ABD4000, 0x8AC4BFFF), kvirt=0x  (null), flags=0x00000000, length=480KB,       name="Vdec2_Ctx"
   |-MMB: phys(0x8AC4C000, 0x8AD4BFFF), kvirt=0x  (null), flags=0x00000000, length=1024KB,      name="Vdec2_Scd"
   |-MMB: phys(0x8AD4C000, 0x8B351FFF), kvirt=0x  (null), flags=0x00000000, length=6168KB,      name="Vdec2_Vdh"
   |-MMB: phys(0x8B352000, 0x8B44FFFF), kvirt=0x  (null), flags=0x00000000, length=1016KB,      name="Vdec2_StreamBuf"
   |-MMB: phys(0x8B450000, 0x8B451FFF), kvirt=0x  (null), flags=0x00000000, length=8KB, name="Vdec2_UsrBuf"
   |-MMB: phys(0x8B452000, 0x8B4C9FFF), kvirt=0x  (null), flags=0x00000000, length=480KB,       name="Vdec3_Ctx"
   |-MMB: phys(0x8B4CA000, 0x8B5C9FFF), kvirt=0x  (null), flags=0x00000000, length=1024KB,      name="Vdec3_Scd"
   |-MMB: phys(0x8B5CA000, 0x8BBCFFFF), kvirt=0x  (null), flags=0x00000000, length=6168KB,      name="Vdec3_Vdh"
   |-MMB: phys(0x8BBD0000, 0x8BCCDFFF), kvirt=0x  (null), flags=0x00000000, length=1016KB,      name="Vdec3_StreamBuf"
   |-MMB: phys(0x8BCCE000, 0x8BCCFFFF), kvirt=0x  (null), flags=0x00000000, length=8KB, name="Vdec3_UsrBuf"
        ... 中间忽略N行...
   |-MMB: phys(0x8BD30000, 0x8BD37FFF), kvirt=0x  (null), flags=0x00000000, length=32KB,        name="AENC_StrBuf"
   |-MMB: phys(0x8BD38000, 0x8BD38FFF), kvirt=0x  (null), flags=0x00000000, length=4KB, name="aenc-dbg buf"
   |-MMB: phys(0x8BD39000, 0x8BD42FFF), kvirt=0x  (null), flags=0x00000000, length=40KB,        name="AODMA"
   |-MMB: phys(0x8BD43000, 0x8BD43FFF), kvirt=0x  (null), flags=0x00000000, length=4KB, name="aden-dbg buf"
   |-MMB: phys(0x8BD44000, 0x8BD7FFFF), kvirt=0x  (null), flags=0x00000000, length=240KB,       name="AODMA"

---MMZ_USE_INFO:
total size=416768KB(407MB),used=259692KB(253MB + 620KB),remain=157076KB(153MB + 404KB),zone_number=2,block_number=178

这个是一个3531的 /proc/media-mem
DDR分为两块
一块 名字anonymous 0x80000000 - 0x8FFFFFFF  256M
一块 名字ddr1           0xC0000000 - 0xCFFFFFFF 256M
一共512M, 可以看到这个地址空间是不连续的,
其中linux使用了105M(0x80000000 - 0x868FFFFF)
对应的 load.sh中的命令为
insmod mmz.ko mmz=anonymous,0,0x86900000,151M:ddr1,0,0xC0000000,256M anony=1 || report_error
注意上面命令里面的anonymous 和ddr1, 这个在程序中是用来区分DDR的名字是很重要的(当然anonymous 对应 NULL)

继续上例子:
        stMppChn.enModId = HI_ID_VPSS;
        stMppChn.s32ChnId = 0;       
        for(i = 0;i < s32VpssCnt; i++)
        {
                if( i <  nDDR0VpssCnt)
                {
                        pcMmzName = NULL;  
                }
                else
                {
                        pcMmzName = "ddr1";
                }       
               
                stMppChn.s32DevId = i;

                s32Ret = HI_MPI_SYS_SetMemConf(&stMppChn,pcMmzName);
                if (s32Ret)
                {
                        SAMPLE_PRT("HI_MPI_SYS_SetMemConf VPSS ERR !\n");
                }
        }
意思就是把VPSS,group是小于nDDR0VpssCnt的放到anonymous 上, 其他放到ddr1上

再回头看上面的/proc/media-mem, 可以看到vdec1在anonymous , 而vdec2,vdec3在ddr1上



那么楼主的问题应该不在1G内存不够的问题,而是没有充分利用好这1G内存,按一般情况1G内存分两块
应该是
0x80000000 - 0x9FFFFFFF 512M
0xC0000000 - 0xDFFFFFFF 512M   
假定给linux 256M
那么
insmod mmz.ko mmz=anonymous,0,0x90000000,256M:ddr1,0,0xC0000000,512M anony=1 || report_error
同时 bootargs用 mem=256M

然后就是繁琐的调试工作, 不断尝试把不同的模块放到ddr0或ddr1上以满足MMZ的使用

关于uboot的部分,按照文档一步一步来就ok了

falloutmx

1个粉丝

15

问答

0

专栏

0

资料

falloutmx 2016-08-08 09:30:08
认可0
3531的话,512M内存足以满足应用+mpp需要了。

至于你说的更换ddr,你这是连ddr初始化都没成功,5步里的后4步是没意义的。至于这个初始化,只能看datasheet一个个比较寄存器了

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-08-08 14:35:26
认可0
本帖最后由 ngswfx 于 2016-8-8 15:11 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=35679&ptid=12217]zhuangweiye 发表于 2016-8-8 08:37[/url]
3531的DDR 问题比价特殊

主要原因不是DDR不够, 而是DDR分成了两部分, 而程序又必须为每个模块(VI/VPSS ...[/quote]

我手上也有个3531的板子,前几天刚弄到的,说是天地的,看着像大华的风格,还没研究,这个DDR用法真是够郁闷的。

2个DDR存储器,2G三星 共512M

2个镁光2TD27 ,看着像DDR,或者flash,和三星的明显不一样,从位置看,应该是ddr内存,十分不明白,为啥还搞2个厂子,也没有具体型号,不知容量。

还有一个128M nand ,一个32M spi  flash

//////////////////////////真乱。

nemonic27

0个粉丝

6

问答

0

专栏

0

资料

nemonic27 2016-08-11 21:49:42
认可0
不好意思,回复晚了。 不是每天都在处理这个3531的事情,所以论坛也不是每天都来。

我手上也有别的厂商的板子,确实是板载了2G内存,很好奇他们怎么驱动起来的,所以我才有这个疑问。

那如果我现在就是想在boot阶段启动起这4片共2G的内存的话(当然,有可能我不会做这个事情,但我真的非常好奇), 我应该怎么做。

我在海思的文档中找了半天,但并没有找到满载2G内存的相关说明?

各位如果有增加ram到2g的经验的话,能说一下么,谢谢。


nemonic27

0个粉丝

6

问答

0

专栏

0

资料

nemonic27 2016-08-11 21:56:58
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35679&ptid=12217]zhuangweiye 发表于 2016-8-8 08:37[/url]
3531的DDR 问题比价特殊

主要原因不是DDR不够, 而是DDR分成了两部分, 而程序又必须为每个模块(VI/VPSS ...[/quote]

非常感谢,其实这个回复4月份就写给过我一次了。
但是由于是兼职,这个事情我一直也没太投入做。。。
我感觉我都有点对不起你花那么多时间回复我。。。。真的

我现在就去尝试给kernel 256M,然后挪动一下其它各个模块的mmz分配。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-12 07:54:27
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35956&ptid=12217]nemonic27 发表于 2016-8-11 21:56[/url]
非常感谢,其实这个回复4月份就写给过我一次了。
但是由于是兼职,这个事情我一直也没太投入做。。。
...[/quote]


正好对这个问题有点了解, 正好楼主需要, 分享一下何乐不为呢

nemonic27

0个粉丝

6

问答

0

专栏

0

资料

nemonic27 2016-08-14 14:34:50
认可0
本帖最后由 nemonic27 于 2016-8-14 14:39 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=35959&ptid=12217]zhuangweiye 发表于 2016-8-12 07:54[/url]
正好对这个问题有点了解, 正好楼主需要, 分享一下何乐不为呢[/quote]

# cat /proc/media-mem
+---ZONE: PHYS(0xC4000000, 0xDFEFFFFF), GFP=0, nBYTES=457728KB, NAME="ddr1"
+---ZONE: PHYS(0x9FA00000, 0x9FEFFFFF), GFP=0, nBYTES=5120KB,   NAME="jpeg"
+---ZONE: PHYS(0x84000000, 0x9F9FFFFF), GFP=0, nBYTES=452608KB, NAME="anonymous"
   |-MMB: phys(0x84000000, 0x840BFFFF), kvirt=0xc4b00000, flags=0x00000003, length=768KB,       name="TDE_MEMPOOL_MMB"
   |-MMB: phys(0x840C0000, 0x840C0FFF), kvirt=0x  (null), flags=0x00000000, length=4KB, name="TDE_COEF_MMB0"
   |-MMB: phys(0x840C1000, 0x840C1FFF), kvirt=0x  (null), flags=0x00000000, length=4KB, name="TDE_COEF_MMB1"
   |-MMB: phys(0x840C2000, 0x840C2FFF), kvirt=0x  (null), flags=0x00000000, length=4KB, name="TDE_COEF_MMB2"
   |-MMB: phys(0x840C3000, 0x840C3FFF), kvirt=0x  (null), flags=0x00000000, length=4KB, name="TDE_COEF_MMB3"
   |-MMB: phys(0x840C4000, 0x840C4FFF), kvirt=0x  (null), flags=0x00000000, length=4KB, name="TDE_COEF_MMB4"
   |-MMB: phys(0x840C5000, 0x840C5FFF), kvirt=0x  (null), flags=0x00000000, length=4KB, name="TDE_COEF_MMB5"
   |-MMB: phys(0x840C6000, 0x840C6FFF), kvirt=0x  (null), flags=0x00000000, length=4KB, name="TDE_COEF_MMB6"
   |-MMB: phys(0x840C7000, 0x84226FFF), kvirt=0x  (null), flags=0x00000000, length=1408KB,      name="TDE_TEMP_BUFFER"
   |-MMB: phys(0x84227000, 0x8492EFFF), kvirt=0xcb800000, flags=0x00000001, length=7200KB,      name="hifb_layer0"
   |-MMB: phys(0x8492F000, 0x85036FFF), kvirt=0xcc000000, flags=0x00000001, length=7200KB,      name="hifb_layer1"
   |-MMB: phys(0x85037000, 0x85360FFF), kvirt=0xc5c00000, flags=0x00000001, length=3240KB,      name="hifb_layer2"
   |-MMB: phys(0x85361000, 0x8568AFFF), kvirt=0xc6c00000, flags=0x00000001, length=3240KB,      name="hifb_layer3"
   |-MMB: phys(0x8568B000, 0x85D92FFF), kvirt=0xcc800000, flags=0x00000001, length=7200KB,      name="hifb_layer4"
   |-MMB: phys(0x85D93000, 0x85DB2FFF), kvirt=0xc4d80000, flags=0x00000001, length=128KB,       name="hifb_layer5"
   |-MMB: phys(0x85DB3000, 0x85DD2FFF), kvirt=0xc4dc0000, flags=0x00000001, length=128KB,       name="hifb_layer6"
   |-MMB: phys(0x85DD3000, 0x85DDFFFF), kvirt=0xc4d50000, flags=0x00000001, length=52KB,        name="higo_log"


---MMZ_USE_INFO:
total size=915456KB(894MB),used=30592KB(29MB + 896KB),remain=884864KB(864MB + 128KB),zone_number=3,block_number=17

我发现这些红字的部分(TDE和hifb)看似是没法挪动的,因为我并没有找到这部分是在哪申请的,看似这部分代码并不开源。我理解的对么?

所以只能挪动那些运行时,动态使用的,
比如SAMPLE_COMM_VENC_MemConfig SAMPLE_COMM_VI_MemConfig中进行vi通道与venc通道内存的调整

是这样么?

谢谢。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-15 08:21:46
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=36061&ptid=12217]nemonic27 发表于 2016-8-14 14:34[/url]
# cat /proc/media-mem
+---ZONE: PHYS(0xC4000000, 0xDFEFFFFF), GFP=0, nBYTES=457728KB, NAME="dd ...[/quote]

TDE_XXX是TDE使用的MMZ, 相对较小不用担心

hifb_xxxx 对应的是 fb 使用的MMZ, 一般都放在 DDR0 上, 要根据具体的应用来决定使用内存的大小
这个由 load.sh中 insmod hifb.ko 后面的参数来决定, 详细内容可以参考文档, 实际大小应该也不会太大

关于是否开源的问题, XVR系列的海思芯片的SDK有关海思ko的部分好像是不开源的,

楼主的意思可能是没有开放API给用户来设置吧, 其实上面两个部分一般不会太大, 对上百M使用的MMZ来说没有实质的影响, 调整其它部分足够满足应用需求了

笑苍穹007

0个粉丝

0

问答

0

专栏

0

资料

笑苍穹007 2016-08-08 11:59:25
认可0
:lol:lol:lol:lol
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区