> > barely usable, so I would include it for now. If I manage to come up > > with anything that fixes the problem completely, it will no doubt depend > > on that patch. > > Okay. I just added a TODO item for this.
The following patch helps immensely. In fact, I could be hallucinating, but it seems like the secondary head is now better than the primary one. This includes the previous patch upon which I claimed this would depend; I can separate it out if necessary. I assume this won't negatively affect any other cards, but I have no way of testing that. Also, I don't know that all of these writes are necessary. If I recall correctly, the ones with the most impact are the TextureColorMode, ChipConfig, FIFOControl, and the bitmasks. Let me know how to proceed. --- xfree86-4.3.0/build-tree/xc/programs/Xserver/hw/xfree86/drivers/glint/glint_regs.h 2003-01-11 22:55:47.000000000 -0500 +++ xfree86-lessfucked/build-tree/xc/programs/Xserver/hw/xfree86/drivers/glint/glint_regs.h 2004-04-08 12:09:02.000000000 -0400 @@ -75,6 +75,10 @@ ((pGlint->PciInfo->subsysCard == 0x0100) || \ (pGlint->PciInfo->subsysCard == 0x0002))) +/* Tech-Source Raptor GFX 8P (Permedia 2V) */ +#define IS_TSGFX8P ((pGlint->PciInfo->subsysVendor == 0x1227) && \ + (pGlint->PciInfo->subsysCard == 0x0006)) + /********************************************** * GLINT 500TX Configuration Region Registers * ***********************************************/ @@ -294,6 +298,14 @@ #define PMFifoControl 0x3078 /* Permedia 2 RAMDAC Registers */ +#define PM2DACFIFOControl 0x3078 +#define PM2DACFilterMode 0x8c00 +#define PM2DACFBSourceOffset 0x8a88 +#define PM2DACFBReadPixel 0x8ad0 +#define PM2DACAreaStippleMode 0x81a0 +#define PM2DACLogicalOpMode 0x8828 +#define PM2DACTextureColorMode 0x8680 + #define PM2DACWriteAddress 0x4000 #define PM2DACIndexReg 0x4000 #define PM2DACData 0x4008 --- xfree86-4.3.0/build-tree/xc/programs/Xserver/hw/xfree86/drivers/glint/pm2v_dac.c 2002-05-07 19:15:59.000000000 -0400 +++ xfree86-lessfucked/build-tree/xc/programs/Xserver/hw/xfree86/drivers/glint/pm2v_dac.c 2004-04-08 12:08:14.000000000 -0400 @@ -79,6 +79,36 @@ { GLINTPtr pGlint = GLINTPTR(pScrn); + /* fun stuff */ + Permedia2vOutIndReg(pScrn, PM2VDACRDMiscControl, 0x00, 0); + GLINT_SLOW_WRITE_REG(0xffffffff,PMBypassWriteMask); + GLINT_SLOW_WRITE_REG(GLINT_READ_REG(ChipConfig)&~0x06,ChipConfig); + GLINT_SLOW_WRITE_REG(0x01,Aperture1); + GLINT_SLOW_WRITE_REG(0xd2,PMHTotal); + GLINT_SLOW_WRITE_REG(0x33,PMHbEnd); + GLINT_SLOW_WRITE_REG(0x33,PMHgEnd); + GLINT_SLOW_WRITE_REG(0xa0,PMScreenStride); + GLINT_SLOW_WRITE_REG(0x06,PMHsStart); + GLINT_SLOW_WRITE_REG(0x14,PMHsEnd); + GLINT_SLOW_WRITE_REG(0x0429,PMVTotal); + GLINT_SLOW_WRITE_REG(0x2a,PMVbEnd); + GLINT_SLOW_WRITE_REG(0x00,PMVsStart); + GLINT_SLOW_WRITE_REG(0x03,PMVsEnd); + GLINT_SLOW_WRITE_REG(0x00,PMScreenBase); + GLINT_SLOW_WRITE_REG(0x00,PMVideoControl); + Permedia2vOutIndReg(pScrn, PM2VDACRDOverlayKey, 0x00, 0); + Permedia2vOutIndReg(pScrn, PM2VDACRDColorFormat, 0x00, 0x0e); + Permedia2vOutIndReg(pScrn, PM2VDACRDDClk0PreScale, 0x00, 0x0c); + Permedia2vOutIndReg(pScrn, PM2VDACRDDClk0FeedbackScale, 0x00, 0xb5); + Permedia2vOutIndReg(pScrn, PM2VDACRDDClk0PostScale, 0x00, 0x01); + GLINT_SLOW_WRITE_REG(0x00,PM2DACFIFOControl); + GLINT_SLOW_WRITE_REG(0x0400,PM2DACFilterMode); + GLINT_SLOW_WRITE_REG(0x00,PM2DACFBSourceOffset); + GLINT_SLOW_WRITE_REG(0x00,PM2DACFBReadPixel); + GLINT_SLOW_WRITE_REG(0x00,PM2DACAreaStippleMode); + GLINT_SLOW_WRITE_REG(0x00,PM2DACLogicalOpMode); + GLINT_SLOW_WRITE_REG(0x00,PM2DACTextureColorMode); + /* disable MCLK */ Permedia2vOutIndReg(pScrn, PM2VDACRDMClkControl, 0x00, 0); @@ -96,6 +126,9 @@ /* Now re-boot the SGRAM's */ GLINT_SLOW_WRITE_REG(0xe6002021,PMMemConfig); GLINT_SLOW_WRITE_REG(0x00000020,PMBootAddress); + + /* more fun stuff */ + GLINT_SLOW_WRITE_REG(0xffffffff,PMFramebufferWriteMask); } void @@ -113,21 +146,21 @@ Permedia2VPreInitSecondary(pScrn); } -#if defined(__alpha__) +#if defined(__alpha__) || defined(__sparc__) /* * On Alpha, we have to init secondary PM2V cards, since * int10 cannot be run on the OEMed cards with VGA disable * jumpers. */ if (!xf86IsPrimaryPci(pGlint->PciInfo)) { - if ( IS_QPM2V ) { + if ( (IS_QPM2V) || (IS_TSGFX8P) ) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, "PM2V secondary: initializing\n"); Permedia2VPreInitSecondary(pScrn); } } -#endif /* __alpha__ */ +#endif /* __alpha__ || __sparc__ */ } Bool