作者
QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118
概述
在T2080中,有4种地址域(address domains),
- CPU看到的逻辑地址,虚拟地址,物理地址,由MMU负责三者的转换
- 内部本地地址空间,包含CCSR和DSCR
- SRIO的外部内存,IO,和配置空间
- PCIe的外部内存,IO,和配置空间
本地地址映射(local address map)指的是,CPU看到的物理地址,即CPU访问内存和IO空间时,发出的地址,DMA控制器也使用这个本地地址映射,所有的DDR空间和其他模块如CCSR存在于这个地址映射中,本地地址映射由32个本地访问窗口LAWs(local access window)定义,每个窗口映射一个目标接口,比如DDR控制器,PCIe控制器,CCSR有一个专用的CCSR窗口,本地地址映射还有一个固定的启动(boot)窗口,位于0x00_FF80_0000到0x00_FFFF_FFFF,DCSR会占用一个LAW。
如果对LAW的访问落到了外设接口比如SRIO,那么外设会用ATMU(address translation and mapping unit)再对这个地址进行转换,发到外设上的地址是转换后的地址,DDR Controller和IFC也有类似的功能,
- Outbound ATMU负责将本地地址空间翻译到外设地址空间
- Inbound ATMU负责把外设地址空间翻译到本地地址空间
所以Inbound ATMU和LAW必须是一致的。对比ATMU和LAW可以发现,LAW只是标识哪一段地址空间是哪个外设,但没有翻译操作。
LAW
如果不同外设对应的LAW有重复部分,那么32个窗中编号小的占有这段空间。一组LAW由3个32位寄存器表示,高32地址,低32位地址,属性。注意每组LAW占用4个32位寄存器,后面预留了一个(比如0xC0C),这样是对齐的,2的整数幂。
CCSR地址在0xFFE000000,LAW从0xC00到0xDF8,这是我们custom board的内存映射,
开始 | 结束 | 定义 | 长度 |
---|---|---|---|
0xFFFDF0000 | 0xFFFDFFFFF | IFC-CPLD | 4KB |
0xFFE000000 | 0xFFEFFFFFF | CCSR | 16MB |
0xFFD000000 | 0xFFDFFFFFF | IFC-FPGA | 16MB |
0xFF8030000 | 0xFF803FFFF | PCIe4 IO Space | 64KB |
0xFF8020000 | 0xFF802FFFF | PCIe3 IO Space | 64KB |
0xFF8010000 | 0xFF801FFFF | PCIe2 IO Space | 64KB |
0xFF8000000 | 0xFF800FFFF | PCIe1 IO Space | 64KB |
0xFF6000000 | 0xFF7FFFFFF | QMan | 32MB |
0xFF4000000 | 0xFF5FFFFFF | BMan | 32MB |
0xFE0000000 | 0xFEFFFFFFF | IFC-NOR | 256MB |
0xFD0000000 | 0xFDFFFFFFF | IFC-FPGA-BPI-NOR | 256MB |
0xF00000000 | 0xF003FFFFF | DCSR | 4MB |
0xC40000000 | 0xC4FFFFFFF | PCIe4 Mem Space | 256MB |
0xC30000000 | 0xC3FFFFFFF | PCIe3 Mem Space/RapidIO2 | 256MB |
0xC20000000 | 0xC2FFFFFFF | PCIe2 Mem Space/RapidIO1 | 256MB |
0xC00000000 | 0xC1FFFFFFF | PCIe1 Mem Space | 512MB |
0x000000000 | 0x0FFFFFFFF | DDR | 4GB |
看下Linux下的LAW,LAW在u-boot下就已经设置好,Linux并没有对LAW进行更改,PCIe123没有出现,因为我们板子上没用,对应也没有使能,最后一个LAW(Source ID=0x10),对应的是DDR,大小的计算公式为2^(val + 1)
,所以DDR的大小为2^(0x1f + 1) = 4GB
,
T2080> md 0xFE000C00 0x80
fe000c00: 0000000f e0000000 81f0001b 00000000 ................
fe000c10: 0000000f f4000000 81800018 00000000 ................
fe000c20: 0000000f f6000000 83c00018 00000000 ................
fe000c30: 0000000f ffdf0000 81f0000b 00000000 ................
fe000c40: 0000000f fd000000 81f00017 00000000 ................
fe000c50: 0000000f d0000000 81f0001b 00000000 ................
fe000c60: 0000000f 00000000 81d00018 00000000 ................
fe000c70: 0000000c 40000000 8030001b 00000000 ....@....0......
fe000c80: 0000000f f8030000 8030000f 00000000 .........0......
fe000c90: 00000000 00000000 00000000 00000000 ................
fe000ca0: 00000000 00000000 00000000 00000000 ................
fe000cb0: 00000000 00000000 00000000 00000000 ................
fe000cc0: 00000000 00000000 00000000 00000000 ................
fe000cd0: 00000000 00000000 00000000 00000000 ................
fe000ce0: 00000000 00000000 00000000 00000000 ................
fe000cf0: 00000000 00000000 00000000 00000000 ................
fe000d00: 00000000 00000000 00000000 00000000 ................
fe000d10: 00000000 00000000 00000000 00000000 ................
fe000d20: 00000000 00000000 00000000 00000000 ................
fe000d30: 00000000 00000000 00000000 00000000 ................
fe000d40: 00000000 00000000 00000000 00000000 ................
fe000d50: 00000000 00000000 00000000 00000000 ................
fe000d60: 00000000 00000000 00000000 00000000 ................
fe000d70: 00000000 00000000 00000000 00000000 ................
fe000d80: 00000000 00000000 00000000 00000000 ................
fe000d90: 00000000 00000000 00000000 00000000 ................
fe000da0: 00000000 00000000 00000000 00000000 ................
fe000db0: 00000000 00000000 00000000 00000000 ................
fe000dc0: 00000000 00000000 00000000 00000000 ................
fe000dd0: 00000000 00000000 00000000 00000000 ................
fe000de0: 00000000 00000000 00000000 00000000 ................
fe000df0: 00000000 00000000 8100001f 00000000 ................
root@t2080rdb:~# memtool md -l 0xFFE000C00+0x200
ffe000c00: 0000000f e0000000 81f0001b 00000000 ................
ffe000c10: 0000000f f4000000 81800018 00000000 ................
ffe000c20: 0000000f f6000000 83c00018 00000000 ................
ffe000c30: 0000000f ffdf0000 81f0000b 00000000 ................
ffe000c40: 0000000f fd000000 81f00017 00000000 ................
ffe000c50: 0000000f d0000000 81f0001b 00000000 ................
ffe000c60: 0000000f 00000000 81d00018 00000000 ................
ffe000c70: 0000000c 40000000 8030001b 00000000 ....@....0......
ffe000c80: 0000000f f8030000 8030000f 00000000 .........0......
ffe000c90: 00000000 00000000 00000000 00000000 ................
ffe000ca0: 00000000 00000000 00000000 00000000 ................
ffe000cb0: 00000000 00000000 00000000 00000000 ................
ffe000cc0: 00000000 00000000 00000000 00000000 ................
ffe000cd0: 00000000 00000000 00000000 00000000 ................
ffe000ce0: 00000000 00000000 00000000 00000000 ................
ffe000cf0: 00000000 00000000 00000000 00000000 ................
ffe000d00: 00000000 00000000 00000000 00000000 ................
ffe000d10: 00000000 00000000 00000000 00000000 ................
ffe000d20: 00000000 00000000 00000000 00000000 ................
ffe000d30: 00000000 00000000 00000000 00000000 ................
ffe000d40: 00000000 00000000 00000000 00000000 ................
ffe000d50: 00000000 00000000 00000000 00000000 ................
ffe000d60: 00000000 00000000 00000000 00000000 ................
ffe000d70: 00000000 00000000 00000000 00000000 ................
ffe000d80: 00000000 00000000 00000000 00000000 ................
ffe000d90: 00000000 00000000 00000000 00000000 ................
ffe000da0: 00000000 00000000 00000000 00000000 ................
ffe000db0: 00000000 00000000 00000000 00000000 ................
ffe000dc0: 00000000 00000000 00000000 00000000 ................
ffe000dd0: 00000000 00000000 00000000 00000000 ................
ffe000de0: 00000000 00000000 00000000 00000000 ................
ffe000df0: 00000000 00000000 8100001f 00000000 ................
看下LAW的Source ID,
ATMU
- SRIO有8个Outbound ATMU和1个默认的ATMU,4个Inbound ATMU和1个默认的ATMU,
- PCIe有4个Outbound ATMU和1个默认的ATMU,4个Inbound ATMU和1个固定的MSI ATMU。
如果一个Inbound传输对应的LAW指向一个外设,这样有可能造成系统死锁。ATMU寄存器意义如下,