Problemer med HD-lyd i AMDGPU-drivere modtager programrettelse, DRM kan nu håndtere hot-plugging

Linux-Unix / Problemer med HD-lyd i AMDGPU-drivere modtager programrettelse, DRM kan nu håndtere hot-plugging 2 minutter læst

AMD



Mens Radeon / AMD GPU'er har fået bedre Linux-understøttelse med nyere GPU-modeller, er lydstøtten sørgeligt forsømt - indtil nu. En patch blev for nylig skubbet af SUSEs Takashi Iwai, som også vedligeholder lydundersystemet i Linux's hovedlinjekerne. Plasteret løser nogle overordnede problemer med AMDGPUs lydsupport.

Nuværende AMDGPU-lydproblemer drejer sig om, at nogle GPU'er har HDMI / DP-lydsupport, der forsinkes af AMDGPU Display Code (DC / DAL), der skal patches i kernen, et par lydformater understøttes ikke og generelle fejl i visse dele af driverstak. SUSEs Takashi Iwai har imidlertid frigivet et sæt patches til Radeon / AMDGPU DRM-drivere.



Hvad disse programrettelser gør er at levere DRM-lydkomponentunderstøttelse til Radeon- og AMDGPU Direct Rendering Manager-drivere - i en nøddeskal giver DRM-lydkomponenttilstand til HDMI- og DisplayPort-grænseflader mulighed for lyd hot-plug og ELD-udlæsninger til at ske, uden hardware adgang . Dette betyder grundlæggende, at det kan tillades til korrekt hot-plug-håndtering, selvom systemet er i en kørselstidssuspenderingstilstand. AMDGPU DC-kodestierne er dog ikke korrekt sammensat i den aktuelle patchform.



Så dybest set er kun Radeon og en del af AMDGPU adresseret af patch - DC-support er endnu ikke inkluderet.



Takashi forklarede pletterne i dybden nedenfor:

AMD / ATI HDMI-codec-drivere havde ikke lydkomponentbinding som i915, men det fungerede kun med den traditionelle HD-lyd uopfordrede begivenhed til HDMI hotplug-detektion og ELD-læsning derefter. Dette har været et problem på mange måder: først og fremmest går det igennem overgangen til hardwarehændelse (fra GPU-registerskrivning, HD-lydcontroller-udløser og endelig til HD-lyd uopfordret håndtering af begivenheder), som ofte er upålidelig og måske går glip nogle muligheder. For det andet har hver ikke-hændelseshåndteringshåndtering og ELD-oplæsning brug for den eksplicit strøm op / ned, når codec er i kørselssuspendering. Sidst men ikke mindst, hvilket er det vigtigste, kan hotplug-wakeup gå glip af, når HD-lydcontrolleren er i suspenderet runtime. Især det sidste punkt er et stort problem på grund af den nylige ændring, der er relevant med vga_switcheroo, der med magt muliggør runtime PM til AMD HDMI-controllere.

Disse problemer løses ved at introducere lydkomponenten; hotplug-meddelelsen udføres ved en direkte funktion tilbagekaldelse, som er mere nøjagtig og pålidelig, og den kan behandles uden den egentlige hardwareadgang, dvs. ingen PM-trigger til runtime er nødvendig, og HD-lyden får begivenheden, selvom den er i runtime suspendere. Det samme for ELD-forespørgsel, da det læses direkte fra de cachede ELD-byte, der er gemt i DRM-driveren, og derfor kan hele hardwareadgangen springes over.



Så her er det: denne patch implementerer lydkomponentbinding med AMD / ATI DRM-driver. Den største forskel fra i915-implementeringen er, at denne binding er fuldt valgfri, og den kan aktiveres asynkront på farten. Det vil sige, at driveren skifter fra HD-lyd uopfordret begivenhed til underretning tilbagekald en gang, når DRM-komponenten bliver bundet. Tilsvarende, når DRM-driveren bliver aflæst, vender HDMI-hændelseshåndteringen også tilbage til den ældre tilstand.

En anden forskel fra i915 er også, at AMD HDMI registrerer komponenten i codec-driveren, mens i915 HDMI-codec antager, at komponentbinding allerede var gjort. Derfor afregistrerer AMD-kode også komponentbinding ved codec-udgangen. ”