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>
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 RTSX_DEBUGP("lun2card[%d] = 0x%02x\n", i, chip->lun2card[i]);
93 if (chip->lun2card[i] & XD_CARD)
95 if (chip->lun2card[i] & SD_CARD)
97 if (chip->lun2card[i] & MS_CARD)
100 if (chip->hw_bypass_sd)
101 reg &= ~((u32)SD_INT_EN);
104 if (chip->ic_version >= IC_VER_C)
105 reg |= DELINK_INT_EN;
109 if (!chip->adma_mode)
110 reg |= DATA_DONE_INT_EN;
112 /* Enable Bus Interrupt */
113 rtsx_writel(chip, RTSX_BIER, reg);
115 RTSX_DEBUGP("RTSX_BIER: 0x%08x\n", reg);
118 void rtsx_disable_bus_int(struct rtsx_chip *chip)
120 rtsx_writel(chip, RTSX_BIER, 0);
123 static int rtsx_pre_handle_sdio_old(struct rtsx_chip *chip)
125 if (chip->ignore_sd && CHK_SDIO_EXIST(chip)) {
126 if (chip->asic_code) {
127 RTSX_WRITE_REG(chip, CARD_PULL_CTL5, 0xFF,
128 MS_INS_PU | SD_WP_PU | SD_CD_PU | SD_CMD_PU);
130 RTSX_WRITE_REG(chip, FPGA_PULL_CTL, 0xFF,
131 FPGA_SD_PULL_CTL_EN);
133 RTSX_WRITE_REG(chip, CARD_SHARE_MODE, 0xFF, CARD_SHARE_48_SD);
135 /* Enable SDIO internal clock */
136 RTSX_WRITE_REG(chip, 0xFF2C, 0x01, 0x01);
138 RTSX_WRITE_REG(chip, SDIO_CTRL, 0xFF,
139 SDIO_BUS_CTRL | SDIO_CD_CTRL);
144 chip->need_reset |= SD_CARD;
147 return STATUS_SUCCESS;
150 #ifdef HW_AUTO_SWITCH_SD_BUS
151 static int rtsx_pre_handle_sdio_new(struct rtsx_chip *chip)
154 int sw_bypass_sd = 0;
157 if (chip->driver_first_load) {
158 if (CHECK_PID(chip, 0x5288)) {
159 RTSX_READ_REG(chip, 0xFE5A, &tmp);
162 } else if (CHECK_PID(chip, 0x5208)) {
163 RTSX_READ_REG(chip, 0xFE70, &tmp);
168 if (chip->sdio_in_charge)
171 RTSX_DEBUGP("chip->sdio_in_charge = %d\n", chip->sdio_in_charge);
172 RTSX_DEBUGP("chip->driver_first_load = %d\n", chip->driver_first_load);
173 RTSX_DEBUGP("sw_bypass_sd = %d\n", sw_bypass_sd);
176 u8 cd_toggle_mask = 0;
178 RTSX_READ_REG(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 RTSX_WRITE_REG(chip, 0xFE5A, 0x08, 0x00);
185 else if (CHECK_PID(chip, 0x5208))
186 RTSX_WRITE_REG(chip, 0xFE70, 0x80, 0x00);
188 RTSX_WRITE_REG(chip, TLPTISTAT, 0xFF, tmp);
190 chip->need_reset |= SD_CARD;
192 RTSX_DEBUGP("Chip inserted with SDIO!\n");
194 if (chip->asic_code) {
195 retval = sd_pull_ctl_enable(chip);
196 if (retval != STATUS_SUCCESS)
197 TRACE_RET(chip, STATUS_FAIL);
199 RTSX_WRITE_REG(chip, FPGA_PULL_CTL,
200 FPGA_SD_PULL_CTL_BIT | 0x20, 0);
202 retval = card_share_mode(chip, SD_CARD);
203 if (retval != STATUS_SUCCESS)
204 TRACE_RET(chip, STATUS_FAIL);
206 /* Enable sdio_bus_auto_switch */
207 if (CHECK_PID(chip, 0x5288))
208 RTSX_WRITE_REG(chip, 0xFE5A, 0x08, 0x08);
209 else if (CHECK_PID(chip, 0x5208))
210 RTSX_WRITE_REG(chip, 0xFE70, 0x80, 0x80);
212 chip->chip_insert_with_sdio = 1;
216 RTSX_WRITE_REG(chip, TLPTISTAT, 0x08, 0x08);
218 chip->need_reset |= SD_CARD;
221 return STATUS_SUCCESS;
225 int rtsx_reset_chip(struct rtsx_chip *chip)
229 rtsx_writel(chip, RTSX_HCBAR, chip->host_cmds_addr);
231 rtsx_disable_aspm(chip);
233 RTSX_WRITE_REG(chip, HOST_SLEEP_STATE, 0x03, 0x00);
235 /* Disable card clock */
236 RTSX_WRITE_REG(chip, CARD_CLK_EN, 0x1E, 0);
239 /* SSC power on, OCD power on */
240 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
241 RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, 0);
243 RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, MS_OC_POWER_DOWN);
245 RTSX_WRITE_REG(chip, OCPPARA1, OCP_TIME_MASK, OCP_TIME_800);
246 RTSX_WRITE_REG(chip, OCPPARA2, OCP_THD_MASK, OCP_THD_244_946);
247 RTSX_WRITE_REG(chip, OCPCTL, 0xFF, CARD_OC_INT_EN | CARD_DETECT_EN);
250 RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, OC_POWER_DOWN);
253 if (!CHECK_PID(chip, 0x5288))
254 RTSX_WRITE_REG(chip, CARD_GPIO_DIR, 0xFF, 0x03);
257 RTSX_WRITE_REG(chip, CARD_GPIO, 0xFF, 0x03);
259 /* Reset delink mode */
260 RTSX_WRITE_REG(chip, CHANGE_LINK_STATE, 0x0A, 0);
262 /* Card driving select */
263 RTSX_WRITE_REG(chip, CARD_DRIVE_SEL, 0xFF, chip->card_drive_sel);
265 #ifdef LED_AUTO_BLINK
266 RTSX_WRITE_REG(chip, CARD_AUTO_BLINK, 0xFF,
267 LED_BLINK_SPEED | BLINK_EN | LED_GPIO0);
270 if (chip->asic_code) {
271 /* Enable SSC Clock */
272 RTSX_WRITE_REG(chip, SSC_CTL1, 0xFF, SSC_8X_EN | SSC_SEL_4M);
273 RTSX_WRITE_REG(chip, SSC_CTL2, 0xFF, 0x12);
276 /* Disable cd_pwr_save (u_force_rst_core_en=0, u_cd_rst_core_en=0)
278 bit[1] u_cd_rst_core_en rst_value = 0
279 bit[2] u_force_rst_core_en rst_value = 0
280 bit[5] u_mac_phy_rst_n_dbg rst_value = 1
281 bit[4] u_non_sticky_rst_n_dbg rst_value = 0
283 RTSX_WRITE_REG(chip, CHANGE_LINK_STATE, 0x16, 0x10);
286 if (chip->aspm_l0s_l1_en) {
287 if (chip->dynamic_aspm) {
288 if (CHK_SDIO_EXIST(chip)) {
289 if (CHECK_PID(chip, 0x5288)) {
290 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF, chip->aspm_l0s_l1_en);
291 if (retval != STATUS_SUCCESS)
292 TRACE_RET(chip, STATUS_FAIL);
296 if (CHECK_PID(chip, 0x5208))
297 RTSX_WRITE_REG(chip, ASPM_FORCE_CTL,
300 retval = rtsx_write_config_byte(chip, LCTLR,
301 chip->aspm_l0s_l1_en);
302 if (retval != STATUS_SUCCESS)
303 TRACE_RET(chip, STATUS_FAIL);
305 chip->aspm_level[0] = chip->aspm_l0s_l1_en;
306 if (CHK_SDIO_EXIST(chip)) {
307 chip->aspm_level[1] = chip->aspm_l0s_l1_en;
308 if (CHECK_PID(chip, 0x5288))
309 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF, chip->aspm_l0s_l1_en);
311 retval = rtsx_write_cfg_dw(chip, 1, 0xC0, 0xFF, chip->aspm_l0s_l1_en);
313 if (retval != STATUS_SUCCESS)
314 TRACE_RET(chip, STATUS_FAIL);
318 chip->aspm_enabled = 1;
321 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
322 retval = rtsx_write_phy_register(chip, 0x07, 0x0129);
323 if (retval != STATUS_SUCCESS)
324 TRACE_RET(chip, STATUS_FAIL);
326 retval = rtsx_write_config_byte(chip, LCTLR,
327 chip->aspm_l0s_l1_en);
328 if (retval != STATUS_SUCCESS)
329 TRACE_RET(chip, STATUS_FAIL);
332 retval = rtsx_write_config_byte(chip, 0x81, 1);
333 if (retval != STATUS_SUCCESS)
334 TRACE_RET(chip, STATUS_FAIL);
336 if (CHK_SDIO_EXIST(chip)) {
337 if (CHECK_PID(chip, 0x5288))
338 retval = rtsx_write_cfg_dw(chip, 2, 0xC0,
341 retval = rtsx_write_cfg_dw(chip, 1, 0xC0,
344 if (retval != STATUS_SUCCESS)
345 TRACE_RET(chip, STATUS_FAIL);
349 if (CHECK_PID(chip, 0x5288)) {
350 if (!CHK_SDIO_EXIST(chip)) {
351 retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFFFF,
353 if (retval != STATUS_SUCCESS)
354 TRACE_RET(chip, STATUS_FAIL);
356 retval = rtsx_write_cfg_dw(chip, 2, 0x84, 0xFF, 0x03);
357 if (retval != STATUS_SUCCESS)
358 TRACE_RET(chip, STATUS_FAIL);
363 RTSX_WRITE_REG(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
365 RTSX_WRITE_REG(chip, PERST_GLITCH_WIDTH, 0xFF, 0x80);
367 /* Enable PCIE interrupt */
368 if (chip->asic_code) {
369 if (CHECK_PID(chip, 0x5208)) {
370 if (chip->phy_debug_mode) {
371 RTSX_WRITE_REG(chip, CDRESUMECTL, 0x77, 0);
372 rtsx_disable_bus_int(chip);
374 rtsx_enable_bus_int(chip);
377 if (chip->ic_version >= IC_VER_D) {
379 retval = rtsx_read_phy_register(chip, 0x00,
381 if (retval != STATUS_SUCCESS)
382 TRACE_RET(chip, STATUS_FAIL);
386 retval = rtsx_write_phy_register(chip, 0x00,
388 if (retval != STATUS_SUCCESS)
389 TRACE_RET(chip, STATUS_FAIL);
391 retval = rtsx_read_phy_register(chip, 0x1C,
393 if (retval != STATUS_SUCCESS)
394 TRACE_RET(chip, STATUS_FAIL);
397 retval = rtsx_write_phy_register(chip, 0x1C,
399 if (retval != STATUS_SUCCESS)
400 TRACE_RET(chip, STATUS_FAIL);
404 if (chip->driver_first_load &&
405 (chip->ic_version < IC_VER_C))
406 rtsx_calibration(chip);
409 rtsx_enable_bus_int(chip);
412 rtsx_enable_bus_int(chip);
415 chip->need_reset = 0;
417 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
419 if (chip->hw_bypass_sd)
421 RTSX_DEBUGP("In rtsx_reset_chip, chip->int_reg = 0x%x\n",
423 if (chip->int_reg & SD_EXIST) {
424 #ifdef HW_AUTO_SWITCH_SD_BUS
425 if (CHECK_PID(chip, 0x5208) && (chip->ic_version < IC_VER_C))
426 retval = rtsx_pre_handle_sdio_old(chip);
428 retval = rtsx_pre_handle_sdio_new(chip);
430 RTSX_DEBUGP("chip->need_reset = 0x%x (rtsx_reset_chip)\n",
431 (unsigned int)(chip->need_reset));
432 #else /* HW_AUTO_SWITCH_SD_BUS */
433 retval = rtsx_pre_handle_sdio_old(chip);
434 #endif /* HW_AUTO_SWITCH_SD_BUS */
435 if (retval != STATUS_SUCCESS)
436 TRACE_RET(chip, STATUS_FAIL);
440 RTSX_WRITE_REG(chip, SDIO_CTRL, SDIO_BUS_CTRL | SDIO_CD_CTRL,
445 if (chip->int_reg & XD_EXIST)
446 chip->need_reset |= XD_CARD;
447 if (chip->int_reg & MS_EXIST)
448 chip->need_reset |= MS_CARD;
449 if (chip->int_reg & CARD_EXIST)
450 RTSX_WRITE_REG(chip, SSC_CTL1, SSC_RSTB, SSC_RSTB);
452 RTSX_DEBUGP("In rtsx_init_chip, chip->need_reset = 0x%x\n",
453 (unsigned int)(chip->need_reset));
455 RTSX_WRITE_REG(chip, RCCTL, 0x01, 0x00);
457 if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
458 /* Turn off main power when entering S3/S4 state */
459 RTSX_WRITE_REG(chip, MAIN_PWR_OFF_CTL, 0x03, 0x03);
462 if (chip->remote_wakeup_en && !chip->auto_delink_en) {
463 RTSX_WRITE_REG(chip, WAKE_SEL_CTL, 0x07, 0x07);
464 if (chip->aux_pwr_exist)
465 RTSX_WRITE_REG(chip, PME_FORCE_CTL, 0xFF, 0x33);
467 RTSX_WRITE_REG(chip, WAKE_SEL_CTL, 0x07, 0x04);
468 RTSX_WRITE_REG(chip, PME_FORCE_CTL, 0xFF, 0x30);
471 if (CHECK_PID(chip, 0x5208) && (chip->ic_version >= IC_VER_D))
472 RTSX_WRITE_REG(chip, PETXCFG, 0x1C, 0x14);
474 if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
475 retval = rtsx_clr_phy_reg_bit(chip, 0x1C, 2);
476 if (retval != STATUS_SUCCESS)
477 TRACE_RET(chip, STATUS_FAIL);
480 if (chip->ft2_fast_mode) {
481 RTSX_WRITE_REG(chip, CARD_PWR_CTL, 0xFF,
482 MS_PARTIAL_POWER_ON | SD_PARTIAL_POWER_ON);
483 udelay(chip->pmos_pwr_on_interval);
484 RTSX_WRITE_REG(chip, CARD_PWR_CTL, 0xFF,
485 MS_POWER_ON | SD_POWER_ON);
491 rtsx_reset_detected_cards(chip, 0);
493 chip->driver_first_load = 0;
495 return STATUS_SUCCESS;
498 static inline int check_sd_speed_prior(u32 sd_speed_prior)
500 int i, fake_para = 0;
502 for (i = 0; i < 4; i++) {
503 u8 tmp = (u8)(sd_speed_prior >> (i*8));
504 if ((tmp < 0x01) || (tmp > 0x04)) {
513 static inline int check_sd_current_prior(u32 sd_current_prior)
515 int i, fake_para = 0;
517 for (i = 0; i < 4; i++) {
518 u8 tmp = (u8)(sd_current_prior >> (i*8));
528 static int rts5208_init(struct rtsx_chip *chip)
534 RTSX_WRITE_REG(chip, CLK_SEL, 0x03, 0x03);
535 RTSX_READ_REG(chip, CLK_SEL, &val);
541 if (chip->asic_code) {
542 retval = rtsx_read_phy_register(chip, 0x1C, ®);
543 if (retval != STATUS_SUCCESS)
544 TRACE_RET(chip, STATUS_FAIL);
546 RTSX_DEBUGP("Value of phy register 0x1C is 0x%x\n", reg);
547 chip->ic_version = (reg >> 4) & 0x07;
548 if (reg & PHY_DEBUG_MODE)
549 chip->phy_debug_mode = 1;
551 chip->phy_debug_mode = 0;
554 RTSX_READ_REG(chip, 0xFE80, &val);
555 chip->ic_version = val;
556 chip->phy_debug_mode = 0;
559 RTSX_READ_REG(chip, PDINFO, &val);
560 RTSX_DEBUGP("PDINFO: 0x%x\n", val);
561 if (val & AUX_PWR_DETECTED)
562 chip->aux_pwr_exist = 1;
564 chip->aux_pwr_exist = 0;
566 RTSX_READ_REG(chip, 0xFE50, &val);
568 chip->hw_bypass_sd = 1;
570 chip->hw_bypass_sd = 0;
572 rtsx_read_config_byte(chip, 0x0E, &val);
574 SET_SDIO_EXIST(chip);
576 CLR_SDIO_EXIST(chip);
578 if (chip->use_hw_setting) {
579 RTSX_READ_REG(chip, CHANGE_LINK_STATE, &val);
581 chip->auto_delink_en = 1;
583 chip->auto_delink_en = 0;
586 return STATUS_SUCCESS;
589 static int rts5288_init(struct rtsx_chip *chip)
592 u8 val = 0, max_func;
595 RTSX_WRITE_REG(chip, CLK_SEL, 0x03, 0x03);
596 RTSX_READ_REG(chip, CLK_SEL, &val);
602 chip->ic_version = 0;
603 chip->phy_debug_mode = 0;
605 RTSX_READ_REG(chip, PDINFO, &val);
606 RTSX_DEBUGP("PDINFO: 0x%x\n", val);
607 if (val & AUX_PWR_DETECTED)
608 chip->aux_pwr_exist = 1;
610 chip->aux_pwr_exist = 0;
612 RTSX_READ_REG(chip, CARD_SHARE_MODE, &val);
613 RTSX_DEBUGP("CARD_SHARE_MODE: 0x%x\n", val);
615 chip->baro_pkg = QFN;
617 chip->baro_pkg = LQFP;
619 RTSX_READ_REG(chip, 0xFE5A, &val);
621 chip->hw_bypass_sd = 1;
623 chip->hw_bypass_sd = 0;
625 retval = rtsx_read_cfg_dw(chip, 0, 0x718, &lval);
626 if (retval != STATUS_SUCCESS)
627 TRACE_RET(chip, STATUS_FAIL);
629 max_func = (u8)((lval >> 29) & 0x07);
630 RTSX_DEBUGP("Max function number: %d\n", max_func);
631 if (max_func == 0x02)
632 SET_SDIO_EXIST(chip);
634 CLR_SDIO_EXIST(chip);
636 if (chip->use_hw_setting) {
637 RTSX_READ_REG(chip, CHANGE_LINK_STATE, &val);
639 chip->auto_delink_en = 1;
641 chip->auto_delink_en = 0;
643 if (CHECK_BARO_PKG(chip, LQFP))
644 chip->lun_mode = SD_MS_1LUN;
646 chip->lun_mode = DEFAULT_SINGLE;
650 return STATUS_SUCCESS;
653 int rtsx_init_chip(struct rtsx_chip *chip)
655 struct sd_info *sd_card = &(chip->sd_card);
656 struct xd_info *xd_card = &(chip->xd_card);
657 struct ms_info *ms_card = &(chip->ms_card);
661 RTSX_DEBUGP("Vendor ID: 0x%04x, Product ID: 0x%04x\n",
662 chip->vendor_id, chip->product_id);
664 chip->ic_version = 0;
670 memset(xd_card, 0, sizeof(struct xd_info));
671 memset(sd_card, 0, sizeof(struct sd_info));
672 memset(ms_card, 0, sizeof(struct ms_info));
674 chip->xd_reset_counter = 0;
675 chip->sd_reset_counter = 0;
676 chip->ms_reset_counter = 0;
678 chip->xd_show_cnt = MAX_SHOW_CNT;
679 chip->sd_show_cnt = MAX_SHOW_CNT;
680 chip->ms_show_cnt = MAX_SHOW_CNT;
683 chip->auto_delink_cnt = 0;
684 chip->auto_delink_allowed = 1;
685 rtsx_set_stat(chip, RTSX_STAT_INIT);
687 chip->aspm_enabled = 0;
688 chip->chip_insert_with_sdio = 0;
691 chip->sdio_counter = 0;
693 chip->phy_debug_mode = 0;
694 chip->sdio_func_exist = 0;
695 memset(chip->sdio_raw_data, 0, 12);
697 for (i = 0; i < MAX_ALLOWED_LUN_CNT; i++) {
698 set_sense_type(chip, i, SENSE_TYPE_NO_SENSE);
699 chip->rw_fail_cnt[i] = 0;
702 if (!check_sd_speed_prior(chip->sd_speed_prior))
703 chip->sd_speed_prior = 0x01040203;
705 RTSX_DEBUGP("sd_speed_prior = 0x%08x\n", chip->sd_speed_prior);
707 if (!check_sd_current_prior(chip->sd_current_prior))
708 chip->sd_current_prior = 0x00010203;
710 RTSX_DEBUGP("sd_current_prior = 0x%08x\n", chip->sd_current_prior);
712 if ((chip->sd_ddr_tx_phase > 31) || (chip->sd_ddr_tx_phase < 0))
713 chip->sd_ddr_tx_phase = 0;
715 if ((chip->mmc_ddr_tx_phase > 31) || (chip->mmc_ddr_tx_phase < 0))
716 chip->mmc_ddr_tx_phase = 0;
718 RTSX_WRITE_REG(chip, FPDCTL, SSC_POWER_DOWN, 0);
720 RTSX_WRITE_REG(chip, CLK_DIV, 0x07, 0x07);
721 RTSX_DEBUGP("chip->use_hw_setting = %d\n", chip->use_hw_setting);
723 if (CHECK_PID(chip, 0x5208)) {
724 retval = rts5208_init(chip);
725 if (retval != STATUS_SUCCESS)
726 TRACE_RET(chip, STATUS_FAIL);
728 } else if (CHECK_PID(chip, 0x5288)) {
729 retval = rts5288_init(chip);
730 if (retval != STATUS_SUCCESS)
731 TRACE_RET(chip, STATUS_FAIL);
735 if (chip->ss_en == 2)
738 RTSX_DEBUGP("chip->asic_code = %d\n", chip->asic_code);
739 RTSX_DEBUGP("chip->ic_version = 0x%x\n", chip->ic_version);
740 RTSX_DEBUGP("chip->phy_debug_mode = %d\n", chip->phy_debug_mode);
741 RTSX_DEBUGP("chip->aux_pwr_exist = %d\n", chip->aux_pwr_exist);
742 RTSX_DEBUGP("chip->sdio_func_exist = %d\n", chip->sdio_func_exist);
743 RTSX_DEBUGP("chip->hw_bypass_sd = %d\n", chip->hw_bypass_sd);
744 RTSX_DEBUGP("chip->aspm_l0s_l1_en = %d\n", chip->aspm_l0s_l1_en);
745 RTSX_DEBUGP("chip->lun_mode = %d\n", chip->lun_mode);
746 RTSX_DEBUGP("chip->auto_delink_en = %d\n", chip->auto_delink_en);
747 RTSX_DEBUGP("chip->ss_en = %d\n", chip->ss_en);
748 RTSX_DEBUGP("chip->baro_pkg = %d\n", chip->baro_pkg);
750 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
751 chip->card2lun[SD_CARD] = 0;
752 chip->card2lun[MS_CARD] = 1;
753 chip->card2lun[XD_CARD] = 0xFF;
754 chip->lun2card[0] = SD_CARD;
755 chip->lun2card[1] = MS_CARD;
757 SET_SDIO_IGNORED(chip);
758 } else if (CHECK_LUN_MODE(chip, SD_MS_1LUN)) {
759 chip->card2lun[SD_CARD] = 0;
760 chip->card2lun[MS_CARD] = 0;
761 chip->card2lun[XD_CARD] = 0xFF;
762 chip->lun2card[0] = SD_CARD | MS_CARD;
765 chip->card2lun[XD_CARD] = 0;
766 chip->card2lun[SD_CARD] = 0;
767 chip->card2lun[MS_CARD] = 0;
768 chip->lun2card[0] = XD_CARD | SD_CARD | MS_CARD;
772 retval = rtsx_reset_chip(chip);
773 if (retval != STATUS_SUCCESS)
774 TRACE_RET(chip, STATUS_FAIL);
776 return STATUS_SUCCESS;
779 void rtsx_release_chip(struct rtsx_chip *chip)
781 xd_free_l2p_tbl(chip);
782 ms_free_l2p_tbl(chip);
783 chip->card_exist = 0;
784 chip->card_ready = 0;
787 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
788 static inline void rtsx_blink_led(struct rtsx_chip *chip)
790 if (chip->card_exist && chip->blink_led) {
791 if (chip->led_toggle_counter < LED_TOGGLE_INTERVAL) {
792 chip->led_toggle_counter++;
794 chip->led_toggle_counter = 0;
795 toggle_gpio(chip, LED_GPIO);
801 static void rtsx_monitor_aspm_config(struct rtsx_chip *chip)
803 int maybe_support_aspm, reg_changed;
805 u8 reg0 = 0, reg1 = 0;
807 maybe_support_aspm = 0;
809 rtsx_read_config_byte(chip, LCTLR, ®0);
810 if (chip->aspm_level[0] != reg0) {
812 chip->aspm_level[0] = reg0;
814 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
815 rtsx_read_cfg_dw(chip, 1, 0xC0, &tmp);
817 if (chip->aspm_level[1] != reg1) {
819 chip->aspm_level[1] = reg1;
822 if ((reg0 & 0x03) && (reg1 & 0x03))
823 maybe_support_aspm = 1;
827 maybe_support_aspm = 1;
832 if (maybe_support_aspm)
833 chip->aspm_l0s_l1_en = 0x03;
835 RTSX_DEBUGP("aspm_level[0] = 0x%02x, aspm_level[1] = 0x%02x\n",
836 chip->aspm_level[0], chip->aspm_level[1]);
838 if (chip->aspm_l0s_l1_en) {
839 chip->aspm_enabled = 1;
841 chip->aspm_enabled = 0;
844 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF,
845 0x30 | chip->aspm_level[0] |
846 (chip->aspm_level[1] << 2));
850 void rtsx_polling_func(struct rtsx_chip *chip)
852 #ifdef SUPPORT_SD_LOCK
853 struct sd_info *sd_card = &(chip->sd_card);
857 if (rtsx_chk_stat(chip, RTSX_STAT_SUSPEND))
860 if (rtsx_chk_stat(chip, RTSX_STAT_DELINK))
863 if (chip->polling_config) {
865 rtsx_read_config_byte(chip, 0, &val);
868 if (rtsx_chk_stat(chip, RTSX_STAT_SS))
873 rtsx_read_register(chip, OCPSTAT, &(chip->ocp_stat));
875 if (chip->card_exist & SD_CARD)
876 sd_power_off_card3v3(chip);
877 else if (chip->card_exist & MS_CARD)
878 ms_power_off_card3v3(chip);
879 else if (chip->card_exist & XD_CARD)
880 xd_power_off_card3v3(chip);
886 #ifdef SUPPORT_SD_LOCK
887 if (sd_card->sd_erase_status) {
888 if (chip->card_exist & SD_CARD) {
890 rtsx_read_register(chip, 0xFD30, &val);
892 sd_card->sd_erase_status = SD_NOT_ERASE;
893 sd_card->sd_lock_notify = 1;
894 chip->need_reinit |= SD_CARD;
897 sd_card->sd_erase_status = SD_NOT_ERASE;
902 rtsx_init_cards(chip);
907 if (CHECK_PID(chip, 0x5288)) {
910 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
912 rtsx_read_cfg_dw(chip, 1, 0x04, &val);
922 if (ss_allowed && !chip->sd_io) {
923 if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) {
924 chip->ss_counter = 0;
926 if (chip->ss_counter <
927 (chip->ss_idle_period / POLLING_INTERVAL)) {
930 rtsx_exclusive_enter_ss(chip);
936 if (CHECK_PID(chip, 0x5208)) {
937 rtsx_monitor_aspm_config(chip);
939 #ifdef SUPPORT_SDIO_ASPM
940 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip) &&
941 chip->aspm_l0s_l1_en && chip->dynamic_aspm) {
943 dynamic_configure_sdio_aspm(chip);
945 if (!chip->sdio_aspm) {
946 RTSX_DEBUGP("SDIO enter ASPM!\n");
947 rtsx_write_register(chip,
948 ASPM_FORCE_CTL, 0xFC,
949 0x30 | (chip->aspm_level[1] << 2));
957 if (chip->idle_counter < IDLE_MAX_COUNT) {
958 chip->idle_counter++;
960 if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) {
961 RTSX_DEBUGP("Idle state!\n");
962 rtsx_set_stat(chip, RTSX_STAT_IDLE);
964 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
965 chip->led_toggle_counter = 0;
967 rtsx_force_power_on(chip, SSC_PDCTL);
969 turn_off_led(chip, LED_GPIO);
971 if (chip->auto_power_down && !chip->card_ready && !chip->sd_io)
972 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
977 switch (rtsx_get_stat(chip)) {
979 #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
980 rtsx_blink_led(chip);
982 do_remaining_work(chip);
986 if (chip->sd_io && !chip->sd_int)
987 try_to_switch_sdio_ctrl(chip);
989 rtsx_enable_aspm(chip);
998 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
999 #ifdef CONFIG_RTS5208_DEBUG
1000 if (chip->ocp_stat &
1001 (SD_OC_NOW | SD_OC_EVER | MS_OC_NOW | MS_OC_EVER))
1002 RTSX_DEBUGP("Over current, OCPSTAT is 0x%x\n",
1006 if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
1007 if (chip->card_exist & SD_CARD) {
1008 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN,
1010 card_power_off(chip, SD_CARD);
1011 chip->card_fail |= SD_CARD;
1014 if (chip->ocp_stat & (MS_OC_NOW | MS_OC_EVER)) {
1015 if (chip->card_exist & MS_CARD) {
1016 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN,
1018 card_power_off(chip, MS_CARD);
1019 chip->card_fail |= MS_CARD;
1023 if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
1024 RTSX_DEBUGP("Over current, OCPSTAT is 0x%x\n",
1026 if (chip->card_exist & SD_CARD) {
1027 rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN,
1029 chip->card_fail |= SD_CARD;
1030 } else if (chip->card_exist & MS_CARD) {
1031 rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN,
1033 chip->card_fail |= MS_CARD;
1034 } else if (chip->card_exist & XD_CARD) {
1035 rtsx_write_register(chip, CARD_OE, XD_OUTPUT_EN,
1037 chip->card_fail |= XD_CARD;
1039 card_power_off(chip, SD_CARD);
1045 if (chip->auto_delink_en && chip->auto_delink_allowed &&
1046 !chip->card_ready && !chip->card_ejected && !chip->sd_io) {
1047 int enter_L1 = chip->auto_delink_in_L1 && (
1048 chip->aspm_l0s_l1_en || chip->ss_en);
1049 int delink_stage1_cnt = chip->delink_stage1_step;
1050 int delink_stage2_cnt = delink_stage1_cnt +
1051 chip->delink_stage2_step;
1052 int delink_stage3_cnt = delink_stage2_cnt +
1053 chip->delink_stage3_step;
1055 if (chip->auto_delink_cnt <= delink_stage3_cnt) {
1056 if (chip->auto_delink_cnt == delink_stage1_cnt) {
1057 rtsx_set_stat(chip, RTSX_STAT_DELINK);
1059 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1060 rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1062 if (chip->card_exist) {
1063 RTSX_DEBUGP("False card inserted, do force delink\n");
1066 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 1);
1068 rtsx_write_register(chip,
1069 CHANGE_LINK_STATE, 0x0A,
1073 rtsx_enter_L1(chip);
1075 chip->auto_delink_cnt = delink_stage3_cnt + 1;
1077 RTSX_DEBUGP("No card inserted, do delink\n");
1080 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 1);
1082 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 0x02);
1085 rtsx_enter_L1(chip);
1090 if (chip->auto_delink_cnt == delink_stage2_cnt) {
1091 RTSX_DEBUGP("Try to do force delink\n");
1096 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1097 rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1099 rtsx_write_register(chip, CHANGE_LINK_STATE,
1103 chip->auto_delink_cnt++;
1106 chip->auto_delink_cnt = 0;
1110 void rtsx_undo_delink(struct rtsx_chip *chip)
1112 chip->auto_delink_allowed = 0;
1113 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0x00);
1117 * rtsx_stop_cmd - stop command transfer and DMA transfer
1118 * @chip: Realtek's card reader chip
1119 * @card: flash card type
1121 * Stop command transfer and DMA transfer.
1122 * This function is called in error handler.
1124 void rtsx_stop_cmd(struct rtsx_chip *chip, int card)
1128 for (i = 0; i <= 8; i++) {
1129 int addr = RTSX_HCBAR + i * 4;
1131 reg = rtsx_readl(chip, addr);
1132 RTSX_DEBUGP("BAR (0x%02x): 0x%08x\n", addr, reg);
1134 rtsx_writel(chip, RTSX_HCBCTLR, STOP_CMD);
1135 rtsx_writel(chip, RTSX_HDBCTLR, STOP_DMA);
1137 for (i = 0; i < 16; i++) {
1138 u16 addr = 0xFE20 + (u16)i;
1140 rtsx_read_register(chip, addr, &val);
1141 RTSX_DEBUGP("0x%04X: 0x%02x\n", addr, val);
1144 rtsx_write_register(chip, DMACTL, 0x80, 0x80);
1145 rtsx_write_register(chip, RBCTL, 0x80, 0x80);
1148 #define MAX_RW_REG_CNT 1024
1150 int rtsx_write_register(struct rtsx_chip *chip, u16 addr, u8 mask, u8 data)
1155 val |= (u32)(addr & 0x3FFF) << 16;
1156 val |= (u32)mask << 8;
1159 rtsx_writel(chip, RTSX_HAIMR, val);
1161 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1162 val = rtsx_readl(chip, RTSX_HAIMR);
1163 if ((val & (1 << 31)) == 0) {
1164 if (data != (u8)val)
1165 TRACE_RET(chip, STATUS_FAIL);
1167 return STATUS_SUCCESS;
1171 TRACE_RET(chip, STATUS_TIMEDOUT);
1174 int rtsx_read_register(struct rtsx_chip *chip, u16 addr, u8 *data)
1182 val |= (u32)(addr & 0x3FFF) << 16;
1184 rtsx_writel(chip, RTSX_HAIMR, val);
1186 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1187 val = rtsx_readl(chip, RTSX_HAIMR);
1188 if ((val & (1 << 31)) == 0)
1192 if (i >= MAX_RW_REG_CNT)
1193 TRACE_RET(chip, STATUS_TIMEDOUT);
1196 *data = (u8)(val & 0xFF);
1198 return STATUS_SUCCESS;
1201 int rtsx_write_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 mask,
1207 for (i = 0; i < 4; i++) {
1209 RTSX_WRITE_REG(chip, CFGDATA0 + i,
1210 0xFF, (u8)(val & mask & 0xFF));
1218 RTSX_WRITE_REG(chip, CFGADDR0, 0xFF, (u8)addr);
1219 RTSX_WRITE_REG(chip, CFGADDR1, 0xFF, (u8)(addr >> 8));
1221 RTSX_WRITE_REG(chip, CFGRWCTL, 0xFF,
1222 0x80 | mode | ((func_no & 0x03) << 4));
1224 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1225 RTSX_READ_REG(chip, CFGRWCTL, &tmp);
1226 if ((tmp & 0x80) == 0)
1231 return STATUS_SUCCESS;
1234 int rtsx_read_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 *val)
1240 RTSX_WRITE_REG(chip, CFGADDR0, 0xFF, (u8)addr);
1241 RTSX_WRITE_REG(chip, CFGADDR1, 0xFF, (u8)(addr >> 8));
1242 RTSX_WRITE_REG(chip, CFGRWCTL, 0xFF, 0x80 | ((func_no & 0x03) << 4));
1244 for (i = 0; i < MAX_RW_REG_CNT; i++) {
1245 RTSX_READ_REG(chip, CFGRWCTL, &tmp);
1246 if ((tmp & 0x80) == 0)
1250 for (i = 0; i < 4; i++) {
1251 RTSX_READ_REG(chip, CFGDATA0 + i, &tmp);
1252 data |= (u32)tmp << (i * 8);
1258 return STATUS_SUCCESS;
1261 int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1265 u16 offset = addr % 4;
1266 u16 aligned_addr = addr - offset;
1270 RTSX_DEBUGP("%s\n", __func__);
1273 TRACE_RET(chip, STATUS_NOMEM);
1275 if ((len + offset) % 4)
1276 dw_len = (len + offset) / 4 + 1;
1278 dw_len = (len + offset) / 4;
1280 RTSX_DEBUGP("dw_len = %d\n", dw_len);
1282 data = vzalloc(dw_len * 4);
1284 TRACE_RET(chip, STATUS_NOMEM);
1286 mask = vzalloc(dw_len * 4);
1289 TRACE_RET(chip, STATUS_NOMEM);
1293 for (i = 0; i < len; i++) {
1294 mask[j] |= 0xFF << (offset * 8);
1295 data[j] |= buf[i] << (offset * 8);
1296 if (++offset == 4) {
1302 RTSX_DUMP(mask, dw_len * 4);
1303 RTSX_DUMP(data, dw_len * 4);
1305 for (i = 0; i < dw_len; i++) {
1306 retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i * 4,
1308 if (retval != STATUS_SUCCESS) {
1311 TRACE_RET(chip, STATUS_FAIL);
1318 return STATUS_SUCCESS;
1321 int rtsx_read_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1325 u16 offset = addr % 4;
1326 u16 aligned_addr = addr - offset;
1330 RTSX_DEBUGP("%s\n", __func__);
1332 if ((len + offset) % 4)
1333 dw_len = (len + offset) / 4 + 1;
1335 dw_len = (len + offset) / 4;
1337 RTSX_DEBUGP("dw_len = %d\n", dw_len);
1339 data = vmalloc(dw_len * 4);
1341 TRACE_RET(chip, STATUS_NOMEM);
1343 for (i = 0; i < dw_len; i++) {
1344 retval = rtsx_read_cfg_dw(chip, func, aligned_addr + i * 4,
1346 if (retval != STATUS_SUCCESS) {
1348 TRACE_RET(chip, STATUS_FAIL);
1355 for (i = 0; i < len; i++) {
1356 buf[i] = (u8)(data[j] >> (offset * 8));
1357 if (++offset == 4) {
1366 return STATUS_SUCCESS;
1369 int rtsx_write_phy_register(struct rtsx_chip *chip, u8 addr, u16 val)
1371 int i, finished = 0;
1374 RTSX_WRITE_REG(chip, PHYDATA0, 0xFF, (u8)val);
1375 RTSX_WRITE_REG(chip, PHYDATA1, 0xFF, (u8)(val >> 8));
1376 RTSX_WRITE_REG(chip, PHYADDR, 0xFF, addr);
1377 RTSX_WRITE_REG(chip, PHYRWCTL, 0xFF, 0x81);
1379 for (i = 0; i < 100000; i++) {
1380 RTSX_READ_REG(chip, PHYRWCTL, &tmp);
1381 if (!(tmp & 0x80)) {
1388 TRACE_RET(chip, STATUS_FAIL);
1390 return STATUS_SUCCESS;
1393 int rtsx_read_phy_register(struct rtsx_chip *chip, u8 addr, u16 *val)
1395 int i, finished = 0;
1399 RTSX_WRITE_REG(chip, PHYADDR, 0xFF, addr);
1400 RTSX_WRITE_REG(chip, PHYRWCTL, 0xFF, 0x80);
1402 for (i = 0; i < 100000; i++) {
1403 RTSX_READ_REG(chip, PHYRWCTL, &tmp);
1404 if (!(tmp & 0x80)) {
1411 TRACE_RET(chip, STATUS_FAIL);
1413 RTSX_READ_REG(chip, PHYDATA0, &tmp);
1415 RTSX_READ_REG(chip, PHYDATA1, &tmp);
1416 data |= (u16)tmp << 8;
1421 return STATUS_SUCCESS;
1424 int rtsx_read_efuse(struct rtsx_chip *chip, u8 addr, u8 *val)
1429 RTSX_WRITE_REG(chip, EFUSE_CTRL, 0xFF, 0x80|addr);
1431 for (i = 0; i < 100; i++) {
1432 RTSX_READ_REG(chip, EFUSE_CTRL, &data);
1439 TRACE_RET(chip, STATUS_TIMEDOUT);
1441 RTSX_READ_REG(chip, EFUSE_DATA, &data);
1445 return STATUS_SUCCESS;
1448 int rtsx_write_efuse(struct rtsx_chip *chip, u8 addr, u8 val)
1451 u8 data = 0, tmp = 0xFF;
1453 for (i = 0; i < 8; i++) {
1454 if (val & (u8)(1 << i))
1457 tmp &= (~(u8)(1 << i));
1458 RTSX_DEBUGP("Write 0x%x to 0x%x\n", tmp, addr);
1460 RTSX_WRITE_REG(chip, EFUSE_DATA, 0xFF, tmp);
1461 RTSX_WRITE_REG(chip, EFUSE_CTRL, 0xFF, 0xA0|addr);
1463 for (j = 0; j < 100; j++) {
1464 RTSX_READ_REG(chip, EFUSE_CTRL, &data);
1471 TRACE_RET(chip, STATUS_TIMEDOUT);
1476 return STATUS_SUCCESS;
1479 int rtsx_clr_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1484 retval = rtsx_read_phy_register(chip, reg, &value);
1485 if (retval != STATUS_SUCCESS)
1486 TRACE_RET(chip, STATUS_FAIL);
1488 if (value & (1 << bit)) {
1489 value &= ~(1 << bit);
1490 retval = rtsx_write_phy_register(chip, reg, value);
1491 if (retval != STATUS_SUCCESS)
1492 TRACE_RET(chip, STATUS_FAIL);
1495 return STATUS_SUCCESS;
1498 int rtsx_set_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1503 retval = rtsx_read_phy_register(chip, reg, &value);
1504 if (retval != STATUS_SUCCESS)
1505 TRACE_RET(chip, STATUS_FAIL);
1507 if (0 == (value & (1 << bit))) {
1508 value |= (1 << bit);
1509 retval = rtsx_write_phy_register(chip, reg, value);
1510 if (retval != STATUS_SUCCESS)
1511 TRACE_RET(chip, STATUS_FAIL);
1514 return STATUS_SUCCESS;
1517 int rtsx_check_link_ready(struct rtsx_chip *chip)
1521 RTSX_READ_REG(chip, IRQSTAT0, &val);
1523 RTSX_DEBUGP("IRQSTAT0: 0x%x\n", val);
1524 if (val & LINK_RDY_INT) {
1525 RTSX_DEBUGP("Delinked!\n");
1526 rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
1530 return STATUS_SUCCESS;
1533 static void rtsx_handle_pm_dstate(struct rtsx_chip *chip, u8 dstate)
1537 RTSX_DEBUGP("%04x set pm_dstate to %d\n", chip->product_id, dstate);
1539 if (CHK_SDIO_EXIST(chip)) {
1542 if (CHECK_PID(chip, 0x5288))
1547 rtsx_read_cfg_dw(chip, func_no, 0x84, &ultmp);
1548 RTSX_DEBUGP("pm_dstate of function %d: 0x%x\n", (int)func_no,
1550 rtsx_write_cfg_dw(chip, func_no, 0x84, 0xFF, dstate);
1553 rtsx_write_config_byte(chip, 0x44, dstate);
1554 rtsx_write_config_byte(chip, 0x45, 0);
1557 void rtsx_enter_L1(struct rtsx_chip *chip)
1559 rtsx_handle_pm_dstate(chip, 2);
1562 void rtsx_exit_L1(struct rtsx_chip *chip)
1564 rtsx_write_config_byte(chip, 0x44, 0);
1565 rtsx_write_config_byte(chip, 0x45, 0);
1568 void rtsx_enter_ss(struct rtsx_chip *chip)
1570 RTSX_DEBUGP("Enter Selective Suspend State!\n");
1572 rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
1574 if (chip->power_down_in_ss) {
1575 rtsx_power_off_card(chip);
1576 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1579 if (CHK_SDIO_EXIST(chip)) {
1580 if (CHECK_PID(chip, 0x5288))
1581 rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF00, 0x0100);
1583 rtsx_write_cfg_dw(chip, 1, 0xC0, 0xFF00, 0x0100);
1586 if (chip->auto_delink_en) {
1587 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x01, 0x01);
1589 if (!chip->phy_debug_mode) {
1591 tmp = rtsx_readl(chip, RTSX_BIER);
1593 rtsx_writel(chip, RTSX_BIER, tmp);
1596 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 0);
1599 rtsx_enter_L1(chip);
1601 RTSX_CLR_DELINK(chip);
1602 rtsx_set_stat(chip, RTSX_STAT_SS);
1605 void rtsx_exit_ss(struct rtsx_chip *chip)
1607 RTSX_DEBUGP("Exit Selective Suspend State!\n");
1611 if (chip->power_down_in_ss) {
1612 rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
1616 if (RTSX_TST_DELINK(chip)) {
1617 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1618 rtsx_reinit_cards(chip, 1);
1619 RTSX_CLR_DELINK(chip);
1620 } else if (chip->power_down_in_ss) {
1621 chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1622 rtsx_reinit_cards(chip, 0);
1626 int rtsx_pre_handle_interrupt(struct rtsx_chip *chip)
1628 u32 status, int_enable;
1637 chip->ss_counter = 0;
1638 if (rtsx_get_stat(chip) == RTSX_STAT_SS) {
1641 rtsx_set_stat(chip, RTSX_STAT_RUN);
1645 int_enable = rtsx_readl(chip, RTSX_BIER);
1646 chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
1648 if (((chip->int_reg & int_enable) == 0) ||
1649 (chip->int_reg == 0xFFFFFFFF))
1652 status = chip->int_reg &= (int_enable | 0x7FFFFF);
1654 if (status & CARD_INT) {
1655 chip->auto_delink_cnt = 0;
1657 if (status & SD_INT) {
1658 if (status & SD_EXIST) {
1659 set_bit(SD_NR, &(chip->need_reset));
1661 set_bit(SD_NR, &(chip->need_release));
1662 chip->sd_reset_counter = 0;
1663 chip->sd_show_cnt = 0;
1664 clear_bit(SD_NR, &(chip->need_reset));
1667 /* If multi-luns, it's possible that
1668 when plugging/unplugging one card
1669 there is another card which still
1670 exists in the slot. In this case,
1671 all existed cards should be reset.
1673 if (exit_ss && (status & SD_EXIST))
1674 set_bit(SD_NR, &(chip->need_reinit));
1676 if (!CHECK_PID(chip, 0x5288) || CHECK_BARO_PKG(chip, QFN)) {
1677 if (status & XD_INT) {
1678 if (status & XD_EXIST) {
1679 set_bit(XD_NR, &(chip->need_reset));
1681 set_bit(XD_NR, &(chip->need_release));
1682 chip->xd_reset_counter = 0;
1683 chip->xd_show_cnt = 0;
1684 clear_bit(XD_NR, &(chip->need_reset));
1687 if (exit_ss && (status & XD_EXIST))
1688 set_bit(XD_NR, &(chip->need_reinit));
1691 if (status & MS_INT) {
1692 if (status & MS_EXIST) {
1693 set_bit(MS_NR, &(chip->need_reset));
1695 set_bit(MS_NR, &(chip->need_release));
1696 chip->ms_reset_counter = 0;
1697 chip->ms_show_cnt = 0;
1698 clear_bit(MS_NR, &(chip->need_reset));
1701 if (exit_ss && (status & MS_EXIST))
1702 set_bit(MS_NR, &(chip->need_reinit));
1707 chip->ocp_int = ocp_int & status;
1711 if (chip->int_reg & DATA_DONE_INT)
1712 chip->int_reg &= ~(u32)DATA_DONE_INT;
1715 return STATUS_SUCCESS;
1718 void rtsx_do_before_power_down(struct rtsx_chip *chip, int pm_stat)
1722 RTSX_DEBUGP("rtsx_do_before_power_down, pm_stat = %d\n", pm_stat);
1724 rtsx_set_stat(chip, RTSX_STAT_SUSPEND);
1726 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1727 if (retval != STATUS_SUCCESS)
1730 rtsx_release_cards(chip);
1731 rtsx_disable_bus_int(chip);
1732 turn_off_led(chip, LED_GPIO);
1734 #ifdef HW_AUTO_SWITCH_SD_BUS
1736 chip->sdio_in_charge = 1;
1737 if (CHECK_PID(chip, 0x5208)) {
1738 rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1739 /* Enable sdio_bus_auto_switch */
1740 rtsx_write_register(chip, 0xFE70, 0x80, 0x80);
1741 } else if (CHECK_PID(chip, 0x5288)) {
1742 rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1743 /* Enable sdio_bus_auto_switch */
1744 rtsx_write_register(chip, 0xFE5A, 0x08, 0x08);
1749 if (CHECK_PID(chip, 0x5208) && (chip->ic_version >= IC_VER_D)) {
1750 /* u_force_clkreq_0 */
1751 rtsx_write_register(chip, PETXCFG, 0x08, 0x08);
1754 if (pm_stat == PM_S1) {
1755 RTSX_DEBUGP("Host enter S1\n");
1756 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1758 } else if (pm_stat == PM_S3) {
1759 if (chip->s3_pwr_off_delay > 0)
1760 wait_timeout(chip->s3_pwr_off_delay);
1762 RTSX_DEBUGP("Host enter S3\n");
1763 rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1767 if (chip->do_delink_before_power_down && chip->auto_delink_en)
1768 rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 2);
1770 rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1774 chip->card_exist = 0;
1777 void rtsx_enable_aspm(struct rtsx_chip *chip)
1779 if (chip->aspm_l0s_l1_en && chip->dynamic_aspm) {
1780 if (!chip->aspm_enabled) {
1781 RTSX_DEBUGP("Try to enable ASPM\n");
1782 chip->aspm_enabled = 1;
1784 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1785 rtsx_write_phy_register(chip, 0x07, 0);
1786 if (CHECK_PID(chip, 0x5208)) {
1787 rtsx_write_register(chip, ASPM_FORCE_CTL, 0xF3,
1788 0x30 | chip->aspm_level[0]);
1790 rtsx_write_config_byte(chip, LCTLR,
1791 chip->aspm_l0s_l1_en);
1794 if (CHK_SDIO_EXIST(chip)) {
1795 u16 val = chip->aspm_l0s_l1_en | 0x0100;
1796 if (CHECK_PID(chip, 0x5288))
1797 rtsx_write_cfg_dw(chip, 2, 0xC0,
1800 rtsx_write_cfg_dw(chip, 1, 0xC0,
1809 void rtsx_disable_aspm(struct rtsx_chip *chip)
1811 if (CHECK_PID(chip, 0x5208))
1812 rtsx_monitor_aspm_config(chip);
1814 if (chip->aspm_l0s_l1_en && chip->dynamic_aspm) {
1815 if (chip->aspm_enabled) {
1816 RTSX_DEBUGP("Try to disable ASPM\n");
1817 chip->aspm_enabled = 0;
1819 if (chip->asic_code && CHECK_PID(chip, 0x5208))
1820 rtsx_write_phy_register(chip, 0x07, 0x0129);
1821 if (CHECK_PID(chip, 0x5208))
1822 rtsx_write_register(chip, ASPM_FORCE_CTL,
1825 rtsx_write_config_byte(chip, LCTLR, 0x00);
1834 int rtsx_read_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
1842 TRACE_RET(chip, STATUS_ERROR);
1845 reg_addr = PPBUF_BASE2;
1846 for (i = 0; i < buf_len/256; i++) {
1847 rtsx_init_cmd(chip);
1849 for (j = 0; j < 256; j++)
1850 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
1852 retval = rtsx_send_cmd(chip, 0, 250);
1854 TRACE_RET(chip, STATUS_FAIL);
1856 memcpy(ptr, rtsx_get_cmd_data(chip), 256);
1861 rtsx_init_cmd(chip);
1863 for (j = 0; j < buf_len%256; j++)
1864 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
1866 retval = rtsx_send_cmd(chip, 0, 250);
1868 TRACE_RET(chip, STATUS_FAIL);
1871 memcpy(ptr, rtsx_get_cmd_data(chip), buf_len%256);
1873 return STATUS_SUCCESS;
1876 int rtsx_write_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
1884 TRACE_RET(chip, STATUS_ERROR);
1887 reg_addr = PPBUF_BASE2;
1888 for (i = 0; i < buf_len/256; i++) {
1889 rtsx_init_cmd(chip);
1891 for (j = 0; j < 256; j++) {
1892 rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
1897 retval = rtsx_send_cmd(chip, 0, 250);
1899 TRACE_RET(chip, STATUS_FAIL);
1903 rtsx_init_cmd(chip);
1905 for (j = 0; j < buf_len%256; j++) {
1906 rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
1911 retval = rtsx_send_cmd(chip, 0, 250);
1913 TRACE_RET(chip, STATUS_FAIL);
1916 return STATUS_SUCCESS;
1919 int rtsx_check_chip_exist(struct rtsx_chip *chip)
1921 if (rtsx_readl(chip, 0) == 0xFFFFFFFF)
1922 TRACE_RET(chip, STATUS_FAIL);
1924 return STATUS_SUCCESS;
1927 int rtsx_force_power_on(struct rtsx_chip *chip, u8 ctl)
1932 if (ctl & SSC_PDCTL)
1933 mask |= SSC_POWER_DOWN;
1936 if (ctl & OC_PDCTL) {
1937 mask |= SD_OC_POWER_DOWN;
1938 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
1939 mask |= MS_OC_POWER_DOWN;
1944 retval = rtsx_write_register(chip, FPDCTL, mask, 0);
1945 if (retval != STATUS_SUCCESS)
1946 TRACE_RET(chip, STATUS_FAIL);
1948 if (CHECK_PID(chip, 0x5288))
1952 return STATUS_SUCCESS;
1955 int rtsx_force_power_down(struct rtsx_chip *chip, u8 ctl)
1958 u8 mask = 0, val = 0;
1960 if (ctl & SSC_PDCTL)
1961 mask |= SSC_POWER_DOWN;
1964 if (ctl & OC_PDCTL) {
1965 mask |= SD_OC_POWER_DOWN;
1966 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
1967 mask |= MS_OC_POWER_DOWN;
1973 retval = rtsx_write_register(chip, FPDCTL, mask, val);
1974 if (retval != STATUS_SUCCESS)
1975 TRACE_RET(chip, STATUS_FAIL);
1978 return STATUS_SUCCESS;