All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] nvmem: patches (set 1) for 5.15
@ 2021-08-06  8:59 Srinivas Kandagatla
  2021-08-06  8:59 ` [PATCH 1/4] dt-bindings: nvmem: qfprom: Add optional power-domains property Srinivas Kandagatla
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Srinivas Kandagatla @ 2021-08-06  8:59 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Srinivas Kandagatla

Hi Greg,

Here are some nvmem patches for 5.14 which includes
- these are mostly qfprom provider powerdomain support patches.
- fix in core for incorrect error handing in nvmem_register path

Can you please queue them up for 5.15.

thanks for you help,
srini

Rajendra Nayak (3):
  dt-bindings: nvmem: qfprom: Add optional power-domains property
  nvmem: qfprom: Fix up qfprom_disable_fuse_blowing() ordering
  nvmem: qfprom: sc7280: Handle the additional power-domains vote

Srinivas Kandagatla (1):
  nvmem: core: fix error handling while validating keepout regions

 .../bindings/nvmem/qcom,qfprom.yaml           |  3 ++
 drivers/nvmem/core.c                          |  7 +++--
 drivers/nvmem/qfprom.c                        | 31 +++++++++++++++++--
 3 files changed, 36 insertions(+), 5 deletions(-)

-- 
2.21.0


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

* [PATCH 1/4] dt-bindings: nvmem: qfprom: Add optional power-domains property
  2021-08-06  8:59 [PATCH 0/4] nvmem: patches (set 1) for 5.15 Srinivas Kandagatla
@ 2021-08-06  8:59 ` Srinivas Kandagatla
  2021-08-06  8:59 ` [PATCH 2/4] nvmem: qfprom: Fix up qfprom_disable_fuse_blowing() ordering Srinivas Kandagatla
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Srinivas Kandagatla @ 2021-08-06  8:59 UTC (permalink / raw)
  To: gregkh
  Cc: linux-kernel, Rajendra Nayak, Douglas Anderson, Rob Herring,
	Srinivas Kandagatla

From: Rajendra Nayak <rnayak@codeaurora.org>

qfprom devices on some SoCs need to vote on the performance state
of a power-domain, so add the power-domains optional property to the
bindings

Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml b/Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml
index 861b205016b1..dede8892ee01 100644
--- a/Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml
+++ b/Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml
@@ -51,6 +51,9 @@ properties:
   vcc-supply:
     description: Our power supply.
 
+  power-domains:
+    maxItems: 1
+
   # Needed if any child nodes are present.
   "#address-cells":
     const: 1
-- 
2.21.0


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

* [PATCH 2/4] nvmem: qfprom: Fix up qfprom_disable_fuse_blowing() ordering
  2021-08-06  8:59 [PATCH 0/4] nvmem: patches (set 1) for 5.15 Srinivas Kandagatla
  2021-08-06  8:59 ` [PATCH 1/4] dt-bindings: nvmem: qfprom: Add optional power-domains property Srinivas Kandagatla
