diff options
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 68 |
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 | ||
2208 | static int gr_gk20a_init_ctx_state(struct gk20a *g, struct gr_gk20a *gr) | 2208 | static 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 | } |