Linux-SPI Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH v3 00/15] Introduce devm_pm_opp_* API
@ 2021-03-14 16:33 Dmitry Osipenko
  2021-03-14 16:33 ` [PATCH v3 01/15] opp: Add devres wrapper for dev_pm_opp_set_clkname Dmitry Osipenko
                   ` (15 more replies)
  0 siblings, 16 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:33 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

This series adds resource-managed OPP API helpers and makes drivers
to use them.

Changelog:

v3: - Dropped dev_pm_opp_register_notifier().

    - Changed return type of the devm helpers from opp_table pointer
      to errno.

    - Corrected drm/msm patch which missed to remove opp_put_supported_hw()
      from a6xx_gpu. Note that the a5xx_gpu driver was missing the
      opp_put_supported_hw() at all.

    - Corrected spelling of the ack from Mark Brown.

v2: - This is a continuation of the work that was started by Yangtao Li.
      Apparently Yangtao doesn't have time to finish it, so I
      (Dmitry Osipenko) picked up the effort since these patches are
      wanted by the NVIDIA Tegra voltage-scaling series that I'm
      working on.

    - Fixed the double put of OPP resources.

    - Dropped all patches that are unrelated to OPP API. I also dropped
      the Tegra memory patch since it doesn't apply now and because I plan
      to switch all Tegra drivers soon to a common tegra-specific OPP helper
      that will use the resource-managed OPP API anyways.

    - Squashed couple patches into a single ones since there was no
      good reason to separate them.

    - Added acks that were given to a couple of v1 patches.

Dmitry Osipenko (2):
  opp: Change return type of devm_pm_opp_register_set_opp_helper()
  opp: Change return type of devm_pm_opp_attach_genpd()

Yangtao Li (13):
  opp: Add devres wrapper for dev_pm_opp_set_clkname
  opp: Add devres wrapper for dev_pm_opp_set_regulators
  opp: Add devres wrapper for dev_pm_opp_set_supported_hw
  opp: Add devres wrapper for dev_pm_opp_of_add_table
  serial: qcom_geni_serial: Convert to use resource-managed OPP API
  spi: spi-geni-qcom: Convert to use resource-managed OPP API
  spi: spi-qcom-qspi: Convert to use resource-managed OPP API
  mmc: sdhci-msm: Convert to use resource-managed OPP API
  drm/msm: Convert to use resource-managed OPP API
  drm/lima: Convert to use resource-managed OPP API
  drm/panfrost: Convert to use resource-managed OPP API
  media: venus: Convert to use resource-managed OPP API
  memory: samsung: exynos5422-dmc: Convert to use resource-managed OPP
    API

 drivers/gpu/drm/lima/lima_devfreq.c           |  47 ++-----
 drivers/gpu/drm/lima/lima_devfreq.h           |   3 -
 drivers/gpu/drm/msm/adreno/a5xx_gpu.c         |   2 +-
 drivers/gpu/drm/msm/adreno/a6xx_gmu.c         |   2 +-
 drivers/gpu/drm/msm/adreno/a6xx_gpu.c         |  11 +-
 drivers/gpu/drm/msm/adreno/a6xx_gpu.h         |   2 -
 drivers/gpu/drm/msm/adreno/adreno_gpu.c       |   2 +-
 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c       |  23 ++--
 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h       |   2 -
 drivers/gpu/drm/msm/dp/dp_ctrl.c              |  30 +----
 drivers/gpu/drm/msm/dp/dp_ctrl.h              |   1 -
 drivers/gpu/drm/msm/dp/dp_display.c           |   5 +-
 drivers/gpu/drm/msm/dsi/dsi_host.c            |  13 +-
 drivers/gpu/drm/panfrost/panfrost_devfreq.c   |  37 ++----
 drivers/gpu/drm/panfrost/panfrost_devfreq.h   |   2 -
 drivers/media/platform/qcom/venus/core.h      |   1 -
 .../media/platform/qcom/venus/pm_helpers.c    |  35 ++---
 drivers/memory/samsung/exynos5422-dmc.c       |  13 +-
 drivers/mmc/host/sdhci-msm.c                  |  19 +--
 drivers/opp/core.c                            | 122 ++++++++++++++----
 drivers/opp/of.c                              |  36 ++++++
 drivers/spi/spi-geni-qcom.c                   |  16 +--
 drivers/spi/spi-qcom-qspi.c                   |  18 +--
 drivers/tty/serial/qcom_geni_serial.c         |  23 ++--
 include/linux/pm_opp.h                        |  43 +++++-
 include/linux/qcom-geni-se.h                  |   2 -
 26 files changed, 250 insertions(+), 260 deletions(-)

-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 01/15] opp: Add devres wrapper for dev_pm_opp_set_clkname
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
@ 2021-03-14 16:33 ` Dmitry Osipenko
  2021-03-14 16:33 ` [PATCH v3 02/15] opp: Add devres wrapper for dev_pm_opp_set_regulators Dmitry Osipenko
                   ` (14 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:33 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Add devres wrapper for dev_pm_opp_set_clkname() to simplify drivers code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/opp/core.c     | 27 +++++++++++++++++++++++++++
 include/linux/pm_opp.h |  6 ++++++
 2 files changed, 33 insertions(+)

diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index 150be4c28c99..02e46508a3a2 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -2119,6 +2119,33 @@ void dev_pm_opp_put_clkname(struct opp_table *opp_table)
 }
 EXPORT_SYMBOL_GPL(dev_pm_opp_put_clkname);
 
+static void devm_pm_opp_clkname_release(void *data)
+{
+	dev_pm_opp_put_clkname(data);
+}
+
+/**
+ * devm_pm_opp_set_clkname() - Set clk name for the device
+ * @dev: Device for which clk name is being set.
+ * @name: Clk name.
+ *
+ * This is a resource-managed variant of dev_pm_opp_set_clkname().
+ *
+ * Return: 0 on success and errorno otherwise.
+ */
+int devm_pm_opp_set_clkname(struct device *dev, const char *name)
+{
+	struct opp_table *opp_table;
+
+	opp_table = dev_pm_opp_set_clkname(dev, name);
+	if (IS_ERR(opp_table))
+		return PTR_ERR(opp_table);
+
+	return devm_add_action_or_reset(dev, devm_pm_opp_clkname_release,
+					opp_table);
+}
+EXPORT_SYMBOL_GPL(devm_pm_opp_set_clkname);
+
 /**
  * dev_pm_opp_register_set_opp_helper() - Register custom set OPP helper
  * @dev: Device for which the helper is getting registered.
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
index c0371efa4a0f..0583d775aa5a 100644
--- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h
@@ -150,6 +150,7 @@ struct opp_table *dev_pm_opp_set_regulators(struct device *dev, const char * con
 void dev_pm_opp_put_regulators(struct opp_table *opp_table);
 struct opp_table *dev_pm_opp_set_clkname(struct device *dev, const char *name);
 void dev_pm_opp_put_clkname(struct opp_table *opp_table);
+int devm_pm_opp_set_clkname(struct device *dev, const char *name);
 struct opp_table *dev_pm_opp_register_set_opp_helper(struct device *dev, int (*set_opp)(struct dev_pm_set_opp_data *data));
 void dev_pm_opp_unregister_set_opp_helper(struct opp_table *opp_table);
 struct opp_table *devm_pm_opp_register_set_opp_helper(struct device *dev, int (*set_opp)(struct dev_pm_set_opp_data *data));
@@ -355,6 +356,11 @@ static inline struct opp_table *dev_pm_opp_set_clkname(struct device *dev, const
 
 static inline void dev_pm_opp_put_clkname(struct opp_table *opp_table) {}
 
+static inline int devm_pm_opp_set_clkname(struct device *dev, const char *name)
+{
+	return -EOPNOTSUPP;
+}
+
 static inline struct opp_table *dev_pm_opp_attach_genpd(struct device *dev, const char **names, struct device ***virt_devs)
 {
 	return ERR_PTR(-EOPNOTSUPP);
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 02/15] opp: Add devres wrapper for dev_pm_opp_set_regulators
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
  2021-03-14 16:33 ` [PATCH v3 01/15] opp: Add devres wrapper for dev_pm_opp_set_clkname Dmitry Osipenko
@ 2021-03-14 16:33 ` Dmitry Osipenko
  2021-03-14 16:33 ` [PATCH v3 03/15] opp: Add devres wrapper for dev_pm_opp_set_supported_hw Dmitry Osipenko
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:33 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Add devres wrapper for dev_pm_opp_set_regulators() to simplify drivers
code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/opp/core.c     | 30 ++++++++++++++++++++++++++++++
 include/linux/pm_opp.h |  8 ++++++++
 2 files changed, 38 insertions(+)

diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index 02e46508a3a2..6217af05141f 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -2047,6 +2047,36 @@ void dev_pm_opp_put_regulators(struct opp_table *opp_table)
 }
 EXPORT_SYMBOL_GPL(dev_pm_opp_put_regulators);
 
