public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: jonghwa3.lee@samsung.com
To: Amit Daniel Kachhap <amit.daniel@samsung.com>
Cc: linux-pm@vger.kernel.org, Zhang Rui <rui.zhang@intel.com>,
	linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,
	amit.kachhap@gmail.com, Kukjin Kim <kgene.kim@samsung.com>,
	Eduardo Valentin <eduardo.valentin@ti.com>
Subject: Re: [PATCH V4 22/30] thermal: exynos: Add support for exynos5440 TMU sensor.
Date: Sat, 18 May 2013 14:23:18 +0900	[thread overview]
Message-ID: <51971046.3080201@samsung.com> (raw)
In-Reply-To: <1368525540-15034-23-git-send-email-amit.daniel@samsung.com>

On 2013년 05월 14일 18:58, Amit Daniel Kachhap wrote:

> This patch modifies TMU controller to add changes needed to work with
> exynos5440 platform. This sensor registers 3 instance of the tmu controller
> with the thermal zone and hence reports 3 temperature output. This controller
> supports upto five trip points. For critical threshold the driver uses the
> core driver thermal framework for shutdown.
> 
> Acked-by: Kukjin Kim <kgene.kim@samsung.com>
> Signed-off-by: Amit Daniel Kachhap <amit.daniel@samsung.com>
> ---
>  .../devicetree/bindings/thermal/exynos-thermal.txt |   28 ++++++++++++-
>  drivers/thermal/samsung/exynos_tmu.c               |   43 +++++++++++++++++--
>  drivers/thermal/samsung/exynos_tmu.h               |    6 +++
>  drivers/thermal/samsung/exynos_tmu_data.h          |    2 +
>  4 files changed, 72 insertions(+), 7 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/thermal/exynos-thermal.txt b/Documentation/devicetree/bindings/thermal/exynos-thermal.txt
> index 535fd0e..970eeba 100644
> --- a/Documentation/devicetree/bindings/thermal/exynos-thermal.txt
> +++ b/Documentation/devicetree/bindings/thermal/exynos-thermal.txt
> @@ -6,13 +6,16 @@
>  	       "samsung,exynos4412-tmu"
>  	       "samsung,exynos4210-tmu"
>  	       "samsung,exynos5250-tmu"
> +	       "samsung,exynos5440-tmu"
>  - interrupt-parent : The phandle for the interrupt controller
> -- reg : Address range of the thermal registers
> +- reg : Address range of the thermal registers. For exynos5440-tmu which has 3
> +	instances of TMU, 2 set of register has to supplied. First set belongs
> +	to each instance of TMU and second set belongs to common TMU registers.
>  - interrupts : Should contain interrupt for thermal system
>  - clocks : The main clock for TMU device
>  - clock-names : Thermal system clock name
>  
> -Example:
> +Example 1):
>  
>  	tmu@100C0000 {
>  		compatible = "samsung,exynos4412-tmu";
> @@ -23,3 +26,24 @@ Example:
>  		clock-names = "tmu_apbif";
>  		status = "disabled";
>  	};
> +
> +Example 2):
> +
> +	tmuctrl_0: tmuctrl@160118 {
> +		compatible = "samsung,exynos5440-tmu";
> +		reg = <0x160118 0x230>, <0x160368 0x10>;
> +		interrupts = <0 58 0>;
> +		clocks = <&clock 21>;
> +		clock-names = "tmu_apbif";
> +	};
> +
> +Note: For multi-instance tmu each instance should have an alias correctly
> +numbered in "aliases" node.
> +
> +Example:
> +
> +aliases {
> +	tmuctrl0 = &tmuctrl_0;
> +	tmuctrl1 = &tmuctrl_1;
> +	tmuctrl2 = &tmuctrl_2;
> +};
> diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
> index 7f7b1cf..7ca9c4d 100644
> --- a/drivers/thermal/samsung/exynos_tmu.c
> +++ b/drivers/thermal/samsung/exynos_tmu.c
> @@ -185,9 +185,11 @@ static int exynos_tmu_initialize(struct platform_device *pdev)
>  			reg->threshold_th0 + i * sizeof(reg->threshold_th0));
>  
>  		writel(reg->inten_rise_mask, data->base + reg->tmu_intclear);
> -	} else if (data->soc == SOC_ARCH_EXYNOS) {
> +	} else if (data->soc == SOC_ARCH_EXYNOS ||
> +			data->soc == SOC_ARCH_EXYNOS5440) {
>  		/* Write temperature code for rising and falling threshold */
> -		for (i = 0; i < trigger_levs; i++) {
> +		for (i = 0;
> +		i < trigger_levs && i < EXYNOS_MAX_TRIGGER_PER_REG; i++) {
>  			threshold_code = temp_to_code(data,
>  						pdata->trigger_levels[i]);
>  			if (threshold_code < 0) {
> @@ -218,7 +220,30 @@ static int exynos_tmu_initialize(struct platform_device *pdev)
>  		writel((reg->inten_rise_mask << reg->inten_rise_shift) |
>  			(reg->inten_fall_mask << reg->inten_fall_shift),
>  				data->base + reg->tmu_intclear);
> +
> +		/* if 5th threshold limit is also present, use TH2 register */
> +		i = EXYNOS_MAX_TRIGGER_PER_REG;
> +		if (pdata->trigger_levels[i]) {
> +			threshold_code = temp_to_code(data,
> +						pdata->trigger_levels[i]);
> +			if (threshold_code < 0) {
> +				ret = threshold_code;
> +				goto out;
> +			}
> +			rising_threshold =
> +				threshold_code << reg->threshold_th3_l0_shift;
> +			writel(rising_threshold,
> +				data->base + reg->threshold_th2);
> +			if (pdata->trigger_type[i] == HW_TRIP) {
> +				con = readl(data->base + reg->tmu_ctrl);
> +				con |= (1 << reg->therm_trip_en_shift);
> +				writel(con, data->base + reg->tmu_ctrl);
> +			}
> +		}
>  	}
> +	/*Clear the PMIN in the common TMU register*/
> +	if (reg->tmu_pmin && !data->id)
> +		writel(0, data->base_common + reg->tmu_pmin);
>  out:
>  	clk_disable(data->clk);
>  	mutex_unlock(&data->lock);
> @@ -345,7 +370,14 @@ static void exynos_tmu_work(struct work_struct *work)
>  			struct exynos_tmu_data, irq_work);
>  	struct exynos_tmu_platform_data *pdata = data->pdata;
>  	const struct exynos_tmu_registers *reg = pdata->registers;
> -	unsigned int val_irq;
> +	unsigned int val_irq, val_type;
> +
> +	/* Find which sensor generated this interrupt */
> +	if (reg->tmu_irqstatus) {
> +		val_type = readl(data->base_common + reg->tmu_irqstatus);
> +		if (!((val_type >> data->id) & 0x1))
> +			goto out;


I have a question about your implementation for supporting EXYNOS5440.
I don't know exactly how EXYNO5440's tmu is working, but just guess it would be
similar with other EXYNOS series's without number of thermal sensors. (exclusive
register map and threshold level). Due to the multiple number of thermal sensor
in EXYNOS5440, it have multiple thermal zone devices and that's why it just
leave interrupt pin in pending if interrupt is not its, right?

So, my curious is, why we make all platform devices for each of thermal zone
devices? Why don't you just handle all thermal zone devices with one platform
device?

Yes, It's probably right to make multiple devices node to support them, because
it has different physical hardware(sensors). But we have one TMU , don't we?
(Maybe my assumption is wrong, I assume that it has one TMU because it looks
like it has only one irq line.). If I'm right, I think it is better to manage
all thermal zone devices with one platform device. Then, we don't need to leave
irq handler with leaving it pendded like above and also we may not need other
your patches like adding base_common iomem variable.

I'd like to listen your opinion about this.

Thanks,
Jonghwa

> +	}
>  
>  	exynos_report_trigger(data->reg_conf);
>  	mutex_lock(&data->lock);
> @@ -358,7 +390,7 @@ static void exynos_tmu_work(struct work_struct *work)
>  
>  	clk_disable(data->clk);
>  	mutex_unlock(&data->lock);
> -
> +out:
>  	enable_irq(data->irq);
>  }
>  
> @@ -520,7 +552,8 @@ static int exynos_tmu_probe(struct platform_device *pdev)
>  		return ret;
>  
>  	if (pdata->type == SOC_ARCH_EXYNOS ||
> -				pdata->type == SOC_ARCH_EXYNOS4210)
> +		pdata->type == SOC_ARCH_EXYNOS4210 ||
> +				pdata->type == SOC_ARCH_EXYNOS5440)
>  		data->soc = pdata->type;
>  	else {
>  		ret = -EINVAL;
> diff --git a/drivers/thermal/samsung/exynos_tmu.h b/drivers/thermal/samsung/exynos_tmu.h
> index 65443d7..9151a30 100644
> --- a/drivers/thermal/samsung/exynos_tmu.h
> +++ b/drivers/thermal/samsung/exynos_tmu.h
> @@ -44,6 +44,7 @@ enum trigger_type {
>  enum soc_type {
>  	SOC_ARCH_EXYNOS4210 = 1,
>  	SOC_ARCH_EXYNOS,
> +	SOC_ARCH_EXYNOS5440,
>  };
>  
>  /**
> @@ -132,6 +133,8 @@ enum soc_type {
>   * @emul_temp_shift: shift bits of emulation temperature.
>   * @emul_time_shift: shift bits of emulation time.
>   * @emul_time_mask: mask bits of emulation time.
> + * @tmu_irqstatus: register to find which TMU generated interrupts.
> + * @tmu_pmin: register to get/set the Pmin value.
>   */
>  struct exynos_tmu_registers {
>  	u32	triminfo_data;
> @@ -199,6 +202,9 @@ struct exynos_tmu_registers {
>  	u32	emul_temp_shift;
>  	u32	emul_time_shift;
>  	u32	emul_time_mask;
> +
> +	u32	tmu_irqstatus;
> +	u32	tmu_pmin;
>  };
>  
>  /**
> diff --git a/drivers/thermal/samsung/exynos_tmu_data.h b/drivers/thermal/samsung/exynos_tmu_data.h
> index 0e2244f..4acf070 100644
> --- a/drivers/thermal/samsung/exynos_tmu_data.h
> +++ b/drivers/thermal/samsung/exynos_tmu_data.h
> @@ -91,6 +91,8 @@
>  #define EXYNOS_EMUL_DATA_MASK	0xFF
>  #define EXYNOS_EMUL_ENABLE	0x1
>  
> +#define EXYNOS_MAX_TRIGGER_PER_REG	4
> +
>  #if defined(CONFIG_CPU_EXYNOS4210)
>  extern struct exynos_tmu_platform_data const exynos4210_default_tmu_data;
>  #define EXYNOS4210_TMU_DRV_DATA (&exynos4210_default_tmu_data)



  reply	other threads:[~2013-05-18  5:23 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-14  9:58 [PATCH V4 00/30] thermal: exynos: Add thermal driver for exynos5440 Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 01/30] thermal: exynos: Moving exynos thermal files into samsung directory Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 02/30] thermal: exynos: Add ARCH_HAS_TMU config to know the supported soc's Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 03/30] thermal: exynos: Remove CPU_THERMAL dependency for using TMU driver Amit Daniel Kachhap
2013-05-31 15:13   ` Eduardo Valentin
2013-05-14  9:58 ` [PATCH V4 04/30] thermal: exynos: Bifurcate exynos thermal common and tmu controller code Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 05/30] thermal: exynos: Rename exynos_thermal.c to exynos_tmu.c Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 06/30] thermal: exynos: Move exynos_thermal.h from include/* to driver/* folder Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 07/30] thermal: exynos: Bifurcate exynos tmu driver and configuration data Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 08/30] thermal: exynos: Add missing definations and code cleanup Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 09/30] thermal: exynos: Add extra entries in the tmu platform data Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 10/30] thermal: exynos: Support thermal tripping Amit Daniel Kachhap
2013-05-17 11:56   ` jonghwa3.lee
2013-06-04  4:48     ` amit daniel kachhap
2013-05-14  9:58 ` [PATCH V4 11/30] thermal: exynos: Move register definitions from driver file to data file Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 12/30] thermal: exynos: Fix to clear only the generated interrupts Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 13/30] thermal: exynos: Add support for instance based register/unregister Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 14/30] thermal: exynos: Modify private_data to appropriate name driver_data Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 15/30] thermal: exynos: Return success even if no cooling data supplied Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 16/30] thermal: exynos: Make the zone handling dependent on trip count Amit Daniel Kachhap
2013-05-17 12:17   ` jonghwa3.lee
2013-05-14  9:58 ` [PATCH V4 17/30] thermal: exynos: Add support to handle many instances of TMU Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 18/30] thermal: exynos: Add TMU features to check instead of using SOC type Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 19/30] thermal: exynos: use device resource management infrastructure Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 20/30] ARM: dts: thermal: exynos4: Add documentation for Exynos SoC thermal bindings Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 21/30] thermal: exynos: Add support to access common register for multistance Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 22/30] thermal: exynos: Add support for exynos5440 TMU sensor Amit Daniel Kachhap
2013-05-18  5:23   ` jonghwa3.lee [this message]
2013-05-31 15:28     ` Eduardo Valentin
2013-06-04  4:44     ` amit daniel kachhap
2013-06-04 12:55       ` Eduardo Valentin
2013-06-05  3:20         ` amit daniel kachhap
2013-06-05 12:53           ` Eduardo Valentin
2013-06-06  6:19             ` amit daniel kachhap
2013-05-14  9:58 ` [PATCH V4 23/30] thermal: exynos: Fix to set the second point correction value properly Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 24/30] thermal: exynos: Add thermal configuration data for exynos5440 TMU sensor Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 25/30] thermal: exynos: Add a compensation logic on swapped e-fuse values Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 26/30] thermal: exynos: Add hardware mode thermal calibration support Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 27/30] Documentation: thermal: Explain the exynos thermal driver model Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 28/30] thermal: exynos: Support for TMU regulator defined at device tree Amit Daniel Kachhap
2013-05-14  9:58 ` [PATCH V4 29/30] ARM: dts: Add device tree node for exynos5440 TMU controller Amit Daniel Kachhap
2013-05-14  9:59 ` [PATCH V4 30/30] arm: exynos: enable ARCH_HAS_TMU Amit Daniel Kachhap
2013-05-15 14:44 ` [PATCH V4 00/30] thermal: exynos: Add thermal driver for exynos5440 Eduardo Valentin
2013-06-04  4:55   ` amit daniel kachhap
2013-06-04 12:57     ` Eduardo Valentin
2013-06-04 13:01       ` Eduardo Valentin
2013-06-05  3:49         ` amit daniel kachhap
2013-06-06 13:48           ` Eduardo Valentin

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=51971046.3080201@samsung.com \
    --to=jonghwa3.lee@samsung.com \
    --cc=amit.daniel@samsung.com \
    --cc=amit.kachhap@gmail.com \
    --cc=eduardo.valentin@ti.com \
    --cc=kgene.kim@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=rui.zhang@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox