2014-03-05 4 views
1

FPGA 기반 PCIe 카드의 Windows/Linux 드라이버를 채택하고 있습니다. (A LatticeECP3 제품의 PCIe 엔드 포인트와 함께 사용) 나는 나중에 호스트를 재부팅 할 필요없이 는 FPGA의 호스트 기반 비트 스트림 업데이트를 허용하는 드라이버 기능을 추가해야합니다.FPGA 기반 PCIe 카드 재설정 및 해당 구성 공간 복원

e.e. 플래시 후 비트 스트림을 다시로드 할 수 있도록 FPGA를 재설정해야합니다. 물론 이것은 PCIe 엔드 포인트의 구성 공간 설정이 손실 될 수 있습니다.

내 첫 번째 방법은 단계에 따라 구현했다 :

  1. 가의 PCIe의 PCI의 설정 공간을 절약 할 수 있습니다.
  2. 전원 관리 기능을 통해 장치를 절전 모드로 전환하십시오.
  3. 전원 관리 기능을 통해 장치를 작동시킵니다. 이것은 FPGA 리셋을 트리거합니다.
  4. PCI 구성 공간을 복원하십시오.

내 질문 :

  1. Q1 :이 7/리눅스 호스트 플랫폼 어쨌든 윈도우에서 실행되는 PCIe 장치에 대한 지원 유스 케이스인가?
  2. 질문 2 : 설명서를 찾으려면 적절한 키워드를 사용하고이 사용 사례에 대해서는 코딩 예제를 사용하십시오.

답변

1

에서는 장치 관리자를 통해 프로그래밍 방식으로 "해제/설정"해야합니다. 결과적으로 PCIe 장치는 Windows에서 다시 열거되고 PCI cfg 공간은 올바른 값을 갖게됩니다 ("비활성화"이전과 같을 필요는 없습니다).

은 귀하가 필요로하는 것을 정확하게 처리합니다. Windows 드라이버 개발 키트에서 DevCon 샘플을 확인하십시오. 이 코드를 작성하는 방법을 보여줍니다 (이 샘플은 사용 불가능/사용 가능 이외에도 많은 멋진 요소를 보여줍니다.)

다음 사항에주의해야합니다. PCIe 엔드 포인트를 리플 로우 한 후에 더 큰 메모리 리소스가 필요하면 시스템 전체의 PCIe 메모리 리소스 균형을 변경해야 할 수 있습니다.이 경우 재부팅하는 것이 가장 간단합니다. 즉, 다시 플러시 (fl 플러시)의 결과로 메모리 자원의 크기를 조정하지 마십시오.

의 경우 쉽지 않습니다. 사용자 모드 키워드는 "Linux 핫 플러그 ​​하위 시스템"입니다. 커널 모드 키워드에는 pci_enable_device() 및 pci_disable_device()가 포함됩니다. 이 링크는 도움이 될 것입니다 : How can the linux kernel be forced to enumerate the PCI-e bus?