Mesa (master): freedreno/drm: expose GMEM_BASE address

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu May 2 18:19:54 UTC 2019


Module: Mesa
Branch: master
Commit: 0704ddb2e5845ed296586a19c3eccd83cac74182
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0704ddb2e5845ed296586a19c3eccd83cac74182

Author: Rob Clark <robdclark at chromium.org>
Date:   Tue Apr 30 10:03:54 2019 -0700

freedreno/drm: expose GMEM_BASE address

Needed for sampling from tile buffer (GMEM).

Signed-off-by: Rob Clark <robdclark at chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg at google.com>

---

 src/freedreno/drm/freedreno_drmif.h | 2 ++
 src/freedreno/drm/msm_pipe.c        | 6 ++++++
 src/freedreno/drm/msm_priv.h        | 1 +
 3 files changed, 9 insertions(+)

diff --git a/src/freedreno/drm/freedreno_drmif.h b/src/freedreno/drm/freedreno_drmif.h
index e181da302b3..210b5c18604 100644
--- a/src/freedreno/drm/freedreno_drmif.h
+++ b/src/freedreno/drm/freedreno_drmif.h
@@ -47,6 +47,7 @@ enum fd_pipe_id {
 enum fd_param_id {
 	FD_DEVICE_ID,
 	FD_GMEM_SIZE,
+	FD_GMEM_BASE,
 	FD_GPU_ID,
 	FD_CHIP_ID,
 	FD_MAX_FREQ,
@@ -88,6 +89,7 @@ enum fd_version {
 	FD_VERSION_MADVISE = 1,            /* kernel supports madvise */
 	FD_VERSION_UNLIMITED_CMDS = 1,     /* submits w/ >4 cmd buffers (growable ringbuffer) */
 	FD_VERSION_FENCE_FD = 2,           /* submit command supports in/out fences */
+	FD_VERSION_GMEM_BASE = 3,          /* supports querying GMEM base address */
 	FD_VERSION_SUBMIT_QUEUES = 3,      /* submit queues and multiple priority levels */
 	FD_VERSION_BO_IOVA = 3,            /* supports fd_bo_get/put_iova() */
 	FD_VERSION_SOFTPIN = 4,            /* adds softpin, bo name, and dump flag */
diff --git a/src/freedreno/drm/msm_pipe.c b/src/freedreno/drm/msm_pipe.c
index e42d3b9af65..718becbf782 100644
--- a/src/freedreno/drm/msm_pipe.c
+++ b/src/freedreno/drm/msm_pipe.c
@@ -80,6 +80,9 @@ static int msm_pipe_get_param(struct fd_pipe *pipe,
 	case FD_GMEM_SIZE:
 		*value = msm_pipe->gmem;
 		return 0;
+	case FD_GMEM_BASE:
+		*value = msm_pipe->gmem_base;
+		return 0;
 	case FD_CHIP_ID:
 		*value = msm_pipe->chip_id;
 		return 0;
@@ -227,6 +230,9 @@ struct fd_pipe * msm_pipe_new(struct fd_device *dev,
 	msm_pipe->gmem   = get_param(pipe, MSM_PARAM_GMEM_SIZE);
 	msm_pipe->chip_id = get_param(pipe, MSM_PARAM_CHIP_ID);
 
+	if (fd_device_version(pipe->dev) >= FD_VERSION_GMEM_BASE)
+		msm_pipe->gmem_base = get_param(pipe, MSM_PARAM_GMEM_BASE);
+
 	if (! msm_pipe->gpu_id)
 		goto fail;
 
diff --git a/src/freedreno/drm/msm_priv.h b/src/freedreno/drm/msm_priv.h
index 9cb60bc1db5..27f43d1c4ee 100644
--- a/src/freedreno/drm/msm_priv.h
+++ b/src/freedreno/drm/msm_priv.h
@@ -47,6 +47,7 @@ struct msm_pipe {
 	struct fd_pipe base;
 	uint32_t pipe;
 	uint32_t gpu_id;
+	uint64_t gmem_base;
 	uint32_t gmem;
 	uint32_t chip_id;
 	uint32_t queue_id;




More information about the mesa-commit mailing list