linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/5] Add support for tsens controller reinit via trustzone
@ 2022-07-24 12:24 Bhupesh Sharma
  2022-07-24 12:24 ` [PATCH v2 1/5] firmware: qcom: scm: Add support for tsens reinit workaround Bhupesh Sharma
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Bhupesh Sharma @ 2022-07-24 12:24 UTC (permalink / raw)
  To: linux-pm
  Cc: bhupesh.sharma, bhupesh.linux, linux-kernel, bjorn.andersson,
	konrad.dybcio, linux-arm-msm, daniel.lezcano, robh+dt, rafael,
	Amit Kucheria, Thara Gopinath

Changes since v1:
-----------------
- v1 can be viewed here: https://lore.kernel.org/linux-arm-msm/20220701145815.2037993-1-bhupesh.sharma@linaro.org/
- Addressed several comments from Bjorn regarding locking, serialization
  etc received on v1.
- Addressed Konrad's concerns about the tsens controller found on sm6375
  SoC which seems to start in a bad state or is disabled when entering
  the linux world.
- This series would depend on sm6375 tsens controller changes being
  added by Konrad. It is based on linux-next (master branch) tip.

Some versions of Qualcomm tsens controller might enter a
'bad state' causing sensor temperatures/interrupts status
to be in an 'invalid' state.

It is recommended to re-initialize the tsens controller
via trustzone (secure registers) using scm call(s) when that
happens.

This patchset adds the support for the same.

Cc: bjorn.andersson@linaro.org
Cc: Amit Kucheria <amitk@kernel.org>
Cc: Thara Gopinath <thara.gopinath@gmail.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-arm-msm@vger.kernel.org

Bhupesh Sharma (5):
  firmware: qcom: scm: Add support for tsens reinit workaround
  thermal: qcom: tsens: Add hooks for supplying platform specific reinit
    quirks
  thermal: qcom: tsens: Add driver support for re-initialization quirk
  thermal: qcom: tsens: Add reinit quirk support for tsens v2
    controllers
  thermal: qcom: tsens: Add reinit quirk support for sm6375 controller

 drivers/firmware/qcom_scm.c     |  15 +++
 drivers/firmware/qcom_scm.h     |   4 +
 drivers/thermal/qcom/tsens-v2.c |  15 +++
 drivers/thermal/qcom/tsens.c    | 213 ++++++++++++++++++++++++++++++++
 drivers/thermal/qcom/tsens.h    |  18 ++-
 include/linux/qcom_scm.h        |   2 +
 6 files changed, 266 insertions(+), 1 deletion(-)

-- 
2.35.3


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

* [PATCH v2 1/5] firmware: qcom: scm: Add support for tsens reinit workaround
  2022-07-24 12:24 [PATCH v2 0/5] Add support for tsens controller reinit via trustzone Bhupesh Sharma
@ 2022-07-24 12:24 ` Bhupesh Sharma
  2022-07-24 12:24 ` [PATCH v2 2/5] thermal: qcom: tsens: Add hooks for supplying platform specific reinit quirks Bhupesh Sharma
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Bhupesh Sharma @ 2022-07-24 12:24 UTC (permalink / raw)
  To: linux-pm
  Cc: bhupesh.sharma, bhupesh.linux, linux-kernel, bjorn.andersson,
	konrad.dybcio, linux-arm-msm, daniel.lezcano, robh+dt, rafael,
	Amit Kucheria, Thara Gopinath

Some versions of Qualcomm tsens controller might enter a
'bad state' while running stability tests causing sensor
temperatures/interrupts status to be in an 'invalid' state.

It is recommended to re-initialize the tsens controller
via trustzone (secure registers) using scm call(s) when that
happens.

Add support for the same in the qcom_scm driver.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Amit Kucheria <amitk@kernel.org>
Cc: Thara Gopinath <thara.gopinath@gmail.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-arm-msm@vger.kernel.org
Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
---
 drivers/firmware/qcom_scm.c | 15 +++++++++++++++
 drivers/firmware/qcom_scm.h |  4 ++++
 include/linux/qcom_scm.h    |  2 ++
 3 files changed, 21 insertions(+)

diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index cdbfe54c8146..93adcc046a62 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -858,6 +858,21 @@ int qcom_scm_mem_protect_video_var(u32 cp_start, u32 cp_size,
 }
 EXPORT_SYMBOL(qcom_scm_mem_protect_video_var);
 
+int qcom_scm_tsens_reinit(void)
+{
+	int ret;
+	const struct qcom_scm_desc desc = {
+		.svc = QCOM_SCM_SVC_TSENS,
+		.cmd = QCOM_SCM_TSENS_INIT_ID,
+	};
+	struct qcom_scm_res res;
+
+	ret = qcom_scm_call(__scm->dev, &desc, &res);
+
+	return ret ? : res.result[0];
+}
+EXPORT_SYMBOL(qcom_scm_tsens_reinit);
+
 static int __qcom_scm_assign_mem(struct device *dev, phys_addr_t mem_region,
 				 size_t mem_sz, phys_addr_t src, size_t src_sz,
 				 phys_addr_t dest, size_t dest_sz)
diff --git a/drivers/firmware/qcom_scm.h b/drivers/firmware/qcom_scm.h
index 0d51eef2472f..495fa00230c7 100644
--- a/drivers/firmware/qcom_scm.h
+++ b/drivers/firmware/qcom_scm.h
@@ -94,6 +94,10 @@ extern int scm_legacy_call(struct device *dev, const struct qcom_scm_desc *desc,
 #define QCOM_SCM_PIL_PAS_IS_SUPPORTED	0x07
 #define QCOM_SCM_PIL_PAS_MSS_RESET	0x0a
 
+/* TSENS Services and Function IDs */
+#define QCOM_SCM_SVC_TSENS		0x1E
+#define QCOM_SCM_TSENS_INIT_ID		0x5
+
 #define QCOM_SCM_SVC_IO			0x05
 #define QCOM_SCM_IO_READ		0x01
 #define QCOM_SCM_IO_WRITE		0x02
diff --git a/include/linux/qcom_scm.h b/include/linux/qcom_scm.h
index f8335644a01a..5c37e1658cef 100644
--- a/include/linux/qcom_scm.h
+++ b/include/linux/qcom_scm.h
@@ -124,4 +124,6 @@ extern int qcom_scm_lmh_dcvsh(u32 payload_fn, u32 payload_reg, u32 payload_val,
 extern int qcom_scm_lmh_profile_change(u32 profile_id);
 extern bool qcom_scm_lmh_dcvsh_available(void);
 
+extern int qcom_scm_tsens_reinit(void);
+
 #endif
-- 
2.35.3


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

* [PATCH v2 2/5] thermal: qcom: tsens: Add hooks for supplying platform specific reinit quirks
  2022-07-24 12:24 [PATCH v2 0/5] Add support for tsens controller reinit via trustzone Bhupesh Sharma
  2022-07-24 12:24 ` [PATCH v2 1/5] firmware: qcom: scm: Add support for tsens reinit workaround Bhupesh Sharma
