On 12/21/2013 02:02 AM, Amit Uttamchandani wrote:
> On Fri, Dec 20, 2013 at 05:27:37PM +0100, Xavier Bachelot wrote:
>> On 12/10/2013 08:16 PM, Amit wrote:
>>> Hi,
>>>
>>> Using a board from VIA with the following output from lspci:
>>>
>>> 00:01.0 VGA compatible controller [0300]: VIA Technologies, Inc. Device
>>> [1106:3a01]
>>>
>>> This is a VX11 chipset. I understand part of the roadmap was support for
>>> VX11. How far along is this?
>>>
>>> Also, I tried to modify src/via_id.c to add the above IDs but get no
>>> result from X.
>>>
>>> Xorg.0.log:
>>> http://paste.debian.net/70188/
>>>
>>> Thanks,
>>> Amit
>>>
>> Hi Amit,
>>
>> VX11 support will happen eventually, but nothing has been down toward
>> this yet. It seems the VX11 is not very widespread, and you are the
>> first to ask about it being supported. Can you share some details about
>> the hardware you have ? And can you please also send the output of
>> 'lspci -vn' ? Maybe we could hook up the very basic stuff and send you
>> patches to test.
>>
>
> Thanks for the response.
>
> The hardware is an EPIA-M920
> (http://www.viaembedded.com/en/products/boards/1893/1/EPIA-M920.html)
>
> Attached is the lspci -vn output. Also, after contacting VIA, they gave
> me the following driver:
>
> http://www.viaarena.com/Driver/vx11_ubuntu1204_ubuntu1210_15-00-02b.7z.zip
>
> That driver works but the install is not that clean. They replace
> various libGL and libglx modules with their own and also need to install
> a kernel driver.
>
> Anyways, from what I can see it is a graphics chip from S3. If you need
> the kernel/Xorg.0.log, I can also send those.
>
> Thanks,
> Amit
>
Hi Amit,
Here's a patch against git master for you to test. Basically, the same I
sent 2 days ago for the VN1000, but slightly adapted for the VX11. This
is just a blind shot in the dark, but I'd still be interested to read
about the results.
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_VX11:
+ 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_VX11:
+ /* {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_VX11:
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_VX11:
break;
default:
/* some leftovers */
@@ -460,6 +462,7 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VX11:
break;
default:
/* some leftovers */
@@ -588,6 +591,7 @@ ViaSecondCRTCSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VX11:
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_VX11:
break;
default:
/* some leftovers */
@@ -886,6 +891,7 @@ iga1_crtc_restore(xf86CrtcPtr crtc)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VX11:
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_VX11:
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_VX11:
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_VX11:
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_VX11:
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_VX11:
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_VX11:
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_VX11:
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_VX11:
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_VX11:
/* 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_VX11:
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_VX11, "VX11"},
{-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_VX11, 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_VX11:
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},
+ /*** VX11 ***/
+ {"VIA Epia M920", VIA_VX11, 0x1106, 0x3A01, 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_VX11:
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_VX11:
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_VX11))
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_VX11:
/*
* 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_VX11))
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_VX11 == 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_VX11 == 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_VX11:
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_VX11)) {
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_VX11,
#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_VX11 0x3A01 /* VX11 */
#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_VX11:
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_VX11:
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_VX11)) {
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_VX11)) {
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_VX11:
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_VX11) {
for (i = 0x44; i <= 0x5c; i += 4) {
VIASETREG(i, 0x0);
}
}
- if (pVia->Chipset == VIA_VX900)
+ if ((pVia->Chipset == VIA_VX900) || (pVia->Chipset == VIA_VX11))
{
/*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_VX11:
viaInitPCIe(pVia);
break;
default:
@@ -473,6 +478,7 @@ VIAInitialize2DEngine(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VX11:
viaEnablePCIeVQ(pVia);
break;
default:
@@ -741,6 +747,7 @@ UMSPreInit(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VX11:
#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_VX11:
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_VX11)) {
hwp->writeSeq(hwp, 0x4D, Regs->SR4D);
}
@@ -446,6 +447,7 @@ VIARestore(ScrnInfoPtr pScrn)
case VIA_VX800:
case VIA_VX855:
case VIA_VX900:
+ case VIA_VX11:
/* 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_VX11)) {
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