Skip to content

Commit 2312e0a

Browse files
committed
Merge tag 'amd-drm-fixes-6.19-2026-01-22' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes
amd-drm-fixes-6.19-2026-01-22: amdgpu: - GC 12 fix - Misc error path fixes - DC analog fix - SMU 6 fixes - TLB flush fix - DC idle optimization fix amdkfd: - GC 11 cooperative launch fix Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexander.deucher@amd.com> Link: https://patch.msgid.link/20260122204308.946339-1-alexander.deucher@amd.com
2 parents e63b922 + f377ea0 commit 2312e0a

9 files changed

Lines changed: 36 additions & 48 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -763,7 +763,7 @@ void amdgpu_fence_save_wptr(struct amdgpu_fence *af)
763763
}
764764

765765
static void amdgpu_ring_backup_unprocessed_command(struct amdgpu_ring *ring,
766-
u64 start_wptr, u32 end_wptr)
766+
u64 start_wptr, u64 end_wptr)
767767
{
768768
unsigned int first_idx = start_wptr & ring->buf_mask;
769769
unsigned int last_idx = end_wptr & ring->buf_mask;

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -733,8 +733,10 @@ int amdgpu_gmc_flush_gpu_tlb_pasid(struct amdgpu_device *adev, uint16_t pasid,
733733

734734
if (!adev->gmc.flush_pasid_uses_kiq || !ring->sched.ready) {
735735

736-
if (!adev->gmc.gmc_funcs->flush_gpu_tlb_pasid)
737-
return 0;
736+
if (!adev->gmc.gmc_funcs->flush_gpu_tlb_pasid) {
737+
r = 0;
738+
goto error_unlock_reset;
739+
}
738740

739741
if (adev->gmc.flush_tlb_needs_extra_type_2)
740742
adev->gmc.gmc_funcs->flush_gpu_tlb_pasid(adev, pasid,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned int num_ibs,
302302
if (job && job->vmid)
303303
amdgpu_vmid_reset(adev, ring->vm_hub, job->vmid);
304304
amdgpu_ring_undo(ring);
305-
return r;
305+
goto free_fence;
306306
}
307307
*f = &af->base;
308308
/* get a ref for the job */

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,11 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, struct amdgpu_vm *vm,
217217
if (!entity)
218218
return 0;
219219

220-
return drm_sched_job_init(&(*job)->base, entity, 1, owner,
221-
drm_client_id);
220+
r = drm_sched_job_init(&(*job)->base, entity, 1, owner, drm_client_id);
221+
if (!r)
222+
return 0;
223+
224+
kfree((*job)->hw_vm_fence);
222225

223226
err_fence:
224227
kfree((*job)->hw_fence);

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

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,6 @@ static void gfx_v12_0_select_se_sh(struct amdgpu_device *adev, u32 se_num,
278278
u32 sh_num, u32 instance, int xcc_id);
279279
static u32 gfx_v12_0_get_wgp_active_bitmap_per_sh(struct amdgpu_device *adev);
280280

281-
static void gfx_v12_0_ring_emit_frame_cntl(struct amdgpu_ring *ring, bool start, bool secure);
282281
static void gfx_v12_0_ring_emit_wreg(struct amdgpu_ring *ring, uint32_t reg,
283282
uint32_t val);
284283
static int gfx_v12_0_wait_for_rlc_autoload_complete(struct amdgpu_device *adev);
@@ -4634,16 +4633,6 @@ static int gfx_v12_0_ring_preempt_ib(struct amdgpu_ring *ring)
46344633
return r;
46354634
}
46364635

4637-
static void gfx_v12_0_ring_emit_frame_cntl(struct amdgpu_ring *ring,
4638-
bool start,
4639-
bool secure)
4640-
{
4641-
uint32_t v = secure ? FRAME_TMZ : 0;
4642-
4643-
amdgpu_ring_write(ring, PACKET3(PACKET3_FRAME_CONTROL, 0));
4644-
amdgpu_ring_write(ring, v | FRAME_CMD(start ? 0 : 1));
4645-
}
4646-
46474636
static void gfx_v12_0_ring_emit_rreg(struct amdgpu_ring *ring, uint32_t reg,
46484637
uint32_t reg_val_offs)
46494638
{
@@ -5520,7 +5509,6 @@ static const struct amdgpu_ring_funcs gfx_v12_0_ring_funcs_gfx = {
55205509
.emit_cntxcntl = gfx_v12_0_ring_emit_cntxcntl,
55215510
.init_cond_exec = gfx_v12_0_ring_emit_init_cond_exec,
55225511
.preempt_ib = gfx_v12_0_ring_preempt_ib,
5523-
.emit_frame_cntl = gfx_v12_0_ring_emit_frame_cntl,
55245512
.emit_wreg = gfx_v12_0_ring_emit_wreg,
55255513
.emit_reg_wait = gfx_v12_0_ring_emit_reg_wait,
55265514
.emit_reg_write_reg_wait = gfx_v12_0_ring_emit_reg_write_reg_wait,

drivers/gpu/drm/amd/amdkfd/kfd_debug.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,7 @@ static inline bool kfd_dbg_has_gws_support(struct kfd_node *dev)
120120
&& dev->kfd->mec2_fw_version < 0x1b6) ||
121121
(KFD_GC_VERSION(dev) == IP_VERSION(9, 4, 1)
122122
&& dev->kfd->mec2_fw_version < 0x30) ||
123-
(KFD_GC_VERSION(dev) >= IP_VERSION(11, 0, 0) &&
124-
KFD_GC_VERSION(dev) < IP_VERSION(12, 0, 0)))
123+
kfd_dbg_has_cwsr_workaround(dev))
125124
return false;
126125

127126
/* Assume debugging and cooperative launch supported otherwise. */

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

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,6 @@ static void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work)
248248
struct vblank_control_work *vblank_work =
249249
container_of(work, struct vblank_control_work, work);
250250
struct amdgpu_display_manager *dm = vblank_work->dm;
251-
struct amdgpu_device *adev = drm_to_adev(dm->ddev);
252-
int r;
253251

