From e9f2436c290c2c02b25f30df11ee73ebe0f8953a Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Wed, 4 Mar 2015 14:55:32 +0530 Subject: gpu: nvgpu: handle memfmt exception In gk20a_gr_isr(), handle memfmt exception as below : - read NV_PGRAPH_PRI_MEMFMT_HWW_ESR - debug print for contents of above register - write same value back to NV_PGRAPH_PRI_MEMFMT_HWW_ESR and clear the exception Bug 200078514 Change-Id: I5b9afacd7f99b5a37de953041582b3a53b863642 Signed-off-by: Deepak Nibade Reviewed-on: http://git-master/r/713713 Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 7 +++++++ drivers/gpu/nvgpu/gk20a/hw_gr_gk20a.h | 4 ++++ drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h | 4 ++++ 3 files changed, 15 insertions(+) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index b0fd3c0c..6a9e1753 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -5740,6 +5740,13 @@ int gk20a_gr_isr(struct gk20a *g) need_reset |= -EFAULT; } + if (exception & gr_exception_memfmt_m()) { + u32 memfmt = gk20a_readl(g, gr_memfmt_hww_esr_r()); + gk20a_dbg(gpu_dbg_intr, "memfmt exception %08x\n", + memfmt); + gk20a_writel(g, gr_memfmt_hww_esr_r(), memfmt); + } + /* check if a gpc exception has occurred */ if (exception & gr_exception_gpc_m() && need_reset == 0) { struct channel_gk20a *fault_ch; diff --git a/drivers/gpu/nvgpu/gk20a/hw_gr_gk20a.h b/drivers/gpu/nvgpu/gk20a/hw_gr_gk20a.h index ff698a51..8fe75614 100644 --- a/drivers/gpu/nvgpu/gk20a/hw_gr_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/hw_gr_gk20a.h @@ -178,6 +178,10 @@ static inline u32 gr_exception_gpc_m(void) { return 0x1 << 24; } +static inline u32 gr_exception_memfmt_m(void) +{ + return 0x1 << 1; +} static inline u32 gr_exception1_r(void) { return 0x00400118; diff --git a/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h b/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h index 543c7773..868b8fe7 100644 --- a/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h +++ b/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h @@ -166,6 +166,10 @@ static inline u32 gr_exception_gpc_m(void) { return 0x1 << 24; } +static inline u32 gr_exception_memfmt_m(void) +{ + return 0x1 << 1; +} static inline u32 gr_exception1_r(void) { return 0x00400118; -- cgit v1.2.2