]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/amdgpu: expand the context control interface with trust flag
authorHuang Rui <ray.huang@amd.com>
Wed, 22 Apr 2020 21:49:17 +0000 (17:49 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 28 Apr 2020 20:20:28 +0000 (16:20 -0400)
This patch expands the context control function to support trusted flag while we
want to set command buffer in trusted mode.

Signed-off-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c

index 4b325a4f0b195f531c638f95f56979f746dac9a0..ac9090a282d8c34ac30e69f9d4834849693362ca 100644 (file)
@@ -214,7 +214,7 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
        if (job && ring->funcs->emit_cntxcntl) {
                status |= job->preamble_status;
                status |= job->preemption_status;
-               amdgpu_ring_emit_cntxcntl(ring, status);
+               amdgpu_ring_emit_cntxcntl(ring, status, false);
        }
 
        for (i = 0; i < num_ibs; ++i) {
index b6cae39b2e4b3907421ab61d72799c08444b14a0..5956eff2d784574d6a64ff8bb4dc7b69a3b2fdc1 100644 (file)
@@ -168,7 +168,8 @@ struct amdgpu_ring_funcs {
        void (*begin_use)(struct amdgpu_ring *ring);
        void (*end_use)(struct amdgpu_ring *ring);
        void (*emit_switch_buffer) (struct amdgpu_ring *ring);
-       void (*emit_cntxcntl) (struct amdgpu_ring *ring, uint32_t flags);
+       void (*emit_cntxcntl) (struct amdgpu_ring *ring, uint32_t flags,
+                              bool trusted);
        void (*emit_rreg)(struct amdgpu_ring *ring, uint32_t reg,
                          uint32_t reg_val_offs);
        void (*emit_wreg)(struct amdgpu_ring *ring, uint32_t reg, uint32_t val);
@@ -251,7 +252,7 @@ struct amdgpu_ring {
 #define amdgpu_ring_emit_gds_switch(r, v, db, ds, wb, ws, ab, as) (r)->funcs->emit_gds_switch((r), (v), (db), (ds), (wb), (ws), (ab), (as))
 #define amdgpu_ring_emit_hdp_flush(r) (r)->funcs->emit_hdp_flush((r))
 #define amdgpu_ring_emit_switch_buffer(r) (r)->funcs->emit_switch_buffer((r))
-#define amdgpu_ring_emit_cntxcntl(r, d) (r)->funcs->emit_cntxcntl((r), (d))
+#define amdgpu_ring_emit_cntxcntl(r, d, s) (r)->funcs->emit_cntxcntl((r), (d), (s))
 #define amdgpu_ring_emit_rreg(r, d, o) (r)->funcs->emit_rreg((r), (d), (o))
 #define amdgpu_ring_emit_wreg(r, d, v) (r)->funcs->emit_wreg((r), (d), (v))
 #define amdgpu_ring_emit_reg_wait(r, d, v, m) (r)->funcs->emit_reg_wait((r), (d), (v), (m))
index 5ee885c41b83199031ffbfa80f99829f02f6375a..201d0a2c460c046b1bd1cad666d73277540231d5 100644 (file)
@@ -7435,7 +7435,9 @@ static void gfx_v10_0_ring_emit_sb(struct amdgpu_ring *ring)
        amdgpu_ring_write(ring, 0);
 }
 
-static void gfx_v10_0_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags)
+static void gfx_v10_0_ring_emit_cntxcntl(struct amdgpu_ring *ring,
+                                        uint32_t flags,
+                                        bool trusted)
 {
        uint32_t dw2 = 0;
 
index aa1e1be852dd7559b49bdd5ec71b55d9e18f5430..283b7fc10f9890f499c3e9bce0ed7797eea1368d 100644 (file)
@@ -2969,7 +2969,8 @@ static uint64_t gfx_v6_0_get_gpu_clock_counter(struct amdgpu_device *adev)
        return clock;
 }
 
-static void gfx_v6_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags)
+static void gfx_v6_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags,
+                                     bool trusted)
 {
        if (flags & AMDGPU_HAVE_CTX_SWITCH)
                gfx_v6_0_ring_emit_vgt_flush(ring);
index e5a88cad44cb8ae83fade102cfba58b76fb380b1..f26e91354ba850713c6fce43df4911955deb4f71 100644 (file)
@@ -2320,7 +2320,8 @@ static void gfx_v7_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
        amdgpu_ring_write(ring, control);
 }
 
-static void gfx_v7_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags)
+static void gfx_v7_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags,
+                                     bool trusted)
 {
        uint32_t dw2 = 0;
 
index 2fcf6865abbade9bb68d6fa548ce4b6a1faefc3d..d1312d82925279dc58bfaf5ae99a27860b7adc4b 100644 (file)
@@ -6329,7 +6329,8 @@ static void gfx_v8_ring_emit_sb(struct amdgpu_ring *ring)
        amdgpu_ring_write(ring, 0);
 }
 
-static void gfx_v8_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags)
+static void gfx_v8_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags,
+                                     bool trusted)
 {
        uint32_t dw2 = 0;
 
index 89eaa8a89069793ea7c3c016f65efb8d0c3d4364..9f78c00f4319b61256144b78e3f819ebc8387a85 100644 (file)
@@ -5455,14 +5455,15 @@ static void gfx_v9_0_ring_emit_tmz(struct amdgpu_ring *ring, bool start,
                          | FRAME_CMD(start ? 0 : 1));
 }
 
-static void gfx_v9_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags)
+static void gfx_v9_ring_emit_cntxcntl(struct amdgpu_ring *ring, uint32_t flags,
+                                     bool trusted)
 {
        uint32_t dw2 = 0;
 
        if (amdgpu_sriov_vf(ring->adev))
                gfx_v9_0_ring_emit_ce_meta(ring);
 
-       gfx_v9_0_ring_emit_tmz(ring, true, false);
+       gfx_v9_0_ring_emit_tmz(ring, true, trusted);
 
        dw2 |= 0x80000000; /* set load_enable otherwise this package is just NOPs */
        if (flags & AMDGPU_HAVE_CTX_SWITCH) {