1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * Copyright (C) 2019 Genesys Logic, Inc.
4 *
5 * Authors: Ben Chuang <ben.chuang@genesyslogic.com.tw>
6 *
7 * Version: v0.9.0 (2019-08-08)
8 */
9
10 #include <linux/bitfield.h>
11 #include <linux/bits.h>
12 #include <linux/pci.h>
13 #include <linux/mmc/mmc.h>
14 #include <linux/delay.h>
15 #include <linux/of.h>
16 #include <linux/iopoll.h>
17 #include "sdhci.h"
18 #include "sdhci-cqhci.h"
19 #include "sdhci-pci.h"
20 #include "cqhci.h"
21 #include "sdhci-uhs2.h"
22
23 /* Genesys Logic extra registers */
24 #define SDHCI_GLI_9750_WT 0x800
25 #define SDHCI_GLI_9750_WT_EN BIT(0)
26 #define GLI_9750_WT_EN_ON 0x1
27 #define GLI_9750_WT_EN_OFF 0x0
28
29 #define SDHCI_GLI_9750_CFG2 0x848
30 #define SDHCI_GLI_9750_CFG2_L1DLY GENMASK(28, 24)
31 #define GLI_9750_CFG2_L1DLY_VALUE 0x1F
32
33 #define SDHCI_GLI_9750_DRIVING 0x860
34 #define SDHCI_GLI_9750_DRIVING_1 GENMASK(11, 0)
35 #define SDHCI_GLI_9750_DRIVING_2 GENMASK(27, 26)
36 #define GLI_9750_DRIVING_1_VALUE 0xFFF
37 #define GLI_9750_DRIVING_2_VALUE 0x3
38 #define SDHCI_GLI_9750_SEL_1 BIT(29)
39 #define SDHCI_GLI_9750_SEL_2 BIT(31)
40 #define SDHCI_GLI_9750_ALL_RST (BIT(24)|BIT(25)|BIT(28)|BIT(30))
41
42 #define SDHCI_GLI_9750_PLL 0x864
43 #define SDHCI_GLI_9750_PLL_LDIV GENMASK(9, 0)
44 #define SDHCI_GLI_9750_PLL_PDIV GENMASK(14, 12)
45 #define SDHCI_GLI_9750_PLL_DIR BIT(15)
46 #define SDHCI_GLI_9750_PLL_TX2_INV BIT(23)
47 #define SDHCI_GLI_9750_PLL_TX2_DLY GENMASK(22, 20)
48 #define GLI_9750_PLL_TX2_INV_VALUE 0x1
49 #define GLI_9750_PLL_TX2_DLY_VALUE 0x0
50 #define SDHCI_GLI_9750_PLLSSC_STEP GENMASK(28, 24)
51 #define SDHCI_GLI_9750_PLLSSC_EN BIT(31)
52
53 #define SDHCI_GLI_9750_PLLSSC 0x86C
54 #define SDHCI_GLI_9750_PLLSSC_PPM GENMASK(31, 16)
55
56 #define SDHCI_GLI_9750_SW_CTRL 0x874
57 #define SDHCI_GLI_9750_SW_CTRL_4 GENMASK(7, 6)
58 #define GLI_9750_SW_CTRL_4_VALUE 0x3
59
60 #define SDHCI_GLI_9750_MISC 0x878
61 #define SDHCI_GLI_9750_MISC_TX1_INV BIT(2)
62 #define SDHCI_GLI_9750_MISC_RX_INV BIT(3)
63 #define SDHCI_GLI_9750_MISC_TX1_DLY GENMASK(6, 4)
64 #define GLI_9750_MISC_TX1_INV_VALUE 0x0
65 #define GLI_9750_MISC_RX_INV_ON 0x1
66 #define GLI_9750_MISC_RX_INV_OFF 0x0
67 #define GLI_9750_MISC_RX_INV_VALUE GLI_9750_MISC_RX_INV_OFF
68 #define GLI_9750_MISC_TX1_DLY_VALUE 0x5
69 #define SDHCI_GLI_9750_MISC_SSC_OFF BIT(26)
70
71 #define SDHCI_GLI_9750_TUNING_CONTROL 0x540
72 #define SDHCI_GLI_9750_TUNING_CONTROL_EN BIT(4)
73 #define GLI_9750_TUNING_CONTROL_EN_ON 0x1
74 #define GLI_9750_TUNING_CONTROL_EN_OFF 0x0
75 #define SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_1 BIT(16)
76 #define SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_2 GENMASK(20, 19)
77 #define GLI_9750_TUNING_CONTROL_GLITCH_1_VALUE 0x1
78 #define GLI_9750_TUNING_CONTROL_GLITCH_2_VALUE 0x2
79
80 #define SDHCI_GLI_9750_TUNING_PARAMETERS 0x544
81 #define SDHCI_GLI_9750_TUNING_PARAMETERS_RX_DLY GENMASK(2, 0)
82 #define GLI_9750_TUNING_PARAMETERS_RX_DLY_VALUE 0x1
83
84 #define SDHCI_GLI_9763E_CTRL_HS400 0x7
85
86 #define SDHCI_GLI_9763E_HS400_ES_REG 0x52C
87 #define SDHCI_GLI_9763E_HS400_ES_BIT BIT(8)
88
89 #define PCIE_GLI_9763E_VHS 0x884
90 #define GLI_9763E_VHS_REV GENMASK(19, 16)
91 #define GLI_9763E_VHS_REV_R 0x0
92 #define GLI_9763E_VHS_REV_M 0x1
93 #define GLI_9763E_VHS_REV_W 0x2
94 #define PCIE_GLI_9763E_MB 0x888
95 #define GLI_9763E_MB_CMDQ_OFF BIT(19)
96 #define GLI_9763E_MB_ERP_ON BIT(7)
97 #define PCIE_GLI_9763E_SCR 0x8E0
98 #define GLI_9763E_SCR_AXI_REQ BIT(9)
99
100 #define PCIE_GLI_9763E_CFG 0x8A0
101 #define GLI_9763E_CFG_LPSN_DIS BIT(12)
102
103 #define PCIE_GLI_9763E_CFG2 0x8A4
104 #define GLI_9763E_CFG2_L1DLY GENMASK(28, 19)
105 #define GLI_9763E_CFG2_L1DLY_MID 0x54
106
107 #define PCIE_GLI_9763E_MMC_CTRL 0x960
108 #define GLI_9763E_HS400_SLOW BIT(3)
109
110 #define PCIE_GLI_9763E_CLKRXDLY 0x934
111 #define GLI_9763E_HS400_RXDLY GENMASK(31, 28)
112 #define GLI_9763E_HS400_RXDLY_5 0x5
113
114 #define SDHCI_GLI_9763E_CQE_BASE_ADDR 0x200
115 #define GLI_9763E_CQE_TRNS_MODE (SDHCI_TRNS_MULTI | \
116 SDHCI_TRNS_BLK_CNT_EN | \
117 SDHCI_TRNS_DMA)
118
119 #define PCI_GLI_9755_WT 0x800
120 #define PCI_GLI_9755_WT_EN BIT(0)
121 #define GLI_9755_WT_EN_ON 0x1
122 #define GLI_9755_WT_EN_OFF 0x0
123
124 #define PCI_GLI_9755_PECONF 0x44
125 #define PCI_GLI_9755_LFCLK GENMASK(14, 12)
126 #define PCI_GLI_9755_DMACLK BIT(29)
127 #define PCI_GLI_9755_INVERT_CD BIT(30)
128 #define PCI_GLI_9755_INVERT_WP BIT(31)
129
130 #define PCI_GLI_9755_CFG2 0x48
131 #define PCI_GLI_9755_CFG2_L1DLY GENMASK(28, 24)
132 #define GLI_9755_CFG2_L1DLY_VALUE 0x1F
133
134 #define PCI_GLI_9755_PLL 0x64
135 #define PCI_GLI_9755_PLL_LDIV GENMASK(9, 0)
136 #define PCI_GLI_9755_PLL_PDIV GENMASK(14, 12)
137 #define PCI_GLI_9755_PLL_DIR BIT(15)
138 #define PCI_GLI_9755_PLLSSC_STEP GENMASK(28, 24)
139 #define PCI_GLI_9755_PLLSSC_EN BIT(31)
140
141 #define PCI_GLI_9755_PLLSSC 0x68
142 #define PCI_GLI_9755_PLLSSC_PPM GENMASK(15, 0)
143 #define PCI_GLI_9755_PLLSSC_RTL BIT(24)
144 #define GLI_9755_PLLSSC_RTL_VALUE 0x1
145 #define PCI_GLI_9755_PLLSSC_TRANS_PASS BIT(27)
146 #define GLI_9755_PLLSSC_TRANS_PASS_VALUE 0x1
147 #define PCI_GLI_9755_PLLSSC_RECV GENMASK(29, 28)
148 #define GLI_9755_PLLSSC_RECV_VALUE 0x0
149 #define PCI_GLI_9755_PLLSSC_TRAN GENMASK(31, 30)
150 #define GLI_9755_PLLSSC_TRAN_VALUE 0x3
151
152 #define PCI_GLI_9755_UHS2_PLL 0x6C
153 #define PCI_GLI_9755_UHS2_PLL_SSC GENMASK(9, 8)
154 #define GLI_9755_UHS2_PLL_SSC_VALUE 0x0
155 #define PCI_GLI_9755_UHS2_PLL_DELAY BIT(18)
156 #define GLI_9755_UHS2_PLL_DELAY_VALUE 0x1
157 #define PCI_GLI_9755_UHS2_PLL_PDRST BIT(27)
158 #define GLI_9755_UHS2_PLL_PDRST_VALUE 0x1
159
160 #define PCI_GLI_9755_SerDes 0x70
161 #define PCI_GLI_9755_UHS2_SERDES_INTR GENMASK(2, 0)
162 #define GLI_9755_UHS2_SERDES_INTR_VALUE 0x3
163 #define PCI_GLI_9755_UHS2_SERDES_ZC1 BIT(3)
164 #define GLI_9755_UHS2_SERDES_ZC1_VALUE 0x0
165 #define PCI_GLI_9755_UHS2_SERDES_ZC2 GENMASK(7, 4)
166 #define GLI_9755_UHS2_SERDES_ZC2_DEFAULT 0xB
167 #define GLI_9755_UHS2_SERDES_ZC2_SANDISK 0x0
168 #define PCI_GLI_9755_SCP_DIS BIT(19)
169 #define PCI_GLI_9755_UHS2_SERDES_TRAN GENMASK(27, 24)
170 #define GLI_9755_UHS2_SERDES_TRAN_VALUE 0xC
171 #define PCI_GLI_9755_UHS2_SERDES_RECV GENMASK(31, 28)
172 #define GLI_9755_UHS2_SERDES_RECV_VALUE 0xF
173
174 #define PCI_GLI_9755_MISC 0x78
175 #define PCI_GLI_9755_MISC_SSC_OFF BIT(26)
176
177 #define SDHCI_GLI_9767_SD_HOST_OPERATION_CTL 0x508
178 #define SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_CMD_CONFLICT_CHECK BIT(0)
179 #define SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE GENMASK(21, 16)
180 #define SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_PLUG_IN_VALUE 0x05
181 #define SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_PLUG_OUT_VALUE 0x3F
182 #define SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE GENMASK(23, 22)
183 #define SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE_1MS 0x2
184 #define SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE_10MS 0x3
185
186 #define SDHCI_GLI_9767_GM_BURST_SIZE 0x510
187 #define SDHCI_GLI_9767_GM_BURST_SIZE_AXI_ALWAYS_SET BIT(8)
188
189 #define PCIE_GLI_9767_VHS 0x884
190 #define GLI_9767_VHS_REV GENMASK(19, 16)
191 #define GLI_9767_VHS_REV_R 0x0
192 #define GLI_9767_VHS_REV_M 0x1
193 #define GLI_9767_VHS_REV_W 0x2
194
195 #define PCIE_GLI_9767_COM_MAILBOX 0x888
196 #define PCIE_GLI_9767_COM_MAILBOX_SSC_EN BIT(1)
197
198 #define PCIE_GLI_9767_CFG 0x8A0
199 #define PCIE_GLI_9767_CFG_LOW_PWR_OFF BIT(12)
200
201 #define PCIE_GLI_9767_COMBO_MUX_CTL 0x8C8
202 #define PCIE_GLI_9767_COMBO_MUX_CTL_RST_EN BIT(6)
203 #define PCIE_GLI_9767_COMBO_MUX_CTL_WAIT_PERST_EN BIT(10)
204
205 #define PCIE_GLI_9767_PWR_MACRO_CTL 0x8D0
206 #define PCIE_GLI_9767_PWR_MACRO_CTL_LOW_VOLTAGE GENMASK(3, 0)
207 #define PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE GENMASK(15, 12)
208 #define PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE_VALUE 0x7
209 #define PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL GENMASK(29, 28)
210 #define PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL_VALUE 0x3
211
212 #define PCIE_GLI_9767_SCR 0x8E0
213 #define PCIE_GLI_9767_SCR_AUTO_AXI_W_BURST BIT(6)
214 #define PCIE_GLI_9767_SCR_AUTO_AXI_R_BURST BIT(7)
215 #define PCIE_GLI_9767_SCR_AXI_REQ BIT(9)
216 #define PCIE_GLI_9767_SCR_CARD_DET_PWR_SAVING_EN BIT(10)
217 #define PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE0 BIT(16)
218 #define PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE1 BIT(17)
219 #define PCIE_GLI_9767_SCR_CORE_PWR_D3_OFF BIT(21)
220 #define PCIE_GLI_9767_SCR_CFG_RST_DATA_LINK_DOWN BIT(30)
221
222 #define PCIE_GLI_9767_RESET_REG 0x8E4
223 #define PCIE_GLI_9767_RESET_REG_SD_HOST_SW_RESET BIT(0)
224
225 #define PCIE_GLI_9767_UHS2_PHY_SET_REG1 0x90C
226 #define PCIE_GLI_9767_UHS2_PHY_SET_REG1_SERDES_INTR GENMASK(31, 29)
227 #define PCIE_GLI_9767_UHS2_PHY_SET_REG1_SERDES_INTR_VALUE 0x3
228
229 #define PCIE_GLI_9767_SDHC_CAP 0x91C
230 #define PCIE_GLI_9767_SDHC_CAP_SDEI_RESULT BIT(5)
231
232 #define PCIE_GLI_9767_SD_PLL_CTL 0x938
233 #define PCIE_GLI_9767_SD_PLL_CTL_PLL_LDIV GENMASK(9, 0)
234 #define PCIE_GLI_9767_SD_PLL_CTL_PLL_PDIV GENMASK(15, 12)
235 #define PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN BIT(16)
236 #define PCIE_GLI_9767_SD_PLL_CTL_SSC_EN BIT(19)
237 #define PCIE_GLI_9767_SD_PLL_CTL_SSC_STEP_SETTING GENMASK(28, 24)
238
239 #define PCIE_GLI_9767_SD_PLL_CTL2 0x93C
240 #define PCIE_GLI_9767_SD_PLL_CTL2_PLLSSC_PPM GENMASK(31, 16)
241
242 #define PCIE_GLI_9767_SD_EXPRESS_CTL 0x940
243 #define PCIE_GLI_9767_SD_EXPRESS_CTL_SDEI_EXE BIT(0)
244 #define PCIE_GLI_9767_SD_EXPRESS_CTL_SD_EXPRESS_MODE BIT(1)
245
246 #define PCIE_GLI_9767_SD_DATA_MULTI_CTL 0x944
247 #define PCIE_GLI_9767_SD_DATA_MULTI_CTL_SELECT_UHS2 BIT(5)
248 #define PCIE_GLI_9767_SD_DATA_MULTI_CTL_UHS2_SWITCH_CTL BIT(8)
249 #define PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME GENMASK(23, 16)
250 #define PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME_VALUE 0x64
251
252 #define PCIE_GLI_9767_UHS2_PHY_SET_REG2 0x948
253 #define PCIE_GLI_9767_UHS2_PHY_SET_REG2_SSC_PPM_SETTING GENMASK(22, 21)
254 #define PCIE_GLI_9767_UHS2_PHY_SET_REG2_SSC_PPM_SETTING_VALUE 0x0
255
256 #define PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2 0x950
257 #define PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2_SDEI_COMPLETE BIT(0)
258
259 #define PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2 0x954
260 #define PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2_SDEI_COMPLETE_STATUS_EN BIT(0)
261
262 #define PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2 0x958
263 #define PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2_SDEI_COMPLETE_SIGNAL_EN BIT(0)
264
265 #define PCIE_GLI_9767_UHS2_CTL1 0x95C
266 #define PCIE_GLI_9767_UHS2_CTL1_TRANS_PASS BIT(5)
267 #define PCIE_GLI_9767_UHS2_CTL1_TRANS_PASS_VALUE 0x1
268 #define PCIE_GLI_9767_UHS2_CTL1_DECODING_CTL BIT(6)
269 #define PCIE_GLI_9767_UHS2_CTL1_DECODING_CTL_VALUE 0x1
270 #define PCIE_GLI_9767_UHS2_CTL1_SERDES_TRAN GENMASK(10, 7)
271 #define PCIE_GLI_9767_UHS2_CTL1_SERDES_TRAN_VALUE 0x3
272 #define PCIE_GLI_9767_UHS2_CTL1_SERDES_RECV GENMASK(14, 11)
273 #define PCIE_GLI_9767_UHS2_CTL1_SERDES_RECV_VALUE 0xf
274 #define PCIE_GLI_9767_UHS2_CTL1_DIR_TRANS GENMASK(16, 15)
275 #define PCIE_GLI_9767_UHS2_CTL1_DIR_TRANS_VALUE 0x0
276 #define PCIE_GLI_9767_UHS2_CTL1_DIR_RECV GENMASK(18, 17)
277 #define PCIE_GLI_9767_UHS2_CTL1_DIR_RECV_VALUE 0x0
278 #define PCIE_GLI_9767_UHS2_CTL1_PDRST BIT(25)
279 #define PCIE_GLI_9767_UHS2_CTL1_PDRST_VALUE 0x1
280
281 #define PCIE_GLI_9767_UHS2_CTL2 0x964
282 #define PCIE_GLI_9767_UHS2_CTL2_ZC GENMASK(3, 0)
283 #define PCIE_GLI_9767_UHS2_CTL2_ZC_VALUE 0xb
284 #define PCIE_GLI_9767_UHS2_CTL2_ZC_CTL BIT(6)
285 #define PCIE_GLI_9767_UHS2_CTL2_ZC_CTL_VALUE 0x1
286
287 #define GLI_MAX_TUNING_LOOP 40
288
289 /* Genesys Logic chipset */
sdhci_gli_mask_replay_timer_timeout(struct pci_dev * pdev)290 static void sdhci_gli_mask_replay_timer_timeout(struct pci_dev *pdev)
291 {
292 int aer;
293 u32 value;
294
295 /* mask the replay timer timeout of AER */
296 aer = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR);
297 if (aer) {
298 pci_read_config_dword(pdev, aer + PCI_ERR_COR_MASK, &value);
299 value |= PCI_ERR_COR_REP_TIMER;
300 pci_write_config_dword(pdev, aer + PCI_ERR_COR_MASK, value);
301 }
302 }
303
gl9750_wt_on(struct sdhci_host * host)304 static inline void gl9750_wt_on(struct sdhci_host *host)
305 {
306 u32 wt_value;
307 u32 wt_enable;
308
309 wt_value = sdhci_readl(host, SDHCI_GLI_9750_WT);
310 wt_enable = FIELD_GET(SDHCI_GLI_9750_WT_EN, wt_value);
311
312 if (wt_enable == GLI_9750_WT_EN_ON)
313 return;
314
315 wt_value &= ~SDHCI_GLI_9750_WT_EN;
316 wt_value |= FIELD_PREP(SDHCI_GLI_9750_WT_EN, GLI_9750_WT_EN_ON);
317
318 sdhci_writel(host, wt_value, SDHCI_GLI_9750_WT);
319 }
320
gl9750_wt_off(struct sdhci_host * host)321 static inline void gl9750_wt_off(struct sdhci_host *host)
322 {
323 u32 wt_value;
324 u32 wt_enable;
325
326 wt_value = sdhci_readl(host, SDHCI_GLI_9750_WT);
327 wt_enable = FIELD_GET(SDHCI_GLI_9750_WT_EN, wt_value);
328
329 if (wt_enable == GLI_9750_WT_EN_OFF)
330 return;
331
332 wt_value &= ~SDHCI_GLI_9750_WT_EN;
333 wt_value |= FIELD_PREP(SDHCI_GLI_9750_WT_EN, GLI_9750_WT_EN_OFF);
334
335 sdhci_writel(host, wt_value, SDHCI_GLI_9750_WT);
336 }
337
gli_set_9750(struct sdhci_host * host)338 static void gli_set_9750(struct sdhci_host *host)
339 {
340 u32 driving_value;
341 u32 pll_value;
342 u32 sw_ctrl_value;
343 u32 misc_value;
344 u32 parameter_value;
345 u32 control_value;
346 u16 ctrl2;
347
348 gl9750_wt_on(host);
349
350 driving_value = sdhci_readl(host, SDHCI_GLI_9750_DRIVING);
351 pll_value = sdhci_readl(host, SDHCI_GLI_9750_PLL);
352 sw_ctrl_value = sdhci_readl(host, SDHCI_GLI_9750_SW_CTRL);
353 misc_value = sdhci_readl(host, SDHCI_GLI_9750_MISC);
354 parameter_value = sdhci_readl(host, SDHCI_GLI_9750_TUNING_PARAMETERS);
355 control_value = sdhci_readl(host, SDHCI_GLI_9750_TUNING_CONTROL);
356
357 driving_value &= ~(SDHCI_GLI_9750_DRIVING_1);
358 driving_value &= ~(SDHCI_GLI_9750_DRIVING_2);
359 driving_value |= FIELD_PREP(SDHCI_GLI_9750_DRIVING_1,
360 GLI_9750_DRIVING_1_VALUE);
361 driving_value |= FIELD_PREP(SDHCI_GLI_9750_DRIVING_2,
362 GLI_9750_DRIVING_2_VALUE);
363 driving_value &= ~(SDHCI_GLI_9750_SEL_1|SDHCI_GLI_9750_SEL_2|SDHCI_GLI_9750_ALL_RST);
364 driving_value |= SDHCI_GLI_9750_SEL_2;
365 sdhci_writel(host, driving_value, SDHCI_GLI_9750_DRIVING);
366
367 sw_ctrl_value &= ~SDHCI_GLI_9750_SW_CTRL_4;
368 sw_ctrl_value |= FIELD_PREP(SDHCI_GLI_9750_SW_CTRL_4,
369 GLI_9750_SW_CTRL_4_VALUE);
370 sdhci_writel(host, sw_ctrl_value, SDHCI_GLI_9750_SW_CTRL);
371
372 /* reset the tuning flow after reinit and before starting tuning */
373 pll_value &= ~SDHCI_GLI_9750_PLL_TX2_INV;
374 pll_value &= ~SDHCI_GLI_9750_PLL_TX2_DLY;
375 pll_value |= FIELD_PREP(SDHCI_GLI_9750_PLL_TX2_INV,
376 GLI_9750_PLL_TX2_INV_VALUE);
377 pll_value |= FIELD_PREP(SDHCI_GLI_9750_PLL_TX2_DLY,
378 GLI_9750_PLL_TX2_DLY_VALUE);
379
380 misc_value &= ~SDHCI_GLI_9750_MISC_TX1_INV;
381 misc_value &= ~SDHCI_GLI_9750_MISC_RX_INV;
382 misc_value &= ~SDHCI_GLI_9750_MISC_TX1_DLY;
383 misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_TX1_INV,
384 GLI_9750_MISC_TX1_INV_VALUE);
385 misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_RX_INV,
386 GLI_9750_MISC_RX_INV_VALUE);
387 misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_TX1_DLY,
388 GLI_9750_MISC_TX1_DLY_VALUE);
389
390 parameter_value &= ~SDHCI_GLI_9750_TUNING_PARAMETERS_RX_DLY;
391 parameter_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_PARAMETERS_RX_DLY,
392 GLI_9750_TUNING_PARAMETERS_RX_DLY_VALUE);
393
394 control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_1;
395 control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_2;
396 control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_1,
397 GLI_9750_TUNING_CONTROL_GLITCH_1_VALUE);
398 control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_2,
399 GLI_9750_TUNING_CONTROL_GLITCH_2_VALUE);
400
401 sdhci_writel(host, pll_value, SDHCI_GLI_9750_PLL);
402 sdhci_writel(host, misc_value, SDHCI_GLI_9750_MISC);
403
404 /* disable tuned clk */
405 ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
406 ctrl2 &= ~SDHCI_CTRL_TUNED_CLK;
407 sdhci_writew(host, ctrl2, SDHCI_HOST_CONTROL2);
408
409 /* enable tuning parameters control */
410 control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_EN;
411 control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_EN,
412 GLI_9750_TUNING_CONTROL_EN_ON);
413 sdhci_writel(host, control_value, SDHCI_GLI_9750_TUNING_CONTROL);
414
415 /* write tuning parameters */
416 sdhci_writel(host, parameter_value, SDHCI_GLI_9750_TUNING_PARAMETERS);
417
418 /* disable tuning parameters control */
419 control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_EN;
420 control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_EN,
421 GLI_9750_TUNING_CONTROL_EN_OFF);
422 sdhci_writel(host, control_value, SDHCI_GLI_9750_TUNING_CONTROL);
423
424 /* clear tuned clk */
425 ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
426 ctrl2 &= ~SDHCI_CTRL_TUNED_CLK;
427 sdhci_writew(host, ctrl2, SDHCI_HOST_CONTROL2);
428
429 gl9750_wt_off(host);
430 }
431
gli_set_9750_rx_inv(struct sdhci_host * host,bool b)432 static void gli_set_9750_rx_inv(struct sdhci_host *host, bool b)
433 {
434 u32 misc_value;
435
436 gl9750_wt_on(host);
437
438 misc_value = sdhci_readl(host, SDHCI_GLI_9750_MISC);
439 misc_value &= ~SDHCI_GLI_9750_MISC_RX_INV;
440 if (b) {
441 misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_RX_INV,
442 GLI_9750_MISC_RX_INV_ON);
443 } else {
444 misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_RX_INV,
445 GLI_9750_MISC_RX_INV_OFF);
446 }
447 sdhci_writel(host, misc_value, SDHCI_GLI_9750_MISC);
448
449 gl9750_wt_off(host);
450 }
451
__sdhci_execute_tuning_9750(struct sdhci_host * host,u32 opcode)452 static int __sdhci_execute_tuning_9750(struct sdhci_host *host, u32 opcode)
453 {
454 int i;
455 int rx_inv;
456
457 for (rx_inv = 0; rx_inv < 2; rx_inv++) {
458 gli_set_9750_rx_inv(host, !!rx_inv);
459 sdhci_start_tuning(host);
460
461 for (i = 0; i < GLI_MAX_TUNING_LOOP; i++) {
462 u16 ctrl;
463
464 sdhci_send_tuning(host, opcode);
465
466 if (!host->tuning_done) {
467 sdhci_abort_tuning(host, opcode);
468 break;
469 }
470
471 ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
472 if (!(ctrl & SDHCI_CTRL_EXEC_TUNING)) {
473 if (ctrl & SDHCI_CTRL_TUNED_CLK)
474 return 0; /* Success! */
475 break;
476 }
477 }
478 }
479 if (!host->tuning_done) {
480 pr_info("%s: Tuning timeout, falling back to fixed sampling clock\n",
481 mmc_hostname(host->mmc));
482 return -ETIMEDOUT;
483 }
484
485 pr_info("%s: Tuning failed, falling back to fixed sampling clock\n",
486 mmc_hostname(host->mmc));
487 sdhci_reset_tuning(host);
488
489 return -EAGAIN;
490 }
491
gl9750_execute_tuning(struct sdhci_host * host,u32 opcode)492 static int gl9750_execute_tuning(struct sdhci_host *host, u32 opcode)
493 {
494 host->mmc->retune_period = 0;
495 if (host->tuning_mode == SDHCI_TUNING_MODE_1)
496 host->mmc->retune_period = host->tuning_count;
497
498 gli_set_9750(host);
499 host->tuning_err = __sdhci_execute_tuning_9750(host, opcode);
500 sdhci_end_tuning(host);
501
502 return 0;
503 }
504
gl9750_disable_ssc_pll(struct sdhci_host * host)505 static void gl9750_disable_ssc_pll(struct sdhci_host *host)
506 {
507 u32 pll;
508
509 gl9750_wt_on(host);
510 pll = sdhci_readl(host, SDHCI_GLI_9750_PLL);
511 pll &= ~(SDHCI_GLI_9750_PLL_DIR | SDHCI_GLI_9750_PLLSSC_EN);
512 sdhci_writel(host, pll, SDHCI_GLI_9750_PLL);
513 gl9750_wt_off(host);
514 }
515
gl9750_set_pll(struct sdhci_host * host,u8 dir,u16 ldiv,u8 pdiv)516 static void gl9750_set_pll(struct sdhci_host *host, u8 dir, u16 ldiv, u8 pdiv)
517 {
518 u32 pll;
519
520 gl9750_wt_on(host);
521 pll = sdhci_readl(host, SDHCI_GLI_9750_PLL);
522 pll &= ~(SDHCI_GLI_9750_PLL_LDIV |
523 SDHCI_GLI_9750_PLL_PDIV |
524 SDHCI_GLI_9750_PLL_DIR);
525 pll |= FIELD_PREP(SDHCI_GLI_9750_PLL_LDIV, ldiv) |
526 FIELD_PREP(SDHCI_GLI_9750_PLL_PDIV, pdiv) |
527 FIELD_PREP(SDHCI_GLI_9750_PLL_DIR, dir);
528 sdhci_writel(host, pll, SDHCI_GLI_9750_PLL);
529 gl9750_wt_off(host);
530
531 /* wait for pll stable */
532 mdelay(1);
533 }
534
gl9750_ssc_enable(struct sdhci_host * host)535 static bool gl9750_ssc_enable(struct sdhci_host *host)
536 {
537 u32 misc;
538 u8 off;
539
540 gl9750_wt_on(host);
541 misc = sdhci_readl(host, SDHCI_GLI_9750_MISC);
542 off = FIELD_GET(SDHCI_GLI_9750_MISC_SSC_OFF, misc);
543 gl9750_wt_off(host);
544
545 return !off;
546 }
547
gl9750_set_ssc(struct sdhci_host * host,u8 enable,u8 step,u16 ppm)548 static void gl9750_set_ssc(struct sdhci_host *host, u8 enable, u8 step, u16 ppm)
549 {
550 u32 pll;
551 u32 ssc;
552
553 gl9750_wt_on(host);
554 pll = sdhci_readl(host, SDHCI_GLI_9750_PLL);
555 ssc = sdhci_readl(host, SDHCI_GLI_9750_PLLSSC);
556 pll &= ~(SDHCI_GLI_9750_PLLSSC_STEP |
557 SDHCI_GLI_9750_PLLSSC_EN);
558 ssc &= ~SDHCI_GLI_9750_PLLSSC_PPM;
559 pll |= FIELD_PREP(SDHCI_GLI_9750_PLLSSC_STEP, step) |
560 FIELD_PREP(SDHCI_GLI_9750_PLLSSC_EN, enable);
561 ssc |= FIELD_PREP(SDHCI_GLI_9750_PLLSSC_PPM, ppm);
562 sdhci_writel(host, ssc, SDHCI_GLI_9750_PLLSSC);
563 sdhci_writel(host, pll, SDHCI_GLI_9750_PLL);
564 gl9750_wt_off(host);
565 }
566
gl9750_set_ssc_pll_205mhz(struct sdhci_host * host)567 static void gl9750_set_ssc_pll_205mhz(struct sdhci_host *host)
568 {
569 bool enable = gl9750_ssc_enable(host);
570
571 /* set pll to 205MHz and ssc */
572 gl9750_set_ssc(host, enable, 0xF, 0x5A1D);
573 gl9750_set_pll(host, 0x1, 0x246, 0x0);
574 }
575
gl9750_set_ssc_pll_100mhz(struct sdhci_host * host)576 static void gl9750_set_ssc_pll_100mhz(struct sdhci_host *host)
577 {
578 bool enable = gl9750_ssc_enable(host);
579
580 /* set pll to 100MHz and ssc */
581 gl9750_set_ssc(host, enable, 0xE, 0x51EC);
582 gl9750_set_pll(host, 0x1, 0x244, 0x1);
583 }
584
gl9750_set_ssc_pll_50mhz(struct sdhci_host * host)585 static void gl9750_set_ssc_pll_50mhz(struct sdhci_host *host)
586 {
587 bool enable = gl9750_ssc_enable(host);
588
589 /* set pll to 50MHz and ssc */
590 gl9750_set_ssc(host, enable, 0xE, 0x51EC);
591 gl9750_set_pll(host, 0x1, 0x244, 0x3);
592 }
593
sdhci_gl9750_set_clock(struct sdhci_host * host,unsigned int clock)594 static void sdhci_gl9750_set_clock(struct sdhci_host *host, unsigned int clock)
595 {
596 struct mmc_ios *ios = &host->mmc->ios;
597 u16 clk;
598
599 host->mmc->actual_clock = 0;
600
601 gl9750_disable_ssc_pll(host);
602 sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
603
604 if (clock == 0)
605 return;
606
607 clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
608 if (clock == 200000000 && ios->timing == MMC_TIMING_UHS_SDR104) {
609 host->mmc->actual_clock = 205000000;
610 gl9750_set_ssc_pll_205mhz(host);
611 } else if (clock == 100000000) {
612 gl9750_set_ssc_pll_100mhz(host);
613 } else if (clock == 50000000) {
614 gl9750_set_ssc_pll_50mhz(host);
615 }
616
617 sdhci_enable_clk(host, clk);
618 }
619
gl9750_hw_setting(struct sdhci_host * host)620 static void gl9750_hw_setting(struct sdhci_host *host)
621 {
622 struct sdhci_pci_slot *slot = sdhci_priv(host);
623 struct pci_dev *pdev;
624 u32 value;
625
626 pdev = slot->chip->pdev;
627
628 gl9750_wt_on(host);
629
630 value = sdhci_readl(host, SDHCI_GLI_9750_CFG2);
631 value &= ~SDHCI_GLI_9750_CFG2_L1DLY;
632 /* set ASPM L1 entry delay to 7.9us */
633 value |= FIELD_PREP(SDHCI_GLI_9750_CFG2_L1DLY,
634 GLI_9750_CFG2_L1DLY_VALUE);
635 sdhci_writel(host, value, SDHCI_GLI_9750_CFG2);
636
637 /* toggle PM state to allow GL9750 to enter ASPM L1.2 */
638 pci_set_power_state(pdev, PCI_D3hot);
639 pci_set_power_state(pdev, PCI_D0);
640
641 /* mask the replay timer timeout of AER */
642 sdhci_gli_mask_replay_timer_timeout(pdev);
643
644 gl9750_wt_off(host);
645 }
646
gli_pcie_enable_msi(struct sdhci_pci_slot * slot)647 static void gli_pcie_enable_msi(struct sdhci_pci_slot *slot)
648 {
649 int ret;
650
651 ret = pci_alloc_irq_vectors(slot->chip->pdev, 1, 1,
652 PCI_IRQ_MSI | PCI_IRQ_MSIX);
653 if (ret < 0) {
654 pr_warn("%s: enable PCI MSI failed, error=%d\n",
655 mmc_hostname(slot->host->mmc), ret);
656 return;
657 }
658
659 slot->host->irq = pci_irq_vector(slot->chip->pdev, 0);
660 }
661
gl9755_wt_on(struct pci_dev * pdev)662 static inline void gl9755_wt_on(struct pci_dev *pdev)
663 {
664 u32 wt_value;
665 u32 wt_enable;
666
667 pci_read_config_dword(pdev, PCI_GLI_9755_WT, &wt_value);
668 wt_enable = FIELD_GET(PCI_GLI_9755_WT_EN, wt_value);
669
670 if (wt_enable == GLI_9755_WT_EN_ON)
671 return;
672
673 wt_value &= ~PCI_GLI_9755_WT_EN;
674 wt_value |= FIELD_PREP(PCI_GLI_9755_WT_EN, GLI_9755_WT_EN_ON);
675
676 pci_write_config_dword(pdev, PCI_GLI_9755_WT, wt_value);
677 }
678
gl9755_wt_off(struct pci_dev * pdev)679 static inline void gl9755_wt_off(struct pci_dev *pdev)
680 {
681 u32 wt_value;
682 u32 wt_enable;
683
684 pci_read_config_dword(pdev, PCI_GLI_9755_WT, &wt_value);
685 wt_enable = FIELD_GET(PCI_GLI_9755_WT_EN, wt_value);
686
687 if (wt_enable == GLI_9755_WT_EN_OFF)
688 return;
689
690 wt_value &= ~PCI_GLI_9755_WT_EN;
691 wt_value |= FIELD_PREP(PCI_GLI_9755_WT_EN, GLI_9755_WT_EN_OFF);
692
693 pci_write_config_dword(pdev, PCI_GLI_9755_WT, wt_value);
694 }
695
gl9755_disable_ssc_pll(struct pci_dev * pdev)696 static void gl9755_disable_ssc_pll(struct pci_dev *pdev)
697 {
698 u32 pll;
699
700 gl9755_wt_on(pdev);
701 pci_read_config_dword(pdev, PCI_GLI_9755_PLL, &pll);
702 pll &= ~(PCI_GLI_9755_PLL_DIR | PCI_GLI_9755_PLLSSC_EN);
703 pci_write_config_dword(pdev, PCI_GLI_9755_PLL, pll);
704 gl9755_wt_off(pdev);
705 }
706
gl9755_set_pll(struct pci_dev * pdev,u8 dir,u16 ldiv,u8 pdiv)707 static void gl9755_set_pll(struct pci_dev *pdev, u8 dir, u16 ldiv, u8 pdiv)
708 {
709 u32 pll;
710
711 gl9755_wt_on(pdev);
712 pci_read_config_dword(pdev, PCI_GLI_9755_PLL, &pll);
713 pll &= ~(PCI_GLI_9755_PLL_LDIV |
714 PCI_GLI_9755_PLL_PDIV |
715 PCI_GLI_9755_PLL_DIR);
716 pll |= FIELD_PREP(PCI_GLI_9755_PLL_LDIV, ldiv) |
717 FIELD_PREP(PCI_GLI_9755_PLL_PDIV, pdiv) |
718 FIELD_PREP(PCI_GLI_9755_PLL_DIR, dir);
719 pci_write_config_dword(pdev, PCI_GLI_9755_PLL, pll);
720 gl9755_wt_off(pdev);
721
722 /* wait for pll stable */
723 mdelay(1);
724 }
725
gl9755_ssc_enable(struct pci_dev * pdev)726 static bool gl9755_ssc_enable(struct pci_dev *pdev)
727 {
728 u32 misc;
729 u8 off;
730
731 gl9755_wt_on(pdev);
732 pci_read_config_dword(pdev, PCI_GLI_9755_MISC, &misc);
733 off = FIELD_GET(PCI_GLI_9755_MISC_SSC_OFF, misc);
734 gl9755_wt_off(pdev);
735
736 return !off;
737 }
738
gl9755_set_ssc(struct pci_dev * pdev,u8 enable,u8 step,u16 ppm)739 static void gl9755_set_ssc(struct pci_dev *pdev, u8 enable, u8 step, u16 ppm)
740 {
741 u32 pll;
742 u32 ssc;
743
744 gl9755_wt_on(pdev);
745 pci_read_config_dword(pdev, PCI_GLI_9755_PLL, &pll);
746 pci_read_config_dword(pdev, PCI_GLI_9755_PLLSSC, &ssc);
747 pll &= ~(PCI_GLI_9755_PLLSSC_STEP |
748 PCI_GLI_9755_PLLSSC_EN);
749 ssc &= ~PCI_GLI_9755_PLLSSC_PPM;
750 pll |= FIELD_PREP(PCI_GLI_9755_PLLSSC_STEP, step) |
751 FIELD_PREP(PCI_GLI_9755_PLLSSC_EN, enable);
752 ssc |= FIELD_PREP(PCI_GLI_9755_PLLSSC_PPM, ppm);
753 pci_write_config_dword(pdev, PCI_GLI_9755_PLLSSC, ssc);
754 pci_write_config_dword(pdev, PCI_GLI_9755_PLL, pll);
755 gl9755_wt_off(pdev);
756 }
757
gl9755_set_ssc_pll_205mhz(struct pci_dev * pdev)758 static void gl9755_set_ssc_pll_205mhz(struct pci_dev *pdev)
759 {
760 bool enable = gl9755_ssc_enable(pdev);
761
762 /* set pll to 205MHz and ssc */
763 gl9755_set_ssc(pdev, enable, 0xF, 0x5A1D);
764 gl9755_set_pll(pdev, 0x1, 0x246, 0x0);
765 }
766
gl9755_set_ssc_pll_100mhz(struct pci_dev * pdev)767 static void gl9755_set_ssc_pll_100mhz(struct pci_dev *pdev)
768 {
769 bool enable = gl9755_ssc_enable(pdev);
770
771 /* set pll to 100MHz and ssc */
772 gl9755_set_ssc(pdev, enable, 0xE, 0x51EC);
773 gl9755_set_pll(pdev, 0x1, 0x244, 0x1);
774 }
775
gl9755_set_ssc_pll_50mhz(struct pci_dev * pdev)776 static void gl9755_set_ssc_pll_50mhz(struct pci_dev *pdev)
777 {
778 bool enable = gl9755_ssc_enable(pdev);
779
780 /* set pll to 50MHz and ssc */
781 gl9755_set_ssc(pdev, enable, 0xE, 0x51EC);
782 gl9755_set_pll(pdev, 0x1, 0x244, 0x3);
783 }
784
sdhci_gl9755_set_clock(struct sdhci_host * host,unsigned int clock)785 static void sdhci_gl9755_set_clock(struct sdhci_host *host, unsigned int clock)
786 {
787 struct sdhci_pci_slot *slot = sdhci_priv(host);
788 struct mmc_ios *ios = &host->mmc->ios;
789 struct pci_dev *pdev;
790 u16 clk;
791
792 pdev = slot->chip->pdev;
793 host->mmc->actual_clock = 0;
794
795 gl9755_disable_ssc_pll(pdev);
796 sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
797
798 if (clock == 0)
799 return;
800
801 clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
802 if (clock == 200000000 && ios->timing == MMC_TIMING_UHS_SDR104) {
803 host->mmc->actual_clock = 205000000;
804 gl9755_set_ssc_pll_205mhz(pdev);
805 } else if (clock == 100000000) {
806 gl9755_set_ssc_pll_100mhz(pdev);
807 } else if (clock == 50000000) {
808 gl9755_set_ssc_pll_50mhz(pdev);
809 }
810
811 sdhci_enable_clk(host, clk);
812 }
813
gl9755_hw_setting(struct sdhci_pci_slot * slot)814 static void gl9755_hw_setting(struct sdhci_pci_slot *slot)
815 {
816 struct pci_dev *pdev = slot->chip->pdev;
817 u32 value;
818
819 gl9755_wt_on(pdev);
820
821 pci_read_config_dword(pdev, PCI_GLI_9755_PECONF, &value);
822 /*
823 * Apple ARM64 platforms using these chips may have
824 * inverted CD/WP detection.
825 */
826 if (of_property_read_bool(pdev->dev.of_node, "cd-inverted"))
827 value |= PCI_GLI_9755_INVERT_CD;
828 if (of_property_read_bool(pdev->dev.of_node, "wp-inverted"))
829 value |= PCI_GLI_9755_INVERT_WP;
830 value &= ~PCI_GLI_9755_LFCLK;
831 value &= ~PCI_GLI_9755_DMACLK;
832 pci_write_config_dword(pdev, PCI_GLI_9755_PECONF, value);
833
834 /* enable short circuit protection */
835 pci_read_config_dword(pdev, PCI_GLI_9755_SerDes, &value);
836 value &= ~PCI_GLI_9755_SCP_DIS;
837 pci_write_config_dword(pdev, PCI_GLI_9755_SerDes, value);
838
839 pci_read_config_dword(pdev, PCI_GLI_9755_CFG2, &value);
840 value &= ~PCI_GLI_9755_CFG2_L1DLY;
841 /* set ASPM L1 entry delay to 7.9us */
842 value |= FIELD_PREP(PCI_GLI_9755_CFG2_L1DLY,
843 GLI_9755_CFG2_L1DLY_VALUE);
844 pci_write_config_dword(pdev, PCI_GLI_9755_CFG2, value);
845
846 /* toggle PM state to allow GL9755 to enter ASPM L1.2 */
847 pci_set_power_state(pdev, PCI_D3hot);
848 pci_set_power_state(pdev, PCI_D0);
849
850 /* mask the replay timer timeout of AER */
851 sdhci_gli_mask_replay_timer_timeout(pdev);
852
853 gl9755_wt_off(pdev);
854 }
855
gl9755_vendor_init(struct sdhci_host * host)856 static void gl9755_vendor_init(struct sdhci_host *host)
857 {
858 struct sdhci_pci_slot *slot = sdhci_priv(host);
859 struct pci_dev *pdev = slot->chip->pdev;
860 u32 serdes;
861 u32 pllssc;
862 u32 uhs2_pll;
863
864 gl9755_wt_on(pdev);
865
866 pci_read_config_dword(pdev, PCI_GLI_9755_SerDes, &serdes);
867 serdes &= ~PCI_GLI_9755_UHS2_SERDES_TRAN;
868 serdes |= FIELD_PREP(PCI_GLI_9755_UHS2_SERDES_TRAN,
869 GLI_9755_UHS2_SERDES_TRAN_VALUE);
870 serdes &= ~PCI_GLI_9755_UHS2_SERDES_RECV;
871 serdes |= FIELD_PREP(PCI_GLI_9755_UHS2_SERDES_RECV,
872 GLI_9755_UHS2_SERDES_RECV_VALUE);
873 serdes &= ~PCI_GLI_9755_UHS2_SERDES_INTR;
874 serdes |= FIELD_PREP(PCI_GLI_9755_UHS2_SERDES_INTR,
875 GLI_9755_UHS2_SERDES_INTR_VALUE);
876 serdes &= ~PCI_GLI_9755_UHS2_SERDES_ZC1;
877 serdes |= FIELD_PREP(PCI_GLI_9755_UHS2_SERDES_ZC1,
878 GLI_9755_UHS2_SERDES_ZC1_VALUE);
879 serdes &= ~PCI_GLI_9755_UHS2_SERDES_ZC2;
880 serdes |= FIELD_PREP(PCI_GLI_9755_UHS2_SERDES_ZC2,
881 GLI_9755_UHS2_SERDES_ZC2_DEFAULT);
882 pci_write_config_dword(pdev, PCI_GLI_9755_SerDes, serdes);
883
884 pci_read_config_dword(pdev, PCI_GLI_9755_UHS2_PLL, &uhs2_pll);
885 uhs2_pll &= ~PCI_GLI_9755_UHS2_PLL_SSC;
886 uhs2_pll |= FIELD_PREP(PCI_GLI_9755_UHS2_PLL_SSC,
887 GLI_9755_UHS2_PLL_SSC_VALUE);
888 uhs2_pll &= ~PCI_GLI_9755_UHS2_PLL_DELAY;
889 uhs2_pll |= FIELD_PREP(PCI_GLI_9755_UHS2_PLL_DELAY,
890 GLI_9755_UHS2_PLL_DELAY_VALUE);
891 uhs2_pll &= ~PCI_GLI_9755_UHS2_PLL_PDRST;
892 uhs2_pll |= FIELD_PREP(PCI_GLI_9755_UHS2_PLL_PDRST,
893 GLI_9755_UHS2_PLL_PDRST_VALUE);
894 pci_write_config_dword(pdev, PCI_GLI_9755_UHS2_PLL, uhs2_pll);
895
896 pci_read_config_dword(pdev, PCI_GLI_9755_PLLSSC, &pllssc);
897 pllssc &= ~PCI_GLI_9755_PLLSSC_RTL;
898 pllssc |= FIELD_PREP(PCI_GLI_9755_PLLSSC_RTL,
899 GLI_9755_PLLSSC_RTL_VALUE);
900 pllssc &= ~PCI_GLI_9755_PLLSSC_TRANS_PASS;
901 pllssc |= FIELD_PREP(PCI_GLI_9755_PLLSSC_TRANS_PASS,
902 GLI_9755_PLLSSC_TRANS_PASS_VALUE);
903 pllssc &= ~PCI_GLI_9755_PLLSSC_RECV;
904 pllssc |= FIELD_PREP(PCI_GLI_9755_PLLSSC_RECV,
905 GLI_9755_PLLSSC_RECV_VALUE);
906 pllssc &= ~PCI_GLI_9755_PLLSSC_TRAN;
907 pllssc |= FIELD_PREP(PCI_GLI_9755_PLLSSC_TRAN,
908 GLI_9755_PLLSSC_TRAN_VALUE);
909 pci_write_config_dword(pdev, PCI_GLI_9755_PLLSSC, pllssc);
910
911 gl9755_wt_off(pdev);
912 }
913
sdhci_gli_pre_detect_init(struct sdhci_host * host)914 static void sdhci_gli_pre_detect_init(struct sdhci_host *host)
915 {
916 /* Need more time on UHS2 detect flow */
917 sdhci_writeb(host, 0xA7, SDHCI_UHS2_TIMER_CTRL);
918 }
919
sdhci_gli_overcurrent_event_enable(struct sdhci_host * host,bool enable)920 static void sdhci_gli_overcurrent_event_enable(struct sdhci_host *host, bool enable)
921 {
922 u32 mask;
923
924 mask = sdhci_readl(host, SDHCI_SIGNAL_ENABLE);
925 if (enable)
926 mask |= SDHCI_INT_BUS_POWER;
927 else
928 mask &= ~SDHCI_INT_BUS_POWER;
929
930 sdhci_writel(host, mask, SDHCI_SIGNAL_ENABLE);
931
932 mask = sdhci_readl(host, SDHCI_INT_ENABLE);
933 if (enable)
934 mask |= SDHCI_INT_BUS_POWER;
935 else
936 mask &= ~SDHCI_INT_BUS_POWER;
937
938 sdhci_writel(host, mask, SDHCI_INT_ENABLE);
939 }
940
gl9755_set_power(struct sdhci_host * host,unsigned char mode,unsigned short vdd)941 static void gl9755_set_power(struct sdhci_host *host, unsigned char mode,
942 unsigned short vdd)
943 {
944 u8 pwr = 0;
945
946 if (mode != MMC_POWER_OFF) {
947 pwr = sdhci_get_vdd_value(vdd);
948 if (!pwr)
949 WARN(1, "%s: Invalid vdd %#x\n", mmc_hostname(host->mmc), vdd);
950 pwr |= SDHCI_VDD2_POWER_180;
951 }
952
953 if (host->pwr == pwr)
954 return;
955
956 host->pwr = pwr;
957
958 if (pwr == 0) {
959 sdhci_gli_overcurrent_event_enable(host, false);
960 sdhci_writeb(host, 0, SDHCI_POWER_CONTROL);
961 } else {
962 sdhci_gli_overcurrent_event_enable(host, false);
963 sdhci_writeb(host, 0, SDHCI_POWER_CONTROL);
964
965 pwr |= (SDHCI_POWER_ON | SDHCI_VDD2_POWER_ON);
966
967 sdhci_writeb(host, pwr & 0xf, SDHCI_POWER_CONTROL);
968 /* wait stable */
969 mdelay(5);
970 sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL);
971 /* wait stable */
972 mdelay(5);
973 sdhci_gli_overcurrent_event_enable(host, true);
974 }
975 }
976
sdhci_wait_clock_stable(struct sdhci_host * host)977 static bool sdhci_wait_clock_stable(struct sdhci_host *host)
978 {
979 u16 clk = 0;
980
981 if (read_poll_timeout_atomic(sdhci_readw, clk, (clk & SDHCI_CLOCK_INT_STABLE),
982 10, 20000, false, host, SDHCI_CLOCK_CONTROL)) {
983 pr_err("%s: Internal clock never stabilised.\n", mmc_hostname(host->mmc));
984 sdhci_dumpregs(host);
985 return false;
986 }
987 return true;
988 }
989
sdhci_gli_enable_internal_clock(struct sdhci_host * host)990 static void sdhci_gli_enable_internal_clock(struct sdhci_host *host)
991 {
992 u16 ctrl2;
993
994 ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
995
996 sdhci_writew(host, SDHCI_CLOCK_INT_EN, SDHCI_CLOCK_CONTROL);
997
998 if (!((ctrl2 & SDHCI_CTRL_V4_MODE) &&
999 (ctrl2 & SDHCI_CTRL_UHS2_ENABLE))) {
1000 sdhci_wait_clock_stable(host);
1001 sdhci_writew(host, SDHCI_CTRL_V4_MODE, SDHCI_HOST_CONTROL2);
1002 }
1003 }
1004
sdhci_gli_wait_software_reset_done(struct sdhci_host * host,u8 mask)1005 static int sdhci_gli_wait_software_reset_done(struct sdhci_host *host, u8 mask)
1006 {
1007 u8 rst;
1008
1009 /* hw clears the bit when it's done */
1010 if (read_poll_timeout_atomic(sdhci_readb, rst, !(rst & mask),
1011 10, 100000, false, host, SDHCI_SOFTWARE_RESET)) {
1012 pr_err("%s: Reset 0x%x never completed.\n", mmc_hostname(host->mmc), (int)mask);
1013 sdhci_dumpregs(host);
1014 /* manual clear */
1015 sdhci_writeb(host, 0, SDHCI_SOFTWARE_RESET);
1016 return -ETIMEDOUT;
1017 }
1018
1019 return 0;
1020 }
1021
sdhci_gli_uhs2_reset_sd_tran(struct sdhci_host * host)1022 static void sdhci_gli_uhs2_reset_sd_tran(struct sdhci_host *host)
1023 {
1024 /* do this on UHS2 mode */
1025 if (host->mmc->uhs2_sd_tran) {
1026 sdhci_uhs2_reset(host, SDHCI_UHS2_SW_RESET_SD);
1027 sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
1028 sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
1029 sdhci_uhs2_clear_set_irqs(host,
1030 SDHCI_INT_ALL_MASK,
1031 SDHCI_UHS2_INT_ERROR_MASK);
1032 }
1033 }
1034
sdhci_gl9755_reset(struct sdhci_host * host,u8 mask)1035 static void sdhci_gl9755_reset(struct sdhci_host *host, u8 mask)
1036 {
1037 /* need internal clock */
1038 if (mask & SDHCI_RESET_ALL)
1039 sdhci_gli_enable_internal_clock(host);
1040
1041 sdhci_writeb(host, mask, SDHCI_SOFTWARE_RESET);
1042
1043 /* reset sd-tran on UHS2 mode if need to reset cmd/data */
1044 if ((mask & SDHCI_RESET_CMD) | (mask & SDHCI_RESET_DATA))
1045 sdhci_gli_uhs2_reset_sd_tran(host);
1046
1047 if (mask & SDHCI_RESET_ALL)
1048 host->clock = 0;
1049
1050 sdhci_gli_wait_software_reset_done(host, mask);
1051 }
1052
gl9767_vhs_read(struct pci_dev * pdev)1053 static inline void gl9767_vhs_read(struct pci_dev *pdev)
1054 {
1055 u32 vhs_enable;
1056 u32 vhs_value;
1057
1058 pci_read_config_dword(pdev, PCIE_GLI_9767_VHS, &vhs_value);
1059 vhs_enable = FIELD_GET(GLI_9767_VHS_REV, vhs_value);
1060
1061 if (vhs_enable == GLI_9767_VHS_REV_R)
1062 return;
1063
1064 vhs_value &= ~GLI_9767_VHS_REV;
1065 vhs_value |= FIELD_PREP(GLI_9767_VHS_REV, GLI_9767_VHS_REV_R);
1066
1067 pci_write_config_dword(pdev, PCIE_GLI_9767_VHS, vhs_value);
1068 }
1069
gl9767_vhs_write(struct pci_dev * pdev)1070 static inline void gl9767_vhs_write(struct pci_dev *pdev)
1071 {
1072 u32 vhs_enable;
1073 u32 vhs_value;
1074
1075 pci_read_config_dword(pdev, PCIE_GLI_9767_VHS, &vhs_value);
1076 vhs_enable = FIELD_GET(GLI_9767_VHS_REV, vhs_value);
1077
1078 if (vhs_enable == GLI_9767_VHS_REV_W)
1079 return;
1080
1081 vhs_value &= ~GLI_9767_VHS_REV;
1082 vhs_value |= FIELD_PREP(GLI_9767_VHS_REV, GLI_9767_VHS_REV_W);
1083
1084 pci_write_config_dword(pdev, PCIE_GLI_9767_VHS, vhs_value);
1085 }
1086
gl9767_ssc_enable(struct pci_dev * pdev)1087 static bool gl9767_ssc_enable(struct pci_dev *pdev)
1088 {
1089 u32 value;
1090 u8 enable;
1091
1092 gl9767_vhs_write(pdev);
1093
1094 pci_read_config_dword(pdev, PCIE_GLI_9767_COM_MAILBOX, &value);
1095 enable = FIELD_GET(PCIE_GLI_9767_COM_MAILBOX_SSC_EN, value);
1096
1097 gl9767_vhs_read(pdev);
1098
1099 return enable;
1100 }
1101
gl9767_set_ssc(struct pci_dev * pdev,u8 enable,u8 step,u16 ppm)1102 static void gl9767_set_ssc(struct pci_dev *pdev, u8 enable, u8 step, u16 ppm)
1103 {
1104 u32 pll;
1105 u32 ssc;
1106
1107 gl9767_vhs_write(pdev);
1108
1109 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, &pll);
1110 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL2, &ssc);
1111 pll &= ~(PCIE_GLI_9767_SD_PLL_CTL_SSC_STEP_SETTING |
1112 PCIE_GLI_9767_SD_PLL_CTL_SSC_EN);
1113 ssc &= ~PCIE_GLI_9767_SD_PLL_CTL2_PLLSSC_PPM;
1114 pll |= FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_SSC_STEP_SETTING, step) |
1115 FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_SSC_EN, enable);
1116 ssc |= FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL2_PLLSSC_PPM, ppm);
1117 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL2, ssc);
1118 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, pll);
1119
1120 gl9767_vhs_read(pdev);
1121 }
1122
gl9767_set_pll(struct pci_dev * pdev,u8 dir,u16 ldiv,u8 pdiv)1123 static void gl9767_set_pll(struct pci_dev *pdev, u8 dir, u16 ldiv, u8 pdiv)
1124 {
1125 u32 pll;
1126
1127 gl9767_vhs_write(pdev);
1128
1129 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, &pll);
1130 pll &= ~(PCIE_GLI_9767_SD_PLL_CTL_PLL_LDIV |
1131 PCIE_GLI_9767_SD_PLL_CTL_PLL_PDIV |
1132 PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN);
1133 pll |= FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_PLL_LDIV, ldiv) |
1134 FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_PLL_PDIV, pdiv) |
1135 FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN, dir);
1136 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, pll);
1137
1138 gl9767_vhs_read(pdev);
1139
1140 /* wait for pll stable */
1141 usleep_range(1000, 1100);
1142 }
1143
gl9767_set_ssc_pll_205mhz(struct pci_dev * pdev)1144 static void gl9767_set_ssc_pll_205mhz(struct pci_dev *pdev)
1145 {
1146 bool enable = gl9767_ssc_enable(pdev);
1147
1148 /* set pll to 205MHz and ssc */
1149 gl9767_set_ssc(pdev, enable, 0x1F, 0xF5C3);
1150 gl9767_set_pll(pdev, 0x1, 0x246, 0x0);
1151 }
1152
gl9767_disable_ssc_pll(struct pci_dev * pdev)1153 static void gl9767_disable_ssc_pll(struct pci_dev *pdev)
1154 {
1155 u32 pll;
1156
1157 gl9767_vhs_write(pdev);
1158
1159 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, &pll);
1160 pll &= ~(PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN | PCIE_GLI_9767_SD_PLL_CTL_SSC_EN);
1161 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, pll);
1162
1163 gl9767_vhs_read(pdev);
1164 }
1165
gl9767_set_low_power_negotiation(struct pci_dev * pdev,bool enable)1166 static void gl9767_set_low_power_negotiation(struct pci_dev *pdev, bool enable)
1167 {
1168 u32 value;
1169
1170 gl9767_vhs_write(pdev);
1171
1172 pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
1173 if (enable)
1174 value &= ~PCIE_GLI_9767_CFG_LOW_PWR_OFF;
1175 else
1176 value |= PCIE_GLI_9767_CFG_LOW_PWR_OFF;
1177 pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
1178
1179 gl9767_vhs_read(pdev);
1180 }
1181
sdhci_gl9767_set_clock(struct sdhci_host * host,unsigned int clock)1182 static void sdhci_gl9767_set_clock(struct sdhci_host *host, unsigned int clock)
1183 {
1184 struct sdhci_pci_slot *slot = sdhci_priv(host);
1185 struct mmc_ios *ios = &host->mmc->ios;
1186 struct pci_dev *pdev;
1187 u16 clk;
1188
1189 pdev = slot->chip->pdev;
1190 host->mmc->actual_clock = 0;
1191
1192 gl9767_set_low_power_negotiation(pdev, false);
1193 gl9767_disable_ssc_pll(pdev);
1194 sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
1195
1196 if (clock == 0) {
1197 gl9767_set_low_power_negotiation(pdev, true);
1198 return;
1199 }
1200
1201 clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
1202 if (clock == 200000000 && ios->timing == MMC_TIMING_UHS_SDR104) {
1203 host->mmc->actual_clock = 205000000;
1204 gl9767_set_ssc_pll_205mhz(pdev);
1205 }
1206
1207 sdhci_enable_clk(host, clk);
1208 gl9767_set_low_power_negotiation(pdev, true);
1209 }
1210
sdhci_gl9767_set_card_detect_debounce_time(struct sdhci_host * host)1211 static void sdhci_gl9767_set_card_detect_debounce_time(struct sdhci_host *host)
1212 {
1213 u32 value;
1214
1215 value = sdhci_readl(host, SDHCI_GLI_9767_SD_HOST_OPERATION_CTL);
1216 value &= ~(SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE |
1217 SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE);
1218 if (sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT)
1219 value |= FIELD_PREP(SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE,
1220 SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_PLUG_IN_VALUE) |
1221 FIELD_PREP(SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE,
1222 SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE_1MS);
1223 else
1224 value |= FIELD_PREP(SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE,
1225 SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_PLUG_OUT_VALUE) |
1226 FIELD_PREP(SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE,
1227 SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE_10MS);
1228 sdhci_writel(host, value, SDHCI_GLI_9767_SD_HOST_OPERATION_CTL);
1229 }
1230
sdhci_gl9767_card_event(struct sdhci_host * host)1231 static void sdhci_gl9767_card_event(struct sdhci_host *host)
1232 {
1233 sdhci_gl9767_set_card_detect_debounce_time(host);
1234 }
1235
gli_set_9767(struct sdhci_host * host)1236 static void gli_set_9767(struct sdhci_host *host)
1237 {
1238 u32 value;
1239
1240 value = sdhci_readl(host, SDHCI_GLI_9767_GM_BURST_SIZE);
1241 value &= ~SDHCI_GLI_9767_GM_BURST_SIZE_AXI_ALWAYS_SET;
1242 sdhci_writel(host, value, SDHCI_GLI_9767_GM_BURST_SIZE);
1243
1244 value = sdhci_readl(host, SDHCI_GLI_9767_SD_HOST_OPERATION_CTL);
1245 value &= ~SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_CMD_CONFLICT_CHECK;
1246 sdhci_writel(host, value, SDHCI_GLI_9767_SD_HOST_OPERATION_CTL);
1247
1248 sdhci_gl9767_set_card_detect_debounce_time(host);
1249 }
1250
gl9767_hw_setting(struct sdhci_pci_slot * slot)1251 static void gl9767_hw_setting(struct sdhci_pci_slot *slot)
1252 {
1253 struct pci_dev *pdev = slot->chip->pdev;
1254 u32 value;
1255
1256 gl9767_vhs_write(pdev);
1257
1258 pci_read_config_dword(pdev, PCIE_GLI_9767_PWR_MACRO_CTL, &value);
1259 value &= ~(PCIE_GLI_9767_PWR_MACRO_CTL_LOW_VOLTAGE |
1260 PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE |
1261 PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL);
1262
1263 value |= PCIE_GLI_9767_PWR_MACRO_CTL_LOW_VOLTAGE |
1264 FIELD_PREP(PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE,
1265 PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE_VALUE) |
1266 FIELD_PREP(PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL,
1267 PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL_VALUE);
1268 pci_write_config_dword(pdev, PCIE_GLI_9767_PWR_MACRO_CTL, value);
1269
1270 pci_read_config_dword(pdev, PCIE_GLI_9767_SCR, &value);
1271 value &= ~(PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE0 |
1272 PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE1 |
1273 PCIE_GLI_9767_SCR_CFG_RST_DATA_LINK_DOWN);
1274
1275 value |= PCIE_GLI_9767_SCR_AUTO_AXI_W_BURST |
1276 PCIE_GLI_9767_SCR_AUTO_AXI_R_BURST |
1277 PCIE_GLI_9767_SCR_AXI_REQ |
1278 PCIE_GLI_9767_SCR_CARD_DET_PWR_SAVING_EN |
1279 PCIE_GLI_9767_SCR_CORE_PWR_D3_OFF;
1280 pci_write_config_dword(pdev, PCIE_GLI_9767_SCR, value);
1281
1282 gl9767_vhs_read(pdev);
1283 }
1284
sdhci_gl9767_reset(struct sdhci_host * host,u8 mask)1285 static void sdhci_gl9767_reset(struct sdhci_host *host, u8 mask)
1286 {
1287 struct sdhci_pci_slot *slot = sdhci_priv(host);
1288 struct pci_dev *pdev = slot->chip->pdev;
1289 u32 value;
1290
1291 /* need internal clock */
1292 if (mask & SDHCI_RESET_ALL) {
1293 sdhci_gli_enable_internal_clock(host);
1294
1295 gl9767_vhs_write(pdev);
1296
1297 pci_read_config_dword(pdev, PCIE_GLI_9767_RESET_REG, &value);
1298 value &= ~PCIE_GLI_9767_RESET_REG_SD_HOST_SW_RESET;
1299 pci_write_config_dword(pdev, PCIE_GLI_9767_RESET_REG, value);
1300
1301 if (read_poll_timeout_atomic(pci_read_config_dword, value,
1302 !(value & PCIE_GLI_9767_RESET_REG_SD_HOST_SW_RESET),
1303 1, 5, true, pdev, PCIE_GLI_9767_RESET_REG, &value)) {
1304 pr_warn("%s: %s: Reset SDHC AHB and TL-AMBA failure.\n",
1305 __func__, mmc_hostname(host->mmc));
1306 gl9767_vhs_read(pdev);
1307 return;
1308 }
1309 gl9767_vhs_read(pdev);
1310 }
1311
1312 if (mmc_card_uhs2(host->mmc)) {
1313 if (mask & (SDHCI_RESET_CMD | SDHCI_RESET_DATA)) {
1314 sdhci_writeb(host, mask, SDHCI_SOFTWARE_RESET);
1315 sdhci_gli_uhs2_reset_sd_tran(host);
1316 sdhci_gli_wait_software_reset_done(host, mask);
1317 } else {
1318 sdhci_uhs2_reset(host, mask);
1319 }
1320 } else {
1321 sdhci_reset(host, mask);
1322 }
1323
1324 gli_set_9767(host);
1325 }
1326
gl9767_init_sd_express(struct mmc_host * mmc,struct mmc_ios * ios)1327 static int gl9767_init_sd_express(struct mmc_host *mmc, struct mmc_ios *ios)
1328 {
1329 struct sdhci_host *host = mmc_priv(mmc);
1330 struct sdhci_pci_slot *slot = sdhci_priv(host);
1331 struct pci_dev *pdev;
1332 u32 value;
1333 int i;
1334
1335 pdev = slot->chip->pdev;
1336
1337 if (mmc->ops->get_ro(mmc)) {
1338 mmc->ios.timing &= ~(MMC_TIMING_SD_EXP | MMC_TIMING_SD_EXP_1_2V);
1339 return 0;
1340 }
1341
1342 gl9767_vhs_write(pdev);
1343
1344 pci_read_config_dword(pdev, PCIE_GLI_9767_COMBO_MUX_CTL, &value);
1345 value &= ~(PCIE_GLI_9767_COMBO_MUX_CTL_RST_EN | PCIE_GLI_9767_COMBO_MUX_CTL_WAIT_PERST_EN);
1346 pci_write_config_dword(pdev, PCIE_GLI_9767_COMBO_MUX_CTL, value);
1347
1348 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, &value);
1349 value &= ~PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME;
1350 value |= FIELD_PREP(PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME,
1351 PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME_VALUE);
1352 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, value);
1353
1354 pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2, &value);
1355 value |= PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2_SDEI_COMPLETE;
1356 pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2, value);
1357
1358 pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2, &value);
1359 value |= PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2_SDEI_COMPLETE_STATUS_EN;
1360 pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2, value);
1361
1362 pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2, &value);
1363 value |= PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2_SDEI_COMPLETE_SIGNAL_EN;
1364 pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2, value);
1365
1366 pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
1367 value |= PCIE_GLI_9767_CFG_LOW_PWR_OFF;
1368 pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
1369
1370 value = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1371 value &= ~(SDHCI_CLOCK_CARD_EN | SDHCI_CLOCK_PLL_EN);
1372 sdhci_writew(host, value, SDHCI_CLOCK_CONTROL);
1373
1374 value = sdhci_readb(host, SDHCI_POWER_CONTROL);
1375 value |= (SDHCI_VDD2_POWER_180 | SDHCI_VDD2_POWER_ON);
1376 sdhci_writeb(host, value, SDHCI_POWER_CONTROL);
1377
1378 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, &value);
1379 value |= PCIE_GLI_9767_SD_EXPRESS_CTL_SDEI_EXE;
1380 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, value);
1381
1382 for (i = 0; i < 2; i++) {
1383 usleep_range(10000, 10100);
1384 pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2, &value);
1385 if (value & PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2_SDEI_COMPLETE) {
1386 pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2,
1387 value);
1388 break;
1389 }
1390 }
1391
1392 pci_read_config_dword(pdev, PCIE_GLI_9767_SDHC_CAP, &value);
1393 if (value & PCIE_GLI_9767_SDHC_CAP_SDEI_RESULT) {
1394 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, &value);
1395 value |= PCIE_GLI_9767_SD_EXPRESS_CTL_SD_EXPRESS_MODE;
1396 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, value);
1397 } else {
1398 mmc->ios.timing &= ~(MMC_TIMING_SD_EXP | MMC_TIMING_SD_EXP_1_2V);
1399
1400 value = sdhci_readb(host, SDHCI_POWER_CONTROL);
1401 value &= ~(SDHCI_VDD2_POWER_180 | SDHCI_VDD2_POWER_ON);
1402 sdhci_writeb(host, value, SDHCI_POWER_CONTROL);
1403
1404 value = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1405 value |= (SDHCI_CLOCK_CARD_EN | SDHCI_CLOCK_PLL_EN);
1406 sdhci_writew(host, value, SDHCI_CLOCK_CONTROL);
1407 }
1408
1409 pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
1410 value &= ~PCIE_GLI_9767_CFG_LOW_PWR_OFF;
1411 pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
1412 gl9767_vhs_read(pdev);
1413
1414 return 0;
1415 }
1416
gl9767_vendor_init(struct sdhci_host * host)1417 static void gl9767_vendor_init(struct sdhci_host *host)
1418 {
1419 struct sdhci_pci_slot *slot = sdhci_priv(host);
1420 struct pci_dev *pdev = slot->chip->pdev;
1421 u32 value;
1422
1423 gl9767_vhs_write(pdev);
1424
1425 pci_read_config_dword(pdev, PCIE_GLI_9767_UHS2_PHY_SET_REG1, &value);
1426 value |= FIELD_PREP(PCIE_GLI_9767_UHS2_PHY_SET_REG1_SERDES_INTR,
1427 PCIE_GLI_9767_UHS2_PHY_SET_REG1_SERDES_INTR_VALUE);
1428 pci_write_config_dword(pdev, PCIE_GLI_9767_UHS2_PHY_SET_REG1, value);
1429
1430 pci_read_config_dword(pdev, PCIE_GLI_9767_UHS2_PHY_SET_REG2, &value);
1431 value |= FIELD_PREP(PCIE_GLI_9767_UHS2_PHY_SET_REG2_SSC_PPM_SETTING,
1432 PCIE_GLI_9767_UHS2_PHY_SET_REG2_SSC_PPM_SETTING_VALUE);
1433 pci_write_config_dword(pdev, PCIE_GLI_9767_UHS2_PHY_SET_REG2, value);
1434
1435 pci_read_config_dword(pdev, PCIE_GLI_9767_UHS2_CTL1, &value);
1436 value |= FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_TRANS_PASS,
1437 PCIE_GLI_9767_UHS2_CTL1_TRANS_PASS_VALUE) |
1438 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_DECODING_CTL,
1439 PCIE_GLI_9767_UHS2_CTL1_DECODING_CTL_VALUE) |
1440 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_SERDES_TRAN,
1441 PCIE_GLI_9767_UHS2_CTL1_SERDES_TRAN_VALUE) |
1442 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_SERDES_RECV,
1443 PCIE_GLI_9767_UHS2_CTL1_SERDES_RECV_VALUE) |
1444 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_DIR_TRANS,
1445 PCIE_GLI_9767_UHS2_CTL1_DIR_TRANS_VALUE) |
1446 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_DIR_RECV,
1447 PCIE_GLI_9767_UHS2_CTL1_DIR_RECV_VALUE) |
1448 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_PDRST,
1449 PCIE_GLI_9767_UHS2_CTL1_PDRST_VALUE);
1450 pci_write_config_dword(pdev, PCIE_GLI_9767_UHS2_CTL1, value);
1451
1452 pci_read_config_dword(pdev, PCIE_GLI_9767_UHS2_CTL2, &value);
1453 value |= FIELD_PREP(PCIE_GLI_9767_UHS2_CTL2_ZC,
1454 PCIE_GLI_9767_UHS2_CTL2_ZC_VALUE) |
1455 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL2_ZC_CTL,
1456 PCIE_GLI_9767_UHS2_CTL2_ZC_CTL_VALUE);
1457 pci_write_config_dword(pdev, PCIE_GLI_9767_UHS2_CTL2, value);
1458
1459 gl9767_vhs_read(pdev);
1460 }
1461
sdhci_gl9767_set_power(struct sdhci_host * host,unsigned char mode,unsigned short vdd)1462 static void sdhci_gl9767_set_power(struct sdhci_host *host, unsigned char mode, unsigned short vdd)
1463 {
1464 struct sdhci_pci_slot *slot = sdhci_priv(host);
1465 struct pci_dev *pdev = slot->chip->pdev;
1466 u32 value;
1467
1468 if (mmc_card_uhs2(host->mmc)) {
1469 gl9767_vhs_write(pdev);
1470
1471 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, &value);
1472 value |= PCIE_GLI_9767_SD_DATA_MULTI_CTL_SELECT_UHS2 |
1473 PCIE_GLI_9767_SD_DATA_MULTI_CTL_UHS2_SWITCH_CTL;
1474 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, value);
1475
1476 gl9767_vhs_read(pdev);
1477
1478 sdhci_gli_overcurrent_event_enable(host, false);
1479 sdhci_uhs2_set_power(host, mode, vdd);
1480 sdhci_gli_overcurrent_event_enable(host, true);
1481 } else {
1482 gl9767_vhs_write(pdev);
1483
1484 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, &value);
1485 value &= ~(PCIE_GLI_9767_SD_DATA_MULTI_CTL_SELECT_UHS2 |
1486 PCIE_GLI_9767_SD_DATA_MULTI_CTL_UHS2_SWITCH_CTL);
1487 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, value);
1488
1489 gl9767_vhs_read(pdev);
1490
1491 sdhci_gli_overcurrent_event_enable(host, false);
1492 sdhci_set_power(host, mode, vdd);
1493 sdhci_gli_overcurrent_event_enable(host, true);
1494 }
1495 }
1496
gli_probe_slot_gl9750(struct sdhci_pci_slot * slot)1497 static int gli_probe_slot_gl9750(struct sdhci_pci_slot *slot)
1498 {
1499 struct sdhci_host *host = slot->host;
1500
1501 gl9750_hw_setting(host);
1502 gli_pcie_enable_msi(slot);
1503 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
1504 sdhci_enable_v4_mode(host);
1505
1506 return 0;
1507 }
1508
gli_probe_slot_gl9755(struct sdhci_pci_slot * slot)1509 static int gli_probe_slot_gl9755(struct sdhci_pci_slot *slot)
1510 {
1511 struct sdhci_host *host = slot->host;
1512
1513 gl9755_hw_setting(slot);
1514 gli_pcie_enable_msi(slot);
1515 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
1516 sdhci_enable_v4_mode(host);
1517 gl9755_vendor_init(host);
1518
1519 return 0;
1520 }
1521
gli_probe_slot_gl9767(struct sdhci_pci_slot * slot)1522 static int gli_probe_slot_gl9767(struct sdhci_pci_slot *slot)
1523 {
1524 struct sdhci_host *host = slot->host;
1525
1526 gli_set_9767(host);
1527 gl9767_hw_setting(slot);
1528 gli_pcie_enable_msi(slot);
1529 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
1530 host->mmc->caps2 |= MMC_CAP2_SD_EXP;
1531 host->mmc_host_ops.init_sd_express = gl9767_init_sd_express;
1532 sdhci_enable_v4_mode(host);
1533 gl9767_vendor_init(host);
1534
1535 return 0;
1536 }
1537
sdhci_gli_voltage_switch(struct sdhci_host * host)1538 static void sdhci_gli_voltage_switch(struct sdhci_host *host)
1539 {
1540 /*
1541 * According to Section 3.6.1 signal voltage switch procedure in
1542 * SD Host Controller Simplified Spec. 4.20, steps 6~8 are as
1543 * follows:
1544 * (6) Set 1.8V Signal Enable in the Host Control 2 register.
1545 * (7) Wait 5ms. 1.8V voltage regulator shall be stable within this
1546 * period.
1547 * (8) If 1.8V Signal Enable is cleared by Host Controller, go to
1548 * step (12).
1549 *
1550 * Wait 5ms after set 1.8V signal enable in Host Control 2 register
1551 * to ensure 1.8V signal enable bit is set by GL9750/GL9755.
1552 *
1553 * ...however, the controller in the NUC10i3FNK4 (a 9755) requires
1554 * slightly longer than 5ms before the control register reports that
1555 * 1.8V is ready, and far longer still before the card will actually
1556 * work reliably.
1557 */
1558 usleep_range(100000, 110000);
1559 }
1560
sdhci_gl9767_voltage_switch(struct sdhci_host * host)1561 static void sdhci_gl9767_voltage_switch(struct sdhci_host *host)
1562 {
1563 /*
1564 * According to Section 3.6.1 signal voltage switch procedure in
1565 * SD Host Controller Simplified Spec. 4.20, steps 6~8 are as
1566 * follows:
1567 * (6) Set 1.8V Signal Enable in the Host Control 2 register.
1568 * (7) Wait 5ms. 1.8V voltage regulator shall be stable within this
1569 * period.
1570 * (8) If 1.8V Signal Enable is cleared by Host Controller, go to
1571 * step (12).
1572 *
1573 * Wait 5ms after set 1.8V signal enable in Host Control 2 register
1574 * to ensure 1.8V signal enable bit is set by GL9767.
1575 *
1576 */
1577 usleep_range(5000, 5500);
1578 }
1579
sdhci_gl9750_reset(struct sdhci_host * host,u8 mask)1580 static void sdhci_gl9750_reset(struct sdhci_host *host, u8 mask)
1581 {
1582 sdhci_reset(host, mask);
1583 gli_set_9750(host);
1584 }
1585
sdhci_gl9750_readl(struct sdhci_host * host,int reg)1586 static u32 sdhci_gl9750_readl(struct sdhci_host *host, int reg)
1587 {
1588 u32 value;
1589
1590 value = readl(host->ioaddr + reg);
1591 if (unlikely(reg == SDHCI_MAX_CURRENT && !(value & 0xff)))
1592 value |= 0xc8;
1593
1594 return value;
1595 }
1596
gl9763e_hs400_enhanced_strobe(struct mmc_host * mmc,struct mmc_ios * ios)1597 static void gl9763e_hs400_enhanced_strobe(struct mmc_host *mmc,
1598 struct mmc_ios *ios)
1599 {
1600 struct sdhci_host *host = mmc_priv(mmc);
1601 u32 val;
1602
1603 val = sdhci_readl(host, SDHCI_GLI_9763E_HS400_ES_REG);
1604 if (ios->enhanced_strobe)
1605 val |= SDHCI_GLI_9763E_HS400_ES_BIT;
1606 else
1607 val &= ~SDHCI_GLI_9763E_HS400_ES_BIT;
1608
1609 sdhci_writel(host, val, SDHCI_GLI_9763E_HS400_ES_REG);
1610 }
1611
gl9763e_set_low_power_negotiation(struct sdhci_pci_slot * slot,bool enable)1612 static void gl9763e_set_low_power_negotiation(struct sdhci_pci_slot *slot,
1613 bool enable)
1614 {
1615 struct pci_dev *pdev = slot->chip->pdev;
1616 u32 value;
1617
1618 pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1619 value &= ~GLI_9763E_VHS_REV;
1620 value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_W);
1621 pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1622
1623 pci_read_config_dword(pdev, PCIE_GLI_9763E_CFG, &value);
1624
1625 if (enable)
1626 value &= ~GLI_9763E_CFG_LPSN_DIS;
1627 else
1628 value |= GLI_9763E_CFG_LPSN_DIS;
1629
1630 pci_write_config_dword(pdev, PCIE_GLI_9763E_CFG, value);
1631
1632 pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1633 value &= ~GLI_9763E_VHS_REV;
1634 value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_R);
1635 pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1636 }
1637
sdhci_set_gl9763e_signaling(struct sdhci_host * host,unsigned int timing)1638 static void sdhci_set_gl9763e_signaling(struct sdhci_host *host,
1639 unsigned int timing)
1640 {
1641 u16 ctrl_2;
1642
1643 ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
1644 ctrl_2 &= ~SDHCI_CTRL_UHS_MASK;
1645 if (timing == MMC_TIMING_MMC_HS200)
1646 ctrl_2 |= SDHCI_CTRL_UHS_SDR104;
1647 else if (timing == MMC_TIMING_MMC_HS)
1648 ctrl_2 |= SDHCI_CTRL_UHS_SDR25;
1649 else if (timing == MMC_TIMING_MMC_DDR52)
1650 ctrl_2 |= SDHCI_CTRL_UHS_DDR50;
1651 else if (timing == MMC_TIMING_MMC_HS400)
1652 ctrl_2 |= SDHCI_GLI_9763E_CTRL_HS400;
1653
1654 sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
1655 }
1656
sdhci_gl9763e_dumpregs(struct mmc_host * mmc)1657 static void sdhci_gl9763e_dumpregs(struct mmc_host *mmc)
1658 {
1659 sdhci_dumpregs(mmc_priv(mmc));
1660 }
1661
sdhci_gl9763e_cqe_pre_enable(struct mmc_host * mmc)1662 static void sdhci_gl9763e_cqe_pre_enable(struct mmc_host *mmc)
1663 {
1664 struct cqhci_host *cq_host = mmc->cqe_private;
1665 u32 value;
1666
1667 value = cqhci_readl(cq_host, CQHCI_CFG);
1668 value |= CQHCI_ENABLE;
1669 cqhci_writel(cq_host, value, CQHCI_CFG);
1670 }
1671
sdhci_gl9763e_cqe_enable(struct mmc_host * mmc)1672 static void sdhci_gl9763e_cqe_enable(struct mmc_host *mmc)
1673 {
1674 struct sdhci_host *host = mmc_priv(mmc);
1675
1676 sdhci_writew(host, GLI_9763E_CQE_TRNS_MODE, SDHCI_TRANSFER_MODE);
1677 sdhci_cqe_enable(mmc);
1678 }
1679
sdhci_gl9763e_cqhci_irq(struct sdhci_host * host,u32 intmask)1680 static u32 sdhci_gl9763e_cqhci_irq(struct sdhci_host *host, u32 intmask)
1681 {
1682 int cmd_error = 0;
1683 int data_error = 0;
1684
1685 if (!sdhci_cqe_irq(host, intmask, &cmd_error, &data_error))
1686 return intmask;
1687
1688 cqhci_irq(host->mmc, intmask, cmd_error, data_error);
1689
1690 return 0;
1691 }
1692
sdhci_gl9763e_cqe_post_disable(struct mmc_host * mmc)1693 static void sdhci_gl9763e_cqe_post_disable(struct mmc_host *mmc)
1694 {
1695 struct sdhci_host *host = mmc_priv(mmc);
1696 struct cqhci_host *cq_host = mmc->cqe_private;
1697 u32 value;
1698
1699 value = cqhci_readl(cq_host, CQHCI_CFG);
1700 value &= ~CQHCI_ENABLE;
1701 cqhci_writel(cq_host, value, CQHCI_CFG);
1702 sdhci_writew(host, 0x0, SDHCI_TRANSFER_MODE);
1703 }
1704
1705 static const struct cqhci_host_ops sdhci_gl9763e_cqhci_ops = {
1706 .enable = sdhci_gl9763e_cqe_enable,
1707 .disable = sdhci_cqe_disable,
1708 .dumpregs = sdhci_gl9763e_dumpregs,
1709 .pre_enable = sdhci_gl9763e_cqe_pre_enable,
1710 .post_disable = sdhci_gl9763e_cqe_post_disable,
1711 };
1712
gl9763e_add_host(struct sdhci_pci_slot * slot)1713 static int gl9763e_add_host(struct sdhci_pci_slot *slot)
1714 {
1715 struct device *dev = &slot->chip->pdev->dev;
1716 struct sdhci_host *host = slot->host;
1717 struct cqhci_host *cq_host;
1718 bool dma64;
1719 int ret;
1720
1721 ret = sdhci_setup_host(host);
1722 if (ret)
1723 return ret;
1724
1725 cq_host = devm_kzalloc(dev, sizeof(*cq_host), GFP_KERNEL);
1726 if (!cq_host) {
1727 ret = -ENOMEM;
1728 goto cleanup;
1729 }
1730
1731 cq_host->mmio = host->ioaddr + SDHCI_GLI_9763E_CQE_BASE_ADDR;
1732 cq_host->ops = &sdhci_gl9763e_cqhci_ops;
1733
1734 dma64 = host->flags & SDHCI_USE_64_BIT_DMA;
1735 if (dma64)
1736 cq_host->caps |= CQHCI_TASK_DESC_SZ_128;
1737
1738 ret = cqhci_init(cq_host, host->mmc, dma64);
1739 if (ret)
1740 goto cleanup;
1741
1742 ret = __sdhci_add_host(host);
1743 if (ret)
1744 goto cleanup;
1745
1746 /* Disable LPM negotiation to avoid entering L1 state. */
1747 gl9763e_set_low_power_negotiation(slot, false);
1748
1749 return 0;
1750
1751 cleanup:
1752 sdhci_cleanup_host(host);
1753 return ret;
1754 }
1755
gl9763e_hw_setting(struct sdhci_pci_slot * slot)1756 static void gl9763e_hw_setting(struct sdhci_pci_slot *slot)
1757 {
1758 struct pci_dev *pdev = slot->chip->pdev;
1759 u32 value;
1760
1761 pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1762 value &= ~GLI_9763E_VHS_REV;
1763 value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_W);
1764 pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1765
1766 pci_read_config_dword(pdev, PCIE_GLI_9763E_SCR, &value);
1767 value |= GLI_9763E_SCR_AXI_REQ;
1768 pci_write_config_dword(pdev, PCIE_GLI_9763E_SCR, value);
1769
1770 pci_read_config_dword(pdev, PCIE_GLI_9763E_MMC_CTRL, &value);
1771 value &= ~GLI_9763E_HS400_SLOW;
1772 pci_write_config_dword(pdev, PCIE_GLI_9763E_MMC_CTRL, value);
1773
1774 pci_read_config_dword(pdev, PCIE_GLI_9763E_CFG2, &value);
1775 value &= ~GLI_9763E_CFG2_L1DLY;
1776 /* set ASPM L1 entry delay to 21us */
1777 value |= FIELD_PREP(GLI_9763E_CFG2_L1DLY, GLI_9763E_CFG2_L1DLY_MID);
1778 pci_write_config_dword(pdev, PCIE_GLI_9763E_CFG2, value);
1779
1780 pci_read_config_dword(pdev, PCIE_GLI_9763E_CLKRXDLY, &value);
1781 value &= ~GLI_9763E_HS400_RXDLY;
1782 value |= FIELD_PREP(GLI_9763E_HS400_RXDLY, GLI_9763E_HS400_RXDLY_5);
1783 pci_write_config_dword(pdev, PCIE_GLI_9763E_CLKRXDLY, value);
1784
1785 /* mask the replay timer timeout of AER */
1786 sdhci_gli_mask_replay_timer_timeout(pdev);
1787
1788 pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1789 value &= ~GLI_9763E_VHS_REV;
1790 value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_R);
1791 pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1792 }
1793
1794 #ifdef CONFIG_PM
gl9763e_runtime_suspend(struct sdhci_pci_chip * chip)1795 static int gl9763e_runtime_suspend(struct sdhci_pci_chip *chip)
1796 {
1797 struct sdhci_pci_slot *slot = chip->slots[0];
1798 struct sdhci_host *host = slot->host;
1799 u16 clock;
1800
1801 /* Enable LPM negotiation to allow entering L1 state */
1802 gl9763e_set_low_power_negotiation(slot, true);
1803
1804 clock = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1805 clock &= ~(SDHCI_CLOCK_PLL_EN | SDHCI_CLOCK_CARD_EN);
1806 sdhci_writew(host, clock, SDHCI_CLOCK_CONTROL);
1807
1808 return 0;
1809 }
1810
gl9763e_runtime_resume(struct sdhci_pci_chip * chip)1811 static int gl9763e_runtime_resume(struct sdhci_pci_chip *chip)
1812 {
1813 struct sdhci_pci_slot *slot = chip->slots[0];
1814 struct sdhci_host *host = slot->host;
1815 u16 clock;
1816
1817 if (host->mmc->ios.power_mode != MMC_POWER_ON)
1818 return 0;
1819
1820 clock = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1821
1822 clock |= SDHCI_CLOCK_PLL_EN;
1823 clock &= ~SDHCI_CLOCK_INT_STABLE;
1824 sdhci_writew(host, clock, SDHCI_CLOCK_CONTROL);
1825
1826 /* Wait max 150 ms */
1827 if (read_poll_timeout(sdhci_readw, clock, (clock & SDHCI_CLOCK_INT_STABLE),
1828 1000, 150000, false, host, SDHCI_CLOCK_CONTROL)) {
1829 pr_err("%s: PLL clock never stabilised.\n",
1830 mmc_hostname(host->mmc));
1831 sdhci_dumpregs(host);
1832 }
1833
1834 clock |= SDHCI_CLOCK_CARD_EN;
1835 sdhci_writew(host, clock, SDHCI_CLOCK_CONTROL);
1836
1837 /* Disable LPM negotiation to avoid entering L1 state. */
1838 gl9763e_set_low_power_negotiation(slot, false);
1839
1840 return 0;
1841 }
1842 #endif
1843
1844 #ifdef CONFIG_PM_SLEEP
sdhci_pci_gli_resume(struct sdhci_pci_chip * chip)1845 static int sdhci_pci_gli_resume(struct sdhci_pci_chip *chip)
1846 {
1847 struct sdhci_pci_slot *slot = chip->slots[0];
1848
1849 pci_free_irq_vectors(slot->chip->pdev);
1850 gli_pcie_enable_msi(slot);
1851
1852 return sdhci_pci_resume_host(chip);
1853 }
1854
gl9763e_resume(struct sdhci_pci_chip * chip)1855 static int gl9763e_resume(struct sdhci_pci_chip *chip)
1856 {
1857 struct sdhci_pci_slot *slot = chip->slots[0];
1858 int ret;
1859
1860 ret = sdhci_pci_gli_resume(chip);
1861 if (ret)
1862 return ret;
1863
1864 ret = cqhci_resume(slot->host->mmc);
1865 if (ret)
1866 return ret;
1867
1868 /*
1869 * Disable LPM negotiation to bring device back in sync
1870 * with its runtime_pm state.
1871 */
1872 gl9763e_set_low_power_negotiation(slot, false);
1873
1874 return 0;
1875 }
1876
gl9763e_suspend(struct sdhci_pci_chip * chip)1877 static int gl9763e_suspend(struct sdhci_pci_chip *chip)
1878 {
1879 struct sdhci_pci_slot *slot = chip->slots[0];
1880 int ret;
1881
1882 /*
1883 * Certain SoCs can suspend only with the bus in low-
1884 * power state, notably x86 SoCs when using S0ix.
1885 * Re-enable LPM negotiation to allow entering L1 state
1886 * and entering system suspend.
1887 */
1888 gl9763e_set_low_power_negotiation(slot, true);
1889
1890 ret = cqhci_suspend(slot->host->mmc);
1891 if (ret)
1892 goto err_suspend;
1893
1894 ret = sdhci_suspend_host(slot->host);
1895 if (ret)
1896 goto err_suspend_host;
1897
1898 return 0;
1899
1900 err_suspend_host:
1901 cqhci_resume(slot->host->mmc);
1902 err_suspend:
1903 gl9763e_set_low_power_negotiation(slot, false);
1904 return ret;
1905 }
1906 #endif
1907
gli_probe_slot_gl9763e(struct sdhci_pci_slot * slot)1908 static int gli_probe_slot_gl9763e(struct sdhci_pci_slot *slot)
1909 {
1910 struct pci_dev *pdev = slot->chip->pdev;
1911 struct sdhci_host *host = slot->host;
1912 u32 value;
1913
1914 host->mmc->caps |= MMC_CAP_8_BIT_DATA |
1915 MMC_CAP_1_8V_DDR |
1916 MMC_CAP_NONREMOVABLE;
1917 host->mmc->caps2 |= MMC_CAP2_HS200_1_8V_SDR |
1918 MMC_CAP2_HS400_1_8V |
1919 MMC_CAP2_HS400_ES |
1920 MMC_CAP2_NO_SDIO |
1921 MMC_CAP2_NO_SD;
1922
1923 pci_read_config_dword(pdev, PCIE_GLI_9763E_MB, &value);
1924 if (!(value & GLI_9763E_MB_CMDQ_OFF))
1925 if (value & GLI_9763E_MB_ERP_ON)
1926 host->mmc->caps2 |= MMC_CAP2_CQE | MMC_CAP2_CQE_DCMD;
1927
1928 gli_pcie_enable_msi(slot);
1929 host->mmc_host_ops.hs400_enhanced_strobe =
1930 gl9763e_hs400_enhanced_strobe;
1931 gl9763e_hw_setting(slot);
1932 sdhci_enable_v4_mode(host);
1933
1934 return 0;
1935 }
1936
1937 #define REG_OFFSET_IN_BITS(reg) ((reg) << 3 & 0x18)
1938
sdhci_gli_readw(struct sdhci_host * host,int reg)1939 static u16 sdhci_gli_readw(struct sdhci_host *host, int reg)
1940 {
1941 u32 val = readl(host->ioaddr + (reg & ~3));
1942 u16 word;
1943
1944 word = (val >> REG_OFFSET_IN_BITS(reg)) & 0xffff;
1945 return word;
1946 }
1947
sdhci_gli_readb(struct sdhci_host * host,int reg)1948 static u8 sdhci_gli_readb(struct sdhci_host *host, int reg)
1949 {
1950 u32 val = readl(host->ioaddr + (reg & ~3));
1951 u8 byte = (val >> REG_OFFSET_IN_BITS(reg)) & 0xff;
1952
1953 return byte;
1954 }
1955
1956 static const struct sdhci_ops sdhci_gl9755_ops = {
1957 .read_w = sdhci_gli_readw,
1958 .read_b = sdhci_gli_readb,
1959 .set_clock = sdhci_gl9755_set_clock,
1960 .set_power = gl9755_set_power,
1961 .enable_dma = sdhci_pci_enable_dma,
1962 .set_bus_width = sdhci_set_bus_width,
1963 .reset = sdhci_gl9755_reset,
1964 .set_uhs_signaling = sdhci_set_uhs_signaling,
1965 .voltage_switch = sdhci_gli_voltage_switch,
1966 .dump_uhs2_regs = sdhci_uhs2_dump_regs,
1967 .set_timeout = sdhci_uhs2_set_timeout,
1968 .irq = sdhci_uhs2_irq,
1969 .uhs2_pre_detect_init = sdhci_gli_pre_detect_init,
1970 };
1971
1972 const struct sdhci_pci_fixes sdhci_gl9755 = {
1973 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
1974 .quirks2 = SDHCI_QUIRK2_BROKEN_DDR50,
1975 .probe_slot = gli_probe_slot_gl9755,
1976 .add_host = sdhci_pci_uhs2_add_host,
1977 .remove_host = sdhci_pci_uhs2_remove_host,
1978 .ops = &sdhci_gl9755_ops,
1979 #ifdef CONFIG_PM_SLEEP
1980 .resume = sdhci_pci_gli_resume,
1981 #endif
1982 };
1983
1984 static const struct sdhci_ops sdhci_gl9750_ops = {
1985 .read_w = sdhci_gli_readw,
1986 .read_b = sdhci_gli_readb,
1987 .read_l = sdhci_gl9750_readl,
1988 .set_clock = sdhci_gl9750_set_clock,
1989 .enable_dma = sdhci_pci_enable_dma,
1990 .set_bus_width = sdhci_set_bus_width,
1991 .reset = sdhci_gl9750_reset,
1992 .set_uhs_signaling = sdhci_set_uhs_signaling,
1993 .voltage_switch = sdhci_gli_voltage_switch,
1994 .platform_execute_tuning = gl9750_execute_tuning,
1995 };
1996
1997 const struct sdhci_pci_fixes sdhci_gl9750 = {
1998 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
1999 .quirks2 = SDHCI_QUIRK2_BROKEN_DDR50,
2000 .probe_slot = gli_probe_slot_gl9750,
2001 .ops = &sdhci_gl9750_ops,
2002 #ifdef CONFIG_PM_SLEEP
2003 .resume = sdhci_pci_gli_resume,
2004 #endif
2005 };
2006
2007 static const struct sdhci_ops sdhci_gl9763e_ops = {
2008 .set_clock = sdhci_set_clock,
2009 .enable_dma = sdhci_pci_enable_dma,
2010 .set_bus_width = sdhci_set_bus_width,
2011 .reset = sdhci_and_cqhci_reset,
2012 .set_uhs_signaling = sdhci_set_gl9763e_signaling,
2013 .voltage_switch = sdhci_gli_voltage_switch,
2014 .irq = sdhci_gl9763e_cqhci_irq,
2015 };
2016
2017 const struct sdhci_pci_fixes sdhci_gl9763e = {
2018 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
2019 .probe_slot = gli_probe_slot_gl9763e,
2020 .ops = &sdhci_gl9763e_ops,
2021 #ifdef CONFIG_PM_SLEEP
2022 .resume = gl9763e_resume,
2023 .suspend = gl9763e_suspend,
2024 #endif
2025 #ifdef CONFIG_PM
2026 .runtime_suspend = gl9763e_runtime_suspend,
2027 .runtime_resume = gl9763e_runtime_resume,
2028 .allow_runtime_pm = true,
2029 #endif
2030 .add_host = gl9763e_add_host,
2031 };
2032
2033 static const struct sdhci_ops sdhci_gl9767_ops = {
2034 .set_clock = sdhci_gl9767_set_clock,
2035 .enable_dma = sdhci_pci_enable_dma,
2036 .set_bus_width = sdhci_set_bus_width,
2037 .reset = sdhci_gl9767_reset,
2038 .set_uhs_signaling = sdhci_set_uhs_signaling,
2039 .voltage_switch = sdhci_gl9767_voltage_switch,
2040 .dump_uhs2_regs = sdhci_uhs2_dump_regs,
2041 .set_timeout = sdhci_uhs2_set_timeout,
2042 .irq = sdhci_uhs2_irq,
2043 .set_power = sdhci_gl9767_set_power,
2044 .uhs2_pre_detect_init = sdhci_gli_pre_detect_init,
2045 .card_event = sdhci_gl9767_card_event,
2046 };
2047
2048 const struct sdhci_pci_fixes sdhci_gl9767 = {
2049 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
2050 .quirks2 = SDHCI_QUIRK2_BROKEN_DDR50,
2051 .probe_slot = gli_probe_slot_gl9767,
2052 .add_host = sdhci_pci_uhs2_add_host,
2053 .remove_host = sdhci_pci_uhs2_remove_host,
2054 .ops = &sdhci_gl9767_ops,
2055 #ifdef CONFIG_PM_SLEEP
2056 .resume = sdhci_pci_gli_resume,
2057 #endif
2058 };
2059