@ 2021-08-06  8:59 ` Srinivas Kandagatla
  2021-08-06  8:59 ` [PATCH 3/4] nvmem: qfprom: sc7280: Handle the additional power-domains vote Srinivas Kandagatla
  2021-08-06  8:59 ` [PATCH 4/4] nvmem: core: fix error handling while validating keepout regions Srinivas Kandagatla
  3 siblings, 0 replies; 5+ messages in thread
From: Srinivas Kandagatla @ 2021-08-06  8:59 UTC (permalink / raw)
  To: gregkh
  Cc: linux-kernel, Rajendra Nayak, Douglas Anderson, Srinivas Kandagatla

From: Rajendra Nayak <rnayak@codeaurora.org>

qfprom_disable_fuse_blowing() disables a bunch of resources,
and then does a few register writes in the 'conf' address
space.
It works perhaps because the resources are needed only for the
'raw' register space writes, and that the 'conf' space allows
read/writes regardless.
However that makes the code look confusing, so just move the
register writes before turning off the resources in the
function.

Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/nvmem/qfprom.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/nvmem/qfprom.c b/drivers/nvmem/qfprom.c
index 81fbad5e939d..b0ca4c626466 100644
--- a/drivers/nvmem/qfprom.c
+++ b/drivers/nvmem/qfprom.c
@@ -139,6 +139,9 @@ static void qfprom_disable_fuse_blowing(const struct qfprom_priv *priv,
 {
 	int ret;
 
+	writel(old->timer_val, priv->qfpconf + QFPROM_BLOW_TIMER_OFFSET);
+	writel(old->accel_val, priv->qfpconf + QFPROM_ACCEL_OFFSET);
+
 	/*
 	 * This may be a shared rail and may be able to run at a lower rate
 	 * when we're not blowing fuses.  At the moment, the regulator framework
@@ -159,9 +162,6 @@ static void qfprom_disable_fuse_blowing(const struct qfprom_priv *priv,
 			 "Failed to set clock rate for disable (ignoring)\n");
 
 	clk_disable_unprepare(priv->secclk);
-
-	writel(old->timer_val, priv->qfpconf + QFPROM_BLOW_TIMER_OFFSET);
-	writel(old->accel_val, priv->qfpconf + QFPROM_ACCEL_OFFSET);
 }
 
 /**
-- 
2.21.0


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

* [PATCH 3/4] nvmem: qfprom: sc7280: Handle the additional power-domains vote
  2021-08-06  8:59 [PATCH 0/4] nvmem: patches (set 1) for 5.15 Srinivas Kandagatla
  2021-08-06  8:59 ` [PATCH 1/4] dt-bindings: nvmem: qfprom: Add optional power-domains property Srinivas Kandagatla
  2021-08-06  8:59 ` [PATCH 2/4] nvmem: qfprom: Fix up qfprom_disable_fuse_blowing() ordering Srinivas Kandagatla
@ 2021-08-06  8:59 ` Srinivas Kandagatla
  2021-08-06  8:59 ` [PATCH 4/4] nvmem: core: fix error handling while validating keepout regions Srinivas Kandagatla
  3 siblings, 0 replies; 5+ messages in thread
From: Srinivas Kandagatla @ 2021-08-06  8:59 UTC (permalink / raw)
  To: gregkh
  Cc: linux-kernel, Rajendra Nayak, Douglas Anderson, Srinivas Kandagatla

From: Rajendra Nayak <rnayak@codeaurora.org>

On sc7280, to reliably blow fuses, we need an additional vote
on max performance state of 'MX' power-domain.
Add support for power-domain performance state voting in the
driver.

Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/nvmem/qfprom.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/drivers/nvmem/qfprom.c b/drivers/nvmem/qfprom.c
index b0ca4c626466..c500d6235bf6 100644
--- a/drivers/nvmem/qfprom.c
+++ b/drivers/nvmem/qfprom.c
@@ -12,6 +12,8 @@
 #include <linux/mod_devicetable.h>
 #include <linux/nvmem-provider.h>
 #include <linux/platform_device.h>
+#include <linux/pm_domain.h>
+#include <linux/pm_runtime.h>
 #include <linux/property.h>
 #include <linux/regulator/consumer.h>
 
@@ -142,6 +144,9 @@ static void qfprom_disable_fuse_blowing(const struct qfprom_priv *priv,
 	writel(old->timer_val, priv->qfpconf + QFPROM_BLOW_TIMER_OFFSET);
 	writel(old->accel_val, priv->qfpconf + QFPROM_ACCEL_OFFSET);
 
+	dev_pm_genpd_set_performance_state(priv->dev, 0);
+	pm_runtime_put(priv->dev);
+
 	/*
 	 * This may be a shared rail and may be able to run at a lower rate
 	 * when we're not blowing fuses.  At the moment, the regulator framework
@@ -212,6 +217,14 @@ static int qfprom_enable_fuse_blowing(const struct qfprom_priv *priv,
 		goto err_clk_rate_set;
 	}
 
+	ret = pm_runtime_get_sync(priv->dev);
+	if (ret < 0) {
+		pm_runtime_put_noidle(priv->dev);
+		dev_err(priv->dev, "Failed to enable power-domain\n");
+		goto err_reg_enable;
+	}
+	dev_pm_genpd_set_performance_state(priv->dev, INT_MAX);
+
 	old->timer_val = readl(priv->qfpconf + QFPROM_BLOW_TIMER_OFFSET);
 	old->accel_val = readl(priv->qfpconf + QFPROM_ACCEL_OFFSET);
 	writel(priv->soc_data->qfprom_blow_timer_value,
@@ -221,6 +234,8 @@ static int qfprom_enable_fuse_blowing(const struct qfprom_priv *priv,
 
 	return 0;
 
+err_reg_enable:
+	regulator_disable(priv->vcc);
 err_clk_rate_set:
 	clk_set_rate(priv->secclk, old->clk_rate);
 err_clk_prepared:
@@ -320,6 +335,11 @@ static int qfprom_reg_read(void *context,
 	return 0;
 }
 
+static void qfprom_runtime_disable(void *data)
+{
+	pm_runtime_disable(data);
+}
+
 static const struct qfprom_soc_data qfprom_7_8_data = {
 	.accel_value = 0xD10,
 	.qfprom_blow_timer_value = 25,
@@ -420,6 +440,11 @@ static int qfprom_probe(struct platform_device *pdev)
 			econfig.reg_write = qfprom_reg_write;
 	}
 
+	pm_runtime_enable(dev);
+	ret = devm_add_action_or_reset(dev, qfprom_runtime_disable, dev);
+	if (ret)
+		return ret;
+
 	nvmem = devm_nvmem_register(dev, &econfig);
 
 	return PTR_ERR_OR_ZERO(nvmem);
-- 
2.21.0


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

* [PATCH 4/4] nvmem: core: fix error handling while validating keepout regions
  2021-08-06  8:59 [PATCH 0/4] nvmem: patches (set 1) for 5.15 Srinivas Kandagatla
                   ` (2 preceding siblings ...)
  2021-08-06  8:59 ` [PATCH 3/4] nvmem: qfprom: sc7280: Handle the additional power-domains vote Srinivas Kandagatla
@ 2021-08-06  8:59 ` Srinivas Kandagatla
  3 siblings, 0 replies; 5+ messages in thread
