From a88e58cc9d2c4b9f852716240b3cabc9449d8679 Mon Sep 17 00:00:00 2001 From: Richard Zhao Date: Thu, 23 Jul 2015 15:10:42 -0700 Subject: gpu: nvgpu: vgpu: add t210 gm20b support - add hal initializaiton - create folders vgpu/gk20a and vgpu/gm20b for specific code Bug 1653185 Change-Id: If94d45e22a1d73d2e4916673736cc29751be4e40 Signed-off-by: Richard Zhao Reviewed-on: http://git-master/r/774148 GVS: Gerrit_Virtual_Submit Reviewed-by: Aingara Paramakuru Reviewed-by: Ken Adams --- drivers/gpu/nvgpu/vgpu/gr_vgpu.c | 68 +++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 25 deletions(-) (limited to 'drivers/gpu/nvgpu/vgpu/gr_vgpu.c') diff --git a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c index 99754cae..60a8f6c5 100644 --- a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c @@ -601,36 +601,18 @@ static int vgpu_gr_get_zcull_info(struct gk20a *g, struct gr_gk20a *gr, return 0; } -static void vgpu_gr_detect_sm_arch(struct gk20a *g) +static u32 vgpu_gr_get_gpc_tpc_mask(struct gk20a *g, u32 gpc_index) { struct gk20a_platform *platform = gk20a_get_platform(g->dev); - u32 v = 0, raw_version, version = 0; + u32 data; - gk20a_dbg_fn(""); + WARN_ON(gpc_index > 0); if (vgpu_get_attribute(platform->virt_handle, - TEGRA_VGPU_ATTRIB_GPC0_TPC0_SM_ARCH, &v)) - gk20a_err(dev_from_gk20a(g), "failed to retrieve SM arch"); - - raw_version = gr_gpc0_tpc0_sm_arch_spa_version_v(v); - if (raw_version == gr_gpc0_tpc0_sm_arch_spa_version_smkepler_lp_v()) - version = 0x320; /* SM 3.2 */ - else - gk20a_err(dev_from_gk20a(g), "Unknown SM version 0x%x", - raw_version); - - /* on Kepler, SM version == SPA version */ - g->gpu_characteristics.sm_arch_spa_version = version; - g->gpu_characteristics.sm_arch_sm_version = version; - - g->gpu_characteristics.sm_arch_warp_count = - gr_gpc0_tpc0_sm_arch_warp_count_v(v); -} + TEGRA_VGPU_ATTRIB_GPC0_TPC_MASK, &data)) + gk20a_err(dev_from_gk20a(g), "failed to retrieve gpc0_tpc_mask"); -static u32 vgpu_gr_get_gpc_tpc_mask(struct gk20a *g, u32 gpc_index) -{ - /* One TPC for gk20a */ - return 0x1; + return data; } static u32 vgpu_gr_get_max_fbps_count(struct gk20a *g) @@ -661,6 +643,40 @@ static u32 vgpu_gr_get_fbp_en_mask(struct gk20a *g) return fbp_en_mask; } +static u32 vgpu_gr_get_max_ltc_per_fbp(struct gk20a *g) +{ + struct gk20a_platform *platform = gk20a_get_platform(g->dev); + u32 val = 0; + + gk20a_dbg_fn(""); + + if (vgpu_get_attribute(platform->virt_handle, + TEGRA_VGPU_ATTRIB_MAX_LTC_PER_FBP, &val)) + gk20a_err(dev_from_gk20a(g), "failed to retrieve max ltc per fbp"); + + return val; +} + +static u32 vgpu_gr_get_max_lts_per_ltc(struct gk20a *g) +{ + struct gk20a_platform *platform = gk20a_get_platform(g->dev); + u32 val = 0; + + gk20a_dbg_fn(""); + + if (vgpu_get_attribute(platform->virt_handle, + TEGRA_VGPU_ATTRIB_MAX_LTS_PER_LTC, &val)) + gk20a_err(dev_from_gk20a(g), "failed to retrieve lts per ltc"); + + return val; +} + +static u32 *vgpu_gr_rop_l2_en_mask(struct gk20a *g) +{ + /* no one use it yet */ + return NULL; +} + static int vgpu_gr_add_zbc(struct gk20a *g, struct gr_gk20a *gr, struct zbc_entry *zbc_val) { @@ -875,10 +891,12 @@ void vgpu_init_gr_ops(struct gpu_ops *gops) gops->gr.free_obj_ctx = vgpu_gr_free_obj_ctx; gops->gr.bind_ctxsw_zcull = vgpu_gr_bind_ctxsw_zcull; gops->gr.get_zcull_info = vgpu_gr_get_zcull_info; - gops->gr.detect_sm_arch = vgpu_gr_detect_sm_arch; gops->gr.get_gpc_tpc_mask = vgpu_gr_get_gpc_tpc_mask; gops->gr.get_max_fbps_count = vgpu_gr_get_max_fbps_count; gops->gr.get_fbp_en_mask = vgpu_gr_get_fbp_en_mask; + gops->gr.get_max_ltc_per_fbp = vgpu_gr_get_max_ltc_per_fbp; + gops->gr.get_max_lts_per_ltc = vgpu_gr_get_max_lts_per_ltc; + gops->gr.get_rop_l2_en_mask = vgpu_gr_rop_l2_en_mask; gops->gr.zbc_set_table = vgpu_gr_add_zbc; gops->gr.zbc_query_table = vgpu_gr_query_zbc; } -- cgit v1.2.2