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.

[参考译文] PROCESSOR-SDK-AM64X:crypto_open () 调用在 SA2UL_hwInit () 中中止

Guru**** 2535450 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1562984/processor-sdk-am64x-crypto_open-call-aborts-in-sa2ul_hwinit

器件型号:PROCESSOR-SDK-AM64X
主题:SysConfig 中讨论的其他器件

工具/软件:

-我试图实现 AES CBC 加密,按照 MCU_PLUS_SDK_am64x_10_01_00_32\examples\security\crypto\sa2ul_AES\crypto_AES_CBC_128 中的 crypto_AES_CBC_128.c 示例进行操作
-调用 Crypto_open() 时、在 MCU_PLUS_SDK_am64x_10_01_00_32\source\security\common\drivers\crypto\sa2ul 中 sa2ul.c 的第 1940 行的 SA2UL_hwInit() 中的执行中止
-我在 Code Composer Studio 12.7.1.00001 的.syscfg 中启用了加密(并因此启用了 SA2UL)。 我的 SysConfig 版本为 1.21.2。
-在我调用 Crypto_open () 之前,初始化逻辑会从 System_init () 调用 Crypto_init () 和 SA2UL_init ()。
-中止的行为:reg = CSL_REG_RD (&pSaRegs->updates.ENGINE_ENABLE);请注意、调试器显示 updates.ENGINE_ENABLE 为 0 (pSaRegs 显示为 0x40900000)
-上一行 reg = CSL_FEXT (CSL_REG_RD (&pSaRegs->MMR.EFUSE_EN)、CP_ACE_EFUSE_EN_ENABLE);
...执行正常,所以我认为更新。ENGINE_ENABLE 可能无法读取。

