打印
[技术问答]

MA35D1-如何自定义分配内存给M4和A35之间共享内存传输数据

[复制链接]
1179|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
假设要分配6M给M4使用,
修改文件路径:
MA35D1_Buildroot/output/build/linux-custom/arch/arm64/boot/dts/nuvoton/ma35d1.dtsi
在reserved-memory里面增加m4_share_mem配置如下:
        reserved-memory {
                #address-cells = <2>;
                #size-cells = <2>;
                ranges;
                 m4_share_mem:m4_share_mem@0 {
                          reg = <0x0 0x8F800000 0x0 0x600000>; /* 6MiB */
                          no-map;
                 }
                display_buf: display_buf@0 {
                        reg = <0x0 0x8C800000 0x0 0x3000000>; /* 48MiB */
                        no-map;
                };
                vc8k_buf: vc8k_buf@0 {
                        reg = <0x0 0x8A800000 0x0 0x2000000>; /* 32MiB */
                        no-map;
                };
                gc520l_buf: gc520l_buf@0 {
                        reg = <0x0 0x8A000000 0x0 0x800000>; /* 8MiB */
                        no-map;
                };
                rproc_buf: rproc_buf@0 {
                        reg = <0x0 0x80020000 0x0 0x60000>; /* 384KB */
                        no-map;
                };
        };
Linux通过rpmsg 与M4通信握手,然后linux侧对分配的区域读写信息/M4对分配的区域读写信息。这个区域就是上面分配的6M空间。图示如下:


使用特权

评论回复
沙发
jcky001|  楼主 | 2023-6-2 14:49 | 只看该作者
握手后M4和linux可以如下方式使用(假设前面0x200给rpmsg,剩余DDR用来传递数据)



1、M4这边可以给约定的空间写值,写值测试参考如下:

#define TEST_BASE                (0x8F800200UL)

    for(i=0;i<180000;i=i+4){

     outp32((void *)(TEST_BASE+i), 0x0);

}

读可以用函数inp32((void *)(TEST_BASE))



2、Linux下在用户空间可以使用mem来操作物理空间:

fd = open("/dev/mem", O_RDWR | O_SYNC);  

    if (fd) {  

        printf("Success to open /dev/mem fd=%08x\n", fd);  

    }  

    else {  

        printf("Fail to open /dev/mem fd=%08x\n", fd);   

    }  

      map_base = mmap(0, ALLOC_SIZE, PROT_READ, MAP_PRIVATE, fd, 0x8F800200);

……do what you want……

close(fd);  

munmap(map_base, ALLOC_SIZE);  

使用特权

评论回复
板凳
奔跑的牛| | 2023-6-5 13:17 | 只看该作者
方法如上所述

使用特权

评论回复
地板
奔跑的牛| | 2023-6-5 13:21 | 只看该作者
修改MA35D1_Buildroot\output\build\arm-trusted-firmware-custom\fdts\ma35d1.dtsi
添加到sspcc: sspcc@404F0000{
...

<UART14_SUBM>
...
}

使用特权

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

本版积分规则

1522

主题

4615

帖子

6

粉丝