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.

[参考译文] 66AK2H06:GEL 文件中的 enterNonSecure()函数

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/915063/66ak2h06-enternonsecure-function-in-gel-file

器件型号:66AK2H06

您好!

我的客户正在评估其电路板上的66AK2H06。
使用 CCS 时、大部分初始化由 GEL 文件完成。
GEL 文件是 attached.e2e.ti.com/.../xtcievmk2x_5F00_arm.txt

客户现在正在尝试在没有 CCS 的情况下进行测试、并将 GEL 完成的大多数初始化序列放入其代码中。
GEL 文件中有一个函数 enterNonSecureMode()。 连接 CCS 后工作正常。
当他们在代码中放置类似的序列时、程序会在某个位置运行。

CSL_a15DisableMMU();
CSL_a15DisableIntstrCache ();
CSL_a15DisableDataCache ();
/*设置 NSACR 中的位10和11以允许 NS 访问 cp10和 cp11 */
asm ("MRC P15、0、r0、C1、C1、 2\n");
asm ("ORR r0、r0、#0x00000C00\n");
asm ("MCR P15、0、r0、C1、C1、 2\n");
/*将 SCR 中的 bit 0设置为 NS 模式*/
asm ("MRC P15、0、r0、C1、C1、 0\n");
asm ("ORR r0、r0、#0x1\n");
asm ("MCR P15、0、r0、C1、C1、 0\n");
//“启用 EnableNeon”
asm ("MRC P15、#0、R1、C1、c0、 #2\n");
asm ("ORR R1、R1、#(0xF << 20)\n");
asm ("MCR P15、#0、R1、C1、c0、 #2\n");
asm ("MOV R1、#0\n");
//"启用 ACTLR 中的 SMP 位"
asm ("MRC P15、#0、R1、C1、c0、 #1\n");
asm ("ORR R1、R1、#(0x1 << 6)\n");
asm ("MCR P15、#0、R1、C1、c0、 #1\n");
//确保在更改安全模式后禁用 MMU 和高速缓存
CSL_a15DisableMMU();
CSL_a15DisableIntstrCache ();
CSL_a15DisableDataCache ();



Q1) enterNonSecureMode()的用途是什么?

Q2)客户代码中是否需要相同的序列?

Q3)客户代码序列出了什么问题?

谢谢、此致、
田志郎一郎

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

    您好!

    1) 1)对于 SecureMode 或非安全删除、请参阅我找到的一些信息:

    https://www.macs.hw.ac.uk/~hwloidl/Courses/F28HS/Docu/DEN0013D_cortex_a_series_PG.pdf ,第21章

    https://e2e.ti.com/support/legacy_forums/embedded/tirtos/f/355/t/512723,=>我们仅支持在非安全模式下运行

    2)是的、客户需要将 A15置于非安全模式

    3) 3)如果您不使用 GEL、则 SBL 可用于此目的。 这类似于在 A15上运行裸机代码、请参阅 pdk_k2hk _4_0_16\packages/ti\boot\sbl\soco\K2H 下的所有文件。 SBL_init.s 跳转到 main(),然后调用 SBL_socInit(),其中有  *monitorFunction (SBL_setNSMode);被调用。  

    void SBL_setNSMode()

    /*设置 NSACR 中的位10和11以允许 NS 访问 cp10和 cp11 */
    asm ("MRC P15、0、r0、C1、C1、 2\n");
    asm ("ORR r0、r0、#0x00000C00\n");
    asm ("MCR P15、0、r0、C1、C1、 2\n");

    /*将 SCR 中的 bit 0设置为 NS 模式*/
    asm ("MRC P15、0、r0、C1、C1、 0\n");
    asm ("ORR r0、r0、#0x1\n");
    asm ("MCR P15、0、r0、C1、C1、 0\n");

    此致、Eric