Re: [PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-28 Thread Xinwei Kong



On 2015年03月28日 08:58, YiPing Xu wrote:

在 2015/3/27 16:30, Xinwei Kong 写道:



On 2015/3/26 17:14, YiPing Xu wrote:

在 2015/3/25 15:50, Xinwei Kong 写道:

From: kongxinwei 

This patch adds the support for hisilicon thermal sensor, within
hisilicon SoC. there will register sensors for thermal framework
and use device tree to bind cooling device.

Signed-off-by: Leo Yan 
Signed-off-by: kongxinwei 
---
   drivers/thermal/Kconfig|   8 +
   drivers/thermal/Makefile   |   1 +
   drivers/thermal/hisi_thermal.c | 526
+
   3 files changed, 535 insertions(+)
   create mode 100644 drivers/thermal/hisi_thermal.c

diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index af40db0..81aee01 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -136,6 +136,14 @@ config THERMAL_EMULATION
 because userland can easily disable the thermal policy by
simply
 flooding this sysfs node with low temperature values.

+config HISI_THERMAL
+tristate "Hisilicon thermal driver"
+depends on ARCH_HISI && CPU_THERMAL && OF
+help
+  Enable this to plug hisilicon's thermal sensor driver into
the Linux
+  thermal framework. cpufreq is used as the cooling device to
throttle
+  CPUs when the passive trip is crossed.
+
   config IMX_THERMAL
   tristate "Temperature sensor driver for Freescale i.MX SoCs"
   depends on CPU_THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index fa0dc48..08ae7ac 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)+= ti-soc-thermal/
   obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
   obj-$(CONFIG_ST_THERMAL)+= st/
   obj-$(CONFIG_TEGRA_SOCTHERM)+= tegra_soctherm.o
+obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
diff --git a/drivers/thermal/hisi_thermal.c
b/drivers/thermal/hisi_thermal.c
new file mode 100644
index 000..8edf83a
--- /dev/null
+++ b/drivers/thermal/hisi_thermal.c


are you sure all the SOCs in hisilicon use the same thermal IP ?

if not, this driver should not use the "hisi_" prefix.


We can use this hisi thermal driver framework to satisfy diff thermal
IP, all of SoC will use this drvier by adding a struct about diff IP.
We may talk about hisi thermal diff IP how to satisfy this driver.

Thanks
Xinwei




