drm/etnaviv: slow down FE idle polling
authorLucas Stach <l.stach@pengutronix.de>
Fri, 16 Jun 2023 11:02:57 +0000 (13:02 +0200)
committerLucas Stach <l.stach@pengutronix.de>
Wed, 21 Jun 2023 13:18:14 +0000 (15:18 +0200)
commit295b6c02f84b81971c42b592771920783fc181cd
treefecf719cf060a0dcd6518b9e339f0d47792d965a
parent426f6e764426a57718e23af5db36ed24e16a46fe
drm/etnaviv: slow down FE idle polling

Currently the FE is spinning way too fast when polling for new work in
the FE idleloop. As each poll fetches 16 bytes from memory, a GPU running
at 1GHz with the current setting of 200 wait cycle between fetches causes
80 MB/s of memory traffic just to check for new work when the GPU is
otherwise idle, which is more FE traffic than in some GPU loaded cases.

Significantly increase the number of wait cycles to slow down the poll
interval to ~30µs, limiting the FE idle memory traffic to 512 KB/s, while
providing a max latency which should not hurt most use-cases. The FE WAIT
command seems to have some unknown discrete steps in the wait cycles so
we may over/undershoot the target a bit, but that should be harmless.

If the GPU core base frequency is unknown keep the 200 wait cycles as
a sane default.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Sui Jingfeng <suijingfeng@loongson.cn>
Tested-by: Sui Jingfeng <suijingfeng@loongson.cn>
Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com>
drivers/gpu/drm/etnaviv/etnaviv_buffer.c
drivers/gpu/drm/etnaviv/etnaviv_gpu.c
drivers/gpu/drm/etnaviv/etnaviv_gpu.h