From: Keerthy <a0393675@ti.com>
To: Keerthy <j-keerthy@ti.com>, edubezval@gmail.com, rui.zhang@intel.com
Cc: linux-pm@vger.kernel.org, linux-omap@vger.kernel.org, "Kristo,
Tero" <t-kristo@ti.com>
Subject: Re: [PATCH v2] thermal: ti-soc-thermal: dra7: Implement Workaround for Errata i814 - Bandgap Temperature read Dtemp can be corrupted
Date: Thu, 16 Apr 2015 13:19:07 +0530 [thread overview]
Message-ID: <552F6973.8050500@ti.com> (raw)
In-Reply-To: <1428647790-6585-1-git-send-email-j-keerthy@ti.com>
On Friday 10 April 2015 12:06 PM, Keerthy wrote:
> Bandgap Temperature read Dtemp can be corrupted
>
> DESCRIPTION
> Read accesses to registers listed below can be corrupted due to incorrect resynchronization between
> clock domains.
>
> Read access to registers below can be corrupted :
> • CTRL_CORE_DTEMP_MPU/GPU/CORE/DSPEVE/IVA_n (n = 0 to 4)
> • CTRL_CORE_TEMP_SENSOR_MPU/GPU/CORE/DSPEVE/IVA_n
>
> WORKAROUND
> Multiple reads to CTRL_CORE_TEMP_SENSOR_MPU/GPU/CORE/DSPEVE/IVA[9:0]:
> BGAP_DTEMPMPU/GPU/CORE/DSPEVE/IVA is needed to discard false value and read right value:
> 1. Perform two successive reads to BGAP_DTEMP bit field.
> (a) If read1 returns Val1 and read2 returns Val1, then right value is Val1.
> (b) If read1 returns Val1, read 2 returns Val2, a third read is needed.
> 2. Perform third read
> (a) If read3 returns Val2 then right value is Val2.
> (b) If read3 returns Val3, then right value is Val3.
>
> The above in gist means if val1 and val2 are the same then we can go ahead with that value
> else we need a third read which will be right since synchronization will be complete by then.
>
> Signed-off-by: Keerthy <j-keerthy@ti.com>
> ---
A Gentle ping on this. This has the comments fixed.
>
> Changes in V2:
>
> * Added more details in the description part.
> * Indented the comments.
> * Renamed ti_dra7_bandgap_read_temp to ti_errata814_bandgap_read_temp.
>
> .../thermal/ti-soc-thermal/dra752-thermal-data.c | 3 +-
> drivers/thermal/ti-soc-thermal/ti-bandgap.c | 37 +++++++++++++++++++++-
> drivers/thermal/ti-soc-thermal/ti-bandgap.h | 4 +++
> 3 files changed, 42 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/thermal/ti-soc-thermal/dra752-thermal-data.c b/drivers/thermal/ti-soc-thermal/dra752-thermal-data.c
> index a492927..58b5c66 100644
> --- a/drivers/thermal/ti-soc-thermal/dra752-thermal-data.c
> +++ b/drivers/thermal/ti-soc-thermal/dra752-thermal-data.c
> @@ -420,7 +420,8 @@ const struct ti_bandgap_data dra752_data = {
> TI_BANDGAP_FEATURE_FREEZE_BIT |
> TI_BANDGAP_FEATURE_TALERT |
> TI_BANDGAP_FEATURE_COUNTER_DELAY |
> - TI_BANDGAP_FEATURE_HISTORY_BUFFER,
> + TI_BANDGAP_FEATURE_HISTORY_BUFFER |
> + TI_BANDGAP_FEATURE_ERRATA_814,
> .fclock_name = "l3instr_ts_gclk_div",
> .div_ck_name = "l3instr_ts_gclk_div",
> .conv_table = dra752_adc_to_temp,
> diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.c b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
> index 74c0e34..94acd80 100644
> --- a/drivers/thermal/ti-soc-thermal/ti-bandgap.c
> +++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.c
> @@ -119,6 +119,37 @@ exit:
> }
>
> /**
> + * ti_errata814_bandgap_read_temp() - helper function to read dra7 sensor temperature
> + * @bgp: pointer to ti_bandgap structure
> + * @reg: desired register (offset) to be read
> + *
> + * Function to read dra7 bandgap sensor temperature. This is done separately
> + * so as to workaround the errata "Bandgap Temperature read Dtemp can be
> + * corrupted" - Errata ID: i814".
> + * Read accesses to registers listed below can be corrupted due to incorrect
> + * resynchronization between clock domains.
> + * Read access to registers below can be corrupted :
> + * CTRL_CORE_DTEMP_MPU/GPU/CORE/DSPEVE/IVA_n (n = 0 to 4)
> + * CTRL_CORE_TEMP_SENSOR_MPU/GPU/CORE/DSPEVE/IVA_n
> + *
> + * Return: the register value.
> + */
> +static u32 ti_errata814_bandgap_read_temp(struct ti_bandgap *bgp, u32 reg)
> +{
> + u32 val1, val2;
> +
> + val1 = ti_bandgap_readl(bgp, reg);
> + val2 = ti_bandgap_readl(bgp, reg);
> +
> + /* If both times we read the same value then that is right */
> + if (val1 == val2)
> + return val1;
> +
> + /* if val1 and val2 are different read it third time */
> + return ti_bandgap_readl(bgp, reg);
> +}
> +
> +/**
> * ti_bandgap_read_temp() - helper function to read sensor temperature
> * @bgp: pointer to ti_bandgap structure
> * @id: bandgap sensor id
> @@ -148,7 +179,11 @@ static u32 ti_bandgap_read_temp(struct ti_bandgap *bgp, int id)
> }
>
> /* read temperature */
> - temp = ti_bandgap_readl(bgp, reg);
> + if (TI_BANDGAP_HAS(bgp, ERRATA_814))
> + temp = ti_errata814_bandgap_read_temp(bgp, reg);
> + else
> + temp = ti_bandgap_readl(bgp, reg);
> +
> temp &= tsr->bgap_dtemp_mask;
>
> if (TI_BANDGAP_HAS(bgp, FREEZE_BIT))
> diff --git a/drivers/thermal/ti-soc-thermal/ti-bandgap.h b/drivers/thermal/ti-soc-thermal/ti-bandgap.h
> index b3adf72..b2da3fc 100644
> --- a/drivers/thermal/ti-soc-thermal/ti-bandgap.h
> +++ b/drivers/thermal/ti-soc-thermal/ti-bandgap.h
> @@ -318,6 +318,9 @@ struct ti_temp_sensor {
> * TI_BANDGAP_FEATURE_HISTORY_BUFFER - used when the bandgap device features
> * a history buffer of temperatures.
> *
> + * TI_BANDGAP_FEATURE_ERRATA_814 - used to workaorund when the bandgap device
> + * has Errata 814
> + *
> * TI_BANDGAP_HAS(b, f) - macro to check if a bandgap device is capable of a
> * specific feature (above) or not. Return non-zero, if yes.
> */
> @@ -331,6 +334,7 @@ struct ti_temp_sensor {
> #define TI_BANDGAP_FEATURE_FREEZE_BIT BIT(7)
> #define TI_BANDGAP_FEATURE_COUNTER_DELAY BIT(8)
> #define TI_BANDGAP_FEATURE_HISTORY_BUFFER BIT(9)
> +#define TI_BANDGAP_FEATURE_ERRATA_814 BIT(10)
> #define TI_BANDGAP_HAS(b, f) \
> ((b)->conf->features & TI_BANDGAP_FEATURE_ ## f)
>
>
next prev parent reply other threads:[~2015-04-16 7:49 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-10 6:36 [PATCH v2] thermal: ti-soc-thermal: dra7: Implement Workaround for Errata i814 - Bandgap Temperature read Dtemp can be corrupted Keerthy
2015-04-16 7:49 ` Keerthy [this message]
-- strict thread matches above, loose matches on Subject: below --
2015-03-27 8:45 Keerthy
2015-04-07 3:20 ` Keerthy
2015-04-07 20:05 ` Eduardo Valentin
2015-04-08 4:24 ` Keerthy
2015-04-10 5:32 ` Keerthy
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=552F6973.8050500@ti.com \
--to=a0393675@ti.com \
--cc=edubezval@gmail.com \
--cc=j-keerthy@ti.com \
--cc=linux-omap@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rui.zhang@intel.com \
--cc=t-kristo@ti.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.