Hi Peng, On Tue, 28 Apr 2020 at 19:54, Peng Fan <peng....@nxp.com> wrote: > > From: Ye Li <ye...@nxp.com> > > iMX8QM registers two thermal devices for CPUs, get the temperature > from "cpu-thermal1" device for A72 > > Signed-off-by: Ye Li <ye...@nxp.com> > Signed-off-by: Peng Fan <peng....@nxp.com> > --- > drivers/cpu/imx8_cpu.c | 20 ++++++++++++++------ > 1 file changed, 14 insertions(+), 6 deletions(-) > > diff --git a/drivers/cpu/imx8_cpu.c b/drivers/cpu/imx8_cpu.c > index 525c28bc4b..d99d9aacd9 100644 > --- a/drivers/cpu/imx8_cpu.c > +++ b/drivers/cpu/imx8_cpu.c > @@ -61,13 +61,17 @@ const char *get_core_name(struct udevice *dev) > } > > #if IS_ENABLED(CONFIG_IMX_SCU_THERMAL) > -static int cpu_imx_get_temp(void) > +static int cpu_imx_get_temp(struct cpu_imx_platdata *plat) > { > struct udevice *thermal_dev; > int cpu_tmp, ret; > > - ret = uclass_get_device_by_name(UCLASS_THERMAL, "cpu-thermal0", > - &thermal_dev); > + if (!strcmp(plat->name, "A72")) > + ret = uclass_get_device_by_name(UCLASS_THERMAL, > "cpu-thermal1", > + &thermal_dev);
This is very slow. Use uclass_get_device_by_seq() or just uclass_get_device(UCLASS_THERMAL, 0..1..2) > + else > + ret = uclass_get_device_by_name(UCLASS_THERMAL, > "cpu-thermal0", > + &thermal_dev); > > if (!ret) { > ret = thermal_get_temp(thermal_dev, &cpu_tmp); > @@ -80,7 +84,7 @@ static int cpu_imx_get_temp(void) > return cpu_tmp; > } > #else > -static int cpu_imx_get_temp(void) > +static int cpu_imx_get_temp(struct cpu_imx_platdata *plat) > { > return 0; > } > @@ -89,7 +93,7 @@ static int cpu_imx_get_temp(void) > int cpu_imx_get_desc(struct udevice *dev, char *buf, int size) > { > struct cpu_imx_platdata *plat = dev_get_platdata(dev); > - int ret; > + int ret, temp; > > if (size < 100) > return -ENOSPC; > @@ -98,9 +102,13 @@ int cpu_imx_get_desc(struct udevice *dev, char *buf, int > size) > plat->type, plat->rev, plat->name, plat->freq_mhz); > > if (IS_ENABLED(CONFIG_IMX_SCU_THERMAL)) { > + temp = cpu_imx_get_temp(plat); > buf = buf + ret; > size = size - ret; > - ret = snprintf(buf, size, " at %dC", cpu_imx_get_temp()); > + if (temp != 0xdeadbeef) > + ret = snprintf(buf, size, " at %dC", temp); > + else > + ret = snprintf(buf, size, " - invalid sensor data"); > } > > snprintf(buf + ret, size - ret, "\n"); > -- > 2.16.4 > Regards, Simon