[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