Summary: | HDMI audio played back at a wrong rate | ||
---|---|---|---|
Product: | DRI | Reporter: | Tvrtko Ursulin <tvrtko.ursulin> |
Component: | DRM/Radeon | Assignee: | Default DRI bug account <dri-devel> |
Status: | RESOLVED FIXED | QA Contact: | |
Severity: | normal | ||
Priority: | medium | CC: | ckoenig.leichtzumerken, teg |
Version: | unspecified | ||
Hardware: | x86-64 (AMD64) | ||
OS: | Linux (All) | ||
Whiteboard: | |||
i915 platform: | i915 features: | ||
Attachments: |
Description
Tvrtko Ursulin
2012-02-28 03:13:42 UTC
Hi Tvrtko, Can you install rateontool (avivotool) from git master, and provide output from it? Installation: git clone git://people.freedesktop.org/~airlied/radeontool cd radeontool ./autogen.sh && make && sudo make install Grabbing regs dump: [start playing your audio over HDMI] avivotool regs hdmi You can easily save output to the file by using avivotool regs hdmi > dump.txt Please provide requested dump. Created attachment 57759 [details]
"avivotool regs hdmi" output while audio was playing
I have experienced a possibly similar issue, I could only reproduce it in the following scenario, so maybe this can be another data point: A DVI output and a HDMI output are connected to the same graphics card. If their resolutions are different the pitch is wrong (the more different the resolutions the more wrong it is). However, if I unplug the DVI before booting the machine, or set the HDMI to the same resolution as the DVI the audio is fine. I don't have the setup at the moment to verify that we are seeing the same bug, in which case I apologise for the noise. It's not that in my case since the motherboard I am using doesn't even have DVI. It has VGA and HDMI, with only HDMI connected. Monitor is Dell 2408WFP in case it matters. 00007d04 02000000 (33554432) This register is 0x7c30 + R600_HDMI_IEC60958_1. AFAWK value 0x02000000 means 48000 rate. I've to understand how driver handles rates. Just to clarify, it is possible I was playing back at 48kHz when collecting the register dump. I was trying both 44.1kHz and 48kHz, the latter just to make sure my monitor is not mishandling the former, but in both cases heard and observed playback rate was wrong. Created attachment 58209 [details] [review] drm/radeon/kms/audio: read correct regs on Evergreen I guess this patch can fix the issue. My problem is that I still don't know how much Evergreen is different from older cards. I still can't take a decision if it's worth splitting HDMI/audio code into R600 vs. Evergreen or not... Created attachment 58223 [details]
avivotool register dump while 44100 sample was playing
Unfortunately playback rate is still wrong. I made another register dump while I was playing a 44100Hz wave file directly to the HDMI device. This file is 2m49s long, while playing it over HDMI takes 4m20s. Which gives us the same apparent 28665Hz playback rate as originally observed.
Ahh, sorry, I didn't understand your first problem description you posted in this bug report. I though the playback speed is alright, just the sampling rate used is incorrect. The problem most probably lays in audio clocks. Values used by radeon seem to be: EVERGREEN_AUDIO_PLL1_MUL 00075300 EVERGREEN_AUDIO_PLL1_DIV 00177fa0 EVERGREEN_AUDIO_PLL1_UNK 00000071 Do you have fglrx installed? Is this possible for you to switch to the fglrx for a moment and do similar dump (using avivotool) while playing audio with it? To make debugging quicker: can you also dump "avivotool regsrange 0x500 0x600" just in case fglrx uses some other registers? (In reply to comment #5) > Monitor is Dell 2408WFP in case it matters. Are you using 1900x1200 resolution? Can you try some smaller one? Does it help? (In reply to comment #11) > (In reply to comment #5) > > Monitor is Dell 2408WFP in case it matters. > > Are you using 1900x1200 resolution? Can you try some smaller one? Does it help? It changes the error: 1920x1200: 4m20s = 1.53x too slow 1280x1024: 3m2s = 1.07x too slow 1024x768: 1m49s = 1.55x too fast 800x600: 1m7s = 2.52x too fast Sound also comes with various distortions in each test. Is this enough of a hint on what is going wrong or you would still like me to test with fglrx? It may take some time to set it up since I have no experience with it. I'm afraid I can not do anything without dump from fglrx :( There are 4 clocks related registers we are aware of, but I don't know how else we can try to program them. There may be also some other clock registers. I'm afraid only dump from fglrx can give us some hints and I can't get that info from my card, since it's working pretty well. Created attachment 58306 [details]
avivotool register dump under fglrx
I've managed to get fglrx running and initially playback speed was fine but audio quite distorted (hard to describe). I've noticed in the output a mention of 1024x768 output resolution on the LVDS connector which was unexpected, since the motherboard in question only has HDMI and VGA outputs. I disabled LVDS with xranrd and then audio was perfect. I will attach that register dump as well.
Created attachment 58307 [details]
avivotool register dump under fglrx with non-existant LVDS output turned off
Tvrtko: thanks a lot for your effort and dumps coming from fglrx. What I can say now: it seems fglrx is using the same registers (EVERGREEN_AUDIO_PLL1_MUL and EVERGREEN_AUDIO_PLL1_DIV) for your card. However: 1) radeon uses 480'000 for MUL 2) fglrx uses 960'000 for MUL On the other hand fglrx uses 0x72 instead of 0x71 for EVERGREEN_AUDIO_PLL1_UNK. Maybe that 0x2 is some DIV? Maybe it tells GPU to take 960'000 and divide it by 2? I've to investigate meaning of the register, but you gave me a track to follow, thanks a lot for your effors! I'll take a look on that after my vacations (next week). If you wish, you can try switching to radeon and: 1) Start playback 2) Make sure speed is still wrong 3) Execute: "avivotool regset 0x05b0 0x000ea600" 4) Execute: "avivotool regset 0x05bc 0x00000072" Does it help? Ok, I will try to get you the documentation for the PLL regs, they are not DRM or IP related. So there is a slightly chance that we can release them. Christian. (In reply to comment #17) > If you wish, you can try switching to radeon and: > 1) Start playback > 2) Make sure speed is still wrong > 3) Execute: "avivotool regset 0x05b0 0x000ea600" > 4) Execute: "avivotool regset 0x05bc 0x00000072" > > Does it help? Unfortunately not. First line speeds it up (way to much) and the second one brings it down into too slow territory again. Hi, i have same problem hdmi audio slow. Radeon 5450. But dual screen hdmi+crt 1920 x 1080 audio works fine. ok 1280x720 radeon 5450 works avivotool regset 0x05b0 0x00138800 works good vincenzo@AthlonII-260:~$ sudo avivotool regset 0x05b0 0x00138800 OLD: 0x05b0 (05b0) 0x00075300 (480000) NEW: 0x05b0 (05b0) 0x00138800 (1280000) work only 1280x720 slow with 1920 x 1080 sudo avivotool regset 0x05b0 0x00271000 works good whit 1920 x 1080 Please see: http://lists.freedesktop.org/archives/dri-devel/2012-March/020717.html http://lists.freedesktop.org/archives/dri-devel/2012-March/020855.html http://lists.freedesktop.org/archives/dri-devel/2012-March/020857.html http://people.freedesktop.org/~agd5f/0001-WIP-port-of-hdmi-dp-audio-code-to-newer-kernel.patch As per the comments in the last patch: + /* Express [24MHz / target pixel clock] as an exact rational + * number (coefficient of two integer numbers. DCCG_AUDIO_DTOx_PHASE + * is the numerator, DCCG_AUDIO_DTOx_MODULE is the denominator + */ Hi i can't patch a kernel 3.4.0-rc1 i can't patch a kernel 3.3.0 :-( error radeon display Error when compiling. hi , i have compiled kernel 3.5-rc1 but radeon 5450 audio slow. kernel 3.5.0-rc2 audio workgood. i have 2 monitor hdmi, after I changed the initial resolution of the monitor works fine 2. example 1 monitor 1920 x 1080 works 2 monitor 1920 x 1080 works. after i turn off monitor 1, audio monitor 2 slow. configure monitor 2 and after all audio works good 1 & 2. Yeah, the audio rate is controlled by the last output changed. We should switch to another output if the output driving the audio signal is turned off. It's on the todo list. thanks Christian König and Rafał Miłecki for this work. Sorry my english is bad, i speak only italian :-). Just testing with 3.6.0-rc3+ from today's GIT and I can reproduce some sort of sound corruption depending on the video output resolution. For example, 1360x768 and audio plays fine, while 1366x768 and it is bad. avivotool register dump says this is the difference between good and bad setup: -EVERGREEN_AUDIO_PLL1_DIV 000d0bd8 +EVERGREEN_AUDIO_PLL1_DIV 000d1ae2 Any objections closing this four year old bug report now? |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.