@ 2022-07-24 12:24 ` Bhupesh Sharma
  2022-07-24 12:24 ` [PATCH v2 3/5] thermal: qcom: tsens: Add driver support for re-initialization quirk Bhupesh Sharma
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 12+ messages in thread
From: Bhupesh Sharma @ 2022-07-24 12:24 UTC (permalink / raw)
  To: linux-pm
  Cc: bhupesh.sharma, bhupesh.linux, linux-kernel, bjorn.andersson,
	konrad.dybcio, linux-arm-msm, daniel.lezcano, robh+dt, rafael,
	Amit Kucheria, Thara Gopinath

Add hooks inside platform specific data which can be
used by Qualcomm tsens controller(s) which might need
reinitialization via trustzone.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Amit Kucheria <amitk@kernel.org>
Cc: Thara Gopinath <thara.gopinath@gmail.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-arm-msm@vger.kernel.org
Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
---
 drivers/thermal/qcom/tsens.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h
index ba05c8233356..92787017c6ab 100644
--- a/drivers/thermal/qcom/tsens.h
+++ b/drivers/thermal/qcom/tsens.h
@@ -513,6 +513,7 @@ struct tsens_features {
  * @num_sensors: Number of sensors supported by platform
  * @ops: operations the tsens instance supports
  * @hw_ids: Subset of sensors ids supported by platform, if not the first n
+ * @needs_reinit_wa: tsens controller might need reinit via trustzone
  * @feat: features of the IP
  * @fields: bitfield locations
  */
@@ -520,6 +521,7 @@ struct tsens_plat_data {
 	const u32		num_sensors;
 	const struct tsens_ops	*ops;
 	unsigned int		*hw_ids;
+	bool			needs_reinit_wa;
 	struct tsens_features	*feat;
 	const struct reg_field		*fields;
 };
@@ -542,6 +544,7 @@ struct tsens_context {
  * @srot_map: pointer to SROT register address space
  * @tm_offset: deal with old device trees that don't address TM and SROT
  *             address space separately
+ * @needs_reinit_wa: tsens controller might need reinit via trustzone
  * @ul_lock: lock while processing upper/lower threshold interrupts
  * @crit_lock: lock while processing critical threshold interrupts
  * @rf: array of regmap_fields used to store value of the field
@@ -559,6 +562,7 @@ struct tsens_priv {
 	struct regmap			*tm_map;
 	struct regmap			*srot_map;
 	u32				tm_offset;
+	bool				needs_reinit_wa;
 
 	/* lock for upper/lower threshold interrupts */
 	spinlock_t			ul_lock;
-- 
2.35.3


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

* [PATCH v2 3/5] thermal: qcom: tsens: Add driver support for re-initialization quirk
  2022-07-24 12:24 [PATCH v2 0/5] Add support for tsens controller reinit via trustzone Bhupesh Sharma
  2022-07-24 12:24 ` [PATCH v2 1/5] firmware: qcom: scm: Add support for tsens reinit workaround Bhupesh Sharma
  2022-07-24 12:24 ` [PATCH v2 2/5] thermal: qcom: tsens: Add hooks for supplying platform specific reinit quirks Bhupesh Sharma
@ 2022-07-24 12:24 ` Bhupesh Sharma
  2022-07-25 23:10   ` kernel test robot
  2022-07-24 12:24 ` [PATCH v2 4/5] thermal: qcom: tsens: Add reinit quirk support for tsens v2 controllers Bhupesh Sharma
  2022-07-24 12:24 ` [PATCH v2 5/5] thermal: qcom: tsens: Add reinit quirk support for sm6375 controller Bhupesh Sharma
  4 siblings, 1 reply; 12+ messages in thread
From: Bhupesh Sharma @ 2022-07-24 12:24 UTC (permalink / raw)
  To: linux-pm
  Cc: bhupesh.sharma, bhupesh.linux, linux-kernel, bjorn.andersson,
	konrad.dybcio, linux-arm-msm, daniel.lezcano, robh+dt, rafael,
	Amit Kucheria, Thara Gopinath

Since for some Qualcomm tsens controllers, its suggested to
monitor the controller health periodically and in case an
issue is detected, to re-initialize the tsens controller
via trustzone, add the support for the same in the
qcom tsens driver.

Note that once the tsens controller is reset using scm call,
all SROT and TM region registers will enter the reset mode.

While all the SROT registers will be re-programmed and
re-enabled in trustzone prior to the scm call exit, the TM
region registers will not re-initialized in trustzone and thus
need to be handled by the tsens driver.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Amit Kucheria <amitk@kernel.org>
Cc: Thara Gopinath <thara.gopinath@gmail.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-arm-msm@vger.kernel.org
Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
---
 drivers/thermal/qcom/tsens-v2.c |   3 +
 drivers/thermal/qcom/tsens.c    | 197 ++++++++++++++++++++++++++++++++
 drivers/thermal/qcom/tsens.h    |  12 ++
 3 files changed, 212 insertions(+)

diff --git a/drivers/thermal/qcom/tsens-v2.c b/drivers/thermal/qcom/tsens-v2.c
index b293ed32174b..f521e4479cc5 100644
--- a/drivers/thermal/qcom/tsens-v2.c
+++ b/drivers/thermal/qcom/tsens-v2.c
@@ -88,6 +88,9 @@ static const struct reg_field tsens_v2_regfields[MAX_REGFIELDS] = {
 
 	/* TRDY: 1=ready, 0=in progress */
 	[TRDY] = REG_FIELD(TM_TRDY_OFF, 0, 0),
+
+	/* FIRST_ROUND_COMPLETE: 1=complete, 0=not complete */
+	[FIRST_ROUND_COMPLETE] = REG_FIELD(TM_TRDY_OFF, 3, 3),
 };
 
 static const struct tsens_ops ops_generic_v2 = {
diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
index e49f58e83513..c2d085fb5447 100644
--- a/drivers/thermal/qcom/tsens.c
+++ b/drivers/thermal/qcom/tsens.c
@@ -7,6 +7,7 @@
 #include <linux/debugfs.h>
 #include <linux/err.h>
 #include <linux/io.h>
+#include <linux/qcom_scm.h>
 #include <linux/module.h>
 #include <linux/nvmem-consumer.h>
 #include <linux/of.h>
@@ -594,6 +595,113 @@ static void tsens_disable_irq(struct tsens_priv *priv)
 	regmap_field_write(priv->rf[INT_EN], 0);
 }
 
+static int tsens_reenable_hw_after_scm(struct tsens_priv *priv)
+{
+	/*
+	 * Re-enable watchdog, unmask the bark and
+	 * disable cycle completion monitoring.
+	 */
+	regmap_field_write(priv->rf[WDOG_BARK_CLEAR], 1);
+	regmap_field_write(priv->rf[WDOG_BARK_CLEAR], 0);
+	regmap_field_write(priv->rf[WDOG_BARK_MASK], 0);
+	regmap_field_write(priv->rf[CC_MON_MASK], 1);
+
+	/* Re-enable interrupts */
+	tsens_enable_irq(priv);
+
+	return 0;
+}
+
+static int tsens_health_check_and_reinit(struct tsens_priv *priv,
+					 int hw_id)
+{
+	int ret, trdy, first_round, sw_reg;
+	unsigned long timeout;
+
+	/* First check if TRDY is SET */
+	ret = regmap_field_read(priv->rf[TRDY], &trdy);
+	if (ret)
+		goto err;
+
+	if (!trdy) {
+		ret = regmap_field_read(priv->rf[FIRST_ROUND_COMPLETE], &first_round);
+		if (ret)
+			goto err;
+
+		if (!first_round) {
+			WARN_ON(!mutex_is_locked(&priv->reinit_mutex));
+
+			/* Wait for 2 ms for tsens controller to recover */
+			timeout = jiffies + msecs_to_jiffies(RESET_TIMEOUT_MS);
+			do {
+				ret = regmap_field_read(priv->rf[FIRST_ROUND_COMPLETE],
+						&first_round);
+				if (ret)
+					goto err;
+
+				if (first_round) {
+					dev_dbg(priv->dev, "tsens controller recovered\n");
+					return 0; /* success */
+				}
+			} while (time_before(jiffies, timeout));
+
+			spin_lock(&priv->reinit_lock);
+
+			/*
+			 * Invoke SCM call only if SW register write is
+			 * reflecting in controller. Try it for 2 ms.
+			 * In case that fails mark the tsens controller
+			 * as unrecoverable.
+			 */
+			timeout = jiffies + msecs_to_jiffies(RESET_TIMEOUT_MS);
+			do {
+				ret = regmap_field_write(priv->rf[INT_EN], CRITICAL_INT_EN);
+				if (ret)
+					goto err;
+
+				ret = regmap_field_read(priv->rf[INT_EN], &sw_reg);
+				if (ret)
+					goto err;
+			} while ((sw_reg & CRITICAL_INT_EN) && (time_before(jiffies, timeout)));
+
+			if (!(sw_reg & CRITICAL_INT_EN)) {
+				ret = -ENOTRECOVERABLE;
+				goto err;
+			}
+
+			/*
+			 * tsens controller did not recover,
+			 * proceed with SCM call to re-init it.
+			 */
+			ret = qcom_scm_tsens_reinit();
+			if (ret) {
+				dev_err(priv->dev, "tsens reinit scm call failed (%d)\n", ret);
+				goto err;
+			}
+
+			/*
+			 * After the SCM call, we need to re-enable
+			 * the interrupts and also set active threshold
+			 * for each sensor.
+			 */
+			ret = tsens_reenable_hw_after_scm(priv);
+			if (ret) {
+				dev_err(priv->dev,
+					"tsens re-enable after scm call failed (%d)\n", ret);
+				goto err;
+			}
+
+			/* Notify reinit wa worker */
+			queue_work(system_highpri_wq, &priv->reinit_wa_notify);
+
+			spin_unlock(&priv->reinit_lock);
+		}
+	}
+
+err:
+	return ret;
+}
+
 int get_temp_tsens_valid(const struct tsens_sensor *s, int *temp)
 {
 	struct tsens_priv *priv = s->priv;
@@ -607,6 +715,21 @@ int get_temp_tsens_valid(const struct tsens_sensor *s, int *temp)
 	if (tsens_version(priv) == VER_0)
 		goto get_temp;
 
+	/*
+	 * For some tsens controllers, its suggested to
+	 * monitor the controller health periodically
+	 * and in case an issue is detected to reinit
+	 * tsens controller via trustzone.
+	 */
+	if (priv->needs_reinit_wa) {
+		mutex_lock(&priv->reinit_mutex);
+		ret = tsens_health_check_and_reinit(priv, hw_id);
+		mutex_unlock(&priv->reinit_mutex);
+
+		if (ret)
+			return ret;
+	}
+
 	/* Valid bit is 0 for 6 AHB clock cycles.
 	 * At 19.2MHz, 1 AHB clock is ~60ns.
 	 * We should enter this loop very, very rarely.
@@ -739,6 +862,40 @@ static const struct regmap_config tsens_srot_config = {
 	.reg_stride	= 4,
 };
 
+static void __tsens_reinit_worker(struct tsens_priv *priv)
+{
+	int ret, temp;
+	unsigned int i;
+	struct tsens_irq_data d;
+
+	for (i = 0; i < priv->num_sensors; i++) {
+		const struct tsens_sensor *s = &priv->sensor[i];
+		u32 hw_id = s->hw_id;
+
+		if (!s->tzd)
+			continue;
+		if (!tsens_threshold_violated(priv, hw_id, &d))
+			continue;
+
+		ret = get_temp_tsens_valid(s, &temp);
+		if (ret) {
+			dev_err(priv->dev, "[%u] error reading sensor during reinit\n", hw_id);
+			continue;
+		}
+
+		tsens_read_irq_state(priv, hw_id, s, &d);
+
+		if ((d.up_thresh < temp) || (d.low_thresh > temp)) {
+			dev_dbg(priv->dev, "[%u] TZ update trigger during reinit (%d mC)\n",
+				hw_id, temp);
+			thermal_zone_device_update(s->tzd, THERMAL_EVENT_UNSPECIFIED);
+		} else {
+			dev_dbg(priv->dev, "[%u] no violation during reinit (%d)\n",
+				hw_id, temp);
+		}
+	}
+}
+
 int __init init_common(struct tsens_priv *priv)
 {
 	void __iomem *tm_base, *srot_base;
@@ -860,6 +1017,14 @@ int __init init_common(struct tsens_priv *priv)
 		goto err_put_device;
 	}
 
+	priv->rf[FIRST_ROUND_COMPLETE] = devm_regmap_field_alloc(dev,
+								priv->tm_map,
+								priv->fields[FIRST_ROUND_COMPLETE]);
+	if (IS_ERR(priv->rf[FIRST_ROUND_COMPLETE])) {
+		ret = PTR_ERR(priv->rf[FIRST_ROUND_COMPLETE]);
+		goto err_put_device;
+	}
+
 	/* This loop might need changes if enum regfield_ids is reordered */
 	for (j = LAST_TEMP_0; j <= UP_THRESH_15; j += 16) {
 		for (i = 0; i < priv->feat->max_sensors; i++) {
@@ -1082,6 +1247,14 @@ static int tsens_register(struct tsens_priv *priv)
 	return ret;
 }
 
+static void tsens_reinit_worker_notify(struct work_struct *work)
+{
+	struct tsens_priv *priv = container_of(work, struct tsens_priv,
+					       reinit_wa_notify);
+
+	__tsens_reinit_worker(priv);
+}
+
 static int tsens_probe(struct platform_device *pdev)
 {
 	int ret, i;
@@ -1123,6 +1296,11 @@ static int tsens_probe(struct platform_device *pdev)
 
 	priv->dev = dev;
 	priv->num_sensors = num_sensors;
+	priv->needs_reinit_wa = data->needs_reinit_wa;
+
+	if (priv->needs_reinit_wa && !qcom_scm_is_available())
+		return -EPROBE_DEFER;
+
 	priv->ops = data->ops;
 	for (i = 0;  i < priv->num_sensors; i++) {
 		if (data->hw_ids)
@@ -1138,6 +1316,25 @@ static int tsens_probe(struct platform_device *pdev)
 	if (!priv->ops || !priv->ops->init || !priv->ops->get_temp)
 		return -EINVAL;
 
+	/*
+	 * Reinitialization workaround is currently supported only for
+	 * tsens controller versions v2.
+	 *
+	 * If incorrect platform data is passed to this effect, ignore
+	 * the requested setting and move forward.
+	 */
+	if (priv->needs_reinit_wa && (tsens_version(priv) < VER_2_X)) {
+		dev_warn(dev,
+			 "%s: Reinit quirk available only for tsens v2\n", __func__);
+		priv->needs_reinit_wa = false;
+	}
+
+	mutex_init(&priv->reinit_mutex);
+	spin_lock_init(&priv->reinit_lock);
+
+	if (priv->needs_reinit_wa)
+		INIT_WORK(&priv->reinit_wa_notify, tsens_reinit_worker_notify);
+
 	ret = priv->ops->init(priv);
 	if (ret < 0) {
 		dev_err(dev, "%s: init failed\n", __func__);
diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h
index 92787017c6ab..900d2a74d25e 100644
--- a/drivers/thermal/qcom/tsens.h
+++ b/drivers/thermal/qcom/tsens.h
@@ -14,9 +14,12 @@
 #define SLOPE_FACTOR		1000
 #define SLOPE_DEFAULT		3200
 #define TIMEOUT_US		100
+#define RESET_TIMEOUT_MS	2
 #define THRESHOLD_MAX_ADC_CODE	0x3ff
 #define THRESHOLD_MIN_ADC_CODE	0x0
 
+#define CRITICAL_INT_EN		(BIT(2))
+
 #include <linux/interrupt.h>
 #include <linux/thermal.h>
 #include <linux/regmap.h>
@@ -165,6 +168,7 @@ enum regfield_ids {
 	/* ----- TM ------ */
 	/* TRDY */
 	TRDY,
+	FIRST_ROUND_COMPLETE,
 	/* INTERRUPT ENABLE */
 	INT_EN,	/* v2+ has separate enables for crit, upper and lower irq */
 	/* STATUS */
@@ -564,6 +568,14 @@ struct tsens_priv {
 	u32				tm_offset;
 	bool				needs_reinit_wa;
 
+	struct work_struct		reinit_wa_notify;
+
+	/* protects reinit related serialization */
+	struct mutex			reinit_mutex;
+
+	/* lock for reinit workaround */
+	spinlock_t			reinit_lock;
+
 	/* lock for upper/lower threshold interrupts */
 	spinlock_t			ul_lock;
 
-- 
2.35.3


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

* [PATCH v2 4/5] thermal: qcom: tsens: Add reinit quirk support for tsens v2 controllers
  2022-07-24 12:24 [PATCH v2 0/5] Add support for tsens controller reinit via trustzone Bhupesh Sharma
                   ` (2 preceding siblings ...)
  2022-07-24 12:24 ` [PATCH v2 3/5] thermal: qcom: tsens: Add driver support for re-initialization quirk Bhupesh Sharma
@ 2022-07-24 12:24 ` Bhupesh Sharma
  2022-07-24 12:24 ` [PATCH v2 5/5] thermal: qcom: tsens: Add reinit quirk support for sm6375 controller Bhupesh Sharma
  4 siblings, 0 replies; 12+ messages in thread
From: Bhupesh Sharma @ 2022-07-24 12:24 UTC (permalink / raw)
  To: linux-pm
  Cc: bhupesh.sharma, bhupesh.linux, linux-kernel, bjorn.andersson,
	konrad.dybcio, linux-arm-msm, daniel.lezcano, robh+dt, rafael,
	Amit Kucheria, Thara Gopinath

Some Qualcomm tsens v2 controllers like those present on
sm8150 SoC might require re-initialization via trustzone
[via scm call(s)] when it enters a 'bad state' causing
sensor temperatures/interrupts status to be in an
'invalid' state.

Add hooks for the same in the qcom tsens driver.

Devices requiring the same can pass the relevant
compatible string in dt and the driver hook can
be used accordingly.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Amit Kucheria <amitk@kernel.org>
Cc: Thara Gopinath <thara.gopinath@gmail.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-arm-msm@vger.kernel.org
Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
---
 drivers/thermal/qcom/tsens-v2.c | 12 ++++++++++++
 drivers/thermal/qcom/tsens.c    |  3 +++
 drivers/thermal/qcom/tsens.h    |  2 +-
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/thermal/qcom/tsens-v2.c b/drivers/thermal/qcom/tsens-v2.c
index f521e4479cc5..431f17f99d34 100644
--- a/drivers/thermal/qcom/tsens-v2.c
+++ b/drivers/thermal/qcom/tsens-v2.c
@@ -104,6 +104,18 @@ struct tsens_plat_data data_tsens_v2 = {
 	.fields	= tsens_v2_regfields,
 };
 
+/*
+ * For some tsens v2 controllers, its suggested to monitor the
+ * controller health periodically and in case an issue is detected
+ * to reinit tsens controller via trustzone.
+ */
+struct tsens_plat_data data_tsens_v2_reinit = {
+	.ops		= &ops_generic_v2,
+	.feat		= &tsens_v2_feat,
+	.needs_reinit_wa = true,
+	.fields	= tsens_v2_regfields,
+};
+
 /* Kept around for backward compatibility with old msm8996.dtsi */
 struct tsens_plat_data data_8996 = {
 	.num_sensors	= 13,
diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
index c2d085fb5447..928b6a44fda8 100644
--- a/drivers/thermal/qcom/tsens.c
+++ b/drivers/thermal/qcom/tsens.c
@@ -1145,6 +1145,9 @@ static const struct of_device_id tsens_table[] = {
 	}, {
 		.compatible = "qcom,msm8996-tsens",
 		.data = &data_8996,
+	}, {
+		.compatible = "qcom,sm8150-tsens",
+		.data = &data_tsens_v2_reinit,
 	}, {
 		.compatible = "qcom,tsens-v1",
 		.data = &data_tsens_v1,
diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h
index 900d2a74d25e..03cc3a790972 100644
--- a/drivers/thermal/qcom/tsens.h
+++ b/drivers/thermal/qcom/tsens.h
@@ -607,6 +607,6 @@ extern struct tsens_plat_data data_8916, data_8939, data_8974, data_9607;
 extern struct tsens_plat_data data_tsens_v1, data_8976;
 
 /* TSENS v2 targets */
-extern struct tsens_plat_data data_8996, data_tsens_v2;
+extern struct tsens_plat_data data_8996, data_tsens_v2_reinit, data_tsens_v2;
 
 #endif /* __QCOM_TSENS_H__ */
-- 
2.35.3


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

* [PATCH v2 5/5] thermal: qcom: tsens: Add reinit quirk support for sm6375 controller
  2022-07-24 12:24 [PATCH v2 0/5] Add support for tsens controller reinit via trustzone Bhupesh Sharma
                   ` (3 preceding siblings ...)
  2022-07-24 12:24 ` [PATCH v2 4/5] thermal: qcom: tsens: Add reinit quirk support for tsens v2 controllers Bhupesh Sharma
@ 2022-07-24 12:24 ` Bhupesh Sharma
  2022-07-28 14:12   ` Konrad Dybcio
  4 siblings, 1 reply; 12+ messages in thread
From: Bhupesh Sharma @ 2022-07-24 12:24 UTC (permalink / raw)
  To: linux-pm
  Cc: bhupesh.sharma, bhupesh.linux, linux-kernel, bjorn.andersson,
	konrad.dybcio, linux-arm-msm, daniel.lezcano, robh+dt, rafael,
	Amit Kucheria, Thara Gopinath

tsens controller(s) on Qualcomm sm6375 SoC might start in
an unknown state or start with TSENS_EN indicating
a 'disabled' state when they enter linux world.

In such cases, it is useful to try and reinit them via
trustzone [via scm call(s)], at the very start.

Add hooks for the same in the qcom tsens driver.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Amit Kucheria <amitk@kernel.org>
Cc: Thara Gopinath <thara.gopinath@gmail.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-arm-msm@vger.kernel.org
Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
---
 drivers/thermal/qcom/tsens.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c
index 928b6a44fda8..0141ea43c290 100644
--- a/drivers/thermal/qcom/tsens.c
+++ b/drivers/thermal/qcom/tsens.c
@@ -1083,6 +1083,16 @@ int __init init_common(struct tsens_priv *priv)
 	if (tsens_version(priv) >= VER_0_1)
 		tsens_enable_irq(priv);
 
+	/*
+	 * For some tsens controllers, which start in
+	 * an unknown state or start with TSENS_EN indicating
+	 * a 'disabled' state, its useful to try and reinit
+	 * them via trustzone, at the very start.
+	 */
+	if (priv->needs_reinit_wa &&
+	    (of_device_is_compatible(dev->of_node, "qcom,sm6375-tsens")))
+		__tsens_reinit_worker(priv);
+
 	tsens_debug_init(op);
 
 err_put_device:
@@ -1145,6 +1155,9 @@ static const struct of_device_id tsens_table[] = {
 	}, {
 		.compatible = "qcom,msm8996-tsens",
 		.data = &data_8996,
+	}, {
+		.compatible = "qcom,sm6375-tsens",
+		.data = &data_tsens_v2_reinit,
 	}, {
 		.compatible = "qcom,sm8150-tsens",
 		.data = &data_tsens_v2_reinit,
-- 
2.35.3


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

* Re: [PATCH v2 3/5] thermal: qcom: tsens: Add driver support for re-initialization quirk
  2022-07-24 12:24 ` [PATCH v2 3/5] thermal: qcom: tsens: Add driver support for re-initialization quirk Bhupesh Sharma
@ 2022-07-25 23:10   ` kernel test robot
  2022-07-26 11:38     ` Bhupesh Sharma
  0 siblings, 1 reply; 12+ messages in thread
From: kernel test robot @ 2022-07-25 23:10 UTC (permalink / raw)
  To: Bhupesh Sharma, linux-pm
  Cc: kbuild-all, bhupesh.sharma, bhupesh.linux, linux-kernel,
	bjorn.andersson, konrad.dybcio, linux-arm-msm, daniel.lezcano,
	robh+dt, rafael, Amit Kucheria, Thara Gopinath

Hi Bhupesh,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on rafael-pm/thermal]
[also build test ERROR on linus/master v5.19-rc8 next-20220725]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Bhupesh-Sharma/Add-support-for-tsens-controller-reinit-via-trustzone/20220724-202546
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git thermal
config: ia64-randconfig-r005-20220724 (https://download.01.org/0day-ci/archive/20220726/202207260755.tUajnfB4-lkp@intel.com/config)
compiler: ia64-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/2356630fadc0a622264bf292b6930f8c728b0709
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Bhupesh-Sharma/Add-support-for-tsens-controller-reinit-via-trustzone/20220724-202546
        git checkout 2356630fadc0a622264bf292b6930f8c728b0709
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=ia64 SHELL=/bin/bash

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

All errors (new ones prefixed by >>):

   ia64-linux-ld: drivers/thermal/qcom/tsens.o: in function `tsens_probe':
>> tsens.c:(.text+0x6d2): undefined reference to `qcom_scm_is_available'
   ia64-linux-ld: drivers/thermal/qcom/tsens.o: in function `tsens_health_check_and_reinit.constprop.0':
>> tsens.c:(.text+0x10c2): undefined reference to `qcom_scm_tsens_reinit'

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

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

* Re: [PATCH v2 3/5] thermal: qcom: tsens: Add driver support for re-initialization quirk
  2022-07-25 23:10   ` kernel test robot
@ 2022-07-26 11:38     ` Bhupesh Sharma
  2022-07-27  7:31       ` [kbuild-all] " Chen, Rong A
  0 siblings, 1 reply; 12+ messages in thread
From: Bhupesh Sharma @ 2022-07-26 11:38 UTC (permalink / raw)
  To: kernel test robot, linux-pm
  Cc: kbuild-all, bhupesh.linux, linux-kernel, bjorn.andersson,
	konrad.dybcio, linux-arm-msm, daniel.lezcano, robh+dt, rafael,
	Amit Kucheria, Thara Gopinath

Hi,

On 7/26/22 4:40 AM, kernel test robot wrote:
> Hi Bhupesh,
> 
> Thank you for the patch! Yet something to improve:
> 
> [auto build test ERROR on rafael-pm/thermal]
> [also build test ERROR on linus/master v5.19-rc8 next-20220725]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Bhupesh-Sharma/Add-support-for-tsens-controller-reinit-via-trustzone/20220724-202546
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git thermal
> config: ia64-randconfig-r005-20220724 (https://download.01.org/0day-ci/archive/20220726/202207260755.tUajnfB4-lkp@intel.com/config)
> compiler: ia64-linux-gcc (GCC) 12.1.0
> reproduce (this is a W=1 build):
>          wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>          chmod +x ~/bin/make.cross
>          # https://github.com/intel-lab-lkp/linux/commit/2356630fadc0a622264bf292b6930f8c728b0709
>          git remote add linux-review https://github.com/intel-lab-lkp/linux
>          git fetch --no-tags linux-review Bhupesh-Sharma/Add-support-for-tsens-controller-reinit-via-trustzone/20220724-202546
>          git checkout 2356630fadc0a622264bf292b6930f8c728b0709
>          # save the config file
>          mkdir build_dir && cp config build_dir/.config
>          COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=ia64 SHELL=/bin/bash
> 
> If you fix the issue, kindly add following tag where applicable
> Reported-by: kernel test robot <lkp@intel.com>
> 
> All errors (new ones prefixed by >>):
> 
>     ia64-linux-ld: drivers/thermal/qcom/tsens.o: in function `tsens_probe':
>>> tsens.c:(.text+0x6d2): undefined reference to `qcom_scm_is_available'
>     ia64-linux-ld: drivers/thermal/qcom/tsens.o: in function `tsens_health_check_and_reinit.constprop.0':
>>> tsens.c:(.text+0x10c2): undefined reference to `qcom_scm_tsens_reinit'

It seems you have missed picking up [PATCH 1/5] firmware: qcom: scm: Add 
support for tsens reinit workaround before running the checks on this 
patch which is a part of this series itself (see [1]).

If I pick the PATCHes in the right order [PATCH 1/5], [PATCH 2/5] 
followed by [PATCH 3/5], I don't see the compilation error being 
reported (even with W=1 build options).

[1]. 
https://lore.kernel.org/linux-arm-msm/20220724122424.2509021-2-bhupesh.sharma@linaro.org/

Thanks,
Bhupesh

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

* Re: [kbuild-all] Re: [PATCH v2 3/5] thermal: qcom: tsens: Add driver support for re-initialization quirk
  2022-07-26 11:38     ` Bhupesh Sharma
@ 2022-07-27  7:31       ` Chen, Rong A
  2022-08-03  5:30         ` Bhupesh Sharma
  0 siblings, 1 reply; 12+ messages in thread
From: Chen, Rong A @ 2022-07-27  7:31 UTC (permalink / raw)
  To: Bhupesh Sharma, kernel test robot, linux-pm
  Cc: kbuild-all, bhupesh.linux, linux-kernel, bjorn.andersson,
	konrad.dybcio, linux-arm-msm, daniel.lezcano, robh+dt, rafael,
	Amit Kucheria, Thara Gopinath



On 7/26/2022 7:38 PM, Bhupesh Sharma wrote:
> Hi,
> 
> On 7/26/22 4:40 AM, kernel test robot wrote:
>> Hi Bhupesh,
>>
>> Thank you for the patch! Yet something to improve:
>>
>> [auto build test ERROR on rafael-pm/thermal]
>> [also build test ERROR on linus/master v5.19-rc8 next-20220725]
>> [If your patch is applied to the wrong git tree, kindly drop us a note.
>> And when submitting patch, we suggest to use '--base' as documented in
>> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>>
>> url:    
>> https://github.com/intel-lab-lkp/linux/commits/Bhupesh-Sharma/Add-support-for-tsens-controller-reinit-via-trustzone/20220724-202546 
>>
>> base:   
>> https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git 
>> thermal
>> config: ia64-randconfig-r005-20220724 
>> (https://download.01.org/0day-ci/archive/20220726/202207260755.tUajnfB4-lkp@intel.com/config) 
>>
>> compiler: ia64-linux-gcc (GCC) 12.1.0
>> reproduce (this is a W=1 build):
>>          wget 
>> https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross 
>> -O ~/bin/make.cross
>>          chmod +x ~/bin/make.cross
>>          # 
>> https://github.com/intel-lab-lkp/linux/commit/2356630fadc0a622264bf292b6930f8c728b0709 
>>
>>          git remote add linux-review 
>> https://github.com/intel-lab-lkp/linux
>>          git fetch --no-tags linux-review 
>> Bhupesh-Sharma/Add-support-for-tsens-controller-reinit-via-trustzone/20220724-202546 
>>
>>          git checkout 2356630fadc0a622264bf292b6930f8c728b0709
>>          # save the config file
>>          mkdir build_dir && cp config build_dir/.config
>>          COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 
>> make.cross W=1 O=build_dir ARCH=ia64 SHELL=/bin/bash
>>
>> If you fix the issue, kindly add following tag where applicable
>> Reported-by: kernel test robot <lkp@intel.com>
>>
>> All errors (new ones prefixed by >>):
>>
>>     ia64-linux-ld: drivers/thermal/qcom/tsens.o: in function 
>> `tsens_probe':
>>>> tsens.c:(.text+0x6d2): undefined reference to `qcom_scm_is_available'
>>     ia64-linux-ld: drivers/thermal/qcom/tsens.o: in function 
>> `tsens_health_check_and_reinit.constprop.0':
>>>> tsens.c:(.text+0x10c2): undefined reference to `qcom_scm_tsens_reinit'
> 
> It seems you have missed picking up [PATCH 1/5] firmware: qcom: scm: Add 
> support for tsens reinit workaround before running the checks on this 
> patch which is a part of this series itself (see [1]).

Hi Bhupesh,

Thanks for the feedback, the bot applied the full patch set to test,
please see

 
https://github.com/intel-lab-lkp/linux/commits/Bhupesh-Sharma/Add-support-for-tsens-controller-reinit-via-trustzone/20220724-202546 


Maybe the bot chose a wrong base branch to apply which caused the
unexpected issue.

Best Regards,
Rong Chen

> 
> If I pick the PATCHes in the right order [PATCH 1/5], [PATCH 2/5] 
> followed by [PATCH 3/5], I don't see the compilation error being 
> reported (even with W=1 build options).
> 
> [1]. 
> https://lore.kernel.org/linux-arm-msm/20220724122424.2509021-2-bhupesh.sharma@linaro.org/ 
> 
> 
> Thanks,
> Bhupesh
> _______________________________________________
> kbuild-all mailing list -- kbuild-all@lists.01.org
> To unsubscribe send an email to kbuild-all-leave@lists.01.org

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

* Re: [PATCH v2 5/5] thermal: qcom: tsens: Add reinit quirk support for sm6375 controller
  2022-07-24 12:24 ` [PATCH v2 5/5] thermal: qcom: tsens: Add reinit quirk support for sm6375 controller Bhupesh Sharma
@ 2022-07-28 14:12   ` Konrad Dybcio
  2022-08-03  5:32     ` Bhupesh Sharma
  0 siblings, 1 reply; 12+ messages in thread
From: Konrad Dybcio @ 2022-07-28 14:12 UTC (permalink / raw)
  To: Bhupesh Sharma, linux-pm
  Cc: bhupesh.linux, linux-kernel, bjorn.andersson, linux-arm-msm,
	daniel.lezcano, robh+dt, rafael, Amit Kucheria, Thara Gopinath



On 24.07.2022 14:24, Bhupesh Sharma wrote:
> tsens controller(s) on Qualcomm sm6375 SoC might start in
> an unknown state or start with TSENS_EN indicating
> a 'disabled' state when they enter linux world.
> 
> In such cases, it is useful to try and reinit them via
> trustzone [via scm call(s)], at the very start.
> 
> Add hooks for the same in the qcom tsens driver.
> 
> Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> Cc: Amit Kucheria <amitk@kernel.org>
> Cc: Thara Gopinath <thara.gopinath@gmail.com>
> Cc: linux-pm@vger.kernel.org
> Cc: linux-arm-msm@vger.kernel.org
> Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
> ---
This sadly doesn't work.. the issue on 6375 is that the controller
is in some weird state at boot and this bit that's higher up:

        ret = regmap_field_read(priv->rf[TSENS_EN], &enabled);
        if (ret)
                goto err_put_device;
        if (!enabled) {
                dev_err(dev, "%s: device not enabled\n", __func__);
                ret = -ENODEV;
                goto err_put_device;
        }

does not succeed.

Moving the code added in the patch up or calling
qcom_scm_tsens_reinit() or qcom_scm_tsens_reinit() and 
tsens_reenable_hw_after_scm(priv) directly before this enable
check also fails. In fact, the latter crashes the platform..

I don't want to block this series, so I suggest the 6375 part can
be dropped for now.

Konrad

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

* Re: [kbuild-all] Re: [PATCH v2 3/5] thermal: qcom: tsens: Add driver support for re-initialization quirk
  2022-07-27  7:31       ` [kbuild-all] " Chen, Rong A
@ 2022-08-03  5:30         ` Bhupesh Sharma
  0 siblings, 0 replies; 12+ messages in thread
From: Bhupesh Sharma @ 2022-08-03  5:30 UTC (permalink / raw)
  To: Chen, Rong A
  Cc: kernel test robot, linux-pm, kbuild-all, bhupesh.linux,
	linux-kernel, bjorn.andersson, konrad.dybcio, linux-arm-msm,
	daniel.lezcano, robh+dt, rafael, Amit Kucheria, Thara Gopinath

Hi,

On Wed, 27 Jul 2022 at 13:01, Chen, Rong A <rong.a.chen@intel.com> wrote:
> On 7/26/2022 7:38 PM, Bhupesh Sharma wrote:
> > Hi,
> >
> > On 7/26/22 4:40 AM, kernel test robot wrote:
> >> Hi Bhupesh,
> >>
> >> Thank you for the patch! Yet something to improve:
> >>
> >> [auto build test ERROR on rafael-pm/thermal]
> >> [also build test ERROR on linus/master v5.19-rc8 next-20220725]
> >> [If your patch is applied to the wrong git tree, kindly drop us a note.
> >> And when submitting patch, we suggest to use '--base' as documented in
> >> https://git-scm.com/docs/git-format-patch#_base_tree_information]
> >>
> >> url:
> >> https://github.com/intel-lab-lkp/linux/commits/Bhupesh-Sharma/Add-support-for-tsens-controller-reinit-via-trustzone/20220724-202546
> >>
> >> base:
> >> https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git
> >> thermal
> >> config: ia64-randconfig-r005-20220724
> >> (https://download.01.org/0day-ci/archive/20220726/202207260755.tUajnfB4-lkp@intel.com/config)
> >>
> >> compiler: ia64-linux-gcc (GCC) 12.1.0
> >> reproduce (this is a W=1 build):
> >>          wget
> >> https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross
> >> -O ~/bin/make.cross
> >>          chmod +x ~/bin/make.cross
> >>          #
> >> https://github.com/intel-lab-lkp/linux/commit/2356630fadc0a622264bf292b6930f8c728b0709
> >>
> >>          git remote add linux-review
> >> https://github.com/intel-lab-lkp/linux
> >>          git fetch --no-tags linux-review
> >> Bhupesh-Sharma/Add-support-for-tsens-controller-reinit-via-trustzone/20220724-202546
> >>
> >>          git checkout 2356630fadc0a622264bf292b6930f8c728b0709
> >>          # save the config file
> >>          mkdir build_dir && cp config build_dir/.config
> >>          COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0
> >> make.cross W=1 O=build_dir ARCH=ia64 SHELL=/bin/bash
> >>
> >> If you fix the issue, kindly add following tag where applicable
> >> Reported-by: kernel test robot <lkp@intel.com>
> >>
> >> All errors (new ones prefixed by >>):
> >>
> >>     ia64-linux-ld: drivers/thermal/qcom/tsens.o: in function
> >> `tsens_probe':
> >>>> tsens.c:(.text+0x6d2): undefined reference to `qcom_scm_is_available'
> >>     ia64-linux-ld: drivers/thermal/qcom/tsens.o: in function
> >> `tsens_health_check_and_reinit.constprop.0':
> >>>> tsens.c:(.text+0x10c2): undefined reference to `qcom_scm_tsens_reinit'
> >
> > It seems you have missed picking up [PATCH 1/5] firmware: qcom: scm: Add
> > support for tsens reinit workaround before running the checks on this
> > patch which is a part of this series itself (see [1]).
>
> Hi Bhupesh,
>
> Thanks for the feedback, the bot applied the full patch set to test,
> please see
>
>
> https://github.com/intel-lab-lkp/linux/commits/Bhupesh-Sharma/Add-support-for-tsens-controller-reinit-via-trustzone/20220724-202546
>
>
> Maybe the bot chose a wrong base branch to apply which caused the
> unexpected issue.

Sure, no problem. Thanks for your email.

Regards,
Bhupesh

> > If I pick the PATCHes in the right order [PATCH 1/5], [PATCH 2/5]
> > followed by [PATCH 3/5], I don't see the compilation error being
> > reported (even with W=1 build options).
> >
> > [1].
> > https://lore.kernel.org/linux-arm-msm/20220724122424.2509021-2-bhupesh.sharma@linaro.org/
> >
> >
> > Thanks,
> > Bhupesh
> > _______________________________________________
> > kbuild-all mailing list -- kbuild-all@lists.01.org
> > To unsubscribe send an email to kbuild-all-leave@lists.01.org

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

* Re: [PATCH v2 5/5] thermal: qcom: tsens: Add reinit quirk support for sm6375 controller
  2022-07-28 14:12   ` Konrad Dybcio
@ 2022-08-03  5:32     ` Bhupesh Sharma
  0 siblings, 0 replies; 12+ messages in thread
From: Bhupesh Sharma @ 2022-08-03  5:32 UTC (permalink / raw)
  To: Konrad Dybcio
  Cc: linux-pm, bhupesh.linux, linux-kernel, bjorn.andersson,
	linux-arm-msm, daniel.lezcano, robh+dt, rafael, Amit Kucheria,
	Thara Gopinath

Hi Konrad,

On Thu, 28 Jul 2022 at 19:42, Konrad Dybcio
<konrad.dybcio@somainline.org> wrote:
>
>
>
> On 24.07.2022 14:24, Bhupesh Sharma wrote:
> > tsens controller(s) on Qualcomm sm6375 SoC might start in
> > an unknown state or start with TSENS_EN indicating
> > a 'disabled' state when they enter linux world.
> >
> > In such cases, it is useful to try and reinit them via
> > trustzone [via scm call(s)], at the very start.
> >
> > Add hooks for the same in the qcom tsens driver.
> >
> > Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
> > Cc: Amit Kucheria <amitk@kernel.org>
> > Cc: Thara Gopinath <thara.gopinath@gmail.com>
> > Cc: linux-pm@vger.kernel.org
> > Cc: linux-arm-msm@vger.kernel.org
> > Signed-off-by: Bhupesh Sharma <bhupesh.sharma@linaro.org>
> > ---
> This sadly doesn't work.. the issue on 6375 is that the controller
> is in some weird state at boot and this bit that's higher up:
>
>         ret = regmap_field_read(priv->rf[TSENS_EN], &enabled);
>         if (ret)
>                 goto err_put_device;
>         if (!enabled) {
>                 dev_err(dev, "%s: device not enabled\n", __func__);
>                 ret = -ENODEV;
>                 goto err_put_device;
>         }
>
> does not succeed.
>
> Moving the code added in the patch up or calling
> qcom_scm_tsens_reinit() or qcom_scm_tsens_reinit() and
> tsens_reenable_hw_after_scm(priv) directly before this enable
> check also fails. In fact, the latter crashes the platform..
>
> I don't want to block this series, so I suggest the 6375 part can
> be dropped for now.

Many thanks for testing the patchset. I agree.. let me drop this patch
from the v3 version and we can later target this sm6375 issue via a
separate patch.

Regards,
Bhupesh

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

end of thread, other threads:[~2022-08-03  5:33 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-24 12:24 [PATCH v2 0/5] Add support for tsens controller reinit via trustzone Bhupesh Sharma
2022-07-24 12:24 ` [PATCH v2 1/5] firmware: qcom: scm: Add support for tsens reinit workaround Bhupesh Sharma
2022-07-24 12:24 ` [PATCH v2 2/5] thermal: qcom: tsens: Add hooks for supplying platform specific reinit quirks Bhupesh Sharma
2022-07-24 12:24 ` [PATCH v2 3/5] thermal: qcom: tsens: Add driver support for re-initialization quirk Bhupesh Sharma
2022-07-25 23:10   ` kernel test robot
2022-07-26 11:38     ` Bhupesh Sharma
2022-07-27  7:31       ` [kbuild-all] " Chen, Rong A
2022-08-03  5:30         ` Bhupesh Sharma
2022-07-24 12:24 ` [PATCH v2 4/5] thermal: qcom: tsens: Add reinit quirk support for tsens v2 controllers Bhupesh Sharma
2022-07-24 12:24 ` [PATCH v2 5/5] thermal: qcom: tsens: Add reinit quirk support for sm6375 controller Bhupesh Sharma
2022-07-28 14:12   ` Konrad Dybcio
2022-08-03  5:32     ` Bhupesh Sharma

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).