summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h
diff options
context:
space:
mode:
authortk <tk@nvidia.com>2016-11-03 06:06:24 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2016-11-17 20:24:39 -0500
commitc1064c27dfa26847234153652cf2b88167b90adf (patch)
treec51c17a78fe7d9c89b5042eb345fe7a566b5b9b8 /drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h
parentdd5b630e13d8ca97b38e81670ff45ef2ec0b810c (diff)
gpu: nvgpu: FBPA broadcast support
Add FBPA broadcast support to hwpm regops Bug 200249125 Change-Id: Iaf413a162a8985bcce94ff96ec6318e129609c4c Signed-off-by: Tejaswi K <tk@nvidia.com> Reviewed-on: http://git-master/r/1247408 (cherry picked from commit 4e0a805f5a8762d1a90f3b5dd76902a04941d9ef) Reviewed-on: http://git-master/r/1252160 Tested-by: Peter Daifuku <pdaifuku@nvidia.com> Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h30
1 files changed, 28 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h b/drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h
index 411430c7..c3ced432 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gr_pri_gk20a.h
@@ -109,6 +109,10 @@ static inline u32 pri_tpccs_addr_mask(u32 addr)
109{ 109{
110 return addr & ((1 << pri_tpccs_addr_width()) - 1); 110 return addr & ((1 << pri_tpccs_addr_width()) - 1);
111} 111}
112static inline u32 pri_fbpa_addr_mask(struct gk20a *g, u32 addr)
113{
114 return addr & (nvgpu_get_litter_value(g, GPU_LIT_FBPA_STRIDE) - 1);
115}
112static inline u32 pri_tpc_addr(struct gk20a *g, u32 addr, u32 gpc, u32 tpc) 116static inline u32 pri_tpc_addr(struct gk20a *g, u32 addr, u32 gpc, u32 tpc)
113{ 117{
114 u32 gpc_base = nvgpu_get_litter_value(g, GPU_LIT_GPC_BASE); 118 u32 gpc_base = nvgpu_get_litter_value(g, GPU_LIT_GPC_BASE);
@@ -127,7 +131,27 @@ static inline bool pri_is_tpc_addr_shared(struct gk20a *g, u32 addr)
127 (addr < (tpc_in_gpc_shared_base + 131 (addr < (tpc_in_gpc_shared_base +
128 tpc_in_gpc_stride)); 132 tpc_in_gpc_stride));
129} 133}
130 134static inline u32 pri_fbpa_addr(struct gk20a *g, u32 addr, u32 fbpa)
135{
136 return (nvgpu_get_litter_value(g, GPU_LIT_FBPA_BASE) + addr +
137 (fbpa * nvgpu_get_litter_value(g, GPU_LIT_FBPA_STRIDE)));
138}
139static inline bool pri_is_fbpa_addr_shared(struct gk20a *g, u32 addr)
140{
141 u32 fbpa_shared_base = nvgpu_get_litter_value(g, GPU_LIT_FBPA_SHARED_BASE);
142 u32 fbpa_stride = nvgpu_get_litter_value(g, GPU_LIT_FBPA_STRIDE);
143 return ((addr >= fbpa_shared_base) &&
144 (addr < (fbpa_shared_base + fbpa_stride)));
145}
146static inline bool pri_is_fbpa_addr(struct gk20a *g, u32 addr)
147{
148 u32 fbpa_base = nvgpu_get_litter_value(g, GPU_LIT_FBPA_BASE);
149 u32 fbpa_stride = nvgpu_get_litter_value(g, GPU_LIT_FBPA_STRIDE);
150 u32 num_fbpas = nvgpu_get_litter_value(g, GPU_LIT_NUM_FBPAS);
151 return (((addr >= fbpa_base) &&
152 (addr < (fbpa_base + num_fbpas * fbpa_stride)))
153 || pri_is_fbpa_addr_shared(g, addr));
154}
131/* 155/*
132 * BE pri addressing 156 * BE pri addressing
133 */ 157 */
@@ -209,7 +233,8 @@ enum ctxsw_addr_type {
209 CTXSW_ADDR_TYPE_TPC = 2, 233 CTXSW_ADDR_TYPE_TPC = 2,
210 CTXSW_ADDR_TYPE_BE = 3, 234 CTXSW_ADDR_TYPE_BE = 3,
211 CTXSW_ADDR_TYPE_PPC = 4, 235 CTXSW_ADDR_TYPE_PPC = 4,
212 CTXSW_ADDR_TYPE_LTCS = 5 236 CTXSW_ADDR_TYPE_LTCS = 5,
237 CTXSW_ADDR_TYPE_FBPA = 6,
213}; 238};
214 239
215#define PRI_BROADCAST_FLAGS_NONE 0 240#define PRI_BROADCAST_FLAGS_NONE 0
@@ -219,5 +244,6 @@ enum ctxsw_addr_type {
219#define PRI_BROADCAST_FLAGS_PPC BIT(3) 244#define PRI_BROADCAST_FLAGS_PPC BIT(3)
220#define PRI_BROADCAST_FLAGS_LTCS BIT(4) 245#define PRI_BROADCAST_FLAGS_LTCS BIT(4)
221#define PRI_BROADCAST_FLAGS_LTSS BIT(5) 246#define PRI_BROADCAST_FLAGS_LTSS BIT(5)
247#define PRI_BROADCAST_FLAGS_FBPA BIT(6)
222 248
223#endif /* GR_PRI_GK20A_H */ 249#endif /* GR_PRI_GK20A_H */