aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-08-21 10:02:32 -0400
committerChristian König <christian.koenig@amd.com>2014-02-18 10:11:30 -0500
commit82f79cc54b6a67c0b17aff4fb5ed43155ff3f0ea (patch)
tree6e986d77466b1f668cc47ea1f08c2868cedd4fab /drivers/gpu/drm/radeon
parentb59b733397cac70be5b04c60e8810077ac6ca48d (diff)
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>
Diffstat (limited to 'drivers/gpu/drm/radeon')
-rw-r--r--drivers/gpu/drm/radeon/btc_dpm.c4
-rw-r--r--drivers/gpu/drm/radeon/ci_dpm.c9
-rw-r--r--drivers/gpu/drm/radeon/cypress_dpm.c4
-rw-r--r--drivers/gpu/drm/radeon/kv_dpm.c7
-rw-r--r--drivers/gpu/drm/radeon/ni_dpm.c7
-rw-r--r--drivers/gpu/drm/radeon/r600_dpm.c20
-rw-r--r--drivers/gpu/drm/radeon/r600_dpm.h2
-rw-r--r--drivers/gpu/drm/radeon/rs780_dpm.c7
-rw-r--r--drivers/gpu/drm/radeon/rv6xx_dpm.c7
-rw-r--r--drivers/gpu/drm/radeon/rv770_dpm.c7
-rw-r--r--drivers/gpu/drm/radeon/si_dpm.c7
-rw-r--r--drivers/gpu/drm/radeon/sumo_dpm.c7
-rw-r--r--drivers/gpu/drm/radeon/trinity_dpm.c7
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 ea103ccdf4bd..f81d7ca134db 100644
--- a/drivers/gpu/drm/radeon/btc_dpm.c
+++ b/drivers/gpu/drm/radeon/btc_dpm.c
@@ -2601,6 +2601,10 @@ int btc_dpm_init(struct radeon_device *rdev)
2601 pi->min_vddc_in_table = 0; 2601 pi->min_vddc_in_table = 0;
2602 pi->max_vddc_in_table = 0; 2602 pi->max_vddc_in_table = 0;
2603 2603
2604 ret = r600_get_platform_caps(rdev);
2605 if (ret)
2606 return ret;
2607
2604 ret = rv7xx_parse_power_table(rdev); 2608 ret = rv7xx_parse_power_table(rdev);
2605 if (ret) 2609 if (ret)
2606 return ret; 2610 return ret;
diff --git a/drivers/gpu/drm/radeon/ci_dpm.c b/drivers/gpu/drm/radeon/ci_dpm.c
index 8d49104ca6c2..4a0c40186046 100644
--- a/drivers/gpu/drm/radeon/ci_dpm.c
+++ b/drivers/gpu/drm/radeon/ci_dpm.c
@@ -4959,9 +4959,6 @@ static int ci_parse_power_table(struct radeon_device *rdev)
4959 if (!rdev->pm.dpm.ps) 4959 if (!rdev->pm.dpm.ps)
4960 return -ENOMEM; 4960 return -ENOMEM;
4961 power_state_offset = (u8 *)state_array->states; 4961 power_state_offset = (u8 *)state_array->states;
4962 rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
4963 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
4964 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
4965 for (i = 0; i < state_array->ucNumEntries; i++) { 4962 for (i = 0; i < state_array->ucNumEntries; i++) {
4966 u8 *idx; 4963 u8 *idx;
4967 power_state = (union pplib_power_state *)power_state_offset; 4964 power_state = (union pplib_power_state *)power_state_offset;
@@ -5077,6 +5074,12 @@ int ci_dpm_init(struct radeon_device *rdev)
5077 ci_dpm_fini(rdev); 5074 ci_dpm_fini(rdev);
5078 return ret; 5075 return ret;
5079 } 5076 }
5077
5078 ret = r600_get_platform_caps(rdev);
5079 if (ret) {
5080 ci_dpm_fini(rdev);
5081 return ret;
5082 }
5080 ret = ci_parse_power_table(rdev); 5083 ret = ci_parse_power_table(rdev);
5081 if (ret) { 5084 if (ret) {
5082 ci_dpm_fini(rdev); 5085 ci_dpm_fini(rdev);
diff --git a/drivers/gpu/drm/radeon/cypress_dpm.c b/drivers/gpu/drm/radeon/cypress_dpm.c
index cf783fc0ef21..5a9a5f4d7888 100644
--- a/drivers/gpu/drm/radeon/cypress_dpm.c
+++ b/drivers/gpu/drm/radeon/cypress_dpm.c
@@ -2036,6 +2036,10 @@ int cypress_dpm_init(struct radeon_device *rdev)
2036 pi->min_vddc_in_table = 0; 2036 pi->min_vddc_in_table = 0;
2037 pi->max_vddc_in_table = 0; 2037 pi->max_vddc_in_table = 0;
2038 2038
2039 ret = r600_get_platform_caps(rdev);
2040 if (ret)
2041 return ret;
2042
2039 ret = rv7xx_parse_power_table(rdev); 2043 ret = rv7xx_parse_power_table(rdev);
2040 if (ret) 2044 if (ret)
2041 return ret; 2045 return ret;
diff --git a/drivers/gpu/drm/radeon/kv_dpm.c b/drivers/gpu/drm/radeon/kv_dpm.c
index 351db361239d..b5bb3a5654ce 100644
--- a/drivers/gpu/drm/radeon/kv_dpm.c
+++ b/drivers/gpu/drm/radeon/kv_dpm.c
@@ -2538,9 +2538,6 @@ static int kv_parse_power_table(struct radeon_device *rdev)
2538 if (!rdev->pm.dpm.ps) 2538 if (!rdev->pm.dpm.ps)
2539 return -ENOMEM; 2539 return -ENOMEM;
2540 power_state_offset = (u8 *)state_array->states; 2540 power_state_offset = (u8 *)state_array->states;
2541 rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
2542 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
2543 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
2544 for (i = 0; i < state_array->ucNumEntries; i++) { 2541 for (i = 0; i < state_array->ucNumEntries; i++) {
2545 u8 *idx; 2542 u8 *idx;
2546 power_state = (union pplib_power_state *)power_state_offset; 2543 power_state = (union pplib_power_state *)power_state_offset;
@@ -2590,6 +2587,10 @@ int kv_dpm_init(struct radeon_device *rdev)
2590 return -ENOMEM; 2587 return -ENOMEM;
2591 rdev->pm.dpm.priv = pi; 2588 rdev->pm.dpm.priv = pi;
2592 2589
2590 ret = r600_get_platform_caps(rdev);
2591 if (ret)
2592 return ret;
2593
2593 ret = r600_parse_extended_power_table(rdev); 2594 ret = r600_parse_extended_power_table(rdev);
2594 if (ret) 2595 if (ret)
2595 return ret; 2596 return ret;
diff --git a/drivers/gpu/drm/radeon/ni_dpm.c b/drivers/gpu/drm/radeon/ni_dpm.c
index 1217fbcbdcca..89fc5b976d9b 100644
--- a/drivers/gpu/drm/radeon/ni_dpm.c
+++ b/drivers/gpu/drm/radeon/ni_dpm.c
@@ -4025,9 +4025,6 @@ static int ni_parse_power_table(struct radeon_device *rdev)
4025 power_info->pplib.ucNumStates, GFP_KERNEL); 4025 power_info->pplib.ucNumStates, GFP_KERNEL);
4026 if (!rdev->pm.dpm.ps) 4026 if (!rdev->pm.dpm.ps)
4027 return -ENOMEM; 4027 return -ENOMEM;
4028 rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
4029 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
4030 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
4031 4028
4032 for (i = 0; i < power_info->pplib.ucNumStates; i++) { 4029 for (i = 0; i < power_info->pplib.ucNumStates; i++) {
4033 power_state = (union pplib_power_state *) 4030 power_state = (union pplib_power_state *)
@@ -4089,6 +4086,10 @@ int ni_dpm_init(struct radeon_device *rdev)
4089 pi->min_vddc_in_table = 0; 4086 pi->min_vddc_in_table = 0;
4090 pi->max_vddc_in_table = 0; 4087 pi->max_vddc_in_table = 0;
4091 4088
4089 ret = r600_get_platform_caps(rdev);
4090 if (ret)
4091 return ret;
4092
4092 ret = ni_parse_power_table(rdev); 4093 ret = ni_parse_power_table(rdev);
4093 if (ret) 4094 if (ret)
4094 return ret; 4095 return ret;
diff --git a/drivers/gpu/drm/radeon/r600_dpm.c b/drivers/gpu/drm/radeon/r600_dpm.c
index e4cc9b314ce9..e8b6e4ab312b 100644
--- a/drivers/gpu/drm/radeon/r600_dpm.c
+++ b/drivers/gpu/drm/radeon/r600_dpm.c
@@ -834,6 +834,26 @@ static int r600_parse_clk_voltage_dep_table(struct radeon_clock_voltage_dependen
834 return 0; 834 return 0;
835} 835}
836 836
837int r600_get_platform_caps(struct radeon_device *rdev)
838{
839 struct radeon_mode_info *mode_info = &rdev->mode_info;
840 union power_info *power_info;
841 int index = GetIndexIntoMasterTable(DATA, PowerPlayInfo);
842 u16 data_offset;
843 u8 frev, crev;
844
845 if (!atom_parse_data_header(mode_info->atom_context, index, NULL,
846 &frev, &crev, &data_offset))
847 return -EINVAL;
848 power_info = (union power_info *)(mode_info->atom_context->bios + data_offset);
849
850 rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
851 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
852 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
853
854 return 0;
855}
856
837/* sizeof(ATOM_PPLIB_EXTENDEDHEADER) */ 857/* sizeof(ATOM_PPLIB_EXTENDEDHEADER) */
838#define SIZE_OF_ATOM_PPLIB_EXTENDEDHEADER_V2 12 858#define SIZE_OF_ATOM_PPLIB_EXTENDEDHEADER_V2 12
839#define SIZE_OF_ATOM_PPLIB_EXTENDEDHEADER_V3 14 859#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 07eab2b04e81..46b9d2a03018 100644
--- a/drivers/gpu/drm/radeon/r600_dpm.h
+++ b/drivers/gpu/drm/radeon/r600_dpm.h
@@ -215,6 +215,8 @@ void r600_stop_dpm(struct radeon_device *rdev);
215 215
216bool r600_is_internal_thermal_sensor(enum radeon_int_thermal_type sensor); 216bool r600_is_internal_thermal_sensor(enum radeon_int_thermal_type sensor);
217 217
218int r600_get_platform_caps(struct radeon_device *rdev);
219
218int r600_parse_extended_power_table(struct radeon_device *rdev); 220int r600_parse_extended_power_table(struct radeon_device *rdev);
219void r600_free_extended_power_table(struct radeon_device *rdev); 221void r600_free_extended_power_table(struct radeon_device *rdev);
220 222
diff --git a/drivers/gpu/drm/radeon/rs780_dpm.c b/drivers/gpu/drm/radeon/rs780_dpm.c
index 8512085b0aef..02f7710de470 100644
--- a/drivers/gpu/drm/radeon/rs780_dpm.c
+++ b/drivers/gpu/drm/radeon/rs780_dpm.c
@@ -807,9 +807,6 @@ static int rs780_parse_power_table(struct radeon_device *rdev)
807 power_info->pplib.ucNumStates, GFP_KERNEL); 807 power_info->pplib.ucNumStates, GFP_KERNEL);
808 if (!rdev->pm.dpm.ps) 808 if (!rdev->pm.dpm.ps)
809 return -ENOMEM; 809 return -ENOMEM;
810 rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
811 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
812 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
813 810
814 for (i = 0; i < power_info->pplib.ucNumStates; i++) { 811 for (i = 0; i < power_info->pplib.ucNumStates; i++) {
815 power_state = (union pplib_power_state *) 812 power_state = (union pplib_power_state *)
@@ -859,6 +856,10 @@ int rs780_dpm_init(struct radeon_device *rdev)
859 return -ENOMEM; 856 return -ENOMEM;
860 rdev->pm.dpm.priv = pi; 857 rdev->pm.dpm.priv = pi;
861 858
859 ret = r600_get_platform_caps(rdev);
860 if (ret)
861 return ret;
862
862 ret = rs780_parse_power_table(rdev); 863 ret = rs780_parse_power_table(rdev);
863 if (ret) 864 if (ret)
864 return ret; 865 return ret;
diff --git a/drivers/gpu/drm/radeon/rv6xx_dpm.c b/drivers/gpu/drm/radeon/rv6xx_dpm.c
index bebf31c4d841..e7045b085715 100644
--- a/drivers/gpu/drm/radeon/rv6xx_dpm.c
+++ b/drivers/gpu/drm/radeon/rv6xx_dpm.c
@@ -1891,9 +1891,6 @@ static int rv6xx_parse_power_table(struct radeon_device *rdev)
1891 power_info->pplib.ucNumStates, GFP_KERNEL); 1891 power_info->pplib.ucNumStates, GFP_KERNEL);
1892 if (!rdev->pm.dpm.ps) 1892 if (!rdev->pm.dpm.ps)
1893 return -ENOMEM; 1893 return -ENOMEM;
1894 rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
1895 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
1896 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
1897 1894
1898 for (i = 0; i < power_info->pplib.ucNumStates; i++) { 1895 for (i = 0; i < power_info->pplib.ucNumStates; i++) {
1899 power_state = (union pplib_power_state *) 1896 power_state = (union pplib_power_state *)
@@ -1943,6 +1940,10 @@ int rv6xx_dpm_init(struct radeon_device *rdev)
1943 return -ENOMEM; 1940 return -ENOMEM;
1944 rdev->pm.dpm.priv = pi; 1941 rdev->pm.dpm.priv = pi;
1945 1942
1943 ret = r600_get_platform_caps(rdev);
1944 if (ret)
1945 return ret;
1946
1946 ret = rv6xx_parse_power_table(rdev); 1947 ret = rv6xx_parse_power_table(rdev);
1947 if (ret) 1948 if (ret)
1948 return ret; 1949 return ret;
diff --git a/drivers/gpu/drm/radeon/rv770_dpm.c b/drivers/gpu/drm/radeon/rv770_dpm.c
index 5b2ea8ac0731..9098c86ca006 100644
--- a/drivers/gpu/drm/radeon/rv770_dpm.c
+++ b/drivers/gpu/drm/radeon/rv770_dpm.c
@@ -2281,9 +2281,6 @@ int rv7xx_parse_power_table(struct radeon_device *rdev)
2281 power_info->pplib.ucNumStates, GFP_KERNEL); 2281 power_info->pplib.ucNumStates, GFP_KERNEL);
2282 if (!rdev->pm.dpm.ps) 2282 if (!rdev->pm.dpm.ps)
2283 return -ENOMEM; 2283 return -ENOMEM;
2284 rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
2285 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
2286 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
2287 2284
2288 for (i = 0; i < power_info->pplib.ucNumStates; i++) { 2285 for (i = 0; i < power_info->pplib.ucNumStates; i++) {
2289 power_state = (union pplib_power_state *) 2286 power_state = (union pplib_power_state *)
@@ -2361,6 +2358,10 @@ int rv770_dpm_init(struct radeon_device *rdev)
2361 pi->min_vddc_in_table = 0; 2358 pi->min_vddc_in_table = 0;
2362 pi->max_vddc_in_table = 0; 2359 pi->max_vddc_in_table = 0;
2363 2360
2361 ret = r600_get_platform_caps(rdev);
2362 if (ret)
2363 return ret;
2364
2364 ret = rv7xx_parse_power_table(rdev); 2365 ret = rv7xx_parse_power_table(rdev);
2365 if (ret) 2366 if (ret)
2366 return ret; 2367 return ret;
diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
index eafb0e6bc67e..d5024778cabe 100644
--- a/drivers/gpu/drm/radeon/si_dpm.c
+++ b/drivers/gpu/drm/radeon/si_dpm.c
@@ -6271,9 +6271,6 @@ static int si_parse_power_table(struct radeon_device *rdev)
6271 if (!rdev->pm.dpm.ps) 6271 if (!rdev->pm.dpm.ps)
6272 return -ENOMEM; 6272 return -ENOMEM;
6273 power_state_offset = (u8 *)state_array->states; 6273 power_state_offset = (u8 *)state_array->states;
6274 rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
6275 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
6276 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
6277 for (i = 0; i < state_array->ucNumEntries; i++) { 6274 for (i = 0; i < state_array->ucNumEntries; i++) {
6278 u8 *idx; 6275 u8 *idx;
6279 power_state = (union pplib_power_state *)power_state_offset; 6276 power_state = (union pplib_power_state *)power_state_offset;
@@ -6350,6 +6347,10 @@ int si_dpm_init(struct radeon_device *rdev)
6350 pi->min_vddc_in_table = 0; 6347 pi->min_vddc_in_table = 0;
6351 pi->max_vddc_in_table = 0; 6348 pi->max_vddc_in_table = 0;
6352 6349
6350 ret = r600_get_platform_caps(rdev);
6351 if (ret)
6352 return ret;
6353
6353 ret = si_parse_power_table(rdev); 6354 ret = si_parse_power_table(rdev);
6354 if (ret) 6355 if (ret)
6355 return ret; 6356 return ret;
diff --git a/drivers/gpu/drm/radeon/sumo_dpm.c b/drivers/gpu/drm/radeon/sumo_dpm.c
index 8b47b3cd0357..3f0e8d7b8dbe 100644
--- a/drivers/gpu/drm/radeon/sumo_dpm.c
+++ b/drivers/gpu/drm/radeon/sumo_dpm.c
@@ -1484,9 +1484,6 @@ static int sumo_parse_power_table(struct radeon_device *rdev)
1484 if (!rdev->pm.dpm.ps) 1484 if (!rdev->pm.dpm.ps)
1485 return -ENOMEM; 1485 return -ENOMEM;
1486 power_state_offset = (u8 *)state_array->states; 1486 power_state_offset = (u8 *)state_array->states;
1487 rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
1488 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
1489 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
1490 for (i = 0; i < state_array->ucNumEntries; i++) { 1487 for (i = 0; i < state_array->ucNumEntries; i++) {
1491 u8 *idx; 1488 u8 *idx;
1492 power_state = (union pplib_power_state *)power_state_offset; 1489 power_state = (union pplib_power_state *)power_state_offset;
@@ -1772,6 +1769,10 @@ int sumo_dpm_init(struct radeon_device *rdev)
1772 1769
1773 sumo_construct_boot_and_acpi_state(rdev); 1770 sumo_construct_boot_and_acpi_state(rdev);
1774 1771
1772 ret = r600_get_platform_caps(rdev);
1773 if (ret)
1774 return ret;
1775
1775 ret = sumo_parse_power_table(rdev); 1776 ret = sumo_parse_power_table(rdev);
1776 if (ret) 1777 if (ret)
1777 return ret; 1778 return ret;
diff --git a/drivers/gpu/drm/radeon/trinity_dpm.c b/drivers/gpu/drm/radeon/trinity_dpm.c
index 2da0e17eb960..2a2822c03329 100644
--- a/drivers/gpu/drm/radeon/trinity_dpm.c
+++ b/drivers/gpu/drm/radeon/trinity_dpm.c
@@ -1694,9 +1694,6 @@ static int trinity_parse_power_table(struct radeon_device *rdev)
1694 if (!rdev->pm.dpm.ps) 1694 if (!rdev->pm.dpm.ps)
1695 return -ENOMEM; 1695 return -ENOMEM;
1696 power_state_offset = (u8 *)state_array->states; 1696 power_state_offset = (u8 *)state_array->states;
1697 rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps);
1698 rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime);
1699 rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);
1700 for (i = 0; i < state_array->ucNumEntries; i++) { 1697 for (i = 0; i < state_array->ucNumEntries; i++) {
1701 u8 *idx; 1698 u8 *idx;
1702 power_state = (union pplib_power_state *)power_state_offset; 1699 power_state = (union pplib_power_state *)power_state_offset;
@@ -1895,6 +1892,10 @@ int trinity_dpm_init(struct radeon_device *rdev)
1895 1892
1896 trinity_construct_boot_state(rdev); 1893 trinity_construct_boot_state(rdev);
1897 1894
1895 ret = r600_get_platform_caps(rdev);
1896 if (ret)
1897 return ret;
1898
1898 ret = trinity_parse_power_table(rdev); 1899 ret = trinity_parse_power_table(rdev);
1899 if (ret) 1900 if (ret)
1900 return ret; 1901 return ret;