主题中讨论的其他器件:OMAP-L138、 DA8XX
工具/软件:Linux
您好!
我尝试从 Linux 加载 DSP 固件、其中 DSP 存储器使用 L2RAM/IRAM 作为其存储器位置。
如果将内存放入 DDR 中、则可以正常工作、但如果在 L2RAM 中放置了任何内存、则 Remoteproc.0不会加载固件。
这是我的 config.Bld
/*
=== CONFIG.BRD =====
*
//
var build = xdc.useModule('xdc.bld.BuildEnvironment');
var Pkg = xdc.useModule('xdc.bld.PackageContents');
//构建发行版时,请释放所有内容*/
Pkg.attrs.exportAll = true;
//取消注释此项以构建具有调试支持的应用*/
Pkg.attrs.profile ="Debug";
// bin/是生成的目录,"XDC clean"应删除*/
Pkg.generatedFiles。$add ("bin/);
Build.platformTable["ti.platforms.evmOMAPL138:dsp"]={
externalMemoryMap:[
["DDR"、{
名称:"DDR"、空格:"代码/数据"、访问:"rwx"、
基地址:0xC3100000、len:0x800000、
注释:"DSP 程序存储器(8 MB)"
}
]、
代码内存:"DDR"、
数据存储器:"DDR"、
stackMemory:"DDR"、
L1DMode:"32K"、
L1PMode:"32K"、
l2Mode:"0K"
};
/*
==== TI.targets.elf.c674 ===
*/
var C674 = xdc.useModule('ti.targets.elf.C674');
c674.ccopts.suffix +="-mi10 -mo ";
在尝试加载固件时、将任何内存区域设置为 IRAM 中不起作用。
IRAM 的地址为0x18000000、大小为0x40000
我尝试了以下操作:
1.已尝试将 DEVMEM 添加到资源表中。
{ TYPE_DEVMEM、IRAM_DA、IRAM_DA、IRAM_SIZE、0、 0、"DSP_IRAM"、 }、
2.在资源表中向 DTS 添加内存池并进行分配
保留存储器{ #address-cells =<1>; #size-cells =<1>; 范围; DSP_memory_region:DSP-memory@c3000000{ compatible ="shared_dma-pool"; reg =<0xc3000000 0x1000000>; 可重复使用; status ="确定"; }; DSP_memory_Region2:DSP-IRAM@= 0x400000000;reg ;"shared dma-pool =";"OK"= 0x18000000;"reusable };"reusable}
{ TYPE_CARVEOUT、IRAM_DA、IRAM_DA、IRAM_SIZE、0、 0、"DSP_IRAM"、 }、
这种情况都不起作用。
我需要将 DSP 存储器驻留在 IRAM/L2RAM 中。
以下是完整的资源表:
/* === rsc_table_omapl138.h =========== * *在每个基本映像中包含此表 ,该基本映像从*主机端的 remoteproc 读取。 * / #ifndef _RSC_TABLE _OMAPL138_H_ #define _RSC_TABLE _OMAPL138_H_ #include "RSC_Types.h" #define IRAM_DA 0x18000000 #define IRAM_SIZE SZ_256K #define DATA_DA 0xc3100000 #ifndef DATA_SIZE # define DATA_SIZE (SZ_8M) #endif #define RPMSG_VRING0_DA 0xc3000000 #define RPMSG_VRING1_DA 0xc3004000 #define console_VRING0_DA 0xc3008000 #define console_VRING1_DA 0xc300C000 #define BUFS0_DA 0xc3040000 #define BUFS1_DA 0xc3080000 /* 虚拟队列的大小(以支持的缓冲区数量表示, *并且必须是2的幂) */ #define RPMSG_VQ0_SIZE 256 #define RPMSG_VQ1_SIZE 256 #define console_VQ0_size 256 #define console_VQ1_size 256 //翻转位,其索引代表我们支持的功能*/ #define RPMSG_DSP_features 1 结构 my_resource_table{ struct resource_table base; uint32 offset[4]; /* rpmsg vdev 条目*/ struct fw_RSC_vdev rpmsg_vdev; struct fw_rsc_vdev_vring rpmsg_vring0; struct fw_rsc_vdev_vring rpmsg_vring1; /*数据分割条目*/ struct fw_RSC_carveout data_cout; /*数据设备条目*/ struct FW_RSC_devmem IRAM; /*跟踪条目*/ struct fw_RSC_trace; }; extern char XDC_RUNTIME_SysMIN_Module_State_0_outbuf__A; #define TRACEBUFADDR (uint32)&XDC_RUNTIME_SYSMIN_Module_State_0_outbuf_A #define TRACEBUFUST_IPC 0x8000 (uinti_ipc_table )#proc_remote_data_remote_table、#proc_remote_data_remote_data_remote_remote_date_remote_remote_remote_remote_remote_date_te_te_remote_remote_remote_remote_remote_remote_remote_remote_ 1、/*我们是实现此功能的第一个版本*/ 4、/*表中的条目数*/ 0、0、/*保留、必须为零*/ /*条目的偏移量*/ { offsetof (struct my_resource_table、rpmsg_vdev)、 offsetof (struct my_resource_table、data_cout)、 offsetof (struct my_resource_table、IRAM)、 offsetof (struct my_resource_table、trace)、 }、 /* rpmsg vdev 条目*/ { TYPE_VDEV、virtio_ID_RPMSG、0、 RPMSG_DSP_features、0、0、0、2、 {0、0}、 /*无配置数据*/ }、 /*两个振铃*/ {RPMSG_VRING0_DA、4096、RPMSG_VQ0_SIZE、1、0}、 {RPMSG_VRING1_DA、4096、RPMSG_VQ1_SIZE、2、0}、 { TYPE_CARVEOUT、DATA_DA、DATA_DA、DATA_SIZE、0、 "DSP_MEM_DATA"、 }、 { TYPE_DEVMEM、IRAM_DA、IRAM_DA、IRAM_SIZE、0、 0、"DSP_IRAM"、 }、 { TYPE_TRACE、TRACEBUFADDR、TRACEBUFSIZE、0、"TRACE:DSP"、 }、 }; #endif /*_RSC_TABLE _OMAPL138_H_*
将 IRAM 声明为 CARVEOUT 或 DEVMEM 都无法解决我的问题。
这是 Linux 通过 dmesg 提供的完整日志:
[3128.896586] davinci-rproc davia-rproc.0:pm_clk_notify () 6 [3128.897324] PM:删除无总线的信息:proc 0 [3128.920801] firmware_class:fw_name_devm_release:fw_r868-dsp-fw devm-remote_proc 3128.9320801] dspc :rproc davinci_proc 3rproc 3rproc:rproc 3rproc 3rproc 3rproc 3rproc:rproc 3rprob_remotic release32 davinci :rproc 3rproc 3rproc 3rproc 3rproc 3rproc 3rproc:rproc 3rproc 3rproc 3rproc 3r 探测驱动程序 Davinci-rproc.0 [3128.936681] Davinc-rproc Davinci-rproc.0:无 pinctrl 句柄 [3128.96756] Davinc-rproc Davinci-rproc.0:pm_clk_notify () 4 [3128.936922] devices_kset:移动 davinci-rproc dfadm.r3000-rproc.0:将 davinci r3003003000-r3003003000-r3003003003000-r300300300990添加到器件节点:r300393003900]器件目录[3r3009940]@ 添加无总线的信息:remoteproc0 [ 3129.005493] remoteproc remoteproc0:DSP 可用 [ 3129.009591] firmware_class:__allocy_fw_buf:fw-rproc-dSP-fw buf=c26ac5c0 [3129.009728] remoteproc0:加载/lib/firmware/updates/4.14.40-g4796173fc5/rproc-dsp-fw /lib/firmware/updates/rproc-dsp-fw 时失败,错误为:3129.77 加载/lib/firmware/4.14.40-g4796173fc5/rproc-dsp-fw 失败,错误-2 [3129.053666]驱动程序:'davinci-rproc':driver_bound:绑定到设备'davinci-rproc.0' [3129.053763] dava-rproc davia-rproc.0:pm_clk_notify () 5 [3129.054058]总线:'platform':dspc:3129.053763] davincrproc-rproc-rproc.0] davincrproc davincrproc.0=rproc.0=davincrproc.rproc davincrproc.0_rproc dave13rproc.0]rproc davincrproc.0=dave13rproc davincrproc.0=dave13rproc dave13rproc.0]rproc.0=davinc 为 DSP 加电 [3129.137771] firmware_class:batched request - sharing the same struct firmware_buf and lookup for multiple requests [3129.137805] firmware_class:fw_set_page_data:fw-rproc-dSP-fw buf=c26ac5c0 data=cproc1000 s=2845088 [312137841 固件_remote_dsp:12286024_remote_remote_ds] fw-rproc-dsp-FW buf=c26ac5c0 data=cbec1000 size=2845088