Commit da568d5e authored by Thomas Zimmermann's avatar Thomas Zimmermann

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: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200707082411.6583-2-tzimmermann@suse.de
parent 02cd2d31
...@@ -60,6 +60,12 @@ ...@@ -60,6 +60,12 @@
WREG8(MGAREG_SEQ_DATA, v); \ WREG8(MGAREG_SEQ_DATA, v); \
} while (0) \ } while (0) \
#define RREG_CRT(reg, v) \
do { \
WREG8(MGAREG_CRTC_INDEX, reg); \
v = RREG8(MGAREG_CRTC_DATA); \
} while (0) \
#define WREG_CRT(reg, v) \ #define WREG_CRT(reg, v) \
do { \ do { \
WREG8(MGAREG_CRTC_INDEX, reg); \ WREG8(MGAREG_CRTC_INDEX, reg); \
......
...@@ -988,7 +988,7 @@ static void mgag200_set_dac_regs(struct mga_device *mdev) ...@@ -988,7 +988,7 @@ static void mgag200_set_dac_regs(struct mga_device *mdev)
static void mgag200_init_regs(struct mga_device *mdev) static void mgag200_init_regs(struct mga_device *mdev)
{ {
u8 crtcext3, crtcext4, misc; u8 crtc11, crtcext3, crtcext4, misc;
mgag200_set_pci_regs(mdev); mgag200_set_pci_regs(mdev);
mgag200_set_dac_regs(mdev); mgag200_set_dac_regs(mdev);
...@@ -1012,6 +1012,12 @@ static void mgag200_init_regs(struct mga_device *mdev) ...@@ -1012,6 +1012,12 @@ static void mgag200_init_regs(struct mga_device *mdev)
WREG_ECRT(0x03, crtcext3); WREG_ECRT(0x03, crtcext3);
WREG_ECRT(0x04, crtcext4); WREG_ECRT(0x04, crtcext4);
RREG_CRT(0x11, crtc11);
crtc11 &= ~(MGAREG_CRTC11_CRTCPROTECT |
MGAREG_CRTC11_VINTEN |
MGAREG_CRTC11_VINTCLR);
WREG_CRT(0x11, crtc11);
if (mdev->type == G200_ER) if (mdev->type == G200_ER)
WREG_ECRT(0x24, 0x5); WREG_ECRT(0x24, 0x5);
...@@ -1337,12 +1343,6 @@ static void mga_crtc_prepare(struct drm_crtc *crtc) ...@@ -1337,12 +1343,6 @@ static void mga_crtc_prepare(struct drm_crtc *crtc)
struct mga_device *mdev = to_mga_device(dev); struct mga_device *mdev = to_mga_device(dev);
u8 tmp; u8 tmp;
/* mga_resume(crtc);*/
WREG8(MGAREG_CRTC_INDEX, 0x11);
tmp = RREG8(MGAREG_CRTC_DATA);
WREG_CRT(0x11, tmp | 0x80);
if (mdev->type == G200_SE_A || mdev->type == G200_SE_B) { if (mdev->type == G200_SE_A || mdev->type == G200_SE_B) {
WREG_SEQ(0, 1); WREG_SEQ(0, 1);
msleep(50); msleep(50);
...@@ -1359,8 +1359,6 @@ static void mga_crtc_prepare(struct drm_crtc *crtc) ...@@ -1359,8 +1359,6 @@ static void mga_crtc_prepare(struct drm_crtc *crtc)
if (mdev->type == G200_WB || mdev->type == G200_EW3) if (mdev->type == G200_WB || mdev->type == G200_EW3)
mga_g200wb_prepare(crtc); mga_g200wb_prepare(crtc);
WREG_CRT(17, 0);
} }
/* /*
......
...@@ -240,6 +240,11 @@ ...@@ -240,6 +240,11 @@
#define MGAREG_CRTC_INDEX 0x1fd4 #define MGAREG_CRTC_INDEX 0x1fd4
#define MGAREG_CRTC_DATA 0x1fd5 #define MGAREG_CRTC_DATA 0x1fd5
#define MGAREG_CRTC11_VINTCLR BIT(4)
#define MGAREG_CRTC11_VINTEN BIT(5)
#define MGAREG_CRTC11_CRTCPROTECT BIT(7)
#define MGAREG_CRTCEXT_INDEX 0x1fde #define MGAREG_CRTCEXT_INDEX 0x1fde
#define MGAREG_CRTCEXT_DATA 0x1fdf #define MGAREG_CRTCEXT_DATA 0x1fdf
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment