File Index
Files and directories
Sign in
FILE

dcn351_clk_mgr.c

File preview with syntax highlighting.

linux-6.19.14/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn351_clk_mgr.c C
  1/*
  2 * Copyright 2024 Advanced Micro Devices, Inc.
  3 *
  4 * Permission is hereby granted, free of charge, to any person obtaining a
  5 * copy of this software and associated documentation files (the "Software"),
  6 * to deal in the Software without restriction, including without limitation
  7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8 * and/or sell copies of the Software, and to permit persons to whom the
  9 * Software is furnished to do so, subject to the following conditions:
 10 *
 11 * The above copyright notice and this permission notice shall be included in
 12 * all copies or substantial portions of the Software.
 13 *
 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
 18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 20 * OTHER DEALINGS IN THE SOFTWARE.
 21 *
 22 * Authors: AMD
 23 *
 24 */
 25
 26#include "core_types.h"
 27#include "dcn35_clk_mgr.h"
 28
 29#define DCN_BASE__INST0_SEG1 0x000000C0
 30#define mmCLK1_CLK_PLL_REQ 0x16E37
 31
 32#define mmCLK1_CLK0_DFS_CNTL 0x16E69
 33#define mmCLK1_CLK1_DFS_CNTL 0x16E6C
 34#define mmCLK1_CLK2_DFS_CNTL 0x16E6F
 35#define mmCLK1_CLK3_DFS_CNTL 0x16E72
 36#define mmCLK1_CLK4_DFS_CNTL 0x16E75
 37#define mmCLK1_CLK5_DFS_CNTL 0x16E78
 38
 39#define mmCLK1_CLK0_CURRENT_CNT 0x16EFC
 40#define mmCLK1_CLK1_CURRENT_CNT 0x16EFD
 41#define mmCLK1_CLK2_CURRENT_CNT 0x16EFE
 42#define mmCLK1_CLK3_CURRENT_CNT 0x16EFF
 43#define mmCLK1_CLK4_CURRENT_CNT 0x16F00
 44#define mmCLK1_CLK5_CURRENT_CNT 0x16F01
 45
 46#define mmCLK1_CLK0_BYPASS_CNTL 0x16E8A
 47#define mmCLK1_CLK1_BYPASS_CNTL 0x16E93
 48#define mmCLK1_CLK2_BYPASS_CNTL 0x16E9C
 49#define mmCLK1_CLK3_BYPASS_CNTL 0x16EA5
 50#define mmCLK1_CLK4_BYPASS_CNTL 0x16EAE
 51#define mmCLK1_CLK5_BYPASS_CNTL 0x16EB7
 52
 53#define mmCLK1_CLK0_DS_CNTL 0x16E83
 54#define mmCLK1_CLK1_DS_CNTL 0x16E8C
 55#define mmCLK1_CLK2_DS_CNTL 0x16E95
 56#define mmCLK1_CLK3_DS_CNTL 0x16E9E
 57#define mmCLK1_CLK4_DS_CNTL 0x16EA7
 58#define mmCLK1_CLK5_DS_CNTL 0x16EB0
 59
 60#define mmCLK1_CLK0_ALLOW_DS 0x16E84
 61#define mmCLK1_CLK1_ALLOW_DS 0x16E8D
 62#define mmCLK1_CLK2_ALLOW_DS 0x16E96
 63#define mmCLK1_CLK3_ALLOW_DS 0x16E9F
 64#define mmCLK1_CLK4_ALLOW_DS 0x16EA8
 65#define mmCLK1_CLK5_ALLOW_DS 0x16EB1
 66
 67#define mmCLK5_spll_field_8 0x1B04B
 68#define mmCLK6_spll_field_8 0x1B24B
 69#define mmDENTIST_DISPCLK_CNTL 0x0124
 70#define regDENTIST_DISPCLK_CNTL 0x0064
 71#define regDENTIST_DISPCLK_CNTL_BASE_IDX 1
 72
 73#define CLK1_CLK_PLL_REQ__FbMult_int__SHIFT 0x0
 74#define CLK1_CLK_PLL_REQ__PllSpineDiv__SHIFT 0xc
 75#define CLK1_CLK_PLL_REQ__FbMult_frac__SHIFT 0x10
 76#define CLK1_CLK_PLL_REQ__FbMult_int_MASK 0x000001FFL
 77#define CLK1_CLK_PLL_REQ__PllSpineDiv_MASK 0x0000F000L
 78#define CLK1_CLK_PLL_REQ__FbMult_frac_MASK 0xFFFF0000L
 79
 80#define CLK1_CLK2_BYPASS_CNTL__CLK2_BYPASS_SEL_MASK 0x00000007L
 81
 82// DENTIST_DISPCLK_CNTL
 83#define DENTIST_DISPCLK_CNTL__DENTIST_DISPCLK_WDIVIDER__SHIFT 0x0
 84#define DENTIST_DISPCLK_CNTL__DENTIST_DISPCLK_RDIVIDER__SHIFT 0x8
 85#define DENTIST_DISPCLK_CNTL__DENTIST_DISPCLK_CHG_DONE__SHIFT 0x13
 86#define DENTIST_DISPCLK_CNTL__DENTIST_DPPCLK_CHG_DONE__SHIFT 0x14
 87#define DENTIST_DISPCLK_CNTL__DENTIST_DPPCLK_WDIVIDER__SHIFT 0x18
 88#define DENTIST_DISPCLK_CNTL__DENTIST_DISPCLK_WDIVIDER_MASK 0x0000007FL
 89#define DENTIST_DISPCLK_CNTL__DENTIST_DISPCLK_RDIVIDER_MASK 0x00007F00L
 90#define DENTIST_DISPCLK_CNTL__DENTIST_DISPCLK_CHG_DONE_MASK 0x00080000L
 91#define DENTIST_DISPCLK_CNTL__DENTIST_DPPCLK_CHG_DONE_MASK 0x00100000L
 92#define DENTIST_DISPCLK_CNTL__DENTIST_DPPCLK_WDIVIDER_MASK 0x7F000000L
 93
 94#define CLK5_spll_field_8__spll_ssc_en_MASK 0x00002000L
 95
 96#define REG(reg) \
 97	(clk_mgr->regs->reg)
 98
 99#define BASE_INNER(seg) DCN_BASE__INST0_SEG ## seg
