1 // SPDX-License-Identifier: GPL-2.0+
3 * Driver for Realtek PCI-Express card reader
5 * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved.
12 #include <linux/blkdev.h>
13 #include <linux/kthread.h>
14 #include <linux/sched.h>
15 #include <linux/workqueue.h>
16 #include <linux/vmalloc.h>
23 static void rtsx_calibration(struct rtsx_chip *chip)
25 rtsx_write_phy_register(chip, 0x1B, 0x135E);
27 rtsx_write_phy_register(chip, 0x00, 0x0280);
28 rtsx_write_phy_register(chip, 0x01, 0x7112);
29 rtsx_write_phy_register(chip, 0x01, 0x7110);
30 rtsx_write_phy_register(chip, 0x01, 0x7112);
31 rtsx_write_phy_register(chip, 0x01, 0x7113);
32 rtsx_write_phy_register(chip, 0x00, 0x0288);
35 void rtsx_enable_card_int(struct rtsx_chip *chip)
37 u32 reg = rtsx_readl(chip, RTSX_BIER);
40 for (i = 0; i <= chip->max_lun; i++) {
41 if (chip->lun2card[i] & XD_CARD)
43 if (chip->lun2card[i] & SD_CARD)
45 if (chip->lun2card[i] & MS_CARD)
48 if (chip->hw_bypass_sd)
49 reg &= ~((u32)SD_INT_EN);
51 rtsx_writel(chip, RTSX_BIER, reg);
54 void rtsx_enable_bus_int(struct rtsx_chip *chip)
57 #ifndef DISABLE_CARD_INT
61 reg = TRANS_OK_INT_EN | TRANS_FAIL_INT_EN;
63 #ifndef DISABLE_CARD_INT
64 for (i = 0; i <= chip->max_lun; i++) {
65 dev_dbg(rtsx_dev(chip), "lun2card[%d] = 0x%02x\n",
66 i, chip->lun2card[i]);
68 if (chip->lun2card[i] & XD_CARD)
70 if (chip->lun2card[i] & SD_CARD)
72 if (chip->lun2card[i] & MS_CARD)
75 if (chip->hw_bypass_sd)
76 reg &= ~((u32)SD_INT_EN);
79 if (chip->ic_version >= IC_VER_C)
85 reg |= DATA_DONE_INT_EN;
87 /* Enable Bus Interrupt */
88 rtsx_writel(chip, RTSX_BIER, reg);
90 dev_dbg(rtsx_dev(chip), "RTSX_BIER: 0x%08x\n", reg);
93 void rtsx_disable_bus_int(struct rtsx_chip *chip)
95 rtsx_writel(chip, RTSX_BIER, 0);
98 static int rtsx_pre_handle_sdio_old(struct rtsx_chip *chip)
102 if (chip->ignore_sd && CHK_SDIO_EXIST(chip)) {
103 if (chip->asic_code) {
104 retval = rtsx_write_register(chip, CARD_PULL_CTL5,
106 MS_INS_PU | SD_WP_PU |
107 SD_CD_PU | SD_CMD_PU);
111 retval = rtsx_write_register(chip, FPGA_PULL_CTL,
113 FPGA_SD_PULL_CTL_EN);
117 retval = rtsx_write_register(chip, CARD_SHARE_MODE, 0xFF,
122 /* Enable SDIO internal clock */
123 retval = rtsx_write_register(chip, 0xFF2C, 0x01, 0x01);
127 retval = rtsx_write_register(chip, SDIO_CTRL, 0xFF,
128 SDIO_BUS_CTRL | SDIO_CD_CTRL);
135 chip->need_reset |= SD_CARD;
138 return STATUS_SUCCESS;
141 #ifdef HW_AUTO_SWITCH_SD_BUS
142 static int rtsx_pre_handle_sdio_new(struct rtsx_chip *chip)
145 bool sw_bypass_sd = false;
148 if (chip->driver_first_load) {
149 if (CHECK_PID(chip, 0x5288)) {
150 retval = rtsx_read_register(chip, 0xFE5A, &tmp);
155 } else if (CHECK_PID(chip, 0x5208)) {
156 retval = rtsx_read_register(chip, 0xFE70, &tmp);
163 if (chip->sdio_in_charge)
166 dev_dbg(rtsx_dev(chip), "chip->sdio_in_charge = %d\n",
167 chip->sdio_in_charge);
168 dev_dbg(rtsx_dev(chip), "chip->driver_first_load = %d\n",
169 chip->driver_first_load);
170 dev_dbg(rtsx_dev(chip), "sw_bypass_sd = %d\n",
174 u8 cd_toggle_mask = 0;
176 retval = rtsx_read_register(chip, TLPTISTAT, &tmp);
179 cd_toggle_mask = 0x08;
181 if (tmp & cd_toggle_mask) {
182 /* Disable sdio_bus_auto_switch */
183 if (CHECK_PID(chip, 0x5288)) {
184 retval = rtsx_write_register(chip, 0xFE5A,
188 } else if (CHECK_PID(chip, 0x5208)) {
189 retval = rtsx_write_register(chip, 0xFE70,
195 retval = rtsx_write_register(chip, TLPTISTAT, 0xFF,
200 chip->need_reset |= SD_CARD;
202 dev_dbg(rtsx_dev(chip), "Chip inserted with SDIO!\n");
204 if (chip->asic_code) {
205 retval = sd_pull_ctl_enable(chip);
206 if (retval != STATUS_SUCCESS)
209 retval = rtsx_write_register
210 (chip, FPGA_PULL_CTL,
211 FPGA_SD_PULL_CTL_BIT | 0x20,
216 retval = card_share_mode(chip, SD_CARD);
217 if (retval != STATUS_SUCCESS)
220 /* Enable sdio_bus_auto_switch */
221 if (CHECK_PID(chip, 0x5288)) {
222 retval = rtsx_write_register(chip, 0xFE5A,
226 } else if (CHECK_PID(chip, 0x5208)) {
227 retval = rtsx_write_register(chip, 0xFE70,
233 chip->chip_insert_with_sdio = 1;
237 retval = rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
241 chip->need_reset |= SD_CARD;
244 return STATUS_SUCCESS;
248 static int rtsx_reset_aspm(struct rtsx_chip *chip)
252 if (chip->dynamic_aspm) {
253 if (!CHK_SDIO_EXIST(chip) || !CHECK_PID(chip, 0x5288))
254 return STATUS_SUCCESS;
256 ret = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF,
257 chip->aspm_l0s_l1_en);
258 if (ret != STATUS_SUCCESS)
261 return STATUS_SUCCESS;
264 if (CHECK_PID(chip, 0x5208)) {
265 ret = rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF, 0x3F);
269 ret = rtsx_write_config_byte(chip, LCTLR, chip->aspm_l0s_l1_en);
270 if (ret != STATUS_SUCCESS)
273 chip->aspm_level[0] = chip->aspm_l0s_l1_en;
274 if (CHK_SDIO_EXIST(chip)) {
275 chip->aspm_level[1] = chip->aspm_l0s_l1_en;
276 ret = rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
277 0xC0, 0xFF, chip->aspm_l0s_l1_en);
278 if (ret != STATUS_SUCCESS)
282 chip->aspm_enabled = 1;
284 return STATUS_SUCCESS;
287 static int rtsx_enable_pcie_intr(struct rtsx_chip *chip)
291 if (!chip->asic_code || !CHECK_PID(chip, 0x5208)) {
292 rtsx_enable_bus_int(chip);
293 return STATUS_SUCCESS;
296 if (chip->phy_debug_mode) {
297 ret = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0);
300 rtsx_disable_bus_int(chip);
302 rtsx_enable_bus_int(chip);
305 if (chip->ic_version >= IC_VER_D) {
308 ret = rtsx_read_phy_register(chip, 0x00, ®);
309 if (ret != STATUS_SUCCESS)
314 ret = rtsx_write_phy_register(chip, 0x00, reg);
315 if (ret != STATUS_SUCCESS)
318 ret = rtsx_read_phy_register(chip, 0x1C, ®);
319 if (ret != STATUS_SUCCESS)
323 ret = rtsx_write_phy_register(chip, 0x1C, reg);
324 if (ret != STATUS_SUCCESS)
328 if (chip->driver_first_load && chip->ic_version < IC_VER_C)
329 rtsx_calibration(chip);
331 return STATUS_SUCCESS;
334 int rtsx_reset_chip(struct rtsx_chip *chip)
338 rtsx_writel(chip, RTSX_HCBAR, chip->host_cmds_addr);
340 rtsx_disable_aspm(chip);
342 retval = rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 0x00);
346 /* Disable card clock */
347 retval = rtsx_write_register(chip, CARD_CLK_EN, 0x1E, 0);
352 /* SSC power on, OCD power on */
353 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
354 retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN, 0);
358 retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN,
364 retval = rtsx_write_register(chip, OCPPARA1, OCP_TIME_MASK,
368 retval = rtsx_write_register(chip, OCPPARA2, OCP_THD_MASK,
372 retval = rtsx_write_register(chip, OCPCTL, 0xFF,
373 CARD_OC_INT_EN | CARD_DETECT_EN);
378 retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN,
384 if (!CHECK_PID(chip, 0x5288)) {
385 retval = rtsx_write_register(chip, CARD_GPIO_DIR, 0xFF, 0x03);
391 retval = rtsx_write_register(chip, CARD_GPIO, 0xFF, 0x03);
395 /* Reset delink mode */
396 retval = rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0);
400 /* Card driving select */
401 retval = rtsx_write_register(chip, CARD_DRIVE_SEL, 0xFF,
402 chip->card_drive_sel);
406 #ifdef LED_AUTO_BLINK
407 retval = rtsx_write_register(chip, CARD_AUTO_BLINK, 0xFF,
408 LED_BLINK_SPEED | BLINK_EN | LED_GPIO0);
413 if (chip->asic_code) {
414 /* Enable SSC Clock */
415 retval = rtsx_write_register(chip, SSC_CTL1, 0xFF,
416 SSC_8X_EN | SSC_SEL_4M);
419 retval = rtsx_write_register(chip, SSC_CTL2, 0xFF, 0x12);
425 * Disable cd_pwr_save (u_force_rst_core_en=0, u_cd_rst_core_en=0)
427 * bit[1] u_cd_rst_core_en rst_value = 0
428 * bit[2] u_force_rst_core_en rst_value = 0
429 * bit[5] u_mac_phy_rst_n_dbg rst_value = 1
430 * bit[4] u_non_sticky_rst_n_dbg rst_value = 0
432 retval = rtsx_write_register(chip, CHANGE_LINK_STATE, 0x16, 0x10);
437 if (chip->aspm_l0s_l1_en) {
438 retval = rtsx_reset_aspm(chip);
439 if (retval != STATUS_SUCCESS)
442 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
443 retval = rtsx_write_phy_register(chip, 0x07, 0x0129);
444 if (retval != STATUS_SUCCESS)
447 retval = rtsx_write_config_byte(chip, LCTLR,
448 chip->aspm_l0s_l1_en);
449 if (retval != STATUS_SUCCESS)
453 retval = rtsx_write_config_byte(chip, 0x81, 1);
454 if (retval != STATUS_SUCCESS)
457 if (CHK_SDIO_EXIST(chip)) {
458 retval = rtsx_write_cfg_dw(chip,
459 CHECK_PID(chip, 0x5288) ? 2 : 1,
460 0xC0, 0xFF00, 0x0100);
462 if (retval != STATUS_SUCCESS)
466 if (CHECK_PID(chip, 0x5288) && !CHK_SDIO_EXIST(chip)) {
467 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFFFF, 0x0103);
468 if (retval != STATUS_SUCCESS)
471 retval = rtsx_write_cfg_dw(chip, 2, 0x84, 0xFF, 0x03);
472 if (retval != STATUS_SUCCESS)
476 retval = rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT,
481 retval = rtsx_write_register(chip, PERST_GLITCH_WIDTH, 0xFF, 0x80);
485 retval = rtsx_enable_pcie_intr(chip);
486 if (retval != STATUS_SUCCESS)
489 chip->need_reset = 0;
491 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
493 if (chip->hw_bypass_sd)
495 dev_dbg(rtsx_dev(chip), "In %s, chip->int_reg = 0x%x\n", __func__,
497 if (chip->int_reg & SD_EXIST) {
498 #ifdef HW_AUTO_SWITCH_SD_BUS
499 if (CHECK_PID(chip, 0x5208) && chip->ic_version < IC_VER_C)
500 retval = rtsx_pre_handle_sdio_old(chip);
502 retval = rtsx_pre_handle_sdio_new(chip);
504 dev_dbg(rtsx_dev(chip), "chip->need_reset = 0x%x (%s)\n",
505 (unsigned int)(chip->need_reset), __func__);
506 #else /* HW_AUTO_SWITCH_SD_BUS */
507 retval = rtsx_pre_handle_sdio_old(chip);
508 #endif /* HW_AUTO_SWITCH_SD_BUS */
509 if (retval != STATUS_SUCCESS)
514 retval = rtsx_write_register(chip, SDIO_CTRL,
515 SDIO_BUS_CTRL | SDIO_CD_CTRL, 0);
521 if (chip->int_reg & XD_EXIST)
522 chip->need_reset |= XD_CARD;
523 if (chip->int_reg & MS_EXIST)
524 chip->need_reset |= MS_CARD;
525 if (chip->int_reg & CARD_EXIST) {
526 retval = rtsx_write_register(chip, SSC_CTL1, SSC_RSTB,
532 dev_dbg(rtsx_dev(chip), "In %s, chip->need_reset = 0x%x\n", __func__,
533 (unsigned int)(chip->need_reset));
535 retval = rtsx_write_register(chip, RCCTL, 0x01, 0x00);
539 if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
540 /* Turn off main power when entering S3/S4 state */
541 retval = rtsx_write_register(chip, MAIN_PWR_OFF_CTL, 0x03,
547 if (chip->remote_wakeup_en && !chip->auto_delink_en) {
548 retval = rtsx_write_register(chip, WAKE_SEL_CTL, 0x07, 0x07);
551 if (chip->aux_pwr_exist) {
552 retval = rtsx_write_register(chip, PME_FORCE_CTL,
558 retval = rtsx_write_register(chip, WAKE_SEL_CTL, 0x07, 0x04);
561 retval = rtsx_write_register(chip, PME_FORCE_CTL, 0xFF, 0x30);
566 if (CHECK_PID(chip, 0x5208) && chip->ic_version >= IC_VER_D) {
567 retval = rtsx_write_register(chip, PETXCFG, 0x1C, 0x14);
572 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
573 retval = rtsx_clr_phy_reg_bit(chip, 0x1C, 2);
574 if (retval != STATUS_SUCCESS)
578 if (chip->ft2_fast_mode) {
579 retval = rtsx_write_register(chip, CARD_PWR_CTL, 0xFF,
580 MS_PARTIAL_POWER_ON |
581 SD_PARTIAL_POWER_ON);
584 udelay(chip->pmos_pwr_on_interval);
585 retval = rtsx_write_register(chip, CARD_PWR_CTL, 0xFF,
586 MS_POWER_ON | SD_POWER_ON);
594 rtsx_reset_detected_cards(chip, 0);
596 chip->driver_first_load = 0;
598 return STATUS_SUCCESS;
601 static inline int valid_sd_speed_prior(u32 sd_speed_prior)
603 bool valid_para = true;
606 for (i = 0; i < 4; i++) {
607 u8 tmp = (u8)(sd_speed_prior >> (i * 8));
609 if (tmp < 0x01 || tmp > 0x04) {
618 static inline int valid_sd_current_prior(u32 sd_current_prior)
620 bool valid_para = true;
623 for (i = 0; i < 4; i++) {
624 u8 tmp = (u8)(sd_current_prior >> (i * 8));
635 static int rts5208_init(struct rtsx_chip *chip)
641 retval = rtsx_write_register(chip, CLK_SEL, 0x03, 0x03);
644 retval = rtsx_read_register(chip, CLK_SEL, &val);
647 chip->asic_code = val == 0 ? 1 : 0;
649 if (chip->asic_code) {
650 retval = rtsx_read_phy_register(chip, 0x1C, ®);
651 if (retval != STATUS_SUCCESS)
654 dev_dbg(rtsx_dev(chip), "Value of phy register 0x1C is 0x%x\n",
656 chip->ic_version = (reg >> 4) & 0x07;
657 chip->phy_debug_mode = reg & PHY_DEBUG_MODE ? 1 : 0;
660 retval = rtsx_read_register(chip, 0xFE80, &val);
663 chip->ic_version = val;
664 chip->phy_debug_mode = 0;
667 retval = rtsx_read_register(chip, PDINFO, &val);
670 dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
671 chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
673 retval = rtsx_read_register(chip, 0xFE50, &val);
676 chip->hw_bypass_sd = val & 0x01 ? 1 : 0;
678 rtsx_read_config_byte(chip, 0x0E, &val);
680 SET_SDIO_EXIST(chip);
682 CLR_SDIO_EXIST(chip);
684 if (chip->use_hw_setting) {
685 retval = rtsx_read_register(chip, CHANGE_LINK_STATE, &val);
688 chip->auto_delink_en = val & 0x80 ? 1 : 0;
691 return STATUS_SUCCESS;
694 static int rts5288_init(struct rtsx_chip *chip)
697 u8 val = 0, max_func;
700 retval = rtsx_write_register(chip, CLK_SEL, 0x03, 0x03);
703 retval = rtsx_read_register(chip, CLK_SEL, &val);
706 chip->asic_code = val == 0 ? 1 : 0;
708 chip->ic_version = 0;
709 chip->phy_debug_mode = 0;
711 retval = rtsx_read_register(chip, PDINFO, &val);
714 dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
715 chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
717 retval = rtsx_read_register(chip, CARD_SHARE_MODE, &val);
720 dev_dbg(rtsx_dev(chip), "CARD_SHARE_MODE: 0x%x\n", val);
721 chip->baro_pkg = val & 0x04 ? QFN : LQFP;
723 retval = rtsx_read_register(chip, 0xFE5A, &val);
726 chip->hw_bypass_sd = val & 0x10 ? 1 : 0;
728 retval = rtsx_read_cfg_dw(chip, 0, 0x718, &lval);
729 if (retval != STATUS_SUCCESS)
732 max_func = (u8)((lval >> 29) & 0x07);
733 dev_dbg(rtsx_dev(chip), "Max function number: %d\n", max_func);
734 if (max_func == 0x02)
735 SET_SDIO_EXIST(chip);
737 CLR_SDIO_EXIST(chip);
739 if (chip->use_hw_setting) {
740 retval = rtsx_read_register(chip, CHANGE_LINK_STATE, &val);
743 chip->auto_delink_en = val & 0x80 ? 1 : 0;
745 if (CHECK_BARO_PKG(chip, LQFP))
746 chip->lun_mode = SD_MS_1LUN;
748 chip->lun_mode = DEFAULT_SINGLE;
751 return STATUS_SUCCESS;
754 int rtsx_init_chip(struct rtsx_chip *chip)
756 struct sd_info *sd_card = &chip->sd_card;
757 struct xd_info *xd_card = &chip->xd_card;
758 struct ms_info *ms_card = &chip->ms_card;
762 dev_dbg(rtsx_dev(chip), "Vendor ID: 0x%04x, Product ID: 0x%04x\n",
763 chip->vendor_id, chip->product_id);
765 chip->ic_version = 0;
767 memset(xd_card, 0, sizeof(struct xd_info));
768 memset(sd_card, 0, sizeof(struct sd_info));
769 memset(ms_card, 0, sizeof(struct ms_info));
771 chip->xd_reset_counter = 0;
772 chip->sd_reset_counter = 0;
773 chip->ms_reset_counter = 0;
775 chip->xd_show_cnt = MAX_SHOW_CNT;
776 chip->sd_show_cnt = MAX_SHOW_CNT;
777 chip->ms_show_cnt = MAX_SHOW_CNT;
780 chip->auto_delink_cnt = 0;
781 chip->auto_delink_allowed = 1;
782 rtsx_set_stat(chip, RTSX_STAT_INIT);
784 chip->aspm_enabled = 0;
785 chip->chip_insert_with_sdio = 0;
788 chip->sdio_counter = 0;
790 chip->phy_debug_mode = 0;
791 chip->sdio_func_exist = 0;
792 memset(chip->sdio_raw_data, 0, 12);
794 for (i = 0; i < MAX_ALLOWED_LUN_CNT; i++) {
795 set_sense_type(chip, i, SENSE_TYPE_NO_SENSE);
796 chip->rw_fail_cnt[i] = 0;
799 if (!valid_sd_speed_prior(chip->sd_speed_prior))
800 chip->sd_speed_prior = 0x01040203;
802 dev_dbg(rtsx_dev(chip), "sd_speed_prior = 0x%08x\n",
803 chip->sd_speed_prior);
805 if (!valid_sd_current_prior(chip->sd_current_prior))
806 chip->sd_current_prior = 0x00010203;
808 dev_dbg(rtsx_dev(chip), "sd_current_prior = 0x%08x\n",
809 chip->sd_current_prior);
811 if (chip->sd_ddr_tx_phase > 31 || chip->sd_ddr_tx_phase < 0)
812 chip->sd_ddr_tx_phase = 0;
814 if (chip->mmc_ddr_tx_phase > 31 || chip->mmc_ddr_tx_phase < 0)
815 chip->mmc_ddr_tx_phase = 0;
817 retval = rtsx_write_register(chip, FPDCTL, SSC_POWER_DOWN, 0);
821 retval = rtsx_write_register(chip, CLK_DIV, 0x07, 0x07);
824 dev_dbg(rtsx_dev(chip), "chip->use_hw_setting = %d\n",
825 chip->use_hw_setting);
827 if (CHECK_PID(chip, 0x5208)) {
828 retval = rts5208_init(chip);
829 if (retval != STATUS_SUCCESS)
832 } else if (CHECK_PID(chip, 0x5288)) {
833 retval = rts5288_init(chip);
834 if (retval != STATUS_SUCCESS)
838 if (chip->ss_en == 2)
841 dev_dbg(rtsx_dev(chip), "chip->asic_code = %d\n", chip->asic_code);
842 dev_dbg(rtsx_dev(chip), "chip->ic_version = 0x%x\n", chip->ic_version);
843 dev_dbg(rtsx_dev(chip), "chip->phy_debug_mode = %d\n",
844 chip->phy_debug_mode);
845 dev_dbg(rtsx_dev(chip), "chip->aux_pwr_exist = %d\n",
846 chip->aux_pwr_exist);
847 dev_dbg(rtsx_dev(chip), "chip->sdio_func_exist = %d\n",
848 chip->sdio_func_exist);
849 dev_dbg(rtsx_dev(chip), "chip->hw_bypass_sd = %d\n",
851 dev_dbg(rtsx_dev(chip), "chip->aspm_l0s_l1_en = %d\n",
852 chip->aspm_l0s_l1_en);
853 dev_dbg(rtsx_dev(chip), "chip->lun_mode = %d\n", chip->lun_mode);
854 dev_dbg(rtsx_dev(chip), "chip->auto_delink_en = %d\n",
855 chip->auto_delink_en);
856 dev_dbg(rtsx_dev(chip), "chip->ss_en = %d\n", chip->ss_en);
857 dev_dbg(rtsx_dev(chip), "chip->baro_pkg = %d\n", chip->baro_pkg);
859 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
860 chip->card2lun[SD_CARD] = 0;
861 chip->card2lun[MS_CARD] = 1;
862 chip->card2lun[XD_CARD] = 0xFF;
863 chip->lun2card[0] = SD_CARD;
864 chip->lun2card[1] = MS_CARD;
866 SET_SDIO_IGNORED(chip);
867 } else if (CHECK_LUN_MODE(chip, SD_MS_1LUN)) {
868 chip->card2lun[SD_CARD] = 0;
869 chip->card2lun[MS_CARD] = 0;
870 chip->card2lun[XD_CARD] = 0xFF;
871 chip->lun2card[0] = SD_CARD | MS_CARD;
874 chip->card2lun[XD_CARD] = 0;
875 chip->card2lun[SD_CARD] = 0;
876 chip->card2lun[MS_CARD] = 0;
877 chip->lun2card[0] = XD_CARD | SD_CARD | MS_CARD;
881 retval = rtsx_reset_chip(chip);
882 if (retval != STATUS_SUCCESS)
885 return STATUS_SUCCESS;
888 void rtsx_release_chip(struct rtsx_chip *chip)
890 xd_free_l2p_tbl(chip);
891 ms_free_l2p_tbl(chip);
892 chip->card_exist = 0;
893 chip->card_ready = 0;
896 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
897 static inline void rtsx_blink_led(struct rtsx_chip *chip)
899 if (chip->card_exist && chip->blink_led) {
900 if (chip->led_toggle_counter < LED_TOGGLE_INTERVAL) {
901 chip->led_toggle_counter++;
903 chip->led_toggle_counter = 0;
904 toggle_gpio(chip, LED_GPIO);
910 static void rtsx_monitor_aspm_config(struct rtsx_chip *chip)
912 bool reg_changed, maybe_support_aspm;
914 u8 reg0 = 0, reg1 = 0;
916 maybe_support_aspm = false;
918 rtsx_read_config_byte(chip, LCTLR, ®0);
919 if (chip->aspm_level[0] != reg0) {
921 chip->aspm_level[0] = reg0;
923 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
924 rtsx_read_cfg_dw(chip, 1, 0xC0, &tmp);
926 if (chip->aspm_level[1] != reg1) {
928 chip->aspm_level[1] = reg1;
931 if ((reg0 & 0x03) && (reg1 & 0x03))
932 maybe_support_aspm = true;
936 maybe_support_aspm = true;
940 if (maybe_support_aspm)
941 chip->aspm_l0s_l1_en = 0x03;
943 dev_dbg(rtsx_dev(chip),
944 "aspm_level[0] = 0x%02x, aspm_level[1] = 0x%02x\n",
945 chip->aspm_level[0], chip->aspm_level[1]);
947 if (chip->aspm_l0s_l1_en) {
948 chip->aspm_enabled = 1;
950 chip->aspm_enabled = 0;
953 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF,
954 0x30 | chip->aspm_level[0] |
955 (chip->aspm_level[1] << 2));
959 static void rtsx_manage_ocp(struct rtsx_chip *chip)
965 rtsx_read_register(chip, OCPSTAT, &chip->ocp_stat);
967 if (chip->card_exist & SD_CARD)
968 sd_power_off_card3v3(chip);
969 else if (chip->card_exist & MS_CARD)
970 ms_power_off_card3v3(chip);
971 else if (chip->card_exist & XD_CARD)
972 xd_power_off_card3v3(chip);
978 static void rtsx_manage_sd_lock(struct rtsx_chip *chip)
980 #ifdef SUPPORT_SD_LOCK
981 struct sd_info *sd_card = &chip->sd_card;
984 if (!sd_card->sd_erase_status)
987 if (chip->card_exist & SD_CARD) {
988 rtsx_read_register(chip, 0xFD30, &val);
990 sd_card->sd_erase_status = SD_NOT_ERASE;
991 sd_card->sd_lock_notify = 1;
992 chip->need_reinit |= SD_CARD;
995 sd_card->sd_erase_status = SD_NOT_ERASE;
1000 static bool rtsx_is_ss_allowed(struct rtsx_chip *chip)
1004 if (!chip->ss_en || CHECK_PID(chip, 0x5288))
1007 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
1008 rtsx_read_cfg_dw(chip, 1, 0x04, &val);
1016 static void rtsx_manage_ss(struct rtsx_chip *chip)
1018 if (!rtsx_is_ss_allowed(chip) || chip->sd_io)
1021 if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) {
1022 chip->ss_counter = 0;
1026 if (chip->ss_counter < (chip->ss_idle_period / POLLING_INTERVAL))
1029 rtsx_exclusive_enter_ss(chip);
1032 static void rtsx_manage_aspm(struct rtsx_chip *chip)
1036 if (!CHECK_PID(chip, 0x5208))
1039 rtsx_monitor_aspm_config(chip);
1041 #ifdef SUPPORT_SDIO_ASPM
1042 if (!CHK_SDIO_EXIST(chip) || CHK_SDIO_IGNORED(chip) ||
1043 !chip->aspm_l0s_l1_en || !chip->dynamic_aspm)
1047 dynamic_configure_sdio_aspm(chip);
1051 if (chip->sdio_aspm)
1054 dev_dbg(rtsx_dev(chip), "SDIO enter ASPM!\n");
1055 data = 0x30 | (chip->aspm_level[1] << 2);
1056 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC, data);
1057 chip->sdio_aspm = 1;
1061 static void rtsx_manage_idle(struct rtsx_chip *chip)
1063 if (chip->idle_counter < IDLE_MAX_COUNT) {
1064 chip->idle_counter++;
1068 if (rtsx_get_stat(chip) == RTSX_STAT_IDLE)
1071 dev_dbg(rtsx_dev(chip), "Idle state!\n");
1072 rtsx_set_stat(chip, RTSX_STAT_IDLE);
1074 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1075 chip->led_toggle_counter = 0;
1077 rtsx_force_power_on(chip, SSC_PDCTL);
1079 turn_off_led(chip, LED_GPIO);
1081 if (chip->auto_power_down && !chip->card_ready && !chip->sd_io)
1082 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1085 static void rtsx_manage_2lun_mode(struct rtsx_chip *chip)
1090 sd_oc = chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER);
1091 ms_oc = chip->ocp_stat & (MS_OC_NOW | MS_OC_EVER);
1094 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
1097 if (sd_oc && (chip->card_exist & SD_CARD)) {
1098 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1099 card_power_off(chip, SD_CARD);
1100 chip->card_fail |= SD_CARD;
1103 if (ms_oc && (chip->card_exist & MS_CARD)) {
1104 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1105 card_power_off(chip, MS_CARD);
1106 chip->card_fail |= MS_CARD;
1111 static void rtsx_manage_1lun_mode(struct rtsx_chip *chip)
1114 if (!(chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)))
1117 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
1120 if (chip->card_exist & SD_CARD) {
1121 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1122 chip->card_fail |= SD_CARD;
1123 } else if (chip->card_exist & MS_CARD) {
1124 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1125 chip->card_fail |= MS_CARD;
1126 } else if (chip->card_exist & XD_CARD) {
1127 rtsx_write_register(chip, CARD_OE, XD_OUTPUT_EN, 0);
1128 chip->card_fail |= XD_CARD;
1130 card_power_off(chip, SD_CARD);
1134 static void rtsx_delink_stage1(struct rtsx_chip *chip, int enter_L1,
1139 rtsx_set_stat(chip, RTSX_STAT_DELINK);
1141 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1142 rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1144 if (chip->card_exist)
1145 dev_dbg(rtsx_dev(chip), "False card inserted, do force delink\n");
1147 dev_dbg(rtsx_dev(chip), "No card inserted, do delink\n");
1150 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 1);
1152 if (chip->card_exist)
1157 rtsx_write_register(chip, CHANGE_LINK_STATE, val, val);
1160 rtsx_enter_L1(chip);
1162 if (chip->card_exist)
1163 chip->auto_delink_cnt = stage3_cnt + 1;
1166 static void rtsx_delink_stage(struct rtsx_chip *chip)
1168 int delink_stage1_cnt, delink_stage2_cnt, delink_stage3_cnt;
1171 if (!chip->auto_delink_en || !chip->auto_delink_allowed ||
1172 chip->card_ready || chip->card_ejected || chip->sd_io) {
1173 chip->auto_delink_cnt = 0;
1177 enter_L1 = chip->auto_delink_in_L1 &&
1178 (chip->aspm_l0s_l1_en || chip->ss_en);
1180 delink_stage1_cnt = chip->delink_stage1_step;
1181 delink_stage2_cnt = delink_stage1_cnt + chip->delink_stage2_step;
1182 delink_stage3_cnt = delink_stage2_cnt + chip->delink_stage3_step;
1184 if (chip->auto_delink_cnt > delink_stage3_cnt)
1187 if (chip->auto_delink_cnt == delink_stage1_cnt)
1188 rtsx_delink_stage1(chip, enter_L1, delink_stage3_cnt);
1190 if (chip->auto_delink_cnt == delink_stage2_cnt) {
1191 dev_dbg(rtsx_dev(chip), "Try to do force delink\n");
1196 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1197 rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1199 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0x0A);
1202 chip->auto_delink_cnt++;
1205 void rtsx_polling_func(struct rtsx_chip *chip)
1207 if (rtsx_chk_stat(chip, RTSX_STAT_SUSPEND))
1210 if (rtsx_chk_stat(chip, RTSX_STAT_DELINK))
1213 if (chip->polling_config) {
1216 rtsx_read_config_byte(chip, 0, &val);
1219 if (rtsx_chk_stat(chip, RTSX_STAT_SS))
1222 rtsx_manage_ocp(chip);
1224 rtsx_manage_sd_lock(chip);
1226 rtsx_init_cards(chip);
1228 rtsx_manage_ss(chip);
1230 rtsx_manage_aspm(chip);
1232 rtsx_manage_idle(chip);
1234 switch (rtsx_get_stat(chip)) {
1236 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1237 rtsx_blink_led(chip);
1239 do_remaining_work(chip);
1242 case RTSX_STAT_IDLE:
1243 if (chip->sd_io && !chip->sd_int)
1244 try_to_switch_sdio_ctrl(chip);
1246 rtsx_enable_aspm(chip);
1253 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
1254 rtsx_manage_2lun_mode(chip);
1256 rtsx_manage_1lun_mode(chip);
1259 rtsx_delink_stage(chip);
1263 * rtsx_stop_cmd - stop command transfer and DMA transfer
1264 * @chip: Realtek's card reader chip
1265 * @card: flash card type
1267 * Stop command transfer and DMA transfer.
1268 * This function is called in error handler.
1270 void rtsx_stop_cmd(struct rtsx_chip *chip, int card)
1274 for (i = 0; i <= 8; i++) {
1275 int addr = RTSX_HCBAR + i * 4;
1278 reg = rtsx_readl(chip, addr);
1279 dev_dbg(rtsx_dev(chip), "BAR (0x%02x): 0x%08x\n", addr, reg);
1281 rtsx_writel(chip, RTSX_HCBCTLR, STOP_CMD);
1282 rtsx_writel(chip, RTSX_HDBCTLR, STOP_DMA);
1284 for (i = 0; i < 16; i++) {
1285 u16 addr = 0xFE20 + (u16)i;
1288 rtsx_read_register(chip, addr, &val);
1289 dev_dbg(rtsx_dev(chip), "0x%04X: 0x%02x\n", addr, val);
1292 rtsx_write_register(chip, DMACTL, 0x80, 0x80);
1293 rtsx_write_register(chip, RBCTL, 0x80, 0x80);
1296 #define MAX_RW_REG_CNT 1024
1298 int rtsx_write_register(struct rtsx_chip *chip, u16 addr, u8 mask, u8 data)
1303 val |= (u32)(addr & 0x3FFF) << 16;
1304 val |= (u32)mask << 8;
1307 rtsx_writel(chip, RTSX_HAIMR, val);
1309 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1310 val = rtsx_readl(chip, RTSX_HAIMR);
1311 if ((val & BIT(31)) == 0) {
1312 if (data != (u8)val)
1315 return STATUS_SUCCESS;
1319 return STATUS_TIMEDOUT;
1322 int rtsx_read_register(struct rtsx_chip *chip, u16 addr, u8 *data)
1330 val |= (u32)(addr & 0x3FFF) << 16;
1332 rtsx_writel(chip, RTSX_HAIMR, val);
1334 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1335 val = rtsx_readl(chip, RTSX_HAIMR);
1336 if ((val & BIT(31)) == 0)
1340 if (i >= MAX_RW_REG_CNT)
1341 return STATUS_TIMEDOUT;
1344 *data = (u8)(val & 0xFF);
1346 return STATUS_SUCCESS;
1349 int rtsx_write_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 mask,
1356 for (i = 0; i < 4; i++) {
1358 retval = rtsx_write_register(chip, CFGDATA0 + i,
1360 (u8)(val & mask & 0xFF));
1370 retval = rtsx_write_register(chip, CFGADDR0, 0xFF, (u8)addr);
1373 retval = rtsx_write_register(chip, CFGADDR1, 0xFF,
1378 retval = rtsx_write_register(chip, CFGRWCTL, 0xFF,
1380 ((func_no & 0x03) << 4));
1384 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1385 retval = rtsx_read_register(chip, CFGRWCTL, &tmp);
1388 if ((tmp & 0x80) == 0)
1393 return STATUS_SUCCESS;
1396 int rtsx_read_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 *val)
1403 retval = rtsx_write_register(chip, CFGADDR0, 0xFF, (u8)addr);
1406 retval = rtsx_write_register(chip, CFGADDR1, 0xFF, (u8)(addr >> 8));
1409 retval = rtsx_write_register(chip, CFGRWCTL, 0xFF,
1410 0x80 | ((func_no & 0x03) << 4));
1414 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1415 retval = rtsx_read_register(chip, CFGRWCTL, &tmp);
1418 if ((tmp & 0x80) == 0)
1422 for (i = 0; i < 4; i++) {
1423 retval = rtsx_read_register(chip, CFGDATA0 + i, &tmp);
1426 data |= (u32)tmp << (i * 8);
1432 return STATUS_SUCCESS;
1435 int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1439 u16 offset = addr % 4;
1440 u16 aligned_addr = addr - offset;
1446 return STATUS_NOMEM;
1448 if ((len + offset) % 4)
1449 dw_len = (len + offset) / 4 + 1;
1451 dw_len = (len + offset) / 4;
1453 dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1455 size = array_size(dw_len, 4);
1456 data = vzalloc(size);
1458 return STATUS_NOMEM;
1460 mask = vzalloc(size);
1463 return STATUS_NOMEM;
1467 for (i = 0; i < len; i++) {
1468 mask[j] |= 0xFF << (offset * 8);
1469 data[j] |= buf[i] << (offset * 8);
1470 if (++offset == 4) {
1476 print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, mask, size);
1477 print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, data, size);
1479 for (i = 0; i < dw_len; i++) {
1480 retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i * 4,
1482 if (retval != STATUS_SUCCESS) {
1492 return STATUS_SUCCESS;
1495 int rtsx_read_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1499 u16 offset = addr % 4;
1500 u16 aligned_addr = addr - offset;
1504 if ((len + offset) % 4)
1505 dw_len = (len + offset) / 4 + 1;
1507 dw_len = (len + offset) / 4;
1509 dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1511 data = vmalloc(array_size(dw_len, 4));
1513 return STATUS_NOMEM;
1515 for (i = 0; i < dw_len; i++) {
1516 retval = rtsx_read_cfg_dw(chip, func, aligned_addr + i * 4,
1518 if (retval != STATUS_SUCCESS) {
1527 for (i = 0; i < len; i++) {
1528 buf[i] = (u8)(data[j] >> (offset * 8));
1529 if (++offset == 4) {
1538 return STATUS_SUCCESS;
1541 int rtsx_write_phy_register(struct rtsx_chip *chip, u8 addr, u16 val)
1544 bool finished = false;
1548 retval = rtsx_write_register(chip, PHYDATA0, 0xFF, (u8)val);
1551 retval = rtsx_write_register(chip, PHYDATA1, 0xFF, (u8)(val >> 8));
1554 retval = rtsx_write_register(chip, PHYADDR, 0xFF, addr);
1557 retval = rtsx_write_register(chip, PHYRWCTL, 0xFF, 0x81);
1561 for (i = 0; i < 100000; i++) {
1562 retval = rtsx_read_register(chip, PHYRWCTL, &tmp);
1565 if (!(tmp & 0x80)) {
1574 return STATUS_SUCCESS;
1577 int rtsx_read_phy_register(struct rtsx_chip *chip, u8 addr, u16 *val)
1580 bool finished = false;
1585 retval = rtsx_write_register(chip, PHYADDR, 0xFF, addr);
1588 retval = rtsx_write_register(chip, PHYRWCTL, 0xFF, 0x80);
1592 for (i = 0; i < 100000; i++) {
1593 retval = rtsx_read_register(chip, PHYRWCTL, &tmp);
1596 if (!(tmp & 0x80)) {
1605 retval = rtsx_read_register(chip, PHYDATA0, &tmp);
1609 retval = rtsx_read_register(chip, PHYDATA1, &tmp);
1612 data |= (u16)tmp << 8;
1617 return STATUS_SUCCESS;
1620 int rtsx_read_efuse(struct rtsx_chip *chip, u8 addr, u8 *val)
1626 retval = rtsx_write_register(chip, EFUSE_CTRL, 0xFF, 0x80 | addr);
1630 for (i = 0; i < 100; i++) {
1631 retval = rtsx_read_register(chip, EFUSE_CTRL, &data);
1640 return STATUS_TIMEDOUT;
1642 retval = rtsx_read_register(chip, EFUSE_DATA, &data);
1648 return STATUS_SUCCESS;
1651 int rtsx_write_efuse(struct rtsx_chip *chip, u8 addr, u8 val)
1655 u8 data = 0, tmp = 0xFF;
1657 for (i = 0; i < 8; i++) {
1658 if (val & (u8)(1 << i))
1661 tmp &= (~(u8)(1 << i));
1662 dev_dbg(rtsx_dev(chip), "Write 0x%x to 0x%x\n", tmp, addr);
1664 retval = rtsx_write_register(chip, EFUSE_DATA, 0xFF, tmp);
1667 retval = rtsx_write_register(chip, EFUSE_CTRL, 0xFF,
1672 for (j = 0; j < 100; j++) {
1673 retval = rtsx_read_register(chip, EFUSE_CTRL, &data);
1682 return STATUS_TIMEDOUT;
1687 return STATUS_SUCCESS;
1690 int rtsx_clr_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1695 retval = rtsx_read_phy_register(chip, reg, &value);
1696 if (retval != STATUS_SUCCESS)
1699 if (value & (1 << bit)) {
1700 value &= ~(1 << bit);
1701 retval = rtsx_write_phy_register(chip, reg, value);
1702 if (retval != STATUS_SUCCESS)
1706 return STATUS_SUCCESS;
1709 int rtsx_set_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1714 retval = rtsx_read_phy_register(chip, reg, &value);
1715 if (retval != STATUS_SUCCESS)
1718 if ((value & (1 << bit)) == 0) {
1719 value |= (1 << bit);
1720 retval = rtsx_write_phy_register(chip, reg, value);
1721 if (retval != STATUS_SUCCESS)
1725 return STATUS_SUCCESS;
1728 static void rtsx_handle_pm_dstate(struct rtsx_chip *chip, u8 dstate)
1732 dev_dbg(rtsx_dev(chip), "%04x set pm_dstate to %d\n",
1733 chip->product_id, dstate);
1735 if (CHK_SDIO_EXIST(chip)) {
1738 if (CHECK_PID(chip, 0x5288))
1743 rtsx_read_cfg_dw(chip, func_no, 0x84, &ultmp);
1744 dev_dbg(rtsx_dev(chip), "pm_dstate of function %d: 0x%x\n",
1745 (int)func_no, ultmp);
1746 rtsx_write_cfg_dw(chip, func_no, 0x84, 0xFF, dstate);
1749 rtsx_write_config_byte(chip, 0x44, dstate);
1750 rtsx_write_config_byte(chip, 0x45, 0);
1753 void rtsx_enter_L1(struct rtsx_chip *chip)
1755 rtsx_handle_pm_dstate(chip, 2);
1758 void rtsx_exit_L1(struct rtsx_chip *chip)
1760 rtsx_write_config_byte(chip, 0x44, 0);
1761 rtsx_write_config_byte(chip, 0x45, 0);
1764 void rtsx_enter_ss(struct rtsx_chip *chip)
1766 dev_dbg(rtsx_dev(chip), "Enter Selective Suspend State!\n");
1768 rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
1770 if (chip->power_down_in_ss) {
1771 rtsx_power_off_card(chip);
1772 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1775 if (CHK_SDIO_EXIST(chip))
1776 rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
1777 0xC0, 0xFF00, 0x0100);
1779 if (chip->auto_delink_en) {
1780 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x01, 0x01);
1782 if (!chip->phy_debug_mode) {
1785 tmp = rtsx_readl(chip, RTSX_BIER);
1787 rtsx_writel(chip, RTSX_BIER, tmp);
1790 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 0);
1793 rtsx_enter_L1(chip);
1795 RTSX_CLR_DELINK(chip);
1796 rtsx_set_stat(chip, RTSX_STAT_SS);
1799 void rtsx_exit_ss(struct rtsx_chip *chip)
1801 dev_dbg(rtsx_dev(chip), "Exit Selective Suspend State!\n");
1805 if (chip->power_down_in_ss) {
1806 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
1810 if (RTSX_TST_DELINK(chip)) {
1811 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1812 rtsx_reinit_cards(chip, 1);
1813 RTSX_CLR_DELINK(chip);
1814 } else if (chip->power_down_in_ss) {
1815 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1816 rtsx_reinit_cards(chip, 0);
1820 int rtsx_pre_handle_interrupt(struct rtsx_chip *chip)
1822 u32 status, int_enable;
1823 bool exit_ss = false;
1831 chip->ss_counter = 0;
1832 if (rtsx_get_stat(chip) == RTSX_STAT_SS) {
1835 rtsx_set_stat(chip, RTSX_STAT_RUN);
1839 int_enable = rtsx_readl(chip, RTSX_BIER);
1840 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
1842 if (((chip->int_reg & int_enable) == 0) ||
1843 chip->int_reg == 0xFFFFFFFF)
1846 status = chip->int_reg &= (int_enable | 0x7FFFFF);
1848 if (status & CARD_INT) {
1849 chip->auto_delink_cnt = 0;
1851 if (status & SD_INT) {
1852 if (status & SD_EXIST) {
1853 set_bit(SD_NR, &chip->need_reset);
1855 set_bit(SD_NR, &chip->need_release);
1856 chip->sd_reset_counter = 0;
1857 chip->sd_show_cnt = 0;
1858 clear_bit(SD_NR, &chip->need_reset);
1862 * If multi-luns, it's possible that
1863 * when plugging/unplugging one card
1864 * there is another card which still
1865 * exists in the slot. In this case,
1866 * all existed cards should be reset.
1868 if (exit_ss && (status & SD_EXIST))
1869 set_bit(SD_NR, &chip->need_reinit);
1871 if (!CHECK_PID(chip, 0x5288) || CHECK_BARO_PKG(chip, QFN)) {
1872 if (status & XD_INT) {
1873 if (status & XD_EXIST) {
1874 set_bit(XD_NR, &chip->need_reset);
1876 set_bit(XD_NR, &chip->need_release);
1877 chip->xd_reset_counter = 0;
1878 chip->xd_show_cnt = 0;
1879 clear_bit(XD_NR, &chip->need_reset);
1882 if (exit_ss && (status & XD_EXIST))
1883 set_bit(XD_NR, &chip->need_reinit);
1886 if (status & MS_INT) {
1887 if (status & MS_EXIST) {
1888 set_bit(MS_NR, &chip->need_reset);
1890 set_bit(MS_NR, &chip->need_release);
1891 chip->ms_reset_counter = 0;
1892 chip->ms_show_cnt = 0;
1893 clear_bit(MS_NR, &chip->need_reset);
1896 if (exit_ss && (status & MS_EXIST))
1897 set_bit(MS_NR, &chip->need_reinit);
1902 chip->ocp_int = ocp_int & status;
1905 if (chip->sd_io && (chip->int_reg & DATA_DONE_INT))
1906 chip->int_reg &= ~(u32)DATA_DONE_INT;
1908 return STATUS_SUCCESS;
1911 void rtsx_do_before_power_down(struct rtsx_chip *chip, int pm_stat)
1915 dev_dbg(rtsx_dev(chip), "%s, pm_stat = %d\n", __func__, pm_stat);
1917 rtsx_set_stat(chip, RTSX_STAT_SUSPEND);
1919 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1920 if (retval != STATUS_SUCCESS)
1923 rtsx_release_cards(chip);
1924 rtsx_disable_bus_int(chip);
1925 turn_off_led(chip, LED_GPIO);
1927 #ifdef HW_AUTO_SWITCH_SD_BUS
1929 chip->sdio_in_charge = 1;
1930 if (CHECK_PID(chip, 0x5208)) {
1931 rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1932 /* Enable sdio_bus_auto_switch */
1933 rtsx_write_register(chip, 0xFE70, 0x80, 0x80);
1934 } else if (CHECK_PID(chip, 0x5288)) {
1935 rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1936 /* Enable sdio_bus_auto_switch */
1937 rtsx_write_register(chip, 0xFE5A, 0x08, 0x08);
1942 if (CHECK_PID(chip, 0x5208) && chip->ic_version >= IC_VER_D) {
1943 /* u_force_clkreq_0 */
1944 rtsx_write_register(chip, PETXCFG, 0x08, 0x08);
1947 if (pm_stat == PM_S1) {
1948 dev_dbg(rtsx_dev(chip), "Host enter S1\n");
1949 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1951 } else if (pm_stat == PM_S3) {
1952 if (chip->s3_pwr_off_delay > 0)
1953 wait_timeout(chip->s3_pwr_off_delay);
1955 dev_dbg(rtsx_dev(chip), "Host enter S3\n");
1956 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1960 if (chip->do_delink_before_power_down && chip->auto_delink_en)
1961 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 2);
1963 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1967 chip->card_exist = 0;
1970 void rtsx_enable_aspm(struct rtsx_chip *chip)
1972 if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && !chip->aspm_enabled) {
1973 dev_dbg(rtsx_dev(chip), "Try to enable ASPM\n");
1974 chip->aspm_enabled = 1;
1976 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1977 rtsx_write_phy_register(chip, 0x07, 0);
1978 if (CHECK_PID(chip, 0x5208)) {
1979 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xF3,
1980 0x30 | chip->aspm_level[0]);
1982 rtsx_write_config_byte(chip, LCTLR,
1983 chip->aspm_l0s_l1_en);
1986 if (CHK_SDIO_EXIST(chip)) {
1987 u16 val = chip->aspm_l0s_l1_en | 0x0100;
1989 rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
1995 void rtsx_disable_aspm(struct rtsx_chip *chip)
1997 if (CHECK_PID(chip, 0x5208))
1998 rtsx_monitor_aspm_config(chip);
2000 if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && chip->aspm_enabled) {
2001 dev_dbg(rtsx_dev(chip), "Try to disable ASPM\n");
2002 chip->aspm_enabled = 0;
2004 if (chip->asic_code && CHECK_PID(chip, 0x5208))
2005 rtsx_write_phy_register(chip, 0x07, 0x0129);
2006 if (CHECK_PID(chip, 0x5208))
2007 rtsx_write_register(chip, ASPM_FORCE_CTL,
2010 rtsx_write_config_byte(chip, LCTLR, 0x00);
2016 int rtsx_read_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2024 return STATUS_ERROR;
2027 reg_addr = PPBUF_BASE2;
2028 for (i = 0; i < buf_len / 256; i++) {
2029 rtsx_init_cmd(chip);
2031 for (j = 0; j < 256; j++)
2032 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2034 retval = rtsx_send_cmd(chip, 0, 250);
2038 memcpy(ptr, rtsx_get_cmd_data(chip), 256);
2042 if (buf_len % 256) {
2043 rtsx_init_cmd(chip);
2045 for (j = 0; j < buf_len % 256; j++)
2046 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2048 retval = rtsx_send_cmd(chip, 0, 250);
2053 memcpy(ptr, rtsx_get_cmd_data(chip), buf_len % 256);
2055 return STATUS_SUCCESS;
2058 int rtsx_write_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2066 return STATUS_ERROR;
2069 reg_addr = PPBUF_BASE2;
2070 for (i = 0; i < buf_len / 256; i++) {
2071 rtsx_init_cmd(chip);
2073 for (j = 0; j < 256; j++) {
2074 rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
2079 retval = rtsx_send_cmd(chip, 0, 250);
2084 if (buf_len % 256) {
2085 rtsx_init_cmd(chip);
2087 for (j = 0; j < buf_len % 256; j++) {
2088 rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
2093 retval = rtsx_send_cmd(chip, 0, 250);
2098 return STATUS_SUCCESS;
2101 int rtsx_check_chip_exist(struct rtsx_chip *chip)
2103 if (rtsx_readl(chip, 0) == 0xFFFFFFFF)
2106 return STATUS_SUCCESS;
2109 int rtsx_force_power_on(struct rtsx_chip *chip, u8 ctl)
2114 if (ctl & SSC_PDCTL)
2115 mask |= SSC_POWER_DOWN;
2118 if (ctl & OC_PDCTL) {
2119 mask |= SD_OC_POWER_DOWN;
2120 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2121 mask |= MS_OC_POWER_DOWN;
2126 retval = rtsx_write_register(chip, FPDCTL, mask, 0);
2127 if (retval != STATUS_SUCCESS)
2130 if (CHECK_PID(chip, 0x5288))
2134 return STATUS_SUCCESS;
2137 int rtsx_force_power_down(struct rtsx_chip *chip, u8 ctl)
2140 u8 mask = 0, val = 0;
2142 if (ctl & SSC_PDCTL)
2143 mask |= SSC_POWER_DOWN;
2146 if (ctl & OC_PDCTL) {
2147 mask |= SD_OC_POWER_DOWN;
2148 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2149 mask |= MS_OC_POWER_DOWN;
2155 retval = rtsx_write_register(chip, FPDCTL, mask, val);
2156 if (retval != STATUS_SUCCESS)
2160 return STATUS_SUCCESS;