diff options
author | Lakshmanan M <lm@nvidia.com> | 2017-05-17 02:12:24 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-05-18 12:04:51 -0400 |
commit | 5a08eafbe076fba98de62883636ee6b0751cf7e9 (patch) | |
tree | 34d9406e93c5988b2dfe4a7ee7bbc042dd3a8507 /drivers/gpu/nvgpu/gv11b/platform_gv11b_tegra.c | |
parent | d503a234440b0b5912f64314de68689b3211bbcd (diff) |
gpu: nvgpu: gv11b: Add L1 DATA + iCACHE parity
This CL covers the following parity support (uncorrected error),
1) SM's L1 DATA
2) SM's L0 && L1 icache
Volta Resiliency Id - Volta-634
JIRA GPUT19X-113
JIRA GPUT19X-99
Bug 1807553
Change-Id: Iacbf492028983529dadc5753007e43510b8cb786
Signed-off-by: Lakshmanan M <lm@nvidia.com>
Reviewed-on: http://git-master/r/1483681
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b/platform_gv11b_tegra.c')
-rw-r--r-- | drivers/gpu/nvgpu/gv11b/platform_gv11b_tegra.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/platform_gv11b_tegra.c b/drivers/gpu/nvgpu/gv11b/platform_gv11b_tegra.c index d235b261..009e5716 100644 --- a/drivers/gpu/nvgpu/gv11b/platform_gv11b_tegra.c +++ b/drivers/gpu/nvgpu/gv11b/platform_gv11b_tegra.c | |||
@@ -127,6 +127,10 @@ static struct device_attribute *dev_attr_sm_l1_tag_ecc_corrected_err_count_array | |||
127 | static struct device_attribute *dev_attr_sm_l1_tag_ecc_uncorrected_err_count_array; | 127 | static struct device_attribute *dev_attr_sm_l1_tag_ecc_uncorrected_err_count_array; |
128 | static struct device_attribute *dev_attr_sm_cbu_ecc_corrected_err_count_array; | 128 | static struct device_attribute *dev_attr_sm_cbu_ecc_corrected_err_count_array; |
129 | static struct device_attribute *dev_attr_sm_cbu_ecc_uncorrected_err_count_array; | 129 | static struct device_attribute *dev_attr_sm_cbu_ecc_uncorrected_err_count_array; |
130 | static struct device_attribute *dev_attr_sm_l1_data_ecc_corrected_err_count_array; | ||
131 | static struct device_attribute *dev_attr_sm_l1_data_ecc_uncorrected_err_count_array; | ||
132 | static struct device_attribute *dev_attr_sm_icache_ecc_corrected_err_count_array; | ||
133 | static struct device_attribute *dev_attr_sm_icache_ecc_uncorrected_err_count_array; | ||
130 | 134 | ||
131 | void gr_gv11b_create_sysfs(struct device *dev) | 135 | void gr_gv11b_create_sysfs(struct device *dev) |
132 | { | 136 | { |
@@ -165,6 +169,30 @@ void gr_gv11b_create_sysfs(struct device *dev) | |||
165 | &g->gr.t19x.ecc_stats.sm_cbu_uncorrected_err_count, | 169 | &g->gr.t19x.ecc_stats.sm_cbu_uncorrected_err_count, |
166 | dev_attr_sm_cbu_ecc_uncorrected_err_count_array); | 170 | dev_attr_sm_cbu_ecc_uncorrected_err_count_array); |
167 | 171 | ||
172 | error |= gr_gp10b_ecc_stat_create(dev, | ||
173 | 0, | ||
174 | "sm_l1_data_ecc_corrected_err_count", | ||
175 | &g->gr.t19x.ecc_stats.sm_l1_data_corrected_err_count, | ||
176 | dev_attr_sm_l1_data_ecc_corrected_err_count_array); | ||
177 | |||
178 | error |= gr_gp10b_ecc_stat_create(dev, | ||
179 | 0, | ||
180 | "sm_l1_data_ecc_uncorrected_err_count", | ||
181 | &g->gr.t19x.ecc_stats.sm_l1_data_uncorrected_err_count, | ||
182 | dev_attr_sm_l1_data_ecc_uncorrected_err_count_array); | ||
183 | |||
184 | error |= gr_gp10b_ecc_stat_create(dev, | ||
185 | 0, | ||
186 | "sm_icache_ecc_corrected_err_count", | ||
187 | &g->gr.t19x.ecc_stats.sm_icache_corrected_err_count, | ||
188 | dev_attr_sm_icache_ecc_corrected_err_count_array); | ||
189 | |||
190 | error |= gr_gp10b_ecc_stat_create(dev, | ||
191 | 0, | ||
192 | "sm_icache_ecc_uncorrected_err_count", | ||
193 | &g->gr.t19x.ecc_stats.sm_icache_uncorrected_err_count, | ||
194 | dev_attr_sm_icache_ecc_uncorrected_err_count_array); | ||
195 | |||
168 | if (error) | 196 | if (error) |
169 | dev_err(dev, "Failed to create gv11b sysfs attributes!\n"); | 197 | dev_err(dev, "Failed to create gv11b sysfs attributes!\n"); |
170 | } | 198 | } |
@@ -193,4 +221,24 @@ static void gr_gv11b_remove_sysfs(struct device *dev) | |||
193 | &g->gr.t19x.ecc_stats.sm_cbu_uncorrected_err_count, | 221 | &g->gr.t19x.ecc_stats.sm_cbu_uncorrected_err_count, |
194 | dev_attr_sm_cbu_ecc_uncorrected_err_count_array); | 222 | dev_attr_sm_cbu_ecc_uncorrected_err_count_array); |
195 | 223 | ||
224 | gr_gp10b_ecc_stat_remove(dev, | ||
225 | 0, | ||
226 | &g->gr.t19x.ecc_stats.sm_l1_data_corrected_err_count, | ||
227 | dev_attr_sm_l1_data_ecc_corrected_err_count_array); | ||
228 | |||
229 | gr_gp10b_ecc_stat_remove(dev, | ||
230 | 0, | ||
231 | &g->gr.t19x.ecc_stats.sm_l1_data_uncorrected_err_count, | ||
232 | dev_attr_sm_l1_data_ecc_uncorrected_err_count_array); | ||
233 | |||
234 | gr_gp10b_ecc_stat_remove(dev, | ||
235 | 0, | ||
236 | &g->gr.t19x.ecc_stats.sm_icache_corrected_err_count, | ||
237 | dev_attr_sm_icache_ecc_corrected_err_count_array); | ||
238 | |||
239 | gr_gp10b_ecc_stat_remove(dev, | ||
240 | 0, | ||
241 | &g->gr.t19x.ecc_stats.sm_icache_uncorrected_err_count, | ||
242 | dev_attr_sm_icache_ecc_uncorrected_err_count_array); | ||
243 | |||
196 | } | 244 | } |