mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 18:16:01 +03:00
gpu: nvgpu: cg unit doxygen documentation
Add doxygen documentation for nvgpu.common.power_features.cg. JIRA NVGPU-2471 Change-Id: Ia21fcc73f8614b2a9fb30d2a2f30ede67bf58551 Signed-off-by: Sagar Kamble <skamble@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/2193102 Reviewed-by: Deepak Nibade <dnibade@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Vaibhav Kachore <vkachore@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
Alex Waterman
parent
cd8f8beccd
commit
e8545d66af
@@ -42,6 +42,7 @@
|
|||||||
* - @ref unit-falcon
|
* - @ref unit-falcon
|
||||||
* - @ref unit-os_utils
|
* - @ref unit-os_utils
|
||||||
* - @ref unit-acr
|
* - @ref unit-acr
|
||||||
|
* - @ref unit-cg
|
||||||
* - Etc, etc.
|
* - Etc, etc.
|
||||||
*
|
*
|
||||||
* NVGPU Software Unit Design Documentation
|
* NVGPU Software Unit Design Documentation
|
||||||
|
|||||||
@@ -24,44 +24,256 @@
|
|||||||
#ifndef NVGPU_POWER_FEATURES_CG_H
|
#ifndef NVGPU_POWER_FEATURES_CG_H
|
||||||
#define NVGPU_POWER_FEATURES_CG_H
|
#define NVGPU_POWER_FEATURES_CG_H
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* @page unit-cg Unit Clock Gating (CG)
|
||||||
|
*
|
||||||
|
* Overview
|
||||||
|
* ========
|
||||||
|
*
|
||||||
|
* Clock Gating (CG) unit is responsible for programming the register
|
||||||
|
* configuration for Second Level Clock Gating (SLCG), Block Level
|
||||||
|
* Clock Gating (BLCG) and Engine Level Clock Gating (ELCG).
|
||||||
|
*
|
||||||
|
* Chip specific clock gating register configurations are available
|
||||||
|
* in the files, hal/power_features/cg/<chip>_gating_reglist.c.
|
||||||
|
*
|
||||||
|
* Various domains/modules in the GPU have individual clock gating
|
||||||
|
* configuration registers that are programmed at instances during
|
||||||
|
* nvgpu power on as given below:
|
||||||
|
*
|
||||||
|
* SLCG:
|
||||||
|
* + FB - MM init.
|
||||||
|
* + LTC - MM init.
|
||||||
|
* + PRIV RING - Enabling PRIV RING.
|
||||||
|
* + FIFO - FIFO init.
|
||||||
|
* + PMU - Programmed while resetting the PMU engine.
|
||||||
|
* + CE - CE init.
|
||||||
|
* + bus - GR init.
|
||||||
|
* + Chiplet - GR init.
|
||||||
|
* + GR - GR init.
|
||||||
|
* + CTXSW firmware - GR init.
|
||||||
|
* + PERF - GR init.
|
||||||
|
* + XBAR - GR init.
|
||||||
|
* + HSHUB - GR init.
|
||||||
|
*
|
||||||
|
* BLCG:
|
||||||
|
* + FB - MM init.
|
||||||
|
* + LTC - MM init.
|
||||||
|
* + FIFO - FIFO init.
|
||||||
|
* + PMU - Programmed while resetting the PMU engine.
|
||||||
|
* + CE - CE init.
|
||||||
|
* + GR - Golden context creation, GR init.
|
||||||
|
* + bus - GR init.
|
||||||
|
* + CTXSW firmware - GR init.
|
||||||
|
* + XBAR - GR init.
|
||||||
|
* + HSHUB - GR init.
|
||||||
|
*
|
||||||
|
* ELCG:
|
||||||
|
* + Graphics - GR init.
|
||||||
|
* + CE - GR init.
|
||||||
|
*
|
||||||
|
* Static Design
|
||||||
|
* =============
|
||||||
|
*
|
||||||
|
* Clock Gating Initialization
|
||||||
|
* ---------------------------
|
||||||
|
* During nvgpu power on, each component like GR, FIFO, CE, PMU will load the
|
||||||
|
* SLCG and BLCG clock gating values in the registers as specified in the
|
||||||
|
* clock gating register configurations for the corresponding chips.
|
||||||
|
*
|
||||||
|
* SLCG will be enabled by loading the gating registers with prod values.
|
||||||
|
*
|
||||||
|
* BLCG has two level control, first is to load the gating registers and
|
||||||
|
* second is to setup the BLCG mode in the engine gate ctrl registers.
|
||||||
|
* By default engine gate ctrl register will have BLCG_AUTO mode
|
||||||
|
* enabled.
|
||||||
|
*
|
||||||
|
* ELCG will be off (ELCG_RUN) by default. nvgpu programs engine gate_ctrl
|
||||||
|
* registers to enable ELCG (ELCG_AUTO). ELCG will be enabled during GR
|
||||||
|
* initialization.
|
||||||
|
*
|
||||||
|
* External APIs
|
||||||
|
* -------------
|
||||||
|
* + nvgpu_cg_init_gr_load_gating_prod()
|
||||||
|
* + nvgpu_cg_elcg_enable_no_wait()
|
||||||
|
* + nvgpu_cg_elcg_disable_no_wait()
|
||||||
|
* + nvgpu_cg_blcg_fb_ltc_load_enable()
|
||||||
|
* + nvgpu_cg_blcg_fifo_load_enable()
|
||||||
|
* + nvgpu_cg_blcg_pmu_load_enable()
|
||||||
|
* + nvgpu_cg_blcg_ce_load_enable()
|
||||||
|
* + nvgpu_cg_blcg_gr_load_enable()
|
||||||
|
* + nvgpu_cg_slcg_fb_ltc_load_enable()
|
||||||
|
* + nvgpu_cg_slcg_priring_load_enable()
|
||||||
|
* + nvgpu_cg_slcg_fifo_load_enable()
|
||||||
|
* + nvgpu_cg_slcg_pmu_load_enable()
|
||||||
|
* + nvgpu_cg_slcg_ce2_load_enable()
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
#include <nvgpu/types.h>
|
#include <nvgpu/types.h>
|
||||||
#include <nvgpu/bitops.h>
|
#include <nvgpu/bitops.h>
|
||||||
|
|
||||||
/* Parameters for init_elcg_mode/init_blcg_mode */
|
/**
|
||||||
|
* Parameters for init_elcg_mode/init_blcg_mode.
|
||||||
|
*/
|
||||||
|
|
||||||
/* clk always run, i.e. disable elcg */
|
/** Engine level clk always running, i.e. disable elcg. */
|
||||||
#define ELCG_RUN BIT32(0U)
|
#define ELCG_RUN BIT32(0U)
|
||||||
/* clk is stopped */
|
/** Engine level clk is stopped. */
|
||||||
#define ELCG_STOP BIT32(1U)
|
#define ELCG_STOP BIT32(1U)
|
||||||
/* clk will run when non-idle, standard elcg mode */
|
/** Engine level clk will run when non-idle, i.e. standard elcg mode. */
|
||||||
#define ELCG_AUTO BIT32(2U)
|
#define ELCG_AUTO BIT32(2U)
|
||||||
|
|
||||||
/* clk always run, i.e. disable blcg */
|
/** Block level clk always running, i.e. disable blcg. */
|
||||||
#define BLCG_RUN BIT32(0U)
|
#define BLCG_RUN BIT32(0U)
|
||||||
/* clk will run when non-idle, standard blcg mode */
|
/** Block level clk will run when non-idle, i.e. standard blcg mode. */
|
||||||
#define BLCG_AUTO BIT32(1U)
|
#define BLCG_AUTO BIT32(1U)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mode to be configured in engine gate ctrl registers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Engine Level Clock Gating (ELCG) Mode. */
|
||||||
#define ELCG_MODE BIT32(0U)
|
#define ELCG_MODE BIT32(0U)
|
||||||
|
/** Block Level Clock Gating (BLCG) Mode. */
|
||||||
#define BLCG_MODE BIT32(1U)
|
#define BLCG_MODE BIT32(1U)
|
||||||
|
/** Invalid Mode. */
|
||||||
#define INVALID_MODE BIT32(2U)
|
#define INVALID_MODE BIT32(2U)
|
||||||
|
|
||||||
struct gk20a;
|
struct gk20a;
|
||||||
struct nvgpu_fifo;
|
struct nvgpu_fifo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load register configuration for ELCG and BLCG for GR related modules.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capabilities slcg_enabled and blcg_enabled and
|
||||||
|
* programs registers for configuring production gating values for ELCG & BLCG.
|
||||||
|
* Programs ELCG configuration for bus, chiplet, gr, ctxsw_firmware, perf,
|
||||||
|
* xbar, hshub modules and BLCG for bus, gr, ctxsw_firmware, xbar and hshub.
|
||||||
|
*/
|
||||||
void nvgpu_cg_init_gr_load_gating_prod(struct gk20a *g);
|
void nvgpu_cg_init_gr_load_gating_prod(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable ELCG for engines without waiting for GR init to complete.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability elcg_enabled and programs the
|
||||||
|
* engine gate_ctrl registers with ELCG_AUTO mode configuration.
|
||||||
|
*/
|
||||||
void nvgpu_cg_elcg_enable_no_wait(struct gk20a *g);
|
void nvgpu_cg_elcg_enable_no_wait(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disable ELCG for engines without waiting for GR init to complete.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability elcg_enabled and programs the
|
||||||
|
* engine gate_ctrl registers with ELCG_RUN mode configuration.
|
||||||
|
*/
|
||||||
void nvgpu_cg_elcg_disable_no_wait(struct gk20a *g);
|
void nvgpu_cg_elcg_disable_no_wait(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load register configuration for BLCG for FB and LTC.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability blcg_enabled and programs registers
|
||||||
|
* for configuring production gating values for BLCG for FB and LTC.
|
||||||
|
*/
|
||||||
void nvgpu_cg_blcg_fb_ltc_load_enable(struct gk20a *g);
|
void nvgpu_cg_blcg_fb_ltc_load_enable(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load register configuration for BLCG for FIFO.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability blcg_enabled and programs registers
|
||||||
|
* for configuring production gating values for BLCG for FIFO.
|
||||||
|
*/
|
||||||
void nvgpu_cg_blcg_fifo_load_enable(struct gk20a *g);
|
void nvgpu_cg_blcg_fifo_load_enable(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load register configuration for BLCG for PMU.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability blcg_enabled and programs registers
|
||||||
|
* for configuring production gating values for BLCG for PMU.
|
||||||
|
*/
|
||||||
void nvgpu_cg_blcg_pmu_load_enable(struct gk20a *g);
|
void nvgpu_cg_blcg_pmu_load_enable(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load register configuration for BLCG for CE.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability blcg_enabled and programs registers
|
||||||
|
* for configuring production gating values for BLCG for CE.
|
||||||
|
*/
|
||||||
void nvgpu_cg_blcg_ce_load_enable(struct gk20a *g);
|
void nvgpu_cg_blcg_ce_load_enable(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load register configuration for BLCG for GR.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability blcg_enabled and programs registers
|
||||||
|
* for configuring production gating values for BLCG for GR.
|
||||||
|
*/
|
||||||
void nvgpu_cg_blcg_gr_load_enable(struct gk20a *g);
|
void nvgpu_cg_blcg_gr_load_enable(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load register configuration for SLCG for FB and LTC.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability slcg_enabled and programs registers
|
||||||
|
* for configuring production gating values for SLCG for FB and LTC.
|
||||||
|
*/
|
||||||
void nvgpu_cg_slcg_fb_ltc_load_enable(struct gk20a *g);
|
void nvgpu_cg_slcg_fb_ltc_load_enable(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load register configuration for SLCG for PRIV RING.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability slcg_enabled and programs registers
|
||||||
|
* for configuring production gating values for SLCG for PRIV RING.
|
||||||
|
*/
|
||||||
void nvgpu_cg_slcg_priring_load_enable(struct gk20a *g);
|
void nvgpu_cg_slcg_priring_load_enable(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load register configuration for SLCG for FIFO.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability slcg_enabled and programs registers
|
||||||
|
* for configuring production gating values for SLCG for FIFO.
|
||||||
|
*/
|
||||||
void nvgpu_cg_slcg_fifo_load_enable(struct gk20a *g);
|
void nvgpu_cg_slcg_fifo_load_enable(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load register configuration for SLCG for PMU.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability slcg_enabled and programs registers
|
||||||
|
* for configuring production gating values for SLCG for PMU.
|
||||||
|
*/
|
||||||
void nvgpu_cg_slcg_pmu_load_enable(struct gk20a *g);
|
void nvgpu_cg_slcg_pmu_load_enable(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Load register configuration for SLCG for CE2.
|
||||||
|
*
|
||||||
|
* @param g[in] The GPU driver struct.
|
||||||
|
*
|
||||||
|
* Checks the platform software capability slcg_enabled and programs registers
|
||||||
|
* for configuring production gating values for SLCG for CE2.
|
||||||
|
*/
|
||||||
void nvgpu_cg_slcg_ce2_load_enable(struct gk20a *g);
|
void nvgpu_cg_slcg_ce2_load_enable(struct gk20a *g);
|
||||||
|
|
||||||
#ifdef CONFIG_NVGPU_NON_FUSA
|
#ifdef CONFIG_NVGPU_NON_FUSA
|
||||||
|
|||||||
Reference in New Issue
Block a user