coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
clock.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <soc/addressmap.h>
4 #include <types.h>
5 #include <soc/clock_common.h>
6 
7 #ifndef __SOC_QUALCOMM_SC7180_CLOCK_H__
8 #define __SOC_QUALCOMM_SC7180_CLOCK_H__
9 
10 #define SRC_XO_HZ (19200 * KHz)
11 #define GPLL0_EVEN_HZ (300 * MHz)
12 #define GPLL0_MAIN_HZ (600 * MHz)
13 
14 #define QUPV3_WRAP0_CLK_ENA_S(idx) (10 + idx)
15 #define QUPV3_WRAP1_CLK_ENA_S(idx) (22 + idx)
16 
26 };
27 
32 };
33 
34 /* CPU PLL */
35 #define L_VAL_1516P8MHz 0x4F
36 #define L_VAL_1209P6MHz 0x3F
37 
38 #define AOP_RESET_SHFT 0
39 #define SCALE_FREQ_SHFT 11
40 
41 struct sc7180_gpll {
43  u32 l;
51  u8 _res[0x1000 - 0x24];
52 };
53 
54 struct sc7180_gcc {
55  struct sc7180_gpll gpll0;
56  u8 _res0[0xf000 - 0x1000];
58  u8 _res1[0x17000 - 0xf004];
66  u8 _res2[0x17030 - 0x17020];
67  struct qupv3_clock qup_wrap0_s[6];
68  u8 _res3[0x18000 - 0x17750];
74  struct qupv3_clock qup_wrap1_s[6];
75  u8 _res4[0x18994 - 0x18734];
77  u8 _res5[0x26000 - 0x18998];
79  u8 _res6[0x4b000 - 0x26004];
83  struct clock_rcg qspi_core;
84  u8 _res7[0x50000 - 0x4b014];
91  u8 _res8[0x52008 - 0x50018];
93  u8 _res9[0x1000000 - 0x5200c];
94 };
95 check_member(sc7180_gcc, usb30_prim_bcr, 0xf000);
96 check_member(sc7180_gcc, qup_wrap0_bcr, 0x17000);
97 check_member(sc7180_gcc, qup_wrap1_bcr, 0x18000);
98 check_member(sc7180_gcc, qup_wrap1_core_cdivr, 0x18994);
99 check_member(sc7180_gcc, qusb2phy_prim_bcr, 0x26000);
100 check_member(sc7180_gcc, usb3phy_phy_prim_bcr, 0x50004);
101 check_member(sc7180_gcc, usb3_phy_prim_bcr, 0x50000);
102 check_member(sc7180_gcc, apcs_clk_br_en1, 0x52008);
103 
105  u8 _res0[0x2004];
107  u8 _res1[0x2028 - 0x2008];
110  u8 _res2[0x2038 - 0x2030];
112  u8 _res3[0x2098 - 0x203C];
113  struct clock_rcg_mnd pclk0;
114  u8 _res4[0x2110 - 0x20AC];
115  struct clock_rcg_mnd byte0;
116  u8 _res5[0x2148 - 0x2124];
117  struct clock_rcg_mnd esc0;
118  u8 _res6[0x10000 - 0x215C];
119 };
120 check_member(sc7180_disp_cc, byte0_cbcr, 0x2028);
121 check_member(sc7180_disp_cc, esc0_cbcr, 0x2038);
122 
129 };
130 
131 enum clk_qup {
144 };
145 
158  u8 _res0[0x38 - 0x2c];
160 };
161 
163  struct sc7180_apss_pll pll;
164  u8 _res0[0x88 - 0x40];
166 };
167 
170  K_I_SHFT = 4,
171  K_P_SHFT = 7,
174 };
175 
179  RES_SHFT = 6,
180 };
181 
185 };
186 
187 static struct sc7180_gcc *const gcc = (void *)GCC_BASE;
188 static struct sc7180_apss_clock *const apss_silver = (void *)SILVER_PLL_BASE;
189 static struct sc7180_apss_clock *const apss_l3 = (void *)L3_PLL_BASE;
190 static struct sc7180_disp_cc *const mdss = (void *)DISP_CC_BASE;
191 
192 void clock_init(void);
193 void clock_reset_aop(void);
196 void clock_enable_qup(int qup);
197 void clock_configure_dfsr(int qup);
198 int mdss_clock_configure(enum mdss_clock clk_type, uint32_t source,
199  uint32_t divider, uint32_t m, uint32_t n, uint32_t d);
200 int mdss_clock_enable(enum mdss_clock clk_type);
201 
202 static struct aoss *const aoss = (void *)AOSS_CC_BASE;
203 #define clock_reset_aop() \
204  clock_reset_subsystem(&aoss->aoss_cc_apcs_misc, AOP_RESET_SHFT)
205 
206 #endif // __SOC_QUALCOMM_SC7180_CLOCK_H__
void clock_init(void)
Definition: clock.c:539
#define GCC_BASE
Definition: addressmap.h:10
int clock_configure_qspi(uint32_t hz)
Definition: clock.c:117
#define DISP_CC_BASE
Definition: addressmap.h:14
#define AOSS_CC_BASE
Definition: addressmap.h:6
#define SILVER_PLL_BASE
Definition: addressmap.h:12
#define L3_PLL_BASE
Definition: addressmap.h:13
clk_qup
Definition: clock.h:131
@ QUP_WRAP0_S2
Definition: clock.h:134
@ QUP_WRAP1_S2
Definition: clock.h:140
@ QUP_WRAP1_S3
Definition: clock.h:141
@ QUP_WRAP0_S4
Definition: clock.h:136
@ QUP_WRAP1_S1
Definition: clock.h:139
@ QUP_WRAP0_S3
Definition: clock.h:135
@ QUP_WRAP0_S0
Definition: clock.h:132
@ QUP_WRAP1_S4
Definition: clock.h:142
@ QUP_WRAP1_S5
Definition: clock.h:143
@ QUP_WRAP1_S0
Definition: clock.h:138
@ QUP_WRAP0_S5
Definition: clock.h:137
@ QUP_WRAP0_S1
Definition: clock.h:133
apss_gfmux
Definition: clock.h:182
@ APCS_SRC_EARLY
Definition: clock.h:184
@ GFMUX_SRC_SEL_BMSK
Definition: clock.h:183
pll_config_ctl_lo
Definition: clock.h:168
@ REF_CONT_SHFT
Definition: clock.h:173
@ K_P_SHFT
Definition: clock.h:171
@ CTUNE_SHFT
Definition: clock.h:169
@ PFA_MSB_SHFT
Definition: clock.h:172
@ K_I_SHFT
Definition: clock.h:170
static struct sc7180_apss_clock *const apss_silver
Definition: clock.h:188
int mdss_clock_configure(enum mdss_clock clk_type, uint32_t source, uint32_t divider, uint32_t m, uint32_t n, uint32_t d)
Definition: clock.c:191
static struct sc7180_apss_clock *const apss_l3
Definition: clock.h:189
mdss_clock
Definition: clock.h:123
@ MDSS_CLK_ESC0
Definition: clock.h:124
@ MDSS_CLK_COUNT
Definition: clock.h:128
@ MDSS_CLK_BYTE0
Definition: clock.h:126
@ MDSS_CLK_BYTE0_INTF
Definition: clock.h:127
@ MDSS_CLK_PCLK0
Definition: clock.h:125
int mdss_clock_enable(enum mdss_clock clk_type)
Definition: clock.c:220
clk_pll_src
Definition: clock.h:28
@ SRC_GPLL0_MAIN_600MHZ
Definition: clock.h:30
@ SRC_GPLL0_EVEN_300MHZ
Definition: clock.h:31
@ SRC_XO_19_2MHZ
Definition: clock.h:29
static struct sc7180_gcc *const gcc
Definition: clock.h:187
static struct sc7180_disp_cc *const mdss
Definition: clock.h:190
#define clock_reset_aop()
Definition: clock.h:203
void clock_configure_qup(int qup, uint32_t hz)
void clock_enable_qup(int qup)
Definition: clock.c:132
apcs_branch_en_vote
Definition: clock.h:17
@ QUPV3_WRAP_1_S_AHB_CLK_ENA
Definition: clock.h:25
@ QUPV3_WRAP_1_M_AHB_CLK_ENA
Definition: clock.h:24
@ QUPV3_WRAP_0_S_AHB_CLK_ENA
Definition: clock.h:19
@ QUPV3_WRAP0_CORE_2X_CLK_ENA
Definition: clock.h:21
@ QUPV3_WRAP1_CORE_2X_CLK_ENA
Definition: clock.h:22
@ QUPV3_WRAP1_CORE_CLK_ENA
Definition: clock.h:23
@ QUPV3_WRAP_0_M_AHB_CLK_ENA
Definition: clock.h:18
@ QUPV3_WRAP0_CORE_CLK_ENA
Definition: clock.h:20
check_member(sc7180_gcc, usb30_prim_bcr, 0xf000)
pll_config_ctl_hi
Definition: clock.h:176
@ CUR_ADJ_SHFT
Definition: clock.h:177
@ RES_SHFT
Definition: clock.h:179
@ DMET_SHFT
Definition: clock.h:178
void clock_configure_dfsr(int qup)
Definition: clock.c:126
unsigned int uint32_t
Definition: stdint.h:14
uint32_t u32
Definition: stdint.h:51
uint8_t u8
Definition: stdint.h:45
Definition: pll_common.h:32
u8 _res0[0x88 - 0x40]
Definition: clock.h:164
u32 test_ctl_lo
Definition: clock.h:154
u32 test_ctl_u1
Definition: clock.h:156
u32 config_ctl_lo
Definition: clock.h:151
u32 user_ctl
Definition: clock.h:150
u32 config_ctl_hi
Definition: clock.h:152
u32 test_ctl_hi
Definition: clock.h:155
u8 _res0[0x38 - 0x2c]
Definition: clock.h:158
u32 config_ctl_u1
Definition: clock.h:153
u8 _res6[0x10000 - 0x215C]
Definition: clock.h:118
u8 _res1[0x2028 - 0x2008]
Definition: clock.h:107
u8 _res5[0x2148 - 0x2124]
Definition: clock.h:116
struct clock_rcg_mnd byte0
Definition: clock.h:115
u8 _res0[0x2004]
Definition: clock.h:105
u8 _res2[0x2038 - 0x2030]
Definition: clock.h:110
u8 _res3[0x2098 - 0x203C]
Definition: clock.h:112
u32 byte0_cbcr
Definition: clock.h:108
struct clock_rcg_mnd pclk0
Definition: clock.h:113
u8 _res4[0x2110 - 0x20AC]
Definition: clock.h:114
u32 esc0_cbcr
Definition: clock.h:111
struct clock_rcg_mnd esc0
Definition: clock.h:117
u32 pclk0_cbcr
Definition: clock.h:106
u32 byte0_intf_cbcr
Definition: clock.h:109
u32 qspi_bcr
Definition: clock.h:80
u32 usb3_phy_prim_bcr
Definition: clock.h:85
u32 qup_wrap1_core_cdivr
Definition: clock.h:76
u32 usb3_dp_phy_sec_bcr
Definition: clock.h:90
u32 qup_wrap0_core_cbcr
Definition: clock.h:62
u32 usb3_dp_phy_prim_bcr
Definition: clock.h:87
u32 usb3phy_phy_sec_bcr
Definition: clock.h:89
struct qupv3_clock qup_wrap0_s[6]
Definition: clock.h:67
u32 usb30_prim_bcr
Definition: clock.h:57
u8 _res3[0x18000 - 0x17750]
Definition: clock.h:68
u8 _res5[0x26000 - 0x18998]
Definition: clock.h:77
u8 _res8[0x52008 - 0x50018]
Definition: clock.h:91
u8 _res4[0x18994 - 0x18734]
Definition: clock.h:75
struct sc7180_gpll gpll0
Definition: clock.h:55
u32 qup_wrap0_bcr
Definition: clock.h:59
u32 qspi_core_cbcr
Definition: clock.h:82
u32 usb3phy_phy_prim_bcr
Definition: clock.h:86
struct qupv3_clock qup_wrap1_s[6]
Definition: clock.h:74
u32 qup_wrap0_core_2x_cbcr
Definition: clock.h:64
u32 qup_wrap0_core_cdivr
Definition: clock.h:63
u32 qup_wrap1_m_ahb_cbcr
Definition: clock.h:72
u32 usb3_phy_sec_bcr
Definition: clock.h:88
u32 qup_wrap0_s_ahb_cbcr
Definition: clock.h:61
u8 _res6[0x4b000 - 0x26004]
Definition: clock.h:79
u32 qup_wrap1_core_2x_cbcr
Definition: clock.h:70
u32 apcs_clk_br_en1
Definition: clock.h:92
u32 qspi_cnoc_ahb_cbcr
Definition: clock.h:81
u32 qup_wrap1_s_ahb_cbcr
Definition: clock.h:73
u32 qusb2phy_prim_bcr
Definition: clock.h:78
u32 qup_wrap1_core_cbcr
Definition: clock.h:71
struct clock_rcg qspi_core
Definition: clock.h:83
u8 _res9[0x1000000 - 0x5200c]
Definition: clock.h:93
u32 qup_wrap0_m_ahb_cbcr
Definition: clock.h:60
u32 qup_wrap1_bcr
Definition: clock.h:69
u8 _res1[0x17000 - 0xf004]
Definition: clock.h:58
u8 _res2[0x17030 - 0x17020]
Definition: clock.h:66
u8 _res0[0xf000 - 0x1000]
Definition: clock.h:56
struct clock_rcg qup_wrap0_core_2x
Definition: clock.h:65
u8 _res7[0x50000 - 0x4b014]
Definition: clock.h:84
u32 config_ctl
Definition: clock.h:47
u32 test_ctl_u
Definition: clock.h:50
u32 l
Definition: clock.h:43
u32 config_ctl_u
Definition: clock.h:48
u32 cal_l
Definition: clock.h:44
u8 _res[0x1000 - 0x24]
Definition: clock.h:51
u32 user_ctl_u
Definition: clock.h:46
u32 mode
Definition: clock.h:42
u32 user_ctl
Definition: clock.h:45
u32 test_ctl
Definition: clock.h:49
#define m(clkreg, src_bits, pmcreg, dst_bits)