Commit aee43aaf authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'amd-drm-fixes-7.1-2026-05-20' of...

Merge tag 'amd-drm-fixes-7.1-2026-05-20' of https://gitlab.freedesktop.org/agd5f/linux

 into drm-fixes

amd-drm-fixes-7.1-2026-05-20:

amdgpu:
- Userq fixes
- VPE fix
- SMU 15 fix
- Misc fixes
- VCE fixes
- DC bios parsing fixes
- DC aux fix
- Mode1 reset fix
- RAS fixes

amdkfd:
- Misc fixes

radeon:
- CS parser fix

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

From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patch.msgid.link/20260520181359.28421-1-alexander.deucher@amd.com
parents 30afd245 b6fe4ff3
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -1190,7 +1190,6 @@ struct amdgpu_device {
	bool                            apu_prefer_gtt;

	bool                            userq_halt_for_enforce_isolation;
	struct work_struct              userq_reset_work;
	struct amdgpu_uid *uid_info;

	struct amdgpu_uma_carveout_info uma_info;
+25 −0
Original line number Diff line number Diff line
@@ -36,6 +36,9 @@
#include "amdgpu_ras.h"
#include "amdgpu_umc.h"
#include "amdgpu_reset.h"
#if IS_ENABLED(CONFIG_HSA_AMD)
#include "kfd_priv.h"
#endif

/* Total memory size in system memory and all GPU VRAM. Used to
 * estimate worst case amount of memory to reserve for page tables
@@ -320,6 +323,28 @@ void amdgpu_amdkfd_gpu_reset(struct amdgpu_device *adev)
		(void)amdgpu_reset_domain_schedule(adev->reset_domain, &adev->kfd.reset_work);
}

void amdgpu_amdkfd_clear_kfd_mapping(struct amdgpu_device *adev)
{
#if IS_ENABLED(CONFIG_HSA_AMD)
	struct kfd_dev *kfd = adev->kfd.dev;
	unsigned int i;

	if (!kfd)
		return;

	for (i = 0; i < kfd->num_nodes; i++) {
		struct kfd_node *node = kfd->nodes[i];

		kfd_dev_unmap_mapping_range(KFD_MMAP_TYPE_DOORBELL |
					    KFD_MMAP_GPU_ID(node->id),
					    kfd_doorbell_process_slice(kfd));
		kfd_dev_unmap_mapping_range(KFD_MMAP_TYPE_MMIO |
					    KFD_MMAP_GPU_ID(node->id),
					    PAGE_SIZE);
	}
#endif
}

int amdgpu_amdkfd_alloc_kernel_mem(struct amdgpu_device *adev, size_t size,
				u32 domain, void **mem_obj, uint64_t *gpu_addr,
				void **cpu_ptr, bool cp_mqd_gfx9)
+1 −0
Original line number Diff line number Diff line
@@ -358,6 +358,7 @@ int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
		uint64_t size, u32 alloc_flag, int8_t xcp_id);
void amdgpu_amdkfd_unreserve_mem_limit(struct amdgpu_device *adev,
		uint64_t size, u32 alloc_flag, int8_t xcp_id);
void amdgpu_amdkfd_clear_kfd_mapping(struct amdgpu_device *adev);

u64 amdgpu_amdkfd_xcp_memory_size(struct amdgpu_device *adev, int xcp_id);

+7 −2
Original line number Diff line number Diff line
@@ -3787,7 +3787,6 @@ int amdgpu_device_init(struct amdgpu_device *adev,
	}

	INIT_WORK(&adev->xgmi_reset_work, amdgpu_device_xgmi_reset_func);
	INIT_WORK(&adev->userq_reset_work, amdgpu_userq_reset_work);

	amdgpu_coredump_init(adev);

@@ -5478,7 +5477,7 @@ static inline void amdgpu_device_stop_pending_resets(struct amdgpu_device *adev)
	if (!amdgpu_sriov_vf(adev))
		cancel_work(&adev->reset_work);
#endif
	cancel_work(&adev->userq_reset_work);
	amdgpu_userq_mgr_cancel_reset_work(adev);

	if (adev->kfd.dev)
		cancel_work(&adev->kfd.reset_work);
@@ -5836,6 +5835,12 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
	/* We need to lock reset domain only once both for XGMI and single device */
	amdgpu_device_recovery_get_reset_lock(adev, &device_list);

	/* unmap all the mappings of doorbell and framebuffer to prevent user space from
	 * accessing them
	 */
	unmap_mapping_range(adev->ddev.anon_inode->i_mapping, 0, 0, 1);
	amdgpu_amdkfd_clear_kfd_mapping(adev);

	amdgpu_device_halt_activities(adev, job, reset_context, &device_list,
				      hive, need_emergency_restart);
	if (need_emergency_restart)
+1 −1
Original line number Diff line number Diff line
@@ -304,7 +304,7 @@ static int amdgpu_discovery_get_tmr_info(struct amdgpu_device *adev,
				adev->virt.crit_regn_tbl[AMD_SRIOV_MSG_IPD_TABLE_ID].offset;
			adev->discovery.size =
				adev->virt.crit_regn_tbl[AMD_SRIOV_MSG_IPD_TABLE_ID].size_kb << 10;
			if (!adev->discovery.offset || !adev->discovery.size)
			if (!adev->discovery.size)
				return -EINVAL;
		} else {
			goto out;
Loading