diff options
Diffstat (limited to 'drivers/gpu/drm/amd/display/modules')
7 files changed, 175 insertions, 167 deletions
diff --git a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c index f6034213c700..67a062af3ab0 100644 --- a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c +++ b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c @@ -1715,8 +1715,8 @@ static bool map_regamma_hw_to_x_user(  	const struct pwl_float_data_ex *rgb_regamma,  	uint32_t hw_points_num,  	struct dc_transfer_func_distributed_points *tf_pts, -	bool mapUserRamp, -	bool doClamping) +	bool map_user_ramp, +	bool do_clamping)  {  	/* setup to spare calculated ideal regamma values */ @@ -1724,7 +1724,7 @@ static bool map_regamma_hw_to_x_user(  	struct hw_x_point *coords = coords_x;  	const struct pwl_float_data_ex *regamma = rgb_regamma; -	if (ramp && mapUserRamp) { +	if (ramp && map_user_ramp) {  		copy_rgb_regamma_to_coordinates_x(coords,  				hw_points_num,  				rgb_regamma); @@ -1744,7 +1744,7 @@ static bool map_regamma_hw_to_x_user(  		}  	} -	if (doClamping) { +	if (do_clamping) {  		/* this should be named differently, all it does is clamp to 0-1 */  		build_new_custom_resulted_curve(hw_points_num, tf_pts);  	} @@ -1875,7 +1875,7 @@ rgb_user_alloc_fail:  bool mod_color_calculate_degamma_params(struct dc_color_caps *dc_caps,  		struct dc_transfer_func *input_tf, -		const struct dc_gamma *ramp, bool mapUserRamp) +		const struct dc_gamma *ramp, bool map_user_ramp)  {  	struct dc_transfer_func_distributed_points *tf_pts = &input_tf->tf_pts;  	struct dividers dividers; @@ -1883,7 +1883,7 @@ bool mod_color_calculate_degamma_params(struct dc_color_caps *dc_caps,  	struct pwl_float_data_ex *curve = NULL;  	struct gamma_pixel *axis_x = NULL;  	struct pixel_gamma_point *coeff = NULL; -	enum dc_transfer_func_predefined tf = TRANSFER_FUNCTION_SRGB; +	enum dc_transfer_func_predefined tf;  	uint32_t i;  	bool ret = false; @@ -1891,12 +1891,12 @@ bool mod_color_calculate_degamma_params(struct dc_color_caps *dc_caps,  		return false;  	/* we can use hardcoded curve for plain SRGB TF -	 * If linear, it's bypass if on user ramp +	 * If linear, it's bypass if no user ramp  	 */  	if (input_tf->type == TF_TYPE_PREDEFINED) {  		if ((input_tf->tf == TRANSFER_FUNCTION_SRGB ||  				input_tf->tf == TRANSFER_FUNCTION_LINEAR) && -				!mapUserRamp) +				!map_user_ramp)  			return true;  		if (dc_caps != NULL && @@ -1919,7 +1919,7 @@ bool mod_color_calculate_degamma_params(struct dc_color_caps *dc_caps,  	input_tf->type = TF_TYPE_DISTRIBUTED_POINTS; -	if (mapUserRamp && ramp && ramp->type == GAMMA_RGB_256) { +	if (map_user_ramp && ramp && ramp->type == GAMMA_RGB_256) {  		rgb_user = kvcalloc(ramp->num_entries + _EXTRA_POINTS,  				sizeof(*rgb_user),  				GFP_KERNEL); @@ -2007,7 +2007,7 @@ bool mod_color_calculate_degamma_params(struct dc_color_caps *dc_caps,  		map_regamma_hw_to_x_user(ramp, coeff, rgb_user,  				coordinates_x, axis_x, curve,  				MAX_HW_POINTS, tf_pts, -				mapUserRamp && ramp && ramp->type == GAMMA_RGB_256, +				map_user_ramp && ramp && ramp->type == GAMMA_RGB_256,  				true);  	} @@ -2112,9 +2112,11 @@ static bool calculate_curve(enum dc_transfer_func_predefined trans,  }  bool mod_color_calculate_regamma_params(struct dc_transfer_func *output_tf, -		const struct dc_gamma *ramp, bool mapUserRamp, bool canRomBeUsed, -		const struct hdr_tm_params *fs_params, -		struct calculate_buffer *cal_buffer) +					const struct dc_gamma *ramp, +					bool map_user_ramp, +					bool can_rom_be_used, +					const struct hdr_tm_params *fs_params, +					struct calculate_buffer *cal_buffer)  {  	struct dc_transfer_func_distributed_points *tf_pts = &output_tf->tf_pts;  	struct dividers dividers; @@ -2123,27 +2125,27 @@ bool mod_color_calculate_regamma_params(struct dc_transfer_func *output_tf,  	struct pwl_float_data_ex *rgb_regamma = NULL;  	struct gamma_pixel *axis_x = NULL;  	struct pixel_gamma_point *coeff = NULL; -	enum dc_transfer_func_predefined tf = TRANSFER_FUNCTION_SRGB; -	bool doClamping = true; +	enum dc_transfer_func_predefined tf; +	bool do_clamping = true;  	bool ret = false;  	if (output_tf->type == TF_TYPE_BYPASS)  		return false;  	/* we can use hardcoded curve for plain SRGB TF */ -	if (output_tf->type == TF_TYPE_PREDEFINED && canRomBeUsed == true && +	if (output_tf->type == TF_TYPE_PREDEFINED && can_rom_be_used == true &&  			output_tf->tf == TRANSFER_FUNCTION_SRGB) {  		if (ramp == NULL)  			return true;  		if ((ramp->is_identity && ramp->type != GAMMA_CS_TFM_1D) || -				(!mapUserRamp && ramp->type == GAMMA_RGB_256)) +		    (!map_user_ramp && ramp->type == GAMMA_RGB_256))  			return true;  	}  	output_tf->type = TF_TYPE_DISTRIBUTED_POINTS;  	if (ramp && ramp->type != GAMMA_CS_TFM_1D && -			(mapUserRamp || ramp->type != GAMMA_RGB_256)) { +	    (map_user_ramp || ramp->type != GAMMA_RGB_256)) {  		rgb_user = kvcalloc(ramp->num_entries + _EXTRA_POINTS,  			    sizeof(*rgb_user),  			    GFP_KERNEL); @@ -2164,7 +2166,7 @@ bool mod_color_calculate_regamma_params(struct dc_transfer_func *output_tf,  				ramp->num_entries,  				dividers); -		if (ramp->type == GAMMA_RGB_256 && mapUserRamp) +		if (ramp->type == GAMMA_RGB_256 && map_user_ramp)  			scale_gamma(rgb_user, ramp, dividers);  		else if (ramp->type == GAMMA_RGB_FLOAT_1024)  			scale_gamma_dx(rgb_user, ramp, dividers); @@ -2191,15 +2193,15 @@ bool mod_color_calculate_regamma_params(struct dc_transfer_func *output_tf,  			cal_buffer);  	if (ret) { -		doClamping = !(output_tf->tf == TRANSFER_FUNCTION_GAMMA22 && -			fs_params != NULL && fs_params->skip_tm == 0); +		do_clamping = !(output_tf->tf == TRANSFER_FUNCTION_GAMMA22 && +				fs_params != NULL && fs_params->skip_tm == 0);  		map_regamma_hw_to_x_user(ramp, coeff, rgb_user, -				coordinates_x, axis_x, rgb_regamma, -				MAX_HW_POINTS, tf_pts, -				(mapUserRamp || (ramp && ramp->type != GAMMA_RGB_256)) && -				(ramp && ramp->type != GAMMA_CS_TFM_1D), -				doClamping); +					 coordinates_x, axis_x, rgb_regamma, +					 MAX_HW_POINTS, tf_pts, +					 (map_user_ramp || (ramp && ramp->type != GAMMA_RGB_256)) && +					 (ramp && ramp->type != GAMMA_CS_TFM_1D), +					 do_clamping);  		if (ramp && ramp->type == GAMMA_CS_TFM_1D)  			apply_lut_1d(ramp, MAX_HW_POINTS, tf_pts); @@ -2215,89 +2217,3 @@ axis_x_alloc_fail:  rgb_user_alloc_fail:  	return ret;  } - -bool  mod_color_calculate_degamma_curve(enum dc_transfer_func_predefined trans, -				struct dc_transfer_func_distributed_points *points) -{ -	uint32_t i; -	bool ret = false; -	struct pwl_float_data_ex *rgb_degamma = NULL; - -	if (trans == TRANSFER_FUNCTION_UNITY || -		trans == TRANSFER_FUNCTION_LINEAR) { - -		for (i = 0; i <= MAX_HW_POINTS ; i++) { -			points->red[i]    = coordinates_x[i].x; -			points->green[i]  = coordinates_x[i].x; -			points->blue[i]   = coordinates_x[i].x; -		} -		ret = true; -	} else if (trans == TRANSFER_FUNCTION_PQ) { -		rgb_degamma = kvcalloc(MAX_HW_POINTS + _EXTRA_POINTS, -				       sizeof(*rgb_degamma), -				       GFP_KERNEL); -		if (!rgb_degamma) -			goto rgb_degamma_alloc_fail; - - -		build_de_pq(rgb_degamma, -				MAX_HW_POINTS, -				coordinates_x); -		for (i = 0; i <= MAX_HW_POINTS ; i++) { -			points->red[i]    = rgb_degamma[i].r; -			points->green[i]  = rgb_degamma[i].g; -			points->blue[i]   = rgb_degamma[i].b; -		} -		ret = true; - -		kvfree(rgb_degamma); -	} else if (trans == TRANSFER_FUNCTION_SRGB || -		trans == TRANSFER_FUNCTION_BT709 || -		trans == TRANSFER_FUNCTION_GAMMA22 || -		trans == TRANSFER_FUNCTION_GAMMA24 || -		trans == TRANSFER_FUNCTION_GAMMA26) { -		rgb_degamma = kvcalloc(MAX_HW_POINTS + _EXTRA_POINTS, -				       sizeof(*rgb_degamma), -				       GFP_KERNEL); -		if (!rgb_degamma) -			goto rgb_degamma_alloc_fail; - -		build_degamma(rgb_degamma, -				MAX_HW_POINTS, -				coordinates_x, -				trans); -		for (i = 0; i <= MAX_HW_POINTS ; i++) { -			points->red[i]    = rgb_degamma[i].r; -			points->green[i]  = rgb_degamma[i].g; -			points->blue[i]   = rgb_degamma[i].b; -		} -		ret = true; - -		kvfree(rgb_degamma); -	} else if (trans == TRANSFER_FUNCTION_HLG) { -		rgb_degamma = kvcalloc(MAX_HW_POINTS + _EXTRA_POINTS, -				       sizeof(*rgb_degamma), -				       GFP_KERNEL); -		if (!rgb_degamma) -			goto rgb_degamma_alloc_fail; - -		build_hlg_degamma(rgb_degamma, -				MAX_HW_POINTS, -				coordinates_x, -				80, 1000); -		for (i = 0; i <= MAX_HW_POINTS ; i++) { -			points->red[i]    = rgb_degamma[i].r; -			points->green[i]  = rgb_degamma[i].g; -			points->blue[i]   = rgb_degamma[i].b; -		} -		ret = true; -		kvfree(rgb_degamma); -	} -	points->end_exponent = 0; -	points->x_point_at_y1_red = 1; -	points->x_point_at_y1_green = 1; -	points->x_point_at_y1_blue = 1; - -rgb_degamma_alloc_fail: -	return ret; -} diff --git a/drivers/gpu/drm/amd/display/modules/color/color_gamma.h b/drivers/gpu/drm/amd/display/modules/color/color_gamma.h index 2893abf48208..ee5c466613de 100644 --- a/drivers/gpu/drm/amd/display/modules/color/color_gamma.h +++ b/drivers/gpu/drm/amd/display/modules/color/color_gamma.h @@ -115,9 +115,6 @@ bool mod_color_calculate_degamma_params(struct dc_color_caps *dc_caps,  		struct dc_transfer_func *output_tf,  		const struct dc_gamma *ramp, bool mapUserRamp); -bool mod_color_calculate_degamma_curve(enum dc_transfer_func_predefined trans, -				struct dc_transfer_func_distributed_points *points); -  bool calculate_user_regamma_coeff(struct dc_transfer_func *output_tf,  		const struct regamma_lut *regamma,  		struct calculate_buffer *cal_buffer, diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c index c2e00f7b8381..2be45b314922 100644 --- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c +++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c @@ -616,7 +616,8 @@ static void build_vrr_infopacket_data_v1(const struct mod_vrr_params *vrr,  }  static void build_vrr_infopacket_data_v3(const struct mod_vrr_params *vrr, -		struct dc_info_packet *infopacket) +		struct dc_info_packet *infopacket, +		bool freesync_on_desktop)  {  	unsigned int min_refresh;  	unsigned int max_refresh; @@ -649,9 +650,15 @@ static void build_vrr_infopacket_data_v3(const struct mod_vrr_params *vrr,  		infopacket->sb[6] |= 0x02;  	/* PB6 = [Bit 2 = FreeSync Active] */ -	if (vrr->state == VRR_STATE_ACTIVE_VARIABLE || +	if (freesync_on_desktop) { +		if (vrr->state != VRR_STATE_DISABLED && +			vrr->state != VRR_STATE_UNSUPPORTED) +			infopacket->sb[6] |= 0x04; +	} else { +		if (vrr->state == VRR_STATE_ACTIVE_VARIABLE ||  			vrr->state == VRR_STATE_ACTIVE_FIXED) -		infopacket->sb[6] |= 0x04; +			infopacket->sb[6] |= 0x04; +	}  	min_refresh = (vrr->min_refresh_in_uhz + 500000) / 1000000;  	max_refresh = (vrr->max_refresh_in_uhz + 500000) / 1000000; @@ -898,52 +905,20 @@ static void build_vrr_infopacket_v2(enum signal_type signal,  	infopacket->valid = true;  } -#ifndef TRIM_FSFT -static void build_vrr_infopacket_fast_transport_data( -	bool ftActive, -	unsigned int ftOutputRate, -	struct dc_info_packet *infopacket) -{ -	/* PB9 : bit7 - fast transport Active*/ -	unsigned char activeBit = (ftActive) ? 1 << 7 : 0; - -	infopacket->sb[1] &= ~activeBit;  //clear bit -	infopacket->sb[1] |=  activeBit;  //set bit - -	/* PB13 : Target Output Pixel Rate [kHz] - bits 7:0  */ -	infopacket->sb[13] = ftOutputRate & 0xFF; - -	/* PB14 : Target Output Pixel Rate [kHz] - bits 15:8  */ -	infopacket->sb[14] = (ftOutputRate >> 8) & 0xFF; - -	/* PB15 : Target Output Pixel Rate [kHz] - bits 23:16  */ -	infopacket->sb[15] = (ftOutputRate >> 16) & 0xFF; - -} -#endif  static void build_vrr_infopacket_v3(enum signal_type signal,  		const struct mod_vrr_params *vrr, -#ifndef TRIM_FSFT -		bool ftActive, unsigned int ftOutputRate, -#endif  		enum color_transfer_func app_tf, -		struct dc_info_packet *infopacket) +		struct dc_info_packet *infopacket, +		bool freesync_on_desktop)  {  	unsigned int payload_size = 0;  	build_vrr_infopacket_header_v3(signal, infopacket, &payload_size); -	build_vrr_infopacket_data_v3(vrr, infopacket); +	build_vrr_infopacket_data_v3(vrr, infopacket, freesync_on_desktop);  	build_vrr_infopacket_fs2_data(app_tf, infopacket); -#ifndef TRIM_FSFT -	build_vrr_infopacket_fast_transport_data( -			ftActive, -			ftOutputRate, -			infopacket); -#endif -  	build_vrr_infopacket_checksum(&payload_size, infopacket);  	infopacket->valid = true; @@ -980,31 +955,26 @@ void mod_freesync_build_vrr_infopacket(struct mod_freesync *mod_freesync,  	 * Check if Freesync is supported. Return if false. If true,  	 * set the corresponding bit in the info packet  	 */ +	bool freesync_on_desktop; +	bool fams_enable; + +	fams_enable = stream->ctx->dc->current_state->bw_ctx.bw.dcn.clk.fw_based_mclk_switching; +	freesync_on_desktop = stream->freesync_on_desktop && fams_enable; +  	if (!vrr->send_info_frame)  		return;  	switch (packet_type) {  	case PACKET_TYPE_FS_V3: -#ifndef TRIM_FSFT -		// always populate with pixel rate. -		build_vrr_infopacket_v3( -				stream->signal, vrr, -				stream->timing.flags.FAST_TRANSPORT, -				(stream->timing.flags.FAST_TRANSPORT) ? -						stream->timing.fast_transport_output_rate_100hz : -						stream->timing.pix_clk_100hz, -				app_tf, infopacket); -#else -		build_vrr_infopacket_v3(stream->signal, vrr, app_tf, infopacket); -#endif +		build_vrr_infopacket_v3(stream->signal, vrr, app_tf, infopacket, freesync_on_desktop);  		break;  	case PACKET_TYPE_FS_V2: -		build_vrr_infopacket_v2(stream->signal, vrr, app_tf, infopacket, stream->freesync_on_desktop); +		build_vrr_infopacket_v2(stream->signal, vrr, app_tf, infopacket, freesync_on_desktop);  		break;  	case PACKET_TYPE_VRR:  	case PACKET_TYPE_FS_V1:  	default: -		build_vrr_infopacket_v1(stream->signal, vrr, infopacket, stream->freesync_on_desktop); +		build_vrr_infopacket_v1(stream->signal, vrr, infopacket, freesync_on_desktop);  	}  	if (true == pack_sdp_v1_3 && diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h index edf5845f6a1f..66dc9a19aebe 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h @@ -41,4 +41,40 @@ void mod_build_vsc_infopacket(const struct dc_stream_state *stream,  void mod_build_hf_vsif_infopacket(const struct dc_stream_state *stream,  		struct dc_info_packet *info_packet); +enum adaptive_sync_type { +	ADAPTIVE_SYNC_TYPE_NONE                  = 0, +	ADAPTIVE_SYNC_TYPE_DP                    = 1, +	FREESYNC_TYPE_PCON_IN_WHITELIST          = 2, +	FREESYNC_TYPE_PCON_NOT_IN_WHITELIST      = 3, +	ADAPTIVE_SYNC_TYPE_EDP                   = 4, +}; + +enum adaptive_sync_sdp_version { +	AS_SDP_VER_0 = 0x0, +	AS_SDP_VER_1 = 0x1, +	AS_SDP_VER_2 = 0x2, +}; + +#define AS_DP_SDP_LENGTH (9) + +struct frame_duration_op { +	bool          support; +	unsigned char frame_duration_hex; +}; + +struct AS_Df_params { +	bool   supportMode; +	struct frame_duration_op increase; +	struct frame_duration_op decrease; +}; + +void mod_build_adaptive_sync_infopacket(const struct dc_stream_state *stream, +		enum adaptive_sync_type asType, const struct AS_Df_params *param, +		struct dc_info_packet *info_packet); + +void mod_build_adaptive_sync_infopacket_v2(const struct dc_stream_state *stream, +		const struct AS_Df_params *param, struct dc_info_packet *info_packet); + +void mod_build_adaptive_sync_infopacket_v1(struct dc_info_packet *info_packet); +  #endif diff --git a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c index 69691058ab89..ec64f19e1786 100644 --- a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c +++ b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c @@ -519,3 +519,58 @@ void mod_build_hf_vsif_infopacket(const struct dc_stream_state *stream,  		info_packet->valid = true;  } +void mod_build_adaptive_sync_infopacket(const struct dc_stream_state *stream, +		enum adaptive_sync_type asType, +		const struct AS_Df_params *param, +		struct dc_info_packet *info_packet) +{ +	info_packet->valid = false; + +	memset(info_packet, 0, sizeof(struct dc_info_packet)); + +	switch (asType) { +	case ADAPTIVE_SYNC_TYPE_DP: +		if (stream != NULL) +			mod_build_adaptive_sync_infopacket_v2(stream, param, info_packet); +		break; +	case FREESYNC_TYPE_PCON_IN_WHITELIST: +		mod_build_adaptive_sync_infopacket_v1(info_packet); +		break; +	case ADAPTIVE_SYNC_TYPE_NONE: +	case FREESYNC_TYPE_PCON_NOT_IN_WHITELIST: +	default: +		break; +	} +} + +void mod_build_adaptive_sync_infopacket_v1(struct dc_info_packet *info_packet) +{ +	info_packet->valid = true; +	// HEADER {HB0, HB1, HB2, HB3} = {00, Type, Version, Length} +	info_packet->hb0 = 0x00; +	info_packet->hb1 = 0x22; +	info_packet->hb2 = AS_SDP_VER_1; +	info_packet->hb3 = 0x00; +} + +void mod_build_adaptive_sync_infopacket_v2(const struct dc_stream_state *stream, +		const struct AS_Df_params *param, +		struct dc_info_packet *info_packet) +{ +	info_packet->valid = true; +	// HEADER {HB0, HB1, HB2, HB3} = {00, Type, Version, Length} +	info_packet->hb0 = 0x00; +	info_packet->hb1 = 0x22; +	info_packet->hb2 = AS_SDP_VER_2; +	info_packet->hb3 = AS_DP_SDP_LENGTH; + +	//Payload +	info_packet->sb[0] = param->supportMode; //1: AVT; 0: FAVT +	info_packet->sb[1] = (stream->timing.v_total & 0x00FF); +	info_packet->sb[2] = (stream->timing.v_total & 0xFF00) >> 8; +	//info_packet->sb[3] = 0x00; Target RR, not use fot AVT +	info_packet->sb[4] = (param->increase.support << 6 | param->decrease.support << 7); +	info_packet->sb[5] = param->increase.frame_duration_hex; +	info_packet->sb[6] = param->decrease.frame_duration_hex; +} + diff --git a/drivers/gpu/drm/amd/display/modules/power/power_helpers.c b/drivers/gpu/drm/amd/display/modules/power/power_helpers.c index 9b5d9b2c9a6a..e39b133d05af 100644 --- a/drivers/gpu/drm/amd/display/modules/power/power_helpers.c +++ b/drivers/gpu/drm/amd/display/modules/power/power_helpers.c @@ -916,3 +916,34 @@ bool mod_power_only_edp(const struct dc_state *context, const struct dc_stream_s  {  	return context && context->stream_count == 1 && dc_is_embedded_signal(stream->signal);  } + +bool psr_su_set_dsc_slice_height(struct dc *dc, struct dc_link *link, +			      struct dc_stream_state *stream, +			      struct psr_config *config) +{ +	uint16_t pic_height; +	uint16_t slice_height; + +	config->dsc_slice_height = 0; +	if ((link->connector_signal & SIGNAL_TYPE_EDP) && +	    (!dc->caps.edp_dsc_support || +	    link->panel_config.dsc.disable_dsc_edp || +	    !link->dpcd_caps.dsc_caps.dsc_basic_caps.fields.dsc_support.DSC_SUPPORT || +	    !stream->timing.dsc_cfg.num_slices_v)) +		return true; + +	pic_height = stream->timing.v_addressable + +		stream->timing.v_border_top + stream->timing.v_border_bottom; +	slice_height = pic_height / stream->timing.dsc_cfg.num_slices_v; +	config->dsc_slice_height = slice_height; + +	if (slice_height) { +		if (config->su_y_granularity && +		    (slice_height % config->su_y_granularity)) { +			ASSERT(0); +			return false; +		} +	} + +	return true; +} diff --git a/drivers/gpu/drm/amd/display/modules/power/power_helpers.h b/drivers/gpu/drm/amd/display/modules/power/power_helpers.h index 316452e9dbc9..1d3079e56799 100644 --- a/drivers/gpu/drm/amd/display/modules/power/power_helpers.h +++ b/drivers/gpu/drm/amd/display/modules/power/power_helpers.h @@ -59,4 +59,7 @@ void mod_power_calc_psr_configs(struct psr_config *psr_config,  		const struct dc_stream_state *stream);  bool mod_power_only_edp(const struct dc_state *context,  		const struct dc_stream_state *stream); +bool psr_su_set_dsc_slice_height(struct dc *dc, struct dc_link *link, +			      struct dc_stream_state *stream, +			      struct psr_config *config);  #endif /* MODULES_POWER_POWER_HELPERS_H_ */  |