我的问题是我不能将64位宽的设置写入设备寄存器。我正在使用带有集成内存控制器和基于FreeBSD 10的环境的英特尔®至强®处理器C5500 / C3500系列。
数据表(英特尔®至强®处理器C5500 / C3500系列数据表 - 第2卷)在章节(4.12.40错误注入实现)中提到,应为ECC注入设置寄存器MC_CHANNEL_x_ADDR_MATCH(这是一个四字访问),但pci_cfgregwrite在端口映射I / O模式下不写入64位宽,数据表中没有提到寄存器的基址来帮助对其进行内存映射。试图通过pci_cfgregwrite将写入分成2个32位写入,但这没有用。如何在该寄存器中写入64位宽的设置(器件:4,5,6功能:0偏移:总线0xFF上的F0h)。
答案 0 :(得分:2)
pci_cfgregwrite()写入PCI配置空间,它只进行32位访问。
我很确定您的寄存器不在PCI配置空间中,而是位于基址寄存器0/1/2 / ...所描述的PCI存储器映射地址空间之一(BAR0 / 1/2 / ...)
为了访问BARx区域,首先将它们映射到内存,然后使用FreeBSD提供的宏来访问内存映射区域。在您的情况下,bus_space_write_8()将写入64位。 http://www.unix.com/man-page/freebsd/9/bus_space_write_8/
有关更多信息,请查看FreeBSD文档: http://www.freebsd.org/doc/en/books/arch-handbook/pci-bus.html