mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
gpu: nvgpu: Refacotor clk_domain Unit
As a part of refactoring this patch does the following *Move local struct to unit specific header file *Move nvgpu_pmu_clk_domain_freq_to_volt from clk.c to clk_domain.c *Move PMU specific struct to ucode_clk_inf.h *Merge content from nvgpu/clk.h to pmu/clk/clk.h *Update yaml file This will help to have arch consistency across all units. Change-Id: Ied5c6ee637e7fd5bbdee3f5bc3f6cf216454428a Signed-off-by: Abdul Salam <absalam@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2333366 Reviewed-by: automaticguardword <automaticguardword@nvidia.com> Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com> Reviewed-by: Mahantesh Kumbar <mkumbar@nvidia.com> Reviewed-by: Vaibhav Kachore <vkachore@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
Alex Waterman
parent
f0896f94e1
commit
88d3640bc5
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef NVGPU_INCLUDE_CLK_H
|
||||
#define NVGPU_INCLUDE_CLK_H
|
||||
|
||||
#define CLK_NAME_MAX 24
|
||||
#define CLK_MAX_CNTRL_REGISTERS 2
|
||||
|
||||
struct namemap_cfg {
|
||||
u32 namemap;
|
||||
u32 is_enable; /* Namemap enabled */
|
||||
u32 is_counter; /* Using cntr */
|
||||
struct gk20a *g;
|
||||
struct {
|
||||
u32 reg_ctrl_addr;
|
||||
u32 reg_ctrl_idx;
|
||||
u32 reg_cntr_addr[CLK_MAX_CNTRL_REGISTERS];
|
||||
} cntr;
|
||||
u32 scale;
|
||||
char name[CLK_NAME_MAX];
|
||||
};
|
||||
|
||||
#endif /* NVGPU_INCLUDE_CLK_H */
|
||||
@@ -33,51 +33,49 @@
|
||||
/*!
|
||||
* Valid global VIN ID values
|
||||
*/
|
||||
#define CTRL_CLK_VIN_ID_SYS 0x00000000U
|
||||
#define CTRL_CLK_VIN_ID_LTC 0x00000001U
|
||||
#define CTRL_CLK_VIN_ID_XBAR 0x00000002U
|
||||
#define CTRL_CLK_VIN_ID_GPC0 0x00000003U
|
||||
#define CTRL_CLK_VIN_ID_GPC1 0x00000004U
|
||||
#define CTRL_CLK_VIN_ID_GPC2 0x00000005U
|
||||
#define CTRL_CLK_VIN_ID_GPC3 0x00000006U
|
||||
#define CTRL_CLK_VIN_ID_GPC4 0x00000007U
|
||||
#define CTRL_CLK_VIN_ID_GPC5 0x00000008U
|
||||
#define CTRL_CLK_VIN_ID_GPCS 0x00000009U
|
||||
#define CTRL_CLK_VIN_ID_SRAM 0x0000000AU
|
||||
#define CTRL_CLK_VIN_ID_UNDEFINED 0x000000FFU
|
||||
#define CTRL_CLK_VIN_ID_SYS 0x00000000U
|
||||
#define CTRL_CLK_VIN_ID_LTC 0x00000001U
|
||||
#define CTRL_CLK_VIN_ID_XBAR 0x00000002U
|
||||
#define CTRL_CLK_VIN_ID_GPC0 0x00000003U
|
||||
#define CTRL_CLK_VIN_ID_GPC1 0x00000004U
|
||||
#define CTRL_CLK_VIN_ID_GPC2 0x00000005U
|
||||
#define CTRL_CLK_VIN_ID_GPC3 0x00000006U
|
||||
#define CTRL_CLK_VIN_ID_GPC4 0x00000007U
|
||||
#define CTRL_CLK_VIN_ID_GPC5 0x00000008U
|
||||
#define CTRL_CLK_VIN_ID_GPCS 0x00000009U
|
||||
#define CTRL_CLK_VIN_ID_SRAM 0x0000000AU
|
||||
#define CTRL_CLK_VIN_ID_UNDEFINED 0x000000FFU
|
||||
|
||||
#define CTRL_CLK_VIN_TYPE_DISABLED 0x00000000U
|
||||
#define CTRL_CLK_VIN_TYPE_V20 0x00000002U
|
||||
#define CTRL_CLK_VIN_TYPE_DISABLED 0x00000000U
|
||||
#define CTRL_CLK_VIN_TYPE_V20 0x00000002U
|
||||
|
||||
/* valid clock domain values */
|
||||
#define CTRL_CLK_DOMAIN_MCLK (0x00000010U)
|
||||
#define CTRL_CLK_DOMAIN_HOSTCLK (0x00000020U)
|
||||
#define CTRL_CLK_DOMAIN_DISPCLK (0x00000040U)
|
||||
#define CTRL_CLK_DOMAIN_GPC2CLK (0x00010000U)
|
||||
#define CTRL_CLK_DOMAIN_XBAR2CLK (0x00040000U)
|
||||
#define CTRL_CLK_DOMAIN_SYS2CLK (0x00800000U)
|
||||
#define CTRL_CLK_DOMAIN_HUB2CLK (0x01000000U)
|
||||
#define CTRL_CLK_DOMAIN_UTILSCLK (0x00040000U)
|
||||
#define CTRL_CLK_DOMAIN_PWRCLK (0x00080000U)
|
||||
#define CTRL_CLK_DOMAIN_NVDCLK (0x00100000U)
|
||||
#define CTRL_CLK_DOMAIN_PCIEGENCLK (0x00200000U)
|
||||
#define CTRL_CLK_DOMAIN_XCLK (0x04000000U)
|
||||
#define CTRL_CLK_DOMAIN_NVL_COMMON (0x08000000U)
|
||||
#define CTRL_CLK_DOMAIN_PEX_REFCLK (0x10000000U)
|
||||
|
||||
#define CTRL_CLK_DOMAIN_GPCCLK (0x00000001U)
|
||||
#define CTRL_CLK_DOMAIN_XBARCLK (0x00000002U)
|
||||
#define CTRL_CLK_DOMAIN_SYSCLK (0x00000004U)
|
||||
#define CTRL_CLK_DOMAIN_HUBCLK (0x00000008U)
|
||||
#define CTRL_CLK_DOMAIN_MCLK 0x00000010U
|
||||
#define CTRL_CLK_DOMAIN_HOSTCLK 0x00000020U
|
||||
#define CTRL_CLK_DOMAIN_DISPCLK 0x00000040U
|
||||
#define CTRL_CLK_DOMAIN_GPC2CLK 0x00010000U
|
||||
#define CTRL_CLK_DOMAIN_XBAR2CLK 0x00040000U
|
||||
#define CTRL_CLK_DOMAIN_SYS2CLK 0x00800000U
|
||||
#define CTRL_CLK_DOMAIN_HUB2CLK 0x01000000U
|
||||
#define CTRL_CLK_DOMAIN_UTILSCLK 0x00040000U
|
||||
#define CTRL_CLK_DOMAIN_PWRCLK 0x00080000U
|
||||
#define CTRL_CLK_DOMAIN_NVDCLK 0x00100000U
|
||||
#define CTRL_CLK_DOMAIN_PCIEGENCLK 0x00200000U
|
||||
#define CTRL_CLK_DOMAIN_XCLK 0x04000000U
|
||||
#define CTRL_CLK_DOMAIN_NVL_COMMON 0x08000000U
|
||||
#define CTRL_CLK_DOMAIN_PEX_REFCLK 0x10000000U
|
||||
#define CTRL_CLK_DOMAIN_GPCCLK 0x00000001U
|
||||
#define CTRL_CLK_DOMAIN_XBARCLK 0x00000002U
|
||||
#define CTRL_CLK_DOMAIN_SYSCLK 0x00000004U
|
||||
#define CTRL_CLK_DOMAIN_HUBCLK 0x00000008U
|
||||
|
||||
|
||||
#define CTRL_CLK_FLL_REGIME_ID_INVALID ((u8)0x00000000)
|
||||
#define CTRL_CLK_FLL_REGIME_ID_FFR ((u8)0x00000001)
|
||||
#define CTRL_CLK_FLL_REGIME_ID_FR ((u8)0x00000002)
|
||||
#define CTRL_CLK_FLL_REGIME_ID_INVALID ((u8)0x00000000)
|
||||
#define CTRL_CLK_FLL_REGIME_ID_FFR ((u8)0x00000001)
|
||||
#define CTRL_CLK_FLL_REGIME_ID_FR ((u8)0x00000002)
|
||||
|
||||
#define CTRL_CLK_CLK_DOMAIN_CLIENT_MAX_DOMAINS 16
|
||||
#define CLK_CLOCK_MON_DOMAIN_COUNT 0x32U
|
||||
#define CTRL_CLK_CLK_DELTA_MAX_VOLT_RAILS 4U
|
||||
#define CTRL_CLK_CLK_DOMAIN_CLIENT_MAX_DOMAINS 16
|
||||
#define CTRL_CLK_CLK_DELTA_MAX_VOLT_RAILS 4U
|
||||
/*
|
||||
* Try to get gpc2clk, mclk, sys2clk, xbar2clk work for Pascal
|
||||
*
|
||||
@@ -89,42 +87,43 @@
|
||||
* xbar2clk is 19 in Pascal and 14 in Volta
|
||||
* Changing for Pascal would break pwrclk of Volta
|
||||
*/
|
||||
#define CLKWHICH_GPCCLK 1U
|
||||
#define CLKWHICH_XBARCLK 2U
|
||||
#define CLKWHICH_SYSCLK 3U
|
||||
#define CLKWHICH_HUBCLK 4U
|
||||
#define CLKWHICH_MCLK 5U
|
||||
#define CLKWHICH_HOSTCLK 6U
|
||||
#define CLKWHICH_DISPCLK 7U
|
||||
#define CLKWHICH_XCLK 12U
|
||||
#define CLKWHICH_XBAR2CLK 14U
|
||||
#define CLKWHICH_SYS2CLK 15U
|
||||
#define CLKWHICH_HUB2CLK 16U
|
||||
#define CLKWHICH_GPC2CLK 17U
|
||||
#define CLKWHICH_PWRCLK 19U
|
||||
#define CLKWHICH_NVDCLK 20U
|
||||
#define CLKWHICH_PCIEGENCLK 26U
|
||||
#define CLKWHICH_GPCCLK 1U
|
||||
#define CLKWHICH_XBARCLK 2U
|
||||
#define CLKWHICH_SYSCLK 3U
|
||||
#define CLKWHICH_HUBCLK 4U
|
||||
#define CLKWHICH_MCLK 5U
|
||||
#define CLKWHICH_HOSTCLK 6U
|
||||
#define CLKWHICH_DISPCLK 7U
|
||||
#define CLKWHICH_XCLK 12U
|
||||
#define CLKWHICH_XBAR2CLK 14U
|
||||
#define CLKWHICH_SYS2CLK 15U
|
||||
#define CLKWHICH_HUB2CLK 16U
|
||||
#define CLKWHICH_GPC2CLK 17U
|
||||
#define CLKWHICH_PWRCLK 19U
|
||||
#define CLKWHICH_NVDCLK 20U
|
||||
#define CLKWHICH_PCIEGENCLK 26U
|
||||
|
||||
|
||||
/*!
|
||||
* Mask of all GPC VIN IDs supported by RM
|
||||
*/
|
||||
#define CTRL_CLK_LUT_NUM_ENTRIES_MAX (128U)
|
||||
#define CTRL_CLK_LUT_NUM_ENTRIES_GV10x (128U)
|
||||
#define CTRL_CLK_LUT_NUM_ENTRIES_GP10x (100U)
|
||||
#define CTRL_CLK_VIN_STEP_SIZE_UV (6250U)
|
||||
#define CTRL_CLK_LUT_MIN_VOLTAGE_UV (450000U)
|
||||
#define CTRL_CLK_FLL_TYPE_DISABLED 0U
|
||||
#define CTRL_CLK_LUT_NUM_ENTRIES_MAX 128U
|
||||
#define CTRL_CLK_LUT_NUM_ENTRIES_GV10x 128U
|
||||
#define CTRL_CLK_LUT_NUM_ENTRIES_GP10x 100U
|
||||
#define CTRL_CLK_VIN_STEP_SIZE_UV 6250U
|
||||
#define CTRL_CLK_LUT_MIN_VOLTAGE_UV 450000U
|
||||
#define CTRL_CLK_FLL_TYPE_DISABLED 0U
|
||||
|
||||
#define CTRL_CLK_FLL_LUT_VSELECT_LOGIC (0x00000000U)
|
||||
#define CTRL_CLK_FLL_LUT_VSELECT_MIN (0x00000001U)
|
||||
#define CTRL_CLK_FLL_LUT_VSELECT_SRAM (0x00000002U)
|
||||
#define CTRL_CLK_FLL_LUT_VSELECT_LOGIC 0x00000000U
|
||||
#define CTRL_CLK_FLL_LUT_VSELECT_MIN 0x00000001U
|
||||
#define CTRL_CLK_FLL_LUT_VSELECT_SRAM 0x00000002U
|
||||
|
||||
#define CTRL_CLK_VIN_SW_OVERRIDE_VIN_USE_HW_REQ (0x00000000U)
|
||||
#define CTRL_CLK_VIN_SW_OVERRIDE_VIN_USE_MIN (0x00000001U)
|
||||
#define CTRL_CLK_VIN_SW_OVERRIDE_VIN_USE_SW_REQ (0x00000003U)
|
||||
#define CTRL_CLK_VIN_SW_OVERRIDE_VIN_USE_HW_REQ 0x00000000U
|
||||
#define CTRL_CLK_VIN_SW_OVERRIDE_VIN_USE_MIN 0x00000001U
|
||||
#define CTRL_CLK_VIN_SW_OVERRIDE_VIN_USE_SW_REQ 0x00000003U
|
||||
#define CLK_CLOCK_MON_DOMAIN_COUNT 0x32U
|
||||
#define FREQ_STEP_SIZE_MHZ 15U
|
||||
|
||||
#define FREQ_STEP_SIZE_MHZ 15U
|
||||
|
||||
struct gk20a;
|
||||
struct clk_avfs_fll_objs;
|
||||
@@ -137,6 +136,21 @@ struct nvgpu_pmu_perf_change_input_clk_info;
|
||||
struct nvgpu_vin_device;
|
||||
struct nvgpu_clk_domain;
|
||||
struct nvgpu_clk_arb;
|
||||
struct nvgpu_clk_pmupstate;
|
||||
|
||||
|
||||
struct clk_domain_mon_status {
|
||||
u32 clk_api_domain;
|
||||
u32 low_threshold;
|
||||
u32 high_threshold;
|
||||
u32 clk_domain_fault_status;
|
||||
};
|
||||
|
||||
struct clk_domains_mon_status_params {
|
||||
u32 clk_mon_domain_mask;
|
||||
struct clk_domain_mon_status
|
||||
clk_mon_list[CLK_CLOCK_MON_DOMAIN_COUNT];
|
||||
};
|
||||
|
||||
struct ctrl_clk_domain_clk_mon_item {
|
||||
u32 clk_api_domain;
|
||||
@@ -164,61 +178,6 @@ struct ctrl_clk_clk_domain_list {
|
||||
clk_domains[CTRL_BOARDOBJ_MAX_BOARD_OBJECTS];
|
||||
};
|
||||
|
||||
struct clk_domain_mon_status {
|
||||
u32 clk_api_domain;
|
||||
u32 low_threshold;
|
||||
u32 high_threshold;
|
||||
u32 clk_domain_fault_status;
|
||||
};
|
||||
|
||||
struct clk_domains_mon_status_params {
|
||||
u32 clk_mon_domain_mask;
|
||||
struct clk_domain_mon_status
|
||||
clk_mon_list[CLK_CLOCK_MON_DOMAIN_COUNT];
|
||||
};
|
||||
|
||||
struct ctrl_clk_vin_sw_override_list_item {
|
||||
u8 override_mode;
|
||||
u32 voltage_uV;
|
||||
};
|
||||
|
||||
struct ctrl_clk_vin_sw_override_list {
|
||||
struct ctrl_boardobjgrp_mask_e32 volt_rails_mask;
|
||||
struct ctrl_clk_vin_sw_override_list_item
|
||||
volt[4];
|
||||
};
|
||||
|
||||
union ctrl_clk_freq_delta_data {
|
||||
s32 delta_khz;
|
||||
s16 delta_percent;
|
||||
};
|
||||
struct ctrl_clk_freq_delta {
|
||||
u8 type;
|
||||
union ctrl_clk_freq_delta_data data;
|
||||
};
|
||||
|
||||
struct ctrl_clk_clk_delta {
|
||||
struct ctrl_clk_freq_delta freq_delta;
|
||||
int volt_deltauv[CTRL_CLK_CLK_DELTA_MAX_VOLT_RAILS];
|
||||
};
|
||||
|
||||
struct nv_pmu_clk_lut_device_desc {
|
||||
u8 vselect_mode;
|
||||
u16 hysteresis_threshold;
|
||||
};
|
||||
|
||||
|
||||
struct nv_pmu_clk_regime_desc {
|
||||
u8 regime_id;
|
||||
u8 target_regime_id_override;
|
||||
u16 fixed_freq_regime_limit_mhz;
|
||||
};
|
||||
|
||||
struct ctrl_clk_vf_pair {
|
||||
u16 freq_mhz;
|
||||
u32 voltage_uv;
|
||||
};
|
||||
|
||||
struct nvgpu_set_fll_clk {
|
||||
u32 voltuv;
|
||||
u16 gpc2clkmhz;
|
||||
@@ -274,18 +233,6 @@ struct nvgpu_clk_pmupstate {
|
||||
typedef u32 vin_device_state_load(struct gk20a *g,
|
||||
struct nvgpu_clk_pmupstate *clk, struct nvgpu_vin_device *pdev);
|
||||
|
||||
struct nvgpu_vin_device {
|
||||
struct boardobj super;
|
||||
u8 id;
|
||||
u8 volt_domain;
|
||||
u8 volt_domain_vbios;
|
||||
u8 por_override_mode;
|
||||
u8 override_mode;
|
||||
u32 flls_shared_mask;
|
||||
|
||||
vin_device_state_load *state_load;
|
||||
};
|
||||
|
||||
typedef int nvgpu_clkproglink(struct gk20a *g, struct nvgpu_clk_pmupstate *pclk,
|
||||
struct nvgpu_clk_domain *pdomain);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user