Q&A 게시판

리눅스 커널에 대한 Q&A 게시판 입니다. (비밀글 체크는 꼭 필요한 경우에만)

메일을 남겨주시면 문서를 첨부하겠습니다.

작성자
문영일
작성일
2019-02-12 21:29
조회
397
첨부하신 데이터 시트는 사용한 PCI 슬레이브에 관련한 칩이더군요.
슬레이브 칩 쪽에서는 사용하는 BAR에 사이즈 및 타입만 지정합니다.

그리고 리눅스의 PCI 호스트 컨트롤러에서 위의 PCI 슬레이브 디바이스를 스캔한 후 자동으로 BAR0 주소를 기록합니다.

이 때 사용하는 물리 주소는 사용하는 cpu의 PCI 호스트 컨트롤러 데이터 시트 또는 레지스터 레퍼런스를 봐야 합니다. 쉽게 찾으려면 디바이스 트리를 보셔도 됩니다.

저 같은 경우는 디바이스 트리를 보고 시작 주소를 알아냈고, 범위는 디바이스 트리를 분석해서 추측하고, 실제 가능 범위는 호스트 컨트롤러의 Configuration 헤더 정보를 읽어서 파악할 수 있었습니다. 물론 매뉴얼에도 표기되어 있지만 제 경우는 너무 간단히 나옵니다.

파악이 어려우시면 다음을 알아봐주시면 저도 도와드릴께요.
- 지금 사용하시는 PCI 호스트 컨트롤러가 내장된 SoC칩 번호
- 호스트 컨트롤러의 configuration space 덤프
- 슬레이브 디바이스의 configuration space를 덤프

제가 보내줄 두 문서 중 레지스터 레퍼런스의 p447에 매핑 가능한 영역 주소가 있습니다.
- PCIE A번 포트 #0번부터 ~ #3번 버스는 0x0000_0000 ~ 0x1FFF_FFFF 까지 사용
- PCIE B번 포트 #0번부터 ~ #3번 버스는 0x2000_0000 ~ 0x3FFF_FFFF 까지 사용

이 칩은 매핑하는 방법이 매우 복잡해서 매핑하는데 참고해야 할 레지스터도 많습니다.
이에 대한 내용들은 "PCI Subsystem -3- (Host Controller)"를 보시면 파악하실 수 있을겁니다.
(데이터 시트와 레지스터 레퍼런스 두 파일을 첨부하려는데 하나는 용량(17M)이 커서 첨부가 안되는군요. 메일을 알려주시면 보내드리겠습니다)

수고하세요.
전체 0