summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKevin Brace <kevinbrace@gmx.com>2020-04-01 07:55:24 -0700
committerKevin Brace <kevinbrace@gmx.com>2020-04-01 08:00:00 -0700
commitd3c0c8fbfb9d704b43b3bd3c88e6d6495a604e8f (patch)
tree212353c9e37db6299d5c45db49ba084caaff7fa1 /src
parenta68c8319a22dc4fd79061c811001db92a1215a11 (diff)
Fix for KMS mode CLE266 and KM400 chipsets HI (Hardware Icon) cursor
The HI cursor is still broken in UMS mode for CLE266 and KM400 chipsets. Signed-off-by: Kevin Brace <kevinbrace@gmx.com>
Diffstat (limited to 'src')
-rw-r--r--src/via_driver.c36
1 files changed, 15 insertions, 21 deletions
diff --git a/src/via_driver.c b/src/via_driver.c
index d0adba5..34a6e47 100644
--- a/src/via_driver.c
+++ b/src/via_driver.c
@@ -1419,6 +1419,10 @@ VIAScreenInit(SCREEN_INIT_ARGS_DECL)
VIAPtr pVia = VIAPTR(pScrn);
unsigned int bppSize, alignedPitch;
unsigned long alignment;
+ xf86CrtcConfigPtr xf86_config;
+ int cursorWidth, cursorHeight, flags;
+ int cursorSize;
+ int i;
pScrn->displayWidth = pScrn->virtualX;
@@ -1526,26 +1530,15 @@ VIAScreenInit(SCREEN_INIT_ARGS_DECL)
miDCInitialize(pScreen, xf86GetPointerScreenFuncs());
if (pVia->drmmode.hwcursor) {
- xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
- int flags = (HARDWARE_CURSOR_AND_SOURCE_WITH_MASK |
- HARDWARE_CURSOR_TRUECOLOR_AT_8BPP);
- int cursorSize, size, i = 0;
-
- switch (pVia->Chipset) {
- case VIA_CLE266:
- case VIA_KM400:
- flags |= HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_1;
- size = 32;
- cursorSize = ((size * size) >> 3) * 2;
- alignment = cursorSize;
- break;
- default:
- flags |= (HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_64 | HARDWARE_CURSOR_ARGB);
- size = 64;
- cursorSize = (size * size) << 2;
- alignment = cursorSize;
- break;
- }
+ xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+
+ cursorWidth = cursorHeight = 64;
+ flags = HARDWARE_CURSOR_AND_SOURCE_WITH_MASK |
+ HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_64 |
+ HARDWARE_CURSOR_TRUECOLOR_AT_8BPP |
+ HARDWARE_CURSOR_ARGB;
+ cursorSize = (cursorWidth * cursorHeight) * (32 / 8);
+ alignment = 1024;
for (i = 0; i < xf86_config->num_crtc; i++) {
xf86CrtcPtr crtc = xf86_config->crtc[i];
@@ -1559,7 +1552,8 @@ VIAScreenInit(SCREEN_INIT_ARGS_DECL)
TTM_PL_FLAG_VRAM);
}
- if (!xf86_cursors_init(pScreen, size, size, flags)) {
+ if (!xf86_cursors_init(pScreen,
+ cursorWidth, cursorHeight, flags)) {
pVia->drmmode.hwcursor = FALSE;
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Hardware cursor initialization failed.\n");