diff options
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu/vgpu.c')
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/vgpu.c | 42 |
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 | ||
433 | static 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 | |||
464 | static int vgpu_pm_init(struct device *dev) | 433 | static 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; |