All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Maarten Lankhorst <dev@lankhorst.se>, intel-xe@lists.freedesktop.org
Cc: intel-gfx@lists.freedesktop.org,
	Maarten Lankhorst <dev@lankhorst.se>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>
Subject: Re: [PATCH] drm/xe/display: Use a single early init call for display
Date: Tue, 10 Dec 2024 11:35:56 +0200	[thread overview]
Message-ID: <87h67bzxqb.fsf@intel.com> (raw)
In-Reply-To: <20241209155142.209657-1-dev@lankhorst.se>

On Mon, 09 Dec 2024, Maarten Lankhorst <dev@lankhorst.se> wrote:
> Instead of 3 different calls, it should be safe to unify to a single
> call now. This makes the init sequence cleaner, and display less
> tangled.

Needs more explanation.

I thought the goal was to *unify* i915 and xe display init/cleanup. This
diverges them more, with actually functionally different things rather
than just slightly different ordering.

BR,
Jani.


>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
> ---
> Rebase
>
>  drivers/gpu/drm/xe/display/xe_display.c | 73 +++++++------------------
>  drivers/gpu/drm/xe/display/xe_display.h |  8 +--
>  drivers/gpu/drm/xe/xe_device.c          | 10 +---
>  3 files changed, 22 insertions(+), 69 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
> index 317fa66adf189..b013a4db11183 100644
> --- a/drivers/gpu/drm/xe/display/xe_display.c
> +++ b/drivers/gpu/drm/xe/display/xe_display.c
> @@ -101,19 +101,25 @@ int xe_display_create(struct xe_device *xe)
>  	return drmm_add_action_or_reset(&xe->drm, display_destroy, NULL);
>  }
>  
> -static void xe_display_fini_nommio(struct drm_device *dev, void *dummy)
> +static void xe_display_fini_early(void *arg)
>  {
> -	struct xe_device *xe = to_xe_device(dev);
> +	struct xe_device *xe = arg;
>  	struct intel_display *display = &xe->display;
>  
>  	if (!xe->info.probe_display)
>  		return;
>  
> +	intel_display_driver_remove_nogem(display);
> +	intel_display_driver_remove_noirq(display);
> +	intel_opregion_cleanup(display);
>  	intel_power_domains_cleanup(display);
>  }
>  
> -int xe_display_init_nommio(struct xe_device *xe)
> +int xe_display_init_early(struct xe_device *xe)
>  {
> +	struct intel_display *display = &xe->display;
> +	int err;
> +
>  	if (!xe->info.probe_display)
>  		return 0;
>  
> @@ -123,29 +129,6 @@ int xe_display_init_nommio(struct xe_device *xe)
>  	/* This must be called before any calls to HAS_PCH_* */
>  	intel_detect_pch(xe);
>  
> -	return drmm_add_action_or_reset(&xe->drm, xe_display_fini_nommio, xe);
> -}
> -
> -static void xe_display_fini_noirq(void *arg)
> -{
> -	struct xe_device *xe = arg;
> -	struct intel_display *display = &xe->display;
> -
> -	if (!xe->info.probe_display)
> -		return;
> -
> -	intel_display_driver_remove_noirq(display);
> -	intel_opregion_cleanup(display);
> -}
> -
> -int xe_display_init_noirq(struct xe_device *xe)
> -{
> -	struct intel_display *display = &xe->display;
> -	int err;
> -
> -	if (!xe->info.probe_display)
> -		return 0;
> -
>  	intel_display_driver_early_probe(display);
>  
>  	/* Early display init.. */
> @@ -162,38 +145,20 @@ int xe_display_init_noirq(struct xe_device *xe)
>  	intel_display_device_info_runtime_init(display);
>  
>  	err = intel_display_driver_probe_noirq(display);
> -	if (err) {
> -		intel_opregion_cleanup(display);
> -		return err;
> -	}
> -
> -	return devm_add_action_or_reset(xe->drm.dev, xe_display_fini_noirq, xe);
> -}
> -
> -static void xe_display_fini_noaccel(void *arg)
> -{
> -	struct xe_device *xe = arg;
> -	struct intel_display *display = &xe->display;
> -
> -	if (!xe->info.probe_display)
> -		return;
> -
> -	intel_display_driver_remove_nogem(display);
> -}
> -
> -int xe_display_init_noaccel(struct xe_device *xe)
> -{
> -	struct intel_display *display = &xe->display;
> -	int err;
> -
> -	if (!xe->info.probe_display)
> -		return 0;
> +	if (err)
> +		goto err_opregion;
>  
>  	err = intel_display_driver_probe_nogem(display);
>  	if (err)
> -		return err;
> +		goto err_noirq;
>  
> -	return devm_add_action_or_reset(xe->drm.dev, xe_display_fini_noaccel, xe);
> +	return devm_add_action_or_reset(xe->drm.dev, xe_display_fini_early, xe);
> +err_noirq:
> +	intel_display_driver_remove_noirq(display);
> +	intel_power_domains_cleanup(display);
> +err_opregion:
> +	intel_opregion_cleanup(display);
> +	return err;
>  }
>  
>  int xe_display_init(struct xe_device *xe)
> diff --git a/drivers/gpu/drm/xe/display/xe_display.h b/drivers/gpu/drm/xe/display/xe_display.h
> index 233f81a26c255..e2a99624f7064 100644
> --- a/drivers/gpu/drm/xe/display/xe_display.h
> +++ b/drivers/gpu/drm/xe/display/xe_display.h
> @@ -20,9 +20,7 @@ int xe_display_create(struct xe_device *xe);
>  
>  int xe_display_probe(struct xe_device *xe);
>  
> -int xe_display_init_nommio(struct xe_device *xe);
> -int xe_display_init_noirq(struct xe_device *xe);
> -int xe_display_init_noaccel(struct xe_device *xe);
> +int xe_display_init_early(struct xe_device *xe);
>  int xe_display_init(struct xe_device *xe);
>  void xe_display_fini(struct xe_device *xe);
>  
> @@ -54,9 +52,7 @@ static inline int xe_display_create(struct xe_device *xe) { return 0; }
>  
>  static inline int xe_display_probe(struct xe_device *xe) { return 0; }
>  
> -static inline int xe_display_init_nommio(struct xe_device *xe) { return 0; }
> -static inline int xe_display_init_noirq(struct xe_device *xe) { return 0; }
> -static inline int xe_display_init_noaccel(struct xe_device *xe) { return 0; }
> +static inline int xe_display_init_early(struct xe_device *xe) { return 0; }
>  static inline int xe_display_init(struct xe_device *xe) { return 0; }
>  static inline void xe_display_fini(struct xe_device *xe) {}
>  
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index fbec176ee64ad..c9c0b74c74ddb 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -639,10 +639,6 @@ int xe_device_probe(struct xe_device *xe)
>  		return err;
>  
>  	xe->info.mem_region_mask = 1;
> -	err = xe_display_init_nommio(xe);
> -	if (err)
> -		return err;
> -
>  	err = xe_set_dma_info(xe);
>  	if (err)
>  		return err;
> @@ -697,10 +693,6 @@ int xe_device_probe(struct xe_device *xe)
>  	if (err)
>  		return err;
>  
> -	err = xe_display_init_noirq(xe);
> -	if (err)
> -		return err;
> -
>  	err = probe_has_flat_ccs(xe);
>  	if (err)
>  		goto err;
> @@ -724,7 +716,7 @@ int xe_device_probe(struct xe_device *xe)
>  	 * This is the reason the first allocation needs to be done
>  	 * inside display.
>  	 */
> -	err = xe_display_init_noaccel(xe);
> +	err = xe_display_init_early(xe);
>  	if (err)
>  		goto err;

