1 /* Driver for Realtek PCI-Express card reader
3 * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2, or (at your option) any
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, see <http://www.gnu.org/licenses/>.
19 * Wei WANG (wei_wang@realsil.com.cn)
20 * Micky Ching (micky_ching@realsil.com.cn)
23 #include <linux/blkdev.h>
24 #include <linux/kthread.h>
25 #include <linux/sched.h>
26 #include <linux/workqueue.h>
27 #include <linux/vmalloc.h>
34 static void rtsx_calibration(struct rtsx_chip *chip)
36 rtsx_write_phy_register(chip, 0x1B, 0x135E);
38 rtsx_write_phy_register(chip, 0x00, 0x0280);
39 rtsx_write_phy_register(chip, 0x01, 0x7112);
40 rtsx_write_phy_register(chip, 0x01, 0x7110);
41 rtsx_write_phy_register(chip, 0x01, 0x7112);
42 rtsx_write_phy_register(chip, 0x01, 0x7113);
43 rtsx_write_phy_register(chip, 0x00, 0x0288);
46 void rtsx_enable_card_int(struct rtsx_chip *chip)
48 u32 reg = rtsx_readl(chip, RTSX_BIER);
51 for (i = 0; i <= chip->max_lun; i++) {
52 if (chip->lun2card[i] & XD_CARD)
54 if (chip->lun2card[i] & SD_CARD)
56 if (chip->lun2card[i] & MS_CARD)
59 if (chip->hw_bypass_sd)
60 reg &= ~((u32)SD_INT_EN);
62 rtsx_writel(chip, RTSX_BIER, reg);
65 void rtsx_enable_bus_int(struct rtsx_chip *chip)
68 #ifndef DISABLE_CARD_INT
72 reg = TRANS_OK_INT_EN | TRANS_FAIL_INT_EN;
74 #ifndef DISABLE_CARD_INT
75 for (i = 0; i <= chip->max_lun; i++) {
76 dev_dbg(rtsx_dev(chip), "lun2card[%d] = 0x%02x\n",
77 i, chip->lun2card[i]);
79 if (chip->lun2card[i] & XD_CARD)
81 if (chip->lun2card[i] & SD_CARD)
83 if (chip->lun2card[i] & MS_CARD)
86 if (chip->hw_bypass_sd)
87 reg &= ~((u32)SD_INT_EN);
90 if (chip->ic_version >= IC_VER_C)
96 reg |= DATA_DONE_INT_EN;
98 /* Enable Bus Interrupt */
99 rtsx_writel(chip, RTSX_BIER, reg);
101 dev_dbg(rtsx_dev(chip), "RTSX_BIER: 0x%08x\n", reg);
104 void rtsx_disable_bus_int(struct rtsx_chip *chip)
106 rtsx_writel(chip, RTSX_BIER, 0);
109 static int rtsx_pre_handle_sdio_old(struct rtsx_chip *chip)
113 if (chip->ignore_sd && CHK_SDIO_EXIST(chip)) {
114 if (chip->asic_code) {
115 retval = rtsx_write_register(chip, CARD_PULL_CTL5,
117 MS_INS_PU | SD_WP_PU |
118 SD_CD_PU | SD_CMD_PU);
123 retval = rtsx_write_register(chip, FPGA_PULL_CTL,
125 FPGA_SD_PULL_CTL_EN);
130 retval = rtsx_write_register(chip, CARD_SHARE_MODE, 0xFF,
136 /* Enable SDIO internal clock */
137 retval = rtsx_write_register(chip, 0xFF2C, 0x01, 0x01);
142 retval = rtsx_write_register(chip, SDIO_CTRL, 0xFF,
143 SDIO_BUS_CTRL | SDIO_CD_CTRL);
151 chip->need_reset |= SD_CARD;
154 return STATUS_SUCCESS;
157 #ifdef HW_AUTO_SWITCH_SD_BUS
158 static int rtsx_pre_handle_sdio_new(struct rtsx_chip *chip)
161 bool sw_bypass_sd = false;
164 if (chip->driver_first_load) {
165 if (CHECK_PID(chip, 0x5288)) {
166 retval = rtsx_read_register(chip, 0xFE5A, &tmp);
172 } else if (CHECK_PID(chip, 0x5208)) {
173 retval = rtsx_read_register(chip, 0xFE70, &tmp);
181 if (chip->sdio_in_charge)
184 dev_dbg(rtsx_dev(chip), "chip->sdio_in_charge = %d\n",
185 chip->sdio_in_charge);
186 dev_dbg(rtsx_dev(chip), "chip->driver_first_load = %d\n",
187 chip->driver_first_load);
188 dev_dbg(rtsx_dev(chip), "sw_bypass_sd = %d\n",
192 u8 cd_toggle_mask = 0;
194 retval = rtsx_read_register(chip, TLPTISTAT, &tmp);
198 cd_toggle_mask = 0x08;
200 if (tmp & cd_toggle_mask) {
201 /* Disable sdio_bus_auto_switch */
202 if (CHECK_PID(chip, 0x5288)) {
203 retval = rtsx_write_register(chip, 0xFE5A,
208 } else if (CHECK_PID(chip, 0x5208)) {
209 retval = rtsx_write_register(chip, 0xFE70,
216 retval = rtsx_write_register(chip, TLPTISTAT, 0xFF,
222 chip->need_reset |= SD_CARD;
224 dev_dbg(rtsx_dev(chip), "Chip inserted with SDIO!\n");
226 if (chip->asic_code) {
227 retval = sd_pull_ctl_enable(chip);
228 if (retval != STATUS_SUCCESS) {
232 retval = rtsx_write_register
233 (chip, FPGA_PULL_CTL,
234 FPGA_SD_PULL_CTL_BIT | 0x20,
240 retval = card_share_mode(chip, SD_CARD);
241 if (retval != STATUS_SUCCESS) {
245 /* Enable sdio_bus_auto_switch */
246 if (CHECK_PID(chip, 0x5288)) {
247 retval = rtsx_write_register(chip, 0xFE5A,
252 } else if (CHECK_PID(chip, 0x5208)) {
253 retval = rtsx_write_register(chip, 0xFE70,
260 chip->chip_insert_with_sdio = 1;
264 retval = rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
269 chip->need_reset |= SD_CARD;
272 return STATUS_SUCCESS;
276 static int rtsx_reset_aspm(struct rtsx_chip *chip)
280 if (chip->dynamic_aspm) {
281 if (!CHK_SDIO_EXIST(chip) || !CHECK_PID(chip, 0x5288))
282 return STATUS_SUCCESS;
284 ret = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF,
285 chip->aspm_l0s_l1_en);
286 if (ret != STATUS_SUCCESS) {
290 return STATUS_SUCCESS;
293 if (CHECK_PID(chip, 0x5208)) {
294 ret = rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF, 0x3F);
299 ret = rtsx_write_config_byte(chip, LCTLR, chip->aspm_l0s_l1_en);
300 if (ret != STATUS_SUCCESS) {
304 chip->aspm_level[0] = chip->aspm_l0s_l1_en;
305 if (CHK_SDIO_EXIST(chip)) {
306 chip->aspm_level[1] = chip->aspm_l0s_l1_en;
307 ret = rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
308 0xC0, 0xFF, chip->aspm_l0s_l1_en);
309 if (ret != STATUS_SUCCESS) {
314 chip->aspm_enabled = 1;
316 return STATUS_SUCCESS;
319 static int rtsx_enable_pcie_intr(struct rtsx_chip *chip)
323 if (!chip->asic_code || !CHECK_PID(chip, 0x5208)) {
324 rtsx_enable_bus_int(chip);
325 return STATUS_SUCCESS;
328 if (chip->phy_debug_mode) {
329 ret = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0);
333 rtsx_disable_bus_int(chip);
335 rtsx_enable_bus_int(chip);
338 if (chip->ic_version >= IC_VER_D) {
341 ret = rtsx_read_phy_register(chip, 0x00, ®);
342 if (ret != STATUS_SUCCESS) {
348 ret = rtsx_write_phy_register(chip, 0x00, reg);
349 if (ret != STATUS_SUCCESS) {
353 ret = rtsx_read_phy_register(chip, 0x1C, ®);
354 if (ret != STATUS_SUCCESS) {
359 ret = rtsx_write_phy_register(chip, 0x1C, reg);
360 if (ret != STATUS_SUCCESS) {
365 if (chip->driver_first_load && (chip->ic_version < IC_VER_C))
366 rtsx_calibration(chip);
368 return STATUS_SUCCESS;
371 int rtsx_reset_chip(struct rtsx_chip *chip)
375 rtsx_writel(chip, RTSX_HCBAR, chip->host_cmds_addr);
377 rtsx_disable_aspm(chip);
379 retval = rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 0x00);
384 /* Disable card clock */
385 retval = rtsx_write_register(chip, CARD_CLK_EN, 0x1E, 0);
391 /* SSC power on, OCD power on */
392 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
393 retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN, 0);
398 retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN,
405 retval = rtsx_write_register(chip, OCPPARA1, OCP_TIME_MASK,
410 retval = rtsx_write_register(chip, OCPPARA2, OCP_THD_MASK,
415 retval = rtsx_write_register(chip, OCPCTL, 0xFF,
416 CARD_OC_INT_EN | CARD_DETECT_EN);
422 retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN,
429 if (!CHECK_PID(chip, 0x5288)) {
430 retval = rtsx_write_register(chip, CARD_GPIO_DIR, 0xFF, 0x03);
437 retval = rtsx_write_register(chip, CARD_GPIO, 0xFF, 0x03);
442 /* Reset delink mode */
443 retval = rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0);
448 /* Card driving select */
449 retval = rtsx_write_register(chip, CARD_DRIVE_SEL, 0xFF,
450 chip->card_drive_sel);
455 #ifdef LED_AUTO_BLINK
456 retval = rtsx_write_register(chip, CARD_AUTO_BLINK, 0xFF,
457 LED_BLINK_SPEED | BLINK_EN | LED_GPIO0);
463 if (chip->asic_code) {
464 /* Enable SSC Clock */
465 retval = rtsx_write_register(chip, SSC_CTL1, 0xFF,
466 SSC_8X_EN | SSC_SEL_4M);
470 retval = rtsx_write_register(chip, SSC_CTL2, 0xFF, 0x12);
477 * Disable cd_pwr_save (u_force_rst_core_en=0, u_cd_rst_core_en=0)
479 * bit[1] u_cd_rst_core_en rst_value = 0
480 * bit[2] u_force_rst_core_en rst_value = 0
481 * bit[5] u_mac_phy_rst_n_dbg rst_value = 1
482 * bit[4] u_non_sticky_rst_n_dbg rst_value = 0
484 retval = rtsx_write_register(chip, CHANGE_LINK_STATE, 0x16, 0x10);
490 if (chip->aspm_l0s_l1_en) {
491 retval = rtsx_reset_aspm(chip);
492 if (retval != STATUS_SUCCESS) {
496 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
497 retval = rtsx_write_phy_register(chip, 0x07, 0x0129);
498 if (retval != STATUS_SUCCESS) {
502 retval = rtsx_write_config_byte(chip, LCTLR,
503 chip->aspm_l0s_l1_en);
504 if (retval != STATUS_SUCCESS) {
509 retval = rtsx_write_config_byte(chip, 0x81, 1);
510 if (retval != STATUS_SUCCESS) {
514 if (CHK_SDIO_EXIST(chip)) {
515 retval = rtsx_write_cfg_dw(chip,
516 CHECK_PID(chip, 0x5288) ? 2 : 1,
517 0xC0, 0xFF00, 0x0100);
519 if (retval != STATUS_SUCCESS) {
524 if (CHECK_PID(chip, 0x5288) && !CHK_SDIO_EXIST(chip)) {
525 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFFFF, 0x0103);
526 if (retval != STATUS_SUCCESS) {
530 retval = rtsx_write_cfg_dw(chip, 2, 0x84, 0xFF, 0x03);
531 if (retval != STATUS_SUCCESS) {
536 retval = rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT,
542 retval = rtsx_write_register(chip, PERST_GLITCH_WIDTH, 0xFF, 0x80);
547 retval = rtsx_enable_pcie_intr(chip);
548 if (retval != STATUS_SUCCESS) {
552 chip->need_reset = 0;
554 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
556 if (chip->hw_bypass_sd)
558 dev_dbg(rtsx_dev(chip), "In %s, chip->int_reg = 0x%x\n", __func__,
560 if (chip->int_reg & SD_EXIST) {
561 #ifdef HW_AUTO_SWITCH_SD_BUS
562 if (CHECK_PID(chip, 0x5208) && (chip->ic_version < IC_VER_C))
563 retval = rtsx_pre_handle_sdio_old(chip);
565 retval = rtsx_pre_handle_sdio_new(chip);
567 dev_dbg(rtsx_dev(chip), "chip->need_reset = 0x%x (%s)\n",
568 (unsigned int)(chip->need_reset), __func__);
569 #else /* HW_AUTO_SWITCH_SD_BUS */
570 retval = rtsx_pre_handle_sdio_old(chip);
571 #endif /* HW_AUTO_SWITCH_SD_BUS */
572 if (retval != STATUS_SUCCESS) {
578 retval = rtsx_write_register(chip, SDIO_CTRL,
579 SDIO_BUS_CTRL | SDIO_CD_CTRL, 0);
586 if (chip->int_reg & XD_EXIST)
587 chip->need_reset |= XD_CARD;
588 if (chip->int_reg & MS_EXIST)
589 chip->need_reset |= MS_CARD;
590 if (chip->int_reg & CARD_EXIST) {
591 retval = rtsx_write_register(chip, SSC_CTL1, SSC_RSTB,
598 dev_dbg(rtsx_dev(chip), "In %s, chip->need_reset = 0x%x\n", __func__,
599 (unsigned int)(chip->need_reset));
601 retval = rtsx_write_register(chip, RCCTL, 0x01, 0x00);
606 if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
607 /* Turn off main power when entering S3/S4 state */
608 retval = rtsx_write_register(chip, MAIN_PWR_OFF_CTL, 0x03,
615 if (chip->remote_wakeup_en && !chip->auto_delink_en) {
616 retval = rtsx_write_register(chip, WAKE_SEL_CTL, 0x07, 0x07);
620 if (chip->aux_pwr_exist) {
621 retval = rtsx_write_register(chip, PME_FORCE_CTL,
628 retval = rtsx_write_register(chip, WAKE_SEL_CTL, 0x07, 0x04);
632 retval = rtsx_write_register(chip, PME_FORCE_CTL, 0xFF, 0x30);
638 if (CHECK_PID(chip, 0x5208) && (chip->ic_version >= IC_VER_D)) {
639 retval = rtsx_write_register(chip, PETXCFG, 0x1C, 0x14);
645 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
646 retval = rtsx_clr_phy_reg_bit(chip, 0x1C, 2);
647 if (retval != STATUS_SUCCESS) {
652 if (chip->ft2_fast_mode) {
653 retval = rtsx_write_register(chip, CARD_PWR_CTL, 0xFF,
654 MS_PARTIAL_POWER_ON |
655 SD_PARTIAL_POWER_ON);
659 udelay(chip->pmos_pwr_on_interval);
660 retval = rtsx_write_register(chip, CARD_PWR_CTL, 0xFF,
661 MS_POWER_ON | SD_POWER_ON);
670 rtsx_reset_detected_cards(chip, 0);
672 chip->driver_first_load = 0;
674 return STATUS_SUCCESS;
677 static inline int check_sd_speed_prior(u32 sd_speed_prior)
679 bool fake_para = false;
682 for (i = 0; i < 4; i++) {
683 u8 tmp = (u8)(sd_speed_prior >> (i * 8));
685 if ((tmp < 0x01) || (tmp > 0x04)) {
694 static inline int check_sd_current_prior(u32 sd_current_prior)
696 bool fake_para = false;
699 for (i = 0; i < 4; i++) {
700 u8 tmp = (u8)(sd_current_prior >> (i * 8));
711 static int rts5208_init(struct rtsx_chip *chip)
717 retval = rtsx_write_register(chip, CLK_SEL, 0x03, 0x03);
721 retval = rtsx_read_register(chip, CLK_SEL, &val);
725 chip->asic_code = val == 0 ? 1 : 0;
727 if (chip->asic_code) {
728 retval = rtsx_read_phy_register(chip, 0x1C, ®);
729 if (retval != STATUS_SUCCESS) {
733 dev_dbg(rtsx_dev(chip), "Value of phy register 0x1C is 0x%x\n",
735 chip->ic_version = (reg >> 4) & 0x07;
736 chip->phy_debug_mode = reg & PHY_DEBUG_MODE ? 1 : 0;
739 retval = rtsx_read_register(chip, 0xFE80, &val);
743 chip->ic_version = val;
744 chip->phy_debug_mode = 0;
747 retval = rtsx_read_register(chip, PDINFO, &val);
751 dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
752 chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
754 retval = rtsx_read_register(chip, 0xFE50, &val);
758 chip->hw_bypass_sd = val & 0x01 ? 1 : 0;
760 rtsx_read_config_byte(chip, 0x0E, &val);
762 SET_SDIO_EXIST(chip);
764 CLR_SDIO_EXIST(chip);
766 if (chip->use_hw_setting) {
767 retval = rtsx_read_register(chip, CHANGE_LINK_STATE, &val);
771 chip->auto_delink_en = val & 0x80 ? 1 : 0;
774 return STATUS_SUCCESS;
777 static int rts5288_init(struct rtsx_chip *chip)
780 u8 val = 0, max_func;
783 retval = rtsx_write_register(chip, CLK_SEL, 0x03, 0x03);
787 retval = rtsx_read_register(chip, CLK_SEL, &val);
791 chip->asic_code = val == 0 ? 1 : 0;
793 chip->ic_version = 0;
794 chip->phy_debug_mode = 0;
796 retval = rtsx_read_register(chip, PDINFO, &val);
800 dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
801 chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
803 retval = rtsx_read_register(chip, CARD_SHARE_MODE, &val);
807 dev_dbg(rtsx_dev(chip), "CARD_SHARE_MODE: 0x%x\n", val);
808 chip->baro_pkg = val & 0x04 ? QFN : LQFP;
810 retval = rtsx_read_register(chip, 0xFE5A, &val);
814 chip->hw_bypass_sd = val & 0x10 ? 1 : 0;
816 retval = rtsx_read_cfg_dw(chip, 0, 0x718, &lval);
817 if (retval != STATUS_SUCCESS) {
821 max_func = (u8)((lval >> 29) & 0x07);
822 dev_dbg(rtsx_dev(chip), "Max function number: %d\n", max_func);
823 if (max_func == 0x02)
824 SET_SDIO_EXIST(chip);
826 CLR_SDIO_EXIST(chip);
828 if (chip->use_hw_setting) {
829 retval = rtsx_read_register(chip, CHANGE_LINK_STATE, &val);
833 chip->auto_delink_en = val & 0x80 ? 1 : 0;
835 if (CHECK_BARO_PKG(chip, LQFP))
836 chip->lun_mode = SD_MS_1LUN;
838 chip->lun_mode = DEFAULT_SINGLE;
841 return STATUS_SUCCESS;
844 int rtsx_init_chip(struct rtsx_chip *chip)
846 struct sd_info *sd_card = &chip->sd_card;
847 struct xd_info *xd_card = &chip->xd_card;
848 struct ms_info *ms_card = &chip->ms_card;
852 dev_dbg(rtsx_dev(chip), "Vendor ID: 0x%04x, Product ID: 0x%04x\n",
853 chip->vendor_id, chip->product_id);
855 chip->ic_version = 0;
857 memset(xd_card, 0, sizeof(struct xd_info));
858 memset(sd_card, 0, sizeof(struct sd_info));
859 memset(ms_card, 0, sizeof(struct ms_info));
861 chip->xd_reset_counter = 0;
862 chip->sd_reset_counter = 0;
863 chip->ms_reset_counter = 0;
865 chip->xd_show_cnt = MAX_SHOW_CNT;
866 chip->sd_show_cnt = MAX_SHOW_CNT;
867 chip->ms_show_cnt = MAX_SHOW_CNT;
870 chip->auto_delink_cnt = 0;
871 chip->auto_delink_allowed = 1;
872 rtsx_set_stat(chip, RTSX_STAT_INIT);
874 chip->aspm_enabled = 0;
875 chip->chip_insert_with_sdio = 0;
878 chip->sdio_counter = 0;
880 chip->phy_debug_mode = 0;
881 chip->sdio_func_exist = 0;
882 memset(chip->sdio_raw_data, 0, 12);
884 for (i = 0; i < MAX_ALLOWED_LUN_CNT; i++) {
885 set_sense_type(chip, i, SENSE_TYPE_NO_SENSE);
886 chip->rw_fail_cnt[i] = 0;
889 if (!check_sd_speed_prior(chip->sd_speed_prior))
890 chip->sd_speed_prior = 0x01040203;
892 dev_dbg(rtsx_dev(chip), "sd_speed_prior = 0x%08x\n",
893 chip->sd_speed_prior);
895 if (!check_sd_current_prior(chip->sd_current_prior))
896 chip->sd_current_prior = 0x00010203;
898 dev_dbg(rtsx_dev(chip), "sd_current_prior = 0x%08x\n",
899 chip->sd_current_prior);
901 if ((chip->sd_ddr_tx_phase > 31) || (chip->sd_ddr_tx_phase < 0))
902 chip->sd_ddr_tx_phase = 0;
904 if ((chip->mmc_ddr_tx_phase > 31) || (chip->mmc_ddr_tx_phase < 0))
905 chip->mmc_ddr_tx_phase = 0;
907 retval = rtsx_write_register(chip, FPDCTL, SSC_POWER_DOWN, 0);
912 retval = rtsx_write_register(chip, CLK_DIV, 0x07, 0x07);
916 dev_dbg(rtsx_dev(chip), "chip->use_hw_setting = %d\n",
917 chip->use_hw_setting);
919 if (CHECK_PID(chip, 0x5208)) {
920 retval = rts5208_init(chip);
921 if (retval != STATUS_SUCCESS) {
925 } else if (CHECK_PID(chip, 0x5288)) {
926 retval = rts5288_init(chip);
927 if (retval != STATUS_SUCCESS) {
932 if (chip->ss_en == 2)
935 dev_dbg(rtsx_dev(chip), "chip->asic_code = %d\n", chip->asic_code);
936 dev_dbg(rtsx_dev(chip), "chip->ic_version = 0x%x\n", chip->ic_version);
937 dev_dbg(rtsx_dev(chip), "chip->phy_debug_mode = %d\n",
938 chip->phy_debug_mode);
939 dev_dbg(rtsx_dev(chip), "chip->aux_pwr_exist = %d\n",
940 chip->aux_pwr_exist);
941 dev_dbg(rtsx_dev(chip), "chip->sdio_func_exist = %d\n",
942 chip->sdio_func_exist);
943 dev_dbg(rtsx_dev(chip), "chip->hw_bypass_sd = %d\n",
945 dev_dbg(rtsx_dev(chip), "chip->aspm_l0s_l1_en = %d\n",
946 chip->aspm_l0s_l1_en);
947 dev_dbg(rtsx_dev(chip), "chip->lun_mode = %d\n", chip->lun_mode);
948 dev_dbg(rtsx_dev(chip), "chip->auto_delink_en = %d\n",
949 chip->auto_delink_en);
950 dev_dbg(rtsx_dev(chip), "chip->ss_en = %d\n", chip->ss_en);
951 dev_dbg(rtsx_dev(chip), "chip->baro_pkg = %d\n", chip->baro_pkg);
953 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
954 chip->card2lun[SD_CARD] = 0;
955 chip->card2lun[MS_CARD] = 1;
956 chip->card2lun[XD_CARD] = 0xFF;
957 chip->lun2card[0] = SD_CARD;
958 chip->lun2card[1] = MS_CARD;
960 SET_SDIO_IGNORED(chip);
961 } else if (CHECK_LUN_MODE(chip, SD_MS_1LUN)) {
962 chip->card2lun[SD_CARD] = 0;
963 chip->card2lun[MS_CARD] = 0;
964 chip->card2lun[XD_CARD] = 0xFF;
965 chip->lun2card[0] = SD_CARD | MS_CARD;
968 chip->card2lun[XD_CARD] = 0;
969 chip->card2lun[SD_CARD] = 0;
970 chip->card2lun[MS_CARD] = 0;
971 chip->lun2card[0] = XD_CARD | SD_CARD | MS_CARD;
975 retval = rtsx_reset_chip(chip);
976 if (retval != STATUS_SUCCESS) {
980 return STATUS_SUCCESS;
983 void rtsx_release_chip(struct rtsx_chip *chip)
985 xd_free_l2p_tbl(chip);
986 ms_free_l2p_tbl(chip);
987 chip->card_exist = 0;
988 chip->card_ready = 0;
991 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
992 static inline void rtsx_blink_led(struct rtsx_chip *chip)
994 if (chip->card_exist && chip->blink_led) {
995 if (chip->led_toggle_counter < LED_TOGGLE_INTERVAL) {
996 chip->led_toggle_counter++;
998 chip->led_toggle_counter = 0;
999 toggle_gpio(chip, LED_GPIO);
1005 static void rtsx_monitor_aspm_config(struct rtsx_chip *chip)
1007 bool reg_changed, maybe_support_aspm;
1009 u8 reg0 = 0, reg1 = 0;
1011 maybe_support_aspm = false;
1012 reg_changed = false;
1013 rtsx_read_config_byte(chip, LCTLR, ®0);
1014 if (chip->aspm_level[0] != reg0) {
1016 chip->aspm_level[0] = reg0;
1018 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
1019 rtsx_read_cfg_dw(chip, 1, 0xC0, &tmp);
1021 if (chip->aspm_level[1] != reg1) {
1023 chip->aspm_level[1] = reg1;
1026 if ((reg0 & 0x03) && (reg1 & 0x03))
1027 maybe_support_aspm = true;
1031 maybe_support_aspm = true;
1035 if (maybe_support_aspm)
1036 chip->aspm_l0s_l1_en = 0x03;
1038 dev_dbg(rtsx_dev(chip), "aspm_level[0] = 0x%02x, aspm_level[1] = 0x%02x\n",
1039 chip->aspm_level[0], chip->aspm_level[1]);
1041 if (chip->aspm_l0s_l1_en) {
1042 chip->aspm_enabled = 1;
1044 chip->aspm_enabled = 0;
1045 chip->sdio_aspm = 0;
1047 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF,
1048 0x30 | chip->aspm_level[0] |
1049 (chip->aspm_level[1] << 2));
1053 static void rtsx_manage_ocp(struct rtsx_chip *chip)
1059 rtsx_read_register(chip, OCPSTAT, &chip->ocp_stat);
1061 if (chip->card_exist & SD_CARD)
1062 sd_power_off_card3v3(chip);
1063 else if (chip->card_exist & MS_CARD)
1064 ms_power_off_card3v3(chip);
1065 else if (chip->card_exist & XD_CARD)
1066 xd_power_off_card3v3(chip);
1072 static void rtsx_manage_sd_lock(struct rtsx_chip *chip)
1074 #ifdef SUPPORT_SD_LOCK
1075 struct sd_info *sd_card = &chip->sd_card;
1078 if (!sd_card->sd_erase_status)
1081 if (chip->card_exist & SD_CARD) {
1082 rtsx_read_register(chip, 0xFD30, &val);
1084 sd_card->sd_erase_status = SD_NOT_ERASE;
1085 sd_card->sd_lock_notify = 1;
1086 chip->need_reinit |= SD_CARD;
1089 sd_card->sd_erase_status = SD_NOT_ERASE;
1094 static bool rtsx_is_ss_allowed(struct rtsx_chip *chip)
1098 if (!chip->ss_en || CHECK_PID(chip, 0x5288))
1101 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
1102 rtsx_read_cfg_dw(chip, 1, 0x04, &val);
1110 static void rtsx_manage_ss(struct rtsx_chip *chip)
1112 if (!rtsx_is_ss_allowed(chip) || chip->sd_io)
1115 if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) {
1116 chip->ss_counter = 0;
1120 if (chip->ss_counter < (chip->ss_idle_period / POLLING_INTERVAL))
1123 rtsx_exclusive_enter_ss(chip);
1126 static void rtsx_manage_aspm(struct rtsx_chip *chip)
1130 if (!CHECK_PID(chip, 0x5208))
1133 rtsx_monitor_aspm_config(chip);
1135 #ifdef SUPPORT_SDIO_ASPM
1136 if (!CHK_SDIO_EXIST(chip) || CHK_SDIO_IGNORED(chip) ||
1137 !chip->aspm_l0s_l1_en || !chip->dynamic_aspm)
1141 dynamic_configure_sdio_aspm(chip);
1145 if (chip->sdio_aspm)
1148 dev_dbg(rtsx_dev(chip), "SDIO enter ASPM!\n");
1149 data = 0x30 | (chip->aspm_level[1] << 2);
1150 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC, data);
1151 chip->sdio_aspm = 1;
1155 static void rtsx_manage_idle(struct rtsx_chip *chip)
1157 if (chip->idle_counter < IDLE_MAX_COUNT) {
1158 chip->idle_counter++;
1162 if (rtsx_get_stat(chip) == RTSX_STAT_IDLE)
1165 dev_dbg(rtsx_dev(chip), "Idle state!\n");
1166 rtsx_set_stat(chip, RTSX_STAT_IDLE);
1168 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1169 chip->led_toggle_counter = 0;
1171 rtsx_force_power_on(chip, SSC_PDCTL);
1173 turn_off_led(chip, LED_GPIO);
1175 if (chip->auto_power_down && !chip->card_ready && !chip->sd_io)
1176 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1179 static void rtsx_manage_2lun_mode(struct rtsx_chip *chip)
1184 sd_oc = chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER);
1185 ms_oc = chip->ocp_stat & (MS_OC_NOW | MS_OC_EVER);
1188 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
1191 if (sd_oc && (chip->card_exist & SD_CARD)) {
1192 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1193 card_power_off(chip, SD_CARD);
1194 chip->card_fail |= SD_CARD;
1197 if (ms_oc && (chip->card_exist & MS_CARD)) {
1198 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1199 card_power_off(chip, MS_CARD);
1200 chip->card_fail |= MS_CARD;
1205 static void rtsx_manage_1lun_mode(struct rtsx_chip *chip)
1208 if (!(chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)))
1211 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
1214 if (chip->card_exist & SD_CARD) {
1215 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1216 chip->card_fail |= SD_CARD;
1217 } else if (chip->card_exist & MS_CARD) {
1218 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1219 chip->card_fail |= MS_CARD;
1220 } else if (chip->card_exist & XD_CARD) {
1221 rtsx_write_register(chip, CARD_OE, XD_OUTPUT_EN, 0);
1222 chip->card_fail |= XD_CARD;
1224 card_power_off(chip, SD_CARD);
1228 static void rtsx_delink_stage1(struct rtsx_chip *chip, int enter_L1,
1233 rtsx_set_stat(chip, RTSX_STAT_DELINK);
1235 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1236 rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1238 if (chip->card_exist)
1239 dev_dbg(rtsx_dev(chip), "False card inserted, do force delink\n");
1241 dev_dbg(rtsx_dev(chip), "No card inserted, do delink\n");
1244 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 1);
1246 if (chip->card_exist)
1251 rtsx_write_register(chip, CHANGE_LINK_STATE, val, val);
1254 rtsx_enter_L1(chip);
1256 if (chip->card_exist)
1257 chip->auto_delink_cnt = stage3_cnt + 1;
1260 static void rtsx_delink_stage(struct rtsx_chip *chip)
1262 int delink_stage1_cnt, delink_stage2_cnt, delink_stage3_cnt;
1265 if (!chip->auto_delink_en || !chip->auto_delink_allowed ||
1266 chip->card_ready || chip->card_ejected || chip->sd_io) {
1267 chip->auto_delink_cnt = 0;
1271 enter_L1 = chip->auto_delink_in_L1 &&
1272 (chip->aspm_l0s_l1_en || chip->ss_en);
1274 delink_stage1_cnt = chip->delink_stage1_step;
1275 delink_stage2_cnt = delink_stage1_cnt + chip->delink_stage2_step;
1276 delink_stage3_cnt = delink_stage2_cnt + chip->delink_stage3_step;
1278 if (chip->auto_delink_cnt > delink_stage3_cnt)
1281 if (chip->auto_delink_cnt == delink_stage1_cnt)
1282 rtsx_delink_stage1(chip, enter_L1, delink_stage3_cnt);
1284 if (chip->auto_delink_cnt == delink_stage2_cnt) {
1285 dev_dbg(rtsx_dev(chip), "Try to do force delink\n");
1290 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1291 rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1293 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0x0A);
1296 chip->auto_delink_cnt++;
1299 void rtsx_polling_func(struct rtsx_chip *chip)
1301 if (rtsx_chk_stat(chip, RTSX_STAT_SUSPEND))
1304 if (rtsx_chk_stat(chip, RTSX_STAT_DELINK))
1307 if (chip->polling_config) {
1310 rtsx_read_config_byte(chip, 0, &val);
1313 if (rtsx_chk_stat(chip, RTSX_STAT_SS))
1316 rtsx_manage_ocp(chip);
1318 rtsx_manage_sd_lock(chip);
1320 rtsx_init_cards(chip);
1322 rtsx_manage_ss(chip);
1324 rtsx_manage_aspm(chip);
1326 rtsx_manage_idle(chip);
1328 switch (rtsx_get_stat(chip)) {
1330 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1331 rtsx_blink_led(chip);
1333 do_remaining_work(chip);
1336 case RTSX_STAT_IDLE:
1337 if (chip->sd_io && !chip->sd_int)
1338 try_to_switch_sdio_ctrl(chip);
1340 rtsx_enable_aspm(chip);
1347 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
1348 rtsx_manage_2lun_mode(chip);
1350 rtsx_manage_1lun_mode(chip);
1353 rtsx_delink_stage(chip);
1357 * rtsx_stop_cmd - stop command transfer and DMA transfer
1358 * @chip: Realtek's card reader chip
1359 * @card: flash card type
1361 * Stop command transfer and DMA transfer.
1362 * This function is called in error handler.
1364 void rtsx_stop_cmd(struct rtsx_chip *chip, int card)
1368 for (i = 0; i <= 8; i++) {
1369 int addr = RTSX_HCBAR + i * 4;
1372 reg = rtsx_readl(chip, addr);
1373 dev_dbg(rtsx_dev(chip), "BAR (0x%02x): 0x%08x\n", addr, reg);
1375 rtsx_writel(chip, RTSX_HCBCTLR, STOP_CMD);
1376 rtsx_writel(chip, RTSX_HDBCTLR, STOP_DMA);
1378 for (i = 0; i < 16; i++) {
1379 u16 addr = 0xFE20 + (u16)i;
1382 rtsx_read_register(chip, addr, &val);
1383 dev_dbg(rtsx_dev(chip), "0x%04X: 0x%02x\n", addr, val);
1386 rtsx_write_register(chip, DMACTL, 0x80, 0x80);
1387 rtsx_write_register(chip, RBCTL, 0x80, 0x80);
1390 #define MAX_RW_REG_CNT 1024
1392 int rtsx_write_register(struct rtsx_chip *chip, u16 addr, u8 mask, u8 data)
1397 val |= (u32)(addr & 0x3FFF) << 16;
1398 val |= (u32)mask << 8;
1401 rtsx_writel(chip, RTSX_HAIMR, val);
1403 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1404 val = rtsx_readl(chip, RTSX_HAIMR);
1405 if ((val & BIT(31)) == 0) {
1406 if (data != (u8)val) {
1410 return STATUS_SUCCESS;
1414 return STATUS_TIMEDOUT;
1417 int rtsx_read_register(struct rtsx_chip *chip, u16 addr, u8 *data)
1425 val |= (u32)(addr & 0x3FFF) << 16;
1427 rtsx_writel(chip, RTSX_HAIMR, val);
1429 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1430 val = rtsx_readl(chip, RTSX_HAIMR);
1431 if ((val & BIT(31)) == 0)
1435 if (i >= MAX_RW_REG_CNT) {
1436 return STATUS_TIMEDOUT;
1440 *data = (u8)(val & 0xFF);
1442 return STATUS_SUCCESS;
1445 int rtsx_write_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 mask,
1452 for (i = 0; i < 4; i++) {
1454 retval = rtsx_write_register(chip, CFGDATA0 + i,
1456 (u8)(val & mask & 0xFF));
1467 retval = rtsx_write_register(chip, CFGADDR0, 0xFF, (u8)addr);
1471 retval = rtsx_write_register(chip, CFGADDR1, 0xFF,
1477 retval = rtsx_write_register(chip, CFGRWCTL, 0xFF,
1479 ((func_no & 0x03) << 4));
1484 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1485 retval = rtsx_read_register(chip, CFGRWCTL, &tmp);
1489 if ((tmp & 0x80) == 0)
1494 return STATUS_SUCCESS;
1497 int rtsx_read_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 *val)
1504 retval = rtsx_write_register(chip, CFGADDR0, 0xFF, (u8)addr);
1508 retval = rtsx_write_register(chip, CFGADDR1, 0xFF, (u8)(addr >> 8));
1512 retval = rtsx_write_register(chip, CFGRWCTL, 0xFF,
1513 0x80 | ((func_no & 0x03) << 4));
1518 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1519 retval = rtsx_read_register(chip, CFGRWCTL, &tmp);
1523 if ((tmp & 0x80) == 0)
1527 for (i = 0; i < 4; i++) {
1528 retval = rtsx_read_register(chip, CFGDATA0 + i, &tmp);
1532 data |= (u32)tmp << (i * 8);
1538 return STATUS_SUCCESS;
1541 int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1545 u16 offset = addr % 4;
1546 u16 aligned_addr = addr - offset;
1551 return STATUS_NOMEM;
1554 if ((len + offset) % 4)
1555 dw_len = (len + offset) / 4 + 1;
1557 dw_len = (len + offset) / 4;
1559 dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1561 data = vzalloc(array_size(dw_len, 4));
1563 return STATUS_NOMEM;
1566 mask = vzalloc(array_size(dw_len, 4));
1569 return STATUS_NOMEM;
1573 for (i = 0; i < len; i++) {
1574 mask[j] |= 0xFF << (offset * 8);
1575 data[j] |= buf[i] << (offset * 8);
1576 if (++offset == 4) {
1582 print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, mask,
1584 print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, data,
1587 for (i = 0; i < dw_len; i++) {
1588 retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i * 4,
1590 if (retval != STATUS_SUCCESS) {
1600 return STATUS_SUCCESS;
1603 int rtsx_read_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1607 u16 offset = addr % 4;
1608 u16 aligned_addr = addr - offset;
1612 if ((len + offset) % 4)
1613 dw_len = (len + offset) / 4 + 1;
1615 dw_len = (len + offset) / 4;
1617 dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1619 data = vmalloc(array_size(dw_len, 4));
1621 return STATUS_NOMEM;
1624 for (i = 0; i < dw_len; i++) {
1625 retval = rtsx_read_cfg_dw(chip, func, aligned_addr + i * 4,
1627 if (retval != STATUS_SUCCESS) {
1636 for (i = 0; i < len; i++) {
1637 buf[i] = (u8)(data[j] >> (offset * 8));
1638 if (++offset == 4) {
1647 return STATUS_SUCCESS;
1650 int rtsx_write_phy_register(struct rtsx_chip *chip, u8 addr, u16 val)
1653 bool finished = false;
1657 retval = rtsx_write_register(chip, PHYDATA0, 0xFF, (u8)val);
1661 retval = rtsx_write_register(chip, PHYDATA1, 0xFF, (u8)(val >> 8));
1665 retval = rtsx_write_register(chip, PHYADDR, 0xFF, addr);
1669 retval = rtsx_write_register(chip, PHYRWCTL, 0xFF, 0x81);
1674 for (i = 0; i < 100000; i++) {
1675 retval = rtsx_read_register(chip, PHYRWCTL, &tmp);
1679 if (!(tmp & 0x80)) {
1689 return STATUS_SUCCESS;
1692 int rtsx_read_phy_register(struct rtsx_chip *chip, u8 addr, u16 *val)
1695 bool finished = false;
1700 retval = rtsx_write_register(chip, PHYADDR, 0xFF, addr);
1704 retval = rtsx_write_register(chip, PHYRWCTL, 0xFF, 0x80);
1709 for (i = 0; i < 100000; i++) {
1710 retval = rtsx_read_register(chip, PHYRWCTL, &tmp);
1714 if (!(tmp & 0x80)) {
1724 retval = rtsx_read_register(chip, PHYDATA0, &tmp);
1729 retval = rtsx_read_register(chip, PHYDATA1, &tmp);
1733 data |= (u16)tmp << 8;
1738 return STATUS_SUCCESS;
1741 int rtsx_read_efuse(struct rtsx_chip *chip, u8 addr, u8 *val)
1747 retval = rtsx_write_register(chip, EFUSE_CTRL, 0xFF, 0x80 | addr);
1752 for (i = 0; i < 100; i++) {
1753 retval = rtsx_read_register(chip, EFUSE_CTRL, &data);
1763 return STATUS_TIMEDOUT;
1766 retval = rtsx_read_register(chip, EFUSE_DATA, &data);
1773 return STATUS_SUCCESS;
1776 int rtsx_write_efuse(struct rtsx_chip *chip, u8 addr, u8 val)
1780 u8 data = 0, tmp = 0xFF;
1782 for (i = 0; i < 8; i++) {
1783 if (val & (u8)(1 << i))
1786 tmp &= (~(u8)(1 << i));
1787 dev_dbg(rtsx_dev(chip), "Write 0x%x to 0x%x\n", tmp, addr);
1789 retval = rtsx_write_register(chip, EFUSE_DATA, 0xFF, tmp);
1793 retval = rtsx_write_register(chip, EFUSE_CTRL, 0xFF,
1799 for (j = 0; j < 100; j++) {
1800 retval = rtsx_read_register(chip, EFUSE_CTRL, &data);
1810 return STATUS_TIMEDOUT;
1816 return STATUS_SUCCESS;
1819 int rtsx_clr_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1824 retval = rtsx_read_phy_register(chip, reg, &value);
1825 if (retval != STATUS_SUCCESS) {
1829 if (value & (1 << bit)) {
1830 value &= ~(1 << bit);
1831 retval = rtsx_write_phy_register(chip, reg, value);
1832 if (retval != STATUS_SUCCESS) {
1837 return STATUS_SUCCESS;
1840 int rtsx_set_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1845 retval = rtsx_read_phy_register(chip, reg, &value);
1846 if (retval != STATUS_SUCCESS) {
1850 if ((value & (1 << bit)) == 0) {
1851 value |= (1 << bit);
1852 retval = rtsx_write_phy_register(chip, reg, value);
1853 if (retval != STATUS_SUCCESS) {
1858 return STATUS_SUCCESS;
1861 static void rtsx_handle_pm_dstate(struct rtsx_chip *chip, u8 dstate)
1865 dev_dbg(rtsx_dev(chip), "%04x set pm_dstate to %d\n",
1866 chip->product_id, dstate);
1868 if (CHK_SDIO_EXIST(chip)) {
1871 if (CHECK_PID(chip, 0x5288))
1876 rtsx_read_cfg_dw(chip, func_no, 0x84, &ultmp);
1877 dev_dbg(rtsx_dev(chip), "pm_dstate of function %d: 0x%x\n",
1878 (int)func_no, ultmp);
1879 rtsx_write_cfg_dw(chip, func_no, 0x84, 0xFF, dstate);
1882 rtsx_write_config_byte(chip, 0x44, dstate);
1883 rtsx_write_config_byte(chip, 0x45, 0);
1886 void rtsx_enter_L1(struct rtsx_chip *chip)
1888 rtsx_handle_pm_dstate(chip, 2);
1891 void rtsx_exit_L1(struct rtsx_chip *chip)
1893 rtsx_write_config_byte(chip, 0x44, 0);
1894 rtsx_write_config_byte(chip, 0x45, 0);
1897 void rtsx_enter_ss(struct rtsx_chip *chip)
1899 dev_dbg(rtsx_dev(chip), "Enter Selective Suspend State!\n");
1901 rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
1903 if (chip->power_down_in_ss) {
1904 rtsx_power_off_card(chip);
1905 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1908 if (CHK_SDIO_EXIST(chip))
1909 rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
1910 0xC0, 0xFF00, 0x0100);
1912 if (chip->auto_delink_en) {
1913 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x01, 0x01);
1915 if (!chip->phy_debug_mode) {
1918 tmp = rtsx_readl(chip, RTSX_BIER);
1920 rtsx_writel(chip, RTSX_BIER, tmp);
1923 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 0);
1926 rtsx_enter_L1(chip);
1928 RTSX_CLR_DELINK(chip);
1929 rtsx_set_stat(chip, RTSX_STAT_SS);
1932 void rtsx_exit_ss(struct rtsx_chip *chip)
1934 dev_dbg(rtsx_dev(chip), "Exit Selective Suspend State!\n");
1938 if (chip->power_down_in_ss) {
1939 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
1943 if (RTSX_TST_DELINK(chip)) {
1944 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1945 rtsx_reinit_cards(chip, 1);
1946 RTSX_CLR_DELINK(chip);
1947 } else if (chip->power_down_in_ss) {
1948 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1949 rtsx_reinit_cards(chip, 0);
1953 int rtsx_pre_handle_interrupt(struct rtsx_chip *chip)
1955 u32 status, int_enable;
1956 bool exit_ss = false;
1964 chip->ss_counter = 0;
1965 if (rtsx_get_stat(chip) == RTSX_STAT_SS) {
1968 rtsx_set_stat(chip, RTSX_STAT_RUN);
1972 int_enable = rtsx_readl(chip, RTSX_BIER);
1973 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
1975 if (((chip->int_reg & int_enable) == 0) ||
1976 (chip->int_reg == 0xFFFFFFFF))
1979 status = chip->int_reg &= (int_enable | 0x7FFFFF);
1981 if (status & CARD_INT) {
1982 chip->auto_delink_cnt = 0;
1984 if (status & SD_INT) {
1985 if (status & SD_EXIST) {
1986 set_bit(SD_NR, &chip->need_reset);
1988 set_bit(SD_NR, &chip->need_release);
1989 chip->sd_reset_counter = 0;
1990 chip->sd_show_cnt = 0;
1991 clear_bit(SD_NR, &chip->need_reset);
1995 * If multi-luns, it's possible that
1996 * when plugging/unplugging one card
1997 * there is another card which still
1998 * exists in the slot. In this case,
1999 * all existed cards should be reset.
2001 if (exit_ss && (status & SD_EXIST))
2002 set_bit(SD_NR, &chip->need_reinit);
2004 if (!CHECK_PID(chip, 0x5288) || CHECK_BARO_PKG(chip, QFN)) {
2005 if (status & XD_INT) {
2006 if (status & XD_EXIST) {
2007 set_bit(XD_NR, &chip->need_reset);
2009 set_bit(XD_NR, &chip->need_release);
2010 chip->xd_reset_counter = 0;
2011 chip->xd_show_cnt = 0;
2012 clear_bit(XD_NR, &chip->need_reset);
2015 if (exit_ss && (status & XD_EXIST))
2016 set_bit(XD_NR, &chip->need_reinit);
2019 if (status & MS_INT) {
2020 if (status & MS_EXIST) {
2021 set_bit(MS_NR, &chip->need_reset);
2023 set_bit(MS_NR, &chip->need_release);
2024 chip->ms_reset_counter = 0;
2025 chip->ms_show_cnt = 0;
2026 clear_bit(MS_NR, &chip->need_reset);
2029 if (exit_ss && (status & MS_EXIST))
2030 set_bit(MS_NR, &chip->need_reinit);
2035 chip->ocp_int = ocp_int & status;
2038 if (chip->sd_io && (chip->int_reg & DATA_DONE_INT))
2039 chip->int_reg &= ~(u32)DATA_DONE_INT;
2041 return STATUS_SUCCESS;
2044 void rtsx_do_before_power_down(struct rtsx_chip *chip, int pm_stat)
2048 dev_dbg(rtsx_dev(chip), "%s, pm_stat = %d\n", __func__, pm_stat);
2050 rtsx_set_stat(chip, RTSX_STAT_SUSPEND);
2052 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2053 if (retval != STATUS_SUCCESS)
2056 rtsx_release_cards(chip);
2057 rtsx_disable_bus_int(chip);
2058 turn_off_led(chip, LED_GPIO);
2060 #ifdef HW_AUTO_SWITCH_SD_BUS
2062 chip->sdio_in_charge = 1;
2063 if (CHECK_PID(chip, 0x5208)) {
2064 rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
2065 /* Enable sdio_bus_auto_switch */
2066 rtsx_write_register(chip, 0xFE70, 0x80, 0x80);
2067 } else if (CHECK_PID(chip, 0x5288)) {
2068 rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
2069 /* Enable sdio_bus_auto_switch */
2070 rtsx_write_register(chip, 0xFE5A, 0x08, 0x08);
2075 if (CHECK_PID(chip, 0x5208) && (chip->ic_version >= IC_VER_D)) {
2076 /* u_force_clkreq_0 */
2077 rtsx_write_register(chip, PETXCFG, 0x08, 0x08);
2080 if (pm_stat == PM_S1) {
2081 dev_dbg(rtsx_dev(chip), "Host enter S1\n");
2082 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
2084 } else if (pm_stat == PM_S3) {
2085 if (chip->s3_pwr_off_delay > 0)
2086 wait_timeout(chip->s3_pwr_off_delay);
2088 dev_dbg(rtsx_dev(chip), "Host enter S3\n");
2089 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
2093 if (chip->do_delink_before_power_down && chip->auto_delink_en)
2094 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 2);
2096 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
2100 chip->card_exist = 0;
2103 void rtsx_enable_aspm(struct rtsx_chip *chip)
2105 if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && !chip->aspm_enabled) {
2106 dev_dbg(rtsx_dev(chip), "Try to enable ASPM\n");
2107 chip->aspm_enabled = 1;
2109 if (chip->asic_code && CHECK_PID(chip, 0x5208))
2110 rtsx_write_phy_register(chip, 0x07, 0);
2111 if (CHECK_PID(chip, 0x5208)) {
2112 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xF3,
2113 0x30 | chip->aspm_level[0]);
2115 rtsx_write_config_byte(chip, LCTLR,
2116 chip->aspm_l0s_l1_en);
2119 if (CHK_SDIO_EXIST(chip)) {
2120 u16 val = chip->aspm_l0s_l1_en | 0x0100;
2122 rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
2128 void rtsx_disable_aspm(struct rtsx_chip *chip)
2130 if (CHECK_PID(chip, 0x5208))
2131 rtsx_monitor_aspm_config(chip);
2133 if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && chip->aspm_enabled) {
2134 dev_dbg(rtsx_dev(chip), "Try to disable ASPM\n");
2135 chip->aspm_enabled = 0;
2137 if (chip->asic_code && CHECK_PID(chip, 0x5208))
2138 rtsx_write_phy_register(chip, 0x07, 0x0129);
2139 if (CHECK_PID(chip, 0x5208))
2140 rtsx_write_register(chip, ASPM_FORCE_CTL,
2143 rtsx_write_config_byte(chip, LCTLR, 0x00);
2149 int rtsx_read_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2157 return STATUS_ERROR;
2161 reg_addr = PPBUF_BASE2;
2162 for (i = 0; i < buf_len / 256; i++) {
2163 rtsx_init_cmd(chip);
2165 for (j = 0; j < 256; j++)
2166 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2168 retval = rtsx_send_cmd(chip, 0, 250);
2173 memcpy(ptr, rtsx_get_cmd_data(chip), 256);
2177 if (buf_len % 256) {
2178 rtsx_init_cmd(chip);
2180 for (j = 0; j < buf_len % 256; j++)
2181 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2183 retval = rtsx_send_cmd(chip, 0, 250);
2189 memcpy(ptr, rtsx_get_cmd_data(chip), buf_len % 256);
2191 return STATUS_SUCCESS;
2194 int rtsx_write_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2202 return STATUS_ERROR;
2206 reg_addr = PPBUF_BASE2;
2207 for (i = 0; i < buf_len / 256; i++) {
2208 rtsx_init_cmd(chip);
2210 for (j = 0; j < 256; j++) {
2211 rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
2216 retval = rtsx_send_cmd(chip, 0, 250);
2222 if (buf_len % 256) {
2223 rtsx_init_cmd(chip);
2225 for (j = 0; j < buf_len % 256; j++) {
2226 rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
2231 retval = rtsx_send_cmd(chip, 0, 250);
2237 return STATUS_SUCCESS;
2240 int rtsx_check_chip_exist(struct rtsx_chip *chip)
2242 if (rtsx_readl(chip, 0) == 0xFFFFFFFF) {
2246 return STATUS_SUCCESS;
2249 int rtsx_force_power_on(struct rtsx_chip *chip, u8 ctl)
2254 if (ctl & SSC_PDCTL)
2255 mask |= SSC_POWER_DOWN;
2258 if (ctl & OC_PDCTL) {
2259 mask |= SD_OC_POWER_DOWN;
2260 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2261 mask |= MS_OC_POWER_DOWN;
2266 retval = rtsx_write_register(chip, FPDCTL, mask, 0);
2267 if (retval != STATUS_SUCCESS) {
2271 if (CHECK_PID(chip, 0x5288))
2275 return STATUS_SUCCESS;
2278 int rtsx_force_power_down(struct rtsx_chip *chip, u8 ctl)
2281 u8 mask = 0, val = 0;
2283 if (ctl & SSC_PDCTL)
2284 mask |= SSC_POWER_DOWN;
2287 if (ctl & OC_PDCTL) {
2288 mask |= SD_OC_POWER_DOWN;
2289 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2290 mask |= MS_OC_POWER_DOWN;
2296 retval = rtsx_write_register(chip, FPDCTL, mask, val);
2297 if (retval != STATUS_SUCCESS) {
2302 return STATUS_SUCCESS;