aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/memblock.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/memblock.h')
0 files changed, 0 insertions, 0 deletions
m> 2017-03-31 20:21:34 -0400 gpu: nvgpu: Split out pramin code' href='/cgit/cgit.cgi/nvgpu.git/commit/drivers/gpu/nvgpu/gk20a/hal_gk20a.c?h=gpu-paging&id=dd88aed5cc3088285c5d0b900aebf705f52178c5'>dd88aed5
a8cf6401
a9785995
6090a8a7
3ba374a5
a0fa2b02
3ba374a5
b928f10d

b3f57507
a9785995




8be2f2bf

a9785995





ce3afaaa
a9785995

fab87a29
6839341b



































f3d89a29


6839341b


f3d89a29


6839341b








6299b00b


6839341b








1b6fe734



6839341b
6839341b
c1064c27
c1064c27
1b6fe734
c1064c27
6839341b
3ba374a5
f3d89a29
6839341b





2c23d106
a9785995
2c23d106


589d6385
a52a50d4
d65a93b8
b17d9708
4492c62f
8371833f
a8cf6401
a9785995
6b33379c
1c40d09c
a9785995

ce3afaaa
b5acc421
da56b17d
940cd280
b7793a49
1d9eba07
7e9b9c0b
38a59acc
004a1880
d707c5a4
dd88aed5
9aa7de15


3e397989
135d6db4
6839341b
a9785995
2c23d106






a9785995

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192




                                             
                                                                     











                                                                            
                      




                                 
                         
                             
                     
                     
                       
                      
                      
                         
                        
                      
                          
                         
                         
                            
 
                        
                      
                      
 

                                         
                                   




                                                            

                                                            





                                                             
          

  
                                                             



































                                                           


                                               


                                                 


                                                      








                                               


                                                








                                              



                                                                        
                               
                                 
                               
                                      
                        
                      
                
                                                             
                      





                      
                                   
 


                                                                      
                                                    
                               
                              
                                
                             
                            
                                   
                             
                                
                                        

                              
                             
                                
                            
                                    
                                 
                                
                                   
                                         
                                   
                                 
                                    


                                     
                          
                                                                             
                                                        
 






                                                              

                 
/*
 * drivers/video/tegra/host/gk20a/hal_gk20a.c
 *
 * GK20A Tegra HAL interface.
 *
 * Copyright (c) 2014-2017, NVIDIA CORPORATION.  All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 */

#include "hal_gk20a.h"
#include "bus_gk20a.h"
#include "ltc_gk20a.h"
#include "fb_gk20a.h"
#include "gk20a.h"
#include "gk20a_gating_reglist.h"
#include "channel_gk20a.h"
#include "gr_ctx_gk20a.h"
#include "fecs_trace_gk20a.h"
#include "mm_gk20a.h"
#include "mc_gk20a.h"
#include "flcn_gk20a.h"
#include "pmu_gk20a.h"
#include "clk_gk20a.h"
#include "regops_gk20a.h"
#include "therm_gk20a.h"
#include "tsg_gk20a.h"
#include "dbg_gpu_gk20a.h"
#include "css_gr_gk20a.h"
#include "pramin_gk20a.h"
#include "priv_ring_gk20a.h"

#include <nvgpu/debug.h>
#include <nvgpu/log.h>
#include <nvgpu/bug.h>

#include <nvgpu/hw/gk20a/hw_proj_gk20a.h>

static struct gpu_ops gk20a_ops = {
	.clock_gating = {
		.slcg_gr_load_gating_prod =
			gr_gk20a_slcg_gr_load_gating_prod,
		.slcg_perf_load_gating_prod =
			gr_gk20a_slcg_perf_load_gating_prod,
		.slcg_ltc_load_gating_prod =
			ltc_gk20a_slcg_ltc_load_gating_prod,
		.blcg_gr_load_gating_prod =
			gr_gk20a_blcg_gr_load_gating_prod,
		.pg_gr_load_gating_prod =
			gr_gk20a_pg_gr_load_gating_prod,
		.slcg_therm_load_gating_prod =
			gr_gk20a_slcg_therm_load_gating_prod,
	},
};

