mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH master] aiodev: imx_thermal: fix breakage after device tree sync
@ 2023-09-11 12:22 Ahmad Fatoum
  2023-09-11 12:35 ` Marco Felsch
  0 siblings, 1 reply; 4+ messages in thread
From: Ahmad Fatoum @ 2023-09-11 12:22 UTC (permalink / raw)
  To: barebox; +Cc: Ahmad Fatoum

fsl,tempmon-data is a deprecated property that has been replaced
upstream by a NVMEM cell pointing at the calibration value and so
made it into barebox breaking the driver.

Switch to using the new property to fix the regression.

Fixes: abef60363d8e ("dts: update to v5.8-rc1")
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 drivers/aiodev/imx_thermal.c | 25 ++++---------------------
 1 file changed, 4 insertions(+), 21 deletions(-)

diff --git a/drivers/aiodev/imx_thermal.c b/drivers/aiodev/imx_thermal.c
index 3263519cb241..2693ad05e0e5 100644
--- a/drivers/aiodev/imx_thermal.c
+++ b/drivers/aiodev/imx_thermal.c
@@ -22,6 +22,7 @@
 #include <linux/math64.h>
 #include <linux/log2.h>
 #include <linux/clk.h>
+#include <linux/nvmem-consumer.h>
 #include <mach/imx/imx6-anadig.h>
 #include <io.h>
 #include <aiodev.h>
@@ -29,7 +30,6 @@
 
 #define FACTOR0			10000000
 #define MEASURE_FREQ		327
-#define OCOTP_ANA1_OFFSET      (0xE * sizeof(uint32_t))
 
 struct imx_thermal_data {
 	int c1, c2;
@@ -109,30 +109,13 @@ static int imx_thermal_read(struct aiochannel *chan, int *val)
 static int imx_thermal_probe(struct device *dev)
 {
 	uint32_t ocotp_ana1;
-	struct device_node *node;
 	struct imx_thermal_data *imx_thermal;
-	struct cdev *ocotp;
 	int t1, n1, t2, n2;
 	int ret;
 
-	node = of_parse_phandle(dev->of_node, "fsl,tempmon-data", 0);
-	if (!node) {
-		dev_err(dev, "No calibration data source\n");
-		return -ENODEV;
-	}
-
-	ocotp = cdev_by_device_node(node);
-	if (!ocotp) {
-		dev_err(dev, "No OCOTP character device\n");
-		return -ENODEV;
-	}
-
-	ret = cdev_read(ocotp, &ocotp_ana1, sizeof(ocotp_ana1),
-			OCOTP_ANA1_OFFSET, 0);
-	if (ret != sizeof(ocotp_ana1)) {
-		dev_err(dev, "Failed to read calibration data\n");
-		return ret < 0 ? ret : -EIO;
-	}
+	ret = nvmem_cell_read_variable_le_u32(dev, "calib", &ocotp_ana1);
+	if (ret)
+		return ret;
 
 	imx_thermal = xzalloc(sizeof(*imx_thermal));
 	imx_thermal->base = syscon_base_lookup_by_phandle(dev->of_node,
-- 
2.39.2




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH master] aiodev: imx_thermal: fix breakage after device tree sync
  2023-09-11 12:22 [PATCH master] aiodev: imx_thermal: fix breakage after device tree sync Ahmad Fatoum
@ 2023-09-11 12:35 ` Marco Felsch
  2023-09-11 12:36   ` Ahmad Fatoum
  0 siblings, 1 reply; 4+ messages in thread
From: Marco Felsch @ 2023-09-11 12:35 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox

On 23-09-11, Ahmad Fatoum wrote:
> fsl,tempmon-data is a deprecated property that has been replaced
> upstream by a NVMEM cell pointing at the calibration value and so
> made it into barebox breaking the driver.
> 
> Switch to using the new property to fix the regression.

The Linux driver code can handle the deprecated binding still, in case
of old DTBs. Since the DTBS are builtin to barebox updating the DTB
without the barebox binary make no sense. Anyway, do we need to take the
deprecated binding into account as well like Linux does?

Regards,
  Marco

> Fixes: abef60363d8e ("dts: update to v5.8-rc1")
> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
> ---
>  drivers/aiodev/imx_thermal.c | 25 ++++---------------------
>  1 file changed, 4 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/aiodev/imx_thermal.c b/drivers/aiodev/imx_thermal.c
> index 3263519cb241..2693ad05e0e5 100644
> --- a/drivers/aiodev/imx_thermal.c
> +++ b/drivers/aiodev/imx_thermal.c
> @@ -22,6 +22,7 @@
>  #include <linux/math64.h>
>  #include <linux/log2.h>
>  #include <linux/clk.h>
> +#include <linux/nvmem-consumer.h>
>  #include <mach/imx/imx6-anadig.h>
>  #include <io.h>
>  #include <aiodev.h>
> @@ -29,7 +30,6 @@
>  
>  #define FACTOR0			10000000
>  #define MEASURE_FREQ		327
> -#define OCOTP_ANA1_OFFSET      (0xE * sizeof(uint32_t))
>  
>  struct imx_thermal_data {
>  	int c1, c2;
> @@ -109,30 +109,13 @@ static int imx_thermal_read(struct aiochannel *chan, int *val)
>  static int imx_thermal_probe(struct device *dev)
>  {
>  	uint32_t ocotp_ana1;
> -	struct device_node *node;
>  	struct imx_thermal_data *imx_thermal;
> -	struct cdev *ocotp;
>  	int t1, n1, t2, n2;
>  	int ret;
>  
> -	node = of_parse_phandle(dev->of_node, "fsl,tempmon-data", 0);
> -	if (!node) {
> -		dev_err(dev, "No calibration data source\n");
> -		return -ENODEV;
> -	}
> -
> -	ocotp = cdev_by_device_node(node);
> -	if (!ocotp) {
> -		dev_err(dev, "No OCOTP character device\n");
> -		return -ENODEV;
> -	}
> -
> -	ret = cdev_read(ocotp, &ocotp_ana1, sizeof(ocotp_ana1),
> -			OCOTP_ANA1_OFFSET, 0);
> -	if (ret != sizeof(ocotp_ana1)) {
> -		dev_err(dev, "Failed to read calibration data\n");
> -		return ret < 0 ? ret : -EIO;
> -	}
> +	ret = nvmem_cell_read_variable_le_u32(dev, "calib", &ocotp_ana1);
> +	if (ret)
> +		return ret;
>  
>  	imx_thermal = xzalloc(sizeof(*imx_thermal));
>  	imx_thermal->base = syscon_base_lookup_by_phandle(dev->of_node,
> -- 
> 2.39.2
> 
> 
> 



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH master] aiodev: imx_thermal: fix breakage after device tree sync
  2023-09-11 12:35 ` Marco Felsch
