]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
Merge tag 'upstream-4.13-rc1' of git://git.infradead.org/linux-ubifs
[karo-tx-linux.git] / drivers / gpu / drm / msm / mdp / mdp5 / mdp5_kms.c
index d3d6b4cae1e6c86f1fa461b16dda05d649c1c0e8..5d13fa5381ee37705a0c282bf023b4782fc19268 100644 (file)
@@ -163,7 +163,7 @@ static void mdp5_set_encoder_mode(struct msm_kms *kms,
 static void mdp5_kms_destroy(struct msm_kms *kms)
 {
        struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms));
-       struct msm_gem_address_space *aspace = mdp5_kms->aspace;
+       struct msm_gem_address_space *aspace = kms->aspace;
        int i;
 
        for (i = 0; i < mdp5_kms->num_hwmixers; i++)
@@ -527,31 +527,28 @@ static struct drm_encoder *get_encoder_from_crtc(struct drm_crtc *crtc)
        return NULL;
 }
 
-static int mdp5_get_scanoutpos(struct drm_device *dev, unsigned int pipe,
-                              unsigned int flags, int *vpos, int *hpos,
-                              ktime_t *stime, ktime_t *etime,
-                              const struct drm_display_mode *mode)
+static bool mdp5_get_scanoutpos(struct drm_device *dev, unsigned int pipe,
+                               bool in_vblank_irq, int *vpos, int *hpos,
+                               ktime_t *stime, ktime_t *etime,
+                               const struct drm_display_mode *mode)
 {
        struct msm_drm_private *priv = dev->dev_private;
        struct drm_crtc *crtc;
        struct drm_encoder *encoder;
        int line, vsw, vbp, vactive_start, vactive_end, vfp_end;
-       int ret = 0;
 
        crtc = priv->crtcs[pipe];
        if (!crtc) {
                DRM_ERROR("Invalid crtc %d\n", pipe);
-               return 0;
+               return false;
        }
 
        encoder = get_encoder_from_crtc(crtc);
        if (!encoder) {
                DRM_ERROR("no encoder found for crtc %d\n", pipe);
-               return 0;
+               return false;
        }
 
-       ret |= DRM_SCANOUTPOS_VALID | DRM_SCANOUTPOS_ACCURATE;
-
        vsw = mode->crtc_vsync_end - mode->crtc_vsync_start;
        vbp = mode->crtc_vtotal - mode->crtc_vsync_end;
 
@@ -575,10 +572,8 @@ static int mdp5_get_scanoutpos(struct drm_device *dev, unsigned int pipe,
 
        if (line < vactive_start) {
                line -= vactive_start;
-               ret |= DRM_SCANOUTPOS_IN_VBLANK;
        } else if (line > vactive_end) {
                line = line - vfp_end - vactive_start;
-               ret |= DRM_SCANOUTPOS_IN_VBLANK;
        } else {
                line -= vactive_start;
        }
@@ -589,31 +584,7 @@ static int mdp5_get_scanoutpos(struct drm_device *dev, unsigned int pipe,
        if (etime)
                *etime = ktime_get();
 
-       return ret;
-}
-
-static int mdp5_get_vblank_timestamp(struct drm_device *dev, unsigned int pipe,
-                                    int *max_error,
-                                    struct timeval *vblank_time,
-                                    unsigned flags)
-{
-       struct msm_drm_private *priv = dev->dev_private;
-       struct drm_crtc *crtc;
-
-       if (pipe < 0 || pipe >= priv->num_crtcs) {
-               DRM_ERROR("Invalid crtc %d\n", pipe);
-               return -EINVAL;
-       }
-
-       crtc = priv->crtcs[pipe];
-       if (!crtc) {
-               DRM_ERROR("Invalid crtc %d\n", pipe);
-               return -EINVAL;
-       }
-
-       return drm_calc_vbltimestamp_from_scanoutpos(dev, pipe, max_error,
-                                                    vblank_time, flags,
-                                                    &crtc->mode);
+       return true;
 }
 
 static u32 mdp5_get_vblank_counter(struct drm_device *dev, unsigned int pipe)
@@ -692,7 +663,7 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
                        goto fail;
                }
 
-               mdp5_kms->aspace = aspace;
+               kms->aspace = aspace;
 
                ret = aspace->mmu->funcs->attach(aspace->mmu, iommu_ports,
                                ARRAY_SIZE(iommu_ports));
@@ -707,13 +678,6 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
                aspace = NULL;;
        }
 
-       mdp5_kms->id = msm_register_address_space(dev, aspace);
-       if (mdp5_kms->id < 0) {
-               ret = mdp5_kms->id;
-               dev_err(&pdev->dev, "failed to register mdp5 iommu: %d\n", ret);
-               goto fail;
-       }
-
        ret = modeset_init(mdp5_kms);
        if (ret) {
                dev_err(&pdev->dev, "modeset_init failed: %d\n", ret);
@@ -725,7 +689,7 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
        dev->mode_config.max_width = 0xffff;
        dev->mode_config.max_height = 0xffff;
 
-       dev->driver->get_vblank_timestamp = mdp5_get_vblank_timestamp;
+       dev->driver->get_vblank_timestamp = drm_calc_vbltimestamp_from_scanoutpos;
        dev->driver->get_scanout_position = mdp5_get_scanoutpos;
        dev->driver->get_vblank_counter = mdp5_get_vblank_counter;
        dev->max_vblank_count = 0xffffffff;