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 <[email protected]>
> Fixes: 5179c523c1ea ("firmware: arm_scmi: add initial support for sensor 
> protocol")
> Signed-off-by: Sudeep Holla <[email protected]>

Reviewed-by: Florian Fainelli <[email protected]>

> ---
>  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

Reply via email to