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>
30 #define SD_MAX_RETRY_COUNT 3
32 static u16 REG_SD_CFG1;
33 static u16 REG_SD_CFG2;
34 static u16 REG_SD_CFG3;
35 static u16 REG_SD_STAT1;
36 static u16 REG_SD_STAT2;
37 static u16 REG_SD_BUS_STAT;
38 static u16 REG_SD_PAD_CTL;
39 static u16 REG_SD_SAMPLE_POINT_CTL;
40 static u16 REG_SD_PUSH_POINT_CTL;
41 static u16 REG_SD_CMD0;
42 static u16 REG_SD_CMD1;
43 static u16 REG_SD_CMD2;
44 static u16 REG_SD_CMD3;
45 static u16 REG_SD_CMD4;
46 static u16 REG_SD_CMD5;
47 static u16 REG_SD_BYTE_CNT_L;
48 static u16 REG_SD_BYTE_CNT_H;
49 static u16 REG_SD_BLOCK_CNT_L;
50 static u16 REG_SD_BLOCK_CNT_H;
51 static u16 REG_SD_TRANSFER;
52 static u16 REG_SD_VPCLK0_CTL;
53 static u16 REG_SD_VPCLK1_CTL;
54 static u16 REG_SD_DCMPS0_CTL;
55 static u16 REG_SD_DCMPS1_CTL;
57 static inline void sd_set_err_code(struct rtsx_chip *chip, u8 err_code)
59 struct sd_info *sd_card = &(chip->sd_card);
61 sd_card->err_code |= err_code;
64 static inline void sd_clr_err_code(struct rtsx_chip *chip)
66 struct sd_info *sd_card = &(chip->sd_card);
68 sd_card->err_code = 0;
71 static inline int sd_check_err_code(struct rtsx_chip *chip, u8 err_code)
73 struct sd_info *sd_card = &(chip->sd_card);
75 return sd_card->err_code & err_code;
78 static void sd_init_reg_addr(struct rtsx_chip *chip)
83 REG_SD_STAT1 = 0xFD30;
87 REG_SD_SAMPLE_POINT_CTL = 0;
88 REG_SD_PUSH_POINT_CTL = 0;
95 REG_SD_BYTE_CNT_L = 0xFD39;
96 REG_SD_BYTE_CNT_H = 0xFD3A;
97 REG_SD_BLOCK_CNT_L = 0xFD3B;
98 REG_SD_BLOCK_CNT_H = 0xFD3C;
99 REG_SD_TRANSFER = 0xFD32;
100 REG_SD_VPCLK0_CTL = 0;
101 REG_SD_VPCLK1_CTL = 0;
102 REG_SD_DCMPS0_CTL = 0;
103 REG_SD_DCMPS1_CTL = 0;
106 static int sd_check_data0_status(struct rtsx_chip *chip)
111 retval = rtsx_read_register(chip, REG_SD_STAT1, &stat);
117 if (!(stat & SD_DAT0_STATUS)) {
118 sd_set_err_code(chip, SD_BUSY);
123 return STATUS_SUCCESS;
126 static int sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx,
127 u32 arg, u8 rsp_type, u8 *rsp, int rsp_len)
129 struct sd_info *sd_card = &(chip->sd_card);
137 sd_clr_err_code(chip);
139 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d, arg = 0x%08x\n", cmd_idx, arg);
141 if (rsp_type == SD_RSP_TYPE_R1b)
148 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
149 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24));
150 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16));
151 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8));
152 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg);
154 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
155 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE,
156 0x01, PINGPONG_BUFFER);
157 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
158 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
159 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
160 SD_TRANSFER_END | SD_STAT_IDLE, SD_TRANSFER_END | SD_STAT_IDLE);
162 if (rsp_type == SD_RSP_TYPE_R2) {
163 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
165 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
168 } else if (rsp_type != SD_RSP_TYPE_R0) {
169 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
171 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
176 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0);
178 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
182 rtsx_read_register(chip, REG_SD_STAT1, &val);
183 dev_dbg(rtsx_dev(chip), "SD_STAT1: 0x%x\n", val);
185 rtsx_read_register(chip, REG_SD_CFG3, &val);
186 dev_dbg(rtsx_dev(chip), "SD_CFG3: 0x%x\n", val);
188 if (retval == -ETIMEDOUT) {
189 if (rsp_type & SD_WAIT_BUSY_END) {
190 retval = sd_check_data0_status(chip);
191 if (retval != STATUS_SUCCESS) {
192 rtsx_clear_sd_error(chip);
197 sd_set_err_code(chip, SD_TO_ERR);
199 retval = STATUS_TIMEDOUT;
201 retval = STATUS_FAIL;
203 rtsx_clear_sd_error(chip);
209 if (rsp_type == SD_RSP_TYPE_R0)
210 return STATUS_SUCCESS;
212 ptr = rtsx_get_cmd_data(chip) + 1;
214 if ((ptr[0] & 0xC0) != 0) {
215 sd_set_err_code(chip, SD_STS_ERR);
220 if (!(rsp_type & SD_NO_CHECK_CRC7)) {
221 if (ptr[stat_idx] & SD_CRC7_ERR) {
222 if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
223 sd_set_err_code(chip, SD_CRC_ERR);
227 if (rty_cnt < SD_MAX_RETRY_COUNT) {
232 sd_set_err_code(chip, SD_CRC_ERR);
239 if ((rsp_type == SD_RSP_TYPE_R1) || (rsp_type == SD_RSP_TYPE_R1b)) {
240 if ((cmd_idx != SEND_RELATIVE_ADDR) &&
241 (cmd_idx != SEND_IF_COND)) {
242 if (cmd_idx != STOP_TRANSMISSION) {
248 #ifdef SUPPORT_SD_LOCK
254 dev_dbg(rtsx_dev(chip), "ptr[1]: 0x%02x\n",
260 dev_dbg(rtsx_dev(chip), "ptr[2]: 0x%02x\n",
266 dev_dbg(rtsx_dev(chip), "ptr[3]: 0x%02x\n",
272 sd_card->sd_data_buf_ready = 1;
274 sd_card->sd_data_buf_ready = 0;
279 memcpy(rsp, ptr, rsp_len);
281 return STATUS_SUCCESS;
284 static int sd_read_data(struct rtsx_chip *chip,
285 u8 trans_mode, u8 *cmd, int cmd_len, u16 byte_cnt,
286 u16 blk_cnt, u8 bus_width, u8 *buf, int buf_len,
289 struct sd_info *sd_card = &(chip->sd_card);
293 sd_clr_err_code(chip);
306 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40);
307 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++)
308 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0 + i,
311 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
313 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
314 (u8)(byte_cnt >> 8));
315 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
317 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
320 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
322 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
323 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
324 SD_CHECK_CRC7 | SD_RSP_LEN_6);
325 if (trans_mode != SD_TM_AUTO_TUNING)
326 rtsx_add_cmd(chip, WRITE_REG_CMD,
327 CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER);
329 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
330 trans_mode | SD_TRANSFER_START);
331 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
334 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
336 if (retval == -ETIMEDOUT) {
337 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
338 SD_RSP_TYPE_R1, NULL, 0);
345 if (buf && buf_len) {
346 retval = rtsx_read_ppbuf(chip, buf, buf_len);
347 if (retval != STATUS_SUCCESS) {
353 return STATUS_SUCCESS;
356 static int sd_write_data(struct rtsx_chip *chip, u8 trans_mode,
357 u8 *cmd, int cmd_len, u16 byte_cnt, u16 blk_cnt, u8 bus_width,
358 u8 *buf, int buf_len, int timeout)
360 struct sd_info *sd_card = &(chip->sd_card);
364 sd_clr_err_code(chip);
370 /* This function can't write data more than one page */
375 if (buf && buf_len) {
376 retval = rtsx_write_ppbuf(chip, buf, buf_len);
377 if (retval != STATUS_SUCCESS) {
386 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40);
387 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++) {
388 rtsx_add_cmd(chip, WRITE_REG_CMD,
389 REG_SD_CMD0 + i, 0xFF, cmd[i]);
392 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
394 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
395 (u8)(byte_cnt >> 8));
396 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
398 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
401 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
403 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
404 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END |
405 SD_CHECK_CRC7 | SD_RSP_LEN_6);
407 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
408 trans_mode | SD_TRANSFER_START);
409 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
412 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
414 if (retval == -ETIMEDOUT) {
415 sd_send_cmd_get_rsp(chip, SEND_STATUS,
416 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
423 return STATUS_SUCCESS;
426 static int sd_check_csd(struct rtsx_chip *chip, char check_wp)
428 struct sd_info *sd_card = &(chip->sd_card);
431 u8 csd_ver, trans_speed;
434 for (i = 0; i < 6; i++) {
435 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
436 sd_set_err_code(chip, SD_NO_CARD);
441 retval = sd_send_cmd_get_rsp(chip, SEND_CSD, sd_card->sd_addr,
442 SD_RSP_TYPE_R2, rsp, 16);
443 if (retval == STATUS_SUCCESS)
452 memcpy(sd_card->raw_csd, rsp + 1, 15);
454 dev_dbg(rtsx_dev(chip), "CSD Response:\n");
455 dev_dbg(rtsx_dev(chip), "%*ph\n", 16, sd_card->raw_csd);
457 csd_ver = (rsp[1] & 0xc0) >> 6;
458 dev_dbg(rtsx_dev(chip), "csd_ver = %d\n", csd_ver);
460 trans_speed = rsp[4];
461 if ((trans_speed & 0x07) == 0x02) {
462 if ((trans_speed & 0xf8) >= 0x30) {
464 sd_card->sd_clock = 47;
466 sd_card->sd_clock = CLK_50;
468 } else if ((trans_speed & 0xf8) == 0x28) {
470 sd_card->sd_clock = 39;
472 sd_card->sd_clock = CLK_40;
474 } else if ((trans_speed & 0xf8) == 0x20) {
476 sd_card->sd_clock = 29;
478 sd_card->sd_clock = CLK_30;
480 } else if ((trans_speed & 0xf8) >= 0x10) {
482 sd_card->sd_clock = 23;
484 sd_card->sd_clock = CLK_20;
486 } else if ((trans_speed & 0x08) >= 0x08) {
488 sd_card->sd_clock = 19;
490 sd_card->sd_clock = CLK_20;
500 if (CHK_MMC_SECTOR_MODE(sd_card)) {
501 sd_card->capacity = 0;
503 if ((!CHK_SD_HCXC(sd_card)) || (csd_ver == 0)) {
504 u8 blk_size, c_size_mult;
507 blk_size = rsp[6] & 0x0F;
508 c_size = ((u16)(rsp[7] & 0x03) << 10)
510 + ((u16)(rsp[9] & 0xC0) >> 6);
511 c_size_mult = (u8)((rsp[10] & 0x03) << 1);
512 c_size_mult += (rsp[11] & 0x80) >> 7;
513 sd_card->capacity = (((u32)(c_size + 1)) *
514 (1 << (c_size_mult + 2)))
517 u32 total_sector = 0;
519 total_sector = (((u32)rsp[8] & 0x3f) << 16) |
520 ((u32)rsp[9] << 8) | (u32)rsp[10];
521 sd_card->capacity = (total_sector + 1) << 10;
527 chip->card_wp |= SD_CARD;
529 dev_dbg(rtsx_dev(chip), "CSD WP Status: 0x%x\n", rsp[15]);
532 return STATUS_SUCCESS;
535 static int sd_set_sample_push_timing(struct rtsx_chip *chip)
538 struct sd_info *sd_card = &(chip->sd_card);
541 if ((chip->sd_ctl & SD_PUSH_POINT_CTL_MASK) == SD_PUSH_POINT_DELAY)
544 if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) == SD_SAMPLE_POINT_AUTO) {
545 if (chip->asic_code) {
546 if (CHK_SD_HS(sd_card) || CHK_MMC_52M(sd_card)) {
558 } else if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) ==
559 SD_SAMPLE_POINT_DELAY) {
566 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x1C, val);
572 return STATUS_SUCCESS;
575 static void sd_choose_proper_clock(struct rtsx_chip *chip)
577 struct sd_info *sd_card = &(chip->sd_card);
579 if (CHK_SD_SDR104(sd_card)) {
581 sd_card->sd_clock = chip->asic_sd_sdr104_clk;
583 sd_card->sd_clock = chip->fpga_sd_sdr104_clk;
585 } else if (CHK_SD_DDR50(sd_card)) {
587 sd_card->sd_clock = chip->asic_sd_ddr50_clk;
589 sd_card->sd_clock = chip->fpga_sd_ddr50_clk;
591 } else if (CHK_SD_SDR50(sd_card)) {
593 sd_card->sd_clock = chip->asic_sd_sdr50_clk;
595 sd_card->sd_clock = chip->fpga_sd_sdr50_clk;
597 } else if (CHK_SD_HS(sd_card)) {
599 sd_card->sd_clock = chip->asic_sd_hs_clk;
601 sd_card->sd_clock = chip->fpga_sd_hs_clk;
603 } else if (CHK_MMC_52M(sd_card) || CHK_MMC_DDR52(sd_card)) {
605 sd_card->sd_clock = chip->asic_mmc_52m_clk;
607 sd_card->sd_clock = chip->fpga_mmc_52m_clk;
609 } else if (CHK_MMC_26M(sd_card)) {
611 sd_card->sd_clock = 48;
613 sd_card->sd_clock = CLK_50;
617 static int sd_set_clock_divider(struct rtsx_chip *chip, u8 clk_div)
620 u8 mask = 0, val = 0;
623 if (clk_div == SD_CLK_DIVIDE_0)
625 else if (clk_div == SD_CLK_DIVIDE_128)
627 else if (clk_div == SD_CLK_DIVIDE_256)
630 retval = rtsx_write_register(chip, REG_SD_CFG1, mask, val);
636 return STATUS_SUCCESS;
639 static int sd_set_init_para(struct rtsx_chip *chip)
641 struct sd_info *sd_card = &(chip->sd_card);
644 retval = sd_set_sample_push_timing(chip);
645 if (retval != STATUS_SUCCESS) {
650 sd_choose_proper_clock(chip);
652 retval = switch_clock(chip, sd_card->sd_clock);
653 if (retval != STATUS_SUCCESS) {
658 return STATUS_SUCCESS;
661 int sd_select_card(struct rtsx_chip *chip, int select)
663 struct sd_info *sd_card = &(chip->sd_card);
665 u8 cmd_idx, cmd_type;
669 cmd_idx = SELECT_CARD;
670 cmd_type = SD_RSP_TYPE_R1;
671 addr = sd_card->sd_addr;
673 cmd_idx = DESELECT_CARD;
674 cmd_type = SD_RSP_TYPE_R0;
678 retval = sd_send_cmd_get_rsp(chip, cmd_idx, addr, cmd_type, NULL, 0);
679 if (retval != STATUS_SUCCESS) {
684 return STATUS_SUCCESS;
687 #ifdef SUPPORT_SD_LOCK
688 static int sd_update_lock_status(struct rtsx_chip *chip)
690 struct sd_info *sd_card = &(chip->sd_card);
694 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
695 SD_RSP_TYPE_R1, rsp, 5);
696 if (retval != STATUS_SUCCESS) {
702 sd_card->sd_lock_status |= SD_LOCKED;
704 sd_card->sd_lock_status &= ~SD_LOCKED;
706 dev_dbg(rtsx_dev(chip), "sd_card->sd_lock_status = 0x%x\n",
707 sd_card->sd_lock_status);
714 return STATUS_SUCCESS;
718 static int sd_wait_state_data_ready(struct rtsx_chip *chip, u8 state,
719 u8 data_ready, int polling_cnt)
721 struct sd_info *sd_card = &(chip->sd_card);
725 for (i = 0; i < polling_cnt; i++) {
726 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
727 sd_card->sd_addr, SD_RSP_TYPE_R1, rsp,
729 if (retval != STATUS_SUCCESS) {
734 if (((rsp[3] & 0x1E) == state) &&
735 ((rsp[3] & 0x01) == data_ready))
736 return STATUS_SUCCESS;
743 static int sd_change_bank_voltage(struct rtsx_chip *chip, u8 voltage)
747 if (voltage == SD_IO_3V3) {
748 if (chip->asic_code) {
749 retval = rtsx_write_phy_register(chip, 0x08,
752 if (retval != STATUS_SUCCESS) {
757 retval = rtsx_write_register(chip, SD_PAD_CTL,
764 } else if (voltage == SD_IO_1V8) {
765 if (chip->asic_code) {
766 retval = rtsx_write_phy_register(chip, 0x08,
769 if (retval != STATUS_SUCCESS) {
774 retval = rtsx_write_register(chip, SD_PAD_CTL,
787 return STATUS_SUCCESS;
790 static int sd_voltage_switch(struct rtsx_chip *chip)
795 retval = rtsx_write_register(chip, SD_BUS_STAT,
796 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
803 retval = sd_send_cmd_get_rsp(chip, VOLTAGE_SWITCH, 0, SD_RSP_TYPE_R1,
805 if (retval != STATUS_SUCCESS) {
810 udelay(chip->sd_voltage_switch_delay);
812 retval = rtsx_read_register(chip, SD_BUS_STAT, &stat);
817 if (stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
818 SD_DAT1_STATUS | SD_DAT0_STATUS)) {
823 retval = rtsx_write_register(chip, SD_BUS_STAT, 0xFF,
829 retval = sd_change_bank_voltage(chip, SD_IO_1V8);
830 if (retval != STATUS_SUCCESS) {
837 retval = rtsx_write_register(chip, SD_BUS_STAT, 0xFF,
845 retval = rtsx_read_register(chip, SD_BUS_STAT, &stat);
850 if ((stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
851 SD_DAT1_STATUS | SD_DAT0_STATUS)) !=
852 (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
853 SD_DAT1_STATUS | SD_DAT0_STATUS)) {
854 dev_dbg(rtsx_dev(chip), "SD_BUS_STAT: 0x%x\n", stat);
855 rtsx_write_register(chip, SD_BUS_STAT,
856 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
857 rtsx_write_register(chip, CARD_CLK_EN, 0xFF, 0);
862 retval = rtsx_write_register(chip, SD_BUS_STAT,
863 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
869 return STATUS_SUCCESS;
872 static int sd_reset_dcm(struct rtsx_chip *chip, u8 tune_dir)
876 if (tune_dir == TUNE_RX) {
877 retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF,
883 retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, DCM_RX);
889 retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF,
895 retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, DCM_TX);
902 return STATUS_SUCCESS;
905 static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir)
907 struct sd_info *sd_card = &(chip->sd_card);
908 u16 SD_VP_CTL, SD_DCMPS_CTL;
913 dev_dbg(rtsx_dev(chip), "sd_change_phase (sample_point = %d, tune_dir = %d)\n",
914 sample_point, tune_dir);
916 if (tune_dir == TUNE_RX) {
917 SD_VP_CTL = SD_VPRX_CTL;
918 SD_DCMPS_CTL = SD_DCMPS_RX_CTL;
919 if (CHK_SD_DDR50(sd_card))
922 SD_VP_CTL = SD_VPTX_CTL;
923 SD_DCMPS_CTL = SD_DCMPS_TX_CTL;
926 if (chip->asic_code) {
927 retval = rtsx_write_register(chip, CLK_CTL, CHANGE_CLK,
933 retval = rtsx_write_register(chip, SD_VP_CTL, 0x1F,
939 retval = rtsx_write_register(chip, SD_VPCLK0_CTL,
945 retval = rtsx_write_register(chip, SD_VPCLK0_CTL,
946 PHASE_NOT_RESET, PHASE_NOT_RESET);
951 retval = rtsx_write_register(chip, CLK_CTL, CHANGE_CLK, 0);
957 rtsx_read_register(chip, SD_VP_CTL, &val);
958 dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
959 rtsx_read_register(chip, SD_DCMPS_CTL, &val);
960 dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val);
963 retval = rtsx_write_register(chip, SD_VP_CTL,
971 retval = rtsx_write_register(chip, SD_VP_CTL, 0xFF,
972 PHASE_CHANGE | PHASE_NOT_RESET | sample_point);
978 retval = rtsx_write_register(chip, CLK_CTL,
979 CHANGE_CLK, CHANGE_CLK);
985 retval = rtsx_write_register(chip, SD_VP_CTL, 0xFF,
986 PHASE_NOT_RESET | sample_point);
995 rtsx_add_cmd(chip, WRITE_REG_CMD, SD_DCMPS_CTL, DCMPS_CHANGE,
997 rtsx_add_cmd(chip, CHECK_REG_CMD, SD_DCMPS_CTL,
998 DCMPS_CHANGE_DONE, DCMPS_CHANGE_DONE);
999 retval = rtsx_send_cmd(chip, SD_CARD, 100);
1000 if (retval != STATUS_SUCCESS) {
1005 val = *rtsx_get_cmd_data(chip);
1006 if (val & DCMPS_ERROR) {
1011 if ((val & DCMPS_CURRENT_PHASE) != sample_point) {
1016 retval = rtsx_write_register(chip, SD_DCMPS_CTL,
1023 retval = rtsx_write_register(chip, SD_VP_CTL,
1030 retval = rtsx_write_register(chip, CLK_CTL,
1041 retval = rtsx_write_register(chip, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0);
1047 return STATUS_SUCCESS;
1050 rtsx_read_register(chip, SD_VP_CTL, &val);
1051 dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
1052 rtsx_read_register(chip, SD_DCMPS_CTL, &val);
1053 dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val);
1055 rtsx_write_register(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
1056 rtsx_write_register(chip, SD_VP_CTL, PHASE_CHANGE, 0);
1058 sd_reset_dcm(chip, tune_dir);
1062 static int sd_check_spec(struct rtsx_chip *chip, u8 bus_width)
1064 struct sd_info *sd_card = &(chip->sd_card);
1068 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
1069 SD_RSP_TYPE_R1, NULL, 0);
1070 if (retval != STATUS_SUCCESS) {
1075 cmd[0] = 0x40 | SEND_SCR;
1081 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 8, 1, bus_width,
1083 if (retval != STATUS_SUCCESS) {
1084 rtsx_clear_sd_error(chip);
1089 memcpy(sd_card->raw_scr, buf, 8);
1091 if ((buf[0] & 0x0F) == 0) {
1096 return STATUS_SUCCESS;
1099 static int sd_query_switch_result(struct rtsx_chip *chip, u8 func_group,
1100 u8 func_to_switch, u8 *buf, int buf_len)
1102 u8 support_mask = 0, query_switch = 0, switch_busy = 0;
1103 int support_offset = 0, query_switch_offset = 0, check_busy_offset = 0;
1105 if (func_group == SD_FUNC_GROUP_1) {
1106 support_offset = FUNCTION_GROUP1_SUPPORT_OFFSET;
1107 query_switch_offset = FUNCTION_GROUP1_QUERY_SWITCH_OFFSET;
1108 check_busy_offset = FUNCTION_GROUP1_CHECK_BUSY_OFFSET;
1110 switch (func_to_switch) {
1112 support_mask = HS_SUPPORT_MASK;
1113 query_switch = HS_QUERY_SWITCH_OK;
1114 switch_busy = HS_SWITCH_BUSY;
1118 support_mask = SDR50_SUPPORT_MASK;
1119 query_switch = SDR50_QUERY_SWITCH_OK;
1120 switch_busy = SDR50_SWITCH_BUSY;
1123 case SDR104_SUPPORT:
1124 support_mask = SDR104_SUPPORT_MASK;
1125 query_switch = SDR104_QUERY_SWITCH_OK;
1126 switch_busy = SDR104_SWITCH_BUSY;
1130 support_mask = DDR50_SUPPORT_MASK;
1131 query_switch = DDR50_QUERY_SWITCH_OK;
1132 switch_busy = DDR50_SWITCH_BUSY;
1139 } else if (func_group == SD_FUNC_GROUP_3) {
1140 support_offset = FUNCTION_GROUP3_SUPPORT_OFFSET;
1141 query_switch_offset = FUNCTION_GROUP3_QUERY_SWITCH_OFFSET;
1142 check_busy_offset = FUNCTION_GROUP3_CHECK_BUSY_OFFSET;
1144 switch (func_to_switch) {
1145 case DRIVING_TYPE_A:
1146 support_mask = DRIVING_TYPE_A_MASK;
1147 query_switch = TYPE_A_QUERY_SWITCH_OK;
1148 switch_busy = TYPE_A_SWITCH_BUSY;
1151 case DRIVING_TYPE_C:
1152 support_mask = DRIVING_TYPE_C_MASK;
1153 query_switch = TYPE_C_QUERY_SWITCH_OK;
1154 switch_busy = TYPE_C_SWITCH_BUSY;
1157 case DRIVING_TYPE_D:
1158 support_mask = DRIVING_TYPE_D_MASK;
1159 query_switch = TYPE_D_QUERY_SWITCH_OK;
1160 switch_busy = TYPE_D_SWITCH_BUSY;
1167 } else if (func_group == SD_FUNC_GROUP_4) {
1168 support_offset = FUNCTION_GROUP4_SUPPORT_OFFSET;
1169 query_switch_offset = FUNCTION_GROUP4_QUERY_SWITCH_OFFSET;
1170 check_busy_offset = FUNCTION_GROUP4_CHECK_BUSY_OFFSET;
1172 switch (func_to_switch) {
1173 case CURRENT_LIMIT_400:
1174 support_mask = CURRENT_LIMIT_400_MASK;
1175 query_switch = CURRENT_LIMIT_400_QUERY_SWITCH_OK;
1176 switch_busy = CURRENT_LIMIT_400_SWITCH_BUSY;
1179 case CURRENT_LIMIT_600:
1180 support_mask = CURRENT_LIMIT_600_MASK;
1181 query_switch = CURRENT_LIMIT_600_QUERY_SWITCH_OK;
1182 switch_busy = CURRENT_LIMIT_600_SWITCH_BUSY;
1185 case CURRENT_LIMIT_800:
1186 support_mask = CURRENT_LIMIT_800_MASK;
1187 query_switch = CURRENT_LIMIT_800_QUERY_SWITCH_OK;
1188 switch_busy = CURRENT_LIMIT_800_SWITCH_BUSY;
1200 if (func_group == SD_FUNC_GROUP_1) {
1201 if (!(buf[support_offset] & support_mask) ||
1202 ((buf[query_switch_offset] & 0x0F) != query_switch)) {
1208 /* Check 'Busy Status' */
1209 if ((buf[DATA_STRUCTURE_VER_OFFSET] == 0x01) &&
1210 ((buf[check_busy_offset] & switch_busy) == switch_busy)) {
1215 return STATUS_SUCCESS;
1218 static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode,
1219 u8 func_group, u8 func_to_switch, u8 bus_width)
1221 struct sd_info *sd_card = &(chip->sd_card);
1225 dev_dbg(rtsx_dev(chip), "sd_check_switch_mode (mode = %d, func_group = %d, func_to_switch = %d)\n",
1226 mode, func_group, func_to_switch);
1228 cmd[0] = 0x40 | SWITCH;
1231 if (func_group == SD_FUNC_GROUP_1) {
1234 cmd[4] = 0xF0 + func_to_switch;
1235 } else if (func_group == SD_FUNC_GROUP_3) {
1237 cmd[3] = 0xF0 + func_to_switch;
1239 } else if (func_group == SD_FUNC_GROUP_4) {
1241 cmd[3] = 0x0F + (func_to_switch << 4);
1244 cmd[1] = SD_CHECK_MODE;
1250 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1, bus_width,
1252 if (retval != STATUS_SUCCESS) {
1253 rtsx_clear_sd_error(chip);
1258 dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf);
1260 if (func_group == NO_ARGUMENT) {
1261 sd_card->func_group1_mask = buf[0x0D];
1262 sd_card->func_group2_mask = buf[0x0B];
1263 sd_card->func_group3_mask = buf[0x09];
1264 sd_card->func_group4_mask = buf[0x07];
1266 dev_dbg(rtsx_dev(chip), "func_group1_mask = 0x%02x\n",
1268 dev_dbg(rtsx_dev(chip), "func_group2_mask = 0x%02x\n",
1270 dev_dbg(rtsx_dev(chip), "func_group3_mask = 0x%02x\n",
1272 dev_dbg(rtsx_dev(chip), "func_group4_mask = 0x%02x\n",
1275 /* Maximum current consumption, check whether current is
1276 * acceptable; bit[511:496] = 0x0000 means some error happened.
1278 u16 cc = ((u16)buf[0] << 8) | buf[1];
1280 dev_dbg(rtsx_dev(chip), "Maximum current consumption: %dmA\n",
1282 if ((cc == 0) || (cc > 800)) {
1287 retval = sd_query_switch_result(chip, func_group,
1288 func_to_switch, buf, 64);
1289 if (retval != STATUS_SUCCESS) {
1294 if ((cc > 400) || (func_to_switch > CURRENT_LIMIT_400)) {
1295 retval = rtsx_write_register(chip, OCPPARA2,
1297 chip->sd_800mA_ocp_thd);
1302 retval = rtsx_write_register(chip, CARD_PWR_CTL,
1312 return STATUS_SUCCESS;
1315 static u8 downgrade_switch_mode(u8 func_group, u8 func_to_switch)
1317 if (func_group == SD_FUNC_GROUP_1) {
1318 if (func_to_switch > HS_SUPPORT)
1321 } else if (func_group == SD_FUNC_GROUP_4) {
1322 if (func_to_switch > CURRENT_LIMIT_200)
1326 return func_to_switch;
1329 static int sd_check_switch(struct rtsx_chip *chip,
1330 u8 func_group, u8 func_to_switch, u8 bus_width)
1334 bool switch_good = false;
1336 for (i = 0; i < 3; i++) {
1337 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1338 sd_set_err_code(chip, SD_NO_CARD);
1343 retval = sd_check_switch_mode(chip, SD_CHECK_MODE, func_group,
1344 func_to_switch, bus_width);
1345 if (retval == STATUS_SUCCESS) {
1348 retval = sd_check_switch_mode(chip, SD_SWITCH_MODE,
1349 func_group, func_to_switch, bus_width);
1350 if (retval == STATUS_SUCCESS) {
1355 retval = rtsx_read_register(chip, SD_STAT1, &stat);
1360 if (stat & SD_CRC16_ERR) {
1361 dev_dbg(rtsx_dev(chip), "SD CRC16 error when switching mode\n");
1367 func_to_switch = downgrade_switch_mode(func_group,
1378 return STATUS_SUCCESS;
1381 static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width)
1383 struct sd_info *sd_card = &(chip->sd_card);
1386 u8 func_to_switch = 0;
1388 /* Get supported functions */
1389 retval = sd_check_switch_mode(chip, SD_CHECK_MODE,
1390 NO_ARGUMENT, NO_ARGUMENT, bus_width);
1391 if (retval != STATUS_SUCCESS) {
1396 sd_card->func_group1_mask &= ~(sd_card->sd_switch_fail);
1398 /* Function Group 1: Access Mode */
1399 for (i = 0; i < 4; i++) {
1400 switch ((u8)(chip->sd_speed_prior >> (i*8))) {
1401 case SDR104_SUPPORT:
1402 if ((sd_card->func_group1_mask & SDR104_SUPPORT_MASK)
1403 && chip->sdr104_en) {
1404 func_to_switch = SDR104_SUPPORT;
1409 if ((sd_card->func_group1_mask & DDR50_SUPPORT_MASK)
1410 && chip->ddr50_en) {
1411 func_to_switch = DDR50_SUPPORT;
1416 if ((sd_card->func_group1_mask & SDR50_SUPPORT_MASK)
1417 && chip->sdr50_en) {
1418 func_to_switch = SDR50_SUPPORT;
1423 if (sd_card->func_group1_mask & HS_SUPPORT_MASK)
1424 func_to_switch = HS_SUPPORT;
1437 dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_1: func_to_switch = 0x%02x",
1440 #ifdef SUPPORT_SD_LOCK
1441 if ((sd_card->sd_lock_status & SD_SDR_RST)
1442 && (DDR50_SUPPORT == func_to_switch)
1443 && (sd_card->func_group1_mask & SDR50_SUPPORT_MASK)) {
1444 func_to_switch = SDR50_SUPPORT;
1445 dev_dbg(rtsx_dev(chip), "Using SDR50 instead of DDR50 for SD Lock\n");
1449 if (func_to_switch) {
1450 retval = sd_check_switch(chip, SD_FUNC_GROUP_1, func_to_switch,
1452 if (retval != STATUS_SUCCESS) {
1453 if (func_to_switch == SDR104_SUPPORT) {
1454 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK;
1455 } else if (func_to_switch == DDR50_SUPPORT) {
1456 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
1458 } else if (func_to_switch == SDR50_SUPPORT) {
1459 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
1460 DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK;
1466 if (func_to_switch == SDR104_SUPPORT)
1467 SET_SD_SDR104(sd_card);
1468 else if (func_to_switch == DDR50_SUPPORT)
1469 SET_SD_DDR50(sd_card);
1470 else if (func_to_switch == SDR50_SUPPORT)
1471 SET_SD_SDR50(sd_card);
1476 if (CHK_SD_DDR50(sd_card)) {
1477 retval = rtsx_write_register(chip, SD_PUSH_POINT_CTL, 0x06,
1483 retval = sd_set_sample_push_timing(chip);
1484 if (retval != STATUS_SUCCESS) {
1490 if (!func_to_switch || (func_to_switch == HS_SUPPORT)) {
1491 /* Do not try to switch current limit if the card doesn't
1492 * support UHS mode or we don't want it to support UHS mode
1494 return STATUS_SUCCESS;
1497 /* Function Group 4: Current Limit */
1498 func_to_switch = 0xFF;
1500 for (i = 0; i < 4; i++) {
1501 switch ((u8)(chip->sd_current_prior >> (i*8))) {
1502 case CURRENT_LIMIT_800:
1503 if (sd_card->func_group4_mask & CURRENT_LIMIT_800_MASK)
1504 func_to_switch = CURRENT_LIMIT_800;
1508 case CURRENT_LIMIT_600:
1509 if (sd_card->func_group4_mask & CURRENT_LIMIT_600_MASK)
1510 func_to_switch = CURRENT_LIMIT_600;
1514 case CURRENT_LIMIT_400:
1515 if (sd_card->func_group4_mask & CURRENT_LIMIT_400_MASK)
1516 func_to_switch = CURRENT_LIMIT_400;
1520 case CURRENT_LIMIT_200:
1521 if (sd_card->func_group4_mask & CURRENT_LIMIT_200_MASK)
1522 func_to_switch = CURRENT_LIMIT_200;
1530 if (func_to_switch != 0xFF)
1534 dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_4: func_to_switch = 0x%02x",
1537 if (func_to_switch <= CURRENT_LIMIT_800) {
1538 retval = sd_check_switch(chip, SD_FUNC_GROUP_4, func_to_switch,
1540 if (retval != STATUS_SUCCESS) {
1541 if (sd_check_err_code(chip, SD_NO_CARD)) {
1546 dev_dbg(rtsx_dev(chip), "Switch current limit finished! (%d)\n",
1550 if (CHK_SD_DDR50(sd_card)) {
1551 retval = rtsx_write_register(chip, SD_PUSH_POINT_CTL, 0x06, 0);
1558 return STATUS_SUCCESS;
1561 static int sd_wait_data_idle(struct rtsx_chip *chip)
1563 int retval = STATUS_TIMEDOUT;
1567 for (i = 0; i < 100; i++) {
1568 retval = rtsx_read_register(chip, SD_DATA_STATE, &val);
1573 if (val & SD_DATA_IDLE) {
1574 retval = STATUS_SUCCESS;
1579 dev_dbg(rtsx_dev(chip), "SD_DATA_STATE: 0x%02x\n", val);
1584 static int sd_sdr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1589 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1590 if (retval != STATUS_SUCCESS) {
1595 cmd[0] = 0x40 | SEND_TUNING_PATTERN;
1601 retval = sd_read_data(chip, SD_TM_AUTO_TUNING,
1602 cmd, 5, 0x40, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
1603 if (retval != STATUS_SUCCESS) {
1604 (void)sd_wait_data_idle(chip);
1606 rtsx_clear_sd_error(chip);
1611 return STATUS_SUCCESS;
1614 static int sd_ddr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1616 struct sd_info *sd_card = &(chip->sd_card);
1620 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1621 if (retval != STATUS_SUCCESS) {
1626 dev_dbg(rtsx_dev(chip), "sd ddr tuning rx\n");
1628 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
1629 SD_RSP_TYPE_R1, NULL, 0);
1630 if (retval != STATUS_SUCCESS) {
1635 cmd[0] = 0x40 | SD_STATUS;
1641 retval = sd_read_data(chip, SD_TM_NORMAL_READ,
1642 cmd, 5, 64, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
1643 if (retval != STATUS_SUCCESS) {
1644 (void)sd_wait_data_idle(chip);
1646 rtsx_clear_sd_error(chip);
1651 return STATUS_SUCCESS;
1654 static int mmc_ddr_tunning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1656 struct sd_info *sd_card = &(chip->sd_card);
1658 u8 cmd[5], bus_width;
1660 if (CHK_MMC_8BIT(sd_card))
1661 bus_width = SD_BUS_WIDTH_8;
1662 else if (CHK_MMC_4BIT(sd_card))
1663 bus_width = SD_BUS_WIDTH_4;
1665 bus_width = SD_BUS_WIDTH_1;
1667 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1668 if (retval != STATUS_SUCCESS) {
1673 dev_dbg(rtsx_dev(chip), "mmc ddr tuning rx\n");
1675 cmd[0] = 0x40 | SEND_EXT_CSD;
1681 retval = sd_read_data(chip, SD_TM_NORMAL_READ,
1682 cmd, 5, 0x200, 1, bus_width, NULL, 0, 100);
1683 if (retval != STATUS_SUCCESS) {
1684 (void)sd_wait_data_idle(chip);
1686 rtsx_clear_sd_error(chip);
1691 return STATUS_SUCCESS;
1694 static int sd_sdr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
1696 struct sd_info *sd_card = &(chip->sd_card);
1699 retval = sd_change_phase(chip, sample_point, TUNE_TX);
1700 if (retval != STATUS_SUCCESS) {
1705 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1706 SD_RSP_80CLK_TIMEOUT_EN);
1712 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
1713 SD_RSP_TYPE_R1, NULL, 0);
1714 if (retval != STATUS_SUCCESS) {
1715 if (sd_check_err_code(chip, SD_RSP_TIMEOUT)) {
1716 rtsx_write_register(chip, SD_CFG3,
1717 SD_RSP_80CLK_TIMEOUT_EN, 0);
1723 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1730 return STATUS_SUCCESS;
1733 static int sd_ddr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
1735 struct sd_info *sd_card = &(chip->sd_card);
1737 u8 cmd[5], bus_width;
1739 retval = sd_change_phase(chip, sample_point, TUNE_TX);
1740 if (retval != STATUS_SUCCESS) {
1745 if (CHK_SD(sd_card)) {
1746 bus_width = SD_BUS_WIDTH_4;
1748 if (CHK_MMC_8BIT(sd_card))
1749 bus_width = SD_BUS_WIDTH_8;
1750 else if (CHK_MMC_4BIT(sd_card))
1751 bus_width = SD_BUS_WIDTH_4;
1753 bus_width = SD_BUS_WIDTH_1;
1756 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
1757 if (retval != STATUS_SUCCESS) {
1762 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1763 SD_RSP_80CLK_TIMEOUT_EN);
1769 cmd[0] = 0x40 | PROGRAM_CSD;
1775 retval = sd_write_data(chip, SD_TM_AUTO_WRITE_2,
1776 cmd, 5, 16, 1, bus_width, sd_card->raw_csd, 16, 100);
1777 if (retval != STATUS_SUCCESS) {
1778 rtsx_clear_sd_error(chip);
1779 rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1784 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1791 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1,
1794 return STATUS_SUCCESS;
1797 static u8 sd_search_final_phase(struct rtsx_chip *chip, u32 phase_map,
1800 struct sd_info *sd_card = &(chip->sd_card);
1801 struct timing_phase_path path[MAX_PHASE + 1];
1802 int i, j, cont_path_cnt;
1804 int max_len, final_path_idx;
1805 u8 final_phase = 0xFF;
1807 if (phase_map == 0xFFFFFFFF) {
1808 if (tune_dir == TUNE_RX)
1809 final_phase = (u8)chip->sd_default_rx_phase;
1811 final_phase = (u8)chip->sd_default_tx_phase;
1819 for (i = 0; i < MAX_PHASE + 1; i++) {
1820 if (phase_map & (1 << i)) {
1823 j = cont_path_cnt++;
1831 if (cont_path_cnt) {
1832 int idx = cont_path_cnt - 1;
1834 path[idx].len = path[idx].end -
1835 path[idx].start + 1;
1836 path[idx].mid = path[idx].start +
1842 if (cont_path_cnt == 0) {
1843 dev_dbg(rtsx_dev(chip), "No continuous phase path\n");
1846 int idx = cont_path_cnt - 1;
1848 path[idx].len = path[idx].end - path[idx].start + 1;
1849 path[idx].mid = path[idx].start + path[idx].len / 2;
1852 if ((path[0].start == 0) &&
1853 (path[cont_path_cnt - 1].end == MAX_PHASE)) {
1854 path[0].start = path[cont_path_cnt - 1].start - MAX_PHASE - 1;
1855 path[0].len += path[cont_path_cnt - 1].len;
1856 path[0].mid = path[0].start + path[0].len / 2;
1857 if (path[0].mid < 0)
1858 path[0].mid += MAX_PHASE + 1;
1866 for (i = 0; i < cont_path_cnt; i++) {
1867 if (path[i].len > max_len) {
1868 max_len = path[i].len;
1869 final_phase = (u8)path[i].mid;
1873 dev_dbg(rtsx_dev(chip), "path[%d].start = %d\n",
1875 dev_dbg(rtsx_dev(chip), "path[%d].end = %d\n", i, path[i].end);
1876 dev_dbg(rtsx_dev(chip), "path[%d].len = %d\n", i, path[i].len);
1877 dev_dbg(rtsx_dev(chip), "path[%d].mid = %d\n", i, path[i].mid);
1878 dev_dbg(rtsx_dev(chip), "\n");
1881 if (tune_dir == TUNE_TX) {
1882 if (CHK_SD_SDR104(sd_card)) {
1884 int temp_mid = (max_len - 16) / 2;
1885 int temp_final_phase =
1886 path[final_path_idx].end -
1887 (max_len - (6 + temp_mid));
1889 if (temp_final_phase < 0)
1890 final_phase = (u8)(temp_final_phase +
1893 final_phase = (u8)temp_final_phase;
1895 } else if (CHK_SD_SDR50(sd_card)) {
1897 int temp_mid = (max_len - 13) / 2;
1898 int temp_final_phase =
1899 path[final_path_idx].end -
1900 (max_len - (3 + temp_mid));
1902 if (temp_final_phase < 0)
1903 final_phase = (u8)(temp_final_phase +
1906 final_phase = (u8)temp_final_phase;
1912 dev_dbg(rtsx_dev(chip), "Final chosen phase: %d\n", final_phase);
1916 static int sd_tuning_rx(struct rtsx_chip *chip)
1918 struct sd_info *sd_card = &(chip->sd_card);
1921 u32 raw_phase_map[3], phase_map;
1923 int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
1925 if (CHK_SD(sd_card)) {
1926 if (CHK_SD_DDR50(sd_card))
1927 tuning_cmd = sd_ddr_tuning_rx_cmd;
1929 tuning_cmd = sd_sdr_tuning_rx_cmd;
1932 if (CHK_MMC_DDR52(sd_card))
1933 tuning_cmd = mmc_ddr_tunning_rx_cmd;
1940 for (i = 0; i < 3; i++) {
1941 raw_phase_map[i] = 0;
1942 for (j = MAX_PHASE; j >= 0; j--) {
1943 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1944 sd_set_err_code(chip, SD_NO_CARD);
1949 retval = tuning_cmd(chip, (u8)j);
1950 if (retval == STATUS_SUCCESS)
1951 raw_phase_map[i] |= 1 << j;
1955 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1956 for (i = 0; i < 3; i++)
1957 dev_dbg(rtsx_dev(chip), "RX raw_phase_map[%d] = 0x%08x\n",
1958 i, raw_phase_map[i]);
1960 dev_dbg(rtsx_dev(chip), "RX phase_map = 0x%08x\n", phase_map);
1962 final_phase = sd_search_final_phase(chip, phase_map, TUNE_RX);
1963 if (final_phase == 0xFF) {
1968 retval = sd_change_phase(chip, final_phase, TUNE_RX);
1969 if (retval != STATUS_SUCCESS) {
1974 return STATUS_SUCCESS;
1977 static int sd_ddr_pre_tuning_tx(struct rtsx_chip *chip)
1979 struct sd_info *sd_card = &(chip->sd_card);
1985 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1986 SD_RSP_80CLK_TIMEOUT_EN);
1993 for (i = MAX_PHASE; i >= 0; i--) {
1994 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1995 sd_set_err_code(chip, SD_NO_CARD);
1996 rtsx_write_register(chip, SD_CFG3,
1997 SD_RSP_80CLK_TIMEOUT_EN, 0);
2002 retval = sd_change_phase(chip, (u8)i, TUNE_TX);
2003 if (retval != STATUS_SUCCESS)
2006 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
2007 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL,
2009 if ((retval == STATUS_SUCCESS) ||
2010 !sd_check_err_code(chip, SD_RSP_TIMEOUT))
2011 phase_map |= 1 << i;
2014 retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
2021 dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase_map = 0x%08x\n",
2024 final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
2025 if (final_phase == 0xFF) {
2030 retval = sd_change_phase(chip, final_phase, TUNE_TX);
2031 if (retval != STATUS_SUCCESS) {
2036 dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase: %d\n",
2039 return STATUS_SUCCESS;
2042 static int sd_tuning_tx(struct rtsx_chip *chip)
2044 struct sd_info *sd_card = &(chip->sd_card);
2047 u32 raw_phase_map[3], phase_map;
2049 int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
2051 if (CHK_SD(sd_card)) {
2052 if (CHK_SD_DDR50(sd_card))
2053 tuning_cmd = sd_ddr_tuning_tx_cmd;
2055 tuning_cmd = sd_sdr_tuning_tx_cmd;
2058 if (CHK_MMC_DDR52(sd_card))
2059 tuning_cmd = sd_ddr_tuning_tx_cmd;
2066 for (i = 0; i < 3; i++) {
2067 raw_phase_map[i] = 0;
2068 for (j = MAX_PHASE; j >= 0; j--) {
2069 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2070 sd_set_err_code(chip, SD_NO_CARD);
2071 rtsx_write_register(chip, SD_CFG3,
2072 SD_RSP_80CLK_TIMEOUT_EN, 0);
2077 retval = tuning_cmd(chip, (u8)j);
2078 if (retval == STATUS_SUCCESS)
2079 raw_phase_map[i] |= 1 << j;
2083 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
2084 for (i = 0; i < 3; i++)
2085 dev_dbg(rtsx_dev(chip), "TX raw_phase_map[%d] = 0x%08x\n",
2086 i, raw_phase_map[i]);
2088 dev_dbg(rtsx_dev(chip), "TX phase_map = 0x%08x\n", phase_map);
2090 final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
2091 if (final_phase == 0xFF) {
2096 retval = sd_change_phase(chip, final_phase, TUNE_TX);
2097 if (retval != STATUS_SUCCESS) {
2102 return STATUS_SUCCESS;
2105 static int sd_sdr_tuning(struct rtsx_chip *chip)
2109 retval = sd_tuning_tx(chip);
2110 if (retval != STATUS_SUCCESS) {
2115 retval = sd_tuning_rx(chip);
2116 if (retval != STATUS_SUCCESS) {
2121 return STATUS_SUCCESS;
2124 static int sd_ddr_tuning(struct rtsx_chip *chip)
2128 if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
2129 retval = sd_ddr_pre_tuning_tx(chip);
2130 if (retval != STATUS_SUCCESS) {
2135 retval = sd_change_phase(chip, (u8)chip->sd_ddr_tx_phase,
2137 if (retval != STATUS_SUCCESS) {
2143 retval = sd_tuning_rx(chip);
2144 if (retval != STATUS_SUCCESS) {
2149 if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
2150 retval = sd_tuning_tx(chip);
2151 if (retval != STATUS_SUCCESS) {
2157 return STATUS_SUCCESS;
2160 static int mmc_ddr_tuning(struct rtsx_chip *chip)
2164 if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
2165 retval = sd_ddr_pre_tuning_tx(chip);
2166 if (retval != STATUS_SUCCESS) {
2171 retval = sd_change_phase(chip, (u8)chip->mmc_ddr_tx_phase,
2173 if (retval != STATUS_SUCCESS) {
2179 retval = sd_tuning_rx(chip);
2180 if (retval != STATUS_SUCCESS) {
2185 if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
2186 retval = sd_tuning_tx(chip);
2187 if (retval != STATUS_SUCCESS) {
2193 return STATUS_SUCCESS;
2196 int sd_switch_clock(struct rtsx_chip *chip)
2198 struct sd_info *sd_card = &(chip->sd_card);
2202 retval = select_card(chip, SD_CARD);
2203 if (retval != STATUS_SUCCESS) {
2208 retval = switch_clock(chip, sd_card->sd_clock);
2209 if (retval != STATUS_SUCCESS) {
2215 if (CHK_SD(sd_card)) {
2216 if (CHK_SD_DDR50(sd_card))
2217 retval = sd_ddr_tuning(chip);
2219 retval = sd_sdr_tuning(chip);
2221 if (CHK_MMC_DDR52(sd_card))
2222 retval = mmc_ddr_tuning(chip);
2225 if (retval != STATUS_SUCCESS) {
2231 return STATUS_SUCCESS;
2234 static int sd_prepare_reset(struct rtsx_chip *chip)
2236 struct sd_info *sd_card = &(chip->sd_card);
2239 if (chip->asic_code)
2240 sd_card->sd_clock = 29;
2242 sd_card->sd_clock = CLK_30;
2244 sd_card->sd_type = 0;
2245 sd_card->seq_mode = 0;
2246 sd_card->sd_data_buf_ready = 0;
2247 sd_card->capacity = 0;
2249 #ifdef SUPPORT_SD_LOCK
2250 sd_card->sd_lock_status = 0;
2251 sd_card->sd_erase_status = 0;
2254 chip->capacity[chip->card2lun[SD_CARD]] = 0;
2257 retval = sd_set_init_para(chip);
2258 if (retval != STATUS_SUCCESS) {
2263 retval = rtsx_write_register(chip, REG_SD_CFG1, 0xFF, 0x40);
2269 retval = rtsx_write_register(chip, CARD_STOP, SD_STOP | SD_CLR_ERR,
2270 SD_STOP | SD_CLR_ERR);
2276 retval = select_card(chip, SD_CARD);
2277 if (retval != STATUS_SUCCESS) {
2282 return STATUS_SUCCESS;
2285 static int sd_pull_ctl_disable(struct rtsx_chip *chip)
2289 if (CHECK_PID(chip, 0x5208)) {
2290 retval = rtsx_write_register(chip, CARD_PULL_CTL1, 0xFF,
2291 XD_D3_PD | SD_D7_PD | SD_CLK_PD | SD_D5_PD);
2296 retval = rtsx_write_register(chip, CARD_PULL_CTL2, 0xFF,
2297 SD_D6_PD | SD_D0_PD | SD_D1_PD | XD_D5_PD);
2302 retval = rtsx_write_register(chip, CARD_PULL_CTL3, 0xFF,
2303 SD_D4_PD | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
2308 retval = rtsx_write_register(chip, CARD_PULL_CTL4, 0xFF,
2309 XD_RDY_PD | SD_D3_PD | SD_D2_PD | XD_ALE_PD);
2314 retval = rtsx_write_register(chip, CARD_PULL_CTL5, 0xFF,
2315 MS_INS_PU | SD_WP_PD | SD_CD_PU | SD_CMD_PD);
2320 retval = rtsx_write_register(chip, CARD_PULL_CTL6, 0xFF,
2321 MS_D5_PD | MS_D4_PD);
2326 } else if (CHECK_PID(chip, 0x5288)) {
2327 if (CHECK_BARO_PKG(chip, QFN)) {
2328 retval = rtsx_write_register(chip, CARD_PULL_CTL1,
2334 retval = rtsx_write_register(chip, CARD_PULL_CTL2,
2340 retval = rtsx_write_register(chip, CARD_PULL_CTL3,
2346 retval = rtsx_write_register(chip, CARD_PULL_CTL4,
2355 return STATUS_SUCCESS;
2358 int sd_pull_ctl_enable(struct rtsx_chip *chip)
2362 rtsx_init_cmd(chip);
2364 if (CHECK_PID(chip, 0x5208)) {
2365 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF,
2366 XD_D3_PD | SD_DAT7_PU | SD_CLK_NP | SD_D5_PU);
2367 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF,
2368 SD_D6_PU | SD_D0_PU | SD_D1_PU | XD_D5_PD);
2369 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF,
2370 SD_D4_PU | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
2371 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF,
2372 XD_RDY_PD | SD_D3_PU | SD_D2_PU | XD_ALE_PD);
2373 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF,
2374 MS_INS_PU | SD_WP_PU | SD_CD_PU | SD_CMD_PU);
2375 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF,
2376 MS_D5_PD | MS_D4_PD);
2377 } else if (CHECK_PID(chip, 0x5288)) {
2378 if (CHECK_BARO_PKG(chip, QFN)) {
2379 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF,
2381 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF,
2383 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF,
2385 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF,
2390 retval = rtsx_send_cmd(chip, SD_CARD, 100);
2396 return STATUS_SUCCESS;
2399 static int sd_init_power(struct rtsx_chip *chip)
2403 retval = sd_power_off_card3v3(chip);
2404 if (retval != STATUS_SUCCESS) {
2409 if (!chip->ft2_fast_mode)
2412 retval = enable_card_clock(chip, SD_CARD);
2413 if (retval != STATUS_SUCCESS) {
2418 if (chip->asic_code) {
2419 retval = sd_pull_ctl_enable(chip);
2420 if (retval != STATUS_SUCCESS) {
2425 retval = rtsx_write_register(chip, FPGA_PULL_CTL,
2426 FPGA_SD_PULL_CTL_BIT | 0x20, 0);
2433 if (!chip->ft2_fast_mode) {
2434 retval = card_power_on(chip, SD_CARD);
2435 if (retval != STATUS_SUCCESS) {
2443 if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
2444 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
2452 retval = rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN,
2459 return STATUS_SUCCESS;
2462 static int sd_dummy_clock(struct rtsx_chip *chip)
2466 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x01, 0x01);
2472 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x01, 0);
2478 return STATUS_SUCCESS;
2481 static int sd_read_lba0(struct rtsx_chip *chip)
2483 struct sd_info *sd_card = &(chip->sd_card);
2485 u8 cmd[5], bus_width;
2487 cmd[0] = 0x40 | READ_SINGLE_BLOCK;
2493 if (CHK_SD(sd_card)) {
2494 bus_width = SD_BUS_WIDTH_4;
2496 if (CHK_MMC_8BIT(sd_card))
2497 bus_width = SD_BUS_WIDTH_8;
2498 else if (CHK_MMC_4BIT(sd_card))
2499 bus_width = SD_BUS_WIDTH_4;
2501 bus_width = SD_BUS_WIDTH_1;
2504 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd,
2505 5, 512, 1, bus_width, NULL, 0, 100);
2506 if (retval != STATUS_SUCCESS) {
2507 rtsx_clear_sd_error(chip);
2512 return STATUS_SUCCESS;
2515 static int sd_check_wp_state(struct rtsx_chip *chip)
2517 struct sd_info *sd_card = &(chip->sd_card);
2523 retval = sd_send_cmd_get_rsp(chip, APP_CMD,
2524 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
2525 if (retval != STATUS_SUCCESS) {
2530 cmd[0] = 0x40 | SD_STATUS;
2536 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1,
2537 SD_BUS_WIDTH_4, buf, 64, 250);
2538 if (retval != STATUS_SUCCESS) {
2539 rtsx_clear_sd_error(chip);
2541 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2542 SD_RSP_TYPE_R1, NULL, 0);
2547 dev_dbg(rtsx_dev(chip), "ACMD13:\n");
2548 dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf);
2550 sd_card_type = ((u16)buf[2] << 8) | buf[3];
2551 dev_dbg(rtsx_dev(chip), "sd_card_type = 0x%04x\n", sd_card_type);
2552 if ((sd_card_type == 0x0001) || (sd_card_type == 0x0002)) {
2553 /* ROM card or OTP */
2554 chip->card_wp |= SD_CARD;
2557 /* Check SD Machanical Write-Protect Switch */
2558 val = rtsx_readl(chip, RTSX_BIPR);
2559 if (val & SD_WRITE_PROTECT)
2560 chip->card_wp |= SD_CARD;
2562 return STATUS_SUCCESS;
2565 static int reset_sd(struct rtsx_chip *chip)
2567 struct sd_info *sd_card = &(chip->sd_card);
2568 bool hi_cap_flow = false;
2569 int retval, i = 0, j = 0, k = 0;
2570 bool sd_dont_switch = false;
2571 bool support_1v8 = false;
2572 bool try_sdio = true;
2574 u8 switch_bus_width;
2576 bool sd20_mode = false;
2585 hi_cap_flow = false;
2587 #ifdef SUPPORT_SD_LOCK
2588 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
2589 goto SD_UNLOCK_ENTRY;
2592 retval = sd_prepare_reset(chip);
2593 if (retval != STATUS_SUCCESS) {
2598 retval = sd_dummy_clock(chip);
2599 if (retval != STATUS_SUCCESS) {
2604 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip) && try_sdio) {
2607 for (; rty_cnt < chip->sdio_retry_cnt; rty_cnt++) {
2608 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2609 sd_set_err_code(chip, SD_NO_CARD);
2614 retval = sd_send_cmd_get_rsp(chip, IO_SEND_OP_COND, 0,
2615 SD_RSP_TYPE_R4, rsp, 5);
2616 if (retval == STATUS_SUCCESS) {
2617 int func_num = (rsp[1] >> 4) & 0x07;
2620 dev_dbg(rtsx_dev(chip), "SD_IO card (Function number: %d)!\n",
2630 sd_init_power(chip);
2632 sd_dummy_clock(chip);
2635 dev_dbg(rtsx_dev(chip), "Normal card!\n");
2638 /* Start Initialization Process of SD Card */
2640 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
2642 if (retval != STATUS_SUCCESS) {
2649 retval = sd_send_cmd_get_rsp(chip, SEND_IF_COND, 0x000001AA,
2650 SD_RSP_TYPE_R7, rsp, 5);
2651 if (retval == STATUS_SUCCESS) {
2652 if ((rsp[4] == 0xAA) && ((rsp[3] & 0x0f) == 0x01)) {
2654 voltage = SUPPORT_VOLTAGE | 0x40000000;
2659 voltage = SUPPORT_VOLTAGE;
2661 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0,
2662 SD_RSP_TYPE_R0, NULL, 0);
2663 if (retval != STATUS_SUCCESS) {
2672 retval = sd_send_cmd_get_rsp(chip, APP_CMD, 0, SD_RSP_TYPE_R1,
2674 if (retval != STATUS_SUCCESS) {
2675 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2676 sd_set_err_code(chip, SD_NO_CARD);
2690 retval = sd_send_cmd_get_rsp(chip, SD_APP_OP_COND, voltage,
2691 SD_RSP_TYPE_R3, rsp, 5);
2692 if (retval != STATUS_SUCCESS) {
2704 } while (!(rsp[1] & 0x80) && (i < 255));
2713 SET_SD_HCXC(sd_card);
2715 CLR_SD_HCXC(sd_card);
2717 support_1v8 = false;
2719 CLR_SD_HCXC(sd_card);
2720 support_1v8 = false;
2722 dev_dbg(rtsx_dev(chip), "support_1v8 = %d\n", support_1v8);
2725 retval = sd_voltage_switch(chip);
2726 if (retval != STATUS_SUCCESS) {
2732 retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
2734 if (retval != STATUS_SUCCESS) {
2739 for (i = 0; i < 3; i++) {
2740 retval = sd_send_cmd_get_rsp(chip, SEND_RELATIVE_ADDR, 0,
2741 SD_RSP_TYPE_R6, rsp, 5);
2742 if (retval != STATUS_SUCCESS) {
2747 sd_card->sd_addr = (u32)rsp[1] << 24;
2748 sd_card->sd_addr += (u32)rsp[2] << 16;
2750 if (sd_card->sd_addr)
2754 retval = sd_check_csd(chip, 1);
2755 if (retval != STATUS_SUCCESS) {
2760 retval = sd_select_card(chip, 1);
2761 if (retval != STATUS_SUCCESS) {
2766 #ifdef SUPPORT_SD_LOCK
2768 retval = sd_update_lock_status(chip);
2769 if (retval != STATUS_SUCCESS) {
2774 if (sd_card->sd_lock_status & SD_LOCKED) {
2775 sd_card->sd_lock_status |= (SD_LOCK_1BIT_MODE | SD_PWD_EXIST);
2776 return STATUS_SUCCESS;
2777 } else if (!(sd_card->sd_lock_status & SD_UNLOCK_POW_ON)) {
2778 sd_card->sd_lock_status &= ~SD_PWD_EXIST;
2782 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2783 SD_RSP_TYPE_R1, NULL, 0);
2784 if (retval != STATUS_SUCCESS) {
2789 retval = sd_send_cmd_get_rsp(chip, SET_CLR_CARD_DETECT, 0,
2790 SD_RSP_TYPE_R1, NULL, 0);
2791 if (retval != STATUS_SUCCESS) {
2797 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2798 SD_RSP_TYPE_R1, NULL, 0);
2799 if (retval != STATUS_SUCCESS) {
2804 retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2,
2805 SD_RSP_TYPE_R1, NULL, 0);
2806 if (retval != STATUS_SUCCESS) {
2811 switch_bus_width = SD_BUS_WIDTH_4;
2813 switch_bus_width = SD_BUS_WIDTH_1;
2816 retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
2818 if (retval != STATUS_SUCCESS) {
2823 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
2824 if (retval != STATUS_SUCCESS) {
2829 if (!(sd_card->raw_csd[4] & 0x40))
2830 sd_dont_switch = true;
2832 if (!sd_dont_switch) {
2834 /* Set sd_switch_fail here, because we needn't
2835 * switch to UHS mode
2837 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
2838 DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK;
2841 /* Check the card whether follow SD1.1 spec or higher */
2842 retval = sd_check_spec(chip, switch_bus_width);
2843 if (retval == STATUS_SUCCESS) {
2844 retval = sd_switch_function(chip, switch_bus_width);
2845 if (retval != STATUS_SUCCESS) {
2846 sd_init_power(chip);
2847 sd_dont_switch = true;
2854 sd_init_power(chip);
2855 sd_dont_switch = true;
2864 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2865 SD_RSP_TYPE_R1, NULL, 0);
2866 if (retval != STATUS_SUCCESS) {
2871 retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2,
2872 SD_RSP_TYPE_R1, NULL, 0);
2873 if (retval != STATUS_SUCCESS) {
2879 #ifdef SUPPORT_SD_LOCK
2880 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2883 if (!sd20_mode && CHK_SD30_SPEED(sd_card)) {
2886 retval = rtsx_write_register(chip, SD30_DRIVE_SEL, 0x07,
2887 chip->sd30_drive_sel_1v8);
2893 retval = sd_set_init_para(chip);
2894 if (retval != STATUS_SUCCESS) {
2899 if (CHK_SD_DDR50(sd_card))
2900 retval = sd_ddr_tuning(chip);
2902 retval = sd_sdr_tuning(chip);
2904 if (retval != STATUS_SUCCESS) {
2909 retval = sd_init_power(chip);
2910 if (retval != STATUS_SUCCESS) {
2921 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2922 SD_RSP_TYPE_R1, NULL, 0);
2924 if (CHK_SD_DDR50(sd_card)) {
2925 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
2926 if (retval != STATUS_SUCCESS)
2931 retval = sd_read_lba0(chip);
2932 if (retval != STATUS_SUCCESS) {
2937 retval = sd_init_power(chip);
2938 if (retval != STATUS_SUCCESS) {
2951 retval = sd_check_wp_state(chip);
2952 if (retval != STATUS_SUCCESS) {
2957 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
2959 #ifdef SUPPORT_SD_LOCK
2960 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
2961 retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_H, 0xFF,
2967 retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_L, 0xFF,
2976 return STATUS_SUCCESS;
2980 static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width)
2982 struct sd_info *sd_card = &(chip->sd_card);
2984 u8 buf[8] = {0}, bus_width, *ptr;
2988 retval = sd_send_cmd_get_rsp(chip, BUSTEST_W, 0, SD_RSP_TYPE_R1, NULL,
2990 if (retval != STATUS_SUCCESS) {
2995 if (width == MMC_8BIT_BUS) {
3000 bus_width = SD_BUS_WIDTH_8;
3005 bus_width = SD_BUS_WIDTH_4;
3008 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0x02);
3009 if (retval != STATUS_SUCCESS) {
3014 retval = sd_write_data(chip, SD_TM_AUTO_WRITE_3,
3015 NULL, 0, byte_cnt, 1, bus_width, buf, len, 100);
3016 if (retval != STATUS_SUCCESS) {
3017 rtsx_clear_sd_error(chip);
3018 rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
3023 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
3024 if (retval != STATUS_SUCCESS) {
3029 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", BUSTEST_R);
3031 rtsx_init_cmd(chip);
3033 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | BUSTEST_R);
3035 if (width == MMC_8BIT_BUS)
3036 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L,
3039 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L,
3042 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
3043 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
3045 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
3046 SD_CALCULATE_CRC7 | SD_NO_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
3047 SD_CHECK_CRC7 | SD_RSP_LEN_6);
3048 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
3050 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3051 SD_TM_NORMAL_READ | SD_TRANSFER_START);
3052 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
3055 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2, 0, 0);
3056 if (width == MMC_8BIT_BUS)
3057 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 1, 0, 0);
3059 retval = rtsx_send_cmd(chip, SD_CARD, 100);
3061 rtsx_clear_sd_error(chip);
3066 ptr = rtsx_get_cmd_data(chip) + 1;
3068 if (width == MMC_8BIT_BUS) {
3069 dev_dbg(rtsx_dev(chip), "BUSTEST_R [8bits]: 0x%02x 0x%02x\n",
3071 if ((ptr[0] == 0xAA) && (ptr[1] == 0x55)) {
3075 if (CHK_MMC_DDR52(sd_card))
3080 retval = sd_send_cmd_get_rsp(chip, SWITCH, arg,
3081 SD_RSP_TYPE_R1b, rsp, 5);
3082 if ((retval == STATUS_SUCCESS) &&
3083 !(rsp[4] & MMC_SWITCH_ERR))
3084 return SWITCH_SUCCESS;
3087 dev_dbg(rtsx_dev(chip), "BUSTEST_R [4bits]: 0x%02x\n", ptr[0]);
3088 if (ptr[0] == 0xA5) {
3092 if (CHK_MMC_DDR52(sd_card))
3097 retval = sd_send_cmd_get_rsp(chip, SWITCH, arg,
3098 SD_RSP_TYPE_R1b, rsp, 5);
3099 if ((retval == STATUS_SUCCESS) &&
3100 !(rsp[4] & MMC_SWITCH_ERR))
3101 return SWITCH_SUCCESS;
3110 static int mmc_switch_timing_bus(struct rtsx_chip *chip, bool switch_ddr)
3112 struct sd_info *sd_card = &(chip->sd_card);
3114 u8 *ptr, card_type, card_type_mask = 0;
3116 CLR_MMC_HS(sd_card);
3118 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", SEND_EXT_CSD);
3120 rtsx_init_cmd(chip);
3122 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
3123 0x40 | SEND_EXT_CSD);
3124 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, 0);
3125 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, 0);
3126 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, 0);
3127 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, 0);
3129 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0);
3130 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 2);
3131 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
3132 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
3134 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
3135 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
3136 SD_CHECK_CRC7 | SD_RSP_LEN_6);
3137 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
3139 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3140 SD_TM_NORMAL_READ | SD_TRANSFER_START);
3141 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
3144 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 196, 0xFF, 0);
3145 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 212, 0xFF, 0);
3146 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 213, 0xFF, 0);
3147 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 214, 0xFF, 0);
3148 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 215, 0xFF, 0);
3150 retval = rtsx_send_cmd(chip, SD_CARD, 1000);
3152 if (retval == -ETIMEDOUT) {
3153 rtsx_clear_sd_error(chip);
3154 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3155 SD_RSP_TYPE_R1, NULL, 0);
3161 ptr = rtsx_get_cmd_data(chip);
3162 if (ptr[0] & SD_TRANSFER_ERR) {
3163 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3164 SD_RSP_TYPE_R1, NULL, 0);
3169 if (CHK_MMC_SECTOR_MODE(sd_card)) {
3170 sd_card->capacity = ((u32)ptr[5] << 24) | ((u32)ptr[4] << 16) |
3171 ((u32)ptr[3] << 8) | ((u32)ptr[2]);
3174 card_type_mask = 0x03;
3175 card_type = ptr[1] & card_type_mask;
3179 if (card_type & 0x04) {
3181 SET_MMC_DDR52(sd_card);
3183 SET_MMC_52M(sd_card);
3184 } else if (card_type & 0x02) {
3185 SET_MMC_52M(sd_card);
3187 SET_MMC_26M(sd_card);
3190 retval = sd_send_cmd_get_rsp(chip, SWITCH,
3191 0x03B90100, SD_RSP_TYPE_R1b, rsp, 5);
3192 if ((retval != STATUS_SUCCESS) || (rsp[4] & MMC_SWITCH_ERR))
3193 CLR_MMC_HS(sd_card);
3196 sd_choose_proper_clock(chip);
3197 retval = switch_clock(chip, sd_card->sd_clock);
3198 if (retval != STATUS_SUCCESS) {
3203 /* Test Bus Procedure */
3204 retval = mmc_test_switch_bus(chip, MMC_8BIT_BUS);
3205 if (retval == SWITCH_SUCCESS) {
3206 SET_MMC_8BIT(sd_card);
3207 chip->card_bus_width[chip->card2lun[SD_CARD]] = 8;
3208 #ifdef SUPPORT_SD_LOCK
3209 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
3211 } else if (retval == SWITCH_FAIL) {
3212 retval = mmc_test_switch_bus(chip, MMC_4BIT_BUS);
3213 if (retval == SWITCH_SUCCESS) {
3214 SET_MMC_4BIT(sd_card);
3215 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
3216 #ifdef SUPPORT_SD_LOCK
3217 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
3219 } else if (retval == SWITCH_FAIL) {
3220 CLR_MMC_8BIT(sd_card);
3221 CLR_MMC_4BIT(sd_card);
3231 return STATUS_SUCCESS;
3235 static int reset_mmc(struct rtsx_chip *chip)
3237 struct sd_info *sd_card = &(chip->sd_card);
3238 int retval, i = 0, j = 0, k = 0;
3239 bool switch_ddr = true;
3244 #ifdef SUPPORT_SD_LOCK
3245 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
3246 goto MMC_UNLOCK_ENTRY;
3250 retval = sd_prepare_reset(chip);
3251 if (retval != STATUS_SUCCESS) {
3259 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
3261 if (retval != STATUS_SUCCESS) {
3267 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3268 sd_set_err_code(chip, SD_NO_CARD);
3273 retval = sd_send_cmd_get_rsp(chip, SEND_OP_COND,
3274 (SUPPORT_VOLTAGE | 0x40000000),
3275 SD_RSP_TYPE_R3, rsp, 5);
3276 if (retval != STATUS_SUCCESS) {
3277 if (sd_check_err_code(chip, SD_BUSY) ||
3278 sd_check_err_code(chip, SD_TO_ERR)) {
3281 sd_clr_err_code(chip);
3290 sd_clr_err_code(chip);
3301 } while (!(rsp[1] & 0x80) && (i < 255));
3308 if ((rsp[1] & 0x60) == 0x40)
3309 SET_MMC_SECTOR_MODE(sd_card);
3311 CLR_MMC_SECTOR_MODE(sd_card);
3313 retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
3315 if (retval != STATUS_SUCCESS) {
3320 sd_card->sd_addr = 0x00100000;
3321 retval = sd_send_cmd_get_rsp(chip, SET_RELATIVE_ADDR, sd_card->sd_addr,
3322 SD_RSP_TYPE_R6, rsp, 5);
3323 if (retval != STATUS_SUCCESS) {
3328 retval = sd_check_csd(chip, 1);
3329 if (retval != STATUS_SUCCESS) {
3334 spec_ver = (sd_card->raw_csd[0] & 0x3C) >> 2;
3336 retval = sd_select_card(chip, 1);
3337 if (retval != STATUS_SUCCESS) {
3342 retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
3344 if (retval != STATUS_SUCCESS) {
3349 #ifdef SUPPORT_SD_LOCK
3351 retval = sd_update_lock_status(chip);
3352 if (retval != STATUS_SUCCESS) {
3358 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
3359 if (retval != STATUS_SUCCESS) {
3364 chip->card_bus_width[chip->card2lun[SD_CARD]] = 1;
3366 if (!sd_card->mmc_dont_switch_bus) {
3367 if (spec_ver == 4) {
3369 retval = mmc_switch_timing_bus(chip, switch_ddr);
3370 if (retval != STATUS_SUCCESS) {
3371 retval = sd_init_power(chip);
3372 if (retval != STATUS_SUCCESS) {
3376 sd_card->mmc_dont_switch_bus = 1;
3382 if (CHK_MMC_SECTOR_MODE(sd_card) && (sd_card->capacity == 0)) {
3387 if (switch_ddr && CHK_MMC_DDR52(sd_card)) {
3388 retval = sd_set_init_para(chip);
3389 if (retval != STATUS_SUCCESS) {
3394 retval = mmc_ddr_tuning(chip);
3395 if (retval != STATUS_SUCCESS) {
3396 retval = sd_init_power(chip);
3397 if (retval != STATUS_SUCCESS) {
3407 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
3408 if (retval == STATUS_SUCCESS) {
3409 retval = sd_read_lba0(chip);
3410 if (retval != STATUS_SUCCESS) {
3411 retval = sd_init_power(chip);
3412 if (retval != STATUS_SUCCESS) {
3425 #ifdef SUPPORT_SD_LOCK
3426 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
3427 retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_H, 0xFF,
3433 retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_L, 0xFF,
3442 temp = rtsx_readl(chip, RTSX_BIPR);
3443 if (temp & SD_WRITE_PROTECT)
3444 chip->card_wp |= SD_CARD;
3446 return STATUS_SUCCESS;
3449 int reset_sd_card(struct rtsx_chip *chip)
3451 struct sd_info *sd_card = &(chip->sd_card);
3454 sd_init_reg_addr(chip);
3456 memset(sd_card, 0, sizeof(struct sd_info));
3457 chip->capacity[chip->card2lun[SD_CARD]] = 0;
3459 retval = enable_card_clock(chip, SD_CARD);
3460 if (retval != STATUS_SUCCESS) {
3465 if (chip->ignore_sd && CHK_SDIO_EXIST(chip) &&
3466 !CHK_SDIO_IGNORED(chip)) {
3467 if (chip->asic_code) {
3468 retval = sd_pull_ctl_enable(chip);
3469 if (retval != STATUS_SUCCESS) {
3474 retval = rtsx_write_register(chip, FPGA_PULL_CTL,
3475 FPGA_SD_PULL_CTL_BIT | 0x20, 0);
3476 if (retval != STATUS_SUCCESS) {
3481 retval = card_share_mode(chip, SD_CARD);
3482 if (retval != STATUS_SUCCESS) {
3492 retval = sd_init_power(chip);
3493 if (retval != STATUS_SUCCESS) {
3498 if (chip->sd_ctl & RESET_MMC_FIRST) {
3499 retval = reset_mmc(chip);
3500 if (retval != STATUS_SUCCESS) {
3501 if (sd_check_err_code(chip, SD_NO_CARD)) {
3506 retval = reset_sd(chip);
3507 if (retval != STATUS_SUCCESS) {
3513 retval = reset_sd(chip);
3514 if (retval != STATUS_SUCCESS) {
3515 if (sd_check_err_code(chip, SD_NO_CARD)) {
3524 retval = reset_mmc(chip);
3525 if (retval != STATUS_SUCCESS) {
3533 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
3534 if (retval != STATUS_SUCCESS) {
3539 retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
3544 retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
3550 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
3552 retval = sd_set_init_para(chip);
3553 if (retval != STATUS_SUCCESS) {
3558 dev_dbg(rtsx_dev(chip), "sd_card->sd_type = 0x%x\n", sd_card->sd_type);
3560 return STATUS_SUCCESS;
3563 static int reset_mmc_only(struct rtsx_chip *chip)
3565 struct sd_info *sd_card = &(chip->sd_card);
3568 sd_card->sd_type = 0;
3569 sd_card->seq_mode = 0;
3570 sd_card->sd_data_buf_ready = 0;
3571 sd_card->capacity = 0;
3572 sd_card->sd_switch_fail = 0;
3574 #ifdef SUPPORT_SD_LOCK
3575 sd_card->sd_lock_status = 0;
3576 sd_card->sd_erase_status = 0;
3579 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity = 0;
3581 retval = enable_card_clock(chip, SD_CARD);
3582 if (retval != STATUS_SUCCESS) {
3587 retval = sd_init_power(chip);
3588 if (retval != STATUS_SUCCESS) {
3593 retval = reset_mmc(chip);
3594 if (retval != STATUS_SUCCESS) {
3599 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
3600 if (retval != STATUS_SUCCESS) {
3605 retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
3610 retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
3616 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
3618 retval = sd_set_init_para(chip);
3619 if (retval != STATUS_SUCCESS) {
3624 dev_dbg(rtsx_dev(chip), "In reset_mmc_only, sd_card->sd_type = 0x%x\n",
3627 return STATUS_SUCCESS;
3630 #define WAIT_DATA_READY_RTY_CNT 255
3632 static int wait_data_buf_ready(struct rtsx_chip *chip)
3634 struct sd_info *sd_card = &(chip->sd_card);
3637 for (i = 0; i < WAIT_DATA_READY_RTY_CNT; i++) {
3638 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3639 sd_set_err_code(chip, SD_NO_CARD);
3644 sd_card->sd_data_buf_ready = 0;
3646 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
3647 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3648 if (retval != STATUS_SUCCESS) {
3653 if (sd_card->sd_data_buf_ready) {
3654 return sd_send_cmd_get_rsp(chip, SEND_STATUS,
3655 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3659 sd_set_err_code(chip, SD_TO_ERR);
3665 void sd_stop_seq_mode(struct rtsx_chip *chip)
3667 struct sd_info *sd_card = &(chip->sd_card);
3670 if (sd_card->seq_mode) {
3671 retval = sd_switch_clock(chip);
3672 if (retval != STATUS_SUCCESS)
3675 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3676 SD_RSP_TYPE_R1b, NULL, 0);
3677 if (retval != STATUS_SUCCESS)
3678 sd_set_err_code(chip, SD_STS_ERR);
3680 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
3681 if (retval != STATUS_SUCCESS)
3682 sd_set_err_code(chip, SD_STS_ERR);
3684 sd_card->seq_mode = 0;
3686 rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
3690 static inline int sd_auto_tune_clock(struct rtsx_chip *chip)
3692 struct sd_info *sd_card = &(chip->sd_card);
3695 if (chip->asic_code) {
3696 if (sd_card->sd_clock > 30)
3697 sd_card->sd_clock -= 20;
3699 switch (sd_card->sd_clock) {
3701 sd_card->sd_clock = CLK_150;
3705 sd_card->sd_clock = CLK_120;
3709 sd_card->sd_clock = CLK_100;
3713 sd_card->sd_clock = CLK_80;
3717 sd_card->sd_clock = CLK_60;
3721 sd_card->sd_clock = CLK_50;
3729 retval = sd_switch_clock(chip);
3730 if (retval != STATUS_SUCCESS) {
3735 return STATUS_SUCCESS;
3738 int sd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32 start_sector,
3741 struct sd_info *sd_card = &(chip->sd_card);
3746 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3747 dev_dbg(rtsx_dev(chip), "sd_rw: Read %d %s from 0x%x\n",
3748 sector_cnt, (sector_cnt > 1) ? "sectors" : "sector",
3751 dev_dbg(rtsx_dev(chip), "sd_rw: Write %d %s to 0x%x\n",
3752 sector_cnt, (sector_cnt > 1) ? "sectors" : "sector",
3756 sd_card->cleanup_counter = 0;
3758 if (!(chip->card_ready & SD_CARD)) {
3759 sd_card->seq_mode = 0;
3761 retval = reset_sd_card(chip);
3762 if (retval == STATUS_SUCCESS) {
3763 chip->card_ready |= SD_CARD;
3764 chip->card_fail &= ~SD_CARD;
3766 chip->card_ready &= ~SD_CARD;
3767 chip->card_fail |= SD_CARD;
3768 chip->capacity[chip->card2lun[SD_CARD]] = 0;
3769 chip->rw_need_retry = 1;
3775 if (!CHK_SD_HCXC(sd_card) && !CHK_MMC_SECTOR_MODE(sd_card))
3776 data_addr = start_sector << 9;
3778 data_addr = start_sector;
3780 sd_clr_err_code(chip);
3782 retval = sd_switch_clock(chip);
3783 if (retval != STATUS_SUCCESS) {
3784 sd_set_err_code(chip, SD_IO_ERR);
3789 if (sd_card->seq_mode &&
3790 ((sd_card->pre_dir != srb->sc_data_direction) ||
3791 ((sd_card->pre_sec_addr + sd_card->pre_sec_cnt) !=
3793 if ((sd_card->pre_sec_cnt < 0x80)
3794 && (sd_card->pre_dir == DMA_FROM_DEVICE)
3795 && !CHK_SD30_SPEED(sd_card)
3796 && !CHK_SD_HS(sd_card)
3797 && !CHK_MMC_HS(sd_card)) {
3798 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3799 SD_RSP_TYPE_R1, NULL, 0);
3802 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
3803 0, SD_RSP_TYPE_R1b, NULL, 0);
3804 if (retval != STATUS_SUCCESS) {
3805 chip->rw_need_retry = 1;
3806 sd_set_err_code(chip, SD_STS_ERR);
3811 sd_card->seq_mode = 0;
3813 retval = rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
3814 if (retval != STATUS_SUCCESS) {
3815 sd_set_err_code(chip, SD_IO_ERR);
3820 if ((sd_card->pre_sec_cnt < 0x80)
3821 && !CHK_SD30_SPEED(sd_card)
3822 && !CHK_SD_HS(sd_card)
3823 && !CHK_MMC_HS(sd_card)) {
3824 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3825 SD_RSP_TYPE_R1, NULL, 0);
3829 rtsx_init_cmd(chip);
3831 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0x00);
3832 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 0x02);
3833 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
3835 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
3836 (u8)(sector_cnt >> 8));
3838 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, RING_BUFFER);
3840 if (CHK_MMC_8BIT(sd_card))
3841 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3842 0x03, SD_BUS_WIDTH_8);
3843 else if (CHK_MMC_4BIT(sd_card) || CHK_SD(sd_card))
3844 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3845 0x03, SD_BUS_WIDTH_4);
3847 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3848 0x03, SD_BUS_WIDTH_1);
3850 if (sd_card->seq_mode) {
3851 cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16|
3852 SD_NO_WAIT_BUSY_END | SD_NO_CHECK_CRC7 |
3854 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, cfg2);
3856 trans_dma_enable(srb->sc_data_direction, chip, sector_cnt * 512,
3859 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3860 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3861 SD_TM_AUTO_READ_3 | SD_TRANSFER_START);
3863 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3864 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3867 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3868 SD_TRANSFER_END, SD_TRANSFER_END);
3870 rtsx_send_cmd_no_wait(chip);
3872 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3873 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n",
3874 READ_MULTIPLE_BLOCK);
3875 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
3876 0x40 | READ_MULTIPLE_BLOCK);
3877 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF,
3878 (u8)(data_addr >> 24));
3879 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF,
3880 (u8)(data_addr >> 16));
3881 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF,
3882 (u8)(data_addr >> 8));
3883 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF,
3886 cfg2 = SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
3887 SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 |
3889 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
3892 trans_dma_enable(srb->sc_data_direction, chip,
3893 sector_cnt * 512, DMA_512);
3895 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3896 SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
3897 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3898 SD_TRANSFER_END, SD_TRANSFER_END);
3900 rtsx_send_cmd_no_wait(chip);
3902 retval = rtsx_send_cmd(chip, SD_CARD, 50);
3904 rtsx_clear_sd_error(chip);
3906 chip->rw_need_retry = 1;
3907 sd_set_err_code(chip, SD_TO_ERR);
3912 retval = wait_data_buf_ready(chip);
3913 if (retval != STATUS_SUCCESS) {
3914 chip->rw_need_retry = 1;
3915 sd_set_err_code(chip, SD_TO_ERR);
3920 retval = sd_send_cmd_get_rsp(chip, WRITE_MULTIPLE_BLOCK,
3921 data_addr, SD_RSP_TYPE_R1, NULL, 0);
3922 if (retval != STATUS_SUCCESS) {
3923 chip->rw_need_retry = 1;
3928 rtsx_init_cmd(chip);
3930 cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 |
3931 SD_NO_WAIT_BUSY_END |
3932 SD_NO_CHECK_CRC7 | SD_RSP_LEN_0;
3933 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
3936 trans_dma_enable(srb->sc_data_direction, chip,
3937 sector_cnt * 512, DMA_512);
3939 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3940 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3941 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3942 SD_TRANSFER_END, SD_TRANSFER_END);
3944 rtsx_send_cmd_no_wait(chip);
3947 sd_card->seq_mode = 1;
3950 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
3951 scsi_bufflen(srb), scsi_sg_count(srb),
3952 srb->sc_data_direction, chip->sd_timeout);
3957 sd_card->seq_mode = 0;
3959 if (retval == -ETIMEDOUT)
3960 err = STATUS_TIMEDOUT;
3964 rtsx_read_register(chip, REG_SD_STAT1, &stat);
3965 rtsx_clear_sd_error(chip);
3966 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3967 chip->rw_need_retry = 0;
3968 dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n");
3973 chip->rw_need_retry = 1;
3975 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3976 SD_RSP_TYPE_R1b, NULL, 0);
3977 if (retval != STATUS_SUCCESS) {
3978 sd_set_err_code(chip, SD_STS_ERR);
3983 if (stat & (SD_CRC7_ERR | SD_CRC16_ERR | SD_CRC_WRITE_ERR)) {
3984 dev_dbg(rtsx_dev(chip), "SD CRC error, tune clock!\n");
3985 sd_set_err_code(chip, SD_CRC_ERR);
3990 if (err == STATUS_TIMEDOUT) {
3991 sd_set_err_code(chip, SD_TO_ERR);
4000 sd_card->pre_sec_addr = start_sector;
4001 sd_card->pre_sec_cnt = sector_cnt;
4002 sd_card->pre_dir = srb->sc_data_direction;
4004 return STATUS_SUCCESS;
4007 sd_card->seq_mode = 0;
4009 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
4010 chip->rw_need_retry = 0;
4011 dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n");
4016 if (sd_check_err_code(chip, SD_CRC_ERR)) {
4017 if (CHK_MMC_4BIT(sd_card) || CHK_MMC_8BIT(sd_card)) {
4018 sd_card->mmc_dont_switch_bus = 1;
4019 reset_mmc_only(chip);
4020 sd_card->mmc_dont_switch_bus = 0;
4022 sd_card->need_retune = 1;
4023 sd_auto_tune_clock(chip);
4025 } else if (sd_check_err_code(chip, SD_TO_ERR | SD_STS_ERR)) {
4026 retval = reset_sd_card(chip);
4027 if (retval != STATUS_SUCCESS) {
4028 chip->card_ready &= ~SD_CARD;
4029 chip->card_fail |= SD_CARD;
4030 chip->capacity[chip->card2lun[SD_CARD]] = 0;
4039 int soft_reset_sd_card(struct rtsx_chip *chip)
4041 return reset_sd(chip);
4044 int ext_sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx,
4045 u32 arg, u8 rsp_type, u8 *rsp, int rsp_len, bool special_check)
4054 dev_dbg(rtsx_dev(chip), "EXT SD/MMC CMD %d\n", cmd_idx);
4056 if (rsp_type == SD_RSP_TYPE_R1b)
4061 rtsx_init_cmd(chip);
4063 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
4064 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24));
4065 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16));
4066 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8));
4067 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg);
4069 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
4070 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE,
4071 0x01, PINGPONG_BUFFER);
4072 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
4073 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
4074 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
4077 if (rsp_type == SD_RSP_TYPE_R2) {
4078 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
4080 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
4083 } else if (rsp_type != SD_RSP_TYPE_R0) {
4084 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
4086 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
4090 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0, 0);
4092 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0);
4094 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
4096 if (retval == -ETIMEDOUT) {
4097 rtsx_clear_sd_error(chip);
4099 if (rsp_type & SD_WAIT_BUSY_END) {
4100 retval = sd_check_data0_status(chip);
4101 if (retval != STATUS_SUCCESS) {
4106 sd_set_err_code(chip, SD_TO_ERR);
4113 if (rsp_type == SD_RSP_TYPE_R0)
4114 return STATUS_SUCCESS;
4116 ptr = rtsx_get_cmd_data(chip) + 1;
4118 if ((ptr[0] & 0xC0) != 0) {
4119 sd_set_err_code(chip, SD_STS_ERR);
4124 if (!(rsp_type & SD_NO_CHECK_CRC7)) {
4125 if (ptr[stat_idx] & SD_CRC7_ERR) {
4126 if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
4127 sd_set_err_code(chip, SD_CRC_ERR);
4131 if (rty_cnt < SD_MAX_RETRY_COUNT) {
4136 sd_set_err_code(chip, SD_CRC_ERR);
4143 if ((cmd_idx == SELECT_CARD) || (cmd_idx == APP_CMD) ||
4144 (cmd_idx == SEND_STATUS) || (cmd_idx == STOP_TRANSMISSION)) {
4145 if ((cmd_idx != STOP_TRANSMISSION) && !special_check) {
4146 if (ptr[1] & 0x80) {
4151 #ifdef SUPPORT_SD_LOCK
4160 if (ptr[2] & 0xF8) {
4165 if (cmd_idx == SELECT_CARD) {
4166 if (rsp_type == SD_RSP_TYPE_R2) {
4167 if ((ptr[3] & 0x1E) != 0x04) {
4172 } else if (rsp_type == SD_RSP_TYPE_R0) {
4173 if ((ptr[3] & 0x1E) != 0x03) {
4182 memcpy(rsp, ptr, rsp_len);
4184 return STATUS_SUCCESS;
4187 int ext_sd_get_rsp(struct rtsx_chip *chip, int len, u8 *rsp, u8 rsp_type)
4189 int retval, rsp_len;
4192 if (rsp_type == SD_RSP_TYPE_R0)
4193 return STATUS_SUCCESS;
4195 rtsx_init_cmd(chip);
4197 if (rsp_type == SD_RSP_TYPE_R2) {
4198 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
4200 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
4203 } else if (rsp_type != SD_RSP_TYPE_R0) {
4204 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
4206 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
4210 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0xFF, 0);
4212 retval = rtsx_send_cmd(chip, SD_CARD, 100);
4213 if (retval != STATUS_SUCCESS) {
4219 int min_len = (rsp_len < len) ? rsp_len : len;
4221 memcpy(rsp, rtsx_get_cmd_data(chip), min_len);
4223 dev_dbg(rtsx_dev(chip), "min_len = %d\n", min_len);
4224 dev_dbg(rtsx_dev(chip), "Response in cmd buf: 0x%x 0x%x 0x%x 0x%x\n",
4225 rsp[0], rsp[1], rsp[2], rsp[3]);
4228 return STATUS_SUCCESS;
4231 int sd_pass_thru_mode(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4233 struct sd_info *sd_card = &(chip->sd_card);
4234 unsigned int lun = SCSI_LUN(srb);
4257 sd_card->pre_cmd_err = 0;
4259 if (!(CHK_BIT(chip->lun_mc, lun))) {
4260 SET_BIT(chip->lun_mc, lun);
4261 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4263 return TRANSPORT_FAILED;
4266 if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) ||
4267 (0x20 != srb->cmnd[4]) || (0x43 != srb->cmnd[5]) ||
4268 (0x61 != srb->cmnd[6]) || (0x72 != srb->cmnd[7]) ||
4269 (0x64 != srb->cmnd[8])) {
4270 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4272 return TRANSPORT_FAILED;
4275 switch (srb->cmnd[1] & 0x0F) {
4277 sd_card->sd_pass_thru_en = 0;
4281 sd_card->sd_pass_thru_en = 1;
4285 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4287 return TRANSPORT_FAILED;
4290 buf[5] = (1 == CHK_SD(sd_card)) ? 0x01 : 0x02;
4291 if (chip->card_wp & SD_CARD)
4294 buf[6] = (u8)(sd_card->sd_addr >> 16);
4295 buf[7] = (u8)(sd_card->sd_addr >> 24);
4297 buf[15] = chip->max_lun;
4299 len = min_t(int, 18, scsi_bufflen(srb));
4300 rtsx_stor_set_xfer_buf(buf, len, srb);
4302 return TRANSPORT_GOOD;
4305 static inline int get_rsp_type(struct scsi_cmnd *srb, u8 *rsp_type,
4308 if (!rsp_type || !rsp_len)
4311 switch (srb->cmnd[10]) {
4313 *rsp_type = SD_RSP_TYPE_R0;
4318 *rsp_type = SD_RSP_TYPE_R1;
4323 *rsp_type = SD_RSP_TYPE_R1b;
4328 *rsp_type = SD_RSP_TYPE_R2;
4333 *rsp_type = SD_RSP_TYPE_R3;
4341 return STATUS_SUCCESS;
4344 int sd_execute_no_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4346 struct sd_info *sd_card = &(chip->sd_card);
4347 unsigned int lun = SCSI_LUN(srb);
4348 int retval, rsp_len;
4349 u8 cmd_idx, rsp_type;
4350 bool standby = false, acmd = false;
4353 if (!sd_card->sd_pass_thru_en) {
4354 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4356 return TRANSPORT_FAILED;
4359 retval = sd_switch_clock(chip);
4360 if (retval != STATUS_SUCCESS) {
4362 return TRANSPORT_FAILED;
4365 if (sd_card->pre_cmd_err) {
4366 sd_card->pre_cmd_err = 0;
4367 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4369 return TRANSPORT_FAILED;
4372 cmd_idx = srb->cmnd[2] & 0x3F;
4373 if (srb->cmnd[1] & 0x02)
4376 if (srb->cmnd[1] & 0x01)
4379 arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
4380 ((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
4382 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
4383 if (retval != STATUS_SUCCESS) {
4384 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4386 return TRANSPORT_FAILED;
4388 sd_card->last_rsp_type = rsp_type;
4390 retval = sd_switch_clock(chip);
4391 if (retval != STATUS_SUCCESS) {
4393 return TRANSPORT_FAILED;
4396 #ifdef SUPPORT_SD_LOCK
4397 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
4398 if (CHK_MMC_8BIT(sd_card)) {
4399 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4401 if (retval != STATUS_SUCCESS) {
4403 return TRANSPORT_FAILED;
4406 } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
4407 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4409 if (retval != STATUS_SUCCESS) {
4411 return TRANSPORT_FAILED;
4416 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
4417 if (retval != STATUS_SUCCESS) {
4419 return TRANSPORT_FAILED;
4424 retval = sd_select_card(chip, 0);
4425 if (retval != STATUS_SUCCESS) {
4427 goto SD_Execute_Cmd_Failed;
4432 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
4434 SD_RSP_TYPE_R1, NULL, 0, false);
4435 if (retval != STATUS_SUCCESS) {
4437 goto SD_Execute_Cmd_Failed;
4441 retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
4442 sd_card->rsp, rsp_len, false);
4443 if (retval != STATUS_SUCCESS) {
4445 goto SD_Execute_Cmd_Failed;
4449 retval = sd_select_card(chip, 1);
4450 if (retval != STATUS_SUCCESS) {
4452 goto SD_Execute_Cmd_Failed;
4456 #ifdef SUPPORT_SD_LOCK
4457 retval = sd_update_lock_status(chip);
4458 if (retval != STATUS_SUCCESS) {
4460 goto SD_Execute_Cmd_Failed;
4464 scsi_set_resid(srb, 0);
4465 return TRANSPORT_GOOD;
4467 SD_Execute_Cmd_Failed:
4468 sd_card->pre_cmd_err = 1;
4469 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4470 release_sd_card(chip);
4471 do_reset_sd_card(chip);
4472 if (!(chip->card_ready & SD_CARD))
4473 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4476 return TRANSPORT_FAILED;
4479 int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4481 struct sd_info *sd_card = &(chip->sd_card);
4482 unsigned int lun = SCSI_LUN(srb);
4483 int retval, rsp_len, i;
4484 bool read_err = false, cmd13_checkbit = false;
4485 u8 cmd_idx, rsp_type, bus_width;
4486 bool standby = false, send_cmd12 = false, acmd = false;
4489 if (!sd_card->sd_pass_thru_en) {
4490 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4492 return TRANSPORT_FAILED;
4495 if (sd_card->pre_cmd_err) {
4496 sd_card->pre_cmd_err = 0;
4497 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4499 return TRANSPORT_FAILED;
4502 retval = sd_switch_clock(chip);
4503 if (retval != STATUS_SUCCESS) {
4505 return TRANSPORT_FAILED;
4508 cmd_idx = srb->cmnd[2] & 0x3F;
4509 if (srb->cmnd[1] & 0x04)
4512 if (srb->cmnd[1] & 0x02)
4515 if (srb->cmnd[1] & 0x01)
4518 data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8]
4519 << 8) | srb->cmnd[9];
4521 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
4522 if (retval != STATUS_SUCCESS) {
4523 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4525 return TRANSPORT_FAILED;
4527 sd_card->last_rsp_type = rsp_type;
4529 retval = sd_switch_clock(chip);
4530 if (retval != STATUS_SUCCESS) {
4532 return TRANSPORT_FAILED;
4535 #ifdef SUPPORT_SD_LOCK
4536 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
4537 if (CHK_MMC_8BIT(sd_card))
4538 bus_width = SD_BUS_WIDTH_8;
4539 else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card))
4540 bus_width = SD_BUS_WIDTH_4;
4542 bus_width = SD_BUS_WIDTH_1;
4544 bus_width = SD_BUS_WIDTH_4;
4546 dev_dbg(rtsx_dev(chip), "bus_width = %d\n", bus_width);
4548 bus_width = SD_BUS_WIDTH_4;
4551 if (data_len < 512) {
4552 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
4553 SD_RSP_TYPE_R1, NULL, 0, false);
4554 if (retval != STATUS_SUCCESS) {
4556 goto SD_Execute_Read_Cmd_Failed;
4561 retval = sd_select_card(chip, 0);
4562 if (retval != STATUS_SUCCESS) {
4564 goto SD_Execute_Read_Cmd_Failed;
4569 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
4571 SD_RSP_TYPE_R1, NULL, 0, false);
4572 if (retval != STATUS_SUCCESS) {
4574 goto SD_Execute_Read_Cmd_Failed;
4578 if (data_len <= 512) {
4581 u16 byte_cnt, blk_cnt;
4584 byte_cnt = ((u16)(srb->cmnd[8] & 0x03) << 8) | srb->cmnd[9];
4587 cmd[0] = 0x40 | cmd_idx;
4588 cmd[1] = srb->cmnd[3];
4589 cmd[2] = srb->cmnd[4];
4590 cmd[3] = srb->cmnd[5];
4591 cmd[4] = srb->cmnd[6];
4593 buf = kmalloc(data_len, GFP_KERNEL);
4596 return TRANSPORT_ERROR;
4599 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, byte_cnt,
4600 blk_cnt, bus_width, buf, data_len, 2000);
4601 if (retval != STATUS_SUCCESS) {
4604 rtsx_clear_sd_error(chip);
4606 goto SD_Execute_Read_Cmd_Failed;
4609 min_len = min(data_len, scsi_bufflen(srb));
4610 rtsx_stor_set_xfer_buf(buf, min_len, srb);
4613 } else if (!(data_len & 0x1FF)) {
4614 rtsx_init_cmd(chip);
4616 trans_dma_enable(DMA_FROM_DEVICE, chip, data_len, DMA_512);
4618 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
4620 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
4622 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
4623 0xFF, (srb->cmnd[7] & 0xFE) >> 1);
4624 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
4625 0xFF, (u8)((data_len & 0x0001FE00) >> 9));
4627 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
4629 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF,
4631 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF,
4633 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF,
4635 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF,
4638 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
4639 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
4641 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
4642 0xFF, SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
4643 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
4644 SD_TRANSFER_END, SD_TRANSFER_END);
4646 rtsx_send_cmd_no_wait(chip);
4648 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
4649 scsi_bufflen(srb), scsi_sg_count(srb),
4650 DMA_FROM_DEVICE, 10000);
4653 rtsx_clear_sd_error(chip);
4655 goto SD_Execute_Read_Cmd_Failed;
4660 goto SD_Execute_Read_Cmd_Failed;
4663 retval = ext_sd_get_rsp(chip, rsp_len, sd_card->rsp, rsp_type);
4664 if (retval != STATUS_SUCCESS) {
4666 goto SD_Execute_Read_Cmd_Failed;
4670 retval = sd_select_card(chip, 1);
4671 if (retval != STATUS_SUCCESS) {
4673 goto SD_Execute_Read_Cmd_Failed;
4678 retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
4679 0, SD_RSP_TYPE_R1b, NULL, 0, false);
4680 if (retval != STATUS_SUCCESS) {
4682 goto SD_Execute_Read_Cmd_Failed;
4686 if (data_len < 512) {
4687 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
4688 SD_RSP_TYPE_R1, NULL, 0, false);
4689 if (retval != STATUS_SUCCESS) {
4691 goto SD_Execute_Read_Cmd_Failed;
4694 retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
4695 if (retval != STATUS_SUCCESS) {
4697 goto SD_Execute_Read_Cmd_Failed;
4700 retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
4701 if (retval != STATUS_SUCCESS) {
4703 goto SD_Execute_Read_Cmd_Failed;
4707 if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
4708 cmd13_checkbit = true;
4710 for (i = 0; i < 3; i++) {
4711 retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS,
4713 SD_RSP_TYPE_R1, NULL, 0,
4715 if (retval == STATUS_SUCCESS)
4718 if (retval != STATUS_SUCCESS) {
4720 goto SD_Execute_Read_Cmd_Failed;
4723 scsi_set_resid(srb, 0);
4724 return TRANSPORT_GOOD;
4726 SD_Execute_Read_Cmd_Failed:
4727 sd_card->pre_cmd_err = 1;
4728 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4730 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
4732 release_sd_card(chip);
4733 do_reset_sd_card(chip);
4734 if (!(chip->card_ready & SD_CARD))
4735 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4738 return TRANSPORT_FAILED;
4741 int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4743 struct sd_info *sd_card = &(chip->sd_card);
4744 unsigned int lun = SCSI_LUN(srb);
4745 int retval, rsp_len, i;
4746 bool write_err = false, cmd13_checkbit = false;
4747 u8 cmd_idx, rsp_type;
4748 bool standby = false, send_cmd12 = false, acmd = false;
4750 #ifdef SUPPORT_SD_LOCK
4751 int lock_cmd_fail = 0;
4752 u8 sd_lock_state = 0;
4753 u8 lock_cmd_type = 0;
4756 if (!sd_card->sd_pass_thru_en) {
4757 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4759 return TRANSPORT_FAILED;
4762 if (sd_card->pre_cmd_err) {
4763 sd_card->pre_cmd_err = 0;
4764 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4766 return TRANSPORT_FAILED;
4769 retval = sd_switch_clock(chip);
4770 if (retval != STATUS_SUCCESS) {
4772 return TRANSPORT_FAILED;
4775 cmd_idx = srb->cmnd[2] & 0x3F;
4776 if (srb->cmnd[1] & 0x04)
4779 if (srb->cmnd[1] & 0x02)
4782 if (srb->cmnd[1] & 0x01)
4785 data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8]
4786 << 8) | srb->cmnd[9];
4787 arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
4788 ((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
4790 #ifdef SUPPORT_SD_LOCK
4791 if (cmd_idx == LOCK_UNLOCK) {
4792 sd_lock_state = sd_card->sd_lock_status;
4793 sd_lock_state &= SD_LOCKED;
4797 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
4798 if (retval != STATUS_SUCCESS) {
4799 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4801 return TRANSPORT_FAILED;
4803 sd_card->last_rsp_type = rsp_type;
4805 retval = sd_switch_clock(chip);
4806 if (retval != STATUS_SUCCESS) {
4808 return TRANSPORT_FAILED;
4811 #ifdef SUPPORT_SD_LOCK
4812 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
4813 if (CHK_MMC_8BIT(sd_card)) {
4814 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4816 if (retval != STATUS_SUCCESS) {
4818 return TRANSPORT_FAILED;
4821 } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
4822 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4824 if (retval != STATUS_SUCCESS) {
4826 return TRANSPORT_FAILED;
4831 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
4832 if (retval != STATUS_SUCCESS) {
4834 return TRANSPORT_FAILED;
4838 if (data_len < 512) {
4839 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
4840 SD_RSP_TYPE_R1, NULL, 0, false);
4841 if (retval != STATUS_SUCCESS) {
4843 goto SD_Execute_Write_Cmd_Failed;
4848 retval = sd_select_card(chip, 0);
4849 if (retval != STATUS_SUCCESS) {
4851 goto SD_Execute_Write_Cmd_Failed;
4856 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
4858 SD_RSP_TYPE_R1, NULL, 0, false);
4859 if (retval != STATUS_SUCCESS) {
4861 goto SD_Execute_Write_Cmd_Failed;
4865 retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
4866 sd_card->rsp, rsp_len, false);
4867 if (retval != STATUS_SUCCESS) {
4869 goto SD_Execute_Write_Cmd_Failed;
4872 if (data_len <= 512) {
4876 buf = kmalloc(data_len, GFP_KERNEL);
4879 return TRANSPORT_ERROR;
4882 rtsx_stor_get_xfer_buf(buf, data_len, srb);
4884 #ifdef SUPPORT_SD_LOCK
4885 if (cmd_idx == LOCK_UNLOCK)
4886 lock_cmd_type = buf[0] & 0x0F;
4889 if (data_len > 256) {
4890 rtsx_init_cmd(chip);
4891 for (i = 0; i < 256; i++) {
4892 rtsx_add_cmd(chip, WRITE_REG_CMD,
4893 PPBUF_BASE2 + i, 0xFF, buf[i]);
4895 retval = rtsx_send_cmd(chip, 0, 250);
4896 if (retval != STATUS_SUCCESS) {
4899 goto SD_Execute_Write_Cmd_Failed;
4902 rtsx_init_cmd(chip);
4903 for (i = 256; i < data_len; i++) {
4904 rtsx_add_cmd(chip, WRITE_REG_CMD,
4905 PPBUF_BASE2 + i, 0xFF, buf[i]);
4907 retval = rtsx_send_cmd(chip, 0, 250);
4908 if (retval != STATUS_SUCCESS) {
4911 goto SD_Execute_Write_Cmd_Failed;
4914 rtsx_init_cmd(chip);
4915 for (i = 0; i < data_len; i++) {
4916 rtsx_add_cmd(chip, WRITE_REG_CMD,
4917 PPBUF_BASE2 + i, 0xFF, buf[i]);
4919 retval = rtsx_send_cmd(chip, 0, 250);
4920 if (retval != STATUS_SUCCESS) {
4923 goto SD_Execute_Write_Cmd_Failed;
4929 rtsx_init_cmd(chip);
4931 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
4932 srb->cmnd[8] & 0x03);
4933 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
4935 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
4937 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
4939 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
4942 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
4943 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
4944 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
4945 SD_TRANSFER_END, SD_TRANSFER_END);
4947 retval = rtsx_send_cmd(chip, SD_CARD, 250);
4948 } else if (!(data_len & 0x1FF)) {
4949 rtsx_init_cmd(chip);
4951 trans_dma_enable(DMA_TO_DEVICE, chip, data_len, DMA_512);
4953 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
4955 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
4957 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
4958 0xFF, (srb->cmnd[7] & 0xFE) >> 1);
4959 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
4960 0xFF, (u8)((data_len & 0x0001FE00) >> 9));
4962 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
4963 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
4964 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
4965 SD_TRANSFER_END, SD_TRANSFER_END);
4967 rtsx_send_cmd_no_wait(chip);
4969 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
4970 scsi_bufflen(srb), scsi_sg_count(srb),
4971 DMA_TO_DEVICE, 10000);
4975 goto SD_Execute_Write_Cmd_Failed;
4980 rtsx_clear_sd_error(chip);
4982 goto SD_Execute_Write_Cmd_Failed;
4985 #ifdef SUPPORT_SD_LOCK
4986 if (cmd_idx == LOCK_UNLOCK) {
4987 if (lock_cmd_type == SD_ERASE) {
4988 sd_card->sd_erase_status = SD_UNDER_ERASING;
4989 scsi_set_resid(srb, 0);
4990 return TRANSPORT_GOOD;
4993 rtsx_init_cmd(chip);
4994 rtsx_add_cmd(chip, CHECK_REG_CMD, 0xFD30, 0x02, 0x02);
4996 rtsx_send_cmd(chip, SD_CARD, 250);
4998 retval = sd_update_lock_status(chip);
4999 if (retval != STATUS_SUCCESS) {
5000 dev_dbg(rtsx_dev(chip), "Lock command fail!\n");
5004 #endif /* SUPPORT_SD_LOCK */
5007 retval = sd_select_card(chip, 1);
5008 if (retval != STATUS_SUCCESS) {
5010 goto SD_Execute_Write_Cmd_Failed;
5015 retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
5016 0, SD_RSP_TYPE_R1b, NULL, 0, false);
5017 if (retval != STATUS_SUCCESS) {
5019 goto SD_Execute_Write_Cmd_Failed;
5023 if (data_len < 512) {
5024 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
5025 SD_RSP_TYPE_R1, NULL, 0, false);
5026 if (retval != STATUS_SUCCESS) {
5028 goto SD_Execute_Write_Cmd_Failed;
5031 retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
5032 if (retval != STATUS_SUCCESS) {
5034 goto SD_Execute_Write_Cmd_Failed;
5037 rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
5038 if (retval != STATUS_SUCCESS) {
5040 goto SD_Execute_Write_Cmd_Failed;
5044 if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
5045 cmd13_checkbit = true;
5047 for (i = 0; i < 3; i++) {
5048 retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS,
5050 SD_RSP_TYPE_R1, NULL, 0,
5052 if (retval == STATUS_SUCCESS)
5055 if (retval != STATUS_SUCCESS) {
5057 goto SD_Execute_Write_Cmd_Failed;
5060 #ifdef SUPPORT_SD_LOCK
5061 if (cmd_idx == LOCK_UNLOCK) {
5062 if (!lock_cmd_fail) {
5063 dev_dbg(rtsx_dev(chip), "lock_cmd_type = 0x%x\n",
5065 if (lock_cmd_type & SD_CLR_PWD)
5066 sd_card->sd_lock_status &= ~SD_PWD_EXIST;
5068 if (lock_cmd_type & SD_SET_PWD)
5069 sd_card->sd_lock_status |= SD_PWD_EXIST;
5072 dev_dbg(rtsx_dev(chip), "sd_lock_state = 0x%x, sd_card->sd_lock_status = 0x%x\n",
5073 sd_lock_state, sd_card->sd_lock_status);
5074 if (sd_lock_state ^ (sd_card->sd_lock_status & SD_LOCKED)) {
5075 sd_card->sd_lock_notify = 1;
5076 if (sd_lock_state) {
5077 if (sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) {
5078 sd_card->sd_lock_status |= (
5079 SD_UNLOCK_POW_ON | SD_SDR_RST);
5080 if (CHK_SD(sd_card)) {
5081 retval = reset_sd(chip);
5082 if (retval != STATUS_SUCCESS) {
5083 sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
5085 goto SD_Execute_Write_Cmd_Failed;
5089 sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
5095 if (lock_cmd_fail) {
5096 scsi_set_resid(srb, 0);
5097 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
5099 return TRANSPORT_FAILED;
5101 #endif /* SUPPORT_SD_LOCK */
5103 scsi_set_resid(srb, 0);
5104 return TRANSPORT_GOOD;
5106 SD_Execute_Write_Cmd_Failed:
5107 sd_card->pre_cmd_err = 1;
5108 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
5110 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
5112 release_sd_card(chip);
5113 do_reset_sd_card(chip);
5114 if (!(chip->card_ready & SD_CARD))
5115 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
5118 return TRANSPORT_FAILED;
5121 int sd_get_cmd_rsp(struct scsi_cmnd *srb, struct rtsx_chip *chip)
5123 struct sd_info *sd_card = &(chip->sd_card);
5124 unsigned int lun = SCSI_LUN(srb);
5128 if (!sd_card->sd_pass_thru_en) {
5129 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
5131 return TRANSPORT_FAILED;
5134 if (sd_card->pre_cmd_err) {
5135 sd_card->pre_cmd_err = 0;
5136 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
5138 return TRANSPORT_FAILED;
5141 data_len = ((u16)srb->cmnd[7] << 8) | srb->cmnd[8];
5143 if (sd_card->last_rsp_type == SD_RSP_TYPE_R0) {
5144 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
5146 return TRANSPORT_FAILED;
5147 } else if (sd_card->last_rsp_type == SD_RSP_TYPE_R2) {
5148 count = (data_len < 17) ? data_len : 17;
5150 count = (data_len < 6) ? data_len : 6;
5152 rtsx_stor_set_xfer_buf(sd_card->rsp, count, srb);
5154 dev_dbg(rtsx_dev(chip), "Response length: %d\n", data_len);
5155 dev_dbg(rtsx_dev(chip), "Response: 0x%x 0x%x 0x%x 0x%x\n",
5156 sd_card->rsp[0], sd_card->rsp[1],
5157 sd_card->rsp[2], sd_card->rsp[3]);
5159 scsi_set_resid(srb, 0);
5160 return TRANSPORT_GOOD;
5163 int sd_hw_rst(struct scsi_cmnd *srb, struct rtsx_chip *chip)
5165 struct sd_info *sd_card = &(chip->sd_card);
5166 unsigned int lun = SCSI_LUN(srb);
5169 if (!sd_card->sd_pass_thru_en) {
5170 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
5172 return TRANSPORT_FAILED;
5175 if (sd_card->pre_cmd_err) {
5176 sd_card->pre_cmd_err = 0;
5177 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
5179 return TRANSPORT_FAILED;
5182 if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) ||
5183 (0x20 != srb->cmnd[4]) || (0x43 != srb->cmnd[5]) ||
5184 (0x61 != srb->cmnd[6]) || (0x72 != srb->cmnd[7]) ||
5185 (0x64 != srb->cmnd[8])) {
5186 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
5188 return TRANSPORT_FAILED;
5191 switch (srb->cmnd[1] & 0x0F) {
5193 #ifdef SUPPORT_SD_LOCK
5194 if (0x64 == srb->cmnd[9])
5195 sd_card->sd_lock_status |= SD_SDR_RST;
5197 retval = reset_sd_card(chip);
5198 if (retval != STATUS_SUCCESS) {
5199 #ifdef SUPPORT_SD_LOCK
5200 sd_card->sd_lock_status &= ~SD_SDR_RST;
5202 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
5203 sd_card->pre_cmd_err = 1;
5205 return TRANSPORT_FAILED;
5207 #ifdef SUPPORT_SD_LOCK
5208 sd_card->sd_lock_status &= ~SD_SDR_RST;
5213 retval = soft_reset_sd_card(chip);
5214 if (retval != STATUS_SUCCESS) {
5215 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
5216 sd_card->pre_cmd_err = 1;
5218 return TRANSPORT_FAILED;
5223 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
5225 return TRANSPORT_FAILED;
5228 scsi_set_resid(srb, 0);
5229 return TRANSPORT_GOOD;
5233 void sd_cleanup_work(struct rtsx_chip *chip)
5235 struct sd_info *sd_card = &(chip->sd_card);
5237 if (sd_card->seq_mode) {
5238 dev_dbg(rtsx_dev(chip), "SD: stop transmission\n");
5239 sd_stop_seq_mode(chip);
5240 sd_card->cleanup_counter = 0;
5244 int sd_power_off_card3v3(struct rtsx_chip *chip)
5248 retval = disable_card_clock(chip, SD_CARD);
5249 if (retval != STATUS_SUCCESS) {
5254 retval = rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
5260 if (!chip->ft2_fast_mode) {
5261 retval = card_power_off(chip, SD_CARD);
5262 if (retval != STATUS_SUCCESS) {
5270 if (chip->asic_code) {
5271 retval = sd_pull_ctl_disable(chip);
5272 if (retval != STATUS_SUCCESS) {
5277 retval = rtsx_write_register(chip, FPGA_PULL_CTL,
5278 FPGA_SD_PULL_CTL_BIT | 0x20,
5279 FPGA_SD_PULL_CTL_BIT);
5286 return STATUS_SUCCESS;
5289 int release_sd_card(struct rtsx_chip *chip)
5291 struct sd_info *sd_card = &(chip->sd_card);
5294 chip->card_ready &= ~SD_CARD;
5295 chip->card_fail &= ~SD_CARD;
5296 chip->card_wp &= ~SD_CARD;
5301 #ifdef SUPPORT_SD_LOCK
5302 sd_card->sd_lock_status = 0;
5303 sd_card->sd_erase_status = 0;
5306 memset(sd_card->raw_csd, 0, 16);
5307 memset(sd_card->raw_scr, 0, 8);
5309 retval = sd_power_off_card3v3(chip);
5310 if (retval != STATUS_SUCCESS) {
5315 return STATUS_SUCCESS;