254252
mutex_lock(&dm->dc_lock);
255253

@@ -279,16 +277,7 @@ static void amdgpu_dm_crtc_vblank_control_worker(struct work_struct *work)
279277

280278
if (dm->active_vblank_irq_count == 0) {
281279
dc_post_update_surfaces_to_stream(dm->dc);
282-
283-
r = amdgpu_dpm_pause_power_profile(adev, true);
284-
if (r)
285-
dev_warn(adev->dev, "failed to set default power profile mode\n");
286-
287280
dc_allow_idle_optimizations(dm->dc, true);
288-
289-
r = amdgpu_dpm_pause_power_profile(adev, false);
290-
if (r)
291-
dev_warn(adev->dev, "failed to restore the power profile mode\n");
292281
}
293282

294283
mutex_unlock(&dm->dc_lock);

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -915,13 +915,19 @@ void amdgpu_dm_hpd_init(struct amdgpu_device *adev)
915915
struct amdgpu_dm_connector *amdgpu_dm_connector;
916916
const struct dc_link *dc_link;
917917

918-
use_polling |= connector->polled != DRM_CONNECTOR_POLL_HPD;
919-
920918
if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK)
921919
continue;
922920

923921
amdgpu_dm_connector = to_amdgpu_dm_connector(connector);
924922

923+
/*
924+
* Analog connectors may be hot-plugged unlike other connector
925+
* types that don't support HPD. Only poll analog connectors.
926+
*/
927+
use_polling |=
928+
amdgpu_dm_connector->dc_link &&
929+
dc_connector_supports_analog(amdgpu_dm_connector->dc_link->link_id.id);
930+
925931
dc_link = amdgpu_dm_connector->dc_link;
926932

