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.

[参考译文] TCI6638K2K:具有 RM 的 FFTC 多核(QMSS 和 AMP;CPPI)

Guru**** 2553800 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/604305/tci6638k2k-fftc-multicore-qmss-cppi-with-rm

器件型号:TCI6638K2K

我已从 PDK (pdk_keystone2_3_01_03_06)中获取 K2K 的 FFTC 多核示例工程。 我修改了项目、如下所示:

我将项目拆分为2个部分。 一个用于内核0、另一个用于内核3。 每个项目都有自己的"test_main.c"、"test_multicore.c"和"fftc_test.cfg "副本。

2.内核0项目执行 FFTC POWER_ON、SYSTEM_INIT、QMSS desc 存储器插入、QMSS_INIT、QMSS_START、CPPI_Init、并通过调用 multicore_test 来执行10个数据包的 FFTC。  我将代码更改为仅使用 RxQue 712、以便 Core 0仅处理 Core 0发布的作业的输出(而不是实际测试项目、其中 core0的输出由 core1处理、core1由 core 2处理、依此类推)。

3.核心3项目仅执行 QMSS_START ,并通过其自己的 multicore_test 副本对10个数据包执行 FFTC。 这里使用 RxQue 715。

4..fftc、.cppi 和.qmss 全部被移动到 MSMCSRAM。

5.两个项目都将执行,并通过了对各自内核(内核0和内核3)上10个 fftc 数据包的测试。 无论我是在 DSP-no-Boot 模式还是 ARM-SPI 引导模式下引导电路板。

6.然后我尝试引入客户经理(资源经理)。 我在核心0中使用 rmGlobalResourceList 和 rmDspPlusArmPolicy 启动了一个 RM 服务器实例。 已使用 RM 服务器服务句柄注册 QMSS 和 CPPI LLD。 根据调用 cpi_startCfg (&startCfg)  

7.在 Core 3中,我启动了一个 RM 客户端实例,并使用客户端服务句柄注册了 QMSS LLD,并调用了 qms_startCfg()。  

执行时、内核0运行至完成、但内核3在  Fftc_setup 中抛出 CPPI_Queue_open_error (-137)-> fftc_open->Fftc_setupCppiDesc -> Cppi_initDescriptor->Cppi_initDescriptionorSubSys -> Qms_queueOpenSubSys。  

现在我的问题是:

1.要在 ARM-SPI 引导模式下的多核环境中使用 FFTC (&&或 BCP)、必须包含 RM 吗? 如果是这样、为什么没有 RM 代码在两个内核中都正常运行、如上所述。。。?

2.如果 RM 是必须的、那么采取的步骤是否正确...? 是否缺少任何东西?

3.为什么它不工作? 如何继续...?

我已将与 RM 相关的所有更改置于预定义的编译时间标志下、如果我禁用该标志、则两个项目都将运行至完成。 但启用了 RM 更改后、Core 3抛出错误。

感谢您提供一些指导帮助。

谢谢、此致、

