diff mbox series

firmware: arm_scmi: fix bitfield definitions for SENSOR_DESC attributes

Message ID 20190516163315.18505-1-sudeep.holla@arm.com
State Accepted
Commit 430daaf96ad133be5ce7c3a5c60e94247f7c6f71
Headers show
Series firmware: arm_scmi: fix bitfield definitions for SENSOR_DESC attributes | expand

Commit Message

Sudeep Holla May 16, 2019, 4:33 p.m. UTC
As per the SCMI specification the bitfields for SENSOR_DESC attributes
are as follows:
attributes_low 	[7:0] 	Number of trip points supported
attributes_high	[15:11]	The power-of-10 multiplier in 2's-complement
			format that is applied to the sensor units

Looks like the code developed during the draft versions of the
specification slipped through and are wrong with respect to final
released version. Fix them by adjusting the bitfields appropriately.

Cc: Florian Fainelli <f.fainelli@gmail.com>
Fixes: 5179c523c1ea ("firmware: arm_scmi: add initial support for sensor protocol")
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>

---
 drivers/firmware/arm_scmi/sensors.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Hi Florian,

While testing your patches, I found this horrible/silly bug with bitfields
which initial made me think firmware is buggy but later found out driver
was buggy instead.

I updated your patch accordingly[1]

Regards,
Sudeep

[1] https://git.kernel.org/sudeep.holla/linux/h/for-next/scmi-updates

-- 
2.17.1

Comments

Florian Fainelli May 16, 2019, 4:37 p.m. UTC | #1
On 5/16/19 9:33 AM, Sudeep Holla wrote:
> As per the SCMI specification the bitfields for SENSOR_DESC attributes

> are as follows:

> attributes_low 	[7:0] 	Number of trip points supported

> attributes_high	[15:11]	The power-of-10 multiplier in 2's-complement

> 			format that is applied to the sensor units

> 

> Looks like the code developed during the draft versions of the

> specification slipped through and are wrong with respect to final

> released version. Fix them by adjusting the bitfields appropriately.

> 

> Cc: Florian Fainelli <f.fainelli@gmail.com>

> Fixes: 5179c523c1ea ("firmware: arm_scmi: add initial support for sensor protocol")

> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>


Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>


> ---

>  drivers/firmware/arm_scmi/sensors.c | 4 ++--

>  1 file changed, 2 insertions(+), 2 deletions(-)

> 

> Hi Florian,

> 

> While testing your patches, I found this horrible/silly bug with bitfields

> which initial made me think firmware is buggy but later found out driver

> was buggy instead.

> 

> I updated your patch accordingly[1]


Looks good to me, thanks for fixing that up!

> 

> Regards,

> Sudeep

> 

> [1] https://git.kernel.org/sudeep.holla/linux/h/for-next/scmi-updates

> 

> diff --git a/drivers/firmware/arm_scmi/sensors.c b/drivers/firmware/arm_scmi/sensors.c

> index b53d5cc9c9f6..c00287b5f2c2 100644

> --- a/drivers/firmware/arm_scmi/sensors.c

> +++ b/drivers/firmware/arm_scmi/sensors.c

> @@ -30,10 +30,10 @@ struct scmi_msg_resp_sensor_description {

>  		__le32 id;

>  		__le32 attributes_low;

>  #define SUPPORTS_ASYNC_READ(x)	((x) & BIT(31))

> -#define NUM_TRIP_POINTS(x)	(((x) >> 4) & 0xff)

> +#define NUM_TRIP_POINTS(x)	((x) & 0xff)

>  		__le32 attributes_high;

>  #define SENSOR_TYPE(x)		((x) & 0xff)

> -#define SENSOR_SCALE(x)		(((x) >> 11) & 0x3f)

> +#define SENSOR_SCALE(x)		(((x) >> 11) & 0x1f)

>  #define SENSOR_UPDATE_SCALE(x)	(((x) >> 22) & 0x1f)

>  #define SENSOR_UPDATE_BASE(x)	(((x) >> 27) & 0x1f)

>  		    u8 name[SCMI_MAX_STR_SIZE];

> 



-- 
Florian
diff mbox series

Patch

diff --git a/drivers/firmware/arm_scmi/sensors.c b/drivers/firmware/arm_scmi/sensors.c
index b53d5cc9c9f6..c00287b5f2c2 100644
--- a/drivers/firmware/arm_scmi/sensors.c
+++ b/drivers/firmware/arm_scmi/sensors.c
@@ -30,10 +30,10 @@  struct scmi_msg_resp_sensor_description {
 		__le32 id;
 		__le32 attributes_low;
 #define SUPPORTS_ASYNC_READ(x)	((x) & BIT(31))
-#define NUM_TRIP_POINTS(x)	(((x) >> 4) & 0xff)
+#define NUM_TRIP_POINTS(x)	((x) & 0xff)
 		__le32 attributes_high;
 #define SENSOR_TYPE(x)		((x) & 0xff)
-#define SENSOR_SCALE(x)		(((x) >> 11) & 0x3f)
+#define SENSOR_SCALE(x)		(((x) >> 11) & 0x1f)
 #define SENSOR_UPDATE_SCALE(x)	(((x) >> 22) & 0x1f)
 #define SENSOR_UPDATE_BASE(x)	(((x) >> 27) & 0x1f)
 		    u8 name[SCMI_MAX_STR_SIZE];