return 0;
}
-void gr_gk20a_pmu_save_zbc(struct gk20a *g, u32 entries)
-{
- struct fifo_gk20a *f = &g->fifo;
- struct fifo_engine_info_gk20a *gr_info =
- f->engine_info + ENGINE_GR_GK20A;
- unsigned long end_jiffies = jiffies +
- msecs_to_jiffies(gk20a_get_gr_idle_timeout(g));
- u32 ret;
-
- ret = gk20a_fifo_disable_engine_activity(g, gr_info, true);
- if (ret) {
- gk20a_err(dev_from_gk20a(g),
- "failed to disable gr engine activity\n");
- return;
- }
-
- ret = g->ops.gr.wait_empty(g, end_jiffies, GR_IDLE_CHECK_DEFAULT);
- if (ret) {
- gk20a_err(dev_from_gk20a(g),
- "failed to idle graphics\n");
- goto clean_up;
- }
-
- /* update zbc */
- gk20a_pmu_save_zbc(g, entries);
-
-clean_up:
- ret = gk20a_fifo_enable_engine_activity(g, gr_info);
- if (ret) {
- gk20a_err(dev_from_gk20a(g),
- "failed to enable gr engine activity\n");
- }
-
- return;
-}
-
int gr_gk20a_add_zbc(struct gk20a *g, struct gr_gk20a *gr,
struct zbc_entry *zbc_val)
{
/* update zbc for elpg only when new entry is added */
entries = max(gr->max_used_color_index,
gr->max_used_depth_index);
- gr_gk20a_pmu_save_zbc(g, entries);
+ gk20a_pmu_save_zbc(g, entries);
}
err_mutex:
return 0;
}
-static int _gk20a_gr_zbc_set_table(struct gk20a *g, struct gr_gk20a *gr,
- struct zbc_entry *zbc_val)
-{
- struct fifo_gk20a *f = &g->fifo;
- struct fifo_engine_info_gk20a *gr_info = f->engine_info + ENGINE_GR_GK20A;
- unsigned long end_jiffies;
- int ret;
-
- ret = gk20a_fifo_disable_engine_activity(g, gr_info, true);
- if (ret) {
- gk20a_err(dev_from_gk20a(g),
- "failed to disable gr engine activity\n");
- return ret;
- }
-
- end_jiffies = jiffies + msecs_to_jiffies(gk20a_get_gr_idle_timeout(g));
- ret = g->ops.gr.wait_empty(g, end_jiffies, GR_IDLE_CHECK_DEFAULT);
- if (ret) {
- gk20a_err(dev_from_gk20a(g),
- "failed to idle graphics\n");
- goto clean_up;
- }
-
- ret = gr_gk20a_add_zbc(g, gr, zbc_val);
-
-clean_up:
- if (gk20a_fifo_enable_engine_activity(g, gr_info)) {
- gk20a_err(dev_from_gk20a(g),
- "failed to enable gr engine activity\n");
- }
-
- return ret;
-}
-
int gk20a_gr_zbc_set_table(struct gk20a *g, struct gr_gk20a *gr,
struct zbc_entry *zbc_val)
{
gk20a_dbg_fn("");
return gr_gk20a_elpg_protected_call(g,
- _gk20a_gr_zbc_set_table(g, gr, zbc_val));
+ gr_gk20a_add_zbc(g, gr, zbc_val));
}
void gr_gk20a_init_blcg_mode(struct gk20a *g, u32 mode, u32 engine)
ltc_ltcs_ltss_dstg_zbc_index_address_f(real_index));
for (i = 0;
- i < ltc_ltcs_ltss_dstg_zbc_color_clear_value__size_1_v(); i++)
- gk20a_writel(g, ltc_ltcs_ltss_dstg_zbc_color_clear_value_r(i),
+ i < ltc_ltcs_ltss_dstg_zbc_color_clear_value__size_1_v(); i++) {
+ gk20a_writel_check(g, ltc_ltcs_ltss_dstg_zbc_color_clear_value_r(i),
color_val->color_l2[i]);
+ }
}
/*
gk20a_writel(g, ltc_ltcs_ltss_dstg_zbc_index_r(),
ltc_ltcs_ltss_dstg_zbc_index_address_f(real_index));
- gk20a_writel(g, ltc_ltcs_ltss_dstg_zbc_depth_clear_value_r(),
+ gk20a_writel_check(g, ltc_ltcs_ltss_dstg_zbc_depth_clear_value_r(),
depth_val->depth);
}