summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/hw_pbdma_gk20a.h
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2015-09-24 05:26:44 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2015-10-16 11:23:49 -0400
commit68099f8298d25e94579f7d45c61b959f2c7ac184 (patch)
tree9f5b75f3d8c28f3110bb3177c7ad69156bf96386 /drivers/gpu/nvgpu/gk20a/hw_pbdma_gk20a.h
parent5b7b59714a6f6ea34295e4827eca68f496f5df18 (diff)
gpu: nvgpu: fix pbdma intr handling
To handle any of the pbdma interrupt, we currently write zero to pbdma_method0 and then clear the interrupt But this is insufficient since we cannot use same intr clear method for all the interrupts Hence, add intr specific routines to handle those interrupts NV_PPBDMA_INTR_0_PBENTRY: - fix the pb_header to have a null opcode - fix the pbdma_method to have a valid nop NV_PPBDMA_INTR_0_METHOD: - fix the pbdma_method to have a valid nop NV_PPBDMA_INTR_0_DEVICE: - fix the pb_header to have a null opcode - go through all pbdma_method0/1/2/3 -- if they contain host s/w methods, replace those methods with a valid NOP Bug 200134238 Change-Id: I10c284a6cdc1441f9d437cea65aae00d3c33a8c8 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/814561 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/hw_pbdma_gk20a.h')
-rw-r--r--drivers/gpu/nvgpu/gk20a/hw_pbdma_gk20a.h38
1 files changed, 37 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/hw_pbdma_gk20a.h b/drivers/gpu/nvgpu/gk20a/hw_pbdma_gk20a.h
index e124e17f..e83dbb5c 100644
--- a/drivers/gpu/nvgpu/gk20a/hw_pbdma_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/hw_pbdma_gk20a.h
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (c) 2012-2014, NVIDIA CORPORATION. All rights reserved. 2 * Copyright (c) 2012-2015, NVIDIA CORPORATION. All rights reserved.
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify it 4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License, 5 * under the terms and conditions of the GNU General Public License,
@@ -190,6 +190,10 @@ static inline u32 pbdma_pb_header_type_inc_f(void)
190{ 190{
191 return 0x20000000; 191 return 0x20000000;
192} 192}
193static inline u32 pbdma_pb_header_type_non_inc_f(void)
194{
195 return 0x60000000;
196}
193static inline u32 pbdma_hdr_shadow_r(u32 i) 197static inline u32 pbdma_hdr_shadow_r(u32 i)
194{ 198{
195 return 0x00040118 + i*8192; 199 return 0x00040118 + i*8192;
@@ -214,6 +218,38 @@ static inline u32 pbdma_method0_r(u32 i)
214{ 218{
215 return 0x000400c0 + i*8192; 219 return 0x000400c0 + i*8192;
216} 220}
221static inline u32 pbdma_method0_addr_f(u32 v)
222{
223 return (v & 0xfff) << 2;
224}
225static inline u32 pbdma_method0_addr_v(u32 r)
226{
227 return (r >> 2) & 0xfff;
228}
229static inline u32 pbdma_method0_subch_v(u32 r)
230{
231 return (r >> 16) & 0x7;
232}
233static inline u32 pbdma_method0_first_true_f(void)
234{
235 return 0x400000;
236}
237static inline u32 pbdma_method0_valid_true_f(void)
238{
239 return 0x80000000;
240}
241static inline u32 pbdma_method1_r(u32 i)
242{
243 return 0x000400c8 + i*8192;
244}
245static inline u32 pbdma_method2_r(u32 i)
246{
247 return 0x000400d0 + i*8192;
248}
249static inline u32 pbdma_method3_r(u32 i)
250{
251 return 0x000400d8 + i*8192;
252}
217static inline u32 pbdma_data0_r(u32 i) 253static inline u32 pbdma_data0_r(u32 i)
218{ 254{
219 return 0x000400c4 + i*8192; 255 return 0x000400c4 + i*8192;