diff options
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/ecc_gk20a.h | 5 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.c | 8 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/mc_gp10b.c | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_mc_gp10b.h | 6 |
5 files changed, 22 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/ecc_gk20a.h b/drivers/gpu/nvgpu/gk20a/ecc_gk20a.h index fba8ba7d..af10f828 100644 --- a/drivers/gpu/nvgpu/gk20a/ecc_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/ecc_gk20a.h | |||
@@ -91,6 +91,11 @@ struct ecc_gk20a { | |||
91 | struct gk20a_ecc_stat pmu_uncorrected_err_count; | 91 | struct gk20a_ecc_stat pmu_uncorrected_err_count; |
92 | } pmu; | 92 | } pmu; |
93 | 93 | ||
94 | struct { | ||
95 | struct gk20a_ecc_stat fbpa_sec_err_count; | ||
96 | struct gk20a_ecc_stat fbpa_ded_err_count; | ||
97 | } fbpa; | ||
98 | |||
94 | }; | 99 | }; |
95 | 100 | ||
96 | #endif /*__ECC_GK20A_H__*/ | 101 | #endif /*__ECC_GK20A_H__*/ |
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index b502ef02..9c030f71 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c | |||
@@ -198,6 +198,14 @@ int gk20a_finalize_poweron(struct gk20a *g) | |||
198 | } | 198 | } |
199 | } | 199 | } |
200 | 200 | ||
201 | if (g->ops.fb.init_fbpa) { | ||
202 | err = g->ops.fb.init_fbpa(g); | ||
203 | if (err) { | ||
204 | nvgpu_err(g, "failed to init fbpa"); | ||
205 | goto done; | ||
206 | } | ||
207 | } | ||
208 | |||
201 | if (g->ops.fb.mem_unlock) { | 209 | if (g->ops.fb.mem_unlock) { |
202 | err = g->ops.fb.mem_unlock(g); | 210 | err = g->ops.fb.mem_unlock(g); |
203 | if (err) { | 211 | if (err) { |
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 5440238f..74bb64b3 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h | |||
@@ -520,6 +520,8 @@ struct gpu_ops { | |||
520 | unsigned int intr_type); | 520 | unsigned int intr_type); |
521 | void (*disable_hub_intr)(struct gk20a *g, unsigned int index, | 521 | void (*disable_hub_intr)(struct gk20a *g, unsigned int index, |
522 | unsigned int intr_type); | 522 | unsigned int intr_type); |
523 | int (*init_fbpa)(struct gk20a *g); | ||
524 | void (*fbpa_isr)(struct gk20a *g); | ||
523 | } fb; | 525 | } fb; |
524 | struct { | 526 | struct { |
525 | void (*slcg_bus_load_gating_prod)(struct gk20a *g, bool prod); | 527 | void (*slcg_bus_load_gating_prod)(struct gk20a *g, bool prod); |
diff --git a/drivers/gpu/nvgpu/gp10b/mc_gp10b.c b/drivers/gpu/nvgpu/gp10b/mc_gp10b.c index 6fe4da15..8f4695ff 100644 --- a/drivers/gpu/nvgpu/gp10b/mc_gp10b.c +++ b/drivers/gpu/nvgpu/gp10b/mc_gp10b.c | |||
@@ -131,6 +131,8 @@ void mc_gp10b_isr_stall(struct gk20a *g) | |||
131 | g->ops.mc.is_intr_nvlink_pending(g, mc_intr_0)) { | 131 | g->ops.mc.is_intr_nvlink_pending(g, mc_intr_0)) { |
132 | g->ops.nvlink.isr(g); | 132 | g->ops.nvlink.isr(g); |
133 | } | 133 | } |
134 | if (mc_intr_0 & mc_intr_pfb_pending_f() && g->ops.fb.fbpa_isr) | ||
135 | g->ops.fb.fbpa_isr(g); | ||
134 | 136 | ||
135 | nvgpu_log(g, gpu_dbg_intr, "stall intr done 0x%08x\n", mc_intr_0); | 137 | nvgpu_log(g, gpu_dbg_intr, "stall intr done 0x%08x\n", mc_intr_0); |
136 | 138 | ||
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_mc_gp10b.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_mc_gp10b.h index dbf0ce35..39c132ae 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_mc_gp10b.h +++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_mc_gp10b.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2014-2017, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2014-2018, NVIDIA CORPORATION. All rights reserved. |
3 | * | 3 | * |
4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
@@ -88,6 +88,10 @@ static inline u32 mc_intr_replayable_fault_pending_f(void) | |||
88 | { | 88 | { |
89 | return 0x200U; | 89 | return 0x200U; |
90 | } | 90 | } |
91 | static inline u32 mc_intr_pfb_pending_f(void) | ||
92 | { | ||
93 | return 0x2000U; | ||
94 | } | ||
91 | static inline u32 mc_intr_pgraph_pending_f(void) | 95 | static inline u32 mc_intr_pgraph_pending_f(void) |
92 | { | 96 | { |
93 | return 0x1000U; | 97 | return 0x1000U; |