aboutsummaryrefslogtreecommitdiffstats
path: root/meta-steppeeagle/recipes-kernel/linux/linux-yocto/0032-yocto-amd-drm-radeon-dpm-fill-in-some-initial-vce-infrastructu.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-steppeeagle/recipes-kernel/linux/linux-yocto/0032-yocto-amd-drm-radeon-dpm-fill-in-some-initial-vce-infrastructu.patch')
-rw-r--r--meta-steppeeagle/recipes-kernel/linux/linux-yocto/0032-yocto-amd-drm-radeon-dpm-fill-in-some-initial-vce-infrastructu.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/meta-steppeeagle/recipes-kernel/linux/linux-yocto/0032-yocto-amd-drm-radeon-dpm-fill-in-some-initial-vce-infrastructu.patch b/meta-steppeeagle/recipes-kernel/linux/linux-yocto/0032-yocto-amd-drm-radeon-dpm-fill-in-some-initial-vce-infrastructu.patch
new file mode 100644
index 00000000..00f558dc
--- /dev/null
+++ b/meta-steppeeagle/recipes-kernel/linux/linux-yocto/0032-yocto-amd-drm-radeon-dpm-fill-in-some-initial-vce-infrastructu.patch
@@ -0,0 +1,84 @@
+From e539bcfbb6e46e51b7a463078e3bf3a7ae4c28d7 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 20 Aug 2013 20:29:05 -0400
+Subject: [PATCH 32/44] drm/radeon/dpm: fill in some initial vce
+ infrastructure
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/radeon/radeon.h | 12 ++++++++++++
+ drivers/gpu/drm/radeon/radeon_pm.c | 7 +++++++
+ 2 files changed, 19 insertions(+)
+
+diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
+index f0ad724..7846289 100644
+--- a/drivers/gpu/drm/radeon/radeon.h
++++ b/drivers/gpu/drm/radeon/radeon.h
+@@ -1253,6 +1253,15 @@ enum radeon_dpm_event_src {
+ RADEON_DPM_EVENT_SRC_DIGIAL_OR_EXTERNAL = 4
+ };
+
++enum radeon_vce_level {
++ RADEON_VCE_LEVEL_AC_ALL = 0, /* AC, All cases */
++ RADEON_VCE_LEVEL_DC_EE = 1, /* DC, entropy encoding */
++ RADEON_VCE_LEVEL_DC_LL_LOW = 2, /* DC, low latency queue, res <= 720 */
++ RADEON_VCE_LEVEL_DC_LL_HIGH = 3, /* DC, low latency queue, 1080 >= res > 720 */
++ RADEON_VCE_LEVEL_DC_GP_LOW = 4, /* DC, general purpose queue, res <= 720 */
++ RADEON_VCE_LEVEL_DC_GP_HIGH = 5, /* DC, general purpose queue, 1080 >= res > 720 */
++};
++
+ struct radeon_ps {
+ u32 caps; /* vbios flags */
+ u32 class; /* vbios flags */
+@@ -1263,6 +1272,8 @@ struct radeon_ps {
+ /* VCE clocks */
+ u32 evclk;
+ u32 ecclk;
++ bool vce_active;
++ enum radeon_vce_level vce_level;
+ /* asic priv */
+ void *ps_priv;
+ };
+@@ -1474,6 +1485,7 @@ struct radeon_dpm {
+ /* special states active */
+ bool thermal_active;
+ bool uvd_active;
++ bool vce_active;
+ /* thermal handling */
+ struct radeon_dpm_thermal thermal;
+ /* forced levels */
+diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
+index 5febb25..366bf38 100644
+--- a/drivers/gpu/drm/radeon/radeon_pm.c
++++ b/drivers/gpu/drm/radeon/radeon_pm.c
+@@ -845,6 +845,9 @@ static void radeon_dpm_change_power_state_locked(struct radeon_device *rdev)
+
+ /* no need to reprogram if nothing changed unless we are on BTC+ */
+ if (rdev->pm.dpm.current_ps == rdev->pm.dpm.requested_ps) {
++ /* vce just modifies an existing state so force a change */
++ if (ps->vce_active != rdev->pm.dpm.vce_active)
++ goto force;
+ if ((rdev->family < CHIP_BARTS) || (rdev->flags & RADEON_IS_IGP)) {
+ /* for pre-BTC and APUs if the num crtcs changed but state is the same,
+ * all we need to do is update the display configuration.
+@@ -881,6 +884,7 @@ static void radeon_dpm_change_power_state_locked(struct radeon_device *rdev)
+ }
+ }
+
++force:
+ printk("switching from power state:\n");
+ radeon_dpm_print_power_state(rdev, rdev->pm.dpm.current_ps);
+ printk("switching to power state:\n");
+@@ -890,6 +894,9 @@ static void radeon_dpm_change_power_state_locked(struct radeon_device *rdev)
+ down_write(&rdev->pm.mclk_lock);
+ mutex_lock(&rdev->ring_lock);
+
++ /* update whether vce is active */
++ ps->vce_active = rdev->pm.dpm.vce_active;
++
+ ret = radeon_dpm_pre_set_power_state(rdev);
+ if (ret)
+ goto done;
+--
+1.7.9.5
+