configure.ac | 2 src/via_driver.c | 18 +-- src/via_ums.c | 263 ++++++++++++++++++++++++++++++++++--------------------- src/via_ums.h | 1 4 files changed, 170 insertions(+), 114 deletions(-)
New commits: commit 1baf0d5bc80903b6f23542f85fb94b7451212155 Author: Kevin Brace <kevinbr...@gmx.com> Date: Mon Aug 17 09:11:46 2020 -0700 Version bumped to 0.6.304 Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/configure.ac b/configure.ac index 3b3e081..ead468d 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([xf86-video-openchrome], - [0.6.303], + [0.6.304], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/openchrome], [xf86-video-openchrome]) commit f7dbb11025f07bd1f270782617954f1f1f3c750f Author: Kevin Brace <kevinbr...@gmx.com> Date: Mon Aug 17 09:11:30 2020 -0700 Merge viaUMSCrtcInit() into viaUMSPreInit() Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/src/via_driver.c b/src/via_driver.c index 0faa349..9c50714 100644 --- a/src/via_driver.c +++ b/src/via_driver.c @@ -1133,23 +1133,17 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) VIAVidHWDiffInit(pScrn); - /* - * After viaUMSPreInit() succeeds, MMIO PCI hardware resources - * are memory mapped. If there is an error from this point on, - * they will need to be explicitly relinquished. - */ - if (!pVia->KMS) { - if (!viaUMSPreInit(pScrn)) { - goto free_rec; - } - } - if (pVia->KMS) { if (!drmmode_pre_init(pScrn, &pVia->drmmode)) { goto fail; } } else { - if (!viaUMSCrtcInit(pScrn)) { + /* + * After viaUMSPreInit() succeeds, MMIO PCI hardware resources + * are memory mapped. If there is an error from this point on, + * they will need to be explicitly relinquished. + */ + if (!viaUMSPreInit(pScrn)) { goto fail; } } diff --git a/src/via_ums.c b/src/via_ums.c index 4a32b20..f4c1d72 100644 --- a/src/via_ums.c +++ b/src/via_ums.c @@ -1159,80 +1159,6 @@ viaQuirksInit(ScrnInfoPtr pScrn) "Exiting %s.\n", __func__)); } -Bool -viaUMSPreInit(ScrnInfoPtr pScrn) -{ - VIAPtr pVia = VIAPTR(pScrn); - - /* - * Initialize special flag registers to handle "quirky" - * hardware. - */ - viaQuirksInit(pScrn); - - if (!xf86LoadSubModule(pScrn, "vgahw")) - return FALSE; - - if (!vgaHWGetHWRec(pScrn)) - return FALSE; - -#if 0 - /* Here we can alter the number of registers saved and restored by the - * standard vgaHWSave and Restore routines. - */ - vgaHWSetRegCounts(pScrn, VGA_NUM_CRTC, VGA_NUM_SEQ, VGA_NUM_GFX, - VGA_NUM_ATTR); -#endif - - if (!viaProbeVRAM(pScrn)) { - return FALSE; - } - - /* Split the FB for SAMM. */ - /* FIXME: For now, split the FB into two equal sections. - * This should be user-adjustable via a config option. */ - if (pVia->IsSecondary) { - DevUnion *pPriv; - VIAEntPtr pVIAEnt; - VIAPtr pVia1; - - pPriv = xf86GetEntityPrivate(pScrn->entityList[0], gVIAEntityIndex); - pVIAEnt = pPriv->ptr; - pScrn->videoRam = pScrn->videoRam >> 1; - pVIAEnt->pPrimaryScrn->videoRam = pScrn->videoRam; - pVia1 = VIAPTR(pVIAEnt->pPrimaryScrn); - pVia1->videoRambytes = pScrn->videoRam << 10; - pVia->FrameBufferBase += (pScrn->videoRam << 10); - } - - pVia->videoRambytes = pScrn->videoRam << 10; - - /* maybe throw in some more sanity checks here */ -#ifndef HAVE_PCIACCESS - pVia->PciTag = pciTag(pVia->PciInfo->bus, pVia->PciInfo->device, - pVia->PciInfo->func); -#endif - - /* Map PCI hardware resources to the memory map. */ - if (!viaMapMMIO(pScrn)) { - return FALSE; - } - - return TRUE; -} - -void -viaUMSPreInitExit(ScrnInfoPtr pScrn) -{ - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Entered %s.\n", __func__)); - - viaUnmapMMIO(pScrn); - - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Exiting %s.\n", __func__)); -} - static void viaSaveOriginalRegisters(ScrnInfoPtr pScrn) { @@ -1395,13 +1321,16 @@ viaSaveOriginalRegisters(ScrnInfoPtr pScrn) "Exiting %s.\n", __func__)); } +/* + * VIAPreInit code path for UMS (User Mode Setting). + */ Bool -viaUMSCrtcInit(ScrnInfoPtr pScrn) +viaUMSPreInit(ScrnInfoPtr pScrn) { - drmmode_crtc_private_ptr iga1_rec = NULL, iga2_rec = NULL; - vgaHWPtr hwp = VGAHWPTR(pScrn); VIAPtr pVia = VIAPTR(pScrn); VIADisplayPtr pVIADisplay = pVia->pVIADisplay; + drmmode_crtc_private_ptr iga1_rec = NULL, iga2_rec = NULL; + vgaHWPtr hwp; #if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,7,99,3,0) ClockRangePtr clockRanges; #else @@ -1411,6 +1340,71 @@ viaUMSCrtcInit(ScrnInfoPtr pScrn) xf86CrtcPtr iga1, iga2; Bool ret; + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Entered %s.\n", __func__)); + + /* + * Initialize special flag registers to handle "quirky" + * hardware. + */ + viaQuirksInit(pScrn); + + if (!xf86LoadSubModule(pScrn, "vgahw")) { + ret = FALSE; + goto exit; + } + + if (!vgaHWGetHWRec(pScrn)) { + ret = FALSE; + goto exit; + } + +#if 0 + /* Here we can alter the number of registers saved and restored by the + * standard vgaHWSave and Restore routines. + */ + vgaHWSetRegCounts(pScrn, VGA_NUM_CRTC, VGA_NUM_SEQ, VGA_NUM_GFX, + VGA_NUM_ATTR); +#endif + + if (!viaProbeVRAM(pScrn)) { + ret = FALSE; + goto exit; + } + + /* Split the FB for SAMM. */ + /* FIXME: For now, split the FB into two equal sections. + * This should be user-adjustable via a config option. */ + if (pVia->IsSecondary) { + DevUnion *pPriv; + VIAEntPtr pVIAEnt; + VIAPtr pVia1; + + pPriv = xf86GetEntityPrivate(pScrn->entityList[0], gVIAEntityIndex); + pVIAEnt = pPriv->ptr; + pScrn->videoRam = pScrn->videoRam >> 1; + pVIAEnt->pPrimaryScrn->videoRam = pScrn->videoRam; + pVia1 = VIAPTR(pVIAEnt->pPrimaryScrn); + pVia1->videoRambytes = pScrn->videoRam << 10; + pVia->FrameBufferBase += (pScrn->videoRam << 10); + } + + pVia->videoRambytes = pScrn->videoRam << 10; + + /* maybe throw in some more sanity checks here */ +#ifndef HAVE_PCIACCESS + pVia->PciTag = pciTag(pVia->PciInfo->bus, pVia->PciInfo->device, + pVia->PciInfo->func); +#endif + + /* Map PCI hardware resources to the memory map. */ + if (!viaMapMMIO(pScrn)) { + ret = FALSE; + goto exit; + } + + hwp = VGAHWPTR(pScrn); + viaSaveOriginalRegisters(pScrn); /* Read memory bandwidth from registers. */ @@ -1445,17 +1439,22 @@ viaUMSCrtcInit(ScrnInfoPtr pScrn) } if (pVia->drmmode.hwcursor) { - if (!xf86LoadSubModule(pScrn, "ramdac")) - return FALSE; + if (!xf86LoadSubModule(pScrn, "ramdac")) { + ret = FALSE; + goto exit; + } } - if (!xf86LoadSubModule(pScrn, "i2c")) + if (!xf86LoadSubModule(pScrn, "i2c")) { return FALSE; - else + } else { ViaI2CInit(pScrn); + } - if (!xf86LoadSubModule(pScrn, "ddc")) - return FALSE; + if (!xf86LoadSubModule(pScrn, "ddc")) { + ret = FALSE; + goto exit; + } /* * Set up ClockRanges, which describe what clock ranges are @@ -1484,15 +1483,18 @@ viaUMSCrtcInit(ScrnInfoPtr pScrn) iga1_rec = (drmmode_crtc_private_ptr) xnfcalloc(sizeof(drmmode_crtc_private_rec), 1); if (!iga1_rec) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "IGA1 Rec allocation failed.\n"); - return FALSE; + ret = FALSE; + goto exit; } iga1 = xf86CrtcCreate(pScrn, &iga1_crtc_funcs); if (!iga1) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "xf86CrtcCreate failed.\n"); free(iga1_rec); - return FALSE; + ret = FALSE; + goto exit; } + iga1_rec->drmmode = &pVia->drmmode; iga1_rec->index = 0; iga1->driver_private = iga1_rec; @@ -1501,7 +1503,8 @@ viaUMSCrtcInit(ScrnInfoPtr pScrn) if (!iga2_rec) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "IGA1 Rec allocation failed.\n"); xf86CrtcDestroy(iga1); - return FALSE; + ret = FALSE; + goto exit; } iga2 = xf86CrtcCreate(pScrn, &iga2_crtc_funcs); @@ -1509,8 +1512,10 @@ viaUMSCrtcInit(ScrnInfoPtr pScrn) xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "xf86CrtcCreate failed.\n"); xf86CrtcDestroy(iga1); free(iga2_rec); - return FALSE; + ret = FALSE; + goto exit; } + iga2_rec->drmmode = &pVia->drmmode; iga2_rec->index = 1; iga2->driver_private = iga2_rec; @@ -1520,7 +1525,8 @@ viaUMSCrtcInit(ScrnInfoPtr pScrn) "Detected bitsPerPixel to be 0 bit.\n"); xf86CrtcDestroy(iga2); xf86CrtcDestroy(iga1); - return FALSE; + ret = FALSE; + goto exit; } /* @@ -1543,6 +1549,20 @@ viaUMSCrtcInit(ScrnInfoPtr pScrn) viaInitDisplay(pScrn); ret = xf86InitialConfiguration(pScrn, TRUE); - +exit: + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting %s.\n", __func__)); return ret; } + +void +viaUMSPreInitExit(ScrnInfoPtr pScrn) +{ + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Entered %s.\n", __func__)); + + viaUnmapMMIO(pScrn); + + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting %s.\n", __func__)); +} diff --git a/src/via_ums.h b/src/via_ums.h index e937217..03c6cbf 100644 --- a/src/via_ums.h +++ b/src/via_ums.h @@ -1563,7 +1563,6 @@ void viaUMSDestroy(ScrnInfoPtr pScrn); Bool viaUMSScreenInit(ScrnInfoPtr pScrn); Bool viaUMSPreInit(ScrnInfoPtr pScrn); void viaUMSPreInitExit(ScrnInfoPtr pScrn); -Bool viaUMSCrtcInit(ScrnInfoPtr pScrn); /* via_i2c.c */ void ViaI2CInit(ScrnInfoPtr pScrn); commit 4915c6f9584a721b4207b729faad82ca46a1a96e Author: Kevin Brace <kevinbr...@gmx.com> Date: Mon Aug 17 09:11:16 2020 -0700 Save original hardware registers inside viaSaveOriginalRegisters() Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/src/via_ums.c b/src/via_ums.c index 0239e17..4a32b20 100644 --- a/src/via_ums.c +++ b/src/via_ums.c @@ -1233,23 +1233,17 @@ viaUMSPreInitExit(ScrnInfoPtr pScrn) "Exiting %s.\n", __func__)); } -Bool -viaUMSCrtcInit(ScrnInfoPtr pScrn) +static void +viaSaveOriginalRegisters(ScrnInfoPtr pScrn) { - drmmode_crtc_private_ptr iga1_rec = NULL, iga2_rec = NULL; vgaHWPtr hwp = VGAHWPTR(pScrn); VIAPtr pVia = VIAPTR(pScrn); VIADisplayPtr pVIADisplay = pVia->pVIADisplay; VIARegPtr Regs = &pVIADisplay->SavedReg; -#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,7,99,3,0) - ClockRangePtr clockRanges; -#else - ClockRangesPtr clockRanges; -#endif - int max_pitch, max_height; - xf86CrtcPtr iga1, iga2; uint32_t i; - Bool ret; + + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Entered %s.\n", __func__)); vgaHWSave(pScrn, &hwp->SavedReg, VGA_SR_ALL); @@ -1397,6 +1391,28 @@ viaUMSCrtcInit(ScrnInfoPtr pScrn) } } + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting %s.\n", __func__)); +} + +Bool +viaUMSCrtcInit(ScrnInfoPtr pScrn) +{ + drmmode_crtc_private_ptr iga1_rec = NULL, iga2_rec = NULL; + vgaHWPtr hwp = VGAHWPTR(pScrn); + VIAPtr pVia = VIAPTR(pScrn); + VIADisplayPtr pVIADisplay = pVia->pVIADisplay; +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,7,99,3,0) + ClockRangePtr clockRanges; +#else + ClockRangesPtr clockRanges; +#endif + int max_pitch, max_height; + xf86CrtcPtr iga1, iga2; + Bool ret; + + viaSaveOriginalRegisters(pScrn); + /* Read memory bandwidth from registers. */ pVia->MemClk = hwp->readCrtc(hwp, 0x3D) >> 4; DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, commit f7412fc9d895533c07d8530be07f1eebd9b35a17 Author: Kevin Brace <kevinbr...@gmx.com> Date: Mon Aug 17 09:10:54 2020 -0700 Move special handling hardware initialization code into viaQuirksInit() Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/src/via_ums.c b/src/via_ums.c index 006425e..0239e17 100644 --- a/src/via_ums.c +++ b/src/via_ums.c @@ -1086,63 +1086,90 @@ exit: return status; } -Bool -viaUMSPreInit(ScrnInfoPtr pScrn) +/* + * This is basically a function that lets OpenChrome DDX know that + * it is dealing with hardware that requires special handling. + */ +static void +viaQuirksInit(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); VIADisplayPtr pVIADisplay = pVia->pVIADisplay; - /* Checking for VIA Technologies NanoBook reference design. - Examples include Everex CloudBook and Sylvania g netbook. - It is also called FIC CE260 and CE261 by its ODM (Original - Design Manufacturer) name. - This device has its strapping resistors set to a wrong - setting to handle DVI. As a result, we need to make special - accommodations to handle DVI properly. */ + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Entered %s.\n", __func__)); + + /* + * Checking for VIA Technologies NanoBook reference design. + * Examples include Everex CloudBook and Sylvania g netbook. + * It is also called FIC CE260 and CE261 by its ODM (Original + * Design Manufacturer) name. + * This device has its strapping resistors set to a wrong + * setting to handle DVI. As a result, we need to make special + * accommodations to handle DVI properly. + */ if ((pVia->Chipset == VIA_CX700) && (SUBVENDOR_ID(pVia->PciInfo) == 0x1509) && (SUBSYS_ID(pVia->PciInfo) == 0x2D30)) { - pVIADisplay->isVIANanoBook = TRUE; } else { pVIADisplay->isVIANanoBook = FALSE; } - /* Checking for Quanta IL1 netbook. This is necessary + /* + * Checking for Quanta IL1 netbook. This is necessary * due to its flat panel connected to DVP1 (Digital - * Video Port 1) rather than its LVDS channel. */ + * Video Port 1) rather than its LVDS channel. + */ if ((pVia->Chipset == VIA_VX800) && (SUBVENDOR_ID(pVia->PciInfo) == 0x152D) && (SUBSYS_ID(pVia->PciInfo) == 0x0771)) { - pVIADisplay->isQuantaIL1 = TRUE; } else { pVIADisplay->isQuantaIL1 = FALSE; } - /* Samsung NC20 netbook has its FP connected to LVDS2 + /* + * Samsung NC20 netbook has its FP connected to LVDS2 * rather than the more logical LVDS1, hence, a special * flag register is needed for properly controlling its - * FP. */ + * FP. + */ if ((pVia->Chipset == VIA_VX800) && (SUBVENDOR_ID(pVia->PciInfo) == 0x144d) && (SUBSYS_ID(pVia->PciInfo) == 0xc04e)) { - pVIADisplay->isSamsungNC20 = TRUE; } else { pVIADisplay->isSamsungNC20 = FALSE; } - /* Checking for OLPC XO-1.5. */ + /* + * OLPC XO-1.5 requires a special code path to handle + * its unusual FP configuration. + */ if ((pVia->Chipset == VIA_VX855) && (SUBVENDOR_ID(pVia->PciInfo) == 0x152D) && (SUBSYS_ID(pVia->PciInfo) == 0x0833)) { - pVIADisplay->isOLPCXO15 = TRUE; } else { pVIADisplay->isOLPCXO15 = FALSE; } + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting %s.\n", __func__)); +} + +Bool +viaUMSPreInit(ScrnInfoPtr pScrn) +{ + VIAPtr pVia = VIAPTR(pScrn); + + /* + * Initialize special flag registers to handle "quirky" + * hardware. + */ + viaQuirksInit(pScrn); + if (!xf86LoadSubModule(pScrn, "vgahw")) return FALSE; _______________________________________________ openchrome-devel mailing list openchrome-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/openchrome-devel