1 /* Driver for Realtek PCI-Express card reader
3 * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2, or (at your option) any
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, see <http://www.gnu.org/licenses/>.
23 #include <linux/blkdev.h>
24 #include <linux/kthread.h>
25 #include <linux/sched.h>
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 dev_dbg(rtsx_dev(chip), "%*ph\n", 16, sd_card->raw_csd);
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;
480 blk_size = rsp[6] & 0x0F;
481 c_size = ((u16)(rsp[7] & 0x03) << 10)
483 + ((u16)(rsp[9] & 0xC0) >> 6);
484 c_size_mult = (u8)((rsp[10] & 0x03) << 1);
485 c_size_mult += (rsp[11] & 0x80) >> 7;
486 sd_card->capacity = (((u32)(c_size + 1)) *
487 (1 << (c_size_mult + 2)))
490 u32 total_sector = 0;
492 total_sector = (((u32)rsp[8] & 0x3f) << 16) |
493 ((u32)rsp[9] << 8) | (u32)rsp[10];
494 sd_card->capacity = (total_sector + 1) << 10;
500 chip->card_wp |= SD_CARD;
502 dev_dbg(rtsx_dev(chip), "CSD WP Status: 0x%x\n", rsp[15]);
505 return STATUS_SUCCESS;
508 static int sd_set_sample_push_timing(struct rtsx_chip *chip)
510 struct sd_info *sd_card = &(chip->sd_card);
514 if ((chip->sd_ctl & SD_PUSH_POINT_CTL_MASK) == SD_PUSH_POINT_DELAY)
517 if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) == SD_SAMPLE_POINT_AUTO) {
518 if (chip->asic_code) {
519 if (CHK_SD_HS(sd_card) || CHK_MMC_52M(sd_card)) {
531 } else if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) ==
532 SD_SAMPLE_POINT_DELAY) {
539 RTSX_WRITE_REG(chip, REG_SD_CFG1, 0x1C, val);
541 return STATUS_SUCCESS;
544 static void sd_choose_proper_clock(struct rtsx_chip *chip)
546 struct sd_info *sd_card = &(chip->sd_card);
548 if (CHK_SD_SDR104(sd_card)) {
550 sd_card->sd_clock = chip->asic_sd_sdr104_clk;
552 sd_card->sd_clock = chip->fpga_sd_sdr104_clk;
554 } else if (CHK_SD_DDR50(sd_card)) {
556 sd_card->sd_clock = chip->asic_sd_ddr50_clk;
558 sd_card->sd_clock = chip->fpga_sd_ddr50_clk;
560 } else if (CHK_SD_SDR50(sd_card)) {
562 sd_card->sd_clock = chip->asic_sd_sdr50_clk;
564 sd_card->sd_clock = chip->fpga_sd_sdr50_clk;
566 } else if (CHK_SD_HS(sd_card)) {
568 sd_card->sd_clock = chip->asic_sd_hs_clk;
570 sd_card->sd_clock = chip->fpga_sd_hs_clk;
572 } else if (CHK_MMC_52M(sd_card) || CHK_MMC_DDR52(sd_card)) {
574 sd_card->sd_clock = chip->asic_mmc_52m_clk;
576 sd_card->sd_clock = chip->fpga_mmc_52m_clk;
578 } else if (CHK_MMC_26M(sd_card)) {
580 sd_card->sd_clock = 48;
582 sd_card->sd_clock = CLK_50;
586 static int sd_set_clock_divider(struct rtsx_chip *chip, u8 clk_div)
588 u8 mask = 0, val = 0;
591 if (clk_div == SD_CLK_DIVIDE_0)
593 else if (clk_div == SD_CLK_DIVIDE_128)
595 else if (clk_div == SD_CLK_DIVIDE_256)
598 RTSX_WRITE_REG(chip, REG_SD_CFG1, mask, val);
600 return STATUS_SUCCESS;
603 static int sd_set_init_para(struct rtsx_chip *chip)
605 struct sd_info *sd_card = &(chip->sd_card);
608 retval = sd_set_sample_push_timing(chip);
609 if (retval != STATUS_SUCCESS)
610 TRACE_RET(chip, STATUS_FAIL);
612 sd_choose_proper_clock(chip);
614 retval = switch_clock(chip, sd_card->sd_clock);
615 if (retval != STATUS_SUCCESS)
616 TRACE_RET(chip, STATUS_FAIL);
618 return STATUS_SUCCESS;
621 int sd_select_card(struct rtsx_chip *chip, int select)
623 struct sd_info *sd_card = &(chip->sd_card);
625 u8 cmd_idx, cmd_type;
629 cmd_idx = SELECT_CARD;
630 cmd_type = SD_RSP_TYPE_R1;
631 addr = sd_card->sd_addr;
633 cmd_idx = DESELECT_CARD;
634 cmd_type = SD_RSP_TYPE_R0;
638 retval = sd_send_cmd_get_rsp(chip, cmd_idx, addr, cmd_type, NULL, 0);
639 if (retval != STATUS_SUCCESS)
640 TRACE_RET(chip, STATUS_FAIL);
642 return STATUS_SUCCESS;
645 #ifdef SUPPORT_SD_LOCK
646 static int sd_update_lock_status(struct rtsx_chip *chip)
648 struct sd_info *sd_card = &(chip->sd_card);
652 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
653 SD_RSP_TYPE_R1, rsp, 5);
654 if (retval != STATUS_SUCCESS)
655 TRACE_RET(chip, STATUS_FAIL);
658 sd_card->sd_lock_status |= SD_LOCKED;
660 sd_card->sd_lock_status &= ~SD_LOCKED;
662 dev_dbg(rtsx_dev(chip), "sd_card->sd_lock_status = 0x%x\n",
663 sd_card->sd_lock_status);
666 TRACE_RET(chip, STATUS_FAIL);
668 return STATUS_SUCCESS;
672 static int sd_wait_state_data_ready(struct rtsx_chip *chip, u8 state,
673 u8 data_ready, int polling_cnt)
675 struct sd_info *sd_card = &(chip->sd_card);
679 for (i = 0; i < polling_cnt; i++) {
680 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
681 sd_card->sd_addr, SD_RSP_TYPE_R1, rsp,
683 if (retval != STATUS_SUCCESS)
684 TRACE_RET(chip, STATUS_FAIL);
686 if (((rsp[3] & 0x1E) == state) &&
687 ((rsp[3] & 0x01) == data_ready))
688 return STATUS_SUCCESS;
691 TRACE_RET(chip, STATUS_FAIL);
694 static int sd_change_bank_voltage(struct rtsx_chip *chip, u8 voltage)
698 if (voltage == SD_IO_3V3) {
699 if (chip->asic_code) {
700 retval = rtsx_write_phy_register(chip, 0x08,
703 if (retval != STATUS_SUCCESS)
704 TRACE_RET(chip, STATUS_FAIL);
706 RTSX_WRITE_REG(chip, SD_PAD_CTL, SD_IO_USING_1V8, 0);
708 } else if (voltage == SD_IO_1V8) {
709 if (chip->asic_code) {
710 retval = rtsx_write_phy_register(chip, 0x08,
713 if (retval != STATUS_SUCCESS)
714 TRACE_RET(chip, STATUS_FAIL);
716 RTSX_WRITE_REG(chip, SD_PAD_CTL, SD_IO_USING_1V8,
720 TRACE_RET(chip, STATUS_FAIL);
723 return STATUS_SUCCESS;
726 static int sd_voltage_switch(struct rtsx_chip *chip)
731 RTSX_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
734 retval = sd_send_cmd_get_rsp(chip, VOLTAGE_SWITCH, 0, SD_RSP_TYPE_R1,
736 if (retval != STATUS_SUCCESS)
737 TRACE_RET(chip, STATUS_FAIL);
739 udelay(chip->sd_voltage_switch_delay);
741 RTSX_READ_REG(chip, SD_BUS_STAT, &stat);
742 if (stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
743 SD_DAT1_STATUS | SD_DAT0_STATUS)) {
744 TRACE_RET(chip, STATUS_FAIL);
747 RTSX_WRITE_REG(chip, SD_BUS_STAT, 0xFF, SD_CLK_FORCE_STOP);
748 retval = sd_change_bank_voltage(chip, SD_IO_1V8);
749 if (retval != STATUS_SUCCESS)
750 TRACE_RET(chip, STATUS_FAIL);
754 RTSX_WRITE_REG(chip, SD_BUS_STAT, 0xFF, SD_CLK_TOGGLE_EN);
757 RTSX_READ_REG(chip, SD_BUS_STAT, &stat);
758 if ((stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
759 SD_DAT1_STATUS | SD_DAT0_STATUS)) !=
760 (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
761 SD_DAT1_STATUS | SD_DAT0_STATUS)) {
762 dev_dbg(rtsx_dev(chip), "SD_BUS_STAT: 0x%x\n", stat);
763 rtsx_write_register(chip, SD_BUS_STAT,
764 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
765 rtsx_write_register(chip, CARD_CLK_EN, 0xFF, 0);
766 TRACE_RET(chip, STATUS_FAIL);
769 RTSX_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
772 return STATUS_SUCCESS;
775 static int sd_reset_dcm(struct rtsx_chip *chip, u8 tune_dir)
777 if (tune_dir == TUNE_RX) {
778 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RESET | DCM_RX);
779 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RX);
781 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RESET | DCM_TX);
782 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_TX);
785 return STATUS_SUCCESS;
788 static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir)
790 struct sd_info *sd_card = &(chip->sd_card);
791 u16 SD_VP_CTL, SD_DCMPS_CTL;
796 dev_dbg(rtsx_dev(chip), "sd_change_phase (sample_point = %d, tune_dir = %d)\n",
797 sample_point, tune_dir);
799 if (tune_dir == TUNE_RX) {
800 SD_VP_CTL = SD_VPRX_CTL;
801 SD_DCMPS_CTL = SD_DCMPS_RX_CTL;
802 if (CHK_SD_DDR50(sd_card))
805 SD_VP_CTL = SD_VPTX_CTL;
806 SD_DCMPS_CTL = SD_DCMPS_TX_CTL;
809 if (chip->asic_code) {
810 RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, CHANGE_CLK);
811 RTSX_WRITE_REG(chip, SD_VP_CTL, 0x1F, sample_point);
812 RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET, 0);
813 RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET,
815 RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, 0);
817 rtsx_read_register(chip, SD_VP_CTL, &val);
818 dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
819 rtsx_read_register(chip, SD_DCMPS_CTL, &val);
820 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 rtsx_read_register(chip, SD_VP_CTL, &val);
867 dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
868 rtsx_read_register(chip, SD_DCMPS_CTL, &val);
869 dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val);
871 rtsx_write_register(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
872 rtsx_write_register(chip, SD_VP_CTL, PHASE_CHANGE, 0);
874 sd_reset_dcm(chip, tune_dir);
878 static int sd_check_spec(struct rtsx_chip *chip, u8 bus_width)
880 struct sd_info *sd_card = &(chip->sd_card);
884 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
885 SD_RSP_TYPE_R1, NULL, 0);
886 if (retval != STATUS_SUCCESS)
887 TRACE_RET(chip, STATUS_FAIL);
889 cmd[0] = 0x40 | SEND_SCR;
895 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 8, 1, bus_width,
897 if (retval != STATUS_SUCCESS) {
898 rtsx_clear_sd_error(chip);
899 TRACE_RET(chip, STATUS_FAIL);
902 memcpy(sd_card->raw_scr, buf, 8);
904 if ((buf[0] & 0x0F) == 0)
905 TRACE_RET(chip, STATUS_FAIL);
907 return STATUS_SUCCESS;
910 static int sd_query_switch_result(struct rtsx_chip *chip, u8 func_group,
911 u8 func_to_switch, u8 *buf, int buf_len)
913 u8 support_mask = 0, query_switch = 0, switch_busy = 0;
914 int support_offset = 0, query_switch_offset = 0, check_busy_offset = 0;
916 if (func_group == SD_FUNC_GROUP_1) {
917 support_offset = FUNCTION_GROUP1_SUPPORT_OFFSET;
918 query_switch_offset = FUNCTION_GROUP1_QUERY_SWITCH_OFFSET;
919 check_busy_offset = FUNCTION_GROUP1_CHECK_BUSY_OFFSET;
921 switch (func_to_switch) {
923 support_mask = HS_SUPPORT_MASK;
924 query_switch = HS_QUERY_SWITCH_OK;
925 switch_busy = HS_SWITCH_BUSY;
929 support_mask = SDR50_SUPPORT_MASK;
930 query_switch = SDR50_QUERY_SWITCH_OK;
931 switch_busy = SDR50_SWITCH_BUSY;
935 support_mask = SDR104_SUPPORT_MASK;
936 query_switch = SDR104_QUERY_SWITCH_OK;
937 switch_busy = SDR104_SWITCH_BUSY;
941 support_mask = DDR50_SUPPORT_MASK;
942 query_switch = DDR50_QUERY_SWITCH_OK;
943 switch_busy = DDR50_SWITCH_BUSY;
947 TRACE_RET(chip, STATUS_FAIL);
949 } else if (func_group == SD_FUNC_GROUP_3) {
950 support_offset = FUNCTION_GROUP3_SUPPORT_OFFSET;
951 query_switch_offset = FUNCTION_GROUP3_QUERY_SWITCH_OFFSET;
952 check_busy_offset = FUNCTION_GROUP3_CHECK_BUSY_OFFSET;
954 switch (func_to_switch) {
956 support_mask = DRIVING_TYPE_A_MASK;
957 query_switch = TYPE_A_QUERY_SWITCH_OK;
958 switch_busy = TYPE_A_SWITCH_BUSY;
962 support_mask = DRIVING_TYPE_C_MASK;
963 query_switch = TYPE_C_QUERY_SWITCH_OK;
964 switch_busy = TYPE_C_SWITCH_BUSY;
968 support_mask = DRIVING_TYPE_D_MASK;
969 query_switch = TYPE_D_QUERY_SWITCH_OK;
970 switch_busy = TYPE_D_SWITCH_BUSY;
974 TRACE_RET(chip, STATUS_FAIL);
976 } else if (func_group == SD_FUNC_GROUP_4) {
977 support_offset = FUNCTION_GROUP4_SUPPORT_OFFSET;
978 query_switch_offset = FUNCTION_GROUP4_QUERY_SWITCH_OFFSET;
979 check_busy_offset = FUNCTION_GROUP4_CHECK_BUSY_OFFSET;
981 switch (func_to_switch) {
982 case CURRENT_LIMIT_400:
983 support_mask = CURRENT_LIMIT_400_MASK;
984 query_switch = CURRENT_LIMIT_400_QUERY_SWITCH_OK;
985 switch_busy = CURRENT_LIMIT_400_SWITCH_BUSY;
988 case CURRENT_LIMIT_600:
989 support_mask = CURRENT_LIMIT_600_MASK;
990 query_switch = CURRENT_LIMIT_600_QUERY_SWITCH_OK;
991 switch_busy = CURRENT_LIMIT_600_SWITCH_BUSY;
994 case CURRENT_LIMIT_800:
995 support_mask = CURRENT_LIMIT_800_MASK;
996 query_switch = CURRENT_LIMIT_800_QUERY_SWITCH_OK;
997 switch_busy = CURRENT_LIMIT_800_SWITCH_BUSY;
1001 TRACE_RET(chip, STATUS_FAIL);
1004 TRACE_RET(chip, STATUS_FAIL);
1007 if (func_group == SD_FUNC_GROUP_1) {
1008 if (!(buf[support_offset] & support_mask) ||
1009 ((buf[query_switch_offset] & 0x0F) != query_switch)) {
1010 TRACE_RET(chip, STATUS_FAIL);
1014 /* Check 'Busy Status' */
1015 if ((buf[DATA_STRUCTURE_VER_OFFSET] == 0x01) &&
1016 ((buf[check_busy_offset] & switch_busy) == switch_busy)) {
1017 TRACE_RET(chip, STATUS_FAIL);
1020 return STATUS_SUCCESS;
1023 static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode,
1024 u8 func_group, u8 func_to_switch, u8 bus_width)
1026 struct sd_info *sd_card = &(chip->sd_card);
1030 dev_dbg(rtsx_dev(chip), "sd_check_switch_mode (mode = %d, func_group = %d, func_to_switch = %d)\n",
1031 mode, func_group, func_to_switch);
1033 cmd[0] = 0x40 | SWITCH;
1036 if (func_group == SD_FUNC_GROUP_1) {
1039 cmd[4] = 0xF0 + func_to_switch;
1040 } else if (func_group == SD_FUNC_GROUP_3) {
1042 cmd[3] = 0xF0 + func_to_switch;
1044 } else if (func_group == SD_FUNC_GROUP_4) {
1046 cmd[3] = 0x0F + (func_to_switch << 4);
1049 cmd[1] = SD_CHECK_MODE;
1055 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1, bus_width,
1057 if (retval != STATUS_SUCCESS) {
1058 rtsx_clear_sd_error(chip);
1059 TRACE_RET(chip, STATUS_FAIL);
1062 dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf);
1064 if (func_group == NO_ARGUMENT) {
1065 sd_card->func_group1_mask = buf[0x0D];
1066 sd_card->func_group2_mask = buf[0x0B];
1067 sd_card->func_group3_mask = buf[0x09];
1068 sd_card->func_group4_mask = buf[0x07];
1070 dev_dbg(rtsx_dev(chip), "func_group1_mask = 0x%02x\n",
1072 dev_dbg(rtsx_dev(chip), "func_group2_mask = 0x%02x\n",
1074 dev_dbg(rtsx_dev(chip), "func_group3_mask = 0x%02x\n",
1076 dev_dbg(rtsx_dev(chip), "func_group4_mask = 0x%02x\n",
1079 /* Maximum current consumption, check whether current is
1080 * acceptable; bit[511:496] = 0x0000 means some error happened.
1082 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;
1557 path[idx].len = path[idx].end -
1558 path[idx].start + 1;
1559 path[idx].mid = path[idx].start +
1565 if (cont_path_cnt == 0) {
1566 dev_dbg(rtsx_dev(chip), "No continuous phase path\n");
1569 int idx = cont_path_cnt - 1;
1571 path[idx].len = path[idx].end - path[idx].start + 1;
1572 path[idx].mid = path[idx].start + path[idx].len / 2;
1575 if ((path[0].start == 0) &&
1576 (path[cont_path_cnt - 1].end == MAX_PHASE)) {
1577 path[0].start = path[cont_path_cnt - 1].start - MAX_PHASE - 1;
1578 path[0].len += path[cont_path_cnt - 1].len;
1579 path[0].mid = path[0].start + path[0].len / 2;
1580 if (path[0].mid < 0)
1581 path[0].mid += MAX_PHASE + 1;
1589 for (i = 0; i < cont_path_cnt; i++) {
1590 if (path[i].len > max_len) {
1591 max_len = path[i].len;
1592 final_phase = (u8)path[i].mid;
1596 dev_dbg(rtsx_dev(chip), "path[%d].start = %d\n",
1598 dev_dbg(rtsx_dev(chip), "path[%d].end = %d\n", i, path[i].end);
1599 dev_dbg(rtsx_dev(chip), "path[%d].len = %d\n", i, path[i].len);
1600 dev_dbg(rtsx_dev(chip), "path[%d].mid = %d\n", i, path[i].mid);
1601 dev_dbg(rtsx_dev(chip), "\n");
1604 if (tune_dir == TUNE_TX) {
1605 if (CHK_SD_SDR104(sd_card)) {
1607 int temp_mid = (max_len - 16) / 2;
1608 int temp_final_phase =
1609 path[final_path_idx].end -
1610 (max_len - (6 + temp_mid));
1612 if (temp_final_phase < 0)
1613 final_phase = (u8)(temp_final_phase +
1616 final_phase = (u8)temp_final_phase;
1618 } else if (CHK_SD_SDR50(sd_card)) {
1620 int temp_mid = (max_len - 13) / 2;
1621 int temp_final_phase =
1622 path[final_path_idx].end -
1623 (max_len - (3 + temp_mid));
1625 if (temp_final_phase < 0)
1626 final_phase = (u8)(temp_final_phase +
1629 final_phase = (u8)temp_final_phase;
1635 dev_dbg(rtsx_dev(chip), "Final chosen phase: %d\n", final_phase);
1639 static int sd_tuning_rx(struct rtsx_chip *chip)
1641 struct sd_info *sd_card = &(chip->sd_card);
1644 u32 raw_phase_map[3], phase_map;
1646 int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
1648 if (CHK_SD(sd_card)) {
1649 if (CHK_SD_DDR50(sd_card))
1650 tuning_cmd = sd_ddr_tuning_rx_cmd;
1652 tuning_cmd = sd_sdr_tuning_rx_cmd;
1655 if (CHK_MMC_DDR52(sd_card))
1656 tuning_cmd = mmc_ddr_tunning_rx_cmd;
1658 TRACE_RET(chip, STATUS_FAIL);
1661 for (i = 0; i < 3; i++) {
1662 raw_phase_map[i] = 0;
1663 for (j = MAX_PHASE; j >= 0; j--) {
1664 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1665 sd_set_err_code(chip, SD_NO_CARD);
1666 TRACE_RET(chip, STATUS_FAIL);
1669 retval = tuning_cmd(chip, (u8)j);
1670 if (retval == STATUS_SUCCESS)
1671 raw_phase_map[i] |= 1 << j;
1675 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1676 for (i = 0; i < 3; i++)
1677 dev_dbg(rtsx_dev(chip), "RX raw_phase_map[%d] = 0x%08x\n",
1678 i, raw_phase_map[i]);
1680 dev_dbg(rtsx_dev(chip), "RX phase_map = 0x%08x\n", phase_map);
1682 final_phase = sd_search_final_phase(chip, phase_map, TUNE_RX);
1683 if (final_phase == 0xFF)
1684 TRACE_RET(chip, STATUS_FAIL);
1686 retval = sd_change_phase(chip, final_phase, TUNE_RX);
1687 if (retval != STATUS_SUCCESS)
1688 TRACE_RET(chip, STATUS_FAIL);
1690 return STATUS_SUCCESS;
1693 static int sd_ddr_pre_tuning_tx(struct rtsx_chip *chip)
1695 struct sd_info *sd_card = &(chip->sd_card);
1701 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1702 SD_RSP_80CLK_TIMEOUT_EN);
1705 for (i = MAX_PHASE; i >= 0; i--) {
1706 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1707 sd_set_err_code(chip, SD_NO_CARD);
1708 rtsx_write_register(chip, SD_CFG3,
1709 SD_RSP_80CLK_TIMEOUT_EN, 0);
1710 TRACE_RET(chip, STATUS_FAIL);
1713 retval = sd_change_phase(chip, (u8)i, TUNE_TX);
1714 if (retval != STATUS_SUCCESS)
1717 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
1718 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL,
1720 if ((retval == STATUS_SUCCESS) ||
1721 !sd_check_err_code(chip, SD_RSP_TIMEOUT))
1722 phase_map |= 1 << i;
1725 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1727 dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase_map = 0x%08x\n",
1730 final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
1731 if (final_phase == 0xFF)
1732 TRACE_RET(chip, STATUS_FAIL);
1734 retval = sd_change_phase(chip, final_phase, TUNE_TX);
1735 if (retval != STATUS_SUCCESS)
1736 TRACE_RET(chip, STATUS_FAIL);
1738 dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase: %d\n",
1741 return STATUS_SUCCESS;
1744 static int sd_tuning_tx(struct rtsx_chip *chip)
1746 struct sd_info *sd_card = &(chip->sd_card);
1749 u32 raw_phase_map[3], phase_map;
1751 int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
1753 if (CHK_SD(sd_card)) {
1754 if (CHK_SD_DDR50(sd_card))
1755 tuning_cmd = sd_ddr_tuning_tx_cmd;
1757 tuning_cmd = sd_sdr_tuning_tx_cmd;
1760 if (CHK_MMC_DDR52(sd_card))
1761 tuning_cmd = sd_ddr_tuning_tx_cmd;
1763 TRACE_RET(chip, STATUS_FAIL);
1766 for (i = 0; i < 3; i++) {
1767 raw_phase_map[i] = 0;
1768 for (j = MAX_PHASE; j >= 0; j--) {
1769 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1770 sd_set_err_code(chip, SD_NO_CARD);
1771 rtsx_write_register(chip, SD_CFG3,
1772 SD_RSP_80CLK_TIMEOUT_EN, 0);
1773 TRACE_RET(chip, STATUS_FAIL);
1776 retval = tuning_cmd(chip, (u8)j);
1777 if (retval == STATUS_SUCCESS)
1778 raw_phase_map[i] |= 1 << j;
1782 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1783 for (i = 0; i < 3; i++)
1784 dev_dbg(rtsx_dev(chip), "TX raw_phase_map[%d] = 0x%08x\n",
1785 i, raw_phase_map[i]);
1787 dev_dbg(rtsx_dev(chip), "TX phase_map = 0x%08x\n", phase_map);
1789 final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
1790 if (final_phase == 0xFF)
1791 TRACE_RET(chip, STATUS_FAIL);
1793 retval = sd_change_phase(chip, final_phase, TUNE_TX);
1794 if (retval != STATUS_SUCCESS)
1795 TRACE_RET(chip, STATUS_FAIL);
1797 return STATUS_SUCCESS;
1800 static int sd_sdr_tuning(struct rtsx_chip *chip)
1804 retval = sd_tuning_tx(chip);
1805 if (retval != STATUS_SUCCESS)
1806 TRACE_RET(chip, STATUS_FAIL);
1808 retval = sd_tuning_rx(chip);
1809 if (retval != STATUS_SUCCESS)
1810 TRACE_RET(chip, STATUS_FAIL);
1812 return STATUS_SUCCESS;
1815 static int sd_ddr_tuning(struct rtsx_chip *chip)
1819 if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
1820 retval = sd_ddr_pre_tuning_tx(chip);
1821 if (retval != STATUS_SUCCESS)
1822 TRACE_RET(chip, STATUS_FAIL);
1824 retval = sd_change_phase(chip, (u8)chip->sd_ddr_tx_phase,
1826 if (retval != STATUS_SUCCESS)
1827 TRACE_RET(chip, STATUS_FAIL);
1830 retval = sd_tuning_rx(chip);
1831 if (retval != STATUS_SUCCESS)
1832 TRACE_RET(chip, STATUS_FAIL);
1834 if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
1835 retval = sd_tuning_tx(chip);
1836 if (retval != STATUS_SUCCESS)
1837 TRACE_RET(chip, STATUS_FAIL);
1840 return STATUS_SUCCESS;
1843 static int mmc_ddr_tuning(struct rtsx_chip *chip)
1847 if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
1848 retval = sd_ddr_pre_tuning_tx(chip);
1849 if (retval != STATUS_SUCCESS)
1850 TRACE_RET(chip, STATUS_FAIL);
1852 retval = sd_change_phase(chip, (u8)chip->mmc_ddr_tx_phase,
1854 if (retval != STATUS_SUCCESS)
1855 TRACE_RET(chip, STATUS_FAIL);
1858 retval = sd_tuning_rx(chip);
1859 if (retval != STATUS_SUCCESS)
1860 TRACE_RET(chip, STATUS_FAIL);
1862 if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
1863 retval = sd_tuning_tx(chip);
1864 if (retval != STATUS_SUCCESS)
1865 TRACE_RET(chip, STATUS_FAIL);
1868 return STATUS_SUCCESS;
1871 int sd_switch_clock(struct rtsx_chip *chip)
1873 struct sd_info *sd_card = &(chip->sd_card);
1877 retval = select_card(chip, SD_CARD);
1878 if (retval != STATUS_SUCCESS)
1879 TRACE_RET(chip, STATUS_FAIL);
1881 retval = switch_clock(chip, sd_card->sd_clock);
1882 if (retval != STATUS_SUCCESS)
1883 TRACE_RET(chip, STATUS_FAIL);
1886 if (CHK_SD(sd_card)) {
1887 if (CHK_SD_DDR50(sd_card))
1888 retval = sd_ddr_tuning(chip);
1890 retval = sd_sdr_tuning(chip);
1892 if (CHK_MMC_DDR52(sd_card))
1893 retval = mmc_ddr_tuning(chip);
1896 if (retval != STATUS_SUCCESS)
1897 TRACE_RET(chip, STATUS_FAIL);
1900 return STATUS_SUCCESS;
1903 static int sd_prepare_reset(struct rtsx_chip *chip)
1905 struct sd_info *sd_card = &(chip->sd_card);
1908 if (chip->asic_code)
1909 sd_card->sd_clock = 29;
1911 sd_card->sd_clock = CLK_30;
1913 sd_card->sd_type = 0;
1914 sd_card->seq_mode = 0;
1915 sd_card->sd_data_buf_ready = 0;
1916 sd_card->capacity = 0;
1918 #ifdef SUPPORT_SD_LOCK
1919 sd_card->sd_lock_status = 0;
1920 sd_card->sd_erase_status = 0;
1923 chip->capacity[chip->card2lun[SD_CARD]] = 0;
1926 retval = sd_set_init_para(chip);
1927 if (retval != STATUS_SUCCESS)
1928 TRACE_RET(chip, retval);
1930 RTSX_WRITE_REG(chip, REG_SD_CFG1, 0xFF, 0x40);
1932 RTSX_WRITE_REG(chip, CARD_STOP, SD_STOP | SD_CLR_ERR,
1933 SD_STOP | SD_CLR_ERR);
1935 retval = select_card(chip, SD_CARD);
1936 if (retval != STATUS_SUCCESS)
1937 TRACE_RET(chip, STATUS_FAIL);
1939 return STATUS_SUCCESS;
1942 static int sd_pull_ctl_disable(struct rtsx_chip *chip)
1944 if (CHECK_PID(chip, 0x5208)) {
1945 RTSX_WRITE_REG(chip, CARD_PULL_CTL1, 0xFF,
1946 XD_D3_PD | SD_D7_PD | SD_CLK_PD | SD_D5_PD);
1947 RTSX_WRITE_REG(chip, CARD_PULL_CTL2, 0xFF,
1948 SD_D6_PD | SD_D0_PD | SD_D1_PD | XD_D5_PD);
1949 RTSX_WRITE_REG(chip, CARD_PULL_CTL3, 0xFF,
1950 SD_D4_PD | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
1951 RTSX_WRITE_REG(chip, CARD_PULL_CTL4, 0xFF,
1952 XD_RDY_PD | SD_D3_PD | SD_D2_PD | XD_ALE_PD);
1953 RTSX_WRITE_REG(chip, CARD_PULL_CTL5, 0xFF,
1954 MS_INS_PU | SD_WP_PD | SD_CD_PU | SD_CMD_PD);
1955 RTSX_WRITE_REG(chip, CARD_PULL_CTL6, 0xFF, MS_D5_PD | MS_D4_PD);
1956 } else if (CHECK_PID(chip, 0x5288)) {
1957 if (CHECK_BARO_PKG(chip, QFN)) {
1958 RTSX_WRITE_REG(chip, CARD_PULL_CTL1, 0xFF, 0x55);
1959 RTSX_WRITE_REG(chip, CARD_PULL_CTL2, 0xFF, 0x55);
1960 RTSX_WRITE_REG(chip, CARD_PULL_CTL3, 0xFF, 0x4B);
1961 RTSX_WRITE_REG(chip, CARD_PULL_CTL4, 0xFF, 0x69);
1965 return STATUS_SUCCESS;
1968 int sd_pull_ctl_enable(struct rtsx_chip *chip)
1972 rtsx_init_cmd(chip);
1974 if (CHECK_PID(chip, 0x5208)) {
1975 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF,
1976 XD_D3_PD | SD_DAT7_PU | SD_CLK_NP | SD_D5_PU);
1977 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF,
1978 SD_D6_PU | SD_D0_PU | SD_D1_PU | XD_D5_PD);
1979 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF,
1980 SD_D4_PU | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
1981 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF,
1982 XD_RDY_PD | SD_D3_PU | SD_D2_PU | XD_ALE_PD);
1983 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF,
1984 MS_INS_PU | SD_WP_PU | SD_CD_PU | SD_CMD_PU);
1985 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF,
1986 MS_D5_PD | MS_D4_PD);
1987 } else if (CHECK_PID(chip, 0x5288)) {
1988 if (CHECK_BARO_PKG(chip, QFN)) {
1989 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF,
1991 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF,
1993 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF,
1995 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF,
2000 retval = rtsx_send_cmd(chip, SD_CARD, 100);
2002 TRACE_RET(chip, STATUS_FAIL);
2004 return STATUS_SUCCESS;
2007 static int sd_init_power(struct rtsx_chip *chip)
2011 retval = sd_power_off_card3v3(chip);
2012 if (retval != STATUS_SUCCESS)
2013 TRACE_RET(chip, STATUS_FAIL);
2015 if (!chip->ft2_fast_mode)
2018 retval = enable_card_clock(chip, SD_CARD);
2019 if (retval != STATUS_SUCCESS)
2020 TRACE_RET(chip, STATUS_FAIL);
2022 if (chip->asic_code) {
2023 retval = sd_pull_ctl_enable(chip);
2024 if (retval != STATUS_SUCCESS)
2025 TRACE_RET(chip, STATUS_FAIL);
2027 RTSX_WRITE_REG(chip, FPGA_PULL_CTL, FPGA_SD_PULL_CTL_BIT | 0x20,
2031 if (!chip->ft2_fast_mode) {
2032 retval = card_power_on(chip, SD_CARD);
2033 if (retval != STATUS_SUCCESS)
2034 TRACE_RET(chip, STATUS_FAIL);
2039 if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
2040 dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
2042 TRACE_RET(chip, STATUS_FAIL);
2047 RTSX_WRITE_REG(chip, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN);
2049 return STATUS_SUCCESS;
2052 static int sd_dummy_clock(struct rtsx_chip *chip)
2054 RTSX_WRITE_REG(chip, REG_SD_CFG3, 0x01, 0x01);
2056 RTSX_WRITE_REG(chip, REG_SD_CFG3, 0x01, 0);
2058 return STATUS_SUCCESS;
2061 static int sd_read_lba0(struct rtsx_chip *chip)
2063 struct sd_info *sd_card = &(chip->sd_card);
2065 u8 cmd[5], bus_width;
2067 cmd[0] = 0x40 | READ_SINGLE_BLOCK;
2073 if (CHK_SD(sd_card)) {
2074 bus_width = SD_BUS_WIDTH_4;
2076 if (CHK_MMC_8BIT(sd_card))
2077 bus_width = SD_BUS_WIDTH_8;
2078 else if (CHK_MMC_4BIT(sd_card))
2079 bus_width = SD_BUS_WIDTH_4;
2081 bus_width = SD_BUS_WIDTH_1;
2084 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd,
2085 5, 512, 1, bus_width, NULL, 0, 100);
2086 if (retval != STATUS_SUCCESS) {
2087 rtsx_clear_sd_error(chip);
2088 TRACE_RET(chip, STATUS_FAIL);
2091 return STATUS_SUCCESS;
2094 static int sd_check_wp_state(struct rtsx_chip *chip)
2096 struct sd_info *sd_card = &(chip->sd_card);
2102 retval = sd_send_cmd_get_rsp(chip, APP_CMD,
2103 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
2104 if (retval != STATUS_SUCCESS)
2105 TRACE_RET(chip, STATUS_FAIL);
2107 cmd[0] = 0x40 | SD_STATUS;
2113 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1,
2114 SD_BUS_WIDTH_4, buf, 64, 250);
2115 if (retval != STATUS_SUCCESS) {
2116 rtsx_clear_sd_error(chip);
2118 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2119 SD_RSP_TYPE_R1, NULL, 0);
2120 TRACE_RET(chip, STATUS_FAIL);
2123 dev_dbg(rtsx_dev(chip), "ACMD13:\n");
2124 dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf);
2126 sd_card_type = ((u16)buf[2] << 8) | buf[3];
2127 dev_dbg(rtsx_dev(chip), "sd_card_type = 0x%04x\n", sd_card_type);
2128 if ((sd_card_type == 0x0001) || (sd_card_type == 0x0002)) {
2129 /* ROM card or OTP */
2130 chip->card_wp |= SD_CARD;
2133 /* Check SD Machanical Write-Protect Switch */
2134 val = rtsx_readl(chip, RTSX_BIPR);
2135 if (val & SD_WRITE_PROTECT)
2136 chip->card_wp |= SD_CARD;
2138 return STATUS_SUCCESS;
2141 static int reset_sd(struct rtsx_chip *chip)
2143 struct sd_info *sd_card = &(chip->sd_card);
2144 int retval, i = 0, j = 0, k = 0, hi_cap_flow = 0;
2145 int sd_dont_switch = 0;
2146 int support_1v8 = 0;
2149 u8 switch_bus_width;
2162 #ifdef SUPPORT_SD_LOCK
2163 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
2164 goto SD_UNLOCK_ENTRY;
2167 retval = sd_prepare_reset(chip);
2168 if (retval != STATUS_SUCCESS)
2169 TRACE_RET(chip, STATUS_FAIL);
2171 retval = sd_dummy_clock(chip);
2172 if (retval != STATUS_SUCCESS)
2173 TRACE_RET(chip, STATUS_FAIL);
2175 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip) && try_sdio) {
2178 for (; rty_cnt < chip->sdio_retry_cnt; rty_cnt++) {
2179 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2180 sd_set_err_code(chip, SD_NO_CARD);
2181 TRACE_RET(chip, STATUS_FAIL);
2184 retval = sd_send_cmd_get_rsp(chip, IO_SEND_OP_COND, 0,
2185 SD_RSP_TYPE_R4, rsp, 5);
2186 if (retval == STATUS_SUCCESS) {
2187 int func_num = (rsp[1] >> 4) & 0x07;
2190 dev_dbg(rtsx_dev(chip), "SD_IO card (Function number: %d)!\n",
2193 TRACE_RET(chip, STATUS_FAIL);
2199 sd_init_power(chip);
2201 sd_dummy_clock(chip);
2204 dev_dbg(rtsx_dev(chip), "Normal card!\n");
2207 /* Start Initialization Process of SD Card */
2209 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
2211 if (retval != STATUS_SUCCESS)
2212 TRACE_RET(chip, STATUS_FAIL);
2216 retval = sd_send_cmd_get_rsp(chip, SEND_IF_COND, 0x000001AA,
2217 SD_RSP_TYPE_R7, rsp, 5);
2218 if (retval == STATUS_SUCCESS) {
2219 if ((rsp[4] == 0xAA) && ((rsp[3] & 0x0f) == 0x01)) {
2221 voltage = SUPPORT_VOLTAGE | 0x40000000;
2226 voltage = SUPPORT_VOLTAGE;
2228 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0,
2229 SD_RSP_TYPE_R0, NULL, 0);
2230 if (retval != STATUS_SUCCESS)
2231 TRACE_RET(chip, STATUS_FAIL);
2237 retval = sd_send_cmd_get_rsp(chip, APP_CMD, 0, SD_RSP_TYPE_R1,
2239 if (retval != STATUS_SUCCESS) {
2240 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2241 sd_set_err_code(chip, SD_NO_CARD);
2242 TRACE_RET(chip, STATUS_FAIL);
2249 TRACE_RET(chip, STATUS_FAIL);
2252 retval = sd_send_cmd_get_rsp(chip, SD_APP_OP_COND, voltage,
2253 SD_RSP_TYPE_R3, rsp, 5);
2254 if (retval != STATUS_SUCCESS) {
2259 TRACE_RET(chip, STATUS_FAIL);
2264 } while (!(rsp[1] & 0x80) && (i < 255));
2267 TRACE_RET(chip, STATUS_FAIL);
2271 SET_SD_HCXC(sd_card);
2273 CLR_SD_HCXC(sd_card);
2277 CLR_SD_HCXC(sd_card);
2280 dev_dbg(rtsx_dev(chip), "support_1v8 = %d\n", support_1v8);
2283 retval = sd_voltage_switch(chip);
2284 if (retval != STATUS_SUCCESS)
2285 TRACE_RET(chip, STATUS_FAIL);
2288 retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
2290 if (retval != STATUS_SUCCESS)
2291 TRACE_RET(chip, STATUS_FAIL);
2293 for (i = 0; i < 3; i++) {
2294 retval = sd_send_cmd_get_rsp(chip, SEND_RELATIVE_ADDR, 0,
2295 SD_RSP_TYPE_R6, rsp, 5);
2296 if (retval != STATUS_SUCCESS)
2297 TRACE_RET(chip, STATUS_FAIL);
2299 sd_card->sd_addr = (u32)rsp[1] << 24;
2300 sd_card->sd_addr += (u32)rsp[2] << 16;
2302 if (sd_card->sd_addr)
2306 retval = sd_check_csd(chip, 1);
2307 if (retval != STATUS_SUCCESS)
2308 TRACE_RET(chip, STATUS_FAIL);
2310 retval = sd_select_card(chip, 1);
2311 if (retval != STATUS_SUCCESS)
2312 TRACE_RET(chip, STATUS_FAIL);
2314 #ifdef SUPPORT_SD_LOCK
2316 retval = sd_update_lock_status(chip);
2317 if (retval != STATUS_SUCCESS)
2318 TRACE_RET(chip, STATUS_FAIL);
2320 if (sd_card->sd_lock_status & SD_LOCKED) {
2321 sd_card->sd_lock_status |= (SD_LOCK_1BIT_MODE | SD_PWD_EXIST);
2322 return STATUS_SUCCESS;
2323 } else if (!(sd_card->sd_lock_status & SD_UNLOCK_POW_ON)) {
2324 sd_card->sd_lock_status &= ~SD_PWD_EXIST;
2328 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2329 SD_RSP_TYPE_R1, NULL, 0);
2330 if (retval != STATUS_SUCCESS)
2331 TRACE_RET(chip, STATUS_FAIL);
2333 retval = sd_send_cmd_get_rsp(chip, SET_CLR_CARD_DETECT, 0,
2334 SD_RSP_TYPE_R1, NULL, 0);
2335 if (retval != STATUS_SUCCESS)
2336 TRACE_RET(chip, STATUS_FAIL);
2339 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2340 SD_RSP_TYPE_R1, NULL, 0);
2341 if (retval != STATUS_SUCCESS)
2342 TRACE_RET(chip, STATUS_FAIL);
2344 retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2,
2345 SD_RSP_TYPE_R1, NULL, 0);
2346 if (retval != STATUS_SUCCESS)
2347 TRACE_RET(chip, STATUS_FAIL);
2349 switch_bus_width = SD_BUS_WIDTH_4;
2351 switch_bus_width = SD_BUS_WIDTH_1;
2354 retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
2356 if (retval != STATUS_SUCCESS)
2357 TRACE_RET(chip, STATUS_FAIL);
2359 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
2360 if (retval != STATUS_SUCCESS)
2361 TRACE_RET(chip, STATUS_FAIL);
2363 if (!(sd_card->raw_csd[4] & 0x40))
2366 if (!sd_dont_switch) {
2368 /* Set sd_switch_fail here, because we needn't
2369 * switch to UHS mode
2371 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
2372 DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK;
2375 /* Check the card whether follow SD1.1 spec or higher */
2376 retval = sd_check_spec(chip, switch_bus_width);
2377 if (retval == STATUS_SUCCESS) {
2378 retval = sd_switch_function(chip, switch_bus_width);
2379 if (retval != STATUS_SUCCESS) {
2380 sd_init_power(chip);
2388 sd_init_power(chip);
2398 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2399 SD_RSP_TYPE_R1, NULL, 0);
2400 if (retval != STATUS_SUCCESS)
2401 TRACE_RET(chip, STATUS_FAIL);
2403 retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2,
2404 SD_RSP_TYPE_R1, NULL, 0);
2405 if (retval != STATUS_SUCCESS)
2406 TRACE_RET(chip, STATUS_FAIL);
2409 #ifdef SUPPORT_SD_LOCK
2410 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2413 if (!sd20_mode && CHK_SD30_SPEED(sd_card)) {
2416 RTSX_WRITE_REG(chip, SD30_DRIVE_SEL, 0x07,
2417 chip->sd30_drive_sel_1v8);
2419 retval = sd_set_init_para(chip);
2420 if (retval != STATUS_SUCCESS)
2421 TRACE_RET(chip, STATUS_FAIL);
2423 if (CHK_SD_DDR50(sd_card))
2424 retval = sd_ddr_tuning(chip);
2426 retval = sd_sdr_tuning(chip);
2428 if (retval != STATUS_SUCCESS) {
2430 TRACE_RET(chip, STATUS_FAIL);
2432 retval = sd_init_power(chip);
2433 if (retval != STATUS_SUCCESS)
2434 TRACE_RET(chip, STATUS_FAIL);
2442 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2443 SD_RSP_TYPE_R1, NULL, 0);
2445 if (CHK_SD_DDR50(sd_card)) {
2446 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
2447 if (retval != STATUS_SUCCESS)
2452 retval = sd_read_lba0(chip);
2453 if (retval != STATUS_SUCCESS) {
2455 TRACE_RET(chip, STATUS_FAIL);
2457 retval = sd_init_power(chip);
2458 if (retval != STATUS_SUCCESS)
2459 TRACE_RET(chip, STATUS_FAIL);
2469 retval = sd_check_wp_state(chip);
2470 if (retval != STATUS_SUCCESS)
2471 TRACE_RET(chip, STATUS_FAIL);
2473 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
2475 #ifdef SUPPORT_SD_LOCK
2476 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
2477 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_H, 0xFF, 0x02);
2478 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_L, 0xFF, 0x00);
2482 return STATUS_SUCCESS;
2486 static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width)
2488 struct sd_info *sd_card = &(chip->sd_card);
2490 u8 buf[8] = {0}, bus_width, *ptr;
2494 retval = sd_send_cmd_get_rsp(chip, BUSTEST_W, 0, SD_RSP_TYPE_R1, NULL,
2496 if (retval != STATUS_SUCCESS)
2497 TRACE_RET(chip, SWITCH_FAIL);
2499 if (width == MMC_8BIT_BUS) {
2504 bus_width = SD_BUS_WIDTH_8;
2509 bus_width = SD_BUS_WIDTH_4;
2512 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0x02);
2513 if (retval != STATUS_SUCCESS)
2514 TRACE_RET(chip, SWITCH_ERR);
2516 retval = sd_write_data(chip, SD_TM_AUTO_WRITE_3,
2517 NULL, 0, byte_cnt, 1, bus_width, buf, len, 100);
2518 if (retval != STATUS_SUCCESS) {
2519 rtsx_clear_sd_error(chip);
2520 rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
2521 TRACE_RET(chip, SWITCH_ERR);
2524 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
2525 if (retval != STATUS_SUCCESS)
2526 TRACE_RET(chip, SWITCH_ERR);
2528 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", BUSTEST_R);
2530 rtsx_init_cmd(chip);
2532 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | BUSTEST_R);
2534 if (width == MMC_8BIT_BUS)
2535 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L,
2538 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L,
2541 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
2542 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
2544 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
2545 SD_CALCULATE_CRC7 | SD_NO_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
2546 SD_CHECK_CRC7 | SD_RSP_LEN_6);
2547 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
2549 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
2550 SD_TM_NORMAL_READ | SD_TRANSFER_START);
2551 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
2554 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2, 0, 0);
2555 if (width == MMC_8BIT_BUS)
2556 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 1, 0, 0);
2558 retval = rtsx_send_cmd(chip, SD_CARD, 100);
2560 rtsx_clear_sd_error(chip);
2561 TRACE_RET(chip, SWITCH_ERR);
2564 ptr = rtsx_get_cmd_data(chip) + 1;
2566 if (width == MMC_8BIT_BUS) {
2567 dev_dbg(rtsx_dev(chip), "BUSTEST_R [8bits]: 0x%02x 0x%02x\n",
2569 if ((ptr[0] == 0xAA) && (ptr[1] == 0x55)) {
2573 if (CHK_MMC_DDR52(sd_card))
2578 retval = sd_send_cmd_get_rsp(chip, SWITCH, arg,
2579 SD_RSP_TYPE_R1b, rsp, 5);
2580 if ((retval == STATUS_SUCCESS) &&
2581 !(rsp[4] & MMC_SWITCH_ERR))
2582 return SWITCH_SUCCESS;
2585 dev_dbg(rtsx_dev(chip), "BUSTEST_R [4bits]: 0x%02x\n", ptr[0]);
2586 if (ptr[0] == 0xA5) {
2590 if (CHK_MMC_DDR52(sd_card))
2595 retval = sd_send_cmd_get_rsp(chip, SWITCH, arg,
2596 SD_RSP_TYPE_R1b, rsp, 5);
2597 if ((retval == STATUS_SUCCESS) &&
2598 !(rsp[4] & MMC_SWITCH_ERR))
2599 return SWITCH_SUCCESS;
2603 TRACE_RET(chip, SWITCH_FAIL);
2607 static int mmc_switch_timing_bus(struct rtsx_chip *chip, int switch_ddr)
2609 struct sd_info *sd_card = &(chip->sd_card);
2611 u8 *ptr, card_type, card_type_mask = 0;
2613 CLR_MMC_HS(sd_card);
2615 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", SEND_EXT_CSD);
2617 rtsx_init_cmd(chip);
2619 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
2620 0x40 | SEND_EXT_CSD);
2621 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, 0);
2622 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, 0);
2623 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, 0);
2624 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, 0);
2626 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0);
2627 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 2);
2628 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
2629 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
2631 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
2632 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
2633 SD_CHECK_CRC7 | SD_RSP_LEN_6);
2634 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
2636 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
2637 SD_TM_NORMAL_READ | SD_TRANSFER_START);
2638 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
2641 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 196, 0xFF, 0);
2642 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 212, 0xFF, 0);
2643 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 213, 0xFF, 0);
2644 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 214, 0xFF, 0);
2645 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 215, 0xFF, 0);
2647 retval = rtsx_send_cmd(chip, SD_CARD, 1000);
2649 if (retval == -ETIMEDOUT) {
2650 rtsx_clear_sd_error(chip);
2651 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2652 SD_RSP_TYPE_R1, NULL, 0);
2654 TRACE_RET(chip, STATUS_FAIL);
2657 ptr = rtsx_get_cmd_data(chip);
2658 if (ptr[0] & SD_TRANSFER_ERR) {
2659 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2660 SD_RSP_TYPE_R1, NULL, 0);
2661 TRACE_RET(chip, STATUS_FAIL);
2664 if (CHK_MMC_SECTOR_MODE(sd_card)) {
2665 sd_card->capacity = ((u32)ptr[5] << 24) | ((u32)ptr[4] << 16) |
2666 ((u32)ptr[3] << 8) | ((u32)ptr[2]);
2669 card_type_mask = 0x03;
2670 card_type = ptr[1] & card_type_mask;
2674 if (card_type & 0x04) {
2676 SET_MMC_DDR52(sd_card);
2678 SET_MMC_52M(sd_card);
2679 } else if (card_type & 0x02) {
2680 SET_MMC_52M(sd_card);
2682 SET_MMC_26M(sd_card);
2685 retval = sd_send_cmd_get_rsp(chip, SWITCH,
2686 0x03B90100, SD_RSP_TYPE_R1b, rsp, 5);
2687 if ((retval != STATUS_SUCCESS) || (rsp[4] & MMC_SWITCH_ERR))
2688 CLR_MMC_HS(sd_card);
2691 sd_choose_proper_clock(chip);
2692 retval = switch_clock(chip, sd_card->sd_clock);
2693 if (retval != STATUS_SUCCESS)
2694 TRACE_RET(chip, STATUS_FAIL);
2696 /* Test Bus Procedure */
2697 retval = mmc_test_switch_bus(chip, MMC_8BIT_BUS);
2698 if (retval == SWITCH_SUCCESS) {
2699 SET_MMC_8BIT(sd_card);
2700 chip->card_bus_width[chip->card2lun[SD_CARD]] = 8;
2701 #ifdef SUPPORT_SD_LOCK
2702 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2704 } else if (retval == SWITCH_FAIL) {
2705 retval = mmc_test_switch_bus(chip, MMC_4BIT_BUS);
2706 if (retval == SWITCH_SUCCESS) {
2707 SET_MMC_4BIT(sd_card);
2708 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
2709 #ifdef SUPPORT_SD_LOCK
2710 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2712 } else if (retval == SWITCH_FAIL) {
2713 CLR_MMC_8BIT(sd_card);
2714 CLR_MMC_4BIT(sd_card);
2716 TRACE_RET(chip, STATUS_FAIL);
2719 TRACE_RET(chip, STATUS_FAIL);
2722 return STATUS_SUCCESS;
2726 static int reset_mmc(struct rtsx_chip *chip)
2728 struct sd_info *sd_card = &(chip->sd_card);
2729 int retval, i = 0, j = 0, k = 0;
2735 #ifdef SUPPORT_SD_LOCK
2736 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
2737 goto MMC_UNLOCK_ENTRY;
2741 retval = sd_prepare_reset(chip);
2742 if (retval != STATUS_SUCCESS)
2743 TRACE_RET(chip, retval);
2748 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
2750 if (retval != STATUS_SUCCESS)
2751 TRACE_RET(chip, STATUS_FAIL);
2754 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2755 sd_set_err_code(chip, SD_NO_CARD);
2756 TRACE_RET(chip, STATUS_FAIL);
2759 retval = sd_send_cmd_get_rsp(chip, SEND_OP_COND,
2760 (SUPPORT_VOLTAGE | 0x40000000),
2761 SD_RSP_TYPE_R3, rsp, 5);
2762 if (retval != STATUS_SUCCESS) {
2763 if (sd_check_err_code(chip, SD_BUSY) ||
2764 sd_check_err_code(chip, SD_TO_ERR)) {
2767 sd_clr_err_code(chip);
2770 TRACE_RET(chip, STATUS_FAIL);
2775 sd_clr_err_code(chip);
2778 TRACE_RET(chip, STATUS_FAIL);
2785 } while (!(rsp[1] & 0x80) && (i < 255));
2788 TRACE_RET(chip, STATUS_FAIL);
2790 if ((rsp[1] & 0x60) == 0x40)
2791 SET_MMC_SECTOR_MODE(sd_card);
2793 CLR_MMC_SECTOR_MODE(sd_card);
2795 retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
2797 if (retval != STATUS_SUCCESS)
2798 TRACE_RET(chip, STATUS_FAIL);
2800 sd_card->sd_addr = 0x00100000;
2801 retval = sd_send_cmd_get_rsp(chip, SET_RELATIVE_ADDR, sd_card->sd_addr,
2802 SD_RSP_TYPE_R6, rsp, 5);
2803 if (retval != STATUS_SUCCESS)
2804 TRACE_RET(chip, STATUS_FAIL);
2806 retval = sd_check_csd(chip, 1);
2807 if (retval != STATUS_SUCCESS)
2808 TRACE_RET(chip, STATUS_FAIL);
2810 spec_ver = (sd_card->raw_csd[0] & 0x3C) >> 2;
2812 retval = sd_select_card(chip, 1);
2813 if (retval != STATUS_SUCCESS)
2814 TRACE_RET(chip, STATUS_FAIL);
2816 retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
2818 if (retval != STATUS_SUCCESS)
2819 TRACE_RET(chip, STATUS_FAIL);
2821 #ifdef SUPPORT_SD_LOCK
2823 retval = sd_update_lock_status(chip);
2824 if (retval != STATUS_SUCCESS)
2825 TRACE_RET(chip, STATUS_FAIL);
2828 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
2829 if (retval != STATUS_SUCCESS)
2830 TRACE_RET(chip, STATUS_FAIL);
2832 chip->card_bus_width[chip->card2lun[SD_CARD]] = 1;
2834 if (!sd_card->mmc_dont_switch_bus) {
2835 if (spec_ver == 4) {
2837 retval = mmc_switch_timing_bus(chip, switch_ddr);
2838 if (retval != STATUS_SUCCESS) {
2839 retval = sd_init_power(chip);
2840 if (retval != STATUS_SUCCESS)
2841 TRACE_RET(chip, STATUS_FAIL);
2842 sd_card->mmc_dont_switch_bus = 1;
2843 TRACE_GOTO(chip, Switch_Fail);
2847 if (CHK_MMC_SECTOR_MODE(sd_card) && (sd_card->capacity == 0))
2848 TRACE_RET(chip, STATUS_FAIL);
2850 if (switch_ddr && CHK_MMC_DDR52(sd_card)) {
2851 retval = sd_set_init_para(chip);
2852 if (retval != STATUS_SUCCESS)
2853 TRACE_RET(chip, STATUS_FAIL);
2855 retval = mmc_ddr_tuning(chip);
2856 if (retval != STATUS_SUCCESS) {
2857 retval = sd_init_power(chip);
2858 if (retval != STATUS_SUCCESS)
2859 TRACE_RET(chip, STATUS_FAIL);
2862 TRACE_GOTO(chip, Switch_Fail);
2865 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
2866 if (retval == STATUS_SUCCESS) {
2867 retval = sd_read_lba0(chip);
2868 if (retval != STATUS_SUCCESS) {
2869 retval = sd_init_power(chip);
2870 if (retval != STATUS_SUCCESS)
2871 TRACE_RET(chip, STATUS_FAIL);
2874 TRACE_GOTO(chip, Switch_Fail);
2880 #ifdef SUPPORT_SD_LOCK
2881 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
2882 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_H, 0xFF, 0x02);
2883 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_L, 0xFF, 0x00);
2887 temp = rtsx_readl(chip, RTSX_BIPR);
2888 if (temp & SD_WRITE_PROTECT)
2889 chip->card_wp |= SD_CARD;
2891 return STATUS_SUCCESS;
2894 int reset_sd_card(struct rtsx_chip *chip)
2896 struct sd_info *sd_card = &(chip->sd_card);
2899 sd_init_reg_addr(chip);
2901 memset(sd_card, 0, sizeof(struct sd_info));
2902 chip->capacity[chip->card2lun[SD_CARD]] = 0;
2904 retval = enable_card_clock(chip, SD_CARD);
2905 if (retval != STATUS_SUCCESS)
2906 TRACE_RET(chip, STATUS_FAIL);
2908 if (chip->ignore_sd && CHK_SDIO_EXIST(chip) &&
2909 !CHK_SDIO_IGNORED(chip)) {
2910 if (chip->asic_code) {
2911 retval = sd_pull_ctl_enable(chip);
2912 if (retval != STATUS_SUCCESS)
2913 TRACE_RET(chip, STATUS_FAIL);
2915 retval = rtsx_write_register(chip, FPGA_PULL_CTL,
2916 FPGA_SD_PULL_CTL_BIT | 0x20, 0);
2917 if (retval != STATUS_SUCCESS)
2918 TRACE_RET(chip, STATUS_FAIL);
2920 retval = card_share_mode(chip, SD_CARD);
2921 if (retval != STATUS_SUCCESS)
2922 TRACE_RET(chip, STATUS_FAIL);
2925 TRACE_RET(chip, STATUS_FAIL);
2928 retval = sd_init_power(chip);
2929 if (retval != STATUS_SUCCESS)
2930 TRACE_RET(chip, STATUS_FAIL);
2932 if (chip->sd_ctl & RESET_MMC_FIRST) {
2933 retval = reset_mmc(chip);
2934 if (retval != STATUS_SUCCESS) {
2935 if (sd_check_err_code(chip, SD_NO_CARD))
2936 TRACE_RET(chip, STATUS_FAIL);
2938 retval = reset_sd(chip);
2939 if (retval != STATUS_SUCCESS)
2940 TRACE_RET(chip, STATUS_FAIL);
2943 retval = reset_sd(chip);
2944 if (retval != STATUS_SUCCESS) {
2945 if (sd_check_err_code(chip, SD_NO_CARD))
2946 TRACE_RET(chip, STATUS_FAIL);
2949 TRACE_RET(chip, STATUS_FAIL);
2951 retval = reset_mmc(chip);
2952 if (retval != STATUS_SUCCESS)
2953 TRACE_RET(chip, STATUS_FAIL);
2958 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
2959 if (retval != STATUS_SUCCESS)
2960 TRACE_RET(chip, STATUS_FAIL);
2962 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
2963 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
2965 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
2967 retval = sd_set_init_para(chip);
2968 if (retval != STATUS_SUCCESS)
2969 TRACE_RET(chip, STATUS_FAIL);
2971 dev_dbg(rtsx_dev(chip), "sd_card->sd_type = 0x%x\n", sd_card->sd_type);
2973 return STATUS_SUCCESS;
2976 static int reset_mmc_only(struct rtsx_chip *chip)
2978 struct sd_info *sd_card = &(chip->sd_card);
2981 sd_card->sd_type = 0;
2982 sd_card->seq_mode = 0;
2983 sd_card->sd_data_buf_ready = 0;
2984 sd_card->capacity = 0;
2985 sd_card->sd_switch_fail = 0;
2987 #ifdef SUPPORT_SD_LOCK
2988 sd_card->sd_lock_status = 0;
2989 sd_card->sd_erase_status = 0;
2992 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity = 0;
2994 retval = enable_card_clock(chip, SD_CARD);
2995 if (retval != STATUS_SUCCESS)
2996 TRACE_RET(chip, STATUS_FAIL);
2998 retval = sd_init_power(chip);
2999 if (retval != STATUS_SUCCESS)
3000 TRACE_RET(chip, STATUS_FAIL);
3002 retval = reset_mmc(chip);
3003 if (retval != STATUS_SUCCESS)
3004 TRACE_RET(chip, STATUS_FAIL);
3006 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
3007 if (retval != STATUS_SUCCESS)
3008 TRACE_RET(chip, STATUS_FAIL);
3010 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
3011 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
3013 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
3015 retval = sd_set_init_para(chip);
3016 if (retval != STATUS_SUCCESS)
3017 TRACE_RET(chip, STATUS_FAIL);
3019 dev_dbg(rtsx_dev(chip), "In reset_mmc_only, sd_card->sd_type = 0x%x\n",
3022 return STATUS_SUCCESS;
3025 #define WAIT_DATA_READY_RTY_CNT 255
3027 static int wait_data_buf_ready(struct rtsx_chip *chip)
3029 struct sd_info *sd_card = &(chip->sd_card);
3032 for (i = 0; i < WAIT_DATA_READY_RTY_CNT; i++) {
3033 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3034 sd_set_err_code(chip, SD_NO_CARD);
3035 TRACE_RET(chip, STATUS_FAIL);
3038 sd_card->sd_data_buf_ready = 0;
3040 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
3041 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3042 if (retval != STATUS_SUCCESS)
3043 TRACE_RET(chip, STATUS_FAIL);
3045 if (sd_card->sd_data_buf_ready) {
3046 return sd_send_cmd_get_rsp(chip, SEND_STATUS,
3047 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3051 sd_set_err_code(chip, SD_TO_ERR);
3053 TRACE_RET(chip, STATUS_FAIL);
3056 void sd_stop_seq_mode(struct rtsx_chip *chip)
3058 struct sd_info *sd_card = &(chip->sd_card);
3061 if (sd_card->seq_mode) {
3062 retval = sd_switch_clock(chip);
3063 if (retval != STATUS_SUCCESS)
3066 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3067 SD_RSP_TYPE_R1b, NULL, 0);
3068 if (retval != STATUS_SUCCESS)
3069 sd_set_err_code(chip, SD_STS_ERR);
3071 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
3072 if (retval != STATUS_SUCCESS)
3073 sd_set_err_code(chip, SD_STS_ERR);
3075 sd_card->seq_mode = 0;
3077 rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
3081 static inline int sd_auto_tune_clock(struct rtsx_chip *chip)
3083 struct sd_info *sd_card = &(chip->sd_card);
3086 if (chip->asic_code) {
3087 if (sd_card->sd_clock > 30)
3088 sd_card->sd_clock -= 20;
3090 switch (sd_card->sd_clock) {
3092 sd_card->sd_clock = CLK_150;
3096 sd_card->sd_clock = CLK_120;
3100 sd_card->sd_clock = CLK_100;
3104 sd_card->sd_clock = CLK_80;
3108 sd_card->sd_clock = CLK_60;
3112 sd_card->sd_clock = CLK_50;
3120 retval = sd_switch_clock(chip);
3121 if (retval != STATUS_SUCCESS)
3122 TRACE_RET(chip, STATUS_FAIL);
3124 return STATUS_SUCCESS;
3127 int sd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32 start_sector,
3130 struct sd_info *sd_card = &(chip->sd_card);
3135 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3136 dev_dbg(rtsx_dev(chip), "sd_rw: Read %d %s from 0x%x\n",
3137 sector_cnt, (sector_cnt > 1) ? "sectors" : "sector",
3140 dev_dbg(rtsx_dev(chip), "sd_rw: Write %d %s to 0x%x\n",
3141 sector_cnt, (sector_cnt > 1) ? "sectors" : "sector",
3145 sd_card->cleanup_counter = 0;
3147 if (!(chip->card_ready & SD_CARD)) {
3148 sd_card->seq_mode = 0;
3150 retval = reset_sd_card(chip);
3151 if (retval == STATUS_SUCCESS) {
3152 chip->card_ready |= SD_CARD;
3153 chip->card_fail &= ~SD_CARD;
3155 chip->card_ready &= ~SD_CARD;
3156 chip->card_fail |= SD_CARD;
3157 chip->capacity[chip->card2lun[SD_CARD]] = 0;
3158 chip->rw_need_retry = 1;
3159 TRACE_RET(chip, STATUS_FAIL);
3163 if (!CHK_SD_HCXC(sd_card) && !CHK_MMC_SECTOR_MODE(sd_card))
3164 data_addr = start_sector << 9;
3166 data_addr = start_sector;
3168 sd_clr_err_code(chip);
3170 retval = sd_switch_clock(chip);
3171 if (retval != STATUS_SUCCESS) {
3172 sd_set_err_code(chip, SD_IO_ERR);
3173 TRACE_GOTO(chip, RW_FAIL);
3176 if (sd_card->seq_mode &&
3177 ((sd_card->pre_dir != srb->sc_data_direction) ||
3178 ((sd_card->pre_sec_addr + sd_card->pre_sec_cnt) !=
3180 if ((sd_card->pre_sec_cnt < 0x80)
3181 && (sd_card->pre_dir == DMA_FROM_DEVICE)
3182 && !CHK_SD30_SPEED(sd_card)
3183 && !CHK_SD_HS(sd_card)
3184 && !CHK_MMC_HS(sd_card)) {
3185 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3186 SD_RSP_TYPE_R1, NULL, 0);
3189 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
3190 0, SD_RSP_TYPE_R1b, NULL, 0);
3191 if (retval != STATUS_SUCCESS) {
3192 chip->rw_need_retry = 1;
3193 sd_set_err_code(chip, SD_STS_ERR);
3194 TRACE_GOTO(chip, RW_FAIL);
3197 sd_card->seq_mode = 0;
3199 retval = rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
3200 if (retval != STATUS_SUCCESS) {
3201 sd_set_err_code(chip, SD_IO_ERR);
3202 TRACE_GOTO(chip, RW_FAIL);
3205 if ((sd_card->pre_sec_cnt < 0x80)
3206 && !CHK_SD30_SPEED(sd_card)
3207 && !CHK_SD_HS(sd_card)
3208 && !CHK_MMC_HS(sd_card)) {
3209 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3210 SD_RSP_TYPE_R1, NULL, 0);
3214 rtsx_init_cmd(chip);
3216 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0x00);
3217 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 0x02);
3218 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
3220 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
3221 (u8)(sector_cnt >> 8));
3223 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, RING_BUFFER);
3225 if (CHK_MMC_8BIT(sd_card))
3226 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3227 0x03, SD_BUS_WIDTH_8);
3228 else if (CHK_MMC_4BIT(sd_card) || CHK_SD(sd_card))
3229 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3230 0x03, SD_BUS_WIDTH_4);
3232 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3233 0x03, SD_BUS_WIDTH_1);
3235 if (sd_card->seq_mode) {
3236 cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16|
3237 SD_NO_WAIT_BUSY_END | SD_NO_CHECK_CRC7 |
3239 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, cfg2);
3241 trans_dma_enable(srb->sc_data_direction, chip, sector_cnt * 512,
3244 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3245 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3246 SD_TM_AUTO_READ_3 | SD_TRANSFER_START);
3248 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3249 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3252 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3253 SD_TRANSFER_END, SD_TRANSFER_END);
3255 rtsx_send_cmd_no_wait(chip);
3257 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3258 dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n",
3259 READ_MULTIPLE_BLOCK);
3260 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
3261 0x40 | READ_MULTIPLE_BLOCK);
3262 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF,
3263 (u8)(data_addr >> 24));
3264 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF,
3265 (u8)(data_addr >> 16));
3266 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF,
3267 (u8)(data_addr >> 8));
3268 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF,
3271 cfg2 = SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
3272 SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 |
3274 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
3277 trans_dma_enable(srb->sc_data_direction, chip,
3278 sector_cnt * 512, DMA_512);
3280 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3281 SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
3282 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3283 SD_TRANSFER_END, SD_TRANSFER_END);
3285 rtsx_send_cmd_no_wait(chip);
3287 retval = rtsx_send_cmd(chip, SD_CARD, 50);
3289 rtsx_clear_sd_error(chip);
3291 chip->rw_need_retry = 1;
3292 sd_set_err_code(chip, SD_TO_ERR);
3293 TRACE_GOTO(chip, RW_FAIL);
3296 retval = wait_data_buf_ready(chip);
3297 if (retval != STATUS_SUCCESS) {
3298 chip->rw_need_retry = 1;
3299 sd_set_err_code(chip, SD_TO_ERR);
3300 TRACE_GOTO(chip, RW_FAIL);
3303 retval = sd_send_cmd_get_rsp(chip, WRITE_MULTIPLE_BLOCK,
3304 data_addr, SD_RSP_TYPE_R1, NULL, 0);
3305 if (retval != STATUS_SUCCESS) {
3306 chip->rw_need_retry = 1;
3307 TRACE_GOTO(chip, RW_FAIL);
3310 rtsx_init_cmd(chip);
3312 cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 |
3313 SD_NO_WAIT_BUSY_END |
3314 SD_NO_CHECK_CRC7 | SD_RSP_LEN_0;
3315 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
3318 trans_dma_enable(srb->sc_data_direction, chip,
3319 sector_cnt * 512, DMA_512);
3321 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3322 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3323 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3324 SD_TRANSFER_END, SD_TRANSFER_END);
3326 rtsx_send_cmd_no_wait(chip);
3329 sd_card->seq_mode = 1;
3332 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
3333 scsi_bufflen(srb), scsi_sg_count(srb),
3334 srb->sc_data_direction, chip->sd_timeout);
3339 sd_card->seq_mode = 0;
3341 if (retval == -ETIMEDOUT)
3342 err = STATUS_TIMEDOUT;
3346 rtsx_read_register(chip, REG_SD_STAT1, &stat);
3347 rtsx_clear_sd_error(chip);
3348 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3349 chip->rw_need_retry = 0;
3350 dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n");
3351 TRACE_RET(chip, STATUS_FAIL);
3354 chip->rw_need_retry = 1;
3356 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3357 SD_RSP_TYPE_R1b, NULL, 0);
3358 if (retval != STATUS_SUCCESS) {
3359 sd_set_err_code(chip, SD_STS_ERR);
3360 TRACE_GOTO(chip, RW_FAIL);
3363 if (stat & (SD_CRC7_ERR | SD_CRC16_ERR | SD_CRC_WRITE_ERR)) {
3364 dev_dbg(rtsx_dev(chip), "SD CRC error, tune clock!\n");
3365 sd_set_err_code(chip, SD_CRC_ERR);
3366 TRACE_GOTO(chip, RW_FAIL);
3369 if (err == STATUS_TIMEDOUT) {
3370 sd_set_err_code(chip, SD_TO_ERR);
3371 TRACE_GOTO(chip, RW_FAIL);
3374 TRACE_RET(chip, err);
3377 sd_card->pre_sec_addr = start_sector;
3378 sd_card->pre_sec_cnt = sector_cnt;
3379 sd_card->pre_dir = srb->sc_data_direction;
3381 return STATUS_SUCCESS;
3384 sd_card->seq_mode = 0;
3386 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3387 chip->rw_need_retry = 0;
3388 dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n");
3389 TRACE_RET(chip, STATUS_FAIL);
3392 if (sd_check_err_code(chip, SD_CRC_ERR)) {
3393 if (CHK_MMC_4BIT(sd_card) || CHK_MMC_8BIT(sd_card)) {
3394 sd_card->mmc_dont_switch_bus = 1;
3395 reset_mmc_only(chip);
3396 sd_card->mmc_dont_switch_bus = 0;
3398 sd_card->need_retune = 1;
3399 sd_auto_tune_clock(chip);
3401 } else if (sd_check_err_code(chip, SD_TO_ERR | SD_STS_ERR)) {
3402 retval = reset_sd_card(chip);
3403 if (retval != STATUS_SUCCESS) {
3404 chip->card_ready &= ~SD_CARD;
3405 chip->card_fail |= SD_CARD;
3406 chip->capacity[chip->card2lun[SD_CARD]] = 0;
3410 TRACE_RET(chip, STATUS_FAIL);
3414 int soft_reset_sd_card(struct rtsx_chip *chip)
3416 return reset_sd(chip);
3419 int ext_sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx,
3420 u32 arg, u8 rsp_type, u8 *rsp, int rsp_len, int special_check)
3429 dev_dbg(rtsx_dev(chip), "EXT SD/MMC CMD %d\n", cmd_idx);
3431 if (rsp_type == SD_RSP_TYPE_R1b)
3436 rtsx_init_cmd(chip);
3438 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
3439 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24));
3440 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16));
3441 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8));
3442 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg);
3444 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
3445 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE,
3446 0x01, PINGPONG_BUFFER);
3447 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
3448 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
3449 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
3452 if (rsp_type == SD_RSP_TYPE_R2) {
3453 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
3455 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
3458 } else if (rsp_type != SD_RSP_TYPE_R0) {
3459 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
3461 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
3465 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0, 0);
3467 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0);
3469 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
3471 if (retval == -ETIMEDOUT) {
3472 rtsx_clear_sd_error(chip);
3474 if (rsp_type & SD_WAIT_BUSY_END) {
3475 retval = sd_check_data0_status(chip);
3476 if (retval != STATUS_SUCCESS)
3477 TRACE_RET(chip, retval);
3479 sd_set_err_code(chip, SD_TO_ERR);
3482 TRACE_RET(chip, STATUS_FAIL);
3485 if (rsp_type == SD_RSP_TYPE_R0)
3486 return STATUS_SUCCESS;
3488 ptr = rtsx_get_cmd_data(chip) + 1;
3490 if ((ptr[0] & 0xC0) != 0) {
3491 sd_set_err_code(chip, SD_STS_ERR);
3492 TRACE_RET(chip, STATUS_FAIL);
3495 if (!(rsp_type & SD_NO_CHECK_CRC7)) {
3496 if (ptr[stat_idx] & SD_CRC7_ERR) {
3497 if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
3498 sd_set_err_code(chip, SD_CRC_ERR);
3499 TRACE_RET(chip, STATUS_FAIL);
3501 if (rty_cnt < SD_MAX_RETRY_COUNT) {
3506 sd_set_err_code(chip, SD_CRC_ERR);
3507 TRACE_RET(chip, STATUS_FAIL);
3512 if ((cmd_idx == SELECT_CARD) || (cmd_idx == APP_CMD) ||
3513 (cmd_idx == SEND_STATUS) || (cmd_idx == STOP_TRANSMISSION)) {
3514 if ((cmd_idx != STOP_TRANSMISSION) && (special_check == 0)) {
3516 TRACE_RET(chip, STATUS_FAIL);
3518 #ifdef SUPPORT_SD_LOCK
3524 TRACE_RET(chip, STATUS_FAIL);
3527 TRACE_RET(chip, STATUS_FAIL);
3529 if (cmd_idx == SELECT_CARD) {
3530 if (rsp_type == SD_RSP_TYPE_R2) {
3531 if ((ptr[3] & 0x1E) != 0x04)
3532 TRACE_RET(chip, STATUS_FAIL);
3534 } else if (rsp_type == SD_RSP_TYPE_R0) {
3535 if ((ptr[3] & 0x1E) != 0x03)
3536 TRACE_RET(chip, STATUS_FAIL);
3542 memcpy(rsp, ptr, rsp_len);
3544 return STATUS_SUCCESS;
3547 int ext_sd_get_rsp(struct rtsx_chip *chip, int len, u8 *rsp, u8 rsp_type)
3549 int retval, rsp_len;
3552 if (rsp_type == SD_RSP_TYPE_R0)
3553 return STATUS_SUCCESS;
3555 rtsx_init_cmd(chip);
3557 if (rsp_type == SD_RSP_TYPE_R2) {
3558 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
3560 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
3563 } else if (rsp_type != SD_RSP_TYPE_R0) {
3564 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
3566 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
3570 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0xFF, 0);
3572 retval = rtsx_send_cmd(chip, SD_CARD, 100);
3573 if (retval != STATUS_SUCCESS)
3574 TRACE_RET(chip, STATUS_FAIL);
3577 int min_len = (rsp_len < len) ? rsp_len : len;
3579 memcpy(rsp, rtsx_get_cmd_data(chip), min_len);
3581 dev_dbg(rtsx_dev(chip), "min_len = %d\n", min_len);
3582 dev_dbg(rtsx_dev(chip), "Response in cmd buf: 0x%x 0x%x 0x%x 0x%x\n",
3583 rsp[0], rsp[1], rsp[2], rsp[3]);
3586 return STATUS_SUCCESS;
3589 int sd_pass_thru_mode(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3591 struct sd_info *sd_card = &(chip->sd_card);
3592 unsigned int lun = SCSI_LUN(srb);
3615 sd_card->pre_cmd_err = 0;
3617 if (!(CHK_BIT(chip->lun_mc, lun))) {
3618 SET_BIT(chip->lun_mc, lun);
3619 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
3620 TRACE_RET(chip, TRANSPORT_FAILED);
3623 if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) ||
3624 (0x20 != srb->cmnd[4]) || (0x43 != srb->cmnd[5]) ||
3625 (0x61 != srb->cmnd[6]) || (0x72 != srb->cmnd[7]) ||
3626 (0x64 != srb->cmnd[8])) {
3627 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3628 TRACE_RET(chip, TRANSPORT_FAILED);
3631 switch (srb->cmnd[1] & 0x0F) {
3633 sd_card->sd_pass_thru_en = 0;
3637 sd_card->sd_pass_thru_en = 1;
3641 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3642 TRACE_RET(chip, TRANSPORT_FAILED);
3645 buf[5] = (1 == CHK_SD(sd_card)) ? 0x01 : 0x02;
3646 if (chip->card_wp & SD_CARD)
3649 buf[6] = (u8)(sd_card->sd_addr >> 16);
3650 buf[7] = (u8)(sd_card->sd_addr >> 24);
3652 buf[15] = chip->max_lun;
3654 len = min_t(int, 18, scsi_bufflen(srb));
3655 rtsx_stor_set_xfer_buf(buf, len, srb);
3657 return TRANSPORT_GOOD;
3660 static inline int get_rsp_type(struct scsi_cmnd *srb, u8 *rsp_type,
3663 if (!rsp_type || !rsp_len)
3666 switch (srb->cmnd[10]) {
3668 *rsp_type = SD_RSP_TYPE_R0;
3673 *rsp_type = SD_RSP_TYPE_R1;
3678 *rsp_type = SD_RSP_TYPE_R1b;
3683 *rsp_type = SD_RSP_TYPE_R2;
3688 *rsp_type = SD_RSP_TYPE_R3;
3696 return STATUS_SUCCESS;
3699 int sd_execute_no_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3701 struct sd_info *sd_card = &(chip->sd_card);
3702 unsigned int lun = SCSI_LUN(srb);
3703 int retval, rsp_len;
3704 u8 cmd_idx, rsp_type;
3705 u8 standby = 0, acmd = 0;
3708 if (!sd_card->sd_pass_thru_en) {
3709 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3710 TRACE_RET(chip, TRANSPORT_FAILED);
3713 retval = sd_switch_clock(chip);
3714 if (retval != STATUS_SUCCESS)
3715 TRACE_RET(chip, TRANSPORT_FAILED);
3717 if (sd_card->pre_cmd_err) {
3718 sd_card->pre_cmd_err = 0;
3719 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
3720 TRACE_RET(chip, TRANSPORT_FAILED);
3723 cmd_idx = srb->cmnd[2] & 0x3F;
3724 if (srb->cmnd[1] & 0x02)
3727 if (srb->cmnd[1] & 0x01)
3730 arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
3731 ((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
3733 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
3734 if (retval != STATUS_SUCCESS) {
3735 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3736 TRACE_RET(chip, TRANSPORT_FAILED);
3738 sd_card->last_rsp_type = rsp_type;
3740 retval = sd_switch_clock(chip);
3741 if (retval != STATUS_SUCCESS)
3742 TRACE_RET(chip, TRANSPORT_FAILED);
3744 #ifdef SUPPORT_SD_LOCK
3745 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
3746 if (CHK_MMC_8BIT(sd_card)) {
3747 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
3749 if (retval != STATUS_SUCCESS)
3750 TRACE_RET(chip, TRANSPORT_FAILED);
3752 } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
3753 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
3755 if (retval != STATUS_SUCCESS)
3756 TRACE_RET(chip, TRANSPORT_FAILED);
3760 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
3761 if (retval != STATUS_SUCCESS)
3762 TRACE_RET(chip, TRANSPORT_FAILED);
3766 retval = sd_select_card(chip, 0);
3767 if (retval != STATUS_SUCCESS)
3768 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3772 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
3774 SD_RSP_TYPE_R1, NULL, 0, 0);
3775 if (retval != STATUS_SUCCESS)
3776 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3779 retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
3780 sd_card->rsp, rsp_len, 0);
3781 if (retval != STATUS_SUCCESS)
3782 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3785 retval = sd_select_card(chip, 1);
3786 if (retval != STATUS_SUCCESS)
3787 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3790 #ifdef SUPPORT_SD_LOCK
3791 retval = sd_update_lock_status(chip);
3792 if (retval != STATUS_SUCCESS)
3793 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3796 scsi_set_resid(srb, 0);
3797 return TRANSPORT_GOOD;
3799 SD_Execute_Cmd_Failed:
3800 sd_card->pre_cmd_err = 1;
3801 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
3802 release_sd_card(chip);
3803 do_reset_sd_card(chip);
3804 if (!(chip->card_ready & SD_CARD))
3805 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
3807 TRACE_RET(chip, TRANSPORT_FAILED);
3810 int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3812 struct sd_info *sd_card = &(chip->sd_card);
3813 unsigned int lun = SCSI_LUN(srb);
3814 int retval, rsp_len, i;
3815 int cmd13_checkbit = 0, read_err = 0;
3816 u8 cmd_idx, rsp_type, bus_width;
3817 u8 send_cmd12 = 0, standby = 0, acmd = 0;
3820 if (!sd_card->sd_pass_thru_en) {
3821 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3822 TRACE_RET(chip, TRANSPORT_FAILED);
3825 if (sd_card->pre_cmd_err) {
3826 sd_card->pre_cmd_err = 0;
3827 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
3828 TRACE_RET(chip, TRANSPORT_FAILED);
3831 retval = sd_switch_clock(chip);
3832 if (retval != STATUS_SUCCESS)
3833 TRACE_RET(chip, TRANSPORT_FAILED);
3835 cmd_idx = srb->cmnd[2] & 0x3F;
3836 if (srb->cmnd[1] & 0x04)
3839 if (srb->cmnd[1] & 0x02)
3842 if (srb->cmnd[1] & 0x01)
3845 data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8]
3846 << 8) | srb->cmnd[9];
3848 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
3849 if (retval != STATUS_SUCCESS) {
3850 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3851 TRACE_RET(chip, TRANSPORT_FAILED);
3853 sd_card->last_rsp_type = rsp_type;
3855 retval = sd_switch_clock(chip);
3856 if (retval != STATUS_SUCCESS)
3857 TRACE_RET(chip, TRANSPORT_FAILED);
3859 #ifdef SUPPORT_SD_LOCK
3860 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
3861 if (CHK_MMC_8BIT(sd_card))
3862 bus_width = SD_BUS_WIDTH_8;
3863 else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card))
3864 bus_width = SD_BUS_WIDTH_4;
3866 bus_width = SD_BUS_WIDTH_1;
3868 bus_width = SD_BUS_WIDTH_4;
3870 dev_dbg(rtsx_dev(chip), "bus_width = %d\n", bus_width);
3872 bus_width = SD_BUS_WIDTH_4;
3875 if (data_len < 512) {
3876 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
3877 SD_RSP_TYPE_R1, NULL, 0, 0);
3878 if (retval != STATUS_SUCCESS)
3879 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3883 retval = sd_select_card(chip, 0);
3884 if (retval != STATUS_SUCCESS)
3885 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3889 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
3891 SD_RSP_TYPE_R1, NULL, 0, 0);
3892 if (retval != STATUS_SUCCESS)
3893 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3896 if (data_len <= 512) {
3899 u16 byte_cnt, blk_cnt;
3902 byte_cnt = ((u16)(srb->cmnd[8] & 0x03) << 8) | srb->cmnd[9];
3905 cmd[0] = 0x40 | cmd_idx;
3906 cmd[1] = srb->cmnd[3];
3907 cmd[2] = srb->cmnd[4];
3908 cmd[3] = srb->cmnd[5];
3909 cmd[4] = srb->cmnd[6];
3911 buf = kmalloc(data_len, GFP_KERNEL);
3913 TRACE_RET(chip, TRANSPORT_ERROR);
3915 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, byte_cnt,
3916 blk_cnt, bus_width, buf, data_len, 2000);
3917 if (retval != STATUS_SUCCESS) {
3920 rtsx_clear_sd_error(chip);
3921 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3924 min_len = min(data_len, scsi_bufflen(srb));
3925 rtsx_stor_set_xfer_buf(buf, min_len, srb);
3928 } else if (!(data_len & 0x1FF)) {
3929 rtsx_init_cmd(chip);
3931 trans_dma_enable(DMA_FROM_DEVICE, chip, data_len, DMA_512);
3933 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
3935 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
3937 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
3938 0xFF, (srb->cmnd[7] & 0xFE) >> 1);
3939 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
3940 0xFF, (u8)((data_len & 0x0001FE00) >> 9));
3942 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
3944 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF,
3946 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF,
3948 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF,
3950 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF,
3953 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
3954 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
3956 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
3957 0xFF, SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
3958 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3959 SD_TRANSFER_END, SD_TRANSFER_END);
3961 rtsx_send_cmd_no_wait(chip);
3963 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
3964 scsi_bufflen(srb), scsi_sg_count(srb),
3965 DMA_FROM_DEVICE, 10000);
3968 rtsx_clear_sd_error(chip);
3969 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3973 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3976 retval = ext_sd_get_rsp(chip, rsp_len, sd_card->rsp, rsp_type);
3977 if (retval != STATUS_SUCCESS)
3978 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3981 retval = sd_select_card(chip, 1);
3982 if (retval != STATUS_SUCCESS)
3983 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3987 retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
3988 0, SD_RSP_TYPE_R1b, NULL, 0, 0);
3989 if (retval != STATUS_SUCCESS)
3990 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3993 if (data_len < 512) {
3994 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
3995 SD_RSP_TYPE_R1, NULL, 0, 0);
3996 if (retval != STATUS_SUCCESS)
3997 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3999 retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
4000 if (retval != STATUS_SUCCESS)
4001 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4003 retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
4004 if (retval != STATUS_SUCCESS)
4005 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4008 if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
4011 for (i = 0; i < 3; i++) {
4012 retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS,
4014 SD_RSP_TYPE_R1, NULL, 0,
4016 if (retval == STATUS_SUCCESS)
4019 if (retval != STATUS_SUCCESS)
4020 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4022 scsi_set_resid(srb, 0);
4023 return TRANSPORT_GOOD;
4025 SD_Execute_Read_Cmd_Failed:
4026 sd_card->pre_cmd_err = 1;
4027 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4029 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
4031 release_sd_card(chip);
4032 do_reset_sd_card(chip);
4033 if (!(chip->card_ready & SD_CARD))
4034 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4036 TRACE_RET(chip, TRANSPORT_FAILED);
4039 int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4041 struct sd_info *sd_card = &(chip->sd_card);
4042 unsigned int lun = SCSI_LUN(srb);
4043 int retval, rsp_len, i;
4044 int cmd13_checkbit = 0, write_err = 0;
4045 u8 cmd_idx, rsp_type;
4046 u8 send_cmd12 = 0, standby = 0, acmd = 0;
4048 #ifdef SUPPORT_SD_LOCK
4049 int lock_cmd_fail = 0;
4050 u8 sd_lock_state = 0;
4051 u8 lock_cmd_type = 0;
4054 if (!sd_card->sd_pass_thru_en) {
4055 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4056 TRACE_RET(chip, TRANSPORT_FAILED);
4059 if (sd_card->pre_cmd_err) {
4060 sd_card->pre_cmd_err = 0;
4061 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4062 TRACE_RET(chip, TRANSPORT_FAILED);
4065 retval = sd_switch_clock(chip);
4066 if (retval != STATUS_SUCCESS)
4067 TRACE_RET(chip, TRANSPORT_FAILED);
4069 cmd_idx = srb->cmnd[2] & 0x3F;
4070 if (srb->cmnd[1] & 0x04)
4073 if (srb->cmnd[1] & 0x02)
4076 if (srb->cmnd[1] & 0x01)
4079 data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8]
4080 << 8) | srb->cmnd[9];
4081 arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
4082 ((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
4084 #ifdef SUPPORT_SD_LOCK
4085 if (cmd_idx == LOCK_UNLOCK) {
4086 sd_lock_state = sd_card->sd_lock_status;
4087 sd_lock_state &= SD_LOCKED;
4091 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
4092 if (retval != STATUS_SUCCESS) {
4093 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4094 TRACE_RET(chip, TRANSPORT_FAILED);
4096 sd_card->last_rsp_type = rsp_type;
4098 retval = sd_switch_clock(chip);
4099 if (retval != STATUS_SUCCESS)
4100 TRACE_RET(chip, TRANSPORT_FAILED);
4102 #ifdef SUPPORT_SD_LOCK
4103 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
4104 if (CHK_MMC_8BIT(sd_card)) {
4105 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4107 if (retval != STATUS_SUCCESS)
4108 TRACE_RET(chip, TRANSPORT_FAILED);
4110 } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
4111 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4113 if (retval != STATUS_SUCCESS)
4114 TRACE_RET(chip, TRANSPORT_FAILED);
4118 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
4119 if (retval != STATUS_SUCCESS)
4120 TRACE_RET(chip, TRANSPORT_FAILED);
4123 if (data_len < 512) {
4124 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
4125 SD_RSP_TYPE_R1, NULL, 0, 0);
4126 if (retval != STATUS_SUCCESS)
4127 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4131 retval = sd_select_card(chip, 0);
4132 if (retval != STATUS_SUCCESS)
4133 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4137 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
4139 SD_RSP_TYPE_R1, NULL, 0, 0);
4140 if (retval != STATUS_SUCCESS)
4141 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4144 retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
4145 sd_card->rsp, rsp_len, 0);
4146 if (retval != STATUS_SUCCESS)
4147 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4149 if (data_len <= 512) {
4153 buf = kmalloc(data_len, GFP_KERNEL);
4155 TRACE_RET(chip, TRANSPORT_ERROR);
4157 rtsx_stor_get_xfer_buf(buf, data_len, srb);
4159 #ifdef SUPPORT_SD_LOCK
4160 if (cmd_idx == LOCK_UNLOCK)
4161 lock_cmd_type = buf[0] & 0x0F;
4164 if (data_len > 256) {
4165 rtsx_init_cmd(chip);
4166 for (i = 0; i < 256; i++) {
4167 rtsx_add_cmd(chip, WRITE_REG_CMD,
4168 PPBUF_BASE2 + i, 0xFF, buf[i]);
4170 retval = rtsx_send_cmd(chip, 0, 250);
4171 if (retval != STATUS_SUCCESS) {
4173 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4176 rtsx_init_cmd(chip);
4177 for (i = 256; i < data_len; i++) {
4178 rtsx_add_cmd(chip, WRITE_REG_CMD,
4179 PPBUF_BASE2 + i, 0xFF, buf[i]);
4181 retval = rtsx_send_cmd(chip, 0, 250);
4182 if (retval != STATUS_SUCCESS) {
4184 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4187 rtsx_init_cmd(chip);
4188 for (i = 0; i < data_len; i++) {
4189 rtsx_add_cmd(chip, WRITE_REG_CMD,
4190 PPBUF_BASE2 + i, 0xFF, buf[i]);
4192 retval = rtsx_send_cmd(chip, 0, 250);
4193 if (retval != STATUS_SUCCESS) {
4195 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4201 rtsx_init_cmd(chip);
4203 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
4204 srb->cmnd[8] & 0x03);
4205 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
4207 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
4209 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
4211 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
4214 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
4215 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
4216 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
4217 SD_TRANSFER_END, SD_TRANSFER_END);
4219 retval = rtsx_send_cmd(chip, SD_CARD, 250);
4220 } else if (!(data_len & 0x1FF)) {
4221 rtsx_init_cmd(chip);
4223 trans_dma_enable(DMA_TO_DEVICE, chip, data_len, DMA_512);
4225 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
4227 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
4229 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
4230 0xFF, (srb->cmnd[7] & 0xFE) >> 1);
4231 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
4232 0xFF, (u8)((data_len & 0x0001FE00) >> 9));
4234 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
4235 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
4236 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
4237 SD_TRANSFER_END, SD_TRANSFER_END);
4239 rtsx_send_cmd_no_wait(chip);
4241 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
4242 scsi_bufflen(srb), scsi_sg_count(srb),
4243 DMA_TO_DEVICE, 10000);
4246 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4251 rtsx_clear_sd_error(chip);
4252 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4255 #ifdef SUPPORT_SD_LOCK
4256 if (cmd_idx == LOCK_UNLOCK) {
4257 if (lock_cmd_type == SD_ERASE) {
4258 sd_card->sd_erase_status = SD_UNDER_ERASING;
4259 scsi_set_resid(srb, 0);
4260 return TRANSPORT_GOOD;
4263 rtsx_init_cmd(chip);
4264 rtsx_add_cmd(chip, CHECK_REG_CMD, 0xFD30, 0x02, 0x02);
4266 rtsx_send_cmd(chip, SD_CARD, 250);
4268 retval = sd_update_lock_status(chip);
4269 if (retval != STATUS_SUCCESS) {
4270 dev_dbg(rtsx_dev(chip), "Lock command fail!\n");
4274 #endif /* SUPPORT_SD_LOCK */
4277 retval = sd_select_card(chip, 1);
4278 if (retval != STATUS_SUCCESS)
4279 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4283 retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
4284 0, SD_RSP_TYPE_R1b, NULL, 0, 0);
4285 if (retval != STATUS_SUCCESS)
4286 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4289 if (data_len < 512) {
4290 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
4291 SD_RSP_TYPE_R1, NULL, 0, 0);
4292 if (retval != STATUS_SUCCESS)
4293 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4295 retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
4296 if (retval != STATUS_SUCCESS)
4297 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4299 rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
4300 if (retval != STATUS_SUCCESS)
4301 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4304 if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
4307 for (i = 0; i < 3; i++) {
4308 retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS,
4310 SD_RSP_TYPE_R1, NULL, 0,
4312 if (retval == STATUS_SUCCESS)
4315 if (retval != STATUS_SUCCESS)
4316 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4318 #ifdef SUPPORT_SD_LOCK
4319 if (cmd_idx == LOCK_UNLOCK) {
4320 if (!lock_cmd_fail) {
4321 dev_dbg(rtsx_dev(chip), "lock_cmd_type = 0x%x\n",
4323 if (lock_cmd_type & SD_CLR_PWD)
4324 sd_card->sd_lock_status &= ~SD_PWD_EXIST;
4326 if (lock_cmd_type & SD_SET_PWD)
4327 sd_card->sd_lock_status |= SD_PWD_EXIST;
4330 dev_dbg(rtsx_dev(chip), "sd_lock_state = 0x%x, sd_card->sd_lock_status = 0x%x\n",
4331 sd_lock_state, sd_card->sd_lock_status);
4332 if (sd_lock_state ^ (sd_card->sd_lock_status & SD_LOCKED)) {
4333 sd_card->sd_lock_notify = 1;
4334 if (sd_lock_state) {
4335 if (sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) {
4336 sd_card->sd_lock_status |= (
4337 SD_UNLOCK_POW_ON | SD_SDR_RST);
4338 if (CHK_SD(sd_card)) {
4339 retval = reset_sd(chip);
4340 if (retval != STATUS_SUCCESS) {
4341 sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
4342 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4346 sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
4352 if (lock_cmd_fail) {
4353 scsi_set_resid(srb, 0);
4354 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4355 TRACE_RET(chip, TRANSPORT_FAILED);
4357 #endif /* SUPPORT_SD_LOCK */
4359 scsi_set_resid(srb, 0);
4360 return TRANSPORT_GOOD;
4362 SD_Execute_Write_Cmd_Failed:
4363 sd_card->pre_cmd_err = 1;
4364 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4366 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
4368 release_sd_card(chip);
4369 do_reset_sd_card(chip);
4370 if (!(chip->card_ready & SD_CARD))
4371 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4373 TRACE_RET(chip, TRANSPORT_FAILED);
4376 int sd_get_cmd_rsp(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4378 struct sd_info *sd_card = &(chip->sd_card);
4379 unsigned int lun = SCSI_LUN(srb);
4383 if (!sd_card->sd_pass_thru_en) {
4384 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4385 TRACE_RET(chip, TRANSPORT_FAILED);
4388 if (sd_card->pre_cmd_err) {
4389 sd_card->pre_cmd_err = 0;
4390 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4391 TRACE_RET(chip, TRANSPORT_FAILED);
4394 data_len = ((u16)srb->cmnd[7] << 8) | srb->cmnd[8];
4396 if (sd_card->last_rsp_type == SD_RSP_TYPE_R0) {
4397 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4398 TRACE_RET(chip, TRANSPORT_FAILED);
4399 } else if (sd_card->last_rsp_type == SD_RSP_TYPE_R2) {
4400 count = (data_len < 17) ? data_len : 17;
4402 count = (data_len < 6) ? data_len : 6;
4404 rtsx_stor_set_xfer_buf(sd_card->rsp, count, srb);
4406 dev_dbg(rtsx_dev(chip), "Response length: %d\n", data_len);
4407 dev_dbg(rtsx_dev(chip), "Response: 0x%x 0x%x 0x%x 0x%x\n",
4408 sd_card->rsp[0], sd_card->rsp[1],
4409 sd_card->rsp[2], sd_card->rsp[3]);
4411 scsi_set_resid(srb, 0);
4412 return TRANSPORT_GOOD;
4415 int sd_hw_rst(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4417 struct sd_info *sd_card = &(chip->sd_card);
4418 unsigned int lun = SCSI_LUN(srb);
4421 if (!sd_card->sd_pass_thru_en) {
4422 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4423 TRACE_RET(chip, TRANSPORT_FAILED);
4426 if (sd_card->pre_cmd_err) {
4427 sd_card->pre_cmd_err = 0;
4428 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4429 TRACE_RET(chip, TRANSPORT_FAILED);
4432 if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) ||
4433 (0x20 != srb->cmnd[4]) || (0x43 != srb->cmnd[5]) ||
4434 (0x61 != srb->cmnd[6]) || (0x72 != srb->cmnd[7]) ||
4435 (0x64 != srb->cmnd[8])) {
4436 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4437 TRACE_RET(chip, TRANSPORT_FAILED);
4440 switch (srb->cmnd[1] & 0x0F) {
4442 #ifdef SUPPORT_SD_LOCK
4443 if (0x64 == srb->cmnd[9])
4444 sd_card->sd_lock_status |= SD_SDR_RST;
4446 retval = reset_sd_card(chip);
4447 if (retval != STATUS_SUCCESS) {
4448 #ifdef SUPPORT_SD_LOCK
4449 sd_card->sd_lock_status &= ~SD_SDR_RST;
4451 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4452 sd_card->pre_cmd_err = 1;
4453 TRACE_RET(chip, TRANSPORT_FAILED);
4455 #ifdef SUPPORT_SD_LOCK
4456 sd_card->sd_lock_status &= ~SD_SDR_RST;
4461 retval = soft_reset_sd_card(chip);
4462 if (retval != STATUS_SUCCESS) {
4463 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4464 sd_card->pre_cmd_err = 1;
4465 TRACE_RET(chip, TRANSPORT_FAILED);
4470 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4471 TRACE_RET(chip, TRANSPORT_FAILED);
4474 scsi_set_resid(srb, 0);
4475 return TRANSPORT_GOOD;
4479 void sd_cleanup_work(struct rtsx_chip *chip)
4481 struct sd_info *sd_card = &(chip->sd_card);
4483 if (sd_card->seq_mode) {
4484 dev_dbg(rtsx_dev(chip), "SD: stop transmission\n");
4485 sd_stop_seq_mode(chip);
4486 sd_card->cleanup_counter = 0;
4490 int sd_power_off_card3v3(struct rtsx_chip *chip)
4494 retval = disable_card_clock(chip, SD_CARD);
4495 if (retval != STATUS_SUCCESS)
4496 TRACE_RET(chip, STATUS_FAIL);
4498 RTSX_WRITE_REG(chip, CARD_OE, SD_OUTPUT_EN, 0);
4500 if (!chip->ft2_fast_mode) {
4501 retval = card_power_off(chip, SD_CARD);
4502 if (retval != STATUS_SUCCESS)
4503 TRACE_RET(chip, STATUS_FAIL);
4508 if (chip->asic_code) {
4509 retval = sd_pull_ctl_disable(chip);
4510 if (retval != STATUS_SUCCESS)
4511 TRACE_RET(chip, STATUS_FAIL);
4513 RTSX_WRITE_REG(chip, FPGA_PULL_CTL,
4514 FPGA_SD_PULL_CTL_BIT | 0x20, FPGA_SD_PULL_CTL_BIT);
4517 return STATUS_SUCCESS;
4520 int release_sd_card(struct rtsx_chip *chip)
4522 struct sd_info *sd_card = &(chip->sd_card);
4525 chip->card_ready &= ~SD_CARD;
4526 chip->card_fail &= ~SD_CARD;
4527 chip->card_wp &= ~SD_CARD;
4532 #ifdef SUPPORT_SD_LOCK
4533 sd_card->sd_lock_status = 0;
4534 sd_card->sd_erase_status = 0;
4537 memset(sd_card->raw_csd, 0, 16);
4538 memset(sd_card->raw_scr, 0, 8);
4540 retval = sd_power_off_card3v3(chip);
4541 if (retval != STATUS_SUCCESS)
4542 TRACE_RET(chip, STATUS_FAIL);
4544 return STATUS_SUCCESS;