mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Bert Karwatzki <spasswolf@web.de>
To: Alex Deucher <alexdeucher@gmail.com>,
	"Zhang, Jesse(Jie)" <Jesse.Zhang@amd.com>,
	Shaoyun Liu <Shaoyun.Liu@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>,
	linux-kernel@vger.kernel.org,  amd-gfx@lists.freedesktop.org,
	linux-next@vger.kernel.org, Amber Lin <Amber.Lin@amd.com>,
	Mario Limonciello <mario.limonciello@amd.com>,
	 spasswolf@web.de
Subject: Re: [Re] GPU reset when running the ROCm hsa runtime tests on gfx12 and next-20260701
Date: Mon, 10 Aug 2026 18:24:41 +0200	[thread overview]
Message-ID: <5b571b7ce1c81d3757061a4378db0ced65a86b58.camel@web.de> (raw)
In-Reply-To: <CADnq5_Onn1+x_amugN5nBGNHdjM0bKBYr8LLQ_fRWxTNPbaJWQ@mail.gmail.com>

Am Montag, dem 10.08.2026 um 10:15 -0400 schrieb Alex Deucher:
> @Amber Lin
> , @Zhang, Jesse(Jie), @Shaoyun Liu  Can you take a look at the firmware version?
> 
> Alex
> 
> On Mon, Jul 6, 2026 at 9:34 AM Bert Karwatzki <spasswolf@web.de> wrote:
> > 
> > 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()
> > 
> > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> > index 5c9dfb0c424f..462f20aeb681 100644
> > --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> > @@ -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 doorbel
> >         struct 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 doorbel
> > 
> >                 list_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 <spasswolf@web.de>
> > 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)
> > 
> > Signed-off-by: Bert Karwatzki <spasswolf@web.de>
> > ---
> >  drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> > index 6c0dde3786e3..c88fdc8a187d 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
> > @@ -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

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
0x0000008b

In 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

  reply	other threads:[~2026-08-10 16:24 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-03 12:44 Bert Karwatzki
2026-07-05  0:35 ` [Re] " Bert Karwatzki
2026-07-05 22:45   ` Bert Karwatzki
2026-07-06 12:46     ` Bert Karwatzki
2026-08-10 11:27       ` Bert Karwatzki
2026-08-10 14:15       ` Alex Deucher
2026-08-10 16:24         ` Bert Karwatzki [this message]
2026-08-10 18:08           ` Bert Karwatzki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5b571b7ce1c81d3757061a4378db0ced65a86b58.camel@web.de \
    --to=spasswolf@web.de \
    --cc=Amber.Lin@amd.com \
    --cc=Jesse.Zhang@amd.com \
    --cc=Shaoyun.Liu@amd.com \
    --cc=alexander.deucher@amd.com \
    --cc=alexdeucher@gmail.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-next@vger.kernel.org \
    --cc=mario.limonciello@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®