@@ -0,0 +1,526 @@
+/*
+ * Hisilicon thermal sensor driver
+ *
+ * Copyright (c) 2014-2015 Hisilicon Limited.
+ * Copyright (c) 2014-2015 Linaro Limited.
+ *
+ * Xinwei Kong 
+ * Leo Yan 
+ *
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "thermal_core.h"
+
+#define TEMP0_LAG(0x0)
+#define TEMP0_TH(0x4)
+#define TEMP0_RST_TH(0x8)
+#define TEMP0_CFG(0xC)
+#define TEMP0_EN(0x10)
+#define TEMP0_INT_EN(0x14)
+#define TEMP0_INT_CLR(0x18)
+#define TEMP0_RST_MSK(0x1C)
+#define TEMP0_RAW_INT(0x20)
+#define TEMP0_MSK_INT(0x24)
+#define TEMP0_VALUE(0x28)
+
+#define HISI_TEMP_BASE(-60)
+#define HISI_TEMP_RESET(10)
+#define HISI_TEMP_PASSIVE(85000)
+
+#define HISI_MAX_SENSORS4
+
+struct hisi_thermal_sensor {
+struct hisi_thermal_data *thermal;
+struct thermal_zone_device *tzd;
+const struct thermal_trip *trip;
+
+uint32_t id;
+uint32_t thres_temp, reset_temp;
+};
+
+struct hisi_thermal_data {
+struct platform_device *pdev;
+struct clk *clk;
+
+int irq, irq_bind_sensor;
+bool irq_enabled;
+
+unsigned int sensors_num;
+long sensor_temp[HISI_MAX_SENSORS];
+struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
+
+void __iomem *regs;
+};
+
+static DEFINE_SPINLOCK(thermal_lock);
+


"thermal_lock" should be defined in "hisi_thermal_data" to
support multi device instance.



ok,good comments


+/* in millicelsius */
+static inline int _step_to_temp(int step)
+{
+/*
+ * Every step equals (1 * 200) / 255 celsius, and finally
+ * need convert to millicelsius.
+ */
+return (HISI_TEMP_BASE + (step * 200 / 255)) * 1000;
+}
+
+static inline int _temp_to_step(int temp)
+{
+return ((temp / 1000 - HISI_TEMP_BASE) * 255 / 200);
+}
+
+static long hisi_thermal_get_sensor_temp(struct hisi_thermal_data
*data,
+ struct 

Re: [PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-28 Thread Xinwei Kong



On 2015年03月28日 08:58, YiPing Xu wrote:

在 2015/3/27 16:30, Xinwei Kong 写道:



On 2015/3/26 17:14, YiPing Xu wrote:

在 2015/3/25 15:50, Xinwei Kong 写道:

From: kongxinwei 

This patch adds the support for hisilicon thermal sensor, within
hisilicon SoC. there will register sensors for thermal framework
and use device tree to bind cooling device.

Signed-off-by: Leo Yan 
Signed-off-by: kongxinwei 
---
   drivers/thermal/Kconfig|   8 +
   drivers/thermal/Makefile   |   1 +
   drivers/thermal/hisi_thermal.c | 526
+
   3 files changed, 535 insertions(+)
   create mode 100644 drivers/thermal/hisi_thermal.c

diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index af40db0..81aee01 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -136,6 +136,14 @@ config THERMAL_EMULATION
 because userland can easily disable the thermal policy by
simply
 flooding this sysfs node with low temperature values.

+config HISI_THERMAL
+tristate "Hisilicon thermal driver"
+depends on ARCH_HISI && CPU_THERMAL && OF
+help
+  Enable this to plug hisilicon's thermal sensor driver into
the Linux
+  thermal framework. cpufreq is used as the cooling device to
throttle
+  CPUs when the passive trip is crossed.
+
   config IMX_THERMAL
   tristate "Temperature sensor driver for Freescale i.MX SoCs"
   depends on CPU_THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index fa0dc48..08ae7ac 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)+= ti-soc-thermal/
   obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
   obj-$(CONFIG_ST_THERMAL)+= st/
   obj-$(CONFIG_TEGRA_SOCTHERM)+= tegra_soctherm.o
+obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
diff --git a/drivers/thermal/hisi_thermal.c
b/drivers/thermal/hisi_thermal.c
new file mode 100644
index 000..8edf83a
--- /dev/null
+++ b/drivers/thermal/hisi_thermal.c


are you sure all the SOCs in hisilicon use the same thermal IP ?

if not, this driver should not use the "hisi_" prefix.


We can use this hisi thermal driver framework to satisfy diff thermal
IP, all of SoC will use this drvier by adding a struct about diff IP.
We may talk about hisi thermal diff IP how to satisfy this driver.

Thanks
Xinwei




@@ -0,0 +1,526 @@
+/*
+ * Hisilicon thermal sensor driver
+ *
+ * Copyright (c) 2014-2015 Hisilicon Limited.
+ * Copyright (c) 2014-2015 Linaro Limited.
+ *
+ * Xinwei Kong 
+ * Leo Yan 
+ *
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "thermal_core.h"
+
+#define TEMP0_LAG(0x0)
+#define TEMP0_TH(0x4)
+#define TEMP0_RST_TH(0x8)
+#define TEMP0_CFG(0xC)
+#define TEMP0_EN(0x10)
+#define TEMP0_INT_EN(0x14)
+#define TEMP0_INT_CLR(0x18)
+#define TEMP0_RST_MSK(0x1C)
+#define TEMP0_RAW_INT(0x20)
+#define TEMP0_MSK_INT(0x24)
+#define TEMP0_VALUE(0x28)
+
+#define HISI_TEMP_BASE(-60)
+#define HISI_TEMP_RESET(10)
+#define HISI_TEMP_PASSIVE(85000)
+
+#define HISI_MAX_SENSORS4
+
+struct hisi_thermal_sensor {
+struct hisi_thermal_data *thermal;
+struct thermal_zone_device *tzd;
+const struct thermal_trip *trip;
+
+uint32_t id;
+uint32_t thres_temp, reset_temp;
+};
+
+struct hisi_thermal_data {
+struct platform_device *pdev;
+struct clk *clk;
+
+int irq, irq_bind_sensor;
+bool irq_enabled;
+
+unsigned int sensors_num;
+long sensor_temp[HISI_MAX_SENSORS];
+struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
+
+void __iomem *regs;
+};
+
+static DEFINE_SPINLOCK(thermal_lock);
+


"thermal_lock" should be defined in "hisi_thermal_data" to
support multi device instance.



ok,good comments


+/* in millicelsius */
+static inline int _step_to_temp(int step)
+{
+/*
+ * Every step equals (1 * 200) / 255 celsius, and finally
+ * need convert to millicelsius.
+ */
+return (HISI_TEMP_BASE + (step * 200 / 255)) * 1000;
+}
+
+static inline int _temp_to_step(int temp)
+{
+return ((temp / 1000 - HISI_TEMP_BASE) * 255 / 200);
+}
+
+static long hisi_thermal_get_sensor_temp(struct hisi_thermal_data
*data,
+ struct 

Re: [PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-28 Thread Xinwei Kong



On 2015年03月28日 08:58, YiPing Xu wrote:

在 2015/3/27 16:30, Xinwei Kong 写道:



On 2015/3/26 17:14, YiPing Xu wrote:

在 2015/3/25 15:50, Xinwei Kong 写道:

From: kongxinwei kong.kongxin...@hisilicon.com

This patch adds the support for hisilicon thermal sensor, within
hisilicon SoC. there will register sensors for thermal framework
and use device tree to bind cooling device.

Signed-off-by: Leo Yan leo@linaro.org
Signed-off-by: kongxinwei kong.kongxin...@hisilicon.com
---
   drivers/thermal/Kconfig|   8 +
   drivers/thermal/Makefile   |   1 +
   drivers/thermal/hisi_thermal.c | 526
+
   3 files changed, 535 insertions(+)
   create mode 100644 drivers/thermal/hisi_thermal.c

diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index af40db0..81aee01 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -136,6 +136,14 @@ config THERMAL_EMULATION
 because userland can easily disable the thermal policy by
simply
 flooding this sysfs node with low temperature values.

+config HISI_THERMAL
+tristate Hisilicon thermal driver
+depends on ARCH_HISI  CPU_THERMAL  OF
+help
+  Enable this to plug hisilicon's thermal sensor driver into
the Linux
+  thermal framework. cpufreq is used as the cooling device to
throttle
+  CPUs when the passive trip is crossed.
+
   config IMX_THERMAL
   tristate Temperature sensor driver for Freescale i.MX SoCs
   depends on CPU_THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index fa0dc48..08ae7ac 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)+= ti-soc-thermal/
   obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
   obj-$(CONFIG_ST_THERMAL)+= st/
   obj-$(CONFIG_TEGRA_SOCTHERM)+= tegra_soctherm.o
+obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
diff --git a/drivers/thermal/hisi_thermal.c
b/drivers/thermal/hisi_thermal.c
new file mode 100644
index 000..8edf83a
--- /dev/null
+++ b/drivers/thermal/hisi_thermal.c


are you sure all the SOCs in hisilicon use the same thermal IP ?

if not, this driver should not use the hisi_ prefix.


We can use this hisi thermal driver framework to satisfy diff thermal
IP, all of SoC will use this drvier by adding a struct about diff IP.
We may talk about hisi thermal diff IP how to satisfy this driver.

Thanks
Xinwei




@@ -0,0 +1,526 @@
+/*
+ * Hisilicon thermal sensor driver
+ *
+ * Copyright (c) 2014-2015 Hisilicon Limited.
+ * Copyright (c) 2014-2015 Linaro Limited.
+ *
+ * Xinwei Kong kong.kongxin...@hisilicon.com
+ * Leo Yan leo@linaro.org
+ *
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed as is WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include linux/cpu_cooling.h
+#include linux/cpufreq.h
+#include linux/delay.h
+#include linux/device.h
+#include linux/init.h
+#include linux/interrupt.h
+#include linux/io.h
+#include linux/kernel.h
+#include linux/mfd/syscon.h
+#include linux/module.h
+#include linux/of.h
+#include linux/of_device.h
+#include linux/platform_device.h
+#include linux/regmap.h
+#include linux/slab.h
+#include linux/thermal.h
+#include linux/types.h
+
+#include thermal_core.h
+
+#define TEMP0_LAG(0x0)
+#define TEMP0_TH(0x4)
+#define TEMP0_RST_TH(0x8)
+#define TEMP0_CFG(0xC)
+#define TEMP0_EN(0x10)
+#define TEMP0_INT_EN(0x14)
+#define TEMP0_INT_CLR(0x18)
+#define TEMP0_RST_MSK(0x1C)
+#define TEMP0_RAW_INT(0x20)
+#define TEMP0_MSK_INT(0x24)
+#define TEMP0_VALUE(0x28)
+
+#define HISI_TEMP_BASE(-60)
+#define HISI_TEMP_RESET(10)
+#define HISI_TEMP_PASSIVE(85000)
+
+#define HISI_MAX_SENSORS4
+
+struct hisi_thermal_sensor {
+struct hisi_thermal_data *thermal;
+struct thermal_zone_device *tzd;
+const struct thermal_trip *trip;
+
+uint32_t id;
+uint32_t thres_temp, reset_temp;
+};
+
+struct hisi_thermal_data {
+struct platform_device *pdev;
+struct clk *clk;
+
+int irq, irq_bind_sensor;
+bool irq_enabled;
+
+unsigned int sensors_num;
+long sensor_temp[HISI_MAX_SENSORS];
+struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
+
+void __iomem *regs;
+};
+
+static DEFINE_SPINLOCK(thermal_lock);
+


thermal_lock should be defined in hisi_thermal_data to
support multi device instance.



ok,good comments


+/* in millicelsius */
+static inline int _step_to_temp(int step)
+{
+/*
+ * Every step equals (1 * 200) / 

Re: [PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-28 Thread Xinwei Kong



On 2015年03月28日 08:58, YiPing Xu wrote:

在 2015/3/27 16:30, Xinwei Kong 写道:



On 2015/3/26 17:14, YiPing Xu wrote:

在 2015/3/25 15:50, Xinwei Kong 写道:

From: kongxinwei kong.kongxin...@hisilicon.com

This patch adds the support for hisilicon thermal sensor, within
hisilicon SoC. there will register sensors for thermal framework
and use device tree to bind cooling device.

Signed-off-by: Leo Yan leo@linaro.org
Signed-off-by: kongxinwei kong.kongxin...@hisilicon.com
---
   drivers/thermal/Kconfig|   8 +
   drivers/thermal/Makefile   |   1 +
   drivers/thermal/hisi_thermal.c | 526
+
   3 files changed, 535 insertions(+)
   create mode 100644 drivers/thermal/hisi_thermal.c

diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index af40db0..81aee01 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -136,6 +136,14 @@ config THERMAL_EMULATION
 because userland can easily disable the thermal policy by
simply
 flooding this sysfs node with low temperature values.

+config HISI_THERMAL
+tristate Hisilicon thermal driver
+depends on ARCH_HISI  CPU_THERMAL  OF
+help
+  Enable this to plug hisilicon's thermal sensor driver into
the Linux
+  thermal framework. cpufreq is used as the cooling device to
throttle
+  CPUs when the passive trip is crossed.
+
   config IMX_THERMAL
   tristate Temperature sensor driver for Freescale i.MX SoCs
   depends on CPU_THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index fa0dc48..08ae7ac 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)+= ti-soc-thermal/
   obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
   obj-$(CONFIG_ST_THERMAL)+= st/
   obj-$(CONFIG_TEGRA_SOCTHERM)+= tegra_soctherm.o
+obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
diff --git a/drivers/thermal/hisi_thermal.c
b/drivers/thermal/hisi_thermal.c
new file mode 100644
index 000..8edf83a
--- /dev/null
+++ b/drivers/thermal/hisi_thermal.c


are you sure all the SOCs in hisilicon use the same thermal IP ?

if not, this driver should not use the hisi_ prefix.


We can use this hisi thermal driver framework to satisfy diff thermal
IP, all of SoC will use this drvier by adding a struct about diff IP.
We may talk about hisi thermal diff IP how to satisfy this driver.

Thanks
Xinwei




@@ -0,0 +1,526 @@
+/*
+ * Hisilicon thermal sensor driver
+ *
+ * Copyright (c) 2014-2015 Hisilicon Limited.
+ * Copyright (c) 2014-2015 Linaro Limited.
+ *
+ * Xinwei Kong kong.kongxin...@hisilicon.com
+ * Leo Yan leo@linaro.org
+ *
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed as is WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include linux/cpu_cooling.h
+#include linux/cpufreq.h
+#include linux/delay.h
+#include linux/device.h
+#include linux/init.h
+#include linux/interrupt.h
+#include linux/io.h
+#include linux/kernel.h
+#include linux/mfd/syscon.h
+#include linux/module.h
+#include linux/of.h
+#include linux/of_device.h
+#include linux/platform_device.h
+#include linux/regmap.h
+#include linux/slab.h
+#include linux/thermal.h
+#include linux/types.h
+
+#include thermal_core.h
+
+#define TEMP0_LAG(0x0)
+#define TEMP0_TH(0x4)
+#define TEMP0_RST_TH(0x8)
+#define TEMP0_CFG(0xC)
+#define TEMP0_EN(0x10)
+#define TEMP0_INT_EN(0x14)
+#define TEMP0_INT_CLR(0x18)
+#define TEMP0_RST_MSK(0x1C)
+#define TEMP0_RAW_INT(0x20)
+#define TEMP0_MSK_INT(0x24)
+#define TEMP0_VALUE(0x28)
+
+#define HISI_TEMP_BASE(-60)
+#define HISI_TEMP_RESET(10)
+#define HISI_TEMP_PASSIVE(85000)
+
+#define HISI_MAX_SENSORS4
+
+struct hisi_thermal_sensor {
+struct hisi_thermal_data *thermal;
+struct thermal_zone_device *tzd;
+const struct thermal_trip *trip;
+
+uint32_t id;
+uint32_t thres_temp, reset_temp;
+};
+
+struct hisi_thermal_data {
+struct platform_device *pdev;
+struct clk *clk;
+
+int irq, irq_bind_sensor;
+bool irq_enabled;
+
+unsigned int sensors_num;
+long sensor_temp[HISI_MAX_SENSORS];
+struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
+
+void __iomem *regs;
+};
+
+static DEFINE_SPINLOCK(thermal_lock);
+


thermal_lock should be defined in hisi_thermal_data to
support multi device instance.



ok,good comments


+/* in millicelsius */
+static inline int _step_to_temp(int step)
+{
+/*
+ * Every step equals (1 * 200) / 

Re: [PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-27 Thread YiPing Xu

在 2015/3/27 16:30, Xinwei Kong 写道:



On 2015/3/26 17:14, YiPing Xu wrote:

在 2015/3/25 15:50, Xinwei Kong 写道:

From: kongxinwei 

This patch adds the support for hisilicon thermal sensor, within
hisilicon SoC. there will register sensors for thermal framework
and use device tree to bind cooling device.

Signed-off-by: Leo Yan 
Signed-off-by: kongxinwei 
---
   drivers/thermal/Kconfig|   8 +
   drivers/thermal/Makefile   |   1 +
   drivers/thermal/hisi_thermal.c | 526 
+
   3 files changed, 535 insertions(+)
   create mode 100644 drivers/thermal/hisi_thermal.c

diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index af40db0..81aee01 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -136,6 +136,14 @@ config THERMAL_EMULATION
 because userland can easily disable the thermal policy by simply
 flooding this sysfs node with low temperature values.

+config HISI_THERMAL
+tristate "Hisilicon thermal driver"
+depends on ARCH_HISI && CPU_THERMAL && OF
+help
+  Enable this to plug hisilicon's thermal sensor driver into the Linux
+  thermal framework. cpufreq is used as the cooling device to throttle
+  CPUs when the passive trip is crossed.
+
   config IMX_THERMAL
   tristate "Temperature sensor driver for Freescale i.MX SoCs"
   depends on CPU_THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index fa0dc48..08ae7ac 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)+= ti-soc-thermal/
   obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
   obj-$(CONFIG_ST_THERMAL)+= st/
   obj-$(CONFIG_TEGRA_SOCTHERM)+= tegra_soctherm.o
+obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
diff --git a/drivers/thermal/hisi_thermal.c b/drivers/thermal/hisi_thermal.c
new file mode 100644
index 000..8edf83a
--- /dev/null
+++ b/drivers/thermal/hisi_thermal.c


are you sure all the SOCs in hisilicon use the same thermal IP ?

if not, this driver should not use the "hisi_" prefix.


We can use this hisi thermal driver framework to satisfy diff thermal
IP, all of SoC will use this drvier by adding a struct about diff IP.
We may talk about hisi thermal diff IP how to satisfy this driver.

Thanks
Xinwei




@@ -0,0 +1,526 @@
+/*
+ * Hisilicon thermal sensor driver
+ *
+ * Copyright (c) 2014-2015 Hisilicon Limited.
+ * Copyright (c) 2014-2015 Linaro Limited.
+ *
+ * Xinwei Kong 
+ * Leo Yan 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "thermal_core.h"
+
+#define TEMP0_LAG(0x0)
+#define TEMP0_TH(0x4)
+#define TEMP0_RST_TH(0x8)
+#define TEMP0_CFG(0xC)
+#define TEMP0_EN(0x10)
+#define TEMP0_INT_EN(0x14)
+#define TEMP0_INT_CLR(0x18)
+#define TEMP0_RST_MSK(0x1C)
+#define TEMP0_RAW_INT(0x20)
+#define TEMP0_MSK_INT(0x24)
+#define TEMP0_VALUE(0x28)
+
+#define HISI_TEMP_BASE(-60)
+#define HISI_TEMP_RESET(10)
+#define HISI_TEMP_PASSIVE(85000)
+
+#define HISI_MAX_SENSORS4
+
+struct hisi_thermal_sensor {
+struct hisi_thermal_data *thermal;
+struct thermal_zone_device *tzd;
+const struct thermal_trip *trip;
+
+uint32_t id;
+uint32_t thres_temp, reset_temp;
+};
+
+struct hisi_thermal_data {
+struct platform_device *pdev;
+struct clk *clk;
+
+int irq, irq_bind_sensor;
+bool irq_enabled;
+
+unsigned int sensors_num;
+long sensor_temp[HISI_MAX_SENSORS];
+struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
+
+void __iomem *regs;
+};
+
+static DEFINE_SPINLOCK(thermal_lock);
+


"thermal_lock" should be defined in "hisi_thermal_data" to support multi 
device instance.



ok,good comments


+/* in millicelsius */
+static inline int _step_to_temp(int step)
+{
+/*
+ * Every step equals (1 * 200) / 255 celsius, and finally
+ * need convert to millicelsius.
+ */
+return (HISI_TEMP_BASE + (step * 200 / 255)) * 1000;
+}
+
+static inline int _temp_to_step(int temp)
+{
+return ((temp / 1000 - HISI_TEMP_BASE) * 255 / 200);
+}
+
+static long hisi_thermal_get_sensor_temp(struct hisi_thermal_data *data,
+ struct hisi_thermal_sensor *sensor)
+{
+unsigned 

Re: [PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-27 Thread Xinwei Kong


On 2015/3/26 17:14, YiPing Xu wrote:
> 在 2015/3/25 15:50, Xinwei Kong 写道:
>> From: kongxinwei 
>>
>> This patch adds the support for hisilicon thermal sensor, within
>> hisilicon SoC. there will register sensors for thermal framework
>> and use device tree to bind cooling device.
>>
>> Signed-off-by: Leo Yan 
>> Signed-off-by: kongxinwei 
>> ---
>>   drivers/thermal/Kconfig|   8 +
>>   drivers/thermal/Makefile   |   1 +
>>   drivers/thermal/hisi_thermal.c | 526 
>> +
>>   3 files changed, 535 insertions(+)
>>   create mode 100644 drivers/thermal/hisi_thermal.c
>>
>> diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
>> index af40db0..81aee01 100644
>> --- a/drivers/thermal/Kconfig
>> +++ b/drivers/thermal/Kconfig
>> @@ -136,6 +136,14 @@ config THERMAL_EMULATION
>> because userland can easily disable the thermal policy by simply
>> flooding this sysfs node with low temperature values.
>>
>> +config HISI_THERMAL
>> +tristate "Hisilicon thermal driver"
>> +depends on ARCH_HISI && CPU_THERMAL && OF
>> +help
>> +  Enable this to plug hisilicon's thermal sensor driver into the Linux
>> +  thermal framework. cpufreq is used as the cooling device to throttle
>> +  CPUs when the passive trip is crossed.
>> +
>>   config IMX_THERMAL
>>   tristate "Temperature sensor driver for Freescale i.MX SoCs"
>>   depends on CPU_THERMAL
>> diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
>> index fa0dc48..08ae7ac 100644
>> --- a/drivers/thermal/Makefile
>> +++ b/drivers/thermal/Makefile
>> @@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)+= ti-soc-thermal/
>>   obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
>>   obj-$(CONFIG_ST_THERMAL)+= st/
>>   obj-$(CONFIG_TEGRA_SOCTHERM)+= tegra_soctherm.o
>> +obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
>> diff --git a/drivers/thermal/hisi_thermal.c b/drivers/thermal/hisi_thermal.c
>> new file mode 100644
>> index 000..8edf83a
>> --- /dev/null
>> +++ b/drivers/thermal/hisi_thermal.c
> 
>are you sure all the SOCs in hisilicon use the same thermal IP ?
> 
>if not, this driver should not use the "hisi_" prefix.

We can use this hisi thermal driver framework to satisfy diff thermal
IP, all of SoC will use this drvier by adding a struct about diff IP.
We may talk about hisi thermal diff IP how to satisfy this driver.

Thanks
Xinwei

> 
>> @@ -0,0 +1,526 @@
>> +/*
>> + * Hisilicon thermal sensor driver
>> + *
>> + * Copyright (c) 2014-2015 Hisilicon Limited.
>> + * Copyright (c) 2014-2015 Linaro Limited.
>> + *
>> + * Xinwei Kong 
>> + * Leo Yan 
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + *
>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>> + * kind, whether express or implied; without even the implied warranty
>> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> + * GNU General Public License for more details.
>> + */
>> +
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +#include 
>> +
>> +#include "thermal_core.h"
>> +
>> +#define TEMP0_LAG(0x0)
>> +#define TEMP0_TH(0x4)
>> +#define TEMP0_RST_TH(0x8)
>> +#define TEMP0_CFG(0xC)
>> +#define TEMP0_EN(0x10)
>> +#define TEMP0_INT_EN(0x14)
>> +#define TEMP0_INT_CLR(0x18)
>> +#define TEMP0_RST_MSK(0x1C)
>> +#define TEMP0_RAW_INT(0x20)
>> +#define TEMP0_MSK_INT(0x24)
>> +#define TEMP0_VALUE(0x28)
>> +
>> +#define HISI_TEMP_BASE(-60)
>> +#define HISI_TEMP_RESET(10)
>> +#define HISI_TEMP_PASSIVE(85000)
>> +
>> +#define HISI_MAX_SENSORS4
>> +
>> +struct hisi_thermal_sensor {
>> +struct hisi_thermal_data *thermal;
>> +struct thermal_zone_device *tzd;
>> +const struct thermal_trip *trip;
>> +
>> +uint32_t id;
>> +uint32_t thres_temp, reset_temp;
>> +};
>> +
>> +struct hisi_thermal_data {
>> +struct platform_device *pdev;
>> +struct clk *clk;
>> +
>> +int irq, irq_bind_sensor;
>> +bool irq_enabled;
>> +
>> +unsigned int sensors_num;
>> +long sensor_temp[HISI_MAX_SENSORS];
>> +struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
>> +
>> +void __iomem *regs;
>> +};
>> +
>> +static DEFINE_SPINLOCK(thermal_lock);
>> +
> 
>"thermal_lock" should be defined in "hisi_thermal_data" to support multi 
> device instance.
> 

ok,good comments

>> +/* in millicelsius */
>> +static inline int _step_to_temp(int step)
>> +{
>> +/*
>> + * Every step equals (1 * 200) / 255 celsius, and finally
>> + 

Re: [PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-27 Thread Xinwei Kong


On 2015/3/26 17:14, YiPing Xu wrote:
 在 2015/3/25 15:50, Xinwei Kong 写道:
 From: kongxinwei kong.kongxin...@hisilicon.com

 This patch adds the support for hisilicon thermal sensor, within
 hisilicon SoC. there will register sensors for thermal framework
 and use device tree to bind cooling device.

 Signed-off-by: Leo Yan leo@linaro.org
 Signed-off-by: kongxinwei kong.kongxin...@hisilicon.com
 ---
   drivers/thermal/Kconfig|   8 +
   drivers/thermal/Makefile   |   1 +
   drivers/thermal/hisi_thermal.c | 526 
 +
   3 files changed, 535 insertions(+)
   create mode 100644 drivers/thermal/hisi_thermal.c

 diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
 index af40db0..81aee01 100644
 --- a/drivers/thermal/Kconfig
 +++ b/drivers/thermal/Kconfig
 @@ -136,6 +136,14 @@ config THERMAL_EMULATION
 because userland can easily disable the thermal policy by simply
 flooding this sysfs node with low temperature values.

 +config HISI_THERMAL
 +tristate Hisilicon thermal driver
 +depends on ARCH_HISI  CPU_THERMAL  OF
 +help
 +  Enable this to plug hisilicon's thermal sensor driver into the Linux
 +  thermal framework. cpufreq is used as the cooling device to throttle
 +  CPUs when the passive trip is crossed.
 +
   config IMX_THERMAL
   tristate Temperature sensor driver for Freescale i.MX SoCs
   depends on CPU_THERMAL
 diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
 index fa0dc48..08ae7ac 100644
 --- a/drivers/thermal/Makefile
 +++ b/drivers/thermal/Makefile
 @@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)+= ti-soc-thermal/
   obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
   obj-$(CONFIG_ST_THERMAL)+= st/
   obj-$(CONFIG_TEGRA_SOCTHERM)+= tegra_soctherm.o
 +obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
 diff --git a/drivers/thermal/hisi_thermal.c b/drivers/thermal/hisi_thermal.c
 new file mode 100644
 index 000..8edf83a
 --- /dev/null
 +++ b/drivers/thermal/hisi_thermal.c
 
are you sure all the SOCs in hisilicon use the same thermal IP ?
 
if not, this driver should not use the hisi_ prefix.

We can use this hisi thermal driver framework to satisfy diff thermal
IP, all of SoC will use this drvier by adding a struct about diff IP.
We may talk about hisi thermal diff IP how to satisfy this driver.

Thanks
Xinwei

 
 @@ -0,0 +1,526 @@
 +/*
 + * Hisilicon thermal sensor driver
 + *
 + * Copyright (c) 2014-2015 Hisilicon Limited.
 + * Copyright (c) 2014-2015 Linaro Limited.
 + *
 + * Xinwei Kong kong.kongxin...@hisilicon.com
 + * Leo Yan leo@linaro.org
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
 + * published by the Free Software Foundation.
 + *
 + * This program is distributed as is WITHOUT ANY WARRANTY of any
 + * kind, whether express or implied; without even the implied warranty
 + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 + * GNU General Public License for more details.
 + */
 +
 +#include linux/cpu_cooling.h
 +#include linux/cpufreq.h
 +#include linux/delay.h
 +#include linux/device.h
 +#include linux/init.h
 +#include linux/interrupt.h
 +#include linux/io.h
 +#include linux/kernel.h
 +#include linux/mfd/syscon.h
 +#include linux/module.h
 +#include linux/of.h
 +#include linux/of_device.h
 +#include linux/platform_device.h
 +#include linux/regmap.h
 +#include linux/slab.h
 +#include linux/thermal.h
 +#include linux/types.h
 +
 +#include thermal_core.h
 +
 +#define TEMP0_LAG(0x0)
 +#define TEMP0_TH(0x4)
 +#define TEMP0_RST_TH(0x8)
 +#define TEMP0_CFG(0xC)
 +#define TEMP0_EN(0x10)
 +#define TEMP0_INT_EN(0x14)
 +#define TEMP0_INT_CLR(0x18)
 +#define TEMP0_RST_MSK(0x1C)
 +#define TEMP0_RAW_INT(0x20)
 +#define TEMP0_MSK_INT(0x24)
 +#define TEMP0_VALUE(0x28)
 +
 +#define HISI_TEMP_BASE(-60)
 +#define HISI_TEMP_RESET(10)
 +#define HISI_TEMP_PASSIVE(85000)
 +
 +#define HISI_MAX_SENSORS4
 +
 +struct hisi_thermal_sensor {
 +struct hisi_thermal_data *thermal;
 +struct thermal_zone_device *tzd;
 +const struct thermal_trip *trip;
 +
 +uint32_t id;
 +uint32_t thres_temp, reset_temp;
 +};
 +
 +struct hisi_thermal_data {
 +struct platform_device *pdev;
 +struct clk *clk;
 +
 +int irq, irq_bind_sensor;
 +bool irq_enabled;
 +
 +unsigned int sensors_num;
 +long sensor_temp[HISI_MAX_SENSORS];
 +struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
 +
 +void __iomem *regs;
 +};
 +
 +static DEFINE_SPINLOCK(thermal_lock);
 +
 
thermal_lock should be defined in hisi_thermal_data to support multi 
 device instance.
 

ok,good comments

 +/* in millicelsius */
 +static inline int _step_to_temp(int step)
 +{
 +

Re: [PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-27 Thread YiPing Xu

在 2015/3/27 16:30, Xinwei Kong 写道:



On 2015/3/26 17:14, YiPing Xu wrote:

在 2015/3/25 15:50, Xinwei Kong 写道:

From: kongxinwei kong.kongxin...@hisilicon.com

This patch adds the support for hisilicon thermal sensor, within
hisilicon SoC. there will register sensors for thermal framework
and use device tree to bind cooling device.

Signed-off-by: Leo Yan leo@linaro.org
Signed-off-by: kongxinwei kong.kongxin...@hisilicon.com
---
   drivers/thermal/Kconfig|   8 +
   drivers/thermal/Makefile   |   1 +
   drivers/thermal/hisi_thermal.c | 526 
+
   3 files changed, 535 insertions(+)
   create mode 100644 drivers/thermal/hisi_thermal.c

diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index af40db0..81aee01 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -136,6 +136,14 @@ config THERMAL_EMULATION
 because userland can easily disable the thermal policy by simply
 flooding this sysfs node with low temperature values.

+config HISI_THERMAL
+tristate Hisilicon thermal driver
+depends on ARCH_HISI  CPU_THERMAL  OF
+help
+  Enable this to plug hisilicon's thermal sensor driver into the Linux
+  thermal framework. cpufreq is used as the cooling device to throttle
+  CPUs when the passive trip is crossed.
+
   config IMX_THERMAL
   tristate Temperature sensor driver for Freescale i.MX SoCs
   depends on CPU_THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index fa0dc48..08ae7ac 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)+= ti-soc-thermal/
   obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
   obj-$(CONFIG_ST_THERMAL)+= st/
   obj-$(CONFIG_TEGRA_SOCTHERM)+= tegra_soctherm.o
+obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
diff --git a/drivers/thermal/hisi_thermal.c b/drivers/thermal/hisi_thermal.c
new file mode 100644
index 000..8edf83a
--- /dev/null
+++ b/drivers/thermal/hisi_thermal.c


are you sure all the SOCs in hisilicon use the same thermal IP ?

if not, this driver should not use the hisi_ prefix.


We can use this hisi thermal driver framework to satisfy diff thermal
IP, all of SoC will use this drvier by adding a struct about diff IP.
We may talk about hisi thermal diff IP how to satisfy this driver.

Thanks
Xinwei




@@ -0,0 +1,526 @@
+/*
+ * Hisilicon thermal sensor driver
+ *
+ * Copyright (c) 2014-2015 Hisilicon Limited.
+ * Copyright (c) 2014-2015 Linaro Limited.
+ *
+ * Xinwei Kong kong.kongxin...@hisilicon.com
+ * Leo Yan leo@linaro.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed as is WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include linux/cpu_cooling.h
+#include linux/cpufreq.h
+#include linux/delay.h
+#include linux/device.h
+#include linux/init.h
+#include linux/interrupt.h
+#include linux/io.h
+#include linux/kernel.h
+#include linux/mfd/syscon.h
+#include linux/module.h
+#include linux/of.h
+#include linux/of_device.h
+#include linux/platform_device.h
+#include linux/regmap.h
+#include linux/slab.h
+#include linux/thermal.h
+#include linux/types.h
+
+#include thermal_core.h
+
+#define TEMP0_LAG(0x0)
+#define TEMP0_TH(0x4)
+#define TEMP0_RST_TH(0x8)
+#define TEMP0_CFG(0xC)
+#define TEMP0_EN(0x10)
+#define TEMP0_INT_EN(0x14)
+#define TEMP0_INT_CLR(0x18)
+#define TEMP0_RST_MSK(0x1C)
+#define TEMP0_RAW_INT(0x20)
+#define TEMP0_MSK_INT(0x24)
+#define TEMP0_VALUE(0x28)
+
+#define HISI_TEMP_BASE(-60)
+#define HISI_TEMP_RESET(10)
+#define HISI_TEMP_PASSIVE(85000)
+
+#define HISI_MAX_SENSORS4
+
+struct hisi_thermal_sensor {
+struct hisi_thermal_data *thermal;
+struct thermal_zone_device *tzd;
+const struct thermal_trip *trip;
+
+uint32_t id;
+uint32_t thres_temp, reset_temp;
+};
+
+struct hisi_thermal_data {
+struct platform_device *pdev;
+struct clk *clk;
+
+int irq, irq_bind_sensor;
+bool irq_enabled;
+
+unsigned int sensors_num;
+long sensor_temp[HISI_MAX_SENSORS];
+struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
+
+void __iomem *regs;
+};
+
+static DEFINE_SPINLOCK(thermal_lock);
+


thermal_lock should be defined in hisi_thermal_data to support multi 
device instance.



ok,good comments


+/* in millicelsius */
+static inline int _step_to_temp(int step)
+{
+/*
+ * Every step equals (1 * 200) / 255 celsius, and finally
+ * need 

Re: [PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-26 Thread YiPing Xu

在 2015/3/25 15:50, Xinwei Kong 写道:

From: kongxinwei 

This patch adds the support for hisilicon thermal sensor, within
hisilicon SoC. there will register sensors for thermal framework
and use device tree to bind cooling device.

Signed-off-by: Leo Yan 
Signed-off-by: kongxinwei 
---
  drivers/thermal/Kconfig|   8 +
  drivers/thermal/Makefile   |   1 +
  drivers/thermal/hisi_thermal.c | 526 +
  3 files changed, 535 insertions(+)
  create mode 100644 drivers/thermal/hisi_thermal.c

diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index af40db0..81aee01 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -136,6 +136,14 @@ config THERMAL_EMULATION
  because userland can easily disable the thermal policy by simply
  flooding this sysfs node with low temperature values.

+config HISI_THERMAL
+   tristate "Hisilicon thermal driver"
+   depends on ARCH_HISI && CPU_THERMAL && OF
+   help
+ Enable this to plug hisilicon's thermal sensor driver into the Linux
+ thermal framework. cpufreq is used as the cooling device to throttle
+ CPUs when the passive trip is crossed.
+
  config IMX_THERMAL
tristate "Temperature sensor driver for Freescale i.MX SoCs"
depends on CPU_THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index fa0dc48..08ae7ac 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)  += ti-soc-thermal/
  obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
  obj-$(CONFIG_ST_THERMAL)  += st/
  obj-$(CONFIG_TEGRA_SOCTHERM)  += tegra_soctherm.o
+obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
diff --git a/drivers/thermal/hisi_thermal.c b/drivers/thermal/hisi_thermal.c
new file mode 100644
index 000..8edf83a
--- /dev/null
+++ b/drivers/thermal/hisi_thermal.c


   are you sure all the SOCs in hisilicon use the same thermal IP ?

   if not, this driver should not use the "hisi_" prefix.


@@ -0,0 +1,526 @@
+/*
+ * Hisilicon thermal sensor driver
+ *
+ * Copyright (c) 2014-2015 Hisilicon Limited.
+ * Copyright (c) 2014-2015 Linaro Limited.
+ *
+ * Xinwei Kong 
+ * Leo Yan 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "thermal_core.h"
+
+#define TEMP0_LAG  (0x0)
+#define TEMP0_TH   (0x4)
+#define TEMP0_RST_TH   (0x8)
+#define TEMP0_CFG  (0xC)
+#define TEMP0_EN   (0x10)
+#define TEMP0_INT_EN   (0x14)
+#define TEMP0_INT_CLR  (0x18)
+#define TEMP0_RST_MSK  (0x1C)
+#define TEMP0_RAW_INT  (0x20)
+#define TEMP0_MSK_INT  (0x24)
+#define TEMP0_VALUE(0x28)
+
+#define HISI_TEMP_BASE (-60)
+#define HISI_TEMP_RESET(10)
+#define HISI_TEMP_PASSIVE  (85000)
+
+#define HISI_MAX_SENSORS   4
+
+struct hisi_thermal_sensor {
+   struct hisi_thermal_data *thermal;
+   struct thermal_zone_device *tzd;
+   const struct thermal_trip *trip;
+
+   uint32_t id;
+   uint32_t thres_temp, reset_temp;
+};
+
+struct hisi_thermal_data {
+   struct platform_device *pdev;
+   struct clk *clk;
+
+   int irq, irq_bind_sensor;
+   bool irq_enabled;
+
+   unsigned int sensors_num;
+   long sensor_temp[HISI_MAX_SENSORS];
+   struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
+
+   void __iomem *regs;
+};
+
+static DEFINE_SPINLOCK(thermal_lock);
+


   "thermal_lock" should be defined in "hisi_thermal_data" to support 
multi device instance.



+/* in millicelsius */
+static inline int _step_to_temp(int step)
+{
+   /*
+* Every step equals (1 * 200) / 255 celsius, and finally
+* need convert to millicelsius.
+*/
+   return (HISI_TEMP_BASE + (step * 200 / 255)) * 1000;
+}
+
+static inline int _temp_to_step(int temp)
+{
+   return ((temp / 1000 - HISI_TEMP_BASE) * 255 / 200);
+}
+
+static long hisi_thermal_get_sensor_temp(struct hisi_thermal_data *data,
+struct hisi_thermal_sensor *sensor)
+{
+   unsigned long flags;
+   int val;
+
+   spin_lock_irqsave(_lock, flags);
+
+   /* disable module firstly */
+   

Re: [PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-26 Thread YiPing Xu

在 2015/3/25 15:50, Xinwei Kong 写道:

From: kongxinwei kong.kongxin...@hisilicon.com

This patch adds the support for hisilicon thermal sensor, within
hisilicon SoC. there will register sensors for thermal framework
and use device tree to bind cooling device.

Signed-off-by: Leo Yan leo@linaro.org
Signed-off-by: kongxinwei kong.kongxin...@hisilicon.com
---
  drivers/thermal/Kconfig|   8 +
  drivers/thermal/Makefile   |   1 +
  drivers/thermal/hisi_thermal.c | 526 +
  3 files changed, 535 insertions(+)
  create mode 100644 drivers/thermal/hisi_thermal.c

diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index af40db0..81aee01 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -136,6 +136,14 @@ config THERMAL_EMULATION
  because userland can easily disable the thermal policy by simply
  flooding this sysfs node with low temperature values.

+config HISI_THERMAL
+   tristate Hisilicon thermal driver
+   depends on ARCH_HISI  CPU_THERMAL  OF
+   help
+ Enable this to plug hisilicon's thermal sensor driver into the Linux
+ thermal framework. cpufreq is used as the cooling device to throttle
+ CPUs when the passive trip is crossed.
+
  config IMX_THERMAL
tristate Temperature sensor driver for Freescale i.MX SoCs
depends on CPU_THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index fa0dc48..08ae7ac 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)  += ti-soc-thermal/
  obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
  obj-$(CONFIG_ST_THERMAL)  += st/
  obj-$(CONFIG_TEGRA_SOCTHERM)  += tegra_soctherm.o
+obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
diff --git a/drivers/thermal/hisi_thermal.c b/drivers/thermal/hisi_thermal.c
new file mode 100644
index 000..8edf83a
--- /dev/null
+++ b/drivers/thermal/hisi_thermal.c


   are you sure all the SOCs in hisilicon use the same thermal IP ?

   if not, this driver should not use the hisi_ prefix.


@@ -0,0 +1,526 @@
+/*
+ * Hisilicon thermal sensor driver
+ *
+ * Copyright (c) 2014-2015 Hisilicon Limited.
+ * Copyright (c) 2014-2015 Linaro Limited.
+ *
+ * Xinwei Kong kong.kongxin...@hisilicon.com
+ * Leo Yan leo@linaro.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed as is WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include linux/cpu_cooling.h
+#include linux/cpufreq.h
+#include linux/delay.h
+#include linux/device.h
+#include linux/init.h
+#include linux/interrupt.h
+#include linux/io.h
+#include linux/kernel.h
+#include linux/mfd/syscon.h
+#include linux/module.h
+#include linux/of.h
+#include linux/of_device.h
+#include linux/platform_device.h
+#include linux/regmap.h
+#include linux/slab.h
+#include linux/thermal.h
+#include linux/types.h
+
+#include thermal_core.h
+
+#define TEMP0_LAG  (0x0)
+#define TEMP0_TH   (0x4)
+#define TEMP0_RST_TH   (0x8)
+#define TEMP0_CFG  (0xC)
+#define TEMP0_EN   (0x10)
+#define TEMP0_INT_EN   (0x14)
+#define TEMP0_INT_CLR  (0x18)
+#define TEMP0_RST_MSK  (0x1C)
+#define TEMP0_RAW_INT  (0x20)
+#define TEMP0_MSK_INT  (0x24)
+#define TEMP0_VALUE(0x28)
+
+#define HISI_TEMP_BASE (-60)
+#define HISI_TEMP_RESET(10)
+#define HISI_TEMP_PASSIVE  (85000)
+
+#define HISI_MAX_SENSORS   4
+
+struct hisi_thermal_sensor {
+   struct hisi_thermal_data *thermal;
+   struct thermal_zone_device *tzd;
+   const struct thermal_trip *trip;
+
+   uint32_t id;
+   uint32_t thres_temp, reset_temp;
+};
+
+struct hisi_thermal_data {
+   struct platform_device *pdev;
+   struct clk *clk;
+
+   int irq, irq_bind_sensor;
+   bool irq_enabled;
+
+   unsigned int sensors_num;
+   long sensor_temp[HISI_MAX_SENSORS];
+   struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
+
+   void __iomem *regs;
+};
+
+static DEFINE_SPINLOCK(thermal_lock);
+


   thermal_lock should be defined in hisi_thermal_data to support 
multi device instance.



+/* in millicelsius */
+static inline int _step_to_temp(int step)
+{
+   /*
+* Every step equals (1 * 200) / 255 celsius, and finally
+* need convert to millicelsius.
+*/
+   return (HISI_TEMP_BASE + (step * 200 / 255)) * 1000;
+}
+
+static inline int _temp_to_step(int temp)
+{

[PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-25 Thread Xinwei Kong
From: kongxinwei 

This patch adds the support for hisilicon thermal sensor, within
hisilicon SoC. there will register sensors for thermal framework
and use device tree to bind cooling device.

Signed-off-by: Leo Yan 
Signed-off-by: kongxinwei 
---
 drivers/thermal/Kconfig|   8 +
 drivers/thermal/Makefile   |   1 +
 drivers/thermal/hisi_thermal.c | 526 +
 3 files changed, 535 insertions(+)
 create mode 100644 drivers/thermal/hisi_thermal.c

diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index af40db0..81aee01 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -136,6 +136,14 @@ config THERMAL_EMULATION
  because userland can easily disable the thermal policy by simply
  flooding this sysfs node with low temperature values.
 
+config HISI_THERMAL
+   tristate "Hisilicon thermal driver"
+   depends on ARCH_HISI && CPU_THERMAL && OF
+   help
+ Enable this to plug hisilicon's thermal sensor driver into the Linux
+ thermal framework. cpufreq is used as the cooling device to throttle
+ CPUs when the passive trip is crossed.
+
 config IMX_THERMAL
tristate "Temperature sensor driver for Freescale i.MX SoCs"
depends on CPU_THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index fa0dc48..08ae7ac 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)  += ti-soc-thermal/
 obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
 obj-$(CONFIG_ST_THERMAL)   += st/
 obj-$(CONFIG_TEGRA_SOCTHERM)   += tegra_soctherm.o
+obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
diff --git a/drivers/thermal/hisi_thermal.c b/drivers/thermal/hisi_thermal.c
new file mode 100644
index 000..8edf83a
--- /dev/null
+++ b/drivers/thermal/hisi_thermal.c
@@ -0,0 +1,526 @@
+/*
+ * Hisilicon thermal sensor driver
+ *
+ * Copyright (c) 2014-2015 Hisilicon Limited.
+ * Copyright (c) 2014-2015 Linaro Limited.
+ *
+ * Xinwei Kong 
+ * Leo Yan 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "thermal_core.h"
+
+#define TEMP0_LAG  (0x0)
+#define TEMP0_TH   (0x4)
+#define TEMP0_RST_TH   (0x8)
+#define TEMP0_CFG  (0xC)
+#define TEMP0_EN   (0x10)
+#define TEMP0_INT_EN   (0x14)
+#define TEMP0_INT_CLR  (0x18)
+#define TEMP0_RST_MSK  (0x1C)
+#define TEMP0_RAW_INT  (0x20)
+#define TEMP0_MSK_INT  (0x24)
+#define TEMP0_VALUE(0x28)
+
+#define HISI_TEMP_BASE (-60)
+#define HISI_TEMP_RESET(10)
+#define HISI_TEMP_PASSIVE  (85000)
+
+#define HISI_MAX_SENSORS   4
+
+struct hisi_thermal_sensor {
+   struct hisi_thermal_data *thermal;
+   struct thermal_zone_device *tzd;
+   const struct thermal_trip *trip;
+
+   uint32_t id;
+   uint32_t thres_temp, reset_temp;
+};
+
+struct hisi_thermal_data {
+   struct platform_device *pdev;
+   struct clk *clk;
+
+   int irq, irq_bind_sensor;
+   bool irq_enabled;
+
+   unsigned int sensors_num;
+   long sensor_temp[HISI_MAX_SENSORS];
+   struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
+
+   void __iomem *regs;
+};
+
+static DEFINE_SPINLOCK(thermal_lock);
+
+/* in millicelsius */
+static inline int _step_to_temp(int step)
+{
+   /*
+* Every step equals (1 * 200) / 255 celsius, and finally
+* need convert to millicelsius.
+*/
+   return (HISI_TEMP_BASE + (step * 200 / 255)) * 1000;
+}
+
+static inline int _temp_to_step(int temp)
+{
+   return ((temp / 1000 - HISI_TEMP_BASE) * 255 / 200);
+}
+
+static long hisi_thermal_get_sensor_temp(struct hisi_thermal_data *data,
+struct hisi_thermal_sensor *sensor)
+{
+   unsigned long flags;
+   int val;
+
+   spin_lock_irqsave(_lock, flags);
+
+   /* disable module firstly */
+   writel(0x0, data->regs + TEMP0_EN);
+
+   /* select sensor id */
+   writel((sensor->id << 12), data->regs + TEMP0_CFG);
+
+   /* enable module */
+   writel(0x1, data->regs + TEMP0_EN);
+
+   mdelay(5);
+
+   val = readl(data->regs + TEMP0_VALUE);

[PATCH v1 1/2] thermal: hisilicon: add new hisilicon thermal sensor driver

2015-03-25 Thread Xinwei Kong
From: kongxinwei kong.kongxin...@hisilicon.com

This patch adds the support for hisilicon thermal sensor, within
hisilicon SoC. there will register sensors for thermal framework
and use device tree to bind cooling device.

Signed-off-by: Leo Yan leo@linaro.org
Signed-off-by: kongxinwei kong.kongxin...@hisilicon.com
---
 drivers/thermal/Kconfig|   8 +
 drivers/thermal/Makefile   |   1 +
 drivers/thermal/hisi_thermal.c | 526 +
 3 files changed, 535 insertions(+)
 create mode 100644 drivers/thermal/hisi_thermal.c

diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index af40db0..81aee01 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -136,6 +136,14 @@ config THERMAL_EMULATION
  because userland can easily disable the thermal policy by simply
  flooding this sysfs node with low temperature values.
 
+config HISI_THERMAL
+   tristate Hisilicon thermal driver
+   depends on ARCH_HISI  CPU_THERMAL  OF
+   help
+ Enable this to plug hisilicon's thermal sensor driver into the Linux
+ thermal framework. cpufreq is used as the cooling device to throttle
+ CPUs when the passive trip is crossed.
+
 config IMX_THERMAL
tristate Temperature sensor driver for Freescale i.MX SoCs
depends on CPU_THERMAL
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index fa0dc48..08ae7ac 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_TI_SOC_THERMAL)  += ti-soc-thermal/
 obj-$(CONFIG_INT340X_THERMAL)  += int340x_thermal/
 obj-$(CONFIG_ST_THERMAL)   += st/
 obj-$(CONFIG_TEGRA_SOCTHERM)   += tegra_soctherm.o
+obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
diff --git a/drivers/thermal/hisi_thermal.c b/drivers/thermal/hisi_thermal.c
new file mode 100644
index 000..8edf83a
--- /dev/null
+++ b/drivers/thermal/hisi_thermal.c
@@ -0,0 +1,526 @@
+/*
+ * Hisilicon thermal sensor driver
+ *
+ * Copyright (c) 2014-2015 Hisilicon Limited.
+ * Copyright (c) 2014-2015 Linaro Limited.
+ *
+ * Xinwei Kong kong.kongxin...@hisilicon.com
+ * Leo Yan leo@linaro.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed as is WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include linux/cpu_cooling.h
+#include linux/cpufreq.h
+#include linux/delay.h
+#include linux/device.h
+#include linux/init.h
+#include linux/interrupt.h
+#include linux/io.h
+#include linux/kernel.h
+#include linux/mfd/syscon.h
+#include linux/module.h
+#include linux/of.h
+#include linux/of_device.h
+#include linux/platform_device.h
+#include linux/regmap.h
+#include linux/slab.h
+#include linux/thermal.h
+#include linux/types.h
+
+#include thermal_core.h
+
+#define TEMP0_LAG  (0x0)
+#define TEMP0_TH   (0x4)
+#define TEMP0_RST_TH   (0x8)
+#define TEMP0_CFG  (0xC)
+#define TEMP0_EN   (0x10)
+#define TEMP0_INT_EN   (0x14)
+#define TEMP0_INT_CLR  (0x18)
+#define TEMP0_RST_MSK  (0x1C)
+#define TEMP0_RAW_INT  (0x20)
+#define TEMP0_MSK_INT  (0x24)
+#define TEMP0_VALUE(0x28)
+
+#define HISI_TEMP_BASE (-60)
+#define HISI_TEMP_RESET(10)
+#define HISI_TEMP_PASSIVE  (85000)
+
+#define HISI_MAX_SENSORS   4
+
+struct hisi_thermal_sensor {
+   struct hisi_thermal_data *thermal;
+   struct thermal_zone_device *tzd;
+   const struct thermal_trip *trip;
+
+   uint32_t id;
+   uint32_t thres_temp, reset_temp;
+};
+
+struct hisi_thermal_data {
+   struct platform_device *pdev;
+   struct clk *clk;
+
+   int irq, irq_bind_sensor;
+   bool irq_enabled;
+
+   unsigned int sensors_num;
+   long sensor_temp[HISI_MAX_SENSORS];
+   struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS];
+
+   void __iomem *regs;
+};
+
+static DEFINE_SPINLOCK(thermal_lock);
+
+/* in millicelsius */
+static inline int _step_to_temp(int step)
+{
+   /*
+* Every step equals (1 * 200) / 255 celsius, and finally
+* need convert to millicelsius.
+*/
+   return (HISI_TEMP_BASE + (step * 200 / 255)) * 1000;
+}
+
+static inline int _temp_to_step(int temp)
+{
+   return ((temp / 1000 - HISI_TEMP_BASE) * 255 / 200);
+}
+
+static long hisi_thermal_get_sensor_temp(struct hisi_thermal_data *data,
+struct hisi_thermal_sensor *sensor)
+{
+   unsigned long flags;
+   int val;
+