diff options
author | David Nieto <dmartineznie@nvidia.com> | 2017-12-05 18:20:18 -0500 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-12-11 19:42:01 -0500 |
commit | 258ae4471296bcee03987778e3b7c79d3a027e53 (patch) | |
tree | a4890fa3a54b1857ba5c6ff3d770f84733b95154 /drivers/gpu/nvgpu/common/linux | |
parent | ba69628aafefcf4567f2f3b1459ccc4ebd8e203f (diff) |
gpu: nvgpu: gv11b: PMU parity HWW ECC support
Adding support for ISR handling of ECC parity errors for PMU unit and setting
the initial IRQDST mask to deliver ECC interrupts to host in the non-stall
PMU irq path
JIRA: GPUT19X-83
Change-Id: I8efae6777811893ecce79d0e32ba81b62c27b1ef
Signed-off-by: David Nieto <dmartineznie@nvidia.com>
Signed-off-by: Richard Zhao <rizhao@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1611625
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/common/linux')
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c b/drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c index 3c6eac77..a2a60aaa 100644 --- a/drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c +++ b/drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c | |||
@@ -243,6 +243,9 @@ static struct device_attribute *dev_attr_mmu_hubtlb_ecc_uncorrected_err_count_ar | |||
243 | static struct device_attribute *dev_attr_mmu_fillunit_ecc_corrected_err_count_array; | 243 | static struct device_attribute *dev_attr_mmu_fillunit_ecc_corrected_err_count_array; |
244 | static struct device_attribute *dev_attr_mmu_fillunit_ecc_uncorrected_err_count_array; | 244 | static struct device_attribute *dev_attr_mmu_fillunit_ecc_uncorrected_err_count_array; |
245 | 245 | ||
246 | static struct device_attribute *dev_attr_pmu_ecc_corrected_err_count_array; | ||
247 | static struct device_attribute *dev_attr_pmu_ecc_uncorrected_err_count_array; | ||
248 | |||
246 | void gr_gv11b_create_sysfs(struct gk20a *g) | 249 | void gr_gv11b_create_sysfs(struct gk20a *g) |
247 | { | 250 | { |
248 | struct device *dev = dev_from_gk20a(g); | 251 | struct device *dev = dev_from_gk20a(g); |
@@ -414,6 +417,21 @@ void gr_gv11b_create_sysfs(struct gk20a *g) | |||
414 | &g->ecc.eng.t19x.mmu_fillunit_corrected_err_count, | 417 | &g->ecc.eng.t19x.mmu_fillunit_corrected_err_count, |
415 | &dev_attr_mmu_fillunit_ecc_corrected_err_count_array); | 418 | &dev_attr_mmu_fillunit_ecc_corrected_err_count_array); |
416 | 419 | ||
420 | error |= gp10b_ecc_stat_create(dev, | ||
421 | 1, | ||
422 | "eng", | ||
423 | "pmu_ecc_uncorrected_err_count", | ||
424 | &g->ecc.eng.t19x.pmu_uncorrected_err_count, | ||
425 | &dev_attr_pmu_ecc_uncorrected_err_count_array); | ||
426 | |||
427 | error |= gp10b_ecc_stat_create(dev, | ||
428 | 1, | ||
429 | "eng", | ||
430 | "pmu_ecc_corrected_err_count", | ||
431 | &g->ecc.eng.t19x.pmu_corrected_err_count, | ||
432 | &dev_attr_pmu_ecc_corrected_err_count_array); | ||
433 | |||
434 | |||
417 | if (error) | 435 | if (error) |
418 | dev_err(dev, "Failed to create gv11b sysfs attributes!\n"); | 436 | dev_err(dev, "Failed to create gv11b sysfs attributes!\n"); |
419 | } | 437 | } |
@@ -541,4 +559,14 @@ static void gr_gv11b_remove_sysfs(struct device *dev) | |||
541 | 1, | 559 | 1, |
542 | &g->ecc.eng.t19x.mmu_fillunit_corrected_err_count, | 560 | &g->ecc.eng.t19x.mmu_fillunit_corrected_err_count, |
543 | dev_attr_mmu_fillunit_ecc_corrected_err_count_array); | 561 | dev_attr_mmu_fillunit_ecc_corrected_err_count_array); |
562 | |||
563 | gp10b_ecc_stat_remove(dev, | ||
564 | 1, | ||
565 | &g->ecc.eng.t19x.pmu_uncorrected_err_count, | ||
566 | dev_attr_pmu_ecc_uncorrected_err_count_array); | ||
567 | |||
568 | gp10b_ecc_stat_remove(dev, | ||
569 | 1, | ||
570 | &g->ecc.eng.t19x.pmu_corrected_err_count, | ||
571 | dev_attr_pmu_ecc_corrected_err_count_array); | ||
544 | } | 572 | } |