summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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}