static int gk20a_get_litter_value(struct gk20a *g, int value)
{
	int ret = EINVAL;
	switch (value) {
	case GPU_LIT_NUM_GPCS:
		ret = proj_scal_litter_num_gpcs_v();
		break;
	case GPU_LIT_NUM_PES_PER_GPC:
		ret = proj_scal_litter_num_pes_per_gpc_v();
		break;
	case GPU_LIT_NUM_ZCULL_BANKS:
		ret = proj_scal_litter_num_zcull_banks_v();
		break;
	case GPU_LIT_NUM_TPC_PER_GPC:
		ret = proj_scal_litter_num_tpc_per_gpc_v();
		break;
	case GPU_LIT_NUM_FBPS:
		ret = proj_scal_litter_num_fbps_v();
		break;
	case GPU_LIT_GPC_BASE:
		ret = proj_gpc_base_v();
		break;
	case GPU_LIT_GPC_STRIDE:
		ret = proj_gpc_stride_v();
		break;
	case GPU_LIT_GPC_SHARED_BASE:
		ret = proj_gpc_shared_base_v();
		break;
	case GPU_LIT_TPC_IN_GPC_BASE:
		ret = proj_tpc_in_gpc_base_v();
		break;
	case GPU_LIT_TPC_IN_GPC_STRIDE:
		ret = proj_tpc_in_gpc_stride_v();
		break;
	case GPU_LIT_TPC_IN_GPC_SHARED_BASE:
		ret = proj_tpc_in_gpc_shared_base_v();
		break;
	case GPU_LIT_PPC_IN_GPC_BASE:
		ret = proj_ppc_in_gpc_base_v();
		break;
	case GPU_LIT_PPC_IN_GPC_STRIDE:
		ret = proj_ppc_in_gpc_stride_v();
		break;
	case GPU_LIT_PPC_IN_GPC_SHARED_BASE:
		ret = proj_ppc_in_gpc_shared_base_v();
		break;
	case GPU_LIT_ROP_BASE:
		ret = proj_rop_base_v();
		break;
	case GPU_LIT_ROP_STRIDE:
		ret = proj_rop_stride_v();
		break;
	case GPU_LIT_ROP_SHARED_BASE:
		ret = proj_rop_shared_base_v();
		break;
	case GPU_LIT_HOST_NUM_ENGINES:
		ret = proj_host_num_engines_v();
		break;
	case GPU_LIT_HOST_NUM_PBDMA:
		ret = proj_host_num_pbdma_v();
		break;
	case GPU_LIT_LTC_STRIDE:
		ret = proj_ltc_stride_v();
		break;
	case GPU_LIT_LTS_STRIDE:
		ret = proj_lts_stride_v();
		break;
	/* GK20A does not have a FBPA unit, despite what's listed in the
	 * hw headers or read back through NV_PTOP_SCAL_NUM_FBPAS,
	 * so hardcode all values to 0.
	 */
	case GPU_LIT_NUM_FBPAS:
	case GPU_LIT_FBPA_STRIDE:
	case GPU_LIT_FBPA_BASE:
	case GPU_LIT_FBPA_SHARED_BASE:
		ret = 0;
		break;
	default:
		nvgpu_err(g, "Missing definition %d", value);
		BUG();
		break;
	}

	return ret;
}

int gk20a_init_hal(struct gk20a *g)
{
	struct gpu_ops *gops = &g->ops;
	struct nvgpu_gpu_characteristics *c = &g->gpu_characteristics;

	gops->clock_gating = gk20a_ops.clock_gating;
	gops->privsecurity = 0;
	gops->securegpccs = 0;
	gops->pmupstate = false;
	gk20a_init_bus(gops);
	gk20a_init_mc(gops);
	gk20a_init_priv_ring(gops);
	gk20a_init_ltc(gops);
	gk20a_init_gr_ops(gops);
	gk20a_init_fecs_trace_ops(gops);
	gk20a_init_fb(gops);
	gk20a_init_fifo(gops);
	gk20a_init_ce2(gops);
	gk20a_init_gr_ctx(gops);
	gk20a_init_mm(gops);
	gk20a_falcon_init_hal(gops);
	gk20a_init_pmu_ops(gops);
	gk20a_init_regops(gops);
	gk20a_init_debug_ops(gops);
	gk20a_init_dbg_session_ops(gops);
	gk20a_init_therm_ops(gops);
	gk20a_init_tsg_ops(gops);
	gk20a_init_pramin_ops(gops);
#if defined(CONFIG_GK20A_CYCLE_STATS)
	gk20a_init_css_ops(gops);
#endif
	g->name = "gk20a";
	gops->chip_init_gpu_characteristics = gk20a_init_gpu_characteristics;
	gops->get_litter_value = gk20a_get_litter_value;

	c->twod_class = FERMI_TWOD_A;
	c->threed_class = KEPLER_C;
	c->compute_class = KEPLER_COMPUTE_A;
	c->gpfifo_class = KEPLER_CHANNEL_GPFIFO_C;
	c->inline_to_memory_class = KEPLER_INLINE_TO_MEMORY_A;
	c->dma_copy_class = KEPLER_DMA_COPY_A;

	return 0;
}