1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2013 BayHub Technology Ltd.
5 * Authors: Peter Guo <peter.guo@bayhubtech.com>
6 * Adam Lee <adam.lee@canonical.com>
7 * Ernest Zhang <ernest.zhang@bayhubtech.com>
10 #include <linux/pci.h>
11 #include <linux/mmc/host.h>
12 #include <linux/mmc/mmc.h>
13 #include <linux/delay.h>
14 #include <linux/iopoll.h>
15 #include <linux/bitfield.h>
18 #include "sdhci-pci.h"
21 * O2Micro device registers
24 #define O2_SD_PCIE_SWITCH 0x54
25 #define O2_SD_MISC_REG5 0x64
26 #define O2_SD_LD0_CTRL 0x68
27 #define O2_SD_DEV_CTRL 0x88
28 #define O2_SD_LOCK_WP 0xD3
29 #define O2_SD_TEST_REG 0xD4
30 #define O2_SD_FUNC_REG0 0xDC
31 #define O2_SD_MULTI_VCC3V 0xEE
32 #define O2_SD_CLKREQ 0xEC
33 #define O2_SD_CAPS 0xE0
34 #define O2_SD_ADMA1 0xE2
35 #define O2_SD_ADMA2 0xE7
36 #define O2_SD_MISC_CTRL2 0xF0
37 #define O2_SD_INF_MOD 0xF1
38 #define O2_SD_MISC_CTRL4 0xFC
39 #define O2_SD_MISC_CTRL 0x1C0
40 #define O2_SD_EXP_INT_REG 0x1E0
41 #define O2_SD_PWR_FORCE_L0 0x0002
42 #define O2_SD_TUNING_CTRL 0x300
43 #define O2_SD_PLL_SETTING 0x304
44 #define O2_SD_MISC_SETTING 0x308
45 #define O2_SD_CLK_SETTING 0x328
46 #define O2_SD_CAP_REG2 0x330
47 #define O2_SD_CAP_REG0 0x334
48 #define O2_SD_UHS1_CAP_SETTING 0x33C
49 #define O2_SD_DELAY_CTRL 0x350
50 #define O2_SD_OUTPUT_CLK_SOURCE_SWITCH 0x354
51 #define O2_SD_UHS2_L1_CTRL 0x35C
52 #define O2_SD_FUNC_REG3 0x3E0
53 #define O2_SD_FUNC_REG4 0x3E4
54 #define O2_SD_PARA_SET_REG1 0x444
55 #define O2_SD_VDDX_CTRL_REG 0x508
56 #define O2_SD_GPIO_CTRL_REG1 0x510
57 #define O2_SD_LED_ENABLE BIT(6)
58 #define O2_SD_FREG0_LEDOFF BIT(13)
59 #define O2_SD_SEL_DLL BIT(16)
60 #define O2_SD_FREG4_ENABLE_CLK_SET BIT(22)
61 #define O2_SD_PHASE_MASK GENMASK(23, 20)
62 #define O2_SD_FIX_PHASE FIELD_PREP(O2_SD_PHASE_MASK, 0x9)
64 #define O2_SD_VENDOR_SETTING 0x110
65 #define O2_SD_VENDOR_SETTING2 0x1C8
66 #define O2_SD_HW_TUNING_DISABLE BIT(4)
68 #define O2_PLL_DLL_WDT_CONTROL1 0x1CC
69 #define O2_PLL_FORCE_ACTIVE BIT(18)
70 #define O2_PLL_LOCK_STATUS BIT(14)
71 #define O2_PLL_SOFT_RESET BIT(12)
72 #define O2_DLL_LOCK_STATUS BIT(11)
74 #define O2_SD_DETECT_SETTING 0x324
76 static const u32 dmdn_table
[] = {0x2B1C0000,
77 0x2C1A0000, 0x371B0000, 0x35100000};
78 #define DMDN_SZ ARRAY_SIZE(dmdn_table)
84 static void sdhci_o2_wait_card_detect_stable(struct sdhci_host
*host
)
90 timeout
= ktime_add_ms(ktime_get(), 50);
92 bool timedout
= ktime_after(ktime_get(), timeout
);
94 scratch32
= sdhci_readl(host
, SDHCI_PRESENT_STATE
);
95 if ((scratch32
& SDHCI_CARD_PRESENT
) >> SDHCI_CARD_PRES_SHIFT
96 == (scratch32
& SDHCI_CD_LVL
) >> SDHCI_CD_LVL_SHIFT
)
100 pr_err("%s: Card Detect debounce never finished.\n",
101 mmc_hostname(host
->mmc
));
102 sdhci_dumpregs(host
);
109 static void sdhci_o2_enable_internal_clock(struct sdhci_host
*host
)
115 /* PLL software reset */
116 scratch32
= sdhci_readl(host
, O2_PLL_DLL_WDT_CONTROL1
);
117 scratch32
|= O2_PLL_SOFT_RESET
;
118 sdhci_writel(host
, scratch32
, O2_PLL_DLL_WDT_CONTROL1
);
120 scratch32
&= ~(O2_PLL_SOFT_RESET
);
121 sdhci_writel(host
, scratch32
, O2_PLL_DLL_WDT_CONTROL1
);
123 /* PLL force active */
124 scratch32
|= O2_PLL_FORCE_ACTIVE
;
125 sdhci_writel(host
, scratch32
, O2_PLL_DLL_WDT_CONTROL1
);
128 timeout
= ktime_add_ms(ktime_get(), 20);
130 bool timedout
= ktime_after(ktime_get(), timeout
);
132 scratch
= sdhci_readw(host
, O2_PLL_DLL_WDT_CONTROL1
);
133 if (scratch
& O2_PLL_LOCK_STATUS
)
136 pr_err("%s: Internal clock never stabilised.\n",
137 mmc_hostname(host
->mmc
));
138 sdhci_dumpregs(host
);
144 /* Wait for card detect finish */
146 sdhci_o2_wait_card_detect_stable(host
);
149 /* Cancel PLL force active */
150 scratch32
= sdhci_readl(host
, O2_PLL_DLL_WDT_CONTROL1
);
151 scratch32
&= ~O2_PLL_FORCE_ACTIVE
;
152 sdhci_writel(host
, scratch32
, O2_PLL_DLL_WDT_CONTROL1
);
155 static int sdhci_o2_get_cd(struct mmc_host
*mmc
)
157 struct sdhci_host
*host
= mmc_priv(mmc
);
159 if (!(sdhci_readw(host
, O2_PLL_DLL_WDT_CONTROL1
) & O2_PLL_LOCK_STATUS
))
160 sdhci_o2_enable_internal_clock(host
);
162 sdhci_o2_wait_card_detect_stable(host
);
164 return !!(sdhci_readl(host
, SDHCI_PRESENT_STATE
) & SDHCI_CARD_PRESENT
);
167 static void o2_pci_set_baseclk(struct sdhci_pci_chip
*chip
, u32 value
)
171 pci_read_config_dword(chip
->pdev
,
172 O2_SD_PLL_SETTING
, &scratch_32
);
174 scratch_32
&= 0x0000FFFF;
177 pci_write_config_dword(chip
->pdev
,
178 O2_SD_PLL_SETTING
, scratch_32
);
181 static u32
sdhci_o2_pll_dll_wdt_control(struct sdhci_host
*host
)
183 return sdhci_readl(host
, O2_PLL_DLL_WDT_CONTROL1
);
187 * This function is used to detect dll lock status.
188 * Since the dll lock status bit will toggle randomly
189 * with very short interval which needs to be polled
190 * as fast as possible. Set sleep_us as 1 microsecond.
192 static int sdhci_o2_wait_dll_detect_lock(struct sdhci_host
*host
)
196 return readx_poll_timeout(sdhci_o2_pll_dll_wdt_control
, host
,
197 scratch32
, !(scratch32
& O2_DLL_LOCK_STATUS
), 1, 1000000);
200 static void sdhci_o2_set_tuning_mode(struct sdhci_host
*host
)
204 /* enable hardware tuning */
205 reg
= sdhci_readw(host
, O2_SD_VENDOR_SETTING
);
206 reg
&= ~O2_SD_HW_TUNING_DISABLE
;
207 sdhci_writew(host
, reg
, O2_SD_VENDOR_SETTING
);
210 static void __sdhci_o2_execute_tuning(struct sdhci_host
*host
, u32 opcode
)
214 sdhci_send_tuning(host
, opcode
);
216 for (i
= 0; i
< 150; i
++) {
217 u16 ctrl
= sdhci_readw(host
, SDHCI_HOST_CONTROL2
);
219 if (!(ctrl
& SDHCI_CTRL_EXEC_TUNING
)) {
220 if (ctrl
& SDHCI_CTRL_TUNED_CLK
) {
221 host
->tuning_done
= true;
224 pr_warn("%s: HW tuning failed !\n",
225 mmc_hostname(host
->mmc
));
232 pr_info("%s: Tuning failed, falling back to fixed sampling clock\n",
233 mmc_hostname(host
->mmc
));
234 sdhci_reset_tuning(host
);
238 * This function is used to fix o2 dll shift issue.
239 * It isn't necessary to detect card present before recovery.
240 * Firstly, it is used by bht emmc card, which is embedded.
241 * Second, before call recovery card present will be detected
242 * outside of the execute tuning function.
244 static int sdhci_o2_dll_recovery(struct sdhci_host
*host
)
249 struct sdhci_pci_slot
*slot
= sdhci_priv(host
);
250 struct sdhci_pci_chip
*chip
= slot
->chip
;
251 struct o2_host
*o2_host
= sdhci_pci_priv(slot
);
254 pci_read_config_byte(chip
->pdev
,
255 O2_SD_LOCK_WP
, &scratch_8
);
257 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch_8
);
258 while (o2_host
->dll_adjust_count
< DMDN_SZ
&& !ret
) {
260 sdhci_writeb(host
, 0, SDHCI_CLOCK_CONTROL
);
262 /* PLL software reset */
263 scratch_32
= sdhci_readl(host
, O2_PLL_DLL_WDT_CONTROL1
);
264 scratch_32
|= O2_PLL_SOFT_RESET
;
265 sdhci_writel(host
, scratch_32
, O2_PLL_DLL_WDT_CONTROL1
);
267 pci_read_config_dword(chip
->pdev
,
270 /* Enable Base Clk setting change */
271 scratch_32
|= O2_SD_FREG4_ENABLE_CLK_SET
;
272 pci_write_config_dword(chip
->pdev
, O2_SD_FUNC_REG4
, scratch_32
);
273 o2_pci_set_baseclk(chip
, dmdn_table
[o2_host
->dll_adjust_count
]);
275 /* Enable internal clock */
276 scratch_8
= SDHCI_CLOCK_INT_EN
;
277 sdhci_writeb(host
, scratch_8
, SDHCI_CLOCK_CONTROL
);
279 if (sdhci_o2_get_cd(host
->mmc
)) {
281 * need wait at least 5ms for dll status stable,
282 * after enable internal clock
284 usleep_range(5000, 6000);
285 if (sdhci_o2_wait_dll_detect_lock(host
)) {
286 scratch_8
|= SDHCI_CLOCK_CARD_EN
;
287 sdhci_writeb(host
, scratch_8
,
288 SDHCI_CLOCK_CONTROL
);
291 pr_warn("%s: DLL unlocked when dll_adjust_count is %d.\n",
292 mmc_hostname(host
->mmc
),
293 o2_host
->dll_adjust_count
);
296 pr_err("%s: card present detect failed.\n",
297 mmc_hostname(host
->mmc
));
301 o2_host
->dll_adjust_count
++;
303 if (!ret
&& o2_host
->dll_adjust_count
== DMDN_SZ
)
304 pr_err("%s: DLL adjust over max times\n",
305 mmc_hostname(host
->mmc
));
307 pci_read_config_byte(chip
->pdev
,
308 O2_SD_LOCK_WP
, &scratch_8
);
310 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch_8
);
314 static int sdhci_o2_execute_tuning(struct mmc_host
*mmc
, u32 opcode
)
316 struct sdhci_host
*host
= mmc_priv(mmc
);
317 struct sdhci_pci_slot
*slot
= sdhci_priv(host
);
318 struct sdhci_pci_chip
*chip
= slot
->chip
;
319 int current_bus_width
= 0;
326 * This handler implements the hardware tuning that is specific to
327 * this controller. Fall back to the standard method for other TIMING.
329 if ((host
->timing
!= MMC_TIMING_MMC_HS200
) &&
330 (host
->timing
!= MMC_TIMING_UHS_SDR104
) &&
331 (host
->timing
!= MMC_TIMING_UHS_SDR50
))
332 return sdhci_execute_tuning(mmc
, opcode
);
334 if (WARN_ON(!mmc_op_tuning(opcode
)))
337 /* Force power mode enter L0 */
338 scratch
= sdhci_readw(host
, O2_SD_MISC_CTRL
);
339 scratch
|= O2_SD_PWR_FORCE_L0
;
340 sdhci_writew(host
, scratch
, O2_SD_MISC_CTRL
);
342 /* Update output phase */
343 switch (chip
->pdev
->device
) {
344 case PCI_DEVICE_ID_O2_SDS0
:
345 case PCI_DEVICE_ID_O2_SEABIRD0
:
346 case PCI_DEVICE_ID_O2_SEABIRD1
:
347 case PCI_DEVICE_ID_O2_SDS1
:
348 case PCI_DEVICE_ID_O2_FUJIN2
:
350 reg_val
= sdhci_readw(host
, SDHCI_CLOCK_CONTROL
);
351 reg_val
&= ~SDHCI_CLOCK_CARD_EN
;
352 sdhci_writew(host
, reg_val
, SDHCI_CLOCK_CONTROL
);
354 if (host
->timing
== MMC_TIMING_MMC_HS200
||
355 host
->timing
== MMC_TIMING_UHS_SDR104
) {
357 pci_read_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, &scratch_8
);
359 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch_8
);
361 /* Set pcr 0x354[16] to choose dll clock, and set the default phase */
362 pci_read_config_dword(chip
->pdev
, O2_SD_OUTPUT_CLK_SOURCE_SWITCH
, ®_val
);
363 reg_val
&= ~(O2_SD_SEL_DLL
| O2_SD_PHASE_MASK
);
364 reg_val
|= (O2_SD_SEL_DLL
| O2_SD_FIX_PHASE
);
365 pci_write_config_dword(chip
->pdev
, O2_SD_OUTPUT_CLK_SOURCE_SWITCH
, reg_val
);
368 pci_read_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, &scratch_8
);
370 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch_8
);
374 reg_val
= sdhci_readw(host
, SDHCI_CLOCK_CONTROL
);
375 reg_val
|= SDHCI_CLOCK_CARD_EN
;
376 sdhci_writew(host
, reg_val
, SDHCI_CLOCK_CONTROL
);
382 /* wait DLL lock, timeout value 5ms */
383 if (readx_poll_timeout(sdhci_o2_pll_dll_wdt_control
, host
,
384 scratch32
, (scratch32
& O2_DLL_LOCK_STATUS
), 1, 5000))
385 pr_warn("%s: DLL can't lock in 5ms after force L0 during tuning.\n",
386 mmc_hostname(host
->mmc
));
388 * Judge the tuning reason, whether caused by dll shift
389 * If cause by dll shift, should call sdhci_o2_dll_recovery
391 if (!sdhci_o2_wait_dll_detect_lock(host
))
392 if (!sdhci_o2_dll_recovery(host
)) {
393 pr_err("%s: o2 dll recovery failed\n",
394 mmc_hostname(host
->mmc
));
398 * o2 sdhci host didn't support 8bit emmc tuning
400 if (mmc
->ios
.bus_width
== MMC_BUS_WIDTH_8
) {
401 current_bus_width
= mmc
->ios
.bus_width
;
402 mmc
->ios
.bus_width
= MMC_BUS_WIDTH_4
;
403 sdhci_set_bus_width(host
, MMC_BUS_WIDTH_4
);
406 sdhci_o2_set_tuning_mode(host
);
408 sdhci_start_tuning(host
);
410 __sdhci_o2_execute_tuning(host
, opcode
);
412 sdhci_end_tuning(host
);
414 if (current_bus_width
== MMC_BUS_WIDTH_8
) {
415 mmc
->ios
.bus_width
= MMC_BUS_WIDTH_8
;
416 sdhci_set_bus_width(host
, current_bus_width
);
419 /* Cancel force power mode enter L0 */
420 scratch
= sdhci_readw(host
, O2_SD_MISC_CTRL
);
421 scratch
&= ~(O2_SD_PWR_FORCE_L0
);
422 sdhci_writew(host
, scratch
, O2_SD_MISC_CTRL
);
424 sdhci_reset(host
, SDHCI_RESET_CMD
);
425 sdhci_reset(host
, SDHCI_RESET_DATA
);
427 host
->flags
&= ~SDHCI_HS400_TUNING
;
431 static void o2_pci_led_enable(struct sdhci_pci_chip
*chip
)
436 /* Set led of SD host function enable */
437 ret
= pci_read_config_dword(chip
->pdev
,
438 O2_SD_FUNC_REG0
, &scratch_32
);
442 scratch_32
&= ~O2_SD_FREG0_LEDOFF
;
443 pci_write_config_dword(chip
->pdev
,
444 O2_SD_FUNC_REG0
, scratch_32
);
446 ret
= pci_read_config_dword(chip
->pdev
,
447 O2_SD_TEST_REG
, &scratch_32
);
451 scratch_32
|= O2_SD_LED_ENABLE
;
452 pci_write_config_dword(chip
->pdev
,
453 O2_SD_TEST_REG
, scratch_32
);
456 static void sdhci_pci_o2_fujin2_pci_init(struct sdhci_pci_chip
*chip
)
460 /* Improve write performance for SD3.0 */
461 ret
= pci_read_config_dword(chip
->pdev
, O2_SD_DEV_CTRL
, &scratch_32
);
464 scratch_32
&= ~((1 << 12) | (1 << 13) | (1 << 14));
465 pci_write_config_dword(chip
->pdev
, O2_SD_DEV_CTRL
, scratch_32
);
467 /* Enable Link abnormal reset generating Reset */
468 ret
= pci_read_config_dword(chip
->pdev
, O2_SD_MISC_REG5
, &scratch_32
);
471 scratch_32
&= ~((1 << 19) | (1 << 11));
472 scratch_32
|= (1 << 10);
473 pci_write_config_dword(chip
->pdev
, O2_SD_MISC_REG5
, scratch_32
);
475 /* set card power over current protection */
476 ret
= pci_read_config_dword(chip
->pdev
, O2_SD_TEST_REG
, &scratch_32
);
479 scratch_32
|= (1 << 4);
480 pci_write_config_dword(chip
->pdev
, O2_SD_TEST_REG
, scratch_32
);
482 /* adjust the output delay for SD mode */
483 pci_write_config_dword(chip
->pdev
, O2_SD_DELAY_CTRL
, 0x00002492);
485 /* Set the output voltage setting of Aux 1.2v LDO */
486 ret
= pci_read_config_dword(chip
->pdev
, O2_SD_LD0_CTRL
, &scratch_32
);
489 scratch_32
&= ~(3 << 12);
490 pci_write_config_dword(chip
->pdev
, O2_SD_LD0_CTRL
, scratch_32
);
492 /* Set Max power supply capability of SD host */
493 ret
= pci_read_config_dword(chip
->pdev
, O2_SD_CAP_REG0
, &scratch_32
);
496 scratch_32
&= ~(0x01FE);
497 scratch_32
|= 0x00CC;
498 pci_write_config_dword(chip
->pdev
, O2_SD_CAP_REG0
, scratch_32
);
499 /* Set DLL Tuning Window */
500 ret
= pci_read_config_dword(chip
->pdev
,
501 O2_SD_TUNING_CTRL
, &scratch_32
);
504 scratch_32
&= ~(0x000000FF);
505 scratch_32
|= 0x00000066;
506 pci_write_config_dword(chip
->pdev
, O2_SD_TUNING_CTRL
, scratch_32
);
508 /* Set UHS2 T_EIDLE */
509 ret
= pci_read_config_dword(chip
->pdev
,
510 O2_SD_UHS2_L1_CTRL
, &scratch_32
);
513 scratch_32
&= ~(0x000000FC);
514 scratch_32
|= 0x00000084;
515 pci_write_config_dword(chip
->pdev
, O2_SD_UHS2_L1_CTRL
, scratch_32
);
517 /* Set UHS2 Termination */
518 ret
= pci_read_config_dword(chip
->pdev
, O2_SD_FUNC_REG3
, &scratch_32
);
521 scratch_32
&= ~((1 << 21) | (1 << 30));
523 pci_write_config_dword(chip
->pdev
, O2_SD_FUNC_REG3
, scratch_32
);
525 /* Set L1 Entrance Timer */
526 ret
= pci_read_config_dword(chip
->pdev
, O2_SD_CAPS
, &scratch_32
);
529 scratch_32
&= ~(0xf0000000);
530 scratch_32
|= 0x30000000;
531 pci_write_config_dword(chip
->pdev
, O2_SD_CAPS
, scratch_32
);
533 ret
= pci_read_config_dword(chip
->pdev
,
534 O2_SD_MISC_CTRL4
, &scratch_32
);
537 scratch_32
&= ~(0x000f0000);
538 scratch_32
|= 0x00080000;
539 pci_write_config_dword(chip
->pdev
, O2_SD_MISC_CTRL4
, scratch_32
);
542 static void sdhci_pci_o2_enable_msi(struct sdhci_pci_chip
*chip
,
543 struct sdhci_host
*host
)
547 ret
= pci_find_capability(chip
->pdev
, PCI_CAP_ID_MSI
);
549 pr_info("%s: unsupported MSI, use INTx irq\n",
550 mmc_hostname(host
->mmc
));
554 ret
= pci_alloc_irq_vectors(chip
->pdev
, 1, 1,
555 PCI_IRQ_MSI
| PCI_IRQ_MSIX
);
557 pr_err("%s: enable PCI MSI failed, err=%d\n",
558 mmc_hostname(host
->mmc
), ret
);
562 host
->irq
= pci_irq_vector(chip
->pdev
, 0);
565 static void sdhci_o2_enable_clk(struct sdhci_host
*host
, u16 clk
)
567 /* Enable internal clock */
568 clk
|= SDHCI_CLOCK_INT_EN
;
569 sdhci_writew(host
, clk
, SDHCI_CLOCK_CONTROL
);
571 sdhci_o2_enable_internal_clock(host
);
572 if (sdhci_o2_get_cd(host
->mmc
)) {
573 clk
|= SDHCI_CLOCK_CARD_EN
;
574 sdhci_writew(host
, clk
, SDHCI_CLOCK_CONTROL
);
578 static void sdhci_pci_o2_set_clock(struct sdhci_host
*host
, unsigned int clock
)
583 u32 dmdn_208m
, dmdn_200m
;
584 struct sdhci_pci_slot
*slot
= sdhci_priv(host
);
585 struct sdhci_pci_chip
*chip
= slot
->chip
;
587 host
->mmc
->actual_clock
= 0;
589 sdhci_writew(host
, 0, SDHCI_CLOCK_CONTROL
);
595 pci_read_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, &scratch
);
597 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch
);
599 if (chip
->pdev
->device
== PCI_DEVICE_ID_O2_GG8_9860
||
600 chip
->pdev
->device
== PCI_DEVICE_ID_O2_GG8_9861
||
601 chip
->pdev
->device
== PCI_DEVICE_ID_O2_GG8_9862
||
602 chip
->pdev
->device
== PCI_DEVICE_ID_O2_GG8_9863
) {
603 dmdn_208m
= 0x2c500000;
604 dmdn_200m
= 0x25200000;
606 dmdn_208m
= 0x2c280000;
607 dmdn_200m
= 0x25100000;
610 if ((host
->timing
== MMC_TIMING_UHS_SDR104
) && (clock
== 200000000)) {
611 pci_read_config_dword(chip
->pdev
, O2_SD_PLL_SETTING
, &scratch_32
);
613 if ((scratch_32
& 0xFFFF0000) != dmdn_208m
)
614 o2_pci_set_baseclk(chip
, dmdn_208m
);
616 pci_read_config_dword(chip
->pdev
, O2_SD_PLL_SETTING
, &scratch_32
);
618 if ((scratch_32
& 0xFFFF0000) != dmdn_200m
)
619 o2_pci_set_baseclk(chip
, dmdn_200m
);
622 pci_read_config_dword(chip
->pdev
, O2_SD_OUTPUT_CLK_SOURCE_SWITCH
, &scratch_32
);
623 scratch_32
&= ~(O2_SD_SEL_DLL
| O2_SD_PHASE_MASK
);
624 pci_write_config_dword(chip
->pdev
, O2_SD_OUTPUT_CLK_SOURCE_SWITCH
, scratch_32
);
627 pci_read_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, &scratch
);
629 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch
);
631 clk
= sdhci_calc_clk(host
, clock
, &host
->mmc
->actual_clock
);
632 sdhci_o2_enable_clk(host
, clk
);
635 static int sdhci_pci_o2_init_sd_express(struct mmc_host
*mmc
, struct mmc_ios
*ios
)
637 struct sdhci_host
*host
= mmc_priv(mmc
);
638 struct sdhci_pci_slot
*slot
= sdhci_priv(host
);
639 struct sdhci_pci_chip
*chip
= slot
->chip
;
645 sdhci_writeb(host
, 0, SDHCI_CLOCK_CONTROL
);
647 /* Set VDD2 voltage*/
648 scratch8
= sdhci_readb(host
, SDHCI_POWER_CONTROL
);
650 if (host
->mmc
->ios
.timing
== MMC_TIMING_SD_EXP_1_2V
&&
651 host
->mmc
->caps2
& MMC_CAP2_SD_EXP_1_2V
) {
652 scratch8
|= SDHCI_VDD2_POWER_ON
| SDHCI_VDD2_POWER_120
;
654 scratch8
|= SDHCI_VDD2_POWER_ON
| SDHCI_VDD2_POWER_180
;
657 sdhci_writeb(host
, scratch8
, SDHCI_POWER_CONTROL
);
660 pci_read_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, &scratch8
);
662 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch8
);
664 /* Wait for express card clkreqn assert */
665 ret
= read_poll_timeout(sdhci_readb
, scratch8
, !(scratch8
& BIT(0)),
666 1, 30000, false, host
, O2_SD_EXP_INT_REG
);
669 /* Switch to PCIe mode */
670 scratch16
= sdhci_readw(host
, O2_SD_PCIE_SWITCH
);
672 sdhci_writew(host
, scratch16
, O2_SD_PCIE_SWITCH
);
674 /* Power off VDD2 voltage*/
675 scratch8
= sdhci_readb(host
, SDHCI_POWER_CONTROL
);
677 sdhci_writeb(host
, scratch8
, SDHCI_POWER_CONTROL
);
679 /* Keep mode as UHSI */
680 pci_read_config_word(chip
->pdev
, O2_SD_PARA_SET_REG1
, &scratch16
);
681 scratch16
&= ~BIT(11);
682 pci_write_config_word(chip
->pdev
, O2_SD_PARA_SET_REG1
, scratch16
);
684 host
->mmc
->ios
.timing
= MMC_TIMING_LEGACY
;
685 pr_info("%s: Express card initialization failed, falling back to Legacy\n",
686 mmc_hostname(host
->mmc
));
689 pci_read_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, &scratch8
);
691 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch8
);
696 static void sdhci_pci_o2_set_power(struct sdhci_host
*host
, unsigned char mode
, unsigned short vdd
)
698 struct sdhci_pci_chip
*chip
;
699 struct sdhci_pci_slot
*slot
= sdhci_priv(host
);
705 if (mode
== MMC_POWER_OFF
) {
707 pci_read_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, &scratch_8
);
709 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch_8
);
711 /* Set PCR 0x354[16] to switch Clock Source back to OPE Clock */
712 pci_read_config_dword(chip
->pdev
, O2_SD_OUTPUT_CLK_SOURCE_SWITCH
, &scratch_32
);
713 scratch_32
&= ~(O2_SD_SEL_DLL
);
714 pci_write_config_dword(chip
->pdev
, O2_SD_OUTPUT_CLK_SOURCE_SWITCH
, scratch_32
);
717 pci_read_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, &scratch_8
);
719 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch_8
);
722 sdhci_set_power(host
, mode
, vdd
);
725 static int sdhci_pci_o2_probe_slot(struct sdhci_pci_slot
*slot
)
727 struct sdhci_pci_chip
*chip
;
728 struct sdhci_host
*host
;
729 struct o2_host
*o2_host
= sdhci_pci_priv(slot
);
736 o2_host
->dll_adjust_count
= 0;
737 caps
= sdhci_readl(host
, SDHCI_CAPABILITIES
);
740 * mmc_select_bus_width() will test the bus to determine the actual bus
743 if (caps
& SDHCI_CAN_DO_8BIT
)
744 host
->mmc
->caps
|= MMC_CAP_8_BIT_DATA
;
746 host
->quirks2
|= SDHCI_QUIRK2_BROKEN_DDR50
;
748 sdhci_pci_o2_enable_msi(chip
, host
);
750 host
->mmc_host_ops
.execute_tuning
= sdhci_o2_execute_tuning
;
751 switch (chip
->pdev
->device
) {
752 case PCI_DEVICE_ID_O2_SDS0
:
753 case PCI_DEVICE_ID_O2_SEABIRD0
:
754 case PCI_DEVICE_ID_O2_SEABIRD1
:
755 case PCI_DEVICE_ID_O2_SDS1
:
756 case PCI_DEVICE_ID_O2_FUJIN2
:
757 reg
= sdhci_readl(host
, O2_SD_VENDOR_SETTING
);
759 host
->quirks
|= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12
;
761 if (chip
->pdev
->device
== PCI_DEVICE_ID_O2_SEABIRD0
) {
762 ret
= pci_read_config_dword(chip
->pdev
,
763 O2_SD_MISC_SETTING
, ®
);
766 if (reg
& (1 << 4)) {
767 pr_info("%s: emmc 1.8v flag is set, force 1.8v signaling voltage\n",
768 mmc_hostname(host
->mmc
));
769 host
->flags
&= ~SDHCI_SIGNALING_330
;
770 host
->flags
|= SDHCI_SIGNALING_180
;
771 host
->mmc
->caps2
|= MMC_CAP2_NO_SD
;
772 host
->mmc
->caps2
|= MMC_CAP2_NO_SDIO
;
773 pci_write_config_dword(chip
->pdev
,
774 O2_SD_DETECT_SETTING
, 3);
777 slot
->host
->mmc_host_ops
.get_cd
= sdhci_o2_get_cd
;
780 if (chip
->pdev
->device
== PCI_DEVICE_ID_O2_SEABIRD1
) {
781 slot
->host
->mmc_host_ops
.get_cd
= sdhci_o2_get_cd
;
782 host
->mmc
->caps2
|= MMC_CAP2_NO_SDIO
;
783 host
->quirks2
|= SDHCI_QUIRK2_PRESET_VALUE_BROKEN
;
786 if (chip
->pdev
->device
!= PCI_DEVICE_ID_O2_FUJIN2
)
788 /* set dll watch dog timer */
789 reg
= sdhci_readl(host
, O2_SD_VENDOR_SETTING2
);
791 sdhci_writel(host
, reg
, O2_SD_VENDOR_SETTING2
);
793 case PCI_DEVICE_ID_O2_GG8_9860
:
794 case PCI_DEVICE_ID_O2_GG8_9861
:
795 case PCI_DEVICE_ID_O2_GG8_9862
:
796 case PCI_DEVICE_ID_O2_GG8_9863
:
797 host
->mmc
->caps2
|= MMC_CAP2_NO_SDIO
| MMC_CAP2_SD_EXP
| MMC_CAP2_SD_EXP_1_2V
;
798 host
->mmc
->caps
|= MMC_CAP_HW_RESET
;
799 host
->quirks2
|= SDHCI_QUIRK2_PRESET_VALUE_BROKEN
;
800 slot
->host
->mmc_host_ops
.get_cd
= sdhci_o2_get_cd
;
801 host
->mmc_host_ops
.init_sd_express
= sdhci_pci_o2_init_sd_express
;
810 static int sdhci_pci_o2_probe(struct sdhci_pci_chip
*chip
)
817 switch (chip
->pdev
->device
) {
818 case PCI_DEVICE_ID_O2_8220
:
819 case PCI_DEVICE_ID_O2_8221
:
820 case PCI_DEVICE_ID_O2_8320
:
821 case PCI_DEVICE_ID_O2_8321
:
822 /* This extra setup is required due to broken ADMA. */
823 ret
= pci_read_config_byte(chip
->pdev
,
824 O2_SD_LOCK_WP
, &scratch
);
828 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch
);
830 /* Set Multi 3 to VCC3V# */
831 pci_write_config_byte(chip
->pdev
, O2_SD_MULTI_VCC3V
, 0x08);
833 /* Disable CLK_REQ# support after media DET */
834 ret
= pci_read_config_byte(chip
->pdev
,
835 O2_SD_CLKREQ
, &scratch
);
839 pci_write_config_byte(chip
->pdev
, O2_SD_CLKREQ
, scratch
);
841 /* Choose capabilities, enable SDMA. We have to write 0x01
842 * to the capabilities register first to unlock it.
844 ret
= pci_read_config_byte(chip
->pdev
, O2_SD_CAPS
, &scratch
);
848 pci_write_config_byte(chip
->pdev
, O2_SD_CAPS
, scratch
);
849 pci_write_config_byte(chip
->pdev
, O2_SD_CAPS
, 0x73);
851 /* Disable ADMA1/2 */
852 pci_write_config_byte(chip
->pdev
, O2_SD_ADMA1
, 0x39);
853 pci_write_config_byte(chip
->pdev
, O2_SD_ADMA2
, 0x08);
855 /* Disable the infinite transfer mode */
856 ret
= pci_read_config_byte(chip
->pdev
,
857 O2_SD_INF_MOD
, &scratch
);
861 pci_write_config_byte(chip
->pdev
, O2_SD_INF_MOD
, scratch
);
864 ret
= pci_read_config_byte(chip
->pdev
,
865 O2_SD_LOCK_WP
, &scratch
);
869 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch
);
871 case PCI_DEVICE_ID_O2_SDS0
:
872 case PCI_DEVICE_ID_O2_SDS1
:
873 case PCI_DEVICE_ID_O2_FUJIN2
:
875 ret
= pci_read_config_byte(chip
->pdev
,
876 O2_SD_LOCK_WP
, &scratch
);
881 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch
);
883 /* DevId=8520 subId= 0x11 or 0x12 Type Chip support */
884 if (chip
->pdev
->device
== PCI_DEVICE_ID_O2_FUJIN2
) {
885 ret
= pci_read_config_dword(chip
->pdev
,
890 scratch_32
= ((scratch_32
& 0xFF000000) >> 24);
892 /* Check Whether subId is 0x11 or 0x12 */
893 if ((scratch_32
== 0x11) || (scratch_32
== 0x12)) {
894 scratch_32
= 0x25100000;
896 o2_pci_set_baseclk(chip
, scratch_32
);
897 ret
= pci_read_config_dword(chip
->pdev
,
903 /* Enable Base Clk setting change */
904 scratch_32
|= O2_SD_FREG4_ENABLE_CLK_SET
;
905 pci_write_config_dword(chip
->pdev
,
909 /* Set Tuning Window to 4 */
910 pci_write_config_byte(chip
->pdev
,
911 O2_SD_TUNING_CTRL
, 0x44);
917 /* Enable 8520 led function */
918 o2_pci_led_enable(chip
);
920 /* Set timeout CLK */
921 ret
= pci_read_config_dword(chip
->pdev
,
922 O2_SD_CLK_SETTING
, &scratch_32
);
926 scratch_32
&= ~(0xFF00);
927 scratch_32
|= 0x07E0C800;
928 pci_write_config_dword(chip
->pdev
,
929 O2_SD_CLK_SETTING
, scratch_32
);
931 ret
= pci_read_config_dword(chip
->pdev
,
932 O2_SD_CLKREQ
, &scratch_32
);
936 pci_write_config_dword(chip
->pdev
, O2_SD_CLKREQ
, scratch_32
);
938 ret
= pci_read_config_dword(chip
->pdev
,
939 O2_SD_PLL_SETTING
, &scratch_32
);
943 scratch_32
&= ~(0x1F3F070E);
944 scratch_32
|= 0x18270106;
945 pci_write_config_dword(chip
->pdev
,
946 O2_SD_PLL_SETTING
, scratch_32
);
948 /* Disable UHS1 funciton */
949 ret
= pci_read_config_dword(chip
->pdev
,
950 O2_SD_CAP_REG2
, &scratch_32
);
953 scratch_32
&= ~(0xE0);
954 pci_write_config_dword(chip
->pdev
,
955 O2_SD_CAP_REG2
, scratch_32
);
957 if (chip
->pdev
->device
== PCI_DEVICE_ID_O2_FUJIN2
)
958 sdhci_pci_o2_fujin2_pci_init(chip
);
961 ret
= pci_read_config_byte(chip
->pdev
,
962 O2_SD_LOCK_WP
, &scratch
);
966 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch
);
968 case PCI_DEVICE_ID_O2_SEABIRD0
:
969 case PCI_DEVICE_ID_O2_SEABIRD1
:
971 ret
= pci_read_config_byte(chip
->pdev
,
972 O2_SD_LOCK_WP
, &scratch
);
977 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch
);
979 ret
= pci_read_config_dword(chip
->pdev
,
980 O2_SD_PLL_SETTING
, &scratch_32
);
984 if ((scratch_32
& 0xff000000) == 0x01000000) {
985 scratch_32
&= 0x0000FFFF;
986 scratch_32
|= 0x1F340000;
988 pci_write_config_dword(chip
->pdev
,
989 O2_SD_PLL_SETTING
, scratch_32
);
991 scratch_32
&= 0x0000FFFF;
992 scratch_32
|= 0x25100000;
994 pci_write_config_dword(chip
->pdev
,
995 O2_SD_PLL_SETTING
, scratch_32
);
997 ret
= pci_read_config_dword(chip
->pdev
,
1002 scratch_32
|= (1 << 22);
1003 pci_write_config_dword(chip
->pdev
,
1004 O2_SD_FUNC_REG4
, scratch_32
);
1007 /* Set Tuning Windows to 5 */
1008 pci_write_config_byte(chip
->pdev
,
1009 O2_SD_TUNING_CTRL
, 0x55);
1010 //Adjust 1st and 2nd CD debounce time
1011 pci_read_config_dword(chip
->pdev
, O2_SD_MISC_CTRL2
, &scratch_32
);
1012 scratch_32
&= 0xFFE7FFFF;
1013 scratch_32
|= 0x00180000;
1014 pci_write_config_dword(chip
->pdev
, O2_SD_MISC_CTRL2
, scratch_32
);
1015 pci_write_config_dword(chip
->pdev
, O2_SD_DETECT_SETTING
, 1);
1017 ret
= pci_read_config_byte(chip
->pdev
,
1018 O2_SD_LOCK_WP
, &scratch
);
1022 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch
);
1024 case PCI_DEVICE_ID_O2_GG8_9860
:
1025 case PCI_DEVICE_ID_O2_GG8_9861
:
1026 case PCI_DEVICE_ID_O2_GG8_9862
:
1027 case PCI_DEVICE_ID_O2_GG8_9863
:
1029 ret
= pci_read_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, &scratch
);
1033 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch
);
1035 /* Select mode switch source as software control */
1036 pci_read_config_word(chip
->pdev
, O2_SD_PARA_SET_REG1
, &scratch16
);
1037 scratch16
&= 0xF8FF;
1038 scratch16
|= BIT(9);
1039 pci_write_config_word(chip
->pdev
, O2_SD_PARA_SET_REG1
, scratch16
);
1041 /* set VDD1 supply source */
1042 pci_read_config_word(chip
->pdev
, O2_SD_VDDX_CTRL_REG
, &scratch16
);
1043 scratch16
&= 0xFFE3;
1044 scratch16
|= BIT(3);
1045 pci_write_config_word(chip
->pdev
, O2_SD_VDDX_CTRL_REG
, scratch16
);
1047 /* Set host drive strength*/
1049 pci_write_config_word(chip
->pdev
, O2_SD_PLL_SETTING
, scratch16
);
1051 /* Set output delay*/
1052 pci_read_config_dword(chip
->pdev
, O2_SD_OUTPUT_CLK_SOURCE_SWITCH
, &scratch_32
);
1053 scratch_32
&= 0xFF0FFF00;
1054 scratch_32
|= 0x00B0003B;
1055 pci_write_config_dword(chip
->pdev
, O2_SD_OUTPUT_CLK_SOURCE_SWITCH
, scratch_32
);
1058 ret
= pci_read_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, &scratch
);
1062 pci_write_config_byte(chip
->pdev
, O2_SD_LOCK_WP
, scratch
);
1069 return pcibios_err_to_errno(ret
);
1072 #ifdef CONFIG_PM_SLEEP
1073 static int sdhci_pci_o2_resume(struct sdhci_pci_chip
*chip
)
1075 sdhci_pci_o2_probe(chip
);
1076 return sdhci_pci_resume_host(chip
);
1080 static const struct sdhci_ops sdhci_pci_o2_ops
= {
1081 .set_clock
= sdhci_pci_o2_set_clock
,
1082 .enable_dma
= sdhci_pci_enable_dma
,
1083 .set_bus_width
= sdhci_set_bus_width
,
1084 .reset
= sdhci_reset
,
1085 .set_uhs_signaling
= sdhci_set_uhs_signaling
,
1086 .set_power
= sdhci_pci_o2_set_power
,
1089 const struct sdhci_pci_fixes sdhci_o2
= {
1090 .probe
= sdhci_pci_o2_probe
,
1091 .quirks
= SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC
,
1092 .quirks2
= SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD
,
1093 .probe_slot
= sdhci_pci_o2_probe_slot
,
1094 #ifdef CONFIG_PM_SLEEP
1095 .resume
= sdhci_pci_o2_resume
,
1097 .ops
= &sdhci_pci_o2_ops
,
1098 .priv_size
= sizeof(struct o2_host
),