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/>.
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>
30 #include "rtsx_transport.h"
31 #include "rtsx_scsi.h"
32 #include "rtsx_card.h"
33 #include "rtsx_chip.h"
41 static void rtsx_calibration(struct rtsx_chip *chip)
43 rtsx_write_phy_register(chip, 0x1B, 0x135E);
45 rtsx_write_phy_register(chip, 0x00, 0x0280);
46 rtsx_write_phy_register(chip, 0x01, 0x7112);
47 rtsx_write_phy_register(chip, 0x01, 0x7110);
48 rtsx_write_phy_register(chip, 0x01, 0x7112);
49 rtsx_write_phy_register(chip, 0x01, 0x7113);
50 rtsx_write_phy_register(chip, 0x00, 0x0288);
53 void rtsx_disable_card_int(struct rtsx_chip *chip)
55 u32 reg = rtsx_readl(chip, RTSX_BIER);
57 reg &= ~(XD_INT_EN | SD_INT_EN | MS_INT_EN);
58 rtsx_writel(chip, RTSX_BIER, reg);
61 void rtsx_enable_card_int(struct rtsx_chip *chip)
63 u32 reg = rtsx_readl(chip, RTSX_BIER);
66 for (i = 0; i <= chip->max_lun; i++) {
67 if (chip->lun2card[i] & XD_CARD)
69 if (chip->lun2card[i] & SD_CARD)
71 if (chip->lun2card[i] & MS_CARD)
74 if (chip->hw_bypass_sd)
75 reg &= ~((u32)SD_INT_EN);
77 rtsx_writel(chip, RTSX_BIER, reg);
80 void rtsx_enable_bus_int(struct rtsx_chip *chip)
83 #ifndef DISABLE_CARD_INT
87 reg = TRANS_OK_INT_EN | TRANS_FAIL_INT_EN;
89 #ifndef DISABLE_CARD_INT
90 for (i = 0; i <= chip->max_lun; i++) {
91 dev_dbg(rtsx_dev(chip), "lun2card[%d] = 0x%02x\n",
92 i, chip->lun2card[i]);
94 if (chip->lun2card[i] & XD_CARD)
96 if (chip->lun2card[i] & SD_CARD)
98 if (chip->lun2card[i] & MS_CARD)
101 if (chip->hw_bypass_sd)
102 reg &= ~((u32)SD_INT_EN);
105 if (chip->ic_version >= IC_VER_C)
106 reg |= DELINK_INT_EN;
110 if (!chip->adma_mode)
111 reg |= DATA_DONE_INT_EN;
113 /* Enable Bus Interrupt */
114 rtsx_writel(chip, RTSX_BIER, reg);
116 dev_dbg(rtsx_dev(chip), "RTSX_BIER: 0x%08x\n", reg);
119 void rtsx_disable_bus_int(struct rtsx_chip *chip)
121 rtsx_writel(chip, RTSX_BIER, 0);
124 static int rtsx_pre_handle_sdio_old(struct rtsx_chip *chip)
126 if (chip->ignore_sd && CHK_SDIO_EXIST(chip)) {
127 if (chip->asic_code) {
128 RTSX_WRITE_REG(chip, CARD_PULL_CTL5, 0xFF,
129 MS_INS_PU | SD_WP_PU |
130 SD_CD_PU | SD_CMD_PU);
132 RTSX_WRITE_REG(chip, FPGA_PULL_CTL, 0xFF,
133 FPGA_SD_PULL_CTL_EN);
135 RTSX_WRITE_REG(chip, CARD_SHARE_MODE, 0xFF, CARD_SHARE_48_SD);
137 /* Enable SDIO internal clock */
138 RTSX_WRITE_REG(chip, 0xFF2C, 0x01, 0x01);
140 RTSX_WRITE_REG(chip, SDIO_CTRL, 0xFF,
141 SDIO_BUS_CTRL | SDIO_CD_CTRL);
146 chip->need_reset |= SD_CARD;
149 return STATUS_SUCCESS;
152 #ifdef HW_AUTO_SWITCH_SD_BUS
153 static int rtsx_pre_handle_sdio_new(struct rtsx_chip *chip)
156 int sw_bypass_sd = 0;
159 if (chip->driver_first_load) {
160 if (CHECK_PID(chip, 0x5288)) {
161 RTSX_READ_REG(chip, 0xFE5A, &tmp);
164 } else if (CHECK_PID(chip, 0x5208)) {
165 RTSX_READ_REG(chip, 0xFE70, &tmp);
170 if (chip->sdio_in_charge)
173 dev_dbg(rtsx_dev(chip), "chip->sdio_in_charge = %d\n",
174 chip->sdio_in_charge);
175 dev_dbg(rtsx_dev(chip), "chip->driver_first_load = %d\n",
176 chip->driver_first_load);
177 dev_dbg(rtsx_dev(chip), "sw_bypass_sd = %d\n",
181 u8 cd_toggle_mask = 0;
183 RTSX_READ_REG(chip, TLPTISTAT, &tmp);
184 cd_toggle_mask = 0x08;
186 if (tmp & cd_toggle_mask) {
187 /* Disable sdio_bus_auto_switch */
188 if (CHECK_PID(chip, 0x5288))
189 RTSX_WRITE_REG(chip, 0xFE5A, 0x08, 0x00);
190 else if (CHECK_PID(chip, 0x5208))
191 RTSX_WRITE_REG(chip, 0xFE70, 0x80, 0x00);
193 RTSX_WRITE_REG(chip, TLPTISTAT, 0xFF, tmp);
195 chip->need_reset |= SD_CARD;
197 dev_dbg(rtsx_dev(chip), "Chip inserted with SDIO!\n");
199 if (chip->asic_code) {
200 retval = sd_pull_ctl_enable(chip);
201 if (retval != STATUS_SUCCESS)
202 TRACE_RET(chip, STATUS_FAIL);
204 RTSX_WRITE_REG(chip, FPGA_PULL_CTL,
205 FPGA_SD_PULL_CTL_BIT | 0x20, 0);
207 retval = card_share_mode(chip, SD_CARD);
208 if (retval != STATUS_SUCCESS)
209 TRACE_RET(chip, STATUS_FAIL);
211 /* Enable sdio_bus_auto_switch */
212 if (CHECK_PID(chip, 0x5288))
213 RTSX_WRITE_REG(chip, 0xFE5A, 0x08, 0x08);
214 else if (CHECK_PID(chip, 0x5208))
215 RTSX_WRITE_REG(chip, 0xFE70, 0x80, 0x80);
217 chip->chip_insert_with_sdio = 1;
221 RTSX_WRITE_REG(chip, TLPTISTAT, 0x08, 0x08);
223 chip->need_reset |= SD_CARD;
226 return STATUS_SUCCESS;
230 static int rtsx_reset_aspm(struct rtsx_chip *chip)
234 if (chip->dynamic_aspm) {
235 if (!CHK_SDIO_EXIST(chip) || !CHECK_PID(chip, 0x5288))
236 return STATUS_SUCCESS;
238 ret = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF,
239 chip->aspm_l0s_l1_en);
240 if (ret != STATUS_SUCCESS)
241 TRACE_RET(chip, STATUS_FAIL);
243 return STATUS_SUCCESS;
246 if (CHECK_PID(chip, 0x5208))
247 RTSX_WRITE_REG(chip, ASPM_FORCE_CTL, 0xFF, 0x3F);
248 ret = rtsx_write_config_byte(chip, LCTLR, chip->aspm_l0s_l1_en);
249 if (ret != STATUS_SUCCESS)
250 TRACE_RET(chip, STATUS_FAIL);
252 chip->aspm_level[0] = chip->aspm_l0s_l1_en;
253 if (CHK_SDIO_EXIST(chip)) {
254 chip->aspm_level[1] = chip->aspm_l0s_l1_en;
255 ret = rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
256 0xC0, 0xFF, chip->aspm_l0s_l1_en);
257 if (ret != STATUS_SUCCESS)
258 TRACE_RET(chip, STATUS_FAIL);
261 chip->aspm_enabled = 1;
263 return STATUS_SUCCESS;
266 static int rtsx_enable_pcie_intr(struct rtsx_chip *chip)
270 if (!chip->asic_code || !CHECK_PID(chip, 0x5208)) {
271 rtsx_enable_bus_int(chip);
272 return STATUS_SUCCESS;
275 if (chip->phy_debug_mode) {
276 RTSX_WRITE_REG(chip, CDRESUMECTL, 0x77, 0);
277 rtsx_disable_bus_int(chip);
279 rtsx_enable_bus_int(chip);
282 if (chip->ic_version >= IC_VER_D) {
285 ret = rtsx_read_phy_register(chip, 0x00, ®);
286 if (ret != STATUS_SUCCESS)
287 TRACE_RET(chip, STATUS_FAIL);
291 ret = rtsx_write_phy_register(chip, 0x00, reg);
292 if (ret != STATUS_SUCCESS)
293 TRACE_RET(chip, STATUS_FAIL);
295 ret = rtsx_read_phy_register(chip, 0x1C, ®);
296 if (ret != STATUS_SUCCESS)
297 TRACE_RET(chip, STATUS_FAIL);
300 ret = rtsx_write_phy_register(chip, 0x1C, reg);
301 if (ret != STATUS_SUCCESS)
302 TRACE_RET(chip, STATUS_FAIL);
305 if (chip->driver_first_load && (chip->ic_version < IC_VER_C))
306 rtsx_calibration(chip);
308 return STATUS_SUCCESS;
311 int rtsx_reset_chip(struct rtsx_chip *chip)
315 rtsx_writel(chip, RTSX_HCBAR, chip->host_cmds_addr);
317 rtsx_disable_aspm(chip);
319 RTSX_WRITE_REG(chip, HOST_SLEEP_STATE, 0x03, 0x00);
321 /* Disable card clock */
322 RTSX_WRITE_REG(chip, CARD_CLK_EN, 0x1E, 0);
325 /* SSC power on, OCD power on */
326 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
327 RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, 0);
329 RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, MS_OC_POWER_DOWN);
331 RTSX_WRITE_REG(chip, OCPPARA1, OCP_TIME_MASK, OCP_TIME_800);
332 RTSX_WRITE_REG(chip, OCPPARA2, OCP_THD_MASK, OCP_THD_244_946);
333 RTSX_WRITE_REG(chip, OCPCTL, 0xFF, CARD_OC_INT_EN | CARD_DETECT_EN);
336 RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, OC_POWER_DOWN);
339 if (!CHECK_PID(chip, 0x5288))
340 RTSX_WRITE_REG(chip, CARD_GPIO_DIR, 0xFF, 0x03);
343 RTSX_WRITE_REG(chip, CARD_GPIO, 0xFF, 0x03);
345 /* Reset delink mode */
346 RTSX_WRITE_REG(chip, CHANGE_LINK_STATE, 0x0A, 0);
348 /* Card driving select */
349 RTSX_WRITE_REG(chip, CARD_DRIVE_SEL, 0xFF, chip->card_drive_sel);
351 #ifdef LED_AUTO_BLINK
352 RTSX_WRITE_REG(chip, CARD_AUTO_BLINK, 0xFF,
353 LED_BLINK_SPEED | BLINK_EN | LED_GPIO0);
356 if (chip->asic_code) {
357 /* Enable SSC Clock */
358 RTSX_WRITE_REG(chip, SSC_CTL1, 0xFF, SSC_8X_EN | SSC_SEL_4M);
359 RTSX_WRITE_REG(chip, SSC_CTL2, 0xFF, 0x12);
362 /* Disable cd_pwr_save (u_force_rst_core_en=0, u_cd_rst_core_en=0)
364 bit[1] u_cd_rst_core_en rst_value = 0
365 bit[2] u_force_rst_core_en rst_value = 0
366 bit[5] u_mac_phy_rst_n_dbg rst_value = 1
367 bit[4] u_non_sticky_rst_n_dbg rst_value = 0
369 RTSX_WRITE_REG(chip, CHANGE_LINK_STATE, 0x16, 0x10);
372 if (chip->aspm_l0s_l1_en) {
373 retval = rtsx_reset_aspm(chip);
374 if (retval != STATUS_SUCCESS)
375 TRACE_RET(chip, STATUS_FAIL);
377 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
378 retval = rtsx_write_phy_register(chip, 0x07, 0x0129);
379 if (retval != STATUS_SUCCESS)
380 TRACE_RET(chip, STATUS_FAIL);
382 retval = rtsx_write_config_byte(chip, LCTLR,
383 chip->aspm_l0s_l1_en);
384 if (retval != STATUS_SUCCESS)
385 TRACE_RET(chip, STATUS_FAIL);
388 retval = rtsx_write_config_byte(chip, 0x81, 1);
389 if (retval != STATUS_SUCCESS)
390 TRACE_RET(chip, STATUS_FAIL);
392 if (CHK_SDIO_EXIST(chip)) {
393 retval = rtsx_write_cfg_dw(chip,
394 CHECK_PID(chip, 0x5288) ? 2 : 1,
395 0xC0, 0xFF00, 0x0100);
397 if (retval != STATUS_SUCCESS)
398 TRACE_RET(chip, STATUS_FAIL);
401 if (CHECK_PID(chip, 0x5288) && !CHK_SDIO_EXIST(chip)) {
402 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFFFF, 0x0103);
403 if (retval != STATUS_SUCCESS)
404 TRACE_RET(chip, STATUS_FAIL);
406 retval = rtsx_write_cfg_dw(chip, 2, 0x84, 0xFF, 0x03);
407 if (retval != STATUS_SUCCESS)
408 TRACE_RET(chip, STATUS_FAIL);
411 RTSX_WRITE_REG(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
413 RTSX_WRITE_REG(chip, PERST_GLITCH_WIDTH, 0xFF, 0x80);
415 retval = rtsx_enable_pcie_intr(chip);
416 if (retval != STATUS_SUCCESS)
417 TRACE_RET(chip, STATUS_FAIL);
419 chip->need_reset = 0;
421 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
423 if (chip->hw_bypass_sd)
425 dev_dbg(rtsx_dev(chip), "In %s, chip->int_reg = 0x%x\n", __func__,
427 if (chip->int_reg & SD_EXIST) {
428 #ifdef HW_AUTO_SWITCH_SD_BUS
429 if (CHECK_PID(chip, 0x5208) && (chip->ic_version < IC_VER_C))
430 retval = rtsx_pre_handle_sdio_old(chip);
432 retval = rtsx_pre_handle_sdio_new(chip);
434 dev_dbg(rtsx_dev(chip), "chip->need_reset = 0x%x (rtsx_reset_chip)\n",
435 (unsigned int)(chip->need_reset));
436 #else /* HW_AUTO_SWITCH_SD_BUS */
437 retval = rtsx_pre_handle_sdio_old(chip);
438 #endif /* HW_AUTO_SWITCH_SD_BUS */
439 if (retval != STATUS_SUCCESS)
440 TRACE_RET(chip, STATUS_FAIL);
444 RTSX_WRITE_REG(chip, SDIO_CTRL, SDIO_BUS_CTRL | SDIO_CD_CTRL,
449 if (chip->int_reg & XD_EXIST)
450 chip->need_reset |= XD_CARD;
451 if (chip->int_reg & MS_EXIST)
452 chip->need_reset |= MS_CARD;
453 if (chip->int_reg & CARD_EXIST)
454 RTSX_WRITE_REG(chip, SSC_CTL1, SSC_RSTB, SSC_RSTB);
456 dev_dbg(rtsx_dev(chip), "In %s, chip->need_reset = 0x%x\n", __func__,
457 (unsigned int)(chip->need_reset));
459 RTSX_WRITE_REG(chip, RCCTL, 0x01, 0x00);
461 if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
462 /* Turn off main power when entering S3/S4 state */
463 RTSX_WRITE_REG(chip, MAIN_PWR_OFF_CTL, 0x03, 0x03);
466 if (chip->remote_wakeup_en && !chip->auto_delink_en) {
467 RTSX_WRITE_REG(chip, WAKE_SEL_CTL, 0x07, 0x07);
468 if (chip->aux_pwr_exist)
469 RTSX_WRITE_REG(chip, PME_FORCE_CTL, 0xFF, 0x33);
471 RTSX_WRITE_REG(chip, WAKE_SEL_CTL, 0x07, 0x04);
472 RTSX_WRITE_REG(chip, PME_FORCE_CTL, 0xFF, 0x30);
475 if (CHECK_PID(chip, 0x5208) && (chip->ic_version >= IC_VER_D))
476 RTSX_WRITE_REG(chip, PETXCFG, 0x1C, 0x14);
478 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
479 retval = rtsx_clr_phy_reg_bit(chip, 0x1C, 2);
480 if (retval != STATUS_SUCCESS)
481 TRACE_RET(chip, STATUS_FAIL);
484 if (chip->ft2_fast_mode) {
485 RTSX_WRITE_REG(chip, CARD_PWR_CTL, 0xFF,
486 MS_PARTIAL_POWER_ON | SD_PARTIAL_POWER_ON);
487 udelay(chip->pmos_pwr_on_interval);
488 RTSX_WRITE_REG(chip, CARD_PWR_CTL, 0xFF,
489 MS_POWER_ON | SD_POWER_ON);
495 rtsx_reset_detected_cards(chip, 0);
497 chip->driver_first_load = 0;
499 return STATUS_SUCCESS;
502 static inline int check_sd_speed_prior(u32 sd_speed_prior)
504 int i, fake_para = 0;
506 for (i = 0; i < 4; i++) {
507 u8 tmp = (u8)(sd_speed_prior >> (i*8));
509 if ((tmp < 0x01) || (tmp > 0x04)) {
518 static inline int check_sd_current_prior(u32 sd_current_prior)
520 int i, fake_para = 0;
522 for (i = 0; i < 4; i++) {
523 u8 tmp = (u8)(sd_current_prior >> (i*8));
534 static int rts5208_init(struct rtsx_chip *chip)
540 RTSX_WRITE_REG(chip, CLK_SEL, 0x03, 0x03);
541 RTSX_READ_REG(chip, CLK_SEL, &val);
542 chip->asic_code = val == 0 ? 1 : 0;
544 if (chip->asic_code) {
545 retval = rtsx_read_phy_register(chip, 0x1C, ®);
546 if (retval != STATUS_SUCCESS)
547 TRACE_RET(chip, STATUS_FAIL);
549 dev_dbg(rtsx_dev(chip), "Value of phy register 0x1C is 0x%x\n",
551 chip->ic_version = (reg >> 4) & 0x07;
552 chip->phy_debug_mode = reg & PHY_DEBUG_MODE ? 1 : 0;
555 RTSX_READ_REG(chip, 0xFE80, &val);
556 chip->ic_version = val;
557 chip->phy_debug_mode = 0;
560 RTSX_READ_REG(chip, PDINFO, &val);
561 dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
562 chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
564 RTSX_READ_REG(chip, 0xFE50, &val);
565 chip->hw_bypass_sd = val & 0x01 ? 1 : 0;
567 rtsx_read_config_byte(chip, 0x0E, &val);
569 SET_SDIO_EXIST(chip);
571 CLR_SDIO_EXIST(chip);
573 if (chip->use_hw_setting) {
574 RTSX_READ_REG(chip, CHANGE_LINK_STATE, &val);
575 chip->auto_delink_en = val & 0x80 ? 1 : 0;
578 return STATUS_SUCCESS;
581 static int rts5288_init(struct rtsx_chip *chip)
584 u8 val = 0, max_func;
587 RTSX_WRITE_REG(chip, CLK_SEL, 0x03, 0x03);
588 RTSX_READ_REG(chip, CLK_SEL, &val);
589 chip->asic_code = val == 0 ? 1 : 0;
591 chip->ic_version = 0;
592 chip->phy_debug_mode = 0;
594 RTSX_READ_REG(chip, PDINFO, &val);
595 dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
596 chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
598 RTSX_READ_REG(chip, CARD_SHARE_MODE, &val);
599 dev_dbg(rtsx_dev(chip), "CARD_SHARE_MODE: 0x%x\n", val);
600 chip->baro_pkg = val & 0x04 ? QFN : LQFP;
602 RTSX_READ_REG(chip, 0xFE5A, &val);
603 chip->hw_bypass_sd = val & 0x10 ? 1 : 0;
605 retval = rtsx_read_cfg_dw(chip, 0, 0x718, &lval);
606 if (retval != STATUS_SUCCESS)
607 TRACE_RET(chip, STATUS_FAIL);
609 max_func = (u8)((lval >> 29) & 0x07);
610 dev_dbg(rtsx_dev(chip), "Max function number: %d\n", max_func);
611 if (max_func == 0x02)
612 SET_SDIO_EXIST(chip);
614 CLR_SDIO_EXIST(chip);
616 if (chip->use_hw_setting) {
617 RTSX_READ_REG(chip, CHANGE_LINK_STATE, &val);
618 chip->auto_delink_en = val & 0x80 ? 1 : 0;
620 if (CHECK_BARO_PKG(chip, LQFP))
621 chip->lun_mode = SD_MS_1LUN;
623 chip->lun_mode = DEFAULT_SINGLE;
626 return STATUS_SUCCESS;
629 int rtsx_init_chip(struct rtsx_chip *chip)
631 struct sd_info *sd_card = &chip->sd_card;
632 struct xd_info *xd_card = &chip->xd_card;
633 struct ms_info *ms_card = &chip->ms_card;
637 dev_dbg(rtsx_dev(chip), "Vendor ID: 0x%04x, Product ID: 0x%04x\n",
638 chip->vendor_id, chip->product_id);
640 chip->ic_version = 0;
646 memset(xd_card, 0, sizeof(struct xd_info));
647 memset(sd_card, 0, sizeof(struct sd_info));
648 memset(ms_card, 0, sizeof(struct ms_info));
650 chip->xd_reset_counter = 0;
651 chip->sd_reset_counter = 0;
652 chip->ms_reset_counter = 0;
654 chip->xd_show_cnt = MAX_SHOW_CNT;
655 chip->sd_show_cnt = MAX_SHOW_CNT;
656 chip->ms_show_cnt = MAX_SHOW_CNT;
659 chip->auto_delink_cnt = 0;
660 chip->auto_delink_allowed = 1;
661 rtsx_set_stat(chip, RTSX_STAT_INIT);
663 chip->aspm_enabled = 0;
664 chip->chip_insert_with_sdio = 0;
667 chip->sdio_counter = 0;
669 chip->phy_debug_mode = 0;
670 chip->sdio_func_exist = 0;
671 memset(chip->sdio_raw_data, 0, 12);
673 for (i = 0; i < MAX_ALLOWED_LUN_CNT; i++) {
674 set_sense_type(chip, i, SENSE_TYPE_NO_SENSE);
675 chip->rw_fail_cnt[i] = 0;
678 if (!check_sd_speed_prior(chip->sd_speed_prior))
679 chip->sd_speed_prior = 0x01040203;
681 dev_dbg(rtsx_dev(chip), "sd_speed_prior = 0x%08x\n",
682 chip->sd_speed_prior);
684 if (!check_sd_current_prior(chip->sd_current_prior))
685 chip->sd_current_prior = 0x00010203;
687 dev_dbg(rtsx_dev(chip), "sd_current_prior = 0x%08x\n",
688 chip->sd_current_prior);
690 if ((chip->sd_ddr_tx_phase > 31) || (chip->sd_ddr_tx_phase < 0))
691 chip->sd_ddr_tx_phase = 0;
693 if ((chip->mmc_ddr_tx_phase > 31) || (chip->mmc_ddr_tx_phase < 0))
694 chip->mmc_ddr_tx_phase = 0;
696 RTSX_WRITE_REG(chip, FPDCTL, SSC_POWER_DOWN, 0);
698 RTSX_WRITE_REG(chip, CLK_DIV, 0x07, 0x07);
699 dev_dbg(rtsx_dev(chip), "chip->use_hw_setting = %d\n",
700 chip->use_hw_setting);
702 if (CHECK_PID(chip, 0x5208)) {
703 retval = rts5208_init(chip);
704 if (retval != STATUS_SUCCESS)
705 TRACE_RET(chip, STATUS_FAIL);
707 } else if (CHECK_PID(chip, 0x5288)) {
708 retval = rts5288_init(chip);
709 if (retval != STATUS_SUCCESS)
710 TRACE_RET(chip, STATUS_FAIL);
713 if (chip->ss_en == 2)
716 dev_dbg(rtsx_dev(chip), "chip->asic_code = %d\n", chip->asic_code);
717 dev_dbg(rtsx_dev(chip), "chip->ic_version = 0x%x\n", chip->ic_version);
718 dev_dbg(rtsx_dev(chip), "chip->phy_debug_mode = %d\n",
719 chip->phy_debug_mode);
720 dev_dbg(rtsx_dev(chip), "chip->aux_pwr_exist = %d\n",
721 chip->aux_pwr_exist);
722 dev_dbg(rtsx_dev(chip), "chip->sdio_func_exist = %d\n",
723 chip->sdio_func_exist);
724 dev_dbg(rtsx_dev(chip), "chip->hw_bypass_sd = %d\n",
726 dev_dbg(rtsx_dev(chip), "chip->aspm_l0s_l1_en = %d\n",
727 chip->aspm_l0s_l1_en);
728 dev_dbg(rtsx_dev(chip), "chip->lun_mode = %d\n", chip->lun_mode);
729 dev_dbg(rtsx_dev(chip), "chip->auto_delink_en = %d\n",
730 chip->auto_delink_en);
731 dev_dbg(rtsx_dev(chip), "chip->ss_en = %d\n", chip->ss_en);
732 dev_dbg(rtsx_dev(chip), "chip->baro_pkg = %d\n", chip->baro_pkg);
734 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
735 chip->card2lun[SD_CARD] = 0;
736 chip->card2lun[MS_CARD] = 1;
737 chip->card2lun[XD_CARD] = 0xFF;
738 chip->lun2card[0] = SD_CARD;
739 chip->lun2card[1] = MS_CARD;
741 SET_SDIO_IGNORED(chip);
742 } else if (CHECK_LUN_MODE(chip, SD_MS_1LUN)) {
743 chip->card2lun[SD_CARD] = 0;
744 chip->card2lun[MS_CARD] = 0;
745 chip->card2lun[XD_CARD] = 0xFF;
746 chip->lun2card[0] = SD_CARD | MS_CARD;
749 chip->card2lun[XD_CARD] = 0;
750 chip->card2lun[SD_CARD] = 0;
751 chip->card2lun[MS_CARD] = 0;
752 chip->lun2card[0] = XD_CARD | SD_CARD | MS_CARD;
756 retval = rtsx_reset_chip(chip);
757 if (retval != STATUS_SUCCESS)
758 TRACE_RET(chip, STATUS_FAIL);
760 return STATUS_SUCCESS;
763 void rtsx_release_chip(struct rtsx_chip *chip)
765 xd_free_l2p_tbl(chip);
766 ms_free_l2p_tbl(chip);
767 chip->card_exist = 0;
768 chip->card_ready = 0;
771 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
772 static inline void rtsx_blink_led(struct rtsx_chip *chip)
774 if (chip->card_exist && chip->blink_led) {
775 if (chip->led_toggle_counter < LED_TOGGLE_INTERVAL) {
776 chip->led_toggle_counter++;
778 chip->led_toggle_counter = 0;
779 toggle_gpio(chip, LED_GPIO);
785 static void rtsx_monitor_aspm_config(struct rtsx_chip *chip)
787 int maybe_support_aspm, reg_changed;
789 u8 reg0 = 0, reg1 = 0;
791 maybe_support_aspm = 0;
793 rtsx_read_config_byte(chip, LCTLR, ®0);
794 if (chip->aspm_level[0] != reg0) {
796 chip->aspm_level[0] = reg0;
798 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
799 rtsx_read_cfg_dw(chip, 1, 0xC0, &tmp);
801 if (chip->aspm_level[1] != reg1) {
803 chip->aspm_level[1] = reg1;
806 if ((reg0 & 0x03) && (reg1 & 0x03))
807 maybe_support_aspm = 1;
811 maybe_support_aspm = 1;
815 if (maybe_support_aspm)
816 chip->aspm_l0s_l1_en = 0x03;
818 dev_dbg(rtsx_dev(chip), "aspm_level[0] = 0x%02x, aspm_level[1] = 0x%02x\n",
819 chip->aspm_level[0], chip->aspm_level[1]);
821 if (chip->aspm_l0s_l1_en) {
822 chip->aspm_enabled = 1;
824 chip->aspm_enabled = 0;
827 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF,
828 0x30 | chip->aspm_level[0] |
829 (chip->aspm_level[1] << 2));
833 void rtsx_polling_func(struct rtsx_chip *chip)
835 #ifdef SUPPORT_SD_LOCK
836 struct sd_info *sd_card = &chip->sd_card;
840 if (rtsx_chk_stat(chip, RTSX_STAT_SUSPEND))
843 if (rtsx_chk_stat(chip, RTSX_STAT_DELINK))
846 if (chip->polling_config) {
849 rtsx_read_config_byte(chip, 0, &val);
852 if (rtsx_chk_stat(chip, RTSX_STAT_SS))
857 rtsx_read_register(chip, OCPSTAT, &chip->ocp_stat);
859 if (chip->card_exist & SD_CARD)
860 sd_power_off_card3v3(chip);
861 else if (chip->card_exist & MS_CARD)
862 ms_power_off_card3v3(chip);
863 else if (chip->card_exist & XD_CARD)
864 xd_power_off_card3v3(chip);
870 #ifdef SUPPORT_SD_LOCK
871 if (sd_card->sd_erase_status) {
872 if (chip->card_exist & SD_CARD) {
875 rtsx_read_register(chip, 0xFD30, &val);
877 sd_card->sd_erase_status = SD_NOT_ERASE;
878 sd_card->sd_lock_notify = 1;
879 chip->need_reinit |= SD_CARD;
882 sd_card->sd_erase_status = SD_NOT_ERASE;
887 rtsx_init_cards(chip);
892 if (CHECK_PID(chip, 0x5288)) {
895 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
898 rtsx_read_cfg_dw(chip, 1, 0x04, &val);
907 if (ss_allowed && !chip->sd_io) {
908 if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) {
909 chip->ss_counter = 0;
911 if (chip->ss_counter <
912 (chip->ss_idle_period / POLLING_INTERVAL)) {
915 rtsx_exclusive_enter_ss(chip);
921 if (CHECK_PID(chip, 0x5208)) {
922 rtsx_monitor_aspm_config(chip);
924 #ifdef SUPPORT_SDIO_ASPM
925 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip) &&
926 chip->aspm_l0s_l1_en && chip->dynamic_aspm) {
928 dynamic_configure_sdio_aspm(chip);
930 if (!chip->sdio_aspm) {
931 dev_dbg(rtsx_dev(chip), "SDIO enter ASPM!\n");
932 rtsx_write_register(chip,
933 ASPM_FORCE_CTL, 0xFC,
935 (chip->aspm_level[1] << 2));
943 if (chip->idle_counter < IDLE_MAX_COUNT) {
944 chip->idle_counter++;
946 if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) {
947 dev_dbg(rtsx_dev(chip), "Idle state!\n");
948 rtsx_set_stat(chip, RTSX_STAT_IDLE);
950 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
951 chip->led_toggle_counter = 0;
953 rtsx_force_power_on(chip, SSC_PDCTL);
955 turn_off_led(chip, LED_GPIO);
957 if (chip->auto_power_down && !chip->card_ready &&
959 rtsx_force_power_down(chip,
960 SSC_PDCTL | OC_PDCTL);
964 switch (rtsx_get_stat(chip)) {
966 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
967 rtsx_blink_led(chip);
969 do_remaining_work(chip);
973 if (chip->sd_io && !chip->sd_int)
974 try_to_switch_sdio_ctrl(chip);
976 rtsx_enable_aspm(chip);
984 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
986 (SD_OC_NOW | SD_OC_EVER | MS_OC_NOW | MS_OC_EVER))
987 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
990 if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
991 if (chip->card_exist & SD_CARD) {
992 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN,
994 card_power_off(chip, SD_CARD);
995 chip->card_fail |= SD_CARD;
998 if (chip->ocp_stat & (MS_OC_NOW | MS_OC_EVER)) {
999 if (chip->card_exist & MS_CARD) {
1000 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN,
1002 card_power_off(chip, MS_CARD);
1003 chip->card_fail |= MS_CARD;
1007 if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
1008 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
1010 if (chip->card_exist & SD_CARD) {
1011 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN,
1013 chip->card_fail |= SD_CARD;
1014 } else if (chip->card_exist & MS_CARD) {
1015 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN,
1017 chip->card_fail |= MS_CARD;
1018 } else if (chip->card_exist & XD_CARD) {
1019 rtsx_write_register(chip, CARD_OE, XD_OUTPUT_EN,
1021 chip->card_fail |= XD_CARD;
1023 card_power_off(chip, SD_CARD);
1029 if (chip->auto_delink_en && chip->auto_delink_allowed &&
1030 !chip->card_ready && !chip->card_ejected && !chip->sd_io) {
1031 int enter_L1 = chip->auto_delink_in_L1 && (
1032 chip->aspm_l0s_l1_en || chip->ss_en);
1033 int delink_stage1_cnt = chip->delink_stage1_step;
1034 int delink_stage2_cnt = delink_stage1_cnt +
1035 chip->delink_stage2_step;
1036 int delink_stage3_cnt = delink_stage2_cnt +
1037 chip->delink_stage3_step;
1039 if (chip->auto_delink_cnt <= delink_stage3_cnt) {
1040 if (chip->auto_delink_cnt == delink_stage1_cnt) {
1041 rtsx_set_stat(chip, RTSX_STAT_DELINK);
1043 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1044 rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1046 if (chip->card_exist) {
1047 dev_dbg(rtsx_dev(chip), "False card inserted, do force delink\n");
1050 rtsx_write_register(chip,
1054 rtsx_write_register(chip,
1059 rtsx_enter_L1(chip);
1061 chip->auto_delink_cnt =
1062 delink_stage3_cnt + 1;
1064 dev_dbg(rtsx_dev(chip), "No card inserted, do delink\n");
1067 rtsx_write_register(chip,
1071 rtsx_write_register(chip,
1076 rtsx_enter_L1(chip);
1080 if (chip->auto_delink_cnt == delink_stage2_cnt) {
1081 dev_dbg(rtsx_dev(chip), "Try to do force delink\n");
1086 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1087 rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1089 rtsx_write_register(chip, CHANGE_LINK_STATE,
1093 chip->auto_delink_cnt++;
1096 chip->auto_delink_cnt = 0;
1100 void rtsx_undo_delink(struct rtsx_chip *chip)
1102 chip->auto_delink_allowed = 0;
1103 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0x00);
1107 * rtsx_stop_cmd - stop command transfer and DMA transfer
1108 * @chip: Realtek's card reader chip
1109 * @card: flash card type
1111 * Stop command transfer and DMA transfer.
1112 * This function is called in error handler.
1114 void rtsx_stop_cmd(struct rtsx_chip *chip, int card)
1118 for (i = 0; i <= 8; i++) {
1119 int addr = RTSX_HCBAR + i * 4;
1122 reg = rtsx_readl(chip, addr);
1123 dev_dbg(rtsx_dev(chip), "BAR (0x%02x): 0x%08x\n", addr, reg);
1125 rtsx_writel(chip, RTSX_HCBCTLR, STOP_CMD);
1126 rtsx_writel(chip, RTSX_HDBCTLR, STOP_DMA);
1128 for (i = 0; i < 16; i++) {
1129 u16 addr = 0xFE20 + (u16)i;
1132 rtsx_read_register(chip, addr, &val);
1133 dev_dbg(rtsx_dev(chip), "0x%04X: 0x%02x\n", addr, val);
1136 rtsx_write_register(chip, DMACTL, 0x80, 0x80);
1137 rtsx_write_register(chip, RBCTL, 0x80, 0x80);
1140 #define MAX_RW_REG_CNT 1024
1142 int rtsx_write_register(struct rtsx_chip *chip, u16 addr, u8 mask, u8 data)
1147 val |= (u32)(addr & 0x3FFF) << 16;
1148 val |= (u32)mask << 8;
1151 rtsx_writel(chip, RTSX_HAIMR, val);
1153 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1154 val = rtsx_readl(chip, RTSX_HAIMR);
1155 if ((val & (1 << 31)) == 0) {
1156 if (data != (u8)val)
1157 TRACE_RET(chip, STATUS_FAIL);
1159 return STATUS_SUCCESS;
1163 TRACE_RET(chip, STATUS_TIMEDOUT);
1166 int rtsx_read_register(struct rtsx_chip *chip, u16 addr, u8 *data)
1174 val |= (u32)(addr & 0x3FFF) << 16;
1176 rtsx_writel(chip, RTSX_HAIMR, val);
1178 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1179 val = rtsx_readl(chip, RTSX_HAIMR);
1180 if ((val & (1 << 31)) == 0)
1184 if (i >= MAX_RW_REG_CNT)
1185 TRACE_RET(chip, STATUS_TIMEDOUT);
1188 *data = (u8)(val & 0xFF);
1190 return STATUS_SUCCESS;
1193 int rtsx_write_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 mask,
1199 for (i = 0; i < 4; i++) {
1201 RTSX_WRITE_REG(chip, CFGDATA0 + i,
1202 0xFF, (u8)(val & mask & 0xFF));
1210 RTSX_WRITE_REG(chip, CFGADDR0, 0xFF, (u8)addr);
1211 RTSX_WRITE_REG(chip, CFGADDR1, 0xFF, (u8)(addr >> 8));
1213 RTSX_WRITE_REG(chip, CFGRWCTL, 0xFF,
1214 0x80 | mode | ((func_no & 0x03) << 4));
1216 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1217 RTSX_READ_REG(chip, CFGRWCTL, &tmp);
1218 if ((tmp & 0x80) == 0)
1223 return STATUS_SUCCESS;
1226 int rtsx_read_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 *val)
1232 RTSX_WRITE_REG(chip, CFGADDR0, 0xFF, (u8)addr);
1233 RTSX_WRITE_REG(chip, CFGADDR1, 0xFF, (u8)(addr >> 8));
1234 RTSX_WRITE_REG(chip, CFGRWCTL, 0xFF, 0x80 | ((func_no & 0x03) << 4));
1236 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1237 RTSX_READ_REG(chip, CFGRWCTL, &tmp);
1238 if ((tmp & 0x80) == 0)
1242 for (i = 0; i < 4; i++) {
1243 RTSX_READ_REG(chip, CFGDATA0 + i, &tmp);
1244 data |= (u32)tmp << (i * 8);
1250 return STATUS_SUCCESS;
1253 int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1257 u16 offset = addr % 4;
1258 u16 aligned_addr = addr - offset;
1263 TRACE_RET(chip, STATUS_NOMEM);
1265 if ((len + offset) % 4)
1266 dw_len = (len + offset) / 4 + 1;
1268 dw_len = (len + offset) / 4;
1270 dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1272 data = vzalloc(dw_len * 4);
1274 TRACE_RET(chip, STATUS_NOMEM);
1276 mask = vzalloc(dw_len * 4);
1279 TRACE_RET(chip, STATUS_NOMEM);
1283 for (i = 0; i < len; i++) {
1284 mask[j] |= 0xFF << (offset * 8);
1285 data[j] |= buf[i] << (offset * 8);
1286 if (++offset == 4) {
1292 print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, mask,
1294 print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, data,
1297 for (i = 0; i < dw_len; i++) {
1298 retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i * 4,
1300 if (retval != STATUS_SUCCESS) {
1303 TRACE_RET(chip, STATUS_FAIL);
1310 return STATUS_SUCCESS;
1313 int rtsx_read_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1317 u16 offset = addr % 4;
1318 u16 aligned_addr = addr - offset;
1322 if ((len + offset) % 4)
1323 dw_len = (len + offset) / 4 + 1;
1325 dw_len = (len + offset) / 4;
1327 dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1329 data = vmalloc(dw_len * 4);
1331 TRACE_RET(chip, STATUS_NOMEM);
1333 for (i = 0; i < dw_len; i++) {
1334 retval = rtsx_read_cfg_dw(chip, func, aligned_addr + i * 4,
1336 if (retval != STATUS_SUCCESS) {
1338 TRACE_RET(chip, STATUS_FAIL);
1345 for (i = 0; i < len; i++) {
1346 buf[i] = (u8)(data[j] >> (offset * 8));
1347 if (++offset == 4) {
1356 return STATUS_SUCCESS;
1359 int rtsx_write_phy_register(struct rtsx_chip *chip, u8 addr, u16 val)
1361 int i, finished = 0;
1364 RTSX_WRITE_REG(chip, PHYDATA0, 0xFF, (u8)val);
1365 RTSX_WRITE_REG(chip, PHYDATA1, 0xFF, (u8)(val >> 8));
1366 RTSX_WRITE_REG(chip, PHYADDR, 0xFF, addr);
1367 RTSX_WRITE_REG(chip, PHYRWCTL, 0xFF, 0x81);
1369 for (i = 0; i < 100000; i++) {
1370 RTSX_READ_REG(chip, PHYRWCTL, &tmp);
1371 if (!(tmp & 0x80)) {
1378 TRACE_RET(chip, STATUS_FAIL);
1380 return STATUS_SUCCESS;
1383 int rtsx_read_phy_register(struct rtsx_chip *chip, u8 addr, u16 *val)
1385 int i, finished = 0;
1389 RTSX_WRITE_REG(chip, PHYADDR, 0xFF, addr);
1390 RTSX_WRITE_REG(chip, PHYRWCTL, 0xFF, 0x80);
1392 for (i = 0; i < 100000; i++) {
1393 RTSX_READ_REG(chip, PHYRWCTL, &tmp);
1394 if (!(tmp & 0x80)) {
1401 TRACE_RET(chip, STATUS_FAIL);
1403 RTSX_READ_REG(chip, PHYDATA0, &tmp);
1405 RTSX_READ_REG(chip, PHYDATA1, &tmp);
1406 data |= (u16)tmp << 8;
1411 return STATUS_SUCCESS;
1414 int rtsx_read_efuse(struct rtsx_chip *chip, u8 addr, u8 *val)
1419 RTSX_WRITE_REG(chip, EFUSE_CTRL, 0xFF, 0x80|addr);
1421 for (i = 0; i < 100; i++) {
1422 RTSX_READ_REG(chip, EFUSE_CTRL, &data);
1429 TRACE_RET(chip, STATUS_TIMEDOUT);
1431 RTSX_READ_REG(chip, EFUSE_DATA, &data);
1435 return STATUS_SUCCESS;
1438 int rtsx_write_efuse(struct rtsx_chip *chip, u8 addr, u8 val)
1441 u8 data = 0, tmp = 0xFF;
1443 for (i = 0; i < 8; i++) {
1444 if (val & (u8)(1 << i))
1447 tmp &= (~(u8)(1 << i));
1448 dev_dbg(rtsx_dev(chip), "Write 0x%x to 0x%x\n", tmp, addr);
1450 RTSX_WRITE_REG(chip, EFUSE_DATA, 0xFF, tmp);
1451 RTSX_WRITE_REG(chip, EFUSE_CTRL, 0xFF, 0xA0|addr);
1453 for (j = 0; j < 100; j++) {
1454 RTSX_READ_REG(chip, EFUSE_CTRL, &data);
1461 TRACE_RET(chip, STATUS_TIMEDOUT);
1466 return STATUS_SUCCESS;
1469 int rtsx_clr_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1474 retval = rtsx_read_phy_register(chip, reg, &value);
1475 if (retval != STATUS_SUCCESS)
1476 TRACE_RET(chip, STATUS_FAIL);
1478 if (value & (1 << bit)) {
1479 value &= ~(1 << bit);
1480 retval = rtsx_write_phy_register(chip, reg, value);
1481 if (retval != STATUS_SUCCESS)
1482 TRACE_RET(chip, STATUS_FAIL);
1485 return STATUS_SUCCESS;
1488 int rtsx_set_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1493 retval = rtsx_read_phy_register(chip, reg, &value);
1494 if (retval != STATUS_SUCCESS)
1495 TRACE_RET(chip, STATUS_FAIL);
1497 if ((value & (1 << bit)) == 0) {
1498 value |= (1 << bit);
1499 retval = rtsx_write_phy_register(chip, reg, value);
1500 if (retval != STATUS_SUCCESS)
1501 TRACE_RET(chip, STATUS_FAIL);
1504 return STATUS_SUCCESS;
1507 int rtsx_check_link_ready(struct rtsx_chip *chip)
1511 RTSX_READ_REG(chip, IRQSTAT0, &val);
1513 dev_dbg(rtsx_dev(chip), "IRQSTAT0: 0x%x\n", val);
1514 if (val & LINK_RDY_INT) {
1515 dev_dbg(rtsx_dev(chip), "Delinked!\n");
1516 rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
1520 return STATUS_SUCCESS;
1523 static void rtsx_handle_pm_dstate(struct rtsx_chip *chip, u8 dstate)
1527 dev_dbg(rtsx_dev(chip), "%04x set pm_dstate to %d\n",
1528 chip->product_id, dstate);
1530 if (CHK_SDIO_EXIST(chip)) {
1533 if (CHECK_PID(chip, 0x5288))
1538 rtsx_read_cfg_dw(chip, func_no, 0x84, &ultmp);
1539 dev_dbg(rtsx_dev(chip), "pm_dstate of function %d: 0x%x\n",
1540 (int)func_no, ultmp);
1541 rtsx_write_cfg_dw(chip, func_no, 0x84, 0xFF, dstate);
1544 rtsx_write_config_byte(chip, 0x44, dstate);
1545 rtsx_write_config_byte(chip, 0x45, 0);
1548 void rtsx_enter_L1(struct rtsx_chip *chip)
1550 rtsx_handle_pm_dstate(chip, 2);
1553 void rtsx_exit_L1(struct rtsx_chip *chip)
1555 rtsx_write_config_byte(chip, 0x44, 0);
1556 rtsx_write_config_byte(chip, 0x45, 0);
1559 void rtsx_enter_ss(struct rtsx_chip *chip)
1561 dev_dbg(rtsx_dev(chip), "Enter Selective Suspend State!\n");
1563 rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
1565 if (chip->power_down_in_ss) {
1566 rtsx_power_off_card(chip);
1567 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1570 if (CHK_SDIO_EXIST(chip))
1571 rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
1572 0xC0, 0xFF00, 0x0100);
1574 if (chip->auto_delink_en) {
1575 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x01, 0x01);
1577 if (!chip->phy_debug_mode) {
1580 tmp = rtsx_readl(chip, RTSX_BIER);
1582 rtsx_writel(chip, RTSX_BIER, tmp);
1585 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 0);
1588 rtsx_enter_L1(chip);
1590 RTSX_CLR_DELINK(chip);
1591 rtsx_set_stat(chip, RTSX_STAT_SS);
1594 void rtsx_exit_ss(struct rtsx_chip *chip)
1596 dev_dbg(rtsx_dev(chip), "Exit Selective Suspend State!\n");
1600 if (chip->power_down_in_ss) {
1601 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
1605 if (RTSX_TST_DELINK(chip)) {
1606 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1607 rtsx_reinit_cards(chip, 1);
1608 RTSX_CLR_DELINK(chip);
1609 } else if (chip->power_down_in_ss) {
1610 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1611 rtsx_reinit_cards(chip, 0);
1615 int rtsx_pre_handle_interrupt(struct rtsx_chip *chip)
1617 u32 status, int_enable;
1626 chip->ss_counter = 0;
1627 if (rtsx_get_stat(chip) == RTSX_STAT_SS) {
1630 rtsx_set_stat(chip, RTSX_STAT_RUN);
1634 int_enable = rtsx_readl(chip, RTSX_BIER);
1635 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
1637 if (((chip->int_reg & int_enable) == 0) ||
1638 (chip->int_reg == 0xFFFFFFFF))
1641 status = chip->int_reg &= (int_enable | 0x7FFFFF);
1643 if (status & CARD_INT) {
1644 chip->auto_delink_cnt = 0;
1646 if (status & SD_INT) {
1647 if (status & SD_EXIST) {
1648 set_bit(SD_NR, &chip->need_reset);
1650 set_bit(SD_NR, &chip->need_release);
1651 chip->sd_reset_counter = 0;
1652 chip->sd_show_cnt = 0;
1653 clear_bit(SD_NR, &chip->need_reset);
1656 /* If multi-luns, it's possible that
1657 when plugging/unplugging one card
1658 there is another card which still
1659 exists in the slot. In this case,
1660 all existed cards should be reset.
1662 if (exit_ss && (status & SD_EXIST))
1663 set_bit(SD_NR, &chip->need_reinit);
1665 if (!CHECK_PID(chip, 0x5288) || CHECK_BARO_PKG(chip, QFN)) {
1666 if (status & XD_INT) {
1667 if (status & XD_EXIST) {
1668 set_bit(XD_NR, &chip->need_reset);
1670 set_bit(XD_NR, &chip->need_release);
1671 chip->xd_reset_counter = 0;
1672 chip->xd_show_cnt = 0;
1673 clear_bit(XD_NR, &chip->need_reset);
1676 if (exit_ss && (status & XD_EXIST))
1677 set_bit(XD_NR, &chip->need_reinit);
1680 if (status & MS_INT) {
1681 if (status & MS_EXIST) {
1682 set_bit(MS_NR, &chip->need_reset);
1684 set_bit(MS_NR, &chip->need_release);
1685 chip->ms_reset_counter = 0;
1686 chip->ms_show_cnt = 0;
1687 clear_bit(MS_NR, &chip->need_reset);
1690 if (exit_ss && (status & MS_EXIST))
1691 set_bit(MS_NR, &chip->need_reinit);
1696 chip->ocp_int = ocp_int & status;
1699 if (chip->sd_io && (chip->int_reg & DATA_DONE_INT))
1700 chip->int_reg &= ~(u32)DATA_DONE_INT;
1702 return STATUS_SUCCESS;
1705 void rtsx_do_before_power_down(struct rtsx_chip *chip, int pm_stat)
1709 dev_dbg(rtsx_dev(chip), "%s, pm_stat = %d\n", __func__, pm_stat);
1711 rtsx_set_stat(chip, RTSX_STAT_SUSPEND);
1713 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1714 if (retval != STATUS_SUCCESS)
1717 rtsx_release_cards(chip);
1718 rtsx_disable_bus_int(chip);
1719 turn_off_led(chip, LED_GPIO);
1721 #ifdef HW_AUTO_SWITCH_SD_BUS
1723 chip->sdio_in_charge = 1;
1724 if (CHECK_PID(chip, 0x5208)) {
1725 rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1726 /* Enable sdio_bus_auto_switch */
1727 rtsx_write_register(chip, 0xFE70, 0x80, 0x80);
1728 } else if (CHECK_PID(chip, 0x5288)) {
1729 rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1730 /* Enable sdio_bus_auto_switch */
1731 rtsx_write_register(chip, 0xFE5A, 0x08, 0x08);
1736 if (CHECK_PID(chip, 0x5208) && (chip->ic_version >= IC_VER_D)) {
1737 /* u_force_clkreq_0 */
1738 rtsx_write_register(chip, PETXCFG, 0x08, 0x08);
1741 if (pm_stat == PM_S1) {
1742 dev_dbg(rtsx_dev(chip), "Host enter S1\n");
1743 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1745 } else if (pm_stat == PM_S3) {
1746 if (chip->s3_pwr_off_delay > 0)
1747 wait_timeout(chip->s3_pwr_off_delay);
1749 dev_dbg(rtsx_dev(chip), "Host enter S3\n");
1750 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1754 if (chip->do_delink_before_power_down && chip->auto_delink_en)
1755 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 2);
1757 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1761 chip->card_exist = 0;
1764 void rtsx_enable_aspm(struct rtsx_chip *chip)
1766 if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && !chip->aspm_enabled) {
1767 dev_dbg(rtsx_dev(chip), "Try to enable ASPM\n");
1768 chip->aspm_enabled = 1;
1770 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1771 rtsx_write_phy_register(chip, 0x07, 0);
1772 if (CHECK_PID(chip, 0x5208)) {
1773 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xF3,
1774 0x30 | chip->aspm_level[0]);
1776 rtsx_write_config_byte(chip, LCTLR,
1777 chip->aspm_l0s_l1_en);
1780 if (CHK_SDIO_EXIST(chip)) {
1781 u16 val = chip->aspm_l0s_l1_en | 0x0100;
1783 rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
1789 void rtsx_disable_aspm(struct rtsx_chip *chip)
1791 if (CHECK_PID(chip, 0x5208))
1792 rtsx_monitor_aspm_config(chip);
1794 if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && chip->aspm_enabled) {
1795 dev_dbg(rtsx_dev(chip), "Try to disable ASPM\n");
1796 chip->aspm_enabled = 0;
1798 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1799 rtsx_write_phy_register(chip, 0x07, 0x0129);
1800 if (CHECK_PID(chip, 0x5208))
1801 rtsx_write_register(chip, ASPM_FORCE_CTL,
1804 rtsx_write_config_byte(chip, LCTLR, 0x00);
1810 int rtsx_read_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
1818 TRACE_RET(chip, STATUS_ERROR);
1821 reg_addr = PPBUF_BASE2;
1822 for (i = 0; i < buf_len/256; i++) {
1823 rtsx_init_cmd(chip);
1825 for (j = 0; j < 256; j++)
1826 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
1828 retval = rtsx_send_cmd(chip, 0, 250);
1830 TRACE_RET(chip, STATUS_FAIL);
1832 memcpy(ptr, rtsx_get_cmd_data(chip), 256);
1837 rtsx_init_cmd(chip);
1839 for (j = 0; j < buf_len%256; j++)
1840 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
1842 retval = rtsx_send_cmd(chip, 0, 250);
1844 TRACE_RET(chip, STATUS_FAIL);
1847 memcpy(ptr, rtsx_get_cmd_data(chip), buf_len%256);
1849 return STATUS_SUCCESS;
1852 int rtsx_write_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
1860 TRACE_RET(chip, STATUS_ERROR);
1863 reg_addr = PPBUF_BASE2;
1864 for (i = 0; i < buf_len/256; i++) {
1865 rtsx_init_cmd(chip);
1867 for (j = 0; j < 256; j++) {
1868 rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
1873 retval = rtsx_send_cmd(chip, 0, 250);
1875 TRACE_RET(chip, STATUS_FAIL);
1879 rtsx_init_cmd(chip);
1881 for (j = 0; j < buf_len%256; j++) {
1882 rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
1887 retval = rtsx_send_cmd(chip, 0, 250);
1889 TRACE_RET(chip, STATUS_FAIL);
1892 return STATUS_SUCCESS;
1895 int rtsx_check_chip_exist(struct rtsx_chip *chip)
1897 if (rtsx_readl(chip, 0) == 0xFFFFFFFF)
1898 TRACE_RET(chip, STATUS_FAIL);
1900 return STATUS_SUCCESS;
1903 int rtsx_force_power_on(struct rtsx_chip *chip, u8 ctl)
1908 if (ctl & SSC_PDCTL)
1909 mask |= SSC_POWER_DOWN;
1912 if (ctl & OC_PDCTL) {
1913 mask |= SD_OC_POWER_DOWN;
1914 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
1915 mask |= MS_OC_POWER_DOWN;
1920 retval = rtsx_write_register(chip, FPDCTL, mask, 0);
1921 if (retval != STATUS_SUCCESS)
1922 TRACE_RET(chip, STATUS_FAIL);
1924 if (CHECK_PID(chip, 0x5288))
1928 return STATUS_SUCCESS;
1931 int rtsx_force_power_down(struct rtsx_chip *chip, u8 ctl)
1934 u8 mask = 0, val = 0;
1936 if (ctl & SSC_PDCTL)
1937 mask |= SSC_POWER_DOWN;
1940 if (ctl & OC_PDCTL) {
1941 mask |= SD_OC_POWER_DOWN;
1942 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
1943 mask |= MS_OC_POWER_DOWN;
1949 retval = rtsx_write_register(chip, FPDCTL, mask, val);
1950 if (retval != STATUS_SUCCESS)
1951 TRACE_RET(chip, STATUS_FAIL);
1954 return STATUS_SUCCESS;