lkml.org 
[lkml]   [2020]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/49] staging: hikey9xx/gpu: port it to work with Kernel v4.9
    Date
    From: John Stultz <john.stultz@linaro.org>

    Update the driver to work with v4.9 kernels

    Signed-off-by: John Stultz <john.stultz@linaro.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@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
    \
     
     \ /
      Last update: 2020-08-19 13:47    [W:2.379 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site