Arm應(yīng)用處理器從Arm926(應(yīng)用于手機(jī)和嵌入式系統(tǒng))開始,歷經(jīng)
- Arm11,
- 單核Cortex-A8,
- 第一個(gè)真正的多核系統(tǒng)Cortex-A9和后面的Cortex-A5,
- 第一個(gè)大小核系統(tǒng)A15+A7到后面的A17+A7,A57/A72/A73+A53
- 新的大小核DynamIQ系統(tǒng)A75, A76, A77, A78 + A55
- 最新的Armv9 CPU A710/A720+A510系統(tǒng)
Arm應(yīng)用處理器始終以極佳的能效,低功耗應(yīng)用于包括手機(jī)在內(nèi)的移動(dòng)設(shè)備,因而它們的低功耗設(shè)計(jì),電源管理是重要的設(shè)計(jì)考慮。
本文討論arm應(yīng)用處理的電源管理的硬件的變遷過程。總的來說arm應(yīng)用處理器的電源管理硬件設(shè)計(jì)是隨著SoC系統(tǒng)從單核-》多核-》大小核-》DynamIQ的復(fù)雜度而復(fù)雜的,但是為了提供統(tǒng)一的電源管理接口和簡化和統(tǒng)一軟件上下電的復(fù)雜度,arm在這個(gè)進(jìn)化過程,
- 改進(jìn)了硬件設(shè)計(jì),提供了power policy unit(PPU)這樣的標(biāo)準(zhǔn)電源管理組件,通過標(biāo)準(zhǔn)的P-channel硬件接口來統(tǒng)一電源管理。
- 通過硬件對(duì)上下電的支持來簡化和標(biāo)準(zhǔn)化軟件電源管理,比如支持硬件自動(dòng)的刷cache,硬件自動(dòng)的退出coherency,硬件的CPU靜默(Quiescence)和GIC靜默請(qǐng)求和應(yīng)答等。
- 定義了系列的軟件接口,如PSCI,SCMI,通過明確的軟件分層和接口定義,提供更加通用portable的軟件系統(tǒng)。
Cortex-A9多核系統(tǒng)
從Cortex-A9說起,A9MP多核系統(tǒng)需要更好的電源控制,如動(dòng)態(tài)控制一個(gè)CPU core power down和power up。A9MP提供了一些特用的硬件信號(hào)與電源控制器連接和通信,運(yùn)行在A9應(yīng)用處理器上的軟件通知電源控制器需要對(duì)那個(gè)CPU進(jìn)行哪種控制(Power Down或是Power UP或進(jìn)入/退出Dormant mode)。A9MP提供了PWRCTLO這組信號(hào),可以連接到電源控制器。電源管理軟件可以設(shè)置A9MP SCU CPU Power Status Register寄存器設(shè)置CPU要進(jìn)入的power狀態(tài)(power-off或是dormant模式),當(dāng)A9MP通過執(zhí)行WFI指令進(jìn)入WFI低功耗模式,A9MP硬件會(huì)驅(qū)動(dòng)PWRCTLO這組信號(hào)來表示要進(jìn)入的power狀態(tài),從而告知power controller。
A9的power Down過程大致為:
- 軟件保存CPU core的通用寄存器,系統(tǒng)寄存器值到內(nèi)存中。
- 軟件執(zhí)行DSB指令
- 軟件清除SCTLR.C bit,這防止數(shù)據(jù)進(jìn)一步分配在cache中
- 軟件clean and invalidate L1數(shù)據(jù)cache中的數(shù)據(jù)到下級(jí)內(nèi)存,如DRAM
- 軟件執(zhí)行DSB指令
- 軟件執(zhí)行CLREX指令
- 軟件清除ACTLR.SMP bit, 這使這個(gè)CPU核退出硬件coherency(SCU不再snoop這個(gè)核),并且SCU不再把TLB invaldate和cache maintainance操作到這個(gè)核
- 軟件將原來發(fā)送給這個(gè)核的中斷disable(保留wakeup中斷)或遷移到其他核,disable這個(gè)CPU對(duì)應(yīng)的GIC CPU interface
- 軟件執(zhí)行ISB,保證之前系統(tǒng)操作完成
- 軟件將要進(jìn)入的power狀態(tài)設(shè)置到SCU CPU power status register
- 軟件執(zhí)行DSB指令,保證之前的內(nèi)存和cache maintainance操作完成,包括outstanding的AXI, ACP傳輸。
- 軟件執(zhí)行WFI指令。當(dāng)這個(gè)核進(jìn)入靜默狀態(tài),A9MP硬件會(huì)驅(qū)動(dòng)STANDBYWFI信號(hào),通過它告知與其連接的電源控制器,CPU已進(jìn)入idle狀態(tài)。SCU硬件也會(huì)驅(qū)動(dòng)PWRCTLO信號(hào)告知電源控制器這個(gè)核要進(jìn)入的power狀態(tài)
- 電源控制器驅(qū)動(dòng)CLAMP信號(hào)使能核的鉗位電路
- 電源控制器切斷這個(gè)核的電源
A9時(shí)代的SoC的電源控制比較簡單,一般是芯片設(shè)計(jì)公司自己設(shè)計(jì)的PMIC,采用狀態(tài)機(jī)方式來實(shí)現(xiàn)控制。
A9時(shí)代電源管理比較容易犯錯(cuò)誤的地方有:
1.在執(zhí)行DSB+WFI之前,沒有做好第8步。也就是在執(zhí)行WFI—電源控制器將電源切斷這中間,還有中斷通過GIC的CPU interface和CPU連接的nIRQ/nFIQ將中斷發(fā)送給CPU。這可能導(dǎo)致的問題是:
CPU已經(jīng)執(zhí)行了WFI,通知了power controller切斷電源,這兩個(gè)操作有時(shí)間差,如果這個(gè)時(shí)間差過程中,有一個(gè)中斷通過nIRQ/nFIQ發(fā)送給CPU,這會(huì)喚醒進(jìn)入WFI低功耗狀態(tài)的CPU(即使CPSR.I/F bit禁止了IRQ/FIQ也會(huì)喚醒),CPU會(huì)繼續(xù)執(zhí)行IRQ handler或是執(zhí)行WFI之下的指令(取決于CPSR.I/F bit設(shè)置),這可能保護(hù)內(nèi)存訪問指令,但在這些內(nèi)存訪問(如還在outstanding的AXI訪問)硬件操作沒有完成之前,就被power controller切斷電源。這會(huì)使interconnect系統(tǒng)中存在沒法完成的AXI傳輸,最終導(dǎo)致硬件系統(tǒng)的掛死。在我支持客戶的經(jīng)驗(yàn)中,這種問題通常在系統(tǒng)的上下電壓力測(cè)試時(shí)被發(fā)現(xiàn)。
2.硬件系統(tǒng)集成時(shí),將GIC CPU interface的nIRQOUT/nFIQOUT而不是nIRQ/nFIQ連接到CPU的nIRQ/nFIQ. 首先這是設(shè)計(jì)錯(cuò)誤,然后可能更容易導(dǎo)致上面1的問題。
GIC CPU interface的nIRQOUT/nFIQOUT設(shè)計(jì)目的為讓喚醒(wakeup)中斷可以在CPU interface disable的情況下(這時(shí)包括wakeup的中斷不會(huì)通過nIRQ/nFIQ發(fā)送給CPU),GIC CPU interface還可以產(chǎn)生nIRQOUT/nFIROUT信號(hào),通知power controller給對(duì)應(yīng)的CPU核上電。
A7+A1x big.LITTLE系統(tǒng)
之后出現(xiàn)了big.LITTLE包括A7+A15/A17系統(tǒng),支持通過ACE接口和CCI一致性互聯(lián)實(shí)現(xiàn)ccluster之間的硬件cache一致性。在cluster層面上比A9MP的系統(tǒng)多了L2 cache,電源管理的時(shí)候可以關(guān)掉一個(gè)cluster里面的一些CPU核或者整個(gè)cluster. A17還能支持通過power controller硬件L2FLUSHREQ信號(hào)請(qǐng)求L2 cache自己在cluster下電時(shí)做clean and invalidate操作。為了讓power controller請(qǐng)求/了解cluster的L2 memory system的idle狀態(tài),引入了STANDBYWFIL2信號(hào),它可以連接到power controller以顯示L2的硬件idle狀態(tài)。引入了ACINACTM信號(hào),power controller設(shè)置這個(gè)信號(hào)為高時(shí),向cluster保證不再會(huì)有任何從一致性互聯(lián)(CCI)發(fā)送給這個(gè)cluster。支持ACP port的A15, A17還引入了AINACTS信號(hào),當(dāng)power controller將這個(gè)信號(hào)置高時(shí),向cluster保證不再會(huì)有任何從ACP的傳輸發(fā)送給這個(gè)cluster。
Power off一個(gè)A15 cluster時(shí),需要在下面條件都滿足下,STANDBYWFIL2才會(huì)被拉高(assert):
這個(gè)cluster中所有core都已經(jīng)進(jìn)入WFI低功耗狀態(tài),即除最后一個(gè)核(也就是正在執(zhí)行power down的最后這個(gè)核)之外,其他核都被power down了。Cluster中的所有核的STANDBYWFI都已經(jīng)assert了。
SoC將ACINACTM信號(hào)拉起,表示外部內(nèi)存系統(tǒng)不再發(fā)snoop給這個(gè)cluster
當(dāng)L2 memory sytem完成ACE,AXI端口上所有的outstanding傳輸時(shí),這個(gè)cluster可以進(jìn)入L2 WFI低功耗狀態(tài),這時(shí)cluster可以拉高STANDBYWFIL2輸出,通知power controller L2進(jìn)入了idle狀態(tài)了。
A15,A17支持CPU核和cluster級(jí)別的dynamic retention模式。當(dāng)進(jìn)入WFI低功耗狀態(tài),它的時(shí)鐘停止了,這時(shí)可以讓power controller將供電電壓降低,但是CPU,Cluster的狀態(tài)(如寄存器值,RAM中的內(nèi)容)不丟失。這個(gè)狀態(tài)叫Retention. Retention要求power controller可以保證在退出retention過程中,在重新enable時(shí)鐘之前先將電壓恢復(fù)到正常可運(yùn)行的電壓值。
為支持dynamic retention模式,A15, A17采用了Q-channel這樣一個(gè)比較簡單靈活的接口,與STANDBYWFI這樣的信號(hào)通信相比,Q-channel允許控制器可以根據(jù)設(shè)備的工作狀態(tài)或系統(tǒng)狀態(tài),發(fā)出低功耗請(qǐng)求;設(shè)備可以根據(jù)自己的工作狀態(tài),從而決定是否接受請(qǐng)求。Q-channel接口提供了控制器和設(shè)備的握手機(jī)制。
Q-channel比較簡單。對(duì)于時(shí)鐘控制來說,只有打開和關(guān)閉兩種狀態(tài)就可以了。對(duì)于電源控制來說,只有ON和OFF兩種狀態(tài)。
Q-Channelinterface定義了幾種握手狀態(tài):
Q_RUN: device處于上電狀態(tài)。
Q_REQUEST: device處于上電狀態(tài),但是在idle狀態(tài)時(shí),可以接收power request,進(jìn)入斷電狀態(tài)。
Q_STOPPED: device進(jìn)入了斷電狀態(tài)。
Q_EXIT: 等待被提供時(shí)鐘或者power的狀態(tài)。當(dāng)device得到外部提供的時(shí)鐘或者power時(shí),將QACCEPTn拉高,進(jìn)入Q_RUN狀態(tài)。
Q_DENIED: device拒絕外部power的請(qǐng)求,不進(jìn)入斷電狀態(tài),而保持上電狀態(tài)。
Q_CONTINUE: PMU在Q_DENIED狀態(tài)后,將QREQn拉高后的狀態(tài)。
A15, A17提供了單個(gè)CPU核和L2 cluster級(jí)用于retention握手的Q-channel接口。以單個(gè)核retention為例:
當(dāng)A15核進(jìn)入WFI低功耗狀態(tài),其時(shí)鐘停止時(shí),QACTIVE被拉低,用于指示此核可以進(jìn)入retention模式。外部power controller可以拉低QREQn請(qǐng)求將核置為retention,A15通過將QACCEPTn拉低接受retention請(qǐng)求。當(dāng)QREQn和QACCEPTn都為低時(shí),A15處于靜默(quiescent)狀態(tài),只要QREQn保持在低狀態(tài),A15的時(shí)鐘保持停止。外部power controller可以安全低將電壓降低到retention級(jí)別。
如果當(dāng)QREQn為低時(shí),單個(gè)核不能安全地進(jìn)入靜默狀態(tài),它可以將QDENY拉高。這樣power controller就不能降低此核的電壓。
在A7+A1x big.LITTLE系統(tǒng)設(shè)計(jì)中,因?yàn)橛懈鼜?fù)雜的電源管理模式的組合和模式,為了靈活的系統(tǒng)設(shè)計(jì),一般power controller系統(tǒng)會(huì)基于MCU(如Cortex-M0, Cortex-M3的子系統(tǒng))設(shè)置,這樣可以通過MCU軟件firmware來靈活處理電源管理請(qǐng)求。這個(gè)MCU一般設(shè)置為always on的電源域。
A53+A57/A7x 系統(tǒng)
A53+A57/A72/A73的電源管理硬件機(jī)制和A7+A17比較類似,基本上也是通過STANDBYWFI, STANDBYWFIL2, ACINACTM (ACE接口,如果是配置為CHI接口時(shí),信號(hào)為SINACT),Q-channel(用于retention)等這些信號(hào)與power controller通訊。
一個(gè)變化是,arm開始推出power policy unit(PPU)這樣的標(biāo)準(zhǔn)電源管理組件。
PPU提供一個(gè)配置接口給SCP,用于功耗策略控制和配置。其次,PPU與設(shè)備之間的控制接口,包括低功耗接口(low power interface,簡稱LPI),若干組Q-channel和一組P-channel,還有時(shí)鐘/復(fù)位控制。最后,還有一個(gè)與功耗狀態(tài)機(jī)之間的P-channel接口。
PPU剛開始是在arm自己的開發(fā)平臺(tái)Juno(A53+A57和A53+A72)上設(shè)置使用的,后來arm以此為基礎(chǔ)推出了PPU規(guī)范。
PPU的接口:
1.系統(tǒng)控制器(System Control Processor, SCP)的配置通路,可以訪問PPU寄存器接口,一般是APB
2.PPU可以發(fā)送中斷,處理完一次電源管理事件后了可以通過中斷通知SCP
3. PPU與被管理的設(shè)備間需要一個(gè)通信接口,就是LPI(Low Power Interface, Q-channel或者 P-channel),取決于需要實(shí)現(xiàn)的具體功能是什么。
4. PPU還會(huì)提供時(shí)鐘控制,復(fù)位和Clamp控制(如果需要實(shí)現(xiàn)電源關(guān)斷)給被管理的設(shè)備.
5.PCSM(Power Control State Machine)的接口,PPU通過P-channel來告訴PCSM當(dāng)前的狀態(tài),PCSM根據(jù)PPU的狀態(tài)決定何時(shí)控制電源關(guān)斷,retention控制
A53+A57/A72/A73系統(tǒng)上,CPU還基本還是使用STANDBYWFI, STANDBYWFIL2, ACINACTM這些信號(hào),因此需要在SoC集成時(shí)將這些信號(hào)轉(zhuǎn)接到PPU或SCP上。后面的DynamIQ處理器就不再使用這些信號(hào),而直接利用P-Channel和Q-channel.
在power down流程上,雖然A7, A15, A17, A53, A57, A72大致相同,但是有一些和微構(gòu)架相關(guān)的配置有所不同,從而導(dǎo)致不同CPU core的power down流程不能復(fù)用。以下表格總結(jié)來自各CPU的使用手冊(cè)。
DynamIQ系統(tǒng)
第二代big.LITTLE系統(tǒng)DynamIQ的電源管理接口標(biāo)準(zhǔn)化為Q-Channel和P-Channel. DynamIQ處理器將L3 cahce包含在DSU cluster中,而L3 cache可以被硬件劃為多個(gè)區(qū),可以單獨(dú)關(guān)掉部分和全部的L3 cache,比如1/4, 1/2 L3 cache. 這帶來更加復(fù)雜的電源模式。
Q-channel過于簡單了。對(duì)于時(shí)鐘控制來說,只有打開和關(guān)閉兩種狀態(tài)就可以了。但是對(duì)于電源控制來說,只有ON和OFF兩種狀態(tài),對(duì)于某些復(fù)雜的power控制場(chǎng)景來說就不夠用了。要對(duì)DSU L3實(shí)現(xiàn)全上電,半上電,1/4上電等操作。這時(shí),Q-channel就不夠用了,arm定義了P-channel來解決這個(gè)問題。
相比Q-channel,P-channel把PACTIVE信號(hào)加寬了,不再是一根信號(hào),設(shè)備可以傳遞更多的工作狀態(tài)給控制器;控制器會(huì)額外多發(fā)出一組PSTATE信號(hào),描述切換power狀態(tài)的請(qǐng)求。
PPU定義了兩個(gè)模式:電源模式(power mode)和操作模式(operating mode)。電源模式是一個(gè)電源域里logic和RAM電源狀態(tài)的正常組合,以及相關(guān)的時(shí)鐘、復(fù)位和隔離控制。而操作模式代表電源模式的配置。例如,在電源模式是ON的時(shí)候,F(xiàn)ull L3 cache ON, 1/2 L3 cache ON, 1/4 L3 cache ON是電源模式ON的三種操作模式。
P_Channel接口如下
PACCEPT和PDENY在握手中,只能有一個(gè)為高。PACCEPT表示接受請(qǐng)求,PDENY表示拒絕請(qǐng)求.
DynamIQ處理器系統(tǒng)中,每個(gè)CPU core都有對(duì)應(yīng)的P-channel, DSU cluster層面還有一個(gè)P-channel。DynamIQ CPU core在PACTIVE信號(hào)上提供當(dāng)前要求power mode, power controller可以通過PREQ和PSTATE表示決定和要求的改變。CPU硬件然后進(jìn)行這個(gè)電源模式的必要操作,例如停掉時(shí)鐘,涮cache,退出一致性維護(hù)等。
以一個(gè)CPU核的power down為例:
1. 運(yùn)行在這個(gè)核上的軟件保護(hù)寄存器上下文之后,設(shè)置CPUPWRCTLR 寄存器的CORE_PWRDN_EN bit, 然后執(zhí)行WFI指令。這會(huì)導(dǎo)致CPU的COREPACTIVE輸出表示可以進(jìn)入到OFF電源模式
2. PPU通過P-Channel請(qǐng)求OFF
3. CPU hardware進(jìn)行自動(dòng)硬件L1數(shù)據(jù)cache和L2 cache的flush操作
4. 這個(gè)CPU硬件將自己退出cluster一致性維護(hù)
5. CPU核通過assert COREACCEPT表示接受OFF模式
6. PPU停止CPU核的clock,使能鉗位/隔離邏輯,assert CPU核reset信號(hào)
7. PPU控制PCSM切斷CPU核的電源
8. 如果需要的話,PPU可以發(fā)送一個(gè)中斷給SCP,通知SCP電源模式轉(zhuǎn)換完成
DynamIQ系統(tǒng)硬件設(shè)計(jì)還讓電源管理軟件流程更加簡單,標(biāo)準(zhǔn)化,不需要像之前A1x, A5x, A7x CPU power down流程需要做一些微構(gòu)架相關(guān)的操作。
下面以A57和A55為例,看一下它們power down 流程的區(qū)別。
由上面對(duì)比可知,DynamIQ的CPU比之前的CPU流程更加簡單,因?yàn)楹芏嘣瓉砹鞒绦枰龅氖虑槎急挥布詣?dòng)完成,不需要軟件參與。
DynamIQ系統(tǒng)普遍使用GICv3中斷控制器。GICv3中斷控制器相對(duì)之前GICv2,設(shè)置了專門的wakeup request接口(GICv2利用nIRQOUT, nFIQOUT作為wakeup輸入),同時(shí)GICv3也有了專門的寄存器GICR_WAKER給軟件來設(shè)置某個(gè)GIC CPU interface對(duì)應(yīng)的CPU核的power on/power down狀態(tài)。在CPU核power down/power up的軟件流程中,需要設(shè)置GICR_WAKER寄存器來將GIC CPU interface和Redistibutor的連接斷開。當(dāng)CPU核在power down狀態(tài),且GICR_WAKER做了相應(yīng)的設(shè)置時(shí),發(fā)送給這個(gè)CPU核的wakeup interrupt,不再發(fā)送給GIC CPU interface,而是由GIC Redistributor通過wakerequest信號(hào)發(fā)送給SCP,從而讓SCP給這個(gè)CPU核上電。
Arm設(shè)計(jì)了PCK-600 IP,讓客戶可以更簡單地獲取和利用PPU集成到系統(tǒng)中。
Armv9 DynamIQ系統(tǒng)
Armv9 DynamIQ系統(tǒng)在之前DynamIQ的基礎(chǔ)上更近一步,直接將每個(gè)核一個(gè)的PPU和DSU cluster級(jí)的PPU集成到了DSU cluster里面,從而不需要SoC設(shè)計(jì)者去集成PPU。在DSU cluster總線接口上提供了新的Utility Bus讓SCP可以通過它訪問PPU的寄存器。
總結(jié)
Arm的電源管理硬件設(shè)計(jì)是
1、 每種CPU有自己獨(dú)特設(shè)計(jì),通過各種信號(hào)線與power controller交互的方式進(jìn)化為采用標(biāo)準(zhǔn)的P-Channel,Q-Channel的交互方式
2、 由每個(gè)SoC特有的電源控制logic到采用標(biāo)準(zhǔn)PPU組件的方式
3、 由簡單單核電源控制到多核,到big.LITTLE, DynamIQ的復(fù)雜電源控制過程
4、 通過硬件來簡化軟件電源管理的流程的過程
評(píng)論