diff options
author | Eric Huang <JinHuiEric.Huang@amd.com> | 2016-04-15 17:23:14 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-05-04 20:30:02 -0400 |
commit | a72d5604ead32d282fefbc018ca63a3bf878e2c2 (patch) | |
tree | e6ce16351b114c8d0f177914793d945b05a526bb | |
parent | 92dea67dd682e56c7a5deebeb7d99de5f4ffcedf (diff) |
drm/amd/powerplay: revise reading/writing pptable on Polaris10
Change the way we store pptables in the driver to better
facilitate eventual runtime updates for debugging.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Eric Huang <JinHuiEric.Huang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.c | 31 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.h | 3 |
2 files changed, 30 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.c index 79192c301d78..b146ec8a69bb 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.c | |||
@@ -2560,6 +2560,13 @@ int polaris10_reset_asic_tasks(struct pp_hwmgr *hwmgr) | |||
2560 | 2560 | ||
2561 | int polaris10_hwmgr_backend_fini(struct pp_hwmgr *hwmgr) | 2561 | int polaris10_hwmgr_backend_fini(struct pp_hwmgr *hwmgr) |
2562 | { | 2562 | { |
2563 | struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend); | ||
2564 | |||
2565 | if (data->soft_pp_table) { | ||
2566 | kfree(data->soft_pp_table); | ||
2567 | data->soft_pp_table = NULL; | ||
2568 | } | ||
2569 | |||
2563 | return phm_hwmgr_backend_fini(hwmgr); | 2570 | return phm_hwmgr_backend_fini(hwmgr); |
2564 | } | 2571 | } |
2565 | 2572 | ||
@@ -4750,18 +4757,34 @@ static int polaris10_get_pp_table(struct pp_hwmgr *hwmgr, char **table) | |||
4750 | { | 4757 | { |
4751 | struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend); | 4758 | struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend); |
4752 | 4759 | ||
4753 | *table = (char *)&data->smc_state_table; | 4760 | if (!data->soft_pp_table) { |
4761 | data->soft_pp_table = kzalloc(hwmgr->soft_pp_table_size, GFP_KERNEL); | ||
4762 | if (!data->soft_pp_table) | ||
4763 | return -ENOMEM; | ||
4764 | memcpy(data->soft_pp_table, hwmgr->soft_pp_table, | ||
4765 | hwmgr->soft_pp_table_size); | ||
4766 | } | ||
4754 | 4767 | ||
4755 | return sizeof(struct SMU74_Discrete_DpmTable); | 4768 | *table = (char *)&data->soft_pp_table; |
4769 | |||
4770 | return hwmgr->soft_pp_table_size; | ||
4756 | } | 4771 | } |
4757 | 4772 | ||
4758 | static int polaris10_set_pp_table(struct pp_hwmgr *hwmgr, const char *buf, size_t size) | 4773 | static int polaris10_set_pp_table(struct pp_hwmgr *hwmgr, const char *buf, size_t size) |
4759 | { | 4774 | { |
4760 | struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend); | 4775 | struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend); |
4761 | 4776 | ||
4762 | void *table = (void *)&data->smc_state_table; | 4777 | if (!data->soft_pp_table) { |
4778 | data->soft_pp_table = kzalloc(hwmgr->soft_pp_table_size, GFP_KERNEL); | ||
4779 | if (!data->soft_pp_table) | ||
4780 | return -ENOMEM; | ||
4781 | } | ||
4782 | |||
4783 | memcpy(data->soft_pp_table, buf, size); | ||
4784 | |||
4785 | hwmgr->soft_pp_table = data->soft_pp_table; | ||
4763 | 4786 | ||
4764 | memcpy(table, buf, size); | 4787 | /* TODO: re-init powerplay to implement modified pptable */ |
4765 | 4788 | ||
4766 | return 0; | 4789 | return 0; |
4767 | } | 4790 | } |
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.h b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.h index 2507404fd51e..b02296444f2f 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.h +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.h | |||
@@ -309,6 +309,9 @@ struct polaris10_hwmgr { | |||
309 | uint32_t up_hyst; | 309 | uint32_t up_hyst; |
310 | uint32_t disable_dpm_mask; | 310 | uint32_t disable_dpm_mask; |
311 | bool apply_optimized_settings; | 311 | bool apply_optimized_settings; |
312 | |||
313 | /* soft pptable for re-uploading into smu */ | ||
314 | void *soft_pp_table; | ||
312 | }; | 315 | }; |
313 | 316 | ||
314 | /* To convert to Q8.8 format for firmware */ | 317 | /* To convert to Q8.8 format for firmware */ |