Ashok

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

    我已通知工厂团队。 反馈将发布在此处。

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

    如果您运行的是 Linux、那么我相信 RM 是必需的。  如果您运行裸机、当然可以省略 RM。  如果在包含 RM 时工作代码失败、则可能是因为 QMSS LLD 调用(例如 Qms_insertMemoryRegion)失败、因为资源尚未在 RM 中注册。  您应该逐步完成所有设置代码、以确保所有 LLD 呼叫成功返回。  您可以查看示例、了解如何使用 RM。

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

    你好。。。

    我已在核心0中的 rmServerServiceHandle 和核心3中的 rmCleintServiceHandle 注册了 QMSS。 希望这是正确的。

    我将仅在核心0中执行 QMSS_insertMemoryRegion、而不在核心3中执行。 我已将描述符存储器移至 MSMC、因此我也要在 Core 0中插入 Core 3所需的描述符。 我在 Core 0中执行缓存回写操作、并在 Core 3中执行缓存无效操作以访问描述符。

    如果我错过了任何一步、或者在任何一步中出现了错误、请告诉我。

    两个内核是否应该对 QMSS 使用相同的 RM 服务?  

    我在这里看到了 CPPI LLD 在 Core 0中的 RM 服务器实例和其他 Core 中的 RM 客户端实例中注册的其他代码。 但对于所有内核中的 QMSS、仅使用 RM 服务器实例进行注册。 是这样吗? 我还应该尝试同样的...?

    此致、

    Ashok

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

    您好!

    我深入研究了每个函数、以了解具体发生的情况。 当我尝试在 Fftc_open 中打开 FDQ 时、我将在内核3中的函数 Qmss_rmService 内部获得 rmServiceResp.serviceState 的 RM_SERVICE_DENIED_RACpolicy (79)、而不是 RM_SERVICE_APPROVED 静态策略(79)。

    在这方面有什么影响?

    此致、
    Ashok

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

    大家好、您对6/22的评论证实了我的上述说法。  根据您的环境(Linux、BIOS、裸机、ARM、DSP)、您需要找到资源表并使用要使用的资源对其进行初始化。  我建议研究 RM 驱动程序的测试代码(请参阅\ti\drv\rm\test\src)以了解如何完成此操作。

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

    感谢您的回答。

    RM 驱动程序的所有示例仅涉及 RM 传输功能。 是否有 RM、QMSS 和 CPPI 的示例?

    我看到 PA 多核示例使用 RM、QMSS 和 CPPI。 因此、我对 FFTC 示例项目进行了相同的尝试、如下所示:

    在 SYS_INIT_CORE (内核0)上:

    memset (&rmInitCfg、0、sizeof (rmInitCfg));
    rmInitCfg.instName = rmServerName;
    rmInitCfg.instType = RM_INSTTYPE_SERVER;
    rmInitCfg.instCfg.serverCfg.globalResourceList =(void *) rmGlobalResourceList;
    rmInitCfg.instCfg.serverCfg.globalPolicy =(void *) rmDspPlusArmPolicy;
    rmServerHandle = rm_init (&rmInitCfg、&rmResult);
    rmServerServiceHandle = rm_serviceOpenHandle (rmServerHandle、&rmResult);

    qmsInitConfig.qmsHwStatus= QMSS_HW_INIT_COMPLETE;
    qmsGblCfgParams.qmRmServiceHandle= rmServerServiceHandle;

    if ((结果= Qms_init (&qmsInitConfig、&qmsGblCfgParams))!= QMSS_Sok)

    Fftc_osalLog ([核心%d]:初始化队列管理器子系统时出错,错误代码:%d\n",coreNum,结果);
    返回-1;


    /*在此内核上启动队列管理器*/
    if (Qms_start ()!=QMSS_Sok)

    Fftc_osalLog ("[核心%d]:启动 QMSS %d\n"、coreNum 时出错);
    返回-1;


    /*初始化 CPPI LLD */
    if ((结果= Cppi_init (&cppiGblCfgParams))!= CPPI_Sok)

    Fftc_osalLog ([核心%d]:初始化 CPPI LLD 时出错,错误代码:%d\n",coreNum,结果);
    返回-1;


    if (rmServerServiceHandle){
    cppiStartCfg.rmServiceHandle = rmServerServiceHandle;
    cpi_startCfg (&cppiStartCfg);


    然后遵循 QMSS 存储器插入 ETC 代码。

    在另一个内核(内核3)上:

    等待 Core 0完成上述初始化后、我们将执行以下操作:

    memset (&rmInitCfg、0、sizeof (rmInitCfg));
    rmInitCfg.instName = rmClientName;
    rmInitCfg.instType = RM_INSTTYPE_CLIENT;
    rmServerHandle = rm_init (&rmInitCfg、&rmResult);
    rmClientServiceHandle = rm_serviceOpenHandle (rmServerHandle、&rmResult);

    memset (startCfg、0、sizeof (Qms_StartCfg));
    startCfg.rmServiceHandle = rmClientServiceHandle;

    rmResult = Qms_startCfg (&startCfg);
    if (rmResult!= QMSS_SOK)

    System_printf ("[core %d]错误:无法启动 QMSS。错误代码为%d\n"、DNUM、rmResult);
    // 返回-1;


    while (1)

    /*阻止 Qmss_init()由内核0完成*/
    结果= Qms_start();
    if (结果=QMSS_NOT 初始化)

    System_printf ("QMSS 尚未初始化\n");
    继续;

    否则、如果(结果!= QMSS_SOK){
    System_printf ("Qms_start 失败、错误代码为%d\n"、结果);
    //返回(-1);


    如果(结果= QMSS_SOK)

    中断;



    Cppi_StartCfg cppiStartCfg;

    if (rmClientServiceHandle){
    memset (&cppiStartCfg、0、sizeof (Cppi_StartCfg));
    cppiStartCfg.rmServiceHandle = rmClientServiceHandle;
    cpi_startCfg (&cppiStartCfg);


    其余都与 FFTC 多核示例项目中的情况相同。

    这是好的吗? 我们是否在这里遗漏了任何东西?

    我在 PA 示例和 FFTC 示例之间看到的另一个区别是、对于 PA、用于创建 PA 实例的配置结构类型为 paconfig;其配置结构具有 rmService 字段、并且也初始化为 Core 0中的服务器服务句柄(pacfg.rmServiceHandle = rmServerServiceHandle;)。 但 FFTC 配置结构中缺少相同的内容。 这是否正常、或者我们在这里缺少什么?

    所有这一切的结果是:Core 0成功运行、而在 Core 3中、我收到以下错误:

    [C66xx_3]在区域0中初始化类型为:0的自由描述符时出错、错误:-137
    根据描述符配置1设置空闲队列时出错
    [核心3]:FFTC 打开失败
    [核心3]:FFTC 实例0的 FFTC 测试设置失败

    请帮帮我们。

    谢谢、此致、
    Ashok
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有任何更新?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、很抱歉耽误您的时间、此 TT 出现裂缝。 是的、我相信 CPPI 和 QMSS 测试示例都使用了 RM。