lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20190401041418.5999-12-andrew.smirnov@gmail.com> Date: Sun, 31 Mar 2019 21:14:16 -0700 From: Andrey Smirnov <andrew.smirnov@...il.com> To: linux-pm@...r.kernel.org Cc: Andrey Smirnov <andrew.smirnov@...il.com>, Chris Healy <cphealy@...il.com>, Lucas Stach <l.stach@...gutronix.de>, Zhang Rui <rui.zhang@...el.com>, Eduardo Valentin <edubezval@...il.com>, Daniel Lezcano <daniel.lezcano@...aro.org>, Angus Ainslie <angus@...ea.ca>, linux-imx@....com, linux-kernel@...r.kernel.org Subject: [PATCH v3 11/13] thermal: qoriq: Do not report invalid temperature reading Before returning measured temperature data to upper layer we need to make sure that the reading was marked as "valid" to avoid reporting bogus data. Signed-off-by: Andrey Smirnov <andrew.smirnov@...il.com> Cc: Chris Healy <cphealy@...il.com> Cc: Lucas Stach <l.stach@...gutronix.de> Cc: Zhang Rui <rui.zhang@...el.com> Cc: Eduardo Valentin <edubezval@...il.com> Cc: Daniel Lezcano <daniel.lezcano@...aro.org> Cc: Angus Ainslie (Purism) <angus@...ea.ca> Cc: linux-imx@....com Cc: linux-pm@...r.kernel.org Cc: linux-kernel@...r.kernel.org --- drivers/thermal/qoriq_thermal.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/thermal/qoriq_thermal.c b/drivers/thermal/qoriq_thermal.c index 7ff93dfcd68b..9d227654f879 100644 --- a/drivers/thermal/qoriq_thermal.c +++ b/drivers/thermal/qoriq_thermal.c @@ -37,6 +37,7 @@ #define REGS_TRITSR(n) (0x100 + 16 * (n)) /* Immediate Temperature * Site Register */ +#define TRITSR_V BIT(31) #define REGS_TTRnCR(n) (0xf10 + 4 * (n)) /* Temperature Range n * Control Register */ @@ -62,10 +63,18 @@ static int tmu_get_temp(void *p, int *temp) struct qoriq_sensor *qsensor = p; struct qoriq_tmu_data *qdata = qoriq_sensor_to_data(qsensor); u32 val; + int ret; - regmap_read(qdata->regmap, REGS_TRITSR(qsensor->id), &val); - *temp = (val & 0xff) * 1000; + ret = regmap_read_poll_timeout(qdata->regmap, + REGS_TRITSR(qsensor->id), + val, + val & TRITSR_V, + USEC_PER_MSEC, + 10 * USEC_PER_MSEC); + if (ret) + return ret; + *temp = (val & 0xff) * 1000; return 0; } -- 2.20.1
Powered by blists - more mailing lists