Hi Aniket,

On 06:02-20241119, Aniket Limaye wrote:
> From: Reid Tonking <[email protected]>
> 
> k3_avs driver checks opp_ids when probing and overwrites the voltage
> values in vd_data for the respective board. The new k3_avs_check_opp()
> can be called from board files to check the efuse data and returns 0 if
> valid.
> 
> Also add the same check in k3_avs_program_voltage() to error out if
> the efuse data was not valid.
> 
> Signed-off-by: Reid Tonking <[email protected]>
> Signed-off-by: Aniket Limaye <[email protected]>
> ---
[..]
> ---
>  drivers/misc/k3_avs.c | 32 ++++++++++++++++++++++++++++++++
>  include/k3-avs.h      |  1 +
>  2 files changed, 33 insertions(+)
> 
> diff --git a/drivers/misc/k3_avs.c b/drivers/misc/k3_avs.c
> index 9d950d034a5..0774e0a4c9e 100644
> --- a/drivers/misc/k3_avs.c
> +++ b/drivers/misc/k3_avs.c
> @@ -121,6 +121,11 @@ static int k3_avs_program_voltage(struct k3_avs_privdata 
> *priv,
>       if (!vd->supply)
>               return -ENODEV;
>  
> +     if (!volt) {
> +             dev_err(priv->dev, "No efuse found for opp_%d\n", opp_id);
> +             return -EINVAL;
> +     }
> +
>       vd->opp = opp_id;
>       vd->flags |= VD_FLAG_INIT_DONE;
>  
> @@ -192,6 +197,33 @@ static int match_opp(struct vd_data *vd, u32 freq)
>       return -EINVAL;
>  }
>  
> +/**
> + * k3_check_opp: Check for presence of opp efuse
> + * @dev: AVS device
> + * @vdd_id: voltage domain ID
> + * @opp_id: opp id to check if voltage is present
> + *
> + * Checks to see if an opp has voltage. k3_avs probe will populate
> + * voltage data if efuse is present. Returns 0 if data is valid.
> + */
> +int k3_avs_check_opp(struct udevice *dev, int vdd_id, int opp_id)
> +{
> +     struct k3_avs_privdata *priv = dev_get_priv(dev);
> +     struct vd_data *vd;
> +     int volt;
> +
> +     vd = get_vd(priv, vdd_id);
> +     if (!vd)
> +             return -EINVAL;
> +
> +     volt = vd->opps[opp_id].volt;
> +     if (volt)
> +             return 0;
> +
> +     printf("No efuse found for opp_%d\n", opp_id);
> +     return -EINVAL;
> +}
> +
>  /**
>   * k3_avs_notify_freq: Notify clock rate change towards AVS subsystem
>   * @dev_id: Device ID for the clock to be changed
> diff --git a/include/k3-avs.h b/include/k3-avs.h
> index f6f1031c9cc..5a973e4ed45 100644
> --- a/include/k3-avs.h
> +++ b/include/k3-avs.h
> @@ -27,5 +27,6 @@
>  
>  int k3_avs_set_opp(struct udevice *dev, int vdd_id, int opp_id);
>  int k3_avs_notify_freq(int dev_id, int clk_id, u32 freq);
> +int k3_avs_check_opp(struct udevice *dev, int vdd_id, int opp_id);

Reviewed-by: Manorit Chawdhry <[email protected]>

Regards,
Manorit

>  
>  #endif
> -- 
> 2.47.0
> 

Reply via email to