diff mbox series

[09/11] drm/i915: Add i915_save/load_pci_state helpers

Message ID 20220621123516.370479-10-tilak.tangudu@intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915: Add D3Cold-Off support for runtime-pm | expand

Commit Message

Tangudu, Tilak June 21, 2022, 12:35 p.m. UTC
Add i915_save/load_pci_state helpers which saves
pci config state and restores the saved state.

Signed-off-by: Iddamsetty Aravind <Aravind.Iddamsetty@intel.com>
Signed-off-by: Tilak Tangudu <tilak.tangudu@intel.com>
---
 drivers/gpu/drm/i915/i915_driver.c | 34 ++++++++++++++++++++++++++++++
 drivers/gpu/drm/i915/i915_drv.h    |  1 +
 2 files changed, 35 insertions(+)

Comments

kernel test robot June 21, 2022, 4:30 p.m. UTC | #1
Hi Tilak,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm-tip/drm-tip]

url:    https://github.com/intel-lab-lkp/linux/commits/Tilak-Tangudu/drm-i915-Add-D3Cold-Off-support-for-runtime-pm/20220621-202453
base:   git://anongit.freedesktop.org/drm/drm-tip drm-tip
config: i386-debian-10.3-kselftests (https://download.01.org/0day-ci/archive/20220622/202206220018.NY2T7g0S-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
reproduce (this is a W=1 build):
        # https://github.com/intel-lab-lkp/linux/commit/ad0aa2eb6293edc066466ecf3b82ce2e4e0a9636
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Tilak-Tangudu/drm-i915-Add-D3Cold-Off-support-for-runtime-pm/20220621-202453
        git checkout ad0aa2eb6293edc066466ecf3b82ce2e4e0a9636
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/gpu/drm/i915/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/gpu/drm/i915/i915_driver.c:108:6: warning: no previous prototype for 'i915_save_pci_state' [-Wmissing-prototypes]
     108 | bool i915_save_pci_state(struct pci_dev *pdev)
         |      ^~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/i915/i915_driver.c:127:6: warning: no previous prototype for 'i915_load_pci_state' [-Wmissing-prototypes]
     127 | void i915_load_pci_state(struct pci_dev *pdev)
         |      ^~~~~~~~~~~~~~~~~~~


vim +/i915_save_pci_state +108 drivers/gpu/drm/i915/i915_driver.c

   107	
 > 108	bool i915_save_pci_state(struct pci_dev *pdev)
   109	{
   110		struct drm_i915_private *i915 = pci_get_drvdata(pdev);
   111	
   112		if (pci_save_state(pdev))
   113			return false;
   114	
   115		kfree(i915->pci_state);
   116	
   117		i915->pci_state = pci_store_saved_state(pdev);
   118	
   119		if (!i915->pci_state) {
   120			drm_err(&i915->drm, "Failed to store PCI saved state\n");
   121			return false;
   122		}
   123	
   124		return true;
   125	}
   126	
 > 127	void i915_load_pci_state(struct pci_dev *pdev)
   128	{
   129		struct drm_i915_private *i915 = pci_get_drvdata(pdev);
   130		int ret;
   131	
   132		if (!i915->pci_state)
   133			return;
   134	
   135		ret = pci_load_saved_state(pdev, i915->pci_state);
   136		if (!ret) {
   137			pci_restore_state(pdev);
   138		} else {
   139			drm_warn(&i915->drm, "Failed to load PCI state, err:%d\n", ret);
   140		}
   141	}
   142	static int i915_get_bridge_dev(struct drm_i915_private *dev_priv)
   143	{
   144		int domain = pci_domain_nr(to_pci_dev(dev_priv->drm.dev)->bus);
   145	
   146		dev_priv->bridge_dev =
   147			pci_get_domain_bus_and_slot(domain, 0, PCI_DEVFN(0, 0));
   148		if (!dev_priv->bridge_dev) {
   149			drm_err(&dev_priv->drm, "bridge device not found\n");
   150			return -EIO;
   151		}
   152		return 0;
   153	}
   154
kernel test robot June 21, 2022, 7:44 p.m. UTC | #2
Hi Tilak,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm-tip/drm-tip]

