summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
authorSeema Khowala <seemaj@nvidia.com>2016-10-12 18:16:47 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-01-18 19:46:15 -0500
commit911dcedb489ebef5758e5533f73e8653cc7770b7 (patch)
tree15a95a842f5a24af0a8d88c605c02b86d3ab4101 /drivers/gpu/nvgpu/gk20a/gr_gk20a.c
parent28fb1de00a907719a02cee62c7e7f3a0aee7075f (diff)
gpu: nvgpu: support t19x zbc
Added infrastructure for supporting new zbc features JIRA GV11B-9 Change-Id: Id8408348759488e8b0393dd89dd0faacfb111f01 Signed-off-by: Seema Khowala <seemaj@nvidia.com> Reviewed-on: http://git-master/r/1235525 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c42
1 files changed, 38 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index f1ef8be2..c5e927c1 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -4018,7 +4018,8 @@ int gr_gk20a_add_zbc(struct gk20a *g, struct gr_gk20a *gr,
4018{ 4018{
4019 struct zbc_color_table *c_tbl; 4019 struct zbc_color_table *c_tbl;
4020 struct zbc_depth_table *d_tbl; 4020 struct zbc_depth_table *d_tbl;
4021 u32 i, ret = -ENOMEM; 4021 u32 i;
4022 int ret = -ENOMEM;
4022 bool added = false; 4023 bool added = false;
4023 u32 entries; 4024 u32 entries;
4024 4025
@@ -4094,6 +4095,16 @@ int gr_gk20a_add_zbc(struct gk20a *g, struct gr_gk20a *gr,
4094 gr->max_used_depth_index++; 4095 gr->max_used_depth_index++;
4095 } 4096 }
4096 break; 4097 break;
4098 case T19X_ZBC:
4099 if (g->ops.gr.add_zbc_type_s) {
4100 added = g->ops.gr.add_zbc_type_s(g, gr, zbc_val, &ret);
4101 } else {
4102 gk20a_err(dev_from_gk20a(g),
4103 "invalid zbc table type %d", zbc_val->type);
4104 ret = -EINVAL;
4105 goto err_mutex;
4106 }
4107 break;
4097 default: 4108 default:
4098 gk20a_err(dev_from_gk20a(g), 4109 gk20a_err(dev_from_gk20a(g),
4099 "invalid zbc table type %d", zbc_val->type); 4110 "invalid zbc table type %d", zbc_val->type);
@@ -4150,6 +4161,16 @@ int gr_gk20a_query_zbc(struct gk20a *g, struct gr_gk20a *gr,
4150 query_params->format = gr->zbc_dep_tbl[index].format; 4161 query_params->format = gr->zbc_dep_tbl[index].format;
4151 query_params->ref_cnt = gr->zbc_dep_tbl[index].ref_cnt; 4162 query_params->ref_cnt = gr->zbc_dep_tbl[index].ref_cnt;
4152 break; 4163 break;
4164 case T19X_ZBC:
4165 if (g->ops.gr.zbc_s_query_table) {
4166 return g->ops.gr.zbc_s_query_table(g, gr,
4167 query_params);
4168 } else {
4169 gk20a_err(dev_from_gk20a(g),
4170 "invalid zbc table type\n");
4171 return -EINVAL;
4172 }
4173 break;
4153 default: 4174 default:
4154 gk20a_err(dev_from_gk20a(g), 4175 gk20a_err(dev_from_gk20a(g),
4155 "invalid zbc table type\n"); 4176 "invalid zbc table type\n");
@@ -4192,6 +4213,13 @@ static int gr_gk20a_load_zbc_table(struct gk20a *g, struct gr_gk20a *gr)
4192 if (ret) 4213 if (ret)
4193 return ret; 4214 return ret;
4194 } 4215 }
4216
4217 if (g->ops.gr.load_zbc_s_tbl) {
4218 ret = g->ops.gr.load_zbc_s_tbl(g, gr);
4219 if (ret)
4220 return ret;
4221 }
4222
4195 return 0; 4223 return 0;
4196} 4224}
4197 4225
@@ -4221,7 +4249,7 @@ int gr_gk20a_load_zbc_default_table(struct gk20a *g, struct gr_gk20a *gr)
4221 zbc_val.color_ds[i] = 0; 4249 zbc_val.color_ds[i] = 0;
4222 zbc_val.color_l2[i] = 0; 4250 zbc_val.color_l2[i] = 0;
4223 } 4251 }
4224 err = gr_gk20a_add_zbc(g, gr, &zbc_val); 4252 err |= gr_gk20a_add_zbc(g, gr, &zbc_val);
4225 4253
4226 /* Opaque white (i.e. solid white) = (fmt 2 = uniform 1) */ 4254 /* Opaque white (i.e. solid white) = (fmt 2 = uniform 1) */
4227 zbc_val.format = gr_ds_zbc_color_fmt_val_unorm_one_v(); 4255 zbc_val.format = gr_ds_zbc_color_fmt_val_unorm_one_v();
@@ -4244,11 +4272,11 @@ int gr_gk20a_load_zbc_default_table(struct gk20a *g, struct gr_gk20a *gr)
4244 4272
4245 zbc_val.format = gr_ds_zbc_z_fmt_val_fp32_v(); 4273 zbc_val.format = gr_ds_zbc_z_fmt_val_fp32_v();
4246 zbc_val.depth = 0x3f800000; 4274 zbc_val.depth = 0x3f800000;
4247 err |= gr_gk20a_add_zbc(g, gr, &zbc_val); 4275 err = gr_gk20a_add_zbc(g, gr, &zbc_val);
4248 4276
4249 zbc_val.format = gr_ds_zbc_z_fmt_val_fp32_v(); 4277 zbc_val.format = gr_ds_zbc_z_fmt_val_fp32_v();
4250 zbc_val.depth = 0; 4278 zbc_val.depth = 0;
4251 err = gr_gk20a_add_zbc(g, gr, &zbc_val); 4279 err |= gr_gk20a_add_zbc(g, gr, &zbc_val);
4252 4280
4253 if (!err) 4281 if (!err)
4254 gr->max_default_depth_index = 2; 4282 gr->max_default_depth_index = 2;
@@ -4258,6 +4286,12 @@ int gr_gk20a_load_zbc_default_table(struct gk20a *g, struct gr_gk20a *gr)
4258 return err; 4286 return err;
4259 } 4287 }
4260 4288
4289 if (g->ops.gr.load_zbc_s_default_tbl) {
4290 err = g->ops.gr.load_zbc_s_default_tbl(g, gr);
4291 if (err)
4292 return err;
4293 }
4294
4261 return 0; 4295 return 0;
4262} 4296}
4263 4297