Commit 03424d38 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'amd-drm-fixes-5.15-2021-10-27' of...

Merge tag 'amd-drm-fixes-5.15-2021-10-27' of https://gitlab.freedesktop.org/agd5f/linux

 into drm-fixes

amd-drm-fixes-5.15-2021-10-27:

amdgpu:
- Display fixes for DCN 3.1
- Fix potential out of bounds write in debugfs

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211028023130.4528-1-alexander.deucher@amd.com
parents defbbcd9 ad76744b
Loading
Loading
Loading
Loading
+9 −9
Original line number Original line Diff line number Diff line
@@ -487,7 +487,7 @@ static ssize_t dp_phy_settings_write(struct file *f, const char __user *buf,
	if (!wr_buf)
	if (!wr_buf)
		return -ENOSPC;
		return -ENOSPC;


	if (parse_write_buffer_into_params(wr_buf, size,
	if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
					   (long *)param, buf,
					   (long *)param, buf,
					   max_param_num,
					   max_param_num,
					   &param_nums)) {
					   &param_nums)) {
@@ -639,7 +639,7 @@ static ssize_t dp_phy_test_pattern_debugfs_write(struct file *f, const char __us
	if (!wr_buf)
	if (!wr_buf)
		return -ENOSPC;
		return -ENOSPC;


	if (parse_write_buffer_into_params(wr_buf, size,
	if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
					   (long *)param, buf,
					   (long *)param, buf,
					   max_param_num,
					   max_param_num,
					   &param_nums)) {
					   &param_nums)) {
@@ -914,7 +914,7 @@ static ssize_t dp_dsc_passthrough_set(struct file *f, const char __user *buf,
		return -ENOSPC;
		return -ENOSPC;
	}
	}


	if (parse_write_buffer_into_params(wr_buf, size,
	if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
					   &param, buf,
					   &param, buf,
					   max_param_num,
					   max_param_num,
					   &param_nums)) {
					   &param_nums)) {
@@ -1211,7 +1211,7 @@ static ssize_t trigger_hotplug(struct file *f, const char __user *buf,
		return -ENOSPC;
		return -ENOSPC;
	}
	}


	if (parse_write_buffer_into_params(wr_buf, size,
	if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
						(long *)param, buf,
						(long *)param, buf,
						max_param_num,
						max_param_num,
						&param_nums)) {
						&param_nums)) {
@@ -1396,7 +1396,7 @@ static ssize_t dp_dsc_clock_en_write(struct file *f, const char __user *buf,
		return -ENOSPC;
		return -ENOSPC;
	}
	}


	if (parse_write_buffer_into_params(wr_buf, size,
	if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
					    (long *)param, buf,
					    (long *)param, buf,
					    max_param_num,
					    max_param_num,
					    &param_nums)) {
					    &param_nums)) {
@@ -1581,7 +1581,7 @@ static ssize_t dp_dsc_slice_width_write(struct file *f, const char __user *buf,
		return -ENOSPC;
		return -ENOSPC;
	}
	}


	if (parse_write_buffer_into_params(wr_buf, size,
	if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
					    (long *)param, buf,
					    (long *)param, buf,
					    max_param_num,
					    max_param_num,
					    &param_nums)) {
					    &param_nums)) {
@@ -1766,7 +1766,7 @@ static ssize_t dp_dsc_slice_height_write(struct file *f, const char __user *buf,
		return -ENOSPC;
		return -ENOSPC;
	}
	}


	if (parse_write_buffer_into_params(wr_buf, size,
	if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
					    (long *)param, buf,
					    (long *)param, buf,
					    max_param_num,
					    max_param_num,
					    &param_nums)) {
					    &param_nums)) {
@@ -1944,7 +1944,7 @@ static ssize_t dp_dsc_bits_per_pixel_write(struct file *f, const char __user *bu
		return -ENOSPC;
		return -ENOSPC;
	}
	}


	if (parse_write_buffer_into_params(wr_buf, size,
	if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
					    (long *)param, buf,
					    (long *)param, buf,
					    max_param_num,
					    max_param_num,
					    &param_nums)) {
					    &param_nums)) {
@@ -2382,7 +2382,7 @@ static ssize_t dp_max_bpc_write(struct file *f, const char __user *buf,
		return -ENOSPC;
		return -ENOSPC;
	}
	}


	if (parse_write_buffer_into_params(wr_buf, size,
	if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
					   (long *)param, buf,
					   (long *)param, buf,
					   max_param_num,
					   max_param_num,
					   &param_nums)) {
					   &param_nums)) {
+10 −3
Original line number Original line Diff line number Diff line
@@ -518,14 +518,21 @@ static unsigned int find_clk_for_voltage(
		unsigned int voltage)
		unsigned int voltage)
{
{
	int i;
	int i;
	int max_voltage = 0;
	int clock = 0;


	for (i = 0; i < NUM_SOC_VOLTAGE_LEVELS; i++) {
	for (i = 0; i < NUM_SOC_VOLTAGE_LEVELS; i++) {
		if (clock_table->SocVoltage[i] == voltage)
		if (clock_table->SocVoltage[i] == voltage) {
			return clocks[i];
			return clocks[i];
		} else if (clock_table->SocVoltage[i] >= max_voltage &&
				clock_table->SocVoltage[i] < voltage) {
			max_voltage = clock_table->SocVoltage[i];
			clock = clocks[i];
		}
	}
	}


	ASSERT(0);
	ASSERT(clock);
	return 0;
	return clock;
}
}


