Thread (20 messages) 20 messages, 2 authors, 2018-09-06

Re: [PATCH v2 08/11] thermal: tsens: Check if the IP is correctly enabled by firmware

From: Amit Kucheria <hidden>
Date: 2018-08-30 19:23:52
Also in: linux-arm-msm, lkml

On Tue, Aug 28, 2018 at 7:08 PM, Amit Kucheria [off-list ref] wrote:
quoted hunk ↗ jump to hunk
The SROT registers are initialised by the secure firmware at boot. We
don't have write access to the registers. Check if the block is enabled
before continuing.

Signed-off-by: Amit Kucheria <redacted>
Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
---
 drivers/thermal/qcom/tsens-common.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
diff --git a/drivers/thermal/qcom/tsens-common.c b/drivers/thermal/qcom/tsens-common.c
index 0b8a793f15f4..d250b757d1f0 100644
--- a/drivers/thermal/qcom/tsens-common.c
+++ b/drivers/thermal/qcom/tsens-common.c
@@ -12,6 +12,11 @@
 #include <linux/regmap.h>
 #include "tsens.h"

+/* SROT */
+#define CTRL_OFFSET            0x4
This OFFSET is not constant across the TSENS family and breaks atleast
one platform in the test below. I have a patch to fix this for all
platforms, will post it after a bit more testing.

quoted hunk ↗ jump to hunk
+#define TSENS_EN               BIT(0)
+
+/* TM */
 #define STATUS_OFFSET          0x30
 #define SN_ADDR_OFFSET         0x4
 #define SN_ST_TEMP_MASK                0x3ff
@@ -119,6 +124,8 @@ int __init init_common(struct tsens_device *tmdev)
 {
        void __iomem *tm_base, *srot_base;
        struct resource *res;
+       u32 code;
+       int ret;
        struct platform_device *op = of_find_device_by_node(tmdev->dev->of_node);

        if (!op)
@@ -151,5 +158,15 @@ int __init init_common(struct tsens_device *tmdev)
        if (IS_ERR(tmdev->tm_map))
                return PTR_ERR(tmdev->tm_map);

+       if (tmdev->srot_map) {
+               ret = regmap_read(tmdev->srot_map, CTRL_OFFSET, &code);
+               if (ret)
+                       return ret;
+               if (!(code & TSENS_EN)) {
+                       dev_err(tmdev->dev, "tsens device is not enabled\n");
+                       return -ENODEV;
+               }
+       }
+
        return 0;
 }
--
2.17.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help