[PATCH 4/4] drm/amd/powerplay: read power state table from vbios and can't be changed. so allocate memory for request ps and current ps.

Deucher, Alexander Alexander.Deucher at amd.com
Wed Aug 31 21:17:49 UTC 2016


> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Rex Zhu
> Sent: Wednesday, August 31, 2016 5:06 PM
> To: amd-gfx at lists.freedesktop.org
> Cc: Zhu, Rex
> Subject: [PATCH 4/4] drm/amd/powerplay: read power state table from
> vbios and can't be changed. so allocate memory for request ps and current
> ps.

The subject line is way too long.  Make it shorter and include a description in the commit log.  With that fixed, this series is:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> 
> Signed-off-by: Rex Zhu <Rex.Zhu at amd.com>
> ---
>  drivers/gpu/drm/amd/powerplay/amd_powerplay.c |  2 +-
>  drivers/gpu/drm/amd/powerplay/eventmgr/psm.c  |  5 +++--
>  drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c   | 15 +++++++++++++--
>  3 files changed, 17 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
> b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
> index 2de34a5..a4b0f41 100644
> --- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
> +++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
> @@ -538,7 +538,7 @@ int pp_dpm_dispatch_tasks(void *handle, enum
> amd_pp_event event_id, void *input,
>  		ret = pem_handle_event(pp_handle->eventmgr, event_id,
> &data);
>  		break;
>  	case AMD_PP_EVENT_READJUST_POWER_STATE:
> -		pp_handle->hwmgr->current_ps = pp_handle->hwmgr-
> >boot_ps;
> +		memcpy(pp_handle->hwmgr->current_ps, pp_handle-
> >hwmgr->boot_ps, pp_handle->hwmgr->ps_size);
>  		ret = pem_handle_event(pp_handle->eventmgr, event_id,
> &data);
>  		break;
>  	default:
> diff --git a/drivers/gpu/drm/amd/powerplay/eventmgr/psm.c
> b/drivers/gpu/drm/amd/powerplay/eventmgr/psm.c
> index a46225c..1d1875a 100644
> --- a/drivers/gpu/drm/amd/powerplay/eventmgr/psm.c
> +++ b/drivers/gpu/drm/amd/powerplay/eventmgr/psm.c
> @@ -70,11 +70,12 @@ int psm_set_states(struct pp_eventmgr *eventmgr,
> unsigned long *state_id)
>  	int i;
> 
>  	table_entries = hwmgr->num_ps;
> +
>  	state = hwmgr->ps;
> 
>  	for (i = 0; i < table_entries; i++) {
>  		if (state->id == *state_id) {
> -			hwmgr->request_ps = state;
> +			memcpy(hwmgr->request_ps, state, hwmgr-
> >ps_size);
>  			return 0;
>  		}
>  		state = (struct pp_power_state *)((unsigned long)state +
> hwmgr->ps_size);
> @@ -106,7 +107,7 @@ int psm_adjust_power_state_dynamic(struct
> pp_eventmgr *eventmgr, bool skip)
>  	if (!equal ||
> phm_check_smc_update_required_for_display_configuration(hwmgr)) {
>  		phm_apply_state_adjust_rules(hwmgr, requested,
> pcurrent);
>  		phm_set_power_state(hwmgr, &pcurrent->hardware,
> &requested->hardware);
> -		hwmgr->current_ps = requested;
> +		memcpy(hwmgr->current_ps, hwmgr->request_ps, hwmgr-
> >ps_size);
>  	}
>  	return 0;
>  }
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c
> b/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c
> index 50d465d..9794f10 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/hwmgr.c
> @@ -128,6 +128,8 @@ int hwmgr_fini(struct pp_hwmgr *hwmgr)
>  	kfree(hwmgr->set_temperature_range.function_list);
> 
>  	kfree(hwmgr->ps);
> +	kfree(hwmgr->current_ps);
> +	kfree(hwmgr->request_ps);
>  	kfree(hwmgr);
>  	return 0;
>  }
> @@ -152,10 +154,17 @@ int hw_init_power_state_table(struct pp_hwmgr
> *hwmgr)
>  					  sizeof(struct pp_power_state);
> 
>  	hwmgr->ps = kzalloc(size * table_entries, GFP_KERNEL);
> -
>  	if (hwmgr->ps == NULL)
>  		return -ENOMEM;
> 
> +	hwmgr->request_ps = kzalloc(size, GFP_KERNEL);
> +	if (hwmgr->request_ps == NULL)
> +		return -ENOMEM;
> +
> +	hwmgr->current_ps = kzalloc(size, GFP_KERNEL);
> +	if (hwmgr->current_ps == NULL)
> +		return -ENOMEM;
> +
>  	state = hwmgr->ps;
> 
>  	for (i = 0; i < table_entries; i++) {
> @@ -163,7 +172,8 @@ int hw_init_power_state_table(struct pp_hwmgr
> *hwmgr)
> 
>  		if (state->classification.flags &
> PP_StateClassificationFlag_Boot) {
>  			hwmgr->boot_ps = state;
> -			hwmgr->current_ps = hwmgr->request_ps = state;
> +			memcpy(hwmgr->current_ps, state, size);
> +			memcpy(hwmgr->request_ps, state, size);
>  		}
> 
>  		state->id = i + 1; /* assigned unique num for every power
> state id */
> @@ -173,6 +183,7 @@ int hw_init_power_state_table(struct pp_hwmgr
> *hwmgr)
>  		state = (struct pp_power_state *)((unsigned long)state +
> size);
>  	}
> 
> +
>  	return 0;
>  }
> 
> --
> 1.9.1
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list