Skip to content

Commit da568d5

Browse files
author
Thomas Zimmermann
committed
drm/mgag200: Don't write-protect CRTC 0-7 while in mga_crtc_prepare()
The prepare function write-protects several registers that it doesn't even touch. Removed the related code. The code for unprotecting registers also clears VINT interrupts. Both is now done once during initialization. Signed-off-by: Thomas Zimmermann <[email protected]> Reviewed-by: Lyude Paul <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 02cd2d3 commit da568d5

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

drivers/gpu/drm/mgag200/mgag200_drv.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@
6060
WREG8(MGAREG_SEQ_DATA, v); \
6161
} while (0) \
6262

63+
#define RREG_CRT(reg, v) \
64+
do { \
65+
WREG8(MGAREG_CRTC_INDEX, reg); \
66+
v = RREG8(MGAREG_CRTC_DATA); \
67+
} while (0) \
68+
6369
#define WREG_CRT(reg, v) \
6470
do { \
6571
WREG8(MGAREG_CRTC_INDEX, reg); \

drivers/gpu/drm/mgag200/mgag200_mode.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -988,7 +988,7 @@ static void mgag200_set_dac_regs(struct mga_device *mdev)
988988

989989
static void mgag200_init_regs(struct mga_device *mdev)
990990
{
991-
u8 crtcext3, crtcext4, misc;
991+
u8 crtc11, crtcext3, crtcext4, misc;
992992

993993
mgag200_set_pci_regs(mdev);
994994
mgag200_set_dac_regs(mdev);
@@ -1012,6 +1012,12 @@ static void mgag200_init_regs(struct mga_device *mdev)
10121012
WREG_ECRT(0x03, crtcext3);
10131013
WREG_ECRT(0x04, crtcext4);
10141014

1015+
RREG_CRT(0x11, crtc11);
1016+
crtc11 &= ~(MGAREG_CRTC11_CRTCPROTECT |
1017+
MGAREG_CRTC11_VINTEN |
1018+
MGAREG_CRTC11_VINTCLR);
1019+
WREG_CRT(0x11, crtc11);
1020+
10151021
if (mdev->type == G200_ER)
10161022
WREG_ECRT(0x24, 0x5);
10171023

@@ -1337,12 +1343,6 @@ static void mga_crtc_prepare(struct drm_crtc *crtc)
13371343
struct mga_device *mdev = to_mga_device(dev);
13381344
u8 tmp;
13391345

1340-
/* mga_resume(crtc);*/
1341-
1342-
WREG8(MGAREG_CRTC_INDEX, 0x11);
1343-
tmp = RREG8(MGAREG_CRTC_DATA);
1344-
WREG_CRT(0x11, tmp | 0x80);
1345-
13461346
if (mdev->type == G200_SE_A || mdev->type == G200_SE_B) {
13471347
WREG_SEQ(0, 1);
13481348
msleep(50);
@@ -1359,8 +1359,6 @@ static void mga_crtc_prepare(struct drm_crtc *crtc)
13591359

13601360
if (mdev->type == G200_WB || mdev->type == G200_EW3)
13611361
mga_g200wb_prepare(crtc);
1362-
1363-
WREG_CRT(17, 0);
13641362
}
13651363

13661364
/*

drivers/gpu/drm/mgag200/mgag200_reg.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,11 @@
240240

241241
#define MGAREG_CRTC_INDEX 0x1fd4
242242
#define MGAREG_CRTC_DATA 0x1fd5
243+
244+
#define MGAREG_CRTC11_VINTCLR BIT(4)
245+
#define MGAREG_CRTC11_VINTEN BIT(5)
246+
#define MGAREG_CRTC11_CRTCPROTECT BIT(7)
247+
243248
#define MGAREG_CRTCEXT_INDEX 0x1fde
244249
#define MGAREG_CRTCEXT_DATA 0x1fdf
245250

0 commit comments

Comments
 (0)