drivers/gpu/drm/openchrome/openchrome_crtc.c   |   43 ++++++++++++++++++-------
 drivers/gpu/drm/openchrome/openchrome_cursor.c |   23 ++++++++-----
 drivers/gpu/drm/openchrome/openchrome_drv.c    |    8 ++--
 drivers/gpu/drm/openchrome/openchrome_drv.h    |    5 +-
 drivers/gpu/drm/openchrome/openchrome_fb.c     |    2 -
 drivers/gpu/drm/openchrome/openchrome_fp.c     |    8 ----
 drivers/gpu/drm/openchrome/openchrome_ioctl.c  |    8 ++--
 drivers/gpu/drm/openchrome/openchrome_object.c |   18 ++++++----
 8 files changed, 70 insertions(+), 45 deletions(-)

New commits:
commit 1f2d71cc3367aa721936b40bb7182ab9756a1d09
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 27 16:37:24 2021 -0600

    drm/openchrome: Version bumped to 3.4.10
    
    This version fixes FP (Flat Panel) support code regression when the
    mode setting code was converted to support atomic mode setting.
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h 
b/drivers/gpu/drm/openchrome/openchrome_drv.h
index beac0c1fbd77..d501dfb8e1e3 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.h
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.h
@@ -61,10 +61,10 @@
 
 #define DRIVER_MAJOR           3
 #define DRIVER_MINOR           4
-#define DRIVER_PATCHLEVEL      9
+#define DRIVER_PATCHLEVEL      10
 #define DRIVER_NAME            "openchrome"
 #define DRIVER_DESC            "OpenChrome DRM for VIA Technologies Chrome IGP"
-#define DRIVER_DATE            "20210521"
+#define DRIVER_DATE            "20211227"
 #define DRIVER_AUTHOR          "OpenChrome Project"
 
 
commit 0d6ae650b0feb2fcfa19788e1e9b572026a8486d
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 27 16:37:07 2021 -0600

    drm/openchrome: Fix for sporadic cursor disable code crash
    
    What happens is that openchrome_cursor_atomic_disable() is occassionally
    handed a null pointer for its crtc parameter.  Just check for a null
    pointer before disabling the display of the cursor.
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_cursor.c 
b/drivers/gpu/drm/openchrome/openchrome_cursor.c
index b9a685488c97..dc662fa02fb1 100644
--- a/drivers/gpu/drm/openchrome/openchrome_cursor.c
+++ b/drivers/gpu/drm/openchrome/openchrome_cursor.c
@@ -49,9 +49,9 @@
 #include "openchrome_drv.h"
 
 
