打印

DM81xx DVR_RDK Memory Map

[复制链接]
405|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Violin11|  楼主 | 2017-10-6 10:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DM81xx DVR_RDK Memory Map


在DVR RDK中支持多种不同的usecases,为了更有效地利用内存,在SYS/BIOS侧将物理内存配制成多个段,不同的段的大小是可以配置的,具体属性各不相同。

    下面简单介绍下各个区域的用途:

Linux Memory:分配给linux管理的内存区域

Shared Regions:受限制的共享内存区,根据配置不同,其属性也各不相同

l Syslink MessageQ/IPC ListMP:Non-cached on M3

l Bitstream Buffer:Cached on A8. Cached on M3, although access by DMAs

l Frame Buffer:VPSS - Video M3 Frame Buf

l IPC ListMP for Dual-M3:Cached on M3

Slave Code and Data Section Memory:各个处理器的代码段和数据段,包括DSP和Dual-M3系统

Remote Debug Memory:即2.2.1中所说的Remote debug部分的共享内存

VPDMA Descriptiors Memory:用于存放VPSS M3部分分配的DMA配置

Host VPSS Notify Shared Memory:用于使用FBDev时传递A8侧命令至VPSS M3侧

Tiler Memory:为HDVPSS和HDVICP提供Tiled内存,包含8bit区和16bit区。

FBDev Shared Memory:为VPSS M3侧驱动提供内存

硬件上的限制:


  • Ducati M3系统无法访问超过0xA0000000的代码区;
  • Ducati M3系统无法访问超过0xE0000000的数据区;
  • Ducati M3系统中的AMMU只能管理512MB或者32MB的大内存段(largePages),被划分成了四个段,其中一段用于映射寄存器,因此AMMU只能访问这三个内存段;


软件上的限制:


  • 由于linux系统的内核空间为1GB、用户空间为3GB,因此内核最大只能映射1GB的存储空间,其中包含了启动参数及共享内存区;
  • 共享内存是静态分配的,因此修改后需要重新编译链接;
  • 由于映射Frame Buffer会消耗大量的内核空间,因此并未被映射到A8侧,用户在需要的时候动态映射(如使用IPC Frames In/Out link);



在修改内存分布的时候需要注意的事项:


  • 必须考虑上述的软硬件上的限制;即VPSS M3VIDEO M3的代码段必须放置在低512MB的物理内存里,并且需要在AMMU配置中将虚拟地址一一映射到物理地址;
  • 最少需要留2MB的空间给Syslink-Notify给内核空间,用于A8VPSS M3的通信,位置改变的时候,需要注意bootargs中的参数“notifyk.vpssm3_sva”也需要相应修改;
  • RemoteDebug段是用于方便调试用的打印消息暂存区,除A8外,所有消息打印都存在该区域,并使用Vps_printf调用,送到linux侧串口终端打印出来。可用于日志记录。在原有的一套代码中,需要自己根据内存配置指定日志记录所处的内存位置。用户可以将该套代码修改后集成到源程序中,做出实时打印来方便调试。具体位置可以根据配置,修改TI原有的genaddrinfo.xs脚本来产生一个头文件来指定(具体可仿照genaddriinfo.xs中生成env_xx_xx.sh的方法生成一个宏定义的头文件autocfg_mem.h,供其他代码调用)。
  • Linux Memory大小改变同样也需要修改bootargs中的mem参数,如果被分成多段的话,则可以使用mem=<SIZE>@<ADDR>来指定,需要注意的是TI在后续版本中要求Linux Memory需要按照4MB对齐。
  • Tiler Memory的起始地址需要128MB对齐,如果不使用Tiler Memory,该段内存会被用于Frame Buffer或者Bitstream Buffer的补充;


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

717

主题

1010

帖子

3

粉丝