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
22 /* Genesys Logic extra registers */
23 #define SDHCI_GLI_9750_WT 0x800
24 #define SDHCI_GLI_9750_WT_EN BIT(0)
25 #define GLI_9750_WT_EN_ON 0x1
26 #define GLI_9750_WT_EN_OFF 0x0
27
28 #define SDHCI_GLI_9750_CFG2 0x848
29 #define SDHCI_GLI_9750_CFG2_L1DLY GENMASK(28, 24)
30 #define GLI_9750_CFG2_L1DLY_VALUE 0x1F
31
32 #define SDHCI_GLI_9750_DRIVING 0x860
33 #define SDHCI_GLI_9750_DRIVING_1 GENMASK(11, 0)
34 #define SDHCI_GLI_9750_DRIVING_2 GENMASK(27, 26)
35 #define GLI_9750_DRIVING_1_VALUE 0xFFF
36 #define GLI_9750_DRIVING_2_VALUE 0x3
37 #define SDHCI_GLI_9750_SEL_1 BIT(29)
38 #define SDHCI_GLI_9750_SEL_2 BIT(31)
39 #define SDHCI_GLI_9750_ALL_RST (BIT(24)|BIT(25)|BIT(28)|BIT(30))
40
41 #define SDHCI_GLI_9750_PLL 0x864
42 #define SDHCI_GLI_9750_PLL_LDIV GENMASK(9, 0)
43 #define SDHCI_GLI_9750_PLL_PDIV GENMASK(14, 12)
44 #define SDHCI_GLI_9750_PLL_DIR BIT(15)
45 #define SDHCI_GLI_9750_PLL_TX2_INV BIT(23)
46 #define SDHCI_GLI_9750_PLL_TX2_DLY GENMASK(22, 20)
47 #define GLI_9750_PLL_TX2_INV_VALUE 0x1
48 #define GLI_9750_PLL_TX2_DLY_VALUE 0x0
49 #define SDHCI_GLI_9750_PLLSSC_STEP GENMASK(28, 24)
50 #define SDHCI_GLI_9750_PLLSSC_EN BIT(31)
51
52 #define SDHCI_GLI_9750_PLLSSC 0x86C
53 #define SDHCI_GLI_9750_PLLSSC_PPM GENMASK(31, 16)
54
55 #define SDHCI_GLI_9750_SW_CTRL 0x874
56 #define SDHCI_GLI_9750_SW_CTRL_4 GENMASK(7, 6)
57 #define GLI_9750_SW_CTRL_4_VALUE 0x3
58
59 #define SDHCI_GLI_9750_MISC 0x878
60 #define SDHCI_GLI_9750_MISC_TX1_INV BIT(2)
61 #define SDHCI_GLI_9750_MISC_RX_INV BIT(3)
62 #define SDHCI_GLI_9750_MISC_TX1_DLY GENMASK(6, 4)
63 #define GLI_9750_MISC_TX1_INV_VALUE 0x0
64 #define GLI_9750_MISC_RX_INV_ON 0x1
65 #define GLI_9750_MISC_RX_INV_OFF 0x0
66 #define GLI_9750_MISC_RX_INV_VALUE GLI_9750_MISC_RX_INV_OFF
67 #define GLI_9750_MISC_TX1_DLY_VALUE 0x5
68 #define SDHCI_GLI_9750_MISC_SSC_OFF BIT(26)
69
70 #define SDHCI_GLI_9750_TUNING_CONTROL 0x540
71 #define SDHCI_GLI_9750_TUNING_CONTROL_EN BIT(4)
72 #define GLI_9750_TUNING_CONTROL_EN_ON 0x1
73 #define GLI_9750_TUNING_CONTROL_EN_OFF 0x0
74 #define SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_1 BIT(16)
75 #define SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_2 GENMASK(20, 19)
76 #define GLI_9750_TUNING_CONTROL_GLITCH_1_VALUE 0x1
77 #define GLI_9750_TUNING_CONTROL_GLITCH_2_VALUE 0x2
78
79 #define SDHCI_GLI_9750_TUNING_PARAMETERS 0x544
80 #define SDHCI_GLI_9750_TUNING_PARAMETERS_RX_DLY GENMASK(2, 0)
81 #define GLI_9750_TUNING_PARAMETERS_RX_DLY_VALUE 0x1
82
83 #define SDHCI_GLI_9763E_CTRL_HS400 0x7
84
85 #define SDHCI_GLI_9763E_HS400_ES_REG 0x52C
86 #define SDHCI_GLI_9763E_HS400_ES_BIT BIT(8)
87
88 #define PCIE_GLI_9763E_VHS 0x884
89 #define GLI_9763E_VHS_REV GENMASK(19, 16)
90 #define GLI_9763E_VHS_REV_R 0x0
91 #define GLI_9763E_VHS_REV_M 0x1
92 #define GLI_9763E_VHS_REV_W 0x2
93 #define PCIE_GLI_9763E_MB 0x888
94 #define GLI_9763E_MB_CMDQ_OFF BIT(19)
95 #define GLI_9763E_MB_ERP_ON BIT(7)
96 #define PCIE_GLI_9763E_SCR 0x8E0
97 #define GLI_9763E_SCR_AXI_REQ BIT(9)
98
99 #define PCIE_GLI_9763E_CFG 0x8A0
100 #define GLI_9763E_CFG_LPSN_DIS BIT(12)
101
102 #define PCIE_GLI_9763E_CFG2 0x8A4
103 #define GLI_9763E_CFG2_L1DLY GENMASK(28, 19)
104 #define GLI_9763E_CFG2_L1DLY_MID 0x54
105
106 #define PCIE_GLI_9763E_MMC_CTRL 0x960
107 #define GLI_9763E_HS400_SLOW BIT(3)
108
109 #define PCIE_GLI_9763E_CLKRXDLY 0x934
110 #define GLI_9763E_HS400_RXDLY GENMASK(31, 28)
111 #define GLI_9763E_HS400_RXDLY_5 0x5
112
113 #define SDHCI_GLI_9763E_CQE_BASE_ADDR 0x200
114 #define GLI_9763E_CQE_TRNS_MODE (SDHCI_TRNS_MULTI | \
115 SDHCI_TRNS_BLK_CNT_EN | \
116 SDHCI_TRNS_DMA)
117
118 #define PCI_GLI_9755_WT 0x800
119 #define PCI_GLI_9755_WT_EN BIT(0)
120 #define GLI_9755_WT_EN_ON 0x1
121 #define GLI_9755_WT_EN_OFF 0x0
122
123 #define PCI_GLI_9755_PECONF 0x44
124 #define PCI_GLI_9755_LFCLK GENMASK(14, 12)
125 #define PCI_GLI_9755_DMACLK BIT(29)
126 #define PCI_GLI_9755_INVERT_CD BIT(30)
127 #define PCI_GLI_9755_INVERT_WP BIT(31)
128
129 #define PCI_GLI_9755_CFG2 0x48
130 #define PCI_GLI_9755_CFG2_L1DLY GENMASK(28, 24)
131 #define GLI_9755_CFG2_L1DLY_VALUE 0x1F
132
133 #define PCI_GLI_9755_PLL 0x64
134 #define PCI_GLI_9755_PLL_LDIV GENMASK(9, 0)
135 #define PCI_GLI_9755_PLL_PDIV GENMASK(14, 12)
136 #define PCI_GLI_9755_PLL_DIR BIT(15)
137 #define PCI_GLI_9755_PLLSSC_STEP GENMASK(28, 24)
138 #define PCI_GLI_9755_PLLSSC_EN BIT(31)
139
140 #define PCI_GLI_9755_PLLSSC 0x68
141 #define PCI_GLI_9755_PLLSSC_PPM GENMASK(15, 0)
142
143 #define PCI_GLI_9755_SerDes 0x70
144 #define PCI_GLI_9755_SCP_DIS BIT(19)
145
146 #define PCI_GLI_9755_MISC 0x78
147 #define PCI_GLI_9755_MISC_SSC_OFF BIT(26)
148
149 #define SDHCI_GLI_9767_GM_BURST_SIZE 0x510
150 #define SDHCI_GLI_9767_GM_BURST_SIZE_AXI_ALWAYS_SET BIT(8)
151
152 #define PCIE_GLI_9767_VHS 0x884
153 #define GLI_9767_VHS_REV GENMASK(19, 16)
154 #define GLI_9767_VHS_REV_R 0x0
155 #define GLI_9767_VHS_REV_M 0x1
156 #define GLI_9767_VHS_REV_W 0x2
157
158 #define PCIE_GLI_9767_COM_MAILBOX 0x888
159 #define PCIE_GLI_9767_COM_MAILBOX_SSC_EN BIT(1)
160
161 #define PCIE_GLI_9767_CFG 0x8A0
162 #define PCIE_GLI_9767_CFG_LOW_PWR_OFF BIT(12)
163
164 #define PCIE_GLI_9767_COMBO_MUX_CTL 0x8C8
165 #define PCIE_GLI_9767_COMBO_MUX_CTL_RST_EN BIT(6)
166 #define PCIE_GLI_9767_COMBO_MUX_CTL_WAIT_PERST_EN BIT(10)
167
168 #define PCIE_GLI_9767_PWR_MACRO_CTL 0x8D0
169 #define PCIE_GLI_9767_PWR_MACRO_CTL_LOW_VOLTAGE GENMASK(3, 0)
170 #define PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE GENMASK(15, 12)
171 #define PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE_VALUE 0x7
172 #define PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL GENMASK(29, 28)
173 #define PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL_VALUE 0x3
174
175 #define PCIE_GLI_9767_SCR 0x8E0
176 #define PCIE_GLI_9767_SCR_AUTO_AXI_W_BURST BIT(6)
177 #define PCIE_GLI_9767_SCR_AUTO_AXI_R_BURST BIT(7)
178 #define PCIE_GLI_9767_SCR_AXI_REQ BIT(9)
179 #define PCIE_GLI_9767_SCR_CARD_DET_PWR_SAVING_EN BIT(10)
180 #define PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE0 BIT(16)
181 #define PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE1 BIT(17)
182 #define PCIE_GLI_9767_SCR_CORE_PWR_D3_OFF BIT(21)
183 #define PCIE_GLI_9767_SCR_CFG_RST_DATA_LINK_DOWN BIT(30)
184
185 #define PCIE_GLI_9767_SDHC_CAP 0x91C
186 #define PCIE_GLI_9767_SDHC_CAP_SDEI_RESULT BIT(5)
187
188 #define PCIE_GLI_9767_SD_PLL_CTL 0x938
189 #define PCIE_GLI_9767_SD_PLL_CTL_PLL_LDIV GENMASK(9, 0)
190 #define PCIE_GLI_9767_SD_PLL_CTL_PLL_PDIV GENMASK(15, 12)
191 #define PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN BIT(16)
192 #define PCIE_GLI_9767_SD_PLL_CTL_SSC_EN BIT(19)
193 #define PCIE_GLI_9767_SD_PLL_CTL_SSC_STEP_SETTING GENMASK(28, 24)
194
195 #define PCIE_GLI_9767_SD_PLL_CTL2 0x93C
196 #define PCIE_GLI_9767_SD_PLL_CTL2_PLLSSC_PPM GENMASK(31, 16)
197
198 #define PCIE_GLI_9767_SD_EXPRESS_CTL 0x940
199 #define PCIE_GLI_9767_SD_EXPRESS_CTL_SDEI_EXE BIT(0)
200 #define PCIE_GLI_9767_SD_EXPRESS_CTL_SD_EXPRESS_MODE BIT(1)
201
202 #define PCIE_GLI_9767_SD_DATA_MULTI_CTL 0x944
203 #define PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME GENMASK(23, 16)
204 #define PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME_VALUE 0x64
205
206 #define PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2 0x950
207 #define PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2_SDEI_COMPLETE BIT(0)
208
209 #define PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2 0x954
210 #define PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2_SDEI_COMPLETE_STATUS_EN BIT(0)
211
212 #define PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2 0x958
213 #define PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2_SDEI_COMPLETE_SIGNAL_EN BIT(0)
214
215 #define GLI_MAX_TUNING_LOOP 40
216
217 /* Genesys Logic chipset */
sdhci_gli_mask_replay_timer_timeout(struct pci_dev * pdev)218 static void sdhci_gli_mask_replay_timer_timeout(struct pci_dev *pdev)
219 {
220 int aer;
221 u32 value;
222
223 /* mask the replay timer timeout of AER */
224 aer = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR);
225 if (aer) {
226 pci_read_config_dword(pdev, aer + PCI_ERR_COR_MASK, &value);
227 value |= PCI_ERR_COR_REP_TIMER;
228 pci_write_config_dword(pdev, aer + PCI_ERR_COR_MASK, value);
229 }
230 }
231
gl9750_wt_on(struct sdhci_host * host)232 static inline void gl9750_wt_on(struct sdhci_host *host)
233 {
234 u32 wt_value;
235 u32 wt_enable;
236
237 wt_value = sdhci_readl(host, SDHCI_GLI_9750_WT);
238 wt_enable = FIELD_GET(SDHCI_GLI_9750_WT_EN, wt_value);
239
240 if (wt_enable == GLI_9750_WT_EN_ON)
241 return;
242
243 wt_value &= ~SDHCI_GLI_9750_WT_EN;
244 wt_value |= FIELD_PREP(SDHCI_GLI_9750_WT_EN, GLI_9750_WT_EN_ON);
245
246 sdhci_writel(host, wt_value, SDHCI_GLI_9750_WT);
247 }
248
gl9750_wt_off(struct sdhci_host * host)249 static inline void gl9750_wt_off(struct sdhci_host *host)
250 {
251 u32 wt_value;
252 u32 wt_enable;
253
254 wt_value = sdhci_readl(host, SDHCI_GLI_9750_WT);
255 wt_enable = FIELD_GET(SDHCI_GLI_9750_WT_EN, wt_value);
256
257 if (wt_enable == GLI_9750_WT_EN_OFF)
258 return;
259
260 wt_value &= ~SDHCI_GLI_9750_WT_EN;
261 wt_value |= FIELD_PREP(SDHCI_GLI_9750_WT_EN, GLI_9750_WT_EN_OFF);
262
263 sdhci_writel(host, wt_value, SDHCI_GLI_9750_WT);
264 }
265
gli_set_9750(struct sdhci_host * host)266 static void gli_set_9750(struct sdhci_host *host)
267 {
268 u32 driving_value;
269 u32 pll_value;
270 u32 sw_ctrl_value;
271 u32 misc_value;
272 u32 parameter_value;
273 u32 control_value;
274 u16 ctrl2;
275
276 gl9750_wt_on(host);
277
278 driving_value = sdhci_readl(host, SDHCI_GLI_9750_DRIVING);
279 pll_value = sdhci_readl(host, SDHCI_GLI_9750_PLL);
280 sw_ctrl_value = sdhci_readl(host, SDHCI_GLI_9750_SW_CTRL);
281 misc_value = sdhci_readl(host, SDHCI_GLI_9750_MISC);
282 parameter_value = sdhci_readl(host, SDHCI_GLI_9750_TUNING_PARAMETERS);
283 control_value = sdhci_readl(host, SDHCI_GLI_9750_TUNING_CONTROL);
284
285 driving_value &= ~(SDHCI_GLI_9750_DRIVING_1);
286 driving_value &= ~(SDHCI_GLI_9750_DRIVING_2);
287 driving_value |= FIELD_PREP(SDHCI_GLI_9750_DRIVING_1,
288 GLI_9750_DRIVING_1_VALUE);
289 driving_value |= FIELD_PREP(SDHCI_GLI_9750_DRIVING_2,
290 GLI_9750_DRIVING_2_VALUE);
291 driving_value &= ~(SDHCI_GLI_9750_SEL_1|SDHCI_GLI_9750_SEL_2|SDHCI_GLI_9750_ALL_RST);
292 driving_value |= SDHCI_GLI_9750_SEL_2;
293 sdhci_writel(host, driving_value, SDHCI_GLI_9750_DRIVING);
294
295 sw_ctrl_value &= ~SDHCI_GLI_9750_SW_CTRL_4;
296 sw_ctrl_value |= FIELD_PREP(SDHCI_GLI_9750_SW_CTRL_4,
297 GLI_9750_SW_CTRL_4_VALUE);
298 sdhci_writel(host, sw_ctrl_value, SDHCI_GLI_9750_SW_CTRL);
299
300 /* reset the tuning flow after reinit and before starting tuning */
301 pll_value &= ~SDHCI_GLI_9750_PLL_TX2_INV;
302 pll_value &= ~SDHCI_GLI_9750_PLL_TX2_DLY;
303 pll_value |= FIELD_PREP(SDHCI_GLI_9750_PLL_TX2_INV,
304 GLI_9750_PLL_TX2_INV_VALUE);
305 pll_value |= FIELD_PREP(SDHCI_GLI_9750_PLL_TX2_DLY,
306 GLI_9750_PLL_TX2_DLY_VALUE);
307
308 misc_value &= ~SDHCI_GLI_9750_MISC_TX1_INV;
309 misc_value &= ~SDHCI_GLI_9750_MISC_RX_INV;
310 misc_value &= ~SDHCI_GLI_9750_MISC_TX1_DLY;
311 misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_TX1_INV,
312 GLI_9750_MISC_TX1_INV_VALUE);
313 misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_RX_INV,
314 GLI_9750_MISC_RX_INV_VALUE);
315 misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_TX1_DLY,
316 GLI_9750_MISC_TX1_DLY_VALUE);
317
318 parameter_value &= ~SDHCI_GLI_9750_TUNING_PARAMETERS_RX_DLY;
319 parameter_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_PARAMETERS_RX_DLY,
320 GLI_9750_TUNING_PARAMETERS_RX_DLY_VALUE);
321
322 control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_1;
323 control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_2;
324 control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_1,
325 GLI_9750_TUNING_CONTROL_GLITCH_1_VALUE);
326 control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_2,
327 GLI_9750_TUNING_CONTROL_GLITCH_2_VALUE);
328
329 sdhci_writel(host, pll_value, SDHCI_GLI_9750_PLL);
330 sdhci_writel(host, misc_value, SDHCI_GLI_9750_MISC);
331
332 /* disable tuned clk */
333 ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
334 ctrl2 &= ~SDHCI_CTRL_TUNED_CLK;
335 sdhci_writew(host, ctrl2, SDHCI_HOST_CONTROL2);
336
337 /* enable tuning parameters control */
338 control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_EN;
339 control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_EN,
340 GLI_9750_TUNING_CONTROL_EN_ON);
341 sdhci_writel(host, control_value, SDHCI_GLI_9750_TUNING_CONTROL);
342
343 /* write tuning parameters */
344 sdhci_writel(host, parameter_value, SDHCI_GLI_9750_TUNING_PARAMETERS);
345
346 /* disable tuning parameters control */
347 control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_EN;
348 control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_EN,
349 GLI_9750_TUNING_CONTROL_EN_OFF);
350 sdhci_writel(host, control_value, SDHCI_GLI_9750_TUNING_CONTROL);
351
352 /* clear tuned clk */
353 ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
354 ctrl2 &= ~SDHCI_CTRL_TUNED_CLK;
355 sdhci_writew(host, ctrl2, SDHCI_HOST_CONTROL2);
356
357 gl9750_wt_off(host);
358 }
359
gli_set_9750_rx_inv(struct sdhci_host * host,bool b)360 static void gli_set_9750_rx_inv(struct sdhci_host *host, bool b)
361 {
362 u32 misc_value;
363
364 gl9750_wt_on(host);
365
366 misc_value = sdhci_readl(host, SDHCI_GLI_9750_MISC);
367 misc_value &= ~SDHCI_GLI_9750_MISC_RX_INV;
368 if (b) {
369 misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_RX_INV,
370 GLI_9750_MISC_RX_INV_ON);
371 } else {
372 misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_RX_INV,
373 GLI_9750_MISC_RX_INV_OFF);
374 }
375 sdhci_writel(host, misc_value, SDHCI_GLI_9750_MISC);
376
377 gl9750_wt_off(host);
378 }
379
__sdhci_execute_tuning_9750(struct sdhci_host * host,u32 opcode)380 static int __sdhci_execute_tuning_9750(struct sdhci_host *host, u32 opcode)
381 {
382 int i;
383 int rx_inv;
384
385 for (rx_inv = 0; rx_inv < 2; rx_inv++) {
386 gli_set_9750_rx_inv(host, !!rx_inv);
387 sdhci_start_tuning(host);
388
389 for (i = 0; i < GLI_MAX_TUNING_LOOP; i++) {
390 u16 ctrl;
391
392 sdhci_send_tuning(host, opcode);
393
394 if (!host->tuning_done) {
395 sdhci_abort_tuning(host, opcode);
396 break;
397 }
398
399 ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
400 if (!(ctrl & SDHCI_CTRL_EXEC_TUNING)) {
401 if (ctrl & SDHCI_CTRL_TUNED_CLK)
402 return 0; /* Success! */
403 break;
404 }
405 }
406 }
407 if (!host->tuning_done) {
408 pr_info("%s: Tuning timeout, falling back to fixed sampling clock\n",
409 mmc_hostname(host->mmc));
410 return -ETIMEDOUT;
411 }
412
413 pr_info("%s: Tuning failed, falling back to fixed sampling clock\n",
414 mmc_hostname(host->mmc));
415 sdhci_reset_tuning(host);
416
417 return -EAGAIN;
418 }
419
gl9750_execute_tuning(struct sdhci_host * host,u32 opcode)420 static int gl9750_execute_tuning(struct sdhci_host *host, u32 opcode)
421 {
422 host->mmc->retune_period = 0;
423 if (host->tuning_mode == SDHCI_TUNING_MODE_1)
424 host->mmc->retune_period = host->tuning_count;
425
426 gli_set_9750(host);
427 host->tuning_err = __sdhci_execute_tuning_9750(host, opcode);
428 sdhci_end_tuning(host);
429
430 return 0;
431 }
432
gl9750_disable_ssc_pll(struct sdhci_host * host)433 static void gl9750_disable_ssc_pll(struct sdhci_host *host)
434 {
435 u32 pll;
436
437 gl9750_wt_on(host);
438 pll = sdhci_readl(host, SDHCI_GLI_9750_PLL);
439 pll &= ~(SDHCI_GLI_9750_PLL_DIR | SDHCI_GLI_9750_PLLSSC_EN);
440 sdhci_writel(host, pll, SDHCI_GLI_9750_PLL);
441 gl9750_wt_off(host);
442 }
443
gl9750_set_pll(struct sdhci_host * host,u8 dir,u16 ldiv,u8 pdiv)444 static void gl9750_set_pll(struct sdhci_host *host, u8 dir, u16 ldiv, u8 pdiv)
445 {
446 u32 pll;
447
448 gl9750_wt_on(host);
449 pll = sdhci_readl(host, SDHCI_GLI_9750_PLL);
450 pll &= ~(SDHCI_GLI_9750_PLL_LDIV |
451 SDHCI_GLI_9750_PLL_PDIV |
452 SDHCI_GLI_9750_PLL_DIR);
453 pll |= FIELD_PREP(SDHCI_GLI_9750_PLL_LDIV, ldiv) |
454 FIELD_PREP(SDHCI_GLI_9750_PLL_PDIV, pdiv) |
455 FIELD_PREP(SDHCI_GLI_9750_PLL_DIR, dir);
456 sdhci_writel(host, pll, SDHCI_GLI_9750_PLL);
457 gl9750_wt_off(host);
458
459 /* wait for pll stable */
460 mdelay(1);
461 }
462
gl9750_ssc_enable(struct sdhci_host * host)463 static bool gl9750_ssc_enable(struct sdhci_host *host)
464 {
465 u32 misc;
466 u8 off;
467
468 gl9750_wt_on(host);
469 misc = sdhci_readl(host, SDHCI_GLI_9750_MISC);
470 off = FIELD_GET(SDHCI_GLI_9750_MISC_SSC_OFF, misc);
471 gl9750_wt_off(host);
472
473 return !off;
474 }
475
gl9750_set_ssc(struct sdhci_host * host,u8 enable,u8 step,u16 ppm)476 static void gl9750_set_ssc(struct sdhci_host *host, u8 enable, u8 step, u16 ppm)
477 {
478 u32 pll;
479 u32 ssc;
480
481 gl9750_wt_on(host);
482 pll = sdhci_readl(host, SDHCI_GLI_9750_PLL);
483 ssc = sdhci_readl(host, SDHCI_GLI_9750_PLLSSC);
484 pll &= ~(SDHCI_GLI_9750_PLLSSC_STEP |
485 SDHCI_GLI_9750_PLLSSC_EN);
486 ssc &= ~SDHCI_GLI_9750_PLLSSC_PPM;
487 pll |= FIELD_PREP(SDHCI_GLI_9750_PLLSSC_STEP, step) |
488 FIELD_PREP(SDHCI_GLI_9750_PLLSSC_EN, enable);
489 ssc |= FIELD_PREP(SDHCI_GLI_9750_PLLSSC_PPM, ppm);
490 sdhci_writel(host, ssc, SDHCI_GLI_9750_PLLSSC);
491 sdhci_writel(host, pll, SDHCI_GLI_9750_PLL);
492 gl9750_wt_off(host);
493 }
494
gl9750_set_ssc_pll_205mhz(struct sdhci_host * host)495 static void gl9750_set_ssc_pll_205mhz(struct sdhci_host *host)
496 {
497 bool enable = gl9750_ssc_enable(host);
498
499 /* set pll to 205MHz and ssc */
500 gl9750_set_ssc(host, enable, 0xF, 0x5A1D);
501 gl9750_set_pll(host, 0x1, 0x246, 0x0);
502 }
503
gl9750_set_ssc_pll_100mhz(struct sdhci_host * host)504 static void gl9750_set_ssc_pll_100mhz(struct sdhci_host *host)
505 {
506 bool enable = gl9750_ssc_enable(host);
507
508 /* set pll to 100MHz and ssc */
509 gl9750_set_ssc(host, enable, 0xE, 0x51EC);
510 gl9750_set_pll(host, 0x1, 0x244, 0x1);
511 }
512
gl9750_set_ssc_pll_50mhz(struct sdhci_host * host)513 static void gl9750_set_ssc_pll_50mhz(struct sdhci_host *host)
514 {
515 bool enable = gl9750_ssc_enable(host);
516
517 /* set pll to 50MHz and ssc */
518 gl9750_set_ssc(host, enable, 0xE, 0x51EC);
519 gl9750_set_pll(host, 0x1, 0x244, 0x3);
520 }
521
sdhci_gl9750_set_clock(struct sdhci_host * host,unsigned int clock)522 static void sdhci_gl9750_set_clock(struct sdhci_host *host, unsigned int clock)
523 {
524 struct mmc_ios *ios = &host->mmc->ios;
525 u16 clk;
526
527 host->mmc->actual_clock = 0;
528
529 gl9750_disable_ssc_pll(host);
530 sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
531
532 if (clock == 0)
533 return;
534
535 clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
536 if (clock == 200000000 && ios->timing == MMC_TIMING_UHS_SDR104) {
537 host->mmc->actual_clock = 205000000;
538 gl9750_set_ssc_pll_205mhz(host);
539 } else if (clock == 100000000) {
540 gl9750_set_ssc_pll_100mhz(host);
541 } else if (clock == 50000000) {
542 gl9750_set_ssc_pll_50mhz(host);
543 }
544
545 sdhci_enable_clk(host, clk);
546 }
547
gl9750_hw_setting(struct sdhci_host * host)548 static void gl9750_hw_setting(struct sdhci_host *host)
549 {
550 struct sdhci_pci_slot *slot = sdhci_priv(host);
551 struct pci_dev *pdev;
552 u32 value;
553
554 pdev = slot->chip->pdev;
555
556 gl9750_wt_on(host);
557
558 value = sdhci_readl(host, SDHCI_GLI_9750_CFG2);
559 value &= ~SDHCI_GLI_9750_CFG2_L1DLY;
560 /* set ASPM L1 entry delay to 7.9us */
561 value |= FIELD_PREP(SDHCI_GLI_9750_CFG2_L1DLY,
562 GLI_9750_CFG2_L1DLY_VALUE);
563 sdhci_writel(host, value, SDHCI_GLI_9750_CFG2);
564
565 /* toggle PM state to allow GL9750 to enter ASPM L1.2 */
566 pci_set_power_state(pdev, PCI_D3hot);
567 pci_set_power_state(pdev, PCI_D0);
568
569 /* mask the replay timer timeout of AER */
570 sdhci_gli_mask_replay_timer_timeout(pdev);
571
572 gl9750_wt_off(host);
573 }
574
gli_pcie_enable_msi(struct sdhci_pci_slot * slot)575 static void gli_pcie_enable_msi(struct sdhci_pci_slot *slot)
576 {
577 int ret;
578
579 ret = pci_alloc_irq_vectors(slot->chip->pdev, 1, 1,
580 PCI_IRQ_MSI | PCI_IRQ_MSIX);
581 if (ret < 0) {
582 pr_warn("%s: enable PCI MSI failed, error=%d\n",
583 mmc_hostname(slot->host->mmc), ret);
584 return;
585 }
586
587 slot->host->irq = pci_irq_vector(slot->chip->pdev, 0);
588 }
589
gl9755_wt_on(struct pci_dev * pdev)590 static inline void gl9755_wt_on(struct pci_dev *pdev)
591 {
592 u32 wt_value;
593 u32 wt_enable;
594
595 pci_read_config_dword(pdev, PCI_GLI_9755_WT, &wt_value);
596 wt_enable = FIELD_GET(PCI_GLI_9755_WT_EN, wt_value);
597
598 if (wt_enable == GLI_9755_WT_EN_ON)
599 return;
600
601 wt_value &= ~PCI_GLI_9755_WT_EN;
602 wt_value |= FIELD_PREP(PCI_GLI_9755_WT_EN, GLI_9755_WT_EN_ON);
603
604 pci_write_config_dword(pdev, PCI_GLI_9755_WT, wt_value);
605 }
606
gl9755_wt_off(struct pci_dev * pdev)607 static inline void gl9755_wt_off(struct pci_dev *pdev)
608 {
609 u32 wt_value;
610 u32 wt_enable;
611
612 pci_read_config_dword(pdev, PCI_GLI_9755_WT, &wt_value);
613 wt_enable = FIELD_GET(PCI_GLI_9755_WT_EN, wt_value);
614
615 if (wt_enable == GLI_9755_WT_EN_OFF)
616 return;
617
618 wt_value &= ~PCI_GLI_9755_WT_EN;
619 wt_value |= FIELD_PREP(PCI_GLI_9755_WT_EN, GLI_9755_WT_EN_OFF);
620
621 pci_write_config_dword(pdev, PCI_GLI_9755_WT, wt_value);
622 }
623
gl9755_disable_ssc_pll(struct pci_dev * pdev)624 static void gl9755_disable_ssc_pll(struct pci_dev *pdev)
625 {
626 u32 pll;
627
628 gl9755_wt_on(pdev);
629 pci_read_config_dword(pdev, PCI_GLI_9755_PLL, &pll);
630 pll &= ~(PCI_GLI_9755_PLL_DIR | PCI_GLI_9755_PLLSSC_EN);
631 pci_write_config_dword(pdev, PCI_GLI_9755_PLL, pll);
632 gl9755_wt_off(pdev);
633 }
634
gl9755_set_pll(struct pci_dev * pdev,u8 dir,u16 ldiv,u8 pdiv)635 static void gl9755_set_pll(struct pci_dev *pdev, u8 dir, u16 ldiv, u8 pdiv)
636 {
637 u32 pll;
638
639 gl9755_wt_on(pdev);
640 pci_read_config_dword(pdev, PCI_GLI_9755_PLL, &pll);
641 pll &= ~(PCI_GLI_9755_PLL_LDIV |
642 PCI_GLI_9755_PLL_PDIV |
643 PCI_GLI_9755_PLL_DIR);
644 pll |= FIELD_PREP(PCI_GLI_9755_PLL_LDIV, ldiv) |
645 FIELD_PREP(PCI_GLI_9755_PLL_PDIV, pdiv) |
646 FIELD_PREP(PCI_GLI_9755_PLL_DIR, dir);
647 pci_write_config_dword(pdev, PCI_GLI_9755_PLL, pll);
648 gl9755_wt_off(pdev);
649
650 /* wait for pll stable */
651 mdelay(1);
652 }
653
gl9755_ssc_enable(struct pci_dev * pdev)654 static bool gl9755_ssc_enable(struct pci_dev *pdev)
655 {
656 u32 misc;
657 u8 off;
658
659 gl9755_wt_on(pdev);
660 pci_read_config_dword(pdev, PCI_GLI_9755_MISC, &misc);
661 off = FIELD_GET(PCI_GLI_9755_MISC_SSC_OFF, misc);
662 gl9755_wt_off(pdev);
663
664 return !off;
665 }
666
gl9755_set_ssc(struct pci_dev * pdev,u8 enable,u8 step,u16 ppm)667 static void gl9755_set_ssc(struct pci_dev *pdev, u8 enable, u8 step, u16 ppm)
668 {
669 u32 pll;
670 u32 ssc;
671
672 gl9755_wt_on(pdev);
673 pci_read_config_dword(pdev, PCI_GLI_9755_PLL, &pll);
674 pci_read_config_dword(pdev, PCI_GLI_9755_PLLSSC, &ssc);
675 pll &= ~(PCI_GLI_9755_PLLSSC_STEP |
676 PCI_GLI_9755_PLLSSC_EN);
677 ssc &= ~PCI_GLI_9755_PLLSSC_PPM;
678 pll |= FIELD_PREP(PCI_GLI_9755_PLLSSC_STEP, step) |
679 FIELD_PREP(PCI_GLI_9755_PLLSSC_EN, enable);
680 ssc |= FIELD_PREP(PCI_GLI_9755_PLLSSC_PPM, ppm);
681 pci_write_config_dword(pdev, PCI_GLI_9755_PLLSSC, ssc);
682 pci_write_config_dword(pdev, PCI_GLI_9755_PLL, pll);
683 gl9755_wt_off(pdev);
684 }
685
gl9755_set_ssc_pll_205mhz(struct pci_dev * pdev)686 static void gl9755_set_ssc_pll_205mhz(struct pci_dev *pdev)
687 {
688 bool enable = gl9755_ssc_enable(pdev);
689
690 /* set pll to 205MHz and ssc */
691 gl9755_set_ssc(pdev, enable, 0xF, 0x5A1D);
692 gl9755_set_pll(pdev, 0x1, 0x246, 0x0);
693 }
694
gl9755_set_ssc_pll_100mhz(struct pci_dev * pdev)695 static void gl9755_set_ssc_pll_100mhz(struct pci_dev *pdev)
696 {
697 bool enable = gl9755_ssc_enable(pdev);
698
699 /* set pll to 100MHz and ssc */
700 gl9755_set_ssc(pdev, enable, 0xE, 0x51EC);
701 gl9755_set_pll(pdev, 0x1, 0x244, 0x1);
702 }
703
gl9755_set_ssc_pll_50mhz(struct pci_dev * pdev)704 static void gl9755_set_ssc_pll_50mhz(struct pci_dev *pdev)
705 {
706 bool enable = gl9755_ssc_enable(pdev);
707
708 /* set pll to 50MHz and ssc */
709 gl9755_set_ssc(pdev, enable, 0xE, 0x51EC);
710 gl9755_set_pll(pdev, 0x1, 0x244, 0x3);
711 }
712
sdhci_gl9755_set_clock(struct sdhci_host * host,unsigned int clock)713 static void sdhci_gl9755_set_clock(struct sdhci_host *host, unsigned int clock)
714 {
715 struct sdhci_pci_slot *slot = sdhci_priv(host);
716 struct mmc_ios *ios = &host->mmc->ios;
717 struct pci_dev *pdev;
718 u16 clk;
719
720 pdev = slot->chip->pdev;
721 host->mmc->actual_clock = 0;
722
723 gl9755_disable_ssc_pll(pdev);
724 sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
725
726 if (clock == 0)
727 return;
728
729 clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
730 if (clock == 200000000 && ios->timing == MMC_TIMING_UHS_SDR104) {
731 host->mmc->actual_clock = 205000000;
732 gl9755_set_ssc_pll_205mhz(pdev);
733 } else if (clock == 100000000) {
734 gl9755_set_ssc_pll_100mhz(pdev);
735 } else if (clock == 50000000) {
736 gl9755_set_ssc_pll_50mhz(pdev);
737 }
738
739 sdhci_enable_clk(host, clk);
740 }
741
gl9755_hw_setting(struct sdhci_pci_slot * slot)742 static void gl9755_hw_setting(struct sdhci_pci_slot *slot)
743 {
744 struct pci_dev *pdev = slot->chip->pdev;
745 u32 value;
746
747 gl9755_wt_on(pdev);
748
749 pci_read_config_dword(pdev, PCI_GLI_9755_PECONF, &value);
750 /*
751 * Apple ARM64 platforms using these chips may have
752 * inverted CD/WP detection.
753 */
754 if (of_property_read_bool(pdev->dev.of_node, "cd-inverted"))
755 value |= PCI_GLI_9755_INVERT_CD;
756 if (of_property_read_bool(pdev->dev.of_node, "wp-inverted"))
757 value |= PCI_GLI_9755_INVERT_WP;
758 value &= ~PCI_GLI_9755_LFCLK;
759 value &= ~PCI_GLI_9755_DMACLK;
760 pci_write_config_dword(pdev, PCI_GLI_9755_PECONF, value);
761
762 /* enable short circuit protection */
763 pci_read_config_dword(pdev, PCI_GLI_9755_SerDes, &value);
764 value &= ~PCI_GLI_9755_SCP_DIS;
765 pci_write_config_dword(pdev, PCI_GLI_9755_SerDes, value);
766
767 pci_read_config_dword(pdev, PCI_GLI_9755_CFG2, &value);
768 value &= ~PCI_GLI_9755_CFG2_L1DLY;
769 /* set ASPM L1 entry delay to 7.9us */
770 value |= FIELD_PREP(PCI_GLI_9755_CFG2_L1DLY,
771 GLI_9755_CFG2_L1DLY_VALUE);
772 pci_write_config_dword(pdev, PCI_GLI_9755_CFG2, value);
773
774 /* toggle PM state to allow GL9755 to enter ASPM L1.2 */
775 pci_set_power_state(pdev, PCI_D3hot);
776 pci_set_power_state(pdev, PCI_D0);
777
778 /* mask the replay timer timeout of AER */
779 sdhci_gli_mask_replay_timer_timeout(pdev);
780
781 gl9755_wt_off(pdev);
782 }
783
gl9767_vhs_read(struct pci_dev * pdev)784 static inline void gl9767_vhs_read(struct pci_dev *pdev)
785 {
786 u32 vhs_enable;
787 u32 vhs_value;
788
789 pci_read_config_dword(pdev, PCIE_GLI_9767_VHS, &vhs_value);
790 vhs_enable = FIELD_GET(GLI_9767_VHS_REV, vhs_value);
791
792 if (vhs_enable == GLI_9767_VHS_REV_R)
793 return;
794
795 vhs_value &= ~GLI_9767_VHS_REV;
796 vhs_value |= FIELD_PREP(GLI_9767_VHS_REV, GLI_9767_VHS_REV_R);
797
798 pci_write_config_dword(pdev, PCIE_GLI_9767_VHS, vhs_value);
799 }
800
gl9767_vhs_write(struct pci_dev * pdev)801 static inline void gl9767_vhs_write(struct pci_dev *pdev)
802 {
803 u32 vhs_enable;
804 u32 vhs_value;
805
806 pci_read_config_dword(pdev, PCIE_GLI_9767_VHS, &vhs_value);
807 vhs_enable = FIELD_GET(GLI_9767_VHS_REV, vhs_value);
808
809 if (vhs_enable == GLI_9767_VHS_REV_W)
810 return;
811
812 vhs_value &= ~GLI_9767_VHS_REV;
813 vhs_value |= FIELD_PREP(GLI_9767_VHS_REV, GLI_9767_VHS_REV_W);
814
815 pci_write_config_dword(pdev, PCIE_GLI_9767_VHS, vhs_value);
816 }
817
gl9767_ssc_enable(struct pci_dev * pdev)818 static bool gl9767_ssc_enable(struct pci_dev *pdev)
819 {
820 u32 value;
821 u8 enable;
822
823 gl9767_vhs_write(pdev);
824
825 pci_read_config_dword(pdev, PCIE_GLI_9767_COM_MAILBOX, &value);
826 enable = FIELD_GET(PCIE_GLI_9767_COM_MAILBOX_SSC_EN, value);
827
828 gl9767_vhs_read(pdev);
829
830 return enable;
831 }
832
gl9767_set_ssc(struct pci_dev * pdev,u8 enable,u8 step,u16 ppm)833 static void gl9767_set_ssc(struct pci_dev *pdev, u8 enable, u8 step, u16 ppm)
834 {
835 u32 pll;
836 u32 ssc;
837
838 gl9767_vhs_write(pdev);
839
840 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, &pll);
841 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL2, &ssc);
842 pll &= ~(PCIE_GLI_9767_SD_PLL_CTL_SSC_STEP_SETTING |
843 PCIE_GLI_9767_SD_PLL_CTL_SSC_EN);
844 ssc &= ~PCIE_GLI_9767_SD_PLL_CTL2_PLLSSC_PPM;
845 pll |= FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_SSC_STEP_SETTING, step) |
846 FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_SSC_EN, enable);
847 ssc |= FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL2_PLLSSC_PPM, ppm);
848 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL2, ssc);
849 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, pll);
850
851 gl9767_vhs_read(pdev);
852 }
853
gl9767_set_pll(struct pci_dev * pdev,u8 dir,u16 ldiv,u8 pdiv)854 static void gl9767_set_pll(struct pci_dev *pdev, u8 dir, u16 ldiv, u8 pdiv)
855 {
856 u32 pll;
857
858 gl9767_vhs_write(pdev);
859
860 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, &pll);
861 pll &= ~(PCIE_GLI_9767_SD_PLL_CTL_PLL_LDIV |
862 PCIE_GLI_9767_SD_PLL_CTL_PLL_PDIV |
863 PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN);
864 pll |= FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_PLL_LDIV, ldiv) |
865 FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_PLL_PDIV, pdiv) |
866 FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN, dir);
867 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, pll);
868
869 gl9767_vhs_read(pdev);
870
871 /* wait for pll stable */
872 usleep_range(1000, 1100);
873 }
874
gl9767_set_ssc_pll_205mhz(struct pci_dev * pdev)875 static void gl9767_set_ssc_pll_205mhz(struct pci_dev *pdev)
876 {
877 bool enable = gl9767_ssc_enable(pdev);
878
879 /* set pll to 205MHz and ssc */
880 gl9767_set_ssc(pdev, enable, 0x1F, 0xF5C3);
881 gl9767_set_pll(pdev, 0x1, 0x246, 0x0);
882 }
883
gl9767_disable_ssc_pll(struct pci_dev * pdev)884 static void gl9767_disable_ssc_pll(struct pci_dev *pdev)
885 {
886 u32 pll;
887
888 gl9767_vhs_write(pdev);
889
890 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, &pll);
891 pll &= ~(PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN | PCIE_GLI_9767_SD_PLL_CTL_SSC_EN);
892 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, pll);
893
894 gl9767_vhs_read(pdev);
895 }
896
gl9767_set_low_power_negotiation(struct pci_dev * pdev,bool enable)897 static void gl9767_set_low_power_negotiation(struct pci_dev *pdev, bool enable)
898 {
899 u32 value;
900
901 gl9767_vhs_write(pdev);
902
903 pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
904 if (enable)
905 value &= ~PCIE_GLI_9767_CFG_LOW_PWR_OFF;
906 else
907 value |= PCIE_GLI_9767_CFG_LOW_PWR_OFF;
908 pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
909
910 gl9767_vhs_read(pdev);
911 }
912
sdhci_gl9767_set_clock(struct sdhci_host * host,unsigned int clock)913 static void sdhci_gl9767_set_clock(struct sdhci_host *host, unsigned int clock)
914 {
915 struct sdhci_pci_slot *slot = sdhci_priv(host);
916 struct mmc_ios *ios = &host->mmc->ios;
917 struct pci_dev *pdev;
918 u16 clk;
919
920 pdev = slot->chip->pdev;
921 host->mmc->actual_clock = 0;
922
923 gl9767_set_low_power_negotiation(pdev, false);
924 gl9767_disable_ssc_pll(pdev);
925 sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
926
927 if (clock == 0) {
928 gl9767_set_low_power_negotiation(pdev, true);
929 return;
930 }
931
932 clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
933 if (clock == 200000000 && ios->timing == MMC_TIMING_UHS_SDR104) {
934 host->mmc->actual_clock = 205000000;
935 gl9767_set_ssc_pll_205mhz(pdev);
936 }
937
938 sdhci_enable_clk(host, clk);
939 gl9767_set_low_power_negotiation(pdev, true);
940 }
941
gli_set_9767(struct sdhci_host * host)942 static void gli_set_9767(struct sdhci_host *host)
943 {
944 u32 value;
945
946 value = sdhci_readl(host, SDHCI_GLI_9767_GM_BURST_SIZE);
947 value &= ~SDHCI_GLI_9767_GM_BURST_SIZE_AXI_ALWAYS_SET;
948 sdhci_writel(host, value, SDHCI_GLI_9767_GM_BURST_SIZE);
949 }
950
gl9767_hw_setting(struct sdhci_pci_slot * slot)951 static void gl9767_hw_setting(struct sdhci_pci_slot *slot)
952 {
953 struct pci_dev *pdev = slot->chip->pdev;
954 u32 value;
955
956 gl9767_vhs_write(pdev);
957
958 pci_read_config_dword(pdev, PCIE_GLI_9767_PWR_MACRO_CTL, &value);
959 value &= ~(PCIE_GLI_9767_PWR_MACRO_CTL_LOW_VOLTAGE |
960 PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE |
961 PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL);
962
963 value |= PCIE_GLI_9767_PWR_MACRO_CTL_LOW_VOLTAGE |
964 FIELD_PREP(PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE,
965 PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE_VALUE) |
966 FIELD_PREP(PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL,
967 PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL_VALUE);
968 pci_write_config_dword(pdev, PCIE_GLI_9767_PWR_MACRO_CTL, value);
969
970 pci_read_config_dword(pdev, PCIE_GLI_9767_SCR, &value);
971 value &= ~(PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE0 |
972 PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE1 |
973 PCIE_GLI_9767_SCR_CFG_RST_DATA_LINK_DOWN);
974
975 value |= PCIE_GLI_9767_SCR_AUTO_AXI_W_BURST |
976 PCIE_GLI_9767_SCR_AUTO_AXI_R_BURST |
977 PCIE_GLI_9767_SCR_AXI_REQ |
978 PCIE_GLI_9767_SCR_CARD_DET_PWR_SAVING_EN |
979 PCIE_GLI_9767_SCR_CORE_PWR_D3_OFF;
980 pci_write_config_dword(pdev, PCIE_GLI_9767_SCR, value);
981
982 gl9767_vhs_read(pdev);
983 }
984
sdhci_gl9767_reset(struct sdhci_host * host,u8 mask)985 static void sdhci_gl9767_reset(struct sdhci_host *host, u8 mask)
986 {
987 sdhci_reset(host, mask);
988 gli_set_9767(host);
989 }
990
gl9767_init_sd_express(struct mmc_host * mmc,struct mmc_ios * ios)991 static int gl9767_init_sd_express(struct mmc_host *mmc, struct mmc_ios *ios)
992 {
993 struct sdhci_host *host = mmc_priv(mmc);
994 struct sdhci_pci_slot *slot = sdhci_priv(host);
995 struct pci_dev *pdev;
996 u32 value;
997 int i;
998
999 pdev = slot->chip->pdev;
1000
1001 if (mmc->ops->get_ro(mmc)) {
1002 mmc->ios.timing &= ~(MMC_TIMING_SD_EXP | MMC_TIMING_SD_EXP_1_2V);
1003 return 0;
1004 }
1005
1006 gl9767_vhs_write(pdev);
1007
1008 pci_read_config_dword(pdev, PCIE_GLI_9767_COMBO_MUX_CTL, &value);
1009 value &= ~(PCIE_GLI_9767_COMBO_MUX_CTL_RST_EN | PCIE_GLI_9767_COMBO_MUX_CTL_WAIT_PERST_EN);
1010 pci_write_config_dword(pdev, PCIE_GLI_9767_COMBO_MUX_CTL, value);
1011
1012 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, &value);
1013 value &= ~PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME;
1014 value |= FIELD_PREP(PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME,
1015 PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME_VALUE);
1016 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, value);
1017
1018 pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2, &value);
1019 value |= PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2_SDEI_COMPLETE;
1020 pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2, value);
1021
1022 pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2, &value);
1023 value |= PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2_SDEI_COMPLETE_STATUS_EN;
1024 pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2, value);
1025
1026 pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2, &value);
1027 value |= PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2_SDEI_COMPLETE_SIGNAL_EN;
1028 pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2, value);
1029
1030 pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
1031 value |= PCIE_GLI_9767_CFG_LOW_PWR_OFF;
1032 pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
1033
1034 value = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1035 value &= ~(SDHCI_CLOCK_CARD_EN | SDHCI_CLOCK_PLL_EN);
1036 sdhci_writew(host, value, SDHCI_CLOCK_CONTROL);
1037
1038 value = sdhci_readb(host, SDHCI_POWER_CONTROL);
1039 value |= (SDHCI_VDD2_POWER_180 | SDHCI_VDD2_POWER_ON);
1040 sdhci_writeb(host, value, SDHCI_POWER_CONTROL);
1041
1042 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, &value);
1043 value |= PCIE_GLI_9767_SD_EXPRESS_CTL_SDEI_EXE;
1044 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, value);
1045
1046 for (i = 0; i < 2; i++) {
1047 usleep_range(10000, 10100);
1048 pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2, &value);
1049 if (value & PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2_SDEI_COMPLETE) {
1050 pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2,
1051 value);
1052 break;
1053 }
1054 }
1055
1056 pci_read_config_dword(pdev, PCIE_GLI_9767_SDHC_CAP, &value);
1057 if (value & PCIE_GLI_9767_SDHC_CAP_SDEI_RESULT) {
1058 pci_read_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, &value);
1059 value |= PCIE_GLI_9767_SD_EXPRESS_CTL_SD_EXPRESS_MODE;
1060 pci_write_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, value);
1061 } else {
1062 mmc->ios.timing &= ~(MMC_TIMING_SD_EXP | MMC_TIMING_SD_EXP_1_2V);
1063
1064 value = sdhci_readb(host, SDHCI_POWER_CONTROL);
1065 value &= ~(SDHCI_VDD2_POWER_180 | SDHCI_VDD2_POWER_ON);
1066 sdhci_writeb(host, value, SDHCI_POWER_CONTROL);
1067
1068 value = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1069 value |= (SDHCI_CLOCK_CARD_EN | SDHCI_CLOCK_PLL_EN);
1070 sdhci_writew(host, value, SDHCI_CLOCK_CONTROL);
1071 }
1072
1073 pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
1074 value &= ~PCIE_GLI_9767_CFG_LOW_PWR_OFF;
1075 pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
1076 gl9767_vhs_read(pdev);
1077
1078 return 0;
1079 }
1080
gli_probe_slot_gl9750(struct sdhci_pci_slot * slot)1081 static int gli_probe_slot_gl9750(struct sdhci_pci_slot *slot)
1082 {
1083 struct sdhci_host *host = slot->host;
1084
1085 gl9750_hw_setting(host);
1086 gli_pcie_enable_msi(slot);
1087 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
1088 sdhci_enable_v4_mode(host);
1089
1090 return 0;
1091 }
1092
gli_probe_slot_gl9755(struct sdhci_pci_slot * slot)1093 static int gli_probe_slot_gl9755(struct sdhci_pci_slot *slot)
1094 {
1095 struct sdhci_host *host = slot->host;
1096
1097 gl9755_hw_setting(slot);
1098 gli_pcie_enable_msi(slot);
1099 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
1100 sdhci_enable_v4_mode(host);
1101
1102 return 0;
1103 }
1104
gli_probe_slot_gl9767(struct sdhci_pci_slot * slot)1105 static int gli_probe_slot_gl9767(struct sdhci_pci_slot *slot)
1106 {
1107 struct sdhci_host *host = slot->host;
1108
1109 gli_set_9767(host);
1110 gl9767_hw_setting(slot);
1111 gli_pcie_enable_msi(slot);
1112 slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
1113 host->mmc->caps2 |= MMC_CAP2_SD_EXP;
1114 host->mmc_host_ops.init_sd_express = gl9767_init_sd_express;
1115 sdhci_enable_v4_mode(host);
1116
1117 return 0;
1118 }
1119
sdhci_gli_voltage_switch(struct sdhci_host * host)1120 static void sdhci_gli_voltage_switch(struct sdhci_host *host)
1121 {
1122 /*
1123 * According to Section 3.6.1 signal voltage switch procedure in
1124 * SD Host Controller Simplified Spec. 4.20, steps 6~8 are as
1125 * follows:
1126 * (6) Set 1.8V Signal Enable in the Host Control 2 register.
1127 * (7) Wait 5ms. 1.8V voltage regulator shall be stable within this
1128 * period.
1129 * (8) If 1.8V Signal Enable is cleared by Host Controller, go to
1130 * step (12).
1131 *
1132 * Wait 5ms after set 1.8V signal enable in Host Control 2 register
1133 * to ensure 1.8V signal enable bit is set by GL9750/GL9755.
1134 *
1135 * ...however, the controller in the NUC10i3FNK4 (a 9755) requires
1136 * slightly longer than 5ms before the control register reports that
1137 * 1.8V is ready, and far longer still before the card will actually
1138 * work reliably.
1139 */
1140 usleep_range(100000, 110000);
1141 }
1142
sdhci_gl9767_voltage_switch(struct sdhci_host * host)1143 static void sdhci_gl9767_voltage_switch(struct sdhci_host *host)
1144 {
1145 /*
1146 * According to Section 3.6.1 signal voltage switch procedure in
1147 * SD Host Controller Simplified Spec. 4.20, steps 6~8 are as
1148 * follows:
1149 * (6) Set 1.8V Signal Enable in the Host Control 2 register.
1150 * (7) Wait 5ms. 1.8V voltage regulator shall be stable within this
1151 * period.
1152 * (8) If 1.8V Signal Enable is cleared by Host Controller, go to
1153 * step (12).
1154 *
1155 * Wait 5ms after set 1.8V signal enable in Host Control 2 register
1156 * to ensure 1.8V signal enable bit is set by GL9767.
1157 *
1158 */
1159 usleep_range(5000, 5500);
1160 }
1161
sdhci_gl9750_reset(struct sdhci_host * host,u8 mask)1162 static void sdhci_gl9750_reset(struct sdhci_host *host, u8 mask)
1163 {
1164 sdhci_reset(host, mask);
1165 gli_set_9750(host);
1166 }
1167
sdhci_gl9750_readl(struct sdhci_host * host,int reg)1168 static u32 sdhci_gl9750_readl(struct sdhci_host *host, int reg)
1169 {
1170 u32 value;
1171
1172 value = readl(host->ioaddr + reg);
1173 if (unlikely(reg == SDHCI_MAX_CURRENT && !(value & 0xff)))
1174 value |= 0xc8;
1175
1176 return value;
1177 }
1178
gl9763e_hs400_enhanced_strobe(struct mmc_host * mmc,struct mmc_ios * ios)1179 static void gl9763e_hs400_enhanced_strobe(struct mmc_host *mmc,
1180 struct mmc_ios *ios)
1181 {
1182 struct sdhci_host *host = mmc_priv(mmc);
1183 u32 val;
1184
1185 val = sdhci_readl(host, SDHCI_GLI_9763E_HS400_ES_REG);
1186 if (ios->enhanced_strobe)
1187 val |= SDHCI_GLI_9763E_HS400_ES_BIT;
1188 else
1189 val &= ~SDHCI_GLI_9763E_HS400_ES_BIT;
1190
1191 sdhci_writel(host, val, SDHCI_GLI_9763E_HS400_ES_REG);
1192 }
1193
gl9763e_set_low_power_negotiation(struct sdhci_pci_slot * slot,bool enable)1194 static void gl9763e_set_low_power_negotiation(struct sdhci_pci_slot *slot,
1195 bool enable)
1196 {
1197 struct pci_dev *pdev = slot->chip->pdev;
1198 u32 value;
1199
1200 pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1201 value &= ~GLI_9763E_VHS_REV;
1202 value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_W);
1203 pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1204
1205 pci_read_config_dword(pdev, PCIE_GLI_9763E_CFG, &value);
1206
1207 if (enable)
1208 value &= ~GLI_9763E_CFG_LPSN_DIS;
1209 else
1210 value |= GLI_9763E_CFG_LPSN_DIS;
1211
1212 pci_write_config_dword(pdev, PCIE_GLI_9763E_CFG, value);
1213
1214 pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1215 value &= ~GLI_9763E_VHS_REV;
1216 value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_R);
1217 pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1218 }
1219
sdhci_set_gl9763e_signaling(struct sdhci_host * host,unsigned int timing)1220 static void sdhci_set_gl9763e_signaling(struct sdhci_host *host,
1221 unsigned int timing)
1222 {
1223 u16 ctrl_2;
1224
1225 ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
1226 ctrl_2 &= ~SDHCI_CTRL_UHS_MASK;
1227 if (timing == MMC_TIMING_MMC_HS200)
1228 ctrl_2 |= SDHCI_CTRL_UHS_SDR104;
1229 else if (timing == MMC_TIMING_MMC_HS)
1230 ctrl_2 |= SDHCI_CTRL_UHS_SDR25;
1231 else if (timing == MMC_TIMING_MMC_DDR52)
1232 ctrl_2 |= SDHCI_CTRL_UHS_DDR50;
1233 else if (timing == MMC_TIMING_MMC_HS400)
1234 ctrl_2 |= SDHCI_GLI_9763E_CTRL_HS400;
1235
1236 sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
1237 }
1238
sdhci_gl9763e_dumpregs(struct mmc_host * mmc)1239 static void sdhci_gl9763e_dumpregs(struct mmc_host *mmc)
1240 {
1241 sdhci_dumpregs(mmc_priv(mmc));
1242 }
1243
sdhci_gl9763e_cqe_pre_enable(struct mmc_host * mmc)1244 static void sdhci_gl9763e_cqe_pre_enable(struct mmc_host *mmc)
1245 {
1246 struct cqhci_host *cq_host = mmc->cqe_private;
1247 u32 value;
1248
1249 value = cqhci_readl(cq_host, CQHCI_CFG);
1250 value |= CQHCI_ENABLE;
1251 cqhci_writel(cq_host, value, CQHCI_CFG);
1252 }
1253
sdhci_gl9763e_cqe_enable(struct mmc_host * mmc)1254 static void sdhci_gl9763e_cqe_enable(struct mmc_host *mmc)
1255 {
1256 struct sdhci_host *host = mmc_priv(mmc);
1257
1258 sdhci_writew(host, GLI_9763E_CQE_TRNS_MODE, SDHCI_TRANSFER_MODE);
1259 sdhci_cqe_enable(mmc);
1260 }
1261
sdhci_gl9763e_cqhci_irq(struct sdhci_host * host,u32 intmask)1262 static u32 sdhci_gl9763e_cqhci_irq(struct sdhci_host *host, u32 intmask)
1263 {
1264 int cmd_error = 0;
1265 int data_error = 0;
1266
1267 if (!sdhci_cqe_irq(host, intmask, &cmd_error, &data_error))
1268 return intmask;
1269
1270 cqhci_irq(host->mmc, intmask, cmd_error, data_error);
1271
1272 return 0;
1273 }
1274
sdhci_gl9763e_cqe_post_disable(struct mmc_host * mmc)1275 static void sdhci_gl9763e_cqe_post_disable(struct mmc_host *mmc)
1276 {
1277 struct sdhci_host *host = mmc_priv(mmc);
1278 struct cqhci_host *cq_host = mmc->cqe_private;
1279 u32 value;
1280
1281 value = cqhci_readl(cq_host, CQHCI_CFG);
1282 value &= ~CQHCI_ENABLE;
1283 cqhci_writel(cq_host, value, CQHCI_CFG);
1284 sdhci_writew(host, 0x0, SDHCI_TRANSFER_MODE);
1285 }
1286
1287 static const struct cqhci_host_ops sdhci_gl9763e_cqhci_ops = {
1288 .enable = sdhci_gl9763e_cqe_enable,
1289 .disable = sdhci_cqe_disable,
1290 .dumpregs = sdhci_gl9763e_dumpregs,
1291 .pre_enable = sdhci_gl9763e_cqe_pre_enable,
1292 .post_disable = sdhci_gl9763e_cqe_post_disable,
1293 };
1294
gl9763e_add_host(struct sdhci_pci_slot * slot)1295 static int gl9763e_add_host(struct sdhci_pci_slot *slot)
1296 {
1297 struct device *dev = &slot->chip->pdev->dev;
1298 struct sdhci_host *host = slot->host;
1299 struct cqhci_host *cq_host;
1300 bool dma64;
1301 int ret;
1302
1303 ret = sdhci_setup_host(host);
1304 if (ret)
1305 return ret;
1306
1307 cq_host = devm_kzalloc(dev, sizeof(*cq_host), GFP_KERNEL);
1308 if (!cq_host) {
1309 ret = -ENOMEM;
1310 goto cleanup;
1311 }
1312
1313 cq_host->mmio = host->ioaddr + SDHCI_GLI_9763E_CQE_BASE_ADDR;
1314 cq_host->ops = &sdhci_gl9763e_cqhci_ops;
1315
1316 dma64 = host->flags & SDHCI_USE_64_BIT_DMA;
1317 if (dma64)
1318 cq_host->caps |= CQHCI_TASK_DESC_SZ_128;
1319
1320 ret = cqhci_init(cq_host, host->mmc, dma64);
1321 if (ret)
1322 goto cleanup;
1323
1324 ret = __sdhci_add_host(host);
1325 if (ret)
1326 goto cleanup;
1327
1328 /* Disable LPM negotiation to avoid entering L1 state. */
1329 gl9763e_set_low_power_negotiation(slot, false);
1330
1331 return 0;
1332
1333 cleanup:
1334 sdhci_cleanup_host(host);
1335 return ret;
1336 }
1337
gl9763e_hw_setting(struct sdhci_pci_slot * slot)1338 static void gl9763e_hw_setting(struct sdhci_pci_slot *slot)
1339 {
1340 struct pci_dev *pdev = slot->chip->pdev;
1341 u32 value;
1342
1343 pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1344 value &= ~GLI_9763E_VHS_REV;
1345 value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_W);
1346 pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1347
1348 pci_read_config_dword(pdev, PCIE_GLI_9763E_SCR, &value);
1349 value |= GLI_9763E_SCR_AXI_REQ;
1350 pci_write_config_dword(pdev, PCIE_GLI_9763E_SCR, value);
1351
1352 pci_read_config_dword(pdev, PCIE_GLI_9763E_MMC_CTRL, &value);
1353 value &= ~GLI_9763E_HS400_SLOW;
1354 pci_write_config_dword(pdev, PCIE_GLI_9763E_MMC_CTRL, value);
1355
1356 pci_read_config_dword(pdev, PCIE_GLI_9763E_CFG2, &value);
1357 value &= ~GLI_9763E_CFG2_L1DLY;
1358 /* set ASPM L1 entry delay to 21us */
1359 value |= FIELD_PREP(GLI_9763E_CFG2_L1DLY, GLI_9763E_CFG2_L1DLY_MID);
1360 pci_write_config_dword(pdev, PCIE_GLI_9763E_CFG2, value);
1361
1362 pci_read_config_dword(pdev, PCIE_GLI_9763E_CLKRXDLY, &value);
1363 value &= ~GLI_9763E_HS400_RXDLY;
1364 value |= FIELD_PREP(GLI_9763E_HS400_RXDLY, GLI_9763E_HS400_RXDLY_5);
1365 pci_write_config_dword(pdev, PCIE_GLI_9763E_CLKRXDLY, value);
1366
1367 /* mask the replay timer timeout of AER */
1368 sdhci_gli_mask_replay_timer_timeout(pdev);
1369
1370 pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1371 value &= ~GLI_9763E_VHS_REV;
1372 value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_R);
1373 pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1374 }
1375
1376 #ifdef CONFIG_PM
gl9763e_runtime_suspend(struct sdhci_pci_chip * chip)1377 static int gl9763e_runtime_suspend(struct sdhci_pci_chip *chip)
1378 {
1379 struct sdhci_pci_slot *slot = chip->slots[0];
1380 struct sdhci_host *host = slot->host;
1381 u16 clock;
1382
1383 /* Enable LPM negotiation to allow entering L1 state */
1384 gl9763e_set_low_power_negotiation(slot, true);
1385
1386 clock = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1387 clock &= ~(SDHCI_CLOCK_PLL_EN | SDHCI_CLOCK_CARD_EN);
1388 sdhci_writew(host, clock, SDHCI_CLOCK_CONTROL);
1389
1390 return 0;
1391 }
1392
gl9763e_runtime_resume(struct sdhci_pci_chip * chip)1393 static int gl9763e_runtime_resume(struct sdhci_pci_chip *chip)
1394 {
1395 struct sdhci_pci_slot *slot = chip->slots[0];
1396 struct sdhci_host *host = slot->host;
1397 u16 clock;
1398
1399 if (host->mmc->ios.power_mode != MMC_POWER_ON)
1400 return 0;
1401
1402 clock = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1403
1404 clock |= SDHCI_CLOCK_PLL_EN;
1405 clock &= ~SDHCI_CLOCK_INT_STABLE;
1406 sdhci_writew(host, clock, SDHCI_CLOCK_CONTROL);
1407
1408 /* Wait max 150 ms */
1409 if (read_poll_timeout(sdhci_readw, clock, (clock & SDHCI_CLOCK_INT_STABLE),
1410 1000, 150000, false, host, SDHCI_CLOCK_CONTROL)) {
1411 pr_err("%s: PLL clock never stabilised.\n",
1412 mmc_hostname(host->mmc));
1413 sdhci_dumpregs(host);
1414 }
1415
1416 clock |= SDHCI_CLOCK_CARD_EN;
1417 sdhci_writew(host, clock, SDHCI_CLOCK_CONTROL);
1418
1419 /* Disable LPM negotiation to avoid entering L1 state. */
1420 gl9763e_set_low_power_negotiation(slot, false);
1421
1422 return 0;
1423 }
1424 #endif
1425
1426 #ifdef CONFIG_PM_SLEEP
sdhci_pci_gli_resume(struct sdhci_pci_chip * chip)1427 static int sdhci_pci_gli_resume(struct sdhci_pci_chip *chip)
1428 {
1429 struct sdhci_pci_slot *slot = chip->slots[0];
1430
1431 pci_free_irq_vectors(slot->chip->pdev);
1432 gli_pcie_enable_msi(slot);
1433
1434 return sdhci_pci_resume_host(chip);
1435 }
1436
gl9763e_resume(struct sdhci_pci_chip * chip)1437 static int gl9763e_resume(struct sdhci_pci_chip *chip)
1438 {
1439 struct sdhci_pci_slot *slot = chip->slots[0];
1440 int ret;
1441
1442 ret = sdhci_pci_gli_resume(chip);
1443 if (ret)
1444 return ret;
1445
1446 ret = cqhci_resume(slot->host->mmc);
1447 if (ret)
1448 return ret;
1449
1450 /*
1451 * Disable LPM negotiation to bring device back in sync
1452 * with its runtime_pm state.
1453 */
1454 gl9763e_set_low_power_negotiation(slot, false);
1455
1456 return 0;
1457 }
1458
gl9763e_suspend(struct sdhci_pci_chip * chip)1459 static int gl9763e_suspend(struct sdhci_pci_chip *chip)
1460 {
1461 struct sdhci_pci_slot *slot = chip->slots[0];
1462 int ret;
1463
1464 /*
1465 * Certain SoCs can suspend only with the bus in low-
1466 * power state, notably x86 SoCs when using S0ix.
1467 * Re-enable LPM negotiation to allow entering L1 state
1468 * and entering system suspend.
1469 */
1470 gl9763e_set_low_power_negotiation(slot, true);
1471
1472 ret = cqhci_suspend(slot->host->mmc);
1473 if (ret)
1474 goto err_suspend;
1475
1476 ret = sdhci_suspend_host(slot->host);
1477 if (ret)
1478 goto err_suspend_host;
1479
1480 return 0;
1481
1482 err_suspend_host:
1483 cqhci_resume(slot->host->mmc);
1484 err_suspend:
1485 gl9763e_set_low_power_negotiation(slot, false);
1486 return ret;
1487 }
1488 #endif
1489
gli_probe_slot_gl9763e(struct sdhci_pci_slot * slot)1490 static int gli_probe_slot_gl9763e(struct sdhci_pci_slot *slot)
1491 {
1492 struct pci_dev *pdev = slot->chip->pdev;
1493 struct sdhci_host *host = slot->host;
1494 u32 value;
1495
1496 host->mmc->caps |= MMC_CAP_8_BIT_DATA |
1497 MMC_CAP_1_8V_DDR |
1498 MMC_CAP_NONREMOVABLE;
1499 host->mmc->caps2 |= MMC_CAP2_HS200_1_8V_SDR |
1500 MMC_CAP2_HS400_1_8V |
1501 MMC_CAP2_HS400_ES |
1502 MMC_CAP2_NO_SDIO |
1503 MMC_CAP2_NO_SD;
1504
1505 pci_read_config_dword(pdev, PCIE_GLI_9763E_MB, &value);
1506 if (!(value & GLI_9763E_MB_CMDQ_OFF))
1507 if (value & GLI_9763E_MB_ERP_ON)
1508 host->mmc->caps2 |= MMC_CAP2_CQE | MMC_CAP2_CQE_DCMD;
1509
1510 gli_pcie_enable_msi(slot);
1511 host->mmc_host_ops.hs400_enhanced_strobe =
1512 gl9763e_hs400_enhanced_strobe;
1513 gl9763e_hw_setting(slot);
1514 sdhci_enable_v4_mode(host);
1515
1516 return 0;
1517 }
1518
1519 #define REG_OFFSET_IN_BITS(reg) ((reg) << 3 & 0x18)
1520
sdhci_gli_readw(struct sdhci_host * host,int reg)1521 static u16 sdhci_gli_readw(struct sdhci_host *host, int reg)
1522 {
1523 u32 val = readl(host->ioaddr + (reg & ~3));
1524 u16 word;
1525
1526 word = (val >> REG_OFFSET_IN_BITS(reg)) & 0xffff;
1527 return word;
1528 }
1529
sdhci_gli_readb(struct sdhci_host * host,int reg)1530 static u8 sdhci_gli_readb(struct sdhci_host *host, int reg)
1531 {
1532 u32 val = readl(host->ioaddr + (reg & ~3));
1533 u8 byte = (val >> REG_OFFSET_IN_BITS(reg)) & 0xff;
1534
1535 return byte;
1536 }
1537
1538 static const struct sdhci_ops sdhci_gl9755_ops = {
1539 .read_w = sdhci_gli_readw,
1540 .read_b = sdhci_gli_readb,
1541 .set_clock = sdhci_gl9755_set_clock,
1542 .enable_dma = sdhci_pci_enable_dma,
1543 .set_bus_width = sdhci_set_bus_width,
1544 .reset = sdhci_reset,
1545 .set_uhs_signaling = sdhci_set_uhs_signaling,
1546 .voltage_switch = sdhci_gli_voltage_switch,
1547 };
1548
1549 const struct sdhci_pci_fixes sdhci_gl9755 = {
1550 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
1551 .quirks2 = SDHCI_QUIRK2_BROKEN_DDR50,
1552 .probe_slot = gli_probe_slot_gl9755,
1553 .ops = &sdhci_gl9755_ops,
1554 #ifdef CONFIG_PM_SLEEP
1555 .resume = sdhci_pci_gli_resume,
1556 #endif
1557 };
1558
1559 static const struct sdhci_ops sdhci_gl9750_ops = {
1560 .read_w = sdhci_gli_readw,
1561 .read_b = sdhci_gli_readb,
1562 .read_l = sdhci_gl9750_readl,
1563 .set_clock = sdhci_gl9750_set_clock,
1564 .enable_dma = sdhci_pci_enable_dma,
1565 .set_bus_width = sdhci_set_bus_width,
1566 .reset = sdhci_gl9750_reset,
1567 .set_uhs_signaling = sdhci_set_uhs_signaling,
1568 .voltage_switch = sdhci_gli_voltage_switch,
1569 .platform_execute_tuning = gl9750_execute_tuning,
1570 };
1571
1572 const struct sdhci_pci_fixes sdhci_gl9750 = {
1573 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
1574 .quirks2 = SDHCI_QUIRK2_BROKEN_DDR50,
1575 .probe_slot = gli_probe_slot_gl9750,
1576 .ops = &sdhci_gl9750_ops,
1577 #ifdef CONFIG_PM_SLEEP
1578 .resume = sdhci_pci_gli_resume,
1579 #endif
1580 };
1581
1582 static const struct sdhci_ops sdhci_gl9763e_ops = {
1583 .set_clock = sdhci_set_clock,
1584 .enable_dma = sdhci_pci_enable_dma,
1585 .set_bus_width = sdhci_set_bus_width,
1586 .reset = sdhci_and_cqhci_reset,
1587 .set_uhs_signaling = sdhci_set_gl9763e_signaling,
1588 .voltage_switch = sdhci_gli_voltage_switch,
1589 .irq = sdhci_gl9763e_cqhci_irq,
1590 };
1591
1592 const struct sdhci_pci_fixes sdhci_gl9763e = {
1593 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
1594 .probe_slot = gli_probe_slot_gl9763e,
1595 .ops = &sdhci_gl9763e_ops,
1596 #ifdef CONFIG_PM_SLEEP
1597 .resume = gl9763e_resume,
1598 .suspend = gl9763e_suspend,
1599 #endif
1600 #ifdef CONFIG_PM
1601 .runtime_suspend = gl9763e_runtime_suspend,
1602 .runtime_resume = gl9763e_runtime_resume,
1603 .allow_runtime_pm = true,
1604 #endif
1605 .add_host = gl9763e_add_host,
1606 };
1607
1608 static const struct sdhci_ops sdhci_gl9767_ops = {
1609 .set_clock = sdhci_gl9767_set_clock,
1610 .enable_dma = sdhci_pci_enable_dma,
1611 .set_bus_width = sdhci_set_bus_width,
1612 .reset = sdhci_gl9767_reset,
1613 .set_uhs_signaling = sdhci_set_uhs_signaling,
1614 .voltage_switch = sdhci_gl9767_voltage_switch,
1615 };
1616
1617 const struct sdhci_pci_fixes sdhci_gl9767 = {
1618 .quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
1619 .quirks2 = SDHCI_QUIRK2_BROKEN_DDR50,
1620 .probe_slot = gli_probe_slot_gl9767,
1621 .ops = &sdhci_gl9767_ops,
1622 #ifdef CONFIG_PM_SLEEP
1623 .resume = sdhci_pci_gli_resume,
1624 #endif
1625 };
1626