+static void devm_pm_opp_regulators_release(void *data)
+{
+	dev_pm_opp_put_regulators(data);
+}
+
+/**
+ * devm_pm_opp_set_regulators() - Set regulator names for the device
+ * @dev: Device for which regulator name is being set.
+ * @names: Array of pointers to the names of the regulator.
+ * @count: Number of regulators.
+ *
+ * This is a resource-managed variant of dev_pm_opp_set_regulators().
+ *
+ * Return: 0 on success and errorno otherwise.
+ */
+int devm_pm_opp_set_regulators(struct device *dev,
+			       const char * const names[],
+			       unsigned int count)
+{
+	struct opp_table *opp_table;
+
+	opp_table = dev_pm_opp_set_regulators(dev, names, count);
+	if (IS_ERR(opp_table))
+		return PTR_ERR(opp_table);
+
+	return devm_add_action_or_reset(dev, devm_pm_opp_regulators_release,
+					opp_table);
+}
+EXPORT_SYMBOL_GPL(devm_pm_opp_set_regulators);
+
 /**
  * dev_pm_opp_set_clkname() - Set clk name for the device
  * @dev: Device for which clk name is being set.
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
index 0583d775aa5a..3e667af57211 100644
--- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h
@@ -148,6 +148,7 @@ struct opp_table *dev_pm_opp_set_prop_name(struct device *dev, const char *name)
 void dev_pm_opp_put_prop_name(struct opp_table *opp_table);
 struct opp_table *dev_pm_opp_set_regulators(struct device *dev, const char * const names[], unsigned int count);
 void dev_pm_opp_put_regulators(struct opp_table *opp_table);
+int devm_pm_opp_set_regulators(struct device *dev, const char * const names[], unsigned int count);
 struct opp_table *dev_pm_opp_set_clkname(struct device *dev, const char *name);
 void dev_pm_opp_put_clkname(struct opp_table *opp_table);
 int devm_pm_opp_set_clkname(struct device *dev, const char *name);
@@ -349,6 +350,13 @@ static inline struct opp_table *dev_pm_opp_set_regulators(struct device *dev, co
 
 static inline void dev_pm_opp_put_regulators(struct opp_table *opp_table) {}
 
+static inline int devm_pm_opp_set_regulators(struct device *dev,
+					     const char * const names[],
+					     unsigned int count)
+{
+	return -EOPNOTSUPP;
+}
+
 static inline struct opp_table *dev_pm_opp_set_clkname(struct device *dev, const char *name)
 {
 	return ERR_PTR(-EOPNOTSUPP);
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 03/15] opp: Add devres wrapper for dev_pm_opp_set_supported_hw
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
  2021-03-14 16:33 ` [PATCH v3 01/15] opp: Add devres wrapper for dev_pm_opp_set_clkname Dmitry Osipenko
  2021-03-14 16:33 ` [PATCH v3 02/15] opp: Add devres wrapper for dev_pm_opp_set_regulators Dmitry Osipenko
@ 2021-03-14 16:33 ` Dmitry Osipenko
  2021-03-14 16:33 ` [PATCH v3 04/15] opp: Add devres wrapper for dev_pm_opp_of_add_table Dmitry Osipenko
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:33 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Add devres wrapper for dev_pm_opp_set_supported_hw() to simplify drivers
code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/opp/core.c     | 29 +++++++++++++++++++++++++++++
 include/linux/pm_opp.h |  8 ++++++++
 2 files changed, 37 insertions(+)

diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index 6217af05141f..34b054bbb28f 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -1857,6 +1857,35 @@ void dev_pm_opp_put_supported_hw(struct opp_table *opp_table)
 }
 EXPORT_SYMBOL_GPL(dev_pm_opp_put_supported_hw);
 
+static void devm_pm_opp_supported_hw_release(void *data)
+{
+	dev_pm_opp_put_supported_hw(data);
+}
+
+/**
+ * devm_pm_opp_set_supported_hw() - Set supported platforms
+ * @dev: Device for which supported-hw has to be set.
+ * @versions: Array of hierarchy of versions to match.
+ * @count: Number of elements in the array.
+ *
+ * This is a resource-managed variant of dev_pm_opp_set_supported_hw().
+ *
+ * Return: 0 on success and errorno otherwise.
+ */
+int devm_pm_opp_set_supported_hw(struct device *dev, const u32 *versions,
+				 unsigned int count)
+{
+	struct opp_table *opp_table;
+
+	opp_table = dev_pm_opp_set_supported_hw(dev, versions, count);
+	if (IS_ERR(opp_table))
+		return PTR_ERR(opp_table);
+
+	return devm_add_action_or_reset(dev, devm_pm_opp_supported_hw_release,
+					opp_table);
+}
+EXPORT_SYMBOL_GPL(devm_pm_opp_set_supported_hw);
+
 /**
  * dev_pm_opp_set_prop_name() - Set prop-extn name
  * @dev: Device for which the prop-name has to be set.
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
index 3e667af57211..e455b187e405 100644
--- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h
@@ -144,6 +144,7 @@ int dev_pm_opp_unregister_notifier(struct device *dev, struct notifier_block *nb
 
 struct opp_table *dev_pm_opp_set_supported_hw(struct device *dev, const u32 *versions, unsigned int count);
 void dev_pm_opp_put_supported_hw(struct opp_table *opp_table);
+int devm_pm_opp_set_supported_hw(struct device *dev, const u32 *versions, unsigned int count);
 struct opp_table *dev_pm_opp_set_prop_name(struct device *dev, const char *name);
 void dev_pm_opp_put_prop_name(struct opp_table *opp_table);
 struct opp_table *dev_pm_opp_set_regulators(struct device *dev, const char * const names[], unsigned int count);
@@ -321,6 +322,13 @@ static inline struct opp_table *dev_pm_opp_set_supported_hw(struct device *dev,
 
 static inline void dev_pm_opp_put_supported_hw(struct opp_table *opp_table) {}
 
+static inline int devm_pm_opp_set_supported_hw(struct device *dev,
+					       const u32 *versions,
+					       unsigned int count)
+{
+	return -EOPNOTSUPP;
+}
+
 static inline struct opp_table *dev_pm_opp_register_set_opp_helper(struct device *dev,
 			int (*set_opp)(struct dev_pm_set_opp_data *data))
 {
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 04/15] opp: Add devres wrapper for dev_pm_opp_of_add_table
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (2 preceding siblings ...)
  2021-03-14 16:33 ` [PATCH v3 03/15] opp: Add devres wrapper for dev_pm_opp_set_supported_hw Dmitry Osipenko
@ 2021-03-14 16:33 ` Dmitry Osipenko
  2021-03-14 16:33 ` [PATCH v3 05/15] opp: Change return type of devm_pm_opp_register_set_opp_helper() Dmitry Osipenko
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:33 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Add devres wrapper for dev_pm_opp_of_add_table() to simplify drivers
code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/opp/of.c       | 36 ++++++++++++++++++++++++++++++++++++
 include/linux/pm_opp.h |  6 ++++++
 2 files changed, 42 insertions(+)

diff --git a/drivers/opp/of.c b/drivers/opp/of.c
index f480c10e6314..c582a9ca397b 100644
--- a/drivers/opp/of.c
+++ b/drivers/opp/of.c
@@ -1104,6 +1104,42 @@ static int _of_add_table_indexed(struct device *dev, int index, bool getclk)
 	return ret;
 }
 
+static void devm_pm_opp_of_table_release(void *data)
+{
+	dev_pm_opp_of_remove_table(data);
+}
+
+/**
+ * devm_pm_opp_of_add_table() - Initialize opp table from device tree
+ * @dev:	device pointer used to lookup OPP table.
+ *
+ * Register the initial OPP table with the OPP library for given device.
+ *
+ * The opp_table structure will be freed after the device is destroyed.
+ *
+ * Return:
+ * 0		On success OR
+ *		Duplicate OPPs (both freq and volt are same) and opp->available
+ * -EEXIST	Freq are same and volt are different OR
+ *		Duplicate OPPs (both freq and volt are same) and !opp->available
+ * -ENOMEM	Memory allocation failure
+ * -ENODEV	when 'operating-points' property is not found or is invalid data
+ *		in device node.
+ * -ENODATA	when empty 'operating-points' property is found
+ * -EINVAL	when invalid entries are found in opp-v2 table
+ */
+int devm_pm_opp_of_add_table(struct device *dev)
+{
+	int ret;
+
+	ret = dev_pm_opp_of_add_table(dev);
+	if (ret)
+		return ret;
+
+	return devm_add_action_or_reset(dev, devm_pm_opp_of_table_release, dev);
+}
+EXPORT_SYMBOL_GPL(devm_pm_opp_of_add_table);
+
 /**
  * dev_pm_opp_of_add_table() - Initialize opp table from device tree
  * @dev:	device pointer used to lookup OPP table.
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
index e455b187e405..3f8894012429 100644
--- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h
@@ -441,6 +441,7 @@ int dev_pm_opp_of_add_table(struct device *dev);
 int dev_pm_opp_of_add_table_indexed(struct device *dev, int index);
 int dev_pm_opp_of_add_table_noclk(struct device *dev, int index);
 void dev_pm_opp_of_remove_table(struct device *dev);
+int devm_pm_opp_of_add_table(struct device *dev);
 int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask);
 void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask);
 int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask);
@@ -473,6 +474,11 @@ static inline void dev_pm_opp_of_remove_table(struct device *dev)
 {
 }
 
+static inline int devm_pm_opp_of_add_table(struct device *dev)
+{
+	return -EOPNOTSUPP;
+}
+
 static inline int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask)
 {
 	return -EOPNOTSUPP;
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 05/15] opp: Change return type of devm_pm_opp_register_set_opp_helper()
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (3 preceding siblings ...)
  2021-03-14 16:33 ` [PATCH v3 04/15] opp: Add devres wrapper for dev_pm_opp_of_add_table Dmitry Osipenko
@ 2021-03-14 16:33 ` Dmitry Osipenko
  2021-03-14 16:33 ` [PATCH v3 06/15] opp: Change return type of devm_pm_opp_attach_genpd() Dmitry Osipenko
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:33 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

Make devm_pm_opp_register_set_opp_helper() to return error code instead
of opp_table pointer in order to have return type consistent with the
other resource-managed OPP helpers.

Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/opp/core.c     | 18 ++++++------------
 include/linux/pm_opp.h |  6 +++---
 2 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index 34b054bbb28f..4f44f02e6049 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -2295,25 +2295,19 @@ static void devm_pm_opp_unregister_set_opp_helper(void *data)
  *
  * This is a resource-managed version of dev_pm_opp_register_set_opp_helper().
  *
- * Return: pointer to 'struct opp_table' on success and errorno otherwise.
+ * Return: 0 on success and errorno otherwise.
  */
