drm/mgag200: Enable MGA mode during device register initialization
authorThomas Zimmermann <tzimmermann@suse.de>
Thu, 30 Jul 2020 10:28:40 +0000 (12:28 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 3 Aug 2020 07:42:27 +0000 (09:42 +0200)
MGA cards can run in traditional VGA mode or an enhanced MGA mode; with
the latter being required for KMS. So far, MGA mode was enabled during
modesetting. As it's fundamental for device operation, the patch moves
it next to the device register setup.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200730102844.10995-5-tzimmermann@suse.de
drivers/gpu/drm/mgag200/mgag200_drv.c
drivers/gpu/drm/mgag200/mgag200_mode.c
drivers/gpu/drm/mgag200/mgag200_reg.h

index 3dbb00045c2410073763776d8e1df4d1deb80b6e..ac9ac5b6d587a48b6d6a2c6ef237effc769c0bf5 100644 (file)
@@ -61,6 +61,7 @@ static int mgag200_regs_init(struct mga_device *mdev)
 {
        struct drm_device *dev = &mdev->base;
        u32 option, option2;
+       u8 crtcext3;
 
        switch (mdev->type) {
        case G200_SE_A:
@@ -107,6 +108,10 @@ static int mgag200_regs_init(struct mga_device *mdev)
        if (mdev->rmmio == NULL)
                return -ENOMEM;
 
+       RREG_ECRT(0x03, crtcext3);
+       crtcext3 |= MGAREG_CRTCEXT3_MGAMODE;
+       WREG_ECRT(0x03, crtcext3);
+
        return 0;
 }
 
index 3aa078e69a5aba94d85fcb89f195ad6175583c51..7161b1651aa03af2b25213a35a3203712340d9ec 100644 (file)
@@ -946,7 +946,7 @@ static void mgag200_set_dac_regs(struct mga_device *mdev)
 
 static void mgag200_init_regs(struct mga_device *mdev)
 {
-       u8 crtc11, crtcext3, crtcext4, misc;
+       u8 crtc11, crtcext4, misc;
 
        mgag200_set_dac_regs(mdev);
 
@@ -961,12 +961,8 @@ static void mgag200_init_regs(struct mga_device *mdev)
        WREG_CRT(14, 0);
        WREG_CRT(15, 0);
 
-       RREG_ECRT(0x03, crtcext3);
-
-       crtcext3 |= BIT(7); /* enable MGA mode */
        crtcext4 = 0x00;
 
-       WREG_ECRT(0x03, crtcext3);
        WREG_ECRT(0x04, crtcext4);
 
        RREG_CRT(0x11, crtc11);
index a44c08bf40741d40f2cf994aa068d959a992dc2a..977be0565c061c179ac63dc0f8d6a1722547c697 100644 (file)
 #define MGAREG_CRTCEXT1_VSYNCOFF       BIT(5)
 #define MGAREG_CRTCEXT1_HSYNCOFF       BIT(4)
 
+#define MGAREG_CRTCEXT3_MGAMODE                BIT(7)
+
 /* Cursor X and Y position */
 #define MGA_CURPOSXL 0x3c0c
 #define MGA_CURPOSXH 0x3c0d