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>
28 #include "rtsx_transport.h"
29 #include "rtsx_scsi.h"
30 #include "rtsx_card.h"
33 #define SD_MAX_RETRY_COUNT 3
35 static u16 REG_SD_CFG1;
36 static u16 REG_SD_CFG2;
37 static u16 REG_SD_CFG3;
38 static u16 REG_SD_STAT1;
39 static u16 REG_SD_STAT2;
40 static u16 REG_SD_BUS_STAT;
41 static u16 REG_SD_PAD_CTL;
42 static u16 REG_SD_SAMPLE_POINT_CTL;
43 static u16 REG_SD_PUSH_POINT_CTL;
44 static u16 REG_SD_CMD0;
45 static u16 REG_SD_CMD1;
46 static u16 REG_SD_CMD2;
47 static u16 REG_SD_CMD3;
48 static u16 REG_SD_CMD4;
49 static u16 REG_SD_CMD5;
50 static u16 REG_SD_BYTE_CNT_L;
51 static u16 REG_SD_BYTE_CNT_H;
52 static u16 REG_SD_BLOCK_CNT_L;
53 static u16 REG_SD_BLOCK_CNT_H;
54 static u16 REG_SD_TRANSFER;
55 static u16 REG_SD_VPCLK0_CTL;
56 static u16 REG_SD_VPCLK1_CTL;
57 static u16 REG_SD_DCMPS0_CTL;
58 static u16 REG_SD_DCMPS1_CTL;
60 static inline void sd_set_err_code(struct rtsx_chip *chip, u8 err_code)
62 struct sd_info *sd_card = &(chip->sd_card);
64 sd_card->err_code |= err_code;
67 static inline void sd_clr_err_code(struct rtsx_chip *chip)
69 struct sd_info *sd_card = &(chip->sd_card);
71 sd_card->err_code = 0;
74 static inline int sd_check_err_code(struct rtsx_chip *chip, u8 err_code)
76 struct sd_info *sd_card = &(chip->sd_card);
78 return sd_card->err_code & err_code;
81 static void sd_init_reg_addr(struct rtsx_chip *chip)
86 REG_SD_STAT1 = 0xFD30;
90 REG_SD_SAMPLE_POINT_CTL = 0;
91 REG_SD_PUSH_POINT_CTL = 0;
98 REG_SD_BYTE_CNT_L = 0xFD39;
99 REG_SD_BYTE_CNT_H = 0xFD3A;
100 REG_SD_BLOCK_CNT_L = 0xFD3B;
101 REG_SD_BLOCK_CNT_H = 0xFD3C;
102 REG_SD_TRANSFER = 0xFD32;
103 REG_SD_VPCLK0_CTL = 0;
104 REG_SD_VPCLK1_CTL = 0;
105 REG_SD_DCMPS0_CTL = 0;
106 REG_SD_DCMPS1_CTL = 0;
109 static int sd_check_data0_status(struct rtsx_chip *chip)
113 RTSX_READ_REG(chip, REG_SD_STAT1, &stat);
115 if (!(stat & SD_DAT0_STATUS)) {
116 sd_set_err_code(chip, SD_BUSY);
117 TRACE_RET(chip, STATUS_FAIL);
120 return STATUS_SUCCESS;
123 static int sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx,
124 u32 arg, u8 rsp_type, u8 *rsp, int rsp_len)
126 struct sd_info *sd_card = &(chip->sd_card);
134 sd_clr_err_code(chip);
136 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d, arg = 0x%08x\n", cmd_idx, arg);
138 if (rsp_type == SD_RSP_TYPE_R1b)
145 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
146 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24));
147 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16));
148 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8));
149 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg);
151 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
152 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE,
153 0x01, PINGPONG_BUFFER);
154 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
155 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
156 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
157 SD_TRANSFER_END | SD_STAT_IDLE, SD_TRANSFER_END | SD_STAT_IDLE);
159 if (rsp_type == SD_RSP_TYPE_R2) {
160 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
162 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
165 } else if (rsp_type != SD_RSP_TYPE_R0) {
166 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
168 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
173 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0);
175 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
179 rtsx_read_register(chip, REG_SD_STAT1, &val);
180 dev_dbg(rtsx_dev(chip), "SD_STAT1: 0x%x\n", val);
182 rtsx_read_register(chip, REG_SD_CFG3, &val);
183 dev_dbg(rtsx_dev(chip), "SD_CFG3: 0x%x\n", val);
185 if (retval == -ETIMEDOUT) {
186 if (rsp_type & SD_WAIT_BUSY_END) {
187 retval = sd_check_data0_status(chip);
188 if (retval != STATUS_SUCCESS) {
189 rtsx_clear_sd_error(chip);
190 TRACE_RET(chip, retval);
193 sd_set_err_code(chip, SD_TO_ERR);
195 retval = STATUS_TIMEDOUT;
197 retval = STATUS_FAIL;
199 rtsx_clear_sd_error(chip);
201 TRACE_RET(chip, retval);
204 if (rsp_type == SD_RSP_TYPE_R0)
205 return STATUS_SUCCESS;
207 ptr = rtsx_get_cmd_data(chip) + 1;
209 if ((ptr[0] & 0xC0) != 0) {
210 sd_set_err_code(chip, SD_STS_ERR);
211 TRACE_RET(chip, STATUS_FAIL);
214 if (!(rsp_type & SD_NO_CHECK_CRC7)) {
215 if (ptr[stat_idx] & SD_CRC7_ERR) {
216 if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
217 sd_set_err_code(chip, SD_CRC_ERR);
218 TRACE_RET(chip, STATUS_FAIL);
220 if (rty_cnt < SD_MAX_RETRY_COUNT) {
225 sd_set_err_code(chip, SD_CRC_ERR);
226 TRACE_RET(chip, STATUS_FAIL);
231 if ((rsp_type == SD_RSP_TYPE_R1) || (rsp_type == SD_RSP_TYPE_R1b)) {
232 if ((cmd_idx != SEND_RELATIVE_ADDR) &&
233 (cmd_idx != SEND_IF_COND)) {
234 if (cmd_idx != STOP_TRANSMISSION) {
236 TRACE_RET(chip, STATUS_FAIL);
238 #ifdef SUPPORT_SD_LOCK
244 dev_dbg(rtsx_dev(chip), "ptr[1]: 0x%02x\n",
246 TRACE_RET(chip, STATUS_FAIL);
249 dev_dbg(rtsx_dev(chip), "ptr[2]: 0x%02x\n",
251 TRACE_RET(chip, STATUS_FAIL);
254 dev_dbg(rtsx_dev(chip), "ptr[3]: 0x%02x\n",
256 TRACE_RET(chip, STATUS_FAIL);
259 sd_card->sd_data_buf_ready = 1;
261 sd_card->sd_data_buf_ready = 0;
266 memcpy(rsp, ptr, rsp_len);
268 return STATUS_SUCCESS;
271 static int sd_read_data(struct rtsx_chip *chip,
272 u8 trans_mode, u8 *cmd, int cmd_len, u16 byte_cnt,
273 u16 blk_cnt, u8 bus_width, u8 *buf, int buf_len,
276 struct sd_info *sd_card = &(chip->sd_card);
280 sd_clr_err_code(chip);
286 TRACE_RET(chip, STATUS_FAIL);
291 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40);
292 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++)
293 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0 + i,
296 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
298 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
299 (u8)(byte_cnt >> 8));
300 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
302 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
305 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
307 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
308 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
309 SD_CHECK_CRC7 | SD_RSP_LEN_6);
310 if (trans_mode != SD_TM_AUTO_TUNING)
311 rtsx_add_cmd(chip, WRITE_REG_CMD,
312 CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER);
314 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
315 trans_mode | SD_TRANSFER_START);
316 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
319 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
321 if (retval == -ETIMEDOUT) {
322 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
323 SD_RSP_TYPE_R1, NULL, 0);
326 TRACE_RET(chip, STATUS_FAIL);
329 if (buf && buf_len) {
330 retval = rtsx_read_ppbuf(chip, buf, buf_len);
331 if (retval != STATUS_SUCCESS)
332 TRACE_RET(chip, STATUS_FAIL);
335 return STATUS_SUCCESS;
338 static int sd_write_data(struct rtsx_chip *chip, u8 trans_mode,
339 u8 *cmd, int cmd_len, u16 byte_cnt, u16 blk_cnt, u8 bus_width,
340 u8 *buf, int buf_len, int timeout)
342 struct sd_info *sd_card = &(chip->sd_card);
346 sd_clr_err_code(chip);
352 /* This function can't write data more than one page */
353 TRACE_RET(chip, STATUS_FAIL);
356 if (buf && buf_len) {
357 retval = rtsx_write_ppbuf(chip, buf, buf_len);
358 if (retval != STATUS_SUCCESS)
359 TRACE_RET(chip, STATUS_FAIL);
365 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40);
366 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++) {
367 rtsx_add_cmd(chip, WRITE_REG_CMD,
368 REG_SD_CMD0 + i, 0xFF, cmd[i]);
371 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
373 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
374 (u8)(byte_cnt >> 8));
375 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
377 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
380 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
382 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
383 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END |
384 SD_CHECK_CRC7 | SD_RSP_LEN_6);
386 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
387 trans_mode | SD_TRANSFER_START);
388 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
391 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
393 if (retval == -ETIMEDOUT) {
394 sd_send_cmd_get_rsp(chip, SEND_STATUS,
395 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
398 TRACE_RET(chip, STATUS_FAIL);
401 return STATUS_SUCCESS;
404 static int sd_check_csd(struct rtsx_chip *chip, char check_wp)
406 struct sd_info *sd_card = &(chip->sd_card);
409 u8 csd_ver, trans_speed;
412 for (i = 0; i < 6; i++) {
413 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
414 sd_set_err_code(chip, SD_NO_CARD);
415 TRACE_RET(chip, STATUS_FAIL);
418 retval = sd_send_cmd_get_rsp(chip, SEND_CSD, sd_card->sd_addr,
419 SD_RSP_TYPE_R2, rsp, 16);
420 if (retval == STATUS_SUCCESS)
425 TRACE_RET(chip, STATUS_FAIL);
427 memcpy(sd_card->raw_csd, rsp + 1, 15);
429 dev_dbg(rtsx_dev(chip), "CSD Response:\n");
430 RTSX_DUMP(sd_card->raw_csd, 16);
432 csd_ver = (rsp[1] & 0xc0) >> 6;
433 dev_dbg(rtsx_dev(chip), "csd_ver = %d\n", csd_ver);
435 trans_speed = rsp[4];
436 if ((trans_speed & 0x07) == 0x02) {
437 if ((trans_speed & 0xf8) >= 0x30) {
439 sd_card->sd_clock = 47;
441 sd_card->sd_clock = CLK_50;
443 } else if ((trans_speed & 0xf8) == 0x28) {
445 sd_card->sd_clock = 39;
447 sd_card->sd_clock = CLK_40;
449 } else if ((trans_speed & 0xf8) == 0x20) {
451 sd_card->sd_clock = 29;
453 sd_card->sd_clock = CLK_30;
455 } else if ((trans_speed & 0xf8) >= 0x10) {
457 sd_card->sd_clock = 23;
459 sd_card->sd_clock = CLK_20;
461 } else if ((trans_speed & 0x08) >= 0x08) {
463 sd_card->sd_clock = 19;
465 sd_card->sd_clock = CLK_20;
467 TRACE_RET(chip, STATUS_FAIL);
470 TRACE_RET(chip, STATUS_FAIL);
473 if (CHK_MMC_SECTOR_MODE(sd_card)) {
474 sd_card->capacity = 0;
476 if ((!CHK_SD_HCXC(sd_card)) || (csd_ver == 0)) {
477 u8 blk_size, c_size_mult;
479 blk_size = rsp[6] & 0x0F;
480 c_size = ((u16)(rsp[7] & 0x03) << 10)
482 + ((u16)(rsp[9] & 0xC0) >> 6);
483 c_size_mult = (u8)((rsp[10] & 0x03) << 1);
484 c_size_mult += (rsp[11] & 0x80) >> 7;
485 sd_card->capacity = (((u32)(c_size + 1)) *
486 (1 << (c_size_mult + 2)))
489 u32 total_sector = 0;
490 total_sector = (((u32)rsp[8] & 0x3f) << 16) |
491 ((u32)rsp[9] << 8) | (u32)rsp[10];
492 sd_card->capacity = (total_sector + 1) << 10;
498 chip->card_wp |= SD_CARD;
500 dev_dbg(rtsx_dev(chip), "CSD WP Status: 0x%x\n", rsp[15]);
503 return STATUS_SUCCESS;
506 static int sd_set_sample_push_timing(struct rtsx_chip *chip)
508 struct sd_info *sd_card = &(chip->sd_card);
512 if ((chip->sd_ctl & SD_PUSH_POINT_CTL_MASK) == SD_PUSH_POINT_DELAY)
515 if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) == SD_SAMPLE_POINT_AUTO) {
516 if (chip->asic_code) {
517 if (CHK_SD_HS(sd_card) || CHK_MMC_52M(sd_card)) {
529 } else if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) ==
530 SD_SAMPLE_POINT_DELAY) {
537 RTSX_WRITE_REG(chip, REG_SD_CFG1, 0x1C, val);
539 return STATUS_SUCCESS;
542 static void sd_choose_proper_clock(struct rtsx_chip *chip)
544 struct sd_info *sd_card = &(chip->sd_card);
546 if (CHK_SD_SDR104(sd_card)) {
548 sd_card->sd_clock = chip->asic_sd_sdr104_clk;
550 sd_card->sd_clock = chip->fpga_sd_sdr104_clk;
552 } else if (CHK_SD_DDR50(sd_card)) {
554 sd_card->sd_clock = chip->asic_sd_ddr50_clk;
556 sd_card->sd_clock = chip->fpga_sd_ddr50_clk;
558 } else if (CHK_SD_SDR50(sd_card)) {
560 sd_card->sd_clock = chip->asic_sd_sdr50_clk;
562 sd_card->sd_clock = chip->fpga_sd_sdr50_clk;
564 } else if (CHK_SD_HS(sd_card)) {
566 sd_card->sd_clock = chip->asic_sd_hs_clk;
568 sd_card->sd_clock = chip->fpga_sd_hs_clk;
570 } else if (CHK_MMC_52M(sd_card) || CHK_MMC_DDR52(sd_card)) {
572 sd_card->sd_clock = chip->asic_mmc_52m_clk;
574 sd_card->sd_clock = chip->fpga_mmc_52m_clk;
576 } else if (CHK_MMC_26M(sd_card)) {
578 sd_card->sd_clock = 48;
580 sd_card->sd_clock = CLK_50;
584 static int sd_set_clock_divider(struct rtsx_chip *chip, u8 clk_div)
586 u8 mask = 0, val = 0;
589 if (clk_div == SD_CLK_DIVIDE_0)
591 else if (clk_div == SD_CLK_DIVIDE_128)
593 else if (clk_div == SD_CLK_DIVIDE_256)
596 RTSX_WRITE_REG(chip, REG_SD_CFG1, mask, val);
598 return STATUS_SUCCESS;
601 static int sd_set_init_para(struct rtsx_chip *chip)
603 struct sd_info *sd_card = &(chip->sd_card);
606 retval = sd_set_sample_push_timing(chip);
607 if (retval != STATUS_SUCCESS)
608 TRACE_RET(chip, STATUS_FAIL);
610 sd_choose_proper_clock(chip);
612 retval = switch_clock(chip, sd_card->sd_clock);
613 if (retval != STATUS_SUCCESS)
614 TRACE_RET(chip, STATUS_FAIL);
616 return STATUS_SUCCESS;
619 int sd_select_card(struct rtsx_chip *chip, int select)
621 struct sd_info *sd_card = &(chip->sd_card);
623 u8 cmd_idx, cmd_type;
627 cmd_idx = SELECT_CARD;
628 cmd_type = SD_RSP_TYPE_R1;
629 addr = sd_card->sd_addr;
631 cmd_idx = DESELECT_CARD;
632 cmd_type = SD_RSP_TYPE_R0;
636 retval = sd_send_cmd_get_rsp(chip, cmd_idx, addr, cmd_type, NULL, 0);
637 if (retval != STATUS_SUCCESS)
638 TRACE_RET(chip, STATUS_FAIL);
640 return STATUS_SUCCESS;
643 #ifdef SUPPORT_SD_LOCK
644 static int sd_update_lock_status(struct rtsx_chip *chip)
646 struct sd_info *sd_card = &(chip->sd_card);
650 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
651 SD_RSP_TYPE_R1, rsp, 5);
652 if (retval != STATUS_SUCCESS)
653 TRACE_RET(chip, STATUS_FAIL);
656 sd_card->sd_lock_status |= SD_LOCKED;
658 sd_card->sd_lock_status &= ~SD_LOCKED;
660 dev_dbg(rtsx_dev(chip), "sd_card->sd_lock_status = 0x%x\n",
661 sd_card->sd_lock_status);
664 TRACE_RET(chip, STATUS_FAIL);
666 return STATUS_SUCCESS;
670 static int sd_wait_state_data_ready(struct rtsx_chip *chip, u8 state,
671 u8 data_ready, int polling_cnt)
673 struct sd_info *sd_card = &(chip->sd_card);
677 for (i = 0; i < polling_cnt; i++) {
678 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
679 sd_card->sd_addr, SD_RSP_TYPE_R1, rsp,
681 if (retval != STATUS_SUCCESS)
682 TRACE_RET(chip, STATUS_FAIL);
684 if (((rsp[3] & 0x1E) == state) &&
685 ((rsp[3] & 0x01) == data_ready))
686 return STATUS_SUCCESS;
689 TRACE_RET(chip, STATUS_FAIL);
692 static int sd_change_bank_voltage(struct rtsx_chip *chip, u8 voltage)
696 if (voltage == SD_IO_3V3) {
697 if (chip->asic_code) {
698 retval = rtsx_write_phy_register(chip, 0x08,
701 if (retval != STATUS_SUCCESS)
702 TRACE_RET(chip, STATUS_FAIL);
704 RTSX_WRITE_REG(chip, SD_PAD_CTL, SD_IO_USING_1V8, 0);
706 } else if (voltage == SD_IO_1V8) {
707 if (chip->asic_code) {
708 retval = rtsx_write_phy_register(chip, 0x08,
711 if (retval != STATUS_SUCCESS)
712 TRACE_RET(chip, STATUS_FAIL);
714 RTSX_WRITE_REG(chip, SD_PAD_CTL, SD_IO_USING_1V8,
718 TRACE_RET(chip, STATUS_FAIL);
721 return STATUS_SUCCESS;
724 static int sd_voltage_switch(struct rtsx_chip *chip)
729 RTSX_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
732 retval = sd_send_cmd_get_rsp(chip, VOLTAGE_SWITCH, 0, SD_RSP_TYPE_R1,
734 if (retval != STATUS_SUCCESS)
735 TRACE_RET(chip, STATUS_FAIL);
737 udelay(chip->sd_voltage_switch_delay);
739 RTSX_READ_REG(chip, SD_BUS_STAT, &stat);
740 if (stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
741 SD_DAT1_STATUS | SD_DAT0_STATUS)) {
742 TRACE_RET(chip, STATUS_FAIL);
745 RTSX_WRITE_REG(chip, SD_BUS_STAT, 0xFF, SD_CLK_FORCE_STOP);
746 retval = sd_change_bank_voltage(chip, SD_IO_1V8);
747 if (retval != STATUS_SUCCESS)
748 TRACE_RET(chip, STATUS_FAIL);
752 RTSX_WRITE_REG(chip, SD_BUS_STAT, 0xFF, SD_CLK_TOGGLE_EN);
755 RTSX_READ_REG(chip, SD_BUS_STAT, &stat);
756 if ((stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
757 SD_DAT1_STATUS | SD_DAT0_STATUS)) !=
758 (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
759 SD_DAT1_STATUS | SD_DAT0_STATUS)) {
760 dev_dbg(rtsx_dev(chip), "SD_BUS_STAT: 0x%x\n", stat);
761 rtsx_write_register(chip, SD_BUS_STAT,
762 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
763 rtsx_write_register(chip, CARD_CLK_EN, 0xFF, 0);
764 TRACE_RET(chip, STATUS_FAIL);
767 RTSX_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
770 return STATUS_SUCCESS;
773 static int sd_reset_dcm(struct rtsx_chip *chip, u8 tune_dir)
775 if (tune_dir == TUNE_RX) {
776 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RESET | DCM_RX);
777 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RX);
779 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RESET | DCM_TX);
780 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_TX);
783 return STATUS_SUCCESS;
786 static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir)
788 struct sd_info *sd_card = &(chip->sd_card);
789 u16 SD_VP_CTL, SD_DCMPS_CTL;
794 dev_dbg(rtsx_dev(chip), "sd_change_phase (sample_point = %d, tune_dir = %d)\n",
795 sample_point, tune_dir);
797 if (tune_dir == TUNE_RX) {
798 SD_VP_CTL = SD_VPRX_CTL;
799 SD_DCMPS_CTL = SD_DCMPS_RX_CTL;
800 if (CHK_SD_DDR50(sd_card))
803 SD_VP_CTL = SD_VPTX_CTL;
804 SD_DCMPS_CTL = SD_DCMPS_TX_CTL;
807 if (chip->asic_code) {
808 RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, CHANGE_CLK);
809 RTSX_WRITE_REG(chip, SD_VP_CTL, 0x1F, sample_point);
810 RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET, 0);
811 RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET,
813 RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, 0);
815 #ifdef CONFIG_RTS5208_DEBUG
816 rtsx_read_register(chip, SD_VP_CTL, &val);
817 dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
818 rtsx_read_register(chip, SD_DCMPS_CTL, &val);
819 dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val);
823 RTSX_WRITE_REG(chip, SD_VP_CTL, PHASE_CHANGE,
826 RTSX_WRITE_REG(chip, SD_VP_CTL, 0xFF,
827 PHASE_CHANGE | PHASE_NOT_RESET | sample_point);
829 RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, CHANGE_CLK);
831 RTSX_WRITE_REG(chip, SD_VP_CTL, 0xFF,
832 PHASE_NOT_RESET | sample_point);
837 rtsx_add_cmd(chip, WRITE_REG_CMD, SD_DCMPS_CTL, DCMPS_CHANGE,
839 rtsx_add_cmd(chip, CHECK_REG_CMD, SD_DCMPS_CTL,
840 DCMPS_CHANGE_DONE, DCMPS_CHANGE_DONE);
841 retval = rtsx_send_cmd(chip, SD_CARD, 100);
842 if (retval != STATUS_SUCCESS)
843 TRACE_GOTO(chip, Fail);
845 val = *rtsx_get_cmd_data(chip);
846 if (val & DCMPS_ERROR)
847 TRACE_GOTO(chip, Fail);
849 if ((val & DCMPS_CURRENT_PHASE) != sample_point)
850 TRACE_GOTO(chip, Fail);
852 RTSX_WRITE_REG(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
854 RTSX_WRITE_REG(chip, SD_VP_CTL, PHASE_CHANGE, 0);
856 RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, 0);
861 RTSX_WRITE_REG(chip, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0);
863 return STATUS_SUCCESS;
866 #ifdef CONFIG_RTS5208_DEBUG
867 rtsx_read_register(chip, SD_VP_CTL, &val);
868 dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
869 rtsx_read_register(chip, SD_DCMPS_CTL, &val);
870 dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val);
872 rtsx_write_register(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
873 rtsx_write_register(chip, SD_VP_CTL, PHASE_CHANGE, 0);
875 sd_reset_dcm(chip, tune_dir);
879 static int sd_check_spec(struct rtsx_chip *chip, u8 bus_width)
881 struct sd_info *sd_card = &(chip->sd_card);
885 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
886 SD_RSP_TYPE_R1, NULL, 0);
887 if (retval != STATUS_SUCCESS)
888 TRACE_RET(chip, STATUS_FAIL);
890 cmd[0] = 0x40 | SEND_SCR;
896 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 8, 1, bus_width,
898 if (retval != STATUS_SUCCESS) {
899 rtsx_clear_sd_error(chip);
900 TRACE_RET(chip, STATUS_FAIL);
903 memcpy(sd_card->raw_scr, buf, 8);
905 if ((buf[0] & 0x0F) == 0)
906 TRACE_RET(chip, STATUS_FAIL);
908 return STATUS_SUCCESS;
911 static int sd_query_switch_result(struct rtsx_chip *chip, u8 func_group,
912 u8 func_to_switch, u8 *buf, int buf_len)
914 u8 support_mask = 0, query_switch = 0, switch_busy = 0;
915 int support_offset = 0, query_switch_offset = 0, check_busy_offset = 0;
917 if (func_group == SD_FUNC_GROUP_1) {
918 support_offset = FUNCTION_GROUP1_SUPPORT_OFFSET;
919 query_switch_offset = FUNCTION_GROUP1_QUERY_SWITCH_OFFSET;
920 check_busy_offset = FUNCTION_GROUP1_CHECK_BUSY_OFFSET;
922 switch (func_to_switch) {
924 support_mask = HS_SUPPORT_MASK;
925 query_switch = HS_QUERY_SWITCH_OK;
926 switch_busy = HS_SWITCH_BUSY;
930 support_mask = SDR50_SUPPORT_MASK;
931 query_switch = SDR50_QUERY_SWITCH_OK;
932 switch_busy = SDR50_SWITCH_BUSY;
936 support_mask = SDR104_SUPPORT_MASK;
937 query_switch = SDR104_QUERY_SWITCH_OK;
938 switch_busy = SDR104_SWITCH_BUSY;
942 support_mask = DDR50_SUPPORT_MASK;
943 query_switch = DDR50_QUERY_SWITCH_OK;
944 switch_busy = DDR50_SWITCH_BUSY;
948 TRACE_RET(chip, STATUS_FAIL);
950 } else if (func_group == SD_FUNC_GROUP_3) {
951 support_offset = FUNCTION_GROUP3_SUPPORT_OFFSET;
952 query_switch_offset = FUNCTION_GROUP3_QUERY_SWITCH_OFFSET;
953 check_busy_offset = FUNCTION_GROUP3_CHECK_BUSY_OFFSET;
955 switch (func_to_switch) {
957 support_mask = DRIVING_TYPE_A_MASK;
958 query_switch = TYPE_A_QUERY_SWITCH_OK;
959 switch_busy = TYPE_A_SWITCH_BUSY;
963 support_mask = DRIVING_TYPE_C_MASK;
964 query_switch = TYPE_C_QUERY_SWITCH_OK;
965 switch_busy = TYPE_C_SWITCH_BUSY;
969 support_mask = DRIVING_TYPE_D_MASK;
970 query_switch = TYPE_D_QUERY_SWITCH_OK;
971 switch_busy = TYPE_D_SWITCH_BUSY;
975 TRACE_RET(chip, STATUS_FAIL);
977 } else if (func_group == SD_FUNC_GROUP_4) {
978 support_offset = FUNCTION_GROUP4_SUPPORT_OFFSET;
979 query_switch_offset = FUNCTION_GROUP4_QUERY_SWITCH_OFFSET;
980 check_busy_offset = FUNCTION_GROUP4_CHECK_BUSY_OFFSET;
982 switch (func_to_switch) {
983 case CURRENT_LIMIT_400:
984 support_mask = CURRENT_LIMIT_400_MASK;
985 query_switch = CURRENT_LIMIT_400_QUERY_SWITCH_OK;
986 switch_busy = CURRENT_LIMIT_400_SWITCH_BUSY;
989 case CURRENT_LIMIT_600:
990 support_mask = CURRENT_LIMIT_600_MASK;
991 query_switch = CURRENT_LIMIT_600_QUERY_SWITCH_OK;
992 switch_busy = CURRENT_LIMIT_600_SWITCH_BUSY;
995 case CURRENT_LIMIT_800:
996 support_mask = CURRENT_LIMIT_800_MASK;
997 query_switch = CURRENT_LIMIT_800_QUERY_SWITCH_OK;
998 switch_busy = CURRENT_LIMIT_800_SWITCH_BUSY;
1002 TRACE_RET(chip, STATUS_FAIL);
1005 TRACE_RET(chip, STATUS_FAIL);
1008 if (func_group == SD_FUNC_GROUP_1) {
1009 if (!(buf[support_offset] & support_mask) ||
1010 ((buf[query_switch_offset] & 0x0F) != query_switch)) {
1011 TRACE_RET(chip, STATUS_FAIL);
1015 /* Check 'Busy Status' */
1016 if ((buf[DATA_STRUCTURE_VER_OFFSET] == 0x01) &&
1017 ((buf[check_busy_offset] & switch_busy) == switch_busy)) {
1018 TRACE_RET(chip, STATUS_FAIL);
1021 return STATUS_SUCCESS;
1024 static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode,
1025 u8 func_group, u8 func_to_switch, u8 bus_width)
1027 struct sd_info *sd_card = &(chip->sd_card);
1031 dev_dbg(rtsx_dev(chip), "sd_check_switch_mode (mode = %d, func_group = %d, func_to_switch = %d)\n",
1032 mode, func_group, func_to_switch);
1034 cmd[0] = 0x40 | SWITCH;
1037 if (func_group == SD_FUNC_GROUP_1) {
1040 cmd[4] = 0xF0 + func_to_switch;
1041 } else if (func_group == SD_FUNC_GROUP_3) {
1043 cmd[3] = 0xF0 + func_to_switch;
1045 } else if (func_group == SD_FUNC_GROUP_4) {
1047 cmd[3] = 0x0F + (func_to_switch << 4);
1050 cmd[1] = SD_CHECK_MODE;
1056 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1, bus_width,
1058 if (retval != STATUS_SUCCESS) {
1059 rtsx_clear_sd_error(chip);
1060 TRACE_RET(chip, STATUS_FAIL);
1065 if (func_group == NO_ARGUMENT) {
1066 sd_card->func_group1_mask = buf[0x0D];
1067 sd_card->func_group2_mask = buf[0x0B];
1068 sd_card->func_group3_mask = buf[0x09];
1069 sd_card->func_group4_mask = buf[0x07];
1071 dev_dbg(rtsx_dev(chip), "func_group1_mask = 0x%02x\n",
1073 dev_dbg(rtsx_dev(chip), "func_group2_mask = 0x%02x\n",
1075 dev_dbg(rtsx_dev(chip), "func_group3_mask = 0x%02x\n",
1077 dev_dbg(rtsx_dev(chip), "func_group4_mask = 0x%02x\n",
1080 /* Maximum current consumption, check whether current is
1081 * acceptable; bit[511:496] = 0x0000 means some error happened.
1083 u16 cc = ((u16)buf[0] << 8) | buf[1];
1084 dev_dbg(rtsx_dev(chip), "Maximum current consumption: %dmA\n",
1086 if ((cc == 0) || (cc > 800))
1087 TRACE_RET(chip, STATUS_FAIL);
1089 retval = sd_query_switch_result(chip, func_group,
1090 func_to_switch, buf, 64);
1091 if (retval != STATUS_SUCCESS)
1092 TRACE_RET(chip, STATUS_FAIL);
1094 if ((cc > 400) || (func_to_switch > CURRENT_LIMIT_400)) {
1095 RTSX_WRITE_REG(chip, OCPPARA2, SD_OCP_THD_MASK,
1096 chip->sd_800mA_ocp_thd);
1097 RTSX_WRITE_REG(chip, CARD_PWR_CTL, PMOS_STRG_MASK,
1102 return STATUS_SUCCESS;
1105 static u8 downgrade_switch_mode(u8 func_group, u8 func_to_switch)
1107 if (func_group == SD_FUNC_GROUP_1) {
1108 if (func_to_switch > HS_SUPPORT)
1111 } else if (func_group == SD_FUNC_GROUP_4) {
1112 if (func_to_switch > CURRENT_LIMIT_200)
1116 return func_to_switch;
1119 static int sd_check_switch(struct rtsx_chip *chip,
1120 u8 func_group, u8 func_to_switch, u8 bus_width)
1124 int switch_good = 0;
1126 for (i = 0; i < 3; i++) {
1127 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1128 sd_set_err_code(chip, SD_NO_CARD);
1129 TRACE_RET(chip, STATUS_FAIL);
1132 retval = sd_check_switch_mode(chip, SD_CHECK_MODE, func_group,
1133 func_to_switch, bus_width);
1134 if (retval == STATUS_SUCCESS) {
1137 retval = sd_check_switch_mode(chip, SD_SWITCH_MODE,
1138 func_group, func_to_switch, bus_width);
1139 if (retval == STATUS_SUCCESS) {
1144 RTSX_READ_REG(chip, SD_STAT1, &stat);
1145 if (stat & SD_CRC16_ERR) {
1146 dev_dbg(rtsx_dev(chip), "SD CRC16 error when switching mode\n");
1147 TRACE_RET(chip, STATUS_FAIL);
1151 func_to_switch = downgrade_switch_mode(func_group,
1158 TRACE_RET(chip, STATUS_FAIL);
1160 return STATUS_SUCCESS;
1163 static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width)
1165 struct sd_info *sd_card = &(chip->sd_card);
1168 u8 func_to_switch = 0;
1170 /* Get supported functions */
1171 retval = sd_check_switch_mode(chip, SD_CHECK_MODE,
1172 NO_ARGUMENT, NO_ARGUMENT, bus_width);
1173 if (retval != STATUS_SUCCESS)
1174 TRACE_RET(chip, STATUS_FAIL);
1176 sd_card->func_group1_mask &= ~(sd_card->sd_switch_fail);
1178 /* Function Group 1: Access Mode */
1179 for (i = 0; i < 4; i++) {
1180 switch ((u8)(chip->sd_speed_prior >> (i*8))) {
1181 case SDR104_SUPPORT:
1182 if ((sd_card->func_group1_mask & SDR104_SUPPORT_MASK)
1183 && chip->sdr104_en) {
1184 func_to_switch = SDR104_SUPPORT;
1189 if ((sd_card->func_group1_mask & DDR50_SUPPORT_MASK)
1190 && chip->ddr50_en) {
1191 func_to_switch = DDR50_SUPPORT;
1196 if ((sd_card->func_group1_mask & SDR50_SUPPORT_MASK)
1197 && chip->sdr50_en) {
1198 func_to_switch = SDR50_SUPPORT;
1203 if (sd_card->func_group1_mask & HS_SUPPORT_MASK)
1204 func_to_switch = HS_SUPPORT;
1217 dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_1: func_to_switch = 0x%02x",
1220 #ifdef SUPPORT_SD_LOCK
1221 if ((sd_card->sd_lock_status & SD_SDR_RST)
1222 && (DDR50_SUPPORT == func_to_switch)
1223 && (sd_card->func_group1_mask & SDR50_SUPPORT_MASK)) {
1224 func_to_switch = SDR50_SUPPORT;
1225 dev_dbg(rtsx_dev(chip), "Using SDR50 instead of DDR50 for SD Lock\n");
1229 if (func_to_switch) {
1230 retval = sd_check_switch(chip, SD_FUNC_GROUP_1, func_to_switch,
1232 if (retval != STATUS_SUCCESS) {
1233 if (func_to_switch == SDR104_SUPPORT) {
1234 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK;
1235 } else if (func_to_switch == DDR50_SUPPORT) {
1236 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
1238 } else if (func_to_switch == SDR50_SUPPORT) {
1239 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
1240 DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK;
1242 TRACE_RET(chip, STATUS_FAIL);
1245 if (func_to_switch == SDR104_SUPPORT)
1246 SET_SD_SDR104(sd_card);
1247 else if (func_to_switch == DDR50_SUPPORT)
1248 SET_SD_DDR50(sd_card);
1249 else if (func_to_switch == SDR50_SUPPORT)
1250 SET_SD_SDR50(sd_card);
1255 if (CHK_SD_DDR50(sd_card)) {
1256 RTSX_WRITE_REG(chip, SD_PUSH_POINT_CTL, 0x06, 0x04);
1257 retval = sd_set_sample_push_timing(chip);
1258 if (retval != STATUS_SUCCESS)
1259 TRACE_RET(chip, STATUS_FAIL);
1262 if (!func_to_switch || (func_to_switch == HS_SUPPORT)) {
1263 /* Do not try to switch current limit if the card doesn't
1264 * support UHS mode or we don't want it to support UHS mode
1266 return STATUS_SUCCESS;
1269 /* Function Group 4: Current Limit */
1270 func_to_switch = 0xFF;
1272 for (i = 0; i < 4; i++) {
1273 switch ((u8)(chip->sd_current_prior >> (i*8))) {
1274 case CURRENT_LIMIT_800:
1275 if (sd_card->func_group4_mask & CURRENT_LIMIT_800_MASK)
1276 func_to_switch = CURRENT_LIMIT_800;
1280 case CURRENT_LIMIT_600:
1281 if (sd_card->func_group4_mask & CURRENT_LIMIT_600_MASK)
1282 func_to_switch = CURRENT_LIMIT_600;
1286 case CURRENT_LIMIT_400:
1287 if (sd_card->func_group4_mask & CURRENT_LIMIT_400_MASK)
1288 func_to_switch = CURRENT_LIMIT_400;
1292 case CURRENT_LIMIT_200:
1293 if (sd_card->func_group4_mask & CURRENT_LIMIT_200_MASK)
1294 func_to_switch = CURRENT_LIMIT_200;
1302 if (func_to_switch != 0xFF)
1306 dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_4: func_to_switch = 0x%02x",
1309 if (func_to_switch <= CURRENT_LIMIT_800) {
1310 retval = sd_check_switch(chip, SD_FUNC_GROUP_4, func_to_switch,
1312 if (retval != STATUS_SUCCESS) {
1313 if (sd_check_err_code(chip, SD_NO_CARD))
1314 TRACE_RET(chip, STATUS_FAIL);
1316 dev_dbg(rtsx_dev(chip), "Switch current limit finished! (%d)\n",
1320 if (CHK_SD_DDR50(sd_card))
1321 RTSX_WRITE_REG(chip, SD_PUSH_POINT_CTL, 0x06, 0);
1323 return STATUS_SUCCESS;
1326 static int sd_wait_data_idle(struct rtsx_chip *chip)
1328 int retval = STATUS_TIMEDOUT;
1332 for (i = 0; i < 100; i++) {
1333 RTSX_READ_REG(chip, SD_DATA_STATE, &val);
1334 if (val & SD_DATA_IDLE) {
1335 retval = STATUS_SUCCESS;
1340 dev_dbg(rtsx_dev(chip), "SD_DATA_STATE: 0x%02x\n", val);
1345 static int sd_sdr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1350 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1351 if (retval != STATUS_SUCCESS)
1352 TRACE_RET(chip, STATUS_FAIL);
1354 cmd[0] = 0x40 | SEND_TUNING_PATTERN;
1360 retval = sd_read_data(chip, SD_TM_AUTO_TUNING,
1361 cmd, 5, 0x40, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
1362 if (retval != STATUS_SUCCESS) {
1363 (void)sd_wait_data_idle(chip);
1365 rtsx_clear_sd_error(chip);
1366 TRACE_RET(chip, STATUS_FAIL);
1369 return STATUS_SUCCESS;
1372 static int sd_ddr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1374 struct sd_info *sd_card = &(chip->sd_card);
1378 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1379 if (retval != STATUS_SUCCESS)
1380 TRACE_RET(chip, STATUS_FAIL);
1382 dev_dbg(rtsx_dev(chip), "sd ddr tuning rx\n");
1384 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
1385 SD_RSP_TYPE_R1, NULL, 0);
1386 if (retval != STATUS_SUCCESS)
1387 TRACE_RET(chip, STATUS_FAIL);
1389 cmd[0] = 0x40 | SD_STATUS;
1395 retval = sd_read_data(chip, SD_TM_NORMAL_READ,
1396 cmd, 5, 64, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
1397 if (retval != STATUS_SUCCESS) {
1398 (void)sd_wait_data_idle(chip);
1400 rtsx_clear_sd_error(chip);
1401 TRACE_RET(chip, STATUS_FAIL);
1404 return STATUS_SUCCESS;
1407 static int mmc_ddr_tunning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1409 struct sd_info *sd_card = &(chip->sd_card);
1411 u8 cmd[5], bus_width;
1413 if (CHK_MMC_8BIT(sd_card))
1414 bus_width = SD_BUS_WIDTH_8;
1415 else if (CHK_MMC_4BIT(sd_card))
1416 bus_width = SD_BUS_WIDTH_4;
1418 bus_width = SD_BUS_WIDTH_1;
1420 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1421 if (retval != STATUS_SUCCESS)
1422 TRACE_RET(chip, STATUS_FAIL);
1424 dev_dbg(rtsx_dev(chip), "mmc ddr tuning rx\n");
1426 cmd[0] = 0x40 | SEND_EXT_CSD;
1432 retval = sd_read_data(chip, SD_TM_NORMAL_READ,
1433 cmd, 5, 0x200, 1, bus_width, NULL, 0, 100);
1434 if (retval != STATUS_SUCCESS) {
1435 (void)sd_wait_data_idle(chip);
1437 rtsx_clear_sd_error(chip);
1438 TRACE_RET(chip, STATUS_FAIL);
1441 return STATUS_SUCCESS;
1444 static int sd_sdr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
1446 struct sd_info *sd_card = &(chip->sd_card);
1449 retval = sd_change_phase(chip, sample_point, TUNE_TX);
1450 if (retval != STATUS_SUCCESS)
1451 TRACE_RET(chip, STATUS_FAIL);
1453 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1454 SD_RSP_80CLK_TIMEOUT_EN);
1456 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
1457 SD_RSP_TYPE_R1, NULL, 0);
1458 if (retval != STATUS_SUCCESS) {
1459 if (sd_check_err_code(chip, SD_RSP_TIMEOUT)) {
1460 rtsx_write_register(chip, SD_CFG3,
1461 SD_RSP_80CLK_TIMEOUT_EN, 0);
1462 TRACE_RET(chip, STATUS_FAIL);
1466 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1468 return STATUS_SUCCESS;
1471 static int sd_ddr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
1473 struct sd_info *sd_card = &(chip->sd_card);
1475 u8 cmd[5], bus_width;
1477 retval = sd_change_phase(chip, sample_point, TUNE_TX);
1478 if (retval != STATUS_SUCCESS)
1479 TRACE_RET(chip, STATUS_FAIL);
1481 if (CHK_SD(sd_card)) {
1482 bus_width = SD_BUS_WIDTH_4;
1484 if (CHK_MMC_8BIT(sd_card))
1485 bus_width = SD_BUS_WIDTH_8;
1486 else if (CHK_MMC_4BIT(sd_card))
1487 bus_width = SD_BUS_WIDTH_4;
1489 bus_width = SD_BUS_WIDTH_1;
1492 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
1493 if (retval != STATUS_SUCCESS)
1494 TRACE_RET(chip, STATUS_FAIL);
1496 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1497 SD_RSP_80CLK_TIMEOUT_EN);
1499 cmd[0] = 0x40 | PROGRAM_CSD;
1505 retval = sd_write_data(chip, SD_TM_AUTO_WRITE_2,
1506 cmd, 5, 16, 1, bus_width, sd_card->raw_csd, 16, 100);
1507 if (retval != STATUS_SUCCESS) {
1508 rtsx_clear_sd_error(chip);
1509 rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1510 TRACE_RET(chip, STATUS_FAIL);
1513 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1515 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1,
1518 return STATUS_SUCCESS;
1521 static u8 sd_search_final_phase(struct rtsx_chip *chip, u32 phase_map,
1524 struct sd_info *sd_card = &(chip->sd_card);
1525 struct timing_phase_path path[MAX_PHASE + 1];
1526 int i, j, cont_path_cnt;
1527 int new_block, max_len, final_path_idx;
1528 u8 final_phase = 0xFF;
1530 if (phase_map == 0xFFFFFFFF) {
1531 if (tune_dir == TUNE_RX)
1532 final_phase = (u8)chip->sd_default_rx_phase;
1534 final_phase = (u8)chip->sd_default_tx_phase;
1542 for (i = 0; i < MAX_PHASE + 1; i++) {
1543 if (phase_map & (1 << i)) {
1546 j = cont_path_cnt++;
1554 if (cont_path_cnt) {
1555 int idx = cont_path_cnt - 1;
1556 path[idx].len = path[idx].end -
1557 path[idx].start + 1;
1558 path[idx].mid = path[idx].start +
1564 if (cont_path_cnt == 0) {
1565 dev_dbg(rtsx_dev(chip), "No continuous phase path\n");
1568 int idx = cont_path_cnt - 1;
1569 path[idx].len = path[idx].end - path[idx].start + 1;
1570 path[idx].mid = path[idx].start + path[idx].len / 2;
1573 if ((path[0].start == 0) &&
1574 (path[cont_path_cnt - 1].end == MAX_PHASE)) {
1575 path[0].start = path[cont_path_cnt - 1].start - MAX_PHASE - 1;
1576 path[0].len += path[cont_path_cnt - 1].len;
1577 path[0].mid = path[0].start + path[0].len / 2;
1578 if (path[0].mid < 0)
1579 path[0].mid += MAX_PHASE + 1;
1587 for (i = 0; i < cont_path_cnt; i++) {
1588 if (path[i].len > max_len) {
1589 max_len = path[i].len;
1590 final_phase = (u8)path[i].mid;
1594 dev_dbg(rtsx_dev(chip), "path[%d].start = %d\n",
1596 dev_dbg(rtsx_dev(chip), "path[%d].end = %d\n", i, path[i].end);
1597 dev_dbg(rtsx_dev(chip), "path[%d].len = %d\n", i, path[i].len);
1598 dev_dbg(rtsx_dev(chip), "path[%d].mid = %d\n", i, path[i].mid);
1599 dev_dbg(rtsx_dev(chip), "\n");
1602 if (tune_dir == TUNE_TX) {
1603 if (CHK_SD_SDR104(sd_card)) {
1605 int temp_mid = (max_len - 16) / 2;
1606 int temp_final_phase =
1607 path[final_path_idx].end -
1608 (max_len - (6 + temp_mid));
1610 if (temp_final_phase < 0)
1611 final_phase = (u8)(temp_final_phase +
1614 final_phase = (u8)temp_final_phase;
1616 } else if (CHK_SD_SDR50(sd_card)) {
1618 int temp_mid = (max_len - 13) / 2;
1619 int temp_final_phase =
1620 path[final_path_idx].end -
1621 (max_len - (3 + temp_mid));
1623 if (temp_final_phase < 0)
1624 final_phase = (u8)(temp_final_phase +
1627 final_phase = (u8)temp_final_phase;
1633 dev_dbg(rtsx_dev(chip), "Final chosen phase: %d\n", final_phase);
1637 static int sd_tuning_rx(struct rtsx_chip *chip)
1639 struct sd_info *sd_card = &(chip->sd_card);
1642 u32 raw_phase_map[3], phase_map;
1644 int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
1646 if (CHK_SD(sd_card)) {
1647 if (CHK_SD_DDR50(sd_card))
1648 tuning_cmd = sd_ddr_tuning_rx_cmd;
1650 tuning_cmd = sd_sdr_tuning_rx_cmd;
1653 if (CHK_MMC_DDR52(sd_card))
1654 tuning_cmd = mmc_ddr_tunning_rx_cmd;
1656 TRACE_RET(chip, STATUS_FAIL);
1659 for (i = 0; i < 3; i++) {
1660 raw_phase_map[i] = 0;
1661 for (j = MAX_PHASE; j >= 0; j--) {
1662 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1663 sd_set_err_code(chip, SD_NO_CARD);
1664 TRACE_RET(chip, STATUS_FAIL);
1667 retval = tuning_cmd(chip, (u8)j);
1668 if (retval == STATUS_SUCCESS)
1669 raw_phase_map[i] |= 1 << j;
1673 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1674 for (i = 0; i < 3; i++)
1675 dev_dbg(rtsx_dev(chip), "RX raw_phase_map[%d] = 0x%08x\n",
1676 i, raw_phase_map[i]);
1678 dev_dbg(rtsx_dev(chip), "RX phase_map = 0x%08x\n", phase_map);
1680 final_phase = sd_search_final_phase(chip, phase_map, TUNE_RX);
1681 if (final_phase == 0xFF)
1682 TRACE_RET(chip, STATUS_FAIL);
1684 retval = sd_change_phase(chip, final_phase, TUNE_RX);
1685 if (retval != STATUS_SUCCESS)
1686 TRACE_RET(chip, STATUS_FAIL);
1688 return STATUS_SUCCESS;
1691 static int sd_ddr_pre_tuning_tx(struct rtsx_chip *chip)
1693 struct sd_info *sd_card = &(chip->sd_card);
1699 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1700 SD_RSP_80CLK_TIMEOUT_EN);
1703 for (i = MAX_PHASE; i >= 0; i--) {
1704 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1705 sd_set_err_code(chip, SD_NO_CARD);
1706 rtsx_write_register(chip, SD_CFG3,
1707 SD_RSP_80CLK_TIMEOUT_EN, 0);
1708 TRACE_RET(chip, STATUS_FAIL);
1711 retval = sd_change_phase(chip, (u8)i, TUNE_TX);
1712 if (retval != STATUS_SUCCESS)
1715 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
1716 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL,
1718 if ((retval == STATUS_SUCCESS) ||
1719 !sd_check_err_code(chip, SD_RSP_TIMEOUT))
1720 phase_map |= 1 << i;
1723 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1725 dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase_map = 0x%08x\n",
1728 final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
1729 if (final_phase == 0xFF)
1730 TRACE_RET(chip, STATUS_FAIL);
1732 retval = sd_change_phase(chip, final_phase, TUNE_TX);
1733 if (retval != STATUS_SUCCESS)
1734 TRACE_RET(chip, STATUS_FAIL);
1736 dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase: %d\n",
1739 return STATUS_SUCCESS;
1742 static int sd_tuning_tx(struct rtsx_chip *chip)
1744 struct sd_info *sd_card = &(chip->sd_card);
1747 u32 raw_phase_map[3], phase_map;
1749 int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
1751 if (CHK_SD(sd_card)) {
1752 if (CHK_SD_DDR50(sd_card))
1753 tuning_cmd = sd_ddr_tuning_tx_cmd;
1755 tuning_cmd = sd_sdr_tuning_tx_cmd;
1758 if (CHK_MMC_DDR52(sd_card))
1759 tuning_cmd = sd_ddr_tuning_tx_cmd;
1761 TRACE_RET(chip, STATUS_FAIL);
1764 for (i = 0; i < 3; i++) {
1765 raw_phase_map[i] = 0;
1766 for (j = MAX_PHASE; j >= 0; j--) {
1767 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1768 sd_set_err_code(chip, SD_NO_CARD);
1769 rtsx_write_register(chip, SD_CFG3,
1770 SD_RSP_80CLK_TIMEOUT_EN, 0);
1771 TRACE_RET(chip, STATUS_FAIL);
1774 retval = tuning_cmd(chip, (u8)j);
1775 if (retval == STATUS_SUCCESS)
1776 raw_phase_map[i] |= 1 << j;
1780 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1781 for (i = 0; i < 3; i++)
1782 dev_dbg(rtsx_dev(chip), "TX raw_phase_map[%d] = 0x%08x\n",
1783 i, raw_phase_map[i]);
1785 dev_dbg(rtsx_dev(chip), "TX phase_map = 0x%08x\n", phase_map);
1787 final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
1788 if (final_phase == 0xFF)
1789 TRACE_RET(chip, STATUS_FAIL);
1791 retval = sd_change_phase(chip, final_phase, TUNE_TX);
1792 if (retval != STATUS_SUCCESS)
1793 TRACE_RET(chip, STATUS_FAIL);
1795 return STATUS_SUCCESS;
1798 static int sd_sdr_tuning(struct rtsx_chip *chip)
1802 retval = sd_tuning_tx(chip);
1803 if (retval != STATUS_SUCCESS)
1804 TRACE_RET(chip, STATUS_FAIL);
1806 retval = sd_tuning_rx(chip);
1807 if (retval != STATUS_SUCCESS)
1808 TRACE_RET(chip, STATUS_FAIL);
1810 return STATUS_SUCCESS;
1813 static int sd_ddr_tuning(struct rtsx_chip *chip)
1817 if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
1818 retval = sd_ddr_pre_tuning_tx(chip);
1819 if (retval != STATUS_SUCCESS)
1820 TRACE_RET(chip, STATUS_FAIL);
1822 retval = sd_change_phase(chip, (u8)chip->sd_ddr_tx_phase,
1824 if (retval != STATUS_SUCCESS)
1825 TRACE_RET(chip, STATUS_FAIL);
1828 retval = sd_tuning_rx(chip);
1829 if (retval != STATUS_SUCCESS)
1830 TRACE_RET(chip, STATUS_FAIL);
1832 if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
1833 retval = sd_tuning_tx(chip);
1834 if (retval != STATUS_SUCCESS)
1835 TRACE_RET(chip, STATUS_FAIL);
1838 return STATUS_SUCCESS;
1841 static int mmc_ddr_tuning(struct rtsx_chip *chip)
1845 if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
1846 retval = sd_ddr_pre_tuning_tx(chip);
1847 if (retval != STATUS_SUCCESS)
1848 TRACE_RET(chip, STATUS_FAIL);
1850 retval = sd_change_phase(chip, (u8)chip->mmc_ddr_tx_phase,
1852 if (retval != STATUS_SUCCESS)
1853 TRACE_RET(chip, STATUS_FAIL);
1856 retval = sd_tuning_rx(chip);
1857 if (retval != STATUS_SUCCESS)
1858 TRACE_RET(chip, STATUS_FAIL);
1860 if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
1861 retval = sd_tuning_tx(chip);
1862 if (retval != STATUS_SUCCESS)
1863 TRACE_RET(chip, STATUS_FAIL);
1866 return STATUS_SUCCESS;
1869 int sd_switch_clock(struct rtsx_chip *chip)
1871 struct sd_info *sd_card = &(chip->sd_card);
1875 retval = select_card(chip, SD_CARD);
1876 if (retval != STATUS_SUCCESS)
1877 TRACE_RET(chip, STATUS_FAIL);
1879 retval = switch_clock(chip, sd_card->sd_clock);
1880 if (retval != STATUS_SUCCESS)
1881 TRACE_RET(chip, STATUS_FAIL);
1884 if (CHK_SD(sd_card)) {
1885 if (CHK_SD_DDR50(sd_card))
1886 retval = sd_ddr_tuning(chip);
1888 retval = sd_sdr_tuning(chip);
1890 if (CHK_MMC_DDR52(sd_card))
1891 retval = mmc_ddr_tuning(chip);
1894 if (retval != STATUS_SUCCESS)
1895 TRACE_RET(chip, STATUS_FAIL);
1898 return STATUS_SUCCESS;
1901 static int sd_prepare_reset(struct rtsx_chip *chip)
1903 struct sd_info *sd_card = &(chip->sd_card);
1906 if (chip->asic_code)
1907 sd_card->sd_clock = 29;
1909 sd_card->sd_clock = CLK_30;
1911 sd_card->sd_type = 0;
1912 sd_card->seq_mode = 0;
1913 sd_card->sd_data_buf_ready = 0;
1914 sd_card->capacity = 0;
1916 #ifdef SUPPORT_SD_LOCK
1917 sd_card->sd_lock_status = 0;
1918 sd_card->sd_erase_status = 0;
1921 chip->capacity[chip->card2lun[SD_CARD]] = 0;
1924 retval = sd_set_init_para(chip);
1925 if (retval != STATUS_SUCCESS)
1926 TRACE_RET(chip, retval);
1928 RTSX_WRITE_REG(chip, REG_SD_CFG1, 0xFF, 0x40);
1930 RTSX_WRITE_REG(chip, CARD_STOP, SD_STOP | SD_CLR_ERR,
1931 SD_STOP | SD_CLR_ERR);
1933 retval = select_card(chip, SD_CARD);
1934 if (retval != STATUS_SUCCESS)
1935 TRACE_RET(chip, STATUS_FAIL);
1937 return STATUS_SUCCESS;
1940 static int sd_pull_ctl_disable(struct rtsx_chip *chip)
1942 if (CHECK_PID(chip, 0x5208)) {
1943 RTSX_WRITE_REG(chip, CARD_PULL_CTL1, 0xFF,
1944 XD_D3_PD | SD_D7_PD | SD_CLK_PD | SD_D5_PD);
1945 RTSX_WRITE_REG(chip, CARD_PULL_CTL2, 0xFF,
1946 SD_D6_PD | SD_D0_PD | SD_D1_PD | XD_D5_PD);
1947 RTSX_WRITE_REG(chip, CARD_PULL_CTL3, 0xFF,
1948 SD_D4_PD | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
1949 RTSX_WRITE_REG(chip, CARD_PULL_CTL4, 0xFF,
1950 XD_RDY_PD | SD_D3_PD | SD_D2_PD | XD_ALE_PD);
1951 RTSX_WRITE_REG(chip, CARD_PULL_CTL5, 0xFF,
1952 MS_INS_PU | SD_WP_PD | SD_CD_PU | SD_CMD_PD);
1953 RTSX_WRITE_REG(chip, CARD_PULL_CTL6, 0xFF, MS_D5_PD | MS_D4_PD);
1954 } else if (CHECK_PID(chip, 0x5288)) {
1955 if (CHECK_BARO_PKG(chip, QFN)) {
1956 RTSX_WRITE_REG(chip, CARD_PULL_CTL1, 0xFF, 0x55);
1957 RTSX_WRITE_REG(chip, CARD_PULL_CTL2, 0xFF, 0x55);
1958 RTSX_WRITE_REG(chip, CARD_PULL_CTL3, 0xFF, 0x4B);
1959 RTSX_WRITE_REG(chip, CARD_PULL_CTL4, 0xFF, 0x69);
1963 return STATUS_SUCCESS;
1966 int sd_pull_ctl_enable(struct rtsx_chip *chip)
1970 rtsx_init_cmd(chip);
1972 if (CHECK_PID(chip, 0x5208)) {
1973 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF,
1974 XD_D3_PD | SD_DAT7_PU | SD_CLK_NP | SD_D5_PU);
1975 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF,
1976 SD_D6_PU | SD_D0_PU | SD_D1_PU | XD_D5_PD);
1977 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF,
1978 SD_D4_PU | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
1979 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF,
1980 XD_RDY_PD | SD_D3_PU | SD_D2_PU | XD_ALE_PD);
1981 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF,
1982 MS_INS_PU | SD_WP_PU | SD_CD_PU | SD_CMD_PU);
1983 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF,
1984 MS_D5_PD | MS_D4_PD);
1985 } else if (CHECK_PID(chip, 0x5288)) {
1986 if (CHECK_BARO_PKG(chip, QFN)) {
1987 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF,
1989 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF,
1991 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF,
1993 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF,
1998 retval = rtsx_send_cmd(chip, SD_CARD, 100);
2000 TRACE_RET(chip, STATUS_FAIL);
2002 return STATUS_SUCCESS;
2005 static int sd_init_power(struct rtsx_chip *chip)
2009 retval = sd_power_off_card3v3(chip);
2010 if (retval != STATUS_SUCCESS)
2011 TRACE_RET(chip, STATUS_FAIL);
2013 if (!chip->ft2_fast_mode)
2016 retval = enable_card_clock(chip, SD_CARD);
2017 if (retval != STATUS_SUCCESS)
2018 TRACE_RET(chip, STATUS_FAIL);
2020 if (chip->asic_code) {
2021 retval = sd_pull_ctl_enable(chip);
2022 if (retval != STATUS_SUCCESS)
2023 TRACE_RET(chip, STATUS_FAIL);
2025 RTSX_WRITE_REG(chip, FPGA_PULL_CTL, FPGA_SD_PULL_CTL_BIT | 0x20,
2029 if (!chip->ft2_fast_mode) {
2030 retval = card_power_on(chip, SD_CARD);
2031 if (retval != STATUS_SUCCESS)
2032 TRACE_RET(chip, STATUS_FAIL);
2037 if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
2038 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
2040 TRACE_RET(chip, STATUS_FAIL);
2045 RTSX_WRITE_REG(chip, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN);
2047 return STATUS_SUCCESS;
2050 static int sd_dummy_clock(struct rtsx_chip *chip)
2052 RTSX_WRITE_REG(chip, REG_SD_CFG3, 0x01, 0x01);
2054 RTSX_WRITE_REG(chip, REG_SD_CFG3, 0x01, 0);
2056 return STATUS_SUCCESS;
2059 static int sd_read_lba0(struct rtsx_chip *chip)
2061 struct sd_info *sd_card = &(chip->sd_card);
2063 u8 cmd[5], bus_width;
2065 cmd[0] = 0x40 | READ_SINGLE_BLOCK;
2071 if (CHK_SD(sd_card)) {
2072 bus_width = SD_BUS_WIDTH_4;
2074 if (CHK_MMC_8BIT(sd_card))
2075 bus_width = SD_BUS_WIDTH_8;
2076 else if (CHK_MMC_4BIT(sd_card))
2077 bus_width = SD_BUS_WIDTH_4;
2079 bus_width = SD_BUS_WIDTH_1;
2082 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd,
2083 5, 512, 1, bus_width, NULL, 0, 100);
2084 if (retval != STATUS_SUCCESS) {
2085 rtsx_clear_sd_error(chip);
2086 TRACE_RET(chip, STATUS_FAIL);
2089 return STATUS_SUCCESS;
2092 static int sd_check_wp_state(struct rtsx_chip *chip)
2094 struct sd_info *sd_card = &(chip->sd_card);
2100 retval = sd_send_cmd_get_rsp(chip, APP_CMD,
2101 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
2102 if (retval != STATUS_SUCCESS)
2103 TRACE_RET(chip, STATUS_FAIL);
2105 cmd[0] = 0x40 | SD_STATUS;
2111 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1,
2112 SD_BUS_WIDTH_4, buf, 64, 250);
2113 if (retval != STATUS_SUCCESS) {
2114 rtsx_clear_sd_error(chip);
2116 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2117 SD_RSP_TYPE_R1, NULL, 0);
2118 TRACE_RET(chip, STATUS_FAIL);
2121 dev_dbg(rtsx_dev(chip), "ACMD13:\n");
2124 sd_card_type = ((u16)buf[2] << 8) | buf[3];
2125 dev_dbg(rtsx_dev(chip), "sd_card_type = 0x%04x\n", sd_card_type);
2126 if ((sd_card_type == 0x0001) || (sd_card_type == 0x0002)) {
2127 /* ROM card or OTP */
2128 chip->card_wp |= SD_CARD;
2131 /* Check SD Machanical Write-Protect Switch */
2132 val = rtsx_readl(chip, RTSX_BIPR);
2133 if (val & SD_WRITE_PROTECT)
2134 chip->card_wp |= SD_CARD;
2136 return STATUS_SUCCESS;
2139 static int reset_sd(struct rtsx_chip *chip)
2141 struct sd_info *sd_card = &(chip->sd_card);
2142 int retval, i = 0, j = 0, k = 0, hi_cap_flow = 0;
2143 int sd_dont_switch = 0;
2144 int support_1v8 = 0;
2147 u8 switch_bus_width;
2160 #ifdef SUPPORT_SD_LOCK
2161 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
2162 goto SD_UNLOCK_ENTRY;
2165 retval = sd_prepare_reset(chip);
2166 if (retval != STATUS_SUCCESS)
2167 TRACE_RET(chip, STATUS_FAIL);
2169 retval = sd_dummy_clock(chip);
2170 if (retval != STATUS_SUCCESS)
2171 TRACE_RET(chip, STATUS_FAIL);
2173 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip) && try_sdio) {
2176 for (; rty_cnt < chip->sdio_retry_cnt; rty_cnt++) {
2177 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2178 sd_set_err_code(chip, SD_NO_CARD);
2179 TRACE_RET(chip, STATUS_FAIL);
2182 retval = sd_send_cmd_get_rsp(chip, IO_SEND_OP_COND, 0,
2183 SD_RSP_TYPE_R4, rsp, 5);
2184 if (retval == STATUS_SUCCESS) {
2185 int func_num = (rsp[1] >> 4) & 0x07;
2187 dev_dbg(rtsx_dev(chip), "SD_IO card (Function number: %d)!\n",
2190 TRACE_RET(chip, STATUS_FAIL);
2196 sd_init_power(chip);
2198 sd_dummy_clock(chip);
2201 dev_dbg(rtsx_dev(chip), "Normal card!\n");
2204 /* Start Initialization Process of SD Card */
2206 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
2208 if (retval != STATUS_SUCCESS)
2209 TRACE_RET(chip, STATUS_FAIL);
2213 retval = sd_send_cmd_get_rsp(chip, SEND_IF_COND, 0x000001AA,
2214 SD_RSP_TYPE_R7, rsp, 5);
2215 if (retval == STATUS_SUCCESS) {
2216 if ((rsp[4] == 0xAA) && ((rsp[3] & 0x0f) == 0x01)) {
2218 voltage = SUPPORT_VOLTAGE | 0x40000000;
2223 voltage = SUPPORT_VOLTAGE;
2225 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0,
2226 SD_RSP_TYPE_R0, NULL, 0);
2227 if (retval != STATUS_SUCCESS)
2228 TRACE_RET(chip, STATUS_FAIL);
2234 retval = sd_send_cmd_get_rsp(chip, APP_CMD, 0, SD_RSP_TYPE_R1,
2236 if (retval != STATUS_SUCCESS) {
2237 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2238 sd_set_err_code(chip, SD_NO_CARD);
2239 TRACE_RET(chip, STATUS_FAIL);
2246 TRACE_RET(chip, STATUS_FAIL);
2249 retval = sd_send_cmd_get_rsp(chip, SD_APP_OP_COND, voltage,
2250 SD_RSP_TYPE_R3, rsp, 5);
2251 if (retval != STATUS_SUCCESS) {
2256 TRACE_RET(chip, STATUS_FAIL);
2261 } while (!(rsp[1] & 0x80) && (i < 255));
2264 TRACE_RET(chip, STATUS_FAIL);
2268 SET_SD_HCXC(sd_card);
2270 CLR_SD_HCXC(sd_card);
2274 CLR_SD_HCXC(sd_card);
2277 dev_dbg(rtsx_dev(chip), "support_1v8 = %d\n", support_1v8);
2280 retval = sd_voltage_switch(chip);
2281 if (retval != STATUS_SUCCESS)
2282 TRACE_RET(chip, STATUS_FAIL);
2285 retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
2287 if (retval != STATUS_SUCCESS)
2288 TRACE_RET(chip, STATUS_FAIL);
2290 for (i = 0; i < 3; i++) {
2291 retval = sd_send_cmd_get_rsp(chip, SEND_RELATIVE_ADDR, 0,
2292 SD_RSP_TYPE_R6, rsp, 5);
2293 if (retval != STATUS_SUCCESS)
2294 TRACE_RET(chip, STATUS_FAIL);
2296 sd_card->sd_addr = (u32)rsp[1] << 24;
2297 sd_card->sd_addr += (u32)rsp[2] << 16;
2299 if (sd_card->sd_addr)
2303 retval = sd_check_csd(chip, 1);
2304 if (retval != STATUS_SUCCESS)
2305 TRACE_RET(chip, STATUS_FAIL);
2307 retval = sd_select_card(chip, 1);
2308 if (retval != STATUS_SUCCESS)
2309 TRACE_RET(chip, STATUS_FAIL);
2311 #ifdef SUPPORT_SD_LOCK
2313 retval = sd_update_lock_status(chip);
2314 if (retval != STATUS_SUCCESS)
2315 TRACE_RET(chip, STATUS_FAIL);
2317 if (sd_card->sd_lock_status & SD_LOCKED) {
2318 sd_card->sd_lock_status |= (SD_LOCK_1BIT_MODE | SD_PWD_EXIST);
2319 return STATUS_SUCCESS;
2320 } else if (!(sd_card->sd_lock_status & SD_UNLOCK_POW_ON)) {
2321 sd_card->sd_lock_status &= ~SD_PWD_EXIST;
2325 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2326 SD_RSP_TYPE_R1, NULL, 0);
2327 if (retval != STATUS_SUCCESS)
2328 TRACE_RET(chip, STATUS_FAIL);
2330 retval = sd_send_cmd_get_rsp(chip, SET_CLR_CARD_DETECT, 0,
2331 SD_RSP_TYPE_R1, NULL, 0);
2332 if (retval != STATUS_SUCCESS)
2333 TRACE_RET(chip, STATUS_FAIL);
2336 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2337 SD_RSP_TYPE_R1, NULL, 0);
2338 if (retval != STATUS_SUCCESS)
2339 TRACE_RET(chip, STATUS_FAIL);
2341 retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2,
2342 SD_RSP_TYPE_R1, NULL, 0);
2343 if (retval != STATUS_SUCCESS)
2344 TRACE_RET(chip, STATUS_FAIL);
2346 switch_bus_width = SD_BUS_WIDTH_4;
2348 switch_bus_width = SD_BUS_WIDTH_1;
2351 retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
2353 if (retval != STATUS_SUCCESS)
2354 TRACE_RET(chip, STATUS_FAIL);
2356 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
2357 if (retval != STATUS_SUCCESS)
2358 TRACE_RET(chip, STATUS_FAIL);
2360 if (!(sd_card->raw_csd[4] & 0x40))
2363 if (!sd_dont_switch) {
2365 /* Set sd_switch_fail here, because we needn't
2366 * switch to UHS mode
2368 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
2369 DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK;
2372 /* Check the card whether follow SD1.1 spec or higher */
2373 retval = sd_check_spec(chip, switch_bus_width);
2374 if (retval == STATUS_SUCCESS) {
2375 retval = sd_switch_function(chip, switch_bus_width);
2376 if (retval != STATUS_SUCCESS) {
2377 sd_init_power(chip);
2385 sd_init_power(chip);
2395 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2396 SD_RSP_TYPE_R1, NULL, 0);
2397 if (retval != STATUS_SUCCESS)
2398 TRACE_RET(chip, STATUS_FAIL);
2400 retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2,
2401 SD_RSP_TYPE_R1, NULL, 0);
2402 if (retval != STATUS_SUCCESS)
2403 TRACE_RET(chip, STATUS_FAIL);
2406 #ifdef SUPPORT_SD_LOCK
2407 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2410 if (!sd20_mode && CHK_SD30_SPEED(sd_card)) {
2413 RTSX_WRITE_REG(chip, SD30_DRIVE_SEL, 0x07,
2414 chip->sd30_drive_sel_1v8);
2416 retval = sd_set_init_para(chip);
2417 if (retval != STATUS_SUCCESS)
2418 TRACE_RET(chip, STATUS_FAIL);
2420 if (CHK_SD_DDR50(sd_card))
2421 retval = sd_ddr_tuning(chip);
2423 retval = sd_sdr_tuning(chip);
2425 if (retval != STATUS_SUCCESS) {
2427 TRACE_RET(chip, STATUS_FAIL);
2429 retval = sd_init_power(chip);
2430 if (retval != STATUS_SUCCESS)
2431 TRACE_RET(chip, STATUS_FAIL);
2439 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2440 SD_RSP_TYPE_R1, NULL, 0);
2442 if (CHK_SD_DDR50(sd_card)) {
2443 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
2444 if (retval != STATUS_SUCCESS)
2449 retval = sd_read_lba0(chip);
2450 if (retval != STATUS_SUCCESS) {
2452 TRACE_RET(chip, STATUS_FAIL);
2454 retval = sd_init_power(chip);
2455 if (retval != STATUS_SUCCESS)
2456 TRACE_RET(chip, STATUS_FAIL);
2466 retval = sd_check_wp_state(chip);
2467 if (retval != STATUS_SUCCESS)
2468 TRACE_RET(chip, STATUS_FAIL);
2470 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
2472 #ifdef SUPPORT_SD_LOCK
2473 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
2474 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_H, 0xFF, 0x02);
2475 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_L, 0xFF, 0x00);
2479 return STATUS_SUCCESS;
2483 static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width)
2485 struct sd_info *sd_card = &(chip->sd_card);
2487 u8 buf[8] = {0}, bus_width, *ptr;
2491 retval = sd_send_cmd_get_rsp(chip, BUSTEST_W, 0, SD_RSP_TYPE_R1, NULL,
2493 if (retval != STATUS_SUCCESS)
2494 TRACE_RET(chip, SWITCH_FAIL);
2496 if (width == MMC_8BIT_BUS) {
2501 bus_width = SD_BUS_WIDTH_8;
2506 bus_width = SD_BUS_WIDTH_4;
2509 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0x02);
2510 if (retval != STATUS_SUCCESS)
2511 TRACE_RET(chip, SWITCH_ERR);
2513 retval = sd_write_data(chip, SD_TM_AUTO_WRITE_3,
2514 NULL, 0, byte_cnt, 1, bus_width, buf, len, 100);
2515 if (retval != STATUS_SUCCESS) {
2516 rtsx_clear_sd_error(chip);
2517 rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
2518 TRACE_RET(chip, SWITCH_ERR);
2521 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
2522 if (retval != STATUS_SUCCESS)
2523 TRACE_RET(chip, SWITCH_ERR);
2525 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", BUSTEST_R);
2527 rtsx_init_cmd(chip);
2529 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | BUSTEST_R);
2531 if (width == MMC_8BIT_BUS)
2532 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L,
2535 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L,
2538 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
2539 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
2541 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
2542 SD_CALCULATE_CRC7 | SD_NO_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
2543 SD_CHECK_CRC7 | SD_RSP_LEN_6);
2544 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
2546 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
2547 SD_TM_NORMAL_READ | SD_TRANSFER_START);
2548 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
2551 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2, 0, 0);
2552 if (width == MMC_8BIT_BUS)
2553 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 1, 0, 0);
2555 retval = rtsx_send_cmd(chip, SD_CARD, 100);
2557 rtsx_clear_sd_error(chip);
2558 TRACE_RET(chip, SWITCH_ERR);
2561 ptr = rtsx_get_cmd_data(chip) + 1;
2563 if (width == MMC_8BIT_BUS) {
2564 dev_dbg(rtsx_dev(chip), "BUSTEST_R [8bits]: 0x%02x 0x%02x\n",
2566 if ((ptr[0] == 0xAA) && (ptr[1] == 0x55)) {
2570 if (CHK_MMC_DDR52(sd_card))
2575 retval = sd_send_cmd_get_rsp(chip, SWITCH, arg,
2576 SD_RSP_TYPE_R1b, rsp, 5);
2577 if ((retval == STATUS_SUCCESS) &&
2578 !(rsp[4] & MMC_SWITCH_ERR))
2579 return SWITCH_SUCCESS;
2582 dev_dbg(rtsx_dev(chip), "BUSTEST_R [4bits]: 0x%02x\n", ptr[0]);
2583 if (ptr[0] == 0xA5) {
2587 if (CHK_MMC_DDR52(sd_card))
2592 retval = sd_send_cmd_get_rsp(chip, SWITCH, arg,
2593 SD_RSP_TYPE_R1b, rsp, 5);
2594 if ((retval == STATUS_SUCCESS) &&
2595 !(rsp[4] & MMC_SWITCH_ERR))
2596 return SWITCH_SUCCESS;
2600 TRACE_RET(chip, SWITCH_FAIL);
2604 static int mmc_switch_timing_bus(struct rtsx_chip *chip, int switch_ddr)
2606 struct sd_info *sd_card = &(chip->sd_card);
2608 u8 *ptr, card_type, card_type_mask = 0;
2610 CLR_MMC_HS(sd_card);
2612 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", SEND_EXT_CSD);
2614 rtsx_init_cmd(chip);
2616 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
2617 0x40 | SEND_EXT_CSD);
2618 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, 0);
2619 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, 0);
2620 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, 0);
2621 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, 0);
2623 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0);
2624 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 2);
2625 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
2626 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
2628 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
2629 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
2630 SD_CHECK_CRC7 | SD_RSP_LEN_6);
2631 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
2633 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
2634 SD_TM_NORMAL_READ | SD_TRANSFER_START);
2635 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
2638 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 196, 0xFF, 0);
2639 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 212, 0xFF, 0);
2640 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 213, 0xFF, 0);
2641 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 214, 0xFF, 0);
2642 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 215, 0xFF, 0);
2644 retval = rtsx_send_cmd(chip, SD_CARD, 1000);
2646 if (retval == -ETIMEDOUT) {
2647 rtsx_clear_sd_error(chip);
2648 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2649 SD_RSP_TYPE_R1, NULL, 0);
2651 TRACE_RET(chip, STATUS_FAIL);
2654 ptr = rtsx_get_cmd_data(chip);
2655 if (ptr[0] & SD_TRANSFER_ERR) {
2656 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2657 SD_RSP_TYPE_R1, NULL, 0);
2658 TRACE_RET(chip, STATUS_FAIL);
2661 if (CHK_MMC_SECTOR_MODE(sd_card)) {
2662 sd_card->capacity = ((u32)ptr[5] << 24) | ((u32)ptr[4] << 16) |
2663 ((u32)ptr[3] << 8) | ((u32)ptr[2]);
2666 card_type_mask = 0x03;
2667 card_type = ptr[1] & card_type_mask;
2671 if (card_type & 0x04) {
2673 SET_MMC_DDR52(sd_card);
2675 SET_MMC_52M(sd_card);
2676 } else if (card_type & 0x02) {
2677 SET_MMC_52M(sd_card);
2679 SET_MMC_26M(sd_card);
2682 retval = sd_send_cmd_get_rsp(chip, SWITCH,
2683 0x03B90100, SD_RSP_TYPE_R1b, rsp, 5);
2684 if ((retval != STATUS_SUCCESS) || (rsp[4] & MMC_SWITCH_ERR))
2685 CLR_MMC_HS(sd_card);
2688 sd_choose_proper_clock(chip);
2689 retval = switch_clock(chip, sd_card->sd_clock);
2690 if (retval != STATUS_SUCCESS)
2691 TRACE_RET(chip, STATUS_FAIL);
2693 /* Test Bus Procedure */
2694 retval = mmc_test_switch_bus(chip, MMC_8BIT_BUS);
2695 if (retval == SWITCH_SUCCESS) {
2696 SET_MMC_8BIT(sd_card);
2697 chip->card_bus_width[chip->card2lun[SD_CARD]] = 8;
2698 #ifdef SUPPORT_SD_LOCK
2699 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2701 } else if (retval == SWITCH_FAIL) {
2702 retval = mmc_test_switch_bus(chip, MMC_4BIT_BUS);
2703 if (retval == SWITCH_SUCCESS) {
2704 SET_MMC_4BIT(sd_card);
2705 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
2706 #ifdef SUPPORT_SD_LOCK
2707 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2709 } else if (retval == SWITCH_FAIL) {
2710 CLR_MMC_8BIT(sd_card);
2711 CLR_MMC_4BIT(sd_card);
2713 TRACE_RET(chip, STATUS_FAIL);
2716 TRACE_RET(chip, STATUS_FAIL);
2719 return STATUS_SUCCESS;
2723 static int reset_mmc(struct rtsx_chip *chip)
2725 struct sd_info *sd_card = &(chip->sd_card);
2726 int retval, i = 0, j = 0, k = 0;
2732 #ifdef SUPPORT_SD_LOCK
2733 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
2734 goto MMC_UNLOCK_ENTRY;
2738 retval = sd_prepare_reset(chip);
2739 if (retval != STATUS_SUCCESS)
2740 TRACE_RET(chip, retval);
2745 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
2747 if (retval != STATUS_SUCCESS)
2748 TRACE_RET(chip, STATUS_FAIL);
2751 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2752 sd_set_err_code(chip, SD_NO_CARD);
2753 TRACE_RET(chip, STATUS_FAIL);
2756 retval = sd_send_cmd_get_rsp(chip, SEND_OP_COND,
2757 (SUPPORT_VOLTAGE | 0x40000000),
2758 SD_RSP_TYPE_R3, rsp, 5);
2759 if (retval != STATUS_SUCCESS) {
2760 if (sd_check_err_code(chip, SD_BUSY) ||
2761 sd_check_err_code(chip, SD_TO_ERR)) {
2764 sd_clr_err_code(chip);
2767 TRACE_RET(chip, STATUS_FAIL);
2772 sd_clr_err_code(chip);
2775 TRACE_RET(chip, STATUS_FAIL);
2782 } while (!(rsp[1] & 0x80) && (i < 255));
2785 TRACE_RET(chip, STATUS_FAIL);
2787 if ((rsp[1] & 0x60) == 0x40)
2788 SET_MMC_SECTOR_MODE(sd_card);
2790 CLR_MMC_SECTOR_MODE(sd_card);
2792 retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
2794 if (retval != STATUS_SUCCESS)
2795 TRACE_RET(chip, STATUS_FAIL);
2797 sd_card->sd_addr = 0x00100000;
2798 retval = sd_send_cmd_get_rsp(chip, SET_RELATIVE_ADDR, sd_card->sd_addr,
2799 SD_RSP_TYPE_R6, rsp, 5);
2800 if (retval != STATUS_SUCCESS)
2801 TRACE_RET(chip, STATUS_FAIL);
2803 retval = sd_check_csd(chip, 1);
2804 if (retval != STATUS_SUCCESS)
2805 TRACE_RET(chip, STATUS_FAIL);
2807 spec_ver = (sd_card->raw_csd[0] & 0x3C) >> 2;
2809 retval = sd_select_card(chip, 1);
2810 if (retval != STATUS_SUCCESS)
2811 TRACE_RET(chip, STATUS_FAIL);
2813 retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
2815 if (retval != STATUS_SUCCESS)
2816 TRACE_RET(chip, STATUS_FAIL);
2818 #ifdef SUPPORT_SD_LOCK
2820 retval = sd_update_lock_status(chip);
2821 if (retval != STATUS_SUCCESS)
2822 TRACE_RET(chip, STATUS_FAIL);
2825 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
2826 if (retval != STATUS_SUCCESS)
2827 TRACE_RET(chip, STATUS_FAIL);
2829 chip->card_bus_width[chip->card2lun[SD_CARD]] = 1;
2831 if (!sd_card->mmc_dont_switch_bus) {
2832 if (spec_ver == 4) {
2834 retval = mmc_switch_timing_bus(chip, switch_ddr);
2835 if (retval != STATUS_SUCCESS) {
2836 retval = sd_init_power(chip);
2837 if (retval != STATUS_SUCCESS)
2838 TRACE_RET(chip, STATUS_FAIL);
2839 sd_card->mmc_dont_switch_bus = 1;
2840 TRACE_GOTO(chip, Switch_Fail);
2844 if (CHK_MMC_SECTOR_MODE(sd_card) && (sd_card->capacity == 0))
2845 TRACE_RET(chip, STATUS_FAIL);
2847 if (switch_ddr && CHK_MMC_DDR52(sd_card)) {
2848 retval = sd_set_init_para(chip);
2849 if (retval != STATUS_SUCCESS)
2850 TRACE_RET(chip, STATUS_FAIL);
2852 retval = mmc_ddr_tuning(chip);
2853 if (retval != STATUS_SUCCESS) {
2854 retval = sd_init_power(chip);
2855 if (retval != STATUS_SUCCESS)
2856 TRACE_RET(chip, STATUS_FAIL);
2859 TRACE_GOTO(chip, Switch_Fail);
2862 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
2863 if (retval == STATUS_SUCCESS) {
2864 retval = sd_read_lba0(chip);
2865 if (retval != STATUS_SUCCESS) {
2866 retval = sd_init_power(chip);
2867 if (retval != STATUS_SUCCESS)
2868 TRACE_RET(chip, STATUS_FAIL);
2871 TRACE_GOTO(chip, Switch_Fail);
2877 #ifdef SUPPORT_SD_LOCK
2878 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
2879 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_H, 0xFF, 0x02);
2880 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_L, 0xFF, 0x00);
2884 temp = rtsx_readl(chip, RTSX_BIPR);
2885 if (temp & SD_WRITE_PROTECT)
2886 chip->card_wp |= SD_CARD;
2888 return STATUS_SUCCESS;
2891 int reset_sd_card(struct rtsx_chip *chip)
2893 struct sd_info *sd_card = &(chip->sd_card);
2896 sd_init_reg_addr(chip);
2898 memset(sd_card, 0, sizeof(struct sd_info));
2899 chip->capacity[chip->card2lun[SD_CARD]] = 0;
2901 retval = enable_card_clock(chip, SD_CARD);
2902 if (retval != STATUS_SUCCESS)
2903 TRACE_RET(chip, STATUS_FAIL);
2905 if (chip->ignore_sd && CHK_SDIO_EXIST(chip) &&
2906 !CHK_SDIO_IGNORED(chip)) {
2907 if (chip->asic_code) {
2908 retval = sd_pull_ctl_enable(chip);
2909 if (retval != STATUS_SUCCESS)
2910 TRACE_RET(chip, STATUS_FAIL);
2912 retval = rtsx_write_register(chip, FPGA_PULL_CTL,
2913 FPGA_SD_PULL_CTL_BIT | 0x20, 0);
2914 if (retval != STATUS_SUCCESS)
2915 TRACE_RET(chip, STATUS_FAIL);
2917 retval = card_share_mode(chip, SD_CARD);
2918 if (retval != STATUS_SUCCESS)
2919 TRACE_RET(chip, STATUS_FAIL);
2922 TRACE_RET(chip, STATUS_FAIL);
2925 retval = sd_init_power(chip);
2926 if (retval != STATUS_SUCCESS)
2927 TRACE_RET(chip, STATUS_FAIL);
2929 if (chip->sd_ctl & RESET_MMC_FIRST) {
2930 retval = reset_mmc(chip);
2931 if (retval != STATUS_SUCCESS) {
2932 if (sd_check_err_code(chip, SD_NO_CARD))
2933 TRACE_RET(chip, STATUS_FAIL);
2935 retval = reset_sd(chip);
2936 if (retval != STATUS_SUCCESS)
2937 TRACE_RET(chip, STATUS_FAIL);
2940 retval = reset_sd(chip);
2941 if (retval != STATUS_SUCCESS) {
2942 if (sd_check_err_code(chip, SD_NO_CARD))
2943 TRACE_RET(chip, STATUS_FAIL);
2946 TRACE_RET(chip, STATUS_FAIL);
2948 retval = reset_mmc(chip);
2949 if (retval != STATUS_SUCCESS)
2950 TRACE_RET(chip, STATUS_FAIL);
2955 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
2956 if (retval != STATUS_SUCCESS)
2957 TRACE_RET(chip, STATUS_FAIL);
2959 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
2960 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
2962 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
2964 retval = sd_set_init_para(chip);
2965 if (retval != STATUS_SUCCESS)
2966 TRACE_RET(chip, STATUS_FAIL);
2968 dev_dbg(rtsx_dev(chip), "sd_card->sd_type = 0x%x\n", sd_card->sd_type);
2970 return STATUS_SUCCESS;
2973 static int reset_mmc_only(struct rtsx_chip *chip)
2975 struct sd_info *sd_card = &(chip->sd_card);
2978 sd_card->sd_type = 0;
2979 sd_card->seq_mode = 0;
2980 sd_card->sd_data_buf_ready = 0;
2981 sd_card->capacity = 0;
2982 sd_card->sd_switch_fail = 0;
2984 #ifdef SUPPORT_SD_LOCK
2985 sd_card->sd_lock_status = 0;
2986 sd_card->sd_erase_status = 0;
2989 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity = 0;
2991 retval = enable_card_clock(chip, SD_CARD);
2992 if (retval != STATUS_SUCCESS)
2993 TRACE_RET(chip, STATUS_FAIL);
2995 retval = sd_init_power(chip);
2996 if (retval != STATUS_SUCCESS)
2997 TRACE_RET(chip, STATUS_FAIL);
2999 retval = reset_mmc(chip);
3000 if (retval != STATUS_SUCCESS)
3001 TRACE_RET(chip, STATUS_FAIL);
3003 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
3004 if (retval != STATUS_SUCCESS)
3005 TRACE_RET(chip, STATUS_FAIL);
3007 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
3008 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
3010 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
3012 retval = sd_set_init_para(chip);
3013 if (retval != STATUS_SUCCESS)
3014 TRACE_RET(chip, STATUS_FAIL);
3016 dev_dbg(rtsx_dev(chip), "In reset_mmc_only, sd_card->sd_type = 0x%x\n",
3019 return STATUS_SUCCESS;
3022 #define WAIT_DATA_READY_RTY_CNT 255
3024 static int wait_data_buf_ready(struct rtsx_chip *chip)
3026 struct sd_info *sd_card = &(chip->sd_card);
3029 for (i = 0; i < WAIT_DATA_READY_RTY_CNT; i++) {
3030 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3031 sd_set_err_code(chip, SD_NO_CARD);
3032 TRACE_RET(chip, STATUS_FAIL);
3035 sd_card->sd_data_buf_ready = 0;
3037 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
3038 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3039 if (retval != STATUS_SUCCESS)
3040 TRACE_RET(chip, STATUS_FAIL);
3042 if (sd_card->sd_data_buf_ready) {
3043 return sd_send_cmd_get_rsp(chip, SEND_STATUS,
3044 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3048 sd_set_err_code(chip, SD_TO_ERR);
3050 TRACE_RET(chip, STATUS_FAIL);
3053 void sd_stop_seq_mode(struct rtsx_chip *chip)
3055 struct sd_info *sd_card = &(chip->sd_card);
3058 if (sd_card->seq_mode) {
3059 retval = sd_switch_clock(chip);
3060 if (retval != STATUS_SUCCESS)
3063 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3064 SD_RSP_TYPE_R1b, NULL, 0);
3065 if (retval != STATUS_SUCCESS)
3066 sd_set_err_code(chip, SD_STS_ERR);
3068 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
3069 if (retval != STATUS_SUCCESS)
3070 sd_set_err_code(chip, SD_STS_ERR);
3072 sd_card->seq_mode = 0;
3074 rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
3078 static inline int sd_auto_tune_clock(struct rtsx_chip *chip)
3080 struct sd_info *sd_card = &(chip->sd_card);
3083 if (chip->asic_code) {
3084 if (sd_card->sd_clock > 30)
3085 sd_card->sd_clock -= 20;
3087 switch (sd_card->sd_clock) {
3089 sd_card->sd_clock = CLK_150;
3093 sd_card->sd_clock = CLK_120;
3097 sd_card->sd_clock = CLK_100;
3101 sd_card->sd_clock = CLK_80;
3105 sd_card->sd_clock = CLK_60;
3109 sd_card->sd_clock = CLK_50;
3117 retval = sd_switch_clock(chip);
3118 if (retval != STATUS_SUCCESS)
3119 TRACE_RET(chip, STATUS_FAIL);
3121 return STATUS_SUCCESS;
3124 int sd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32 start_sector,
3127 struct sd_info *sd_card = &(chip->sd_card);
3132 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3133 dev_dbg(rtsx_dev(chip), "sd_rw: Read %d %s from 0x%x\n",
3134 sector_cnt, (sector_cnt > 1) ? "sectors" : "sector",
3137 dev_dbg(rtsx_dev(chip), "sd_rw: Write %d %s to 0x%x\n",
3138 sector_cnt, (sector_cnt > 1) ? "sectors" : "sector",
3142 sd_card->cleanup_counter = 0;
3144 if (!(chip->card_ready & SD_CARD)) {
3145 sd_card->seq_mode = 0;
3147 retval = reset_sd_card(chip);
3148 if (retval == STATUS_SUCCESS) {
3149 chip->card_ready |= SD_CARD;
3150 chip->card_fail &= ~SD_CARD;
3152 chip->card_ready &= ~SD_CARD;
3153 chip->card_fail |= SD_CARD;
3154 chip->capacity[chip->card2lun[SD_CARD]] = 0;
3155 chip->rw_need_retry = 1;
3156 TRACE_RET(chip, STATUS_FAIL);
3160 if (!CHK_SD_HCXC(sd_card) && !CHK_MMC_SECTOR_MODE(sd_card))
3161 data_addr = start_sector << 9;
3163 data_addr = start_sector;
3165 sd_clr_err_code(chip);
3167 retval = sd_switch_clock(chip);
3168 if (retval != STATUS_SUCCESS) {
3169 sd_set_err_code(chip, SD_IO_ERR);
3170 TRACE_GOTO(chip, RW_FAIL);
3173 if (sd_card->seq_mode &&
3174 ((sd_card->pre_dir != srb->sc_data_direction) ||
3175 ((sd_card->pre_sec_addr + sd_card->pre_sec_cnt) !=
3177 if ((sd_card->pre_sec_cnt < 0x80)
3178 && (sd_card->pre_dir == DMA_FROM_DEVICE)
3179 && !CHK_SD30_SPEED(sd_card)
3180 && !CHK_SD_HS(sd_card)
3181 && !CHK_MMC_HS(sd_card)) {
3182 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3183 SD_RSP_TYPE_R1, NULL, 0);
3186 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
3187 0, SD_RSP_TYPE_R1b, NULL, 0);
3188 if (retval != STATUS_SUCCESS) {
3189 chip->rw_need_retry = 1;
3190 sd_set_err_code(chip, SD_STS_ERR);
3191 TRACE_GOTO(chip, RW_FAIL);
3194 sd_card->seq_mode = 0;
3196 retval = rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
3197 if (retval != STATUS_SUCCESS) {
3198 sd_set_err_code(chip, SD_IO_ERR);
3199 TRACE_GOTO(chip, RW_FAIL);
3202 if ((sd_card->pre_sec_cnt < 0x80)
3203 && !CHK_SD30_SPEED(sd_card)
3204 && !CHK_SD_HS(sd_card)
3205 && !CHK_MMC_HS(sd_card)) {
3206 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3207 SD_RSP_TYPE_R1, NULL, 0);
3211 rtsx_init_cmd(chip);
3213 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0x00);
3214 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 0x02);
3215 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
3217 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
3218 (u8)(sector_cnt >> 8));
3220 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, RING_BUFFER);
3222 if (CHK_MMC_8BIT(sd_card))
3223 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3224 0x03, SD_BUS_WIDTH_8);
3225 else if (CHK_MMC_4BIT(sd_card) || CHK_SD(sd_card))
3226 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3227 0x03, SD_BUS_WIDTH_4);
3229 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3230 0x03, SD_BUS_WIDTH_1);
3232 if (sd_card->seq_mode) {
3233 cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16|
3234 SD_NO_WAIT_BUSY_END | SD_NO_CHECK_CRC7 |
3236 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, cfg2);
3238 trans_dma_enable(srb->sc_data_direction, chip, sector_cnt * 512,
3241 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3242 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3243 SD_TM_AUTO_READ_3 | SD_TRANSFER_START);
3245 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3246 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3249 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3250 SD_TRANSFER_END, SD_TRANSFER_END);
3252 rtsx_send_cmd_no_wait(chip);
3254 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3255 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n",
3256 READ_MULTIPLE_BLOCK);
3257 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
3258 0x40 | READ_MULTIPLE_BLOCK);
3259 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF,
3260 (u8)(data_addr >> 24));
3261 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF,
3262 (u8)(data_addr >> 16));
3263 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF,
3264 (u8)(data_addr >> 8));
3265 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF,
3268 cfg2 = SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
3269 SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 |
3271 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
3274 trans_dma_enable(srb->sc_data_direction, chip,
3275 sector_cnt * 512, DMA_512);
3277 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3278 SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
3279 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3280 SD_TRANSFER_END, SD_TRANSFER_END);
3282 rtsx_send_cmd_no_wait(chip);
3284 retval = rtsx_send_cmd(chip, SD_CARD, 50);
3286 rtsx_clear_sd_error(chip);
3288 chip->rw_need_retry = 1;
3289 sd_set_err_code(chip, SD_TO_ERR);
3290 TRACE_GOTO(chip, RW_FAIL);
3293 retval = wait_data_buf_ready(chip);
3294 if (retval != STATUS_SUCCESS) {
3295 chip->rw_need_retry = 1;
3296 sd_set_err_code(chip, SD_TO_ERR);
3297 TRACE_GOTO(chip, RW_FAIL);
3300 retval = sd_send_cmd_get_rsp(chip, WRITE_MULTIPLE_BLOCK,
3301 data_addr, SD_RSP_TYPE_R1, NULL, 0);
3302 if (retval != STATUS_SUCCESS) {
3303 chip->rw_need_retry = 1;
3304 TRACE_GOTO(chip, RW_FAIL);
3307 rtsx_init_cmd(chip);
3309 cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 |
3310 SD_NO_WAIT_BUSY_END |
3311 SD_NO_CHECK_CRC7 | SD_RSP_LEN_0;
3312 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
3315 trans_dma_enable(srb->sc_data_direction, chip,
3316 sector_cnt * 512, DMA_512);
3318 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3319 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3320 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3321 SD_TRANSFER_END, SD_TRANSFER_END);
3323 rtsx_send_cmd_no_wait(chip);
3326 sd_card->seq_mode = 1;
3329 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
3330 scsi_bufflen(srb), scsi_sg_count(srb),
3331 srb->sc_data_direction, chip->sd_timeout);
3336 sd_card->seq_mode = 0;
3338 if (retval == -ETIMEDOUT)
3339 err = STATUS_TIMEDOUT;
3343 rtsx_read_register(chip, REG_SD_STAT1, &stat);
3344 rtsx_clear_sd_error(chip);
3345 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3346 chip->rw_need_retry = 0;
3347 dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n");
3348 TRACE_RET(chip, STATUS_FAIL);
3351 chip->rw_need_retry = 1;
3353 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3354 SD_RSP_TYPE_R1b, NULL, 0);
3355 if (retval != STATUS_SUCCESS) {
3356 sd_set_err_code(chip, SD_STS_ERR);
3357 TRACE_GOTO(chip, RW_FAIL);
3360 if (stat & (SD_CRC7_ERR | SD_CRC16_ERR | SD_CRC_WRITE_ERR)) {
3361 dev_dbg(rtsx_dev(chip), "SD CRC error, tune clock!\n");
3362 sd_set_err_code(chip, SD_CRC_ERR);
3363 TRACE_GOTO(chip, RW_FAIL);
3366 if (err == STATUS_TIMEDOUT) {
3367 sd_set_err_code(chip, SD_TO_ERR);
3368 TRACE_GOTO(chip, RW_FAIL);
3371 TRACE_RET(chip, err);
3374 sd_card->pre_sec_addr = start_sector;
3375 sd_card->pre_sec_cnt = sector_cnt;
3376 sd_card->pre_dir = srb->sc_data_direction;
3378 return STATUS_SUCCESS;
3381 sd_card->seq_mode = 0;
3383 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3384 chip->rw_need_retry = 0;
3385 dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n");
3386 TRACE_RET(chip, STATUS_FAIL);
3389 if (sd_check_err_code(chip, SD_CRC_ERR)) {
3390 if (CHK_MMC_4BIT(sd_card) || CHK_MMC_8BIT(sd_card)) {
3391 sd_card->mmc_dont_switch_bus = 1;
3392 reset_mmc_only(chip);
3393 sd_card->mmc_dont_switch_bus = 0;
3395 sd_card->need_retune = 1;
3396 sd_auto_tune_clock(chip);
3398 } else if (sd_check_err_code(chip, SD_TO_ERR | SD_STS_ERR)) {
3399 retval = reset_sd_card(chip);
3400 if (retval != STATUS_SUCCESS) {
3401 chip->card_ready &= ~SD_CARD;
3402 chip->card_fail |= SD_CARD;
3403 chip->capacity[chip->card2lun[SD_CARD]] = 0;
3407 TRACE_RET(chip, STATUS_FAIL);
3411 int soft_reset_sd_card(struct rtsx_chip *chip)
3413 return reset_sd(chip);
3416 int ext_sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx,
3417 u32 arg, u8 rsp_type, u8 *rsp, int rsp_len, int special_check)
3426 dev_dbg(rtsx_dev(chip), "EXT SD/MMC CMD %d\n", cmd_idx);
3428 if (rsp_type == SD_RSP_TYPE_R1b)
3433 rtsx_init_cmd(chip);
3435 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
3436 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24));
3437 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16));
3438 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8));
3439 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg);
3441 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
3442 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE,
3443 0x01, PINGPONG_BUFFER);
3444 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
3445 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
3446 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
3449 if (rsp_type == SD_RSP_TYPE_R2) {
3450 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
3452 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
3455 } else if (rsp_type != SD_RSP_TYPE_R0) {
3456 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
3458 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
3462 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0, 0);
3464 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0);
3466 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
3468 if (retval == -ETIMEDOUT) {
3469 rtsx_clear_sd_error(chip);
3471 if (rsp_type & SD_WAIT_BUSY_END) {
3472 retval = sd_check_data0_status(chip);
3473 if (retval != STATUS_SUCCESS)
3474 TRACE_RET(chip, retval);
3476 sd_set_err_code(chip, SD_TO_ERR);
3479 TRACE_RET(chip, STATUS_FAIL);
3482 if (rsp_type == SD_RSP_TYPE_R0)
3483 return STATUS_SUCCESS;
3485 ptr = rtsx_get_cmd_data(chip) + 1;
3487 if ((ptr[0] & 0xC0) != 0) {
3488 sd_set_err_code(chip, SD_STS_ERR);
3489 TRACE_RET(chip, STATUS_FAIL);
3492 if (!(rsp_type & SD_NO_CHECK_CRC7)) {
3493 if (ptr[stat_idx] & SD_CRC7_ERR) {
3494 if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
3495 sd_set_err_code(chip, SD_CRC_ERR);
3496 TRACE_RET(chip, STATUS_FAIL);
3498 if (rty_cnt < SD_MAX_RETRY_COUNT) {
3503 sd_set_err_code(chip, SD_CRC_ERR);
3504 TRACE_RET(chip, STATUS_FAIL);
3509 if ((cmd_idx == SELECT_CARD) || (cmd_idx == APP_CMD) ||
3510 (cmd_idx == SEND_STATUS) || (cmd_idx == STOP_TRANSMISSION)) {
3511 if ((cmd_idx != STOP_TRANSMISSION) && (special_check == 0)) {
3513 TRACE_RET(chip, STATUS_FAIL);
3515 #ifdef SUPPORT_SD_LOCK
3521 TRACE_RET(chip, STATUS_FAIL);
3524 TRACE_RET(chip, STATUS_FAIL);
3526 if (cmd_idx == SELECT_CARD) {
3527 if (rsp_type == SD_RSP_TYPE_R2) {
3528 if ((ptr[3] & 0x1E) != 0x04)
3529 TRACE_RET(chip, STATUS_FAIL);
3531 } else if (rsp_type == SD_RSP_TYPE_R0) {
3532 if ((ptr[3] & 0x1E) != 0x03)
3533 TRACE_RET(chip, STATUS_FAIL);
3539 memcpy(rsp, ptr, rsp_len);
3541 return STATUS_SUCCESS;
3544 int ext_sd_get_rsp(struct rtsx_chip *chip, int len, u8 *rsp, u8 rsp_type)
3546 int retval, rsp_len;
3549 if (rsp_type == SD_RSP_TYPE_R0)
3550 return STATUS_SUCCESS;
3552 rtsx_init_cmd(chip);
3554 if (rsp_type == SD_RSP_TYPE_R2) {
3555 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
3557 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
3560 } else if (rsp_type != SD_RSP_TYPE_R0) {
3561 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
3563 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
3567 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0xFF, 0);
3569 retval = rtsx_send_cmd(chip, SD_CARD, 100);
3570 if (retval != STATUS_SUCCESS)
3571 TRACE_RET(chip, STATUS_FAIL);
3574 int min_len = (rsp_len < len) ? rsp_len : len;
3576 memcpy(rsp, rtsx_get_cmd_data(chip), min_len);
3578 dev_dbg(rtsx_dev(chip), "min_len = %d\n", min_len);
3579 dev_dbg(rtsx_dev(chip), "Response in cmd buf: 0x%x 0x%x 0x%x 0x%x\n",
3580 rsp[0], rsp[1], rsp[2], rsp[3]);
3583 return STATUS_SUCCESS;
3586 int sd_pass_thru_mode(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3588 struct sd_info *sd_card = &(chip->sd_card);
3589 unsigned int lun = SCSI_LUN(srb);
3612 sd_card->pre_cmd_err = 0;
3614 if (!(CHK_BIT(chip->lun_mc, lun))) {
3615 SET_BIT(chip->lun_mc, lun);
3616 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
3617 TRACE_RET(chip, TRANSPORT_FAILED);
3620 if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) ||
3621 (0x20 != srb->cmnd[4]) || (0x43 != srb->cmnd[5]) ||
3622 (0x61 != srb->cmnd[6]) || (0x72 != srb->cmnd[7]) ||
3623 (0x64 != srb->cmnd[8])) {
3624 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3625 TRACE_RET(chip, TRANSPORT_FAILED);
3628 switch (srb->cmnd[1] & 0x0F) {
3630 sd_card->sd_pass_thru_en = 0;
3634 sd_card->sd_pass_thru_en = 1;
3638 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3639 TRACE_RET(chip, TRANSPORT_FAILED);
3642 buf[5] = (1 == CHK_SD(sd_card)) ? 0x01 : 0x02;
3643 if (chip->card_wp & SD_CARD)
3646 buf[6] = (u8)(sd_card->sd_addr >> 16);
3647 buf[7] = (u8)(sd_card->sd_addr >> 24);
3649 buf[15] = chip->max_lun;
3651 len = min_t(int, 18, scsi_bufflen(srb));
3652 rtsx_stor_set_xfer_buf(buf, len, srb);
3654 return TRANSPORT_GOOD;
3657 static inline int get_rsp_type(struct scsi_cmnd *srb, u8 *rsp_type,
3660 if (!rsp_type || !rsp_len)
3663 switch (srb->cmnd[10]) {
3665 *rsp_type = SD_RSP_TYPE_R0;
3670 *rsp_type = SD_RSP_TYPE_R1;
3675 *rsp_type = SD_RSP_TYPE_R1b;
3680 *rsp_type = SD_RSP_TYPE_R2;
3685 *rsp_type = SD_RSP_TYPE_R3;
3693 return STATUS_SUCCESS;
3696 int sd_execute_no_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3698 struct sd_info *sd_card = &(chip->sd_card);
3699 unsigned int lun = SCSI_LUN(srb);
3700 int retval, rsp_len;
3701 u8 cmd_idx, rsp_type;
3702 u8 standby = 0, acmd = 0;
3705 if (!sd_card->sd_pass_thru_en) {
3706 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3707 TRACE_RET(chip, TRANSPORT_FAILED);
3710 retval = sd_switch_clock(chip);
3711 if (retval != STATUS_SUCCESS)
3712 TRACE_RET(chip, TRANSPORT_FAILED);
3714 if (sd_card->pre_cmd_err) {
3715 sd_card->pre_cmd_err = 0;
3716 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
3717 TRACE_RET(chip, TRANSPORT_FAILED);
3720 cmd_idx = srb->cmnd[2] & 0x3F;
3721 if (srb->cmnd[1] & 0x02)
3724 if (srb->cmnd[1] & 0x01)
3727 arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
3728 ((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
3730 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
3731 if (retval != STATUS_SUCCESS) {
3732 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3733 TRACE_RET(chip, TRANSPORT_FAILED);
3735 sd_card->last_rsp_type = rsp_type;
3737 retval = sd_switch_clock(chip);
3738 if (retval != STATUS_SUCCESS)
3739 TRACE_RET(chip, TRANSPORT_FAILED);
3741 #ifdef SUPPORT_SD_LOCK
3742 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
3743 if (CHK_MMC_8BIT(sd_card)) {
3744 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
3746 if (retval != STATUS_SUCCESS)
3747 TRACE_RET(chip, TRANSPORT_FAILED);
3749 } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
3750 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
3752 if (retval != STATUS_SUCCESS)
3753 TRACE_RET(chip, TRANSPORT_FAILED);
3757 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
3758 if (retval != STATUS_SUCCESS)
3759 TRACE_RET(chip, TRANSPORT_FAILED);
3763 retval = sd_select_card(chip, 0);
3764 if (retval != STATUS_SUCCESS)
3765 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3769 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
3771 SD_RSP_TYPE_R1, NULL, 0, 0);
3772 if (retval != STATUS_SUCCESS)
3773 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3776 retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
3777 sd_card->rsp, rsp_len, 0);
3778 if (retval != STATUS_SUCCESS)
3779 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3782 retval = sd_select_card(chip, 1);
3783 if (retval != STATUS_SUCCESS)
3784 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3787 #ifdef SUPPORT_SD_LOCK
3788 retval = sd_update_lock_status(chip);
3789 if (retval != STATUS_SUCCESS)
3790 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3793 scsi_set_resid(srb, 0);
3794 return TRANSPORT_GOOD;
3796 SD_Execute_Cmd_Failed:
3797 sd_card->pre_cmd_err = 1;
3798 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
3799 release_sd_card(chip);
3800 do_reset_sd_card(chip);
3801 if (!(chip->card_ready & SD_CARD))
3802 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
3804 TRACE_RET(chip, TRANSPORT_FAILED);
3807 int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3809 struct sd_info *sd_card = &(chip->sd_card);
3810 unsigned int lun = SCSI_LUN(srb);
3811 int retval, rsp_len, i;
3812 int cmd13_checkbit = 0, read_err = 0;
3813 u8 cmd_idx, rsp_type, bus_width;
3814 u8 send_cmd12 = 0, standby = 0, acmd = 0;
3817 if (!sd_card->sd_pass_thru_en) {
3818 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3819 TRACE_RET(chip, TRANSPORT_FAILED);
3822 if (sd_card->pre_cmd_err) {
3823 sd_card->pre_cmd_err = 0;
3824 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
3825 TRACE_RET(chip, TRANSPORT_FAILED);
3828 retval = sd_switch_clock(chip);
3829 if (retval != STATUS_SUCCESS)
3830 TRACE_RET(chip, TRANSPORT_FAILED);
3832 cmd_idx = srb->cmnd[2] & 0x3F;
3833 if (srb->cmnd[1] & 0x04)
3836 if (srb->cmnd[1] & 0x02)
3839 if (srb->cmnd[1] & 0x01)
3842 data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8]
3843 << 8) | srb->cmnd[9];
3845 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
3846 if (retval != STATUS_SUCCESS) {
3847 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3848 TRACE_RET(chip, TRANSPORT_FAILED);
3850 sd_card->last_rsp_type = rsp_type;
3852 retval = sd_switch_clock(chip);
3853 if (retval != STATUS_SUCCESS)
3854 TRACE_RET(chip, TRANSPORT_FAILED);
3856 #ifdef SUPPORT_SD_LOCK
3857 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
3858 if (CHK_MMC_8BIT(sd_card))
3859 bus_width = SD_BUS_WIDTH_8;
3860 else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card))
3861 bus_width = SD_BUS_WIDTH_4;
3863 bus_width = SD_BUS_WIDTH_1;
3865 bus_width = SD_BUS_WIDTH_4;
3867 dev_dbg(rtsx_dev(chip), "bus_width = %d\n", bus_width);
3869 bus_width = SD_BUS_WIDTH_4;
3872 if (data_len < 512) {
3873 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
3874 SD_RSP_TYPE_R1, NULL, 0, 0);
3875 if (retval != STATUS_SUCCESS)
3876 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3880 retval = sd_select_card(chip, 0);
3881 if (retval != STATUS_SUCCESS)
3882 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3886 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
3888 SD_RSP_TYPE_R1, NULL, 0, 0);
3889 if (retval != STATUS_SUCCESS)
3890 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3893 if (data_len <= 512) {
3896 u16 byte_cnt, blk_cnt;
3899 byte_cnt = ((u16)(srb->cmnd[8] & 0x03) << 8) | srb->cmnd[9];
3902 cmd[0] = 0x40 | cmd_idx;
3903 cmd[1] = srb->cmnd[3];
3904 cmd[2] = srb->cmnd[4];
3905 cmd[3] = srb->cmnd[5];
3906 cmd[4] = srb->cmnd[6];
3908 buf = kmalloc(data_len, GFP_KERNEL);
3910 TRACE_RET(chip, TRANSPORT_ERROR);
3912 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, byte_cnt,
3913 blk_cnt, bus_width, buf, data_len, 2000);
3914 if (retval != STATUS_SUCCESS) {
3917 rtsx_clear_sd_error(chip);
3918 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3921 min_len = min(data_len, scsi_bufflen(srb));
3922 rtsx_stor_set_xfer_buf(buf, min_len, srb);
3925 } else if (!(data_len & 0x1FF)) {
3926 rtsx_init_cmd(chip);
3928 trans_dma_enable(DMA_FROM_DEVICE, chip, data_len, DMA_512);
3930 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
3932 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
3934 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
3935 0xFF, (srb->cmnd[7] & 0xFE) >> 1);
3936 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
3937 0xFF, (u8)((data_len & 0x0001FE00) >> 9));
3939 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
3941 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF,
3943 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF,
3945 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF,
3947 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF,
3950 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
3951 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
3953 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
3954 0xFF, SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
3955 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3956 SD_TRANSFER_END, SD_TRANSFER_END);
3958 rtsx_send_cmd_no_wait(chip);
3960 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
3961 scsi_bufflen(srb), scsi_sg_count(srb),
3962 DMA_FROM_DEVICE, 10000);
3965 rtsx_clear_sd_error(chip);
3966 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3970 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3973 retval = ext_sd_get_rsp(chip, rsp_len, sd_card->rsp, rsp_type);
3974 if (retval != STATUS_SUCCESS)
3975 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3978 retval = sd_select_card(chip, 1);
3979 if (retval != STATUS_SUCCESS)
3980 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3984 retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
3985 0, SD_RSP_TYPE_R1b, NULL, 0, 0);
3986 if (retval != STATUS_SUCCESS)
3987 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3990 if (data_len < 512) {
3991 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
3992 SD_RSP_TYPE_R1, NULL, 0, 0);
3993 if (retval != STATUS_SUCCESS)
3994 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3996 retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
3997 if (retval != STATUS_SUCCESS)
3998 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4000 retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
4001 if (retval != STATUS_SUCCESS)
4002 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4005 if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
4008 for (i = 0; i < 3; i++) {
4009 retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS,
4011 SD_RSP_TYPE_R1, NULL, 0,
4013 if (retval == STATUS_SUCCESS)
4016 if (retval != STATUS_SUCCESS)
4017 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4019 scsi_set_resid(srb, 0);
4020 return TRANSPORT_GOOD;
4022 SD_Execute_Read_Cmd_Failed:
4023 sd_card->pre_cmd_err = 1;
4024 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4026 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
4028 release_sd_card(chip);
4029 do_reset_sd_card(chip);
4030 if (!(chip->card_ready & SD_CARD))
4031 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4033 TRACE_RET(chip, TRANSPORT_FAILED);
4036 int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4038 struct sd_info *sd_card = &(chip->sd_card);
4039 unsigned int lun = SCSI_LUN(srb);
4040 int retval, rsp_len, i;
4041 int cmd13_checkbit = 0, write_err = 0;
4042 u8 cmd_idx, rsp_type;
4043 u8 send_cmd12 = 0, standby = 0, acmd = 0;
4045 #ifdef SUPPORT_SD_LOCK
4046 int lock_cmd_fail = 0;
4047 u8 sd_lock_state = 0;
4048 u8 lock_cmd_type = 0;
4051 if (!sd_card->sd_pass_thru_en) {
4052 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4053 TRACE_RET(chip, TRANSPORT_FAILED);
4056 if (sd_card->pre_cmd_err) {
4057 sd_card->pre_cmd_err = 0;
4058 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4059 TRACE_RET(chip, TRANSPORT_FAILED);
4062 retval = sd_switch_clock(chip);
4063 if (retval != STATUS_SUCCESS)
4064 TRACE_RET(chip, TRANSPORT_FAILED);
4066 cmd_idx = srb->cmnd[2] & 0x3F;
4067 if (srb->cmnd[1] & 0x04)
4070 if (srb->cmnd[1] & 0x02)
4073 if (srb->cmnd[1] & 0x01)
4076 data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8]
4077 << 8) | srb->cmnd[9];
4078 arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
4079 ((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
4081 #ifdef SUPPORT_SD_LOCK
4082 if (cmd_idx == LOCK_UNLOCK) {
4083 sd_lock_state = sd_card->sd_lock_status;
4084 sd_lock_state &= SD_LOCKED;
4088 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
4089 if (retval != STATUS_SUCCESS) {
4090 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4091 TRACE_RET(chip, TRANSPORT_FAILED);
4093 sd_card->last_rsp_type = rsp_type;
4095 retval = sd_switch_clock(chip);
4096 if (retval != STATUS_SUCCESS)
4097 TRACE_RET(chip, TRANSPORT_FAILED);
4099 #ifdef SUPPORT_SD_LOCK
4100 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
4101 if (CHK_MMC_8BIT(sd_card)) {
4102 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4104 if (retval != STATUS_SUCCESS)
4105 TRACE_RET(chip, TRANSPORT_FAILED);
4107 } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
4108 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4110 if (retval != STATUS_SUCCESS)
4111 TRACE_RET(chip, TRANSPORT_FAILED);
4115 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
4116 if (retval != STATUS_SUCCESS)
4117 TRACE_RET(chip, TRANSPORT_FAILED);
4120 if (data_len < 512) {
4121 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
4122 SD_RSP_TYPE_R1, NULL, 0, 0);
4123 if (retval != STATUS_SUCCESS)
4124 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4128 retval = sd_select_card(chip, 0);
4129 if (retval != STATUS_SUCCESS)
4130 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4134 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
4136 SD_RSP_TYPE_R1, NULL, 0, 0);
4137 if (retval != STATUS_SUCCESS)
4138 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4141 retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
4142 sd_card->rsp, rsp_len, 0);
4143 if (retval != STATUS_SUCCESS)
4144 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4146 if (data_len <= 512) {
4150 buf = kmalloc(data_len, GFP_KERNEL);
4152 TRACE_RET(chip, TRANSPORT_ERROR);
4154 rtsx_stor_get_xfer_buf(buf, data_len, srb);
4156 #ifdef SUPPORT_SD_LOCK
4157 if (cmd_idx == LOCK_UNLOCK)
4158 lock_cmd_type = buf[0] & 0x0F;
4161 if (data_len > 256) {
4162 rtsx_init_cmd(chip);
4163 for (i = 0; i < 256; i++) {
4164 rtsx_add_cmd(chip, WRITE_REG_CMD,
4165 PPBUF_BASE2 + i, 0xFF, buf[i]);
4167 retval = rtsx_send_cmd(chip, 0, 250);
4168 if (retval != STATUS_SUCCESS) {
4170 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4173 rtsx_init_cmd(chip);
4174 for (i = 256; i < data_len; i++) {
4175 rtsx_add_cmd(chip, WRITE_REG_CMD,
4176 PPBUF_BASE2 + i, 0xFF, buf[i]);
4178 retval = rtsx_send_cmd(chip, 0, 250);
4179 if (retval != STATUS_SUCCESS) {
4181 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4184 rtsx_init_cmd(chip);
4185 for (i = 0; i < data_len; i++) {
4186 rtsx_add_cmd(chip, WRITE_REG_CMD,
4187 PPBUF_BASE2 + i, 0xFF, buf[i]);
4189 retval = rtsx_send_cmd(chip, 0, 250);
4190 if (retval != STATUS_SUCCESS) {
4192 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4198 rtsx_init_cmd(chip);
4200 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
4201 srb->cmnd[8] & 0x03);
4202 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
4204 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
4206 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
4208 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
4211 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
4212 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
4213 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
4214 SD_TRANSFER_END, SD_TRANSFER_END);
4216 retval = rtsx_send_cmd(chip, SD_CARD, 250);
4217 } else if (!(data_len & 0x1FF)) {
4218 rtsx_init_cmd(chip);
4220 trans_dma_enable(DMA_TO_DEVICE, chip, data_len, DMA_512);
4222 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
4224 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
4226 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
4227 0xFF, (srb->cmnd[7] & 0xFE) >> 1);
4228 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
4229 0xFF, (u8)((data_len & 0x0001FE00) >> 9));
4231 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
4232 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
4233 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
4234 SD_TRANSFER_END, SD_TRANSFER_END);
4236 rtsx_send_cmd_no_wait(chip);
4238 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
4239 scsi_bufflen(srb), scsi_sg_count(srb),
4240 DMA_TO_DEVICE, 10000);
4243 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4248 rtsx_clear_sd_error(chip);
4249 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4252 #ifdef SUPPORT_SD_LOCK
4253 if (cmd_idx == LOCK_UNLOCK) {
4254 if (lock_cmd_type == SD_ERASE) {
4255 sd_card->sd_erase_status = SD_UNDER_ERASING;
4256 scsi_set_resid(srb, 0);
4257 return TRANSPORT_GOOD;
4260 rtsx_init_cmd(chip);
4261 rtsx_add_cmd(chip, CHECK_REG_CMD, 0xFD30, 0x02, 0x02);
4263 rtsx_send_cmd(chip, SD_CARD, 250);
4265 retval = sd_update_lock_status(chip);
4266 if (retval != STATUS_SUCCESS) {
4267 dev_dbg(rtsx_dev(chip), "Lock command fail!\n");
4271 #endif /* SUPPORT_SD_LOCK */
4274 retval = sd_select_card(chip, 1);
4275 if (retval != STATUS_SUCCESS)
4276 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4280 retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
4281 0, SD_RSP_TYPE_R1b, NULL, 0, 0);
4282 if (retval != STATUS_SUCCESS)
4283 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4286 if (data_len < 512) {
4287 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
4288 SD_RSP_TYPE_R1, NULL, 0, 0);
4289 if (retval != STATUS_SUCCESS)
4290 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4292 retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
4293 if (retval != STATUS_SUCCESS)
4294 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4296 rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
4297 if (retval != STATUS_SUCCESS)
4298 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4301 if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
4304 for (i = 0; i < 3; i++) {
4305 retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS,
4307 SD_RSP_TYPE_R1, NULL, 0,
4309 if (retval == STATUS_SUCCESS)
4312 if (retval != STATUS_SUCCESS)
4313 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4315 #ifdef SUPPORT_SD_LOCK
4316 if (cmd_idx == LOCK_UNLOCK) {
4317 if (!lock_cmd_fail) {
4318 dev_dbg(rtsx_dev(chip), "lock_cmd_type = 0x%x\n",
4320 if (lock_cmd_type & SD_CLR_PWD)
4321 sd_card->sd_lock_status &= ~SD_PWD_EXIST;
4323 if (lock_cmd_type & SD_SET_PWD)
4324 sd_card->sd_lock_status |= SD_PWD_EXIST;
4327 dev_dbg(rtsx_dev(chip), "sd_lock_state = 0x%x, sd_card->sd_lock_status = 0x%x\n",
4328 sd_lock_state, sd_card->sd_lock_status);
4329 if (sd_lock_state ^ (sd_card->sd_lock_status & SD_LOCKED)) {
4330 sd_card->sd_lock_notify = 1;
4331 if (sd_lock_state) {
4332 if (sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) {
4333 sd_card->sd_lock_status |= (
4334 SD_UNLOCK_POW_ON | SD_SDR_RST);
4335 if (CHK_SD(sd_card)) {
4336 retval = reset_sd(chip);
4337 if (retval != STATUS_SUCCESS) {
4338 sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
4339 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4343 sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
4349 if (lock_cmd_fail) {
4350 scsi_set_resid(srb, 0);
4351 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4352 TRACE_RET(chip, TRANSPORT_FAILED);
4354 #endif /* SUPPORT_SD_LOCK */
4356 scsi_set_resid(srb, 0);
4357 return TRANSPORT_GOOD;
4359 SD_Execute_Write_Cmd_Failed:
4360 sd_card->pre_cmd_err = 1;
4361 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4363 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
4365 release_sd_card(chip);
4366 do_reset_sd_card(chip);
4367 if (!(chip->card_ready & SD_CARD))
4368 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4370 TRACE_RET(chip, TRANSPORT_FAILED);
4373 int sd_get_cmd_rsp(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4375 struct sd_info *sd_card = &(chip->sd_card);
4376 unsigned int lun = SCSI_LUN(srb);
4380 if (!sd_card->sd_pass_thru_en) {
4381 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4382 TRACE_RET(chip, TRANSPORT_FAILED);
4385 if (sd_card->pre_cmd_err) {
4386 sd_card->pre_cmd_err = 0;
4387 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4388 TRACE_RET(chip, TRANSPORT_FAILED);
4391 data_len = ((u16)srb->cmnd[7] << 8) | srb->cmnd[8];
4393 if (sd_card->last_rsp_type == SD_RSP_TYPE_R0) {
4394 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4395 TRACE_RET(chip, TRANSPORT_FAILED);
4396 } else if (sd_card->last_rsp_type == SD_RSP_TYPE_R2) {
4397 count = (data_len < 17) ? data_len : 17;
4399 count = (data_len < 6) ? data_len : 6;
4401 rtsx_stor_set_xfer_buf(sd_card->rsp, count, srb);
4403 dev_dbg(rtsx_dev(chip), "Response length: %d\n", data_len);
4404 dev_dbg(rtsx_dev(chip), "Response: 0x%x 0x%x 0x%x 0x%x\n",
4405 sd_card->rsp[0], sd_card->rsp[1],
4406 sd_card->rsp[2], sd_card->rsp[3]);
4408 scsi_set_resid(srb, 0);
4409 return TRANSPORT_GOOD;
4412 int sd_hw_rst(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4414 struct sd_info *sd_card = &(chip->sd_card);
4415 unsigned int lun = SCSI_LUN(srb);
4418 if (!sd_card->sd_pass_thru_en) {
4419 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4420 TRACE_RET(chip, TRANSPORT_FAILED);
4423 if (sd_card->pre_cmd_err) {
4424 sd_card->pre_cmd_err = 0;
4425 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4426 TRACE_RET(chip, TRANSPORT_FAILED);
4429 if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) ||
4430 (0x20 != srb->cmnd[4]) || (0x43 != srb->cmnd[5]) ||
4431 (0x61 != srb->cmnd[6]) || (0x72 != srb->cmnd[7]) ||
4432 (0x64 != srb->cmnd[8])) {
4433 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4434 TRACE_RET(chip, TRANSPORT_FAILED);
4437 switch (srb->cmnd[1] & 0x0F) {
4439 #ifdef SUPPORT_SD_LOCK
4440 if (0x64 == srb->cmnd[9])
4441 sd_card->sd_lock_status |= SD_SDR_RST;
4443 retval = reset_sd_card(chip);
4444 if (retval != STATUS_SUCCESS) {
4445 #ifdef SUPPORT_SD_LOCK
4446 sd_card->sd_lock_status &= ~SD_SDR_RST;
4448 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4449 sd_card->pre_cmd_err = 1;
4450 TRACE_RET(chip, TRANSPORT_FAILED);
4452 #ifdef SUPPORT_SD_LOCK
4453 sd_card->sd_lock_status &= ~SD_SDR_RST;
4458 retval = soft_reset_sd_card(chip);
4459 if (retval != STATUS_SUCCESS) {
4460 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4461 sd_card->pre_cmd_err = 1;
4462 TRACE_RET(chip, TRANSPORT_FAILED);
4467 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4468 TRACE_RET(chip, TRANSPORT_FAILED);
4471 scsi_set_resid(srb, 0);
4472 return TRANSPORT_GOOD;
4476 void sd_cleanup_work(struct rtsx_chip *chip)
4478 struct sd_info *sd_card = &(chip->sd_card);
4480 if (sd_card->seq_mode) {
4481 dev_dbg(rtsx_dev(chip), "SD: stop transmission\n");
4482 sd_stop_seq_mode(chip);
4483 sd_card->cleanup_counter = 0;
4487 int sd_power_off_card3v3(struct rtsx_chip *chip)
4491 retval = disable_card_clock(chip, SD_CARD);
4492 if (retval != STATUS_SUCCESS)
4493 TRACE_RET(chip, STATUS_FAIL);
4495 RTSX_WRITE_REG(chip, CARD_OE, SD_OUTPUT_EN, 0);
4497 if (!chip->ft2_fast_mode) {
4498 retval = card_power_off(chip, SD_CARD);
4499 if (retval != STATUS_SUCCESS)
4500 TRACE_RET(chip, STATUS_FAIL);
4505 if (chip->asic_code) {
4506 retval = sd_pull_ctl_disable(chip);
4507 if (retval != STATUS_SUCCESS)
4508 TRACE_RET(chip, STATUS_FAIL);
4510 RTSX_WRITE_REG(chip, FPGA_PULL_CTL,
4511 FPGA_SD_PULL_CTL_BIT | 0x20, FPGA_SD_PULL_CTL_BIT);
4514 return STATUS_SUCCESS;
4517 int release_sd_card(struct rtsx_chip *chip)
4519 struct sd_info *sd_card = &(chip->sd_card);
4522 chip->card_ready &= ~SD_CARD;
4523 chip->card_fail &= ~SD_CARD;
4524 chip->card_wp &= ~SD_CARD;
4529 #ifdef SUPPORT_SD_LOCK
4530 sd_card->sd_lock_status = 0;
4531 sd_card->sd_erase_status = 0;
4534 memset(sd_card->raw_csd, 0, 16);
4535 memset(sd_card->raw_scr, 0, 8);
4537 retval = sd_power_off_card3v3(chip);
4538 if (retval != STATUS_SUCCESS)
4539 TRACE_RET(chip, STATUS_FAIL);
4541 return STATUS_SUCCESS;