This should be done in the drivers for two reasons:
- it gets in the way of fastboot efforts
- it links the fb helpers with the crtc helpers instead of going
  through the real interface vfuncs, forcing i915 to fake all the
  ->disable callbacks used by the crtc helper to avoid ugly Oopsen

Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
---
 drivers/gpu/drm/ast/ast_fb.c              |    4 ++++
 drivers/gpu/drm/cirrus/cirrus_fbdev.c     |    3 +++
 drivers/gpu/drm/drm_fb_cma_helper.c       |    3 +++
 drivers/gpu/drm/drm_fb_helper.c           |    3 ---
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c |    3 +++
 drivers/gpu/drm/gma500/framebuffer.c      |    3 +++
 drivers/gpu/drm/i915/intel_fb.c           |    3 +++
 drivers/gpu/drm/mgag200/mgag200_fb.c      |    3 +++
 drivers/gpu/drm/nouveau/nouveau_fbcon.c   |    3 +++
 drivers/gpu/drm/radeon/radeon_fb.c        |    3 +++
 drivers/gpu/drm/udl/udl_fb.c              |    3 +++
 drivers/staging/omapdrm/omap_fbdev.c      |    3 +++
 12 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/ast/ast_fb.c b/drivers/gpu/drm/ast/ast_fb.c
index 4330784..9bfd5ab 100644
--- a/drivers/gpu/drm/ast/ast_fb.c
+++ b/drivers/gpu/drm/ast/ast_fb.c
@@ -40,6 +40,7 @@
 #include <drm/drmP.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_fb_helper.h>
+#include <drm/drm_crtc_helper.h>
 #include "ast_drv.h"

 static void ast_dirty_update(struct ast_fbdev *afbdev,
@@ -313,6 +314,9 @@ int ast_fbdev_init(struct drm_device *dev)
                return ret;
        }

+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(dev);
+
        drm_fb_helper_initial_config(&afbdev->helper, 32);
        return 0;
 }
diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c 
b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
index d9312ee..b869b8b 100644
--- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c
+++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
@@ -11,6 +11,7 @@
 #include <linux/module.h>
 #include <drm/drmP.h>
 #include <drm/drm_fb_helper.h>
+#include <drm/drm_crtc_helper.h>

 #include <linux/fb.h>

@@ -290,6 +291,8 @@ int cirrus_fbdev_init(struct cirrus_device *cdev)
                kfree(gfbdev);
                return ret;
        }
+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(cdev->dev);
        drm_fb_helper_initial_config(&gfbdev->helper, bpp_sel);

        return 0;
diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c 
b/drivers/gpu/drm/drm_fb_cma_helper.c
index 1ba09ba..fcf9fa3 100644
--- a/drivers/gpu/drm/drm_fb_cma_helper.c
+++ b/drivers/gpu/drm/drm_fb_cma_helper.c
@@ -326,6 +326,9 @@ struct drm_fbdev_cma *drm_fbdev_cma_init(struct drm_device 
*dev,
                goto err_free;
        }

