新聞中心

ARM MP-core啟動(dòng)流程

作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
1. iROM啟動(dòng)MP Core時(shí),通常的做法:

(1)讓CPU0執(zhí)行主要開機(jī)流程,其它的處理器進(jìn)入WFI.

本文引用地址:http://m.butianyuan.cn/article/201611/317197.htm

(在啟動(dòng)時(shí),每個(gè)處理器可以透過(guò)CPU ID得知自己是否為CPU0,如果不是,就進(jìn)入WFI的程序代碼中.)

即:讓AP進(jìn)入Sleep

(2) 初始化外部?jī)?nèi)存與執(zhí)行系統(tǒng)的初始化

(3) 設(shè)定 Stack

在DRAM初始化前,Stack是建立在SRAM中的。

(4) 把BootRom程序代碼復(fù)制到外部?jī)?nèi)存中

(5) 重新Mapping 內(nèi)存位置

(把0×00000000地址對(duì)應(yīng)到外部?jī)?nèi)存 或 I-TCM如果 0×00000000地址要跑中斷表的話(or 中斷表對(duì)應(yīng)到0xffff0000))

因?yàn)椋珻old Reset時(shí)為了順利開機(jī),把iROM映射到了0x0000 0000處.

(6) 把第二階段的BootLoader加載到外部?jī)?nèi)存中 or OnChip SRAM.

(7) 執(zhí)行第二階段的BootLoader

2. 如何識(shí)別當(dāng)前是哪個(gè)CPU在執(zhí)行

執(zhí)行時(shí)期,軟件可以透過(guò) CPU ID Register知道目前是MPCore中哪個(gè)處理器執(zhí)行該程序代碼,

CPU Id儲(chǔ)存在CP15 c0中,長(zhǎng)度為32bits,只能在特權(quán)等級(jí)(也就是SVC Mode下)被讀取,讀取的范例如下程序代碼所示:

MRC p15,0,,c0,c0,5; returns CPU ID register
31 12 11 … 8 7 … 4 3 … 0
SBZ Cluster ID SBZ CPU ID
說(shuō)明如下,
(1) Cluster ID:

用以支持 Multi-MPCore架構(gòu)下的Cluster識(shí)別之用 (The Cluster ID field value is set by the CLUSTERID configuration pins.)

(2) CPU ID: 視處理器的個(gè)數(shù),例如四個(gè)處理器ID依序?yàn)?0×00,0×01,0×02與0×03

3. Primary Core所做的自身初始化

(1)Invalidate Data Cache
(2)Invalidate SCU(Snoop Control Unit) duplicate tags for all processors
(3)Invalidate L2 Cache
(4)Enable SCU
(5)Enable Data Cache
(6)Enable L2 Cache
(7)Set SMP mode with ACTLR.SMP.

4. Non-Primary Core所做的自身初始化
等到系統(tǒng)穩(wěn)定后,可能會(huì)讓Non BSP Core做:

(1). Invalidate Data Cache

(2). Enable Data Cache

(3). Set SMP with ACTLR.SMP.



關(guān)鍵詞: ARMMP-core啟動(dòng)流

評(píng)論


技術(shù)專區(qū)

關(guān)閉