misc: k3_avs: Check validity of efuse voltage data
authorReid Tonking <reidt@ti.com>
Tue, 19 Nov 2024 00:32:57 +0000 (06:02 +0530)
committerTom Rini <trini@konsulko.com>
Wed, 4 Dec 2024 20:30:18 +0000 (14:30 -0600)
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>
drivers/misc/k3_avs.c
include/k3-avs.h

index 9d950d0..0774e0a 100644 (file)
@@ -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
index f6f1031..5a973e4 100644 (file)
@@ -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);
 
 #endif