summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu
diff options
context:
space:
mode:
authorAlex Waterman <alexw@nvidia.com>2017-08-11 16:35:24 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-08-14 14:18:31 -0400
commit36f02cf49729b32aa241cb9f1f235749da681dd1 (patch)
treeac2569ec2c828489a56aedcf9c85cadcbc0dee62 /drivers/gpu/nvgpu
parent4412728b9606a2e2506961ed6e444a344af7ca29 (diff)
gpu: nvgpu: Add struct gk20a ptr to FUSE APIs
Add a pointer to struct gk20a to the FUSE APIs. This helps QNX builds avoid any static data definitions. Also this change plumbs struct gk20a in some of the Linux clk code and fixes a few minor style nits. Change-Id: I27dfb2c4e9a352f784d6cead150460d8e9e808d3 Signed-off-by: Alex Waterman <alexw@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1537611 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Richard Zhao <rizhao@nvidia.com> Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Sourab Gupta <sourabg@nvidia.com> Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r--drivers/gpu/nvgpu/common/linux/fuse.c14
-rw-r--r--drivers/gpu/nvgpu/gm20b/clk_gm20b.c13
-rw-r--r--drivers/gpu/nvgpu/gm20b/gr_gm20b.c16
-rw-r--r--drivers/gpu/nvgpu/gm20b/pmu_gm20b.c9
-rw-r--r--drivers/gpu/nvgpu/gp10b/gr_gp10b.c10
-rw-r--r--drivers/gpu/nvgpu/gp10b/pmu_gp10b.c9
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/fuse.h16
7 files changed, 44 insertions, 43 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/fuse.c b/drivers/gpu/nvgpu/common/linux/fuse.c
index 993cbc5a..27851f92 100644
--- a/drivers/gpu/nvgpu/common/linux/fuse.c
+++ b/drivers/gpu/nvgpu/common/linux/fuse.c
@@ -15,7 +15,7 @@
15 15
16#include <nvgpu/fuse.h> 16#include <nvgpu/fuse.h>
17 17
18int nvgpu_tegra_get_gpu_speedo_id(void) 18int nvgpu_tegra_get_gpu_speedo_id(struct gk20a *g)
19{ 19{
20 return tegra_sku_info.gpu_speedo_id; 20 return tegra_sku_info.gpu_speedo_id;
21} 21}
@@ -24,32 +24,32 @@ int nvgpu_tegra_get_gpu_speedo_id(void)
24 * Use tegra_fuse_control_read/write() APIs for fuse offsets upto 0x100 24 * Use tegra_fuse_control_read/write() APIs for fuse offsets upto 0x100
25 * Use tegra_fuse_readl/writel() APIs for fuse offsets above 0x100 25 * Use tegra_fuse_readl/writel() APIs for fuse offsets above 0x100
26 */ 26 */
27void nvgpu_tegra_fuse_write_bypass(u32 val) 27void nvgpu_tegra_fuse_write_bypass(struct gk20a *g, u32 val)
28{ 28{
29 tegra_fuse_control_write(val, FUSE_FUSEBYPASS_0); 29 tegra_fuse_control_write(val, FUSE_FUSEBYPASS_0);
30} 30}
31 31
32void nvgpu_tegra_fuse_write_access_sw(u32 val) 32void nvgpu_tegra_fuse_write_access_sw(struct gk20a *g, u32 val)
33{ 33{
34 tegra_fuse_control_write(val, FUSE_WRITE_ACCESS_SW_0); 34 tegra_fuse_control_write(val, FUSE_WRITE_ACCESS_SW_0);
35} 35}
36 36
37void nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(u32 val) 37void nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(struct gk20a *g, u32 val)
38{ 38{
39 tegra_fuse_writel(val, FUSE_OPT_GPU_TPC0_DISABLE_0); 39 tegra_fuse_writel(val, FUSE_OPT_GPU_TPC0_DISABLE_0);
40} 40}
41 41
42void nvgpu_tegra_fuse_write_opt_gpu_tpc1_disable(u32 val) 42void nvgpu_tegra_fuse_write_opt_gpu_tpc1_disable(struct gk20a *g, u32 val)
43{ 43{
44 tegra_fuse_writel(val, FUSE_OPT_GPU_TPC1_DISABLE_0); 44 tegra_fuse_writel(val, FUSE_OPT_GPU_TPC1_DISABLE_0);
45} 45}
46 46
47int nvgpu_tegra_fuse_read_gcplex_config_fuse(u32 *val) 47int nvgpu_tegra_fuse_read_gcplex_config_fuse(struct gk20a *g, u32 *val)
48{ 48{
49 return tegra_fuse_readl(FUSE_GCPLEX_CONFIG_FUSE_0, val); 49 return tegra_fuse_readl(FUSE_GCPLEX_CONFIG_FUSE_0, val);
50} 50}
51 51
52int nvgpu_tegra_fuse_read_reserved_calib(u32 *val) 52int nvgpu_tegra_fuse_read_reserved_calib(struct gk20a *g, u32 *val)
53{ 53{
54 return tegra_fuse_readl(FUSE_RESERVED_CALIB0_0, val); 54 return tegra_fuse_readl(FUSE_RESERVED_CALIB0_0, val);
55} 55}
diff --git a/drivers/gpu/nvgpu/gm20b/clk_gm20b.c b/drivers/gpu/nvgpu/gm20b/clk_gm20b.c
index 22501c64..027d4fb6 100644
--- a/drivers/gpu/nvgpu/gm20b/clk_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/clk_gm20b.c
@@ -258,12 +258,13 @@ static inline int fuse_get_gpcpll_adc_intercept_uv(u32 val)
258 return ((val >> 4) & 0x3ff) * 1000 + ((val >> 0) & 0xf) * 100; 258 return ((val >> 4) & 0x3ff) * 1000 + ((val >> 0) & 0xf) * 100;
259} 259}
260 260
261static int nvgpu_fuse_calib_gpcpll_get_adc(int *slope_uv, int *intercept_uv) 261static int nvgpu_fuse_calib_gpcpll_get_adc(struct gk20a *g,
262 int *slope_uv, int *intercept_uv)
262{ 263{
263 u32 val; 264 u32 val;
264 int ret; 265 int ret;
265 266
266 ret = nvgpu_tegra_fuse_read_reserved_calib(&val); 267 ret = nvgpu_tegra_fuse_read_reserved_calib(g, &val);
267 if (ret) 268 if (ret)
268 return ret; 269 return ret;
269 270
@@ -276,9 +277,9 @@ static int nvgpu_fuse_calib_gpcpll_get_adc(int *slope_uv, int *intercept_uv)
276} 277}
277 278
278#ifdef CONFIG_TEGRA_USE_NA_GPCPLL 279#ifdef CONFIG_TEGRA_USE_NA_GPCPLL
279static bool nvgpu_fuse_can_use_na_gpcpll(void) 280static bool nvgpu_fuse_can_use_na_gpcpll(struct gk20a *g)
280{ 281{
281 return nvgpu_tegra_get_gpu_speedo_id(); 282 return nvgpu_tegra_get_gpu_speedo_id(g);
282} 283}
283#endif 284#endif
284 285
@@ -291,7 +292,7 @@ static int clk_config_calibration_params(struct gk20a *g)
291 int slope, offs; 292 int slope, offs;
292 struct pll_parms *p = &gpc_pll_params; 293 struct pll_parms *p = &gpc_pll_params;
293 294
294 if (!nvgpu_fuse_calib_gpcpll_get_adc(&slope, &offs)) { 295 if (!nvgpu_fuse_calib_gpcpll_get_adc(g, &slope, &offs)) {
295 p->uvdet_slope = slope; 296 p->uvdet_slope = slope;
296 p->uvdet_offs = offs; 297 p->uvdet_offs = offs;
297 } 298 }
@@ -1186,7 +1187,7 @@ int gm20b_init_clk_setup_sw(struct gk20a *g)
1186 */ 1187 */
1187 clk_config_calibration_params(g); 1188 clk_config_calibration_params(g);
1188#ifdef CONFIG_TEGRA_USE_NA_GPCPLL 1189#ifdef CONFIG_TEGRA_USE_NA_GPCPLL
1189 if (nvgpu_fuse_can_use_na_gpcpll()) { 1190 if (nvgpu_fuse_can_use_na_gpcpll(g)) {
1190 /* NA mode is supported only at max update rate 38.4 MHz */ 1191 /* NA mode is supported only at max update rate 38.4 MHz */
1191 BUG_ON(clk->gpc_pll.clk_in != gpc_pll_params.max_u); 1192 BUG_ON(clk->gpc_pll.clk_in != gpc_pll_params.max_u);
1192 clk->gpc_pll.mode = GPC_PLL_MODE_DVFS; 1193 clk->gpc_pll.mode = GPC_PLL_MODE_DVFS;
diff --git a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
index f60d880d..87cf3f01 100644
--- a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
@@ -548,18 +548,18 @@ static u32 gr_gm20b_get_gpc_tpc_mask(struct gk20a *g, u32 gpc_index)
548 548
549static void gr_gm20b_set_gpc_tpc_mask(struct gk20a *g, u32 gpc_index) 549static void gr_gm20b_set_gpc_tpc_mask(struct gk20a *g, u32 gpc_index)
550{ 550{
551 nvgpu_tegra_fuse_write_bypass(0x1); 551 nvgpu_tegra_fuse_write_bypass(g, 0x1);
552 nvgpu_tegra_fuse_write_access_sw(0x0); 552 nvgpu_tegra_fuse_write_access_sw(g, 0x0);
553 553
554 if (g->gr.gpc_tpc_mask[gpc_index] == 0x1) { 554 if (g->gr.gpc_tpc_mask[gpc_index] == 0x1) {
555 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(0x0); 555 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(g, 0x0);
556 nvgpu_tegra_fuse_write_opt_gpu_tpc1_disable(0x1); 556 nvgpu_tegra_fuse_write_opt_gpu_tpc1_disable(g, 0x1);
557 } else if (g->gr.gpc_tpc_mask[gpc_index] == 0x2) { 557 } else if (g->gr.gpc_tpc_mask[gpc_index] == 0x2) {
558 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(0x1); 558 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(g, 0x1);
559 nvgpu_tegra_fuse_write_opt_gpu_tpc1_disable(0x0); 559 nvgpu_tegra_fuse_write_opt_gpu_tpc1_disable(g, 0x0);
560 } else { 560 } else {
561 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(0x0); 561 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(g, 0x0);
562 nvgpu_tegra_fuse_write_opt_gpu_tpc1_disable(0x0); 562 nvgpu_tegra_fuse_write_opt_gpu_tpc1_disable(g, 0x0);
563 } 563 }
564} 564}
565 565
diff --git a/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c b/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c
index 98cd3906..b85e72a0 100644
--- a/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/pmu_gm20b.c
@@ -265,13 +265,12 @@ static void pmu_dump_security_fuses_gm20b(struct gk20a *g)
265{ 265{
266 u32 val; 266 u32 val;
267 267
268 nvgpu_err(g, "FUSE_OPT_SEC_DEBUG_EN_0 : 0x%x", 268 nvgpu_err(g, "FUSE_OPT_SEC_DEBUG_EN_0: 0x%x",
269 gk20a_readl(g, fuse_opt_sec_debug_en_r())); 269 gk20a_readl(g, fuse_opt_sec_debug_en_r()));
270 nvgpu_err(g, "FUSE_OPT_PRIV_SEC_EN_0 : 0x%x", 270 nvgpu_err(g, "FUSE_OPT_PRIV_SEC_EN_0: 0x%x",
271 gk20a_readl(g, fuse_opt_priv_sec_en_r())); 271 gk20a_readl(g, fuse_opt_priv_sec_en_r()));
272 nvgpu_tegra_fuse_read_gcplex_config_fuse(&val); 272 nvgpu_tegra_fuse_read_gcplex_config_fuse(g, &val);
273 nvgpu_err(g, "FUSE_GCPLEX_CONFIG_FUSE_0 : 0x%x", 273 nvgpu_err(g, "FUSE_GCPLEX_CONFIG_FUSE_0: 0x%x", val);
274 val);
275} 274}
276 275
277void gm20b_init_pmu_ops(struct gk20a *g) 276void gm20b_init_pmu_ops(struct gk20a *g)
diff --git a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
index d2b86e51..05fbeb21 100644
--- a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
@@ -1600,15 +1600,15 @@ static void gr_gp10b_init_cyclestats(struct gk20a *g)
1600 1600
1601static void gr_gp10b_set_gpc_tpc_mask(struct gk20a *g, u32 gpc_index) 1601static void gr_gp10b_set_gpc_tpc_mask(struct gk20a *g, u32 gpc_index)
1602{ 1602{
1603 nvgpu_tegra_fuse_write_bypass(0x1); 1603 nvgpu_tegra_fuse_write_bypass(g, 0x1);
1604 nvgpu_tegra_fuse_write_access_sw(0x0); 1604 nvgpu_tegra_fuse_write_access_sw(g, 0x0);
1605 1605
1606 if (g->gr.gpc_tpc_mask[gpc_index] == 0x1) 1606 if (g->gr.gpc_tpc_mask[gpc_index] == 0x1)
1607 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(0x2); 1607 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(g, 0x2);
1608 else if (g->gr.gpc_tpc_mask[gpc_index] == 0x2) 1608 else if (g->gr.gpc_tpc_mask[gpc_index] == 0x2)
1609 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(0x1); 1609 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(g, 0x1);
1610 else 1610 else
1611 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(0x0); 1611 nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(g, 0x0);
1612} 1612}
1613 1613
1614static void gr_gp10b_get_access_map(struct gk20a *g, 1614static void gr_gp10b_get_access_map(struct gk20a *g,
diff --git a/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c b/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c
index e9a9b922..da8044cd 100644
--- a/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/pmu_gp10b.c
@@ -378,13 +378,12 @@ static void pmu_dump_security_fuses_gp10b(struct gk20a *g)
378{ 378{
379 u32 val; 379 u32 val;
380 380
381 nvgpu_err(g, "FUSE_OPT_SEC_DEBUG_EN_0 : 0x%x", 381 nvgpu_err(g, "FUSE_OPT_SEC_DEBUG_EN_0: 0x%x",
382 gk20a_readl(g, fuse_opt_sec_debug_en_r())); 382 gk20a_readl(g, fuse_opt_sec_debug_en_r()));
383 nvgpu_err(g, "FUSE_OPT_PRIV_SEC_EN_0 : 0x%x", 383 nvgpu_err(g, "FUSE_OPT_PRIV_SEC_EN_0: 0x%x",
384 gk20a_readl(g, fuse_opt_priv_sec_en_r())); 384 gk20a_readl(g, fuse_opt_priv_sec_en_r()));
385 nvgpu_tegra_fuse_read_gcplex_config_fuse(&val); 385 nvgpu_tegra_fuse_read_gcplex_config_fuse(g, &val);
386 nvgpu_err(g, "FUSE_GCPLEX_CONFIG_FUSE_0 : 0x%x", 386 nvgpu_err(g, "FUSE_GCPLEX_CONFIG_FUSE_0: 0x%x", val);
387 val);
388} 387}
389 388
390static bool gp10b_is_pmu_supported(struct gk20a *g) 389static bool gp10b_is_pmu_supported(struct gk20a *g)
diff --git a/drivers/gpu/nvgpu/include/nvgpu/fuse.h b/drivers/gpu/nvgpu/include/nvgpu/fuse.h
index 3650fd58..c10ece1d 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/fuse.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/fuse.h
@@ -13,13 +13,15 @@
13#ifndef __NVGPU_FUSE_H__ 13#ifndef __NVGPU_FUSE_H__
14#define __NVGPU_FUSE_H__ 14#define __NVGPU_FUSE_H__
15 15
16int nvgpu_tegra_get_gpu_speedo_id(void); 16struct gk20a;
17 17
18void nvgpu_tegra_fuse_write_bypass(u32 val); 18int nvgpu_tegra_get_gpu_speedo_id(struct gk20a *g);
19void nvgpu_tegra_fuse_write_access_sw(u32 val); 19
20void nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(u32 val); 20void nvgpu_tegra_fuse_write_bypass(struct gk20a *g, u32 val);
21void nvgpu_tegra_fuse_write_opt_gpu_tpc1_disable(u32 val); 21void nvgpu_tegra_fuse_write_access_sw(struct gk20a *g, u32 val);
22int nvgpu_tegra_fuse_read_gcplex_config_fuse(u32 *val); 22void nvgpu_tegra_fuse_write_opt_gpu_tpc0_disable(struct gk20a *g, u32 val);
23int nvgpu_tegra_fuse_read_reserved_calib(u32 *val); 23void nvgpu_tegra_fuse_write_opt_gpu_tpc1_disable(struct gk20a *g, u32 val);
24int nvgpu_tegra_fuse_read_gcplex_config_fuse(struct gk20a *g, u32 *val);
25int nvgpu_tegra_fuse_read_reserved_calib(struct gk20a *g, u32 *val);
24 26
25#endif 27#endif