url:    https://github.com/intel-lab-lkp/linux/commits/Tilak-Tangudu/drm-i915-Add-D3Cold-Off-support-for-runtime-pm/20220621-202453
base:   git://anongit.freedesktop.org/drm/drm-tip drm-tip
config: i386-randconfig-a004 (https://download.01.org/0day-ci/archive/20220622/202206220303.UvbFJUZD-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project af6d2a0b6825e71965f3e2701a63c239fa0ad70f)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/ad0aa2eb6293edc066466ecf3b82ce2e4e0a9636
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Tilak-Tangudu/drm-i915-Add-D3Cold-Off-support-for-runtime-pm/20220621-202453
        git checkout ad0aa2eb6293edc066466ecf3b82ce2e4e0a9636
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/gpu/drm/i915/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/gpu/drm/i915/i915_driver.c:108:6: warning: no previous prototype for function 'i915_save_pci_state' [-Wmissing-prototypes]
   bool i915_save_pci_state(struct pci_dev *pdev)
        ^
   drivers/gpu/drm/i915/i915_driver.c:108:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   bool i915_save_pci_state(struct pci_dev *pdev)
   ^
   static 
>> drivers/gpu/drm/i915/i915_driver.c:127:6: warning: no previous prototype for function 'i915_load_pci_state' [-Wmissing-prototypes]
   void i915_load_pci_state(struct pci_dev *pdev)
        ^
   drivers/gpu/drm/i915/i915_driver.c:127:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   void i915_load_pci_state(struct pci_dev *pdev)
   ^
   static 
   2 warnings generated.


vim +/i915_save_pci_state +108 drivers/gpu/drm/i915/i915_driver.c

   107	
 > 108	bool i915_save_pci_state(struct pci_dev *pdev)
   109	{
   110		struct drm_i915_private *i915 = pci_get_drvdata(pdev);
   111	
   112		if (pci_save_state(pdev))
   113			return false;
   114	
   115		kfree(i915->pci_state);
   116	
   117		i915->pci_state = pci_store_saved_state(pdev);
   118	
   119		if (!i915->pci_state) {
   120			drm_err(&i915->drm, "Failed to store PCI saved state\n");
   121			return false;
   122		}
   123	
   124		return true;
   125	}
   126	
 > 127	void i915_load_pci_state(struct pci_dev *pdev)
   128	{
   129		struct drm_i915_private *i915 = pci_get_drvdata(pdev);
   130		int ret;
   131	
   132		if (!i915->pci_state)
   133			return;
   134	
   135		ret = pci_load_saved_state(pdev, i915->pci_state);
   136		if (!ret) {
   137			pci_restore_state(pdev);
   138		} else {
   139			drm_warn(&i915->drm, "Failed to load PCI state, err:%d\n", ret);
   140		}
   141	}
   142	static int i915_get_bridge_dev(struct drm_i915_private *dev_priv)
   143	{
   144		int domain = pci_domain_nr(to_pci_dev(dev_priv->drm.dev)->bus);
   145	
   146		dev_priv->bridge_dev =
   147			pci_get_domain_bus_and_slot(domain, 0, PCI_DEVFN(0, 0));
   148		if (!dev_priv->bridge_dev) {
   149			drm_err(&dev_priv->drm, "bridge device not found\n");
   150			return -EIO;
   151		}
   152		return 0;
   153	}
   154
kernel test robot June 21, 2022, 10:57 p.m. UTC | #3
Hi Tilak,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm-tip/drm-tip]

