Revert "drm/rockchip: fixup display reference count"
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / rockchip / rockchip_drm_drv.c
index cbd133eb25aa171ae531d054da95f19d0eebd6b2..59605f9056af017a505795c3ccab1e9ec4da53ec 100644 (file)
@@ -149,8 +149,6 @@ static int init_loader_memory(struct drm_device *drm_dev)
        }
 
        if (private->domain) {
-               int prot = IOMMU_READ | IOMMU_WRITE;
-
                memset(&logo->mm, 0, sizeof(logo->mm));
                ret = drm_mm_insert_node_generic(&private->mm, &logo->mm,
                                                 size, PAGE_SIZE,
@@ -162,8 +160,10 @@ static int init_loader_memory(struct drm_device *drm_dev)
 
                logo->dma_addr = logo->mm.start;
 
-               if (iommu_map_sg(private->domain, logo->dma_addr, sgt->sgl,
-                                sgt->nents, prot) < size) {
+               logo->iommu_map_size = iommu_map_sg(private->domain,
+                                                   logo->dma_addr, sgt->sgl,
+                                                   sgt->nents, IOMMU_READ);
+               if (logo->iommu_map_size < size) {
                        DRM_ERROR("failed to map buffer");
                        ret = -ENOMEM;
                        goto err_remove_node;
@@ -485,8 +485,10 @@ static int update_state(struct drm_device *drm_dev,
                    !connector_helper_funcs->best_encoder)
                        return -ENXIO;
                encoder = connector_helper_funcs->best_encoder(connector);
+               if (!encoder)
+                       return -ENXIO;
                encoder_helper_funcs = encoder->helper_private;
-               if (!encoder || !encoder_helper_funcs->atomic_check)
+               if (!encoder_helper_funcs->atomic_check)
                        return -ENXIO;
                ret = encoder_helper_funcs->atomic_check(encoder, crtc->state,
                                                         conn_state);
@@ -681,7 +683,7 @@ int rockchip_register_crtc_funcs(struct drm_crtc *crtc,
        int pipe = drm_crtc_index(crtc);
        struct rockchip_drm_private *priv = crtc->dev->dev_private;
 
-       if (pipe > ROCKCHIP_MAX_CRTC)
+       if (pipe >= ROCKCHIP_MAX_CRTC)
                return -EINVAL;
 
        priv->crtc_funcs[pipe] = crtc_funcs;
@@ -694,7 +696,7 @@ void rockchip_unregister_crtc_funcs(struct drm_crtc *crtc)
        int pipe = drm_crtc_index(crtc);
        struct rockchip_drm_private *priv = crtc->dev->dev_private;
 
-       if (pipe > ROCKCHIP_MAX_CRTC)
+       if (pipe >= ROCKCHIP_MAX_CRTC)
                return;
 
        priv->crtc_funcs[pipe] = NULL;