summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.c8
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h7
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
265void __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
265static inline void sim_writel(struct gk20a *g, u32 r, u32 v) 273static 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);
1111int gk20a_lockout_registers(struct gk20a *g); 1111int gk20a_lockout_registers(struct gk20a *g);
1112int gk20a_restore_registers(struct gk20a *g); 1112int gk20a_restore_registers(struct gk20a *g);
1113 1113
1114void __nvgpu_check_gpu_state(struct gk20a *g);
1115
1114static inline void gk20a_writel(struct gk20a *g, u32 r, u32 v) 1116static 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)
1120static inline u32 gk20a_readl(struct gk20a *g, u32 r) 1122static 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}
1126static inline void gk20a_writel_check(struct gk20a *g, u32 r, u32 v) 1133static inline void gk20a_writel_check(struct gk20a *g, u32 r, u32 v)