mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
gpu: nvgpu: add SLCG support for GSP and CTRL unit
Add SLCG register programming for GSP and CTRL units Bug 3452217 Change-Id: I69e414a82b5c12f26ff3b6626c328b5c0aa9e04c Signed-off-by: Divya <dsinghatwari@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2678782 Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
@@ -660,6 +660,13 @@ static int nvgpu_init_cg_ltc_load_gating_prod(struct gk20a *g)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int nvgpu_init_cg_ctrl_load_gating_prod(struct gk20a *g)
|
||||
{
|
||||
nvgpu_cg_slcg_ctrl_load_enable(g, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int nvgpu_ipa_pa_rwsem_init(struct gk20a *g)
|
||||
{
|
||||
nvgpu_rwsem_init(&(g->ipa_pa_cache.ipa_pa_rw_lock));
|
||||
@@ -910,6 +917,9 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
*/
|
||||
NVGPU_INIT_TABLE_ENTRY(&nvgpu_init_cg_ltc_load_gating_prod,
|
||||
NO_FLAG),
|
||||
/* Load SLCG for CTRL unit */
|
||||
NVGPU_INIT_TABLE_ENTRY(&nvgpu_init_cg_ctrl_load_gating_prod,
|
||||
NO_FLAG),
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
NVGPU_INIT_TABLE_ENTRY(g->ops.sec2.init_sec2_support,
|
||||
NVGPU_SUPPORT_SEC2_RTOS),
|
||||
|
||||
@@ -343,6 +343,38 @@ done:
|
||||
}
|
||||
#endif
|
||||
|
||||
void nvgpu_cg_slcg_gsp_load_enable(struct gk20a *g, bool enable)
|
||||
{
|
||||
nvgpu_log_fn(g, " ");
|
||||
|
||||
nvgpu_mutex_acquire(&g->cg_pg_lock);
|
||||
if (!g->slcg_enabled) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (g->ops.cg.slcg_gsp_load_gating_prod != NULL) {
|
||||
g->ops.cg.slcg_gsp_load_gating_prod(g, enable);
|
||||
}
|
||||
done:
|
||||
nvgpu_mutex_release(&g->cg_pg_lock);
|
||||
}
|
||||
|
||||
void nvgpu_cg_slcg_ctrl_load_enable(struct gk20a *g, bool enable)
|
||||
{
|
||||
nvgpu_log_fn(g, " ");
|
||||
|
||||
nvgpu_mutex_acquire(&g->cg_pg_lock);
|
||||
if (!g->slcg_enabled) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (g->ops.cg.slcg_ctrl_load_gating_prod != NULL) {
|
||||
g->ops.cg.slcg_ctrl_load_gating_prod(g, enable);
|
||||
}
|
||||
done:
|
||||
nvgpu_mutex_release(&g->cg_pg_lock);
|
||||
}
|
||||
|
||||
static void cg_init_gr_slcg_load_gating_prod(struct gk20a *g)
|
||||
{
|
||||
if (g->ops.cg.slcg_bus_load_gating_prod != NULL) {
|
||||
@@ -656,6 +688,12 @@ void nvgpu_cg_slcg_set_slcg_enabled(struct gk20a *g, bool enable)
|
||||
if (g->ops.cg.slcg_hshub_load_gating_prod != NULL) {
|
||||
g->ops.cg.slcg_hshub_load_gating_prod(g, enable);
|
||||
}
|
||||
if (g->ops.cg.slcg_ctrl_load_gating_prod != NULL) {
|
||||
g->ops.cg.slcg_ctrl_load_gating_prod(g, enable);
|
||||
}
|
||||
if (g->ops.cg.slcg_gsp_load_gating_prod != NULL) {
|
||||
g->ops.cg.slcg_gsp_load_gating_prod(g, enable);
|
||||
}
|
||||
|
||||
done:
|
||||
nvgpu_mutex_release(&g->cg_pg_lock);
|
||||
|
||||
Reference in New Issue
Block a user