一種基于無(wú)嵌入式控制器龍芯處理器平臺(tái)的待機(jī)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種計(jì)算機(jī)的待機(jī)方法,特別是涉及一種基于無(wú)嵌入式控制器龍芯處理器平臺(tái)的待機(jī)方法。
【背景技術(shù)】
[0002]待機(jī)是一種電源管理方法,它讓系統(tǒng)在空閑時(shí)候進(jìn)入一種可以快速喚醒的睡眠狀態(tài),功耗很低。待機(jī)也叫Suspend To RAM(掛起到內(nèi)存,簡(jiǎn)稱STR),對(duì)應(yīng)ACPI (高級(jí)電源配置接口)S3狀態(tài)。其特征如下:CPU和外設(shè)全部斷電,內(nèi)存供電但處于低耗能的自刷新?tīng)顟B(tài)(內(nèi)容保持不變),功耗為開機(jī)狀態(tài)的I %左右,喚醒時(shí)間5?8秒??梢酝ㄟ^(guò)電源按鍵喚醒。
[0003]中國(guó)專利CN102541246B公開了一種基于龍芯處理器平臺(tái)的待機(jī)方法,由于龍芯平臺(tái)與X86平臺(tái)有著較大的差異,其B1S和操作系統(tǒng)不是ACPI感知的。該專利設(shè)計(jì)利用嵌入式控制器(EC)來(lái)管控電源。而在實(shí)際應(yīng)用中,通常只有筆記本電腦會(huì)配備EC,臺(tái)式機(jī)和服務(wù)器不存在EC。因此如何不依賴EC在龍芯處理器平臺(tái)實(shí)現(xiàn)待機(jī)功能是需要解決的問(wèn)題。
【發(fā)明內(nèi)容】
[0004]針對(duì)上述現(xiàn)有技術(shù)的不足,本發(fā)明的目的是提供一種基于無(wú)嵌入式控制器龍芯處理器平臺(tái)的待機(jī)方法,不依賴EC在龍芯處理器平臺(tái)實(shí)現(xiàn)待機(jī)功能。
[0005]本發(fā)明的技術(shù)方案是這樣的:一種基于無(wú)嵌入式控制器龍芯處理器平臺(tái)的待機(jī)方法,包括以下步驟:
[0006]I)凍結(jié)進(jìn)程;
[0007]2)外設(shè)停止工作;
[0008]3)關(guān)閉外設(shè)電源;
[0009]4)關(guān)閉輔核;
[0010]5)保存主核執(zhí)行上下文;
[0011]1.調(diào)整堆棧指針,留出一個(gè)棧幀來(lái)保存上下文;
[0012]i1.將I?7號(hào)通用寄存器保存到棧幀;
[0013]ii1.將16?23號(hào)通用寄存器保存到棧幀;
[0014]iv.將26?31號(hào)中除29號(hào)寄存器外的其他通用寄存器保存到棧幀;
[0015]V.將協(xié)處理器O的部分寄存器保存到棧幀;
[0016]6)主核執(zhí)行操作進(jìn)入待機(jī)狀態(tài);
[0017]1.將堆棧指針的當(dāng)前值寫入非易失性存儲(chǔ)器;
[0018]i1.將喚醒入口地址寫入非易失性存儲(chǔ)器;
[0019]ii1.刷回并無(wú)效化一級(jí)高速緩存;
[0020]iv.刷回并無(wú)效化二級(jí)高速緩;
[0021]v.通過(guò)B1S調(diào)用接口,將控制權(quán)轉(zhuǎn)交給B1S ;
[0022]v1.B1S將內(nèi)存設(shè)置成自刷新模式;
[0023]vi1.B1S設(shè)置配套芯片組進(jìn)入并維持在ACPI S3狀態(tài);
[0024]7)清除ACPI事件并恢復(fù)電源指示燈狀態(tài);
[0025]8)恢復(fù)主核執(zhí)行上下文;
[0026]1.從棧幀恢復(fù)協(xié)處理器O的部分寄存器;
[0027]i1.從棧幀恢復(fù)I?7號(hào)通用寄存器;
[0028]ii1.從棧幀恢復(fù)16?23號(hào)通用寄存器;
[0029]iv.從棧幀恢復(fù)26?31號(hào)中除29號(hào)寄存器外的其他通用寄存器;
[0030]V.調(diào)整堆棧指針,丟棄沒(méi)有用處的棧幀;
[0031]9)開啟輔核;
[0032]10)開啟外設(shè)電源;
[0033]11)外設(shè)開始工作;
[0034]12) f灰復(fù)進(jìn)程,
[0035]其中所述協(xié)處理器O的部分寄存器為狀態(tài)寄存器、配置寄存器、上下文寄存器、擴(kuò)展上下文寄存器、頁(yè)面掩碼寄存器和頁(yè)面粒度寄存器。
[0036]進(jìn)一步的,所述B1S設(shè)置配套芯片組進(jìn)入并維持在ACPI S3狀態(tài)包括以下步驟:
[0037]1.清除MiscEnable寄存器的WaitStpGntEnB字段,無(wú)需等待CPU的STPGNT#信號(hào);
[0038]i1.設(shè)置PMStatus寄存器,清除WakeStatus位和PwrBtnStatus位,防止假喚醒事件;
[0039]ii1.設(shè)置GPEStatus寄存器,清除所有的GPE事件,防止睡眠后自動(dòng)喚醒;
[0040]iv.設(shè)置PMEnable寄存器,設(shè)置PwrBtn位,使得電源鍵可以喚醒計(jì)算機(jī);
[0041]V.設(shè)置MiscEnable寄存器的BlinkControl字段,使電源指示燈進(jìn)入閃爍狀態(tài);
[0042]v1.設(shè)置PMControl寄存器,SlpType字段置為3,SlpEn位置為1,該步驟完成后,計(jì)算機(jī)進(jìn)入ACPI S3狀態(tài)。
[0043]為了確保一次待機(jī)后不發(fā)生狀態(tài)混亂以便實(shí)現(xiàn)多次待機(jī),進(jìn)一步的,所述清除ACPI事件并恢復(fù)電源指示燈狀態(tài)包括以下步驟:
[0044]1.設(shè)置PMStatus寄存器,清除WakeStatus位和PwrBtnStatus位,防止產(chǎn)生偽中斷;
[0045]i1.設(shè)置GPEStatus寄存器,清除所有的GPE事件,防止產(chǎn)生偽中斷;
[0046]ii1.設(shè)置MiscEnable寄存器的BlinkControl字段,使電源指示燈一直亮。
[0047]本發(fā)明所提供的技術(shù)方案的有益效果是,該待機(jī)方法可使用于無(wú)EC的臺(tái)式機(jī)或者服務(wù)器平臺(tái),不需要依賴EC,可以減少設(shè)計(jì)復(fù)雜度并且節(jié)約成本,使得待機(jī)方法可以得到更廣泛的應(yīng)用。
【附圖說(shuō)明】
[0048]圖1為本發(fā)明方法執(zhí)行流程示意圖。
[0049]圖2為步驟5至8流程示意圖。
【具體實(shí)施方式】
[0050]下面結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明,但不作為對(duì)本發(fā)明的限定。
[0051]請(qǐng)結(jié)合圖1和圖2,龍芯平臺(tái)可以使用多種類型的配套芯片組,北橋芯片如AMDRS690/RS780/SR5650/SR6570/SR5690,南橋芯片如 AMD SB600/SB700/SB710/SB800/SP5100等等,它們都支持ACPI功能。以RS780+SB700芯片組為例,計(jì)算機(jī)的待機(jī)方法如下:
[0052]I)凍結(jié)進(jìn)程;
[0053]2)外設(shè)停止工作;
[0054]3)關(guān)閉外設(shè)電源;
[0055]4)關(guān)閉輔核;
[0056]5)保存主核執(zhí)行上下文;
[0057]1.調(diào)整堆棧指針(SP寄存器),留出一個(gè)棧幀來(lái)保存上下文;
[0058]i1.將I?7號(hào)通用寄存器(用于匯編器的AT寄存器、用于存放函數(shù)返回值的V系列寄存器以及用于存放函數(shù)參數(shù)的A系列寄存器)保存到棧幀;
[0059]ii1.將16?23號(hào)通用寄存器(函數(shù)調(diào)用時(shí)需要調(diào)用者保存的S系列寄存器)保存到棧幀;
[0060]iv.將26?31號(hào)中除29號(hào)寄存器外的其他通用寄存器(內(nèi)核專用的K系列寄存器、全局指針GP,幀指針FP和返回地址RA寄存器,不包括堆棧指針SP)保存到棧幀;
[0061]V.將協(xié)處理器O的