We can not defere the readback of the registers as the values likely getting changed by an other command buffer. Signed-off-by: Christian Gmeiner <christian.gmeiner@xxxxxxxxx> --- drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c index 1fb5e37..2aa1a26 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c @@ -1369,6 +1369,20 @@ int etnaviv_gpu_submit(struct etnaviv_gpu *gpu, return ret; } +static void etnaviv_process_readbacks(struct etnaviv_gpu *gpu, + struct etnaviv_event *event) +{ + unsigned i; + + for (i = 0; i < event->nr_readbacks; i++) { + const struct etnaviv_readback *readback = event->readbacks + i; + const u32 val = gpu_read(gpu, readback->reg); + u32 *bo = readback->bo_vma; + + *(bo + readback->offset) = val; + } +} + /* * Init/Cleanup: */ @@ -1415,6 +1429,9 @@ static irqreturn_t irq_handler(int irq, void *data) dev_dbg(gpu->dev, "event %u\n", event); + if (gpu->event[event].nr_readbacks) + etnaviv_process_readbacks(gpu, &gpu->event[event]); + fence = gpu->event[event].fence; gpu->event[event].fence = NULL; fence_signal(fence); -- 2.9.3 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel