aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-amd/0031-drm-radeon-dpm-move-platform-caps-fetching-to-a-sepa.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-amd/0031-drm-radeon-dpm-move-platform-caps-fetching-to-a-sepa.patch')
-rw-r--r--common/recipes-kernel/linux/linux-amd/0031-drm-radeon-dpm-move-platform-caps-fetching-to-a-sepa.patch330
1 files changed, 330 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-amd/0031-drm-radeon-dpm-move-platform-caps-fetching-to-a-sepa.patch b/common/recipes-kernel/linux/linux-amd/0031-drm-radeon-dpm-move-platform-caps-fetching-to-a-sepa.patch
new file mode 100644
index 00000000..248ddcd5
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-amd/0031-drm-radeon-dpm-move-platform-caps-fetching-to-a-sepa.patch
@@ -0,0 +1,330 @@
+From dd43f0af944746140ad17efe0c53295b1457da50 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 21 Aug 2013 10:02:32 -0400
+Subject: [PATCH 31/60] drm/radeon/dpm: move platform caps fetching to a
+ separate function
+
+It's needed by by both the asic specific functions and the
+extended table parser.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/radeon/btc_dpm.c | 4 ++++
+ drivers/gpu/drm/radeon/ci_dpm.c | 9 ++++++---
+ drivers/gpu/drm/radeon/cypress_dpm.c | 4 ++++
+ drivers/gpu/drm/radeon/kv_dpm.c | 7 ++++---
+ drivers/gpu/drm/radeon/ni_dpm.c | 7 ++++---
+ drivers/gpu/drm/radeon/r600_dpm.c | 20 ++++++++++++++++++++
+ drivers/gpu/drm/radeon/r600_dpm.h | 2 ++
+ drivers/gpu/drm/radeon/rs780_dpm.c | 7 ++++---
+ drivers/gpu/drm/radeon/rv6xx_dpm.c | 7 ++++---
+ drivers/gpu/drm/radeon/rv770_dpm.c | 7 ++++---
+ drivers/gpu/drm/radeon/si_dpm.c | 7 ++++---
+ drivers/gpu/drm/radeon/sumo_dpm.c | 7 ++++---
+ drivers/gpu/drm/radeon/trinity_dpm.c | 7 ++++---
+ 13 files changed, 68 insertions(+), 27 deletions(-)
+
+diff --git a/drivers/gpu/drm/radeon/btc_dpm.c b/drivers/gpu/drm/radeon/btc_dpm.c
+index 9b6950d..e910299 100644
+--- a/drivers/gpu/drm/radeon/btc_dpm.c
++++ b/drivers/gpu/drm/radeon/btc_dpm.c
+@@ -2610,6 +2610,10 @@ int btc_dpm_init(struct radeon_device *rdev)
+ pi->min_vddc_in_table = 0;
+ pi->max_vddc_in_table = 0;
+
++ ret = r600_get_platform_caps(rdev);
++ if (ret)
++ return ret;
++
+ ret = rv7xx_parse_power_table(rdev);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/radeon/ci_dpm.c b/drivers/gpu/drm/radeon/ci_dpm.c
+index 95f4ab9..56a517b 100644
+--- a/drivers/gpu/drm/radeon/ci_dpm.c
++++ b/drivers/gpu/drm/radeon/ci_dpm.c
+@@ -4954,9 +4954,6 @@ static int ci_parse_power_table(struct radeon_device *rdev)
+ if (!rdev->pm.dpm.ps)
+ return -ENOMEM;
+ power_state_offset = (u8 *)state_array->states;
+- rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
+- rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
+- rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
+ for (i = 0; i < state_array->ucNumEntries; i++) {
+ u8 *idx;
+ power_state = (union pplib_power_state *)power_state_offset;
+@@ -5072,6 +5069,12 @@ int ci_dpm_init(struct radeon_device *rdev)
+ ci_dpm_fini(rdev);
+ return ret;
+ }
++
++ ret = r600_get_platform_caps(rdev);
++ if (ret) {
++ ci_dpm_fini(rdev);
++ return ret;
++ }
+ ret = ci_parse_power_table(rdev);
+ if (ret) {
+ ci_dpm_fini(rdev);
+diff --git a/drivers/gpu/drm/radeon/cypress_dpm.c b/drivers/gpu/drm/radeon/cypress_dpm.c
+index 7143783..1935c4c 100644
+--- a/drivers/gpu/drm/radeon/cypress_dpm.c
++++ b/drivers/gpu/drm/radeon/cypress_dpm.c
+@@ -2049,6 +2049,10 @@ int cypress_dpm_init(struct radeon_device *rdev)
+ pi->min_vddc_in_table = 0;
+ pi->max_vddc_in_table = 0;
+
++ ret = r600_get_platform_caps(rdev);
++ if (ret)
++ return ret;
++
+ ret = rv7xx_parse_power_table(rdev);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/radeon/kv_dpm.c b/drivers/gpu/drm/radeon/kv_dpm.c
+index b419055..58b5a5d 100644
+--- a/drivers/gpu/drm/radeon/kv_dpm.c
++++ b/drivers/gpu/drm/radeon/kv_dpm.c
+@@ -2556,9 +2556,6 @@ static int kv_parse_power_table(struct radeon_device *rdev)
+ if (!rdev->pm.dpm.ps)
+ return -ENOMEM;
+ power_state_offset = (u8 *)state_array->states;
+- rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
+- rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
+- rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
+ for (i = 0; i < state_array->ucNumEntries; i++) {
+ u8 *idx;
+ power_state = (union pplib_power_state *)power_state_offset;
+@@ -2608,6 +2605,10 @@ int kv_dpm_init(struct radeon_device *rdev)
+ return -ENOMEM;
+ rdev->pm.dpm.priv = pi;
+
++ ret = r600_get_platform_caps(rdev);
++ if (ret)
++ return ret;
++
+ ret = r600_parse_extended_power_table(rdev);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/radeon/ni_dpm.c b/drivers/gpu/drm/radeon/ni_dpm.c
+index 85f36e7..70045d1 100644
+--- a/drivers/gpu/drm/radeon/ni_dpm.c
++++ b/drivers/gpu/drm/radeon/ni_dpm.c
+@@ -4041,9 +4041,6 @@ static int ni_parse_power_table(struct radeon_device *rdev)
+ power_info->pplib.ucNumStates, GFP_KERNEL);
+ if (!rdev->pm.dpm.ps)
+ return -ENOMEM;
+- rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
+- rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
+- rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
+
+ for (i = 0; i < power_info->pplib.ucNumStates; i++) {
+ power_state = (union pplib_power_state *)
+@@ -4105,6 +4102,10 @@ int ni_dpm_init(struct radeon_device *rdev)
+ pi->min_vddc_in_table = 0;
+ pi->max_vddc_in_table = 0;
+
++ ret = r600_get_platform_caps(rdev);
++ if (ret)
++ return ret;
++
+ ret = ni_parse_power_table(rdev);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/radeon/r600_dpm.c b/drivers/gpu/drm/radeon/r600_dpm.c
+index 2df683a..63c5be0 100644
+--- a/drivers/gpu/drm/radeon/r600_dpm.c
++++ b/drivers/gpu/drm/radeon/r600_dpm.c
+@@ -821,6 +821,26 @@ static int r600_parse_clk_voltage_dep_table(struct radeon_clock_voltage_dependen
+ return 0;
+ }
+
++int r600_get_platform_caps(struct radeon_device *rdev)
++{
++ struct radeon_mode_info *mode_info = &rdev->mode_info;
++ union power_info *power_info;
++ int index = GetIndexIntoMasterTable(DATA, PowerPlayInfo);
++ u16 data_offset;
++ u8 frev, crev;
++
++ if (!atom_parse_data_header(mode_info->atom_context, index, NULL,
++ &frev, &crev, &data_offset))
++ return -EINVAL;
++ power_info = (union power_info *)(mode_info->atom_context->bios + data_offset);
++
++ rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
++ rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
++ rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
++
++ return 0;
++}
++
+ /* sizeof(ATOM_PPLIB_EXTENDEDHEADER) */
+ #define SIZE_OF_ATOM_PPLIB_EXTENDEDHEADER_V2 12
+ #define SIZE_OF_ATOM_PPLIB_EXTENDEDHEADER_V3 14
+diff --git a/drivers/gpu/drm/radeon/r600_dpm.h b/drivers/gpu/drm/radeon/r600_dpm.h
+index 1000bf9..7e5d2c2 100644
+--- a/drivers/gpu/drm/radeon/r600_dpm.h
++++ b/drivers/gpu/drm/radeon/r600_dpm.h
+@@ -217,6 +217,8 @@ int r600_set_thermal_temperature_range(struct radeon_device *rdev,
+ int min_temp, int max_temp);
+ bool r600_is_internal_thermal_sensor(enum radeon_int_thermal_type sensor);
+
++int r600_get_platform_caps(struct radeon_device *rdev);
++
+ int r600_parse_extended_power_table(struct radeon_device *rdev);
+ void r600_free_extended_power_table(struct radeon_device *rdev);
+
+diff --git a/drivers/gpu/drm/radeon/rs780_dpm.c b/drivers/gpu/drm/radeon/rs780_dpm.c
+index 6af8505..f3143c0 100644
+--- a/drivers/gpu/drm/radeon/rs780_dpm.c
++++ b/drivers/gpu/drm/radeon/rs780_dpm.c
+@@ -815,9 +815,6 @@ static int rs780_parse_power_table(struct radeon_device *rdev)
+ power_info->pplib.ucNumStates, GFP_KERNEL);
+ if (!rdev->pm.dpm.ps)
+ return -ENOMEM;
+- rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
+- rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
+- rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
+
+ for (i = 0; i < power_info->pplib.ucNumStates; i++) {
+ power_state = (union pplib_power_state *)
+@@ -867,6 +864,10 @@ int rs780_dpm_init(struct radeon_device *rdev)
+ return -ENOMEM;
+ rdev->pm.dpm.priv = pi;
+
++ ret = r600_get_platform_caps(rdev);
++ if (ret)
++ return ret;
++
+ ret = rs780_parse_power_table(rdev);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/radeon/rv6xx_dpm.c b/drivers/gpu/drm/radeon/rv6xx_dpm.c
+index 5811d27..3aa0a8c 100644
+--- a/drivers/gpu/drm/radeon/rv6xx_dpm.c
++++ b/drivers/gpu/drm/radeon/rv6xx_dpm.c
+@@ -1901,9 +1901,6 @@ static int rv6xx_parse_power_table(struct radeon_device *rdev)
+ power_info->pplib.ucNumStates, GFP_KERNEL);
+ if (!rdev->pm.dpm.ps)
+ return -ENOMEM;
+- rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
+- rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
+- rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
+
+ for (i = 0; i < power_info->pplib.ucNumStates; i++) {
+ power_state = (union pplib_power_state *)
+@@ -1953,6 +1950,10 @@ int rv6xx_dpm_init(struct radeon_device *rdev)
+ return -ENOMEM;
+ rdev->pm.dpm.priv = pi;
+
++ ret = r600_get_platform_caps(rdev);
++ if (ret)
++ return ret;
++
+ ret = rv6xx_parse_power_table(rdev);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/radeon/rv770_dpm.c b/drivers/gpu/drm/radeon/rv770_dpm.c
+index 890cf17..f67a1b5 100644
+--- a/drivers/gpu/drm/radeon/rv770_dpm.c
++++ b/drivers/gpu/drm/radeon/rv770_dpm.c
+@@ -2277,9 +2277,6 @@ int rv7xx_parse_power_table(struct radeon_device *rdev)
+ power_info->pplib.ucNumStates, GFP_KERNEL);
+ if (!rdev->pm.dpm.ps)
+ return -ENOMEM;
+- rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
+- rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
+- rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
+
+ for (i = 0; i < power_info->pplib.ucNumStates; i++) {
+ power_state = (union pplib_power_state *)
+@@ -2351,6 +2348,10 @@ int rv770_dpm_init(struct radeon_device *rdev)
+ pi->min_vddc_in_table = 0;
+ pi->max_vddc_in_table = 0;
+
++ ret = r600_get_platform_caps(rdev);
++ if (ret)
++ return ret;
++
+ ret = rv7xx_parse_power_table(rdev);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
+index f5cdc86..ce4463f 100644
+--- a/drivers/gpu/drm/radeon/si_dpm.c
++++ b/drivers/gpu/drm/radeon/si_dpm.c
+@@ -6291,9 +6291,6 @@ static int si_parse_power_table(struct radeon_device *rdev)
+ if (!rdev->pm.dpm.ps)
+ return -ENOMEM;
+ power_state_offset = (u8 *)state_array->states;
+- rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
+- rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
+- rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
+ for (i = 0; i < state_array->ucNumEntries; i++) {
+ u8 *idx;
+ power_state = (union pplib_power_state *)power_state_offset;
+@@ -6370,6 +6367,10 @@ int si_dpm_init(struct radeon_device *rdev)
+ pi->min_vddc_in_table = 0;
+ pi->max_vddc_in_table = 0;
+
++ ret = r600_get_platform_caps(rdev);
++ if (ret)
++ return ret;
++
+ ret = si_parse_power_table(rdev);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/radeon/sumo_dpm.c b/drivers/gpu/drm/radeon/sumo_dpm.c
+index 96ea6db8..485d006 100644
+--- a/drivers/gpu/drm/radeon/sumo_dpm.c
++++ b/drivers/gpu/drm/radeon/sumo_dpm.c
+@@ -1477,9 +1477,6 @@ static int sumo_parse_power_table(struct radeon_device *rdev)
+ if (!rdev->pm.dpm.ps)
+ return -ENOMEM;
+ power_state_offset = (u8 *)state_array->states;
+- rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
+- rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
+- rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
+ for (i = 0; i < state_array->ucNumEntries; i++) {
+ u8 *idx;
+ power_state = (union pplib_power_state *)power_state_offset;
+@@ -1765,6 +1762,10 @@ int sumo_dpm_init(struct radeon_device *rdev)
+
+ sumo_construct_boot_and_acpi_state(rdev);
+
++ ret = r600_get_platform_caps(rdev);
++ if (ret)
++ return ret;
++
+ ret = sumo_parse_power_table(rdev);
+ if (ret)
+ return ret;
+diff --git a/drivers/gpu/drm/radeon/trinity_dpm.c b/drivers/gpu/drm/radeon/trinity_dpm.c
+index bf980ea..b4dd29b 100644
+--- a/drivers/gpu/drm/radeon/trinity_dpm.c
++++ b/drivers/gpu/drm/radeon/trinity_dpm.c
+@@ -1685,9 +1685,6 @@ static int trinity_parse_power_table(struct radeon_device *rdev)
+ if (!rdev->pm.dpm.ps)
+ return -ENOMEM;
+ power_state_offset = (u8 *)state_array->states;
+- rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
+- rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
+- rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
+ for (i = 0; i < state_array->ucNumEntries; i++) {
+ u8 *idx;
+ power_state = (union pplib_power_state *)power_state_offset;
+@@ -1895,6 +1892,10 @@ int trinity_dpm_init(struct radeon_device *rdev)
+
+ trinity_construct_boot_state(rdev);
+
++ ret = r600_get_platform_caps(rdev);
++ if (ret)
++ return ret;
++
+ ret = trinity_parse_power_table(rdev);
+ if (ret)
+ return ret;
+--
+1.9.1
+