summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/vgpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu')
-rw-r--r--drivers/gpu/nvgpu/vgpu/vgpu.c42
1 files changed, 1 insertions, 41 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/vgpu.c b/drivers/gpu/nvgpu/vgpu/vgpu.c
index 6393ea50..c28130f2 100644
--- a/drivers/gpu/nvgpu/vgpu/vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/vgpu.c
@@ -430,48 +430,13 @@ done:
430 return err; 430 return err;
431} 431}
432 432
433static int vgpu_pm_initialise_domain(struct device *dev)
434{
435 struct gk20a_platform *platform = dev_get_drvdata(dev);
436 struct dev_power_governor *pm_domain_gov = NULL;
437 struct gk20a_domain_data *vgpu_pd_data;
438 struct generic_pm_domain *domain;
439
440 vgpu_pd_data = (struct gk20a_domain_data *)kzalloc
441 (sizeof(struct gk20a_domain_data), GFP_KERNEL);
442
443 if (!vgpu_pd_data)
444 return -ENOMEM;
445
446 domain = &vgpu_pd_data->gpd;
447 vgpu_pd_data->gk20a = platform->g;
448
449 domain->name = "gpu";
450
451#ifdef CONFIG_PM
452 pm_domain_gov = &pm_domain_always_on_gov;
453#endif
454
455 pm_genpd_init(domain, pm_domain_gov, true);
456
457 domain->dev_ops.save_state = vgpu_pm_prepare_poweroff;
458 domain->dev_ops.restore_state = vgpu_pm_finalize_poweron;
459
460 device_set_wakeup_capable(dev, 0);
461 return pm_genpd_add_device(domain, dev);
462}
463
464static int vgpu_pm_init(struct device *dev) 433static int vgpu_pm_init(struct device *dev)
465{ 434{
466 int err = 0; 435 int err = 0;
467 436
468 gk20a_dbg_fn(""); 437 gk20a_dbg_fn("");
469 438
470 pm_runtime_enable(dev); 439 __pm_runtime_disable(dev, false);
471
472 /* genpd will take care of runtime power management if it is enabled */
473 if (IS_ENABLED(CONFIG_PM_GENERIC_DOMAINS))
474 err = vgpu_pm_initialise_domain(dev);
475 440
476 return err; 441 return err;
477} 442}
@@ -567,16 +532,11 @@ int vgpu_remove(struct platform_device *pdev)
567{ 532{
568 struct device *dev = &pdev->dev; 533 struct device *dev = &pdev->dev;
569 struct gk20a *g = get_gk20a(dev); 534 struct gk20a *g = get_gk20a(dev);
570 struct gk20a_domain_data *vgpu_gpd;
571 gk20a_dbg_fn(""); 535 gk20a_dbg_fn("");
572 536
573 if (g->remove_support) 537 if (g->remove_support)
574 g->remove_support(dev); 538 g->remove_support(dev);
575 539
576 vgpu_gpd = container_of(&g, struct gk20a_domain_data, gk20a);
577 vgpu_gpd->gk20a = NULL;
578 kfree(vgpu_gpd);
579
580 vgpu_comm_deinit(); 540 vgpu_comm_deinit();
581 gk20a_user_deinit(dev, &nvgpu_class); 541 gk20a_user_deinit(dev, &nvgpu_class);
582 gk20a_get_platform(dev)->g = NULL; 542 gk20a_get_platform(dev)->g = NULL;