On 01/23/2014 09:06 PM, Xavier Bachelot wrote:
> 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.
> 
Here's an updated patch, the previous one wasn't allowing the driver to
load...

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..e0622c5 100644
--- a/src/via_driver.c
+++ b/src/via_driver.c
@@ -98,6 +98,7 @@ static const struct pci_id_match via_device_match[] = {
    VIA_DEVICE_MATCH (PCI_CHIP_VT3353, 0 ),
    VIA_DEVICE_MATCH (PCI_CHIP_VT3409, 0 ),
    VIA_DEVICE_MATCH (PCI_CHIP_VT3410, 0 ),
+   VIA_DEVICE_MATCH (PCI_CHIP_VN1000, 0 ),
     { 0, 0, 0 },
 };
 
@@ -136,6 +137,7 @@ static SymTabRec VIAChipsets[] = {
     {VIA_VX800,    "VX800/VX820"},
     {VIA_VX855,    "VX855/VX875"},
     {VIA_VX900,    "VX900"},
+    {VIA_VN1000,   "VN1000"},
     {-1,            NULL }
 };
 
@@ -153,6 +155,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 +734,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

Reply via email to