Problemas de áudio HD em drivers AMDGPU recebem correção, DRM agora pode lidar com hot-plugging

Linux-Unix / Problemas de áudio HD em drivers AMDGPU recebem correção, DRM agora pode lidar com hot-plugging 2 minutos lidos

AMD



Embora as GPUs Radeon / AMD tenham obtido melhor suporte ao Linux com os modelos de GPU mais recentes, o suporte de áudio foi lamentavelmente negligenciado - até agora. Um patch foi lançado recentemente por Takashi Iwai, da SUSE, que também mantém o subsistema de som no kernel principal do Linux. O remendo aborda alguns problemas gerais com o suporte de áudio AMDGPU.

Os problemas atuais de áudio AMDGPU giram em torno de algumas GPUs para ter suporte de áudio HDMI / DP atrasado pelo código de exibição AMDGPU (DC / DAL) que precisa ser corrigido no kernel, alguns formatos de áudio não são suportados e bugs gerais em certas partes do pilha de driver. No entanto, Takashi Iwai da SUSE lançou um conjunto de patches para os drivers Radeon / AMDGPU DRM.



O que esses patches fazem é fornecer suporte a componente de áudio DRM para os drivers Radeon e AMDGPU Direct Rendering Manager - em poucas palavras, o modo de componente de áudio DRM para interfaces HDMI e DisplayPort permitirá que as leituras de áudio hot-plug e ELD aconteçam, sem acesso de hardware . Isso basicamente significa que pode ser permitido o manuseio correto de hot-plug, mesmo se o sistema estiver em um modo de suspensão em tempo de execução. No entanto, os caminhos de código AMDGPU DC não são colocados corretamente juntos no formulário de patch atual.



Então, basicamente, apenas Radeon e uma parte do AMDGPU são endereçados pelo patch - suporte DC ainda não incluído.



Takashi explicou os patches em detalhes abaixo:

Os drivers de codec AMD / ATI HDMI não tinham a ligação do componente de áudio como o i915, mas funcionou apenas com o evento não solicitado de áudio HD tradicional para a detecção de hotplug HDMI e a leitura ELD depois disso. Isso tem sido um problema de várias maneiras: primeiro de tudo, ele passa pela transição de evento de hardware (de gravação de registro de GPU, acionamento do controlador de áudio HD e, finalmente, tratamento de evento não solicitado de áudio HD), que muitas vezes não é confiável e pode falhar algumas oportunidades. Em segundo lugar, cada manipulação de evento unsol e leitura ELD precisa de ativação / desativação explícita quando o codec está na suspensão do tempo de execução. Por último, mas não menos importante, que é o mais importante, a ativação do hotplug pode ser perdida quando o controlador de áudio HD está em suspensão de tempo de execução. Especialmente o último ponto é um grande problema devido à recente mudança relevante com vga_switcheroo que habilita forçosamente o PM de execução para controladores AMD HDMI.

Esses problemas são resolvidos com a introdução do componente de áudio; a notificação de hotplug é feita por um retorno de chamada de função direto, que é mais preciso e confiável, e pode ser processado sem o acesso ao hardware real, ou seja, nenhum acionador PM de tempo de execução é necessário e o áudio HD obtém o evento mesmo se estiver em tempo de execução suspender. O mesmo para a consulta ELD, já que é lida diretamente dos bytes ELD em cache armazenados no driver DRM, portanto, todo o acesso ao hardware pode ser ignorado.



Então aqui está: este patch implementa a ligação do componente de áudio com o driver AMD / ATI DRM. A maior diferença da implementação do i915 é que essa ligação é totalmente opcional e pode ser ativada de forma assíncrona em tempo real. Ou seja, o driver mudará do evento não solicitado de áudio HD para o retorno de chamada de notificação uma vez quando o componente DRM for vinculado. Da mesma forma, quando o driver DRM é descarregado, o tratamento de eventos HDMI também retorna ao modo legado.

Além disso, outra diferença do i915 é que o AMD HDMI registra o componente no driver do codec, enquanto o codec i915 HDMI assume que a ligação do componente já foi feita. Portanto, o código AMD também cancela o registro da ligação do componente na saída do codec. ”