This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/DRA756:如何在 J6的 DSP2上加载 dspce 防火墙

Guru**** 2609895 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/637582/rtos-dra756-how-can-i-load-dspdce-fireware-on-dsp2-of-j6

器件型号:DRA756

工具/软件:TI-RTOS

当我们使用 J6 DSP 时、我们无法在 DSP2上正确加载 dspdce 固件。 谢谢!

我们在 ti-processor-sdk-linux-Automotive ra7xx-evm-03_01_00_03上编译最原始的 dspdce_1_00_00_08、并生成 dra7xx-c66x-dsp.xe66。
使用以下命令将固件加载到 DSP1,我们可以找到设备节点 rpmsg-dce-dsp,并且可以正常运行。

echo 40800000.dsp >解除绑定
LN -s /opt/demos/sv/dra7xx-c66x-dsp.xe66 /lib/firmware/dra7-dsp1-fw.xe66
echo 40800000.dsp >绑定

但是、当我们更改 CONFIG.Bld 和 dce_dsp.cfg 文件(请参阅附录)相关设置时、重新编译 dspdce_1_00_00_08以生成 dra7xx-c66x-dsp.xe66、然后、
使用以下命令将固件加载到 DSP2,它无法生成设备节点 rpmsg-dce-dsp,并且无法正常运行。

echo 41000000.dsp >解除绑定;
LN -s /opt/demos/sv/dra7xx-c66x-dsp.xe66 /lib/firmware/dra7-dsp2-fw.xe66
echo 41000000.dsp >绑定

我们还在 ti-processor-sdk-linux-Automotive ra7xx-evm-03_02_00_03中遇到同样的问题。

CONFIG.BLD

===========================================================================================================================================

