Commit 46eb784f authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'amd-drm-fixes-6.19-2025-12-17' of...

Merge tag 'amd-drm-fixes-6.19-2025-12-17' of https://gitlab.freedesktop.org/agd5f/linux

 into drm-fixes

amd-drm-fixes-6.19-2025-12-17:

amdgpu:
- Fix no_console_suspend handling
- DCN 3.5.x seamless boot fixes
- DP audio fix
- Fix race in GPU recovery
- SMU 14 OD fix

amdkfd:
- Event fix

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patch.msgid.link/20251217171821.2033671-1-alexander.deucher@amd.com
parents 8f0b4cce 969faea4
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -6613,6 +6613,8 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
	struct amdgpu_hive_info *hive = NULL;
	int r = 0;
	bool need_emergency_restart = false;
	/* save the pasid here as the job may be freed before the end of the reset */
	int pasid = job ? job->pasid : -EINVAL;

	/*
	 * If it reaches here because of hang/timeout and a RAS error is
@@ -6713,8 +6715,12 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
	if (!r) {
		struct amdgpu_task_info *ti = NULL;

		if (job)
			ti = amdgpu_vm_get_task_info_pasid(adev, job->pasid);
		/*
		 * The job may already be freed at this point via the sched tdr workqueue so
		 * use the cached pasid.
		 */
		if (pasid >= 0)
			ti = amdgpu_vm_get_task_info_pasid(adev, pasid);

		drm_dev_wedged_event(adev_to_drm(adev), DRM_WEDGE_RECOVERY_NONE,
				     ti ? &ti->task : NULL);
+4 −1
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include <drm/drm_vblank.h>

#include <linux/cc_platform.h>
#include <linux/console.h>
#include <linux/dynamic_debug.h>
#include <linux/module.h>
#include <linux/mmu_notifier.h>
@@ -2704,7 +2705,9 @@ static int amdgpu_pmops_thaw(struct device *dev)
	struct drm_device *drm_dev = dev_get_drvdata(dev);

	/* do not resume device if it's normal hibernation */
	if (!pm_hibernate_is_recovering() && !pm_hibernation_mode_is_suspend())
	if (console_suspend_enabled &&
	    !pm_hibernate_is_recovering() &&
	    !pm_hibernation_mode_is_suspend())
		return 0;

	return amdgpu_device_resume(drm_dev, true);
+1 −1
Original line number Diff line number Diff line
@@ -312,7 +312,7 @@ void kfd_smi_event_queue_restore(struct kfd_node *node, pid_t pid)
{
	kfd_smi_event_add(pid, node, KFD_SMI_EVENT_QUEUE_RESTORE,
			  KFD_EVENT_FMT_QUEUE_RESTORE(ktime_get_boottime_ns(), pid,
			  node->id, 0));
			  node->id, '0'));
}

void kfd_smi_event_queue_restore_rescheduled(struct mm_struct *mm)
+4 −4
Original line number Diff line number Diff line
@@ -1118,13 +1118,13 @@ void dce110_enable_audio_stream(struct pipe_ctx *pipe_ctx)
			if (dc->current_state->res_ctx.pipe_ctx[i].stream_res.audio != NULL)
				num_audio++;
		}
		if (num_audio >= 1 && clk_mgr->funcs->enable_pme_wa) {
			/*wake AZ from D3 first before access az endpoint*/
			clk_mgr->funcs->enable_pme_wa(clk_mgr);
		}

		pipe_ctx->stream_res.audio->funcs->az_enable(pipe_ctx->stream_res.audio);

		if (num_audio >= 1 && clk_mgr->funcs->enable_pme_wa)
			/*this is the first audio. apply the PME w/a in order to wake AZ from D3*/
			clk_mgr->funcs->enable_pme_wa(clk_mgr);

		link_hwss->enable_audio_packet(pipe_ctx);

		if (pipe_ctx->stream_res.audio)
+4 −4
Original line number Diff line number Diff line
@@ -203,12 +203,12 @@ enum dcn35_clk_src_array_id {
	NBIO_BASE_INNER(seg)

#define NBIO_SR(reg_name)\
	REG_STRUCT.reg_name = NBIO_BASE(regBIF_BX2_ ## reg_name ## _BASE_IDX) + \
				regBIF_BX2_ ## reg_name
	REG_STRUCT.reg_name = NBIO_BASE(regBIF_BX1_ ## reg_name ## _BASE_IDX) + \
				regBIF_BX1_ ## reg_name

#define NBIO_SR_ARR(reg_name, id)\
	REG_STRUCT[id].reg_name = NBIO_BASE(regBIF_BX2_ ## reg_name ## _BASE_IDX) + \
		regBIF_BX2_ ## reg_name
	REG_STRUCT[id].reg_name = NBIO_BASE(regBIF_BX1_ ## reg_name ## _BASE_IDX) + \
		regBIF_BX1_ ## reg_name

#define bios_regs_init() \
		( \
Loading