Проблемы с HD-аудио в драйверах AMDGPU получают исправления, DRM теперь может обрабатывать горячее подключение

Linux-Unix / Проблемы с HD-аудио в драйверах AMDGPU получают исправления, DRM теперь может обрабатывать горячее подключение 2 минуты на чтение

AMD



В то время как графические процессоры Radeon / AMD получают лучшую поддержку Linux с новыми моделями графических процессоров, поддержка звука до сих пор игнорировалась. Патч был недавно выпущен Такаши Иваи из SUSE, который также обслуживает звуковую подсистему в основном ядре Linux. Патч решает некоторые общие проблемы с поддержкой звука AMDGPU.

Текущие проблемы со звуком AMDGPU связаны с некоторыми графическими процессорами, из-за которых поддержка звука HDMI / DP задерживается из-за кода дисплея AMDGPU (DC / DAL), требующего исправления в ядре, нескольких аудиоформатов, которые не поддерживаются, и общих ошибок в некоторых частях стек драйверов. Однако Такаши Иваи из SUSE выпустил набор исправлений для драйверов DRM Radeon / AMDGPU.



Эти исправления обеспечивают поддержку аудиокомпонентов DRM для драйверов Radeon и AMDGPU Direct Rendering Manager - вкратце, режим аудиокомпонентов DRM для интерфейсов HDMI и DisplayPort позволит выполнять «горячее» подключение аудио и считывание ELD, без доступа к оборудованию . Это в основном означает, что это может быть разрешено для правильной обработки горячей замены, даже если система находится в режиме ожидания во время выполнения. Однако пути кода AMDGPU DC неправильно собраны вместе в текущей форме исправления.



Таким образом, патч адресован только Radeon и часть AMDGPU - поддержка DC еще нет включены.



Такаши подробно объяснил патчи ниже:

Драйверы кодека AMD / ATI HDMI не имели привязки аудиокомпонентов, как i915, но работали только с традиционным событием незапрошенного HD-аудио для обнаружения горячего подключения HDMI и последующего чтения ELD. Это было проблемой во многих отношениях: во-первых, она проходит через переход от аппаратного события (от записи в регистр графического процессора, запуска контроллера HD-аудио и, наконец, к обработке незапрошенных событий HD-аудио), что часто ненадежно и может пропустить некоторые возможности. Во-вторых, для каждой обработки невыполненных событий и чтения ELD требуется явное включение / выключение питания, когда кодек находится в состоянии приостановки выполнения. И последнее, но не менее важное: пробуждение от горячего подключения может быть пропущено, когда HD-аудио контроллер находится в режиме ожидания. Последний пункт представляет собой большую проблему из-за недавнего изменения, касающегося vga_switcheroo, которое принудительно включает PM времени выполнения для контроллеров AMD HDMI.

Эти проблемы решаются введением аудиокомпонента; уведомление о горячем подключении выполняется прямым обратным вызовом функции, который является более точным и надежным, и его можно обрабатывать без фактического доступа к оборудованию, то есть не требуется триггер PM во время выполнения, и HD-аудио получает событие, даже если оно находится во время выполнения приостановить. То же самое и с запросом ELD, поскольку он читается непосредственно из кешированных байтов ELD, хранящихся в драйвере DRM, поэтому весь доступ к оборудованию можно пропустить.



Итак, вот он: этот патч реализует привязку аудиокомпонентов с драйвером AMD / ATI DRM. Самым большим отличием от реализации i915 является то, что эта привязка является полностью необязательной и может быть включена асинхронно на лету. То есть драйвер переключится с незапрошенного события HD-аудио на обратный вызов уведомления один раз, когда компонент DRM будет привязан. Точно так же, когда драйвер DRM выгружается, обработка событий HDMI также возвращается в устаревший режим.

Кроме того, еще одно отличие от i915 заключается в том, что AMD HDMI регистрирует компонент в драйвере кодека, тогда как кодек i915 HDMI предполагает, что привязка компонента уже выполнена. Следовательно, код AMD также отменяет регистрацию привязки компонентов на выходе кодека ».