summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp10b
diff options
context:
space:
mode:
authorVinod G <vinodg@nvidia.com>2018-07-10 19:13:03 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-07-19 03:06:43 -0400
commitd859c5f4a03b975dc493f72a35016e83adad279a (patch)
treee7a1242a1d130a726456cf3a928a34941aad98f4 /drivers/gpu/nvgpu/gp10b
parent74e1a11d840b3d7411b380c2e4e4c99126ea32a5 (diff)
nvgpu: gv11b: Rearrange gr function
Moved gv11b_detect_ecc_enabled_units function from gv11b.c to gr_gv11b.c, as this is being used only in gr_gv11b file. In order to avoid GR code touching fuse registers, as it need to include fuse HW headers in GR code, introduced two fuse HALs which are being called from GR code. is_opt_ecc_enable for checking whether ecc enable bit is set in fuse register and is_opt_feature_overide_disable for checking whether feature override disable bit is set in fuse register. Initialized fuse HAL functions for chips that make use of those HAL functions. JIRA NVGPU-615 Change-Id: Iafe5a3940bb19cb3da51e270403450b63c2f67a3 Signed-off-by: Vinod G <vinodg@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1775564 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gp10b')
-rw-r--r--drivers/gpu/nvgpu/gp10b/fuse_gp10b.c13
-rw-r--r--drivers/gpu/nvgpu/gp10b/fuse_gp10b.h4
-rw-r--r--drivers/gpu/nvgpu/gp10b/gp10b.c26
-rw-r--r--drivers/gpu/nvgpu/gp10b/gr_gp10b.c12
-rw-r--r--drivers/gpu/nvgpu/gp10b/hal_gp10b.c3
5 files changed, 37 insertions, 21 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/fuse_gp10b.c b/drivers/gpu/nvgpu/gp10b/fuse_gp10b.c
index c1fc6be7..52087676 100644
--- a/drivers/gpu/nvgpu/gp10b/fuse_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/fuse_gp10b.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * GP10B FUSE 2 * GP10B FUSE
3 * 3 *
4 * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. 4 * Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved.
5 * 5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a 6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"), 7 * copy of this software and associated documentation files (the "Software"),
@@ -91,3 +91,14 @@ int gp10b_fuse_check_priv_security(struct gk20a *g)
91 91
92 return 0; 92 return 0;
93} 93}
94
95bool gp10b_fuse_is_opt_ecc_enable(struct gk20a *g)
96{
97 return gk20a_readl(g, fuse_opt_ecc_en_r()) != 0U;
98}
99
100bool gp10b_fuse_is_opt_feature_override_disable(struct gk20a *g)
101{
102 return gk20a_readl(g,
103 fuse_opt_feature_fuses_override_disable_r()) != 0U;
104}
diff --git a/drivers/gpu/nvgpu/gp10b/fuse_gp10b.h b/drivers/gpu/nvgpu/gp10b/fuse_gp10b.h
index 1acb45d1..d9037e22 100644
--- a/drivers/gpu/nvgpu/gp10b/fuse_gp10b.h
+++ b/drivers/gpu/nvgpu/gp10b/fuse_gp10b.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * GP10B FUSE 2 * GP10B FUSE
3 * 3 *
4 * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. 4 * Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved.
5 * 5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a 6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"), 7 * copy of this software and associated documentation files (the "Software"),
@@ -28,5 +28,7 @@
28struct gk20a; 28struct gk20a;
29 29
30int gp10b_fuse_check_priv_security(struct gk20a *g); 30int gp10b_fuse_check_priv_security(struct gk20a *g);
31bool gp10b_fuse_is_opt_ecc_enable(struct gk20a *g);
32bool gp10b_fuse_is_opt_feature_override_disable(struct gk20a *g);
31 33
32#endif 34#endif
diff --git a/drivers/gpu/nvgpu/gp10b/gp10b.c b/drivers/gpu/nvgpu/gp10b/gp10b.c
index 51dc4301..7991944c 100644
--- a/drivers/gpu/nvgpu/gp10b/gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/gp10b.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * GP10B Graphics 2 * GP10B Graphics
3 * 3 *
4 * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved. 4 * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved.
5 * 5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a 6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"), 7 * copy of this software and associated documentation files (the "Software"),
@@ -28,15 +28,13 @@
28 28
29#include "gp10b.h" 29#include "gp10b.h"
30 30
31#include <nvgpu/hw/gp10b/hw_fuse_gp10b.h>
32#include <nvgpu/hw/gp10b/hw_gr_gp10b.h> 31#include <nvgpu/hw/gp10b/hw_gr_gp10b.h>
33 32
34static void gp10b_detect_ecc_enabled_units(struct gk20a *g) 33static void gp10b_detect_ecc_enabled_units(struct gk20a *g)
35{ 34{
36 u32 opt_ecc_en = gk20a_readl(g, fuse_opt_ecc_en_r()); 35 bool opt_ecc_en = g->ops.fuse.is_opt_ecc_enable(g);
37 u32 opt_feature_fuses_override_disable = 36 bool opt_feature_fuses_override_disable =
38 gk20a_readl(g, 37 g->ops.fuse.is_opt_feature_override_disable(g);
39 fuse_opt_feature_fuses_override_disable_r());
40 u32 fecs_feature_override_ecc = 38 u32 fecs_feature_override_ecc =
41 gk20a_readl(g, 39 gk20a_readl(g,
42 gr_fecs_feature_override_ecc_r()); 40 gr_fecs_feature_override_ecc_r());
@@ -51,9 +49,9 @@ static void gp10b_detect_ecc_enabled_units(struct gk20a *g)
51 } else { 49 } else {
52 /* SM LRF */ 50 /* SM LRF */
53 if (gr_fecs_feature_override_ecc_sm_lrf_override_v( 51 if (gr_fecs_feature_override_ecc_sm_lrf_override_v(
54 fecs_feature_override_ecc)) { 52 fecs_feature_override_ecc) == 1U) {
55 if (gr_fecs_feature_override_ecc_sm_lrf_v( 53 if (gr_fecs_feature_override_ecc_sm_lrf_v(
56 fecs_feature_override_ecc)) { 54 fecs_feature_override_ecc) == 1U) {
57 __nvgpu_set_enabled(g, 55 __nvgpu_set_enabled(g,
58 NVGPU_ECC_ENABLED_SM_LRF, true); 56 NVGPU_ECC_ENABLED_SM_LRF, true);
59 } 57 }
@@ -66,9 +64,9 @@ static void gp10b_detect_ecc_enabled_units(struct gk20a *g)
66 64
67 /* SM SHM */ 65 /* SM SHM */
68 if (gr_fecs_feature_override_ecc_sm_shm_override_v( 66 if (gr_fecs_feature_override_ecc_sm_shm_override_v(
69 fecs_feature_override_ecc)) { 67 fecs_feature_override_ecc) == 1U) {
70 if (gr_fecs_feature_override_ecc_sm_shm_v( 68 if (gr_fecs_feature_override_ecc_sm_shm_v(
71 fecs_feature_override_ecc)) { 69 fecs_feature_override_ecc) == 1U) {
72 __nvgpu_set_enabled(g, 70 __nvgpu_set_enabled(g,
73 NVGPU_ECC_ENABLED_SM_SHM, true); 71 NVGPU_ECC_ENABLED_SM_SHM, true);
74 } 72 }
@@ -81,9 +79,9 @@ static void gp10b_detect_ecc_enabled_units(struct gk20a *g)
81 79
82 /* TEX */ 80 /* TEX */
83 if (gr_fecs_feature_override_ecc_tex_override_v( 81 if (gr_fecs_feature_override_ecc_tex_override_v(
84 fecs_feature_override_ecc)) { 82 fecs_feature_override_ecc) == 1U) {
85 if (gr_fecs_feature_override_ecc_tex_v( 83 if (gr_fecs_feature_override_ecc_tex_v(
86 fecs_feature_override_ecc)) { 84 fecs_feature_override_ecc) == 1U) {
87 __nvgpu_set_enabled(g, 85 __nvgpu_set_enabled(g,
88 NVGPU_ECC_ENABLED_TEX, true); 86 NVGPU_ECC_ENABLED_TEX, true);
89 } 87 }
@@ -96,9 +94,9 @@ static void gp10b_detect_ecc_enabled_units(struct gk20a *g)
96 94
97 /* LTC */ 95 /* LTC */
98 if (gr_fecs_feature_override_ecc_ltc_override_v( 96 if (gr_fecs_feature_override_ecc_ltc_override_v(
99 fecs_feature_override_ecc)) { 97 fecs_feature_override_ecc) == 1U) {
100 if (gr_fecs_feature_override_ecc_ltc_v( 98 if (gr_fecs_feature_override_ecc_ltc_v(
101 fecs_feature_override_ecc)) { 99 fecs_feature_override_ecc) == 1U) {
102 __nvgpu_set_enabled(g, 100 __nvgpu_set_enabled(g,
103 NVGPU_ECC_ENABLED_LTC, true); 101 NVGPU_ECC_ENABLED_LTC, true);
104 } 102 }
diff --git a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
index 424c8490..16eddeca 100644
--- a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
@@ -43,7 +43,6 @@
43#include <nvgpu/hw/gp10b/hw_fifo_gp10b.h> 43#include <nvgpu/hw/gp10b/hw_fifo_gp10b.h>
44#include <nvgpu/hw/gp10b/hw_ctxsw_prog_gp10b.h> 44#include <nvgpu/hw/gp10b/hw_ctxsw_prog_gp10b.h>
45#include <nvgpu/hw/gp10b/hw_mc_gp10b.h> 45#include <nvgpu/hw/gp10b/hw_mc_gp10b.h>
46#include <nvgpu/hw/gp10b/hw_fuse_gp10b.h>
47 46
48#define GFXP_WFI_TIMEOUT_COUNT_DEFAULT 100000 47#define GFXP_WFI_TIMEOUT_COUNT_DEFAULT 100000
49 48
@@ -2022,11 +2021,14 @@ u32 gp10b_gr_get_sm_hww_warp_esr(struct gk20a *g,
2022 2021
2023u32 get_ecc_override_val(struct gk20a *g) 2022u32 get_ecc_override_val(struct gk20a *g)
2024{ 2023{
2025 u32 val; 2024 bool en = false;
2026 2025
2027 val = gk20a_readl(g, fuse_opt_ecc_en_r()); 2026 if (g->ops.fuse.is_opt_ecc_enable) {
2028 if (val) 2027 en = g->ops.fuse.is_opt_ecc_enable(g);
2029 return gk20a_readl(g, gr_fecs_feature_override_ecc_r()); 2028 if (en) {
2029 return gk20a_readl(g, gr_fecs_feature_override_ecc_r());
2030 }
2031 }
2030 2032
2031 return 0; 2033 return 0;
2032} 2034}
diff --git a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
index bbfce287..94adf727 100644
--- a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
@@ -694,6 +694,9 @@ static const struct gpu_ops gp10b_ops = {
694 }, 694 },
695 .fuse = { 695 .fuse = {
696 .check_priv_security = gp10b_fuse_check_priv_security, 696 .check_priv_security = gp10b_fuse_check_priv_security,
697 .is_opt_ecc_enable = gp10b_fuse_is_opt_ecc_enable,
698 .is_opt_feature_override_disable =
699 gp10b_fuse_is_opt_feature_override_disable,
697 }, 700 },
698 .chip_init_gpu_characteristics = gp10b_init_gpu_characteristics, 701 .chip_init_gpu_characteristics = gp10b_init_gpu_characteristics,
699 .get_litter_value = gp10b_get_litter_value, 702 .get_litter_value = gp10b_get_litter_value,