misc: k3_avs: Check validity of efuse voltage data
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 <reidt@ti.com> Signed-off-by: Aniket Limaye <a-limaye@ti.com> Reviewed-by: Manorit Chawdhry <m-chawdhry@ti.com>
This commit is contained in:
@@ -121,6 +121,11 @@ static int k3_avs_program_voltage(struct k3_avs_privdata *priv,
|
|||||||
if (!vd->supply)
|
if (!vd->supply)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (!volt) {
|
||||||
|
dev_err(priv->dev, "No efuse found for opp_%d\n", opp_id);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
vd->opp = opp_id;
|
vd->opp = opp_id;
|
||||||
vd->flags |= VD_FLAG_INIT_DONE;
|
vd->flags |= VD_FLAG_INIT_DONE;
|
||||||
|
|
||||||
@@ -192,6 +197,33 @@ static int match_opp(struct vd_data *vd, u32 freq)
|
|||||||
return -EINVAL;
|
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
|
* k3_avs_notify_freq: Notify clock rate change towards AVS subsystem
|
||||||
* @dev_id: Device ID for the clock to be changed
|
* @dev_id: Device ID for the clock to be changed
|
||||||
|
@@ -27,5 +27,6 @@
|
|||||||
|
|
||||||
int k3_avs_set_opp(struct udevice *dev, int vdd_id, int opp_id);
|
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_notify_freq(int dev_id, int clk_id, u32 freq);
|
||||||
|
int k3_avs_check_opp(struct udevice *dev, int vdd_id, int opp_id);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user