-struct opp_table *
-devm_pm_opp_register_set_opp_helper(struct device *dev,
-				    int (*set_opp)(struct dev_pm_set_opp_data *data))
+int devm_pm_opp_register_set_opp_helper(struct device *dev,
+					int (*set_opp)(struct dev_pm_set_opp_data *data))
 {
 	struct opp_table *opp_table;
-	int err;
 
 	opp_table = dev_pm_opp_register_set_opp_helper(dev, set_opp);
 	if (IS_ERR(opp_table))
-		return opp_table;
-
-	err = devm_add_action_or_reset(dev, devm_pm_opp_unregister_set_opp_helper,
-				       opp_table);
-	if (err)
-		return ERR_PTR(err);
+		return PTR_ERR(opp_table);
 
-	return opp_table;
+	return devm_add_action_or_reset(dev, devm_pm_opp_unregister_set_opp_helper,
+					opp_table);
 }
 EXPORT_SYMBOL_GPL(devm_pm_opp_register_set_opp_helper);
 
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
index 3f8894012429..865426b525a8 100644
--- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h
@@ -155,7 +155,7 @@ void dev_pm_opp_put_clkname(struct opp_table *opp_table);
 int devm_pm_opp_set_clkname(struct device *dev, const char *name);
 struct opp_table *dev_pm_opp_register_set_opp_helper(struct device *dev, int (*set_opp)(struct dev_pm_set_opp_data *data));
 void dev_pm_opp_unregister_set_opp_helper(struct opp_table *opp_table);
-struct opp_table *devm_pm_opp_register_set_opp_helper(struct device *dev, int (*set_opp)(struct dev_pm_set_opp_data *data));
+int devm_pm_opp_register_set_opp_helper(struct device *dev, int (*set_opp)(struct dev_pm_set_opp_data *data));
 struct opp_table *dev_pm_opp_attach_genpd(struct device *dev, const char **names, struct device ***virt_devs);
 void dev_pm_opp_detach_genpd(struct opp_table *opp_table);
 struct opp_table *devm_pm_opp_attach_genpd(struct device *dev, const char **names, struct device ***virt_devs);
@@ -337,11 +337,11 @@ static inline struct opp_table *dev_pm_opp_register_set_opp_helper(struct device
 
 static inline void dev_pm_opp_unregister_set_opp_helper(struct opp_table *opp_table) {}
 
-static inline struct opp_table *
+static int
 devm_pm_opp_register_set_opp_helper(struct device *dev,
 				    int (*set_opp)(struct dev_pm_set_opp_data *data))
 {
-	return ERR_PTR(-EOPNOTSUPP);
+	return -EOPNOTSUPP;
 }
 
 static inline struct opp_table *dev_pm_opp_set_prop_name(struct device *dev, const char *name)
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 06/15] opp: Change return type of devm_pm_opp_attach_genpd()
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (4 preceding siblings ...)
  2021-03-14 16:33 ` [PATCH v3 05/15] opp: Change return type of devm_pm_opp_register_set_opp_helper() Dmitry Osipenko
@ 2021-03-14 16:33 ` Dmitry Osipenko
  2021-03-14 16:34 ` [PATCH v3 07/15] serial: qcom_geni_serial: Convert to use resource-managed OPP API Dmitry Osipenko
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:33 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

Make devm_pm_opp_attach_genpd() to return error code instead of
opp_table pointer in order to have return type consistent with the
other resource-managed OPP helpers.

Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/opp/core.c     | 18 ++++++------------
 include/linux/pm_opp.h |  9 +++++----
 2 files changed, 11 insertions(+), 16 deletions(-)

diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index 4f44f02e6049..2076b12c039b 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -2460,25 +2460,19 @@ static void devm_pm_opp_detach_genpd(void *data)
  *
  * This is a resource-managed version of dev_pm_opp_attach_genpd().
  *
- * Return: pointer to 'struct opp_table' on success and errorno otherwise.
+ * Return: 0 on success and errorno otherwise.
  */
-struct opp_table *
-devm_pm_opp_attach_genpd(struct device *dev, const char **names,
-			 struct device ***virt_devs)
+int devm_pm_opp_attach_genpd(struct device *dev, const char **names,
+			     struct device ***virt_devs)
 {
 	struct opp_table *opp_table;
-	int err;
 
 	opp_table = dev_pm_opp_attach_genpd(dev, names, virt_devs);
 	if (IS_ERR(opp_table))
-		return opp_table;
-
-	err = devm_add_action_or_reset(dev, devm_pm_opp_detach_genpd,
-				       opp_table);
-	if (err)
-		return ERR_PTR(err);
+		return PTR_ERR(opp_table);
 
-	return opp_table;
+	return devm_add_action_or_reset(dev, devm_pm_opp_detach_genpd,
+					opp_table);
 }
 EXPORT_SYMBOL_GPL(devm_pm_opp_attach_genpd);
 
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
index 865426b525a8..a5ae69c40ea7 100644
--- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h
@@ -158,7 +158,7 @@ void dev_pm_opp_unregister_set_opp_helper(struct opp_table *opp_table);
 int devm_pm_opp_register_set_opp_helper(struct device *dev, int (*set_opp)(struct dev_pm_set_opp_data *data));
 struct opp_table *dev_pm_opp_attach_genpd(struct device *dev, const char **names, struct device ***virt_devs);
 void dev_pm_opp_detach_genpd(struct opp_table *opp_table);
-struct opp_table *devm_pm_opp_attach_genpd(struct device *dev, const char **names, struct device ***virt_devs);
+int devm_pm_opp_attach_genpd(struct device *dev, const char **names, struct device ***virt_devs);
 struct dev_pm_opp *dev_pm_opp_xlate_required_opp(struct opp_table *src_table, struct opp_table *dst_table, struct dev_pm_opp *src_opp);
 int dev_pm_opp_xlate_performance_state(struct opp_table *src_table, struct opp_table *dst_table, unsigned int pstate);
 int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq);
@@ -384,10 +384,11 @@ static inline struct opp_table *dev_pm_opp_attach_genpd(struct device *dev, cons
 
 static inline void dev_pm_opp_detach_genpd(struct opp_table *opp_table) {}
 
-static inline struct opp_table *devm_pm_opp_attach_genpd(struct device *dev,
-				const char **names, struct device ***virt_devs)
+static inline int devm_pm_opp_attach_genpd(struct device *dev,
+					   const char **names,
+					   struct device ***virt_devs)
 {
-	return ERR_PTR(-EOPNOTSUPP);
+	return -EOPNOTSUPP;
 }
 
 static inline struct dev_pm_opp *dev_pm_opp_xlate_required_opp(struct opp_table *src_table,
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 07/15] serial: qcom_geni_serial: Convert to use resource-managed OPP API
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (5 preceding siblings ...)
  2021-03-14 16:33 ` [PATCH v3 06/15] opp: Change return type of devm_pm_opp_attach_genpd() Dmitry Osipenko
@ 2021-03-14 16:34 ` Dmitry Osipenko
  2021-03-14 16:34 ` [PATCH v3 08/15] spi: spi-geni-qcom: " Dmitry Osipenko
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:34 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Use resource-managed OPP API to simplify code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/tty/serial/qcom_geni_serial.c | 23 ++++++++---------------
 1 file changed, 8 insertions(+), 15 deletions(-)

diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c
index 291649f02821..3872bbfac24b 100644
--- a/drivers/tty/serial/qcom_geni_serial.c
+++ b/drivers/tty/serial/qcom_geni_serial.c
@@ -1433,14 +1433,14 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
 	if (of_property_read_bool(pdev->dev.of_node, "cts-rts-swap"))
 		port->cts_rts_swap = true;
 
-	port->se.opp_table = dev_pm_opp_set_clkname(&pdev->dev, "se");
-	if (IS_ERR(port->se.opp_table))
-		return PTR_ERR(port->se.opp_table);
+	ret = devm_pm_opp_set_clkname(&pdev->dev, "se");
+	if (ret)
+		return ret;
 	/* OPP table is optional */
-	ret = dev_pm_opp_of_add_table(&pdev->dev);
+	ret = devm_pm_opp_of_add_table(&pdev->dev);
 	if (ret && ret != -ENODEV) {
 		dev_err(&pdev->dev, "invalid OPP table in device tree\n");
-		goto put_clkname;
+		return ret;
 	}
 
 	port->private_data.drv = drv;
@@ -1450,7 +1450,7 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
 
 	ret = uart_add_one_port(drv, uport);
 	if (ret)
-		goto err;
+		return ret;
 
 	irq_set_status_flags(uport->irq, IRQ_NOAUTOEN);
 	ret = devm_request_irq(uport->dev, uport->irq, qcom_geni_serial_isr,
@@ -1458,7 +1458,7 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
 	if (ret) {
 		dev_err(uport->dev, "Failed to get IRQ ret %d\n", ret);
 		uart_remove_one_port(drv, uport);
-		goto err;
+		return ret;
 	}
 
 	/*
@@ -1475,16 +1475,11 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
 		if (ret) {
 			device_init_wakeup(&pdev->dev, false);
 			uart_remove_one_port(drv, uport);
-			goto err;
+			return ret;
 		}
 	}
 
 	return 0;
-err:
-	dev_pm_opp_of_remove_table(&pdev->dev);
-put_clkname:
-	dev_pm_opp_put_clkname(port->se.opp_table);
-	return ret;
 }
 
 static int qcom_geni_serial_remove(struct platform_device *pdev)
@@ -1492,8 +1487,6 @@ static int qcom_geni_serial_remove(struct platform_device *pdev)
 	struct qcom_geni_serial_port *port = platform_get_drvdata(pdev);
 	struct uart_driver *drv = port->private_data.drv;
 
-	dev_pm_opp_of_remove_table(&pdev->dev);
-	dev_pm_opp_put_clkname(port->se.opp_table);
 	dev_pm_clear_wake_irq(&pdev->dev);
 	device_init_wakeup(&pdev->dev, false);
 	uart_remove_one_port(drv, &port->uport);
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 08/15] spi: spi-geni-qcom: Convert to use resource-managed OPP API
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (6 preceding siblings ...)
  2021-03-14 16:34 ` [PATCH v3 07/15] serial: qcom_geni_serial: Convert to use resource-managed OPP API Dmitry Osipenko
@ 2021-03-14 16:34 ` Dmitry Osipenko
  2021-03-14 16:34 ` [PATCH v3 09/15] spi: spi-qcom-qspi: " Dmitry Osipenko
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:34 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Use resource-managed OPP API to simplify code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Acked-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/spi/spi-geni-qcom.c  | 16 ++++++----------
 include/linux/qcom-geni-se.h |  2 --
 2 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c
index 881f645661cc..3d0d8ddd5772 100644
--- a/drivers/spi/spi-geni-qcom.c
+++ b/drivers/spi/spi-geni-qcom.c
@@ -691,14 +691,15 @@ static int spi_geni_probe(struct platform_device *pdev)
 	mas->se.wrapper = dev_get_drvdata(dev->parent);
 	mas->se.base = base;
 	mas->se.clk = clk;
-	mas->se.opp_table = dev_pm_opp_set_clkname(&pdev->dev, "se");
-	if (IS_ERR(mas->se.opp_table))
-		return PTR_ERR(mas->se.opp_table);
+
+	ret = devm_pm_opp_set_clkname(&pdev->dev, "se");
+	if (ret)
+		return ret;
 	/* OPP table is optional */
-	ret = dev_pm_opp_of_add_table(&pdev->dev);
+	ret = devm_pm_opp_of_add_table(&pdev->dev);
 	if (ret && ret != -ENODEV) {
 		dev_err(&pdev->dev, "invalid OPP table in device tree\n");
-		goto put_clkname;
+		return ret;
 	}
 
 	spi->bus_num = -1;
@@ -750,9 +751,6 @@ static int spi_geni_probe(struct platform_device *pdev)
 	free_irq(mas->irq, spi);
 spi_geni_probe_runtime_disable:
 	pm_runtime_disable(dev);
-	dev_pm_opp_of_remove_table(&pdev->dev);
-put_clkname:
-	dev_pm_opp_put_clkname(mas->se.opp_table);
 	return ret;
 }
 
