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 <tzimmermann@suse.de> Reviewed-by: Lyude Paul <lyude@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200707082411.6583-2-tzimmermann@suse.de
This commit is contained in:
parent
02cd2d3144
commit
da568d5e35
|
@ -60,6 +60,12 @@
|
|||
WREG8(MGAREG_SEQ_DATA, v); \
|
||||
} 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) \
|
||||
do { \
|
||||
WREG8(MGAREG_CRTC_INDEX, reg); \
|
||||
|
|
|
@ -988,7 +988,7 @@ static void mgag200_set_dac_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_dac_regs(mdev);
|
||||
|
@ -1012,6 +1012,12 @@ static void mgag200_init_regs(struct mga_device *mdev)
|
|||
WREG_ECRT(0x03, crtcext3);
|
||||
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)
|
||||
WREG_ECRT(0x24, 0x5);
|
||||
|
||||
|
@ -1337,12 +1343,6 @@ static void mga_crtc_prepare(struct drm_crtc *crtc)
|
|||
struct mga_device *mdev = to_mga_device(dev);
|
||||
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) {
|
||||
WREG_SEQ(0, 1);
|
||||
msleep(50);
|
||||
|
@ -1359,8 +1359,6 @@ static void mga_crtc_prepare(struct drm_crtc *crtc)
|
|||
|
||||
if (mdev->type == G200_WB || mdev->type == G200_EW3)
|
||||
mga_g200wb_prepare(crtc);
|
||||
|
||||
WREG_CRT(17, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -240,6 +240,11 @@
|
|||
|
||||
#define MGAREG_CRTC_INDEX 0x1fd4
|
||||
#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_DATA 0x1fdf
|
||||
|
||||
|
|
Loading…
Reference in New Issue