MIPS基本邏輯地址空間
MIPS64架構下包含一個64位地址空間和一個32位地址空間,32位地址空間是64位地址空間的子集。32位地址空間被分成四段,即常說的kuseg,kseg0~2如下圖。其64位地址空間可被分割成更多的段。

kuseg:0x0000 0000-0x7FFF FFFF(低端2G) :用戶太可用地址,必須通過MMU進行地址映射后才能正常訪問。
kseg0:0x8000 0000 - 0x9FFF FFFF(512M):最高位清零就是對應的物理地址,映射到連續的低端512M物理地址。該地址空間通過高速緩存存取,主要用來存放操作系統核心。
kseg1:0xA000 0000 - 0xBFFF FFFF(512M):高3位清零就是對應的物理地址,映射到連續的低端512M物理地址。該地址空間不通過高速緩存存取,該區域主要用做I/O寄存器,系統ROM和啟動時入口向量(0xBFC00000)就存于這個地址段內,因為系統啟動時cache還未進行初始化。
kseg1:0xC000 0000 - 0xFFFF FFFF (1G):該地址段只能在核心態使用,并且需要經過MMU轉換。
龍芯物理地址空間規范
龍芯物理地址空間設計的規則約定如下:
- 0x0000_0000~0x0FFF_FFFF 的低 256MB 空間為低端內存空間。 其中0x000 0000~0x001F FFFF為兼容老版本固件保留的2M地址空間;0x0F00_0000~0x0FFF_FFFF 是為固件PMON保留的 16M 地址空間,用于與內核的信息交互,如固件傳參、關機和重啟功能、SmbIOS、 Vbios 等。


- 0x1000_0000~0x1FFF_FFFF 為 PCI 等 IO 設備空間及部分芯片配置寄存器空間;
- 0x3000_0000~0x3FFF_FFFF 為窗口配置寄存器的空間范圍;
- 0x4000_0000~0x7FFF_FFFF 為 PCI 設備 memory 空間范圍;
- 0x2000_0000~0x2FFF_FFFF 和 0x8000_0000~高端內存基址-0x0000_0001 為保留空洞;
- 高端內存基址缺省值為 0x9000_0000。

System RAM地址范圍如下圖:

龍芯DMA 地址映射規范
編寫驅動時涉及設置DMA地址,龍芯不同芯片的DMA地址設置不同,需要特別注意,否則驅動可能無法正常運行。其相關DMA地址設置方法如下:
- 7A 作為橋片時 DMA 地址與內存物理地址的對應關系為 1:1 映射:即 dmaaddr = phyaddr

- 2H 作為橋片時 DMA 地址與內存物理地址的對應關系分為兩種情況: 內存地址為低 256M 時與 DMA 地址關系為 1:1 映射; 內存地址大于 256M 時與 DMA 的映射關系為 dmaaddr = phyaddr - 0x80000000。

- 780e 作為橋片時 DMA 地址與內存物理地址的對應關系分為兩種情況: 內存地址在低 256M 映射關系為 dmaaddr=phyaddr | 0x80000000; 內存地址大于 256M 的部分為 1:1 映射。
