在工業(yè)控制,工業(yè)通信領(lǐng)域,即需要高性能,也需要高實(shí)時(shí)性要求,同也能繼承原有在裸機(jī)下運(yùn)行的業(yè)務(wù)程序,滿足無縫遷移的要求。例如EtherCAT主站設(shè)計(jì),及部分工業(yè)控制中,原有業(yè)務(wù)運(yùn)行在Bare Metal下,在這種情況下,使用Zynq UltraScale+ MPSoC AMP,就可以運(yùn)行在高性能的A核上,而不是R核。即滿足高性能\高實(shí)時(shí)性要求,也可以盡可能小的改動(dòng)下,遷移業(yè)務(wù)。
為了實(shí)現(xiàn)上面需求,本文主要描述Zynq UltraScale+ MPSoC中APU多個(gè)A53,怎么設(shè)置成AMP非對(duì)稱處理模式,讓整個(gè)系統(tǒng)既能滿足性能要求,也能滿足實(shí)時(shí)性要求。
多核處理器相關(guān)概念:
從硬件視角看:
1.同構(gòu)多核:多個(gè)核心的架構(gòu)一致;MPSoC APU是多個(gè)A53核,同構(gòu)。
2.異構(gòu)多核:多個(gè)核心架構(gòu)不一致;MPSoC PS包括APU和RPU,A53和R5組成就是異構(gòu)多核。

從軟件視角看:
1.非對(duì)稱處理AMP(Asymmetric Multi-Processing):多個(gè)處理器運(yùn)行各自的程序,相互之間隔離。
2.對(duì)稱處理SMP(Symmetric Multi-Processing):多處理器運(yùn)行同一個(gè)OS,由OS統(tǒng)一調(diào)度。
設(shè)置成AMP非對(duì)稱處理模式具體操作方式如下:
1.Zynq UltraScale+ MPSoC設(shè)置CCI(Cache Coherent Interconnect),避免Cache不一致。
下面是MPSoC A53基本架構(gòu)的關(guān)鍵部分:



FSBL使能CCI監(jiān)聽APU,避免A53 Cache不一致;FSBL使能CCI監(jiān)聽APU操作實(shí)現(xiàn)如下:
缺省情況下,MPSoC CCI (Cache Coherent Interconnect)不監(jiān)聽傳輸。為了利用CCI Cache同步功能,需要使能CCI監(jiān)聽傳輸功能。
設(shè)置寄存器Snoop_Control_Register_S3,其地址0xFD6E4000的最低位,使CCI監(jiān)聽APU cluster。寄存器Snoop_Control_Register_S3最低位的含義是Enable issuing of snoop requests from slave interface S3。在FSBL的xfsbl_main.c的main()里添加下列修改Snoop_Control_Register_S3的部分代碼:

2.設(shè)置linux設(shè)備樹:
設(shè)置A53 linux核的使用,設(shè)置保留內(nèi)存給Bare Metal使用。
設(shè)備樹配置:

3.需要設(shè)置Broadcasting Inner Shareable
內(nèi)存的cache屬性包括non-shareable\inner shareable\outer shareable。inner shareable范圍只包含A53和L2 cache。缺省情況下,Inner Shareable的內(nèi)存?zhèn)鬏敳粫?huì)被廣播給CCI。Linux缺省設(shè)置cacheable memory為Inner Shareable,導(dǎo)致CCI看不到所有cacheable memory的傳輸。為了使能硬件同步cache,必須使Inner Shareable的內(nèi)存?zhèn)鬏斠脖粡V播給CCI。
寄存器lpd_apu(0xFF41A040)的最低兩位有這個(gè)功能:
bit 0:表示Enable broadcasting of Outer Shareable trasnactions;
bit 1:表示Enable broadcasting of Inner Shareable transactions。
注意,必須在A53處于復(fù)位態(tài)時(shí)設(shè)置寄存器LPD_APU。
4.用啟動(dòng)文件boot.bin里的寄存器初始化功能設(shè)置寄存器LPD_APU,使BootRoM在加載時(shí)設(shè)置寄存器LPD_APU,可以達(dá)到上述要求。具體細(xì)節(jié)請(qǐng)參閱ARM體系結(jié)構(gòu)參考手冊(cè)ARMv8的D4.3節(jié),了解ARMv8-A體系結(jié)構(gòu)配置文件(DD10487A)。
使用的方式是,編寫寄存器初始化文件regs.init,并加入到BOOT.BIN中。
準(zhǔn)備寄存器初始化文件,置寄存器lpd_apu最低兩位都為1。
.set. 0xFF41A040 = 0x3;
完整的boot.bin的配置信息,bootgen.bif

在bootgen.bif文件中,需要區(qū)分是Bare metal還是Linux
對(duì)于Bare metal,處理器跑在EL3,要配置成secure memory訪問;
對(duì)于Linux,需要配置成2,產(chǎn)生non-secure的訪問。
如果您了解更多關(guān)于MPSoC AMP方面應(yīng)用,歡迎聯(lián)系我們,同時(shí)也感謝Trevor在此文提供的友情指導(dǎo)。
simonyang@comtech.cn
charlesxu@comtech.cn

