From: John Stultz <john.stu...@linaro.org>

Update the driver to work with v4.9 kernels

Signed-off-by: John Stultz <john.stu...@linaro.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+hua...@kernel.org>
---
 drivers/staging/hikey9xx/gpu/dw_drm_dsi.c     |  4 +-
 drivers/staging/hikey9xx/gpu/kirin_dpe_reg.h  |  1 +
 drivers/staging/hikey9xx/gpu/kirin_drm_drv.c  |  3 +-
 drivers/staging/hikey9xx/gpu/kirin_drm_drv.h  |  1 +
 drivers/staging/hikey9xx/gpu/kirin_drm_dss.c  | 46 ++++++++-----------
 .../hikey9xx/gpu/kirin_drm_overlay_utils.c    |  7 ++-
 6 files changed, 30 insertions(+), 32 deletions(-)

diff --git a/drivers/staging/hikey9xx/gpu/dw_drm_dsi.c 
b/drivers/staging/hikey9xx/gpu/dw_drm_dsi.c
index 1d1d4f49609c..9871b375416b 100644
--- a/drivers/staging/hikey9xx/gpu/dw_drm_dsi.c
+++ b/drivers/staging/hikey9xx/gpu/dw_drm_dsi.c
@@ -1079,7 +1079,7 @@ static int dw_drm_encoder_init(struct device *dev,
 
        encoder->possible_crtcs = crtc_mask;
        ret = drm_encoder_init(drm_dev, encoder, &dw_encoder_funcs,
-                              DRM_MODE_ENCODER_DSI);
+                              DRM_MODE_ENCODER_DSI, NULL);
        if (ret) {
                DRM_ERROR("failed to init dsi encoder\n");
                return ret;
@@ -1104,7 +1104,7 @@ static int dsi_host_attach(struct mipi_dsi_host *host,
        dsi->client[id].lanes = mdsi->lanes;
        dsi->client[id].format = mdsi->format;
        dsi->client[id].mode_flags = mdsi->mode_flags;
-       dsi->client[id].phy_clock = mdsi->phy_clock;
+       dsi->client[id].phy_clock = 0;
 
        DRM_INFO("host attach, client name=[%s], id=%d\n", mdsi->name, id);
 
diff --git a/drivers/staging/hikey9xx/gpu/kirin_dpe_reg.h 
b/drivers/staging/hikey9xx/gpu/kirin_dpe_reg.h
index 61af8ef81878..9fad9ef942bd 100644
--- a/drivers/staging/hikey9xx/gpu/kirin_dpe_reg.h
+++ b/drivers/staging/hikey9xx/gpu/kirin_dpe_reg.h
@@ -18,6 +18,7 @@
 #include <linux/kernel.h>
 #include <linux/wait.h>
 #include <linux/bug.h>
+#include <linux/iommu.h>
 
 #include <linux/ion.h>
 #include <linux/hisi/hisi_ion.h>
diff --git a/drivers/staging/hikey9xx/gpu/kirin_drm_drv.c 
b/drivers/staging/hikey9xx/gpu/kirin_drm_drv.c
index edb690062f64..ffa0cd792bf1 100644
--- a/drivers/staging/hikey9xx/gpu/kirin_drm_drv.c
+++ b/drivers/staging/hikey9xx/gpu/kirin_drm_drv.c
@@ -200,9 +200,8 @@ static int kirin_drm_connectors_register(struct drm_device 
*dev)
 
 static struct drm_driver kirin_drm_driver = {
        .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME |
-                                 DRIVER_ATOMIC | DRIVER_HAVE_IRQ | 
DRIVER_RENDER,
+                                 DRIVER_ATOMIC | DRIVER_RENDER,
        .fops                           = &kirin_drm_fops,
-       .set_busid                      = drm_platform_set_busid,
 
        .gem_free_object        = drm_gem_cma_free_object,
        .gem_vm_ops             = &drm_gem_cma_vm_ops,
diff --git a/drivers/staging/hikey9xx/gpu/kirin_drm_drv.h 
b/drivers/staging/hikey9xx/gpu/kirin_drm_drv.h
index b361f5f69932..2f842ad36ae9 100644
--- a/drivers/staging/hikey9xx/gpu/kirin_drm_drv.h
+++ b/drivers/staging/hikey9xx/gpu/kirin_drm_drv.h
@@ -12,6 +12,7 @@
 #define __KIRIN_DRM_DRV_H__
 
 #include <drm/drmP.h>
+#include <linux/iommu.h>
 #include <linux/ion.h>
 #include <linux/hisi/hisi_ion.h>
 #include <linux/hisi/hisi-iommu.h>
diff --git a/drivers/staging/hikey9xx/gpu/kirin_drm_dss.c 
b/drivers/staging/hikey9xx/gpu/kirin_drm_dss.c
index 2a92372d0c81..c47d860f4697 100644
--- a/drivers/staging/hikey9xx/gpu/kirin_drm_dss.c
+++ b/drivers/staging/hikey9xx/gpu/kirin_drm_dss.c
@@ -213,6 +213,7 @@ static void dss_disable_vblank(struct drm_device *dev, 
unsigned int pipe)
 static irqreturn_t dss_irq_handler(int irq, void *data)
 {
        struct dss_crtc *acrtc = data;
+       struct drm_crtc *crtc = &acrtc->base;
        struct dss_hw_ctx *ctx = acrtc->ctx;
        void __iomem *dss_base = ctx->base;
 
@@ -241,8 +242,10 @@ static irqreturn_t dss_irq_handler(int irq, void *data)
                wake_up_interruptible_all(&ctx->vactive0_start_wq);
        }
 
-       if (isr_s2 & BIT_VSYNC)
+       if (isr_s2 & BIT_VSYNC) {
                ctx->vsync_timestamp = ktime_get();
+               drm_crtc_handle_vblank(crtc);
+       }
 
        if (isr_s2 & BIT_LDI_UNFLOW) {
                mask = inp32(dss_base + DSS_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
@@ -271,6 +274,7 @@ static void dss_crtc_enable(struct drm_crtc *crtc)
        }
 
        acrtc->enable = true;
+       drm_crtc_vblank_on(crtc);
 }
 
 static void dss_crtc_disable(struct drm_crtc *crtc)
@@ -282,13 +286,7 @@ static void dss_crtc_disable(struct drm_crtc *crtc)
 
        /*dss_power_down(acrtc);*/
        acrtc->enable = false;
-}
-
-static int dss_crtc_atomic_check(struct drm_crtc *crtc,
-                                struct drm_crtc_state *state)
-{
-       /* do nothing */
-       return 0;
+       drm_crtc_vblank_off(crtc);
 }
 
 static void dss_crtc_mode_set_nofb(struct drm_crtc *crtc)
@@ -315,13 +313,24 @@ static void dss_crtc_atomic_flush(struct drm_crtc *crtc,
                                  struct drm_crtc_state *old_state)
 
 {
+       struct drm_pending_vblank_event *event = crtc->state->event;
+
+       if (event) {
+               crtc->state->event = NULL;
+
+               spin_lock_irq(&crtc->dev->event_lock);
+               if (drm_crtc_vblank_get(crtc) == 0)
+                       drm_crtc_arm_vblank_event(crtc, event);
+               else
+                       drm_crtc_send_vblank_event(crtc, event);
+               spin_unlock_irq(&crtc->dev->event_lock);
+       }
 
 }
 
 static const struct drm_crtc_helper_funcs dss_crtc_helper_funcs = {
        .enable         = dss_crtc_enable,
        .disable        = dss_crtc_disable,
-       .atomic_check   = dss_crtc_atomic_check,
        .mode_set_nofb  = dss_crtc_mode_set_nofb,
        .atomic_begin   = dss_crtc_atomic_begin,
        .atomic_flush   = dss_crtc_atomic_flush,
@@ -357,7 +366,7 @@ static int dss_crtc_init(struct drm_device *dev, struct 
drm_crtc *crtc,
        crtc->port = port;
 
        ret = drm_crtc_init_with_planes(dev, crtc, plane, NULL,
-                                       &dss_crtc_funcs);
+                                       &dss_crtc_funcs, NULL);
        if (ret) {
                DRM_ERROR("failed to init crtc.\n");
                return ret;
@@ -369,19 +378,6 @@ static int dss_crtc_init(struct drm_device *dev, struct 
drm_crtc *crtc,
        return 0;
 }
 
-static int dss_plane_prepare_fb(struct drm_plane *plane,
-                               const struct drm_plane_state *new_state)
-{
-       /* do nothing */
-       return 0;
-}
-
-static void dss_plane_cleanup_fb(struct drm_plane *plane,
-                                const struct drm_plane_state *old_state)
-{
-       /* do nothing */
-}
-
 static int dss_plane_atomic_check(struct drm_plane *plane,
                                  struct drm_plane_state *state)
 {
@@ -441,8 +437,6 @@ static void dss_plane_atomic_disable(struct drm_plane 
*plane,
 }
 
 static const struct drm_plane_helper_funcs dss_plane_helper_funcs = {
-       .prepare_fb = dss_plane_prepare_fb,
-       .cleanup_fb = dss_plane_cleanup_fb,
        .atomic_check = dss_plane_atomic_check,
        .atomic_update = dss_plane_atomic_update,
        .atomic_disable = dss_plane_atomic_disable,
@@ -471,7 +465,7 @@ static int dss_plane_init(struct drm_device *dev, struct 
dss_plane *aplane,
                return ret;
 
        ret = drm_universal_plane_init(dev, &aplane->base, 1, &dss_plane_funcs,
-                                      fmts, fmts_cnt, type);
+                                      fmts, fmts_cnt, type, NULL);
        if (ret) {
                DRM_ERROR("fail to init plane, ch=%d\n", aplane->ch);
                return ret;
diff --git a/drivers/staging/hikey9xx/gpu/kirin_drm_overlay_utils.c 
b/drivers/staging/hikey9xx/gpu/kirin_drm_overlay_utils.c
index 98ab748b8d8e..095335eba16d 100644
--- a/drivers/staging/hikey9xx/gpu/kirin_drm_overlay_utils.c
+++ b/drivers/staging/hikey9xx/gpu/kirin_drm_overlay_utils.c
@@ -1117,7 +1117,7 @@ void hisi_fb_pan_display(struct drm_plane *plane)
        dss_rect_ltrb_t rect;
        u32 bpp;
        u32 stride;
-       u32 display_addr;
+       u32 display_addr = 0;
        u32 hal_fmt;
        int chn_idx = DSS_RCHN_D2;
 
@@ -1138,7 +1138,10 @@ void hisi_fb_pan_display(struct drm_plane *plane)
        bpp = fb->bits_per_pixel / 8;
        stride = fb->pitches[0];
 
-       display_addr = (u32)fbdev->smem_start + src_y * stride;
+       if (fbdev)
+               display_addr = (u32)fbdev->smem_start + src_y * stride;
+       else
+               printk("JDB: fbdev is null?\n");
 
        rect.left = 0;
        rect.right = src_w - 1;
-- 
2.26.2

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to