summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2018-08-13 15:58:18 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-08-16 13:14:40 -0400
commit974d541623929fa2622d27d5d338a5b63596794b (patch)
treef47a540bf07efd7f6cda68f49d3675c2462d731a /drivers/gpu/nvgpu/gk20a
parent1e7f229e5d92078f772d4f81893b23504cd847a8 (diff)
gpu: nvgpu: Move ltc HAL to common
Move implementation of ltc HAL to common/ltc. JIRA NVGPU-956 Change-Id: Id78d74e8612d7dacfb8d322d491abecd798e42b5 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1798461 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h18
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c11
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h10
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.c1
4 files changed, 14 insertions, 26 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index 5bb91f62..f802cd56 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -194,6 +194,15 @@ struct gpu_ops {
194 u32 (*cbc_fix_config)(struct gk20a *g, int base); 194 u32 (*cbc_fix_config)(struct gk20a *g, int base);
195 void (*flush)(struct gk20a *g); 195 void (*flush)(struct gk20a *g);
196 void (*intr_en_illegal_compstat)(struct gk20a *g, bool enable); 196 void (*intr_en_illegal_compstat)(struct gk20a *g, bool enable);
197 bool (*pri_is_ltc_addr)(struct gk20a *g, u32 addr);
198 bool (*is_ltcs_ltss_addr)(struct gk20a *g, u32 addr);
199 bool (*is_ltcn_ltss_addr)(struct gk20a *g, u32 addr);
200 void (*split_lts_broadcast_addr)(struct gk20a *g, u32 addr,
201 u32 *priv_addr_table,
202 u32 *priv_addr_table_index);
203 void (*split_ltc_broadcast_addr)(struct gk20a *g, u32 addr,
204 u32 *priv_addr_table,
205 u32 *priv_addr_table_index);
197 } ltc; 206 } ltc;
198 struct { 207 struct {
199 void (*isr_stall)(struct gk20a *g, u32 inst_id, u32 pri_base); 208 void (*isr_stall)(struct gk20a *g, u32 inst_id, u32 pri_base);
@@ -274,15 +283,6 @@ struct gpu_ops {
274 u32 *gpc_num, u32 *tpc_num); 283 u32 *gpc_num, u32 *tpc_num);
275 u32 (*get_tpc_num)(struct gk20a *g, u32 addr); 284 u32 (*get_tpc_num)(struct gk20a *g, u32 addr);
276 u32 (*get_egpc_base)(struct gk20a *g); 285 u32 (*get_egpc_base)(struct gk20a *g);
277 bool (*is_ltcs_ltss_addr)(struct gk20a *g, u32 addr);
278 bool (*is_ltcn_ltss_addr)(struct gk20a *g, u32 addr);
279 bool (*get_lts_in_ltc_shared_base)(void);
280 void (*split_lts_broadcast_addr)(struct gk20a *g, u32 addr,
281 u32 *priv_addr_table,
282 u32 *priv_addr_table_index);
283 void (*split_ltc_broadcast_addr)(struct gk20a *g, u32 addr,
284 u32 *priv_addr_table,
285 u32 *priv_addr_table_index);
286 void (*detect_sm_arch)(struct gk20a *g); 286 void (*detect_sm_arch)(struct gk20a *g);
287 int (*add_zbc_color)(struct gk20a *g, struct gr_gk20a *gr, 287 int (*add_zbc_color)(struct gk20a *g, struct gr_gk20a *gr,
288 struct zbc_entry *color_val, u32 index); 288 struct zbc_entry *color_val, u32 index);
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index bb54e00e..fbba02ca 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -59,7 +59,6 @@
59#include <nvgpu/hw/gk20a/hw_ram_gk20a.h> 59#include <nvgpu/hw/gk20a/hw_ram_gk20a.h>
60#include <nvgpu/hw/gk20a/hw_pri_ringmaster_gk20a.h> 60#include <nvgpu/hw/gk20a/hw_pri_ringmaster_gk20a.h>
61#include <nvgpu/hw/gk20a/hw_top_gk20a.h> 61#include <nvgpu/hw/gk20a/hw_top_gk20a.h>
62#include <nvgpu/hw/gk20a/hw_ltc_gk20a.h>
63#include <nvgpu/hw/gk20a/hw_fb_gk20a.h> 62#include <nvgpu/hw/gk20a/hw_fb_gk20a.h>
64#include <nvgpu/hw/gk20a/hw_pbdma_gk20a.h> 63#include <nvgpu/hw/gk20a/hw_pbdma_gk20a.h>
65 64
@@ -6256,11 +6255,11 @@ int gr_gk20a_decode_priv_addr(struct gk20a *g, u32 addr,
6256 } 6255 }
6257 *be_num = pri_get_be_num(g, addr); 6256 *be_num = pri_get_be_num(g, addr);
6258 return 0; 6257 return 0;
6259 } else if (pri_is_ltc_addr(addr)) { 6258 } else if (g->ops.ltc.pri_is_ltc_addr(g, addr)) {
6260 *addr_type = CTXSW_ADDR_TYPE_LTCS; 6259 *addr_type = CTXSW_ADDR_TYPE_LTCS;
6261 if (g->ops.gr.is_ltcs_ltss_addr(g, addr)) 6260 if (g->ops.ltc.is_ltcs_ltss_addr(g, addr))
6262 *broadcast_flags |= PRI_BROADCAST_FLAGS_LTCS; 6261 *broadcast_flags |= PRI_BROADCAST_FLAGS_LTCS;
6263 else if (g->ops.gr.is_ltcn_ltss_addr(g, addr)) 6262 else if (g->ops.ltc.is_ltcn_ltss_addr(g, addr))
6264 *broadcast_flags |= PRI_BROADCAST_FLAGS_LTSS; 6263 *broadcast_flags |= PRI_BROADCAST_FLAGS_LTSS;
6265 return 0; 6264 return 0;
6266 } else if (pri_is_fbpa_addr(g, addr)) { 6265 } else if (pri_is_fbpa_addr(g, addr)) {
@@ -6398,10 +6397,10 @@ int gr_gk20a_create_priv_addr_table(struct gk20a *g,
6398 g->ops.gr.egpc_etpc_priv_addr_table(g, addr, gpc_num, tpc_num, 6397 g->ops.gr.egpc_etpc_priv_addr_table(g, addr, gpc_num, tpc_num,
6399 broadcast_flags, priv_addr_table, &t); 6398 broadcast_flags, priv_addr_table, &t);
6400 } else if (broadcast_flags & PRI_BROADCAST_FLAGS_LTSS) { 6399 } else if (broadcast_flags & PRI_BROADCAST_FLAGS_LTSS) {
6401 g->ops.gr.split_lts_broadcast_addr(g, addr, 6400 g->ops.ltc.split_lts_broadcast_addr(g, addr,
6402 priv_addr_table, &t); 6401 priv_addr_table, &t);
6403 } else if (broadcast_flags & PRI_BROADCAST_FLAGS_LTCS) { 6402 } else if (broadcast_flags & PRI_BROADCAST_FLAGS_LTCS) {
6404 g->ops.gr.split_ltc_broadcast_addr(g, addr, 6403 g->ops.ltc.split_ltc_broadcast_addr(g, addr,
6405 priv_addr_table, &t); 6404 priv_addr_table, &t);
6406 } else if (broadcast_flags & PRI_BROADCAST_FLAGS_FBPA) { 6405 } else if (broadcast_flags & PRI_BROADCAST_FLAGS_FBPA) {
6407 g->ops.gr.split_fbpa_broadcast_addr(g, addr, 6406 g->ops.gr.split_fbpa_broadcast_addr(g, addr,
diff --git a/drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h b/drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h
index af390833..32a30d78 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h
@@ -29,8 +29,6 @@
29 * of the context state store for gr/compute contexts. 29 * of the context state store for gr/compute contexts.
30 */ 30 */
31 31
32#include <nvgpu/hw/gk20a/hw_ltc_gk20a.h>
33
34/* 32/*
35 * GPC pri addressing 33 * GPC pri addressing
36 */ 34 */
@@ -227,14 +225,6 @@ static inline u32 pri_ppc_addr(struct gk20a *g, u32 addr, u32 gpc, u32 ppc)
227 ppc_in_gpc_base + (ppc * ppc_in_gpc_stride) + addr; 225 ppc_in_gpc_base + (ppc * ppc_in_gpc_stride) + addr;
228} 226}
229 227
230/*
231 * LTC pri addressing
232 */
233static inline bool pri_is_ltc_addr(u32 addr)
234{
235 return ((addr >= ltc_pltcg_base_v()) && (addr < ltc_pltcg_extent_v()));
236}
237
238enum ctxsw_addr_type { 228enum ctxsw_addr_type {
239 CTXSW_ADDR_TYPE_SYS = 0, 229 CTXSW_ADDR_TYPE_SYS = 0,
240 CTXSW_ADDR_TYPE_GPC = 1, 230 CTXSW_ADDR_TYPE_GPC = 1,
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
index 5bba5d9c..ee63489e 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
@@ -52,7 +52,6 @@
52#include <nvgpu/hw/gk20a/hw_pram_gk20a.h> 52#include <nvgpu/hw/gk20a/hw_pram_gk20a.h>
53#include <nvgpu/hw/gk20a/hw_mc_gk20a.h> 53#include <nvgpu/hw/gk20a/hw_mc_gk20a.h>
54#include <nvgpu/hw/gk20a/hw_flush_gk20a.h> 54#include <nvgpu/hw/gk20a/hw_flush_gk20a.h>
55#include <nvgpu/hw/gk20a/hw_ltc_gk20a.h>
56 55
57/* 56/*
58 * GPU mapping life cycle 57 * GPU mapping life cycle