diff options
author | Rob Clark <robdclark@chromium.org> | 2019-04-30 10:03:54 -0700 |
---|---|---|
committer | Rob Clark <robdclark@chromium.org> | 2019-05-02 11:19:22 -0700 |
commit | 0704ddb2e5845ed296586a19c3eccd83cac74182 (patch) | |
tree | 910b451052caabf85d03b1762aff292c4100a518 /src/freedreno | |
parent | a99c360a463019a4aca9b551bd79c9c84f297468 (diff) |
freedreno/drm: expose GMEM_BASE address
Needed for sampling from tile buffer (GMEM).
Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Diffstat (limited to 'src/freedreno')
-rw-r--r-- | src/freedreno/drm/freedreno_drmif.h | 2 | ||||
-rw-r--r-- | src/freedreno/drm/msm_pipe.c | 6 | ||||
-rw-r--r-- | src/freedreno/drm/msm_priv.h | 1 |
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; |