[PATCH] drm/etnaviv: during dump, read registers twice
Derek Foreman
derek.foreman at collabora.com
Fri May 3 14:27:36 UTC 2024
I have a follow up question related to this:
In etnaviv_sched_timedoutjob we only read this register once - we should
probably read twice there as well?
Further, that function appears to always treat the first timeout as
spurious because gpu->hangcheck_dma_addr starts as 0? The Vivante
driver's hang check spins briefly to see if forward progress is being
made, would that be a better thing to do there?
Thanks,
Derek
On 2024-05-03 09:22, Derek Foreman wrote:
> The vivante driver always reads dma registers twice and discards the first
> value - we need to do this too or at least the DMA address and low/high
> fetches can return wrong results.
>
> Signed-off-by: Derek Foreman <derek.foreman at collabora.com>
> ---
> drivers/gpu/drm/etnaviv/etnaviv_dump.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_dump.c b/drivers/gpu/drm/etnaviv/etnaviv_dump.c
> index 898f84a0fc30..8a8ca8dcc49a 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_dump.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_dump.c
> @@ -91,6 +91,8 @@ static void etnaviv_core_dump_registers(struct core_dump_iterator *iter,
> read_addr <= VIVS_PM_PULSE_EATER)
> read_addr = gpu_fix_power_address(gpu, read_addr);
> reg->reg = cpu_to_le32(etnaviv_dump_registers[i]);
> + /* Discard first read, as it is frequently inaccurate */
> + gpu_read(gpu, read_addr);
> reg->value = cpu_to_le32(gpu_read(gpu, read_addr));
> }
>
More information about the etnaviv
mailing list