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 Openchrome-users@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/openchrome-users Main page: http://www.openchrome.org Wiki: http://www.openchrome.org/trac/wiki/TOC