@@ -49,6 +49,9 @@ COND_CODE_1(DT_NODE_EXISTS(DT_INST(1, ite_it8xxx2_usbpd)), (2), (1))
49
49
#define SSPI_CLOCK_GATING BIT(1)
50
50
#define AUTO_SSPI_CLOCK_GATING BIT(4)
51
51
52
+ #define CLK_DIV_HIGH_FIELDS (n ) FIELD_PREP(GENMASK(7, 4), n)
53
+ #define CLK_DIV_LOW_FIELDS (n ) FIELD_PREP(GENMASK(3, 0), n)
54
+
52
55
uint32_t chip_get_pll_freq (void )
53
56
{
54
57
uint32_t pllfreq ;
@@ -127,7 +130,7 @@ static const struct pll_config_t pll_configuration[PLL_FREQ_CNT] = {
127
130
* USB div = 0 (PLL / 1 = 48 mhz)
128
131
* UART div = 1 (PLL / 2 = 24 mhz)
129
132
* SMB div = 1 (PLL / 2 = 24 mhz)
130
- * SSPI div = 1 (PLL / 2 = 24 mhz)
133
+ * SSPI div = 0 (PLL / 1 = 48 mhz)
131
134
* EC div = 6 (FND / 6 = 8 mhz)
132
135
* JTAG div = 1 (PLL / 2 = 24 mhz)
133
136
* PWM div = 0 (PLL / 1 = 48 mhz)
@@ -139,7 +142,7 @@ static const struct pll_config_t pll_configuration[PLL_FREQ_CNT] = {
139
142
.div_usb = 0 ,
140
143
.div_uart = 1 ,
141
144
.div_smb = 1 ,
142
- .div_sspi = 1 ,
145
+ .div_sspi = 0 ,
143
146
#ifdef CONFIG_SOC_IT8XXX2_EC_BUS_24MHZ
144
147
.div_ec = 1 ,
145
148
#else
@@ -155,7 +158,7 @@ static const struct pll_config_t pll_configuration[PLL_FREQ_CNT] = {
155
158
* USB div = 1 (PLL / 2 = 48 mhz)
156
159
* UART div = 3 (PLL / 4 = 24 mhz)
157
160
* SMB div = 3 (PLL / 4 = 24 mhz)
158
- * SSPI div = 3 (PLL / 4 = 24 mhz)
161
+ * SSPI div = 1 (PLL / 2 = 48 mhz)
159
162
* EC div = 6 (FND / 6 = 8 mhz)
160
163
* JTAG div = 3 (PLL / 4 = 24 mhz)
161
164
* PWM div = 1 (PLL / 2 = 48 mhz)
@@ -167,7 +170,7 @@ static const struct pll_config_t pll_configuration[PLL_FREQ_CNT] = {
167
170
.div_usb = 1 ,
168
171
.div_uart = 3 ,
169
172
.div_smb = 3 ,
170
- .div_sspi = 3 ,
173
+ .div_sspi = 1 ,
171
174
#ifdef CONFIG_SOC_IT8XXX2_EC_BUS_24MHZ
172
175
.div_ec = 1 ,
173
176
#else
@@ -206,8 +209,20 @@ void __soc_ram_code chip_run_pll_sequence(const struct pll_config_t *pll)
206
209
chip_pll_ctrl (CHIP_PLL_DOZE );
207
210
/* USB and UART */
208
211
IT8XXX2_ECPM_SCDCR1 = (pll -> div_usb << 4 ) | pll -> div_uart ;
209
- /* SSPI and SMB */
210
- IT8XXX2_ECPM_SCDCR2 = (pll -> div_sspi << 4 ) | pll -> div_smb ;
212
+
213
+ #ifdef CONFIG_SOC_IT8XXX2_REG_SET_V1
214
+ /* SMB and SSPI */
215
+ IT8XXX2_ECPM_SCDCR2 = CLK_DIV_HIGH_FIELDS (pll -> div_sspi ) | CLK_DIV_LOW_FIELDS (pll -> div_smb );
216
+ #elif CONFIG_SOC_IT8XXX2_REG_SET_V2
217
+ /* SMB */
218
+ IT8XXX2_ECPM_SCDCR2 = CLK_DIV_LOW_FIELDS (pll -> div_smb );
219
+ /* SSPI */
220
+ IT8XXX2_ECPM_SCDCR8 =
221
+ CLK_DIV_HIGH_FIELDS (pll -> div_sspi ) | CLK_DIV_LOW_FIELDS (pll -> div_sspi );
222
+ #else
223
+ BUILD_ASSERT (false, "unknown sspi and smb clock divisor setting for register set version" );
224
+ #endif /* CONFIG_SOC_IT8XXX2_REG_SET_V1 */
225
+
211
226
/* USBPD and PWM */
212
227
IT8XXX2_ECPM_SCDCR4 = (pll -> div_usbpd << 4 ) | pll -> div_pwm ;
213
228
}
0 commit comments