專(zhuān)利名稱:一種龍芯CPU主板bios及中斷的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及主板bios及中斷的實(shí)現(xiàn),具體地說(shuō),提供了一種龍芯CPU主板bios以及中斷的實(shí)現(xiàn)方法。
背景技術(shù):
龍芯3號(hào)系列CPU包括4核心3A,8核心3B,16核心3C的CPU,以及后續(xù)開(kāi)發(fā)的其他系列的CPU。龍芯3號(hào)CPU是一款通用的多核的CPU,采用MIPS架構(gòu),完全可以實(shí)現(xiàn)Intel和 AMD X86架構(gòu)CPU的功能,而且在節(jié)能、安全等方面有獨(dú)特的優(yōu)勢(shì),盡管在性能方面比X86 CPU還稍微落后一些,但在絕大部分領(lǐng)域可以完全代替X86 CPU。盡管龍芯3A和;3B CPU已經(jīng)面世,但一直沒(méi)有解決“用”的關(guān)鍵問(wèn)題,即一直沒(méi)有找到與龍芯CPU配套且能正常工作的南北橋chipsets和外圍設(shè)備,就像一個(gè)人有了大腦, 但無(wú)法找到配合大腦的軀體和四肢,仍是一個(gè)不能實(shí)用只是概念意義的CPU。為解決龍芯CPU的實(shí)用問(wèn)題,曾經(jīng)探討了 “龍芯3 CPU+SIS公司chipsets”,“龍芯 3 CPU+nVIDIA公司chipsets”的可能性,并研發(fā)了主板樣品,但最終沒(méi)有成功。目前采用“龍芯3 CPU+AMD公司北橋RS780E+AMD公司南橋SB710”方案,取得了成功,并最終實(shí)現(xiàn)了產(chǎn)品化。如圖1所示。但是在主板成型之后,如何能夠使主板運(yùn)行,就需要軟件方面的支持,這包括 BIOS、內(nèi)核等的支持。PMON是一個(gè)兼有BIOS和boot loader部分功能的開(kāi)放源碼軟件,支持MIPS、ARM、 PowerPC等架構(gòu),多用于嵌入式系統(tǒng)。Coreboot是一個(gè)自由開(kāi)源軟件項(xiàng)目,它的目的是替代現(xiàn)有計(jì)算機(jī)上面?zhèn)鹘y(tǒng)的bios,主要支持x86平臺(tái)。在內(nèi)核方面,龍芯的中斷系統(tǒng)與X86完全不一樣。龍芯的中斷系統(tǒng)采用異常處理表而不是X86的IDT表(中斷描述符表),采用設(shè)備的中斷控制器來(lái)控制中斷而不支持 APIC ;而AMD橋片支持的都是X86平臺(tái)。因此在內(nèi)核方面如何與龍芯CPU進(jìn)行配合是個(gè)問(wèn)題。
發(fā)明內(nèi)容
為了得到一種在龍芯主板上可以運(yùn)行的bios以及Iinux內(nèi)核,解決地址映射、PCI 配置空間讀寫(xiě)以及中斷分配等問(wèn)題,本發(fā)明提供了一種龍芯CPU主板bios及中斷系統(tǒng)的實(shí)現(xiàn)方法。一種龍芯CPU主板bios以及中斷的實(shí)現(xiàn)方法,步驟如下將龍芯CPU與北橋芯片進(jìn)行地址映射轉(zhuǎn)換;將DMA設(shè)備地址進(jìn)行映射轉(zhuǎn)換;對(duì)PCI地址空間進(jìn)行配置;以及將coreboot與pmon融合成新bios后,調(diào)試;以及,
調(diào)試內(nèi)核中斷系統(tǒng)。優(yōu)選的,所述地址映射轉(zhuǎn)換過(guò)程為先將龍芯CPU物理地址空間映射到HT總線地址空間,再將HT總線地址空間映射到PCI地址空間。再優(yōu)選的,所述龍芯CPU物理地址空間映射到HT總線地址空間是通過(guò)一級(jí) crossbar實(shí)現(xiàn)的。再優(yōu)選的,所述龍芯CPU物理地址空間映射時(shí)只映射48位地址空間。再優(yōu)選的,所述HT總線地址空間映射到PCI地址空間是通過(guò)HT to PCIbridge實(shí)現(xiàn)。優(yōu)選的,所述DMA設(shè)備地址映射轉(zhuǎn)換是通過(guò)修改北橋芯片內(nèi)與DMA尋址相關(guān)的寄存器初值實(shí)現(xiàn)。再優(yōu)選的,所述寄存器可以進(jìn)行8位,16位和32位讀寫(xiě)操作。優(yōu)選的,所述bios是將PMON的CPU、內(nèi)存和串口的調(diào)試部分與coreboot的南北橋控制器和設(shè)備的初始化部分融合。優(yōu)選的,所述bios調(diào)試時(shí)在初始化南橋后,PCI掃描前,關(guān)閉掉所有可能影響調(diào)試的設(shè)備控制器。優(yōu)選的,所述內(nèi)核中斷系統(tǒng)是通過(guò)將龍芯CPU的中斷控制器與8259A控制器級(jí)聯(lián), 來(lái)響應(yīng)和控制南北橋外部設(shè)備的中斷請(qǐng)求。優(yōu)選的,所述中斷系統(tǒng)采用異常處理表來(lái)對(duì)中斷分類(lèi)。優(yōu)選的,采用中斷控制器處理中斷。再優(yōu)選的,所述中斷系統(tǒng)采用南橋8259A控制器與龍芯3A CPU的中斷控制器相配合,來(lái)實(shí)現(xiàn)外部設(shè)備中斷的響應(yīng)。再優(yōu)選的,龍芯3A主板通過(guò)配置南橋設(shè)備的中斷陣腳、中斷線路和觸發(fā)方式,來(lái)分配南橋設(shè)備的中斷號(hào)。通過(guò)本發(fā)明提供的方法,解決了在BIOS層龍芯CPU和AMD橋片之間的地址映射轉(zhuǎn)換問(wèn)題,PMON中DMA設(shè)備尋址問(wèn)題,龍芯刀片PCI配置空間讀寫(xiě)問(wèn)題以及從coreboot到 pmon移植和調(diào)試的問(wèn)題。而且龍芯主板外部設(shè)備的中斷處理方式,保證了龍芯主板上外部設(shè)備正常工作。
圖1是曙光公司的龍芯主板CB50-A
圖2是AMD橋片設(shè)備的地址范圍
圖3是龍芯刀片分層的物理地址結(jié)構(gòu)
圖4是龍芯3A物理地址映射圖
圖5是PCI兼容配置模式
圖6是MIPS架構(gòu)下地址格式
圖7是龍芯bios運(yùn)行流程圖
圖8是CPU中斷結(jié)構(gòu)示意圖
圖9龍芯3A主板外部中斷響應(yīng)過(guò)程
具體實(shí)施例方式一、龍芯CPU與北橋地址映射的轉(zhuǎn)換在x86平臺(tái)中,系統(tǒng)的地址分為物理地址、總線地址和虛擬地址。Linux中,進(jìn)程的 4GB(虛擬)內(nèi)存分為用戶空間、內(nèi)核空間。用戶空間分布為0 3GB(即PAGE_0FFSET,在 0X86中它等于OxCOOOOOOO),剩下的IG為內(nèi)核空間。程序員只能使用虛擬地址。系統(tǒng)中每個(gè)進(jìn)程有各自的私有用戶空間(0 3G),這個(gè)空間對(duì)系統(tǒng)中的其他進(jìn)程是不可見(jiàn)的。CPU發(fā)出取指令請(qǐng)求時(shí)的地址是當(dāng)前上下文的虛擬地址,MMU再?gòu)捻?yè)表中找到這個(gè)虛擬地址的物理地址,完成取指。而且x86平臺(tái)使用了名為內(nèi)存映射(MMIO)的技術(shù),該技術(shù)是PCI規(guī)范的一部分,10設(shè)備端口被映射到內(nèi)存空間,映射后,CPU訪問(wèn)10端口就如同訪問(wèn)內(nèi)存一樣。 圖2是coreboot中AMD橋片的幾個(gè)設(shè)備的MEM映射地址,‘h’表示十六進(jìn)制。龍芯CPU是MIPS架構(gòu)的CPU,與x86 CPU的地址分配和尋址方式有所不同。龍芯 3A采用48位的物理地址空間,47 44位區(qū)分標(biāo)示16個(gè)節(jié)點(diǎn),44 0為每個(gè)節(jié)點(diǎn)的內(nèi)部地址;龍芯刀片服務(wù)器是由兩個(gè)節(jié)點(diǎn)組成的CC-NUMA的架構(gòu),整個(gè)系統(tǒng)的地址空間可分為4 個(gè)層次,即物理地址區(qū)間、節(jié)點(diǎn)內(nèi)一二級(jí)crossbar路由的地址空間、HT的地址空間、PCI的地址空間。下一層次是上一層的一個(gè)子區(qū)間,見(jiàn)圖3所示。系統(tǒng)中必須有一個(gè)nodejd為0的主節(jié)點(diǎn),負(fù)責(zé)系統(tǒng)的啟動(dòng),龍芯刀片服務(wù)器另一個(gè)節(jié)點(diǎn)的node_id由硬件跳線設(shè)置為01,因此整個(gè)系統(tǒng)的物理地址空間范圍為 Wx0000_0000_0000 0x2000_0000_0000],其中
為節(jié)點(diǎn) 0 的物理地址范圍,
為節(jié)點(diǎn)01的物理地址范圍。在南北橋芯片上連接的設(shè)備都是PCI設(shè)備。PCI系統(tǒng)有4GB的memory空間和64K 的10空間,CPU要訪問(wèn)PCI設(shè)備的配置空間、memory空間、和10空間需要經(jīng)過(guò)一系列的轉(zhuǎn)換過(guò)程即48位的CPU地址空間一40位的HT地址空間一PCI的地址空間。如圖4所示。1. CPU的物理地址空間到HT地址空間的轉(zhuǎn)換龍芯3A把CPU物理地址空間
映射到HT 的40位地址空間
,這種映射是通過(guò)一級(jí)crossbar 的地址路由窗口或者一級(jí)crossbar的默認(rèn)設(shè)置實(shí)現(xiàn)的。因?yàn)镠T只有40位的地址空間對(duì)多余的位不予考慮。2. HT地址空間到PCI地址空間的轉(zhuǎn)換HT 40位地址空間的到PCI地址空間的映射是通過(guò)HT to PCI bridge實(shí)現(xiàn)的,這是硬件保證的不需要軟件做任何配置。映射后PCI設(shè)備的起始MEM地址為0x10000000,10 起始地址為0x18000000。這個(gè)地址在PMON程序中作為PCI的MEM BASE或者10 BASE。而對(duì)于每個(gè)PCI設(shè)備,PMON通過(guò)建立了一個(gè)pci_device的結(jié)構(gòu)體。在這個(gè)結(jié)構(gòu)體中記錄了每個(gè)PCI設(shè)備的信息,包括該設(shè)備的類(lèi)型,mem大小,以及next device的指針等,組成了一個(gè)鏈表。在PCI設(shè)備掃描過(guò)程中,PMON就會(huì)根據(jù)該鏈表遞歸的搜尋所有設(shè)備的資源請(qǐng)求信息,并形成pCi_win結(jié)構(gòu),組成memory和10資源請(qǐng)求鏈表。在PCI設(shè)備資源分配過(guò)程中就會(huì)按照下面公式,進(jìn)行memory和10的分配PCI設(shè)備MEM地址=上一個(gè)設(shè)備的MEM地址+該P(yáng)CI設(shè)備的MEM請(qǐng)求大小PCI設(shè)備10地址=上一個(gè)設(shè)備的MEM地址+該P(yáng)CI設(shè)備的10請(qǐng)求大小
5
其中第一個(gè)設(shè)備的MEM地址的初始值等于0x10000000,IO地址為0x18000000。在 PMON程序中,通過(guò)讀取PCI設(shè)備的配置空間來(lái)獲取設(shè)備的MEM、IO大小,從而分配PCI設(shè)備的MEM、IO地址。二、龍芯3A主板上的設(shè)備DMA操作配置在龍芯CPU中設(shè)備以DMA的方式訪問(wèn)內(nèi)存的過(guò)程如下UPCI設(shè)備發(fā)出訪存的地址經(jīng)過(guò)北橋芯片,由北橋路由到HTl控制器;2、HTl控制器根據(jù)其內(nèi)部地址窗口寄存器將地址路由到一級(jí)crossbar3、一級(jí)crossbar根據(jù)其內(nèi)部的地址窗口寄存器將地址路由到二級(jí)cache,然后到二級(jí) crossbar ;4、二級(jí)crossbar根據(jù)其內(nèi)部的地址窗口配置將地址路由到內(nèi)存控制器。南北橋芯片處連接了很多需要進(jìn)行DMA操作的設(shè)備,比如網(wǎng)卡設(shè)備,它在接收、發(fā)送數(shù)據(jù)報(bào)文時(shí),需要進(jìn)行DMA操作。因?yàn)閄86架構(gòu)與MIPS架構(gòu)在內(nèi)存物理地址上的差異, 就需要在BIOS中對(duì)北橋的相關(guān)DMA操作寄存器的設(shè)置做相應(yīng)的修改,否則會(huì)導(dǎo)致DMA操作無(wú)法正確進(jìn)行。本發(fā)明在PMON中針對(duì)北橋的相關(guān)寄存器做了如下修改將nbconfig 0x90 的值由0x40000000改成0xf0000000,從而保證了南北橋設(shè)備的DMA操作地址正確,保證了設(shè)備DMA的正常工作。三、龍芯刀片PCI配置空間和10空間讀寫(xiě)在龍芯刀片BIOS中對(duì)南北橋設(shè)備的初始化代碼主要借鑒x86架構(gòu)的 BlOScoreboot。在coreboot中,南北橋芯片初始化代碼是完全按照X86 CPU的工作原理實(shí)現(xiàn)的。而龍芯3處理器是MIPS架構(gòu)的CPU,在地址空間、PCI配置空間讀寫(xiě)訪問(wèn)等方面與 X86架構(gòu)完全不同,這就需要我們對(duì)南北橋芯片初始化代碼進(jìn)行重新改寫(xiě),主要是針對(duì)南北橋設(shè)備PCI配置空間的讀寫(xiě)函數(shù)等的修改。 X86架構(gòu)CPU使用的BIOS程序基本上都是使用了 PCI兼容配置方法讀寫(xiě)PCI配置空間寄存器。PCI兼容配置方法使用了兩個(gè)32位的10端口,分別為配置地址端口 OxCFS和配置數(shù)據(jù)端口 0XCFC。配置地址端口數(shù)據(jù)格式如圖5所示。當(dāng)要讀設(shè)備的PCI配置空間寄存器內(nèi)容時(shí),需要將設(shè)備的總線號(hào)、設(shè)備號(hào)、功能號(hào)、寄存器位置等信息寫(xiě)到配置地址端口,然后讀配置數(shù)據(jù)端口,即可得到PCI配置空間相關(guān)寄存器的內(nèi)容。當(dāng)要寫(xiě)設(shè)備的PCI配置空間寄存器內(nèi)容時(shí),需要將設(shè)備的總線號(hào)、設(shè)備號(hào)、功能號(hào)、寄存器位置等信息寫(xiě)到配置地址端口,然后將數(shù)據(jù)寫(xiě)到配置數(shù)據(jù)端口,即可將相關(guān)內(nèi)容寫(xiě)到PCI配置空間相關(guān)寄存器。PCI,PCI-E總線可以使用此方法對(duì)總線上的設(shè)備內(nèi)部的PCI配置空間寄存器進(jìn)行讀寫(xiě)操作。使用此方法,可以對(duì)PCI配置空間寄存器直接進(jìn)行8位、16位、32位的讀寫(xiě)操作。而在MIPS架構(gòu)下采用的是HT總線配置方法讀寫(xiě)PCI配置空間寄存器。HT總線配置方法指HT總線即可以使用PCI兼容配置方法對(duì)總線上的設(shè)備內(nèi)部的 PCI配置空間寄存器進(jìn)行讀寫(xiě)操作,也可以使用自己特有的配置方法對(duì)總線上的設(shè)備內(nèi)部的PCI配置空間寄存器進(jìn)行讀寫(xiě)操作。在MIPS架構(gòu)下,類(lèi)型0、類(lèi)型1的地址格式如圖6所示,其中40位到63位地址需要根據(jù)CPU和HT總線確定,目前我們使用的地址為0X90000E。在龍芯3A主板上,我們定義類(lèi)型 0 地址 HT_MAP_TYPE0_C0NF_ADDR 為 OxbaOOOOOO,類(lèi)型 1 地址 HT_MAP_TYPE1_C0NF_ ADDR 為 OxbbOOOOOO。當(dāng)要讀設(shè)備的PCI配置空間寄存器內(nèi)容時(shí),需要將設(shè)備的總線號(hào)、設(shè)備號(hào)、功能號(hào)、寄存器位置等信息與首地址相加,得到最后的讀寫(xiě)訪問(wèn)地址。公式如下addr | = (dev <<111 func << 8 | reg)其中addr = HT_MAP_TYPE0_C0NF_ADDR 或者HT_MAP_TYPE 1_C0NF_ADDR ;reg 為需要操作的 PCI 寄存器號(hào)。當(dāng)對(duì)最后得到的地址進(jìn)行讀訪問(wèn)時(shí),即可得到PCI配置空間相關(guān)寄存器的內(nèi)容; 當(dāng)將相關(guān)數(shù)據(jù)寫(xiě)到最后得到的地址時(shí),即可將相關(guān)內(nèi)容寫(xiě)到PCI配置空間相關(guān)寄存器。對(duì)于10操作,在X86架構(gòu)下,存在區(qū)間為OxO-Oxffff的10地址空間,可以使用 in、out指令進(jìn)行訪問(wèn)。而在MIPS架構(gòu)中,并沒(méi)有直接對(duì)應(yīng)的10地址空間,也沒(méi)有直接對(duì)應(yīng)于in、out這樣的指令對(duì)10地址空間進(jìn)行訪問(wèn)。但有些如串口、實(shí)時(shí)時(shí)鐘、中斷控制器、 IDE等設(shè)備在正常工作時(shí),都需要對(duì)它們使用的10地址空間進(jìn)行相應(yīng)的讀寫(xiě)操作。這樣,在 MIPS架構(gòu)下,也要實(shí)現(xiàn)對(duì)應(yīng)的讀寫(xiě)操作,才能使這些設(shè)備正常工作。為了解決此問(wèn)題,將HT 地址窗口中的0XFDFC000000做為10地址空間。這段區(qū)域映射后的基地址為0xb8000000。 這樣10地址的公式為addr = B0NIT0_PCII0_BASE_VA+addr其中B0NIT0_PCII0_BASE_VA = 0xb8000000因此,為了實(shí)現(xiàn)從coreboot到pmon的無(wú)縫移植就需要對(duì)PCI配置空間的讀寫(xiě)函數(shù)和10空間的讀寫(xiě)函數(shù)進(jìn)行修改和添加。更改、添加的函數(shù)接口包括PCI配置空間寄存器 8位、16位、32位讀操作函數(shù);PCI配置空間寄存器8位、16位、32位寫(xiě)操作函數(shù);PCI配置空間類(lèi)型0、類(lèi)型1讀/寫(xiě)方法;調(diào)試信息輸出函數(shù);Memory寄存器8位、16位、32位讀、寫(xiě)函數(shù);10寄存器8位、16位、32位讀、寫(xiě)函數(shù);初始化配置參數(shù)設(shè)置函數(shù);設(shè)備查找函數(shù);設(shè)備定位函數(shù)等;其他需要更改的還包括10地址宏定義等;四、龍芯3A主板的pmon調(diào)試方法在龍芯3A主板調(diào)試初期,并不能保證pmon中對(duì)南北橋初始化的代碼都正確,所有設(shè)備都能正常工作。為了保證龍芯刀片主板上電調(diào)試進(jìn)度和減輕調(diào)試工作的復(fù)雜度,我們選擇一種化繁為簡(jiǎn)的方法,即先在pmon代碼的PCI設(shè)備掃描之前,屏蔽南北橋中復(fù)雜的、不使用的設(shè)備,而進(jìn)行后續(xù)必要設(shè)備的調(diào)試。圖7為PMON代碼初始化流程圖從流程圖中看出,PMON在匯編部分主要進(jìn)行CPU、內(nèi)存與串口等的調(diào)試,進(jìn)入C語(yǔ)言部分后,開(kāi)始南北橋控制器與設(shè)備的初始化。其中南北橋初始化過(guò)程中首先會(huì)對(duì)各個(gè)設(shè)備的控制器進(jìn)行使能與初始化,這樣在PCI掃描過(guò)程中會(huì)枚舉出已被使能的控制器下的設(shè)備,而未被使能的控制器就不進(jìn)行枚舉和分配資源。因此調(diào)試的簡(jiǎn)化做法是在初始化南北橋之后,PCI掃描之前,關(guān)掉南北橋中這些較復(fù)雜的設(shè)備的控制器,使得在PCI掃描的時(shí)候, 程序認(rèn)為這些設(shè)備的控制器都未被使能,控制器下面沒(méi)有設(shè)備,這樣就不會(huì)對(duì)這些設(shè)備進(jìn)行初始化,大大減少了干擾,降低了調(diào)試的復(fù)雜度。五、龍芯3A主板中Linux內(nèi)核的中斷分配
x86架構(gòu)的中斷系統(tǒng)有256個(gè)中斷號(hào),當(dāng)中斷發(fā)生時(shí),CPU用中斷號(hào)索引以IDTR寄存器的值為基地址的中斷描述符表(IDT),IDT的每個(gè)表項(xiàng)指向相應(yīng)的中斷處理程序。而在龍芯3號(hào)CPU的中斷處理系統(tǒng)中,只存在特例異常和通用異常。特例異常包括冷啟動(dòng)、TLB重填、xTLB重填、cache錯(cuò)誤;通用異常共32個(gè),第0號(hào)通用異常就是與外部設(shè)備相關(guān)的中斷,圖8中表示的就是龍芯3A主板的四級(jí)級(jí)聯(lián)的中斷結(jié)構(gòu)圖。其中前三級(jí)屬于CPU內(nèi)部的中斷級(jí)聯(lián)。第一級(jí)是CPU每個(gè)核的中斷控制器,CPU內(nèi)部有4個(gè)核,每個(gè)核的Cause和Matus 寄存器分別組成一個(gè)中斷控制器。CPU執(zhí)行完一條指令后都會(huì)檢查Cause寄存器相應(yīng)的位有沒(méi)有被置位。第二級(jí)由一個(gè)具有32根中斷線的中斷控制器組成,32根中斷線可以通過(guò)配置CPU內(nèi)部的中斷路由寄存器,將中斷分別路由到CPU的4個(gè)核上。第三級(jí)由HT中斷控制器、LPC中斷控制器、核間中斷控制器組成。其中HT中斷控制器用于接受IO設(shè)備的中斷。 第四級(jí)與AMD芯片組有關(guān),它連接在南橋的8259A控制器上,而橋片上的所有外設(shè)中斷都是先送往8259A控制器,然后再送往HT中斷控制器的。因此,配置外部設(shè)備中斷的關(guān)鍵在于外設(shè)和南橋8259A控制器的配合。根據(jù)AMD 南橋8259A的特點(diǎn),可以分為三個(gè)步驟1)配置好設(shè)備的interrUpt_pin是連接在8259A控制器的第幾根中斷線上,這種連接有些是硬件設(shè)置好的,有些是需要軟件配置的。在AMD橋片的8259A中斷線有12根。2)配置interrupt line,也就是中斷號(hào)。3)配置中斷的觸發(fā)方式,電平觸發(fā)還是邊沿觸發(fā)。配置好這三項(xiàng)后,南北橋設(shè)備就可以正常響應(yīng)中斷了,圖9描述了外部設(shè)備響應(yīng)中斷的過(guò)程。當(dāng)某個(gè)硬件設(shè)備觸發(fā)了中斷,CPU硬件會(huì)相應(yīng)的設(shè)置cause寄存器的Exccode域及IP位。內(nèi)核中通用異常處理中的程序eX(^pt_VeC3_generiC就會(huì)查詢cause寄存器的 Exc code域來(lái)確定是32種通用異常中的哪一種。外部設(shè)備中斷屬于0號(hào),那么內(nèi)核進(jìn)入中斷處理程序的入口地址handle_init并調(diào)用中斷分發(fā)函數(shù)plat_irq_dispatch。plat_ irq_dispatch將根據(jù)CPU CAUSE寄存器的[IP7 IPO]判斷是那個(gè)中斷源或者中斷控制器發(fā)生了中斷,外部設(shè)備中斷是屬于HTl中斷控制器,而與HTl中斷控制器級(jí)聯(lián)的就是南橋的8259A控制器。這樣函數(shù)就會(huì)調(diào)用8259A的中斷分配過(guò)程,也就是上面描述的三個(gè)步驟。 通過(guò)這三個(gè)步驟將中斷號(hào)分發(fā)完后,內(nèi)核就會(huì)直接調(diào)用do_IRQ()函數(shù),執(zhí)行對(duì)應(yīng)的驅(qū)動(dòng)程序。整個(gè)中斷調(diào)用過(guò)程也就完成了。另外,從圖8中可以看出,AMD橋片上的所有IO設(shè)備中斷是通過(guò)HTl中斷路由傳到CPU的,而且由于龍芯3A CPU內(nèi)沒(méi)有實(shí)現(xiàn)APIC的功能,因此IO設(shè)備的中斷只能發(fā)送到主CPU的4個(gè)核,次CPU不能處理IO中斷。
權(quán)利要求
1.一種龍芯CPU主板bios以及中斷的實(shí)現(xiàn)方法,其特征在于步驟如下 將龍芯CPU與北橋芯片進(jìn)行地址映射轉(zhuǎn)換;將DMA設(shè)備地址進(jìn)行映射轉(zhuǎn)換; 對(duì)PCI地址空間進(jìn)行配置;以及將coreboot與pmon融合成新bios后,調(diào)試;以及, 調(diào)試內(nèi)核中斷系統(tǒng)。
2.如權(quán)利要求1所述的方法,其特征在于所述地址映射轉(zhuǎn)換過(guò)程為先將龍芯CPU物理地址空間映射到HT總線地址空間,再將HT總線地址空間映射到PCI地址空間。
3.如權(quán)利要求2所述的方法,其特征在于所述龍芯CPU物理地址空間映射到HT總線地址空間是通過(guò)一級(jí)crossbar實(shí)現(xiàn)的。
4.如權(quán)利要求3所述的方法,其特征在于所述龍芯CPU物理地址空間映射時(shí)只映射 48位地址空間。
5.如權(quán)利要求2所述的方法,其特征在于所述HT總線地址空間映射到PCI地址空間是通過(guò)HT to PCI bridge實(shí)現(xiàn)。
6.如權(quán)利要求1所述的方法,其特征在于所述DMA設(shè)備地址映射轉(zhuǎn)換是通過(guò)修改北橋芯片內(nèi)與DMA尋址相關(guān)的寄存器初值實(shí)現(xiàn)。
7.如權(quán)利要求6所述的方法,其特征在于所述寄存器可以進(jìn)行8位,16位和32位讀寫(xiě)操作。
8.如權(quán)利要求1所述的方法,其特征在于所述bios是將PMON的CPU、內(nèi)存和串口的調(diào)試部分與coreboot的南北橋控制器和設(shè)備的初始化部分融合。
9.如權(quán)利要求1所述的方法,其特征在于所述bios調(diào)試時(shí)在初始化南橋后,PCI掃描前,關(guān)閉掉所有可能影響調(diào)試的設(shè)備控制器。
10.如權(quán)利要求1所述的方法,其特征在于所述內(nèi)核中斷系統(tǒng)是通過(guò)將龍芯CPU的中斷控制器與8259A控制器級(jí)聯(lián),來(lái)響應(yīng)和控制南北橋外部設(shè)備的中斷請(qǐng)求。
11.如權(quán)利要求1所述的方法,其特征在于所述中斷系統(tǒng)采用異常處理表來(lái)對(duì)中斷分類(lèi)。
12.如權(quán)利要求1所述的方法,其特征在于采用中斷控制器處理中斷。
13.如權(quán)利要求10所述的方法,其特征在于所述中斷系統(tǒng)采用南橋8259A控制器與龍芯3A CPU的中斷控制器相配合,來(lái)實(shí)現(xiàn)外部設(shè)備中斷的響應(yīng)。
14.如權(quán)利要求10所述的方法,其特征在于龍芯3A主板通過(guò)配置南橋設(shè)備的中斷陣腳、中斷線路和觸發(fā)方式,來(lái)分配南橋設(shè)備的中斷號(hào)。
全文摘要
本發(fā)明提供了一種龍芯CPU主板bios的實(shí)現(xiàn)方法,將龍芯CPU與北橋芯片進(jìn)行地址映射轉(zhuǎn)換;將DMA設(shè)備地址進(jìn)行映射轉(zhuǎn)換;對(duì)PCI地址空間進(jìn)行配置;以及將coreboot與pmon融合成新bios后,調(diào)試;以及,調(diào)試內(nèi)核中斷系統(tǒng)。通過(guò)本發(fā)明提供的方法,解決了在BIOS層龍芯CPU和AMD橋片之間的地址映射轉(zhuǎn)換問(wèn)題,PMON中DMA設(shè)備尋址問(wèn)題,龍芯刀片PCI配置空間讀寫(xiě)問(wèn)題以及從coreboot到pmon移植和調(diào)試的問(wèn)題。而且龍芯主板外部設(shè)備的中斷處理方式,保證了龍芯主板上外部設(shè)備正常工作。
文檔編號(hào)G06F9/46GK102184122SQ20111012647
公開(kāi)日2011年9月14日 申請(qǐng)日期2011年5月16日 優(yōu)先權(quán)日2011年5月16日
發(fā)明者劉新春, 尹寧寧, 李豐旺, 李永成, 楊曉君, 邵宗有, 鄭臣明 申請(qǐng)人:曙光信息產(chǎn)業(yè)股份有限公司