1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* Driver for Realtek PCI-Express card reader
4 * Copyright(c) 2018-2019 Realtek Semiconductor Corp. All rights reserved.
7 * Rui FENG <rui_feng@realsil.com.cn>
8 * Wei WANG <wei_wang@realsil.com.cn>
11 #include <linux/module.h>
12 #include <linux/delay.h>
13 #include <linux/rtsx_pci.h>
18 static u8
rts5261_get_ic_version(struct rtsx_pcr
*pcr
)
22 rtsx_pci_read_register(pcr
, DUMMY_REG_RESET_0
, &val
);
23 return val
& IC_VERSION_MASK
;
26 static void rts5261_fill_driving(struct rtsx_pcr
*pcr
, u8 voltage
)
28 u8 driving_3v3
[4][3] = {
34 u8 driving_1v8
[4][3] = {
40 u8 (*driving
)[3], drive_sel
;
42 if (voltage
== OUTPUT_3V3
) {
43 driving
= driving_3v3
;
44 drive_sel
= pcr
->sd30_drive_sel_3v3
;
46 driving
= driving_1v8
;
47 drive_sel
= pcr
->sd30_drive_sel_1v8
;
50 rtsx_pci_write_register(pcr
, SD30_CLK_DRIVE_SEL
,
51 0xFF, driving
[drive_sel
][0]);
53 rtsx_pci_write_register(pcr
, SD30_CMD_DRIVE_SEL
,
54 0xFF, driving
[drive_sel
][1]);
56 rtsx_pci_write_register(pcr
, SD30_DAT_DRIVE_SEL
,
57 0xFF, driving
[drive_sel
][2]);
60 static void rtsx5261_fetch_vendor_settings(struct rtsx_pcr
*pcr
)
62 struct pci_dev
*pdev
= pcr
->pci
;
66 pci_read_config_dword(pdev
, PCR_SETTING_REG2
, ®
);
67 pcr_dbg(pcr
, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG2
, reg
);
69 if (!rts5261_vendor_setting_valid(reg
)) {
70 pcr_dbg(pcr
, "skip fetch vendor setting\n");
74 pcr
->card_drive_sel
&= 0x3F;
75 pcr
->card_drive_sel
|= rts5261_reg_to_card_drive_sel(reg
);
77 if (rts5261_reg_check_reverse_socket(reg
))
78 pcr
->flags
|= PCR_REVERSE_SOCKET
;
81 pci_read_config_dword(pdev
, PCR_SETTING_REG1
, ®
);
82 pcr_dbg(pcr
, "Cfg 0x%x: 0x%x\n", PCR_SETTING_REG1
, reg
);
84 pcr
->aspm_en
= rts5261_reg_to_aspm(reg
);
85 pcr
->sd30_drive_sel_1v8
= rts5261_reg_to_sd30_drive_sel_1v8(reg
);
86 pcr
->sd30_drive_sel_3v3
= rts5261_reg_to_sd30_drive_sel_3v3(reg
);
89 static void rts5261_force_power_down(struct rtsx_pcr
*pcr
, u8 pm_state
)
91 /* Set relink_time to 0 */
92 rtsx_pci_write_register(pcr
, AUTOLOAD_CFG_BASE
+ 1, MASK_8_BIT_DEF
, 0);
93 rtsx_pci_write_register(pcr
, AUTOLOAD_CFG_BASE
+ 2, MASK_8_BIT_DEF
, 0);
94 rtsx_pci_write_register(pcr
, AUTOLOAD_CFG_BASE
+ 3,
97 if (pm_state
== HOST_ENTER_S3
)
98 rtsx_pci_write_register(pcr
, pcr
->reg_pm_ctrl3
,
99 D3_DELINK_MODE_EN
, D3_DELINK_MODE_EN
);
101 rtsx_pci_write_register(pcr
, RTS5261_REG_FPDCTL
,
102 SSC_POWER_DOWN
, SSC_POWER_DOWN
);
105 static int rts5261_enable_auto_blink(struct rtsx_pcr
*pcr
)
107 return rtsx_pci_write_register(pcr
, OLT_LED_CTL
,
108 LED_SHINE_MASK
, LED_SHINE_EN
);
111 static int rts5261_disable_auto_blink(struct rtsx_pcr
*pcr
)
113 return rtsx_pci_write_register(pcr
, OLT_LED_CTL
,
114 LED_SHINE_MASK
, LED_SHINE_DISABLE
);
117 static int rts5261_turn_on_led(struct rtsx_pcr
*pcr
)
119 return rtsx_pci_write_register(pcr
, GPIO_CTL
,
123 static int rts5261_turn_off_led(struct rtsx_pcr
*pcr
)
125 return rtsx_pci_write_register(pcr
, GPIO_CTL
,
129 /* SD Pull Control Enable:
130 * SD_DAT[3:0] ==> pull up
134 * SD_CLK ==> pull down
136 static const u32 rts5261_sd_pull_ctl_enable_tbl
[] = {
137 RTSX_REG_PAIR(CARD_PULL_CTL2
, 0xAA),
138 RTSX_REG_PAIR(CARD_PULL_CTL3
, 0xE9),
142 /* SD Pull Control Disable:
143 * SD_DAT[3:0] ==> pull down
145 * SD_WP ==> pull down
146 * SD_CMD ==> pull down
147 * SD_CLK ==> pull down
149 static const u32 rts5261_sd_pull_ctl_disable_tbl
[] = {
150 RTSX_REG_PAIR(CARD_PULL_CTL2
, 0x55),
151 RTSX_REG_PAIR(CARD_PULL_CTL3
, 0xD5),
155 static int rts5261_sd_set_sample_push_timing_sd30(struct rtsx_pcr
*pcr
)
157 rtsx_pci_write_register(pcr
, SD_CFG1
, SD_MODE_SELECT_MASK
158 | SD_ASYNC_FIFO_NOT_RST
, SD_30_MODE
| SD_ASYNC_FIFO_NOT_RST
);
159 rtsx_pci_write_register(pcr
, CLK_CTL
, CLK_LOW_FREQ
, CLK_LOW_FREQ
);
160 rtsx_pci_write_register(pcr
, CARD_CLK_SOURCE
, 0xFF,
161 CRC_VAR_CLK0
| SD30_FIX_CLK
| SAMPLE_VAR_CLK1
);
162 rtsx_pci_write_register(pcr
, CLK_CTL
, CLK_LOW_FREQ
, 0);
167 static int rts5261_card_power_on(struct rtsx_pcr
*pcr
, int card
)
169 struct rtsx_cr_option
*option
= &pcr
->option
;
172 rtsx_pci_enable_ocp(pcr
);
175 rtsx_pci_write_register(pcr
, RTS5261_LDO1_CFG1
,
176 RTS5261_LDO1_TUNE_MASK
, RTS5261_LDO1_33
);
177 rtsx_pci_write_register(pcr
, RTS5261_LDO1233318_POW_CTL
,
178 RTS5261_LDO1_POWERON
, RTS5261_LDO1_POWERON
);
180 rtsx_pci_write_register(pcr
, RTS5261_LDO1233318_POW_CTL
,
181 RTS5261_LDO3318_POWERON
, RTS5261_LDO3318_POWERON
);
185 rtsx_pci_write_register(pcr
, CARD_OE
, SD_OUTPUT_EN
, SD_OUTPUT_EN
);
187 /* Initialize SD_CFG1 register */
188 rtsx_pci_write_register(pcr
, SD_CFG1
, 0xFF,
189 SD_CLK_DIVIDE_128
| SD_20_MODE
| SD_BUS_WIDTH_1BIT
);
191 rtsx_pci_write_register(pcr
, SD_SAMPLE_POINT_CTL
,
192 0xFF, SD20_RX_POS_EDGE
);
193 rtsx_pci_write_register(pcr
, SD_PUSH_POINT_CTL
, 0xFF, 0);
194 rtsx_pci_write_register(pcr
, CARD_STOP
, SD_STOP
| SD_CLR_ERR
,
195 SD_STOP
| SD_CLR_ERR
);
197 /* Reset SD_CFG3 register */
198 rtsx_pci_write_register(pcr
, SD_CFG3
, SD30_CLK_END_EN
, 0);
199 rtsx_pci_write_register(pcr
, REG_SD_STOP_SDCLK_CFG
,
200 SD30_CLK_STOP_CFG_EN
| SD30_CLK_STOP_CFG1
|
201 SD30_CLK_STOP_CFG0
, 0);
203 if (pcr
->extra_caps
& EXTRA_CAPS_SD_SDR50
||
204 pcr
->extra_caps
& EXTRA_CAPS_SD_SDR104
)
205 rts5261_sd_set_sample_push_timing_sd30(pcr
);
210 static int rts5261_switch_output_voltage(struct rtsx_pcr
*pcr
, u8 voltage
)
215 rtsx_pci_write_register(pcr
, RTS5261_CARD_PWR_CTL
,
216 RTS5261_PUPDC
, RTS5261_PUPDC
);
220 rtsx_pci_read_phy_register(pcr
, PHY_TUNE
, &val
);
221 val
|= PHY_TUNE_SDBUS_33
;
222 err
= rtsx_pci_write_phy_register(pcr
, PHY_TUNE
, val
);
226 rtsx_pci_write_register(pcr
, RTS5261_DV3318_CFG
,
227 RTS5261_DV3318_TUNE_MASK
, RTS5261_DV3318_33
);
228 rtsx_pci_write_register(pcr
, SD_PAD_CTL
,
232 rtsx_pci_read_phy_register(pcr
, PHY_TUNE
, &val
);
233 val
&= ~PHY_TUNE_SDBUS_33
;
234 err
= rtsx_pci_write_phy_register(pcr
, PHY_TUNE
, val
);
238 rtsx_pci_write_register(pcr
, RTS5261_DV3318_CFG
,
239 RTS5261_DV3318_TUNE_MASK
, RTS5261_DV3318_18
);
240 rtsx_pci_write_register(pcr
, SD_PAD_CTL
,
241 SD_IO_USING_1V8
, SD_IO_USING_1V8
);
248 rts5261_fill_driving(pcr
, voltage
);
253 static void rts5261_stop_cmd(struct rtsx_pcr
*pcr
)
255 rtsx_pci_writel(pcr
, RTSX_HCBCTLR
, STOP_CMD
);
256 rtsx_pci_writel(pcr
, RTSX_HDBCTLR
, STOP_DMA
);
257 rtsx_pci_write_register(pcr
, RTS5260_DMA_RST_CTL_0
,
258 RTS5260_DMA_RST
| RTS5260_ADMA3_RST
,
259 RTS5260_DMA_RST
| RTS5260_ADMA3_RST
);
260 rtsx_pci_write_register(pcr
, RBCTL
, RB_FLUSH
, RB_FLUSH
);
263 static void rts5261_card_before_power_off(struct rtsx_pcr
*pcr
)
265 rts5261_stop_cmd(pcr
);
266 rts5261_switch_output_voltage(pcr
, OUTPUT_3V3
);
270 static void rts5261_enable_ocp(struct rtsx_pcr
*pcr
)
274 val
= SD_OCP_INT_EN
| SD_DETECT_EN
;
275 rtsx_pci_write_register(pcr
, REG_OCPCTL
, 0xFF, val
);
279 static void rts5261_disable_ocp(struct rtsx_pcr
*pcr
)
283 mask
= SD_OCP_INT_EN
| SD_DETECT_EN
;
284 rtsx_pci_write_register(pcr
, REG_OCPCTL
, mask
, 0);
285 rtsx_pci_write_register(pcr
, RTS5261_LDO1_CFG0
,
286 RTS5261_LDO1_OCP_EN
| RTS5261_LDO1_OCP_LMT_EN
, 0);
290 static int rts5261_card_power_off(struct rtsx_pcr
*pcr
, int card
)
294 rts5261_card_before_power_off(pcr
);
295 err
= rtsx_pci_write_register(pcr
, RTS5261_LDO1233318_POW_CTL
,
296 RTS5261_LDO_POWERON_MASK
, 0);
298 if (pcr
->option
.ocp_en
)
299 rtsx_pci_disable_ocp(pcr
);
304 static void rts5261_init_ocp(struct rtsx_pcr
*pcr
)
306 struct rtsx_cr_option
*option
= &pcr
->option
;
308 if (option
->ocp_en
) {
311 rtsx_pci_write_register(pcr
, RTS5261_LDO1_CFG0
,
312 RTS5261_LDO1_OCP_EN
| RTS5261_LDO1_OCP_LMT_EN
,
313 RTS5261_LDO1_OCP_EN
| RTS5261_LDO1_OCP_LMT_EN
);
315 rtsx_pci_write_register(pcr
, RTS5261_LDO1_CFG0
,
316 RTS5261_LDO1_OCP_THD_MASK
, option
->sd_800mA_ocp_thd
);
318 rtsx_pci_write_register(pcr
, RTS5261_LDO1_CFG0
,
319 RTS5261_LDO1_OCP_LMT_THD_MASK
,
320 RTS5261_LDO1_LMT_THD_2000
);
322 mask
= SD_OCP_GLITCH_MASK
;
323 val
= pcr
->hw_param
.ocp_glitch
;
324 rtsx_pci_write_register(pcr
, REG_OCPGLITCH
, mask
, val
);
326 rts5261_enable_ocp(pcr
);
328 rtsx_pci_write_register(pcr
, RTS5261_LDO1_CFG0
,
329 RTS5261_LDO1_OCP_EN
| RTS5261_LDO1_OCP_LMT_EN
, 0);
333 static void rts5261_clear_ocpstat(struct rtsx_pcr
*pcr
)
338 mask
= SD_OCP_INT_CLR
| SD_OC_CLR
;
339 val
= SD_OCP_INT_CLR
| SD_OC_CLR
;
341 rtsx_pci_write_register(pcr
, REG_OCPCTL
, mask
, val
);
344 rtsx_pci_write_register(pcr
, REG_OCPCTL
, mask
, 0);
348 static void rts5261_process_ocp(struct rtsx_pcr
*pcr
)
350 if (!pcr
->option
.ocp_en
)
353 rtsx_pci_get_ocpstat(pcr
, &pcr
->ocp_stat
);
355 if (pcr
->ocp_stat
& (SD_OC_NOW
| SD_OC_EVER
)) {
356 rts5261_card_power_off(pcr
, RTSX_SD_CARD
);
357 rtsx_pci_write_register(pcr
, CARD_OE
, SD_OUTPUT_EN
, 0);
358 rts5261_clear_ocpstat(pcr
);
364 static int rts5261_init_from_hw(struct rtsx_pcr
*pcr
)
366 struct pci_dev
*pdev
= pcr
->pci
;
369 u8 valid
, efuse_valid
, tmp
;
371 rtsx_pci_write_register(pcr
, RTS5261_REG_PME_FORCE_CTL
,
372 REG_EFUSE_POR
| REG_EFUSE_POWER_MASK
,
373 REG_EFUSE_POR
| REG_EFUSE_POWERON
);
375 rtsx_pci_write_register(pcr
, RTS5261_EFUSE_ADDR
,
376 RTS5261_EFUSE_ADDR_MASK
, 0x00);
377 rtsx_pci_write_register(pcr
, RTS5261_EFUSE_CTL
,
378 RTS5261_EFUSE_ENABLE
| RTS5261_EFUSE_MODE_MASK
,
379 RTS5261_EFUSE_ENABLE
);
381 /* Wait transfer end */
382 for (i
= 0; i
< MAX_RW_REG_CNT
; i
++) {
383 rtsx_pci_read_register(pcr
, RTS5261_EFUSE_CTL
, &tmp
);
384 if ((tmp
& 0x80) == 0)
387 rtsx_pci_read_register(pcr
, RTS5261_EFUSE_READ_DATA
, &tmp
);
388 efuse_valid
= ((tmp
& 0x0C) >> 2);
389 pcr_dbg(pcr
, "Load efuse valid: 0x%x\n", efuse_valid
);
391 if (efuse_valid
== 0) {
392 retval
= pci_read_config_dword(pdev
, PCR_SETTING_REG2
, &lval
);
394 pcr_dbg(pcr
, "read 0x814 DW fail\n");
395 pcr_dbg(pcr
, "DW from 0x814: 0x%x\n", lval
);
397 valid
= (u8
)((lval
>> 16) & 0x03);
398 pcr_dbg(pcr
, "0x816: %d\n", valid
);
400 rtsx_pci_write_register(pcr
, RTS5261_REG_PME_FORCE_CTL
,
402 pcr_dbg(pcr
, "Disable efuse por!\n");
404 pci_read_config_dword(pdev
, PCR_SETTING_REG2
, &lval
);
405 lval
= lval
& 0x00FFFFFF;
406 retval
= pci_write_config_dword(pdev
, PCR_SETTING_REG2
, lval
);
408 pcr_dbg(pcr
, "write config fail\n");
413 static void rts5261_init_from_cfg(struct rtsx_pcr
*pcr
)
415 struct pci_dev
*pdev
= pcr
->pci
;
418 struct rtsx_cr_option
*option
= &pcr
->option
;
420 l1ss
= pci_find_ext_capability(pdev
, PCI_EXT_CAP_ID_L1SS
);
424 pci_read_config_dword(pdev
, l1ss
+ PCI_L1SS_CTL1
, &lval
);
426 if (lval
& PCI_L1SS_CTL1_ASPM_L1_1
)
427 rtsx_set_dev_flag(pcr
, ASPM_L1_1_EN
);
429 rtsx_clear_dev_flag(pcr
, ASPM_L1_1_EN
);
431 if (lval
& PCI_L1SS_CTL1_ASPM_L1_2
)
432 rtsx_set_dev_flag(pcr
, ASPM_L1_2_EN
);
434 rtsx_clear_dev_flag(pcr
, ASPM_L1_2_EN
);
436 if (lval
& PCI_L1SS_CTL1_PCIPM_L1_1
)
437 rtsx_set_dev_flag(pcr
, PM_L1_1_EN
);
439 rtsx_clear_dev_flag(pcr
, PM_L1_1_EN
);
441 if (lval
& PCI_L1SS_CTL1_PCIPM_L1_2
)
442 rtsx_set_dev_flag(pcr
, PM_L1_2_EN
);
444 rtsx_clear_dev_flag(pcr
, PM_L1_2_EN
);
446 rtsx_pci_write_register(pcr
, ASPM_FORCE_CTL
, 0xFF, 0);
447 if (option
->ltr_en
) {
450 pcie_capability_read_word(pdev
, PCI_EXP_DEVCTL2
, &val
);
451 if (val
& PCI_EXP_DEVCTL2_LTR_EN
) {
452 option
->ltr_enabled
= true;
453 option
->ltr_active
= true;
454 rtsx_set_ltr_latency(pcr
, option
->ltr_active_latency
);
456 option
->ltr_enabled
= false;
460 if (rtsx_check_dev_flag(pcr
, ASPM_L1_1_EN
| ASPM_L1_2_EN
461 | PM_L1_1_EN
| PM_L1_2_EN
))
462 option
->force_clkreq_0
= false;
464 option
->force_clkreq_0
= true;
467 static int rts5261_extra_init_hw(struct rtsx_pcr
*pcr
)
469 struct rtsx_cr_option
*option
= &pcr
->option
;
471 rtsx_pci_write_register(pcr
, RTS5261_AUTOLOAD_CFG1
,
472 CD_RESUME_EN_MASK
, CD_RESUME_EN_MASK
);
474 rts5261_init_from_cfg(pcr
);
475 rts5261_init_from_hw(pcr
);
477 /* power off efuse */
478 rtsx_pci_write_register(pcr
, RTS5261_REG_PME_FORCE_CTL
,
479 REG_EFUSE_POWER_MASK
, REG_EFUSE_POWEROFF
);
480 rtsx_pci_write_register(pcr
, L1SUB_CONFIG1
,
481 AUX_CLK_ACTIVE_SEL_MASK
, MAC_CKSW_DONE
);
482 rtsx_pci_write_register(pcr
, L1SUB_CONFIG3
, 0xFF, 0);
484 rtsx_pci_write_register(pcr
, RTS5261_AUTOLOAD_CFG4
,
485 RTS5261_AUX_CLK_16M_EN
, 0);
488 rtsx_pci_write_register(pcr
, RTS5261_AUTOLOAD_CFG4
,
489 RTS5261_FORCE_PRSNT_LOW
, 0);
490 rtsx_pci_write_register(pcr
, FUNC_FORCE_CTL
,
491 FUNC_FORCE_UPME_XMT_DBG
, FUNC_FORCE_UPME_XMT_DBG
);
493 rtsx_pci_write_register(pcr
, PCLK_CTL
,
494 PCLK_MODE_SEL
, PCLK_MODE_SEL
);
496 rtsx_pci_write_register(pcr
, PM_EVENT_DEBUG
, PME_DEBUG_0
, PME_DEBUG_0
);
497 rtsx_pci_write_register(pcr
, PM_CLK_FORCE_CTL
, CLK_PM_EN
, CLK_PM_EN
);
499 /* LED shine disabled, set initial shine cycle period */
500 rtsx_pci_write_register(pcr
, OLT_LED_CTL
, 0x0F, 0x02);
502 /* Configure driving */
503 rts5261_fill_driving(pcr
, OUTPUT_3V3
);
506 * If u_force_clkreq_0 is enabled, CLKREQ# PIN will be forced
507 * to drive low, and we forcibly request clock.
509 if (option
->force_clkreq_0
)
510 rtsx_pci_write_register(pcr
, PETXCFG
,
511 FORCE_CLKREQ_DELINK_MASK
, FORCE_CLKREQ_LOW
);
513 rtsx_pci_write_register(pcr
, PETXCFG
,
514 FORCE_CLKREQ_DELINK_MASK
, FORCE_CLKREQ_HIGH
);
516 rtsx_pci_write_register(pcr
, pcr
->reg_pm_ctrl3
, 0x10, 0x00);
517 rtsx_pci_write_register(pcr
, RTS5261_REG_PME_FORCE_CTL
,
518 FORCE_PM_CONTROL
| FORCE_PM_VALUE
, FORCE_PM_CONTROL
);
520 /* Clear Enter RTD3_cold Information*/
521 rtsx_pci_write_register(pcr
, RTS5261_FW_CTL
,
522 RTS5261_INFORM_RTD3_COLD
, 0);
527 static void rts5261_enable_aspm(struct rtsx_pcr
*pcr
, bool enable
)
529 if (pcr
->aspm_enabled
== enable
)
532 pcie_capability_clear_and_set_word(pcr
->pci
, PCI_EXP_LNKCTL
,
533 PCI_EXP_LNKCTL_ASPMC
, pcr
->aspm_en
);
534 pcr
->aspm_enabled
= enable
;
538 static void rts5261_disable_aspm(struct rtsx_pcr
*pcr
, bool enable
)
540 if (pcr
->aspm_enabled
== enable
)
543 pcie_capability_clear_and_set_word(pcr
->pci
, PCI_EXP_LNKCTL
,
544 PCI_EXP_LNKCTL_ASPMC
, 0);
545 rtsx_pci_write_register(pcr
, SD_CFG1
, SD_ASYNC_FIFO_NOT_RST
, 0);
547 pcr
->aspm_enabled
= enable
;
550 static void rts5261_set_aspm(struct rtsx_pcr
*pcr
, bool enable
)
553 rts5261_enable_aspm(pcr
, true);
555 rts5261_disable_aspm(pcr
, false);
558 static void rts5261_set_l1off_cfg_sub_d0(struct rtsx_pcr
*pcr
, int active
)
560 struct rtsx_cr_option
*option
= &pcr
->option
;
561 int aspm_L1_1
, aspm_L1_2
;
564 aspm_L1_1
= rtsx_check_dev_flag(pcr
, ASPM_L1_1_EN
);
565 aspm_L1_2
= rtsx_check_dev_flag(pcr
, ASPM_L1_2_EN
);
568 /* run, latency: 60us */
570 val
= option
->ltr_l1off_snooze_sspwrgate
;
572 /* l1off, latency: 300us */
574 val
= option
->ltr_l1off_sspwrgate
;
577 rtsx_set_l1off_sub(pcr
, val
);
580 static const struct pcr_ops rts5261_pcr_ops
= {
581 .fetch_vendor_settings
= rtsx5261_fetch_vendor_settings
,
582 .turn_on_led
= rts5261_turn_on_led
,
583 .turn_off_led
= rts5261_turn_off_led
,
584 .extra_init_hw
= rts5261_extra_init_hw
,
585 .enable_auto_blink
= rts5261_enable_auto_blink
,
586 .disable_auto_blink
= rts5261_disable_auto_blink
,
587 .card_power_on
= rts5261_card_power_on
,
588 .card_power_off
= rts5261_card_power_off
,
589 .switch_output_voltage
= rts5261_switch_output_voltage
,
590 .force_power_down
= rts5261_force_power_down
,
591 .stop_cmd
= rts5261_stop_cmd
,
592 .set_aspm
= rts5261_set_aspm
,
593 .set_l1off_cfg_sub_d0
= rts5261_set_l1off_cfg_sub_d0
,
594 .enable_ocp
= rts5261_enable_ocp
,
595 .disable_ocp
= rts5261_disable_ocp
,
596 .init_ocp
= rts5261_init_ocp
,
597 .process_ocp
= rts5261_process_ocp
,
598 .clear_ocpstat
= rts5261_clear_ocpstat
,
601 static inline u8
double_ssc_depth(u8 depth
)
603 return ((depth
> 1) ? (depth
- 1) : depth
);
606 int rts5261_pci_switch_clock(struct rtsx_pcr
*pcr
, unsigned int card_clock
,
607 u8 ssc_depth
, bool initial_mode
, bool double_clk
, bool vpclk
)
611 u8 clk_divider
, mcu_cnt
, div
;
612 static const u8 depth
[] = {
613 [RTSX_SSC_DEPTH_4M
] = RTS5261_SSC_DEPTH_4M
,
614 [RTSX_SSC_DEPTH_2M
] = RTS5261_SSC_DEPTH_2M
,
615 [RTSX_SSC_DEPTH_1M
] = RTS5261_SSC_DEPTH_1M
,
616 [RTSX_SSC_DEPTH_500K
] = RTS5261_SSC_DEPTH_512K
,
620 /* We use 250k(around) here, in initial stage */
621 if (is_version(pcr
, PID_5261
, IC_VER_D
)) {
622 clk_divider
= SD_CLK_DIVIDE_256
;
623 card_clock
= 60000000;
625 clk_divider
= SD_CLK_DIVIDE_128
;
626 card_clock
= 30000000;
629 clk_divider
= SD_CLK_DIVIDE_0
;
631 err
= rtsx_pci_write_register(pcr
, SD_CFG1
,
632 SD_CLK_DIVIDE_MASK
, clk_divider
);
636 card_clock
/= 1000000;
637 pcr_dbg(pcr
, "Switch card clock to %dMHz\n", card_clock
);
640 if (!initial_mode
&& double_clk
)
641 clk
= card_clock
* 2;
642 pcr_dbg(pcr
, "Internal SSC clock: %dMHz (cur_clock = %d)\n",
643 clk
, pcr
->cur_clock
);
645 if (clk
== pcr
->cur_clock
)
648 if (pcr
->ops
->conv_clk_and_div_n
)
649 n
= pcr
->ops
->conv_clk_and_div_n(clk
, CLK_TO_DIV_N
);
652 if ((clk
<= 4) || (n
> 396))
655 mcu_cnt
= 125/clk
+ 3;
660 while ((n
< MIN_DIV_N_PCR
- 4) && (div
< CLK_DIV_8
)) {
661 if (pcr
->ops
->conv_clk_and_div_n
) {
662 int dbl_clk
= pcr
->ops
->conv_clk_and_div_n(n
,
664 n
= pcr
->ops
->conv_clk_and_div_n(dbl_clk
,
673 pcr_dbg(pcr
, "n = %d, div = %d\n", n
, div
);
675 ssc_depth
= depth
[ssc_depth
];
677 ssc_depth
= double_ssc_depth(ssc_depth
);
680 if (div
== CLK_DIV_2
) {
684 ssc_depth
= RTS5261_SSC_DEPTH_8M
;
685 } else if (div
== CLK_DIV_4
) {
689 ssc_depth
= RTS5261_SSC_DEPTH_8M
;
690 } else if (div
== CLK_DIV_8
) {
694 ssc_depth
= RTS5261_SSC_DEPTH_8M
;
699 pcr_dbg(pcr
, "ssc_depth = %d\n", ssc_depth
);
701 rtsx_pci_init_cmd(pcr
);
702 rtsx_pci_add_cmd(pcr
, WRITE_REG_CMD
, CLK_CTL
,
703 CLK_LOW_FREQ
, CLK_LOW_FREQ
);
704 rtsx_pci_add_cmd(pcr
, WRITE_REG_CMD
, CLK_DIV
,
705 0xFF, (div
<< 4) | mcu_cnt
);
706 rtsx_pci_add_cmd(pcr
, WRITE_REG_CMD
, SSC_CTL1
, SSC_RSTB
, 0);
707 rtsx_pci_add_cmd(pcr
, WRITE_REG_CMD
, SSC_CTL2
,
708 SSC_DEPTH_MASK
, ssc_depth
);
709 rtsx_pci_add_cmd(pcr
, WRITE_REG_CMD
, SSC_DIV_N_0
, 0xFF, n
);
710 rtsx_pci_add_cmd(pcr
, WRITE_REG_CMD
, SSC_CTL1
, SSC_RSTB
, SSC_RSTB
);
712 rtsx_pci_add_cmd(pcr
, WRITE_REG_CMD
, SD_VPCLK0_CTL
,
714 rtsx_pci_add_cmd(pcr
, WRITE_REG_CMD
, SD_VPCLK1_CTL
,
716 rtsx_pci_add_cmd(pcr
, WRITE_REG_CMD
, SD_VPCLK0_CTL
,
717 PHASE_NOT_RESET
, PHASE_NOT_RESET
);
718 rtsx_pci_add_cmd(pcr
, WRITE_REG_CMD
, SD_VPCLK1_CTL
,
719 PHASE_NOT_RESET
, PHASE_NOT_RESET
);
722 err
= rtsx_pci_send_cmd(pcr
, 2000);
726 /* Wait SSC clock stable */
727 udelay(SSC_CLOCK_STABLE_WAIT
);
728 err
= rtsx_pci_write_register(pcr
, CLK_CTL
, CLK_LOW_FREQ
, 0);
732 pcr
->cur_clock
= clk
;
737 void rts5261_init_params(struct rtsx_pcr
*pcr
)
739 struct rtsx_cr_option
*option
= &pcr
->option
;
740 struct rtsx_hw_param
*hw_param
= &pcr
->hw_param
;
742 pcr
->extra_caps
= EXTRA_CAPS_SD_SDR50
| EXTRA_CAPS_SD_SDR104
;
744 pcr
->ops
= &rts5261_pcr_ops
;
747 pcr
->card_drive_sel
= RTSX_CARD_DRIVE_DEFAULT
;
748 pcr
->sd30_drive_sel_1v8
= CFG_DRIVER_TYPE_B
;
749 pcr
->sd30_drive_sel_3v3
= CFG_DRIVER_TYPE_B
;
750 pcr
->aspm_en
= ASPM_L1_EN
;
751 pcr
->tx_initial_phase
= SET_CLOCK_PHASE(27, 27, 11);
752 pcr
->rx_initial_phase
= SET_CLOCK_PHASE(24, 6, 5);
754 pcr
->ic_version
= rts5261_get_ic_version(pcr
);
755 pcr
->sd_pull_ctl_enable_tbl
= rts5261_sd_pull_ctl_enable_tbl
;
756 pcr
->sd_pull_ctl_disable_tbl
= rts5261_sd_pull_ctl_disable_tbl
;
758 pcr
->reg_pm_ctrl3
= RTS5261_AUTOLOAD_CFG3
;
760 option
->dev_flags
= (LTR_L1SS_PWR_GATE_CHECK_CARD_EN
761 | LTR_L1SS_PWR_GATE_EN
);
762 option
->ltr_en
= true;
764 /* init latency of active, idle, L1OFF to 60us, 300us, 3ms */
765 option
->ltr_active_latency
= LTR_ACTIVE_LATENCY_DEF
;
766 option
->ltr_idle_latency
= LTR_IDLE_LATENCY_DEF
;
767 option
->ltr_l1off_latency
= LTR_L1OFF_LATENCY_DEF
;
768 option
->l1_snooze_delay
= L1_SNOOZE_DELAY_DEF
;
769 option
->ltr_l1off_sspwrgate
= 0x7F;
770 option
->ltr_l1off_snooze_sspwrgate
= 0x78;
773 hw_param
->interrupt_en
|= SD_OC_INT_EN
;
774 hw_param
->ocp_glitch
= SD_OCP_GLITCH_800U
;
775 option
->sd_800mA_ocp_thd
= RTS5261_LDO1_OCP_THD_1040
;