Module Name: xsrc Committed By: mrg Date: Fri Aug 19 23:37:39 UTC 2016
Modified Files: xsrc/external/mit/xf86-video-geode/dist/src: geode.h geode_msr.c gx_accel.c lx_driver.c xsrc/external/mit/xf86-video-openchrome/dist/src: via_display.c via_dri.c via_driver.c via_driver.h via_lvds.c xsrc/external/mit/xf86-video-openchrome/include: config.h xsrc/external/mit/xf86-video-rendition/dist/src: rendition.c rendition.h xsrc/external/mit/xf86-video-s3virge/dist/src: s3v_driver.c Removed Files: xsrc/external/mit/xf86-video-openchrome/dist/src: via_vbe.c Log Message: merge xf86-video-geode 2.11.18, xf86-video-openchrome 0.4.0, xf86-video-rendition 4.2.6, and xf86-video-s3virge 1.10.7. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 xsrc/external/mit/xf86-video-geode/dist/src/geode.h cvs rdiff -u -r1.5 -r1.6 \ xsrc/external/mit/xf86-video-geode/dist/src/geode_msr.c cvs rdiff -u -r1.2 -r1.3 \ xsrc/external/mit/xf86-video-geode/dist/src/gx_accel.c \ xsrc/external/mit/xf86-video-geode/dist/src/lx_driver.c cvs rdiff -u -r1.2 -r1.3 \ xsrc/external/mit/xf86-video-openchrome/dist/src/via_display.c \ xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.c \ xsrc/external/mit/xf86-video-openchrome/dist/src/via_lvds.c cvs rdiff -u -r1.3 -r1.4 \ xsrc/external/mit/xf86-video-openchrome/dist/src/via_dri.c cvs rdiff -u -r1.5 -r1.6 \ xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.h cvs rdiff -u -r1.1.1.2 -r0 \ xsrc/external/mit/xf86-video-openchrome/dist/src/via_vbe.c cvs rdiff -u -r1.2 -r1.3 \ xsrc/external/mit/xf86-video-openchrome/include/config.h cvs rdiff -u -r1.2 -r1.3 \ xsrc/external/mit/xf86-video-rendition/dist/src/rendition.c \ xsrc/external/mit/xf86-video-rendition/dist/src/rendition.h cvs rdiff -u -r1.4 -r1.5 \ xsrc/external/mit/xf86-video-s3virge/dist/src/s3v_driver.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: xsrc/external/mit/xf86-video-geode/dist/src/geode.h diff -u xsrc/external/mit/xf86-video-geode/dist/src/geode.h:1.3 xsrc/external/mit/xf86-video-geode/dist/src/geode.h:1.4 --- xsrc/external/mit/xf86-video-geode/dist/src/geode.h:1.3 Tue Aug 16 07:39:45 2016 +++ xsrc/external/mit/xf86-video-geode/dist/src/geode.h Fri Aug 19 23:37:39 2016 @@ -27,10 +27,10 @@ #ifndef _GEODE_H_ #define _GEODE_H_ -#include "geode_pcirename.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif +#include "geode_pcirename.h" #include "xorg-server.h" #ifdef HAVE_XAA_H @@ -442,6 +442,10 @@ void GXAccelSync(ScrnInfoPtr pScrni); /* gx_video.c */ void GXInitVideo(ScreenPtr pScrn); +/* lx_display.c */ +void lx_enable_dac_power(ScrnInfoPtr pScrni, int option); +void lx_disable_dac_power(ScrnInfoPtr pScrni, int option); + /* lx_driver.c */ void LXSetupChipsetFPtr(ScrnInfoPtr pScrn); Index: xsrc/external/mit/xf86-video-geode/dist/src/geode_msr.c diff -u xsrc/external/mit/xf86-video-geode/dist/src/geode_msr.c:1.5 xsrc/external/mit/xf86-video-geode/dist/src/geode_msr.c:1.6 --- xsrc/external/mit/xf86-video-geode/dist/src/geode_msr.c:1.5 Mon Jul 20 00:10:28 2015 +++ xsrc/external/mit/xf86-video-geode/dist/src/geode_msr.c Fri Aug 19 23:37:39 2016 @@ -39,12 +39,19 @@ #include <machine/amdmsr.h> #endif +#ifdef __FreeBSD__ +#include <sys/ioctl.h> +#include <sys/cpuctl.h> +#endif + #include "os.h" #include "geode.h" #ifdef __OpenBSD__ #define _PATH_MSRDEV "/dev/amdmsr" #define X_PRIVSEP +#elif defined __FreeBSD__ +#define _PATH_MSRDEV "/dev/cpuctl0" #else #define _PATH_MSRDEV "/dev/cpu/0/msr" #endif @@ -83,6 +90,18 @@ GeodeReadMSR(unsigned long addr, unsigne *hi = req.val >> 32; *lo = req.val & 0xffffffff; +#elif defined __FreeBSD__ + cpuctl_msr_args_t args; + int fd = _msr_open(); + + args.msr = addr; + + if (ioctl(fd, CPUCTL_RDMSR, &args) == -1) + FatalError("Unable to read MSR at address %0x06x: %s\n", addr, + strerror(errno)); + + *hi = args.data >> 32; + *lo = args.data & 0xffffffff; #else unsigned int data[2]; int fd = _msr_open(); @@ -120,6 +139,16 @@ GeodeWriteMSR(unsigned long addr, unsign if (ioctl(fd, WRMSR, &req) == -1) FatalError("Unable to write MSR at address 0x%06x: %s\n", addr, strerror(errno)); +#elif defined __FreeBSD__ + cpuctl_msr_args_t args; + int fd = _msr_open(); + + args.msr = addr; + args.data = (u_int64_t) hi << 32 | (u_int64_t)lo; + + if (ioctl(fd, CPUCTL_WRMSR, &args) == -1) + FatalError("Unable to write MSR at address 0x%06x: %s\n", addr, + strerror(errno)); #else unsigned int data[2]; int fd = _msr_open(); Index: xsrc/external/mit/xf86-video-geode/dist/src/gx_accel.c diff -u xsrc/external/mit/xf86-video-geode/dist/src/gx_accel.c:1.2 xsrc/external/mit/xf86-video-geode/dist/src/gx_accel.c:1.3 --- xsrc/external/mit/xf86-video-geode/dist/src/gx_accel.c:1.2 Tue Aug 16 07:39:45 2016 +++ xsrc/external/mit/xf86-video-geode/dist/src/gx_accel.c Fri Aug 19 23:37:39 2016 @@ -1490,7 +1490,8 @@ static Bool amd_gx_exa_UploadToScreen(PixmapPtr pDst, int x, int y, int w, int h, char *src, int src_pitch) { - char *dst = pDst->devPrivate.ptr; + GeodeRec *pGeode = GEODEPTR_FROM_PIXMAP(pDst); + char *dst = pGeode->pExa->memoryBase + exaGetPixmapOffset(pDst); int dst_pitch = exaGetPixmapPitch(pDst); int bpp = pDst->drawable.bitsPerPixel; @@ -1505,7 +1506,8 @@ static Bool amd_gx_exa_DownloadFromScreen(PixmapPtr pSrc, int x, int y, int w, int h, char *dst, int dst_pitch) { - char *src = pSrc->devPrivate.ptr; + GeodeRec *pGeode = GEODEPTR_FROM_PIXMAP(pSrc); + char *src = pGeode->pExa->memoryBase + exaGetPixmapOffset(pSrc); int src_pitch = exaGetPixmapPitch(pSrc); int bpp = pSrc->drawable.bitsPerPixel; @@ -1741,6 +1743,7 @@ amd_gx_exa_PrepareComposite(int op, Pict PixmapPtr pxDst) { int srcPitch; + if (!pxSrc || !pSrc->pDrawable) return FALSE; GeodeRec *pGeode = GEODEPTR_FROM_PIXMAP(pxDst); amd_gx_exa_fmt_t *sfp, *dfp; Index: xsrc/external/mit/xf86-video-geode/dist/src/lx_driver.c diff -u xsrc/external/mit/xf86-video-geode/dist/src/lx_driver.c:1.2 xsrc/external/mit/xf86-video-geode/dist/src/lx_driver.c:1.3 --- xsrc/external/mit/xf86-video-geode/dist/src/lx_driver.c:1.2 Tue Aug 16 07:39:45 2016 +++ xsrc/external/mit/xf86-video-geode/dist/src/lx_driver.c Fri Aug 19 23:37:39 2016 @@ -683,6 +683,8 @@ LXLeaveGraphics(ScrnInfoPtr pScrni) gp_wait_until_idle(); + lx_disable_dac_power(pScrni, DF_CRT_DISABLE); + vg_set_custom_mode(&(pGeode->FBcimdisplaytiming.vgDisplayMode), pGeode->FBcimdisplaytiming.wBpp); @@ -711,6 +713,7 @@ LXLeaveGraphics(ScrnInfoPtr pScrni) vg_delay_milliseconds(3); } + lx_enable_dac_power(pScrni, 1); pScrni->vtSema = FALSE; } Index: xsrc/external/mit/xf86-video-openchrome/dist/src/via_display.c diff -u xsrc/external/mit/xf86-video-openchrome/dist/src/via_display.c:1.2 xsrc/external/mit/xf86-video-openchrome/dist/src/via_display.c:1.3 --- xsrc/external/mit/xf86-video-openchrome/dist/src/via_display.c:1.2 Mon Jun 3 22:44:40 2013 +++ xsrc/external/mit/xf86-video-openchrome/dist/src/via_display.c Fri Aug 19 23:37:39 2016 @@ -1,5 +1,6 @@ /* - * Copyright 2005-2011 The Openchrome Project [openchrome.org] + * Copyright 2005-2015 The Openchrome Project + * [http://www.freedesktop.org/wiki/Openchrome] * Copyright 2004-2005 The Unichrome Project [unichrome.sf.net] * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. @@ -312,8 +313,8 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, D } switch (pVia->ChipId) { - case VIA_K8M890: case VIA_CX700: + case VIA_K8M890: case VIA_P4M900: case VIA_VX800: case VIA_VX855: @@ -323,7 +324,7 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, D ViaSeqMask(hwp, 0x16, 0x08, 0xBF); ViaSeqMask(hwp, 0x17, 0x1F, 0xFF); ViaSeqMask(hwp, 0x18, 0x4E, 0xFF); - ViaSeqMask(hwp, 0x1A, 0x08, 0xFD); + ViaSeqMask(hwp, 0x1A, 0x08, 0xF9); break; } @@ -417,8 +418,8 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, D /* FIXME: check if this is really necessary here */ switch (pVia->ChipId) { - case VIA_K8M890: case VIA_CX700: + case VIA_K8M890: case VIA_P4M900: case VIA_VX800: case VIA_VX855: @@ -454,8 +455,8 @@ ViaFirstCRTCSetMode(ScrnInfoPtr pScrn, D ViaSeqMask(hwp, 0x1D, temp >> 9, 0x03); switch (pVia->ChipId) { - case VIA_K8M890: case VIA_CX700: + case VIA_K8M890: case VIA_P4M900: case VIA_VX800: case VIA_VX855: @@ -582,8 +583,8 @@ ViaSecondCRTCSetMode(ScrnInfoPtr pScrn, } switch (pVia->ChipId) { - case VIA_K8M890: case VIA_CX700: + case VIA_K8M890: case VIA_P4M900: case VIA_VX800: case VIA_VX855: @@ -593,7 +594,7 @@ ViaSecondCRTCSetMode(ScrnInfoPtr pScrn, ViaSeqMask(hwp, 0x16, 0x08, 0xBF); ViaSeqMask(hwp, 0x17, 0x1F, 0xFF); ViaSeqMask(hwp, 0x18, 0x4E, 0xFF); - ViaSeqMask(hwp, 0x1A, 0x08, 0xFD); + ViaSeqMask(hwp, 0x1A, 0x08, 0xF9); break; } @@ -668,8 +669,8 @@ ViaSecondCRTCSetMode(ScrnInfoPtr pScrn, ViaCrtcMask(hwp, 0x5F, temp, 0x1F); switch (pVia->ChipId) { - case VIA_K8M890: case VIA_CX700: + case VIA_K8M890: case VIA_P4M900: case VIA_VX800: case VIA_VX855: @@ -826,29 +827,26 @@ iga1_crtc_dpms(xf86CrtcPtr crtc, int mod VIAPtr pVia = VIAPTR(pScrn); VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; - if (pVia->pVbe) { - ViaVbeDPMS(pScrn, mode); - } else { - switch (mode) { - case DPMSModeOn: - if (pBIOSInfo->SimultaneousEnabled) - ViaDisplayEnableSimultaneous(pScrn); - break; - - case DPMSModeStandby: - case DPMSModeSuspend: - case DPMSModeOff: - if (pBIOSInfo->SimultaneousEnabled) - ViaDisplayDisableSimultaneous(pScrn); - break; - - default: - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Invalid DPMS mode %d\n", - mode); - break; - } - //vgaHWSaveScreen(pScrn->pScreen, mode); + switch (mode) { + case DPMSModeOn: + if (pBIOSInfo->SimultaneousEnabled) + ViaDisplayEnableSimultaneous(pScrn); + break; + + case DPMSModeStandby: + case DPMSModeSuspend: + case DPMSModeOff: + if (pBIOSInfo->SimultaneousEnabled) + ViaDisplayDisableSimultaneous(pScrn); + break; + + default: + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Invalid DPMS mode %d\n", + mode); + break; } + //vgaHWSaveScreen(pScrn->pScreen, mode); + } static void @@ -858,12 +856,7 @@ iga1_crtc_save(xf86CrtcPtr crtc) vgaHWPtr hwp = VGAHWPTR(pScrn); VIAPtr pVia = VIAPTR(pScrn); - if (pVia->pVbe && pVia->vbeSR) { - ViaVbeSaveRestore(pScrn, MODE_SAVE); - } else { - VIASave(pScrn); - } - + VIASave(pScrn); vgaHWUnlock(hwp); } @@ -874,10 +867,7 @@ iga1_crtc_restore(xf86CrtcPtr crtc) vgaHWPtr hwp = VGAHWPTR(pScrn); VIAPtr pVia = VIAPTR(pScrn); - if (pVia->pVbe && pVia->vbeSR) - ViaVbeSaveRestore(pScrn, MODE_RESTORE); - else - VIARestore(pScrn); + VIARestore(pScrn); /* A soft reset helps to avoid a 3D hang on VT switch. */ switch (pVia->Chipset) { @@ -915,9 +905,6 @@ iga1_crtc_mode_fixup(xf86CrtcPtr crtc, D CARD32 temp; ModeStatus modestatus; - if (pVia->pVbe) - return TRUE; - if ((mode->Clock < pScrn->clockRanges->minClock) || (mode->Clock > pScrn->clockRanges->maxClock)) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, @@ -956,11 +943,7 @@ iga1_crtc_set_origin(xf86CrtcPtr crtc, i ScrnInfoPtr pScrn = crtc->scrn; VIAPtr pVia = VIAPTR(pScrn); - if (pVia->pVbe) { - ViaVbeAdjustFrame(pScrn, x, y); - } else { - ViaFirstCRTCSetStartingAddress(crtc, x, y); - } + ViaFirstCRTCSetStartingAddress(crtc, x, y); VIAVidAdjustFrame(pScrn, x, y); } @@ -972,25 +955,17 @@ iga1_crtc_mode_set(xf86CrtcPtr crtc, Dis ScrnInfoPtr pScrn = crtc->scrn; VIAPtr pVia = VIAPTR(pScrn); - if (!pVia->pVbe) { - if (!vgaHWInit(pScrn, adjusted_mode)) - return; + if (!vgaHWInit(pScrn, adjusted_mode)) + return; - if (pVia->UseLegacyModeSwitch) { - ViaModePrimaryLegacy(crtc, adjusted_mode); - } else { - ViaCRTCInit(pScrn); - ViaModeFirstCRTC(pScrn, adjusted_mode); + ViaCRTCInit(pScrn); + ViaModeFirstCRTC(pScrn, adjusted_mode); + + if (pVia->pBIOSInfo->SimultaneousEnabled) + ViaDisplayEnableSimultaneous(pScrn); + else + ViaDisplayDisableSimultaneous(pScrn); - if (pVia->pBIOSInfo->SimultaneousEnabled) - ViaDisplayEnableSimultaneous(pScrn); - else - ViaDisplayDisableSimultaneous(pScrn); - } - } else { - if (!ViaVbeSetMode(pScrn, adjusted_mode)) - return; - } iga1_crtc_set_origin(crtc, crtc->x, crtc->y); } @@ -1245,7 +1220,7 @@ static const xf86CrtcFuncsRec iga1_crtc_ .show_cursor = iga1_crtc_show_cursor, .hide_cursor = iga1_crtc_hide_cursor, .load_cursor_argb = iga_crtc_load_cursor_argb, -#ifdef RANDR_12_INTERFACE +#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) > 2 .set_origin = iga1_crtc_set_origin, #endif .destroy = iga_crtc_destroy, @@ -1258,29 +1233,25 @@ iga2_crtc_dpms(xf86CrtcPtr crtc, int mod VIAPtr pVia = VIAPTR(pScrn); VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; - if (pVia->pVbe) { - ViaVbeDPMS(pScrn, mode); - } else { - switch (mode) { - case DPMSModeOn: - if (pBIOSInfo->SimultaneousEnabled) - ViaDisplayEnableSimultaneous(pScrn); - break; + switch (mode) { + case DPMSModeOn: + if (pBIOSInfo->SimultaneousEnabled) + ViaDisplayEnableSimultaneous(pScrn); + break; - case DPMSModeStandby: - case DPMSModeSuspend: - case DPMSModeOff: - if (pBIOSInfo->SimultaneousEnabled) - ViaDisplayDisableSimultaneous(pScrn); - break; + case DPMSModeStandby: + case DPMSModeSuspend: + case DPMSModeOff: + if (pBIOSInfo->SimultaneousEnabled) + ViaDisplayDisableSimultaneous(pScrn); + break; - default: - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Invalid DPMS mode %d\n", - mode); - break; - } - //vgaHWSaveScreen(pScrn->pScreen, mode); + default: + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Invalid DPMS mode %d\n", + mode); + break; } + //vgaHWSaveScreen(pScrn->pScreen, mode); } static void @@ -1290,11 +1261,8 @@ iga2_crtc_save(xf86CrtcPtr crtc) vgaHWPtr hwp = VGAHWPTR(pScrn); VIAPtr pVia = VIAPTR(pScrn); - if (pVia->pVbe && pVia->vbeSR) - ViaVbeSaveRestore(pScrn, MODE_SAVE); - else - VIASave(pScrn); - vgaHWUnlock(hwp); + VIASave(pScrn); + vgaHWUnlock(hwp); } static void @@ -1304,10 +1272,7 @@ iga2_crtc_restore(xf86CrtcPtr crtc) vgaHWPtr hwp = VGAHWPTR(pScrn); VIAPtr pVia = VIAPTR(pScrn); - if (pVia->pVbe && pVia->vbeSR) - ViaVbeSaveRestore(pScrn, MODE_RESTORE); - else - VIARestore(pScrn); + VIARestore(pScrn); vgaHWLock(hwp); } @@ -1331,9 +1296,6 @@ iga2_crtc_mode_fixup(xf86CrtcPtr crtc, D CARD32 temp; ModeStatus modestatus; - if (pVia->pVbe) - return TRUE; - if ((mode->Clock < pScrn->clockRanges->minClock) || (mode->Clock > pScrn->clockRanges->maxClock)) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, @@ -1372,11 +1334,7 @@ iga2_crtc_set_origin(xf86CrtcPtr crtc, i ScrnInfoPtr pScrn = crtc->scrn; VIAPtr pVia = VIAPTR(pScrn); - if (pVia->pVbe) { - ViaVbeAdjustFrame(pScrn, x, y); - } else { - ViaSecondCRTCSetStartingAddress(crtc, x, y); - } + ViaSecondCRTCSetStartingAddress(crtc, x, y); VIAVidAdjustFrame(pScrn, x, y); } @@ -1387,26 +1345,18 @@ iga2_crtc_mode_set(xf86CrtcPtr crtc, Dis ScrnInfoPtr pScrn = crtc->scrn; VIAPtr pVia = VIAPTR(pScrn); - if (pVia->pVbe) { - if (!ViaVbeSetMode(pScrn, adjusted_mode)) - return; - } else { - if (!vgaHWInit(pScrn, adjusted_mode)) - return; + if (!vgaHWInit(pScrn, adjusted_mode)) + return; - if (pVia->UseLegacyModeSwitch) { - ViaModeSecondaryLegacy(crtc, adjusted_mode); - } else { - ViaCRTCInit(pScrn); - ViaModeSecondCRTC(pScrn, adjusted_mode); - ViaSecondDisplayChannelEnable(pScrn); + ViaCRTCInit(pScrn); + ViaModeSecondCRTC(pScrn, adjusted_mode); + ViaSecondDisplayChannelEnable(pScrn); + + if (pVia->pBIOSInfo->SimultaneousEnabled) + ViaDisplayEnableSimultaneous(pScrn); + else + ViaDisplayDisableSimultaneous(pScrn); - if (pVia->pBIOSInfo->SimultaneousEnabled) - ViaDisplayEnableSimultaneous(pScrn); - else - ViaDisplayDisableSimultaneous(pScrn); - } - } iga2_crtc_set_origin(crtc, crtc->x, crtc->y); } @@ -1667,7 +1617,7 @@ static const xf86CrtcFuncsRec iga2_crtc_ .show_cursor = iga2_crtc_show_cursor, .hide_cursor = iga2_crtc_hide_cursor, .load_cursor_argb = iga_crtc_load_cursor_argb, -#ifdef RANDR_12_INTERFACE +#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) > 2 .set_origin = iga2_crtc_set_origin, #endif .destroy = iga_crtc_destroy, @@ -1679,7 +1629,11 @@ UMSCrtcInit(ScrnInfoPtr pScrn) drmmode_crtc_private_ptr iga1_rec = NULL, iga2_rec = NULL; vgaHWPtr hwp = VGAHWPTR(pScrn); VIAPtr pVia = VIAPTR(pScrn); +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,8,0,0,0) ClockRangePtr clockRanges; +#else + ClockRangesPtr clockRanges; +#endif int max_pitch, max_height; VIABIOSInfoPtr pBIOSInfo; xf86CrtcPtr iga1, iga2; @@ -1722,28 +1676,16 @@ UMSCrtcInit(ScrnInfoPtr pScrn) if (!xf86LoadSubModule(pScrn, "ddc")) return FALSE; - pVia->pVbe = NULL; - if (pVia->useVBEModes) { - /* VBE doesn't properly initialise int10 itself. */ - if (xf86LoadSubModule(pScrn, "int10") && - xf86LoadSubModule(pScrn, "vbe")) { - pVia->pVbe = VBEExtendedInit(NULL, pVia->EntityIndex, - SET_BIOS_SCRATCH | - RESTORE_BIOS_SCRATCH); - } - - if (!pVia->pVbe) - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "VBE initialisation failed." - " Using builtin code to set modes.\n"); - else - ConfiguredMonitor = vbeDoEDID(pVia->pVbe, NULL); - } - /* * Set up ClockRanges, which describe what clock ranges are * available, and what sort of modes they can be used for. */ + +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,8,0,0,0) clockRanges = xnfalloc(sizeof(ClockRange)); +#else + clockRanges = xnfalloc(sizeof(ClockRanges)); +#endif clockRanges->next = NULL; clockRanges->minClock = 20000; clockRanges->maxClock = 230000; @@ -1807,14 +1749,14 @@ UMSCrtcInit(ScrnInfoPtr pScrn) case VIA_KM400: case VIA_K8M800: case VIA_PM800: - case VIA_VM800: + case VIA_P4M800PRO: max_pitch = 3344; max_height = 2508; break; case VIA_CX700: - case VIA_K8M890: case VIA_P4M890: + case VIA_K8M890: case VIA_P4M900: max_pitch = 8192/(pScrn->bitsPerPixel >> 3)-1; max_height = max_pitch; @@ -1860,9 +1802,5 @@ UMSCrtcInit(ScrnInfoPtr pScrn) ViaOutputsDetect(pScrn); - if (pVia->pVbe) { - if (!ViaVbeModePreInit(pScrn)) - return FALSE; - } return TRUE; } Index: xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.c diff -u xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.c:1.2 xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.c:1.3 --- xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.c:1.2 Fri Jun 28 16:53:55 2013 +++ xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.c Fri Aug 19 23:37:39 2016 @@ -1,5 +1,6 @@ /* - * Copyright 2005-2007 The Openchrome Project [openchrome.org] + * Copyright 2005-2015 The Openchrome Project + * [http://www.freedesktop.org/wiki/Openchrome] * Copyright 2004-2006 Luc Verhaegen. * Copyright 2004-2005 The Unichrome Project [unichrome.sf.net] * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. @@ -41,6 +42,7 @@ #include "version.h" #include "via_driver.h" +#include "drm_fourcc.h" #if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 6 #include "xf86RAC.h" @@ -49,6 +51,8 @@ #ifdef HAVE_DRI #include "dri.h" +#else +#include "drm_fourcc.h" #endif /* RandR support */ @@ -123,36 +127,36 @@ _X_EXPORT DriverRec VIA = { /* Supported chipsets */ static SymTabRec VIAChipsets[] = { - {VIA_CLE266, "CLE266"}, - {VIA_KM400, "KM400/KN400"}, - {VIA_K8M800, "K8M800/K8N800"}, - {VIA_PM800, "PM800/PM880/CN400"}, - {VIA_VM800, "VM800/P4M800Pro/VN800/CN700"}, - {VIA_CX700, "CX700/VX700"}, - {VIA_K8M890, "K8M890/K8N890"}, - {VIA_P4M890, "P4M890"}, - {VIA_P4M900, "P4M900/VN896/CN896"}, - {VIA_VX800, "VX800/VX820"}, - {VIA_VX855, "VX855/VX875"}, - {VIA_VX900, "VX900"}, - {-1, NULL } + {VIA_CLE266, "CLE266"}, + {VIA_KM400, "KM400 / KM400A / KN400 / P4M800"}, + {VIA_K8M800, "K8M800 / K8N800"}, + {VIA_PM800, "PM800 / PN800 / PM880 / CN333 / CN400"}, + {VIA_P4M800PRO, "P4M800 Pro / VN800 / CN700"}, + {VIA_CX700, "CX700 / VX700"}, + {VIA_P4M890, "P4M890 / VN890 / CN800"}, + {VIA_K8M890, "K8M890 / K8N890"}, + {VIA_P4M900, "P4M900 / VN896 / CN896"}, + {VIA_VX800, "VX800 / VX820"}, + {VIA_VX855, "VX855 / VX875"}, + {VIA_VX900, "VX900"}, + {-1, NULL} }; /* Mapping a PCI device ID to a chipset family identifier. */ static PciChipsets VIAPciChipsets[] = { - {VIA_CLE266, PCI_CHIP_CLE3122, VIA_RES_SHARED}, - {VIA_KM400, PCI_CHIP_VT3205, VIA_RES_SHARED}, - {VIA_K8M800, PCI_CHIP_VT3204, VIA_RES_SHARED}, - {VIA_PM800, PCI_CHIP_VT3259, VIA_RES_SHARED}, - {VIA_VM800, PCI_CHIP_VT3314, VIA_RES_SHARED}, - {VIA_CX700, PCI_CHIP_VT3324, VIA_RES_SHARED}, - {VIA_K8M890, PCI_CHIP_VT3336, VIA_RES_SHARED}, - {VIA_P4M890, PCI_CHIP_VT3327, VIA_RES_SHARED}, - {VIA_P4M900, PCI_CHIP_VT3364, VIA_RES_SHARED}, - {VIA_VX800, PCI_CHIP_VT3353, VIA_RES_SHARED}, - {VIA_VX855, PCI_CHIP_VT3409, VIA_RES_SHARED}, - {VIA_VX900, PCI_CHIP_VT3410, VIA_RES_SHARED}, - {-1, -1, VIA_RES_UNDEF} + {VIA_CLE266, PCI_CHIP_CLE3122, VIA_RES_SHARED}, + {VIA_KM400, PCI_CHIP_VT3205, VIA_RES_SHARED}, + {VIA_K8M800, PCI_CHIP_VT3204, VIA_RES_SHARED}, + {VIA_PM800, PCI_CHIP_VT3259, VIA_RES_SHARED}, + {VIA_P4M800PRO, PCI_CHIP_VT3314, VIA_RES_SHARED}, + {VIA_CX700, PCI_CHIP_VT3324, VIA_RES_SHARED}, + {VIA_P4M890, PCI_CHIP_VT3327, VIA_RES_SHARED}, + {VIA_K8M890, PCI_CHIP_VT3336, VIA_RES_SHARED}, + {VIA_P4M900, PCI_CHIP_VT3364, VIA_RES_SHARED}, + {VIA_VX800, PCI_CHIP_VT3353, VIA_RES_SHARED}, + {VIA_VX855, PCI_CHIP_VT3409, VIA_RES_SHARED}, + {VIA_VX900, PCI_CHIP_VT3410, VIA_RES_SHARED}, + {-1, -1, VIA_RES_UNDEF} }; typedef enum @@ -162,7 +166,6 @@ typedef enum OPTION_PRINTTVREGS, OPTION_I2CSCAN, #endif - OPTION_VBEMODES, OPTION_NOACCEL, OPTION_ACCELMETHOD, OPTION_EXA_NOCOMPOSITE, @@ -172,12 +175,9 @@ typedef enum OPTION_ROTATION_TYPE, OPTION_ROTATE, OPTION_VIDEORAM, - OPTION_ACTIVEDEVICE, OPTION_I2CDEVICES, OPTION_BUSWIDTH, OPTION_CENTER, - OPTION_PANELSIZE, - OPTION_FORCEPANEL, OPTION_TVDOTCRAWL, OPTION_TVTYPE, OPTION_TVOUTPUT, @@ -188,11 +188,9 @@ typedef enum OPTION_AGP_DMA, OPTION_2D_DMA, OPTION_XV_DMA, - OPTION_VBE_SAVERESTORE, OPTION_MAX_DRIMEM, OPTION_AGPMEM, - OPTION_DISABLE_XV_BW_CHECK, - OPTION_MODE_SWITCH_METHOD + OPTION_DISABLE_XV_BW_CHECK } VIAOpts; static OptionInfoRec VIAOptions[] = { @@ -201,7 +199,6 @@ static OptionInfoRec VIAOptions[] = { {OPTION_PRINTTVREGS, "PrintTVRegs", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_I2CSCAN, "I2CScan", OPTV_BOOLEAN, {0}, FALSE}, #endif - {OPTION_VBEMODES, "VBEModes", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_ACCELMETHOD, "AccelMethod", OPTV_STRING, {0}, FALSE}, {OPTION_EXA_NOCOMPOSITE, "ExaNoComposite", OPTV_BOOLEAN, {0}, FALSE}, @@ -211,7 +208,6 @@ static OptionInfoRec VIAOptions[] = { {OPTION_ROTATION_TYPE, "RotationType", OPTV_ANYSTR, {0}, FALSE}, {OPTION_ROTATE, "Rotate", OPTV_ANYSTR, {0}, FALSE}, {OPTION_VIDEORAM, "VideoRAM", OPTV_INTEGER, {0}, FALSE}, - {OPTION_ACTIVEDEVICE, "ActiveDevice", OPTV_ANYSTR, {0}, FALSE}, {OPTION_TVDOTCRAWL, "TVDotCrawl", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_TVDEFLICKER, "TVDeflicker", OPTV_INTEGER, {0}, FALSE}, {OPTION_TVTYPE, "TVType", OPTV_ANYSTR, {0}, FALSE}, @@ -222,9 +218,7 @@ static OptionInfoRec VIAOptions[] = { {OPTION_AGP_DMA, "EnableAGPDMA", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_2D_DMA, "NoAGPFor2D", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_XV_DMA, "NoXVDMA", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_VBE_SAVERESTORE, "VbeSaveRestore", OPTV_BOOLEAN, {0}, FALSE}, {OPTION_DISABLE_XV_BW_CHECK, "DisableXvBWCheck", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_MODE_SWITCH_METHOD, "ModeSwitchMethod", OPTV_ANYSTR, {0}, FALSE}, {OPTION_MAX_DRIMEM, "MaxDRIMem", OPTV_INTEGER, {0}, FALSE}, {OPTION_AGPMEM, "AGPMem", OPTV_INTEGER, {0}, FALSE}, {OPTION_I2CDEVICES, "I2CDevices", OPTV_ANYSTR, {0}, FALSE}, @@ -236,7 +230,7 @@ static MODULESETUPPROTO(VIASetup); static XF86ModuleVersionInfo VIAVersRec = { "openchrome", - "http://openchrome.org/", + "http://www.freedesktop.org/wiki/Openchrome/", MODINFOSTRING1, MODINFOSTRING2, #ifdef XORG_VERSION_CURRENT @@ -426,13 +420,10 @@ VIAFreeRec(ScrnInfoPtr pScrn) free(pBIOSInfo); } - if (VIAPTR(pScrn)->pVbe) - vbeFree(VIAPTR(pScrn)->pVbe); - if (pVia->VideoRegs) free(pVia->VideoRegs); - VIAUnmapMem(pScrn); + VIAUnmapMMIO(pScrn); free(pScrn->driverPrivate); pScrn->driverPrivate = NULL; @@ -450,9 +441,6 @@ VIAFreeScreen(FREE_SCREEN_ARGS_DECL) DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAFreeScreen\n")); - if (pVia->directRenderingType != DRI_2) - VIAUnmapMem(pScrn); - VIAFreeRec(pScrn); if (!pVia->KMS && xf86LoaderCheckSymbol("vgaHWFreeHWRec")) @@ -496,7 +484,8 @@ via_pci_probe(DriverPtr driver, int enti xf86Msg(X_NOTICE, "VIA Technologies does not support this driver in any way.\n"); xf86Msg(X_NOTICE, - "For support, please refer to http://www.openchrome.org/.\n"); + "For support, please refer to" + " http://www.freedesktop.org/wiki/Openchrome/.\n"); #ifdef BUILDCOMMENT xf86Msg(X_NOTICE, BUILDCOMMENT"\n"); #endif @@ -536,7 +525,8 @@ VIAProbe(DriverPtr drv, int flags) xf86Msg(X_NOTICE, "VIA Technologies does not support this driver in any way.\n"); - xf86Msg(X_NOTICE, "For support, please refer to http://openchrome.org/.\n"); + xf86Msg(X_NOTICE, "For support, please refer to" + " http://www.freedesktop.org/wiki/Openchrome/.\n"); #ifdef BUILDCOMMENT xf86Msg(X_NOTICE, BUILDCOMMENT"\n"); @@ -659,14 +649,11 @@ VIASetupDefaultOptions(ScrnInfoPtr pScrn pVia->agpEnable = TRUE; pVia->dma2d = TRUE; pVia->dmaXV = TRUE; - pVia->useVBEModes = FALSE; - pVia->vbeSR = FALSE; #ifdef HAVE_DEBUG pVia->disableXvBWCheck = FALSE; #endif pVia->maxDriSize = 0; pVia->agpMem = AGP_SIZE / 1024; - pVia->ActiveDevice = 0x00; pVia->I2CDevices = VIA_I2C_BUS1 | VIA_I2C_BUS2 | VIA_I2C_BUS3; pVia->VideoEngine = VIDEO_ENGINE_CLE; #ifdef HAVE_DEBUG @@ -677,15 +664,12 @@ VIASetupDefaultOptions(ScrnInfoPtr pScrn /* line buffer (limited to 800) is too small to do interpolation. */ pVia->swov.maxWInterp = 800; pVia->swov.maxHInterp = 600; - pVia->useLegacyVBE = TRUE; - pVia->UseLegacyModeSwitch = FALSE; pBIOSInfo->TVDIPort = VIA_DI_PORT_DVP1; switch (pVia->Chipset) { case VIA_CLE266: pBIOSInfo->TVDIPort = VIA_DI_PORT_DVP0; - pVia->UseLegacyModeSwitch = TRUE; break; case VIA_KM400: /* IRQ is not broken on KM400A, but testing (pVia->ChipRev < 0x80) @@ -697,32 +681,27 @@ VIASetupDefaultOptions(ScrnInfoPtr pScrn pVia->DRIIrqEnable = FALSE; break; case VIA_PM800: - /* Use new mode switch to resolve many resolution and display bugs (switch to console) */ - /* FIXME The video playing (XV) is not working correctly after turn on new mode switch */ pVia->VideoEngine = VIDEO_ENGINE_CME; break; - case VIA_VM800: - /* New mode switch resolve bug with gamma set #282 */ - /* and with Xv after hibernate #240 */ + case VIA_P4M800PRO: break; case VIA_CX700: pVia->VideoEngine = VIDEO_ENGINE_CME; pVia->swov.maxWInterp = 1920; pVia->swov.maxHInterp = 1080; break; - case VIA_K8M890: + case VIA_P4M890: pVia->VideoEngine = VIDEO_ENGINE_CME; - pVia->agpEnable = FALSE; pVia->dmaXV = FALSE; break; - case VIA_P4M890: + case VIA_K8M890: pVia->VideoEngine = VIDEO_ENGINE_CME; + pVia->agpEnable = FALSE; pVia->dmaXV = FALSE; break; case VIA_P4M900: pVia->VideoEngine = VIDEO_ENGINE_CME; pVia->agpEnable = FALSE; - pVia->useLegacyVBE = FALSE; /* FIXME: this needs to be tested */ pVia->dmaXV = FALSE; pBIOSInfo->TVDIPort = VIA_DI_PORT_DVP0; @@ -806,8 +785,8 @@ via_xf86crtc_resize(ScrnInfoPtr scrn, in { xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); struct buffer_object *old_front = NULL, *new_front = NULL; + int cpp = (scrn->bitsPerPixel + 7) >> 3, fd, i; int old_width, old_height, old_dwidth, format; - int cpp = (scrn->bitsPerPixel + 7) >> 3, i; ScreenPtr screen = scrn->pScreen; VIAPtr pVia = VIAPTR(scrn); void *new_pixels = NULL; @@ -849,7 +828,6 @@ via_xf86crtc_resize(ScrnInfoPtr scrn, in #if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,9,99,1,0) scrn->pixmapPrivate.ptr = ppix->devPrivate.ptr; #endif - scrn->virtualX = width; scrn->virtualY = height; scrn->displayWidth = new_front->pitch / cpp; @@ -859,44 +837,38 @@ via_xf86crtc_resize(ScrnInfoPtr scrn, in drmmode_crtc_private_ptr drmmode_crtc; drmmode_ptr drmmode; - if (!crtc->enabled || !crtc->driver_private) + if (!xf86CrtcInUse(crtc) || !crtc->driver_private) continue; drmmode_crtc = crtc->driver_private; drmmode = drmmode_crtc->drmmode; - old_front = drmmode->front_bo; - old_fb_id = drmmode->fb_id; + if (drmmode->front_bo != new_front) { + old_front = drmmode->front_bo; + old_fb_id = drmmode->fb_id; + fd = drmmode->fd; - drmmode->front_bo = new_front; - drmmode->fb_id = 0; + drmmode->front_bo = new_front; + drmmode->fb_id = 0; + } - ret = xf86CrtcSetMode(crtc, &crtc->mode, crtc->rotation, + ret = xf86CrtcSetMode(crtc, &crtc->desiredMode, crtc->rotation, crtc->x, crtc->y); if (!ret) { - xf86DrvMsg(scrn->scrnIndex, X_INFO, - "SetMode !ret so we reset front_bo\n"); drmmode->front_bo = old_front; drmmode->fb_id = old_fb_id; - break; -#ifdef HAVE_DRI - } else { - xf86DrvMsg(scrn->scrnIndex, X_INFO, - "SetMode ret so we cleanup old front_bo\n"); - if (pVia->KMS && old_fb_id) - drmModeRmFB(drmmode->fd, old_fb_id); -#endif + xf86DrvMsg(scrn->scrnIndex, X_INFO, "xf86CrtcSetMode failed\n"); + goto fail; } } - - if (ret) { - xf86DrvMsg(scrn->scrnIndex, X_INFO, - "More cleanup old front_bo\n"); - drm_bo_unmap(scrn, old_front); - drm_bo_free(scrn, old_front); - return ret; - } +#ifdef HAVE_DRI + if (pVia->KMS && old_fb_id) + drmModeRmFB(fd, old_fb_id); +#endif + drm_bo_unmap(scrn, old_front); + drm_bo_free(scrn, old_front); + return ret; fail: if (new_front) { @@ -922,7 +894,7 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) VIAPtr pVia; VIABIOSInfoPtr pBIOSInfo; MessageType from = X_DEFAULT; - char *s = NULL; + const char *s = NULL; #ifdef HAVE_DRI char *busId = NULL; drmVersionPtr drmVer; @@ -1032,7 +1004,9 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) pVia->ChipRev = pciReadByte(pciTag(0, 0, 0), 0xF6); #endif } - free(pEnt); + + if (pEnt) + free(pEnt); xf86DrvMsg(pScrn->scrnIndex, from, "Chipset revision: %d\n", pVia->ChipRev); pVia->directRenderingType = DRI_NONE; @@ -1110,7 +1084,6 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) */ if (!xf86SetDepthBpp(pScrn, 0, 0, 0, Support32bppFb)) { - free(pEnt); VIAFreeRec(pScrn); return FALSE; } else { @@ -1125,7 +1098,6 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Given depth (%d) is not supported by this driver\n", pScrn->depth); - free(pEnt); VIAFreeRec(pScrn); return FALSE; } @@ -1141,7 +1113,6 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) rgb zeros = { 0, 0, 0 }; if (!xf86SetWeight(pScrn, zeros, zeros)) { - free(pEnt); VIAFreeRec(pScrn); return FALSE; } else { @@ -1158,7 +1129,6 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Given default visual" " (%s) is not supported at depth %d.\n", xf86GetVisualName(pScrn->defaultVisual), pScrn->depth); - free(pEnt); VIAFreeRec(pScrn); return FALSE; } @@ -1184,36 +1154,6 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Setting amount of VideoRAM to %d kB\n", pScrn->videoRam); - if ((s = xf86GetOptValString(VIAOptions, OPTION_MODE_SWITCH_METHOD))) { - if (!xf86NameCmp(s, "legacy")) { - if (pVia->UseLegacyModeSwitch) { - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, - "Already using \"legacy\" as ModeSwitchMethod, " - "did not force anything.\n"); - } else { - pVia->UseLegacyModeSwitch = TRUE; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, - "Forced ModeSwitchMethod to \"legacy\".\n"); - } - } - else if (!xf86NameCmp(s, "new")) { - if (pVia->UseLegacyModeSwitch) { - pVia->UseLegacyModeSwitch = FALSE; - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, - "Forced ModeSwitchMethod to \"new\".\n"); - } else { - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, - "Already using \"new\" as ModeSwitchMethod, " - "did not force anything.\n"); - } - } else { - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "\"%s\" is not a valid" - "value for Option \"ModeSwitchMethod\".\n", s); - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Valid options are \"legacy\" or \"new\".\n"); - } - } - /* When rotating, switch shadow framebuffer on and acceleration off. */ if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATION_TYPE))) { if (!xf86NameCmp(s, "SWRandR")) { @@ -1382,19 +1322,6 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) "image transfer if DRI is enabled.\n", (pVia->dmaXV) ? "" : "not "); - //pVia->useVBEModes = FALSE; - from = xf86GetOptValBool(VIAOptions, OPTION_VBEMODES, &pVia->useVBEModes) - ? X_CONFIG : X_DEFAULT; - xf86DrvMsg(pScrn->scrnIndex, from, "Will %senable VBE modes.\n", - (pVia->useVBEModes) ? "" : "not "); - - //pVia->vbeSR = FALSE; - from = xf86GetOptValBool(VIAOptions, OPTION_VBE_SAVERESTORE, &pVia->vbeSR) - ? X_CONFIG : X_DEFAULT; - xf86DrvMsg(pScrn->scrnIndex, from, "VBE VGA register save & restore " - "will %sbe used\n\tif VBE modes are enabled.\n", - (pVia->vbeSR) ? "" : "not "); - #ifdef HAVE_DEBUG //pVia->disableXvBWCheck = FALSE; from = xf86GetOptValBool(VIAOptions, OPTION_DISABLE_XV_BW_CHECK, @@ -1427,19 +1354,6 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) xf86DrvMsg(pScrn->scrnIndex, from, "Will try to allocate %d kB of AGP memory.\n", pVia->agpMem); - /* ActiveDevice Option for device selection */ - //pVia->ActiveDevice = 0x00; - if ((s = xf86GetOptValString(VIAOptions, OPTION_ACTIVEDEVICE))) { - if (strstr(s, "CRT")) - pVia->ActiveDevice |= VIA_DEVICE_CRT; - if (strstr(s, "LCD")) - pVia->ActiveDevice |= VIA_DEVICE_LCD; - if (strstr(s, "DFP")) - pVia->ActiveDevice |= VIA_DEVICE_DFP; - if (strstr(s, "TV")) - pVia->ActiveDevice |= VIA_DEVICE_TV; - } - pBIOSInfo = pVia->pBIOSInfo; pBIOSInfo->TVDotCrawl = FALSE; from = xf86GetOptValBool(VIAOptions, OPTION_TVDOTCRAWL, @@ -1555,7 +1469,15 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) xf86DrvMsg(pScrn->scrnIndex, X_INFO, "...Finished parsing config file options.\n"); - ViaCheckCardId(pScrn); + /* Checking for OLPC XO-1.5. */ + if ((pVia->Chipset == VIA_VX855) && + (SUBVENDOR_ID(pVia->PciInfo) == 0x152D) && + (SUBSYS_ID(pVia->PciInfo) == 0x0833)) { + + pVia->IsOLPCXO15 = TRUE; + } else { + pVia->IsOLPCXO15 = FALSE; + } /* I2CDevices Option for I2C Initialization */ if ((s = xf86GetOptValString(VIAOptions, OPTION_I2CDEVICES))) { @@ -1568,8 +1490,9 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags) pVia->I2CDevices |= VIA_I2C_BUS3; } - if (!xf86NameCmp(pVia->Id->String, "OLPC XO 1.5")) + if (pVia->IsOLPCXO15) { pVia->I2CDevices &= ~VIA_I2C_BUS2; + } /* CRTC handling */ xf86CrtcConfigInit(pScrn, &via_xf86crtc_config_funcs); Index: xsrc/external/mit/xf86-video-openchrome/dist/src/via_lvds.c diff -u xsrc/external/mit/xf86-video-openchrome/dist/src/via_lvds.c:1.2 xsrc/external/mit/xf86-video-openchrome/dist/src/via_lvds.c:1.3 --- xsrc/external/mit/xf86-video-openchrome/dist/src/via_lvds.c:1.2 Tue Jun 4 00:19:24 2013 +++ xsrc/external/mit/xf86-video-openchrome/dist/src/via_lvds.c Fri Aug 19 23:37:39 2016 @@ -1,5 +1,6 @@ /* - * Copyright 2007 The Openchrome Project [openchrome.org] + * Copyright 2007-2015 The Openchrome Project + * [http://www.freedesktop.org/wiki/Openchrome] * Copyright 1998-2007 VIA Technologies, Inc. All Rights Reserved. * Copyright 2001-2007 S3 Graphics, Inc. All Rights Reserved. * @@ -40,17 +41,13 @@ */ enum ViaPanelOpts { OPTION_BUSWIDTH, - OPTION_CENTER, - OPTION_FORCEPANEL, - OPTION_PANELSIZE + OPTION_CENTER }; static OptionInfoRec ViaPanelOptions[] = { {OPTION_BUSWIDTH, "BusWidth", OPTV_ANYSTR, {0}, FALSE}, {OPTION_CENTER, "Center", OPTV_BOOLEAN, {0}, FALSE}, - {OPTION_FORCEPANEL, "ForcePanel", OPTV_BOOLEAN, {0}, FALSE}, /* last resort */ - {OPTION_PANELSIZE, "PanelSize", OPTV_ANYSTR, {0}, FALSE}, {-1, NULL, OPTV_NONE, {0}, FALSE} }; @@ -380,38 +377,34 @@ via_lvds_dpms(xf86OutputPtr output, int ScrnInfoPtr pScrn = output->scrn; VIAPtr pVia = VIAPTR(pScrn); - if (pVia->pVbe) { - ViaVbePanelPower(pVia->pVbe, (mode == DPMSModeOn)); - } else { - switch (mode) { - case DPMSModeOn: - switch (pVia->Chipset) { - case VIA_P4M900: - case VIA_CX700: - case VIA_VX800: - case VIA_VX855: - case VIA_VX900: - ViaLVDSPower(pScrn, TRUE); - break; - } - ViaLCDPower(output, TRUE); + switch (mode) { + case DPMSModeOn: + switch (pVia->Chipset) { + case VIA_P4M900: + case VIA_CX700: + case VIA_VX800: + case VIA_VX855: + case VIA_VX900: + ViaLVDSPower(pScrn, TRUE); break; + } + ViaLCDPower(output, TRUE); + break; - case DPMSModeStandby: - case DPMSModeSuspend: - case DPMSModeOff: - switch (pVia->Chipset) { - case VIA_P4M900: - case VIA_CX700: - case VIA_VX800: - case VIA_VX855: - case VIA_VX900: - ViaLVDSPower(pScrn, FALSE); - break; - } - ViaLCDPower(output, FALSE); + case DPMSModeStandby: + case DPMSModeSuspend: + case DPMSModeOff: + switch (pVia->Chipset) { + case VIA_P4M900: + case VIA_CX700: + case VIA_VX800: + case VIA_VX855: + case VIA_VX900: + ViaLVDSPower(pScrn, FALSE); break; } + ViaLCDPower(output, FALSE); + break; } } @@ -484,78 +477,55 @@ ViaPanelGetSizeFromDDCv1(xf86OutputPtr o VIAPtr pVia = VIAPTR(pScrn); xf86MonPtr pMon; - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAGetPanelSizeFromDDCv1\n")); - - if (!(pVia->I2CDevices & VIA_I2C_BUS2)) - return FALSE; - - if (!xf86I2CProbeAddress(pVia->pI2CBus2, 0xA0)) - return FALSE; - - pMon = xf86DoEEDID(XF86_SCRN_ARG(pScrn), pVia->pI2CBus2, TRUE); - if (!pMon) - return FALSE; - - xf86OutputSetEDID(output, pMon); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Entered VIAGetPanelSizeFromDDCv1.\n")); - if (!ViaPanelGetSizeFromEDID(pScrn, pMon, width, height)) { + if (!pVia->pI2CBus2) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "Unable to read PanelSize from EDID information\n"); + "I2C Bus 2 does not exist.\n"); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting VIAGetPanelSizeFromDDCv1.\n")); return FALSE; } - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "VIAGetPanelSizeFromDDCv1: (%dx%d)\n", *width, *height)); - return TRUE; -} - -/* Currently only used by Legacy Mode Setting */ -static Bool -ViaPanelGetSizeFromDDCv2(ScrnInfoPtr pScrn, int *width) -{ - VIAPtr pVia = VIAPTR(pScrn); - CARD8 W_Buffer[1]; - CARD8 R_Buffer[4]; - I2CDevPtr dev; - - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAGetPanelSizeFromDDCv2\n")); - - if (!xf86I2CProbeAddress(pVia->pI2CBus2, 0xA2)) + if (!xf86I2CProbeAddress(pVia->pI2CBus2, 0xA0)) { + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "I2C device on I2C Bus 2 does not support EDID.\n"); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting VIAGetPanelSizeFromDDCv1.\n")); return FALSE; + } - dev = xf86CreateI2CDevRec(); - if (!dev) + /* Probe I2C Bus 2 to see if a flat panel is connected. */ + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Probing for a flat panel on I2C Bus 2.\n"); + pMon = xf86OutputGetEDID(output, pVia->pI2CBus2); + if (pMon && DIGITAL(pMon->features.input_type)) { + xf86OutputSetEDID(output, pMon); + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Detected a flat panel on I2C Bus 2.\n"); + } else { + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Did not detect a flat panel on I2C Bus 2.\n"); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting VIAGetPanelSizeFromDDCv1.\n")); return FALSE; - dev->DevName = "EDID2"; - dev->SlaveAddr = 0xA2; - dev->ByteTimeout = 2200; /* VESA DDC spec 3 p. 43 (+10 %) */ - dev->StartTimeout = 550; - dev->BitTimeout = 40; - dev->ByteTimeout = 40; - dev->AcknTimeout = 40; - dev->pI2CBus = pVia->pI2CBus2; - - if (!xf86I2CDevInit(dev)) { - xf86DestroyI2CDevRec(dev, TRUE); - return FALSE; } - xf86I2CReadByte(dev, 0x00, R_Buffer); - if (R_Buffer[0] != 0x20) { - xf86DestroyI2CDevRec(dev, TRUE); + if (!ViaPanelGetSizeFromEDID(pScrn, pMon, width, height)) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Unable to obtain panel size from EDID information.\n"); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting VIAGetPanelSizeFromDDCv1.\n")); return FALSE; } - /* Found EDID2 Table */ - W_Buffer[0] = 0x76; - xf86I2CWriteRead(dev, W_Buffer, 1, R_Buffer, 2); - xf86DestroyI2CDevRec(dev, TRUE); - - *width = R_Buffer[0] | (R_Buffer[1] << 8); - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "VIAGetPanelSizeFromDDCv2: %d\n", *width)); + "VIAGetPanelSizeFromDDCv1: (%d X %d)\n", + *width, *height)); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting VIAGetPanelSizeFromDDCv1.\n")); return TRUE; } @@ -629,180 +599,25 @@ ViaPanelGetNativeModeFromScratchPad(xf86 panel->NativeWidth, panel->NativeHeight); } -/* Used only for Legacy Mode Setting */ -static xf86OutputStatus -VIAGetPanelSize(xf86OutputPtr output) -{ - xf86OutputStatus status = XF86OutputStatusDisconnected; - ViaPanelInfoPtr Panel = output->driver_private; - ScrnInfoPtr pScrn = output->scrn; - char *PanelSizeString[7] = { "640x480", "800x480", "800x600", "1024x768", "1280x768" - "1280x1024", "1400x1050", "1600x1200" }; - int width = 0; - int height = 0; - Bool ret; - - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAGetPanelSize (UseLegacyModeSwitch)\n")); - - ret = ViaPanelGetSizeFromDDCv1(output, &width, &height); - if (!ret) - ret = ViaPanelGetSizeFromDDCv2(pScrn, &width); - - if (ret) { - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "EDID returned resolution %d x %d \n", width, height)); - switch (width) { - case 640: - Panel->NativeModeIndex = VIA_PANEL6X4; - break; - case 800: - if (height == 480) - Panel->NativeModeIndex = VIA_PANEL8X4; - else - Panel->NativeModeIndex = VIA_PANEL8X6; - break; - case 1024: - Panel->NativeModeIndex = VIA_PANEL10X7; - break; - case 1280: - Panel->NativeModeIndex = VIA_PANEL12X10; - break; - case 1400: - Panel->NativeModeIndex = VIA_PANEL14X10; - break; - case 1600: - Panel->NativeModeIndex = VIA_PANEL16X12; - break; - default: - Panel->NativeModeIndex = VIA_PANEL_INVALID; - break; - } - } else { - ViaPanelGetNativeModeFromScratchPad(output); - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Unable to get information from EDID. Resolution from Scratchpad: %d \n", Panel->NativeModeIndex)); - if (Panel->NativeModeIndex == 0) { - /* VIA_PANEL6X4 == 0, but that value equals unset */ - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Unable to " - "retrieve PanelSize: using default (1024x768)\n"); - Panel->NativeModeIndex = VIA_PANEL10X7; - } - } - - if (Panel->NativeModeIndex < 7) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using panel at %s.\n", - PanelSizeString[Panel->NativeModeIndex]); - status = XF86OutputStatusConnected; - } else - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Unknown panel size " - "detected: %d.\n", Panel->NativeModeIndex); - return status; -} - -/* - * ViaResolutionTable[i].PanelIndex is pBIOSInfo->PanelSize - * Panel->PanelIndex is the index to lcdTable. - * Only used by Legacy Mode Setting. - */ -static Bool -ViaPanelGetIndex(xf86OutputPtr output, DisplayModePtr mode) -{ - ScrnInfoPtr pScrn = output->scrn; - ViaPanelInfoPtr Panel = output->driver_private; - int i; - - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaPanelGetIndex\n")); - - Panel->PanelIndex = VIA_BIOS_NUM_PANEL; - - if (VIAGetPanelSize(output) == XF86OutputStatusDisconnected) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "ViaPanelGetIndex: Panel not detected.\n"); - return FALSE; - } - - if (!ViaGetResolutionIndex(pScrn, Panel, mode)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel does not support this" - " resolution: %s\n", mode->name); - return FALSE; - } - - for (i = 0; ViaResolutionTable[i].Index != VIA_RES_INVALID; i++) { - if (ViaResolutionTable[i].PanelIndex == Panel->NativeModeIndex) { - Panel->NativeWidth = ViaResolutionTable[i].X; - Panel->NativeHeight = ViaResolutionTable[i].Y; - break; - } - } - - if (ViaResolutionTable[i].Index == VIA_RES_INVALID) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaPanelGetIndex: Unable" - " to find matching PanelSize in ViaResolutionTable.\n"); - return FALSE; - } - - if ((Panel->NativeWidth != mode->CrtcHDisplay) || - (Panel->NativeHeight != mode->CrtcVDisplay)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaPanelGetIndex: Non-native" - " resolutions are broken.\n"); - return FALSE; - } - - for (i = 0; i < VIA_BIOS_NUM_PANEL; i++) { - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaPanelGetIndex:" - "Match Debug: %d == %d)\n", Panel->NativeModeIndex, - lcdTable[i].fpSize)); - if (lcdTable[i].fpSize == Panel->NativeModeIndex) { - int modeNum, tmp; - - modeNum = ViaGetVesaMode(pScrn, mode); - if (modeNum == 0xFFFF) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "ViaPanelGetIndex: " - "Unable to determine matching VESA modenumber.\n"); - return FALSE; - } - - tmp = 0x01 << (modeNum & 0xF); - if ((CARD16) tmp & lcdTable[i].SuptMode[(modeNum >> 4)]) { - Panel->PanelIndex = i; - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaPanelGetIndex:" - "index: %d (%dx%d)\n", Panel->PanelIndex, - Panel->NativeWidth, Panel->NativeHeight)); - return TRUE; - } - - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaPanelGetIndex: Unable" - " to match given mode with this PanelSize.\n"); - return FALSE; - } - } - - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaPanelGetIndex: Unable" - " to match PanelSize with an lcdTable entry.\n"); - return FALSE; -} - static int via_lvds_mode_valid(xf86OutputPtr output, DisplayModePtr pMode) { ScrnInfoPtr pScrn = output->scrn; VIAPtr pVia = VIAPTR(pScrn); - if (pVia->UseLegacyModeSwitch) { - if (!ViaPanelGetIndex(output, pMode)) - return MODE_BAD; - } else { - ViaPanelInfoPtr Panel = output->driver_private; + ViaPanelInfoPtr Panel = output->driver_private; - if (Panel->NativeWidth < pMode->HDisplay || - Panel->NativeHeight < pMode->VDisplay) - return MODE_PANEL; - - if (!Panel->Scale && Panel->NativeHeight != pMode->VDisplay && - Panel->NativeWidth != pMode->HDisplay) - return MODE_PANEL; + if (Panel->NativeWidth < pMode->HDisplay || + Panel->NativeHeight < pMode->VDisplay) + return MODE_PANEL; + + if (!Panel->Scale && Panel->NativeHeight != pMode->VDisplay && + Panel->NativeWidth != pMode->HDisplay) + return MODE_PANEL; + + if (!ViaModeDotClockTranslate(pScrn, pMode)) + return MODE_NOCLOCK; - if (!ViaModeDotClockTranslate(pScrn, pMode)) - return MODE_NOCLOCK; - } return MODE_OK; } @@ -878,236 +693,6 @@ via_lvds_commit(xf86OutputPtr output) via_lvds_dpms(output, DPMSModeOn); } -/* - * Broken, only does native mode decently. I (Luc) personally broke this. - * Only for LegacyModeSetting. - */ -static void -VIASetLCDMode(xf86OutputPtr output, DisplayModePtr mode) -{ - ViaPanelInfoPtr Panel = output->driver_private; - ScrnInfoPtr pScrn = output->scrn; - vgaHWPtr hwp = VGAHWPTR(pScrn); - VIAPtr pVia = VIAPTR(pScrn); - VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo; - VIALCDModeTableRec Table = lcdTable[Panel->PanelIndex]; - int resIdx, port, offset, data, misc, i, j; - CARD8 modeNum = 0; - - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIASetLCDMode\n")); - - if (Panel->NativeModeIndex == VIA_PANEL12X10) - hwp->writeCrtc(hwp, 0x89, 0x07); - - /* LCD Expand Mode Y Scale Flag */ - Panel->scaleY = FALSE; - - /* Set LCD InitTb Regs */ - if (Panel->BusWidth == VIA_DI_12BIT) { - if (pVia->IsSecondary) - pBIOSInfo->Clock = Table.InitTb.LCDClk_12Bit; - else { - pBIOSInfo->Clock = Table.InitTb.VClk_12Bit; - /* for some reason still to be defined this is necessary */ - ViaSetSecondaryDotclock(pScrn, Table.InitTb.LCDClk_12Bit); - } - } else { - if (pVia->IsSecondary) - pBIOSInfo->Clock = Table.InitTb.LCDClk; - else { - pBIOSInfo->Clock = Table.InitTb.VClk; - ViaSetSecondaryDotclock(pScrn, Table.InitTb.LCDClk); - } - - } - - ViaSetUseExternalClock(hwp); - - for (i = 0; i < Table.InitTb.numEntry; i++) { - port = Table.InitTb.port[i]; - offset = Table.InitTb.offset[i]; - data = Table.InitTb.data[i]; - ViaVgahwWrite(hwp, 0x300 + port, offset, 0x301 + port, data); - } - - if ((mode->CrtcHDisplay != Panel->NativeWidth) || - (mode->CrtcVDisplay != Panel->NativeHeight)) { - VIALCDModeEntryPtr Main; - VIALCDMPatchEntryPtr Patch1, Patch2; - int numPatch1, numPatch2; - - resIdx = VIA_RES_INVALID; - - /* Find MxxxCtr & MxxxExp Index and - * HWCursor Y Scale (PanelSize Y / Res. Y) */ - Panel->resY = mode->CrtcVDisplay; - switch (Panel->ResolutionIndex) { - case VIA_RES_640X480: - resIdx = 0; - break; - case VIA_RES_800X600: - resIdx = 1; - break; - case VIA_RES_1024X768: - resIdx = 2; - break; - case VIA_RES_1152X864: - resIdx = 3; - break; - case VIA_RES_1280X768: - case VIA_RES_1280X960: - case VIA_RES_1280X1024: - if (Panel->NativeModeIndex == VIA_PANEL12X10) - resIdx = VIA_RES_INVALID; - else - resIdx = 4; - break; - default: - resIdx = VIA_RES_INVALID; - break; - } - - if ((mode->CrtcHDisplay == 640) && (mode->CrtcVDisplay == 400)) - resIdx = 0; - - if (resIdx == VIA_RES_INVALID) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "VIASetLCDMode: Failed " - "to find a suitable Panel Size index.\n"); - return; - } - - if (Panel->Center) { - Main = &(Table.MCtr[resIdx]); - Patch1 = Table.MPatchDP1Ctr; - numPatch1 = Table.numMPatchDP1Ctr; - Patch2 = Table.MPatchDP2Ctr; - numPatch2 = Table.numMPatchDP2Ctr; - } else { /* expand! */ - /* LCD Expand Mode Y Scale Flag */ - Panel->scaleY = TRUE; - Main = &(Table.MExp[resIdx]); - Patch1 = Table.MPatchDP1Exp; - numPatch1 = Table.numMPatchDP1Exp; - Patch2 = Table.MPatchDP2Exp; - numPatch2 = Table.numMPatchDP2Exp; - } - - /* Set Main LCD Registers */ - for (i = 0; i < Main->numEntry; i++) { - ViaVgahwWrite(hwp, 0x300 + Main->port[i], Main->offset[i], - 0x301 + Main->port[i], Main->data[i]); - } - - if (Panel->BusWidth == VIA_DI_12BIT) { - if (pVia->IsSecondary) - pBIOSInfo->Clock = Main->LCDClk_12Bit; - else - pBIOSInfo->Clock = Main->VClk_12Bit; - } else { - if (pVia->IsSecondary) - pBIOSInfo->Clock = Main->LCDClk; - else - pBIOSInfo->Clock = Main->VClk; - } - - j = ViaGetVesaMode(pScrn, mode); - if (j == 0xFFFF) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "VIASetLCDMode: " - "Unable to determine matching VESA modenumber.\n"); - return; - } - for (i = 0; i < modeFix.numEntry; i++) { - if (modeFix.reqMode[i] == j) { - modeNum = modeFix.fixMode[i]; - break; - } - } - - /* Set LCD Mode patch registers. */ - for (i = 0; i < numPatch2; i++, Patch2++) { - if (Patch2->Mode == modeNum) { - if (!Panel->Center && (mode->CrtcHDisplay == Panel->NativeWidth)) - Panel->scaleY = FALSE; - - for (j = 0; j < Patch2->numEntry; j++) { - ViaVgahwWrite(hwp, 0x300 + Patch2->port[j], - Patch2->offset[j], 0x301 + Patch2->port[j], - Patch2->data[j]); - } - - if (Panel->BusWidth == VIA_DI_12BIT) { - if (pVia->IsSecondary) - pBIOSInfo->Clock = Patch2->LCDClk_12Bit; - else - pBIOSInfo->Clock = Patch2->VClk_12Bit; - } else { - if (pVia->IsSecondary) - pBIOSInfo->Clock = Patch2->LCDClk; - else - pBIOSInfo->Clock = Patch2->VClk; - } - break; - } - } - - /* Set LCD Secondary Mode Patch registers. */ - if (pVia->IsSecondary) { - for (i = 0; i < numPatch1; i++, Patch1++) { - if (Patch1->Mode == modeNum) { - for (j = 0; j < Patch1->numEntry; j++) { - ViaVgahwWrite(hwp, 0x300 + Patch1->port[j], - Patch1->offset[j], - 0x301 + Patch1->port[j], Patch1->data[j]); - } - break; - } - } - } - } - - /* LCD patch 3D5.02 */ - misc = hwp->readCrtc(hwp, 0x01); - hwp->writeCrtc(hwp, 0x02, misc); - - /* Enable LCD */ - if (!pVia->IsSecondary) { - /* CRT Display Source Bit 6 - 0: CRT, 1: LCD */ - ViaSeqMask(hwp, 0x16, 0x40, 0x40); - - /* Enable Simultaneous */ - if (Panel->BusWidth == VIA_DI_12BIT) { - hwp->writeCrtc(hwp, 0x6B, 0xA8); - - if ((pVia->Chipset == VIA_CLE266) - && CLE266_REV_IS_AX(pVia->ChipRev)) - hwp->writeCrtc(hwp, 0x93, 0xB1); - else - hwp->writeCrtc(hwp, 0x93, 0xAF); - } else { - ViaCrtcMask(hwp, 0x6B, 0x08, 0x08); - hwp->writeCrtc(hwp, 0x93, 0x00); - } - hwp->writeCrtc(hwp, 0x6A, 0x48); - } else { - /* CRT Display Source Bit 6 - 0: CRT, 1: LCD */ - ViaSeqMask(hwp, 0x16, 0x00, 0x40); - - /* Enable SAMM */ - if (Panel->BusWidth == VIA_DI_12BIT) { - ViaCrtcMask(hwp, 0x6B, 0x20, 0x20); - if ((pVia->Chipset == VIA_CLE266) - && CLE266_REV_IS_AX(pVia->ChipRev)) - hwp->writeCrtc(hwp, 0x93, 0xB1); - else - hwp->writeCrtc(hwp, 0x93, 0xAF); - } else { - hwp->writeCrtc(hwp, 0x6B, 0x00); - hwp->writeCrtc(hwp, 0x93, 0x00); - } - hwp->writeCrtc(hwp, 0x6A, 0xC8); - } -} - static void ViaPanelScale(ScrnInfoPtr pScrn, int resWidth, int resHeight, int panelWidth, int panelHeight) @@ -1218,60 +803,12 @@ via_lvds_mode_set(xf86OutputPtr output, ScrnInfoPtr pScrn = output->scrn; VIAPtr pVia = VIAPTR(pScrn); - /* - * FIXME: pVia->IsSecondary is not working here. We should be able - * to detect when the display is using the secondary head. - * TODO: This should be enabled for other chipsets as well. - */ - if (pVia->pVbe) { - if (!pVia->useLegacyVBE) { - /* - * FIXME: Should we always set the panel expansion? - * Does it depend on the resolution? - */ - if (!ViaVbeSetPanelMode(pScrn, !Panel->Center)) { - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Unable to set the panel mode.\n"); - } - } - - switch (pVia->Chipset) { - case VIA_P4M900: - case VIA_VX800: - case VIA_VX855: - case VIA_VX900: - /* - * Since we are using virtual, we need to adjust - * the offset to match the framebuffer alignment. - */ - if (pScrn->displayWidth != adjusted_mode->CrtcHDisplay) - ViaSecondCRTCHorizontalOffset(pScrn); - break; - } + if (Panel->Scale) { + ViaPanelScale(pScrn, mode->HDisplay, mode->VDisplay, + Panel->NativeWidth, + Panel->NativeHeight); } else { - if (!pVia->UseLegacyModeSwitch) { - if (Panel->Scale) { - ViaPanelScale(pScrn, mode->HDisplay, mode->VDisplay, - Panel->NativeWidth, - Panel->NativeHeight); - } else - ViaPanelScaleDisable(pScrn); - } else { - xf86CrtcPtr crtc = output->crtc; - drmmode_crtc_private_ptr iga = crtc->driver_private; - - if (iga->index) { - /* IGA 2 */ - if (Panel->PanelIndex != VIA_BIOS_NUM_PANEL) { - Panel->SetDVI = TRUE; - VIASetLCDMode(output, mode); - } - } else { - /* IGA 1 */ - if (ViaPanelGetIndex(output, adjusted_mode)) - VIASetLCDMode(output, adjusted_mode); - } - } + ViaPanelScaleDisable(pScrn); } } @@ -1295,100 +832,94 @@ ViaPanelLookUpModeIndex(int width, int h static xf86OutputStatus via_lvds_detect(xf86OutputPtr output) { - static const char xoId[] = "OLPC XO 1.5"; xf86OutputStatus status = XF86OutputStatusDisconnected; ViaPanelInfoPtr panel = output->driver_private; ScrnInfoPtr pScrn = output->scrn; VIAPtr pVia = VIAPTR(pScrn); vgaHWPtr hwp = VGAHWPTR(pScrn); + CARD8 cr3b = 0x00; + CARD8 cr3b_mask = 0x00; + + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Entered via_lvds_detect.\n")); /* Hardcode panel size for the XO */ - if(strcmp(pVia->Id->String, xoId) == 0) { + if (pVia->IsOLPCXO15) { panel->NativeWidth = 1200; panel->NativeHeight = 900; status = XF86OutputStatusConnected; + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Setting up OLPC XO-1.5 flat panel.\n")); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Detected Flat Panel Screen Resolution: " + "%dx%d\n", + panel->NativeWidth, panel->NativeHeight)); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting via_lvds_detect.\n")); return status; } - if (!pVia->UseLegacyModeSwitch) { - /* First try to get the mode from EDID. */ - if (!panel->NativeWidth || !panel->NativeHeight) { - int width, height; - Bool ret; - - ret = ViaPanelGetSizeFromDDCv1(output, &width, &height); - if (ret) { - panel->NativeModeIndex = ViaPanelLookUpModeIndex(width, height); - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaPanelLookUpModeIndex, Width %d, Height %d, NativeModeIndex%d\n", width, height, panel->NativeModeIndex)); - if (panel->NativeModeIndex != VIA_PANEL_INVALID) { - panel->NativeWidth = width; - panel->NativeHeight = height; - status = XF86OutputStatusConnected; - } + if (!panel->NativeWidth || !panel->NativeHeight) { + int width, height; + Bool ret; + + ret = ViaPanelGetSizeFromDDCv1(output, &width, &height); + if (ret) { + panel->NativeModeIndex = ViaPanelLookUpModeIndex(width, height); + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "ViaPanelLookUpModeIndex: Width %d, " + "Height %d, NativeModeIndex%d\n", + width, height, panel->NativeModeIndex)); + if (panel->NativeModeIndex != VIA_PANEL_INVALID) { + panel->NativeWidth = width; + panel->NativeHeight = height; + status = XF86OutputStatusConnected; + } + } else { + /* Apparently this is the way VIA Technologies passes */ + /* the presence of a flat panel to the device driver */ + /* via BIOS setup. */ + if (pVia->Chipset == VIA_CLE266) { + cr3b_mask = 0x08; } else { - CARD8 CR6A = hwp->readCrtc(hwp, 0x6A); - CARD8 CR6B = hwp->readCrtc(hwp, 0x6B); - CARD8 CR97 = hwp->readCrtc(hwp, 0x97); - CARD8 CR99 = hwp->readCrtc(hwp, 0x99); - - /* First test CRTC2 is out of reset and if its enabled or - * simultaneous mode is enabled. Also avoid the secondary - * DFP source */ - if ((((CR6A & 0xC0) == 0xC0) || (((CR6A & 0xC0) == 0x40) && - (CR6B & 0x08))) && (CR97 & 0x10) && (CR99 & 0x10)) { - /* Use Vertical addreess register of IGA 2 */ - panel->NativeWidth = (hwp->readCrtc(hwp, 0x51) | - ((hwp->readCrtc(hwp, 0x55) & 0x70) << 4)) + 1; - panel->NativeHeight = (hwp->readCrtc(hwp, 0x59) | - ((hwp->readCrtc(hwp, 0x5D) & 0x38) << 5)) + 1; - panel->NativeModeIndex = VIA_PANEL6X4; - - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel Mode probed %dx%d from IGA 2\n", - panel->NativeWidth, panel->NativeHeight); - - status = XF86OutputStatusConnected; - } else if (!(CR97 & 0x10) && !(CR99 & 0x10)) { - CARD8 val; - - /* IGA1 Horizontal Overscan register */ - panel->NativeWidth = (hwp->readCrtc(hwp, 0x01) + 1) * 8; - /* IGA1 default Vertical Overscan register is - * incorrect on some devices so use VBlank start */ - panel->NativeHeight = (hwp->readCrtc(hwp, 0x15) + 1); - val = hwp->readCrtc(hwp, 0x07); - panel->NativeHeight |= ((val >> 3) & 0x1) << 8; - panel->NativeHeight |= ((val >> 5) & 0x1) << 9; - val = hwp->readCrtc(hwp, 0x35); - panel->NativeHeight |= ((val >> 3) & 0x1) << 10; - panel->NativeModeIndex = VIA_PANEL6X4; - - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Panel Mode probed %dx%d from IGA 1\n", - panel->NativeWidth, - panel->NativeHeight); - status = XF86OutputStatusConnected; - } + cr3b_mask = 0x02; + } + + cr3b = hwp->readCrtc(hwp, 0x3B) & cr3b_mask; - if (!panel->NativeWidth || !panel->NativeHeight) - ViaPanelGetNativeModeFromScratchPad(output); + if (cr3b) { + ViaPanelGetNativeModeFromScratchPad(output); - if (panel->NativeWidth && panel->NativeHeight) + if (panel->NativeWidth && panel->NativeHeight) { status = XF86OutputStatusConnected; + } } - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "NativeMode: %d %d\n", - panel->NativeWidth, panel->NativeHeight)); - } else - status = XF86OutputStatusConnected; - } else - status = VIAGetPanelSize(output); + } + + if (status == XF86OutputStatusConnected) { + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_PROBED, + "Detected Flat Panel Screen Resolution: " + "%dx%d\n", + panel->NativeWidth, panel->NativeHeight)); + } + } else { + status = XF86OutputStatusConnected; + } + + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting via_lvds_detect.\n")); return status; } static DisplayModePtr via_lvds_get_modes(xf86OutputPtr output) { - ViaPanelInfoPtr Panel = output->driver_private; + ViaPanelInfoPtr pPanel = output->driver_private; ScrnInfoPtr pScrn = output->scrn; - DisplayModePtr p = NULL; + DisplayModePtr pDisplay_Mode = NULL; + + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Entered via_lvds_get_modes.\n")); if (output->status == XF86OutputStatusConnected) { if (!output->MonInfo) { @@ -1396,44 +927,49 @@ via_lvds_get_modes(xf86OutputPtr output) * Generates a display mode for the native panel resolution, * using CVT. */ - if (Panel->NativeWidth && Panel->NativeHeight) { + if (pPanel->NativeWidth && pPanel->NativeHeight) { VIAPtr pVia = VIAPTR(pScrn); - if (!xf86NameCmp(pVia->Id->String, "OLPC XO 1.5")) - p = xf86DuplicateMode(&OLPCMode); - else - p = xf86CVTMode(Panel->NativeWidth, Panel->NativeHeight, + if (pVia->IsOLPCXO15) { + pDisplay_Mode = xf86DuplicateMode(&OLPCMode); + } else { + pDisplay_Mode = xf86CVTMode(pPanel->NativeWidth, pPanel->NativeHeight, 60.0f, FALSE, FALSE); - if (p) { - p->CrtcHDisplay = p->HDisplay; - p->CrtcHSyncStart = p->HSyncStart; - p->CrtcHSyncEnd = p->HSyncEnd; - p->CrtcHTotal = p->HTotal; - p->CrtcHSkew = p->HSkew; - p->CrtcVDisplay = p->VDisplay; - p->CrtcVSyncStart = p->VSyncStart; - p->CrtcVSyncEnd = p->VSyncEnd; - p->CrtcVTotal = p->VTotal; - - p->CrtcVBlankStart = min(p->CrtcVSyncStart, p->CrtcVDisplay); - p->CrtcVBlankEnd = max(p->CrtcVSyncEnd, p->CrtcVTotal); - p->CrtcHBlankStart = min(p->CrtcHSyncStart, p->CrtcHDisplay); - p->CrtcHBlankEnd = max(p->CrtcHSyncEnd, p->CrtcHTotal); - p->type = M_T_DRIVER | M_T_PREFERRED; + } + + if (pDisplay_Mode) { + pDisplay_Mode->CrtcHDisplay = pDisplay_Mode->HDisplay; + pDisplay_Mode->CrtcHSyncStart = pDisplay_Mode->HSyncStart; + pDisplay_Mode->CrtcHSyncEnd = pDisplay_Mode->HSyncEnd; + pDisplay_Mode->CrtcHTotal = pDisplay_Mode->HTotal; + pDisplay_Mode->CrtcHSkew = pDisplay_Mode->HSkew; + pDisplay_Mode->CrtcVDisplay = pDisplay_Mode->VDisplay; + pDisplay_Mode->CrtcVSyncStart = pDisplay_Mode->VSyncStart; + pDisplay_Mode->CrtcVSyncEnd = pDisplay_Mode->VSyncEnd; + pDisplay_Mode->CrtcVTotal = pDisplay_Mode->VTotal; + + pDisplay_Mode->CrtcVBlankStart = min(pDisplay_Mode->CrtcVSyncStart, pDisplay_Mode->CrtcVDisplay); + pDisplay_Mode->CrtcVBlankEnd = max(pDisplay_Mode->CrtcVSyncEnd, pDisplay_Mode->CrtcVTotal); + pDisplay_Mode->CrtcHBlankStart = min(pDisplay_Mode->CrtcHSyncStart, pDisplay_Mode->CrtcHDisplay); + pDisplay_Mode->CrtcHBlankEnd = max(pDisplay_Mode->CrtcHSyncEnd, pDisplay_Mode->CrtcHTotal); + pDisplay_Mode->type = M_T_DRIVER | M_T_PREFERRED; } else { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Out of memory. Size: %zu bytes\n", sizeof(DisplayModeRec)); } } else { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "Invalid panel dimension (%dx%d)\n", - Panel->NativeWidth, Panel->NativeHeight); + "Invalid Flat Panel Screen Resolution: " + "%dx%d\n", + pPanel->NativeWidth, pPanel->NativeHeight); } } else { - p = xf86OutputGetEDIDModes(output); + pDisplay_Mode = xf86OutputGetEDIDModes(output); } } - return p; + DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Exiting via_lvds_get_modes.\n")); + return pDisplay_Mode; } static void @@ -1448,6 +984,8 @@ static const xf86OutputFuncsRec via_lvds .create_resources = via_lvds_create_resources, #ifdef RANDR_12_INTERFACE .set_property = via_lvds_set_property, +#endif +#ifdef RANDR_13_INTERFACE .get_property = via_lvds_get_property, #endif .dpms = via_lvds_dpms, @@ -1463,33 +1001,6 @@ static const xf86OutputFuncsRec via_lvds .destroy = via_lvds_destroy, }; -/* - * Sets the panel dimensions from the configuration - * using name with format "9999x9999". - */ -static void -ViaPanelGetNativeModeFromOption(ScrnInfoPtr pScrn, ViaPanelInfoPtr panel, char *name) -{ - char aux[256]; - CARD8 length, index; - - DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "ViaPanelGetNativeModeFromOption\n")); - - panel->NativeModeIndex = VIA_PANEL_INVALID; - length = sizeof(ViaPanelNativeModes) / sizeof(ViaPanelModeRec); - - for (index = 0; index < length; index++) { - snprintf(aux, sizeof(aux), "%dx%d", ViaPanelNativeModes[index].Width, - ViaPanelNativeModes[index].Height); - if (!xf86NameCmp(name, aux)) { - panel->NativeModeIndex = index; - panel->NativeWidth = ViaPanelNativeModes[index].Width; - panel->NativeHeight = ViaPanelNativeModes[index].Height; - break; - } - } -} void via_lvds_init(ScrnInfoPtr pScrn) @@ -1497,14 +1008,31 @@ via_lvds_init(ScrnInfoPtr pScrn) ViaPanelInfoPtr Panel = (ViaPanelInfoPtr) xnfcalloc(sizeof(ViaPanelInfoRec), 1); OptionInfoPtr Options = xnfalloc(sizeof(ViaPanelOptions)); MessageType from = X_DEFAULT; + const char *s = NULL; VIAPtr pVia = VIAPTR(pScrn); xf86OutputPtr output = NULL; - Bool ForcePanel = FALSE; - char *s = NULL; + vgaHWPtr hwp = VGAHWPTR(pScrn); + CARD8 cr3b = 0x00; + CARD8 cr3b_mask = 0x00; if (!Panel) return; + /* Apparently this is the way VIA Technologies passes */ + /* the presence of a flat panel to the device driver */ + /* via BIOS setup. */ + if (pVia->Chipset == VIA_CLE266) { + cr3b_mask = 0x08; + } else { + cr3b_mask = 0x02; + } + + cr3b = hwp->readCrtc(hwp, 0x3B) & cr3b_mask; + + if (!cr3b) { + return; + } + memcpy(Options, ViaPanelOptions, sizeof(ViaPanelOptions)); xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, Options); @@ -1529,39 +1057,7 @@ via_lvds_init(ScrnInfoPtr pScrn) xf86DrvMsg(pScrn->scrnIndex, from, "LVDS-0 : DVI Center is %s.\n", Panel->Center ? "enabled" : "disabled"); - /* Force the use of the Panel? */ - from = xf86GetOptValBool(Options, OPTION_FORCEPANEL, - &ForcePanel) - ? X_CONFIG : X_DEFAULT; - xf86DrvMsg(pScrn->scrnIndex, from, "LVDS Panel will %sbe forced.\n", - ForcePanel ? "" : "not "); - - /* Panel Size Option */ - if ((s = xf86GetOptValString(Options, OPTION_PANELSIZE))) { - ViaPanelGetNativeModeFromOption(pScrn, Panel, s); - if (Panel->NativeModeIndex != VIA_PANEL_INVALID) { - DEBUG(xf86DrvMsg - (pScrn->scrnIndex, X_CONFIG, "LVDS Panel mode index is %d\n", - Panel->NativeModeIndex)); - xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, - "Selected Panel Size is %dx%d\n", Panel->NativeWidth, - Panel->NativeHeight); - } else - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, - "%s is not a valid panel size.\n", s); - } else { - xf86DrvMsg(pScrn->scrnIndex, X_DEFAULT, - "Panel size is not selected from config file.\n"); - } - - if (ForcePanel) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Enabling panel from config.\n"); - output = xf86OutputCreate(pScrn, &via_lvds_funcs, "LVDS-1"); - } else if (pVia->Id && (pVia->Id->Outputs & VIA_DEVICE_LCD)) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - "Enabling panel from PCI-subsystem ID information.\n"); - output = xf86OutputCreate(pScrn, &via_lvds_funcs, "LVDS-1"); - } + output = xf86OutputCreate(pScrn, &via_lvds_funcs, "LVDS-1"); if (output) { output->driver_private = Panel; @@ -1574,7 +1070,7 @@ via_lvds_init(ScrnInfoPtr pScrn) output->interlaceAllowed = FALSE; output->doubleScanAllowed = FALSE; - if (!xf86NameCmp(pVia->Id->String, "OLPC XO 1.5")) { + if (pVia->IsOLPCXO15) { output->mm_height = 152; output->mm_width = 114; } Index: xsrc/external/mit/xf86-video-openchrome/dist/src/via_dri.c diff -u xsrc/external/mit/xf86-video-openchrome/dist/src/via_dri.c:1.3 xsrc/external/mit/xf86-video-openchrome/dist/src/via_dri.c:1.4 --- xsrc/external/mit/xf86-video-openchrome/dist/src/via_dri.c:1.3 Sat Jun 1 21:11:27 2013 +++ xsrc/external/mit/xf86-video-openchrome/dist/src/via_dri.c Fri Aug 19 23:37:39 2016 @@ -1,5 +1,6 @@ /* - * Copyright 2005-2008 The Openchrome Project [openchrome.org] + * Copyright 2005-2015 The Openchrome Project + * [http://www.freedesktop.org/wiki/Openchrome] * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved. * @@ -478,6 +479,14 @@ VIAInitVisualConfigs(ScreenPtr pScreen) if (i != numConfigs) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[dri] Incorrect " "initialization of visuals. Disabling DRI.\n"); + + if (pConfigs) + free(pConfigs); + if (pVIAConfigs) + free(pVIAConfigs); + if (pVIAConfigPtrs) + free(pVIAConfigPtrs); + return FALSE; } } @@ -926,7 +935,7 @@ viaDRIOffscreenSave(ScrnInfoPtr pScrn) if (pVia->driOffScreenSave) { void *dst, *src = drm_bo_map(pScrn, pVia->driOffScreenMem); - dst = pVia->driOffScreenSave; + dst = (void *) ALIGN_TO((unsigned long) pVia->driOffScreenSave, 16); if ((pVia->drmVerMajor == 2) && (pVia->drmVerMinor >= 8)) { err = viaDRIFBMemcpy(pVia->drmmode.fd, pVia->driOffScreenMem, dst, FALSE); if (!err) Index: xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.h diff -u xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.h:1.5 xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.h:1.6 --- xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.h:1.5 Tue Jun 4 16:59:25 2013 +++ xsrc/external/mit/xf86-video-openchrome/dist/src/via_driver.h Fri Aug 19 23:37:39 2016 @@ -54,7 +54,6 @@ #include "xf86Crtc.h" #include "xf86RandR12.h" #include "xf86cmap.h" -#include "vbe.h" #ifdef HAVE_DRI #define _XF86DRI_SERVER_ @@ -86,6 +85,8 @@ #endif #include <errno.h> +#include "via_vt1632.h" + #include "compat-api.h" #define VIA_AGP_UPL_SIZE (1024*128) #define VIA_DMA_DL_SIZE (1024*128) @@ -212,15 +213,6 @@ typedef struct _twodContext { int clipY2; } ViaTwodContext; -typedef struct{ - /* textMode */ - CARD8 *state, *pstate; /* SVGA state */ - int statePage, stateSize, stateMode; - - /* vbe version */ - int major, minor; -} ViaVbeModeInfo; - typedef struct _VIA { VIARegRec SavedReg; int Bpp, Bpl; @@ -253,7 +245,6 @@ typedef struct _VIA { Bool NoAccel; Bool shadowFB; Rotation rotate; - Bool vbeSR; int agpMem; CreateScreenResourcesProcPtr CreateScreenResources; @@ -269,12 +260,6 @@ typedef struct _VIA { int ChipRev; int EntityIndex; - /* vbe */ - vbeInfoPtr pVbe; - ViaVbeModeInfo vbeMode; - Bool useVBEModes; - Bool useLegacyVBE; - /* Support for shadowFB and rotation */ unsigned char* ShadowPtr; @@ -317,7 +302,9 @@ typedef struct _VIA { /* BIOS Info Ptr */ VIABIOSInfoPtr pBIOSInfo; - struct ViaCardIdStruct* Id; + + /* OLPC XO-1.5 */ + Bool IsOLPCXO15; /* I2C & DDC */ I2CBusPtr pI2CBus1; @@ -356,8 +343,6 @@ typedef struct _VIA { Bool dma2d; Bool dmaXV; - CARD8 ActiveDevice; /* Option */ - /* Video */ int VideoEngine; swovRec swov; @@ -387,7 +372,6 @@ typedef struct _VIA { Bool I2CScan; #endif /* HAVE_DEBUG */ - Bool UseLegacyModeSwitch; video_via_regs* VideoRegs; } VIARec, *VIAPtr; @@ -520,6 +504,10 @@ Bool VIADRIBufferInit(ScrnInfoPtr pScrn) #endif /* HAVE_DRI */ int viaOffScreenLinear(struct buffer_object *obj, ScrnInfoPtr pScrn, unsigned long size); +void viaShowCursor(ScrnInfoPtr pScrn); +void viaHideCursor(ScrnInfoPtr pScrn); +Bool viaHWCursorInit(ScreenPtr pScreen); +void ViaDisplaySetStreamOnCRT(ScrnInfoPtr pScrn, Bool primary); void ViaDisplaySetStreamOnDFP(ScrnInfoPtr pScrn, Bool primary); void ViaDisplayEnableSimultaneous(ScrnInfoPtr pScrn); Index: xsrc/external/mit/xf86-video-openchrome/include/config.h diff -u xsrc/external/mit/xf86-video-openchrome/include/config.h:1.2 xsrc/external/mit/xf86-video-openchrome/include/config.h:1.3 --- xsrc/external/mit/xf86-video-openchrome/include/config.h:1.2 Sat Jun 1 21:21:25 2013 +++ xsrc/external/mit/xf86-video-openchrome/include/config.h Fri Aug 19 23:37:39 2016 @@ -63,8 +63,7 @@ /* xextproto 7.1 available */ #define HAVE_XEXTPROTO_71 1 -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ +/* Define to the sub-directory where libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ @@ -77,7 +76,7 @@ #define PACKAGE_NAME "xf86-video-openchrome" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "xf86-video-openchrome 0.3.3" +#define PACKAGE_STRING "xf86-video-openchrome 0.4.0" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "xf86-video-openchrome" @@ -86,7 +85,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "0.3.3" +#define PACKAGE_VERSION "0.4.0" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 @@ -95,16 +94,16 @@ /* #undef TOOLS */ /* Version number of package */ -#define VERSION "0.3.3" +#define VERSION "0.4.0" /* Major version */ #define VIA_MAJOR_VERSION 0 /* Minor version */ -#define VIA_MINOR_VERSION 3 +#define VIA_MINOR_VERSION 4 /* Patch version */ -#define VIA_PATCHLEVEL 3 +#define VIA_PATCHLEVEL 0 /* Enable DRI driver support */ #define XF86DRI 1 Index: xsrc/external/mit/xf86-video-rendition/dist/src/rendition.c diff -u xsrc/external/mit/xf86-video-rendition/dist/src/rendition.c:1.2 xsrc/external/mit/xf86-video-rendition/dist/src/rendition.c:1.3 --- xsrc/external/mit/xf86-video-rendition/dist/src/rendition.c:1.2 Tue Aug 16 01:27:47 2016 +++ xsrc/external/mit/xf86-video-rendition/dist/src/rendition.c Fri Aug 19 23:37:39 2016 @@ -1371,6 +1371,18 @@ renditionMapMem(ScrnInfoPtr pScreenInfo) /* Override on users request */ WriteCombine = xf86ReturnOptValBool(pRendition->Options, OPTION_FBWC, WriteCombine); +#ifdef XSERVER_LIBPCIACCESS + mapOption = PCI_DEV_MAP_FLAG_WRITABLE; + if (WriteCombine) + mapOption |= PCI_DEV_MAP_FLAG_WRITE_COMBINE; + + err = pci_device_map_range(pRendition->PciInfo, + pRendition->PciInfo->regions[0].base_addr, + pRendition->PciInfo->regions[0].size, + mapOption, (void *)&pRendition->board.vmem_base); + + return (err == 0); +#else if (WriteCombine) { xf86DrvMsg(pScreenInfo->scrnIndex, X_CONFIG, ("Requesting Write-Combined memory access\n")); @@ -1381,12 +1393,6 @@ renditionMapMem(ScrnInfoPtr pScreenInfo) mapOption = VIDMEM_MMIO; } -#ifdef XSERVER_LIBPCIACCESS - err = pci_device_map_region(pRendition->PciInfo, 0, TRUE); - pRendition->board.vmem_base = pRendition->PciInfo->regions[0].memory; - - return (err == 0); -#else pRendition->board.vmem_base= xf86MapPciMem(pScreenInfo->scrnIndex, mapOption, pRendition->pcitag, @@ -1415,7 +1421,7 @@ renditionUnmapMem(ScrnInfoPtr pScreenInf #else pci_device_unmap_range(pRendition->PciInfo, pRendition->board.vmem_base, - pScreenInfo->videoRam * 1024); + pRendition->PciInfo->regions[0].size); #endif return TRUE; #ifdef DEBUG0 Index: xsrc/external/mit/xf86-video-rendition/dist/src/rendition.h diff -u xsrc/external/mit/xf86-video-rendition/dist/src/rendition.h:1.2 xsrc/external/mit/xf86-video-rendition/dist/src/rendition.h:1.3 --- xsrc/external/mit/xf86-video-rendition/dist/src/rendition.h:1.2 Tue Aug 16 01:27:47 2016 +++ xsrc/external/mit/xf86-video-rendition/dist/src/rendition.h Fri Aug 19 23:37:39 2016 @@ -14,9 +14,6 @@ /* Everything using inb/outb, etc needs "compiler.h" */ #include "compiler.h" -/* Drivers for PCI hardware need this */ -#include "xf86PciInfo.h" - /* Drivers that need to access the PCI config space directly need this */ #include "xf86Pci.h" @@ -66,4 +63,8 @@ #include "compat-api.h" /* end of __RENDITION_H__ */ + +#define PCI_CHIP_V1000 0x0001 +#define PCI_CHIP_V2x00 0x2000 + #endif Index: xsrc/external/mit/xf86-video-s3virge/dist/src/s3v_driver.c diff -u xsrc/external/mit/xf86-video-s3virge/dist/src/s3v_driver.c:1.4 xsrc/external/mit/xf86-video-s3virge/dist/src/s3v_driver.c:1.5 --- xsrc/external/mit/xf86-video-s3virge/dist/src/s3v_driver.c:1.4 Tue Aug 16 01:27:47 2016 +++ xsrc/external/mit/xf86-video-s3virge/dist/src/s3v_driver.c Fri Aug 19 23:37:39 2016 @@ -3514,7 +3514,7 @@ S3VEnableMmio(ScrnInfoPtr pScrn) { vgaHWPtr hwp; S3VPtr ps3v; - IOADDRESS vgaCRIndex, vgaCRReg; + unsigned int vgaCRIndex, vgaCRReg; unsigned char val; unsigned int PIOOffset = 0; @@ -3583,7 +3583,7 @@ S3VDisableMmio(ScrnInfoPtr pScrn) { vgaHWPtr hwp; S3VPtr ps3v; - IOADDRESS vgaCRIndex, vgaCRReg; + unsigned int vgaCRIndex, vgaCRReg; PVERB5(" S3VDisableMmio\n"); @@ -3759,6 +3759,12 @@ S3Vddc1Read(ScrnInfoPtr pScrn) return ((unsigned int) (tmp & 0x08)); } +static void +S3Vddc1SetSpeed(ScrnInfoPtr pScrn, xf86ddcSpeed speed) +{ + vgaHWddc1SetSpeed(pScrn, speed); +} + static Bool S3Vddc1(ScrnInfoPtr pScrn) { @@ -3772,7 +3778,7 @@ S3Vddc1(ScrnInfoPtr pScrn) OUTREG(DDC_REG,(tmp | 0x12)); if ((pMon = xf86PrintEDID( - xf86DoEDID_DDC1(XF86_SCRN_ARG(pScrn),vgaHWddc1SetSpeedWeak(), + xf86DoEDID_DDC1(XF86_SCRN_ARG(pScrn), S3Vddc1SetSpeed, S3Vddc1Read))) != NULL) success = TRUE; xf86SetDDCproperties(pScrn,pMon);