summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/vgpu/gr_vgpu.c
diff options
context:
space:
mode:
authorRichard Zhao <rizhao@nvidia.com>2015-04-16 14:57:10 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2015-06-06 10:24:40 -0400
commitdf67ff6a75cba1fc96ae5fbe7dba260250eae9fd (patch)
tree7a14ec613736d295d4d06da8e2bf11609290102a /drivers/gpu/nvgpu/vgpu/gr_vgpu.c
parentcb28a538cfbec71b441b29290166c114145d6d60 (diff)
gpu: nvgpu: add zbc support to vgpu
For both adding and querying zbc entry, added callbacks in gr ops. Native gpu driver (gk20a) and vgpu will both hook there. For vgpu, it will add or query zbc entry from RM server. Bug 1558561 Change-Id: If8a4850ecfbff41d8592664f5f93ad8c25f6fbce Signed-off-by: Richard Zhao <rizhao@nvidia.com> Reviewed-on: http://git-master/r/732775 (cherry picked from commit a3787cf971128904c2712338087685b02673065d) Reviewed-on: http://git-master/r/737880 (cherry picked from commit fca2a0457c968656dc29455608f35acab094d816) Reviewed-on: http://git-master/r/753278 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu/gr_vgpu.c')
-rw-r--r--drivers/gpu/nvgpu/vgpu/gr_vgpu.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c
index 8d0bb6cf..f6f12c7b 100644
--- a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c
@@ -661,6 +661,81 @@ static u32 vgpu_gr_get_fbp_en_mask(struct gk20a *g)
661 return fbp_en_mask; 661 return fbp_en_mask;
662} 662}
663 663
664static int vgpu_gr_add_zbc(struct gk20a *g, struct gr_gk20a *gr,
665 struct zbc_entry *zbc_val)
666{
667 struct gk20a_platform *platform = gk20a_get_platform(g->dev);
668 struct tegra_vgpu_cmd_msg msg = {0};
669 struct tegra_vgpu_zbc_set_table_params *p = &msg.params.zbc_set_table;
670 int err;
671
672 gk20a_dbg_fn("");
673
674 msg.cmd = TEGRA_VGPU_CMD_ZBC_SET_TABLE;
675 msg.handle = platform->virt_handle;
676
677 p->type = zbc_val->type;
678 p->format = zbc_val->format;
679 switch (p->type) {
680 case GK20A_ZBC_TYPE_COLOR:
681 memcpy(p->color_ds, zbc_val->color_ds, sizeof(p->color_ds));
682 memcpy(p->color_l2, zbc_val->color_l2, sizeof(p->color_l2));
683 break;
684 case GK20A_ZBC_TYPE_DEPTH:
685 p->depth = zbc_val->depth;
686 break;
687 default:
688 return -EINVAL;
689 }
690
691 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
692
693 return (err || msg.ret) ? -ENOMEM : 0;
694}
695
696static int vgpu_gr_query_zbc(struct gk20a *g, struct gr_gk20a *gr,
697 struct zbc_query_params *query_params)
698{
699 struct gk20a_platform *platform = gk20a_get_platform(g->dev);
700 struct tegra_vgpu_cmd_msg msg = {0};
701 struct tegra_vgpu_zbc_query_table_params *p =
702 &msg.params.zbc_query_table;
703 int err;
704
705 gk20a_dbg_fn("");
706
707 msg.cmd = TEGRA_VGPU_CMD_ZBC_QUERY_TABLE;
708 msg.handle = platform->virt_handle;
709
710 p->type = query_params->type;
711 p->index_size = query_params->index_size;
712
713 err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg));
714 if (err || msg.ret)
715 return -ENOMEM;
716
717 switch (query_params->type) {
718 case GK20A_ZBC_TYPE_COLOR:
719 memcpy(query_params->color_ds, p->color_ds,
720 sizeof(query_params->color_ds));
721 memcpy(query_params->color_l2, p->color_l2,
722 sizeof(query_params->color_l2));
723 break;
724 case GK20A_ZBC_TYPE_DEPTH:
725 query_params->depth = p->depth;
726 break;
727 case GK20A_ZBC_TYPE_INVALID:
728 query_params->index_size = p->index_size;
729 break;
730 default:
731 return -EINVAL;
732 }
733 query_params->ref_cnt = p->ref_cnt;
734 query_params->format = p->format;
735
736 return 0;
737}
738
664static void vgpu_remove_gr_support(struct gr_gk20a *gr) 739static void vgpu_remove_gr_support(struct gr_gk20a *gr)
665{ 740{
666 gk20a_dbg_fn(""); 741 gk20a_dbg_fn("");
@@ -782,4 +857,6 @@ void vgpu_init_gr_ops(struct gpu_ops *gops)
782 gops->gr.get_gpc_tpc_mask = vgpu_gr_get_gpc_tpc_mask; 857 gops->gr.get_gpc_tpc_mask = vgpu_gr_get_gpc_tpc_mask;
783 gops->gr.get_max_fbps_count = vgpu_gr_get_max_fbps_count; 858 gops->gr.get_max_fbps_count = vgpu_gr_get_max_fbps_count;
784 gops->gr.get_fbp_en_mask = vgpu_gr_get_fbp_en_mask; 859 gops->gr.get_fbp_en_mask = vgpu_gr_get_fbp_en_mask;
860 gops->gr.zbc_set_table = vgpu_gr_add_zbc;
861 gops->gr.zbc_query_table = vgpu_gr_query_zbc;
785} 862}