freedreno/drm: expose GMEM_BASE address
authorRob Clark <robdclark@chromium.org>
Tue, 30 Apr 2019 17:03:54 +0000 (10:03 -0700)
committerRob Clark <robdclark@chromium.org>
Thu, 2 May 2019 18:19:22 +0000 (11:19 -0700)
Needed for sampling from tile buffer (GMEM).

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
src/freedreno/drm/freedreno_drmif.h
src/freedreno/drm/msm_pipe.c
src/freedreno/drm/msm_priv.h

index e181da302b3d1a10e3654811018f136cb8bc4794..210b5c1860463cd22a36cc3fccf1559586477131 100644 (file)
@@ -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 */
index e42d3b9af65deec68b40bd1799ec5fca2a3a11c3..718becbf7820b1f2057dc0eebd5a7637d9239c51 100644 (file)
@@ -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;
 
index 9cb60bc1db50fb9b6d95c3a403e6f9960f149005..27f43d1c4ee339230b55f6e017b1fb8668061b1f 100644 (file)
@@ -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;