GPU reset when running the ROCm hsa runtime tests on gfx12 and next-20260701
Subsystems (4)
When running the ROCm hsa selftests on debian unstable (with ROCm packages from experimental) with linux next-20260701, the GPU will reset with the following error message:
$ /usr/libexec/rocm/libhsa-runtime64-tests/run-tests
[ T2548] amdgpu 0000:03:00.0: failed to suspend gangs from MES
[ T2548] amdgpu 0000:03:00.0: MES might be in unrecoverable state, issue a GPU reset [ T360] amdgpu 0000:03:00.0: GPU reset begin!. Source: 3
[T28252] amdgpu 0000:03:00.0: Failed to evict queue 0
[T28252] amdgpu: Failed to quiesce KFD
[ T360] amdgpu 0000:03:00.0: Dumping IP State [ T360] amdgpu 0000:03:00.0: Dumping IP State Completed [ T360] amdgpu 0000:03:00.0: MODE1 reset [ T360] amdgpu 0000:03:00.0: GPU mode1 reset [ T360] amdgpu 0000:03:00.0: GPU smu mode1 reset [ T360] amdgpu 0000:03:00.0: GPU reset succeeded, trying to resume [drm] PCIE GART of 512M enabled (table at 0x00000083DAB00000). [drm] AMDGPU device coredump file has been created [drm] Check your /sys/class/drm/card0/device/devcoredump/data [ T360] amdgpu 0000:03:00.0: VRAM is lost due to GPU reset! [ T360] amdgpu 0000:03:00.0: PSP is resuming... [ T360] amdgpu 0000:03:00.0: RAS: optional ras ta ucode is not available [ T360] amdgpu 0000:03:00.0: RAP: optional rap ta ucode is not available [ T360] amdgpu 0000:03:00.0: SECUREDISPLAY: optional securedisplay ta ucode is not available [ T360] amdgpu 0000:03:00.0: SMU is resuming... [ T360] amdgpu 0000:03:00.0: SMU is resumed successfully! [ T360] amdgpu 0000:03:00.0: program CP_MES_CNTL : 0x4000000 [ T360] amdgpu 0000:03:00.0: program CP_MES_CNTL : 0xc000000 [drm] DMUB hardware initialized: version=0x00010300 [ T360] amdgpu 0000:03:00.0: ring gfx_0.0.0 uses VM inv eng 0 on hub 0 [ T360] amdgpu 0000:03:00.0: ring comp_1.0.0 uses VM inv eng 1 on hub 0 [ T360] amdgpu 0000:03:00.0: ring comp_1.1.0 uses VM inv eng 4 on hub 0 [ T360] amdgpu 0000:03:00.0: ring comp_1.0.1 uses VM inv eng 7 on hub 0 [ T360] amdgpu 0000:03:00.0: ring comp_1.1.1 uses VM inv eng 8 on hub 0 [ T360] amdgpu 0000:03:00.0: ring sdma0 uses VM inv eng 9 on hub 0 [ T360] amdgpu 0000:03:00.0: ring sdma1 uses VM inv eng 10 on hub 0 [ T360] amdgpu 0000:03:00.0: ring vcn_unified_0 uses VM inv eng 0 on hub 8 [ T360] amdgpu 0000:03:00.0: ring jpeg_dec uses VM inv eng 1 on hub 8 [ T360] amdgpu 0000:03:00.0: GPU reset(1) succeeded!
[drm] device wedged, but no recovery needed
[ T2050] amdgpu 0000:03:00.0: VM memory stats for proc xfwm4(2105) task xfwm4:cs0(2050) is non-zero when fini [ T1932] amdgpu 0000:03:00.0: VM memory stats for proc (0) task (0) is non-zero when fini
[ T2293] amdgpu 0000:03:00.0: VM memory stats for proc (0) task (0) is non-zero when fini
[ T1929] amdgpu 0000:03:00.0: VM memory stats for proc (0) task (0) is non-zero when fini
[ T1930] amdgpu 0000:03:00.0: VM memory stats for proc (0) task (0) is non-zero when fini
[ T2263] amdgpu 0000:03:00.0: VM memory stats for proc firefox-esr(3483) task firefox-es:cs0(2263) is non-zero when fini [ T3590] amdgpu 0000:03:00.0: VM memory stats for proc RDD Process(4755) task firefox-es:cs0(3590) is non-zero when fini [ T1469] amdgpu 0000:03:00.0: VM memory stats for proc Xorg(1495) task Xorg:cs0(1469) is non-zero when fini
As this does not occur on v7.2-rc1 I bisected the issue and found
commit f94bbd648bb4 ("drm/amdgpu: use a single entry point for mes compute reset") as responsible.
Unfortunately the does not revert cleanly in linux-next-20260701, so I had to revert these commits to fix the issue in next-20260701:
b789664e3e30 ("drm/amdkfd: Clean up suspend_all and resume_all mes") a665d09b10af ("drm/amdkfd: Pass known bad queue info to reset") a4e4d945cba8 ("drm/amdgpu/gfx: defer per-queue helper_end until after MES resume") f401a2633e02 ("drm/amdgpu: Remove faulty queue before resume") f94bbd648bb4 ("drm/amdgpu: use a single entry point for mes compute reset")
GPU used:
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 44 [Radeon RX 9060 XT] [1002:7590] (rev c0) CPU used:
model name : AMD Ryzen 9 9950X 16-Core Processor
Installed ROCm packages (from debian experimental)
bert@homer:~$ dpkg -l | grep 7.2.4 ii hip-utils 7.2.4-1~exp1 amd64 utilities for HIP language development ii hipcc 7.2.4+dfsg-1~exp1 amd64 C++ Runtime API and Kernel Language for AMD and NVIDIA GPUs ii libamd-comgr-dev 7.2.4+dfsg-1~exp1 amd64 ROCm code object manager - development package ii libamd-comgr3:amd64 7.2.4+dfsg-1~exp1 amd64 ROCm code object manager ii libamdhip64-7:amd64 7.2.4-1~exp1 amd64 HIP runtime for AMD GPUs - library ii libamdhip64-dev 7.2.4-1~exp1 amd64 HIP runtime for AMD GPUs - headers ii libhiprtc-builtins7:amd64 7.2.4-1~exp1 amd64 HIP runtime compilation library - builtins ii libhiprtc7:amd64 7.2.4-1~exp1 amd64 HIP runtime compilation library ii libhsa-runtime-dev:amd64 7.2.4+dfsg-1~exp1 amd64 HSA Runtime API and runtime for ROCm - development files ii libhsa-runtime64-1:amd64 7.2.4+dfsg-1~exp1 amd64 HSA Runtime API and runtime for ROCm ii libhsa-runtime64-tests 7.2.4+dfsg-1~exp1 amd64 HSA Runtime test suites for ROCm ii librocblas-dev 7.2.4-1~exp1 amd64 ROCm library for basic linear algebra - headers ii librocblas-doc 7.2.4-1~exp1 all ROCm library for basic linear algebra - documentation ii librocblas5 7.2.4-1~exp1 amd64 ROCm library for basic linear algebra - library ii librocblas5-bench 7.2.4-1~exp1 amd64 ROCm library for basic linear algebra - benchmarks ii librocblas5-tests 7.2.4-1~exp1 amd64 ROCm library for basic linear algebra - tests ii librocblas5-tests-data 7.2.4-1~exp1 all ROCm library for basic linear algebra - test data ii librocm-core-dev 7.2.4-1~exp1 amd64 provides methods to get information about installed ROCm - headers ii librocm-core1 7.2.4-1~exp1 amd64 provides methods to get information about installed ROCm ii librocm-smi64-7 7.2.4-1~exp1 amd64 ROCm System Management Interface (ROCm SMI) library ii librocsolver-dev 7.2.4-1~exp1 amd64 ROCm library for numerical linear algebra - headers ii librocsolver0 7.2.4-1~exp1 amd64 ROCm library for numerical linear algebra - library ii librocsolver0-tests 7.2.4-1~exp1 amd64 ROCm library for numerical linear algebra - tests ii libroctx64-4 7.2.4-1~exp1 amd64 ROCm library for profiler annotations - library ii rocm-device-libs-22 7.2.4+dfsg-1~exp1 amd64 AMD specific device-side language runtime libraries ii rocm-opencl-icd:amd64 7.2.4-1~exp1 amd64 AMD ROCm implementation of the OpenCL API - ICD runtime ii rocminfo 7.2.4-1~exp1 amd64 ROCm Application for Reporting System Info
Bert Karwatzki
I identified the problem inf94bbd648bb4 ("drm/amdgpu: use a single entry point for mes compute reset") it's reset_queues_mes() being called unconditionally. f94bbd648bb4 can be fixed like this:
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +10 -7
@@ -484,15 +484,18 @@ static int suspend_all_queues_mes(struct device_queue_manager *dqm)if (!down_read_trylock (&adev->reset_domain->sem))return -EIO ; + r =amdgpu_mes_suspend (adev,ffs (dqm->dev->xcc_mask) -1 ); -if (!reset_queues_mes (dqm)) { - r =0 ; - goto out; - } +if (r) { +if (!reset_queues_mes (dqm)) { + r =0 ; + goto out; + } -dev_err (adev->dev,"failed to suspend gangs from MES\n" ); -dev_err (adev->dev,"MES might be in unrecoverable state, issue a GPU reset\n" ); -kfd_hws_hang (dqm); +dev_err (adev->dev,"failed to suspend gangs from MES\n" ); +dev_err (adev->dev,"MES might be in unrecoverable state, issue a GPU reset\n" ); +kfd_hws_hang (dqm); + } out:up_read (&adev->reset_domain->sem);
But when I try to fix next-20260701 like this
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +4 -1
@@ -493,7 +493,10 @@ static int recover_bad_queue_mes(struct device_queue_manager *dqm, struct queueif (!down_read_trylock (&adev->reset_domain->sem))return -EIO ; - r =reset_queues_mes (dqm, q); + r =amdgpu_mes_suspend (adev,ffs (dqm->dev->xcc_mask) -1 ); + +if (r) + r =reset_queues_mes (dqm, q);up_read (&adev->reset_domain->sem);return r;
I still get GPUVM errors (but no GPU reset) and when running
$ /usr/libexec/rocm/libhsa-runtime64-tests/run-tests
[ 146.577245] [ T418] amdgpu 0000:03:00.0: [gfxhub] page fault (src_id:0 ring:157 vmid:0 pasid:0) [ 146.577247] [ T418] amdgpu 0000:03:00.0: in page starting at address 0x00000000002ba000 from client 10 [ 146.577248] [ T418] amdgpu 0000:03:00.0: GCVM_L2_PROTECTION_FAULT_STATUS:0x00000B3A [ 146.577249] [ T418] amdgpu 0000:03:00.0: Faulty UTCL2 client ID: CPC (0x5) [ 146.577249] [ T418] amdgpu 0000:03:00.0: MORE_FAULTS: 0x0 [ 146.577250] [ T418] amdgpu 0000:03:00.0: WALKER_ERROR: 0x5 [ 146.577250] [ T418] amdgpu 0000:03:00.0: PERMISSION_FAULTS: 0x3 [ 146.577250] [ T418] amdgpu 0000:03:00.0: MAPPING_ERROR: 0x1 [ 146.577251] [ T418] amdgpu 0000:03:00.0: RW: 0x0 [ 146.577606] [ T418] amdgpu 0000:03:00.0: [gfxhub] page fault (src_id:0 ring:157 vmid:0 pasid:0) [ 146.577608] [ T418] amdgpu 0000:03:00.0: in page starting at address 0x00000000002ba000 from client 10 [ 146.577609] [ T418] amdgpu 0000:03:00.0: GCVM_L2_PROTECTION_FAULT_STATUS:0x00000B3A [ 146.577609] [ T418] amdgpu 0000:03:00.0: Faulty UTCL2 client ID: CPC (0x5) [ 146.577610] [ T418] amdgpu 0000:03:00.0: MORE_FAULTS: 0x0 [ 146.577611] [ T418] amdgpu 0000:03:00.0: WALKER_ERROR: 0x5 [ 146.577611] [ T418] amdgpu 0000:03:00.0: PERMISSION_FAULTS: 0x3 [ 146.577611] [ T418] amdgpu 0000:03:00.0: MAPPING_ERROR: 0x1 [ 146.577612] [ T418] amdgpu 0000:03:00.0: RW: 0x0
This means there's at least another error in these commits (reverting all these in next-20260701 fixes the issue)
b789664e3e30 ("drm/amdkfd: Clean up suspend_all and resume_all mes") a665d09b10af ("drm/amdkfd: Pass known bad queue info to reset") a4e4d945cba8 ("drm/amdgpu/gfx: defer per-queue helper_end until after MES resume") f401a2633e02 ("drm/amdgpu: Remove faulty queue before resume") f94bbd648bb4 ("drm/amdgpu: use a single entry point for mes compute reset")
Bert Karwatzki
Am Sonntag, dem 05.07.2026 um 02:35 +0200 schrieb Bert Karwatzki:
Quoted 82 lines
I identified the problem in
f94bbd648bb4("drm/amdgpu: use a single entry point for mes compute reset") it'sreset_queues_mes()being called unconditionally.f94bbd648bb4can be fixed like this:drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +10
-7@@ -484,15 +484,18 @@ static int suspend_all_queues_mes(struct device_queue_manager *dqm)if (!down_read_trylock (&adev->reset_domain->sem))return -EIO ; + r =amdgpu_mes_suspend (adev,ffs (dqm->dev->xcc_mask) -1 ); -if (!reset_queues_mes (dqm)) { - r =0 ; - goto out; - } +if (r) { +if (!reset_queues_mes (dqm)) { + r =0 ; + goto out; + } -dev_err (adev->dev,"failed to suspend gangs from MES\n" ); -dev_err (adev->dev,"MES might be in unrecoverable state, issue a GPU reset\n" ); -kfd_hws_hang (dqm); +dev_err (adev->dev,"failed to suspend gangs from MES\n" ); +dev_err (adev->dev,"MES might be in unrecoverable state, issue a GPU reset\n" ); +kfd_hws_hang (dqm); + } out:up_read (&adev->reset_domain->sem);But when I try to fix next-20260701 like this
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +4
-1@@ -493,7 +493,10 @@ static int recover_bad_queue_mes(struct device_queue_manager *dqm, struct queueif (!down_read_trylock (&adev->reset_domain->sem))return -EIO ; - r =reset_queues_mes (dqm, q); + r =amdgpu_mes_suspend (adev,ffs (dqm->dev->xcc_mask) -1 ); + +if (r) + r =reset_queues_mes (dqm, q);up_read (&adev->reset_domain->sem);return r;I still get GPUVM errors (but no GPU reset) and when running
$ /usr/libexec/rocm/libhsa-runtime64-tests/run-tests[ 146.577245] [ T418] amdgpu 0000:03:00.0: [gfxhub] page fault (src_id:0 ring:157 vmid:0 pasid:0) [ 146.577247] [ T418] amdgpu 0000:03:00.0: in page starting at address 0x00000000002ba000 from client 10 [ 146.577248] [ T418] amdgpu 0000:03:00.0: GCVM_L2_PROTECTION_FAULT_STATUS:0x00000B3A [ 146.577249] [ T418] amdgpu 0000:03:00.0: Faulty UTCL2 client ID: CPC (0x5) [ 146.577249] [ T418] amdgpu 0000:03:00.0: MORE_FAULTS: 0x0 [ 146.577250] [ T418] amdgpu 0000:03:00.0: WALKER_ERROR: 0x5 [ 146.577250] [ T418] amdgpu 0000:03:00.0: PERMISSION_FAULTS: 0x3 [ 146.577250] [ T418] amdgpu 0000:03:00.0: MAPPING_ERROR: 0x1 [ 146.577251] [ T418] amdgpu 0000:03:00.0: RW: 0x0 [ 146.577606] [ T418] amdgpu 0000:03:00.0: [gfxhub] page fault (src_id:0 ring:157 vmid:0 pasid:0) [ 146.577608] [ T418] amdgpu 0000:03:00.0: in page starting at address 0x00000000002ba000 from client 10 [ 146.577609] [ T418] amdgpu 0000:03:00.0: GCVM_L2_PROTECTION_FAULT_STATUS:0x00000B3A [ 146.577609] [ T418] amdgpu 0000:03:00.0: Faulty UTCL2 client ID: CPC (0x5) [ 146.577610] [ T418] amdgpu 0000:03:00.0: MORE_FAULTS: 0x0 [ 146.577611] [ T418] amdgpu 0000:03:00.0: WALKER_ERROR: 0x5 [ 146.577611] [ T418] amdgpu 0000:03:00.0: PERMISSION_FAULTS: 0x3 [ 146.577611] [ T418] amdgpu 0000:03:00.0: MAPPING_ERROR: 0x1 [ 146.577612] [ T418] amdgpu 0000:03:00.0: RW: 0x0This means there's at least another error in these commits (reverting all these in next-20260701 fixes the issue)
Quoted 7 lines
b789664e3e30("drm/amdkfd: Clean upsuspend_allandresume_allmes")a665d09b10af("drm/amdkfd: Pass known bad queue info to reset")a4e4d945cba8("drm/amdgpu/gfx: defer per-queuehelper_enduntil after MES resume")f401a2633e02("drm/amdgpu: Remove faulty queue before resume")f94bbd648bb4("drm/amdgpu: use a single entry point for mes compute reset")Bert Karwatzki
These GPUVM error are introduce bya665d09b10af ("drm/amdkfd: Pass known bad queue info to reset") and can be fixed by a partial revert. a665d09b10af can be fixed by
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +17 -7
@@ -491,15 +491,18 @@ static int suspend_all_queues_mes(struct device_queue_manager *dqm, struct queueif (!down_read_trylock (&adev->reset_domain->sem))return -EIO ; + r =amdgpu_mes_suspend (adev,ffs (dqm->dev->xcc_mask) -1 ); -if (!reset_queues_mes (dqm, q)) { - r =0 ; - goto out; - } +if (r) { +if (!reset_queues_mes (dqm, q)) { + r =0 ; + goto out; + } -dev_err (adev->dev,"failed to suspend gangs from MES\n" ); -dev_err (adev->dev,"MES might be in unrecoverable state, issue a GPU reset\n" ); -kfd_hws_hang (dqm); +dev_err (adev->dev,"failed to suspend gangs from MES\n" ); +dev_err (adev->dev,"MES might be in unrecoverable state, issue a GPU reset\n" ); +kfd_hws_hang (dqm); + } out:up_read (&adev->reset_domain->sem);
@@ -3239,6 +3242,7 @@ int kfd_dqm_suspend_bad_queue_mes(struct kfd_node *knode, u32 pasid, u32 doorbelstruct kfd_process_device *pdd =NULL ;struct kfd_process *p =kfd_lookup_process_by_pasid (pasid, &pdd);struct device_queue_manager *dqm = knode->dqm; +struct device *dev = dqm->dev->adev->dev;struct qcm_process_device *qpd;struct queue *q =NULL ;int ret =0 ;
@@ -3260,6 +3264,12 @@ int kfd_dqm_suspend_bad_queue_mes(struct kfd_node *knode, u32 pasid, u32 doorbel q->properties.is_active = false;decrement_queue_count (dqm, qpd, q); +/* this will remove the bad queue and sched a GPU reset if needed */ + ret =remove_queue_mes (dqm, q, qpd); +if (ret) +dev_err (dev,"Removing bad queue failed" ); +/* resume the good queues */ +resume_all_queues_mes (dqm);break ; } }
This does not work in next-20260701 as commit b789664e3e30 ("drm/amdkfd: Clean up suspend_all and resume_all mes") removes resume_all_queues_mes().
Bert Karwatzki
I found the real cause of my problems:
bool amdgpu_mes_queue_reset_by_mes_supported(struct amdgpu_device *adev)
{
u32 ip_maj = IP_VERSION_MAJ(amdgpu_ip_version(adev, GC_HWIP, 0));
u32 ip_min = IP_VERSION_MIN(amdgpu_ip_version(adev, GC_HWIP, 0));
u32 mes_sched = adev->mes.sched_version & AMDGPU_MES_VERSION_MASK;
printk(KERN_INFO "%s: ip_maj = %u ip_min = %u mes_sched = 0x%x", __func__, ip_maj, ip_min, mes_sched);
return (ip_maj == 11 && mes_sched >= 0x8c) || ((ip_maj == 12 && ip_min == 0) && mes_sched >= 0x8d) || ((ip_maj == 12 && ip_min == 1) && mes_sched >= 0x73);
}
returns false on my machine (because mes_sched is not large enough)
[ T8549] amdgpu_mes_queue_reset_by_mes_supported: ip_maj = 12 ip_min = 0 mes_sched = 0x76
So I skipped the call to amdgpu_mes_queue_reset_by_mes_supported()
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +9 -1
@@ -448,17 +448,22 @@ static int reset_queues_mes(struct device_queue_manager *dqm, struct queue *q)unsigned int num_hung =0 ;int r =0 ;struct mes_remove_queue_input queue_input; +printk (KERN_INFO "entering %s" , __func__); +/* if (!amdgpu_mes_queue_reset_by_mes_supported(adev)) { r = -ENOTRECOVERABLE; +printk(KERN_INFO "%s: reset by mes not supported", __func__); goto fail; - } +}*/ +printk (KERN_INFO "%s: skip calling amdgpu_mes_queue_reset_by_mes_supported()" , __func__);/* reset should be used only in dqm locked queue reset */ if (WARN_ON (dqm->detect_hang_count >0 ))return 0 ;if (!amdgpu_gpu_recovery) { +printk (KERN_INFO "%s: gpu recovery not enabled" , __func__); r = -ENOTRECOVERABLE ; goto fail; }
@@ -470,6 +475,7 @@ static int reset_queues_mes(struct device_queue_manager *dqm, struct queue *q) queue_input.xcc_id =ffs (dqm->dev->xcc_mask) -1 ;/* pass the known bad queue info to the reset function */ r =amdgpu_gfx_reset_mes_compute (adev,NULL ,NULL ,NULL , &num_hung, &queue_input); +printk (KERN_INFO "%s: amdgpu_gfx_reset_mes_compute() returned %d" , __func__, r);if (r) goto fail;
@@ -3231,6 +3237,7 @@ int kfd_dqm_suspend_bad_queue_mes(struct kfd_node *knode, u32 pasid, u32 doorbelstruct qcm_process_device *qpd;struct queue *q =NULL ;int ret =0 ; +printk (KERN_INFO "entering %s" , __func__);if (!pdd)return -EINVAL ;
@@ -3242,6 +3249,7 @@ int kfd_dqm_suspend_bad_queue_mes(struct kfd_node *knode, u32 pasid, u32 doorbellist_for_each_entry (q, &qpd->queues_list, list) {if (q->doorbell_id == doorbell_id && q->properties.is_active) { +printk (KERN_INFO "%s: calling recover_bad_queue_mes() for queue %px" , __func__, q);
and got this output when running the hsaruntime (which inject illegal opcodes into the command stream) test:
[ 113.811612] [ T645] [drm:gfx_v12_0_bad_op_irq [amdgpu]] *ERROR* Illegal opcode in command stream [ 113.811675] [ T2558] entering kfd_dqm_suspend_bad_queue_mes [ 113.811676] [ T2558] kfd_dqm_suspend_bad_queue_mes: calling recover_bad_queue_mes() for queue ffffa03160950400 [ 113.811676] [ T2558] entering reset_queues_mes [ 113.811677] [ T2558] reset_queues_mes: skip calling amdgpu_mes_queue_reset_by_mes_supported() [ 113.811887] [ T2558] reset_queues_mes: amdgpu_gfx_reset_mes_compute() returned 0
So even though amdgpu_mes_queue_reset_by_mes_supported() reported false, amdgpu_gfx_reset_mes_compute() returns 0, suggesting that resetting actually works here!
Perhaps the minimum required mes_sched version for 12.0 can be relaxed to 0x76 to solve this:
From 6d7af652177063963012eb4df228e99caeb03b31 Mon Sep 17 00:00:00 2001
From: Bert Karwatzki <[email protected]>
Date: Mon, 6 Jul 2026 14:36:22 +0200
Subject: [PATCH] amdgpu: relax required mes_sched version
This mes_sched version is actually enough on this hardware:
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 44 [Radeon RX 9060 XT] [1002:7590] (rev c0)
[ 3.200538] [ T537] amdgpu 0000:03:00.0: initializing kernel modesetting (IP DISCOVERY 0x1002:0x7590 0x148C:0x2437 0xC0). [ 3.200546] [ T537] amdgpu 0000:03:00.0: register mmio base: 0xDFC00000 [ 3.200547] [ T537] amdgpu 0000:03:00.0: register mmio size: 524288 [ 3.203739] [ T537] amdgpu 0000:03:00.0: detected ip block number 0 <common_v1_0_0> (soc24_common) [ 3.203740] [ T537] amdgpu 0000:03:00.0: detected ip block number 1 <gmc_v12_0_0> (gmc_v12_0) [ 3.203741] [ T537] amdgpu 0000:03:00.0: detected ip block number 2 <ih_v7_0_0> (ih_v7_0) [ 3.203741] [ T537] amdgpu 0000:03:00.0: detected ip block number 3 <psp_v14_0_0> (psp) [ 3.203742] [ T537] amdgpu 0000:03:00.0: detected ip block number 4 <smu_v14_0_0> (smu) [ 3.203742] [ T537] amdgpu 0000:03:00.0: detected ip block number 5 <dce_v1_0_0> (dm) [ 3.203743] [ T537] amdgpu 0000:03:00.0: detected ip block number 6 <gfx_v12_0_0> (gfx_v12_0) [ 3.203743] [ T537] amdgpu 0000:03:00.0: detected ip block number 7 <sdma_v7_0_0> (sdma_v7_0) [ 3.203744] [ T537] amdgpu 0000:03:00.0: detected ip block number 8 <vcn_v5_0_0> (vcn_v5_0_0) [ 3.203744] [ T537] amdgpu 0000:03:00.0: detected ip block number 9 <jpeg_v5_0_0> (jpeg_v5_0_0) [ 3.203745] [ T537] amdgpu 0000:03:00.0: detected ip block number 10 <mes_v12_0_0> (mes_v12_0)
--- drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c +1 -1
@@ -869,7 +869,7 @@ bool amdgpu_mes_queue_reset_by_mes_supported(struct amdgpu_device *adev)u32 mes_sched = adev->mes.sched_version &AMDGPU_MES_VERSION_MASK ;return (ip_maj ==11 && mes_sched >=0x8c ) || - ((ip_maj ==12 && ip_min ==0 ) && mes_sched >=0x8d ) || + ((ip_maj ==12 && ip_min ==0 ) && mes_sched >=0x76 ) || ((ip_maj ==12 && ip_min ==1 ) && mes_sched >=0x73 ); }
Signature · 4 lines
2.53.0 Bert Karwatzki
Am Montag, dem 06.07.2026 um 14:46 +0200 schrieb Bert Karwatzki:
Quoted 119 lines
I found the real cause of my problems:
bool
amdgpu_mes_queue_reset_by_mes_supported(struct amdgpu_device *adev)
{
u32ip_maj=IP_VERSION_MAJ(amdgpu_ip_version(adev, GC_HWIP, 0));
u32ip_min=IP_VERSION_MIN(amdgpu_ip_version(adev, GC_HWIP, 0));
u32mes_sched=adev->mes.sched_version&AMDGPU_MES_VERSION_MASK;
printk(KERN_INFO "%s: ip_maj = %u ip_min = %u mes_sched = 0x%x", __func__, ip_maj, ip_min, mes_sched);return (
ip_maj== 11 &&mes_sched>=0x8c) || ((ip_maj== 12 &&ip_min== 0) &&mes_sched>=0x8d) || ((ip_maj== 12 &&ip_min== 1) &&mes_sched>=0x73);
}returns false on my machine (because
mes_schedis not large enough)[ T8549]
amdgpu_mes_queue_reset_by_mes_supported:ip_maj= 12ip_min= 0mes_sched=0x76So I skipped the call to
amdgpu_mes_queue_reset_by_mes_supported()drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +9
-1@@ -448,17 +448,22 @@ static int reset_queues_mes(struct device_queue_manager *dqm, struct queue *q)unsigned int num_hung =0 ;int r =0 ;struct mes_remove_queue_input queue_input; +printk (KERN_INFO "entering %s" , __func__); +/* if (!amdgpu_mes_queue_reset_by_mes_supported(adev)) { r = -ENOTRECOVERABLE; +printk(KERN_INFO "%s: reset by mes not supported", __func__); goto fail; - } +}*/ +printk (KERN_INFO "%s: skip calling amdgpu_mes_queue_reset_by_mes_supported()" , __func__);/* reset should be used only in dqm locked queue reset */ if (WARN_ON (dqm->detect_hang_count >0 ))return 0 ;if (!amdgpu_gpu_recovery) { +printk (KERN_INFO "%s: gpu recovery not enabled" , __func__); r = -ENOTRECOVERABLE ; goto fail; }@@ -470,6 +475,7 @@ static int reset_queues_mes(struct device_queue_manager *dqm, struct queue *q) queue_input.xcc_id =ffs (dqm->dev->xcc_mask) -1 ;/* pass the known bad queue info to the reset function */ r =amdgpu_gfx_reset_mes_compute (adev,NULL ,NULL ,NULL , &num_hung, &queue_input); +printk (KERN_INFO "%s: amdgpu_gfx_reset_mes_compute() returned %d" , __func__, r);if (r) goto fail;@@ -3231,6 +3237,7 @@ int kfd_dqm_suspend_bad_queue_mes(struct kfd_node *knode, u32 pasid, u32 doorbelstruct qcm_process_device *qpd;struct queue *q =NULL ;int ret =0 ; +printk (KERN_INFO "entering %s" , __func__);if (!pdd)return -EINVAL ;@@ -3242,6 +3249,7 @@ int kfd_dqm_suspend_bad_queue_mes(struct kfd_node *knode, u32 pasid, u32 doorbellist_for_each_entry (q, &qpd->queues_list, list) {if (q->doorbell_id == doorbell_id && q->properties.is_active) { +printk (KERN_INFO "%s: calling recover_bad_queue_mes() for queue %px" , __func__, q);and got this output when running the hsaruntime (which inject illegal opcodes into the command stream) test:
[ 113.811612] [ T645] [drm:gfx_v12_0_bad_op_irq [amdgpu]] *ERROR* Illegal opcode in command stream [ 113.811675] [ T2558] entering kfd_dqm_suspend_bad_queue_mes [ 113.811676] [ T2558] kfd_dqm_suspend_bad_queue_mes: calling recover_bad_queue_mes() for queue ffffa03160950400 [ 113.811676] [ T2558] entering reset_queues_mes [ 113.811677] [ T2558] reset_queues_mes: skip calling amdgpu_mes_queue_reset_by_mes_supported() [ 113.811887] [ T2558] reset_queues_mes: amdgpu_gfx_reset_mes_compute() returned 0So even though
amdgpu_mes_queue_reset_by_mes_supported()reported false,amdgpu_gfx_reset_mes_compute()returns 0, suggesting that resetting actually works here!Perhaps the minimum required
mes_schedversion for 12.0 can be relaxed to0x76to solve this:From
6d7af652177063963012eb4df228e99caeb03b31Mon Sep 17 00:00:00 2001
From: Bert Karwatzki <[email protected]>
Date: Mon, 6 Jul 2026 14:36:22 +0200
Subject: [PATCH] amdgpu: relax requiredmes_schedversionThis
mes_schedversion is actually enough on this hardware:
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 44 [Radeon RX 9060 XT] [1002:7590] (rev c0)[ 3.200538] [ T537] amdgpu 0000:03:00.0: initializing kernel modesetting (IP DISCOVERY 0x1002:0x7590 0x148C:0x2437 0xC0). [ 3.200546] [ T537] amdgpu 0000:03:00.0: register mmio base: 0xDFC00000 [ 3.200547] [ T537] amdgpu 0000:03:00.0: register mmio size: 524288 [ 3.203739] [ T537] amdgpu 0000:03:00.0: detected ip block number 0 <common_v1_0_0> (soc24_common) [ 3.203740] [ T537] amdgpu 0000:03:00.0: detected ip block number 1 <gmc_v12_0_0> (gmc_v12_0) [ 3.203741] [ T537] amdgpu 0000:03:00.0: detected ip block number 2 <ih_v7_0_0> (ih_v7_0) [ 3.203741] [ T537] amdgpu 0000:03:00.0: detected ip block number 3 <psp_v14_0_0> (psp) [ 3.203742] [ T537] amdgpu 0000:03:00.0: detected ip block number 4 <smu_v14_0_0> (smu) [ 3.203742] [ T537] amdgpu 0000:03:00.0: detected ip block number 5 <dce_v1_0_0> (dm) [ 3.203743] [ T537] amdgpu 0000:03:00.0: detected ip block number 6 <gfx_v12_0_0> (gfx_v12_0) [ 3.203743] [ T537] amdgpu 0000:03:00.0: detected ip block number 7 <sdma_v7_0_0> (sdma_v7_0) [ 3.203744] [ T537] amdgpu 0000:03:00.0: detected ip block number 8 <vcn_v5_0_0> (vcn_v5_0_0) [ 3.203744] [ T537] amdgpu 0000:03:00.0: detected ip block number 9 <jpeg_v5_0_0> (jpeg_v5_0_0) [ 3.203745] [ T537] amdgpu 0000:03:00.0: detected ip block number 10 <mes_v12_0_0> (mes_v12_0)Signed-off-by Bert Karwatzki <[email protected]>--- drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c +0
-0
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c bool amdgpu_mes_queue_reset_by_mes_supported(struct amdgpu_device *adev) · line 875
Quoted 8 lines
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c +1
-1@@ -869,7 +869,7 @@ bool amdgpu_mes_queue_reset_by_mes_supported(struct amdgpu_device *adev)u32 mes_sched = adev->mes.sched_version &AMDGPU_MES_VERSION_MASK ;return (ip_maj ==11 && mes_sched >=0x8c ) || - ((ip_maj ==12 && ip_min ==0 ) && mes_sched >=0x8d ) || + ((ip_maj ==12 && ip_min ==0 ) && mes_sched >=0x76 ) || ((ip_maj ==12 && ip_min ==1 ) && mes_sched >=0x73 ); }
The specific hsaruntime tests which cause gpu resets on a RX9600 (gfx1201) on next-2020701+ are
$ /usr/libexec/rocm/libhsa-runtime64-tests/run-tests --gtest_list_tests | grep Invalid Queue_Validation_InvalidDimension Queue_Validation_InvalidGroupMemory Queue_Validation_InvalidKernelObject Queue_Validation_InvalidPacket
Bert Karwatzki
@Amber Lin
, @Zhang, Jesse(Jie), @Shaoyun Liu Can you take a look at the firmware version?
Alex
Quoted 133 lines · Bert Karwatzki
I found the real cause of my problems:
bool
amdgpu_mes_queue_reset_by_mes_supported(struct amdgpu_device *adev)
{
u32ip_maj=IP_VERSION_MAJ(amdgpu_ip_version(adev, GC_HWIP, 0));
u32ip_min=IP_VERSION_MIN(amdgpu_ip_version(adev, GC_HWIP, 0));
u32mes_sched=adev->mes.sched_version&AMDGPU_MES_VERSION_MASK;
printk(KERN_INFO "%s: ip_maj = %u ip_min = %u mes_sched = 0x%x", __func__, ip_maj, ip_min, mes_sched);return (
ip_maj== 11 &&mes_sched>=0x8c) || ((ip_maj== 12 &&ip_min== 0) &&mes_sched>=0x8d) || ((ip_maj== 12 &&ip_min== 1) &&mes_sched>=0x73);
}returns false on my machine (because
mes_schedis not large enough)[ T8549]
amdgpu_mes_queue_reset_by_mes_supported:ip_maj= 12ip_min= 0mes_sched=0x76So I skipped the call to
amdgpu_mes_queue_reset_by_mes_supported()drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +9
-1@@ -448,17 +448,22 @@ static int reset_queues_mes(struct device_queue_manager *dqm, struct queue *q)unsigned int num_hung =0 ;int r =0 ;struct mes_remove_queue_input queue_input; +printk (KERN_INFO "entering %s" , __func__); +/* if (!amdgpu_mes_queue_reset_by_mes_supported(adev)) { r = -ENOTRECOVERABLE; +printk(KERN_INFO "%s: reset by mes not supported", __func__); goto fail; - } +}*/ +printk (KERN_INFO "%s: skip calling amdgpu_mes_queue_reset_by_mes_supported()" , __func__);/* reset should be used only in dqm locked queue reset */ if (WARN_ON (dqm->detect_hang_count >0 ))return 0 ;if (!amdgpu_gpu_recovery) { +printk (KERN_INFO "%s: gpu recovery not enabled" , __func__); r = -ENOTRECOVERABLE ; goto fail; }@@ -470,6 +475,7 @@ static int reset_queues_mes(struct device_queue_manager *dqm, struct queue *q) queue_input.xcc_id =ffs (dqm->dev->xcc_mask) -1 ;/* pass the known bad queue info to the reset function */ r =amdgpu_gfx_reset_mes_compute (adev,NULL ,NULL ,NULL , &num_hung, &queue_input); +printk (KERN_INFO "%s: amdgpu_gfx_reset_mes_compute() returned %d" , __func__, r);if (r) goto fail;@@ -3231,6 +3237,7 @@ int kfd_dqm_suspend_bad_queue_mes(struct kfd_node *knode, u32 pasid, u32 doorbelstruct qcm_process_device *qpd;struct queue *q =NULL ;int ret =0 ; +printk (KERN_INFO "entering %s" , __func__);if (!pdd)return -EINVAL ;@@ -3242,6 +3249,7 @@ int kfd_dqm_suspend_bad_queue_mes(struct kfd_node *knode, u32 pasid, u32 doorbellist_for_each_entry (q, &qpd->queues_list, list) {if (q->doorbell_id == doorbell_id && q->properties.is_active) { +printk (KERN_INFO "%s: calling recover_bad_queue_mes() for queue %px" , __func__, q);and got this output when running the hsaruntime (which inject illegal opcodes into the command stream) test:
[ 113.811612] [ T645] [drm:gfx_v12_0_bad_op_irq [amdgpu]] *ERROR* Illegal opcode in command stream [ 113.811675] [ T2558] entering kfd_dqm_suspend_bad_queue_mes [ 113.811676] [ T2558] kfd_dqm_suspend_bad_queue_mes: calling recover_bad_queue_mes() for queue ffffa03160950400 [ 113.811676] [ T2558] entering reset_queues_mes [ 113.811677] [ T2558] reset_queues_mes: skip calling amdgpu_mes_queue_reset_by_mes_supported() [ 113.811887] [ T2558] reset_queues_mes: amdgpu_gfx_reset_mes_compute() returned 0So even though
amdgpu_mes_queue_reset_by_mes_supported()reported false,amdgpu_gfx_reset_mes_compute()returns 0, suggesting that resetting actually works here!Perhaps the minimum required
mes_schedversion for 12.0 can be relaxed to0x76to solve this:From
6d7af652177063963012eb4df228e99caeb03b31Mon Sep 17 00:00:00 2001
From: Bert Karwatzki <[email protected]>
Date: Mon, 6 Jul 2026 14:36:22 +0200
Subject: [PATCH] amdgpu: relax requiredmes_schedversionThis
mes_schedversion is actually enough on this hardware:
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 44 [Radeon RX 9060 XT] [1002:7590] (rev c0)[ 3.200538] [ T537] amdgpu 0000:03:00.0: initializing kernel modesetting (IP DISCOVERY 0x1002:0x7590 0x148C:0x2437 0xC0). [ 3.200546] [ T537] amdgpu 0000:03:00.0: register mmio base: 0xDFC00000 [ 3.200547] [ T537] amdgpu 0000:03:00.0: register mmio size: 524288 [ 3.203739] [ T537] amdgpu 0000:03:00.0: detected ip block number 0 <common_v1_0_0> (soc24_common) [ 3.203740] [ T537] amdgpu 0000:03:00.0: detected ip block number 1 <gmc_v12_0_0> (gmc_v12_0) [ 3.203741] [ T537] amdgpu 0000:03:00.0: detected ip block number 2 <ih_v7_0_0> (ih_v7_0) [ 3.203741] [ T537] amdgpu 0000:03:00.0: detected ip block number 3 <psp_v14_0_0> (psp) [ 3.203742] [ T537] amdgpu 0000:03:00.0: detected ip block number 4 <smu_v14_0_0> (smu) [ 3.203742] [ T537] amdgpu 0000:03:00.0: detected ip block number 5 <dce_v1_0_0> (dm) [ 3.203743] [ T537] amdgpu 0000:03:00.0: detected ip block number 6 <gfx_v12_0_0> (gfx_v12_0) [ 3.203743] [ T537] amdgpu 0000:03:00.0: detected ip block number 7 <sdma_v7_0_0> (sdma_v7_0) [ 3.203744] [ T537] amdgpu 0000:03:00.0: detected ip block number 8 <vcn_v5_0_0> (vcn_v5_0_0) [ 3.203744] [ T537] amdgpu 0000:03:00.0: detected ip block number 9 <jpeg_v5_0_0> (jpeg_v5_0_0) [ 3.203745] [ T537] amdgpu 0000:03:00.0: detected ip block number 10 <mes_v12_0_0> (mes_v12_0)Signed-off-by Bert Karwatzki <[email protected]>--- drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c +1
-2@@ -869,7 +869,7 @@ bool amdgpu_mes_queue_reset_by_mes_supported(struct amdgpu_device *adev)u32 mes_sched = adev->mes.sched_version &AMDGPU_MES_VERSION_MASK ;return (ip_maj ==11 && mes_sched >=0x8c ) || - ((ip_maj ==12 && ip_min ==0 ) && mes_sched >=0x8d ) || + ((ip_maj ==12 && ip_min ==0 ) && mes_sched >=0x76 ) || ((ip_maj ==12 && ip_min ==1 ) && mes_sched >=0x73 ); } --2.53.0
Bert Karwatzki
Am Montag, dem 10.08.2026 um 10:15 -0400 schrieb Alex Deucher:
Quoted 134 lines
@Amber Lin
, @Zhang, Jesse(Jie), @Shaoyun Liu Can you take a look at the firmware version?Alex
Quoted 128 lines · Bert Karwatzki
I found the real cause of my problems:
bool
amdgpu_mes_queue_reset_by_mes_supported(struct amdgpu_device *adev)
{
u32ip_maj=IP_VERSION_MAJ(amdgpu_ip_version(adev, GC_HWIP, 0));
u32ip_min=IP_VERSION_MIN(amdgpu_ip_version(adev, GC_HWIP, 0));
u32mes_sched=adev->mes.sched_version&AMDGPU_MES_VERSION_MASK;
printk(KERN_INFO "%s: ip_maj = %u ip_min = %u mes_sched = 0x%x", __func__, ip_maj, ip_min, mes_sched);return (
ip_maj== 11 &&mes_sched>=0x8c) || ((ip_maj== 12 &&ip_min== 0) &&mes_sched>=0x8d) || ((ip_maj== 12 &&ip_min== 1) &&mes_sched>=0x73);
}returns false on my machine (because
mes_schedis not large enough)[ T8549]
amdgpu_mes_queue_reset_by_mes_supported:ip_maj= 12ip_min= 0mes_sched=0x76So I skipped the call to
amdgpu_mes_queue_reset_by_mes_supported()drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +9
-1@@ -448,17 +448,22 @@ static int reset_queues_mes(struct device_queue_manager *dqm, struct queue *q)unsigned int num_hung =0 ;int r =0 ;struct mes_remove_queue_input queue_input; +printk (KERN_INFO "entering %s" , __func__); +/* if (!amdgpu_mes_queue_reset_by_mes_supported(adev)) { r = -ENOTRECOVERABLE; +printk(KERN_INFO "%s: reset by mes not supported", __func__); goto fail; - } +}*/ +printk (KERN_INFO "%s: skip calling amdgpu_mes_queue_reset_by_mes_supported()" , __func__);/* reset should be used only in dqm locked queue reset */ if (WARN_ON (dqm->detect_hang_count >0 ))return 0 ;if (!amdgpu_gpu_recovery) { +printk (KERN_INFO "%s: gpu recovery not enabled" , __func__); r = -ENOTRECOVERABLE ; goto fail; }@@ -470,6 +475,7 @@ static int reset_queues_mes(struct device_queue_manager *dqm, struct queue *q) queue_input.xcc_id =ffs (dqm->dev->xcc_mask) -1 ;/* pass the known bad queue info to the reset function */ r =amdgpu_gfx_reset_mes_compute (adev,NULL ,NULL ,NULL , &num_hung, &queue_input); +printk (KERN_INFO "%s: amdgpu_gfx_reset_mes_compute() returned %d" , __func__, r);if (r) goto fail;@@ -3231,6 +3237,7 @@ int kfd_dqm_suspend_bad_queue_mes(struct kfd_node *knode, u32 pasid, u32 doorbelstruct qcm_process_device *qpd;struct queue *q =NULL ;int ret =0 ; +printk (KERN_INFO "entering %s" , __func__);if (!pdd)return -EINVAL ;@@ -3242,6 +3249,7 @@ int kfd_dqm_suspend_bad_queue_mes(struct kfd_node *knode, u32 pasid, u32 doorbellist_for_each_entry (q, &qpd->queues_list, list) {if (q->doorbell_id == doorbell_id && q->properties.is_active) { +printk (KERN_INFO "%s: calling recover_bad_queue_mes() for queue %px" , __func__, q);and got this output when running the hsaruntime (which inject illegal opcodes into the command stream) test:
[ 113.811612] [ T645] [drm:gfx_v12_0_bad_op_irq [amdgpu]] *ERROR* Illegal opcode in command stream [ 113.811675] [ T2558] entering kfd_dqm_suspend_bad_queue_mes [ 113.811676] [ T2558] kfd_dqm_suspend_bad_queue_mes: calling recover_bad_queue_mes() for queue ffffa03160950400 [ 113.811676] [ T2558] entering reset_queues_mes [ 113.811677] [ T2558] reset_queues_mes: skip calling amdgpu_mes_queue_reset_by_mes_supported() [ 113.811887] [ T2558] reset_queues_mes: amdgpu_gfx_reset_mes_compute() returned 0So even though
amdgpu_mes_queue_reset_by_mes_supported()reported false,amdgpu_gfx_reset_mes_compute()returns 0, suggesting that resetting actually works here!Perhaps the minimum required
mes_schedversion for 12.0 can be relaxed to0x76to solve this:From
6d7af652177063963012eb4df228e99caeb03b31Mon Sep 17 00:00:00 2001
From: Bert Karwatzki <[email protected]>
Date: Mon, 6 Jul 2026 14:36:22 +0200
Subject: [PATCH] amdgpu: relax requiredmes_schedversionThis
mes_schedversion is actually enough on this hardware:
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 44 [Radeon RX 9060 XT] [1002:7590] (rev c0)[ 3.200538] [ T537] amdgpu 0000:03:00.0: initializing kernel modesetting (IP DISCOVERY 0x1002:0x7590 0x148C:0x2437 0xC0). [ 3.200546] [ T537] amdgpu 0000:03:00.0: register mmio base: 0xDFC00000 [ 3.200547] [ T537] amdgpu 0000:03:00.0: register mmio size: 524288 [ 3.203739] [ T537] amdgpu 0000:03:00.0: detected ip block number 0 <common_v1_0_0> (soc24_common) [ 3.203740] [ T537] amdgpu 0000:03:00.0: detected ip block number 1 <gmc_v12_0_0> (gmc_v12_0) [ 3.203741] [ T537] amdgpu 0000:03:00.0: detected ip block number 2 <ih_v7_0_0> (ih_v7_0) [ 3.203741] [ T537] amdgpu 0000:03:00.0: detected ip block number 3 <psp_v14_0_0> (psp) [ 3.203742] [ T537] amdgpu 0000:03:00.0: detected ip block number 4 <smu_v14_0_0> (smu) [ 3.203742] [ T537] amdgpu 0000:03:00.0: detected ip block number 5 <dce_v1_0_0> (dm) [ 3.203743] [ T537] amdgpu 0000:03:00.0: detected ip block number 6 <gfx_v12_0_0> (gfx_v12_0) [ 3.203743] [ T537] amdgpu 0000:03:00.0: detected ip block number 7 <sdma_v7_0_0> (sdma_v7_0) [ 3.203744] [ T537] amdgpu 0000:03:00.0: detected ip block number 8 <vcn_v5_0_0> (vcn_v5_0_0) [ 3.203744] [ T537] amdgpu 0000:03:00.0: detected ip block number 9 <jpeg_v5_0_0> (jpeg_v5_0_0) [ 3.203745] [ T537] amdgpu 0000:03:00.0: detected ip block number 10 <mes_v12_0_0> (mes_v12_0)Signed-off-by Bert Karwatzki <[email protected]>--- drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c +1
-1@@ -869,7 +869,7 @@ bool amdgpu_mes_queue_reset_by_mes_supported(struct amdgpu_device *adev)u32 mes_sched = adev->mes.sched_version &AMDGPU_MES_VERSION_MASK ;return (ip_maj ==11 && mes_sched >=0x8c ) || - ((ip_maj ==12 && ip_min ==0 ) && mes_sched >=0x8d ) || + ((ip_maj ==12 && ip_min ==0 ) && mes_sched >=0x76 ) || ((ip_maj ==12 && ip_min ==1 ) && mes_sched >=0x73 ); }
Quoted 5 lines
Quoted 5 lines
--
2.53.0Bert Karwatzki
These are the firmware version reported in sysfs:
# find /sys/class/drm/card0/device/fw_version/ -print -type f -exec cat {} \;
/sys/class/drm/card0/device/fw_version/
/sys/class/drm/card0/device/fw_version/pfp_fw_version
0x00000c12
/sys/class/drm/card0/device/fw_version/vcn_fw_version
0x0910c01a
/sys/class/drm/card0/device/fw_version/mec_fw_version
0x00000d0c
/sys/class/drm/card0/device/fw_version/mes_fw_version
0x0000008b
/sys/class/drm/card0/device/fw_version/dmcub_fw_version
0x0a000c00
/sys/class/drm/card0/device/fw_version/me_fw_version
0x00000bc2
/sys/class/drm/card0/device/fw_version/asd_fw_version
0x21000110
/sys/class/drm/card0/device/fw_version/sdma2_fw_version
0x00798e96
/sys/class/drm/card0/device/fw_version/sdma_fw_version
0x00798e96
/sys/class/drm/card0/device/fw_version/smc_fw_version
0x00664600
/sys/class/drm/card0/device/fw_version/sos_fw_version
0x003b0f0d
/sys/class/drm/card0/device/fw_version/imu_fw_version
0x0c2c2500
/sys/class/drm/card0/device/fw_version/rlc_fw_version
0x00bde160
/sys/class/drm/card0/device/fw_version/mes_kiq_fw_version
0x0000008bIn addition dmesg reports a problem with the mes version:
[ 4.353074] [ T489] amdgpu 0000:03:00.0: MES firmware reports incorrect version in ucode binary (0x1 vs 0x8b)
Both these result use the firmware package shipped by debian sid:
ii firmware-amd-graphics 20260622-1 all Binary firmware for AMD/ATI graphics and NPU chips
The earlier result of mes_sched = 0x76 is probably from the old firmware (debian stable version 20250410), but the gpu resets also occur with the new firmware from debian sid.
Bert Karwatzki
Am Montag, dem 10.08.2026 um 18:24 +0200 schrieb Bert Karwatzki:
Quoted 44 lines
Am Montag, dem 10.08.2026 um 10:15 -0400 schrieb Alex Deucher:
Quoted 5 lines
@Amber Lin
, @Zhang, Jesse(Jie), @Shaoyun Liu Can you take a look at the firmware version?Alex
These are the firmware version reported in sysfs:
# find /sys/class/drm/card0/device/fw_version/ -print -type f -exec cat {} \; /sys/class/drm/card0/device/fw_version/ /sys/class/drm/card0/device/fw_version/pfp_fw_version 0x00000c12 /sys/class/drm/card0/device/fw_version/vcn_fw_version 0x0910c01a /sys/class/drm/card0/device/fw_version/mec_fw_version 0x00000d0c /sys/class/drm/card0/device/fw_version/mes_fw_version 0x0000008b /sys/class/drm/card0/device/fw_version/dmcub_fw_version 0x0a000c00 /sys/class/drm/card0/device/fw_version/me_fw_version 0x00000bc2 /sys/class/drm/card0/device/fw_version/asd_fw_version 0x21000110 /sys/class/drm/card0/device/fw_version/sdma2_fw_version 0x00798e96 /sys/class/drm/card0/device/fw_version/sdma_fw_version 0x00798e96 /sys/class/drm/card0/device/fw_version/smc_fw_version 0x00664600 /sys/class/drm/card0/device/fw_version/sos_fw_version 0x003b0f0d /sys/class/drm/card0/device/fw_version/imu_fw_version 0x0c2c2500 /sys/class/drm/card0/device/fw_version/rlc_fw_version 0x00bde160 /sys/class/drm/card0/device/fw_version/mes_kiq_fw_version 0x0000008bIn addition dmesg reports a problem with the mes version:
[ 4.353074] [ T489] amdgpu 0000:03:00.0: MES firmware reports incorrect version in ucode binary (0x1 vs 0x8b)
Quoted 7 lines
Both these result use the firmware package shipped by debian sid:
ii firmware-amd-graphics 20260622-1 all Binary firmware for AMD/ATI graphics and NPU chipsThe earlier result of
mes_sched=0x76is probably from the old firmware (debian stable version 20250410), but the gpu resets also occur with the new firmware from debian sid.Bert Karwatzki
I just tried the amdgpu firmware from the master branch of
https://gitlab.com/kernel-firmware/linux-firmware
and the result is the same (i.e. same firmware versions, same gpu reset).
At least the mes firmware binaries are identical:
bert@homer:/lib/firmware/amdgpu$ ls | grep gc_12 | grep mes | xargs md5sum e50b66d9d8cae78ddf76ea27cca5a051 gc_12_0_0_mes1.bin ed07c8a5a307bc882d42fe89441d1da9 gc_12_0_0_mes.bin 3284fd6f8269d020190d5e11075bbf6a gc_12_0_0_uni_mes.bin 99c60afc75c11cb47007c40db29121d3 gc_12_0_1_mes1.bin c1c9b01f5dd171906e7beefca32ebb9a gc_12_0_1_mes.bin 3284fd6f8269d020190d5e11075bbf6a gc_12_0_1_uni_mes.bin
This is the backed up firmware from debian:
bert@homer:/lib/firmware/amdgpu.debian$ ls | grep gc_12 | grep mes | xargs md5sum e50b66d9d8cae78ddf76ea27cca5a051 gc_12_0_0_mes1.bin ed07c8a5a307bc882d42fe89441d1da9 gc_12_0_0_mes.bin 3284fd6f8269d020190d5e11075bbf6a gc_12_0_0_uni_mes.bin 99c60afc75c11cb47007c40db29121d3 gc_12_0_1_mes1.bin c1c9b01f5dd171906e7beefca32ebb9a gc_12_0_1_mes.bin 3284fd6f8269d020190d5e11075bbf6a gc_12_0_1_uni_mes.bin
Bert Karwatzki