diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-04-06 16:10:32 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-04-15 11:48:20 -0400 |
commit | 6839341bf8ffafa115cfc0427bba694ee1d131f3 (patch) | |
tree | 1f9369a3bacf0f1a2cc23371f5de988efdc07c31 /drivers/gpu/nvgpu/gm20b/ltc_gm20b.c | |
parent | 61e009c0f8874898335e6c47a610233c3382be47 (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.c | 21 |
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 & |