diff options
author | Seema Khowala <seemaj@nvidia.com> | 2016-10-12 18:16:47 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-01-18 19:46:15 -0500 |
commit | 911dcedb489ebef5758e5533f73e8653cc7770b7 (patch) | |
tree | 15a95a842f5a24af0a8d88c605c02b86d3ab4101 /drivers/gpu/nvgpu/gk20a/gr_gk20a.c | |
parent | 28fb1de00a907719a02cee62c7e7f3a0aee7075f (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.c | 42 |
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 | ||