All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Jani Nikula <jani.nikula@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 2/4] drm/i915: split out i915_switcheroo.[ch] from i915_drv.c
Date: Wed, 2 Oct 2019 18:04:17 +0300	[thread overview]
Message-ID: <20191002150417.GY1208@intel.com> (raw)
In-Reply-To: <20191002131800.21054-2-jani.nikula@intel.com>

On Wed, Oct 02, 2019 at 04:17:58PM +0300, Jani Nikula wrote:
> Split out code related to vga switcheroo register/unregister and state
> handling from i915_drv.c into new i915_switcheroo.[ch] files.
> 
> It's a bit difficult to draw the line how much to move to the new file
> from i915_drv.c, but it seemed to me keeping i915_suspend_switcheroo()
> and i915_resume_switcheroo() in place was the cleanest.
> 
> No functional changes.
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/i915/Makefile          |  1 +
>  drivers/gpu/drm/i915/i915_drv.c        | 63 +++---------------------
>  drivers/gpu/drm/i915/i915_drv.h        |  3 ++
>  drivers/gpu/drm/i915/i915_switcheroo.c | 67 ++++++++++++++++++++++++++
>  drivers/gpu/drm/i915/i915_switcheroo.h | 14 ++++++
>  5 files changed, 92 insertions(+), 56 deletions(-)
>  create mode 100644 drivers/gpu/drm/i915/i915_switcheroo.c
>  create mode 100644 drivers/gpu/drm/i915/i915_switcheroo.h
> 
> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> index d2b53b5add81..136a1a51b6e2 100644
> --- a/drivers/gpu/drm/i915/Makefile
> +++ b/drivers/gpu/drm/i915/Makefile
> @@ -46,6 +46,7 @@ i915-y += i915_drv.o \
>  	  i915_pci.o \
>  	  i915_scatterlist.o \
>  	  i915_suspend.o \
> +	  i915_switcheroo.o \
>  	  i915_sysfs.o \
>  	  i915_utils.o \
>  	  intel_csr.o \
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index 3306c6bb515a..7349fd8c9796 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -72,6 +72,7 @@
>  #include "i915_perf.h"
>  #include "i915_query.h"
>  #include "i915_suspend.h"
> +#include "i915_switcheroo.h"
>  #include "i915_sysfs.h"
>  #include "i915_trace.h"
>  #include "i915_vgpu.h"
> @@ -269,56 +270,8 @@ intel_teardown_mchbar(struct drm_i915_private *dev_priv)
>  		release_resource(&dev_priv->mch_res);
>  }
>  
> -static int i915_resume_switcheroo(struct drm_i915_private *i915);
> -static int i915_suspend_switcheroo(struct drm_i915_private *i915,
> -				   pm_message_t state);
> -
> -static void i915_switcheroo_set_state(struct pci_dev *pdev, enum vga_switcheroo_state state)
> -{
> -	struct drm_i915_private *i915 = pdev_to_i915(pdev);
> -	pm_message_t pmm = { .event = PM_EVENT_SUSPEND };
> -
> -	if (!i915) {
> -		dev_err(&pdev->dev, "DRM not initialized, aborting switch.\n");
> -		return;
> -	}
> -
> -	if (state == VGA_SWITCHEROO_ON) {
> -		pr_info("switched on\n");
> -		i915->drm.switch_power_state = DRM_SWITCH_POWER_CHANGING;
> -		/* i915 resume handler doesn't set to D0 */
> -		pci_set_power_state(pdev, PCI_D0);
> -		i915_resume_switcheroo(i915);
> -		i915->drm.switch_power_state = DRM_SWITCH_POWER_ON;
> -	} else {
> -		pr_info("switched off\n");
> -		i915->drm.switch_power_state = DRM_SWITCH_POWER_CHANGING;
> -		i915_suspend_switcheroo(i915, pmm);
> -		i915->drm.switch_power_state = DRM_SWITCH_POWER_OFF;
> -	}
> -}
> -
> -static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
> -{
> -	struct drm_i915_private *i915 = pdev_to_i915(pdev);
> -
> -	/*
> -	 * FIXME: open_count is protected by drm_global_mutex but that would lead to
> -	 * locking inversion with the driver load path. And the access here is
> -	 * completely racy anyway. So don't bother with locking for now.
> -	 */
> -	return i915 && i915->drm.open_count == 0;
> -}
> -
> -static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
> -	.set_gpu_state = i915_switcheroo_set_state,
> -	.reprobe = NULL,
> -	.can_switch = i915_switcheroo_can_switch,
> -};
> -
>  static int i915_driver_modeset_probe(struct drm_i915_private *i915)
>  {
> -	struct pci_dev *pdev = i915->drm.pdev;
>  	int ret;
>  
>  	if (i915_inject_probe_failure(i915))
> @@ -339,7 +292,7 @@ static int i915_driver_modeset_probe(struct drm_i915_private *i915)
>  
>  	intel_register_dsm_handler();
>  
> -	ret = vga_switcheroo_register_client(pdev, &i915_switcheroo_ops, false);
> +	ret = i915_switcheroo_register(i915);
>  	if (ret)
>  		goto cleanup_vga_client;
>  
> @@ -394,7 +347,7 @@ static int i915_driver_modeset_probe(struct drm_i915_private *i915)
>  cleanup_csr:
>  	intel_csr_ucode_fini(i915);
>  	intel_power_domains_driver_remove(i915);
> -	vga_switcheroo_unregister_client(pdev);
> +	i915_switcheroo_unregister(i915);
>  cleanup_vga_client:
>  	intel_vga_unregister(i915);
>  out:
> @@ -403,13 +356,12 @@ static int i915_driver_modeset_probe(struct drm_i915_private *i915)
>  
>  static void i915_driver_modeset_remove(struct drm_i915_private *i915)
>  {
> -	struct pci_dev *pdev = i915->drm.pdev;
> -
>  	intel_modeset_driver_remove(i915);
>  
>  	intel_bios_driver_remove(i915);
>  
> -	vga_switcheroo_unregister_client(pdev);
> +	i915_switcheroo_unregister(i915);
> +
>  	intel_vga_unregister(i915);
>  
>  	intel_csr_ucode_fini(i915);
> @@ -1825,8 +1777,7 @@ static int i915_drm_suspend_late(struct drm_device *dev, bool hibernation)
>  	return ret;
>  }
>  
> -static int
> -i915_suspend_switcheroo(struct drm_i915_private *i915, pm_message_t state)
> +int i915_suspend_switcheroo(struct drm_i915_private *i915, pm_message_t state)
>  {
>  	int error;
>  
> @@ -1994,7 +1945,7 @@ static int i915_drm_resume_early(struct drm_device *dev)
>  	return ret;
>  }
>  
> -static int i915_resume_switcheroo(struct drm_i915_private *i915)
> +int i915_resume_switcheroo(struct drm_i915_private *i915)
>  {
>  	int ret;
>  
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 337d8306416a..0ca4d90dfa46 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2223,6 +2223,9 @@ extern const struct dev_pm_ops i915_pm_ops;
>  int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
>  void i915_driver_remove(struct drm_i915_private *i915);
>  
> +int i915_resume_switcheroo(struct drm_i915_private *i915);
> +int i915_suspend_switcheroo(struct drm_i915_private *i915, pm_message_t state);
> +
>  void intel_engine_init_hangcheck(struct intel_engine_cs *engine);
>  int vlv_force_gfx_clock(struct drm_i915_private *dev_priv, bool on);
>  
> diff --git a/drivers/gpu/drm/i915/i915_switcheroo.c b/drivers/gpu/drm/i915/i915_switcheroo.c
> new file mode 100644
> index 000000000000..39c79e1c5b52
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/i915_switcheroo.c
> @@ -0,0 +1,67 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2019 Intel Corporation
> + */
> +
> +#include <linux/vga_switcheroo.h>
> +
> +#include "i915_drv.h"
> +#include "i915_switcheroo.h"
> +
> +static void i915_switcheroo_set_state(struct pci_dev *pdev,
> +				      enum vga_switcheroo_state state)
> +{
> +	struct drm_i915_private *i915 = pdev_to_i915(pdev);
> +	pm_message_t pmm = { .event = PM_EVENT_SUSPEND };
> +
> +	if (!i915) {
> +		dev_err(&pdev->dev, "DRM not initialized, aborting switch.\n");
> +		return;
> +	}

Is that dead code?

Patch is
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> +
> +	if (state == VGA_SWITCHEROO_ON) {
> +		pr_info("switched on\n");
> +		i915->drm.switch_power_state = DRM_SWITCH_POWER_CHANGING;
> +		/* i915 resume handler doesn't set to D0 */
> +		pci_set_power_state(pdev, PCI_D0);
> +		i915_resume_switcheroo(i915);
> +		i915->drm.switch_power_state = DRM_SWITCH_POWER_ON;
> +	} else {
> +		pr_info("switched off\n");
> +		i915->drm.switch_power_state = DRM_SWITCH_POWER_CHANGING;
> +		i915_suspend_switcheroo(i915, pmm);
> +		i915->drm.switch_power_state = DRM_SWITCH_POWER_OFF;
> +	}
> +}
> +
> +static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
> +{
> +	struct drm_i915_private *i915 = pdev_to_i915(pdev);
> +
> +	/*
> +	 * FIXME: open_count is protected by drm_global_mutex but that would lead to
> +	 * locking inversion with the driver load path. And the access here is
> +	 * completely racy anyway. So don't bother with locking for now.
> +	 */
> +	return i915 && i915->drm.open_count == 0;
> +}
> +
> +static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
> +	.set_gpu_state = i915_switcheroo_set_state,
> +	.reprobe = NULL,
> +	.can_switch = i915_switcheroo_can_switch,
> +};
> +
> +int i915_switcheroo_register(struct drm_i915_private *i915)
> +{
> +	struct pci_dev *pdev = i915->drm.pdev;
> +
> +	return vga_switcheroo_register_client(pdev, &i915_switcheroo_ops, false);
> +}
> +
> +void i915_switcheroo_unregister(struct drm_i915_private *i915)
> +{
> +	struct pci_dev *pdev = i915->drm.pdev;
> +
> +	vga_switcheroo_unregister_client(pdev);
> +}
> diff --git a/drivers/gpu/drm/i915/i915_switcheroo.h b/drivers/gpu/drm/i915/i915_switcheroo.h
> new file mode 100644
> index 000000000000..59b6c1e07d75
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/i915_switcheroo.h
> @@ -0,0 +1,14 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2019 Intel Corporation
> + */
> +
> +#ifndef __I915_SWITCHEROO__
> +#define __I915_SWITCHEROO__
> +
> +struct drm_i915_private;
> +
> +int i915_switcheroo_register(struct drm_i915_private *i915);
> +void i915_switcheroo_unregister(struct drm_i915_private *i915);
> +
> +#endif /* __I915_SWITCHEROO__ */
> -- 
> 2.20.1

-- 
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2019-10-02 15:04 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-02 13:17 [PATCH 1/4] drm/i915/vga: rename intel_vga_msr_write() to intel_vga_reset_io_mem() Jani Nikula
2019-10-02 13:17 ` [PATCH 2/4] drm/i915: split out i915_switcheroo.[ch] from i915_drv.c Jani Nikula
2019-10-02 15:04   ` Ville Syrjälä [this message]
2019-10-02 13:17 ` [PATCH 3/4] drm/i915: register vga switcheroo later, unregister earlier Jani Nikula
2019-10-02 13:18 ` [PATCH 4/4] drm/i915: move gmbus setup down to intel_modeset_init() Jani Nikula
2019-10-02 15:07   ` Ville Syrjälä
2019-10-02 15:03 ` [PATCH 1/4] drm/i915/vga: rename intel_vga_msr_write() to intel_vga_reset_io_mem() Ville Syrjälä
2019-10-02 17:28 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/4] " Patchwork
2019-10-02 17:54 ` ✗ Fi.CI.BAT: failure " Patchwork
2019-10-03 10:23 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/4] drm/i915/vga: rename intel_vga_msr_write() to intel_vga_reset_io_mem() (rev2) Patchwork
2019-10-03 10:48 ` ✓ Fi.CI.BAT: success " Patchwork
2019-10-03 17:34 ` ✗ Fi.CI.IGT: 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=20191002150417.GY1208@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@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.