From 70674c2f873afc3d0e215a866cac34258ef20c0e Mon Sep 17 00:00:00 2001 From: Aingara Paramakuru Date: Mon, 27 Oct 2014 15:10:23 -0400 Subject: gpu: nvgpu: vgpu: add PM domain support vgpu "poweron" and "poweroff" routines now get invoked using the PM domain callbacks, instead of the obsolete gk20a_get_client/gk20a_put_client routines. Bug 1570878 Change-Id: I9a5254936904f75cb3c8a14c2bf5066f919b6588 Signed-off-by: Aingara Paramakuru Reviewed-on: http://git-master/r/590492 Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/vgpu/vgpu.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'drivers/gpu/nvgpu/vgpu/vgpu.c') diff --git a/drivers/gpu/nvgpu/vgpu/vgpu.c b/drivers/gpu/nvgpu/vgpu/vgpu.c index 84fd6d18..82a0851e 100644 --- a/drivers/gpu/nvgpu/vgpu/vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/vgpu.c @@ -304,6 +304,27 @@ done: return err; } +static int vgpu_pm_initialise_domain(struct platform_device *pdev) +{ + struct gk20a_platform *platform = platform_get_drvdata(pdev); + struct dev_power_governor *pm_domain_gov = NULL; + struct generic_pm_domain *domain = &platform->g->pd; + + domain->name = "gpu"; + +#ifdef CONFIG_PM_RUNTIME + pm_domain_gov = &pm_domain_always_on_gov; +#endif + + pm_genpd_init(domain, pm_domain_gov, true); + + domain->dev_ops.save_state = vgpu_pm_prepare_poweroff; + domain->dev_ops.restore_state = vgpu_pm_finalize_poweron; + + device_set_wakeup_capable(&pdev->dev, 0); + return pm_genpd_add_device(domain, &pdev->dev); +} + static int vgpu_pm_init(struct platform_device *dev) { int err = 0; @@ -311,6 +332,11 @@ static int vgpu_pm_init(struct platform_device *dev) gk20a_dbg_fn(""); pm_runtime_enable(&dev->dev); + + /* genpd will take care of runtime power management if it is enabled */ + if (IS_ENABLED(CONFIG_PM_GENERIC_DOMAINS)) + err = vgpu_pm_initialise_domain(dev); + return err; } -- cgit v1.2.2