drivers/gpu/drm/via/via_crtc.c |   97 +++++++++++++++++++----------------------
 drivers/gpu/drm/via/via_drv.h  |    4 -
 2 files changed, 48 insertions(+), 53 deletions(-)

New commits:
commit c5310698f976f4761302669adbf427c35c9141cb
Author: Kevin Brace <kevinbr...@bracecomputerlab.com>
Date:   Fri Apr 7 18:21:27 2023 -0700

    drm/via: Version bumped to 3.6.5
    
    Signed-off-by: Kevin Brace <kevinbr...@bracecomputerlab.com>

diff --git a/drivers/gpu/drm/via/via_drv.h b/drivers/gpu/drm/via/via_drv.h
index bcc0a75a0002..83f2d05c7fe8 100644
--- a/drivers/gpu/drm/via/via_drv.h
+++ b/drivers/gpu/drm/via/via_drv.h
@@ -44,10 +44,10 @@
 
 #define DRIVER_MAJOR           3
 #define DRIVER_MINOR           6
-#define DRIVER_PATCHLEVEL      4
+#define DRIVER_PATCHLEVEL      5
 #define DRIVER_NAME            "via"
 #define DRIVER_DESC            "OpenChrome DRM for VIA Technologies Chrome"
-#define DRIVER_DATE            "20230224"
+#define DRIVER_DATE            "20230407"
 #define DRIVER_AUTHOR          "OpenChrome Project"
 
 
commit 98f321e117ea57d62d031b64364df8e39645c37b
Author: Kevin Brace <kevinbr...@bracecomputerlab.com>
Date:   Fri Apr 7 18:21:25 2023 -0700

    drm/via: Adjust CRTC pitch calculation and indentation
    
    Signed-off-by: Kevin Brace <kevinbr...@bracecomputerlab.com>

