PCIe ECAM机制

✅作者简介:嵌入式领域优质创作者,博客专家
✨个人主页:咸鱼弟
🔥系列专栏:Linux专栏 PCIe专栏 

目录

1.PCIe ECAM机制

2.PCIe ECAM基地址

3.linux下使用devmem2工具读取PCIe配置空间的寄存器。

4.linux内核中对ECAM的实现


1.PCIe ECAM机制

PCI Express Enhanced Configuration Access Mechanism (ECAM)是访问PCIe配置空间的一种机制。是将PCIe的配置空间映射到MEM空间,使用MEM访问其配置空间的一种实现。可以根据一个PCIe设备的BDF得到其配置空间偏移地址:

#define PCI_ECAM_ADDRESS(Bus,Device,Function,Offset) \
  (((Offset) & 0xfff) | (((Function) & 0x07) << 12) | (((Device) & 0x1f) << 15) | (((Bus) & 0xff) << 20))


2.PCIe ECAM基地址

查看一台主机是否支持PCIe ECAM机制,可通过以下命令查看:

2.1.对于x86主机:

sudo cat /proc/iomem | grep MMCONFIG


若支持ECAM,则会出现类似以下字段:

f8000000 - fbffffff : PCI MMCONFIG 0000 [bus 00-3f]


其中0xf8000000就是该主机下PCIe ECAM的基地址。加上PCI_ECAM_ADDRESS(bus, device, func, reg),就得到了指定PCIe设备的物理地址,可以使用此地址直接访问其配置空间。

2.2.对于ARM64主机:

sudo cat /proc/iomem | grep ECAM
若支持ECAM,则会出现以下字段:

40000000-4fffffff : PCI ECAM

其中0x40000000就是该主机下PCIe ECAM的基地址。加上PCI_ECAM_ADDRESS(bus, device, func, reg),就得到了指定PCIe设备的物理地址,可以使用此地址直接访问其配置空间。

3.linux下使用devmem2工具读取PCIe配置空间的寄存器。

3.1 devmem2读数据用法

devmem2 address [ type ]
参数说明:
address : 物理地址
type :要访问的数据类型 : [b]yte, [h]alfword, [w]ord

3.2.devmem2写数据用法

devmem2 address type data

参数说明:
address : 物理地址
type :要访问的数据类型 : [b]yte, [h]alfword, [w]ord
data :想要写入的数据

3.3.devmem2读写BDF=1:0:0的PCIe的配值空间,假设ECAM_BASE = 0x40000000
3.3.1. 读取venderid和deviceid,reg =0x00:
offset = PCI_ECAM_ADDRESS(1, 0, 0, 0) = 0x100000

sudo devmem2 0x40100000 w

3.3.2. 读取BAR0,reg =0x10:
offset = PCI_ECAM_ADDRESS(1, 0, 0, 0x10) = 0x100010

sudo devmem2 0x40100010 w

3.3.3. Enable Expansion ROM,reg =0x30:
offset = PCI_ECAM_ADDRESS(1, 0, 0, 0x30) = 0x100030
获取Expansion ROM基地址:

sudo devmem2 0x40100030 w 

假设读出的值为0x60800000。
以下命令使能Expansion ROM

sudo devmem2 0x40100030 w 0x60800001

4.linux内核中对ECAM的实现

代码路径:drivers\pci\ecam.c
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值