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