@@ -766,8 +764,6 @@ static int spi_geni_remove(struct platform_device *pdev)
 
 	free_irq(mas->irq, spi);
 	pm_runtime_disable(&pdev->dev);
-	dev_pm_opp_of_remove_table(&pdev->dev);
-	dev_pm_opp_put_clkname(mas->se.opp_table);
 	return 0;
 }
 
diff --git a/include/linux/qcom-geni-se.h b/include/linux/qcom-geni-se.h
index ec2ad4b0fe14..cddef864a760 100644
--- a/include/linux/qcom-geni-se.h
+++ b/include/linux/qcom-geni-se.h
@@ -47,7 +47,6 @@ struct geni_icc_path {
  * @num_clk_levels:	Number of valid clock levels in clk_perf_tbl
  * @clk_perf_tbl:	Table of clock frequency input to serial engine clock
  * @icc_paths:		Array of ICC paths for SE
- * @opp_table:		Pointer to the OPP table
  */
 struct geni_se {
 	void __iomem *base;
@@ -57,7 +56,6 @@ struct geni_se {
 	unsigned int num_clk_levels;
 	unsigned long *clk_perf_tbl;
 	struct geni_icc_path icc_paths[3];
-	struct opp_table *opp_table;
 };
 
 /* Common SE registers */
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 09/15] spi: spi-qcom-qspi: Convert to use resource-managed OPP API
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (7 preceding siblings ...)
  2021-03-14 16:34 ` [PATCH v3 08/15] spi: spi-geni-qcom: " Dmitry Osipenko
@ 2021-03-14 16:34 ` Dmitry Osipenko
  2021-03-14 16:34 ` [PATCH v3 10/15] mmc: sdhci-msm: " Dmitry Osipenko
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:34 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Use resource-managed OPP API to simplify code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Acked-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/spi/spi-qcom-qspi.c | 18 +++++-------------
 1 file changed, 5 insertions(+), 13 deletions(-)

diff --git a/drivers/spi/spi-qcom-qspi.c b/drivers/spi/spi-qcom-qspi.c
index 1dbcc410cd35..c334dfec4117 100644
--- a/drivers/spi/spi-qcom-qspi.c
+++ b/drivers/spi/spi-qcom-qspi.c
@@ -142,7 +142,6 @@ struct qcom_qspi {
 	struct clk_bulk_data *clks;
 	struct qspi_xfer xfer;
 	struct icc_path *icc_path_cpu_to_qspi;
-	struct opp_table *opp_table;
 	unsigned long last_speed;
 	/* Lock to protect data accessed by IRQs */
 	spinlock_t lock;
@@ -530,14 +529,14 @@ static int qcom_qspi_probe(struct platform_device *pdev)
 	master->handle_err = qcom_qspi_handle_err;
 	master->auto_runtime_pm = true;
 
-	ctrl->opp_table = dev_pm_opp_set_clkname(&pdev->dev, "core");
-	if (IS_ERR(ctrl->opp_table))
-		return PTR_ERR(ctrl->opp_table);
+	ret = devm_pm_opp_set_clkname(&pdev->dev, "core");
+	if (ret)
+		return ret;
 	/* OPP table is optional */
-	ret = dev_pm_opp_of_add_table(&pdev->dev);
+	ret = devm_pm_opp_of_add_table(&pdev->dev);
 	if (ret && ret != -ENODEV) {
 		dev_err(&pdev->dev, "invalid OPP table in device tree\n");
-		goto exit_probe_put_clkname;
+		return ret;
 	}
 
 	pm_runtime_use_autosuspend(dev);
@@ -549,10 +548,6 @@ static int qcom_qspi_probe(struct platform_device *pdev)
 		return 0;
 
 	pm_runtime_disable(dev);
-	dev_pm_opp_of_remove_table(&pdev->dev);
-
-exit_probe_put_clkname:
-	dev_pm_opp_put_clkname(ctrl->opp_table);
 
 	return ret;
 }
@@ -560,14 +555,11 @@ static int qcom_qspi_probe(struct platform_device *pdev)
 static int qcom_qspi_remove(struct platform_device *pdev)
 {
 	struct spi_master *master = platform_get_drvdata(pdev);
-	struct qcom_qspi *ctrl = spi_master_get_devdata(master);
 
 	/* Unregister _before_ disabling pm_runtime() so we stop transfers */
 	spi_unregister_master(master);
 
 	pm_runtime_disable(&pdev->dev);
-	dev_pm_opp_of_remove_table(&pdev->dev);
-	dev_pm_opp_put_clkname(ctrl->opp_table);
 
 	return 0;
 }
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 10/15] mmc: sdhci-msm: Convert to use resource-managed OPP API
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (8 preceding siblings ...)
  2021-03-14 16:34 ` [PATCH v3 09/15] spi: spi-qcom-qspi: " Dmitry Osipenko
@ 2021-03-14 16:34 ` Dmitry Osipenko
  2021-03-14 16:34 ` [PATCH v3 11/15] drm/msm: " Dmitry Osipenko
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:34 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Use resource-managed OPP API to simplify code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/mmc/host/sdhci-msm.c | 19 +++++--------------
 1 file changed, 5 insertions(+), 14 deletions(-)

diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
index 5e1da4df096f..d170c919e6e4 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -264,7 +264,6 @@ struct sdhci_msm_host {
 	struct clk_bulk_data bulk_clks[5];
 	unsigned long clk_rate;
 	struct mmc_host *mmc;
-	struct opp_table *opp_table;
 	bool use_14lpp_dll_reset;
 	bool tuning_done;
 	bool calibration_done;
@@ -2551,17 +2550,15 @@ static int sdhci_msm_probe(struct platform_device *pdev)
 	if (ret)
 		goto bus_clk_disable;
 
-	msm_host->opp_table = dev_pm_opp_set_clkname(&pdev->dev, "core");
-	if (IS_ERR(msm_host->opp_table)) {
-		ret = PTR_ERR(msm_host->opp_table);
+	ret = devm_pm_opp_set_clkname(&pdev->dev, "core");
+	if (ret)
 		goto bus_clk_disable;
-	}
 
 	/* OPP table is optional */
-	ret = dev_pm_opp_of_add_table(&pdev->dev);
+	ret = devm_pm_opp_of_add_table(&pdev->dev);
 	if (ret && ret != -ENODEV) {
 		dev_err(&pdev->dev, "Invalid OPP table in Device tree\n");
-		goto opp_put_clkname;
+		goto bus_clk_disable;
 	}
 
 	/* Vote for maximum clock rate for maximum performance */
@@ -2587,7 +2584,7 @@ static int sdhci_msm_probe(struct platform_device *pdev)
 	ret = clk_bulk_prepare_enable(ARRAY_SIZE(msm_host->bulk_clks),
 				      msm_host->bulk_clks);
 	if (ret)
-		goto opp_cleanup;
+		goto bus_clk_disable;
 
 	/*
 	 * xo clock is needed for FLL feature of cm_dll.
@@ -2732,10 +2729,6 @@ static int sdhci_msm_probe(struct platform_device *pdev)
 clk_disable:
 	clk_bulk_disable_unprepare(ARRAY_SIZE(msm_host->bulk_clks),
 				   msm_host->bulk_clks);
-opp_cleanup:
-	dev_pm_opp_of_remove_table(&pdev->dev);
-opp_put_clkname:
-	dev_pm_opp_put_clkname(msm_host->opp_table);
 bus_clk_disable:
 	if (!IS_ERR(msm_host->bus_clk))
 		clk_disable_unprepare(msm_host->bus_clk);
@@ -2754,8 +2747,6 @@ static int sdhci_msm_remove(struct platform_device *pdev)
 
 	sdhci_remove_host(host, dead);
 
-	dev_pm_opp_of_remove_table(&pdev->dev);
-	dev_pm_opp_put_clkname(msm_host->opp_table);
 	pm_runtime_get_sync(&pdev->dev);
 	pm_runtime_disable(&pdev->dev);
 	pm_runtime_put_noidle(&pdev->dev);
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 11/15] drm/msm: Convert to use resource-managed OPP API
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (9 preceding siblings ...)
  2021-03-14 16:34 ` [PATCH v3 10/15] mmc: sdhci-msm: " Dmitry Osipenko
@ 2021-03-14 16:34 ` Dmitry Osipenko
  2021-03-15  4:03   ` Viresh Kumar
  2021-03-14 16:34 ` [PATCH v3 12/15] drm/lima: " Dmitry Osipenko
                   ` (4 subsequent siblings)
  15 siblings, 1 reply; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:34 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Use resource-managed OPP API to simplify code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/gpu/drm/msm/adreno/a5xx_gpu.c   |  2 +-
 drivers/gpu/drm/msm/adreno/a6xx_gmu.c   |  2 +-
 drivers/gpu/drm/msm/adreno/a6xx_gpu.c   | 11 +++------
 drivers/gpu/drm/msm/adreno/a6xx_gpu.h   |  2 --
 drivers/gpu/drm/msm/adreno/adreno_gpu.c |  2 +-
 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 23 +++++++------------
 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h |  2 --
 drivers/gpu/drm/msm/dp/dp_ctrl.c        | 30 +++++--------------------
 drivers/gpu/drm/msm/dp/dp_ctrl.h        |  1 -
 drivers/gpu/drm/msm/dp/dp_display.c     |  5 +----
 drivers/gpu/drm/msm/dsi/dsi_host.c      | 13 ++++-------
 11 files changed, 25 insertions(+), 68 deletions(-)

diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
index 7e553d3efeb2..caf747ba8d5b 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
@@ -1705,7 +1705,7 @@ static void check_speed_bin(struct device *dev)
 		nvmem_cell_put(cell);
 	}
 
-	dev_pm_opp_set_supported_hw(dev, &val, 1);
+	devm_pm_opp_set_supported_hw(dev, &val, 1);
 }
 
 struct msm_gpu *a5xx_gpu_init(struct drm_device *dev)
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
index 91cf46f84025..232940b41720 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
@@ -1340,7 +1340,7 @@ static int a6xx_gmu_pwrlevels_probe(struct a6xx_gmu *gmu)
 	 * The GMU handles its own frequency switching so build a list of
 	 * available frequencies to send during initialization
 	 */
-	ret = dev_pm_opp_of_add_table(gmu->dev);
+	ret = devm_pm_opp_of_add_table(gmu->dev);
 	if (ret) {
 		DRM_DEV_ERROR(gmu->dev, "Unable to set the OPP table for the GMU\n");
 		return ret;
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
index 690409ca8a18..c87b4665bb37 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
@@ -1265,9 +1265,6 @@ static void a6xx_destroy(struct msm_gpu *gpu)
 
 	adreno_gpu_cleanup(adreno_gpu);
 
-	if (a6xx_gpu->opp_table)
-		dev_pm_opp_put_supported_hw(a6xx_gpu->opp_table);
-
 	kfree(a6xx_gpu);
 }
 
@@ -1400,7 +1397,6 @@ static u32 fuse_to_supp_hw(struct device *dev, u32 revn, u32 fuse)
 static int a6xx_set_supported_hw(struct device *dev, struct a6xx_gpu *a6xx_gpu,
 		u32 revn)
 {
-	struct opp_table *opp_table;
 	u32 supp_hw = UINT_MAX;
 	u16 speedbin;
 	int ret;
@@ -1417,11 +1413,10 @@ static int a6xx_set_supported_hw(struct device *dev, struct a6xx_gpu *a6xx_gpu,
 	supp_hw = fuse_to_supp_hw(dev, revn, speedbin);
 
 done:
-	opp_table = dev_pm_opp_set_supported_hw(dev, &supp_hw, 1);
-	if (IS_ERR(opp_table))
-		return PTR_ERR(opp_table);
+	ret = devm_pm_opp_set_supported_hw(dev, &supp_hw, 1);
+	if (ret)
+		return ret;
 
-	a6xx_gpu->opp_table = opp_table;
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h
index ce0610c5256f..e793d329e77b 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h
@@ -33,8 +33,6 @@ struct a6xx_gpu {
 	void *llc_slice;
 	void *htw_llc_slice;
 	bool have_mmu500;
-
-	struct opp_table *opp_table;
 };
 
 #define to_a6xx_gpu(x) container_of(x, struct a6xx_gpu, base)
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
index 0f184c3dd9d9..dfd3cac50f7f 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
@@ -841,7 +841,7 @@ static void adreno_get_pwrlevels(struct device *dev,
 	if (!of_find_property(dev->of_node, "operating-points-v2", NULL))
 		ret = adreno_get_legacy_pwrlevels(dev);
 	else {
-		ret = dev_pm_opp_of_add_table(dev);
+		ret = devm_pm_opp_of_add_table(dev);
 		if (ret)
 			DRM_DEV_ERROR(dev, "Unable to set the OPP table\n");
 	}
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 5a8e3e1fc48c..0c057e73ebf5 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -1088,21 +1088,21 @@ static int dpu_bind(struct device *dev, struct device *master, void *data)
 	if (!dpu_kms)
 		return -ENOMEM;
 
-	dpu_kms->opp_table = dev_pm_opp_set_clkname(dev, "core");
-	if (IS_ERR(dpu_kms->opp_table))
-		return PTR_ERR(dpu_kms->opp_table);
+	ret = devm_pm_opp_set_clkname(dev, "core");
+	if (ret)
+		return ret;
 	/* OPP table is optional */
-	ret = dev_pm_opp_of_add_table(dev);
+	ret = devm_pm_opp_of_add_table(dev);
 	if (ret && ret != -ENODEV) {
 		dev_err(dev, "invalid OPP table in device tree\n");
-		goto put_clkname;
+		return ret;
 	}
 
 	mp = &dpu_kms->mp;
 	ret = msm_dss_parse_clock(pdev, mp);
 	if (ret) {
 		DPU_ERROR("failed to parse clocks, ret=%d\n", ret);
-		goto err;
+		return ret;
 	}
 
 	platform_set_drvdata(pdev, dpu_kms);
@@ -1110,7 +1110,7 @@ static int dpu_bind(struct device *dev, struct device *master, void *data)
 	ret = msm_kms_init(&dpu_kms->base, &kms_funcs);
 	if (ret) {
 		DPU_ERROR("failed to init kms, ret=%d\n", ret);
-		goto err;
+		return ret;
 	}
 	dpu_kms->dev = ddev;
 	dpu_kms->pdev = pdev;
@@ -1119,11 +1119,7 @@ static int dpu_bind(struct device *dev, struct device *master, void *data)
 	dpu_kms->rpm_enabled = true;
 
 	priv->kms = &dpu_kms->base;
-	return ret;
-err:
-	dev_pm_opp_of_remove_table(dev);
-put_clkname:
-	dev_pm_opp_put_clkname(dpu_kms->opp_table);
+
 	return ret;
 }
 
@@ -1139,9 +1135,6 @@ static void dpu_unbind(struct device *dev, struct device *master, void *data)
 
 	if (dpu_kms->rpm_enabled)
 		pm_runtime_disable(&pdev->dev);
-
-	dev_pm_opp_of_remove_table(dev);
-	dev_pm_opp_put_clkname(dpu_kms->opp_table);
 }
 
 static const struct component_ops dpu_ops = {
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
index d6717d6672f7..1483995a94d9 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
@@ -130,8 +130,6 @@ struct dpu_kms {
 	struct platform_device *pdev;
 	bool rpm_enabled;
 
-	struct opp_table *opp_table;
-
 	struct dss_module_power mp;
 
 	/* reference count bandwidth requests, so we know when we can
diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c b/drivers/gpu/drm/msm/dp/dp_ctrl.c
index 1390f3547fde..d20386a5c190 100644
--- a/drivers/gpu/drm/msm/dp/dp_ctrl.c
+++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c
@@ -77,8 +77,6 @@ struct dp_ctrl_private {
 	struct dp_parser *parser;
 	struct dp_catalog *catalog;
 
-	struct opp_table *opp_table;
-
 	struct completion idle_comp;
 	struct completion video_comp;
 };
@@ -1886,20 +1884,17 @@ struct dp_ctrl *dp_ctrl_get(struct device *dev, struct dp_link *link,
 		return ERR_PTR(-ENOMEM);
 	}
 
-	ctrl->opp_table = dev_pm_opp_set_clkname(dev, "ctrl_link");
-	if (IS_ERR(ctrl->opp_table)) {
+	ret = devm_pm_opp_set_clkname(dev, "ctrl_link");
+	if (ret) {
 		dev_err(dev, "invalid DP OPP table in device tree\n");
-		/* caller do PTR_ERR(ctrl->opp_table) */
-		return (struct dp_ctrl *)ctrl->opp_table;
+		/* caller do PTR_ERR(opp_table) */
+		return (struct dp_ctrl *)ERR_PTR(ret);
 	}
 
 	/* OPP table is optional */
-	ret = dev_pm_opp_of_add_table(dev);
-	if (ret) {
+	ret = devm_pm_opp_of_add_table(dev);
+	if (ret)
 		dev_err(dev, "failed to add DP OPP table\n");
-		dev_pm_opp_put_clkname(ctrl->opp_table);
-		ctrl->opp_table = NULL;
-	}
 
 	init_completion(&ctrl->idle_comp);
 	init_completion(&ctrl->video_comp);
@@ -1915,16 +1910,3 @@ struct dp_ctrl *dp_ctrl_get(struct device *dev, struct dp_link *link,
 
 	return &ctrl->dp_ctrl;
 }
-
-void dp_ctrl_put(struct dp_ctrl *dp_ctrl)
-{
-	struct dp_ctrl_private *ctrl;
-
-	ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl);
-
-	if (ctrl->opp_table) {
-		dev_pm_opp_of_remove_table(ctrl->dev);
-		dev_pm_opp_put_clkname(ctrl->opp_table);
-		ctrl->opp_table = NULL;
-	}
-}
diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.h b/drivers/gpu/drm/msm/dp/dp_ctrl.h
index a836bd358447..a6f6fa2c2aef 100644
--- a/drivers/gpu/drm/msm/dp/dp_ctrl.h
+++ b/drivers/gpu/drm/msm/dp/dp_ctrl.h
@@ -31,6 +31,5 @@ struct dp_ctrl *dp_ctrl_get(struct device *dev, struct dp_link *link,
 			struct dp_panel *panel,	struct drm_dp_aux *aux,
 			struct dp_power *power, struct dp_catalog *catalog,
 			struct dp_parser *parser);
-void dp_ctrl_put(struct dp_ctrl *dp_ctrl);
 
 #endif /* _DP_CTRL_H_ */
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
index 5a39da6e1eaf..6dde09c0c52e 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.c
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
@@ -720,7 +720,6 @@ static int dp_irq_hpd_handle(struct dp_display_private *dp, u32 data)
 static void dp_display_deinit_sub_modules(struct dp_display_private *dp)
 {
 	dp_debug_put(dp->debug);
-	dp_ctrl_put(dp->ctrl);
 	dp_panel_put(dp->panel);
 	dp_aux_put(dp->aux);
 	dp_audio_put(dp->audio);
@@ -814,13 +813,11 @@ static int dp_init_sub_modules(struct dp_display_private *dp)
 		rc = PTR_ERR(dp->audio);
 		pr_err("failed to initialize audio, rc = %d\n", rc);
 		dp->audio = NULL;
-		goto error_audio;
+		goto error_ctrl;
 	}
 
 	return rc;
 
-error_audio:
-	dp_ctrl_put(dp->ctrl);
 error_ctrl:
 	dp_panel_put(dp->panel);
 error_link:
diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c
index ab281cba0f08..e0fca4224cfd 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_host.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
@@ -113,8 +113,6 @@ struct msm_dsi_host {
 	struct clk *pixel_clk_src;
 	struct clk *byte_intf_clk;
 
-	struct opp_table *opp_table;
-
 	u32 byte_clk_rate;
 	u32 pixel_clk_rate;
 	u32 esc_clk_rate;
@@ -1886,14 +1884,13 @@ int msm_dsi_host_init(struct msm_dsi *msm_dsi)
 		goto fail;
 	}
 
-	msm_host->opp_table = dev_pm_opp_set_clkname(&pdev->dev, "byte");
-	if (IS_ERR(msm_host->opp_table))
-		return PTR_ERR(msm_host->opp_table);
+	ret = devm_pm_opp_set_clkname(&pdev->dev, "byte");
+	if (ret)
+		return ret;
 	/* OPP table is optional */
-	ret = dev_pm_opp_of_add_table(&pdev->dev);
+	ret = devm_pm_opp_of_add_table(&pdev->dev);
 	if (ret && ret != -ENODEV) {
 		dev_err(&pdev->dev, "invalid OPP table in device tree\n");
-		dev_pm_opp_put_clkname(msm_host->opp_table);
 		return ret;
 	}
 
@@ -1932,8 +1929,6 @@ void msm_dsi_host_destroy(struct mipi_dsi_host *host)
 	mutex_destroy(&msm_host->cmd_mutex);
 	mutex_destroy(&msm_host->dev_mutex);
 
-	dev_pm_opp_of_remove_table(&msm_host->pdev->dev);
-	dev_pm_opp_put_clkname(msm_host->opp_table);
 	pm_runtime_disable(&msm_host->pdev->dev);
 }
 
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 12/15] drm/lima: Convert to use resource-managed OPP API
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (10 preceding siblings ...)
  2021-03-14 16:34 ` [PATCH v3 11/15] drm/msm: " Dmitry Osipenko
@ 2021-03-14 16:34 ` Dmitry Osipenko
  2021-03-14 16:34 ` [PATCH v3 13/15] drm/panfrost: " Dmitry Osipenko
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:34 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Use resource-managed OPP API to simplify code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/gpu/drm/lima/lima_devfreq.c | 47 +++++++----------------------
 drivers/gpu/drm/lima/lima_devfreq.h |  3 --
 2 files changed, 11 insertions(+), 39 deletions(-)

diff --git a/drivers/gpu/drm/lima/lima_devfreq.c b/drivers/gpu/drm/lima/lima_devfreq.c
index 5686ad4aaf7c..dbc1d1eb9543 100644
--- a/drivers/gpu/drm/lima/lima_devfreq.c
+++ b/drivers/gpu/drm/lima/lima_devfreq.c
@@ -99,20 +99,12 @@ void lima_devfreq_fini(struct lima_device *ldev)
 		devm_devfreq_remove_device(ldev->dev, devfreq->devfreq);
 		devfreq->devfreq = NULL;
 	}
-
-	dev_pm_opp_of_remove_table(ldev->dev);
-
-	dev_pm_opp_put_regulators(devfreq->regulators_opp_table);
-	dev_pm_opp_put_clkname(devfreq->clkname_opp_table);
-	devfreq->regulators_opp_table = NULL;
-	devfreq->clkname_opp_table = NULL;
 }
 
 int lima_devfreq_init(struct lima_device *ldev)
 {
 	struct thermal_cooling_device *cooling;
 	struct device *dev = ldev->dev;
-	struct opp_table *opp_table;
 	struct devfreq *devfreq;
 	struct lima_devfreq *ldevfreq = &ldev->devfreq;
 	struct dev_pm_opp *opp;
@@ -125,40 +117,28 @@ int lima_devfreq_init(struct lima_device *ldev)
 
 	spin_lock_init(&ldevfreq->lock);
 
-	opp_table = dev_pm_opp_set_clkname(dev, "core");
-	if (IS_ERR(opp_table)) {
-		ret = PTR_ERR(opp_table);
-		goto err_fini;
-	}
-
-	ldevfreq->clkname_opp_table = opp_table;
-
-	opp_table = dev_pm_opp_set_regulators(dev,
-					      (const char *[]){ "mali" },
-					      1);
-	if (IS_ERR(opp_table)) {
-		ret = PTR_ERR(opp_table);
+	ret = devm_pm_opp_set_clkname(dev, "core");
+	if (ret)
+		return ret;
 
+	ret = devm_pm_opp_set_regulators(dev, (const char *[]){ "mali" }, 1);
+	if (ret) {
 		/* Continue if the optional regulator is missing */
 		if (ret != -ENODEV)
-			goto err_fini;
-	} else {
-		ldevfreq->regulators_opp_table = opp_table;
+			return ret;
 	}
 
-	ret = dev_pm_opp_of_add_table(dev);
+	ret = devm_pm_opp_of_add_table(dev);
 	if (ret)
-		goto err_fini;
+		return ret;
 
 	lima_devfreq_reset(ldevfreq);
 
 	cur_freq = clk_get_rate(ldev->clk_gpu);
 
 	opp = devfreq_recommended_opp(dev, &cur_freq, 0);
-	if (IS_ERR(opp)) {
-		ret = PTR_ERR(opp);
-		goto err_fini;
-	}
+	if (IS_ERR(opp))
+		return PTR_ERR(opp);
 
 	lima_devfreq_profile.initial_freq = cur_freq;
 	dev_pm_opp_put(opp);
@@ -167,8 +147,7 @@ int lima_devfreq_init(struct lima_device *ldev)
 					  DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL);
 	if (IS_ERR(devfreq)) {
 		dev_err(dev, "Couldn't initialize GPU devfreq\n");
-		ret = PTR_ERR(devfreq);
-		goto err_fini;
+		return PTR_ERR(devfreq);
 	}
 
 	ldevfreq->devfreq = devfreq;
@@ -180,10 +159,6 @@ int lima_devfreq_init(struct lima_device *ldev)
 		ldevfreq->cooling = cooling;
 
 	return 0;
-
-err_fini:
-	lima_devfreq_fini(ldev);
-	return ret;
 }
 
 void lima_devfreq_record_busy(struct lima_devfreq *devfreq)
diff --git a/drivers/gpu/drm/lima/lima_devfreq.h b/drivers/gpu/drm/lima/lima_devfreq.h
index 2d9b3008ce77..688ee71e263a 100644
--- a/drivers/gpu/drm/lima/lima_devfreq.h
+++ b/drivers/gpu/drm/lima/lima_devfreq.h
@@ -8,15 +8,12 @@
 #include <linux/ktime.h>
 
 struct devfreq;
-struct opp_table;
 struct thermal_cooling_device;
 
 struct lima_device;
 
 struct lima_devfreq {
 	struct devfreq *devfreq;
-	struct opp_table *clkname_opp_table;
-	struct opp_table *regulators_opp_table;
 	struct thermal_cooling_device *cooling;
 
 	ktime_t busy_time;
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 13/15] drm/panfrost: Convert to use resource-managed OPP API
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (11 preceding siblings ...)
  2021-03-14 16:34 ` [PATCH v3 12/15] drm/lima: " Dmitry Osipenko
@ 2021-03-14 16:34 ` Dmitry Osipenko
  2021-03-14 16:34 ` [PATCH v3 14/15] media: venus: " Dmitry Osipenko
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:34 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Use resource-managed OPP API to simplify code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Reviewed-by: Steven Price <steven.price@arm.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/gpu/drm/panfrost/panfrost_devfreq.c | 37 +++++----------------
 drivers/gpu/drm/panfrost/panfrost_devfreq.h |  2 --
 2 files changed, 9 insertions(+), 30 deletions(-)

diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.c b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
index 56b3f5935703..c878391f3e8c 100644
--- a/drivers/gpu/drm/panfrost/panfrost_devfreq.c
+++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.c
@@ -89,29 +89,25 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
 	unsigned long cur_freq;
 	struct device *dev = &pfdev->pdev->dev;
 	struct devfreq *devfreq;
-	struct opp_table *opp_table;
 	struct thermal_cooling_device *cooling;
 	struct panfrost_devfreq *pfdevfreq = &pfdev->pfdevfreq;
 
-	opp_table = dev_pm_opp_set_regulators(dev, pfdev->comp->supply_names,
-					      pfdev->comp->num_supplies);
-	if (IS_ERR(opp_table)) {
-		ret = PTR_ERR(opp_table);
+	ret = devm_pm_opp_set_regulators(dev, pfdev->comp->supply_names,
+					 pfdev->comp->num_supplies);
+	if (ret) {
 		/* Continue if the optional regulator is missing */
 		if (ret != -ENODEV) {
 			DRM_DEV_ERROR(dev, "Couldn't set OPP regulators\n");
-			goto err_fini;
+			return ret;
 		}
-	} else {
-		pfdevfreq->regulators_opp_table = opp_table;
 	}
 
-	ret = dev_pm_opp_of_add_table(dev);
+	ret = devm_pm_opp_of_add_table(dev);
 	if (ret) {
 		/* Optional, continue without devfreq */
 		if (ret == -ENODEV)
 			ret = 0;
-		goto err_fini;
+		return ret;
 	}
 	pfdevfreq->opp_of_table_added = true;
 
@@ -122,10 +118,8 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
 	cur_freq = clk_get_rate(pfdev->clock);
 
 	opp = devfreq_recommended_opp(dev, &cur_freq, 0);
-	if (IS_ERR(opp)) {
-		ret = PTR_ERR(opp);
-		goto err_fini;
-	}
+	if (IS_ERR(opp))
+		return PTR_ERR(opp);
 
 	panfrost_devfreq_profile.initial_freq = cur_freq;
 	dev_pm_opp_put(opp);
@@ -134,8 +128,7 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
 					  DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL);
 	if (IS_ERR(devfreq)) {
 		DRM_DEV_ERROR(dev, "Couldn't initialize GPU devfreq\n");
-		ret = PTR_ERR(devfreq);
-		goto err_fini;
+		return PTR_ERR(devfreq);
 	}
 	pfdevfreq->devfreq = devfreq;
 
@@ -146,10 +139,6 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
 		pfdevfreq->cooling = cooling;
 
 	return 0;
-
-err_fini:
-	panfrost_devfreq_fini(pfdev);
-	return ret;
 }
 
 void panfrost_devfreq_fini(struct panfrost_device *pfdev)
