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.

[FAQ] [参考译文] [常见问题解答] AM62x、AM64x:如何禁用未使用的内核?

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1195052/faq-am62x-am64x-how-to-disable-unused-cores

我没有使用 TI 处理器上的内核之一。 如何禁用该内核、以便为其他内核释放更多内存、外设等?

本常见问题解答以 AM64x 为例、但相同的概念适用于 AM62x。

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

    如何禁用远程内核

    您可以使用 Linux devicetree 来禁用 R5、M4和 PRU 等远程内核。 如果禁用远程内核的器件节点、则 Linux 内核永远不会使用 RemoteProc 来初始化内核。 请注意,默认情况下启用设备树节点。 这意味着、如果要禁用特定内核、则需要在器件树节点中设置 status = disabled。 应在板 dts 文件中禁用内核、而不是禁用其中一个 dtsi 文件。

    AM64x 示例

    例如、要禁用 AM64x 入门套件 EVM 上的所有远程内核、我们更改了 K3-am642-SK.dts、如以下补丁中所示。

     arch/arm64/boot/dts/ti/k3-am642-evm.dts | 20 +++++---------------
     1 file changed, 5 insertions(+), 15 deletions(-)
    
    diff --git a/arch/arm64/boot/dts/ti/k3-am642-evm.dts b/arch/arm64/boot/dts/ti/k3-am642-evm.dts
    index 2bd50d4bb226..610f375dedee 100644
    --- a/arch/arm64/boot/dts/ti/k3-am642-evm.dts
    +++ b/arch/arm64/boot/dts/ti/k3-am642-evm.dts
    @@ -282,33 +282,23 @@
     };
    
     &main_r5fss0_core0 {
    -       mboxes = <&mailbox0_cluster2 &mbox_main_r5fss0_core0>;
    -       memory-region = <&main_r5fss0_core0_dma_memory_region>,
    -                       <&main_r5fss0_core0_memory_region>;
    +       status = "disabled";
     };
    
     &main_r5fss0_core1 {
    -       mboxes = <&mailbox0_cluster2 &mbox_main_r5fss0_core1>;
    -       memory-region = <&main_r5fss0_core1_dma_memory_region>,
    -                       <&main_r5fss0_core1_memory_region>;
    +       status = "disabled";
     };
    
     &main_r5fss1_core0 {
    -       mboxes = <&mailbox0_cluster4 &mbox_main_r5fss1_core0>;
    -       memory-region = <&main_r5fss1_core0_dma_memory_region>,
    -                       <&main_r5fss1_core0_memory_region>;
    +       status = "disabled";
     };
     &main_r5fss1_core1 {
    -       mboxes = <&mailbox0_cluster4 &mbox_main_r5fss1_core1>;
    -       memory-region = <&main_r5fss1_core1_dma_memory_region>,
    -                       <&main_r5fss1_core1_memory_region>;
    +       status = "disabled";
     };
    
     &mcu_m4fss {
    -       mboxes = <&mailbox0_cluster6 &mbox_m4_0>;
    -       memory-region = <&mcu_m4fss_dma_memory_region>,
    -                       <&mcu_m4fss_memory_region>;
    +       status = "disabled";
     };
    
     &main_pmx0 {
    --
    2.17.1
    

    如果将 DDR"存储器区域"留在 Linux devicetree 中、则仍会分配它们、但在 Linux 分配它们之后将不使用它们。 由于 DDR"存储器区域"现在未使用、因此可以从保留存储器节点中删除它们。

     arch/arm64/boot/dts/ti/k3-am642-evm.dts | 66 -------------------------
     1 file changed, 66 deletions(-)
    
    diff --git a/arch/arm64/boot/dts/ti/k3-am642-evm.dts b/arch/arm64/boot/dts/ti/k3-am642-evm.dts
    index 610f375dedee..c6222dad7d19 100644
    --- a/arch/arm64/boot/dts/ti/k3-am642-evm.dts
    +++ b/arch/arm64/boot/dts/ti/k3-am642-evm.dts
    @@ -43,72 +43,6 @@
                            alignment = <0x1000>;
                            no-map;
                    };
    -
    -               main_r5fss0_core0_dma_memory_region: r5f-dma-memory@a0000000 {
    -                       compatible = "shared-dma-pool";
    -                       reg = <0x00 0xa0000000 0x00 0x100000>;
    -                       no-map;
    -               };
    -
    -               main_r5fss0_core0_memory_region: r5f-memory@a0100000 {
    -                       compatible = "shared-dma-pool";
    -                       reg = <0x00 0xa0100000 0x00 0xf00000>;
    -                       no-map;
    -               };
    -
    -               main_r5fss0_core1_dma_memory_region: r5f-dma-memory@a1000000 {
    -                       compatible = "shared-dma-pool";
    -                       reg = <0x00 0xa1000000 0x00 0x100000>;
    -                       no-map;
    -               };
    -
    -               main_r5fss0_core1_memory_region: r5f-memory@a1100000 {
    -                       compatible = "shared-dma-pool";
    -                       reg = <0x00 0xa1100000 0x00 0xf00000>;
    -                       no-map;
    -               };
    -
    -               main_r5fss1_core0_dma_memory_region: r5f-dma-memory@a2000000 {
    -                       compatible = "shared-dma-pool";
    -                       reg = <0x00 0xa2000000 0x00 0x100000>;
    -                       no-map;
    -               };
    -
    -               main_r5fss1_core0_memory_region: r5f-memory@a2100000 {
    -                       compatible = "shared-dma-pool";
    -                       reg = <0x00 0xa2100000 0x00 0xf00000>;
    -                       no-map;
    -               };
    -
    -               main_r5fss1_core1_dma_memory_region: r5f-dma-memory@a3000000 {
    -                       compatible = "shared-dma-pool";
    -                       reg = <0x00 0xa3000000 0x00 0x100000>;
    -                       no-map;
    -               };
    -
    -               main_r5fss1_core1_memory_region: r5f-memory@a3100000 {
    -                       compatible = "shared-dma-pool";
    -                       reg = <0x00 0xa3100000 0x00 0xf00000>;
    -                       no-map;
    -               };
    -
    -               mcu_m4fss_dma_memory_region: m4f-dma-memory@a4000000 {
    -                       compatible = "shared-dma-pool";
    -                       reg = <0x00 0xa4000000 0x00 0x100000>;
    -                       no-map;
    -               };
    -
    -               mcu_m4fss_memory_region: m4f-memory@a4100000 {
    -                       compatible = "shared-dma-pool";
    -                       reg = <0x00 0xa4100000 0x00 0xf00000>;
    -                       no-map;
    -               };
    -
    -               rtos_ipc_memory_region: ipc-memories@a5000000 {
    -                       reg = <0x00 0xa5000000 0x00 0x00800000>;
    -                       alignment = <0x1000>;
    -                       no-map;
    -               };
            };
    
            evm_12v0: fixedregulator-evm12v0 {
    --
    2.17.1
    

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

    其他信息

    AM62x 的重要说明:请勿禁用 wkup_r5fs0  

    在 AM62x 上、R5F 内核为所有其他内核运行资源管理器。 如果 R5F 被禁用、处理器将不工作。

    AM62x 器件型号  

    此处列出了不同的 AM62x 器件: https://dev.ti.com/tirex/explore/node?node=A__AFSX4RJYQ2lqtHXtiKUeww__linux_academy_am62x__XaWts8R__LATEST 

    "正常" Linux 引导(SPL 引导)与 SBL 引导  

    本常见问题解答假定电路板通过 Linux SDK 文档"基础组件> U-Boot >用户指南>常规信息>引导流程"中介绍的正常 Linux 引导流程进行引导。 此引导流程也称为 SPL 引导。

    AM62x 和 AM64x 也可以通过 SBL 引导流程引导。 运行 SBL 的内核可以在初始化 A53内核上的 U-boot 的同时初始化远程内核。 如果使用 SBL 引导、则仍需要对 Linux 器件树进行所有更改。 此外、应告知 SBL 不要初始化禁用的内核。

    有关 SBL 的更多信息、请参阅 MCU+ SDK 文档"示例和演示>次级引导加载程序(SBL)> SBL [类型] Linux"。 请注意、标题中不包含 Linux 的 SBL 不会将 Linux 加载到 A53内核上。