amdgpu/radeon: add secure api
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Fri, 6 Dec 2019 09:28:10 +0000 (10:28 +0100)
committerPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Mon, 11 May 2020 08:25:53 +0000 (10:25 +0200)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4401>

src/gallium/drivers/radeon/radeon_winsys.h
src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
src/gallium/winsys/amdgpu/drm/amdgpu_winsys.h
src/gallium/winsys/radeon/drm/radeon_drm_winsys.c

index f9fb5a5..27e32ff 100644 (file)
@@ -673,6 +673,13 @@ struct radeon_winsys {
 
    bool (*read_registers)(struct radeon_winsys *ws, unsigned reg_offset, unsigned num_registers,
                           uint32_t *out);
+
+   /**
+    * Secure context
+    */
+   bool (*ws_is_secure)(struct radeon_winsys *ws);
+   bool (*cs_is_secure)(struct radeon_cmdbuf *cs);
+   void (*cs_set_secure)(struct radeon_cmdbuf *cs, bool secure);
 };
 
 static inline bool radeon_emitted(struct radeon_cmdbuf *cs, unsigned num_dw)
index 26c14d8..a50257b 100644 (file)
@@ -122,6 +122,9 @@ struct amdgpu_cs_context {
 
    /* the error returned from cs_flush for non-async submissions */
    int                         error_code;
+
+   /* TMZ: will this command be submitted using the TMZ flag */
+   bool secure;
 };
 
 struct amdgpu_cs {
index b6cc0d0..3d81129 100644 (file)
@@ -325,6 +325,24 @@ static bool kms_handle_equals(const void *a, const void *b)
    return a == b;
 }
 
+static bool amdgpu_ws_is_secure(struct radeon_winsys *rws)
+{
+   struct amdgpu_winsys *ws = amdgpu_winsys(rws);
+   return ws->secure;
+}
+
+static bool amdgpu_cs_is_secure(struct radeon_cmdbuf *rcs)
+{
+   struct amdgpu_cs *cs = amdgpu_cs(rcs);
+   return cs->csc->secure;
+}
+
+static void amdgpu_cs_set_secure(struct radeon_cmdbuf *rcs, bool secure)
+{
+   struct amdgpu_cs *cs = amdgpu_cs(rcs);
+   cs->csc->secure = secure;
+}
+
 PUBLIC struct radeon_winsys *
 amdgpu_winsys_create(int fd, const struct pipe_screen_config *config,
                     radeon_screen_create_t screen_create)
@@ -485,6 +503,9 @@ amdgpu_winsys_create(int fd, const struct pipe_screen_config *config,
    ws->base.query_value = amdgpu_query_value;
    ws->base.read_registers = amdgpu_read_registers;
    ws->base.pin_threads_to_L3_cache = amdgpu_pin_threads_to_L3_cache;
+   ws->base.ws_is_secure = amdgpu_ws_is_secure;
+   ws->base.cs_is_secure = amdgpu_cs_is_secure;
+   ws->base.cs_set_secure = amdgpu_cs_set_secure;
 
    amdgpu_bo_init_functions(ws);
    amdgpu_cs_init_functions(ws);
index 7e677b5..d75efb2 100644 (file)
@@ -85,6 +85,7 @@ struct amdgpu_winsys {
    bool debug_all_bos;
    bool reserve_vmid;
    bool zero_all_vram_allocs;
+   bool secure;
 
    /* List of all allocated buffers */
    simple_mtx_t global_bo_list_lock;
index 73ef4be..a8f3cb3 100644 (file)
@@ -801,6 +801,20 @@ static void radeon_pin_threads_to_L3_cache(struct radeon_winsys *ws,
    }
 }
 
+static bool radeon_ws_is_secure(struct radeon_winsys* ws)
+{
+    return false;
+}
+
+static bool radeon_cs_is_secure(struct radeon_cmdbuf* cs)
+{
+    return false;
+}
+
+static void radeon_cs_set_secure(struct radeon_cmdbuf* cs, bool enable)
+{
+}
+
 PUBLIC struct radeon_winsys *
 radeon_drm_winsys_create(int fd, const struct pipe_screen_config *config,
                          radeon_screen_create_t screen_create)
@@ -872,6 +886,9 @@ radeon_drm_winsys_create(int fd, const struct pipe_screen_config *config,
    ws->base.cs_request_feature = radeon_cs_request_feature;
    ws->base.query_value = radeon_query_value;
    ws->base.read_registers = radeon_read_registers;
+    ws->base.ws_is_secure = radeon_ws_is_secure;
+    ws->base.cs_is_secure = radeon_cs_is_secure;
+    ws->base.cs_set_secure = radeon_cs_set_secure;
 
    radeon_drm_bo_init_functions(ws);
    radeon_drm_cs_init_functions(ws);