summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2014-06-06 02:33:36 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:10:48 -0400
commit91d83a078cbd11eaa1d29dbda038c1d0b914479a (patch)
treed4df04e57bef32d33f2bd5f4632d0675c97f994d /drivers/gpu/nvgpu/gk20a/gr_gk20a.c
parent7f991657c102e819e90faedf74b081cc246c892e (diff)
gpu: nvgpu: Query ctx image size only once
Newer netlist does not require image size queries to boot. Save 2ms from GPU boot time by skipping it if we know the sizes. Bug 1435870 Change-Id: Ie1b13c8a6e420adf06e635bde8b469385e1d5c60 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/419873
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c68
1 files changed, 30 insertions, 38 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index c12ab1f6..38d301db 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -2207,9 +2207,7 @@ static int gr_gk20a_wait_ctxsw_ready(struct gk20a *g)
2207 2207
2208static int gr_gk20a_init_ctx_state(struct gk20a *g, struct gr_gk20a *gr) 2208static int gr_gk20a_init_ctx_state(struct gk20a *g, struct gr_gk20a *gr)
2209{ 2209{
2210 u32 golden_ctx_image_size = 0; 2210 u32 pm_ctx_image_size;
2211 u32 zcull_ctx_image_size = 0;
2212 u32 pm_ctx_image_size = 0;
2213 u32 ret; 2211 u32 ret;
2214 struct fecs_method_op_gk20a op = { 2212 struct fecs_method_op_gk20a op = {
2215 .mailbox = { .id = 0, .data = 0, 2213 .mailbox = { .id = 0, .data = 0,
@@ -2220,43 +2218,37 @@ static int gr_gk20a_init_ctx_state(struct gk20a *g, struct gr_gk20a *gr)
2220 }; 2218 };
2221 2219
2222 gk20a_dbg_fn(""); 2220 gk20a_dbg_fn("");
2223 op.method.addr = gr_fecs_method_push_adr_discover_image_size_v(); 2221 if (!g->gr.ctx_vars.golden_image_size) {
2224 op.mailbox.ret = &golden_ctx_image_size; 2222 op.method.addr =
2225 ret = gr_gk20a_submit_fecs_method_op(g, op); 2223 gr_fecs_method_push_adr_discover_image_size_v();
2226 if (ret) { 2224 op.mailbox.ret = &g->gr.ctx_vars.golden_image_size;
2227 gk20a_err(dev_from_gk20a(g), 2225 ret = gr_gk20a_submit_fecs_method_op(g, op);
2228 "query golden image size failed"); 2226 if (ret) {
2229 return ret; 2227 gk20a_err(dev_from_gk20a(g),
2230 } 2228 "query golden image size failed");
2231 op.method.addr = gr_fecs_method_push_adr_discover_zcull_image_size_v(); 2229 return ret;
2232 op.mailbox.ret = &zcull_ctx_image_size; 2230 }
2233 ret = gr_gk20a_submit_fecs_method_op(g, op); 2231 op.method.addr =
2234 if (ret) { 2232 gr_fecs_method_push_adr_discover_zcull_image_size_v();
2235 gk20a_err(dev_from_gk20a(g), 2233 op.mailbox.ret = &g->gr.ctx_vars.zcull_ctxsw_image_size;
2236 "query zcull ctx image size failed"); 2234 ret = gr_gk20a_submit_fecs_method_op(g, op);
2237 return ret; 2235 if (ret) {
2238 } 2236 gk20a_err(dev_from_gk20a(g),
2239 op.method.addr = gr_fecs_method_push_adr_discover_pm_image_size_v(); 2237 "query zcull ctx image size failed");
2240 op.mailbox.ret = &pm_ctx_image_size; 2238 return ret;
2241 ret = gr_gk20a_submit_fecs_method_op(g, op); 2239 }
2242 if (ret) { 2240 op.method.addr =
2243 gk20a_err(dev_from_gk20a(g), 2241 gr_fecs_method_push_adr_discover_pm_image_size_v();
2244 "query pm ctx image size failed"); 2242 op.mailbox.ret = &pm_ctx_image_size;
2245 return ret; 2243 ret = gr_gk20a_submit_fecs_method_op(g, op);
2246 } 2244 if (ret) {
2247 2245 gk20a_err(dev_from_gk20a(g),
2248 if (!g->gr.ctx_vars.golden_image_size && 2246 "query pm ctx image size failed");
2249 !g->gr.ctx_vars.zcull_ctxsw_image_size) { 2247 return ret;
2250 g->gr.ctx_vars.golden_image_size = golden_ctx_image_size; 2248 }
2251 g->gr.ctx_vars.zcull_ctxsw_image_size = zcull_ctx_image_size; 2249 g->gr.ctx_vars.priv_access_map_size = 512 * 1024;
2252 } else {
2253 /* hw is different after railgating? */
2254 BUG_ON(g->gr.ctx_vars.golden_image_size != golden_ctx_image_size);
2255 BUG_ON(g->gr.ctx_vars.zcull_ctxsw_image_size != zcull_ctx_image_size);
2256 } 2250 }
2257 2251
2258 g->gr.ctx_vars.priv_access_map_size = 512 * 1024;
2259
2260 gk20a_dbg_fn("done"); 2252 gk20a_dbg_fn("done");
2261 return 0; 2253 return 0;
2262} 2254}