Message ID | 20200429021720.6653-6-peng.fan@nxp.com |
---|---|
State | Superseded |
Headers | show |
Series | [1/7] uclass: cpu: Add new API to get udevice for current CPU | expand |
Hi Peng, On Tue, 28 Apr 2020 at 19:54, Peng Fan <peng.fan at nxp.com> wrote: > > From: Ye Li <ye.li at nxp.com> > > iMX8QM registers two thermal devices for CPUs, get the temperature > from "cpu-thermal1" device for A72 > > Signed-off-by: Ye Li <ye.li at nxp.com> > Signed-off-by: Peng Fan <peng.fan at 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
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); + 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");