Re: [PATCH] firmware: arm_scmi: fix bitfield definitions for SENSOR_DESC attributes
From: Florian Fainelli
Date: Thu May 16 2019 - 12:40:02 EST
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@xxxxxxxxx>
> Fixes: 5179c523c1ea ("firmware: arm_scmi: add initial support for sensor protocol")
> Signed-off-by: Sudeep Holla <sudeep.holla@xxxxxxx>
Reviewed-by: Florian Fainelli <f.fainelli@xxxxxxxxx>
> ---
> 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