我需要做什么才能使 Crypto_open() 正常工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    要使 Crypto_open() 正常工作、我需要做什么?

    在运行示例之前如何初始化 SoC?

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

    内核 1 中的初始化逻辑:(这是我调用 Crypto_open () 的地方)(主要是从 SysConfig 自动生成的)

    hwip_init();(删除此文件不能解决问题)
    system_init();
    DPL_init ()
    hwip_init();
    DebugP_uartSetDrvIndex (CONFIG_UART2);
    SoC_controlModuleUnlockMMR (SOC_DOMAIN_ID_MAIN、2);
    *(volatile uint32_t *)(TIMER10_clock_SRC_MUX_ADDR)= TIMER10_clock_SRC_MCU_HFOSC0;
    SoC_controlModuleLockMMR (SOC_DOMAIN_ID_MAIN、2);
    ClockP_init ();
    Sciclient_init (CSL_CORE_ID_R5FSS1_0);
    CycleCounterP_init (SOC_getSelfCpuClk ());
    PowerClock_init();
    Pinmux_init ();
    DDR_INIT (&gDdrParams);
    gpio_init ();
    Ipc Notify_Params_ init (&notifyParams);
    notifyParams.intrPriority = 15U;
    notifyParams.selfCoreId = CSL_CORE_ID_R5FSS1_0;
    notifyParams.numCores = 1;
    notifyParams.coreIdList[0]= CSL_CORE_ID_R5FSS0_0;
    notifyParams.isMailboxIpcEnabled = 0;
    notifyParams.isCrcEnabled = 0;
    notifyParams.isIPCIntrRouter = 0;
    IpcNotify_init (&notifyParams);
    Rp Message_Params_(&rpmsgParams);
    rpmsgParams.vringTxBaseAddr[CSL_CORE_ID_R5FSS0_0]=(uintptr_t)(&gIpcSharedMem[8480]);
    rpmsgParams.vringRxBaseAddr[CSL_CORE_ID_R5FSS0_0]=(uintptr_t)(&gIpcSharedMem[0]);
    rpmsgParams.vringSize = IPC_RPMESSAGE_VRING_SIZE;
    rpmsgParams.vringNumBuf = IPC_RPMESSAGE_NUM_VRing_BUF;
    rpmsgParams.vringMsgSize = IPC_RPMESSAGE_MAX_VRING_BUF_SIZE;
    rpmsgParams.isCrcEnabled = 0;
    RPMessage_init (&rpmsgParams);
    for (instId = 0U;instId < CONFIG_UDMA_NUM_Instances;instId++)
    UDMA_init (&gUdmaDrvObj[instId]、&gUdmaInitPrms[instId]);
    crypto_init();
    SA2UL_INIT();
    drivers_uartInit();
    Board_init ()-这是一个空函数
    drivers_open();
    驱动程序_udmaOpen();
    drivers_mcspiOpen();
    drivers_uartOpen();
    Board_driversOpen ();-这是一个空函数
    Board_gpioInit ();
    Sciclient_gpioIrqSet();
    rmIrqReq.valid_params = 0u;
    rmIrqReq.valid_params |= TISCI_MSG_VALUE_RM_DST_ID_VALID;
    rmIrqReq.valid_params |= TISCI_MSG_VALUE_RM_DST_HOST_IRQ_VALID;
    rmIrqReq.global_event = 0U;
    rmIrqReq.src_id = TISCI_GPIO1;
    rmIrqReq.src_index = TISCI_BANK_SRC_IDX_BASE_GPIO1 + GPIO_GET_BANK_INDEX (48);
    rmIrqReq.dst_id = TISCI_DEV_R5FSS1_CORE0;
    rmIrqReq.dst_HOST_IRQ = CSLR_R5FSS1_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_12;
    rmIrqReq.ia_id = 0u;
    rmIrqReq.vint = 0U;
    rmIrqReq.vint_STATUS_BIT_INDEX = 0U;
    rmIrqReq.secondary_host = TISCI_MSG_VALUE_RM_UNUSED secondary_host;
    Sciclient_rmIrqSet (&rmIrqREQ、&rmIrqResp、SystemP_WAIT_FOREVER);

    rmIrqReq.valid_params = 0u;
    rmIrqReq.valid_params |= TISCI_MSG_VALUE_RM_DST_ID_VALID;
    rmIrqReq.valid_params |= TISCI_MSG_VALUE_RM_DST_HOST_IRQ_VALID;
    rmIrqReq.global_event = 0U;
    rmIrqReq.src_id = TISCI_DEV_GPIO0;
    rmIrqReq.src_index = TISCI_BANK_SRC_IDX_BASE_GPIO0 + GPIO_GET_BANK_INDEX (55);
    rmIrqReq.dst_id = TISCI_DEV_R5FSS1_CORE0;
    rmIrqReq.dst_HOST_IRQ = CSLR_R5FSS1_CORE0_INTR_MAIN_GPIOMUX_INTROUTER0_OUTP_13;
    rmIrqReq.ia_id = 0u;
    rmIrqReq.vint = 0U;
    rmIrqReq.vint_STATUS_BIT_INDEX = 0U;
    rmIrqReq.secondary_host = TISCI_MSG_VALUE_RM_UNUSED secondary_host;
    Sciclient_rmIrqSet (&rmIrqREQ、&rmIrqResp、SystemP_WAIT_FOREVER);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    内核 1 中的初始化逻辑:(这是我调用 Crypto_open () 的地方)(主要是从 SysConfig 自动生成的)

    您是否没有在 R5FSS0-0 内核上运行示例? 如果是、请查看以下主题

    e2e.ti.com/.../am2432-sha256-hmac-with-core-r5fss1-0

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

    我们在您所提到的线程中尝试了该补丁、其中 sciclient_defaultBoardcfg_rm.c 在 7 处发生了更改、更改自:
    .host_id = TISCI_HOST_ID_MAIN_0_R5_1
    最终目的
    .host_id = TISCI_HOST_ID_MAIN_1_R5_1

    ... SA2UL_hwInit() 仍然在同一行中止 (reg = CSL_REG_RD(&pSaRegs->updates.engine_enable );)

    我尝试在内核 0 (R5FSS0-0) 中运行相同的逻辑、但它在同一位置失败、无论是否有 SBL 中的补丁。  再次  调用 Crypto_init () 和 SA2UL_init ()、它位于 System_init () 的末尾。  你能想到 SA2UL_hwInit() 会失败的任何其他原因吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能想到 SA2UL_hwInit() 会失败的任何其他原因吗?

    需要配置防火墙才能访问 SA2UL MMR。 如果您未按原样使用示例、则需要按照可用的示例配置防火墙

    github.com/.../example.syscfg

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

    谢谢 — 当我们在核心  R5FSS0-0 中配置防火墙时、对 Crypto_open () 的调用是有效的(当我们使用不带补丁的 SBL 将 SA2UL 资源从 R5FSS0-0 移动到 R5FSS1-0 时)。  是否有办法可以 同时在 R5FSS0-0 和 R5FSS1-0 中使用 SA2UL?

    我们在 R5FSS1-0 中未成功使用防火墙。  SBL 中是否需要执行其他操作以允许防火墙在 R5FSS1-0 中工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 R5FSS1-0 中使用防火墙失败。  SBL 中是否需要执行其他操作以允许防火墙在 R5FSS1-0 中工作?

    以下更改应允许您配置来自 R5FSS1-0 内核的防火墙

    diff --git a/source/drivers/sciclient/sciclient_default_boardcfg/am64x/sciclient_defaultBoardcfg_security.c b/source/drivers/sciclient/sciclient_default_boardcfg/am64x/sciclient_defaultBoardcfg_security.c
    index b37b1aa4687..64ad8614803 100755
    --- a/source/drivers/sciclient/sciclient_default_boardcfg/am64x/sciclient_defaultBoardcfg_security.c
    +++ b/source/drivers/sciclient/sciclient_default_boardcfg/am64x/sciclient_defaultBoardcfg_security.c
    @@ -258,7 +258,7 @@ __attribute__(( aligned(128), section(".boardcfg_data") )) =
                 .size = sizeof(struct tisci_boardcfg_sec_handover),
             },
             .handover_msg_sender = TISCI_HOST_ID_MAIN_0_R5_0,
    -        .handover_to_host_id = TISCI_HOST_ID_MAIN_0_R5_0,
    +        .handover_to_host_id = TISCI_HOST_ID_MAIN_1_R5_0,
             .rsvd = {0, 0, 0, 0},
         },
     
    

    请注意、此更改将对 R5FSS1-0 内核进行独占控制。 R5FSS0-0 内核将无法再配置防火墙。