Message ID | 1541565263-8296-2-git-send-email-j-keerthy@ti.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Series | opp: ti-opp-supply: Fixes | expand |
On 07-11-18, 10:04, Keerthy wrote: > The voltage range (min, max) provided in the device tree is from > the data manual and is pretty big, catering to a wide range of devices. > On a i2c read/write failure the regulator_set_voltage_triplet function > falls back to set voltage between min and max. The min value from Device > Tree can be lesser than the optimal value and in that case that can lead > to a hang or crash. Hence set the u_volt_min dynamically to the optimal > voltage value. And why shouldn't we fix the DT for this ?
On 11/8/2018 11:24 AM, Viresh Kumar wrote: > On 07-11-18, 10:04, Keerthy wrote: >> The voltage range (min, max) provided in the device tree is from >> the data manual and is pretty big, catering to a wide range of devices. >> On a i2c read/write failure the regulator_set_voltage_triplet function >> falls back to set voltage between min and max. The min value from Device >> Tree can be lesser than the optimal value and in that case that can lead >> to a hang or crash. Hence set the u_volt_min dynamically to the optimal >> voltage value. > > And why shouldn't we fix the DT for this ? The DT voltages do not cater to the broad range of devices. In some particular cases the DT min voltage is slightly lower the voltage at which the device cannot sustain a particular frequency in which case the device just silently hangs. So best thing to do is to actually read the device specific voltages dynamically which will guarantee a particular device sustaining a particular frequency at the optimal voltage. >
On 11/11/2018 09:15 PM, J, KEERTHY wrote: > > > On 11/8/2018 11:24 AM, Viresh Kumar wrote: >> On 07-11-18, 10:04, Keerthy wrote: >>> The voltage range (min, max) provided in the device tree is from >>> the data manual and is pretty big, catering to a wide range of devices. >>> On a i2c read/write failure the regulator_set_voltage_triplet function >>> falls back to set voltage between min and max. The min value from Device >>> Tree can be lesser than the optimal value and in that case that can lead >>> to a hang or crash. Hence set the u_volt_min dynamically to the optimal >>> voltage value. >> >> And why shouldn't we fix the DT for this ? > > The DT voltages do not cater to the broad range of devices. In some > particular cases the DT min voltage is slightly lower the voltage at > which the device cannot sustain a particular frequency in which case the > device just silently hangs. So best thing to do is to actually read the > device specific voltages dynamically which will guarantee a particular > device sustaining a particular frequency at the optimal voltage. > Acked-by: Dave Gerlach <d-gerlach@ti.com> >>
diff --git a/drivers/opp/ti-opp-supply.c b/drivers/opp/ti-opp-supply.c index 9e5a9a3..29e08a4 100644 --- a/drivers/opp/ti-opp-supply.c +++ b/drivers/opp/ti-opp-supply.c @@ -290,6 +290,9 @@ static int ti_opp_supply_set_opp(struct dev_pm_set_opp_data *data) vdd_uv = _get_optimal_vdd_voltage(dev, &opp_data, new_supply_vbb->u_volt); + if (new_supply_vdd->u_volt_min < vdd_uv) + new_supply_vdd->u_volt_min = vdd_uv; + /* Scaling up? Scale voltage before frequency */ if (freq > old_freq) { ret = _opp_set_voltage(dev, new_supply_vdd, vdd_uv, vdd_reg,
The voltage range (min, max) provided in the device tree is from the data manual and is pretty big, catering to a wide range of devices. On a i2c read/write failure the regulator_set_voltage_triplet function falls back to set voltage between min and max. The min value from Device Tree can be lesser than the optimal value and in that case that can lead to a hang or crash. Hence set the u_volt_min dynamically to the optimal voltage value. Fixes: 9a835fa6e47 ("PM / OPP: Add ti-opp-supply driver") Signed-off-by: Keerthy <j-keerthy@ti.com> --- drivers/opp/ti-opp-supply.c | 3 +++ 1 file changed, 3 insertions(+)