url:    https://github.com/intel-lab-lkp/linux/commits/Tilak-Tangudu/drm-i915-Add-D3Cold-Off-support-for-runtime-pm/20220621-202453
base:   git://anongit.freedesktop.org/drm/drm-tip drm-tip
config: x86_64-rhel-8.3-syz (https://download.01.org/0day-ci/archive/20220622/202206220601.aElPXis6-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
reproduce (this is a W=1 build):
        # https://github.com/intel-lab-lkp/linux/commit/ad0aa2eb6293edc066466ecf3b82ce2e4e0a9636
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Tilak-Tangudu/drm-i915-Add-D3Cold-Off-support-for-runtime-pm/20220621-202453
        git checkout ad0aa2eb6293edc066466ecf3b82ce2e4e0a9636
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/gpu/drm/i915/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/gpu/drm/i915/i915_driver.c:108:6: error: no previous prototype for 'i915_save_pci_state' [-Werror=missing-prototypes]
     108 | bool i915_save_pci_state(struct pci_dev *pdev)
         |      ^~~~~~~~~~~~~~~~~~~
>> drivers/gpu/drm/i915/i915_driver.c:127:6: error: no previous prototype for 'i915_load_pci_state' [-Werror=missing-prototypes]
     127 | void i915_load_pci_state(struct pci_dev *pdev)
         |      ^~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors


vim +/i915_save_pci_state +108 drivers/gpu/drm/i915/i915_driver.c

   107	
 > 108	bool i915_save_pci_state(struct pci_dev *pdev)
   109	{
   110		struct drm_i915_private *i915 = pci_get_drvdata(pdev);
   111	
   112		if (pci_save_state(pdev))
   113			return false;
   114	
   115		kfree(i915->pci_state);
   116	
   117		i915->pci_state = pci_store_saved_state(pdev);
   118	
   119		if (!i915->pci_state) {
   120			drm_err(&i915->drm, "Failed to store PCI saved state\n");
   121			return false;
   122		}
   123	
   124		return true;
   125	}
   126	
 > 127	void i915_load_pci_state(struct pci_dev *pdev)
   128	{
   129		struct drm_i915_private *i915 = pci_get_drvdata(pdev);
   130		int ret;
   131	
   132		if (!i915->pci_state)
   133			return;
   134	
   135		ret = pci_load_saved_state(pdev, i915->pci_state);
   136		if (!ret) {
   137			pci_restore_state(pdev);
   138		} else {
   139			drm_warn(&i915->drm, "Failed to load PCI state, err:%d\n", ret);
   140		}
   141	}
   142	static int i915_get_bridge_dev(struct drm_i915_private *dev_priv)
   143	{
   144		int domain = pci_domain_nr(to_pci_dev(dev_priv->drm.dev)->bus);
   145	
   146		dev_priv->bridge_dev =
   147			pci_get_domain_bus_and_slot(domain, 0, PCI_DEVFN(0, 0));
   148		if (!dev_priv->bridge_dev) {
   149			drm_err(&dev_priv->drm, "bridge device not found\n");
   150			return -EIO;
   151		}
   152		return 0;
   153	}
   154
kernel test robot June 22, 2022, 8:35 a.m. UTC | #4
Hi Tilak,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm-tip/drm-tip]

url:    https://github.com/intel-lab-lkp/linux/commits/Tilak-Tangudu/drm-i915-Add-D3Cold-Off-support-for-runtime-pm/20220621-202453
base:   git://anongit.freedesktop.org/drm/drm-tip drm-tip
config: x86_64-rhel-8.3-kselftests (https://download.01.org/0day-ci/archive/20220622/202206221620.m7i1Q9uZ-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.4-31-g4880bd19-dirty
        # https://github.com/intel-lab-lkp/linux/commit/ad0aa2eb6293edc066466ecf3b82ce2e4e0a9636
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Tilak-Tangudu/drm-i915-Add-D3Cold-Off-support-for-runtime-pm/20220621-202453
        git checkout ad0aa2eb6293edc066466ecf3b82ce2e4e0a9636
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)
>> drivers/gpu/drm/i915/i915_driver.c:108:6: sparse: sparse: symbol 'i915_save_pci_state' was not declared. Should it be static?
>> drivers/gpu/drm/i915/i915_driver.c:127:6: sparse: sparse: symbol 'i915_load_pci_state' was not declared. Should it be static?
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 60f6fcc6b71d..669365c2958c 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -102,6 +102,40 @@ 
 
 static const struct drm_driver i915_drm_driver;
 
+bool i915_save_pci_state(struct pci_dev *pdev)
+{
+	struct drm_i915_private *i915 = pci_get_drvdata(pdev);
+
+	if (pci_save_state(pdev))
+		return false;
+
+	kfree(i915->pci_state);
+
+	i915->pci_state = pci_store_saved_state(pdev);
+
+	if (!i915->pci_state) {
+		drm_err(&i915->drm, "Failed to store PCI saved state\n");
+		return false;
+	}
+
+	return true;
+}
+
+void i915_load_pci_state(struct pci_dev *pdev)
+{
+	struct drm_i915_private *i915 = pci_get_drvdata(pdev);
+	int ret;
+
+	if (!i915->pci_state)
+		return;
+
+	ret = pci_load_saved_state(pdev, i915->pci_state);
+	if (!ret) {
+		pci_restore_state(pdev);
+	} else {
+		drm_warn(&i915->drm, "Failed to load PCI state, err:%d\n", ret);
+	}
+}
 static int i915_get_bridge_dev(struct drm_i915_private *dev_priv)
 {
 	int domain = pci_domain_nr(to_pci_dev(dev_priv->drm.dev)->bus);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index c22f29c3faa0..ec8c7a2af673 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -777,6 +777,7 @@  struct drm_i915_private {
 	 * NOTE: This is the dri1/ums dungeon, don't add stuff here. Your patch
 	 * will be rejected. Instead look for a better place.
 	 */
+	struct pci_saved_state *pci_state;
 };
 
 static inline struct drm_i915_private *to_i915(const struct drm_device *dev)