dvfs: tegra: Expand DVFS structure fields
Alex Frid [Thu, 6 Nov 2014 07:16:01 +0000 (23:16 -0800)]
Added to DVFS structure
- back pointer to clock object this structure is attached to
- index that is tracking position of the current DVFS point in the
  voltage and frequency scaling arrays

Bug 1555318

Change-Id: I2ed24be3046189e45d5feae66e5bbf850556aac4
Signed-off-by: Alex Frid <afrid@nvidia.com>
Reviewed-on: http://git-master/r/595818
Reviewed-by: Bo Yan <byan@nvidia.com>
Tested-by: Bo Yan <byan@nvidia.com>

drivers/platform/tegra/dvfs.c
include/linux/platform/tegra/dvfs.h

index e56d44c..a6f4188 100644 (file)
@@ -721,6 +721,7 @@ __tegra_dvfs_set_rate(struct dvfs *d, unsigned long rate)
 
        if (rate == 0) {
                d->cur_millivolts = 0;
+               d->cur_index = MAX_DVFS_FREQS;
                /*
                 * For single clock GPU rail keep DVFS rate unchanged when clock
                 * is disabled. Rail is turned off explicitly, in any case, but
@@ -771,6 +772,7 @@ __tegra_dvfs_set_rate(struct dvfs *d, unsigned long rate)
                        return -EINVAL;
                }
                d->cur_millivolts = mv;
+               d->cur_index = i;
        }
 
        d->cur_rate = rate;
@@ -1328,6 +1330,8 @@ static int __init enable_dvfs_on_clk(struct clk *c, struct dvfs *d)
        }
 
        c->dvfs = d;
+       d->clk = c;
+       d->cur_index = MAX_DVFS_FREQS;
 
        /*
         * Minimum core override level is determined as maximum voltage required
index 8bf28d6..1887bc2 100644 (file)
@@ -176,6 +176,7 @@ struct dvfs_pll_data {
 
 struct dvfs {
        const char *clk_name;
+       struct clk *clk;
        int speedo_id;
        int process_id;
 
@@ -201,8 +202,16 @@ struct dvfs {
        /* Maximum rate safe at minimum voltage across all thermal ranges */
        unsigned long fmax_at_vmin_safe_t;
 
+       /*
+        * Current dvfs point = { index into V/F arrays, voltage, rate request }
+        * cur_index is invalid - set to MAX_DVFS_FREQS - if cur_rate and
+        * cur_millivolts are set to zero (may happen when dvfs rate is not set
+        * initially, or clock is disabled).
+        */
+       int cur_index;
        int cur_millivolts;
        unsigned long cur_rate;
+
        unsigned long *alt_freqs;
        bool use_alt_freqs;
        long dbg_hz_offs;