aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2019-04-30 10:03:54 -0700
committerRob Clark <[email protected]>2019-05-02 11:19:22 -0700
commit0704ddb2e5845ed296586a19c3eccd83cac74182 (patch)
tree910b451052caabf85d03b1762aff292c4100a518
parenta99c360a463019a4aca9b551bd79c9c84f297468 (diff)
freedreno/drm: expose GMEM_BASE address
Needed for sampling from tile buffer (GMEM). Signed-off-by: Rob Clark <[email protected]> Reviewed-by: Kristian H. Kristensen <[email protected]>
-rw-r--r--src/freedreno/drm/freedreno_drmif.h2
-rw-r--r--src/freedreno/drm/msm_pipe.c6
-rw-r--r--src/freedreno/drm/msm_priv.h1
3 files changed, 9 insertions, 0 deletions
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;