100
101#define BASE(seg) BASE_INNER(seg)
102
103#define SR(reg_name)\
104		.reg_name = BASE(reg ## reg_name ## _BASE_IDX) +  \
105					reg ## reg_name
106
107#define CLK_SR_DCN35(reg_name)\
108	.reg_name = mm ## reg_name
109
110static const struct clk_mgr_registers clk_mgr_regs_dcn351 = {
111	CLK_REG_LIST_DCN35()
112};
113
114static const struct clk_mgr_shift clk_mgr_shift_dcn351 = {
115	CLK_COMMON_MASK_SH_LIST_DCN32(__SHIFT)
116};
117
118static const struct clk_mgr_mask clk_mgr_mask_dcn351 = {
119	CLK_COMMON_MASK_SH_LIST_DCN32(_MASK)
120};
121
122#define TO_CLK_MGR_DCN35(clk_mgr)\
123	container_of(clk_mgr, struct clk_mgr_dcn35, base)
124
125
126void dcn351_clk_mgr_construct(
127		struct dc_context *ctx,
128		struct clk_mgr_dcn35 *clk_mgr,
129		struct pp_smu_funcs *pp_smu,
130		struct dccg *dccg)
131{
132	/*register offset changed*/
133	clk_mgr->base.regs = &clk_mgr_regs_dcn351;
134	clk_mgr->base.clk_mgr_shift = &clk_mgr_shift_dcn351;
135	clk_mgr->base.clk_mgr_mask = &clk_mgr_mask_dcn351;
136
137	dcn35_clk_mgr_construct(ctx,  clk_mgr, pp_smu, dccg);
138
139}
140
141
~/ Read-only file preview.