VAR Build = xdc.useModule('xdc.bld.BuildEnvironment');
var commonbld = xdc.loadCapsule ("../build/common.bld);
VAR commonOpts ="-g";
VAR HW_VAYU = 2;
VAR ES10 = 1;

对于(x = 0;x <参数长度;x++)

if (参数[x].match (/^trace_level=/))

//[1]运算用于 split()的返回值,该值是
//数组。
var trace_level =参数[x].split("=")[1];

/********
*内存映射信息
(二 /
ti.platforms.evmDRA7XX:dsp1的/*内存映射
*
*--外部存储器--
*虚拟物理大小注释
*******************************************************************************************************
* 9500_0000????????? 20_0000 (~2MB) EXT_CODE
* 9520_0000????????? 20_0000 (2MB) EXT_DATA
* 9540_0000????????? 280_0000 (40MB) EXT_HEAP
* 9F00_0000 9F00_0000 6_0000 (384KB) TRACE_BUF
* 9F06_0000 9F06_0000 1_0000 (64KB) EXC_DATA
* 9F07_0000 9F07_0000 2_0000 (128KB) PM_DATA (电源管理)
*
var evmDRA7XX_ExtMemMapDsp1 ={
EXT_CODE:{name:"EXT_CODE"、base:0x95000000、len:0x200000、space:"code"、access:"rwx"}、
EXT_DATA:{name:"EXT_DATA"、base:0x95200000、len:0x00200000、space:"data"、access:"rw"}、
EXT_HEAP:{name:"EXT_HEAL"、base:0x95400000、len:0x02800000、space:"data"、access:"rw"}、
trace_BUF:{name:"trace_BUF"、base:0x9F000000、len:0x00060000、space:"data"、access:"rw"}、
EXC_DATA:{name:"EXC_DATA"、base:0x9F060000、len:0x00010000、space:"data"、access:"rw"}、
PM_DATA:{name:"PM_DATA"、base:0x9F070000、len:0x00020000、space:"data"、access:"rwx"}
};

Build.platformTable["ti.platforms.evmDRA7XX:dsp1"]={
externalMemoryMap:[
["EXT_CODE"、evmDRA7XX_ExtMemMapDsp1.EXT_CODE ]、
["EXT_DATA"、evmDRA7XX_ExtMemMapDsp1.EXT_DATA ]、
["EXT_HEAP "、evmDRA7XX_ExtMemMapDsp1.EXT_HEAP ]、
["trace_BUF"、evmDRA7XX_ExtMemMapDsp1.trace_BUF ]、
["EXC_DATA"、evmDRA7XX_ExtMemMapDsp1.EXC_DATA ]、
["PM_DATA"、evmDRA7XX_ExtMemMapDsp1.PM_DATA]
]、
代码内存:"EXT_CODE"、
dataMemory:"EXT_DATA"、
stackMemory:"EXT_DATA"、

//由 baron 20170425修改
L1PMode:"32K"、
L1DMode:"32K"、
L2模式: "256K"
};

Build.platformTable["ti.platforms.evmDRA7XX:dsp2"]= Build.platformTable["ti.platforms.evmDRA7XX:dsp1"];

VAR TargetBuild = commonBld.getTargetBuild (参数);
commonOpts +="-DHOST_type=host_unknown "

/********
* DSP 目标的设置
(二 /
var dsp_tgt = xdc.useModule('ti.targets.elf.C66');
dsp_tgt.rootdir = java.lang.System.getenv ("C66XCGTOOLSPATH");
dsp_tgt.ccopts.suffix +="--gcc -D__DSPBIOS__-DDSP";
dsp_tgt.ccopts.suffix +="-ms ";
//dsp_tgt.ccopts.suffix +="-pden -pds=48 ";
//dsp_tgt.ccopts.suffix +="-pd露";//将警告转换为错误;在4.9版本中受支持
dsp_tgt.ccopts.suffix += commonOpts;
dsp_tgt.lnkopts.suffix +="-x ";
dsp_tgt.lnkopts.prefix +="--retain=.resource_table";
//dsp_tgt.lnkopts.prefix +="--zero_init=off ";
//dsp_tgt.lnkopts.prefix +="-cinit_compression=off";

dsp_tgt.platforms =[
" ti.platforms.evmDRA7XX:dsp2"、//0
];

/***** 追踪**** /
if (trace_level = 0){
dsp_tgt.ccopts.suffix +="-dcpe_debug_level=0;
}否则、如果(trace_level = 1){
dsp_tgt.ccopts.suffix +="-dcpe_debug_enable";
dsp_tgt.ccopts.suffix +="-dcpe_debug_level=1";
}否则、如果(trace_level = 2){
dsp_tgt.ccopts.suffix +="-dcpe_debug_enable";
dsp_tgt.ccopts.suffix +="-dcpe_debug_level=2";
}否则、如果(trace_level = 3){
dsp_tgt.ccopts.suffix +="-dcpe_debug_enable";
dsp_tgt.ccopts.suffix +="-dcpe_debug_level=3";
}否则、如果(trace_level >= 4){
dsp_tgt.ccopts.suffix +="-dcpe_debug_enable";
dsp_tgt.ccopts.suffix +="-dcpe_debug_level=4";

/***** 追踪**** /

HwType = HW_VAYU;
HwVer = ES10;
var build_vayu = true;
print("Selected Vayu for ES10");

dsp_tgt.ccopts.suffix +="-DBUILD_for_VAYU";
dsp_tgt.ccopts.suffix +="-DVAYU_ES10";
dsp_tgt.platform = dsp_tgt.platforms[0];

build.targets =[
DSP_tgt、
];

VAR 封装= XDC.MODULE ("XDC.BLD.PackageContents");

===========================================================================================================================================

dce_dsp.cfg

===================================================================================================================================================

/*------------------------ DSP --------------------------- *
MultiProc.setConfig("DSP2"、["host"、"IPU2"、"IPU1"、"DSP2"、 "DSP1"]);

===================================================================================================================================================

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    只要进行这些更改、您就无法在 dsp2上加载 dspdce 固件。
    dspdce 将 platform/ti/dc/baseimage/custom_rsc_table_vayu_dsp.h 中的地址分割为0x99000000、同时还将远程 proc 驱动程序修复为0x99000000
    已通知将此地址用于 DSP1。

    请参阅/arch/arm/boot/dts/dra7-evm.dts reserved_mem 部分。

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,您能说得更清楚吗?  我将地址更改为0x99000000、也无法在 J6的 DSP2上加载 dspdce 防火墙。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好 、Ramprasad、   感谢您的回复!

    除了上述更改之外 ,我在 platform/ti/dc/baseimage/custom_rsc_table_vayu_dsp.h 中将地址分割更改为0x9F000000 ,但它也无法在 J6的 DSP2上加载 dspce 防火墙。

    您能否提供可在 J6的 DSP2上加载的 dspdce_1_00_00_08的唤醒功能?

     

    /*
     * ==== custom_rsc_table_vayu_ipu.h ===========
     *
     * 为所有 IPU 内核定义 VAYU/DRA7xx 自定义资源表条目。 这将是
     * 合并到相应的基本映像中,并由 Remoteproc 使用
     * 在主机端分配/保留资源。
     *
     *

    #ifndef __custom_rsc_table_VAYU_DSP_H__
    #define __CUSTOM_RSC_TABLE _VAYU_DSP_H__

    #include

    /* DSP 内存映射*/
    #define L4_DRA7XX_BASE         0x4A000000

    /* L4_CFG 和 L4_WKUP */
    #define L4_PERIODIFY_L4CFG    (L4_DRA7XX_BASE)
    #define DSP_Peripheral_L4CFG   0x4A000000

    #define L4_PERFICE_L4PER1   0x48000000
    #define DSP_PERASE_L4PER1  0x48000000

    #define L4_PERFICE_L4PER2   0x48400000
    #define DSP_PERASE_L4PER2  0x48400000

    #define L4_PERFICE_L4PER3   0x48800000
    #define DSP_PERASE_L4PER3  0x48800000

    #define L4_PERFICE_L4EMU    0x54000000
    #define DSP_Peripheral_L4EMU   0x54000000

    #define L3_peripheral_DMM      0x4E000000
    #define DSP_Peripheral_DMM     0x4E000000


    #define L3_peripheral_ISS      0x52000000
    #define DSP_PERSS_0x52000000      

    #define L3_TILER_MODE_0_1      0x60000000
    #define DSP_TILER_MODE_0_1     0x60000000

    #define L3_TILER_MODE_2        0x70000000
    #define DSP_TILER_MODE_2       0x70000000

    #define L3_tiler_mode_3        0x78000000
    #define DSP_TILER_MODE_3       0x78000000

    #define DSP_MEM_TEXT           0x95000000
    #define DSP_MEM_IOBUFS         0x8000000
    #define DSP_MEM_DATA           0x95200000
    #define DSP_MEM_HEAP           0x95400000

    #define DSP_MEM_IPC_DATA       0x9F000000
    #define DSP_MEM_IPC_VRING      0xA0000000
    #define DSP_MEM_RPMSG_VRING0   0xA0000000
    #define DSP_MEM_RPMSG_VRING1   0xA0004000
    #define DSP_MEM_VING_BUFS0    0xA0040000
    #define DSP_MEM_VRING_BUFS1    0xA0080000

    #define DSP_MEM_IPC_VRING_SIZE SZ_1M
    #define DSP_MEM_IPC_DATA_SIZE  SZ_1M

    #define DSP_MEM_TEXT_SIZE      (SZ_1M * 2)

    #define DSP_MEM_DATA_SIZE      (SZ_1M * 2)
    #define DSP_MEM_heap_size      (SZ_1M * 40)
    #define DSP_MEM_IOBUFS_SIZE    (SZ_1M * 90)

    #define VAYU_DSP_1

    /*
     *分配固定的 RAM 地址以简化固定的 MMU 表。
     * PHYS_MEM_IPC_VRING 和 PHY_MEM_IPC_DATA 必须同时存在。
     *
    /*请参阅 Linux 端的 CMA 基址:arch/arm/mach-omap2/remoteproc.c */
    #IF 定义(VAYU_DSP_1)
    #define PHYS_MEM_IPC_VRING     0x99000000
    定义#Elif (VAYU_DSP_2)
    #define PHYS_MEM_IPC_VRING     0x9F000000
    #endif
    #define PHYS_MEM_IOBUFS        0xBA300000

    /*
     *虚拟队列的大小(以支持的缓冲区数量表示、
     *且必须为2的幂)
     *
    #define DSP_RPMSG_VQ0_SIZE     256
    #define DSP_RPMSG_VQ1_SIZE     256

    /*其索引代表我们支持的功能的翻转位*/
    #define RPMSG_DSP_C0_features  1.

    结构 my_resource_table{
       struct resource_table base;

       uint32 offset[18]; /*应与实际定义中的'num'匹配*/

       /* 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 text_cout;

       /*数据分割条目*/
       struct fw_RSC_carveout data_cout;
       /*堆清理条目*/
       struct fw_RSC_carveout heap_cout;

       /* ipcdata 分割条目*/
       struct fw_RSC_carveout ipcdata_cout;

       /*跟踪条目*/
       结构 FW_RSC_TRACE 跟踪;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem0;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem1;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem2;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem3;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem4;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem5;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem6;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem7;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem8;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem9;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem10;

       /* devmem 条目*/
       struct fw_RSC_devmem devmem11;
    };

    extern char ti_trace_sysmin_Module_State_0_outbuf__A;
    #define TRACEBUFADDR (UINT32)&ti_trace_sysmin_Module_State_0_outbuf__A

    #pragma DATA_SECTION (ti_ipc_remoteproc_ResourceTable、".resource_table")
    #pragma DATA_ALIGN (ti_ipc_remoteproc_ResourceTable、4096)

    struct my_resource_table ti_ipc_remoteproc_ResourceTable ={
       1、     /*我们是实现此功能的第一个版本*/
       18、    /*表中的条目数*/
       0、0、  /*保留、必须为零*/
       /*条目的偏移量*/
       {
           offsetof (struct my_resource_table、rpmsg_vdev)、
           offsetof (struct my_resource_table、text_cout)、
           offsetof (struct my_resource_table、data_cout)、
           offsetof (struct my_resource_table、heap_cout)、
           offsetof (struct my_resource_table、ipcdata_cout)、
           offsetof (struct my_resource_table、trace)、
           offsetof (struct my_resource_table、devmem0)、
           offsetof (struct my_resource_table、devmem1)、
           offsetof (struct my_resource_table、devmem2)、
           offsetof (struct my_resource_table、devmem3)、
           offsetof (struct my_resource_table、devmem4)、
           offsetof (struct my_resource_table、devmem5)、
           offsetof (struct my_resource_table、devmem6)、
           offsetof (struct my_resource_table、devmem7)、
           offsetof (struct my_resource_table、devmem8)、
           offsetof (struct my_resource_table、devmem9)、
           offsetof (struct my_resource_table、devmem10)、
           offsetof (struct my_resource_table、devmem11)、
       }、

       /* rpmsg vdev 条目*/
       {
           TYPE_VDEV、virtio_ID_RPMSG、0、
           RPMSG_DSP_C0_features、0、0、2、 {0、0}、
           /*无配置数据*/
       }、
       /*两个振铃*/
       {DSP_MEM_RPMSG_VRING0、4096、DSP_RPMSG_VQ0_SIZE、1、0}、
       {DSP_MEM_RPMSG_VRING1、4096、DSP_RPMSG_VQ1_SIZE、2、0}、

       {
           TYPE_CARVEOUT、
           DSP_MEM_TEXT、0、
           DSP_MEM_TEXT_SIZE、0、0、"DSP_MEM_TEXT"、
       }、

       {
           TYPE_CARVEOUT、
           DSP_MEM_DATA、0、
           DSP_MEM_DATA_SIZE、0、0、"DSP_MEM_DATA"、
       }、

       {
           TYPE_CARVEOUT、
           DSP_MEM_HEAP、0、
           DSP_MEM_heap_size、0、0、"DSP_MEM_heap"、
       }、

       {
           TYPE_CARVEOUT、
           DSP_MEM_IPC_DATA、0、
           DSP_MEM_IPC_DATA_SIZE、0、0、"DSP_MEM_IPC_DATA"、
       }、

       {
           TYPE_TRACE、TRACEBUFADDR、0x8000、0、"TRACE:DSP"、
       }、

       {
           TYPE_DEVMEM、
           DSP_MEM_IPC_VRING、PHYS_MEM_IPC_VRING、
           DSP_MEM_IPC_VRING_SIZE、0、0、"DSP_MEM_IPC_VRINing"、
       }、

       {
           TYPE_DEVMEM、
           DSP_MEM_IOBUFS、PHY_MEM_IOBUFS、
           DSP_MEM_IOBUFS_SIZE、0、0、"DSP_MEM_IOBUFS"、
       }、

       {
           TYPE_DEVMEM、
           DSP_TILER_MODE_0_1、L3_TILER_MODE_0_1、
           SZ_256M、0、0、"DSP_TILER_MODE_0_1"、
       }、

       {
           TYPE_DEVMEM、
           DSP_TILER_MODE_2、L3_TILER_MODE_2、
           SZ_128M、0、0、"DSP_TILER_MODE_2"、
       }、

       {
           TYPE_DEVMEM、
           DSP_TILER_MODE_3、L3_TILER_MODE_3、
           SZ_128M、0、0、"DSP_TILER_MODE_3"、
       }、

       {
           TYPE_DEVMEM、
           DSP_Peripheral_L4CFG、L4_Peripheral_L4CFG、
           SZ_16M、0、0、"DSP_PERIOD_L4CFG"、
       }、

       {
           TYPE_DEVMEM、
           DSP_Peripheral_L4PER1、L4_Peripheral_L4PER1、
           SZ_2M、0、0、"DSP_PERSS_L4PER1"、
       }、

       {
           TYPE_DEVMEM、
           DSP_Peripheral_L4PER2、L4_Peripheral_L4PER2、
           SZ_4M、0、0、"DSP 外设_L4PER2"、
       }、

       {
           TYPE_DEVMEM、
           DSP_Peripheral_L4PER3、L4_Peripheral_L4PER3、
           SZ_8M、0、0、"DSP 外设_L4PER3"、
       }、

       {
           TYPE_DEVMEM、
           DSP_Peripheral_L4EMU、L4_Peripheral_L4EMU、
           SZ_16M、0、0、"DSP_Peripheral_L4EMU"、
       }、

       {
           TYPE_DEVMEM、
           DSP_Peripheral_DMM、L3_Peripheral_DMM、
           SZ_1M、0、0、"DSP_Peripheral_DMM"、
       }、

       {
           TYPE_DEVMEM、
           DSP_Peripheral_ISS、L3_Peripheral_ISS、
           SZ_256K、0、0、"DSP_PERipheral_ISS"、
       }、
    };

    #endif /*__custom_RSC_table_VAYU_DSP_H__*/

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    TI 尚未尝试在 DSP2上加载 dspdce 固件、因为内核和 dspdce 也只需进行少量更改。
    您尝试此操作的原因是什么、您能告诉我吗?

    请注意、从 PSDKLA3.04开始、dspdce 将被弃用。

    RAM
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们将 dspdce 指的是将映像算法移植到 DSP1和 DSP2。

    正如您所说的、dspdce 将被弃用、那么您建议参考哪个示例、将我们的图像算法移植到 J6的 DSP (DSP1和 DSP2)上?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    是的、dspdce 是集成在 DSP 上运行的 xDAIS 视频/音频编解码器的唯一方法。
    如果您计划两个 DSP 都使用图像算法、应用将如何区分具有相同 VIDEC API 的内核?