Message ID | 20220512101245.15829-2-andrejs.cainikovs@toradex.com |
---|---|
State | Superseded, archived |
Delegated to: | Stefano Babic |
Headers | show |
Series | imx8m: fixup thermal trips | expand |
On Thu, May 12, 2022 at 5:13 AM Andrejs Cainikovs <andrejs.cainikovs@toradex.com> wrote: > > Fixup thermal trips in Linux device tree according to SoC thermal > grade. > > Signed-off-by: Andrejs Cainikovs <andrejs.cainikovs@toradex.com> > --- > arch/arm/mach-imx/imx8m/soc.c | 50 +++++++++++++++++++++++++++++++++++ > 1 file changed, 50 insertions(+) > > diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach-imx/imx8m/soc.c > index e93ecd2846..b451ece91f 100644 > --- a/arch/arm/mach-imx/imx8m/soc.c > +++ b/arch/arm/mach-imx/imx8m/soc.c > @@ -1001,6 +1001,49 @@ static int disable_cpu_nodes(void *blob, u32 disabled_cores) > return 0; > } > > +int fixup_thermal_trips(void *blob, const char *name) Is there any reason this function cannot be static? > +{ > + int minc, maxc; > + int node, trip; > + > + node = fdt_path_offset(blob, "/thermal-zones"); > + if (node < 0) > + return node; > + > + node = fdt_subnode_offset(blob, node, name); > + if (node < 0) > + return node; > + > + node = fdt_subnode_offset(blob, node, "trips"); > + if (node < 0) > + return node; > + > + get_cpu_temp_grade(&minc, &maxc); > + > + fdt_for_each_subnode(trip, blob, node) { > + const char *type; > + int temp, ret; > + > + type = fdt_getprop(blob, trip, "type", NULL); > + if (!type) > + continue; > + > + temp = 0; > + if (!strcmp(type, "critical")) { > + temp = 1000 * maxc; > + } else if (!strcmp(type, "passive")) { > + temp = 1000 * (maxc - 10); > + } > + if (temp) { > + ret = fdt_setprop_u32(blob, trip, "temperature", temp); > + if (ret) > + return ret; > + } > + } > + > + return 0; > +} > + > int ft_system_setup(void *blob, bd_t *bd) > { > #ifdef CONFIG_IMX8MQ > @@ -1128,6 +1171,13 @@ usb_modify_speed: > disable_cpu_nodes(blob, 2); > #endif > > + if (fixup_thermal_trips(blob, "cpu-thermal")) > + printf("Failed to update cpu-thermal trip(s)"); > +#ifdef CONFIG_IMX8MP > + if (fixup_thermal_trips(blob, "soc-thermal")) > + printf("Failed to update soc-thermal trip(s)"); > +#endif > + > return ft_add_optee_node(blob, bd); > } > #endif > -- > 2.34.1 >
Hi Adam, On Wed, 2022-05-25 at 06:41 -0500, Adam Ford wrote: > On Thu, May 12, 2022 at 5:13 AM Andrejs Cainikovs > <andrejs.cainikovs@toradex.com> wrote: > > > > Fixup thermal trips in Linux device tree according to SoC thermal > > grade. > > > > Signed-off-by: Andrejs Cainikovs <andrejs.cainikovs@toradex.com> > > --- > > arch/arm/mach-imx/imx8m/soc.c | 50 > > +++++++++++++++++++++++++++++++++++ > > 1 file changed, 50 insertions(+) > > > > diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach- > > imx/imx8m/soc.c > > index e93ecd2846..b451ece91f 100644 > > --- a/arch/arm/mach-imx/imx8m/soc.c > > +++ b/arch/arm/mach-imx/imx8m/soc.c > > @@ -1001,6 +1001,49 @@ static int disable_cpu_nodes(void *blob, u32 > > disabled_cores) > > return 0; > > } > > > > +int fixup_thermal_trips(void *blob, const char *name) > > Is there any reason this function cannot be static? No, this function should be static indeed. > > > +{ > > + int minc, maxc; > > + int node, trip; > > + > > + node = fdt_path_offset(blob, "/thermal-zones"); > > + if (node < 0) > > + return node; > > + > > + node = fdt_subnode_offset(blob, node, name); > > + if (node < 0) > > + return node; > > + > > + node = fdt_subnode_offset(blob, node, "trips"); > > + if (node < 0) > > + return node; > > + > > + get_cpu_temp_grade(&minc, &maxc); > > + > > + fdt_for_each_subnode(trip, blob, node) { > > + const char *type; > > + int temp, ret; > > + > > + type = fdt_getprop(blob, trip, "type", NULL); > > + if (!type) > > + continue; > > + > > + temp = 0; > > + if (!strcmp(type, "critical")) { > > + temp = 1000 * maxc; > > + } else if (!strcmp(type, "passive")) { > > + temp = 1000 * (maxc - 10); > > + } > > + if (temp) { > > + ret = fdt_setprop_u32(blob, trip, > > "temperature", temp); > > + if (ret) > > + return ret; > > + } > > + } > > + > > + return 0; > > +} > > + > > int ft_system_setup(void *blob, bd_t *bd) > > { > > #ifdef CONFIG_IMX8MQ > > @@ -1128,6 +1171,13 @@ usb_modify_speed: > > disable_cpu_nodes(blob, 2); > > #endif > > > > + if (fixup_thermal_trips(blob, "cpu-thermal")) > > + printf("Failed to update cpu-thermal trip(s)"); > > +#ifdef CONFIG_IMX8MP > > + if (fixup_thermal_trips(blob, "soc-thermal")) > > + printf("Failed to update soc-thermal trip(s)"); > > +#endif > > + > > return ft_add_optee_node(blob, bd); > > } > > #endif > > -- > > 2.34.1 > > >
On Wed, May 25, 2022 at 7:19 AM Andrejs Cainikovs <andrejs.cainikovs@toradex.com> wrote: > > Hi Adam, > > On Wed, 2022-05-25 at 06:41 -0500, Adam Ford wrote: > > On Thu, May 12, 2022 at 5:13 AM Andrejs Cainikovs > > <andrejs.cainikovs@toradex.com> wrote: > > > > > > Fixup thermal trips in Linux device tree according to SoC thermal > > > grade. > > > > > > Signed-off-by: Andrejs Cainikovs <andrejs.cainikovs@toradex.com> > > > --- > > > arch/arm/mach-imx/imx8m/soc.c | 50 > > > +++++++++++++++++++++++++++++++++++ > > > 1 file changed, 50 insertions(+) > > > > > > diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach- > > > imx/imx8m/soc.c > > > index e93ecd2846..b451ece91f 100644 > > > --- a/arch/arm/mach-imx/imx8m/soc.c > > > +++ b/arch/arm/mach-imx/imx8m/soc.c > > > @@ -1001,6 +1001,49 @@ static int disable_cpu_nodes(void *blob, u32 > > > disabled_cores) > > > return 0; > > > } > > > > > > +int fixup_thermal_trips(void *blob, const char *name) > > > > Is there any reason this function cannot be static? > > No, this function should be static indeed. With that change: Tested-by: Adam Ford <aford173@gmail.com> > > > > > > +{ > > > + int minc, maxc; > > > + int node, trip; > > > + > > > + node = fdt_path_offset(blob, "/thermal-zones"); > > > + if (node < 0) > > > + return node; > > > + > > > + node = fdt_subnode_offset(blob, node, name); > > > + if (node < 0) > > > + return node; > > > + > > > + node = fdt_subnode_offset(blob, node, "trips"); > > > + if (node < 0) > > > + return node; > > > + > > > + get_cpu_temp_grade(&minc, &maxc); > > > + > > > + fdt_for_each_subnode(trip, blob, node) { > > > + const char *type; > > > + int temp, ret; > > > + > > > + type = fdt_getprop(blob, trip, "type", NULL); > > > + if (!type) > > > + continue; > > > + > > > + temp = 0; > > > + if (!strcmp(type, "critical")) { > > > + temp = 1000 * maxc; > > > + } else if (!strcmp(type, "passive")) { > > > + temp = 1000 * (maxc - 10); > > > + } > > > + if (temp) { > > > + ret = fdt_setprop_u32(blob, trip, > > > "temperature", temp); > > > + if (ret) > > > + return ret; > > > + } > > > + } > > > + > > > + return 0; > > > +} > > > + > > > int ft_system_setup(void *blob, bd_t *bd) > > > { > > > #ifdef CONFIG_IMX8MQ > > > @@ -1128,6 +1171,13 @@ usb_modify_speed: > > > disable_cpu_nodes(blob, 2); > > > #endif > > > > > > + if (fixup_thermal_trips(blob, "cpu-thermal")) > > > + printf("Failed to update cpu-thermal trip(s)"); > > > +#ifdef CONFIG_IMX8MP > > > + if (fixup_thermal_trips(blob, "soc-thermal")) > > > + printf("Failed to update soc-thermal trip(s)"); > > > +#endif > > > + > > > return ft_add_optee_node(blob, bd); > > > } > > > #endif > > > -- > > > 2.34.1 > > > > > >
Adam, So you want me to rebase this patch to upstream, update according to your review, and send this one instead of yours? Best regards, Andrejs Cainikovs. On Wed, 2022-05-25 at 07:21 -0500, Adam Ford wrote: > On Wed, May 25, 2022 at 7:19 AM Andrejs Cainikovs > <andrejs.cainikovs@toradex.com> wrote: > > > > Hi Adam, > > > > On Wed, 2022-05-25 at 06:41 -0500, Adam Ford wrote: > > > On Thu, May 12, 2022 at 5:13 AM Andrejs Cainikovs > > > <andrejs.cainikovs@toradex.com> wrote: > > > > > > > > Fixup thermal trips in Linux device tree according to SoC > > > > thermal > > > > grade. > > > > > > > > Signed-off-by: Andrejs Cainikovs > > > > <andrejs.cainikovs@toradex.com> > > > > --- > > > > arch/arm/mach-imx/imx8m/soc.c | 50 > > > > +++++++++++++++++++++++++++++++++++ > > > > 1 file changed, 50 insertions(+) > > > > > > > > diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach- > > > > imx/imx8m/soc.c > > > > index e93ecd2846..b451ece91f 100644 > > > > --- a/arch/arm/mach-imx/imx8m/soc.c > > > > +++ b/arch/arm/mach-imx/imx8m/soc.c > > > > @@ -1001,6 +1001,49 @@ static int disable_cpu_nodes(void *blob, > > > > u32 > > > > disabled_cores) > > > > return 0; > > > > } > > > > > > > > +int fixup_thermal_trips(void *blob, const char *name) > > > > > > Is there any reason this function cannot be static? > > > > No, this function should be static indeed. > > With that change: > > Tested-by: Adam Ford <aford173@gmail.com> > > > > > > > > > > +{ > > > > + int minc, maxc; > > > > + int node, trip; > > > > + > > > > + node = fdt_path_offset(blob, "/thermal-zones"); > > > > + if (node < 0) > > > > + return node; > > > > + > > > > + node = fdt_subnode_offset(blob, node, name); > > > > + if (node < 0) > > > > + return node; > > > > + > > > > + node = fdt_subnode_offset(blob, node, "trips"); > > > > + if (node < 0) > > > > + return node; > > > > + > > > > + get_cpu_temp_grade(&minc, &maxc); > > > > + > > > > + fdt_for_each_subnode(trip, blob, node) { > > > > + const char *type; > > > > + int temp, ret; > > > > + > > > > + type = fdt_getprop(blob, trip, "type", NULL); > > > > + if (!type) > > > > + continue; > > > > + > > > > + temp = 0; > > > > + if (!strcmp(type, "critical")) { > > > > + temp = 1000 * maxc; > > > > + } else if (!strcmp(type, "passive")) { > > > > + temp = 1000 * (maxc - 10); > > > > + } > > > > + if (temp) { > > > > + ret = fdt_setprop_u32(blob, trip, > > > > "temperature", temp); > > > > + if (ret) > > > > + return ret; > > > > + } > > > > + } > > > > + > > > > + return 0; > > > > +} > > > > + > > > > int ft_system_setup(void *blob, bd_t *bd) > > > > { > > > > #ifdef CONFIG_IMX8MQ > > > > @@ -1128,6 +1171,13 @@ usb_modify_speed: > > > > disable_cpu_nodes(blob, 2); > > > > #endif > > > > > > > > + if (fixup_thermal_trips(blob, "cpu-thermal")) > > > > + printf("Failed to update cpu-thermal trip(s)"); > > > > +#ifdef CONFIG_IMX8MP > > > > + if (fixup_thermal_trips(blob, "soc-thermal")) > > > > + printf("Failed to update soc-thermal trip(s)"); > > > > +#endif > > > > + > > > > return ft_add_optee_node(blob, bd); > > > > } > > > > #endif > > > > -- > > > > 2.34.1 > > > > > > > > > >
On Wed, May 25, 2022 at 7:24 AM Andrejs Cainikovs <andrejs.cainikovs@toradex.com> wrote: > > Adam, > > So you want me to rebase this patch to upstream, update according to > your review, and send this one instead of yours? Go ahead. Yours has all the requested improvements already applied. I'm still playing catch up from being away for 2 weeks. thanks adam > > Best regards, > Andrejs Cainikovs. > > On Wed, 2022-05-25 at 07:21 -0500, Adam Ford wrote: > > On Wed, May 25, 2022 at 7:19 AM Andrejs Cainikovs > > <andrejs.cainikovs@toradex.com> wrote: > > > > > > Hi Adam, > > > > > > On Wed, 2022-05-25 at 06:41 -0500, Adam Ford wrote: > > > > On Thu, May 12, 2022 at 5:13 AM Andrejs Cainikovs > > > > <andrejs.cainikovs@toradex.com> wrote: > > > > > > > > > > Fixup thermal trips in Linux device tree according to SoC > > > > > thermal > > > > > grade. > > > > > > > > > > Signed-off-by: Andrejs Cainikovs > > > > > <andrejs.cainikovs@toradex.com> > > > > > --- > > > > > arch/arm/mach-imx/imx8m/soc.c | 50 > > > > > +++++++++++++++++++++++++++++++++++ > > > > > 1 file changed, 50 insertions(+) > > > > > > > > > > diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach- > > > > > imx/imx8m/soc.c > > > > > index e93ecd2846..b451ece91f 100644 > > > > > --- a/arch/arm/mach-imx/imx8m/soc.c > > > > > +++ b/arch/arm/mach-imx/imx8m/soc.c > > > > > @@ -1001,6 +1001,49 @@ static int disable_cpu_nodes(void *blob, > > > > > u32 > > > > > disabled_cores) > > > > > return 0; > > > > > } > > > > > > > > > > +int fixup_thermal_trips(void *blob, const char *name) > > > > > > > > Is there any reason this function cannot be static? > > > > > > No, this function should be static indeed. > > > > With that change: > > > > Tested-by: Adam Ford <aford173@gmail.com> > > > > > > > > > > > > > > +{ > > > > > + int minc, maxc; > > > > > + int node, trip; > > > > > + > > > > > + node = fdt_path_offset(blob, "/thermal-zones"); > > > > > + if (node < 0) > > > > > + return node; > > > > > + > > > > > + node = fdt_subnode_offset(blob, node, name); > > > > > + if (node < 0) > > > > > + return node; > > > > > + > > > > > + node = fdt_subnode_offset(blob, node, "trips"); > > > > > + if (node < 0) > > > > > + return node; > > > > > + > > > > > + get_cpu_temp_grade(&minc, &maxc); > > > > > + > > > > > + fdt_for_each_subnode(trip, blob, node) { > > > > > + const char *type; > > > > > + int temp, ret; > > > > > + > > > > > + type = fdt_getprop(blob, trip, "type", NULL); > > > > > + if (!type) > > > > > + continue; > > > > > + > > > > > + temp = 0; > > > > > + if (!strcmp(type, "critical")) { > > > > > + temp = 1000 * maxc; > > > > > + } else if (!strcmp(type, "passive")) { > > > > > + temp = 1000 * (maxc - 10); > > > > > + } > > > > > + if (temp) { > > > > > + ret = fdt_setprop_u32(blob, trip, > > > > > "temperature", temp); > > > > > + if (ret) > > > > > + return ret; > > > > > + } > > > > > + } > > > > > + > > > > > + return 0; > > > > > +} > > > > > + > > > > > int ft_system_setup(void *blob, bd_t *bd) > > > > > { > > > > > #ifdef CONFIG_IMX8MQ > > > > > @@ -1128,6 +1171,13 @@ usb_modify_speed: > > > > > disable_cpu_nodes(blob, 2); > > > > > #endif > > > > > > > > > > + if (fixup_thermal_trips(blob, "cpu-thermal")) > > > > > + printf("Failed to update cpu-thermal trip(s)"); > > > > > +#ifdef CONFIG_IMX8MP > > > > > + if (fixup_thermal_trips(blob, "soc-thermal")) > > > > > + printf("Failed to update soc-thermal trip(s)"); > > > > > +#endif > > > > > + > > > > > return ft_add_optee_node(blob, bd); > > > > > } > > > > > #endif > > > > > -- > > > > > 2.34.1 > > > > > > > > > > > > > > >
On Wed, 2022-05-25 at 07:26 -0500, Adam Ford wrote: > On Wed, May 25, 2022 at 7:24 AM Andrejs Cainikovs > <andrejs.cainikovs@toradex.com> wrote: > > > > Adam, > > > > So you want me to rebase this patch to upstream, update according > > to > > your review, and send this one instead of yours? > > Go ahead. Yours has all the requested improvements already applied. > I'm still playing catch up from being away for 2 weeks. Ok, will do. Thanks. > > thanks > > adam > > > > Best regards, > > Andrejs Cainikovs. > > > > On Wed, 2022-05-25 at 07:21 -0500, Adam Ford wrote: > > > On Wed, May 25, 2022 at 7:19 AM Andrejs Cainikovs > > > <andrejs.cainikovs@toradex.com> wrote: > > > > > > > > Hi Adam, > > > > > > > > On Wed, 2022-05-25 at 06:41 -0500, Adam Ford wrote: > > > > > On Thu, May 12, 2022 at 5:13 AM Andrejs Cainikovs > > > > > <andrejs.cainikovs@toradex.com> wrote: > > > > > > > > > > > > Fixup thermal trips in Linux device tree according to SoC > > > > > > thermal > > > > > > grade. > > > > > > > > > > > > Signed-off-by: Andrejs Cainikovs > > > > > > <andrejs.cainikovs@toradex.com> > > > > > > --- > > > > > > arch/arm/mach-imx/imx8m/soc.c | 50 > > > > > > +++++++++++++++++++++++++++++++++++ > > > > > > 1 file changed, 50 insertions(+) > > > > > > > > > > > > diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach- > > > > > > imx/imx8m/soc.c > > > > > > index e93ecd2846..b451ece91f 100644 > > > > > > --- a/arch/arm/mach-imx/imx8m/soc.c > > > > > > +++ b/arch/arm/mach-imx/imx8m/soc.c > > > > > > @@ -1001,6 +1001,49 @@ static int disable_cpu_nodes(void > > > > > > *blob, > > > > > > u32 > > > > > > disabled_cores) > > > > > > return 0; > > > > > > } > > > > > > > > > > > > +int fixup_thermal_trips(void *blob, const char *name) > > > > > > > > > > Is there any reason this function cannot be static? > > > > > > > > No, this function should be static indeed. > > > > > > With that change: > > > > > > Tested-by: Adam Ford <aford173@gmail.com> > > > > > > > > > > > > > > > > > > +{ > > > > > > + int minc, maxc; > > > > > > + int node, trip; > > > > > > + > > > > > > + node = fdt_path_offset(blob, "/thermal-zones"); > > > > > > + if (node < 0) > > > > > > + return node; > > > > > > + > > > > > > + node = fdt_subnode_offset(blob, node, name); > > > > > > + if (node < 0) > > > > > > + return node; > > > > > > + > > > > > > + node = fdt_subnode_offset(blob, node, "trips"); > > > > > > + if (node < 0) > > > > > > + return node; > > > > > > + > > > > > > + get_cpu_temp_grade(&minc, &maxc); > > > > > > + > > > > > > + fdt_for_each_subnode(trip, blob, node) { > > > > > > + const char *type; > > > > > > + int temp, ret; > > > > > > + > > > > > > + type = fdt_getprop(blob, trip, "type", > > > > > > NULL); > > > > > > + if (!type) > > > > > > + continue; > > > > > > + > > > > > > + temp = 0; > > > > > > + if (!strcmp(type, "critical")) { > > > > > > + temp = 1000 * maxc; > > > > > > + } else if (!strcmp(type, "passive")) { > > > > > > + temp = 1000 * (maxc - 10); > > > > > > + } > > > > > > + if (temp) { > > > > > > + ret = fdt_setprop_u32(blob, trip, > > > > > > "temperature", temp); > > > > > > + if (ret) > > > > > > + return ret; > > > > > > + } > > > > > > + } > > > > > > + > > > > > > + return 0; > > > > > > +} > > > > > > + > > > > > > int ft_system_setup(void *blob, bd_t *bd) > > > > > > { > > > > > > #ifdef CONFIG_IMX8MQ > > > > > > @@ -1128,6 +1171,13 @@ usb_modify_speed: > > > > > > disable_cpu_nodes(blob, 2); > > > > > > #endif > > > > > > > > > > > > + if (fixup_thermal_trips(blob, "cpu-thermal")) > > > > > > + printf("Failed to update cpu-thermal > > > > > > trip(s)"); > > > > > > +#ifdef CONFIG_IMX8MP > > > > > > + if (fixup_thermal_trips(blob, "soc-thermal")) > > > > > > + printf("Failed to update soc-thermal > > > > > > trip(s)"); > > > > > > +#endif > > > > > > + > > > > > > return ft_add_optee_node(blob, bd); > > > > > > } > > > > > > #endif > > > > > > -- > > > > > > 2.34.1 > > > > > > > > > > > > > > > > > > > > >
diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach-imx/imx8m/soc.c index e93ecd2846..b451ece91f 100644 --- a/arch/arm/mach-imx/imx8m/soc.c +++ b/arch/arm/mach-imx/imx8m/soc.c @@ -1001,6 +1001,49 @@ static int disable_cpu_nodes(void *blob, u32 disabled_cores) return 0; } +int fixup_thermal_trips(void *blob, const char *name) +{ + int minc, maxc; + int node, trip; + + node = fdt_path_offset(blob, "/thermal-zones"); + if (node < 0) + return node; + + node = fdt_subnode_offset(blob, node, name); + if (node < 0) + return node; + + node = fdt_subnode_offset(blob, node, "trips"); + if (node < 0) + return node; + + get_cpu_temp_grade(&minc, &maxc); + + fdt_for_each_subnode(trip, blob, node) { + const char *type; + int temp, ret; + + type = fdt_getprop(blob, trip, "type", NULL); + if (!type) + continue; + + temp = 0; + if (!strcmp(type, "critical")) { + temp = 1000 * maxc; + } else if (!strcmp(type, "passive")) { + temp = 1000 * (maxc - 10); + } + if (temp) { + ret = fdt_setprop_u32(blob, trip, "temperature", temp); + if (ret) + return ret; + } + } + + return 0; +} + int ft_system_setup(void *blob, bd_t *bd) { #ifdef CONFIG_IMX8MQ @@ -1128,6 +1171,13 @@ usb_modify_speed: disable_cpu_nodes(blob, 2); #endif + if (fixup_thermal_trips(blob, "cpu-thermal")) + printf("Failed to update cpu-thermal trip(s)"); +#ifdef CONFIG_IMX8MP + if (fixup_thermal_trips(blob, "soc-thermal")) + printf("Failed to update soc-thermal trip(s)"); +#endif + return ft_add_optee_node(blob, bd); } #endif
Fixup thermal trips in Linux device tree according to SoC thermal grade. Signed-off-by: Andrejs Cainikovs <andrejs.cainikovs@toradex.com> --- arch/arm/mach-imx/imx8m/soc.c | 50 +++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+)