History

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

Dave Airlie committed 3 years ago

Commit 00a4bd02 parents 3b1f2be 0b5dfe15 files · +42 −4Browse files

Unified · Split

5 files
  1. drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c +3 −0
  2. drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c +14 −3
  3. drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c +20 −0
  4. drivers/gpu/drm/amd/display/dc/dml/dcn31/dcn31_fpu.c +1 −1
  5. drivers/gpu/drm/amd/display/modules/power/power_helpers.c +4 −0
drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c+3−0
@@ -596,6 +596,9 @@ int amdgpu_irq_put(struct amdgpu_device *adev, struct amdgpu_irq_src *src, · 595 unmodified lines
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+14−3
@@ -169,10 +169,21 @@ static inline int dm_set_vblank(struct drm_crtc *crtc, bool enable) · 168 unmodified lines
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+20−0
@@ -1697,6 +1697,23 @@ static void dcn314_get_panel_config_defaults(struct dc_panel_config *panel_confi · 1696 unmodified lines
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, · 9 unmodified lines
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+1−1
@@ -222,7 +222,7 @@ struct _vcs_dpi_ip_params_st dcn3_15_ip = { · 221 unmodified lines
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+4−0
@@ -934,6 +934,10 @@ bool psr_su_set_dsc_slice_height(struct dc *dc, struct dc_link *link, · 933 unmodified lines
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

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t