summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp10b
diff options
context:
space:
mode:
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,