Weird bug regarding DDC fixed
I just found (by bisecting an issue that was extremely complex to
reproduce) that - by accident - one of my commits was enabling power
management by default, setting the engine clock to 1/2 of the default
clock. *Always*.
Good news is that we haven't received many bug reports about engine
stalls, so we can assume that setting the engine clock is working fine.
At least as long as the engine is idle (which is the case on startup).
This could also explain a few cases where switching VTs during runtime
made the system instable. When something was rendering during that time,
the engine clock might have been changed underneath, and we don't wait
correctly for a paused engine yet.
More importantly, DDC clock is tightly coupled with the engine clock,
and if the engine clock is too low (relatively), DDC might cease to
function. Which was exactly what I was seeing here.
So if you had issues with the modes of your monitor not being detected
correctly lately, please retest with current git master. Chances are it
just works (TM) now.
If you're using ForceLowPowerMode, you'll see that radeonhd uses a
different clock now (the lowest known good one). On some cards this will
be even lower than the previous default/2, on others this might be the
default clock.
If you want to go lower, use LowPowerModeEngineClock to set a lower one,
and negate that number, in order to skip validation. E.g.
Option "ForceLowPowerMode" "on"
Option "LowPowerModeEngineClock" "-200000"
Uff
Matthias
--
Matthias Hopf
On Oct 08, 09 18:02:47 +0200, Matthias Hopf wrote:
More importantly, DDC clock is tightly coupled with the engine clock, and if the engine clock is too low (relatively), DDC might cease to function. Which was exactly what I was seeing here.
The following patch fixes this issue. As it is more invasive than I like
it that late in the release cycle, I will only submit before 1.2.6 if
you guys agree. Given that I changed the default to *not* do low power
mode again, it is certainly no showstopper.
The patch also cleans up rhdGetI2CPrescale() considerably.
Specifically, this bears testing on something between R600 and RV620
(logically, not numerically, RV630, RV670, R680 are pre-R620), and
post-RV620 (RV620, RV635, RS780, RS880, RV7xx).
Matthias
--
Matthias Hopf
2009/10/8 Matthias Hopf
I just found (by bisecting an issue that was extremely complex to reproduce) that - by accident - one of my commits was enabling power management by default, setting the engine clock to 1/2 of the default clock. *Always*.
Good news is that we haven't received many bug reports about engine stalls, so we can assume that setting the engine clock is working fine. At least as long as the engine is idle (which is the case on startup).
This could also explain a few cases where switching VTs during runtime made the system instable. When something was rendering during that time, the engine clock might have been changed underneath, and we don't wait correctly for a paused engine yet.
More importantly, DDC clock is tightly coupled with the engine clock, and if the engine clock is too low (relatively), DDC might cease to function. Which was exactly what I was seeing here.
So if you had issues with the modes of your monitor not being detected correctly lately, please retest with current git master. Chances are it just works (TM) now.
If you're using ForceLowPowerMode, you'll see that radeonhd uses a different clock now (the lowest known good one). On some cards this will be even lower than the previous default/2, on others this might be the default clock. If you want to go lower, use LowPowerModeEngineClock to set a lower one, and negate that number, in order to skip validation. E.g.
Option "ForceLowPowerMode" "on" Option "LowPowerModeEngineClock" "-200000"
Why did you change that to negative? Confusing users & breaking current xorg.configs. Just read value from xorg.conf and write it as negative in driver's variable. pm->variable = -xf86Get.... -- Rafał -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org
On Oct 08, 09 20:10:40 +0200, Rafał Miłecki wrote:
2009/10/8 Matthias Hopf
: If you want to go lower, use LowPowerModeEngineClock to set a lower one, and negate that number, in order to skip validation. E.g. Why did you change that to negative? Confusing users & breaking current xorg.configs.
No, negative means only that validation is skipped. Which typically
should never. It's more for testing than anything else. I haven't
encountered a card yet that has more than 250000 as minimum frequency.
As the algorithm to determine the minimum frequency is neither trivial
nor officially recommended by ATI, I thought it would be a good idea to
allow the user to override the detection.
Matthias
--
Matthias Hopf
W dniu 9 października 2009 11:07 użytkownik Matthias Hopf
No, negative means only that validation is skipped. Which typically should never. It's more for testing than anything else. I haven't encountered a card yet that has more than 250000 as minimum frequency.
(II) RADEONHD(0): Power Management: Known Good Configurations (II) RADEONHD(0): 1 680000 kHz / 800000 kHz / 1.200 V (II) RADEONHD(0): 2 110000 kHz / 405000 kHz / 0.950 V I use Option "LowPowerModeEngineClock" "168750" for 2D & Xv without any problems. And even AtomBIOS table contains value lower than 250000. Do I understand my 168750 won't be valid any more and driver will refuse to use that, until I force it using "-168750"?
As the algorithm to determine the minimum frequency is neither trivial nor officially recommended by ATI, I thought it would be a good idea to allow the user to override the detection.
-- Rafał -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org
W dniu 9 października 2009 11:13 użytkownik Rafał Miłecki
W dniu 9 października 2009 11:07 użytkownik Matthias Hopf
napisał: No, negative means only that validation is skipped. Which typically should never. It's more for testing than anything else. I haven't encountered a card yet that has more than 250000 as minimum frequency.
(II) RADEONHD(0): Power Management: Known Good Configurations (II) RADEONHD(0): 1 680000 kHz / 800000 kHz / 1.200 V (II) RADEONHD(0): 2 110000 kHz / 405000 kHz / 0.950 V
I use Option "LowPowerModeEngineClock" "168750" for 2D & Xv without any problems. And even AtomBIOS table contains value lower than 250000.
Do I understand my 168750 won't be valid any more and driver will refuse to use that, until I force it using "-168750"?
Will driver even use 110000 which is minimum in AtomBIOS table, but lower than 250000? -- Rafał -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org
On Oct 09, 09 11:13:20 +0200, Rafał Miłecki wrote:
W dniu 9 października 2009 11:07 użytkownik Matthias Hopf
napisał: No, negative means only that validation is skipped. Which typically should never. It's more for testing than anything else. I haven't encountered a card yet that has more than 250000 as minimum frequency.
(II) RADEONHD(0): Power Management: Known Good Configurations (II) RADEONHD(0): 1 680000 kHz / 800000 kHz / 1.200 V (II) RADEONHD(0): 2 110000 kHz / 405000 kHz / 0.950 V
I use Option "LowPowerModeEngineClock" "168750" for 2D & Xv without any problems. And even AtomBIOS table contains value lower than 250000.
If the AtomBIOS table contains a known good configuration with < 250000 that one is taken as minimum. If not, it's a bug.
Do I understand my 168750 won't be valid any more and driver will refuse to use that, until I force it using "-168750"?
In your case it should work fine out of the box.
Matthias
--
Matthias Hopf
2009/10/9 Matthias Hopf
On Oct 09, 09 11:13:20 +0200, Rafał Miłecki wrote:
W dniu 9 października 2009 11:07 użytkownik Matthias Hopf
napisał: No, negative means only that validation is skipped. Which typically should never. It's more for testing than anything else. I haven't encountered a card yet that has more than 250000 as minimum frequency.
(II) RADEONHD(0): Power Management: Known Good Configurations (II) RADEONHD(0): 1 680000 kHz / 800000 kHz / 1.200 V (II) RADEONHD(0): 2 110000 kHz / 405000 kHz / 0.950 V
I use Option "LowPowerModeEngineClock" "168750" for 2D & Xv without any problems. And even AtomBIOS table contains value lower than 250000.
If the AtomBIOS table contains a known good configuration with < 250000 that one is taken as minimum. If not, it's a bug.
Ah, I didn't know that part. Thanks for clarifying. I'm absolutely fine with PM in this form, nice job :) -- Rafał -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org
participants (2)
-
Matthias Hopf
-
Rafał Miłecki