diff options
author | Jesse Barnes <jbarnes@virtuousgeek.org> | 2011-01-18 18:49:25 -0500 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-01-19 07:57:56 -0500 |
commit | ccab5c82759e2ace74b2e84f82d1e0eedd932571 (patch) | |
tree | 5c22ecdd165a432f8024c99df7581901676f1649 /drivers/gpu/drm | |
parent | 311bd68e024f9006db66cbadc3bd9f62fd663f4b (diff) |
drm/i915: tune Sandy Bridge DRPS constants
These make us increase our frequency much more readily, and decrease
them only after significant idle time, resulting in a 20% performance
increase for nexuiz.
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 27 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 10 |
3 files changed, 46 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index c31e818f8b08..5825a586015e 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
@@ -862,19 +862,44 @@ static int i915_cur_delayinfo(struct seq_file *m, void *unused) | |||
862 | u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS); | 862 | u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS); |
863 | u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS); | 863 | u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS); |
864 | u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP); | 864 | u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP); |
865 | u32 rpstat; | ||
866 | u32 rpupei, rpcurup, rpprevup; | ||
867 | u32 rpdownei, rpcurdown, rpprevdown; | ||
865 | int max_freq; | 868 | int max_freq; |
866 | 869 | ||
867 | /* RPSTAT1 is in the GT power well */ | 870 | /* RPSTAT1 is in the GT power well */ |
868 | __gen6_force_wake_get(dev_priv); | 871 | __gen6_force_wake_get(dev_priv); |
869 | 872 | ||
873 | rpstat = I915_READ(GEN6_RPSTAT1); | ||
874 | rpupei = I915_READ(GEN6_RP_CUR_UP_EI); | ||
875 | rpcurup = I915_READ(GEN6_RP_CUR_UP); | ||
876 | rpprevup = I915_READ(GEN6_RP_PREV_UP); | ||
877 | rpdownei = I915_READ(GEN6_RP_CUR_DOWN_EI); | ||
878 | rpcurdown = I915_READ(GEN6_RP_CUR_DOWN); | ||
879 | rpprevdown = I915_READ(GEN6_RP_PREV_DOWN); | ||
880 | |||
870 | seq_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status); | 881 | seq_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status); |
871 | seq_printf(m, "RPSTAT1: 0x%08x\n", I915_READ(GEN6_RPSTAT1)); | 882 | seq_printf(m, "RPSTAT1: 0x%08x\n", rpstat); |
872 | seq_printf(m, "Render p-state ratio: %d\n", | 883 | seq_printf(m, "Render p-state ratio: %d\n", |
873 | (gt_perf_status & 0xff00) >> 8); | 884 | (gt_perf_status & 0xff00) >> 8); |
874 | seq_printf(m, "Render p-state VID: %d\n", | 885 | seq_printf(m, "Render p-state VID: %d\n", |
875 | gt_perf_status & 0xff); | 886 | gt_perf_status & 0xff); |
876 | seq_printf(m, "Render p-state limit: %d\n", | 887 | seq_printf(m, "Render p-state limit: %d\n", |
877 | rp_state_limits & 0xff); | 888 | rp_state_limits & 0xff); |
889 | seq_printf(m, "CAGF: %dMHz\n", ((rpstat & GEN6_CAGF_MASK) >> | ||
890 | GEN6_CAGF_SHIFT) * 100); | ||
891 | seq_printf(m, "RP CUR UP EI: %dus\n", rpupei & | ||
892 | GEN6_CURICONT_MASK); | ||
893 | seq_printf(m, "RP CUR UP: %dus\n", rpcurup & | ||
894 | GEN6_CURBSYTAVG_MASK); | ||
895 | seq_printf(m, "RP PREV UP: %dus\n", rpprevup & | ||
896 | GEN6_CURBSYTAVG_MASK); | ||
897 | seq_printf(m, "RP CUR DOWN EI: %dus\n", rpdownei & | ||
898 | GEN6_CURIAVG_MASK); | ||
899 | seq_printf(m, "RP CUR DOWN: %dus\n", rpcurdown & | ||
900 | GEN6_CURBSYTAVG_MASK); | ||
901 | seq_printf(m, "RP PREV DOWN: %dus\n", rpprevdown & | ||
902 | GEN6_CURBSYTAVG_MASK); | ||
878 | 903 | ||
879 | max_freq = (rp_state_cap & 0xff0000) >> 16; | 904 | max_freq = (rp_state_cap & 0xff0000) >> 16; |
880 | seq_printf(m, "Lowest (RPN) frequency: %dMHz\n", | 905 | seq_printf(m, "Lowest (RPN) frequency: %dMHz\n", |
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index e6b106bb87b6..810cfa866413 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -3283,15 +3283,28 @@ | |||
3283 | #define GEN6_RP_DOWN_TIMEOUT 0xA010 | 3283 | #define GEN6_RP_DOWN_TIMEOUT 0xA010 |
3284 | #define GEN6_RP_INTERRUPT_LIMITS 0xA014 | 3284 | #define GEN6_RP_INTERRUPT_LIMITS 0xA014 |
3285 | #define GEN6_RPSTAT1 0xA01C | 3285 | #define GEN6_RPSTAT1 0xA01C |
3286 | #define GEN6_CAGF_SHIFT 8 | ||
3287 | #define GEN6_CAGF_MASK (0x7f << GEN6_CAGF_SHIFT) | ||
3286 | #define GEN6_RP_CONTROL 0xA024 | 3288 | #define GEN6_RP_CONTROL 0xA024 |
3287 | #define GEN6_RP_MEDIA_TURBO (1<<11) | 3289 | #define GEN6_RP_MEDIA_TURBO (1<<11) |
3288 | #define GEN6_RP_USE_NORMAL_FREQ (1<<9) | 3290 | #define GEN6_RP_USE_NORMAL_FREQ (1<<9) |
3289 | #define GEN6_RP_MEDIA_IS_GFX (1<<8) | 3291 | #define GEN6_RP_MEDIA_IS_GFX (1<<8) |
3290 | #define GEN6_RP_ENABLE (1<<7) | 3292 | #define GEN6_RP_ENABLE (1<<7) |
3291 | #define GEN6_RP_UP_BUSY_MAX (0x2<<3) | 3293 | #define GEN6_RP_UP_IDLE_MIN (0x1<<3) |
3292 | #define GEN6_RP_DOWN_BUSY_MIN (0x2<<0) | 3294 | #define GEN6_RP_UP_BUSY_AVG (0x2<<3) |
3295 | #define GEN6_RP_UP_BUSY_CONT (0x4<<3) | ||
3296 | #define GEN6_RP_DOWN_IDLE_CONT (0x1<<0) | ||
3293 | #define GEN6_RP_UP_THRESHOLD 0xA02C | 3297 | #define GEN6_RP_UP_THRESHOLD 0xA02C |
3294 | #define GEN6_RP_DOWN_THRESHOLD 0xA030 | 3298 | #define GEN6_RP_DOWN_THRESHOLD 0xA030 |
3299 | #define GEN6_RP_CUR_UP_EI 0xA050 | ||
3300 | #define GEN6_CURICONT_MASK 0xffffff | ||
3301 | #define GEN6_RP_CUR_UP 0xA054 | ||
3302 | #define GEN6_CURBSYTAVG_MASK 0xffffff | ||
3303 | #define GEN6_RP_PREV_UP 0xA058 | ||
3304 | #define GEN6_RP_CUR_DOWN_EI 0xA05C | ||
3305 | #define GEN6_CURIAVG_MASK 0xffffff | ||
3306 | #define GEN6_RP_CUR_DOWN 0xA060 | ||
3307 | #define GEN6_RP_PREV_DOWN 0xA064 | ||
3295 | #define GEN6_RP_UP_EI 0xA068 | 3308 | #define GEN6_RP_UP_EI 0xA068 |
3296 | #define GEN6_RP_DOWN_EI 0xA06C | 3309 | #define GEN6_RP_DOWN_EI 0xA06C |
3297 | #define GEN6_RP_IDLE_HYSTERSIS 0xA070 | 3310 | #define GEN6_RP_IDLE_HYSTERSIS 0xA070 |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index cb9d547aa42b..a90d65dad811 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -6630,18 +6630,18 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv) | |||
6630 | I915_WRITE(GEN6_RP_INTERRUPT_LIMITS, | 6630 | I915_WRITE(GEN6_RP_INTERRUPT_LIMITS, |
6631 | 18 << 24 | | 6631 | 18 << 24 | |
6632 | 6 << 16); | 6632 | 6 << 16); |
6633 | I915_WRITE(GEN6_RP_UP_THRESHOLD, 90000); | 6633 | I915_WRITE(GEN6_RP_UP_THRESHOLD, 10000); |
6634 | I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 100000); | 6634 | I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 1000000); |
6635 | I915_WRITE(GEN6_RP_UP_EI, 100000); | 6635 | I915_WRITE(GEN6_RP_UP_EI, 100000); |
6636 | I915_WRITE(GEN6_RP_DOWN_EI, 300000); | 6636 | I915_WRITE(GEN6_RP_DOWN_EI, 5000000); |
6637 | I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10); | 6637 | I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10); |
6638 | I915_WRITE(GEN6_RP_CONTROL, | 6638 | I915_WRITE(GEN6_RP_CONTROL, |
6639 | GEN6_RP_MEDIA_TURBO | | 6639 | GEN6_RP_MEDIA_TURBO | |
6640 | GEN6_RP_USE_NORMAL_FREQ | | 6640 | GEN6_RP_USE_NORMAL_FREQ | |
6641 | GEN6_RP_MEDIA_IS_GFX | | 6641 | GEN6_RP_MEDIA_IS_GFX | |
6642 | GEN6_RP_ENABLE | | 6642 | GEN6_RP_ENABLE | |
6643 | GEN6_RP_UP_BUSY_MAX | | 6643 | GEN6_RP_UP_BUSY_AVG | |
6644 | GEN6_RP_DOWN_BUSY_MIN); | 6644 | GEN6_RP_DOWN_IDLE_CONT); |
6645 | 6645 | ||
6646 | if (wait_for((I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0, | 6646 | if (wait_for((I915_READ(GEN6_PCODE_MAILBOX) & GEN6_PCODE_READY) == 0, |
6647 | 500)) | 6647 | 500)) |