龙芯俱乐部开源社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1028|回复: 0

【龙芯相关】【06】龙芯2E及其福珑盒子主板的地址空间

[复制链接]

57

主题

81

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
10364
发表于 2017-1-21 18:45:48 | 显示全部楼层 |阅读模式
心映真的空间
苦心励志 技术强国
让我们面对现实 让我们忠于理想
欢迎来到唐刚的首页

龙芯2E及其福珑盒子主板的地址空间                        
龙芯相关 » 龙芯2E及其福珑盒子主板的地址空间                        
                                                        
龙芯2E福珑盒子的配置如下:
龙芯2E使用的显示芯片为 Radeon 7000。
龙芯CPU的虚拟地址空间为:
0x0000 0000 ~ 0x7FFF FFFF2Gkuseg32-bits user space
0x8000 0000 ~ 0x9FFF FFFF512Mkseg0unmapped cached space
0xA000 0000 ~ 0xBFFF FFFF512Mkseg1unmapped uncached space
0xC000 0000 ~ 0xFFFF FFFF1Gkseg2mapped space
系统从以下地址开始执行:
Virtual Address == 0xBFC0 0000Physical Address == 0x1FC0 0000
启动期间,硬件从ROM中读取指令(PMON是烧在ROM中的),使用寄存器交换数据,不使用cache和RAM交换数据;
PMON中的start.S中的一段代码把自己从ROM中拷贝到RAM,然后再跳转到0x8000 0000,即kseg0开始处执行,这里开始使用cache和RAM;
PMON代码中的 _start 符号是在编译时分配的,其值为 0x8010 0000(还是 0x8000 0000?待考察),
龙芯对RAM,ROM,IO寄存器及外部RAM进行统一编址,除了DDR内存外,其它的地址都是经过北桥连接并翻译的,具体情况如下:
龙芯2E 的物理地址空间分为两部分,一部分是DDR内存空间,地址为 0 ~ 0x0FFF FFFF(0~256M) 及 0x2000 0000 以上(512M~?)。另一部分为 0x1000 0000 ~ 0x1FFF FFFF(256M~512M),这部分地址为Bonito北桥所占用。即只要是CPU发出的寻址地址在这之间的,就会被Bonito北桥所吸收,并在北桥所管辖的范围内查找。北桥所管辖的这256M空间又细分为如下各部分:
Base Address and ScopeSizeClassDescription
0x1000 0000 ~ 0x13FF FFFF64MPCI_Lo0PCI 0号存储区
0x1400 0000 ~ 0x17FF FFFF64MPCI_Lo1PCI 1号存储区
0x1800 0000 ~ 0x1BFF FFFF64MPCI_Lo2PCI 2号存储区

0x1C00 0000 ~ 0x1F7F FFFF56MROM可用于保存一些永久性的信息
0x1F80 0000 ~ 0x1FBF FFFF4MROM可用于保存一些永久性的启动相关的信息
0x1FC0 0000 ~ 0x1FCF FFFF1MROM启动ROM,开机上电最先执行的代码就放在这

0x1FD0 0000 ~ 0x1FDF FFFF1MPCI IOPCI IO 寄存器口的映射空间,大部分外部设备的接口都在这里

0x1FE0 0000 ~ 0x1FE0 0FF256 BytesBonito Self RegisterBonito 的PCI配置寄存器
0x1FE0 0100 ~ 0x1FE0 01FF256 BytesBonito Self RegisterBonito 自身的配置寄存器
0x1FE0 0200 ~ 0x1FE7 FFFF63.5KBonito Self Register没有使用

0x1FE8 0000 ~ 0x1FEF FFFF512KPCI Configure AddressPCI 配置空间
0x1F00 0000 ~ 0x1FFF FFFF1MLocal IO本地 IO 设备空间
其中,标有颜色的部分是我们常常打交道的。现在我们的龙芯电脑上有256M的内存,因此0~256M这一块物理地址肯定有对应的实体,但是256M~512M这一块物理地址不一定有对应的实体,这一部分地址是被北桥所接收了,后面的部分由北桥进行处理,北桥会判断外部某些设备是没有接入,如果没接入,则它不会为那个设备分配IO寄存器及数据存储空间。

PCI自己内部也有一套地址空间(32位和64位都行),它和CPU的地址空间里面就存在某个映射关系。
当设备进行DMA时,还有一套将PCI地址转换成CPU地址的机制。这就要用于北桥中的Base Address Registers,北桥中一共有3个这样的寄存器,分别为 PCIBASE0, PCIBASE1, PCIBASE2。PCIBASE0, PCIBASE1 都可以映射多达 256M 的空间。具体映射的大小还取决于 PCIMEMBASECFG 的设置。PCIBASE2 用于映射 Bonito 的内部寄存器,映射区间为 64k 大小。
通常我们只使用了 PCIBASE0,代码中PCIMEMBASECFG的值使它可以映射256M的内存,它在代码中被赋值为 PCI_LOCAL_MEM_PCI_BASE(被定义为 0x8000 0000)。因此,当 PCI设备访问地址在 0x8000.0000~0x8FFF.FFFF 时这个地址会先减掉 0x8000 0000 变成要访问的内存地址 ,然后对内存进行操作(读或写)。此时,北桥充当了一个译码器的角色。

此块龙芯主板使用的显卡是 Radeon 7000,它在PCI扫描映射后的物理内存地址(即Framebuffer地址)是
0x1400 0000 ~ 0x15FF FFFF
共32M
                    
                                    
=====================================
这是一条神奇的小尾巴~~~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|龙芯俱乐部开源社区  

GMT+8, 2020-4-4 19:21 , Processed in 0.214658 second(s), 35 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表