Re: [radeonhd] statusreport ASUS pundit2 AM2-690G (RS690)
Denise H. G. writes:
Hi
I've got an RS690 chip with pci id 0x791E. It is onboard vga shipped with Asus M2A-VM motherboard. By using radeonhd driver I also got VSync problems. And I found that for RS690 we should not write ZERO to the register D1CRTC_V_SYNC_A, otherwise the screen will blank off on VT switching. We can safely write non-zero Values to D1CRTC_V_SYNC_A but never ZERO. Anyway, this works for my chip. I don't know if will apply to yours.
Writing 0 to D1CRTC_V_SYNC_A is certainly wrong. It will most likely lead to the behavior you are seeing. You said you are seeing a blank screen on restore - Did you find out when this is written? Did this happen during restore? Cheers, Egbert. -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org
Egbert Eich
Denise H. G. writes:
Hi
I've got an RS690 chip with pci id 0x791E. It is onboard vga shipped with Asus M2A-VM motherboard. By using radeonhd driver I also got VSync problems. And I found that for RS690 we should not write ZERO to the register D1CRTC_V_SYNC_A, otherwise the screen will blank off on VT switching. We can safely write non-zero Values to D1CRTC_V_SYNC_A but never ZERO. Anyway, this works for my chip. I don't know if will apply to yours.
Writing 0 to D1CRTC_V_SYNC_A is certainly wrong. It will most likely lead to the behavior you are seeing. You said you are seeing a blank screen on restore - Did you find out when this is written? Did this happen during restore?
In ScreenInit there is a rhdSave(), which saves the initial register values. During this course it saves ZERO for D1CRTC_V_SYNC_A. While restoring, it always restores ZERO for D1CRTC_V_SYNC_A, despite of whatever we write to D1CRTC_V_SYNC_A after the rhdSave(). I just put the following in `rhd_crtc.c' to work around the problem for RS690: in DxSave(): "if (INREG(Crtc, RegOff + D1CRTC_V_SYNC_A)) Store->CrtcVSyncA = INREG(Crtc, RegOff + D1CRTC_V_SYNC_A);" in DxRestore(): "if (Store->CrtcVSyncA) OUTREG(Crtc, RegOff + D1CRTC_V_SYNC_A, Store->CrtcVSyncA);" I don't know if it is good, but this solves the VT switching problem for RS690. hehe
Cheers, Egbert.
-- -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org
On Thu, Nov 29, 2007 at 08:28:30AM +0800, Denise H. G. wrote:
In ScreenInit there is a rhdSave(), which saves the initial register values. During this course it saves ZERO for D1CRTC_V_SYNC_A. While restoring, it always restores ZERO for D1CRTC_V_SYNC_A, despite of whatever we write to D1CRTC_V_SYNC_A after the rhdSave().
I just put the following in `rhd_crtc.c' to work around the problem for RS690:
in DxSave():
Please remove this check. Always store the value. Restore will catch the value properly on its own.
"if (INREG(Crtc, RegOff + D1CRTC_V_SYNC_A)) Store->CrtcVSyncA = INREG(Crtc, RegOff + D1CRTC_V_SYNC_A);"
Please put a RHDDebug(Crtc->scrnIndex, "%s: D1CRTC_V_SYNC_A = 0x%08X\n", __func__, Store->Store->CrtcVSyncA); here, so that the value of this register is read out to the log, so that we can be absolutely certain.
in DxRestore():
"if (Store->CrtcVSyncA) OUTREG(Crtc, RegOff + D1CRTC_V_SYNC_A, Store->CrtcVSyncA);"
I don't know if it is good, but this solves the VT switching problem for RS690. hehe
This seems like a rather bad idea in itself, but on the other hand, it is a _very_ good lead to the cause and a real solution. Thanks, Luc Verhaegen. SUSE/Novell X Driver Developer, Night shift. -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org
Luc Verhaegen
On Thu, Nov 29, 2007 at 08:28:30AM +0800, Denise H. G. wrote:
In ScreenInit there is a rhdSave(), which saves the initial register values. During this course it saves ZERO for D1CRTC_V_SYNC_A. While restoring, it always restores ZERO for D1CRTC_V_SYNC_A, despite of whatever we write to D1CRTC_V_SYNC_A after the rhdSave().
I just put the following in `rhd_crtc.c' to work around the problem for RS690:
in DxSave():
Please remove this check. Always store the value. Restore will catch the value properly on its own.
"if (INREG(Crtc, RegOff + D1CRTC_V_SYNC_A)) Store->CrtcVSyncA = INREG(Crtc, RegOff + D1CRTC_V_SYNC_A);"
Please put a
RHDDebug(Crtc->scrnIndex, "%s: D1CRTC_V_SYNC_A = 0x%08X\n", __func__, Store->Store->CrtcVSyncA);
here, so that the value of this register is read out to the log, so that we can be absolutely certain.
in DxRestore():
"if (Store->CrtcVSyncA) OUTREG(Crtc, RegOff + D1CRTC_V_SYNC_A, Store->CrtcVSyncA);"
I don't know if it is good, but this solves the VT switching problem for RS690. hehe
This seems like a rather bad idea in itself, but on the other hand, it is a _very_ good lead to the cause and a real solution.
Thanks,
OK, I'll have a try. Thanks for your reply.
Luc Verhaegen. SUSE/Novell X Driver Developer, Night shift.
-- -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org
Some fix to the DAC code was pushed now which might influence this behaviour. Please test latest git. Thanks, Luc Verhaegen. SUSE/Novell X Driver Developer. -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org
On Wed, Dec 12, 2007 at 06:51:35PM +0100, Luc Verhaegen wrote:
Some fix to the DAC code was pushed now which might influence this behaviour.
Please test latest git.
The actual cause of this issue is indeed the fact that VSYNC is nulled, and that upon prograömming it again, the VGA engine will not latch its timing correctly, and therefor produces a blank image. I have put a variation of your solution into the driver. So should work now, Thanks, Luc Verhaegen. SUSE/Novell X Driver Developer. -- To unsubscribe, e-mail: radeonhd+unsubscribe@opensuse.org For additional commands, e-mail: radeonhd+help@opensuse.org
participants (3)
-
darcsis@gmail.com
-
Egbert Eich
-
Luc Verhaegen