[Intel-xe] [PATCH 4/4] drm/xe/display: Use xe_display_driver prefix

Matt Atwood matthew.s.atwood at intel.com
Wed May 10 21:31:17 UTC 2023


On Wed, May 10, 2023 at 12:54:24PM -0700, Lucas De Marchi wrote:
> Use a separate xe_display_driver prefix for functions dealing with the
> DRM driver struct or the early probe. This splits
> xe_display_set_driver_hooks() in 2: one to allow the driver to defer the
> probe if the display needs that and the other to set the additional
> hooks in the driver struct.  Although the hooks are set by every device
> binding to the module, they only depend on the module param
> enable_display, so that is safe.
> 
> Since unset_driver_hooks() is not really tweaking the driver, but rather
> the driver_features saved in the device, rename it to
> unset_display_features() to clarify that.
> 
Reviewed-by: Matt Atwood <matthew.s.atwood at intel.com>
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
> ---
>  drivers/gpu/drm/xe/xe_device.c  |  4 +--
>  drivers/gpu/drm/xe/xe_display.c | 44 ++++++++++++++++++++-------------
>  drivers/gpu/drm/xe/xe_display.h |  8 +++---
>  drivers/gpu/drm/xe/xe_pci.c     |  4 +++
>  4 files changed, 37 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 1daacc533083..cb37e8556b37 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -171,9 +171,7 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
>  	struct xe_device *xe;
>  	int err;
>  
> -	err = xe_display_set_driver_hooks(pdev, &driver);
> -	if (err)
> -		return ERR_PTR(err);
> +	xe_display_driver_set_hooks(&driver);
>  
>  	err = drm_aperture_remove_conflicting_pci_framebuffers(pdev, &driver);
>  	if (err)
> diff --git a/drivers/gpu/drm/xe/xe_display.c b/drivers/gpu/drm/xe/xe_display.c
> index 43c5af1ff80e..d1782e0737ed 100644
> --- a/drivers/gpu/drm/xe/xe_display.c
> +++ b/drivers/gpu/drm/xe/xe_display.c
> @@ -34,37 +34,47 @@
>  
>  /* Xe device functions */
>  
> +/**
> + * xe_display_driver_probe_defer - Detect if we need to wait for other drivers
> + *				   early on
> + * @pdev: PCI device
> + *
> + * Returns: 0 if probe can continue, -EPROBE_DEFER otherwise
> + */
> +int xe_display_driver_probe_defer(struct pci_dev *pdev)
> +{
> +	if (!enable_display)
> +		return 0;
> +
> +	return intel_display_driver_probe_defer(pdev);
> +}
> +
>  static void xe_display_last_close(struct drm_device *dev)
>  {
> -	intel_fbdev_restore_mode(to_xe_device(dev));
> +	struct xe_device *xe = to_xe_device(dev);
> +
> +	if (xe->info.enable_display)
> +		intel_fbdev_restore_mode(to_xe_device(dev));
>  }
>  
>  /**
> - * xe_display_set_driver_hooks - set driver flags and hooks for display
> - * @pdev: PCI device
> + * xe_display_driver_set_hooks - Add driver flags and hooks for display
>   * @driver: DRM device driver
>   *
>   * Set features and function hooks in @driver that are needed for driving the
> - * display IP, when that is enabled.
> - *
> - * Returns: 0 on success
> + * display IP. This sets the driver's capability of driving display, regardless
> + * if the device has it enabled
>   */
> -int xe_display_set_driver_hooks(struct pci_dev *pdev, struct drm_driver *driver)
> +void xe_display_driver_set_hooks(struct drm_driver *driver)
>  {
>  	if (!enable_display)
> -		return 0;
> -
> -	/* Detect if we need to wait for other drivers early on */
> -	if (intel_display_driver_probe_defer(pdev))
> -		return -EPROBE_DEFER;
> +		return;
>  
>  	driver->driver_features |= DRIVER_MODESET | DRIVER_ATOMIC;
>  	driver->lastclose = xe_display_last_close;
> -
> -	return 0;
>  }
>  
> -static void unset_driver_hooks(struct xe_device *xe)
> +static void unset_display_features(struct xe_device *xe)
>  {
>  	xe->drm.driver_features &= ~(DRIVER_MODESET | DRIVER_ATOMIC);
>  }
> @@ -488,7 +498,7 @@ __diag_ignore_all("-Woverride-init", "Allow field overrides in table");
>  void xe_display_info_init(struct xe_device *xe)
>  {
>  	if (!xe->info.enable_display) {
> -		unset_driver_hooks(xe);
> +		unset_display_features(xe);
>  		return;
>  	}
>  
> @@ -539,7 +549,7 @@ void xe_display_info_init(struct xe_device *xe)
>  	default:
>  		drm_warn(&xe->drm, "Unknown display IP\n");
>  		xe->info.enable_display = false;
> -		unset_driver_hooks(xe);
> +		unset_display_features(xe);
>  		return;
>  	}
>  }
> diff --git a/drivers/gpu/drm/xe/xe_display.h b/drivers/gpu/drm/xe/xe_display.h
> index 84c556111c91..9e29de012df7 100644
> --- a/drivers/gpu/drm/xe/xe_display.h
> +++ b/drivers/gpu/drm/xe/xe_display.h
> @@ -12,7 +12,8 @@ struct drm_driver;
>  
>  #if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
>  
> -int xe_display_set_driver_hooks(struct pci_dev *pdev, struct drm_driver *driver);
> +int xe_display_driver_probe_defer(struct pci_dev *pdev);
> +void xe_display_driver_set_hooks(struct drm_driver *driver);
>  
>  int xe_display_create(struct xe_device *xe);
>  
> @@ -47,8 +48,9 @@ void xe_display_pm_resume(struct xe_device *xe);
>  
>  #else
>  
> -static inline int
> -xe_display_set_driver_hooks(struct pci_dev *pdev, struct drm_driver *driver) { return 0; }
> +static inline int xe_display_driver_probe_defer(struct pci_dev *pdev) { return 0; }
> +
> +static inline void xe_display_driver_set_hooks(struct drm_driver *driver) { }
>  
>  static inline int
>  xe_display_create(struct xe_device *xe) { return 0; }
> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> index 3fa3e8706d98..8b3d4d5006e8 100644
> --- a/drivers/gpu/drm/xe/xe_pci.c
> +++ b/drivers/gpu/drm/xe/xe_pci.c
> @@ -618,6 +618,10 @@ static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>  		return -ENODEV;
>  	}
>  
> +	err = xe_display_driver_probe_defer(pdev);
> +	if (err)
> +		return err;
> +
>  	xe = xe_device_create(pdev, ent);
>  	if (IS_ERR(xe))
>  		return PTR_ERR(xe);
> -- 
> 2.40.1
> 


More information about the Intel-xe mailing list