2014-02-27 3 views
1

내 문제는 장치 레지스터에 64 비트 폭 설정을 쓸 수 없다는 것입니다. 저는 통합 메모리 컨트롤러 및 FreeBSD 10 기반 환경을 갖춘 Intel® Xeon® 프로세서 C5500/C3500 시리즈를 사용하고 있습니다.PCI 구성 공간의 장치 레지스터에 쿼드 워드 쓰기

데이터 시트 (인텔 ® 제온 ® 프로세서 C5500/C3500 시리즈 데이터 시트 - 볼륨 2) 섹션 (4.12.40 오류 주입 구현)에 언급 된 ECC_CHANNEL_x_ADDR_MATCH (쿼드 워드 액세스)는 ECC 주입 그러나 pci_cfgregwrite는 포트 매핑 된 I/O 모드에서 64 비트 폭을 쓰지 않으며 데이터 시트에는 메모리 매핑에 도움이되는 레지스터의 기본 주소가 언급되어 있지 않습니다. pci_cfgregwrite를 통해 2 32 비트 쓰기로 쓰기를 분할하려고 시도했지만 도움이되지 않습니다. 어떻게이 레지스터에 64 비트 폭 설정을 쓸 수 있습니까? (Device : 4, 5, 6 Function : 0 Offset : 버스 0xFF의 F0h).

답변

2

pci_cfgregwrite()는 PCI 구성 공간에 쓰고 32 비트 액세스 만 수행합니다.

귀하의 레지스터가 PCI 구성 공간에 있지 않지만 Base Address Register 0/1/2/... (BAR0/1/2)에 의해 설명 된 PCI 메모리 맵핑 된 주소 공간 중 하나에 있음을 확신합니다./...)

BARx 영역에 액세스하려면 먼저 메모리에 맵핑 한 다음 FreeBSD에서 제공하는 매크로를 사용하여 메모리 맵핑 영역에 액세스하십시오. 귀하의 경우, bus_space_write_8()는 64 비트를 작성합니다. http://www.freebsd.org/doc/en/books/arch-handbook/pci-bus.html

: 자세한 내용은 http://www.unix.com/man-page/freebsd/9/bus_space_write_8/

, FreeBSD 문서를 확인