2014-02-27 120 views
1

我的問題是我不能寫一個64位寬設定到一個設備寄存器。我正在配備集成內存控制器和基於FreeBSD 10的環境的英特爾®至強®處理器C5500/C3500系列。寫作四字設備寄存器PCI配置空間

的數據表(英特爾至強處理器C5500/C3500系列數據表 - 第2卷)在第提到(40年4月12日錯誤插入實施)寄存器MC_CHANNEL_x_ADDR_MATCH(這是一個四字訪問)應該被用於ECC注射設定但pci_cfgregwrite不寫入64比特寬端口中映射I/O模式和數據表中沒有提到的基地址爲寄存器與存儲器映射它幫助。試圖通過pci_cfgregwrite將寫入分爲2個32位寫入,但這沒有幫助。如何可以寫一個64位的範圍的設置到這個寄存器(設備:4,5,6功能:0偏移:F0H上總線爲0xFF)。

回答

2

pci_cfgregwrite()寫入到PCI配置空間和它只有32位訪問。

我敢肯定,你的寄存器不位於PCI配置空間,但在由基地描述的PCI存儲器映射的地址空間中的一個地址寄存器0/1/2/...(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