diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.c | 8 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 7 |
2 files changed, 15 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index 156d33ed..b921be7c 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c | |||
@@ -262,6 +262,14 @@ static const struct file_operations gk20a_sched_ops = { | |||
262 | .read = gk20a_sched_dev_read, | 262 | .read = gk20a_sched_dev_read, |
263 | }; | 263 | }; |
264 | 264 | ||
265 | void __nvgpu_check_gpu_state(struct gk20a *g) | ||
266 | { | ||
267 | u32 boot_0 = readl(g->regs + mc_boot_0_r()); | ||
268 | |||
269 | if (boot_0 == 0xffffffff) | ||
270 | pr_err("nvgpu: GPU has disappeared from bus!!\n"); | ||
271 | } | ||
272 | |||
265 | static inline void sim_writel(struct gk20a *g, u32 r, u32 v) | 273 | static inline void sim_writel(struct gk20a *g, u32 r, u32 v) |
266 | { | 274 | { |
267 | writel(v, g->sim.regs+r); | 275 | writel(v, g->sim.regs+r); |
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 144cb37d..a4cbb4b2 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h | |||
@@ -1111,6 +1111,8 @@ void gk20a_init_clk_ops(struct gpu_ops *gops); | |||
1111 | int gk20a_lockout_registers(struct gk20a *g); | 1111 | int gk20a_lockout_registers(struct gk20a *g); |
1112 | int gk20a_restore_registers(struct gk20a *g); | 1112 | int gk20a_restore_registers(struct gk20a *g); |
1113 | 1113 | ||
1114 | void __nvgpu_check_gpu_state(struct gk20a *g); | ||
1115 | |||
1114 | static inline void gk20a_writel(struct gk20a *g, u32 r, u32 v) | 1116 | static inline void gk20a_writel(struct gk20a *g, u32 r, u32 v) |
1115 | { | 1117 | { |
1116 | gk20a_dbg(gpu_dbg_reg, " r=0x%x v=0x%x", r, v); | 1118 | gk20a_dbg(gpu_dbg_reg, " r=0x%x v=0x%x", r, v); |
@@ -1120,7 +1122,12 @@ static inline void gk20a_writel(struct gk20a *g, u32 r, u32 v) | |||
1120 | static inline u32 gk20a_readl(struct gk20a *g, u32 r) | 1122 | static inline u32 gk20a_readl(struct gk20a *g, u32 r) |
1121 | { | 1123 | { |
1122 | u32 v = readl(g->regs + r); | 1124 | u32 v = readl(g->regs + r); |
1125 | |||
1126 | if (v == 0xffffffff) | ||
1127 | __nvgpu_check_gpu_state(g); | ||
1128 | |||
1123 | gk20a_dbg(gpu_dbg_reg, " r=0x%x v=0x%x", r, v); | 1129 | gk20a_dbg(gpu_dbg_reg, " r=0x%x v=0x%x", r, v); |
1130 | |||
1124 | return v; | 1131 | return v; |
1125 | } | 1132 | } |
1126 | static inline void gk20a_writel_check(struct gk20a *g, u32 r, u32 v) | 1133 | static inline void gk20a_writel_check(struct gk20a *g, u32 r, u32 v) |