All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
To: linux-arm-kernel@lists.infradead.org
Cc: Zhang Rui <rui.zhang@intel.com>,
	linux-pm@vger.kernel.org,
	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
	Gregory Clement <gregory.clement@free-electrons.com>,
	Nobuhiro Iwamatsu <iwamatsu@nigauri.org>,
	Andrew Lunn <andrew@lunn.ch>, Jason Cooper <jason@lakedaemon.net>,
	Florian Fainelli <florian@openwrt.org>,
	Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
	Lior Amsalem <alior@marvell.com>,
	Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
Subject: [PATCH 11/16] thermal: mvebu: Add support for Armada XP thermal sensor
Date: Wed, 20 Mar 2013 19:36:32 -0300	[thread overview]
Message-ID: <1363818997-23137-12-git-send-email-ezequiel.garcia@free-electrons.com> (raw)
In-Reply-To: <1363818997-23137-1-git-send-email-ezequiel.garcia@free-electrons.com>

With the infrastructure introduced to support more SoC, we can
now easily add another thermal sensor.

The Armada XP sensor has no register to check for a valid temperature,
and has a special formula to obtain the temperature from the thermal
sensor output register.

Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 .../devicetree/bindings/thermal/mvebu-thermal.txt  |   21 ++++++---
 drivers/thermal/mvebu_thermal.c                    |   50 ++++++++++++++++++++
 2 files changed, 64 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt b/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
index 8c0f5eb..7cc3fd4 100644
--- a/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
+++ b/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
@@ -1,13 +1,20 @@
-* Kirkwood Thermal
-
-This version is for Kirkwood 88F8262 & 88F6283 SoCs. Other kirkwoods
-don't contain a thermal sensor.
+* Marvell EBU Thermal
 
 Required properties:
-- compatible : "marvell,kirkwood-thermal"
-- reg : Address range of the thermal registers
 
-Example:
+- compatible:	Should be set to one of the following:
+		marvell,kirkwood-thermal
+		marvell,armadaxp-thermal
+
+- reg:		Device's register space.
+		One or two entries are expected, see the examples below.
+		The first one is required for the sensor register;
+		the second one is optional and is used as the control
+		register for sensor calibration.
+		Currently the only SoC variant having one register range
+		is Kirkwood.
+
+Kirkwood example:
 
 	thermal@10078 {
 		compatible = "marvell,kirkwood-thermal";
diff --git a/drivers/thermal/mvebu_thermal.c b/drivers/thermal/mvebu_thermal.c
index bfe4817..50f13e7 100644
--- a/drivers/thermal/mvebu_thermal.c
+++ b/drivers/thermal/mvebu_thermal.c
@@ -1,6 +1,7 @@
 /*
  * Marvell EBU thermal sensor driver
  *
+ * Copyright (C) 2013 Marvell
  * Copyright (C) 2012 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
  *
  * This software is licensed under the terms of the GNU General Public
@@ -24,12 +25,21 @@
 #include <linux/thermal.h>
 
 #define MVEBU_THERMAL_SOC_VARIANT_KIRKWOOD    0x1
+#define MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP   0x2
 
 #define MVEBU_THERMAL_VALID_OFFSET	9
 #define MVEBU_THERMAL_VALID_MASK	0x1
 #define MVEBU_THERMAL_TEMP_OFFSET	10
 #define MVEBU_THERMAL_TEMP_MASK		0x1FF
 
+/* Thermal Manager Control and Status Register */
+#define PMU_TDC0_SW_RST_MASK		(0x1 << 1)
+#define PMU_TM_DISABLE_OFFS		0
+#define PMU_TM_DISABLE_MASK		(0x1 << PMU_TM_DISABLE_OFFS)
+#define PMU_TDC0_REF_CAL_CNT_OFFS	11
+#define PMU_TDC0_REF_CAL_CNT_MASK	(0x1ff << PMU_TDC0_REF_CAL_CNT_OFFS)
+#define PMU_TDC0_OTF_CAL_MASK		(0x1 << 30)
+
 /* Marvell EBU Thermal Sensor Dev Structure */
 struct mvebu_thermal_priv {
 	void __iomem *sensor;
@@ -43,6 +53,35 @@ struct mvebu_thermal_priv {
 	bool (*is_valid)(struct mvebu_thermal_priv *);
 };
 
+static void armadaxp_init_sensor(struct mvebu_thermal_priv *priv)
+{
+	unsigned long reg;
+
+	if (!priv->control)
+		return;
+
+	/* ??? */
+	reg = readl_relaxed(priv->control);
+	reg |= PMU_TDC0_OTF_CAL_MASK;
+	writel(reg, priv->control);
+
+	/* Reference calibration value */
+	reg &= ~PMU_TDC0_REF_CAL_CNT_MASK;
+	reg |= (0xf1 << PMU_TDC0_REF_CAL_CNT_OFFS);
+	writel(reg, priv->control);
+
+	/* Reset the sensor */
+	reg = readl_relaxed(priv->control);
+	writel((reg | PMU_TDC0_SW_RST_MASK), priv->control);
+
+	writel(reg, priv->control);
+
+	/* Enable the sensor */
+	reg = readl_relaxed(priv->sensor);
+	reg &= ~PMU_TM_DISABLE_MASK;
+	writel(reg, priv->sensor);
+}
+
 static bool mvebu_is_valid(struct mvebu_thermal_priv *priv)
 {
 	unsigned long reg = readl_relaxed(priv->sensor);
@@ -71,6 +110,9 @@ static int mvebu_get_temp(struct thermal_zone_device *thermal,
 	case MVEBU_THERMAL_SOC_VARIANT_KIRKWOOD:
 		*temp = ((2363302UL - (7339*reg)) / 10);
 		break;
+	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP:
+		*temp = (3153000000UL - (10000000UL*reg)) / 13825;
+		break;
 	default:
 		*temp = 0;
 		break;
@@ -88,6 +130,10 @@ static const struct of_device_id mvebu_thermal_id_table[] = {
 		.data       = (void *) MVEBU_THERMAL_SOC_VARIANT_KIRKWOOD,
 	},
 	{
+		.compatible = "marvell,armadaxp-thermal",
+		.data       = (void *) MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP,
+	},
+	{
 		/* sentinel */
 	},
 };
@@ -130,6 +176,9 @@ static int mvebu_thermal_probe(struct platform_device *pdev)
 	case MVEBU_THERMAL_SOC_VARIANT_KIRKWOOD:
 		priv->is_valid = mvebu_is_valid;
 		break;
+	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP:
+		priv->init_sensor = armadaxp_init_sensor;
+		break;
 	default:
 		break;
 	}
@@ -174,5 +223,6 @@ static struct platform_driver mvebu_thermal_driver = {
 module_platform_driver(mvebu_thermal_driver);
 
 MODULE_AUTHOR("Nobuhiro Iwamatsu <iwamatsu@nigauri.org>");
+MODULE_AUTHOR("Ezequiel Garcia <ezequiel.garcia@free-electrons.com>");
 MODULE_DESCRIPTION("mvebu thermal driver");
 MODULE_LICENSE("GPL v2");
-- 
1.7.8.6


WARNING: multiple messages have this Message-ID (diff)
From: ezequiel.garcia@free-electrons.com (Ezequiel Garcia)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 11/16] thermal: mvebu: Add support for Armada XP thermal sensor
Date: Wed, 20 Mar 2013 19:36:32 -0300	[thread overview]
Message-ID: <1363818997-23137-12-git-send-email-ezequiel.garcia@free-electrons.com> (raw)
In-Reply-To: <1363818997-23137-1-git-send-email-ezequiel.garcia@free-electrons.com>

With the infrastructure introduced to support more SoC, we can
now easily add another thermal sensor.

The Armada XP sensor has no register to check for a valid temperature,
and has a special formula to obtain the temperature from the thermal
sensor output register.

Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
 .../devicetree/bindings/thermal/mvebu-thermal.txt  |   21 ++++++---
 drivers/thermal/mvebu_thermal.c                    |   50 ++++++++++++++++++++
 2 files changed, 64 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt b/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
index 8c0f5eb..7cc3fd4 100644
--- a/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
+++ b/Documentation/devicetree/bindings/thermal/mvebu-thermal.txt
@@ -1,13 +1,20 @@
-* Kirkwood Thermal
-
-This version is for Kirkwood 88F8262 & 88F6283 SoCs. Other kirkwoods
-don't contain a thermal sensor.
+* Marvell EBU Thermal
 
 Required properties:
-- compatible : "marvell,kirkwood-thermal"
-- reg : Address range of the thermal registers
 
-Example:
+- compatible:	Should be set to one of the following:
+		marvell,kirkwood-thermal
+		marvell,armadaxp-thermal
+
+- reg:		Device's register space.
+		One or two entries are expected, see the examples below.
+		The first one is required for the sensor register;
+		the second one is optional and is used as the control
+		register for sensor calibration.
+		Currently the only SoC variant having one register range
+		is Kirkwood.
+
+Kirkwood example:
 
 	thermal at 10078 {
 		compatible = "marvell,kirkwood-thermal";
diff --git a/drivers/thermal/mvebu_thermal.c b/drivers/thermal/mvebu_thermal.c
index bfe4817..50f13e7 100644
--- a/drivers/thermal/mvebu_thermal.c
+++ b/drivers/thermal/mvebu_thermal.c
@@ -1,6 +1,7 @@
 /*
  * Marvell EBU thermal sensor driver
  *
+ * Copyright (C) 2013 Marvell
  * Copyright (C) 2012 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
  *
  * This software is licensed under the terms of the GNU General Public
@@ -24,12 +25,21 @@
 #include <linux/thermal.h>
 
 #define MVEBU_THERMAL_SOC_VARIANT_KIRKWOOD    0x1
+#define MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP   0x2
 
 #define MVEBU_THERMAL_VALID_OFFSET	9
 #define MVEBU_THERMAL_VALID_MASK	0x1
 #define MVEBU_THERMAL_TEMP_OFFSET	10
 #define MVEBU_THERMAL_TEMP_MASK		0x1FF
 
+/* Thermal Manager Control and Status Register */
+#define PMU_TDC0_SW_RST_MASK		(0x1 << 1)
+#define PMU_TM_DISABLE_OFFS		0
+#define PMU_TM_DISABLE_MASK		(0x1 << PMU_TM_DISABLE_OFFS)
+#define PMU_TDC0_REF_CAL_CNT_OFFS	11
+#define PMU_TDC0_REF_CAL_CNT_MASK	(0x1ff << PMU_TDC0_REF_CAL_CNT_OFFS)
+#define PMU_TDC0_OTF_CAL_MASK		(0x1 << 30)
+
 /* Marvell EBU Thermal Sensor Dev Structure */
 struct mvebu_thermal_priv {
 	void __iomem *sensor;
@@ -43,6 +53,35 @@ struct mvebu_thermal_priv {
 	bool (*is_valid)(struct mvebu_thermal_priv *);
 };
 
+static void armadaxp_init_sensor(struct mvebu_thermal_priv *priv)
+{
+	unsigned long reg;
+
+	if (!priv->control)
+		return;
+
+	/* ??? */
+	reg = readl_relaxed(priv->control);
+	reg |= PMU_TDC0_OTF_CAL_MASK;
+	writel(reg, priv->control);
+
+	/* Reference calibration value */
+	reg &= ~PMU_TDC0_REF_CAL_CNT_MASK;
+	reg |= (0xf1 << PMU_TDC0_REF_CAL_CNT_OFFS);
+	writel(reg, priv->control);
+
+	/* Reset the sensor */
+	reg = readl_relaxed(priv->control);
+	writel((reg | PMU_TDC0_SW_RST_MASK), priv->control);
+
+	writel(reg, priv->control);
+
+	/* Enable the sensor */
+	reg = readl_relaxed(priv->sensor);
+	reg &= ~PMU_TM_DISABLE_MASK;
+	writel(reg, priv->sensor);
+}
+
 static bool mvebu_is_valid(struct mvebu_thermal_priv *priv)
 {
 	unsigned long reg = readl_relaxed(priv->sensor);
@@ -71,6 +110,9 @@ static int mvebu_get_temp(struct thermal_zone_device *thermal,
 	case MVEBU_THERMAL_SOC_VARIANT_KIRKWOOD:
 		*temp = ((2363302UL - (7339*reg)) / 10);
 		break;
+	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP:
+		*temp = (3153000000UL - (10000000UL*reg)) / 13825;
+		break;
 	default:
 		*temp = 0;
 		break;
@@ -88,6 +130,10 @@ static const struct of_device_id mvebu_thermal_id_table[] = {
 		.data       = (void *) MVEBU_THERMAL_SOC_VARIANT_KIRKWOOD,
 	},
 	{
+		.compatible = "marvell,armadaxp-thermal",
+		.data       = (void *) MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP,
+	},
+	{
 		/* sentinel */
 	},
 };
@@ -130,6 +176,9 @@ static int mvebu_thermal_probe(struct platform_device *pdev)
 	case MVEBU_THERMAL_SOC_VARIANT_KIRKWOOD:
 		priv->is_valid = mvebu_is_valid;
 		break;
+	case MVEBU_THERMAL_SOC_VARIANT_ARMADA_XP:
+		priv->init_sensor = armadaxp_init_sensor;
+		break;
 	default:
 		break;
 	}
@@ -174,5 +223,6 @@ static struct platform_driver mvebu_thermal_driver = {
 module_platform_driver(mvebu_thermal_driver);
 
 MODULE_AUTHOR("Nobuhiro Iwamatsu <iwamatsu@nigauri.org>");
+MODULE_AUTHOR("Ezequiel Garcia <ezequiel.garcia@free-electrons.com>");
 MODULE_DESCRIPTION("mvebu thermal driver");
 MODULE_LICENSE("GPL v2");
-- 
1.7.8.6

  parent reply	other threads:[~2013-03-20 22:37 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-20 22:36 [PATCH 00/16] Marvell EBU thermal sensor consolidation Ezequiel Garcia
2013-03-20 22:36 ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 01/16] thermal: Rename driver 'kirkwood' -> 'mvebu' Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 02/16] thermal: mvebu: Rename symbols " Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 03/16] thermal: mvebu: Move MODULE_DEVICE_TABLE upwards Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 04/16] thermal: mvebu: Remove unneeded variable initialization Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 05/16] thermal: mvebu: Fix valid check for thermal register Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21 14:35   ` Jason Cooper
2013-03-21 14:35     ` Jason Cooper
2013-03-21 15:16     ` Ezequiel Garcia
2013-03-21 15:16       ` Ezequiel Garcia
2013-03-21 15:24       ` Jason Cooper
2013-03-21 15:24         ` Jason Cooper
2013-03-21 19:57         ` Ezequiel Garcia
2013-03-21 19:57           ` Ezequiel Garcia
2013-03-21 20:06           ` Jason Cooper
2013-03-21 20:06             ` Jason Cooper
2013-03-20 22:36 ` [PATCH 06/16] thermal: mvebu: Convert to devm_ioremap_resource() Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21  6:10   ` Andrew Lunn
2013-03-21  6:10     ` Andrew Lunn
2013-03-21  9:43     ` Ezequiel Garcia
2013-03-21  9:43       ` Ezequiel Garcia
2013-03-21 10:08       ` Andrew Lunn
2013-03-21 10:08         ` Andrew Lunn
2013-03-21 14:04   ` Sergei Shtylyov
2013-03-21 14:04     ` Sergei Shtylyov
2013-03-21 15:17     ` Ezequiel Garcia
2013-03-21 15:17       ` Ezequiel Garcia
2013-03-21 19:17   ` Russell King - ARM Linux
2013-03-21 19:17     ` Russell King - ARM Linux
2013-03-21 20:21     ` Ezequiel Garcia
2013-03-21 20:21       ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 07/16] thermal: mvebu: Fix license declaration Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 08/16] thermal: mvebu: Fix temperature output formula for kirkwood Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21 14:41   ` Jason Cooper
2013-03-21 14:41     ` Jason Cooper
2013-03-21 19:20   ` Russell King - ARM Linux
2013-03-21 19:20     ` Russell King - ARM Linux
2013-03-21 20:38     ` Ezequiel Garcia
2013-03-21 20:38       ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 09/16] thermal: mvebu: Rename kirkwood definitions to mvebu Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 10/16] thermal: mvebu: Add infrastructure to support more multiple SoC variants Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` Ezequiel Garcia [this message]
2013-03-20 22:36   ` [PATCH 11/16] thermal: mvebu: Add support for Armada XP thermal sensor Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 12/16] thermal: mvebu: Add support for Armada 370 " Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 13/16] thermal: mvebu: Add support for Marvell Dove SoC family Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21  6:23   ` Andrew Lunn
2013-03-21  6:23     ` Andrew Lunn
2013-03-21  6:26     ` Andrew Lunn
2013-03-21  6:26       ` Andrew Lunn
2013-03-20 22:36 ` [PATCH 14/16] ARM: mvebu: Add thermal support to Armada XP device tree Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 15/16] ARM: mvebu: Add thermal support to Armada 370 " Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21 14:03   ` Sergei Shtylyov
2013-03-21 14:03     ` Sergei Shtylyov
2013-03-21 15:18     ` Ezequiel Garcia
2013-03-21 15:18       ` Ezequiel Garcia
2013-03-20 22:36 ` [PATCH 16/16] ARM: configs: Update mvebu, dove and kirkwood defconfigs for thermal Ezequiel Garcia
2013-03-20 22:36   ` Ezequiel Garcia
2013-03-21  6:45 ` [PATCH 00/16] Marvell EBU thermal sensor consolidation Andrew Lunn
2013-03-21  6:45   ` Andrew Lunn
2013-03-21  9:42   ` Ezequiel Garcia
2013-03-21  9:42     ` Ezequiel Garcia
2013-03-21 12:35   ` Ezequiel Garcia
2013-03-21 12:35     ` Ezequiel Garcia
2013-03-21 13:36     ` Andrew Lunn
2013-03-21 13:36       ` Andrew Lunn
2013-03-21 17:32   ` Jason Gunthorpe
2013-03-21 17:32     ` Jason Gunthorpe
2013-03-22 14:23     ` Ezequiel Garcia
2013-03-22 14:23       ` Ezequiel Garcia
2013-03-21 12:26 ` Ezequiel Garcia
2013-03-21 12:26   ` Ezequiel Garcia

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1363818997-23137-12-git-send-email-ezequiel.garcia@free-electrons.com \
    --to=ezequiel.garcia@free-electrons.com \
    --cc=alior@marvell.com \
    --cc=andrew@lunn.ch \
    --cc=florian@openwrt.org \
    --cc=gregory.clement@free-electrons.com \
    --cc=iwamatsu@nigauri.org \
    --cc=jason@lakedaemon.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rui.zhang@intel.com \
    --cc=sebastian.hesselbarth@gmail.com \
    --cc=thomas.petazzoni@free-electrons.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.