Skip to content

Commit 4fc3ad6

Browse files
committed
Merge tag 'amd-drm-fixes-6.18-2025-11-26' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes
amd-drm-fixes-6.18-2025-11-26: amdgpu: - Unified MES fix - HDMI fix - Cursor fix - Bightness fix - EDID reading improvement - UserQ fix - Cyan Skillfish IP discovery fix Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexander.deucher@amd.com> Link: https://patch.msgid.link/20251126204925.3316684-1-alexander.deucher@amd.com
2 parents b31e2e3 + 7fa666a commit 4fc3ad6

File tree

11 files changed

+36
-20
lines changed

11 files changed

+36
-20
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2638,6 +2638,8 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev)
26382638
chip_name = "navi12";
26392639
break;
26402640
case CHIP_CYAN_SKILLFISH:
2641+
if (adev->mman.discovery_bin)
2642+
return 0;
26412643
chip_name = "cyan_skillfish";
26422644
break;
26432645
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,9 @@ int amdgpu_gmc_allocate_vm_inv_eng(struct amdgpu_device *adev)
597597
/* reserve engine 5 for firmware */
598598
if (adev->enable_mes)
599599
vm_inv_engs[i] &= ~(1 << 5);
600+
/* reserve engine 6 for uni mes */
601+
if (adev->enable_uni_mes)
602+
vm_inv_engs[i] &= ~(1 << 6);
600603
/* reserve mmhub engine 3 for firmware */
601604
if (adev->enable_umsch_mm)
602605
vm_inv_engs[i] &= ~(1 << 3);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1066,7 +1066,7 @@ amdgpu_vm_tlb_flush(struct amdgpu_vm_update_params *params,
10661066
}
10671067

10681068
/* Prepare a TLB flush fence to be attached to PTs */
1069-
if (!params->unlocked && vm->is_compute_context) {
1069+
if (!params->unlocked) {
10701070
amdgpu_vm_tlb_fence_create(params->adev, vm, fence);
10711071

10721072
/* Makes sure no PD/PT is freed before the flush */

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5052,6 +5052,21 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
50525052
struct dc_link *link;
50535053
u32 brightness;
50545054
bool rc, reallow_idle = false;
5055+
struct drm_connector *connector;
5056+
5057+
list_for_each_entry(connector, &dm->ddev->mode_config.connector_list, head) {
5058+
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
5059+
5060+
if (aconnector->bl_idx != bl_idx)
5061+
continue;
5062+
5063+
/* if connector is off, save the brightness for next time it's on */
5064+
if (!aconnector->base.encoder) {
5065+
dm->brightness[bl_idx] = user_brightness;
5066+
dm->actual_brightness[bl_idx] = 0;
5067+
return;
5068+
}
5069+
}
50555070

50565071
amdgpu_dm_update_backlight_caps(dm, bl_idx);
50575072
caps = &dm->backlight_caps[bl_idx];

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -997,8 +997,8 @@ enum dc_edid_status dm_helpers_read_local_edid(
997997
struct amdgpu_dm_connector *aconnector = link->priv;
998998
struct drm_connector *connector = &aconnector->base;
999999
struct i2c_adapter *ddc;
1000-
int retry = 3;
1001-
enum dc_edid_status edid_status;
1000+
int retry = 25;
1001+
enum dc_edid_status edid_status = EDID_NO_RESPONSE;
10021002
const struct drm_edid *drm_edid;
10031003
const struct edid *edid;
10041004

@@ -1028,7 +1028,7 @@ enum dc_edid_status dm_helpers_read_local_edid(
10281028
}
10291029

10301030
if (!drm_edid)
1031-
return EDID_NO_RESPONSE;
1031+
continue;
10321032

10331033
edid = drm_edid_raw(drm_edid); // FIXME: Get rid of drm_edid_raw()
10341034
if (!edid ||
@@ -1046,7 +1046,7 @@ enum dc_edid_status dm_helpers_read_local_edid(
10461046
&sink->dc_edid,
10471047
&sink->edid_caps);
10481048

1049-
} while (edid_status == EDID_BAD_CHECKSUM && --retry > 0);
1049+
} while ((edid_status == EDID_BAD_CHECKSUM || edid_status == EDID_NO_RESPONSE) && --retry > 0);
10501050

10511051
if (edid_status != EDID_OK)
10521052
DRM_ERROR("EDID err: %d, on connector: %s",

drivers/gpu/drm/amd/display/dc/core/dc_stream.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -705,9 +705,14 @@ bool dc_stream_get_scanoutpos(const struct dc_stream_state *stream,
705705
{
706706
uint8_t i;
707707
bool ret = false;
708-
struct dc *dc = stream->ctx->dc;
709-
struct resource_context *res_ctx =
710-
&dc->current_state->res_ctx;
708+
struct dc *dc;
709+
struct resource_context *res_ctx;
710+
711+
if (!stream->ctx)
712+
return false;
713+
714+
dc = stream->ctx->dc;
715+
res_ctx = &dc->current_state->res_ctx;
711716

712717
dc_exit_ips_for_hw_access(dc);
713718

drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,6 @@ void dce110_enable_stream(struct pipe_ctx *pipe_ctx)
671671
uint32_t early_control = 0;
672672
struct timing_generator *tg = pipe_ctx->stream_res.tg;
673673

674-
link_hwss->setup_stream_attribute(pipe_ctx);
675674
link_hwss->setup_stream_encoder(pipe_ctx);
676675

677676
dc->hwss.update_info_frame(pipe_ctx);

drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3060,8 +3060,6 @@ void dcn20_enable_stream(struct pipe_ctx *pipe_ctx)
30603060
link_enc->transmitter - TRANSMITTER_UNIPHY_A);
30613061
}
30623062

3063-
link_hwss->setup_stream_attribute(pipe_ctx);
3064-
30653063
if (dc->res_pool->dccg->funcs->set_pixel_rate_div)
30663064
dc->res_pool->dccg->funcs->set_pixel_rate_div(
30673065
dc->res_pool->dccg,

drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -971,8 +971,6 @@ void dcn401_enable_stream(struct pipe_ctx *pipe_ctx)
971971
}
972972
}
973973

974-
link_hwss->setup_stream_attribute(pipe_ctx);
975-
976974
if (dc->res_pool->dccg->funcs->set_pixel_rate_div) {
977975
dc->res_pool->dccg->funcs->set_pixel_rate_div(
978976
dc->res_pool->dccg,

drivers/gpu/drm/amd/display/dc/link/link_dpms.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2458,6 +2458,7 @@ void link_set_dpms_on(
24582458
struct link_encoder *link_enc = pipe_ctx->link_res.dio_link_enc;
24592459
enum otg_out_mux_dest otg_out_dest = OUT_MUX_DIO;
24602460
struct vpg *vpg = pipe_ctx->stream_res.stream_enc->vpg;
2461+
const struct link_hwss *link_hwss = get_link_hwss(link, &pipe_ctx->link_res);
24612462
bool apply_edp_fast_boot_optimization =
24622463
pipe_ctx->stream->apply_edp_fast_boot_optimization;
24632464

@@ -2502,6 +2503,8 @@ void link_set_dpms_on(
25022503
pipe_ctx->stream_res.tg->funcs->set_out_mux(pipe_ctx->stream_res.tg, otg_out_dest);
25032504
}
25042505

2506+
link_hwss->setup_stream_attribute(pipe_ctx);
2507+
25052508
pipe_ctx->stream->apply_edp_fast_boot_optimization = false;
25062509

25072510
// Enable VPG before building infoframe

0 commit comments

Comments
 (0)