Hi Chema, On 09/04/25 12:55, Jose Maria Casanova Crespo wrote:
The client that causes an MMU error is expected to be reported. But in the case of MMU TFU errors, a non existing client
"In the case of MMU errors caused by the TFU unit, [...]"
was being reported. This happened because because the client
There are two "because" in the sentence. Could you add an example of the a MMU error with a non-existing client in the commit message?
calculation was taking into account more than the bits 0-7 from the axi_id that were representing the client. This patch masks the proper bits to do the calculation and limits the returned clients to the expected axi_id ranges that V3D 4.1 and 4.2 use. Fixes: 38c2c7917adc ("drm/v3d: Fix and extend MMU error handling.") Signed-off-by: Jose Maria Casanova Crespo <[email protected]> --- drivers/gpu/drm/v3d/v3d_irq.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/v3d/v3d_irq.c b/drivers/gpu/drm/v3d/v3d_irq.c index 29f63f572d35..1810743ea7b8 100644 --- a/drivers/gpu/drm/v3d/v3d_irq.c +++ b/drivers/gpu/drm/v3d/v3d_irq.c @@ -186,24 +186,33 @@ v3d_hub_irq(int irq, void *arg) u32 axi_id = V3D_READ(V3D_MMU_VIO_ID); u64 vio_addr = ((u64)V3D_READ(V3D_MMU_VIO_ADDR) << (v3d->va_width - 32)); - static const char *const v3d41_axi_ids[] = { - "L2T", - "PTB", - "PSE", - "TLB", - "CLE", - "TFU", - "MMU", - "GMP", + static const struct { + u32 begin; + u32 end; + const char *client; + } v3d41_axi_ids[] = { + {0x00, 0x20, "L2T"}, + {0x20, 0x21, "PTB"}, + {0x40, 0x41, "PSE"}, + {0x60, 0x80, "TLB"}, + {0x80, 0x88, "CLE"}, + {0xA0, 0xA1, "TFU"}, + {0xC0, 0xE0, "MMU"}, + {0xE0, 0xE1, "GMP"}, }; const char *client = "?";V3D_WRITE(V3D_MMU_CTL, V3D_READ(V3D_MMU_CTL)); if (v3d->ver >= V3D_GEN_41) {- axi_id = axi_id >> 5; - if (axi_id < ARRAY_SIZE(v3d41_axi_ids)) - client = v3d41_axi_ids[axi_id]; + axi_id = axi_id & 0xFF; + for (size_t i = 0; i < ARRAY_SIZE(v3d41_axi_ids); i++) { + if (axi_id >= v3d41_axi_ids[i].begin && + axi_id < v3d41_axi_ids[i].end) { + client = v3d41_axi_ids[i].client; + break; + } + } }dev_err(v3d->drm.dev, "MMU error from client %s (%d) at 0x%llx%s%s%s\n",
As we are declaring `begin` and `end` as hexadecimal numbers in the code, could we display AXI ID as a hexadecimal as well? Just to ease future debugging. You would need to change "(%d)". Please, don't forget to mention this change in the commit message of v2. Thanks for your patch! Best Regards, - Maíra