-- 
Jani Nikula, Intel

  reply	other threads:[~2024-12-10  9:36 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-06 18:59 [PATCH 0/5] drm/xe/display: Rework display init for reducing flickering Maarten Lankhorst
2024-12-06 18:59 ` [PATCH 1/5] drm/xe/display: Add intel_plane_initial_vblank_wait Maarten Lankhorst
2024-12-06 18:59 ` [PATCH 2/5] drm/xe: Remove double pageflip Maarten Lankhorst
2024-12-06 18:59 ` [PATCH 3/5] drm/xe: Move suballocator init to after display init Maarten Lankhorst
2024-12-06 18:59 ` [PATCH 4/5] drm/xe: Defer irq init until after xe_display_init_noaccel Maarten Lankhorst
2024-12-09 11:17   ` [PATCH v2] " Maarten Lankhorst
2024-12-06 18:59 ` [PATCH 5/5] drm/xe/display: Use a single early init call for display Maarten Lankhorst
2024-12-09 15:51   ` [PATCH] " Maarten Lankhorst
2024-12-10  9:35     ` Jani Nikula [this message]
2024-12-11 18:32       ` Maarten Lankhorst
2024-12-12 14:27         ` Rodrigo Vivi
2024-12-06 19:44 ` ✗ Fi.CI.CHECKPATCH: warning for drm/xe/display: Rework display init for reducing flickering Patchwork
2024-12-06 19:44 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-12-06 19:58 ` ✗ i915.CI.BAT: failure " Patchwork
2024-12-06 20:37 ` ✓ CI.Patch_applied: success " Patchwork
2024-12-06 20:37 ` ✗ CI.checkpatch: warning " Patchwork
2024-12-06 20:39 ` ✓ CI.KUnit: success " Patchwork
2024-12-06 20:57 ` ✓ CI.Build: " Patchwork
2024-12-06 20:59 ` ✓ CI.Hooks: " Patchwork
2024-12-06 21:00 ` ✓ CI.checksparse: " Patchwork
2024-12-06 21:24 ` ✗ Xe.CI.BAT: failure " Patchwork
2024-12-07  1:36 ` ✗ Xe.CI.Full: " Patchwork
2024-12-09 10:39 ` [PATCH 0/5] " Jani Nikula
2024-12-09 14:33 ` ✗ CI.Patch_applied: failure for drm/xe/display: Rework display init for reducing flickering. (rev2) Patchwork
2024-12-09 15:56 ` ✓ CI.Patch_applied: success for drm/xe/display: Rework display init for reducing flickering. (rev3) Patchwork
2024-12-09 15:56 ` ✗ CI.checkpatch: warning " Patchwork
2024-12-09 15:58 ` ✓ CI.KUnit: success " Patchwork
2024-12-09 16:16 ` ✓ CI.Build: " Patchwork
2024-12-09 16:18 ` ✓ CI.Hooks: " Patchwork
2024-12-09 16:20 ` ✓ CI.checksparse: " Patchwork
2024-12-09 16:37 ` ✓ Xe.CI.BAT: " Patchwork
2024-12-09 17:32 ` ✗ Xe.CI.Full: failure " Patchwork
2024-12-09 18:36 ` ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2024-12-09 18:36 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-12-09 18:51 ` ✓ i915.CI.BAT: success " Patchwork
2024-12-09 21:58 ` ✗ i915.CI.Full: 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=87h67bzxqb.fsf@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=dev@lankhorst.se \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=rodrigo.vivi@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.