diff options
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c')
| -rw-r--r-- | drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c | 20 | 
1 files changed, 20 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c b/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c index 05d96ca80512..90eb8eedacf2 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c @@ -227,6 +227,25 @@ static void dmub_psr_set_level(struct dmub_psr *dmub, uint16_t psr_level, uint8_  	dc_dmub_srv_wait_idle(dc->dmub_srv);  } +/** + * Set PSR power optimization flags. + */ +static void dmub_psr_set_power_opt(struct dmub_psr *dmub, unsigned int power_opt) +{ +	union dmub_rb_cmd cmd; +	struct dc_context *dc = dmub->ctx; + +	memset(&cmd, 0, sizeof(cmd)); +	cmd.psr_set_power_opt.header.type = DMUB_CMD__PSR; +	cmd.psr_set_power_opt.header.sub_type = DMUB_CMD__SET_PSR_POWER_OPT; +	cmd.psr_set_power_opt.header.payload_bytes = sizeof(struct dmub_cmd_psr_set_power_opt_data); +	cmd.psr_set_power_opt.psr_set_power_opt_data.power_opt = power_opt; + +	dc_dmub_srv_cmd_queue(dc->dmub_srv, &cmd); +	dc_dmub_srv_cmd_execute(dc->dmub_srv); +	dc_dmub_srv_wait_idle(dc->dmub_srv); +} +  /*   * Setup PSR by programming phy registers and sending psr hw context values to firmware.   */ @@ -358,6 +377,7 @@ static const struct dmub_psr_funcs psr_funcs = {  	.psr_set_level			= dmub_psr_set_level,  	.psr_force_static		= dmub_psr_force_static,  	.psr_get_residency		= dmub_psr_get_residency, +	.psr_set_power_opt		= dmub_psr_set_power_opt,  };  /* | 
