Re: MGA driver: SyncOnGreen won't, and DRI (3D accel ) problems.

Chris Worley <[email protected]> 18 Dec 2002 20:32:26 -0700
Newsgroups gmane.comp.xfree86.expert
Message-ID <1040268746.22316.237.camel@xserver>
On Wed, 2002-12-18 at 01:34, Dr Andrew C Aitchison wrote:
> These are in the order of my docs., but they show spaces between some of 
> these registers; the frambuffer driver doesn't have a mapping array for 
> this list of interesting registers to their addresses does it ?

You are correct, the framebuffer driver, to save space, saves the
register state in an 80 byte array (for later retrieval during VT
switching, I think).  There's a parallel array of the actual register
offsets.  This setup helps with registers that must be changed in order;
the linear setup of this array reflects proper order; the code doesn't
have to worry about that.

BUT...

I found the problem (actually, somebody else spotted it).  Although the
mga driver is reaching the statement:

    if (pMga->SyncOnGreen) {
                MGA_NOT_HAL(pReg->DacRegs[MGA1064_GEN_CTL] &= ~0x20);
    	    pReg->ExtVga[3] |= 0x40;
    }

MGA_NOT_HAL not allowing the register to be set.  It's definition is:

    #define MGA_NOT_HAL(x) { \
    	MGAPtr pMga = MGAPTR(pScrn); \
    	if (!pMga->HALLoaded || !HAL_CHIPSETS) { x; } \
    }
    
In this case, both "pMga->HALLoaded" and "HAL_CHIPSETS" are true.  

So, sync-on-green isn't getting set.

Can anybody explain this code?  Where would be a proper place to set the
sync-on-green?

I tried forcing the setting of that register at that place in the code,
and X crashed.  So, it is indeed bad timing to set that register there. 
Unfortunately, it never gets set anywhere else.

Help?

Chris