diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 132 |
1 files changed, 2 insertions, 130 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 089b1df5448b..9187a1736b01 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -3779,125 +3779,6 @@ static void intel_gpu_idle_timer(unsigned long arg) | |||
| 3779 | queue_work(dev_priv->wq, &dev_priv->idle_work); | 3779 | queue_work(dev_priv->wq, &dev_priv->idle_work); |
| 3780 | } | 3780 | } |
| 3781 | 3781 | ||
| 3782 | void intel_increase_renderclock(struct drm_device *dev, bool schedule) | ||
| 3783 | { | ||
| 3784 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
| 3785 | |||
| 3786 | if (IS_IRONLAKE(dev)) | ||
| 3787 | return; | ||
| 3788 | |||
| 3789 | if (!dev_priv->render_reclock_avail) { | ||
| 3790 | DRM_DEBUG_DRIVER("not reclocking render clock\n"); | ||
| 3791 | return; | ||
| 3792 | } | ||
| 3793 | |||
| 3794 | /* Restore render clock frequency to original value */ | ||
| 3795 | if (IS_G4X(dev) || IS_I9XX(dev)) | ||
| 3796 | pci_write_config_word(dev->pdev, GCFGC, dev_priv->orig_clock); | ||
| 3797 | else if (IS_I85X(dev)) | ||
| 3798 | pci_write_config_word(dev->pdev, HPLLCC, dev_priv->orig_clock); | ||
| 3799 | DRM_DEBUG_DRIVER("increasing render clock frequency\n"); | ||
| 3800 | |||
| 3801 | /* Schedule downclock */ | ||
| 3802 | if (schedule) | ||
| 3803 | mod_timer(&dev_priv->idle_timer, jiffies + | ||
| 3804 | msecs_to_jiffies(GPU_IDLE_TIMEOUT)); | ||
| 3805 | } | ||
| 3806 | |||
| 3807 | void intel_decrease_renderclock(struct drm_device *dev) | ||
| 3808 | { | ||
| 3809 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
| 3810 | |||
| 3811 | if (IS_IRONLAKE(dev)) | ||
| 3812 | return; | ||
| 3813 | |||
| 3814 | if (!dev_priv->render_reclock_avail) { | ||
| 3815 | DRM_DEBUG_DRIVER("not reclocking render clock\n"); | ||
| 3816 | return; | ||
| 3817 | } | ||
| 3818 | |||
| 3819 | if (IS_G4X(dev)) { | ||
| 3820 | u16 gcfgc; | ||
| 3821 | |||
| 3822 | /* Adjust render clock... */ | ||
| 3823 | pci_read_config_word(dev->pdev, GCFGC, &gcfgc); | ||
| 3824 | |||
| 3825 | /* Down to minimum... */ | ||
| 3826 | gcfgc &= ~GM45_GC_RENDER_CLOCK_MASK; | ||
| 3827 | gcfgc |= GM45_GC_RENDER_CLOCK_266_MHZ; | ||
| 3828 | |||
| 3829 | pci_write_config_word(dev->pdev, GCFGC, gcfgc); | ||
| 3830 | } else if (IS_I965G(dev)) { | ||
| 3831 | u16 gcfgc; | ||
| 3832 | |||
| 3833 | /* Adjust render clock... */ | ||
| 3834 | pci_read_config_word(dev->pdev, GCFGC, &gcfgc); | ||
| 3835 | |||
| 3836 | /* Down to minimum... */ | ||
| 3837 | gcfgc &= ~I965_GC_RENDER_CLOCK_MASK; | ||
| 3838 | gcfgc |= I965_GC_RENDER_CLOCK_267_MHZ; | ||
| 3839 | |||
| 3840 | pci_write_config_word(dev->pdev, GCFGC, gcfgc); | ||
| 3841 | } else if (IS_I945G(dev) || IS_I945GM(dev)) { | ||
| 3842 | u16 gcfgc; | ||
| 3843 | |||
| 3844 | /* Adjust render clock... */ | ||
| 3845 | pci_read_config_word(dev->pdev, GCFGC, &gcfgc); | ||
| 3846 | |||
| 3847 | /* Down to minimum... */ | ||
| 3848 | gcfgc &= ~I945_GC_RENDER_CLOCK_MASK; | ||
| 3849 | gcfgc |= I945_GC_RENDER_CLOCK_166_MHZ; | ||
| 3850 | |||
| 3851 | pci_write_config_word(dev->pdev, GCFGC, gcfgc); | ||
| 3852 | } else if (IS_I915G(dev)) { | ||
| 3853 | u16 gcfgc; | ||
| 3854 | |||
| 3855 | /* Adjust render clock... */ | ||
| 3856 | pci_read_config_word(dev->pdev, GCFGC, &gcfgc); | ||
| 3857 | |||
| 3858 | /* Down to minimum... */ | ||
| 3859 | gcfgc &= ~I915_GC_RENDER_CLOCK_MASK; | ||
| 3860 | gcfgc |= I915_GC_RENDER_CLOCK_166_MHZ; | ||
| 3861 | |||
| 3862 | pci_write_config_word(dev->pdev, GCFGC, gcfgc); | ||
| 3863 | } else if (IS_I85X(dev)) { | ||
| 3864 | u16 hpllcc; | ||
| 3865 | |||
| 3866 | /* Adjust render clock... */ | ||
| 3867 | pci_read_config_word(dev->pdev, HPLLCC, &hpllcc); | ||
| 3868 | |||
| 3869 | /* Up to maximum... */ | ||
| 3870 | hpllcc &= ~GC_CLOCK_CONTROL_MASK; | ||
| 3871 | hpllcc |= GC_CLOCK_133_200; | ||
| 3872 | |||
| 3873 | pci_write_config_word(dev->pdev, HPLLCC, hpllcc); | ||
| 3874 | } | ||
| 3875 | DRM_DEBUG_DRIVER("decreasing render clock frequency\n"); | ||
| 3876 | } | ||
| 3877 | |||
| 3878 | /* Note that no increase function is needed for this - increase_renderclock() | ||
| 3879 | * will also rewrite these bits | ||
| 3880 | */ | ||
| 3881 | void intel_decrease_displayclock(struct drm_device *dev) | ||
| 3882 | { | ||
| 3883 | if (IS_IRONLAKE(dev)) | ||
| 3884 | return; | ||
| 3885 | |||
| 3886 | if (IS_I945G(dev) || IS_I945GM(dev) || IS_I915G(dev) || | ||
| 3887 | IS_I915GM(dev)) { | ||
| 3888 | u16 gcfgc; | ||
| 3889 | |||
| 3890 | /* Adjust render clock... */ | ||
| 3891 | pci_read_config_word(dev->pdev, GCFGC, &gcfgc); | ||
| 3892 | |||
| 3893 | /* Down to minimum... */ | ||
| 3894 | gcfgc &= ~0xf0; | ||
| 3895 | gcfgc |= 0x80; | ||
| 3896 | |||
| 3897 | pci_write_config_word(dev->pdev, GCFGC, gcfgc); | ||
| 3898 | } | ||
| 3899 | } | ||
| 3900 | |||
| 3901 | #define CRTC_IDLE_TIMEOUT 1000 /* ms */ | 3782 | #define CRTC_IDLE_TIMEOUT 1000 /* ms */ |
| 3902 | 3783 | ||
| 3903 | static void intel_crtc_idle_timer(unsigned long arg) | 3784 | static void intel_crtc_idle_timer(unsigned long arg) |
| @@ -4011,12 +3892,6 @@ static void intel_idle_update(struct work_struct *work) | |||
| 4011 | 3892 | ||
| 4012 | mutex_lock(&dev->struct_mutex); | 3893 | mutex_lock(&dev->struct_mutex); |
| 4013 | 3894 | ||
| 4014 | /* GPU isn't processing, downclock it. */ | ||
| 4015 | if (!dev_priv->busy) { | ||
| 4016 | intel_decrease_renderclock(dev); | ||
| 4017 | intel_decrease_displayclock(dev); | ||
| 4018 | } | ||
| 4019 | |||
| 4020 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { | 3895 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { |
| 4021 | /* Skip inactive CRTCs */ | 3896 | /* Skip inactive CRTCs */ |
| 4022 | if (!crtc->fb) | 3897 | if (!crtc->fb) |
| @@ -4050,13 +3925,11 @@ void intel_mark_busy(struct drm_device *dev, struct drm_gem_object *obj) | |||
| 4050 | if (!drm_core_check_feature(dev, DRIVER_MODESET)) | 3925 | if (!drm_core_check_feature(dev, DRIVER_MODESET)) |
| 4051 | return; | 3926 | return; |
| 4052 | 3927 | ||
| 4053 | if (!dev_priv->busy) { | 3928 | if (!dev_priv->busy) |
| 4054 | dev_priv->busy = true; | 3929 | dev_priv->busy = true; |
| 4055 | intel_increase_renderclock(dev, true); | 3930 | else |
| 4056 | } else { | ||
| 4057 | mod_timer(&dev_priv->idle_timer, jiffies + | 3931 | mod_timer(&dev_priv->idle_timer, jiffies + |
| 4058 | msecs_to_jiffies(GPU_IDLE_TIMEOUT)); | 3932 | msecs_to_jiffies(GPU_IDLE_TIMEOUT)); |
| 4059 | } | ||
| 4060 | 3933 | ||
| 4061 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { | 3934 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { |
| 4062 | if (!crtc->fb) | 3935 | if (!crtc->fb) |
| @@ -4784,7 +4657,6 @@ void intel_modeset_cleanup(struct drm_device *dev) | |||
| 4784 | del_timer_sync(&intel_crtc->idle_timer); | 4657 | del_timer_sync(&intel_crtc->idle_timer); |
| 4785 | } | 4658 | } |
| 4786 | 4659 | ||
| 4787 | intel_increase_renderclock(dev, false); | ||
| 4788 | del_timer_sync(&dev_priv->idle_timer); | 4660 | del_timer_sync(&dev_priv->idle_timer); |
| 4789 | 4661 | ||
| 4790 | if (dev_priv->display.disable_fbc) | 4662 | if (dev_priv->display.disable_fbc) |
