diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gp10b')
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/fuse_gp10b.c | 13 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/fuse_gp10b.h | 4 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/gp10b.c | 26 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/gr_gp10b.c | 12 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/hal_gp10b.c | 3 |
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 | |||
95 | bool gp10b_fuse_is_opt_ecc_enable(struct gk20a *g) | ||
96 | { | ||
97 | return gk20a_readl(g, fuse_opt_ecc_en_r()) != 0U; | ||
98 | } | ||
99 | |||
100 | bool 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 @@ | |||
28 | struct gk20a; | 28 | struct gk20a; |
29 | 29 | ||
30 | int gp10b_fuse_check_priv_security(struct gk20a *g); | 30 | int gp10b_fuse_check_priv_security(struct gk20a *g); |
31 | bool gp10b_fuse_is_opt_ecc_enable(struct gk20a *g); | ||
32 | bool 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 | ||
34 | static void gp10b_detect_ecc_enabled_units(struct gk20a *g) | 33 | static 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 | ||
2023 | u32 get_ecc_override_val(struct gk20a *g) | 2022 | u32 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, |