@ 2023-09-11 12:36   ` Ahmad Fatoum
  2023-09-11 12:43     ` Marco Felsch
  0 siblings, 1 reply; 4+ messages in thread
From: Ahmad Fatoum @ 2023-09-11 12:36 UTC (permalink / raw)
  To: Marco Felsch; +Cc: barebox

On 11.09.23 14:35, Marco Felsch wrote:
> On 23-09-11, Ahmad Fatoum wrote:
>> fsl,tempmon-data is a deprecated property that has been replaced
>> upstream by a NVMEM cell pointing at the calibration value and so
>> made it into barebox breaking the driver.
>>
>> Switch to using the new property to fix the regression.
> 
> The Linux driver code can handle the deprecated binding still, in case
> of old DTBs. Since the DTBS are builtin to barebox updating the DTB
> without the barebox binary make no sense. Anyway, do we need to take the
> deprecated binding into account as well like Linux does?

For this reason, only the new binding is implemented.

> 
> Regards,
>   Marco
> 
>> Fixes: abef60363d8e ("dts: update to v5.8-rc1")
>> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
>> ---
>>  drivers/aiodev/imx_thermal.c | 25 ++++---------------------
>>  1 file changed, 4 insertions(+), 21 deletions(-)
>>
>> diff --git a/drivers/aiodev/imx_thermal.c b/drivers/aiodev/imx_thermal.c
>> index 3263519cb241..2693ad05e0e5 100644
>> --- a/drivers/aiodev/imx_thermal.c
>> +++ b/drivers/aiodev/imx_thermal.c
>> @@ -22,6 +22,7 @@
>>  #include <linux/math64.h>
>>  #include <linux/log2.h>
>>  #include <linux/clk.h>
>> +#include <linux/nvmem-consumer.h>
>>  #include <mach/imx/imx6-anadig.h>
>>  #include <io.h>
>>  #include <aiodev.h>
>> @@ -29,7 +30,6 @@
>>  
>>  #define FACTOR0			10000000
>>  #define MEASURE_FREQ		327
>> -#define OCOTP_ANA1_OFFSET      (0xE * sizeof(uint32_t))
>>  
>>  struct imx_thermal_data {
>>  	int c1, c2;
>> @@ -109,30 +109,13 @@ static int imx_thermal_read(struct aiochannel *chan, int *val)
>>  static int imx_thermal_probe(struct device *dev)
>>  {
>>  	uint32_t ocotp_ana1;
>> -	struct device_node *node;
>>  	struct imx_thermal_data *imx_thermal;
>> -	struct cdev *ocotp;
>>  	int t1, n1, t2, n2;
>>  	int ret;
>>  
>> -	node = of_parse_phandle(dev->of_node, "fsl,tempmon-data", 0);
>> -	if (!node) {
>> -		dev_err(dev, "No calibration data source\n");
>> -		return -ENODEV;
>> -	}
>> -
>> -	ocotp = cdev_by_device_node(node);
>> -	if (!ocotp) {
>> -		dev_err(dev, "No OCOTP character device\n");
>> -		return -ENODEV;
>> -	}
>> -
>> -	ret = cdev_read(ocotp, &ocotp_ana1, sizeof(ocotp_ana1),
>> -			OCOTP_ANA1_OFFSET, 0);
>> -	if (ret != sizeof(ocotp_ana1)) {
>> -		dev_err(dev, "Failed to read calibration data\n");
>> -		return ret < 0 ? ret : -EIO;
>> -	}
>> +	ret = nvmem_cell_read_variable_le_u32(dev, "calib", &ocotp_ana1);
>> +	if (ret)
>> +		return ret;
>>  
>>  	imx_thermal = xzalloc(sizeof(*imx_thermal));
>>  	imx_thermal->base = syscon_base_lookup_by_phandle(dev->of_node,
>> -- 
>> 2.39.2
>>
>>
>>
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH master] aiodev: imx_thermal: fix breakage after device tree sync
  2023-09-11 12:36   ` Ahmad Fatoum
@ 2023-09-11 12:43     ` Marco Felsch
  0 siblings, 0 replies; 4+ messages in thread
From: Marco Felsch @ 2023-09-11 12:43 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: barebox

On 23-09-11, Ahmad Fatoum wrote:
> On 11.09.23 14:35, Marco Felsch wrote:
> > On 23-09-11, Ahmad Fatoum wrote:
> >> fsl,tempmon-data is a deprecated property that has been replaced
> >> upstream by a NVMEM cell pointing at the calibration value and so
> >> made it into barebox breaking the driver.
> >>
> >> Switch to using the new property to fix the regression.
> > 
> > The Linux driver code can handle the deprecated binding still, in case
> > of old DTBs. Since the DTBS are builtin to barebox updating the DTB
> > without the barebox binary make no sense. Anyway, do we need to take the
> > deprecated binding into account as well like Linux does?
> 
> For this reason, only the new binding is implemented.

I would add this note into the commit message else someone (like me)
could say that this breaks driver backward compatibility.

Regards,
  Marco

> > Regards,
> >   Marco
> > 
> >> Fixes: abef60363d8e ("dts: update to v5.8-rc1")
> >> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
> >> ---
> >>  drivers/aiodev/imx_thermal.c | 25 ++++---------------------
> >>  1 file changed, 4 insertions(+), 21 deletions(-)
> >>
> >> diff --git a/drivers/aiodev/imx_thermal.c b/drivers/aiodev/imx_thermal.c
> >> index 3263519cb241..2693ad05e0e5 100644
> >> --- a/drivers/aiodev/imx_thermal.c
> >> +++ b/drivers/aiodev/imx_thermal.c
> >> @@ -22,6 +22,7 @@
> >>  #include <linux/math64.h>
> >>  #include <linux/log2.h>
> >>  #include <linux/clk.h>
> >> +#include <linux/nvmem-consumer.h>
> >>  #include <mach/imx/imx6-anadig.h>
> >>  #include <io.h>
> >>  #include <aiodev.h>
> >> @@ -29,7 +30,6 @@
> >>  
> >>  #define FACTOR0			10000000
> >>  #define MEASURE_FREQ		327
> >> -#define OCOTP_ANA1_OFFSET      (0xE * sizeof(uint32_t))
> >>  
> >>  struct imx_thermal_data {
> >>  	int c1, c2;
> >> @@ -109,30 +109,13 @@ static int imx_thermal_read(struct aiochannel *chan, int *val)
> >>  static int imx_thermal_probe(struct device *dev)
> >>  {
> >>  	uint32_t ocotp_ana1;
> >> -	struct device_node *node;
> >>  	struct imx_thermal_data *imx_thermal;
> >> -	struct cdev *ocotp;
> >>  	int t1, n1, t2, n2;
> >>  	int ret;
> >>  
> >> -	node = of_parse_phandle(dev->of_node, "fsl,tempmon-data", 0);
> >> -	if (!node) {
> >> -		dev_err(dev, "No calibration data source\n");
> >> -		return -ENODEV;
> >> -	}
> >> -
> >> -	ocotp = cdev_by_device_node(node);
> >> -	if (!ocotp) {
> >> -		dev_err(dev, "No OCOTP character device\n");
> >> -		return -ENODEV;
> >> -	}
> >> -
> >> -	ret = cdev_read(ocotp, &ocotp_ana1, sizeof(ocotp_ana1),
> >> -			OCOTP_ANA1_OFFSET, 0);
> >> -	if (ret != sizeof(ocotp_ana1)) {
> >> -		dev_err(dev, "Failed to read calibration data\n");
> >> -		return ret < 0 ? ret : -EIO;
> >> -	}
> >> +	ret = nvmem_cell_read_variable_le_u32(dev, "calib", &ocotp_ana1);
> >> +	if (ret)
> >> +		return ret;
> >>  
> >>  	imx_thermal = xzalloc(sizeof(*imx_thermal));
> >>  	imx_thermal->base = syscon_base_lookup_by_phandle(dev->of_node,
> >> -- 
> >> 2.39.2
> >>
> >>
> >>
> > 
> 
> -- 
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 
> 



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-09-11 12:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-11 12:22 [PATCH master] aiodev: imx_thermal: fix breakage after device tree sync Ahmad Fatoum
2023-09-11 12:35 ` Marco Felsch
2023-09-11 12:36   ` Ahmad Fatoum
2023-09-11 12:43     ` Marco Felsch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox