summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2016-04-06 16:10:32 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-04-15 11:48:20 -0400
commit6839341bf8ffafa115cfc0427bba694ee1d131f3 (patch)
tree1f9369a3bacf0f1a2cc23371f5de988efdc07c31 /drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
parent61e009c0f8874898335e6c47a610233c3382be47 (diff)
gpu: nvgpu: Add litter values HAL
Move per-chip constants to be returned by a chip specific function. Implement get_litter_value() for each chip. Change-Id: I2a2730fce14010924d2507f6fa15cc2ea0795113 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/1121383
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/ltc_gm20b.c')
-rw-r--r--drivers/gpu/nvgpu/gm20b/ltc_gm20b.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c b/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
index e4e27764..4fc9d51b 100644
--- a/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/ltc_gm20b.c
@@ -20,7 +20,6 @@
20#include "hw_mc_gm20b.h" 20#include "hw_mc_gm20b.h"
21#include "hw_ltc_gm20b.h" 21#include "hw_ltc_gm20b.h"
22#include "hw_top_gm20b.h" 22#include "hw_top_gm20b.h"
23#include "hw_proj_gm20b.h"
24#include "hw_pri_ringmaster_gm20b.h" 23#include "hw_pri_ringmaster_gm20b.h"
25 24
26#include "gk20a/ltc_common.c" 25#include "gk20a/ltc_common.c"
@@ -109,6 +108,8 @@ int gm20b_ltc_cbc_ctrl(struct gk20a *g, enum gk20a_cbc_op op,
109 s32 retry = 200; 108 s32 retry = 200;
110 u32 slices_per_ltc = ltc_ltcs_ltss_cbc_param_slices_per_ltc_v( 109 u32 slices_per_ltc = ltc_ltcs_ltss_cbc_param_slices_per_ltc_v(
111 gk20a_readl(g, ltc_ltcs_ltss_cbc_param_r())); 110 gk20a_readl(g, ltc_ltcs_ltss_cbc_param_r()));
111 u32 ltc_stride = nvgpu_get_litter_value(g, GPU_LIT_LTC_STRIDE);
112 u32 lts_stride = nvgpu_get_litter_value(g, GPU_LIT_LTS_STRIDE);
112 113
113 gk20a_dbg_fn(""); 114 gk20a_dbg_fn("");
114 115
@@ -139,8 +140,7 @@ int gm20b_ltc_cbc_ctrl(struct gk20a *g, enum gk20a_cbc_op op,
139 for (slice = 0; slice < slices_per_ltc; slice++) { 140 for (slice = 0; slice < slices_per_ltc; slice++) {
140 141
141 ctrl1 = ltc_ltc0_lts0_cbc_ctrl1_r() + 142 ctrl1 = ltc_ltc0_lts0_cbc_ctrl1_r() +
142 ltc * proj_ltc_stride_v() + 143 ltc * ltc_stride + slice * lts_stride;
143 slice * proj_lts_stride_v();
144 144
145 retry = 200; 145 retry = 200;
146 do { 146 do {
@@ -198,6 +198,8 @@ void gm20b_ltc_isr(struct gk20a *g)
198{ 198{
199 u32 mc_intr, ltc_intr; 199 u32 mc_intr, ltc_intr;
200 int ltc, slice; 200 int ltc, slice;
201 u32 ltc_stride = nvgpu_get_litter_value(g, GPU_LIT_LTC_STRIDE);
202 u32 lts_stride = nvgpu_get_litter_value(g, GPU_LIT_LTS_STRIDE);
201 203
202 mc_intr = gk20a_readl(g, mc_intr_ltc_r()); 204 mc_intr = gk20a_readl(g, mc_intr_ltc_r());
203 gk20a_err(dev_from_gk20a(g), "mc_ltc_intr: %08x", 205 gk20a_err(dev_from_gk20a(g), "mc_ltc_intr: %08x",
@@ -207,13 +209,13 @@ void gm20b_ltc_isr(struct gk20a *g)
207 continue; 209 continue;
208 for (slice = 0; slice < g->gr.slices_per_ltc; slice++) { 210 for (slice = 0; slice < g->gr.slices_per_ltc; slice++) {
209 ltc_intr = gk20a_readl(g, ltc_ltc0_lts0_intr_r() + 211 ltc_intr = gk20a_readl(g, ltc_ltc0_lts0_intr_r() +
210 proj_ltc_stride_v() * ltc + 212 ltc_stride * ltc +
211 proj_lts_stride_v() * slice); 213 lts_stride * slice);
212 gk20a_err(dev_from_gk20a(g), "ltc%d, slice %d: %08x", 214 gk20a_err(dev_from_gk20a(g), "ltc%d, slice %d: %08x",
213 ltc, slice, ltc_intr); 215 ltc, slice, ltc_intr);
214 gk20a_writel(g, ltc_ltc0_lts0_intr_r() + 216 gk20a_writel(g, ltc_ltc0_lts0_intr_r() +
215 proj_ltc_stride_v() * ltc + 217 ltc_stride * ltc +
216 proj_lts_stride_v() * slice, 218 lts_stride * slice,
217 ltc_intr); 219 ltc_intr);
218 } 220 }
219 } 221 }
@@ -287,6 +289,7 @@ void gm20b_flush_ltc(struct gk20a *g)
287{ 289{
288 unsigned long timeout; 290 unsigned long timeout;
289 int ltc; 291 int ltc;
292 u32 ltc_stride = nvgpu_get_litter_value(g, GPU_LIT_LTC_STRIDE);
290 293
291#define __timeout_init() \ 294#define __timeout_init() \
292 do { \ 295 do { \
@@ -317,7 +320,7 @@ void gm20b_flush_ltc(struct gk20a *g)
317 __timeout_init(); 320 __timeout_init();
318 do { 321 do {
319 int cmgmt1 = ltc_ltc0_ltss_tstg_cmgmt1_r() + 322 int cmgmt1 = ltc_ltc0_ltss_tstg_cmgmt1_r() +
320 ltc * proj_ltc_stride_v(); 323 ltc * ltc_stride;
321 op_pending = gk20a_readl(g, cmgmt1); 324 op_pending = gk20a_readl(g, cmgmt1);
322 __timeout_check(); 325 __timeout_check();
323 } while (op_pending & 326 } while (op_pending &
@@ -338,7 +341,7 @@ void gm20b_flush_ltc(struct gk20a *g)
338 __timeout_init(); 341 __timeout_init();
339 do { 342 do {
340 int cmgmt0 = ltc_ltc0_ltss_tstg_cmgmt0_r() + 343 int cmgmt0 = ltc_ltc0_ltss_tstg_cmgmt0_r() +
341 ltc * proj_ltc_stride_v(); 344 ltc * ltc_stride;
342 op_pending = gk20a_readl(g, cmgmt0); 345 op_pending = gk20a_readl(g, cmgmt0);
343 __timeout_check(); 346 __timeout_check();
344 } while (op_pending & 347 } while (op_pending &