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

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
...@@ -487,7 +487,7 @@ static ssize_t dp_phy_settings_write(struct file *f, const char __user *buf, ...@@ -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 ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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 ...@@ -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, ...@@ -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)) {
......
...@@ -518,14 +518,21 @@ static unsigned int find_clk_for_voltage( ...@@ -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(
......
...@@ -105,6 +105,7 @@ static enum mod_hdcp_status remove_display_from_topology_v3( ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment