summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Brace <kevinbrace@gmx.com>2020-07-27 14:08:38 -0700
committerKevin Brace <kevinbrace@gmx.com>2020-07-27 14:20:12 -0700
commit838d7951eb9b2d48e2cb990221324c5d9d1682f5 (patch)
tree675d3fab811542051d8f096b9e02dfc6c2ddb9c8
parent5255a42d8a31a17938176a70e73a7fd2ea202c31 (diff)
Fix for DRI1 initialization failure
commit a245948 (Map FB during screen initialization rather than pre-initialization) broke DRI1 initialization code. This was due to frame buffer no longer being mapped prior to DRI1 initialization. Now, frame buffer is mapped prior to DRI1 initialization. Signed-off-by: Kevin Brace <kevinbrace@gmx.com>
-rw-r--r--src/via_driver.c8
-rw-r--r--src/via_ums.c43
-rw-r--r--src/via_ums.h3
3 files changed, 38 insertions, 16 deletions
diff --git a/src/via_driver.c b/src/via_driver.c
index 3240677..3289e74 100644
--- a/src/via_driver.c
+++ b/src/via_driver.c
@@ -1480,6 +1480,12 @@ VIAScreenInit(SCREEN_INIT_ARGS_DECL)
/* Must be after RGB ordering is fixed. */
fbPictureInit(pScreen, NULL, 0);
+ if (!pVia->KMS) {
+ if (!viaUMSMapIOResources(pScrn)) {
+ return FALSE;
+ }
+ }
+
#ifdef HAVE_DRI
if (pVia->KMS) {
if (drmSetMaster(pVia->drmmode.fd)) {
@@ -1506,7 +1512,7 @@ VIAScreenInit(SCREEN_INIT_ARGS_DECL)
if (pVia->directRenderingType != DRI_2)
#endif /* HAVE_DRI */
{
- if (!viaUMSCreate(pScrn)) {
+ if (!viaUMSScreenInit(pScrn)) {
return FALSE;
}
}
diff --git a/src/via_ums.c b/src/via_ums.c
index 00fd0d6..309d1c3 100644
--- a/src/via_ums.c
+++ b/src/via_ums.c
@@ -778,7 +778,7 @@ exit:
}
Bool
-viaUMSCreate(ScrnInfoPtr pScrn)
+viaUMSMapIOResources(ScrnInfoPtr pScrn)
{
VIAPtr pVia = VIAPTR(pScrn);
Bool ret = TRUE;
@@ -822,6 +822,34 @@ viaUMSCreate(ScrnInfoPtr pScrn)
goto exit;
}
+exit:
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "Exiting %s.\n", __func__));
+ return ret;
+}
+
+void
+viaUMSDestroy(ScrnInfoPtr pScrn)
+{
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "Entered %s.\n", __func__));
+
+ viaUnmapFB(pScrn);
+ viaUnmapMMIO(pScrn);
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "Exiting %s.\n", __func__));
+}
+
+Bool
+viaUMSScreenInit(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ Bool ret = TRUE;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "Entered %s.\n", __func__));
+
if (pVia->directRenderingType == DRI_NONE) {
if (!pVia->useEXA) {
if (!viaInitFB(pScrn)) {
@@ -854,19 +882,6 @@ exit:
return ret;
}
-void
-viaUMSDestroy(ScrnInfoPtr pScrn)
-{
- DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "Entered %s.\n", __func__));
-
- viaUnmapFB(pScrn);
- viaUnmapMMIO(pScrn);
-
- DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
- "Exiting %s.\n", __func__));
-}
-
static Bool
viaProbeVRAM(ScrnInfoPtr pScrn)
{
diff --git a/src/via_ums.h b/src/via_ums.h
index 8adef52..e937217 100644
--- a/src/via_ums.h
+++ b/src/via_ums.h
@@ -1558,8 +1558,9 @@ viaSetDisplayScaling(ScrnInfoPtr pScrn, Bool scalingState)
/* via_ums.c */
void viaDisableVQ(ScrnInfoPtr pScrn);
Bool viaUMSAccelInit(ScrnInfoPtr pScrn);
-Bool viaUMSCreate(ScrnInfoPtr pScrn);
+Bool viaUMSMapIOResources(ScrnInfoPtr pScrn);
void viaUMSDestroy(ScrnInfoPtr pScrn);
+Bool viaUMSScreenInit(ScrnInfoPtr pScrn);
Bool viaUMSPreInit(ScrnInfoPtr pScrn);
void viaUMSPreInitExit(ScrnInfoPtr pScrn);
Bool viaUMSCrtcInit(ScrnInfoPtr pScrn);