On 2026. július 2., csütörtök 12:23:42 közép-európai nyári idő Christian König
wrote:
> On 7/1/26 18:17, Timur Kristóf wrote:
> > The doorbell is not working on Navi 31.
> > Use the IH_RETRY_CAM_ACK register.
> >
> > Signed-off-by: Timur Kristóf <[email protected]>
>
> Acked-by: Christian König <[email protected]>
>
> I still haven't found any explanation why we use a doorbell for the CAM in
> the first place? Lijo, Alex, Felix does anybody know that?
The first mention of the retry CAM in the kernel is:
commit 318e431b306e - drm/amdgpu: Enable IH retry CAM on GFX9
which was written by Mukul (also on CC for this series).
Mukul - can you please give us some information on that?
It seems that the IH 7.1 code was just copied from there.
As far as I see, Vega 20 already has the mmIH_RETRY_CAM_ACK register, though I
don't know why that wasn't used. I guess you guys would have heard from your
datacenter customers if the current code didn't work on Vega 20 and CDNA.
I can say with certainty that I couldn't get the doorbell working on Navi 31
or Navi 48.
Unfortunately I don't have a Vega 20 card (or any datacenter GPU) so I can't
test what actually works there. I have a Vega 10, but it's unclear if that has
a retry CAM or not.
Thanks & best regards,
Timur
>
> > ---
> >
> > drivers/gpu/drm/amd/amdgpu/ih_v6_0.c | 8 +++++++-
> > 1 file changed, 7 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c
> > b/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c index 65e5d21753f9..a97c85b0cb99
> > 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/ih_v6_0.c
> > @@ -307,6 +307,11 @@ static int ih_v6_0_enable_ring(struct amdgpu_device
> > *adev,>
> > return 0;
> >
> > }
> >
> > +static void ih_v6_0_retry_cam_ack(struct amdgpu_device *adev, u32
> > cam_index) +{
> > + WREG32_SOC15(OSSSYS, 0, regIH_RETRY_CAM_ACK, cam_index);
> > +}
> > +
> >
> > /**
> >
> > * ih_v6_0_irq_init - init and enable the interrupt ring
> > *
> >
> > @@ -807,7 +812,8 @@ static const struct amdgpu_ih_funcs ih_v6_0_funcs = {
> >
> > .get_wptr = ih_v6_0_get_wptr,
> > .decode_iv = amdgpu_ih_decode_iv_helper,
> > .decode_iv_ts = amdgpu_ih_decode_iv_ts_helper,
> >
> > - .set_rptr = ih_v6_0_set_rptr
> > + .set_rptr = ih_v6_0_set_rptr,
> > + .retry_cam_ack = ih_v6_0_retry_cam_ack,
> >
> > };
> >
> > static void ih_v6_0_set_interrupt_funcs(struct amdgpu_device *adev)