mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-25 02:52:51 +03:00
gpu: nvgpu: add cg and pg function
Add new power/clock gating functions that can be called by
other units.
New clock_gating functions will reside in cg.c under
common/power_features/cg unit.
New power gating functions will reside in pg.c under
common/power_features/pg unit.
Use nvgpu_pg_elpg_disable and nvgpu_pg_elpg_enable to disable/enable
elpg and also in gr_gk20a_elpg_protected macro to access gr registers.
Add cg_pg_lock to make elpg_enabled, elcg_enabled, blcg_enabled
and slcg_enabled thread safe.
JIRA NVGPU-2014
Change-Id: I00d124c2ee16242c9a3ef82e7620fbb7f1297aff
Signed-off-by: Seema Khowala <seemaj@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/2025493
Signed-off-by: Debarshi Dutta <ddutta@nvidia.com>
(cherry-picked from c905858565 in
dev-kernel)
Reviewed-on: https://git-master.nvidia.com/r/2108406
GVS: Gerrit_Virtual_Submit
Reviewed-by: Bibek Basu <bbasu@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
f495f52c70
commit
c81cc032c4
@@ -30,6 +30,8 @@
|
||||
#include <nvgpu/bug.h>
|
||||
#include <nvgpu/utils.h>
|
||||
#include <nvgpu/gk20a.h>
|
||||
#include <nvgpu/power_features/cg.h>
|
||||
|
||||
|
||||
static int nvgpu_pg_init_task(void *arg);
|
||||
|
||||
@@ -44,15 +46,9 @@ static int pmu_enable_hw(struct nvgpu_pmu *pmu, bool enable)
|
||||
/* bring PMU falcon/engine out of reset */
|
||||
g->ops.pmu.reset_engine(g, true);
|
||||
|
||||
if (g->ops.clock_gating.slcg_pmu_load_gating_prod) {
|
||||
g->ops.clock_gating.slcg_pmu_load_gating_prod(g,
|
||||
g->slcg_enabled);
|
||||
}
|
||||
nvgpu_cg_slcg_pmu_load_enable(g);
|
||||
|
||||
if (g->ops.clock_gating.blcg_pmu_load_gating_prod) {
|
||||
g->ops.clock_gating.blcg_pmu_load_gating_prod(g,
|
||||
g->blcg_enabled);
|
||||
}
|
||||
nvgpu_cg_blcg_pmu_load_enable(g);
|
||||
|
||||
if (nvgpu_flcn_mem_scrub_wait(pmu->flcn)) {
|
||||
/* keep PMU falcon/engine in reset
|
||||
@@ -446,7 +442,7 @@ static void pmu_setup_hw_enable_elpg(struct gk20a *g)
|
||||
g->ops.gr.pmu_save_zbc(g, 0xf);
|
||||
}
|
||||
|
||||
if (g->elpg_enabled) {
|
||||
if (g->can_elpg && g->elpg_enabled) {
|
||||
/* Init reg with prod values*/
|
||||
if (g->ops.pmu.pmu_setup_elpg) {
|
||||
g->ops.pmu.pmu_setup_elpg(g);
|
||||
|
||||
Reference in New Issue
Block a user