summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c42
1 files changed, 20 insertions, 22 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 4d101845..4b48b838 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -3805,7 +3805,6 @@ static int gr_gk20a_load_zbc_table(struct gk20a *g, struct gr_gk20a *gr)
3805{ 3805{
3806 int i, ret; 3806 int i, ret;
3807 3807
3808 mutex_init(&gr->zbc_lock);
3809 for (i = 0; i < gr->max_used_color_index; i++) { 3808 for (i = 0; i < gr->max_used_color_index; i++) {
3810 struct zbc_color_table *c_tbl = &gr->zbc_col_tbl[i]; 3809 struct zbc_color_table *c_tbl = &gr->zbc_col_tbl[i];
3811 struct zbc_entry zbc_val; 3810 struct zbc_entry zbc_val;
@@ -3842,39 +3841,39 @@ int gr_gk20a_load_zbc_default_table(struct gk20a *g, struct gr_gk20a *gr)
3842 struct zbc_entry zbc_val; 3841 struct zbc_entry zbc_val;
3843 u32 i, err; 3842 u32 i, err;
3844 3843
3844 mutex_init(&gr->zbc_lock);
3845
3845 /* load default color table */ 3846 /* load default color table */
3846 zbc_val.type = GK20A_ZBC_TYPE_COLOR; 3847 zbc_val.type = GK20A_ZBC_TYPE_COLOR;
3847 3848
3848 zbc_val.format = gr_ds_zbc_color_fmt_val_zero_v(); 3849 /* Opaque black (i.e. solid black, fmt 0x28 = A8B8G8R8) */
3850 zbc_val.format = gr_ds_zbc_color_fmt_val_a8_b8_g8_r8_v();
3849 for (i = 0; i < GK20A_ZBC_COLOR_VALUE_SIZE; i++) { 3851 for (i = 0; i < GK20A_ZBC_COLOR_VALUE_SIZE; i++) {
3850 zbc_val.color_ds[i] = 0; 3852 zbc_val.color_ds[i] = 0;
3851 zbc_val.color_l2[i] = 0; 3853 zbc_val.color_l2[i] = 0;
3852 } 3854 }
3855 zbc_val.color_l2[0] = 0xff000000;
3856 zbc_val.color_ds[3] = 0x3f800000;
3853 err = gr_gk20a_add_zbc(g, gr, &zbc_val); 3857 err = gr_gk20a_add_zbc(g, gr, &zbc_val);
3854 3858
3855 zbc_val.format = gr_ds_zbc_color_fmt_val_unorm_one_v(); 3859 /* Transparent black = (fmt 1 = zero) */
3856 for (i = 0; i < GK20A_ZBC_COLOR_VALUE_SIZE; i++) { 3860 zbc_val.format = gr_ds_zbc_color_fmt_val_zero_v();
3857 zbc_val.color_ds[i] = 0xffffffff;
3858 zbc_val.color_l2[i] = 0x3f800000;
3859 }
3860 err |= gr_gk20a_add_zbc(g, gr, &zbc_val);
3861
3862 zbc_val.format = gr_ds_zbc_color_fmt_val_rf32_gf32_bf32_af32_v();
3863 for (i = 0; i < GK20A_ZBC_COLOR_VALUE_SIZE; i++) { 3861 for (i = 0; i < GK20A_ZBC_COLOR_VALUE_SIZE; i++) {
3864 zbc_val.color_ds[i] = 0; 3862 zbc_val.color_ds[i] = 0;
3865 zbc_val.color_l2[i] = 0; 3863 zbc_val.color_l2[i] = 0;
3866 } 3864 }
3867 err |= gr_gk20a_add_zbc(g, gr, &zbc_val); 3865 err = gr_gk20a_add_zbc(g, gr, &zbc_val);
3868 3866
3869 zbc_val.format = gr_ds_zbc_color_fmt_val_rf32_gf32_bf32_af32_v(); 3867 /* Opaque white (i.e. solid white) = (fmt 2 = uniform 1) */
3868 zbc_val.format = gr_ds_zbc_color_fmt_val_unorm_one_v();
3870 for (i = 0; i < GK20A_ZBC_COLOR_VALUE_SIZE; i++) { 3869 for (i = 0; i < GK20A_ZBC_COLOR_VALUE_SIZE; i++) {
3871 zbc_val.color_ds[i] = 0x3f800000; 3870 zbc_val.color_ds[i] = 0x3f800000;
3872 zbc_val.color_l2[i] = 0x3f800000; 3871 zbc_val.color_l2[i] = 0xffffffff;
3873 } 3872 }
3874 err |= gr_gk20a_add_zbc(g, gr, &zbc_val); 3873 err |= gr_gk20a_add_zbc(g, gr, &zbc_val);
3875 3874
3876 if (!err) 3875 if (!err)
3877 gr->max_default_color_index = 4; 3876 gr->max_default_color_index = 3;
3878 else { 3877 else {
3879 gk20a_err(dev_from_gk20a(g), 3878 gk20a_err(dev_from_gk20a(g),
3880 "fail to load default zbc color table\n"); 3879 "fail to load default zbc color table\n");
@@ -3885,13 +3884,13 @@ int gr_gk20a_load_zbc_default_table(struct gk20a *g, struct gr_gk20a *gr)
3885 zbc_val.type = GK20A_ZBC_TYPE_DEPTH; 3884 zbc_val.type = GK20A_ZBC_TYPE_DEPTH;
3886 3885
3887 zbc_val.format = gr_ds_zbc_z_fmt_val_fp32_v(); 3886 zbc_val.format = gr_ds_zbc_z_fmt_val_fp32_v();
3888 zbc_val.depth = 0;
3889 err = gr_gk20a_add_zbc(g, gr, &zbc_val);
3890
3891 zbc_val.format = gr_ds_zbc_z_fmt_val_fp32_v();
3892 zbc_val.depth = 0x3f800000; 3887 zbc_val.depth = 0x3f800000;
3893 err |= gr_gk20a_add_zbc(g, gr, &zbc_val); 3888 err |= gr_gk20a_add_zbc(g, gr, &zbc_val);
3894 3889
3890 zbc_val.format = gr_ds_zbc_z_fmt_val_fp32_v();
3891 zbc_val.depth = 0;
3892 err = gr_gk20a_add_zbc(g, gr, &zbc_val);
3893
3895 if (!err) 3894 if (!err)
3896 gr->max_default_depth_index = 2; 3895 gr->max_default_depth_index = 2;
3897 else { 3896 else {
@@ -4311,10 +4310,7 @@ static int gk20a_init_gr_setup_hw(struct gk20a *g)
4311 data = gk20a_readl(g, gr_status_mask_r()); 4310 data = gk20a_readl(g, gr_status_mask_r());
4312 gk20a_writel(g, gr_status_mask_r(), data & gr->status_disable_mask); 4311 gk20a_writel(g, gr_status_mask_r(), data & gr->status_disable_mask);
4313 4312
4314 if (gr->sw_ready) 4313 gr_gk20a_load_zbc_table(g, gr);
4315 gr_gk20a_load_zbc_table(g, gr);
4316 else
4317 gr_gk20a_load_zbc_default_table(g, gr);
4318 4314
4319 g->ops.ltc.init_cbc(g, gr); 4315 g->ops.ltc.init_cbc(g, gr);
4320 4316
@@ -4625,6 +4621,8 @@ static int gk20a_init_gr_setup_sw(struct gk20a *g)
4625 if (err) 4621 if (err)
4626 goto clean_up; 4622 goto clean_up;
4627 4623
4624 gr_gk20a_load_zbc_default_table(g, gr);
4625
4628 mutex_init(&gr->ctx_mutex); 4626 mutex_init(&gr->ctx_mutex);
4629 spin_lock_init(&gr->ch_tlb_lock); 4627 spin_lock_init(&gr->ch_tlb_lock);
4630 4628