Module Name: xsrc
Committed By: macallan
Date: Tue Oct 6 20:28:14 UTC 2009
Modified Files:
xsrc/external/mit/xf86-video-newport/dist/src: newport_cmap.c
newport_driver.c newport_regs.c newport_regs.h
Log Message:
make this work in the New Order Of Things(tm):
- make Xorg -configure work again
- fix the DCB timing when talking to XMAP9 to the values used by the kernel,
now colours look right on my Indy and all the randomness when starting
X is gone
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.1 -r1.2 \
xsrc/external/mit/xf86-video-newport/dist/src/newport_cmap.c \
xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.c \
xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.h
cvs rdiff -u -r1.4 -r1.5 \
xsrc/external/mit/xf86-video-newport/dist/src/newport_driver.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: xsrc/external/mit/xf86-video-newport/dist/src/newport_cmap.c
diff -u xsrc/external/mit/xf86-video-newport/dist/src/newport_cmap.c:1.1.1.1 xsrc/external/mit/xf86-video-newport/dist/src/newport_cmap.c:1.2
--- xsrc/external/mit/xf86-video-newport/dist/src/newport_cmap.c:1.1.1.1 Sat Feb 14 03:04:46 2009
+++ xsrc/external/mit/xf86-video-newport/dist/src/newport_cmap.c Tue Oct 6 20:28:14 2009
@@ -71,7 +71,8 @@
}
#endif
for(i = 0; i < 256; i++) {
- NewportCmapSetRGB(pNewport->pNewportRegs, i, pNewport->txt_colormap[i]);
+ NewportCmapSetRGB(pNewport->pNewportRegs, i,
+ pNewport->txt_colormap[i]);
}
}
@@ -80,8 +81,8 @@
static void NewportCmapFifoWait(NewportRegsPtr pNewportRegs)
{
while(1) {
- pNewportRegs->set.dcbmode = (NPORT_DMODE_ACM0 | NCMAP_PROTOCOL |
- NCMAP_REGADDR_SREG | NPORT_DMODE_W1);
+ pNewportRegs->set.dcbmode = (NPORT_DMODE_ACM0 | NCMAP_PROTOCOL |
+ NCMAP_REGADDR_SREG | NPORT_DMODE_W1);
if(!(pNewportRegs->set.dcbdata0.bytes.b3 & 4))
break;
}
@@ -91,6 +92,7 @@
/* set the colormap entry at addr to color */
void NewportCmapSetRGB( NewportRegsPtr pNewportRegs, unsigned short addr, LOCO color)
{
+ uint32_t colour;
NewportWait(pNewportRegs); /* this one should not be necessary */
NewportBfwait(pNewportRegs);
pNewportRegs->set.dcbmode = (NPORT_DMODE_ACMALL | NCMAP_PROTOCOL |
@@ -99,9 +101,9 @@
pNewportRegs->set.dcbdata0.hwords.s1 = addr;
pNewportRegs->set.dcbmode = (NPORT_DMODE_ACMALL | NCMAP_PROTOCOL |
NCMAP_REGADDR_PBUF | NPORT_DMODE_W3);
- pNewportRegs->set.dcbdata0.all = (color.red << 24) |
- (color.green << 16) |
+ colour = (color.red << 24) | (color.green << 16) |
(color.blue << 8);
+ pNewportRegs->set.dcbdata0.all = colour;
}
/* get the colormap entry at addr */
Index: xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.c
diff -u xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.c:1.1.1.1 xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.c:1.2
--- xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.c:1.1.1.1 Sat Feb 14 03:04:46 2009
+++ xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.c Tue Oct 6 20:28:14 2009
@@ -14,19 +14,19 @@
void
NewportVc2Set(NewportRegsPtr pNewportRegs, unsigned char vc2Ireg, unsigned short val)
{
- pNewportRegs->set.dcbmode = (NPORT_DMODE_AVC2 | VC2_REGADDR_INDEX | NPORT_DMODE_W3 |
- NPORT_DMODE_ECINC | VC2_PROTOCOL);
+ pNewportRegs->set.dcbmode = (NPORT_DMODE_AVC2 | VC2_REGADDR_INDEX |
+ NPORT_DMODE_W3 | NPORT_DMODE_ECINC | VC2_PROTOCOL);
pNewportRegs->set.dcbdata0.all = (vc2Ireg << 24) | (val << 8);
}
unsigned short
NewportVc2Get(NewportRegsPtr pNewportRegs, unsigned char vc2Ireg)
{
- pNewportRegs->set.dcbmode = (NPORT_DMODE_AVC2 | VC2_REGADDR_INDEX | NPORT_DMODE_W1 |
- NPORT_DMODE_ECINC | VC2_PROTOCOL);
+ pNewportRegs->set.dcbmode = (NPORT_DMODE_AVC2 | VC2_REGADDR_INDEX |
+ NPORT_DMODE_W1 | NPORT_DMODE_ECINC | VC2_PROTOCOL);
pNewportRegs->set.dcbdata0.bytes.b3 = vc2Ireg;
- pNewportRegs->set.dcbmode = (NPORT_DMODE_AVC2 | VC2_REGADDR_IREG | NPORT_DMODE_W2 |
- NPORT_DMODE_ECINC | VC2_PROTOCOL);
+ pNewportRegs->set.dcbmode = (NPORT_DMODE_AVC2 | VC2_REGADDR_IREG |
+ NPORT_DMODE_W2 | NPORT_DMODE_ECINC | VC2_PROTOCOL);
return pNewportRegs->set.dcbdata0.hwords.s1;
}
@@ -106,7 +106,7 @@
while(1) {
NewportBfwait( pNewportRegs);
pNewportRegs->set.dcbmode = (xmapChip | R_DCB_XMAP9_PROTOCOL |
- XM9_CRS_FIFO_AVAIL | NPORT_DMODE_W1);
+ XM9_CRS_FIFO_AVAIL | NPORT_DMODE_W1);
if( (pNewportRegs->set.dcbdata0.bytes.b3) & 7 )
break;
}
Index: xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.h
diff -u xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.h:1.1.1.1 xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.h:1.2
--- xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.h:1.1.1.1 Sat Feb 14 03:04:46 2009
+++ xsrc/external/mit/xf86-video-newport/dist/src/newport_regs.h Tue Oct 6 20:28:14 2009
@@ -397,8 +397,8 @@
# define XM9_CRS_FIFO_AVAIL (2 << DCB_CRS_SHIFT)
# define XM9_FIFO_0_AVAIL 0
# define XM9_FIFO_1_AVAIL 1
-# define XM9_FIFO_2_AVAIL 3
-# define XM9_FIFO_3_AVAIL 2
+# define XM9_FIFO_2_AVAIL 2
+# define XM9_FIFO_3_AVAIL 3
# define XM9_FIFO_FULL XM9_FIFO_0_AVAIL
# define XM9_FIFO_EMPTY XM9_FIFO_3_AVAIL
# define XM9_CRS_CURS_CMAP_MSB (3 << DCB_CRS_SHIFT)
@@ -412,7 +412,7 @@
(setup << DCB_CSSETUP_SHIFT)| \
(width << DCB_CSWIDTH_SHIFT))
-#define W_DCB_XMAP9_PROTOCOL DCB_CYCLES (2, 1, 0)
+#define W_DCB_XMAP9_PROTOCOL DCB_CYCLES (1, 2, 3)
#define WSLOW_DCB_XMAP9_PROTOCOL DCB_CYCLES (5, 5, 0)
#define WAYSLOW_DCB_XMAP9_PROTOCOL DCB_CYCLES (12, 12, 0)
#define R_DCB_XMAP9_PROTOCOL DCB_CYCLES (2, 1, 3)
Index: xsrc/external/mit/xf86-video-newport/dist/src/newport_driver.c
diff -u xsrc/external/mit/xf86-video-newport/dist/src/newport_driver.c:1.4 xsrc/external/mit/xf86-video-newport/dist/src/newport_driver.c:1.5
--- xsrc/external/mit/xf86-video-newport/dist/src/newport_driver.c:1.4 Thu Jun 25 00:59:57 2009
+++ xsrc/external/mit/xf86-video-newport/dist/src/newport_driver.c Tue Oct 6 20:28:14 2009
@@ -246,7 +246,8 @@
static void
NewportIdentify(int flags)
{
- xf86PrintChipsets( NEWPORT_NAME, "driver for Newport Graphics Card", NewportChipsets);
+ xf86PrintChipsets( NEWPORT_NAME, "driver for Newport Graphics Card",
+ NewportChipsets);
}
static Bool
@@ -266,9 +267,24 @@
if ( numUsed <= 0 )
return FALSE;
- if(flags & PROBE_DETECT)
+ if ( xf86DoConfigure && xf86DoConfigurePass1 ) {
+ GDevPtr pGDev;
+ for (i = 0; i < numUsed; i++) {
+ pGDev = xf86AddBusDeviceToConfigure(NEWPORT_DRIVER_NAME,
+ BUS_NONE, NULL, 0);
+ if (pGDev) {
+ /*
+ * XF86Match???Instances() treat chipID and
+ * chipRev as overrides, so clobber them here.
+ */
+ pGDev->chipID = pGDev->chipRev = -1;
+ }
+ }
+ }
+
+ if(flags & PROBE_DETECT) {
foundScreen = TRUE;
- else {
+ } else {
for (i = 0; i < numDevSections; i++) {
dev = devSections[i];
busID = xf86SetIntOption(dev->options, "BusID", 0);
@@ -281,13 +297,15 @@
/* This is a hack because don't have the RAC info(and don't want it).
* Set it as an ISA entity to get the entity field set up right.
*/
- entity = xf86ClaimIsaSlot(drv, 0, dev, TRUE);
+ entity = xf86ClaimFbSlot(drv, 0, dev,
+ TRUE);
base = (NEWPORT_BASE_ADDR0
+ busID * NEWPORT_BASE_OFFSET);
- RANGE(range[0], base, base + sizeof(NewportRegs),\
- ResExcMemBlock);
- pScrn = (void *)xf86ConfigIsaEntity(pScrn, 0, entity, NULL, range, \
- NULL, NULL, NULL, NULL);
+ RANGE(range[0], base, base +
+ sizeof(NewportRegs),
+ ResExcMemBlock);
+ pScrn = (void *)xf86ConfigFbEntity(NULL,
+ 0, entity, NULL, NULL, NULL, NULL);
/* Allocate a ScrnInfoRec */
pScrn->driverVersion = NEWPORT_VERSION;
pScrn->driverName = NEWPORT_DRIVER_NAME;
@@ -678,7 +696,7 @@
if (serverGeneration == 1) {
xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options);
}
-
+ NewportModeInit(pScrn, pScrn->currentMode);
return TRUE;
}
@@ -808,9 +826,11 @@
~(XM9_8_BITPLANES | XM9_PUPMODE);
NewportBfwait(pNewport->pNewportRegs);
/* set up the mode register for 24bpp */
- mode = XM9_MREG_PIX_SIZE_24BPP | XM9_MREG_PIX_MODE_RGB1
+ mode = XM9_MREG_PIX_SIZE_24BPP | XM9_MREG_PIX_MODE_RGB2
| XM9_MREG_GAMMA_BYPASS;
- NewportXmap9SetModeRegister( pNewportRegs , 0, mode);
+ for (i = 0; i < 32; i++)
+ NewportXmap9SetModeRegister( pNewportRegs , i, mode);
+
/* select the set up mode register */
NewportBfwait(pNewport->pNewportRegs);
pNewportRegs->set.dcbmode = (DCB_XMAP_ALL | W_DCB_XMAP9_PROTOCOL |
@@ -824,22 +844,29 @@
NPORT_DMODE1_RGBMD |
/* turn on 8888 = RGBA pixel packing */
NPORT_DMODE1_HD32 | NPORT_DMODE1_RWPCKD;
- /* After setting up XMAP9 we have to reinitialize the CMAP for
- * whatever reason (the docs say nothing about it). RestorePalette()
- * is just a lazy way to do this */
- /*NewportRestorePalette( pScrn );*/
+ /*
+ * After setting up XMAP9 we have to reinitialize the CMAP for
+ * whatever reason (the docs say nothing about it).
+ */
+
+
for (i = 0; i < 256; i++) {
col.red = col.green = col.blue = i;
NewportCmapSetRGB(NEWPORTREGSPTR(pScrn), i, col);
- NewportCmapSetRGB(NEWPORTREGSPTR(pScrn), i + 256, col);
- NewportCmapSetRGB(NEWPORTREGSPTR(pScrn), i + 512, col);
}
+ for (i = 0; i < 256; i++) {
+ col.red = col.green = col.blue = i;
+ NewportCmapSetRGB(NEWPORTREGSPTR(pScrn), i + 0x1f00,
+ col);
+ }
+
}
/* blank the framebuffer */
NewportWait(pNewportRegs);
- pNewportRegs->set.drawmode0 = (NPORT_DMODE0_DRAW | NPORT_DMODE0_DOSETUP |
- NPORT_DMODE0_STOPX | NPORT_DMODE0_STOPY |
- NPORT_DMODE0_BLOCK);
+ pNewportRegs->set.drawmode0 = (NPORT_DMODE0_DRAW |
+ NPORT_DMODE0_DOSETUP |
+ NPORT_DMODE0_STOPX | NPORT_DMODE0_STOPY |
+ NPORT_DMODE0_BLOCK);
pNewportRegs->set.drawmode1 = pNewport->drawmode1 |
NPORT_DMODE1_FCLR |
NPORT_DMODE1_RGBMD;