aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_debugfs.c
diff options
context:
space:
mode:
authorJesse Barnes <jbarnes@virtuousgeek.org>2013-04-17 18:54:58 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-04-18 04:15:43 -0400
commit0a073b843bcd9a660f76e497182aac97cafddc4c (patch)
treea4665fb1ced6aa9f09150438e260544543d6335a /drivers/gpu/drm/i915/i915_debugfs.c
parent855ba3be12badf6228151ca3ccf54632cfdd463d (diff)
drm/i915: turbo & RC6 support for VLV v7
Uses slightly different interfaces than other platforms. v2: track actual set freq, not requested (Rohit) fix debug prints in init code (Jesse) v3: don't write sleep reg (Jesse) re-add RC6 wake limit write (Ben) fixup thresholds to match other platforms (Ben) clean up mem freq calculation (Ben) clean up debug prints (Ben) v4: move defines from punit patch (Ville) v5: remove writes to nonexistent regs (Jesse) put RP and RC regs together (Jesse) fix RC6 enable (Jesse) v6: use correct fuse reads from NC (Jesse) split out min/max funcs for use in sysfs (Jesse) add debugfs & sysfs freq controls (Jesse) v7: update with Ben's hw_max changes (Jesse) Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> Reviewed-by: Ben Widawsky <ben@bwidawsk.net> (v6) [danvet: Follow checkpatch sugggestion to use min_t to avoid casting fun.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_debugfs.c')
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c58
1 files changed, 49 insertions, 9 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index e913d325d5b8..367b534d2260 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -941,7 +941,7 @@ static int i915_cur_delayinfo(struct seq_file *m, void *unused)
941 MEMSTAT_VID_SHIFT); 941 MEMSTAT_VID_SHIFT);
942 seq_printf(m, "Current P-state: %d\n", 942 seq_printf(m, "Current P-state: %d\n",
943 (rgvstat & MEMSTAT_PSTATE_MASK) >> MEMSTAT_PSTATE_SHIFT); 943 (rgvstat & MEMSTAT_PSTATE_MASK) >> MEMSTAT_PSTATE_SHIFT);
944 } else if (IS_GEN6(dev) || IS_GEN7(dev)) { 944 } else if ((IS_GEN6(dev) || IS_GEN7(dev)) && !IS_VALLEYVIEW(dev)) {
945 u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS); 945 u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
946 u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS); 946 u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS);
947 u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP); 947 u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
@@ -1009,6 +1009,25 @@ static int i915_cur_delayinfo(struct seq_file *m, void *unused)
1009 1009
1010 seq_printf(m, "Max overclocked frequency: %dMHz\n", 1010 seq_printf(m, "Max overclocked frequency: %dMHz\n",
1011 dev_priv->rps.hw_max * GT_FREQUENCY_MULTIPLIER); 1011 dev_priv->rps.hw_max * GT_FREQUENCY_MULTIPLIER);
1012 } else if (IS_VALLEYVIEW(dev)) {
1013 u32 freq_sts, val;
1014
1015 valleyview_punit_read(dev_priv, PUNIT_REG_GPU_FREQ_STS,
1016 &freq_sts);
1017 seq_printf(m, "PUNIT_REG_GPU_FREQ_STS: 0x%08x\n", freq_sts);
1018 seq_printf(m, "DDR freq: %d MHz\n", dev_priv->mem_freq);
1019
1020 valleyview_punit_read(dev_priv, PUNIT_FUSE_BUS1, &val);
1021 seq_printf(m, "max GPU freq: %d MHz\n",
1022 vlv_gpu_freq(dev_priv->mem_freq, val));
1023
1024 valleyview_punit_read(dev_priv, PUNIT_REG_GPU_LFM, &val);
1025 seq_printf(m, "min GPU freq: %d MHz\n",
1026 vlv_gpu_freq(dev_priv->mem_freq, val));
1027
1028 seq_printf(m, "current GPU freq: %d MHz\n",
1029 vlv_gpu_freq(dev_priv->mem_freq,
1030 (freq_sts >> 8) & 0xff));
1012 } else { 1031 } else {
1013 seq_printf(m, "no P-state info available\n"); 1032 seq_printf(m, "no P-state info available\n");
1014 } 1033 }
@@ -1812,7 +1831,11 @@ i915_max_freq_get(void *data, u64 *val)
1812 if (ret) 1831 if (ret)
1813 return ret; 1832 return ret;
1814 1833
1815 *val = dev_priv->rps.max_delay * GT_FREQUENCY_MULTIPLIER; 1834 if (IS_VALLEYVIEW(dev))
1835 *val = vlv_gpu_freq(dev_priv->mem_freq,
1836 dev_priv->rps.max_delay);
1837 else
1838 *val = dev_priv->rps.max_delay * GT_FREQUENCY_MULTIPLIER;
1816 mutex_unlock(&dev_priv->rps.hw_lock); 1839 mutex_unlock(&dev_priv->rps.hw_lock);
1817 1840
1818 return 0; 1841 return 0;
@@ -1837,9 +1860,16 @@ i915_max_freq_set(void *data, u64 val)
1837 /* 1860 /*
1838 * Turbo will still be enabled, but won't go above the set value. 1861 * Turbo will still be enabled, but won't go above the set value.
1839 */ 1862 */
1840 do_div(val, GT_FREQUENCY_MULTIPLIER); 1863 if (IS_VALLEYVIEW(dev)) {
1841 dev_priv->rps.max_delay = val; 1864 val = vlv_freq_opcode(dev_priv->mem_freq, val);
1842 gen6_set_rps(dev, val); 1865 dev_priv->rps.max_delay = val;
1866 gen6_set_rps(dev, val);
1867 } else {
1868 do_div(val, GT_FREQUENCY_MULTIPLIER);
1869 dev_priv->rps.max_delay = val;
1870 gen6_set_rps(dev, val);
1871 }
1872
1843 mutex_unlock(&dev_priv->rps.hw_lock); 1873 mutex_unlock(&dev_priv->rps.hw_lock);
1844 1874
1845 return 0; 1875 return 0;
@@ -1863,7 +1893,11 @@ i915_min_freq_get(void *data, u64 *val)
1863 if (ret) 1893 if (ret)
1864 return ret; 1894 return ret;
1865 1895
1866 *val = dev_priv->rps.min_delay * GT_FREQUENCY_MULTIPLIER; 1896 if (IS_VALLEYVIEW(dev))
1897 *val = vlv_gpu_freq(dev_priv->mem_freq,
1898 dev_priv->rps.min_delay);
1899 else
1900 *val = dev_priv->rps.min_delay * GT_FREQUENCY_MULTIPLIER;
1867 mutex_unlock(&dev_priv->rps.hw_lock); 1901 mutex_unlock(&dev_priv->rps.hw_lock);
1868 1902
1869 return 0; 1903 return 0;
@@ -1888,9 +1922,15 @@ i915_min_freq_set(void *data, u64 val)
1888 /* 1922 /*
1889 * Turbo will still be enabled, but won't go below the set value. 1923 * Turbo will still be enabled, but won't go below the set value.
1890 */ 1924 */
1891 do_div(val, GT_FREQUENCY_MULTIPLIER); 1925 if (IS_VALLEYVIEW(dev)) {
1892 dev_priv->rps.min_delay = val; 1926 val = vlv_freq_opcode(dev_priv->mem_freq, val);
1893 gen6_set_rps(dev, val); 1927 dev_priv->rps.min_delay = val;
1928 valleyview_set_rps(dev, val);
1929 } else {
1930 do_div(val, GT_FREQUENCY_MULTIPLIER);
1931 dev_priv->rps.min_delay = val;
1932 gen6_set_rps(dev, val);
1933 }
1894 mutex_unlock(&dev_priv->rps.hw_lock); 1934 mutex_unlock(&dev_priv->rps.hw_lock);
1895 1935
1896 return 0; 1936 return 0;