927933
/*

drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2273,8 +2273,6 @@ static int si_populate_smc_tdp_limits(struct amdgpu_device *adev,
22732273
if (scaling_factor == 0)
22742274
return -EINVAL;
22752275

2276-
memset(smc_table, 0, sizeof(SISLANDS_SMC_STATETABLE));
2277-
22782276
ret = si_calculate_adjusted_tdp_limits(adev,
22792277
false, /* ??? */
22802278
adev->pm.dpm.tdp_adjustment,
@@ -2283,6 +2281,12 @@ static int si_populate_smc_tdp_limits(struct amdgpu_device *adev,
22832281
if (ret)
22842282
return ret;
22852283

2284+
if (adev->pdev->device == 0x6611 && adev->pdev->revision == 0x87) {
2285+
/* Workaround buggy powertune on Radeon 430 and 520. */
2286+
tdp_limit = 32;
2287+
near_tdp_limit = 28;
2288+
}
2289+
22862290
smc_table->dpm2Params.TDPLimit =
22872291
cpu_to_be32(si_scale_power_for_smc(tdp_limit, scaling_factor) * 1000);
22882292
smc_table->dpm2Params.NearTDPLimit =
@@ -2328,16 +2332,8 @@ static int si_populate_smc_tdp_limits_2(struct amdgpu_device *adev,
23282332

23292333
if (ni_pi->enable_power_containment) {
23302334
SISLANDS_SMC_STATETABLE *smc_table = &si_pi->smc_statetable;
2331-
u32 scaling_factor = si_get_smc_power_scaling_factor(adev);
23322335
int ret;
23332336

2334-
memset(smc_table, 0, sizeof(SISLANDS_SMC_STATETABLE));
2335-
2336-
smc_table->dpm2Params.NearTDPLimit =
2337-
cpu_to_be32(si_scale_power_for_smc(adev->pm.dpm.near_tdp_limit_adjusted, scaling_factor) * 1000);
2338-
smc_table->dpm2Params.SafePowerLimit =
2339-
cpu_to_be32(si_scale_power_for_smc((adev->pm.dpm.near_tdp_limit_adjusted * SISLANDS_DPM2_TDP_SAFE_LIMIT_PERCENT) / 100, scaling_factor) * 1000);
2340-
23412337
ret = amdgpu_si_copy_bytes_to_smc(adev,
23422338
(si_pi->state_table_start +
23432339
offsetof(SISLANDS_SMC_STATETABLE, dpm2Params) +
@@ -3473,10 +3469,15 @@ static void si_apply_state_adjust_rules(struct amdgpu_device *adev,
34733469
(adev->pdev->revision == 0x80) ||
34743470
(adev->pdev->revision == 0x81) ||
34753471
(adev->pdev->revision == 0x83) ||
3476-
(adev->pdev->revision == 0x87) ||
3472+
(adev->pdev->revision == 0x87 &&
3473+
adev->pdev->device != 0x6611) ||
34773474
(adev->pdev->device == 0x6604) ||
34783475
(adev->pdev->device == 0x6605)) {
34793476
max_sclk = 75000;
3477+
} else if (adev->pdev->revision == 0x87 &&
3478+
adev->pdev->device == 0x6611) {
3479+
/* Radeon 430 and 520 */
3480+
max_sclk = 78000;
34803481
}
34813482
}
34823483

@@ -7600,12 +7601,12 @@ static int si_dpm_set_interrupt_state(struct amdgpu_device *adev,
76007601
case AMDGPU_IRQ_STATE_DISABLE:
76017602
cg_thermal_int = RREG32_SMC(mmCG_THERMAL_INT);
76027603
cg_thermal_int |= CG_THERMAL_INT__THERM_INT_MASK_HIGH_MASK;
7603-
WREG32_SMC(mmCG_THERMAL_INT, cg_thermal_int);
7604+
WREG32(mmCG_THERMAL_INT, cg_thermal_int);
76047605
break;
76057606
case AMDGPU_IRQ_STATE_ENABLE:
76067607
cg_thermal_int = RREG32_SMC(mmCG_THERMAL_INT);
76077608
cg_thermal_int &= ~CG_THERMAL_INT__THERM_INT_MASK_HIGH_MASK;
7608-
WREG32_SMC(mmCG_THERMAL_INT, cg_thermal_int);
7609+
WREG32(mmCG_THERMAL_INT, cg_thermal_int);
76097610
break;
76107611
default:
76117612
break;
@@ -7617,12 +7618,12 @@ static int si_dpm_set_interrupt_state(struct amdgpu_device *adev,
76177618
case AMDGPU_IRQ_STATE_DISABLE:
76187619
cg_thermal_int = RREG32_SMC(mmCG_THERMAL_INT);
76197620
cg_thermal_int |= CG_THERMAL_INT__THERM_INT_MASK_LOW_MASK;
7620-
WREG32_SMC(mmCG_THERMAL_INT, cg_thermal_int);
7621+
WREG32(mmCG_THERMAL_INT, cg_thermal_int);
76217622
break;
76227623
case AMDGPU_IRQ_STATE_ENABLE:
76237624
cg_thermal_int = RREG32_SMC(mmCG_THERMAL_INT);
76247625
cg_thermal_int &= ~CG_THERMAL_INT__THERM_INT_MASK_LOW_MASK;
7625-
WREG32_SMC(mmCG_THERMAL_INT, cg_thermal_int);
7626+
WREG32(mmCG_THERMAL_INT, cg_thermal_int);
76267627
break;
76277628
default:
76287629
break;

0 commit comments

Comments
 (0)