diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index c13c96146..c1150bac6 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c @@ -1455,14 +1455,18 @@ static int gk20a_probe(struct platform_device *dev) if (tegra_platform_is_silicon()) gk20a->timeouts_enabled = true; - /* Set up initial clock gating settings */ - if (tegra_platform_is_silicon()) { - gk20a->slcg_enabled = true; - gk20a->blcg_enabled = true; - gk20a->elcg_enabled = true; - gk20a->elpg_enabled = true; - gk20a->aelpg_enabled = true; - } + /* Set up initial power settings. For non-slicon platforms, disable * + * power features and for silicon platforms, read from platform data */ + gk20a->slcg_enabled = + tegra_platform_is_silicon() ? platform->enable_slcg : false; + gk20a->blcg_enabled = + tegra_platform_is_silicon() ? platform->enable_blcg : false; + gk20a->elcg_enabled = + tegra_platform_is_silicon() ? platform->enable_elcg : false; + gk20a->elpg_enabled = + tegra_platform_is_silicon() ? platform->enable_elpg : false; + gk20a->aelpg_enabled = + tegra_platform_is_silicon() ? platform->enable_aelpg : false; gk20a_create_sysfs(dev); diff --git a/drivers/gpu/nvgpu/gk20a/platform_gk20a.h b/drivers/gpu/nvgpu/gk20a/platform_gk20a.h index 4e4541401..c343ad27d 100644 --- a/drivers/gpu/nvgpu/gk20a/platform_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/platform_gk20a.h @@ -61,6 +61,21 @@ struct gk20a_platform { /* Delay before clock gated */ int clockgate_delay; + /* Second Level Clock Gating: true = enable false = disable */ + bool enable_slcg; + + /* Block Level Clock Gating: true = enable flase = disable */ + bool enable_blcg; + + /* Engine Level Clock Gating: true = enable flase = disable */ + bool enable_elcg; + + /* Engine Level Power Gating: true = enable flase = disable */ + bool enable_elpg; + + /* Adaptative ELPG: true = enable flase = disable */ + bool enable_aelpg; + /* Initialize the platform interface of the gk20a driver. * * The platform implementation of this function must diff --git a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c index 9f2a79715..28f82816b 100644 --- a/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c +++ b/drivers/gpu/nvgpu/gk20a/platform_gk20a_tegra.c @@ -534,6 +534,12 @@ struct gk20a_platform t132_gk20a_tegra_platform = { .railgate_delay = 500, .clockgate_delay = 50, .can_railgate = true, + .enable_slcg = true, + .enable_blcg = true, + .enable_elcg = true, + .enable_elpg = true, + .enable_aelpg = true, + .probe = gk20a_tegra_probe, .late_probe = gk20a_tegra_late_probe, @@ -562,6 +568,11 @@ struct gk20a_platform gk20a_tegra_platform = { .railgate_delay = 500, .clockgate_delay = 50, .can_railgate = true, + .enable_slcg = true, + .enable_blcg = true, + .enable_elcg = true, + .enable_elpg = true, + .enable_aelpg = true, .probe = gk20a_tegra_probe, .late_probe = gk20a_tegra_late_probe, @@ -589,6 +600,13 @@ struct gk20a_platform gm20b_tegra_platform = { /* power management configuration */ .railgate_delay = 500, .clockgate_delay = 50, + /* Disable all power features for gm20b */ + .can_railgate = false, + .enable_slcg = false, + .enable_blcg = false, + .enable_elcg = false, + .enable_elpg = false, + .enable_aelpg = false, .probe = gk20a_tegra_probe, .late_probe = gk20a_tegra_late_probe,