diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2014-06-06 02:33:36 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:10:48 -0400 |
commit | 91d83a078cbd11eaa1d29dbda038c1d0b914479a (patch) | |
tree | d4df04e57bef32d33f2bd5f4632d0675c97f994d /drivers/gpu/nvgpu/gk20a/gr_gk20a.c | |
parent | 7f991657c102e819e90faedf74b081cc246c892e (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.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 | } |