-static void openchrome_hide_cursor(struct drm_device *dev,
-                                       struct drm_crtc *crtc)
+static void openchrome_hide_cursor(struct drm_crtc *crtc)
 {
+       struct drm_device *dev = crtc->dev;
        struct pci_dev *pdev = to_pci_dev(dev->dev);
        struct via_crtc *iga = container_of(crtc,
                                        struct via_crtc, base);
@@ -396,12 +396,13 @@ void openchrome_cursor_atomic_disable(struct drm_plane 
*plane,
 {
        struct drm_plane_state *new_state =
                        drm_atomic_get_new_plane_state(state, plane);
-       struct drm_device *dev = plane->dev;
        struct drm_crtc *crtc = new_state->crtc;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
-       openchrome_hide_cursor(dev, crtc);
+       if (crtc) {
+               openchrome_hide_cursor(crtc);
+       }
 
        DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 }
commit 3bef18990ed2769442be8e501262330f83d9c0a6
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 27 16:36:53 2021 -0600

    drm/openchrome: Dual head fix for atomic mode setting
    
    Simultaneous display needs to be disabled for dual head (IGA1 and IGA2)
    mode to function properly.
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_crtc.c 
b/drivers/gpu/drm/openchrome/openchrome_crtc.c
index 509828254bf3..b65e72d0414c 100644
--- a/drivers/gpu/drm/openchrome/openchrome_crtc.c
+++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c
@@ -79,6 +79,17 @@ static void via_iga_common_init(void __iomem *regs)
         *               1: Enable */
        svga_wseq_mask(regs, 0x15, BIT(5) | BIT(1), BIT(5) | BIT(1));
 
+       /*
+        * Disable simultaneous display.
+        * Turning this on causes IGA1 to have a display issue.
+        */
+       /*
+        * 3X5.6B[3]   - Simultaneous Display Enable
+        *               0: Disable
+        *               1: Enable
+        */
+       svga_wcrt_mask(regs, 0x6B, 0x00, BIT(3));
+
        DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 }
 
commit dbf5833e08f3d63d0a3b23b4a3011766b1fc6514
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 27 16:36:29 2021 -0600

    drm/openchrome: Rearrange openchrome_mode_set_nofb() declarations
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_crtc.c 
b/drivers/gpu/drm/openchrome/openchrome_crtc.c
index a14205a3b41c..509828254bf3 100644
--- a/drivers/gpu/drm/openchrome/openchrome_crtc.c
+++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c
@@ -1578,15 +1578,15 @@ via_set_iga2_downscale_source_timing(struct drm_crtc 
*crtc,
 
 void openchrome_mode_set_nofb(struct drm_crtc *crtc)
 {
-       struct via_crtc *iga = container_of(crtc,
-                                               struct via_crtc, base);
+       struct drm_device *dev = crtc->dev;
+       struct pci_dev *pdev = to_pci_dev(dev->dev);
        struct drm_display_mode *mode = &crtc->state->mode;
        struct drm_display_mode *adjusted_mode =
                                        &crtc->state->adjusted_mode;
+       struct via_crtc *iga = container_of(crtc,
+                                               struct via_crtc, base);
        struct openchrome_drm_private *dev_private =
                                                crtc->dev->dev_private;
-       struct drm_device *dev = crtc->dev;
-       struct pci_dev *pdev = to_pci_dev(dev->dev);
        u8 reg_value = 0;
        int ret;
 
commit cc11737b7e883bb9b07bd56eb4bf438dec0ee870
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 27 16:36:17 2021 -0600

    drm/openchrome: Use mode{} from crtc->state
    
    This is to make it consistent with adjusted_mode{}.  Furthermore,
    include/drm/drm_crtc.h warns atomic mode setting code to not
    reference mode{} inside crtc{}.
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_crtc.c 
b/drivers/gpu/drm/openchrome/openchrome_crtc.c
index d816caccffbd..a14205a3b41c 100644
--- a/drivers/gpu/drm/openchrome/openchrome_crtc.c
+++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c
@@ -1580,7 +1580,7 @@ void openchrome_mode_set_nofb(struct drm_crtc *crtc)
 {
        struct via_crtc *iga = container_of(crtc,
                                                struct via_crtc, base);
-       struct drm_display_mode *mode = &crtc->mode;
+       struct drm_display_mode *mode = &crtc->state->mode;
        struct drm_display_mode *adjusted_mode =
                                        &crtc->state->adjusted_mode;
        struct openchrome_drm_private *dev_private =
commit 4bd6987594776f449d763319b88bc544e47e8741
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 27 16:36:08 2021 -0600

    drm/openchrome: Remove via_fp_mode_valid() from a member struct
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_fp.c 
b/drivers/gpu/drm/openchrome/openchrome_fp.c
index d1d8656deca5..7f86133b05d6 100644
--- a/drivers/gpu/drm/openchrome/openchrome_fp.c
+++ b/drivers/gpu/drm/openchrome/openchrome_fp.c
@@ -1083,7 +1083,6 @@ via_fp_mode_valid(struct drm_connector *connector,
 
 struct drm_connector_helper_funcs via_fp_connector_helper_funcs = {
        .get_modes = via_fp_get_modes,
-       .mode_valid = via_fp_mode_valid,
 };
 
 /*
commit 986e6737e1e1e840a493122258cd3a66a0dabea6
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 27 16:35:58 2021 -0600

    drm/openchrome: Remove via_fp_set_property() from a member struct
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_fp.c 
b/drivers/gpu/drm/openchrome/openchrome_fp.c
index c36e4c677ab1..d1d8656deca5 100644
--- a/drivers/gpu/drm/openchrome/openchrome_fp.c
+++ b/drivers/gpu/drm/openchrome/openchrome_fp.c
@@ -925,7 +925,6 @@ struct drm_connector_funcs via_fp_connector_funcs = {
        .dpms = drm_helper_connector_dpms,
        .detect = via_fp_detect,
        .fill_modes = drm_helper_probe_single_connector_modes,
-       .set_property = via_fp_set_property,
        .destroy = via_connector_destroy,
        .reset = drm_atomic_helper_connector_reset,
        .atomic_duplicate_state =
commit 8e76fd840d6f96fb707efb28b4f6e504d35e5954
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 27 16:35:47 2021 -0600

    drm/openchrome: Remove via_lvds_mode_fixup() from a member struct
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_fp.c 
b/drivers/gpu/drm/openchrome/openchrome_fp.c
index 345ed837fbe9..c36e4c677ab1 100644
--- a/drivers/gpu/drm/openchrome/openchrome_fp.c
+++ b/drivers/gpu/drm/openchrome/openchrome_fp.c
@@ -793,7 +793,6 @@ static void via_fp_disable(struct drm_encoder *encoder)
 
 const struct drm_encoder_helper_funcs via_lvds_helper_funcs = {
        .dpms = via_fp_dpms,
-       .mode_fixup = via_lvds_mode_fixup,
        .prepare = via_fp_prepare,
        .commit = via_fp_commit,
        .mode_set = via_fp_mode_set,
commit 5f6e2a8415212af390c4520e0d2b18680869e838
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 27 16:35:37 2021 -0600

    drm/openchrome: Stop attaching scaling mode property
    
    This is not supported by atomic mode setting.  It is meant for legacy
    KMS.  It triggers a bug check.
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_fp.c 
b/drivers/gpu/drm/openchrome/openchrome_fp.c
index 5e8be68e5138..345ed837fbe9 100644
--- a/drivers/gpu/drm/openchrome/openchrome_fp.c
+++ b/drivers/gpu/drm/openchrome/openchrome_fp.c
@@ -1376,11 +1376,6 @@ void via_fp_init(struct drm_device *dev)
        con->base.doublescan_allowed = false;
        con->base.interlace_allowed = false;
 
-       drm_mode_create_scaling_mode_property(dev);
-       drm_object_attach_property(&con->base.base,
-                                       dev->mode_config.scaling_mode_property,
-                                       DRM_MODE_SCALE_CENTER);
-
        /* Now setup the encoder */
        drm_encoder_init(dev, &enc->base, &via_lvds_enc_funcs,
                                                DRM_MODE_ENCODER_LVDS, NULL);
commit 278dca9fd29ff794b0a6691193adec3c065643c1
Author: Kevin Brace <kevinbr...@gmx.com>
Date:   Mon Dec 27 16:35:16 2021 -0600

    drm/openchrome: use embedded gem object
    
    This commit should have been made 2 years ago, but it was missed.
    Based on commit ce77038 (drm/radeon: use embedded gem object).
    
    Signed-off-by: Kevin Brace <kevinbr...@gmx.com>

diff --git a/drivers/gpu/drm/openchrome/openchrome_crtc.c 
b/drivers/gpu/drm/openchrome/openchrome_crtc.c
index a2efbe6239c7..d816caccffbd 100644
--- a/drivers/gpu/drm/openchrome/openchrome_crtc.c
+++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c
@@ -1903,9 +1903,9 @@ void openchrome_primary_atomic_update(struct drm_plane 
*plane,
        struct via_crtc *iga = container_of(crtc, struct via_crtc, base);
        struct openchrome_drm_private *dev_private =
                                                crtc->dev->dev_private;
-       struct drm_gem_object *gem = fb->obj[0];
-       struct openchrome_bo *bo = container_of(gem,
-                                       struct openchrome_bo, gem);
+       struct drm_gem_object *gem;
+       struct ttm_buffer_object *ttm_bo;
+       struct openchrome_bo *bo;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
@@ -1917,6 +1917,10 @@ void openchrome_primary_atomic_update(struct drm_plane 
*plane,
                goto exit;
        }
 
+       gem = fb->obj[0];
+       ttm_bo = container_of(gem, struct ttm_buffer_object, base);
+       bo = container_of(ttm_bo, struct openchrome_bo, ttm_bo);
+
        if (!iga->index) {
                via_iga1_set_color_depth(dev_private, fb->format->depth);
 
@@ -1970,8 +1974,9 @@ exit:
 static int openchrome_primary_prepare_fb(struct drm_plane *plane,
                                struct drm_plane_state *new_state)
 {
-       struct openchrome_bo *bo;
        struct drm_gem_object *gem;
+       struct ttm_buffer_object *ttm_bo;
+       struct openchrome_bo *bo;
        int ret = 0;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
@@ -1981,7 +1986,8 @@ static int openchrome_primary_prepare_fb(struct drm_plane 
*plane,
        }
 
        gem = new_state->fb->obj[0];
-       bo = container_of(gem, struct openchrome_bo, gem);
+       ttm_bo = container_of(gem, struct ttm_buffer_object, base);
+       bo = container_of(ttm_bo, struct openchrome_bo, ttm_bo);
 
        ret = ttm_bo_reserve(&bo->ttm_bo, true, false, NULL);
        if (ret) {
@@ -1998,8 +2004,9 @@ exit:
 static void openchrome_primary_cleanup_fb(struct drm_plane *plane,
                                struct drm_plane_state *old_state)
 {
-       struct openchrome_bo *bo;
        struct drm_gem_object *gem;
+       struct ttm_buffer_object *ttm_bo;
+       struct openchrome_bo *bo;
        int ret;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
@@ -2009,7 +2016,8 @@ static void openchrome_primary_cleanup_fb(struct 
drm_plane *plane,
        }
 
        gem = old_state->fb->obj[0];
-       bo = container_of(gem, struct openchrome_bo, gem);
+       ttm_bo = container_of(gem, struct ttm_buffer_object, base);
+       bo = container_of(ttm_bo, struct openchrome_bo, ttm_bo);
 
        ret = ttm_bo_reserve(&bo->ttm_bo, true, false, NULL);
        if (ret) {
diff --git a/drivers/gpu/drm/openchrome/openchrome_cursor.c 
b/drivers/gpu/drm/openchrome/openchrome_cursor.c
index b5ec6c44b1c0..b9a685488c97 100644
--- a/drivers/gpu/drm/openchrome/openchrome_cursor.c
+++ b/drivers/gpu/drm/openchrome/openchrome_cursor.c
@@ -263,6 +263,7 @@ static int openchrome_cursor_prepare_fb(struct drm_plane 
*plane,
                                struct drm_plane_state *new_state)
 {
        struct drm_gem_object *gem;
+       struct ttm_buffer_object *ttm_bo;
        struct openchrome_bo *bo;
        int ret = 0;
 
@@ -273,7 +274,8 @@ static int openchrome_cursor_prepare_fb(struct drm_plane 
*plane,
        }
 
        gem = new_state->fb->obj[0];
-       bo = container_of(gem, struct openchrome_bo, gem);
+       ttm_bo = container_of(gem, struct ttm_buffer_object, base);
+       bo = container_of(ttm_bo, struct openchrome_bo, ttm_bo);
 
        ret = ttm_bo_reserve(&bo->ttm_bo, true, false, NULL);
        if (ret) {
@@ -298,6 +300,7 @@ static void openchrome_cursor_cleanup_fb(struct drm_plane 
*plane,
                                struct drm_plane_state *old_state)
 {
        struct drm_gem_object *gem;
+       struct ttm_buffer_object *ttm_bo;
        struct openchrome_bo *bo;
        int ret;
 
@@ -308,7 +311,8 @@ static void openchrome_cursor_cleanup_fb(struct drm_plane 
*plane,
        }
 
        gem = old_state->fb->obj[0];
-       bo = container_of(gem, struct openchrome_bo, gem);
+       ttm_bo = container_of(gem, struct ttm_buffer_object, base);
+       bo = container_of(ttm_bo, struct openchrome_bo, ttm_bo);
 
        ttm_bo_kunmap(&bo->kmap);
        ret = ttm_bo_reserve(&bo->ttm_bo, true, false, NULL);
@@ -366,14 +370,16 @@ static void openchrome_cursor_atomic_update(struct 
drm_plane *plane,
        struct drm_plane_state *old_state =
                        drm_atomic_get_old_plane_state(state, plane);
        struct drm_crtc *crtc = new_state->crtc;
-       struct openchrome_bo *bo;
        struct drm_gem_object *gem;
+       struct ttm_buffer_object *ttm_bo;
+       struct openchrome_bo *bo;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
        if (new_state->fb != old_state->fb) {
                gem = new_state->fb->obj[0];
-               bo = container_of(gem, struct openchrome_bo, gem);
+               ttm_bo = container_of(gem, struct ttm_buffer_object, base);
+               bo = container_of(ttm_bo, struct openchrome_bo, ttm_bo);
                openchrome_cursor_address(crtc, bo);
        }
 
diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.c 
b/drivers/gpu/drm/openchrome/openchrome_drv.c
index 9b2c568abf2a..adf817c5729c 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.c
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.c
@@ -108,8 +108,8 @@ static int openchrome_driver_dumb_create(
                goto exit;
        }
 
-       ret = drm_gem_handle_create(file_priv, &bo->gem, &handle);
-       drm_gem_object_put(&bo->gem);
+       ret = drm_gem_handle_create(file_priv, &bo->ttm_bo.base, &handle);
+       drm_gem_object_put(&bo->ttm_bo.base);
        if (ret) {
                goto exit;
        }
@@ -129,6 +129,7 @@ static int openchrome_driver_dumb_map_offset(
                                uint64_t *offset)
 {
        struct drm_gem_object *gem;
+       struct ttm_buffer_object *ttm_bo;
        struct openchrome_bo *bo;
        int ret = 0;
 
@@ -140,7 +141,8 @@ static int openchrome_driver_dumb_map_offset(
                goto exit;
        }
 
-       bo = container_of(gem, struct openchrome_bo, gem);
+       ttm_bo = container_of(gem, struct ttm_buffer_object, base);
+       bo = container_of(ttm_bo, struct openchrome_bo, ttm_bo);
        *offset = drm_vma_node_offset_addr(&bo->ttm_bo.base.vma_node);
 
        drm_gem_object_put(gem);
diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h 
b/drivers/gpu/drm/openchrome/openchrome_drv.h
index e2bd242a351c..beac0c1fbd77 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.h
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.h
@@ -195,7 +195,6 @@ struct openchrome_bo {
        struct ttm_bo_kmap_obj          kmap;
        struct ttm_placement            placement;
        struct ttm_place                placements[OPENCHROME_TTM_PL_NUM];
-       struct drm_gem_object           gem;
 };
 
 struct openchrome_framebuffer {
diff --git a/drivers/gpu/drm/openchrome/openchrome_fb.c 
b/drivers/gpu/drm/openchrome/openchrome_fb.c
index 5ce7b99e2275..b1bba29d406c 100644
--- a/drivers/gpu/drm/openchrome/openchrome_fb.c
+++ b/drivers/gpu/drm/openchrome/openchrome_fb.c
@@ -188,7 +188,7 @@ openchrome_fb_probe(struct drm_fb_helper *helper,
                goto exit;
        }
 
-       gem = &openchrome_fb->bo->gem;
+       gem = &openchrome_fb->bo->ttm_bo.base;
        ret = openchrome_framebuffer_init(dev, gem, &mode_cmd, &fb);
        if (ret) {
                goto free_bo;
diff --git a/drivers/gpu/drm/openchrome/openchrome_ioctl.c 
b/drivers/gpu/drm/openchrome/openchrome_ioctl.c
index dae01d3b30e3..22109188c869 100644
--- a/drivers/gpu/drm/openchrome/openchrome_ioctl.c
+++ b/drivers/gpu/drm/openchrome/openchrome_ioctl.c
@@ -57,9 +57,9 @@ static int openchrome_gem_create_ioctl(struct drm_device *dev,
                goto exit;
        }
 
-       ret = drm_gem_handle_create(file_priv, &bo->gem,
+       ret = drm_gem_handle_create(file_priv, &bo->ttm_bo.base,
                                        &handle);
-       drm_gem_object_put(&bo->gem);
+       drm_gem_object_put(&bo->ttm_bo.base);
        if (ret) {
                openchrome_bo_destroy(bo, false);
                goto exit;
@@ -80,6 +80,7 @@ static int openchrome_gem_map_ioctl(struct drm_device *dev,
 {
        struct drm_openchrome_gem_map *args = data;
        struct drm_gem_object *gem;
+       struct ttm_buffer_object *ttm_bo;
        struct openchrome_bo *bo;
        int ret = 0;
 
@@ -91,7 +92,8 @@ static int openchrome_gem_map_ioctl(struct drm_device *dev,
                goto exit;
        }
 
-       bo = container_of(gem, struct openchrome_bo, gem);
+       ttm_bo = container_of(gem, struct ttm_buffer_object, base);
+       bo = container_of(ttm_bo, struct openchrome_bo, ttm_bo);
 
        args->map_offset = drm_vma_node_offset_addr(
                                        &bo->ttm_bo.base.vma_node);
diff --git a/drivers/gpu/drm/openchrome/openchrome_object.c 
b/drivers/gpu/drm/openchrome/openchrome_object.c
index 5afc472382c8..db45e38f44e3 100644
--- a/drivers/gpu/drm/openchrome/openchrome_object.c
+++ b/drivers/gpu/drm/openchrome/openchrome_object.c
@@ -47,11 +47,14 @@
 
 static void openchrome_gem_free(struct drm_gem_object *obj)
 {
-       struct openchrome_bo *bo = container_of(obj,
-                                       struct openchrome_bo, gem);
+       struct ttm_buffer_object *ttm_bo;
+       struct openchrome_bo *bo;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
+       ttm_bo = container_of(obj, struct ttm_buffer_object, base);
+       bo = container_of(ttm_bo, struct openchrome_bo, ttm_bo);
+
        ttm_bo_put(&bo->ttm_bo);
 
        DRM_DEBUG_KMS("Exiting %s.\n", __func__);
@@ -112,12 +115,13 @@ void openchrome_ttm_domain_to_placement(struct 
openchrome_bo *bo,
 
 void openchrome_ttm_bo_destroy(struct ttm_buffer_object *tbo)
 {
-       struct openchrome_bo *bo = container_of(tbo,
-                                       struct openchrome_bo, ttm_bo);
+       struct openchrome_bo *bo;
 
        DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
-       drm_gem_object_release(&bo->gem);
+       bo = container_of(tbo, struct openchrome_bo, ttm_bo);
+
+       drm_gem_object_release(&bo->ttm_bo.base);
        kfree(bo);
 
        DRM_DEBUG_KMS("Exiting %s.\n", __func__);
@@ -187,13 +191,13 @@ int openchrome_bo_create(struct drm_device *dev,
         */
        size = ALIGN(size, PAGE_SIZE);
 
-       ret = drm_gem_object_init(dev, &bo->gem, size);
+       ret = drm_gem_object_init(dev, &bo->ttm_bo.base, size);
        if (ret) {
                DRM_ERROR("Cannot initialize a GEM object.\n");
                goto error;
        }
 
-       bo->gem.funcs = &openchrome_gem_object_funcs;
+       bo->ttm_bo.base.funcs = &openchrome_gem_object_funcs;
 
        openchrome_ttm_domain_to_placement(bo, ttm_domain);
        ret = ttm_bo_init(&dev_private->bdev,

Reply via email to