void dcn31_clk_mgr_helper_populate_bw_params(
void dcn31_clk_mgr_helper_populate_bw_params(
+2 −4
Original line number Original line Diff line number Diff line
@@ -105,6 +105,7 @@ static enum mod_hdcp_status remove_display_from_topology_v3(
	dtm_cmd->dtm_status = TA_DTM_STATUS__GENERIC_FAILURE;
	dtm_cmd->dtm_status = TA_DTM_STATUS__GENERIC_FAILURE;


	psp_dtm_invoke(psp, dtm_cmd->cmd_id);
	psp_dtm_invoke(psp, dtm_cmd->cmd_id);
	mutex_unlock(&psp->dtm_context.mutex);


	if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) {
	if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) {
		status = remove_display_from_topology_v2(hdcp, index);
		status = remove_display_from_topology_v2(hdcp, index);
@@ -115,8 +116,6 @@ static enum mod_hdcp_status remove_display_from_topology_v3(
		HDCP_TOP_REMOVE_DISPLAY_TRACE(hdcp, display->index);
		HDCP_TOP_REMOVE_DISPLAY_TRACE(hdcp, display->index);
	}
	}


	mutex_unlock(&psp->dtm_context.mutex);

	return status;
	return status;
}
}


@@ -205,6 +204,7 @@ static enum mod_hdcp_status add_display_to_topology_v3(
	dtm_cmd->dtm_in_message.topology_update_v3.link_hdcp_cap = link->hdcp_supported_informational;
	dtm_cmd->dtm_in_message.topology_update_v3.link_hdcp_cap = link->hdcp_supported_informational;


	psp_dtm_invoke(psp, dtm_cmd->cmd_id);
	psp_dtm_invoke(psp, dtm_cmd->cmd_id);
	mutex_unlock(&psp->dtm_context.mutex);


	if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) {
	if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) {
		status = add_display_to_topology_v2(hdcp, display);
		status = add_display_to_topology_v2(hdcp, display);
@@ -214,8 +214,6 @@ static enum mod_hdcp_status add_display_to_topology_v3(
		HDCP_TOP_ADD_DISPLAY_TRACE(hdcp, display->index);
		HDCP_TOP_ADD_DISPLAY_TRACE(hdcp, display->index);
	}
	}


	mutex_unlock(&psp->dtm_context.mutex);

	return status;
	return status;
}
}