From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: ville.syrjala@linux.intel.com
Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v2] drm: Add fb_helper->restore_fbdev_mode hook
Date: Wed, 08 May 2013 15:52:23 +0200 [thread overview]
Message-ID: <1838766.MyNQAFo94M@avalon> (raw)
In-Reply-To: <1368020398-5036-1-git-send-email-ville.syrjala@linux.intel.com>
On Wednesday 08 May 2013 16:39:58 ville.syrjala@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Drivers may need to turn off overlay planes, cursors, etc. when
> restoring the fbdev mode. So allow drivers to provide their own
> version of drm_fb_helper_restore_fbdev_mode() that can take care
> of such details.
>
> Initially just plug in drm_fb_helper_restore_fbdev_mode for all
> drivers.
>
> v2: Add kernel-doc for the new hook
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
> drivers/gpu/drm/ast/ast_fb.c | 1 +
> drivers/gpu/drm/cirrus/cirrus_fbdev.c | 1 +
> drivers/gpu/drm/drm_fb_cma_helper.c | 1 +
> drivers/gpu/drm/drm_fb_helper.c | 2 +-
> drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 1 +
> drivers/gpu/drm/gma500/framebuffer.c | 1 +
> drivers/gpu/drm/i915/intel_fb.c | 1 +
> drivers/gpu/drm/mgag200/mgag200_fb.c | 1 +
> drivers/gpu/drm/nouveau/nouveau_fbcon.c | 1 +
> drivers/gpu/drm/omapdrm/omap_fbdev.c | 1 +
> drivers/gpu/drm/qxl/qxl_fb.c | 1 +
> drivers/gpu/drm/radeon/radeon_fb.c | 1 +
> drivers/gpu/drm/udl/udl_fb.c | 1 +
> include/drm/drm_fb_helper.h | 2 ++
> 14 files changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/ast/ast_fb.c b/drivers/gpu/drm/ast/ast_fb.c
> index 34931fe..2c1f469 100644
> --- a/drivers/gpu/drm/ast/ast_fb.c
> +++ b/drivers/gpu/drm/ast/ast_fb.c
> @@ -254,6 +254,7 @@ static struct drm_fb_helper_funcs ast_fb_helper_funcs =
> { .gamma_set = ast_fb_gamma_set,
> .gamma_get = ast_fb_gamma_get,
> .fb_probe = astfb_create,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
> static void ast_fbdev_destroy(struct drm_device *dev,
> diff --git a/drivers/gpu/drm/cirrus/cirrus_fbdev.c
> b/drivers/gpu/drm/cirrus/cirrus_fbdev.c index e25afcc..ee48a21 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
> @@ -253,6 +253,7 @@ static struct drm_fb_helper_funcs cirrus_fb_helper_funcs
> = { .gamma_set = cirrus_crtc_fb_gamma_set,
> .gamma_get = cirrus_crtc_fb_gamma_get,
> .fb_probe = cirrusfb_create,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
> int cirrus_fbdev_init(struct cirrus_device *cdev)
> diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c
> b/drivers/gpu/drm/drm_fb_cma_helper.c index 0b5af7d..f011628 100644
> --- a/drivers/gpu/drm/drm_fb_cma_helper.c
> +++ b/drivers/gpu/drm/drm_fb_cma_helper.c
> @@ -330,6 +330,7 @@ err_drm_gem_cma_free_object:
>
> static struct drm_fb_helper_funcs drm_fb_cma_helper_funcs = {
> .fb_probe = drm_fbdev_cma_create,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
> /**
> diff --git a/drivers/gpu/drm/drm_fb_helper.c
> b/drivers/gpu/drm/drm_fb_helper.c index b78cbe7..02c70b2 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -315,7 +315,7 @@ static bool drm_fb_helper_force_kernel_mode(void)
> if (helper->dev->switch_power_state == DRM_SWITCH_POWER_OFF)
> continue;
>
> - ret = drm_fb_helper_restore_fbdev_mode(helper);
> + ret = helper->funcs->restore_fbdev_mode(helper);
> if (ret)
> error = true;
> }
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c index 68f0045..6ed4065 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> @@ -228,6 +228,7 @@ out:
>
> static struct drm_fb_helper_funcs exynos_drm_fb_helper_funcs = {
> .fb_probe = exynos_drm_fbdev_create,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
> int exynos_drm_fbdev_init(struct drm_device *dev)
> diff --git a/drivers/gpu/drm/gma500/framebuffer.c
> b/drivers/gpu/drm/gma500/framebuffer.c index 1534e22..8d7f9c0 100644
> --- a/drivers/gpu/drm/gma500/framebuffer.c
> +++ b/drivers/gpu/drm/gma500/framebuffer.c
> @@ -567,6 +567,7 @@ static struct drm_fb_helper_funcs psb_fb_helper_funcs =
> { .gamma_set = psbfb_gamma_set,
> .gamma_get = psbfb_gamma_get,
> .fb_probe = psbfb_probe,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
> static int psb_fbdev_destroy(struct drm_device *dev, struct psb_fbdev
> *fbdev) diff --git a/drivers/gpu/drm/i915/intel_fb.c
> b/drivers/gpu/drm/i915/intel_fb.c index 0e19e57..a04481f 100644
> --- a/drivers/gpu/drm/i915/intel_fb.c
> +++ b/drivers/gpu/drm/i915/intel_fb.c
> @@ -187,6 +187,7 @@ static struct drm_fb_helper_funcs intel_fb_helper_funcs
> = { .gamma_set = intel_crtc_fb_gamma_set,
> .gamma_get = intel_crtc_fb_gamma_get,
> .fb_probe = intelfb_create,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
> static void intel_fbdev_destroy(struct drm_device *dev,
> diff --git a/drivers/gpu/drm/mgag200/mgag200_fb.c
> b/drivers/gpu/drm/mgag200/mgag200_fb.c index 421beab..23b8de2 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_fb.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_fb.c
> @@ -239,6 +239,7 @@ static struct drm_fb_helper_funcs mga_fb_helper_funcs =
> { .gamma_set = mga_crtc_fb_gamma_set,
> .gamma_get = mga_crtc_fb_gamma_get,
> .fb_probe = mgag200fb_create,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
> int mgag200_fbdev_init(struct mga_device *mdev)
> diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
> b/drivers/gpu/drm/nouveau/nouveau_fbcon.c index b035317..2a280d8 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
> @@ -435,6 +435,7 @@ static struct drm_fb_helper_funcs
> nouveau_fbcon_helper_funcs = { .gamma_set = nouveau_fbcon_gamma_set,
> .gamma_get = nouveau_fbcon_gamma_get,
> .fb_probe = nouveau_fbcon_create,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
>
> diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c
> b/drivers/gpu/drm/omapdrm/omap_fbdev.c index b11ce60..ff3bc81 100644
> --- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
> +++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
> @@ -297,6 +297,7 @@ static struct drm_fb_helper_funcs omap_fb_helper_funcs =
> { .gamma_set = omap_crtc_fb_gamma_set,
> .gamma_get = omap_crtc_fb_gamma_get,
> .fb_probe = omap_fbdev_create,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
> static struct drm_fb_helper *get_fb(struct fb_info *fbi)
> diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c
> index b3c5127..b10db0c 100644
> --- a/drivers/gpu/drm/qxl/qxl_fb.c
> +++ b/drivers/gpu/drm/qxl/qxl_fb.c
> @@ -525,6 +525,7 @@ static struct drm_fb_helper_funcs qxl_fb_helper_funcs =
> { .gamma_get = qxl_crtc_fb_gamma_get,
> */
> .fb_probe = qxl_fb_find_or_create_single,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
> int qxl_fbdev_init(struct qxl_device *qdev)
> diff --git a/drivers/gpu/drm/radeon/radeon_fb.c
> b/drivers/gpu/drm/radeon/radeon_fb.c index b174674..2b1b211 100644
> --- a/drivers/gpu/drm/radeon/radeon_fb.c
> +++ b/drivers/gpu/drm/radeon/radeon_fb.c
> @@ -335,6 +335,7 @@ static struct drm_fb_helper_funcs radeon_fb_helper_funcs
> = { .gamma_set = radeon_crtc_fb_gamma_set,
> .gamma_get = radeon_crtc_fb_gamma_get,
> .fb_probe = radeonfb_create,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
> int radeon_fbdev_init(struct radeon_device *rdev)
> diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c
> index dc0c065..75a44fd 100644
> --- a/drivers/gpu/drm/udl/udl_fb.c
> +++ b/drivers/gpu/drm/udl/udl_fb.c
> @@ -561,6 +561,7 @@ static struct drm_fb_helper_funcs udl_fb_helper_funcs =
> { .gamma_set = udl_crtc_fb_gamma_set,
> .gamma_get = udl_crtc_fb_gamma_get,
> .fb_probe = udlfb_create,
> + .restore_fbdev_mode = drm_fb_helper_restore_fbdev_mode,
> };
>
> static void udl_fbdev_destroy(struct drm_device *dev,
> diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
> index 471f276..146abb6 100644
> --- a/include/drm/drm_fb_helper.h
> +++ b/include/drm/drm_fb_helper.h
> @@ -58,6 +58,7 @@ struct drm_fb_helper_surface_size {
> * structure. Futhermore it also needs to allocate the drm
> * framebuffer used to back the fbdev.
> * @initial_config: Setup an initial fbdev display configuration
> + * @restore_fbdev_mode: Restore the fbdev display configuration (eg. to
> show an oops) *
> * Driver callbacks used by the fbdev emulation helper library.
> */
> @@ -73,6 +74,7 @@ struct drm_fb_helper_funcs {
> struct drm_fb_helper_crtc **crtcs,
> struct drm_display_mode **modes,
> bool *enabled, int width, int height);
> + bool (*restore_fbdev_mode)(struct drm_fb_helper *fb_helper);
> };
>
> struct drm_fb_helper_connector {
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2013-05-08 13:52 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-08 9:55 [PATCH 0/7] drm/i915: fbdev mode restoration improvements ville.syrjala
2013-05-08 9:55 ` [PATCH 1/7] drm: Add fb_helper->restore_fbdev_mode hook ville.syrjala
2013-05-08 12:42 ` Laurent Pinchart
2013-05-08 13:39 ` [PATCH v2] " ville.syrjala
2013-05-08 13:46 ` Ville Syrjälä
2013-05-08 13:52 ` Laurent Pinchart [this message]
2013-05-08 9:55 ` [PATCH 2/7] drm/i915: Don't enable cursors or sprites for fbdev ville.syrjala
2013-05-24 9:20 ` Daniel Vetter
2013-05-24 9:38 ` [Intel-gfx] " Ville Syrjälä
2013-05-08 9:55 ` [PATCH 3/7] drm/i915: Fix fbdev sprite disable code ville.syrjala
2013-05-24 9:21 ` Daniel Vetter
2013-05-24 9:35 ` Daniel Vetter
2013-05-24 9:59 ` Ville Syrjälä
2013-05-24 15:14 ` Daniel Vetter
2013-05-24 17:06 ` Ville Syrjälä
2013-05-24 20:24 ` Daniel Vetter
2013-05-08 9:55 ` [PATCH 4/7] drm/i915: Use a custom restore_fbdev_mode hook ville.syrjala
2013-05-08 9:55 ` [PATCH 5/7] drm/i915: Use container_of() in the fbdev code ville.syrjala
2013-05-08 9:55 ` [PATCH 6/7] drm/i915: s/drm_i915_private_t/struct drm_i915_private/ ville.syrjala
2013-05-08 9:55 ` [PATCH 7/7] drm: Remove some unused stuff from drm_plane ville.syrjala
2013-05-08 12:41 ` Laurent Pinchart
2013-05-08 13:40 ` [PATCH v2] " ville.syrjala
2013-05-08 13:52 ` Laurent Pinchart
2013-06-19 1:02 ` Laurent Pinchart
2013-05-23 13:38 ` [Intel-gfx] [PATCH 7/7] " Imre Deak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1838766.MyNQAFo94M@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.