summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c
diff options
context:
space:
mode:
authorDavid Nieto <dmartineznie@nvidia.com>2017-12-05 18:20:18 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-12-11 19:42:01 -0500
commit258ae4471296bcee03987778e3b7c79d3a027e53 (patch)
treea4890fa3a54b1857ba5c6ff3d770f84733b95154 /drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c
parentba69628aafefcf4567f2f3b1459ccc4ebd8e203f (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/platform_gv11b_tegra.c')
-rw-r--r--drivers/gpu/nvgpu/common/linux/platform_gv11b_tegra.c28
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
243static struct device_attribute *dev_attr_mmu_fillunit_ecc_corrected_err_count_array; 243static struct device_attribute *dev_attr_mmu_fillunit_ecc_corrected_err_count_array;
244static struct device_attribute *dev_attr_mmu_fillunit_ecc_uncorrected_err_count_array; 244static struct device_attribute *dev_attr_mmu_fillunit_ecc_uncorrected_err_count_array;
245 245
246static struct device_attribute *dev_attr_pmu_ecc_corrected_err_count_array;
247static struct device_attribute *dev_attr_pmu_ecc_uncorrected_err_count_array;
248
246void gr_gv11b_create_sysfs(struct gk20a *g) 249void 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}