AMDGPU 드라이버의 HD 오디오 문제에 패치 수신, DRM이 이제 핫 플러그를 처리 할 수 ​​있음

Linux-Unix / AMDGPU 드라이버의 HD 오디오 문제에 패치 수신, DRM이 이제 핫 플러그를 처리 할 수 ​​있음 2 분 읽기

AMD



Radeon / AMD GPU는 최신 GPU 모델을 통해 Linux 지원을 향상 시켰지만 오디오 지원은 지금까지 무시당했습니다. 패치는 최근 Linux의 메인 라인 커널에서 사운드 하위 시스템을 유지하는 SUSE의 Takashi Iwai에 의해 푸시되었습니다. 패치 AMDGPU의 오디오 지원과 관련된 몇 가지 전반적인 문제를 해결합니다.

현재 AMDGPU 오디오 문제는 커널에 패치해야하는 AMDGPU 디스플레이 코드 (DC / DAL)에 의해 HDMI / DP 오디오 지원이 지연되고, 일부 오디오 형식이 지원되지 않으며, 특정 부분의 전체 버그가 일부 GPU를 중심으로 발생합니다. 드라이버 스택. 그러나 SUSE의 Takashi Iwai는 Radeon / AMDGPU DRM 드라이버 용 패치 세트를 출시했습니다.



이 패치가하는 일은 Radeon 및 AMDGPU Direct Rendering Manager 드라이버에 대한 DRM 오디오 구성 요소 지원을 제공하는 것입니다. 간단히 말해서 HDMI 및 DisplayPort 인터페이스 용 DRM 오디오 구성 요소 모드를 사용하면 오디오 핫 플러그 ​​및 ELD 판독이 발생할 수 있습니다. 하드웨어 액세스없이 . 이것은 기본적으로 시스템이 런타임 일시 중지 모드에 있더라도 올바른 핫 플러그 ​​처리가 허용 될 수 있음을 의미합니다. 그러나 AMDGPU DC 코드 경로는 현재 패치 형식에서 제대로 결합되지 않습니다.



따라서 기본적으로 Radeon과 AMDGPU의 일부만 패치에 의해 해결됩니다 – DC 지원 아직 아니다 포함.



Takashi는 아래에서 패치에 대해 자세히 설명했습니다.

AMD / ATI HDMI 코덱 드라이버에는 i915와 같은 오디오 구성 요소 바인딩이 없었지만 HDMI 핫 플러그 ​​감지 및 그 이후의 ELD 판독을위한 전통적인 HD 오디오 요청하지 않은 이벤트에서만 작동했습니다. 이것은 여러면에서 문제였습니다. 우선, 하드웨어 이벤트 전환 (GPU 레지스터 쓰기, HD 오디오 컨트롤러 트리거, 마지막으로 HD 오디오 요청하지 않은 이벤트 처리)을 거치며 이는 종종 신뢰할 수없고 놓칠 수 있습니다. 몇 가지 기회. 둘째, 코덱이 런타임 일시 중지 상태 일 때 각 unsol 이벤트 처리 및 ELD 읽기에는 명시적인 전원 켜기 / 끄기가 필요합니다. 마지막으로 가장 중요한 것은 HD 오디오 컨트롤러가 런타임 일시 중지 상태 일 때 핫 플러그 ​​깨우기가 누락 될 수 있다는 것입니다. 특히 마지막 포인트는 AMD HDMI 컨트롤러의 런타임 PM을 강제로 활성화하는 vga_switcheroo와 관련된 최근 변경으로 인해 큰 문제입니다.

이러한 문제는 오디오 구성 요소를 도입하여 해결됩니다. 핫 플러그 ​​알림은 더 정확하고 신뢰할 수있는 직접 함수 콜백에 의해 수행되며 실제 하드웨어 액세스없이 처리 할 수 ​​있습니다. 즉, 런타임 PM 트리거가 필요하지 않으며, HD 오디오는 런타임에 있더라도 이벤트를받습니다. 매달다. ELD 쿼리의 경우에도 동일합니다. DRM 드라이버에 저장된 캐시 된 ELD 바이트에서 직접 읽으므로 전체 하드웨어 액세스를 건너 뛸 수 있습니다.



이 패치는 AMD / ATI DRM 드라이버로 오디오 컴포넌트 바인딩을 구현합니다. i915 구현과의 가장 큰 차이점은이 바인딩은 완전히 선택 사항이며 즉석에서 비동기 적으로 활성화 할 수 있다는 것입니다. 즉, 드라이버는 DRM 구성 요소가 바인딩 될 때 한 번 HD 오디오 요청하지 않은 이벤트에서 알림 콜백으로 전환합니다. 마찬가지로 DRM 드라이버가 언로드되면 HDMI 이벤트 처리도 레거시 모드로 돌아갑니다.

또한 i915와의 또 다른 차이점은 AMD HDMI가 코덱 드라이버에 구성 요소를 등록하는 반면 i915 HDMI 코덱은 구성 요소 바인딩이 이미 완료되었다고 가정한다는 것입니다. 따라서 AMD 코드는 코덱 종료시 구성 요소 바인딩을 등록 취소합니다.”