+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(dev);
+
        ret = drm_fb_helper_initial_config(helper, preferred_bpp);
        if (ret < 0) {
                dev_err(dev->dev, "Failed to set inital hw configuration.\n");
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 2377fef..dbf0020 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -1360,9 +1360,6 @@ bool drm_fb_helper_initial_config(struct drm_fb_helper 
*fb_helper, int bpp_sel)
        struct drm_device *dev = fb_helper->dev;
        int count = 0;

-       /* disable all the possible outputs/crtcs before entering KMS mode */
-       drm_helper_disable_unused_functions(fb_helper->dev);
-
        drm_fb_helper_parse_command_line(fb_helper);

        count = drm_fb_helper_probe_connector_modes(fb_helper,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c 
b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 79f8903..77d78cd 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -288,6 +288,9 @@ int exynos_drm_fbdev_init(struct drm_device *dev)
                goto err_init;
        }

+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(dev);
+
        ret = drm_fb_helper_initial_config(helper, PREFERRED_BPP);
        if (ret < 0) {
                DRM_ERROR("failed to set up hw configuration.\n");
diff --git a/drivers/gpu/drm/gma500/framebuffer.c 
b/drivers/gpu/drm/gma500/framebuffer.c
index 96ebf4f..7288b6d 100644
--- a/drivers/gpu/drm/gma500/framebuffer.c
+++ b/drivers/gpu/drm/gma500/framebuffer.c
@@ -615,6 +615,9 @@ int psb_fbdev_init(struct drm_device *dev)
        drm_fb_helper_init(dev, &fbdev->psb_fb_helper, dev_priv->ops->crtcs,
                                                        INTELFB_CONN_LIMIT);

+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(dev);
+
        drm_fb_helper_initial_config(&fbdev->psb_fb_helper, 32);
        return 0;
 }
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
index 302bc63..7a8f7cd 100644
--- a/drivers/gpu/drm/i915/intel_fb.c
+++ b/drivers/gpu/drm/i915/intel_fb.c
@@ -256,6 +256,9 @@ void intel_fbdev_initial_config(struct drm_device *dev)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;

+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(dev);
+
        /* Due to peculiar init order wrt to hpd handling this is separate. */
        drm_fb_helper_initial_config(&dev_priv->fbdev->helper, 32);
 }
diff --git a/drivers/gpu/drm/mgag200/mgag200_fb.c 
b/drivers/gpu/drm/mgag200/mgag200_fb.c
index fd5cf18..674f8fb 100644
--- a/drivers/gpu/drm/mgag200/mgag200_fb.c
+++ b/drivers/gpu/drm/mgag200/mgag200_fb.c
@@ -13,6 +13,7 @@
 #include <linux/module.h>
 #include <drm/drmP.h>
 #include <drm/drm_fb_helper.h>
+#include <drm/drm_crtc_helper.h>

 #include <linux/fb.h>

@@ -277,6 +278,8 @@ int mgag200_fbdev_init(struct mga_device *mdev)
                kfree(mfbdev);
                return ret;
        }
+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(mdev->dev);
        drm_fb_helper_initial_config(&mfbdev->helper, 32);

        return 0;
diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c 
b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
index 74916a9..7b2d231 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
@@ -489,6 +489,9 @@ nouveau_fbcon_init(struct drm_device *dev)
        else
                preferred_bpp = 32;

+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(dev);
+
        drm_fb_helper_initial_config(&fbcon->helper, preferred_bpp);
        return 0;
 }
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c 
b/drivers/gpu/drm/radeon/radeon_fb.c
index a1ceee1..a44b386 100644
--- a/drivers/gpu/drm/radeon/radeon_fb.c
+++ b/drivers/gpu/drm/radeon/radeon_fb.c
@@ -378,6 +378,9 @@ int radeon_fbdev_init(struct radeon_device *rdev)
                return ret;
        }

+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(rdev->ddev);
+
        drm_fb_helper_initial_config(&rfbdev->helper, bpp_sel);
        return 0;
 }
diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c
index 25f9bb1..7d40cb7 100644
--- a/drivers/gpu/drm/udl/udl_fb.c
+++ b/drivers/gpu/drm/udl/udl_fb.c
@@ -582,6 +582,9 @@ int udl_fbdev_init(struct drm_device *dev)

        }

+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(dev);
+
        drm_fb_helper_initial_config(&ufbdev->helper, bpp_sel);
        return 0;
 }
diff --git a/drivers/staging/omapdrm/omap_fbdev.c 
b/drivers/staging/omapdrm/omap_fbdev.c
index ee1900a..6ccaf54 100644
--- a/drivers/staging/omapdrm/omap_fbdev.c
+++ b/drivers/staging/omapdrm/omap_fbdev.c
@@ -368,6 +368,9 @@ struct drm_fb_helper *omap_fbdev_init(struct drm_device 
*dev)
                goto fail;
        }

+       /* disable all the possible outputs/crtcs before entering KMS mode */
+       drm_helper_disable_unused_functions(dev);
+
        drm_fb_helper_initial_config(helper, 32);

        priv->fbdev = helper;
-- 
1.7.10.4

Reply via email to