drm/exynos/fbdev: don't set fix.smem/mmio_{start,len}
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / exynos / exynos_drm_fbdev.c
index e7c2f2d07f193b0393052be2e1bf32921b804da9..c5c00f2093703f7d00c3b580a917dd0787c62faa 100644 (file)
@@ -90,7 +90,7 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
        /* RGB formats use only one buffer */
        buffer = exynos_drm_fb_buffer(fb, 0);
        if (!buffer) {
-               DRM_LOG_KMS("buffer is null.\n");
+               DRM_DEBUG_KMS("buffer is null.\n");
                return -EFAULT;
        }
 
@@ -123,14 +123,7 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
 
        dev->mode_config.fb_base = (resource_size_t)buffer->dma_addr;
        fbi->screen_base = buffer->kvaddr + offset;
-       if (is_drm_iommu_supported(dev))
-               fbi->fix.smem_start = (unsigned long)
-                       (page_to_phys(sg_page(buffer->sgt->sgl)) + offset);
-       else
-               fbi->fix.smem_start = (unsigned long)buffer->dma_addr;
-
        fbi->screen_size = size;
-       fbi->fix.smem_len = size;
 
        return 0;
 }
@@ -237,6 +230,24 @@ static struct drm_fb_helper_funcs exynos_drm_fb_helper_funcs = {
        .fb_probe =     exynos_drm_fbdev_create,
 };
 
+bool exynos_drm_fbdev_is_anything_connected(struct drm_device *dev)
+{
+       struct drm_connector *connector;
+       bool ret = false;
+
+       mutex_lock(&dev->mode_config.mutex);
+       list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+               if (connector->status != connector_status_connected)
+                       continue;
+
+               ret = true;
+               break;
+       }
+       mutex_unlock(&dev->mode_config.mutex);
+
+       return ret;
+}
+
 int exynos_drm_fbdev_init(struct drm_device *dev)
 {
        struct exynos_drm_fbdev *fbdev;
@@ -248,6 +259,9 @@ int exynos_drm_fbdev_init(struct drm_device *dev)
        if (!dev->mode_config.num_crtc || !dev->mode_config.num_connector)
                return 0;
 
+       if (!exynos_drm_fbdev_is_anything_connected(dev))
+               return 0;
+
        fbdev = kzalloc(sizeof(*fbdev), GFP_KERNEL);
        if (!fbdev)
                return -ENOMEM;