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/ltc_vgpu.c | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) (limited to 'drivers/gpu/nvgpu/vgpu/ltc_vgpu.c') diff --git a/drivers/gpu/nvgpu/vgpu/ltc_vgpu.c b/drivers/gpu/nvgpu/vgpu/ltc_vgpu.c index 211e34b5..199e880b 100644 --- a/drivers/gpu/nvgpu/vgpu/ltc_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/ltc_vgpu.c @@ -1,7 +1,7 @@ /* * Virtualized GPU L2 * - * Copyright (c) 2014 NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2014-2015 NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -24,7 +24,7 @@ static int vgpu_determine_L2_size_bytes(struct gk20a *g) if (vgpu_get_attribute(platform->virt_handle, TEGRA_VGPU_ATTRIB_L2_SIZE, &cache_size)) - dev_err(dev_from_gk20a(g), "unable to get L2 size"); + dev_err(dev_from_gk20a(g), "unable to get L2 size\n"); return cache_size; } @@ -33,11 +33,26 @@ static int vgpu_ltc_init_comptags(struct gk20a *g, struct gr_gk20a *gr) { struct gk20a_platform *platform = gk20a_get_platform(g->dev); u32 max_comptag_lines = 0; + int err; gk20a_dbg_fn(""); - vgpu_get_attribute(platform->virt_handle, + err = vgpu_get_attribute(platform->virt_handle, + TEGRA_VGPU_ATTRIB_CACHELINE_SIZE, + &gr->cacheline_size); + err |= vgpu_get_attribute(platform->virt_handle, + TEGRA_VGPU_ATTRIB_COMPTAGS_PER_CACHELINE, + &gr->comptags_per_cacheline); + err |= vgpu_get_attribute(platform->virt_handle, + TEGRA_VGPU_ATTRIB_SLICES_PER_LTC, + &gr->slices_per_ltc); + err |= vgpu_get_attribute(platform->virt_handle, TEGRA_VGPU_ATTRIB_COMPTAG_LINES, &max_comptag_lines); + if (err) { + dev_err(dev_from_gk20a(g), "failed to get ctags atributes\n"); + return -ENXIO; + } + if (max_comptag_lines < 2) return -ENXIO; @@ -46,8 +61,23 @@ static int vgpu_ltc_init_comptags(struct gk20a *g, struct gr_gk20a *gr) return 0; } +static void vgpu_ltc_init_fs_state(struct gk20a *g) +{ + struct gk20a_platform *platform = gk20a_get_platform(g->dev); + u32 ltc_count = 0; + int err; + + gk20a_dbg_fn(""); + + err = vgpu_get_attribute(platform->virt_handle, + TEGRA_VGPU_ATTRIB_LTC_COUNT, <c_count); + WARN_ON(err); + g->ltc_count = ltc_count; +} + void vgpu_init_ltc_ops(struct gpu_ops *gops) { gops->ltc.determine_L2_size_bytes = vgpu_determine_L2_size_bytes; gops->ltc.init_comptags = vgpu_ltc_init_comptags; + gops->ltc.init_fs_state = vgpu_ltc_init_fs_state; } -- cgit v1.2.2