Commit 18fa692d authored by Lucas Stach's avatar Lucas Stach
Browse files

drm/etnaviv: reinstate MMUv1 command buffer window check



The switch to per-process address spaces erroneously dropped the check
which validated that the command buffer is mapped through the linear
apperture as required by the hardware. This turned a system
misconfiguration with a helpful error message into a very hard to
debug issue. Reinstate the check at the appropriate location.

Fixes: 17e4660a (drm/etnaviv: implement per-process address spaces on MMUv2)
Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
Reviewed-by: default avatarGuido Günther <agx@sigxcpu.org>
parent ca8cb695
Loading
Loading
Loading
Loading
+14 −3
Original line number Original line Diff line number Diff line
@@ -328,12 +328,23 @@ etnaviv_iommu_context_init(struct etnaviv_iommu_global *global,


	ret = etnaviv_cmdbuf_suballoc_map(suballoc, ctx, &ctx->cmdbuf_mapping,
	ret = etnaviv_cmdbuf_suballoc_map(suballoc, ctx, &ctx->cmdbuf_mapping,
					  global->memory_base);
					  global->memory_base);
	if (ret) {
	if (ret)
		global->ops->free(ctx);
		goto out_free;
		return NULL;

	if (global->version == ETNAVIV_IOMMU_V1 &&
	    ctx->cmdbuf_mapping.iova > 0x80000000) {
		dev_err(global->dev,
		        "command buffer outside valid memory window\n");
		goto out_unmap;
	}
	}


	return ctx;
	return ctx;

out_unmap:
	etnaviv_cmdbuf_suballoc_unmap(ctx, &ctx->cmdbuf_mapping);
out_free:
	global->ops->free(ctx);
	return NULL;
}
}


void etnaviv_iommu_restore(struct etnaviv_gpu *gpu,
void etnaviv_iommu_restore(struct etnaviv_gpu *gpu,