From: Sui Jingfeng <sui.jingfeng@linux.dev>
To: Thomas Zimmermann <tzimmermann@suse.de>,
daniel@ffwll.ch, airlied@gmail.com, jfalempe@redhat.com,
javierm@redhat.com
Cc: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org,
intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
nouveau@lists.freedesktop.org,
"Jani Nikula" <jani.nikula@linux.intel.com>,
"Rodrigo Vivi" <rodrigo.vivi@intel.com>,
"Joonas Lahtinen" <joonas.lahtinen@linux.intel.com>,
"Tvrtko Ursulin" <tursulin@ursulin.net>,
"Lucas De Marchi" <lucas.demarchi@intel.com>,
"Thomas Hellström" <thomas.hellstrom@linux.intel.com>
Subject: Re: [82/86] drm/i915: Move custom hotplug code into separate callback
Date: Mon, 19 Aug 2024 16:52:39 +0800 [thread overview]
Message-ID: <86a55d3c-930d-4b30-9f05-82dd2966df85@linux.dev> (raw)
In-Reply-To: <20240816125408.310253-83-tzimmermann@suse.de>
Hi, Thomas
I love your patch, yet ...
On 2024/8/16 20:23, Thomas Zimmermann wrote:
> i915's fbdev contains additional code for hotplugging a display that
> cannot be ported to the common fbdev client. Introduce the callback
> struct drm_fb_helper.fb_hotplug and implement it for i915. The fbdev
> helpers invoke the callback before handing the hotplug event.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
> Cc: Tvrtko Ursulin <tursulin@ursulin.net>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Cc: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>
> ---
> drivers/gpu/drm/drm_fb_helper.c | 6 +++
> drivers/gpu/drm/i915/display/intel_fbdev.c | 43 ++++++++++++----------
> include/drm/drm_fb_helper.h | 13 +++++++
> 3 files changed, 42 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index d9e539b0fd1a..92926cb02dfb 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -1938,6 +1938,12 @@ int drm_fb_helper_hotplug_event(struct drm_fb_helper *fb_helper)
> if (!drm_fbdev_emulation || !fb_helper)
> return 0;
>
> + if (fb_helper->funcs->fb_hotplug) {
We seems need to check the existence on the 'fb_helper->funcs' here,
For example:
if (fb_helper->funcs && fb_helper->funcs->fb_hotplug) {
Otherwise, it will de-reference NULL pointer.
Can be observed on a trivial driver though,
with no monitor(display) connected.
> + err = fb_helper->funcs->fb_hotplug(fb_helper);
> + if (err)
> + return err;
> + }
> +
> mutex_lock(&fb_helper->lock);
> if (fb_helper->deferred_setup) {
> err = __drm_fb_helper_initial_config_and_unlock(fb_helper);
> diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
> index c03fb00002a4..abe77ef0bd84 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbdev.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
> @@ -305,10 +305,32 @@ static void intelfb_restore(struct drm_fb_helper *fb_helper)
> intel_fbdev_invalidate(ifbdev);
> }
>
> +static int intelfb_hotplug(struct drm_fb_helper *fb_helper)
> +{
> + struct drm_device *dev = fb_helper->client.dev;
> + struct drm_i915_private *dev_priv = to_i915(dev);
> + struct intel_fbdev *ifbdev = dev_priv->display.fbdev.fbdev;
> + bool send_hpd;
> +
> + if (!ifbdev)
> + return -EINVAL;
> +
> + mutex_lock(&ifbdev->hpd_lock);
> + send_hpd = !ifbdev->hpd_suspended;
> + ifbdev->hpd_waiting = true;
> + mutex_unlock(&ifbdev->hpd_lock);
> +
> + if (!send_hpd || !(ifbdev->vma || dev->fb_helper->deferred_setup))
> + return -EAGAIN;
> +
> + return 0;
> +}
> +
> static const struct drm_fb_helper_funcs intel_fb_helper_funcs = {
> .fb_probe = intelfb_create,
> .fb_dirty = intelfb_dirty,
> .fb_restore = intelfb_restore,
> + .fb_hotplug = intelfb_hotplug,
> };
>
> /*
> @@ -557,25 +579,6 @@ void intel_fbdev_set_suspend(struct drm_device *dev, int state, bool synchronous
> intel_fbdev_hpd_set_suspend(dev_priv, state);
> }
>
> -static int intel_fbdev_output_poll_changed(struct drm_device *dev)
> -{
> - struct intel_fbdev *ifbdev = to_i915(dev)->display.fbdev.fbdev;
> - bool send_hpd;
> -
> - if (!ifbdev)
> - return -EINVAL;
> -
> - mutex_lock(&ifbdev->hpd_lock);
> - send_hpd = !ifbdev->hpd_suspended;
> - ifbdev->hpd_waiting = true;
> - mutex_unlock(&ifbdev->hpd_lock);
> -
> - if (send_hpd && (ifbdev->vma || dev->fb_helper->deferred_setup))
> - drm_fb_helper_hotplug_event(dev->fb_helper);
> -
> - return 0;
> -}
> -
> static int intel_fbdev_restore_mode(struct drm_i915_private *dev_priv)
> {
> struct intel_fbdev *ifbdev = dev_priv->display.fbdev.fbdev;
> @@ -637,7 +640,7 @@ static int intel_fbdev_client_hotplug(struct drm_client_dev *client)
> int ret;
>
> if (dev->fb_helper)
> - return intel_fbdev_output_poll_changed(dev);
> + return drm_fb_helper_hotplug_event(fb_helper);
>
> ret = drm_fb_helper_init(dev, fb_helper);
> if (ret)
> diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
> index 34eb77c18a13..3dcb9a60e408 100644
> --- a/include/drm/drm_fb_helper.h
> +++ b/include/drm/drm_fb_helper.h
> @@ -112,6 +112,19 @@ struct drm_fb_helper_funcs {
> * TODO: Fix i915 to not require this callback.
> */
> void (*fb_restore)(struct drm_fb_helper *helper);
> +
> + /**
> + * @fb_hotplug:
> + *
> + * Driver callback to prepare hotplug event. If set, fbdev
> + * emulation will invoke this callback before sending a hotplug
> + * event.
> + *
> + * Only for i915. Do not use in new code.
> + *
> + * TODO: Fix i915 to not require this callback.
> + */
> + int (*fb_hotplug)(struct drm_fb_helper *helper);
> };
>
> /**
--
Best regards,
Sui
next prev parent reply other threads:[~2024-08-19 13:29 UTC|newest]
Thread overview: 134+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-16 12:22 [PATCH 00/86] drm: Provide client setup helper and convert drivers Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 01/86] drm/fbdev-helper: Move color-mode lookup into 4CC format helper Thomas Zimmermann
2024-08-18 19:22 ` Laurent Pinchart
2024-08-16 12:22 ` [PATCH 02/86] drm/fbdev-helper: Set and clear VGA switcheroo client from fb_info Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 03/86] drm/fbdev: Add memory-agnostic fbdev client Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 04/86] drm: Add client-agnostic setup helper Thomas Zimmermann
2024-08-18 20:07 ` Laurent Pinchart
2024-08-20 7:22 ` Thomas Zimmermann
2024-08-20 7:40 ` Laurent Pinchart
2024-08-20 7:53 ` Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 05/86] drm/fbdev-dma: Support struct drm_driver.fbdev_probe Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 06/86] drm/arcgpu: Run DRM default client setup Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 07/86] drm/arm/komeda: " Thomas Zimmermann
2024-08-16 14:15 ` Liviu Dudau
2024-08-16 12:22 ` [PATCH 08/86] drm/arm/hdlcd: " Thomas Zimmermann
2024-08-16 14:15 ` Liviu Dudau
2024-08-16 12:22 ` [PATCH 09/86] drm/arm/malidp: " Thomas Zimmermann
2024-08-16 14:16 ` Liviu Dudau
2024-08-16 12:22 ` [PATCH 10/86] drm/aspeed: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 11/86] drm/atmel-hdlcd: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 12/86] drm/fsl-dcu: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 13/86] drm/hisilicon/kirin: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 14/86] drm/hx8357d: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 15/86] drm/ili9163: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 16/86] drm/ili9225: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 17/86] drm/ili9341: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 18/86] drm/ili9486: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 19/86] drm/imx/dcss: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 20/86] drm/imx/ipuv3: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 21/86] drm/imx/lcdc: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 22/86] drm/ingenic: " Thomas Zimmermann
2024-08-17 20:54 ` Paul Cercueil
2024-08-16 12:22 ` [PATCH 23/86] drm/kmb: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 24/86] drm/logicvc: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 25/86] drm/mcde: " Thomas Zimmermann
2024-08-18 8:51 ` Linus Walleij
2024-08-16 12:22 ` [PATCH 26/86] drm/mediatek: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 27/86] drm/meson: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 28/86] drm/mi0283qt: " Thomas Zimmermann
2024-08-16 16:01 ` Noralf Trønnes
2024-08-20 7:30 ` Thomas Zimmermann
2024-08-20 8:25 ` Noralf Trønnes
2024-08-16 12:22 ` [PATCH 29/86] drm/mxsfb/lcdif: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 30/86] drm/msxfb: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 31/86] drm/panel/ili9341: " Thomas Zimmermann
2024-08-19 15:37 ` Neil Armstrong
2024-08-19 15:39 ` Neil Armstrong
2024-08-20 7:33 ` Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 32/86] drm/panel-mipi-dbi: " Thomas Zimmermann
2024-08-20 8:26 ` Noralf Trønnes
2024-08-16 12:22 ` [PATCH 33/86] drm/pl111: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 34/86] drm/renesas/rcar-du: " Thomas Zimmermann
2024-08-18 20:12 ` Laurent Pinchart
2024-08-16 12:23 ` [PATCH 35/86] drm/renesas/rz-du: " Thomas Zimmermann
2024-08-19 9:50 ` Biju Das
2024-08-16 12:23 ` [PATCH 36/86] drm/renesas/shmobile: " Thomas Zimmermann
2024-08-18 20:17 ` Laurent Pinchart
2024-08-16 12:23 ` [PATCH 37/86] drm/repaper: " Thomas Zimmermann
2024-08-20 8:26 ` Noralf Trønnes
2024-08-16 12:23 ` [PATCH 38/86] drm/rockchip: " Thomas Zimmermann
2024-08-16 13:34 ` Heiko Stübner
2024-08-16 12:23 ` [PATCH 39/86] drm/sti: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 40/86] drm/stm: " Thomas Zimmermann
2024-08-20 11:57 ` Raphael Gallais-Pou
2024-08-16 12:23 ` [PATCH 41/86] drm/sun4i: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 42/86] drm/tidss: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 43/86] drm/tilcdc: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 44/86] drm/st7586: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 45/86] drm/st7735r: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 46/86] drm/tve200: " Thomas Zimmermann
2024-08-18 8:51 ` Linus Walleij
2024-08-16 12:23 ` [PATCH 47/86] drm/vc4: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 48/86] drm/xlnx: " Thomas Zimmermann
2024-08-18 20:19 ` Laurent Pinchart
2024-08-20 7:52 ` Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 49/86] drm/fbdev-dma: Remove obsolete setup function Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 50/86] drm/fbdev-shmem: Support struct drm_driver.fbdev_probe Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 51/86] drm/ast: Run DRM default client setup Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 52/86] drm/cirrus: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 53/86] drm/gm12u320: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 54/86] drm/gud: " Thomas Zimmermann
2024-08-20 8:27 ` Noralf Trønnes
2024-08-16 12:23 ` [PATCH 55/86] drm/hyperv_drm: " Thomas Zimmermann
2024-08-16 15:36 ` Deepak Rawat
2024-08-16 12:23 ` [PATCH 56/86] drm/mgag200: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 57/86] drm/ofdrm: Use " Thomas Zimmermann
2024-08-19 16:40 ` Javier Martinez Canillas
2024-08-16 12:23 ` [PATCH 58/86] drm/simpledrm: Run " Thomas Zimmermann
2024-08-19 16:41 ` Javier Martinez Canillas
2024-08-16 12:23 ` [PATCH 59/86] drm/solomon: " Thomas Zimmermann
2024-08-19 16:42 ` Javier Martinez Canillas
2024-08-16 12:23 ` [PATCH 60/86] drm/udl: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 61/86] drm/virtgpu: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 62/86] drm/vkms: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 63/86] drm/fbdev-shmem: Remove obsolete setup function Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 64/86] drm/fbdev-ttm: Support struct drm_driver.fbdev_probe Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 65/86] drm/amdgpu: Run DRM default client setup Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 66/86] drm/bochs: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 67/86] drm/hisilicon/hibmc: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 68/86] drm/loongson: " Thomas Zimmermann
2024-08-19 9:00 ` [68/86] " Sui Jingfeng
2024-08-16 12:23 ` [PATCH 69/86] drm/nouveau: " Thomas Zimmermann
2024-08-16 13:59 ` Danilo Krummrich
2024-08-16 12:23 ` [PATCH 70/86] drm/qxl: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 71/86] drm/vboxvideo: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 72/86] drm/vmwgfx: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 73/86] drm/fbdev-ttm: Remove obsolete setup function Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 74/86] drm/armada: Run DRM default client setup Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 75/86] drm/exynos-drm: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 76/86] drm/gma500: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 77/86] drm/msm: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 78/86] drm/radeon: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 79/86] drm/tegra: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 80/86] drm/i915: Remove struct drm_fb_helper from struct intel_fbdev Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 81/86] drm/i915: Move custom restore code into separate callback Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 82/86] drm/i915: Move custom hotplug " Thomas Zimmermann
2024-08-19 8:52 ` Sui Jingfeng [this message]
2024-08-20 7:39 ` [82/86] " Thomas Zimmermann
2024-08-20 10:39 ` Sui Jingfeng
2024-08-20 12:42 ` Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 83/86] drm/{i915,xe}: Run DRM default client setup Thomas Zimmermann
2024-08-16 13:18 ` Jani Nikula
2024-08-16 13:34 ` Thomas Zimmermann
2024-08-17 10:14 ` kernel test robot
2024-08-17 12:07 ` kernel test robot
2024-08-16 12:23 ` [PATCH 84/86] drm/omapdrm: Remove struct drm_fb_helper from struct omap_fbdev Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 85/86] drm/omapdrm: Run DRM default client setup Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 86/86] drm/fb-helper: Remove struct drm_fb_helper.fb_probe Thomas Zimmermann
2024-08-16 13:02 ` ✓ CI.Patch_applied: success for drm: Provide client setup helper and convert drivers Patchwork
2024-08-16 13:04 ` ✗ CI.checkpatch: warning " Patchwork
2024-08-16 13:04 ` ✗ CI.KUnit: failure " Patchwork
2024-08-16 14:19 ` ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2024-08-16 14:19 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-08-16 14:35 ` ✗ Fi.CI.BAT: failure " Patchwork
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=86a55d3c-930d-4b30-9f05-82dd2966df85@linux.dev \
--to=sui.jingfeng@linux.dev \
--cc=airlied@gmail.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=javierm@redhat.com \
--cc=jfalempe@redhat.com \
--cc=joonas.lahtinen@linux.intel.com \
--cc=lucas.demarchi@intel.com \
--cc=nouveau@lists.freedesktop.org \
--cc=rodrigo.vivi@intel.com \
--cc=thomas.hellstrom@linux.intel.com \
--cc=tursulin@ursulin.net \
--cc=tzimmermann@suse.de \
/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.