Commit b98467fe authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Daniel Lezcano
Browse files

thermal: ti-soc-thermal: Disable the CPU PM notifier for OMAP4430



It has been observed that on OMAP4430 (ES2.0, ES2.1 and ES2.3) the enabled
notifier causes errors on the DTEMP readout values:

ti-soc-thermal 4a002260.bandgap: in range ADC val: 52
ti-soc-thermal 4a002260.bandgap: in range ADC val: 64
ti-soc-thermal 4a002260.bandgap: in range ADC val: 64
ti-soc-thermal 4a002260.bandgap: out of range ADC val: 0
thermal thermal_zone0: failed to read out thermal zone (-5)
ti-soc-thermal 4a002260.bandgap: out of range ADC val: 0
thermal thermal_zone0: failed to read out thermal zone (-5)
ti-soc-thermal 4a002260.bandgap: out of range ADC val: 4
thermal thermal_zone0: failed to read out thermal zone (-5)
ti-soc-thermal 4a002260.bandgap: in range ADC val: 100

raw 100 translates to 133 Celsius on omap4-sdp, triggering shutdown due to
critical temperature.

When the notifier is disable for OMAP4430 the DTEMP values are stable:
ti-soc-thermal 4a002260.bandgap: in range ADC val: 56
ti-soc-thermal 4a002260.bandgap: in range ADC val: 56
ti-soc-thermal 4a002260.bandgap: in range ADC val: 57
ti-soc-thermal 4a002260.bandgap: in range ADC val: 57
ti-soc-thermal 4a002260.bandgap: in range ADC val: 56

Fixes: 5093402e ("thermal: ti-soc-thermal: Enable addition power management")
Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@ti.com>
Tested-by: default avatarTony Lindgren <tony@atomide.com>
Acked-by: default avatarKeerthy <j-keerthy@ti.com>
Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20201029100335.27665-1-peter.ujfalusi@ti.com
parent f8394f23
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <linux/err.h>
#include <linux/types.h>
#include <linux/spinlock.h>
#include <linux/sys_soc.h>
#include <linux/reboot.h>
#include <linux/of_device.h>
#include <linux/of_platform.h>
@@ -864,6 +865,17 @@ static struct ti_bandgap *ti_bandgap_build(struct platform_device *pdev)
	return bgp;
}

/*
 * List of SoCs on which the CPU PM notifier can cause erros on the DTEMP
 * readout.
 * Enabled notifier on these machines results in erroneous, random values which
 * could trigger unexpected thermal shutdown.
 */
static const struct soc_device_attribute soc_no_cpu_notifier[] = {
	{ .machine = "OMAP4430" },
	{ /* sentinel */ },
};

/***   Device driver call backs   ***/

static
@@ -1020,6 +1032,7 @@ int ti_bandgap_probe(struct platform_device *pdev)

#ifdef CONFIG_PM_SLEEP
	bgp->nb.notifier_call = bandgap_omap_cpu_notifier;
	if (!soc_device_match(soc_no_cpu_notifier))
		cpu_pm_register_notifier(&bgp->nb);
#endif

@@ -1056,6 +1069,7 @@ int ti_bandgap_remove(struct platform_device *pdev)
	struct ti_bandgap *bgp = platform_get_drvdata(pdev);
	int i;

	if (!soc_device_match(soc_no_cpu_notifier))
		cpu_pm_unregister_notifier(&bgp->nb);

	/* Remove sensor interfaces */