Skip to content

Commit 00a4bd0

Browse files
committed
Merge tag 'amd-drm-fixes-6.3-2023-04-19' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes
amd-drm-fixes-6.3-2023-04-19: amdgpu: - GPU reset fix - DCN 3.1.5 line buffer fix - Display fix for single channel memory configs - Fix a possible divide by 0 Signed-off-by: Dave Airlie <[email protected]> From: Alex Deucher <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 3b1f2be + 0b5dfe1 commit 00a4bd0

File tree

5 files changed

+42
-4
lines changed

5 files changed

+42
-4
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,9 @@ int amdgpu_irq_put(struct amdgpu_device *adev, struct amdgpu_irq_src *src,
596596
if (!src->enabled_types || !src->funcs->set)
597597
return -EINVAL;
598598

599+
if (WARN_ON(!amdgpu_irq_enabled(adev, src, type)))
600+
return -EINVAL;
601+
599602
if (atomic_dec_and_test(&src->enabled_types[type]))
600603
return amdgpu_irq_update(adev, src, type);
601604

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,21 @@ static inline int dm_set_vblank(struct drm_crtc *crtc, bool enable)
169169
if (rc)
170170
return rc;
171171

172-
irq_source = IRQ_TYPE_VBLANK + acrtc->otg_inst;
172+
if (amdgpu_in_reset(adev)) {
173+
irq_source = IRQ_TYPE_VBLANK + acrtc->otg_inst;
174+
/* During gpu-reset we disable and then enable vblank irq, so
175+
* don't use amdgpu_irq_get/put() to avoid refcount change.
176+
*/
177+
if (!dc_interrupt_set(adev->dm.dc, irq_source, enable))
178+
rc = -EBUSY;
179+
} else {
180+
rc = (enable)
181+
? amdgpu_irq_get(adev, &adev->crtc_irq, acrtc->crtc_id)
182+
: amdgpu_irq_put(adev, &adev->crtc_irq, acrtc->crtc_id);
183+
}
173184

174-
if (!dc_interrupt_set(adev->dm.dc, irq_source, enable))
175-
return -EBUSY;
185+
if (rc)
186+
return rc;
176187

177188
skip:
178189
if (amdgpu_in_reset(adev))

drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1697,6 +1697,23 @@ static void dcn314_get_panel_config_defaults(struct dc_panel_config *panel_confi
16971697
*panel_config = panel_config_defaults;
16981698
}
16991699

1700+
static bool filter_modes_for_single_channel_workaround(struct dc *dc,
1701+
struct dc_state *context)
1702+
{
1703+
// Filter 2K@240Hz+8K@24fps above combination timing if memory only has single dimm LPDDR
1704+
if (dc->clk_mgr->bw_params->vram_type == 34 && dc->clk_mgr->bw_params->num_channels < 2) {
1705+
int total_phy_pix_clk = 0;
1706+
1707+
for (int i = 0; i < context->stream_count; i++)
1708+
if (context->res_ctx.pipe_ctx[i].stream)
1709+
total_phy_pix_clk += context->res_ctx.pipe_ctx[i].stream->phy_pix_clk;
1710+
1711+
if (total_phy_pix_clk >= (1148928+826260)) //2K@240Hz+8K@24fps
1712+
return true;
1713+
}
1714+
return false;
1715+
}
1716+
17001717
bool dcn314_validate_bandwidth(struct dc *dc,
17011718
struct dc_state *context,
17021719
bool fast_validate)
@@ -1712,6 +1729,9 @@ bool dcn314_validate_bandwidth(struct dc *dc,
17121729

17131730
BW_VAL_TRACE_COUNT();
17141731

1732+
if (filter_modes_for_single_channel_workaround(dc, context))
1733+
goto validate_fail;
1734+
17151735
DC_FP_START();
17161736
// do not support self refresh only
17171737
out = dcn30_internal_validate_bw(dc, context, pipes, &pipe_cnt, &vlevel, fast_validate, false);

drivers/gpu/drm/amd/display/dc/dml/dcn31/dcn31_fpu.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ struct _vcs_dpi_ip_params_st dcn3_15_ip = {
222222
.maximum_dsc_bits_per_component = 10,
223223
.dsc422_native_support = false,
224224
.is_line_buffer_bpp_fixed = true,
225-
.line_buffer_fixed_bpp = 49,
225+
.line_buffer_fixed_bpp = 48,
226226
.line_buffer_size_bits = 789504,
227227
.max_line_buffer_lines = 12,
228228
.writeback_interface_buffer_size_kbytes = 90,

drivers/gpu/drm/amd/display/modules/power/power_helpers.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -934,6 +934,10 @@ bool psr_su_set_dsc_slice_height(struct dc *dc, struct dc_link *link,
934934

935935
pic_height = stream->timing.v_addressable +
936936
stream->timing.v_border_top + stream->timing.v_border_bottom;
937+
938+
if (stream->timing.dsc_cfg.num_slices_v == 0)
939+
return false;
940+
937941
slice_height = pic_height / stream->timing.dsc_cfg.num_slices_v;
938942
config->dsc_slice_height = slice_height;
939943

0 commit comments

Comments
 (0)