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
next prev 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: linkBe 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.