summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/vgpu/vgpu.c
diff options
context:
space:
mode:
authorRichard Zhao <rizhao@nvidia.com>2015-07-23 18:10:42 -0400
committerRichard Zhao <rizhao@nvidia.com>2015-08-19 08:12:00 -0400
commita88e58cc9d2c4b9f852716240b3cabc9449d8679 (patch)
tree5965b2645913695ed36e61aa4c42fdb60045cf42 /drivers/gpu/nvgpu/vgpu/vgpu.c
parentdb8bce518bcf2a1b46e5897f55469f348a16c9a2 (diff)
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 <rizhao@nvidia.com> Reviewed-on: http://git-master/r/774148 GVS: Gerrit_Virtual_Submit Reviewed-by: Aingara Paramakuru <aparamakuru@nvidia.com> Reviewed-by: Ken Adams <kadams@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu/vgpu.c')
-rw-r--r--drivers/gpu/nvgpu/vgpu/vgpu.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/vgpu.c b/drivers/gpu/nvgpu/vgpu/vgpu.c
index b16fe47c..b2c08d68 100644
--- a/drivers/gpu/nvgpu/vgpu/vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/vgpu.c
@@ -22,6 +22,8 @@
22#include "gk20a/hal_gk20a.h" 22#include "gk20a/hal_gk20a.h"
23#include "gk20a/hw_mc_gk20a.h" 23#include "gk20a/hw_mc_gk20a.h"
24 24
25#include "gm20b/hal_gm20b.h"
26
25static inline int vgpu_comm_init(struct platform_device *pdev) 27static inline int vgpu_comm_init(struct platform_device *pdev)
26{ 28{
27 size_t queue_sizes[] = { TEGRA_VGPU_QUEUE_SIZES }; 29 size_t queue_sizes[] = { TEGRA_VGPU_QUEUE_SIZES };
@@ -243,27 +245,38 @@ static void vgpu_detect_chip(struct gk20a *g)
243 g->gpu_characteristics.rev); 245 g->gpu_characteristics.rev);
244} 246}
245 247
248void vgpu_init_hal_common(struct gk20a *g)
249{
250 struct gpu_ops *gops = &g->ops;
251
252 vgpu_init_fifo_ops(gops);
253 vgpu_init_gr_ops(gops);
254 vgpu_init_ltc_ops(gops);
255 vgpu_init_mm_ops(gops);
256 vgpu_init_debug_ops(gops);
257}
258
246static int vgpu_init_hal(struct gk20a *g) 259static int vgpu_init_hal(struct gk20a *g)
247{ 260{
248 u32 ver = g->gpu_characteristics.arch + g->gpu_characteristics.impl; 261 u32 ver = g->gpu_characteristics.arch + g->gpu_characteristics.impl;
262 int err;
249 263
250 switch (ver) { 264 switch (ver) {
251 case GK20A_GPUID_GK20A: 265 case GK20A_GPUID_GK20A:
252 gk20a_dbg_info("gk20a detected"); 266 gk20a_dbg_info("gk20a detected");
253 /* init gk20a ops then override with virt extensions */ 267 err = vgpu_gk20a_init_hal(g);
254 gk20a_init_hal(g); 268 break;
255 vgpu_init_fifo_ops(&g->ops); 269 case GK20A_GPUID_GM20B:
256 vgpu_init_gr_ops(&g->ops); 270 gk20a_dbg_info("gm20b detected");
257 vgpu_init_ltc_ops(&g->ops); 271 err = vgpu_gm20b_init_hal(g);
258 vgpu_init_mm_ops(&g->ops);
259 vgpu_init_debug_ops(&g->ops);
260 break; 272 break;
261 default: 273 default:
262 gk20a_err(&g->dev->dev, "no support for %x", ver); 274 gk20a_err(&g->dev->dev, "no support for %x", ver);
263 return -ENODEV; 275 err = -ENODEV;
276 break;
264 } 277 }
265 278
266 return 0; 279 return err;
267} 280}
268 281
269int vgpu_pm_finalize_poweron(struct device *dev) 282int vgpu_pm_finalize_poweron(struct device *dev)