@@ -160,14 +149,6 @@ void panfrost_devfreq_fini(struct panfrost_device *pfdev)
 		devfreq_cooling_unregister(pfdevfreq->cooling);
 		pfdevfreq->cooling = NULL;
 	}
-
-	if (pfdevfreq->opp_of_table_added) {
-		dev_pm_opp_of_remove_table(&pfdev->pdev->dev);
-		pfdevfreq->opp_of_table_added = false;
-	}
-
-	dev_pm_opp_put_regulators(pfdevfreq->regulators_opp_table);
-	pfdevfreq->regulators_opp_table = NULL;
 }
 
 void panfrost_devfreq_resume(struct panfrost_device *pfdev)
diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.h b/drivers/gpu/drm/panfrost/panfrost_devfreq.h
index db6ea48e21f9..210269944687 100644
--- a/drivers/gpu/drm/panfrost/panfrost_devfreq.h
+++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.h
@@ -8,14 +8,12 @@
 #include <linux/ktime.h>
 
 struct devfreq;
-struct opp_table;
 struct thermal_cooling_device;
 
 struct panfrost_device;
 
 struct panfrost_devfreq {
 	struct devfreq *devfreq;
-	struct opp_table *regulators_opp_table;
 	struct thermal_cooling_device *cooling;
 	bool opp_of_table_added;
 
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 14/15] media: venus: Convert to use resource-managed OPP API
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (12 preceding siblings ...)
  2021-03-14 16:34 ` [PATCH v3 13/15] drm/panfrost: " Dmitry Osipenko
@ 2021-03-14 16:34 ` Dmitry Osipenko
  2021-03-25  8:13   ` Stanimir Varbanov
  2021-03-14 16:34 ` [PATCH v3 15/15] memory: samsung: exynos5422-dmc: " Dmitry Osipenko
  2021-03-15  4:06 ` [PATCH v3 00/15] Introduce devm_pm_opp_* API Viresh Kumar
  15 siblings, 1 reply; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:34 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Use resource-managed OPP API to simplify code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/media/platform/qcom/venus/core.h      |  1 -
 .../media/platform/qcom/venus/pm_helpers.c    | 35 +++++--------------
 2 files changed, 8 insertions(+), 28 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index a252ed32cc14..d35f60d2cb56 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -125,7 +125,6 @@ struct venus_core {
 	struct clk *vcodec1_clks[VIDC_VCODEC_CLKS_NUM_MAX];
 	struct icc_path *video_path;
 	struct icc_path *cpucfg_path;
-	struct opp_table *opp_table;
 	bool has_opp_table;
 	struct device *pmdomains[VIDC_PMDOMAINS_NUM_MAX];
 	struct device_link *opp_dl_venus;
diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media/platform/qcom/venus/pm_helpers.c
index 43c4e3d9e281..e61317220b9a 100644
--- a/drivers/media/platform/qcom/venus/pm_helpers.c
+++ b/drivers/media/platform/qcom/venus/pm_helpers.c
@@ -756,7 +756,6 @@ static int venc_power_v4(struct device *dev, int on)
 static int vcodec_domains_get(struct device *dev)
 {
 	int ret;
-	struct opp_table *opp_table;
 	struct device **opp_virt_dev;
 	struct venus_core *core = dev_get_drvdata(dev);
 	const struct venus_resources *res = core->res;
@@ -779,11 +778,9 @@ static int vcodec_domains_get(struct device *dev)
 		return 0;
 
 	/* Attach the power domain for setting performance state */
-	opp_table = dev_pm_opp_attach_genpd(dev, res->opp_pmdomain, &opp_virt_dev);
-	if (IS_ERR(opp_table)) {
-		ret = PTR_ERR(opp_table);
+	ret = devm_pm_opp_attach_genpd(dev, res->opp_pmdomain, &opp_virt_dev);
+	if (ret)
 		goto opp_attach_err;
-	}
 
 	core->opp_pmdomain = *opp_virt_dev;
 	core->opp_dl_venus = device_link_add(dev, core->opp_pmdomain,
@@ -792,13 +789,11 @@ static int vcodec_domains_get(struct device *dev)
 					     DL_FLAG_STATELESS);
 	if (!core->opp_dl_venus) {
 		ret = -ENODEV;
-		goto opp_dl_add_err;
+		goto opp_attach_err;
 	}
 
 	return 0;
 
-opp_dl_add_err:
-	dev_pm_opp_detach_genpd(core->opp_table);
 opp_attach_err:
 	for (i = 0; i < res->vcodec_pmdomains_num; i++) {
 		if (IS_ERR_OR_NULL(core->pmdomains[i]))
@@ -830,8 +825,6 @@ static void vcodec_domains_put(struct device *dev)
 
 	if (core->opp_dl_venus)
 		device_link_del(core->opp_dl_venus);
-
-	dev_pm_opp_detach_genpd(core->opp_table);
 }
 
 static int core_get_v4(struct device *dev)
@@ -860,45 +853,33 @@ static int core_get_v4(struct device *dev)
 	if (legacy_binding)
 		return 0;
 
-	core->opp_table = dev_pm_opp_set_clkname(dev, "core");
-	if (IS_ERR(core->opp_table))
-		return PTR_ERR(core->opp_table);
+	ret = devm_pm_opp_set_clkname(dev, "core");
+	if (ret)
+		return ret;
 
 	if (core->res->opp_pmdomain) {
-		ret = dev_pm_opp_of_add_table(dev);
+		ret = devm_pm_opp_of_add_table(dev);
 		if (!ret) {
 			core->has_opp_table = true;
 		} else if (ret != -ENODEV) {
 			dev_err(dev, "invalid OPP table in device tree\n");
-			dev_pm_opp_put_clkname(core->opp_table);
 			return ret;
 		}
 	}
 
 	ret = vcodec_domains_get(dev);
-	if (ret) {
-		if (core->has_opp_table)
-			dev_pm_opp_of_remove_table(dev);
-		dev_pm_opp_put_clkname(core->opp_table);
+	if (ret)
 		return ret;
-	}
 
 	return 0;
 }
 
 static void core_put_v4(struct device *dev)
 {
-	struct venus_core *core = dev_get_drvdata(dev);
-
 	if (legacy_binding)
 		return;
 
 	vcodec_domains_put(dev);
-
-	if (core->has_opp_table)
-		dev_pm_opp_of_remove_table(dev);
-	dev_pm_opp_put_clkname(core->opp_table);
-
 }
 
 static int core_power_v4(struct device *dev, int on)
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 15/15] memory: samsung: exynos5422-dmc: Convert to use resource-managed OPP API
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (13 preceding siblings ...)
  2021-03-14 16:34 ` [PATCH v3 14/15] media: venus: " Dmitry Osipenko