diff --git a/drivers/gpu/drm/via/via_crtc.c b/drivers/gpu/drm/via/via_crtc.c
index 0db78cf0ea98..e5d1fa742a6a 100644
--- a/drivers/gpu/drm/via/via_crtc.c
+++ b/drivers/gpu/drm/via/via_crtc.c
@@ -1929,8 +1929,7 @@ void via_primary_atomic_update(struct drm_plane *plane,
                vga_wcrt(VGABASE, 0x34, (addr >> 16) & 0xFF);
 
                /* Load fetch count registers */
-               pitch = ALIGN(crtc->mode.hdisplay * fb->format->cpp[0],
-                               16);
+               pitch = ALIGN(crtc->mode.hdisplay * fb->format->cpp[0], 16);
                load_value_to_registers(VGABASE, &iga->fetch, pitch >> 4);
 
                /* Set the primary pitch */
@@ -1956,7 +1955,7 @@ void via_primary_atomic_update(struct drm_plane *plane,
                svga_wcrt_mask(VGABASE, 0xA3, ((addr >> 26) & 0x07), 0x07);
 
                /* Load fetch count registers */
-               pitch = ALIGN(crtc->mode.hdisplay * (fb->format->cpp[0] * 8) >> 
3, 16);
+               pitch = ALIGN(crtc->mode.hdisplay * fb->format->cpp[0], 16);
                load_value_to_registers(VGABASE, &iga->fetch, pitch >> 4);
 
                /* Set secondary pitch */
commit 063554e3edc04b77a33210d9b4c5feb9ebe1c7aa
Author: Kevin Brace <kevinbr...@bracecomputerlab.com>
Date:   Fri Apr 7 18:18:21 2023 -0700

    drm/via: Modify via_iga*_set_color_depth() input parameters
    
    Signed-off-by: Kevin Brace <kevinbr...@bracecomputerlab.com>

diff --git a/drivers/gpu/drm/via/via_crtc.c b/drivers/gpu/drm/via/via_crtc.c
index 8a4db7ef585a..0db78cf0ea98 100644
--- a/drivers/gpu/drm/via/via_crtc.c
+++ b/drivers/gpu/drm/via/via_crtc.c
@@ -106,86 +106,78 @@ static void via_iga_common_init(struct drm_device *dev)
 }
 
 static void via_iga1_set_color_depth(struct drm_device *dev,
-                                       u8 depth)
+                                       u8 cpp, u8 depth)
 {
        struct via_drm_priv *dev_priv = to_via_drm_priv(dev);
-       u8 value;
+       u8 data;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
-       value = 0x00;
+       data = 0x00;
 
        /* Set the color depth for IGA1. */
-       switch (depth) {
-       case 8:
+       switch (cpp) {
+       case 1:
+               data |= BIT(4);
                break;
-       case 16:
-               /* Bit 4 is for 555 (15-bit) / 565 (16-bit) color selection. */
-               value |= BIT(4) | BIT(2);
+       case 2:
+               data = (depth == 15) ? BIT(2) : BIT(4) | BIT(2);
                break;
-       case 24:
-               value |= BIT(3) | BIT(2);
+       case 4:
+               data = (depth == 30) ? BIT(3) : BIT(3) | BIT(2);
+               data |= BIT(4);
                break;
        default:
                break;
        }
 
-       if ((depth == 8) || (depth == 16) || (depth == 24)) {
-               /* 3C5.15[4]   - Hi Color Mode Select
-                *               0: 555
-                *               1: 565
-                * 3C5.15[3:2] - Display Color Depth Select
-                *               00: 8bpp
-                *               01: 16bpp
-                *               10: 30bpp
-                *               11: 32bpp */
-               svga_wseq_mask(VGABASE, 0x15, value,
-                               BIT(4) | BIT(3) | BIT(2));
-               DRM_INFO("IGA1 Color Depth: %d bit\n", depth);
-       } else {
-               DRM_ERROR("Unsupported IGA1 Color Depth: %d bit\n",
-                               depth);
-       }
+       /*
+        * 3C5.15[4]   - Hi Color Mode Select
+        *               0: 555
+        *               1: 565
+        * 3C5.15[3:2] - Display Color Depth Select
+        *               00: 8bpp
+        *               01: 16bpp
+        *               10: 30bpp
+        *               11: 32bpp
+        */
+       svga_wseq_mask(VGABASE, 0x15, data, BIT(4) | BIT(3) | BIT(2));
 
        DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 }
 
 static void via_iga2_set_color_depth(struct drm_device *dev,
-                                       u8 depth)
+                                       u8 cpp, u8 depth)
 {
        struct via_drm_priv *dev_priv = to_via_drm_priv(dev);
-       u8 value;
+       u8 data;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
-       value = 0x00;
+       data = 0x00;
 
        /* Set the color depth for IGA2. */
        switch (depth) {
-       case 8:
+       case 1:
                break;
-       case 16:
-               value = BIT(6);
+       case 2:
+               data = BIT(6);
                break;
-       case 24:
-               value = BIT(7) | BIT(6);
+       case 4:
+               data = (depth == 30) ? BIT(7) : BIT(7) | BIT(6);
                break;
        default:
                break;
        }
 
-       if ((depth == 8) || (depth == 16) || (depth == 24)) {
-               /* 3X5.67[7:6] - Display Color Depth Select
-                *               00: 8bpp
-                *               01: 16bpp
-                *               10: 30bpp
-                *               11: 32bpp */
-               svga_wcrt_mask(VGABASE, 0x67, value, 0xC0);
-               DRM_INFO("IGA2 Color Depth: %d bit\n", depth);
-       } else {
-               DRM_ERROR("Unsupported IGA2 Color Depth: %d bit\n",
-                               depth);
-       }
+       /*
+        * 3X5.67[7:6] - Display Color Depth Select
+        *               00: 8bpp
+        *               01: 16bpp
+        *               10: 30bpp
+        *               11: 32bpp
+        */
+       svga_wcrt_mask(VGABASE, 0x67, data, BIT(7) | BIT(6));
 
        DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 }
@@ -1922,7 +1914,9 @@ void via_primary_atomic_update(struct drm_plane *plane,
        bo = to_ttm_bo(ttm_bo);
 
        if (!iga->index) {
-               via_iga1_set_color_depth(dev, fb->format->depth);
+               via_iga1_set_color_depth(dev,
+                                               fb->format->cpp[0],
+                                               fb->format->depth);
 
                /* Set the framebuffer offset */
                addr = round_up((ttm_bo->resource->start << PAGE_SHIFT) +
@@ -1946,7 +1940,9 @@ void via_primary_atomic_update(struct drm_plane *plane,
                 * second adapter */
                load_value_to_registers(VGABASE, &iga->offset, pitch >> 3);
        } else {
-               via_iga2_set_color_depth(dev, fb->format->depth);
+               via_iga2_set_color_depth(dev,
+                                               fb->format->cpp[0],
+                                               fb->format->depth);
 
                /* Set the framebuffer offset */
                addr = round_up((ttm_bo->resource->start << PAGE_SHIFT) +

Reply via email to