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:
Abdul Salam
2020-04-29 17:33:15 +05:30
committed by Alex Waterman
parent f0896f94e1
commit 88d3640bc5
16 changed files with 225 additions and 217 deletions

View File

@@ -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 */

View File

@@ -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);