From: Srinivas Kandagatla @ 2021-08-06  8:59 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, Srinivas Kandagatla, stable

Current error path on failure of validating keepout regions is calling
put_device, eventhough the device is not even registered at that point.

Fix this by adding proper error handling of freeing ida and nvmem.

Fixes: fd3bb8f54a88 ("nvmem: core: Add support for keepout regions")
Cc: <stable@vger.kernel.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
---
 drivers/nvmem/core.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index b3bc30a04ed7..3d87fadaa160 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -824,8 +824,11 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
 
 	if (nvmem->nkeepout) {
 		rval = nvmem_validate_keepouts(nvmem);
-		if (rval)
-			goto err_put_device;
+		if (rval) {
+			ida_free(&nvmem_ida, nvmem->id);
+			kfree(nvmem);
+			return ERR_PTR(rval);
+		}
 	}
 
 	dev_dbg(&nvmem->dev, "Registering nvmem device %s\n", config->name);
-- 
2.21.0


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

end of thread, other threads:[~2021-08-06  9:00 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-06  8:59 [PATCH 0/4] nvmem: patches (set 1) for 5.15 Srinivas Kandagatla
2021-08-06  8:59 ` [PATCH 1/4] dt-bindings: nvmem: qfprom: Add optional power-domains property Srinivas Kandagatla
2021-08-06  8:59 ` [PATCH 2/4] nvmem: qfprom: Fix up qfprom_disable_fuse_blowing() ordering Srinivas Kandagatla
2021-08-06  8:59 ` [PATCH 3/4] nvmem: qfprom: sc7280: Handle the additional power-domains vote Srinivas Kandagatla
2021-08-06  8:59 ` [PATCH 4/4] nvmem: core: fix error handling while validating keepout regions Srinivas Kandagatla

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.