Hi,
On 01/10/2014 04:45 PM, yum wrote:
> Sorry for replying so late. Thank you for helping. This is my lspci -vn:
>
Here's a patch for you to try. It applies on top of git master.
It's indeed not tested, as I don't have the hardware and it might just
fall apart as there's not any documentation available for this chipset.
Please report back and make sure to include the xorg log.
Regards,
Xavier
diff --git a/src/via_bandwidth.c b/src/via_bandwidth.c
index 1bd6341..3ce454b 100644
--- a/src/via_bandwidth.c
+++ b/src/via_bandwidth.c
@@ -269,6 +269,14 @@ ViaSetPrimaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode)
hwp->writeSeq(hwp, 0x18, 0x90); /* 320/4 = 80 = 0x50 */
hwp->writeSeq(hwp, 0x22, 0x28); /* 160/4 = 40 = 0x28 */
break;
+ case VIA_VN1000:
+ hwp->writeSeq(hwp, 0x17, 0xC7); /* 400/2-1 = 199 = 0xC7 */
+ /* Formula for {SR16,0,5},{SR16,7,7} is: (0x50 & 0x3F) | ((0x50 & 0x40) << 1) = 0x90 */
+ hwp->writeSeq(hwp, 0x16, 0x90); /* 320/4 = 80 = 0x50 */
+ /* Formula for {SR18,0,5},{SR18,7,7} is: (0x50 & 0x3F) | ((0x50 & 0x40) << 1) = 0x90 */
+ hwp->writeSeq(hwp, 0x18, 0x90); /* 320/4 = 80 = 0x50 */
+ hwp->writeSeq(hwp, 0x22, 0x28); /* 160/4 = 40 = 0x28 */
+ break;
default:
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaSetPrimaryFIFO: "
"Chipset %d not implemented\n", pVia->Chipset);
@@ -502,6 +510,23 @@ ViaSetSecondaryFIFO(ScrnInfoPtr pScrn, DisplayModePtr mode)
else
ViaCrtcMask(hwp, 0x94, 0x08, 0x7F);
break;
+ case VIA_VN1000:
+ /* {CR68,4,7},{CR94,7,7},{CR95,7,7} : 192/8-1 = 23 = 0x17 */
+ ViaCrtcMask(hwp, 0x68, 0x70, 0xF0); /* ((0x17 & 0x0F) << 4)) = 0x70 */
+ ViaCrtcMask(hwp, 0x94, 0x80, 0x80); /* ((0x17 & 0x10) << 3)) = 0x80 */
+ ViaCrtcMask(hwp, 0x95, 0x00, 0x80); /* ((0x17 & 0x20) << 2)) = 0x00 */
+ /* {CR68,0,3},{CR95,4,6} : 160/4 = 0x28 */
+ ViaCrtcMask(hwp, 0x68, 0x08, 0x0F); /* (0x28 & 0x0F) = 0x08 */
+ ViaCrtcMask(hwp, 0x95, 0x20, 0x70); /* (0x28 & 0x70) = 0x20 */
+ /* {CR92,0,3},{CR95,0,2} : 160/4 = 0x28 */
+ ViaCrtcMask(hwp, 0x92, 0x08, 0x08); /* (0x28 & 0x0F) = 0x08 */
+ ViaCrtcMask(hwp, 0x95, 0x02, 0x07); /* ((0x28 & 0x70) >> 4)) = 0x2 */
+ /* {CR94,0,6} : 320/4 = 0x50 */
+ if ((mode->HDisplay >= 1400) && (pScrn->bitsPerPixel == 32))
+ ViaCrtcMask(hwp, 0x94, 0x08, 0x7F);
+ else
+ ViaCrtcMask(hwp, 0x94, 0x08, 0x7F);
+ break;
default:
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaSetSecondaryFIFO: "
"Chipset %d not implemented\n", pVia->Chipset);
diff --git a/src/via_display.c b/src/via_display.c
index d9b6db5..ff68038 100644
--- a/src/via_display.c
+++ b/src/via_display.c
@@ -318,6 +318,7 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
break;
default:
ViaSeqMask(hwp, 0x16, 0x08, 0xBF);
@@ -423,6 +424,7 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
break;
default:
/* some leftovers */
@@ -460,6 +462,7 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
break;
default:
/* some leftovers */
@@ -588,6 +591,7 @@ ViaSecondCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
break;
default:
ViaSeqMask(hwp, 0x16, 0x08, 0xBF);
@@ -674,6 +678,7 @@ ViaSecondCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
break;
default:
/* some leftovers */
@@ -886,6 +891,7 @@ iga1_crtc_restore(xf86CrtcPtr crtc)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
break;
default:
@@ -1086,6 +1092,7 @@ iga1_crtc_set_cursor_colors (xf86CrtcPtr crtc, int bg, int fg)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
temp = VIAGETREG(PRIM_HI_CTRL);
VIASETREG(PRIM_HI_CTRL, temp & 0xFFFFFFFE);
break;
@@ -1128,6 +1135,7 @@ iga1_crtc_set_cursor_position (xf86CrtcPtr crtc, int x, int y)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
VIASETREG(PRIM_HI_POSSTART, ((x << 16) | (y & 0x07ff)));
VIASETREG(PRIM_HI_CENTEROFFSET, ((xoff << 16) | (yoff & 0x07ff)));
break;
@@ -1153,6 +1161,7 @@ iga1_crtc_show_cursor (xf86CrtcPtr crtc)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
VIASETREG(PRIM_HI_FBOFFSET, iga->cursor_bo->offset);
VIASETREG(PRIM_HI_CTRL, 0x36000005);
break;
@@ -1179,6 +1188,7 @@ iga1_crtc_hide_cursor (xf86CrtcPtr crtc)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
temp = VIAGETREG(PRIM_HI_CTRL);
VIASETREG(PRIM_HI_CTRL, temp & 0xFFFFFFFA);
break;
@@ -1525,6 +1535,7 @@ iga2_crtc_set_cursor_colors(xf86CrtcPtr crtc, int bg, int fg)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
temp = VIAGETREG(HI_CONTROL);
VIASETREG(HI_CONTROL, temp & 0xFFFFFFFE);
break;
@@ -1574,6 +1585,7 @@ iga2_crtc_set_cursor_position(xf86CrtcPtr crtc, int x, int y)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
VIASETREG(HI_POSSTART, ((x << 16) | (y & 0x07ff)));
VIASETREG(HI_CENTEROFFSET, ((xoff << 16) | (yoff & 0x07ff)));
break;
@@ -1599,6 +1611,7 @@ iga2_crtc_show_cursor(xf86CrtcPtr crtc)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
VIASETREG(HI_FBOFFSET, iga->cursor_bo->offset);
VIASETREG(HI_CONTROL, 0xB6000005);
break;
@@ -1626,6 +1639,7 @@ iga2_crtc_hide_cursor(xf86CrtcPtr crtc)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
temp = VIAGETREG(HI_CONTROL);
VIASETREG(HI_CONTROL, temp & 0xFFFFFFFA);
break;
@@ -1825,6 +1839,7 @@ UMSCrtcInit(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
/* set 0 as transparent color key for IGA 2 */
VIASETREG(HI_TRANSPARENT_COLOR, 0);
VIASETREG(HI_INVTCOLOR, 0X00FFFFFF);
diff --git a/src/via_dri.c b/src/via_dri.c
index c8d3180..5c5cacf 100644
--- a/src/via_dri.c
+++ b/src/via_dri.c
@@ -539,6 +539,7 @@ VIADRI1ScreenInit(ScreenPtr pScreen)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
pDRIInfo->clientDriverName = "swrast";
break;
default:
diff --git a/src/via_driver.c b/src/via_driver.c
index 0f24ebe..347279b 100644
--- a/src/via_driver.c
+++ b/src/via_driver.c
@@ -136,6 +136,7 @@ static SymTabRec VIAChipsets[] = {
{VIA_VX800, "VX800/VX820"},
{VIA_VX855, "VX855/VX875"},
{VIA_VX900, "VX900"},
+ {VIA_VN1000, "VN1000"},
{-1, NULL }
};
@@ -153,6 +154,7 @@ static PciChipsets VIAPciChipsets[] = {
{VIA_VX800, PCI_CHIP_VT3353, VIA_RES_SHARED},
{VIA_VX855, PCI_CHIP_VT3409, VIA_RES_SHARED},
{VIA_VX900, PCI_CHIP_VT3410, VIA_RES_SHARED},
+ {VIA_VN1000, PCI_CHIP_VN1000, VIA_RES_SHARED},
{-1, -1, VIA_RES_UNDEF}
};
@@ -731,6 +733,7 @@ VIASetupDefaultOptions(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
pVia->VideoEngine = VIDEO_ENGINE_CME;
pVia->agpEnable = FALSE;
pVia->dmaXV = FALSE;
diff --git a/src/via_id.c b/src/via_id.c
index fe88114..5474fb1 100644
--- a/src/via_id.c
+++ b/src/via_id.c
@@ -260,6 +260,9 @@ static struct ViaCardIdStruct ViaCardId[] = {
{"ASRock PV530", VIA_VX900, 0x1849, 0x7122, VIA_DEVICE_CRT},
{"Fujitsu Futro A300", VIA_VX900, 0xA0A0, 0x080F, VIA_DEVICE_CRT},
+ /*** VN1000 ***/
+ {"VIA pc-vn1000", VIA_VN1000, 0x1106, 0x6122, VIA_DEVICE_CRT},
+
/* keep this */
{NULL, VIA_UNKNOWN, 0x0000, 0x0000, VIA_DEVICE_NONE}
};
diff --git a/src/via_lvds.c b/src/via_lvds.c
index 0dcc64a..7c0956e 100644
--- a/src/via_lvds.c
+++ b/src/via_lvds.c
@@ -391,6 +391,7 @@ via_lvds_dpms(xf86OutputPtr output, int mode)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
ViaLVDSPower(pScrn, TRUE);
break;
}
@@ -406,6 +407,7 @@ via_lvds_dpms(xf86OutputPtr output, int mode)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
ViaLVDSPower(pScrn, FALSE);
break;
}
@@ -1204,7 +1206,7 @@ ViaPanelScaleDisable(ScrnInfoPtr pScrn)
ViaCrtcMask(hwp, 0x79, 0x00, 0x01);
/* Disable VX900 down scaling */
- if (pVia->Chipset == VIA_VX900)
+ if ((pVia->Chipset == VIA_VX900) || (pVia->Chipset == VIA_VN1000))
ViaCrtcMask(hwp, 0x89, 0x00, 0x01);
if (pVia->Chipset != VIA_CLE266 && pVia->Chipset != VIA_KM400)
ViaCrtcMask(hwp, 0xA2, 0x00, 0xC8);
@@ -1240,6 +1242,7 @@ via_lvds_mode_set(xf86OutputPtr output, DisplayModePtr mode,
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
/*
* Since we are using virtual, we need to adjust
* the offset to match the framebuffer alignment.
@@ -1566,7 +1569,7 @@ via_lvds_init(ScrnInfoPtr pScrn)
if (output) {
output->driver_private = Panel;
- if (pVia->Chipset == VIA_VX900)
+ if ((pVia->Chipset == VIA_VX900) || (pVia->Chipset == VIA_VN1000))
output->possible_crtcs = 0x3;
else
output->possible_crtcs = 0x2;
diff --git a/src/via_outputs.c b/src/via_outputs.c
index 0a23e81..97b14e4 100644
--- a/src/via_outputs.c
+++ b/src/via_outputs.c
@@ -799,7 +799,8 @@ via_analog_detect(xf86OutputPtr output)
if ((VIA_CX700 == pVia->Chipset) ||
(VIA_VX800 == pVia->Chipset) ||
(VIA_VX855 == pVia->Chipset) ||
- (VIA_VX900 == pVia->Chipset))
+ (VIA_VX900 == pVia->Chipset) ||
+ (VIA_VN1000 == pVia->Chipset))
ViaSeqMask(hwp, 0x40, 0x00, 0x80);
if (ViaVgahwIn(hwp, 0x3C2) & 0x20)
@@ -808,7 +809,8 @@ via_analog_detect(xf86OutputPtr output)
if ((VIA_CX700 == pVia->Chipset) ||
(VIA_VX800 == pVia->Chipset) ||
(VIA_VX855 == pVia->Chipset) ||
- (VIA_VX900 == pVia->Chipset))
+ (VIA_VX900 == pVia->Chipset) ||
+ (VIA_VN1000 == pVia->Chipset))
ViaSeqMask(hwp, 0x40, 0x00, 0x80);
/* Restore previous state */
@@ -894,6 +896,7 @@ ViaOutputsDetect(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
via_dp_init(pScrn);
break;
}
@@ -1006,7 +1009,9 @@ ViaSetDotclock(ScrnInfoPtr pScrn, CARD32 clock, int base, int probase)
dm = pll.params.dm;
/* The VX855 and VX900 do not modify dm/dn, but earlier chipsets do. */
- if ((pVia->Chipset != VIA_VX855) && (pVia->Chipset != VIA_VX900)) {
+ if ((pVia->Chipset != VIA_VX855) &&
+ (pVia->Chipset != VIA_VX900) &&
+ (pVia->Chipset != VIA_VN1000)) {
dm -= 2;
dn -= 2;
}
diff --git a/src/via_regs.h b/src/via_regs.h
index 1f43d6e..8ff9487 100644
--- a/src/via_regs.h
+++ b/src/via_regs.h
@@ -56,6 +56,7 @@ enum VIACHIPTAGS {
VIA_VX800, /* VT3353 */
VIA_VX855, /* VT3409*/
VIA_VX900, /* VT3410*/
+ VIA_VN1000,
#ifdef VIA_VT3293_SUPPORT
VIA_CN750, /* VT3293 */
#endif
@@ -77,6 +78,7 @@ enum VIACHIPTAGS {
#define PCI_CHIP_VT3353 0x1122 /* VX800 */
#define PCI_CHIP_VT3409 0x5122 /* VX855/VX875 */
#define PCI_CHIP_VT3410 0x7122 /* VX900 */
+#define PCI_CHIP_VN1000 0x6122 /* VN1000 */
#ifdef VIA_VT3293_SUPPORT
#define PCI_CHIP_VT3293 0x3225 /* CN750 */
#endif
diff --git a/src/via_ums.c b/src/via_ums.c
index 6fc716e..5c23b9e 100644
--- a/src/via_ums.c
+++ b/src/via_ums.c
@@ -43,6 +43,7 @@ ViaMMIODisable(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
ViaSeqMask(hwp, 0x1A, 0x00, 0x08);
break;
default:
@@ -100,6 +101,7 @@ ViaMMIOEnable(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
ViaSeqMask(hwp, 0x1A, 0x08, 0x08);
break;
default:
@@ -215,14 +217,14 @@ VIAMapFB(ScrnInfoPtr pScrn)
VIAPtr pVia = VIAPTR(pScrn);
#ifdef HAVE_PCIACCESS
- if (pVia->Chipset == VIA_VX900) {
+ if ((pVia->Chipset == VIA_VX900) || (pVia->Chipset == VIA_VN1000)) {
pVia->FrameBufferBase = pVia->PciInfo->regions[2].base_addr;
} else {
pVia->FrameBufferBase = pVia->PciInfo->regions[0].base_addr;
}
int err;
#else
- if (pVia->Chipset == VIA_VX900) {
+ if ((pVia->Chipset == VIA_VX900) || (pVia->Chipset == VIA_VN1000)) {
pVia->FrameBufferBase = pVia->PciInfo->memBase[2];
} else {
pVia->FrameBufferBase = pVia->PciInfo->memBase[0];
@@ -409,6 +411,7 @@ viaDisableVQ(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
VIASETREG(0x41c, 0x00100000);
VIASETREG(0x420, 0x74301000);
break;
@@ -441,13 +444,14 @@ VIAInitialize2DEngine(ScrnInfoPtr pScrn)
if (pVia->Chipset == VIA_VX800 ||
pVia->Chipset == VIA_VX855 ||
- pVia->Chipset == VIA_VX900) {
+ pVia->Chipset == VIA_VX900 ||
+ pVia->Chipset == VIA_VN1000) {
for (i = 0x44; i <= 0x5c; i += 4) {
VIASETREG(i, 0x0);
}
}
- if (pVia->Chipset == VIA_VX900)
+ if ((pVia->Chipset == VIA_VX900) || (pVia->Chipset == VIA_VN1000))
{
/*410 redefine 0x30 34 38*/
VIASETREG(0x60, 0x0); /*already useable here*/
@@ -459,6 +463,7 @@ VIAInitialize2DEngine(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
viaInitPCIe(pVia);
break;
default:
@@ -473,6 +478,7 @@ VIAInitialize2DEngine(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
viaEnablePCIeVQ(pVia);
break;
default:
@@ -741,6 +747,7 @@ UMSPreInit(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
#ifdef HAVE_PCIACCESS
pci_device_cfg_read_u8(vgaDevice, &videoRam, 0xA1);
#else
diff --git a/src/via_vgahw.c b/src/via_vgahw.c
index 1e0f808..cdc8028 100644
--- a/src/via_vgahw.c
+++ b/src/via_vgahw.c
@@ -279,6 +279,7 @@ VIASave(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
Regs->CRD2 = hwp->readCrtc(hwp, 0xD2);
break;
}
@@ -390,7 +391,7 @@ VIARestore(ScrnInfoPtr pScrn)
* but I don't do that for I don't want to affect any
* chips now.
*/
- if (pVia->Chipset == VIA_VX900) {
+ if ((pVia->Chipset == VIA_VX900) || (pVia->Chipset == VIA_VN1000)) {
hwp->writeSeq(hwp, 0x4D, Regs->SR4D);
}
@@ -446,6 +447,7 @@ VIARestore(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VN1000:
/* LVDS Control Register */
hwp->writeCrtc(hwp, 0xD2, Regs->CRD2);
break;
diff --git a/src/via_xvmc.c b/src/via_xvmc.c
index 8882947..43d5043 100644
--- a/src/via_xvmc.c
+++ b/src/via_xvmc.c
@@ -324,7 +324,8 @@ ViaInitXVMC(ScreenPtr pScreen)
(pVia->Chipset == VIA_P4M900) ||
(pVia->Chipset == VIA_VX800) ||
(pVia->Chipset == VIA_VX855) ||
- (pVia->Chipset == VIA_VX900)) {
+ (pVia->Chipset == VIA_VX900) ||
+ (pVia->Chipset == VIA_VN1000)) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"[XvMC] XvMC is not supported on this chipset.\n");
return;
_______________________________________________
Openchrome-users mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/openchrome-users
Main page: http://www.openchrome.org
Wiki: http://www.openchrome.org/trac/wiki/TOC