@ 2021-03-14 16:34 ` Dmitry Osipenko
  2021-03-15  4:06 ` [PATCH v3 00/15] Introduce devm_pm_opp_* API Viresh Kumar
  15 siblings, 0 replies; 20+ messages in thread
From: Dmitry Osipenko @ 2021-03-14 16:34 UTC (permalink / raw)
  To: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

From: Yangtao Li <tiny.windzz@gmail.com>

Use resource-managed OPP API to simplify code.

Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/memory/samsung/exynos5422-dmc.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/memory/samsung/exynos5422-dmc.c b/drivers/memory/samsung/exynos5422-dmc.c
index 1dabb509dec3..56f6e65d40cd 100644
--- a/drivers/memory/samsung/exynos5422-dmc.c
+++ b/drivers/memory/samsung/exynos5422-dmc.c
@@ -343,7 +343,7 @@ static int exynos5_init_freq_table(struct exynos5_dmc *dmc,
 	int idx;
 	unsigned long freq;
 
-	ret = dev_pm_opp_of_add_table(dmc->dev);
+	ret = devm_pm_opp_of_add_table(dmc->dev);
 	if (ret < 0) {
 		dev_err(dmc->dev, "Failed to get OPP table\n");
 		return ret;
@@ -354,7 +354,7 @@ static int exynos5_init_freq_table(struct exynos5_dmc *dmc,
 	dmc->opp = devm_kmalloc_array(dmc->dev, dmc->opp_count,
 				      sizeof(struct dmc_opp_table), GFP_KERNEL);
 	if (!dmc->opp)
-		goto err_opp;
+		return -ENOMEM;
 
 	idx = dmc->opp_count - 1;
 	for (i = 0, freq = ULONG_MAX; i < dmc->opp_count; i++, freq--) {
@@ -362,7 +362,7 @@ static int exynos5_init_freq_table(struct exynos5_dmc *dmc,
 
 		opp = dev_pm_opp_find_freq_floor(dmc->dev, &freq);
 		if (IS_ERR(opp))
-			goto err_opp;
+			return PTR_ERR(opp);
 
 		dmc->opp[idx - i].freq_hz = freq;
 		dmc->opp[idx - i].volt_uv = dev_pm_opp_get_voltage(opp);
@@ -371,11 +371,6 @@ static int exynos5_init_freq_table(struct exynos5_dmc *dmc,
 	}
 
 	return 0;
-
-err_opp:
-	dev_pm_opp_of_remove_table(dmc->dev);
-
-	return -EINVAL;
 }
 
 /**
@@ -1567,8 +1562,6 @@ static int exynos5_dmc_remove(struct platform_device *pdev)
 	clk_disable_unprepare(dmc->mout_bpll);
 	clk_disable_unprepare(dmc->fout_bpll);
 
-	dev_pm_opp_remove_table(dmc->dev);
-
 	return 0;
 }
 
-- 
2.30.2


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 11/15] drm/msm: Convert to use resource-managed OPP API
  2021-03-14 16:34 ` [PATCH v3 11/15] drm/msm: " Dmitry Osipenko
@ 2021-03-15  4:03   ` Viresh Kumar
  0 siblings, 0 replies; 20+ messages in thread
From: Viresh Kumar @ 2021-03-15  4:03 UTC (permalink / raw)
  To: Dmitry Osipenko
  Cc: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li, Daniel Vetter, dri-devel, lima,
	linux-kernel, linux-arm-msm, freedreno, linux-media, linux-pm,
	linux-samsung-soc, linux-mmc, linux-spi, linux-serial,
	linux-tegra

On 14-03-21, 19:34, Dmitry Osipenko wrote:
> From: Yangtao Li <tiny.windzz@gmail.com>
> 
> Use resource-managed OPP API to simplify code.
> 
> Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
> ---
>  drivers/gpu/drm/msm/adreno/a5xx_gpu.c   |  2 +-
>  drivers/gpu/drm/msm/adreno/a6xx_gmu.c   |  2 +-
>  drivers/gpu/drm/msm/adreno/a6xx_gpu.c   | 11 +++------
>  drivers/gpu/drm/msm/adreno/a6xx_gpu.h   |  2 --
>  drivers/gpu/drm/msm/adreno/adreno_gpu.c |  2 +-
>  drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 23 +++++++------------
>  drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h |  2 --
>  drivers/gpu/drm/msm/dp/dp_ctrl.c        | 30 +++++--------------------
>  drivers/gpu/drm/msm/dp/dp_ctrl.h        |  1 -
>  drivers/gpu/drm/msm/dp/dp_display.c     |  5 +----
>  drivers/gpu/drm/msm/dsi/dsi_host.c      | 13 ++++-------
>  11 files changed, 25 insertions(+), 68 deletions(-)

This patch has some updates in linux-next, which I don't have. Please
get this merged with the drm tree over 5.13-rc1 later.

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>

-- 
viresh

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 00/15] Introduce devm_pm_opp_* API
  2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
                   ` (14 preceding siblings ...)
  2021-03-14 16:34 ` [PATCH v3 15/15] memory: samsung: exynos5422-dmc: " Dmitry Osipenko
@ 2021-03-15  4:06 ` Viresh Kumar
  15 siblings, 0 replies; 20+ messages in thread
From: Viresh Kumar @ 2021-03-15  4:06 UTC (permalink / raw)
  To: Dmitry Osipenko
  Cc: Qiang Yu, Rob Clark, Sean Paul, Rob Herring, Tomeu Vizoso,
	Steven Price, Alyssa Rosenzweig, Stanimir Varbanov, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li, Daniel Vetter, dri-devel, lima,
	linux-kernel, linux-arm-msm, freedreno, linux-media, linux-pm,
	linux-samsung-soc, linux-mmc, linux-spi, linux-serial,
	linux-tegra

On 14-03-21, 19:33, Dmitry Osipenko wrote:
> This series adds resource-managed OPP API helpers and makes drivers
> to use them.
> 
> Changelog:
> 
> v3: - Dropped dev_pm_opp_register_notifier().
> 
>     - Changed return type of the devm helpers from opp_table pointer
>       to errno.
> 
>     - Corrected drm/msm patch which missed to remove opp_put_supported_hw()
>       from a6xx_gpu. Note that the a5xx_gpu driver was missing the
>       opp_put_supported_hw() at all.
> 
>     - Corrected spelling of the ack from Mark Brown.

Applied all patches except 11/15.

Thanks.

-- 
viresh

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 14/15] media: venus: Convert to use resource-managed OPP API
  2021-03-14 16:34 ` [PATCH v3 14/15] media: venus: " Dmitry Osipenko
@ 2021-03-25  8:13   ` Stanimir Varbanov
  2021-03-25  9:09     ` Viresh Kumar
  0 siblings, 1 reply; 20+ messages in thread
From: Stanimir Varbanov @ 2021-03-25  8:13 UTC (permalink / raw)
  To: Dmitry Osipenko, Qiang Yu, Rob Clark, Sean Paul, Rob Herring,
	Tomeu Vizoso, Steven Price, Alyssa Rosenzweig, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li
  Cc: Daniel Vetter, dri-devel, lima, linux-kernel, linux-arm-msm,
	freedreno, linux-media, linux-pm, linux-samsung-soc, linux-mmc,
	linux-spi, linux-serial, linux-tegra

Hi,

On 3/14/21 6:34 PM, Dmitry Osipenko wrote:
> From: Yangtao Li <tiny.windzz@gmail.com>
> 
> Use resource-managed OPP API to simplify code.
> 
> Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
> ---
>  drivers/media/platform/qcom/venus/core.h      |  1 -
>  .../media/platform/qcom/venus/pm_helpers.c    | 35 +++++--------------
>  2 files changed, 8 insertions(+), 28 deletions(-)


I'll take this through media-tree once OPP API changes are merged.

-- 
regards,
Stan

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 14/15] media: venus: Convert to use resource-managed OPP API
  2021-03-25  8:13   ` Stanimir Varbanov
@ 2021-03-25  9:09     ` Viresh Kumar
  0 siblings, 0 replies; 20+ messages in thread
From: Viresh Kumar @ 2021-03-25  9:09 UTC (permalink / raw)
  To: Stanimir Varbanov
  Cc: Dmitry Osipenko, Qiang Yu, Rob Clark, Sean Paul, Rob Herring,
	Tomeu Vizoso, Steven Price, Alyssa Rosenzweig, Andy Gross,
	Bjorn Andersson, Mauro Carvalho Chehab, Lukasz Luba,
	Krzysztof Kozlowski, Adrian Hunter, Ulf Hansson, Viresh Kumar,
	Nishanth Menon, Stephen Boyd, Mark Brown, Greg Kroah-Hartman,
	Jiri Slaby, Yangtao Li, Daniel Vetter, dri-devel, lima,
	linux-kernel, linux-arm-msm, freedreno, linux-media, linux-pm,
	linux-samsung-soc, linux-mmc, linux-spi, linux-serial,
	linux-tegra

On 25-03-21, 10:13, Stanimir Varbanov wrote:
> Hi,
> 
> On 3/14/21 6:34 PM, Dmitry Osipenko wrote:
> > From: Yangtao Li <tiny.windzz@gmail.com>
> > 
> > Use resource-managed OPP API to simplify code.
> > 
> > Signed-off-by: Yangtao Li <tiny.windzz@gmail.com>
> > Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
> > ---
> >  drivers/media/platform/qcom/venus/core.h      |  1 -
> >  .../media/platform/qcom/venus/pm_helpers.c    | 35 +++++--------------
> >  2 files changed, 8 insertions(+), 28 deletions(-)
> 
> 
> I'll take this through media-tree once OPP API changes are merged.

Okay, dropped from my tree.

Thanks.

-- 
viresh

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, back to index

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-14 16:33 [PATCH v3 00/15] Introduce devm_pm_opp_* API Dmitry Osipenko
2021-03-14 16:33 ` [PATCH v3 01/15] opp: Add devres wrapper for dev_pm_opp_set_clkname Dmitry Osipenko
2021-03-14 16:33 ` [PATCH v3 02/15] opp: Add devres wrapper for dev_pm_opp_set_regulators Dmitry Osipenko
2021-03-14 16:33 ` [PATCH v3 03/15] opp: Add devres wrapper for dev_pm_opp_set_supported_hw Dmitry Osipenko
2021-03-14 16:33 ` [PATCH v3 04/15] opp: Add devres wrapper for dev_pm_opp_of_add_table Dmitry Osipenko
2021-03-14 16:33 ` [PATCH v3 05/15] opp: Change return type of devm_pm_opp_register_set_opp_helper() Dmitry Osipenko
2021-03-14 16:33 ` [PATCH v3 06/15] opp: Change return type of devm_pm_opp_attach_genpd() Dmitry Osipenko
2021-03-14 16:34 ` [PATCH v3 07/15] serial: qcom_geni_serial: Convert to use resource-managed OPP API Dmitry Osipenko
2021-03-14 16:34 ` [PATCH v3 08/15] spi: spi-geni-qcom: " Dmitry Osipenko
2021-03-14 16:34 ` [PATCH v3 09/15] spi: spi-qcom-qspi: " Dmitry Osipenko
2021-03-14 16:34 ` [PATCH v3 10/15] mmc: sdhci-msm: " Dmitry Osipenko
2021-03-14 16:34 ` [PATCH v3 11/15] drm/msm: " Dmitry Osipenko
2021-03-15  4:03   ` Viresh Kumar
2021-03-14 16:34 ` [PATCH v3 12/15] drm/lima: " Dmitry Osipenko
2021-03-14 16:34 ` [PATCH v3 13/15] drm/panfrost: " Dmitry Osipenko
2021-03-14 16:34 ` [PATCH v3 14/15] media: venus: " Dmitry Osipenko
2021-03-25  8:13   ` Stanimir Varbanov
2021-03-25  9:09     ` Viresh Kumar
2021-03-14 16:34 ` [PATCH v3 15/15] memory: samsung: exynos5422-dmc: " Dmitry Osipenko
2021-03-15  4:06 ` [PATCH v3 00/15] Introduce devm_pm_opp_* API Viresh Kumar

Linux-SPI Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-spi/0 linux-spi/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-spi linux-spi/ https://lore.kernel.org/linux-spi \
		linux-spi@vger.kernel.org
	public-inbox-index linux-spi

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-spi


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git