1 /* Driver for Realtek PCI-Express card reader
3 * Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2, or (at your option) any
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, see <http://www.gnu.org/licenses/>.
19 * wwang (wei_wang@realsil.com.cn)
20 * No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
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)
83 if (CHECK_PID(chip, 0x5209)) {
84 REG_SD_CFG1 = SD_CFG1;
85 REG_SD_CFG2 = SD_CFG2;
86 REG_SD_CFG3 = SD_CFG3;
87 REG_SD_STAT1 = SD_STAT1;
88 REG_SD_STAT2 = SD_STAT2;
89 REG_SD_BUS_STAT = SD_BUS_STAT;
90 REG_SD_PAD_CTL = SD_PAD_CTL;
91 REG_SD_SAMPLE_POINT_CTL = SD_SAMPLE_POINT_CTL;
92 REG_SD_PUSH_POINT_CTL = SD_PUSH_POINT_CTL;
93 REG_SD_CMD0 = SD_CMD0;
94 REG_SD_CMD1 = SD_CMD1;
95 REG_SD_CMD2 = SD_CMD2;
96 REG_SD_CMD3 = SD_CMD3;
97 REG_SD_CMD4 = SD_CMD4;
98 REG_SD_CMD5 = SD_CMD5;
99 REG_SD_BYTE_CNT_L = SD_BYTE_CNT_L;
100 REG_SD_BYTE_CNT_H = SD_BYTE_CNT_H;
101 REG_SD_BLOCK_CNT_L = SD_BLOCK_CNT_L;
102 REG_SD_BLOCK_CNT_H = SD_BLOCK_CNT_H;
103 REG_SD_TRANSFER = SD_TRANSFER;
104 REG_SD_VPCLK0_CTL = SD_VPCLK0_CTL;
105 REG_SD_VPCLK1_CTL = SD_VPCLK1_CTL;
106 REG_SD_DCMPS0_CTL = SD_DCMPS0_CTL;
107 REG_SD_DCMPS1_CTL = SD_DCMPS1_CTL;
109 REG_SD_CFG1 = 0xFD31;
110 REG_SD_CFG2 = 0xFD33;
111 REG_SD_CFG3 = 0xFD3E;
112 REG_SD_STAT1 = 0xFD30;
116 REG_SD_SAMPLE_POINT_CTL = 0;
117 REG_SD_PUSH_POINT_CTL = 0;
118 REG_SD_CMD0 = 0xFD34;
119 REG_SD_CMD1 = 0xFD35;
120 REG_SD_CMD2 = 0xFD36;
121 REG_SD_CMD3 = 0xFD37;
122 REG_SD_CMD4 = 0xFD38;
123 REG_SD_CMD5 = 0xFD5A;
124 REG_SD_BYTE_CNT_L = 0xFD39;
125 REG_SD_BYTE_CNT_H = 0xFD3A;
126 REG_SD_BLOCK_CNT_L = 0xFD3B;
127 REG_SD_BLOCK_CNT_H = 0xFD3C;
128 REG_SD_TRANSFER = 0xFD32;
129 REG_SD_VPCLK0_CTL = 0;
130 REG_SD_VPCLK1_CTL = 0;
131 REG_SD_DCMPS0_CTL = 0;
132 REG_SD_DCMPS1_CTL = 0;
136 static int sd_check_data0_status(struct rtsx_chip *chip)
140 if (CHECK_PID(chip, 0x5209))
141 RTSX_READ_REG(chip, REG_SD_BUS_STAT, &stat);
143 RTSX_READ_REG(chip, REG_SD_STAT1, &stat);
145 if (!(stat & SD_DAT0_STATUS)) {
146 sd_set_err_code(chip, SD_BUSY);
147 TRACE_RET(chip, STATUS_FAIL);
150 return STATUS_SUCCESS;
153 static int sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx,
154 u32 arg, u8 rsp_type, u8 *rsp, int rsp_len)
156 struct sd_info *sd_card = &(chip->sd_card);
164 sd_clr_err_code(chip);
166 RTSX_DEBUGP("SD/MMC CMD %d, arg = 0x%08x\n", cmd_idx, arg);
168 if (rsp_type == SD_RSP_TYPE_R1b)
175 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
176 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24));
177 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16));
178 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8));
179 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg);
181 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
182 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE,
183 0x01, PINGPONG_BUFFER);
184 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
185 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
186 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
187 SD_TRANSFER_END | SD_STAT_IDLE, SD_TRANSFER_END | SD_STAT_IDLE);
189 if (rsp_type == SD_RSP_TYPE_R2) {
190 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16; reg_addr++)
191 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
194 } else if (rsp_type != SD_RSP_TYPE_R0) {
195 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4; reg_addr++)
196 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
201 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0);
203 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
207 rtsx_read_register(chip, REG_SD_STAT1, &val);
208 RTSX_DEBUGP("SD_STAT1: 0x%x\n", val);
210 if (CHECK_PID(chip, 0x5209)) {
211 rtsx_read_register(chip, REG_SD_STAT2, &val);
212 RTSX_DEBUGP("SD_STAT2: 0x%x\n", val);
214 if (val & SD_RSP_80CLK_TIMEOUT) {
215 rtsx_clear_sd_error(chip);
216 sd_set_err_code(chip, SD_RSP_TIMEOUT);
217 TRACE_RET(chip, STATUS_FAIL);
220 rtsx_read_register(chip, REG_SD_BUS_STAT, &val);
221 RTSX_DEBUGP("SD_BUS_STAT: 0x%x\n", val);
223 rtsx_read_register(chip, REG_SD_CFG3, &val);
224 RTSX_DEBUGP("SD_CFG3: 0x%x\n", val);
227 if (retval == -ETIMEDOUT) {
228 if (rsp_type & SD_WAIT_BUSY_END) {
229 retval = sd_check_data0_status(chip);
230 if (retval != STATUS_SUCCESS) {
231 rtsx_clear_sd_error(chip);
232 TRACE_RET(chip, retval);
235 sd_set_err_code(chip, SD_TO_ERR);
237 retval = STATUS_TIMEDOUT;
239 retval = STATUS_FAIL;
241 rtsx_clear_sd_error(chip);
243 TRACE_RET(chip, retval);
246 if (rsp_type == SD_RSP_TYPE_R0)
247 return STATUS_SUCCESS;
249 ptr = rtsx_get_cmd_data(chip) + 1;
251 if ((ptr[0] & 0xC0) != 0) {
252 sd_set_err_code(chip, SD_STS_ERR);
253 TRACE_RET(chip, STATUS_FAIL);
256 if (!(rsp_type & SD_NO_CHECK_CRC7)) {
257 if (ptr[stat_idx] & SD_CRC7_ERR) {
258 if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
259 sd_set_err_code(chip, SD_CRC_ERR);
260 TRACE_RET(chip, STATUS_FAIL);
262 if (rty_cnt < SD_MAX_RETRY_COUNT) {
267 sd_set_err_code(chip, SD_CRC_ERR);
268 TRACE_RET(chip, STATUS_FAIL);
273 if ((rsp_type == SD_RSP_TYPE_R1) || (rsp_type == SD_RSP_TYPE_R1b)) {
274 if ((cmd_idx != SEND_RELATIVE_ADDR) && (cmd_idx != SEND_IF_COND)) {
275 if (cmd_idx != STOP_TRANSMISSION) {
277 TRACE_RET(chip, STATUS_FAIL);
279 #ifdef SUPPORT_SD_LOCK
285 RTSX_DEBUGP("ptr[1]: 0x%02x\n", ptr[1]);
286 TRACE_RET(chip, STATUS_FAIL);
289 RTSX_DEBUGP("ptr[2]: 0x%02x\n", ptr[2]);
290 TRACE_RET(chip, STATUS_FAIL);
293 RTSX_DEBUGP("ptr[3]: 0x%02x\n", ptr[3]);
294 TRACE_RET(chip, STATUS_FAIL);
297 sd_card->sd_data_buf_ready = 1;
299 sd_card->sd_data_buf_ready = 0;
304 memcpy(rsp, ptr, rsp_len);
306 return STATUS_SUCCESS;
309 static int sd_read_data(struct rtsx_chip *chip,
310 u8 trans_mode, u8 *cmd, int cmd_len, u16 byte_cnt,
311 u16 blk_cnt, u8 bus_width, u8 *buf, int buf_len,
314 struct sd_info *sd_card = &(chip->sd_card);
318 sd_clr_err_code(chip);
324 TRACE_RET(chip, STATUS_FAIL);
329 RTSX_DEBUGP("SD/MMC CMD %d\n", cmd[0] - 0x40);
330 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++)
331 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0 + i, 0xFF, cmd[i]);
333 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, (u8)byte_cnt);
334 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, (u8)(byte_cnt >> 8));
335 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, (u8)blk_cnt);
336 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, (u8)(blk_cnt >> 8));
338 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
340 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
341 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END |
342 SD_CHECK_CRC7 | SD_RSP_LEN_6);
343 if (trans_mode != SD_TM_AUTO_TUNING)
344 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER);
346 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, trans_mode | SD_TRANSFER_START);
347 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, SD_TRANSFER_END);
349 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
351 if (retval == -ETIMEDOUT) {
352 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
353 SD_RSP_TYPE_R1, NULL, 0);
356 TRACE_RET(chip, STATUS_FAIL);
359 if (buf && buf_len) {
360 retval = rtsx_read_ppbuf(chip, buf, buf_len);
361 if (retval != STATUS_SUCCESS)
362 TRACE_RET(chip, STATUS_FAIL);
365 return STATUS_SUCCESS;
368 static int sd_write_data(struct rtsx_chip *chip, u8 trans_mode,
369 u8 *cmd, int cmd_len, u16 byte_cnt, u16 blk_cnt, u8 bus_width,
370 u8 *buf, int buf_len, int timeout)
372 struct sd_info *sd_card = &(chip->sd_card);
376 sd_clr_err_code(chip);
382 /* This function can't write data more than one page */
383 TRACE_RET(chip, STATUS_FAIL);
386 if (buf && buf_len) {
387 retval = rtsx_write_ppbuf(chip, buf, buf_len);
388 if (retval != STATUS_SUCCESS)
389 TRACE_RET(chip, STATUS_FAIL);
395 RTSX_DEBUGP("SD/MMC CMD %d\n", cmd[0] - 0x40);
396 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++) {
397 rtsx_add_cmd(chip, WRITE_REG_CMD,
398 REG_SD_CMD0 + i, 0xFF, cmd[i]);
401 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, (u8)byte_cnt);
402 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, (u8)(byte_cnt >> 8));
403 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, (u8)blk_cnt);
404 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, (u8)(blk_cnt >> 8));
406 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
408 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
409 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END |
410 SD_CHECK_CRC7 | SD_RSP_LEN_6);
412 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, trans_mode | SD_TRANSFER_START);
413 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, SD_TRANSFER_END);
415 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
417 if (retval == -ETIMEDOUT) {
418 sd_send_cmd_get_rsp(chip, SEND_STATUS,
419 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
422 TRACE_RET(chip, STATUS_FAIL);
425 return STATUS_SUCCESS;
428 static int sd_check_csd(struct rtsx_chip *chip, char check_wp)
430 struct sd_info *sd_card = &(chip->sd_card);
433 u8 csd_ver, trans_speed;
436 for (i = 0; i < 6; i++) {
437 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
438 sd_set_err_code(chip, SD_NO_CARD);
439 TRACE_RET(chip, STATUS_FAIL);
442 retval = sd_send_cmd_get_rsp(chip, SEND_CSD, sd_card->sd_addr, SD_RSP_TYPE_R2, rsp, 16);
443 if (retval == STATUS_SUCCESS)
448 TRACE_RET(chip, STATUS_FAIL);
450 memcpy(sd_card->raw_csd, rsp + 1, 15);
452 if (CHECK_PID(chip, 0x5209))
453 RTSX_READ_REG(chip, REG_SD_CMD5, sd_card->raw_csd + 15);
455 RTSX_DEBUGP("CSD Response:\n");
456 RTSX_DUMP(sd_card->raw_csd, 16);
458 csd_ver = (rsp[1] & 0xc0) >> 6;
459 RTSX_DEBUGP("csd_ver = %d\n", csd_ver);
461 trans_speed = rsp[4];
462 if ((trans_speed & 0x07) == 0x02) {
463 if ((trans_speed & 0xf8) >= 0x30) {
465 sd_card->sd_clock = 47;
467 sd_card->sd_clock = CLK_50;
469 } else if ((trans_speed & 0xf8) == 0x28) {
471 sd_card->sd_clock = 39;
473 sd_card->sd_clock = CLK_40;
475 } else if ((trans_speed & 0xf8) == 0x20) {
477 sd_card->sd_clock = 29;
479 sd_card->sd_clock = CLK_30;
481 } else if ((trans_speed & 0xf8) >= 0x10) {
483 sd_card->sd_clock = 23;
485 sd_card->sd_clock = CLK_20;
487 } else if ((trans_speed & 0x08) >= 0x08) {
489 sd_card->sd_clock = 19;
491 sd_card->sd_clock = CLK_20;
493 TRACE_RET(chip, STATUS_FAIL);
496 TRACE_RET(chip, STATUS_FAIL);
499 if (CHK_MMC_SECTOR_MODE(sd_card)) {
500 sd_card->capacity = 0;
502 if ((!CHK_SD_HCXC(sd_card)) || (csd_ver == 0)) {
503 u8 blk_size, c_size_mult;
505 blk_size = rsp[6] & 0x0F;
506 c_size = ((u16)(rsp[7] & 0x03) << 10)
508 + ((u16)(rsp[9] & 0xC0) >> 6);
509 c_size_mult = (u8)((rsp[10] & 0x03) << 1);
510 c_size_mult += (rsp[11] & 0x80) >> 7;
511 sd_card->capacity = (((u32)(c_size + 1)) * (1 << (c_size_mult + 2))) << (blk_size - 9);
513 u32 total_sector = 0;
514 total_sector = (((u32)rsp[8] & 0x3f) << 16) |
515 ((u32)rsp[9] << 8) | (u32)rsp[10];
516 sd_card->capacity = (total_sector + 1) << 10;
522 chip->card_wp |= SD_CARD;
524 RTSX_DEBUGP("CSD WP Status: 0x%x\n", rsp[15]);
527 return STATUS_SUCCESS;
530 static int sd_set_sample_push_timing(struct rtsx_chip *chip)
532 struct sd_info *sd_card = &(chip->sd_card);
534 if (CHECK_PID(chip, 0x5209)) {
535 if (CHK_SD_SDR104(sd_card) || CHK_SD_SDR50(sd_card)) {
536 RTSX_WRITE_REG(chip, SD_CFG1, 0x0C | SD_ASYNC_FIFO_NOT_RST,
537 SD_30_MODE | SD_ASYNC_FIFO_NOT_RST);
538 RTSX_WRITE_REG(chip, CLK_CTL, CLK_LOW_FREQ, CLK_LOW_FREQ);
539 RTSX_WRITE_REG(chip, CARD_CLK_SOURCE, 0xFF,
540 CRC_VAR_CLK0 | SD30_FIX_CLK | SAMPLE_VAR_CLK1);
541 RTSX_WRITE_REG(chip, CLK_CTL, CLK_LOW_FREQ, 0);
542 } else if (CHK_SD_DDR50(sd_card) || CHK_MMC_DDR52(sd_card)) {
543 RTSX_WRITE_REG(chip, SD_CFG1, 0x0C | SD_ASYNC_FIFO_NOT_RST,
544 SD_DDR_MODE | SD_ASYNC_FIFO_NOT_RST);
545 RTSX_WRITE_REG(chip, CLK_CTL, CLK_LOW_FREQ, CLK_LOW_FREQ);
546 RTSX_WRITE_REG(chip, CARD_CLK_SOURCE, 0xFF,
547 CRC_VAR_CLK0 | SD30_FIX_CLK | SAMPLE_VAR_CLK1);
548 RTSX_WRITE_REG(chip, CLK_CTL, CLK_LOW_FREQ, 0);
549 RTSX_WRITE_REG(chip, SD_PUSH_POINT_CTL, DDR_VAR_TX_CMD_DAT,
551 RTSX_WRITE_REG(chip, SD_SAMPLE_POINT_CTL, DDR_VAR_RX_DAT | DDR_VAR_RX_CMD,
552 DDR_VAR_RX_DAT | DDR_VAR_RX_CMD);
556 RTSX_WRITE_REG(chip, SD_CFG1, 0x0C, SD_20_MODE);
557 RTSX_WRITE_REG(chip, CLK_CTL, CLK_LOW_FREQ, CLK_LOW_FREQ);
558 RTSX_WRITE_REG(chip, CARD_CLK_SOURCE, 0xFF,
559 CRC_FIX_CLK | SD30_VAR_CLK0 | SAMPLE_VAR_CLK1);
560 RTSX_WRITE_REG(chip, CLK_CTL, CLK_LOW_FREQ, 0);
562 if ((chip->sd_ctl & SD_PUSH_POINT_CTL_MASK) == SD_PUSH_POINT_AUTO)
563 val = SD20_TX_NEG_EDGE;
564 else if ((chip->sd_ctl & SD_PUSH_POINT_CTL_MASK) == SD_PUSH_POINT_DELAY)
565 val = SD20_TX_14_AHEAD;
567 val = SD20_TX_NEG_EDGE;
569 RTSX_WRITE_REG(chip, SD_PUSH_POINT_CTL, SD20_TX_SEL_MASK, val);
571 if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) == SD_SAMPLE_POINT_AUTO) {
572 if (chip->asic_code) {
573 if (CHK_SD_HS(sd_card) || CHK_MMC_52M(sd_card))
574 val = SD20_RX_14_DELAY;
576 val = SD20_RX_POS_EDGE;
578 val = SD20_RX_14_DELAY;
580 } else if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) == SD_SAMPLE_POINT_DELAY) {
581 val = SD20_RX_14_DELAY;
583 val = SD20_RX_POS_EDGE;
585 RTSX_WRITE_REG(chip, SD_SAMPLE_POINT_CTL, SD20_RX_SEL_MASK, val);
590 if ((chip->sd_ctl & SD_PUSH_POINT_CTL_MASK) == SD_PUSH_POINT_DELAY)
593 if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) == SD_SAMPLE_POINT_AUTO) {
594 if (chip->asic_code) {
595 if (CHK_SD_HS(sd_card) || CHK_MMC_52M(sd_card)) {
607 } else if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) == SD_SAMPLE_POINT_DELAY) {
614 RTSX_WRITE_REG(chip, REG_SD_CFG1, 0x1C, val);
617 return STATUS_SUCCESS;
620 static void sd_choose_proper_clock(struct rtsx_chip *chip)
622 struct sd_info *sd_card = &(chip->sd_card);
624 if (CHK_SD_SDR104(sd_card)) {
626 sd_card->sd_clock = chip->asic_sd_sdr104_clk;
628 sd_card->sd_clock = chip->fpga_sd_sdr104_clk;
630 } else if (CHK_SD_DDR50(sd_card)) {
632 sd_card->sd_clock = chip->asic_sd_ddr50_clk;
634 sd_card->sd_clock = chip->fpga_sd_ddr50_clk;
636 } else if (CHK_SD_SDR50(sd_card)) {
638 sd_card->sd_clock = chip->asic_sd_sdr50_clk;
640 sd_card->sd_clock = chip->fpga_sd_sdr50_clk;
642 } else if (CHK_SD_HS(sd_card)) {
644 sd_card->sd_clock = chip->asic_sd_hs_clk;
646 sd_card->sd_clock = chip->fpga_sd_hs_clk;
648 } else if (CHK_MMC_52M(sd_card) || CHK_MMC_DDR52(sd_card)) {
650 sd_card->sd_clock = chip->asic_mmc_52m_clk;
652 sd_card->sd_clock = chip->fpga_mmc_52m_clk;
654 } else if (CHK_MMC_26M(sd_card)) {
656 sd_card->sd_clock = 48;
658 sd_card->sd_clock = CLK_50;
662 static int sd_set_clock_divider(struct rtsx_chip *chip, u8 clk_div)
664 u8 mask = 0, val = 0;
666 if (CHECK_PID(chip, 0x5209)) {
667 mask = SD_CLK_DIVIDE_MASK;
671 if (clk_div == SD_CLK_DIVIDE_0)
673 else if (clk_div == SD_CLK_DIVIDE_128)
675 else if (clk_div == SD_CLK_DIVIDE_256)
679 RTSX_WRITE_REG(chip, REG_SD_CFG1, mask, val);
681 return STATUS_SUCCESS;
684 static int sd_set_init_para(struct rtsx_chip *chip)
686 struct sd_info *sd_card = &(chip->sd_card);
689 retval = sd_set_sample_push_timing(chip);
690 if (retval != STATUS_SUCCESS)
691 TRACE_RET(chip, STATUS_FAIL);
693 sd_choose_proper_clock(chip);
695 retval = switch_clock(chip, sd_card->sd_clock);
696 if (retval != STATUS_SUCCESS)
697 TRACE_RET(chip, STATUS_FAIL);
699 return STATUS_SUCCESS;
702 int sd_select_card(struct rtsx_chip *chip, int select)
704 struct sd_info *sd_card = &(chip->sd_card);
706 u8 cmd_idx, cmd_type;
710 cmd_idx = SELECT_CARD;
711 cmd_type = SD_RSP_TYPE_R1;
712 addr = sd_card->sd_addr;
714 cmd_idx = DESELECT_CARD;
715 cmd_type = SD_RSP_TYPE_R0;
719 retval = sd_send_cmd_get_rsp(chip, cmd_idx, addr, cmd_type, NULL, 0);
720 if (retval != STATUS_SUCCESS)
721 TRACE_RET(chip, STATUS_FAIL);
723 return STATUS_SUCCESS;
726 #ifdef SUPPORT_SD_LOCK
727 static int sd_update_lock_status(struct rtsx_chip *chip)
729 struct sd_info *sd_card = &(chip->sd_card);
733 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1, rsp, 5);
734 if (retval != STATUS_SUCCESS)
735 TRACE_RET(chip, STATUS_FAIL);
738 sd_card->sd_lock_status |= SD_LOCKED;
740 sd_card->sd_lock_status &= ~SD_LOCKED;
742 RTSX_DEBUGP("sd_card->sd_lock_status = 0x%x\n", sd_card->sd_lock_status);
745 TRACE_RET(chip, STATUS_FAIL);
747 return STATUS_SUCCESS;
751 static int sd_wait_state_data_ready(struct rtsx_chip *chip, u8 state, u8 data_ready, int polling_cnt)
753 struct sd_info *sd_card = &(chip->sd_card);
757 for (i = 0; i < polling_cnt; i++) {
758 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
759 sd_card->sd_addr, SD_RSP_TYPE_R1, rsp, 5);
760 if (retval != STATUS_SUCCESS)
761 TRACE_RET(chip, STATUS_FAIL);
763 if (((rsp[3] & 0x1E) == state) && ((rsp[3] & 0x01) == data_ready))
764 return STATUS_SUCCESS;
767 TRACE_RET(chip, STATUS_FAIL);
770 static int sd_change_bank_voltage(struct rtsx_chip *chip, u8 voltage)
774 if (voltage == SD_IO_3V3) {
775 if (chip->asic_code) {
776 retval = rtsx_write_phy_register(chip, 0x08, 0x4FC0 | chip->phy_voltage);
777 if (retval != STATUS_SUCCESS)
778 TRACE_RET(chip, STATUS_FAIL);
780 RTSX_WRITE_REG(chip, SD_PAD_CTL, SD_IO_USING_1V8, 0);
782 } else if (voltage == SD_IO_1V8) {
783 if (chip->asic_code) {
784 retval = rtsx_write_phy_register(chip, 0x08, 0x4C40 | chip->phy_voltage);
785 if (retval != STATUS_SUCCESS)
786 TRACE_RET(chip, STATUS_FAIL);
788 RTSX_WRITE_REG(chip, SD_PAD_CTL, SD_IO_USING_1V8, SD_IO_USING_1V8);
791 TRACE_RET(chip, STATUS_FAIL);
794 return STATUS_SUCCESS;
797 static int sd_voltage_switch(struct rtsx_chip *chip)
802 RTSX_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, SD_CLK_TOGGLE_EN);
804 retval = sd_send_cmd_get_rsp(chip, VOLTAGE_SWITCH, 0, SD_RSP_TYPE_R1, NULL, 0);
805 if (retval != STATUS_SUCCESS)
806 TRACE_RET(chip, STATUS_FAIL);
808 udelay(chip->sd_voltage_switch_delay);
810 RTSX_READ_REG(chip, SD_BUS_STAT, &stat);
811 if (stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
812 SD_DAT1_STATUS | SD_DAT0_STATUS)) {
813 TRACE_RET(chip, STATUS_FAIL);
816 RTSX_WRITE_REG(chip, SD_BUS_STAT, 0xFF, SD_CLK_FORCE_STOP);
817 retval = sd_change_bank_voltage(chip, SD_IO_1V8);
818 if (retval != STATUS_SUCCESS)
819 TRACE_RET(chip, STATUS_FAIL);
823 RTSX_WRITE_REG(chip, SD_BUS_STAT, 0xFF, SD_CLK_TOGGLE_EN);
826 RTSX_READ_REG(chip, SD_BUS_STAT, &stat);
827 if ((stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
828 SD_DAT1_STATUS | SD_DAT0_STATUS)) !=
829 (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
830 SD_DAT1_STATUS | SD_DAT0_STATUS)) {
831 RTSX_DEBUGP("SD_BUS_STAT: 0x%x\n", stat);
832 rtsx_write_register(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
833 rtsx_write_register(chip, CARD_CLK_EN, 0xFF, 0);
834 TRACE_RET(chip, STATUS_FAIL);
837 RTSX_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
839 return STATUS_SUCCESS;
842 static int sd_reset_dcm(struct rtsx_chip *chip, u8 tune_dir)
844 if (tune_dir == TUNE_RX) {
845 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RESET | DCM_RX);
846 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RX);
848 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_RESET | DCM_TX);
849 RTSX_WRITE_REG(chip, DCM_DRP_CTL, 0xFF, DCM_TX);
852 return STATUS_SUCCESS;
855 static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir)
857 struct sd_info *sd_card = &(chip->sd_card);
858 u16 SD_VP_CTL, SD_DCMPS_CTL;
863 RTSX_DEBUGP("sd_change_phase (sample_point = %d, tune_dir = %d)\n",
864 sample_point, tune_dir);
866 if (tune_dir == TUNE_RX) {
867 SD_VP_CTL = SD_VPRX_CTL;
868 SD_DCMPS_CTL = SD_DCMPS_RX_CTL;
869 if (CHK_SD_DDR50(sd_card))
872 SD_VP_CTL = SD_VPTX_CTL;
873 SD_DCMPS_CTL = SD_DCMPS_TX_CTL;
876 if (chip->asic_code) {
877 RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, CHANGE_CLK);
878 RTSX_WRITE_REG(chip, SD_VP_CTL, 0x1F, sample_point);
879 RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET, 0);
880 RTSX_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET, PHASE_NOT_RESET);
881 RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, 0);
883 #ifdef CONFIG_RTS_PSTOR_DEBUG
884 rtsx_read_register(chip, SD_VP_CTL, &val);
885 RTSX_DEBUGP("SD_VP_CTL: 0x%x\n", val);
886 rtsx_read_register(chip, SD_DCMPS_CTL, &val);
887 RTSX_DEBUGP("SD_DCMPS_CTL: 0x%x\n", val);
891 RTSX_WRITE_REG(chip, SD_VP_CTL, PHASE_CHANGE, PHASE_CHANGE);
893 RTSX_WRITE_REG(chip, SD_VP_CTL, 0xFF,
894 PHASE_CHANGE | PHASE_NOT_RESET | sample_point);
896 RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, CHANGE_CLK);
898 RTSX_WRITE_REG(chip, SD_VP_CTL, 0xFF,
899 PHASE_NOT_RESET | sample_point);
904 rtsx_add_cmd(chip, WRITE_REG_CMD, SD_DCMPS_CTL, DCMPS_CHANGE, DCMPS_CHANGE);
905 rtsx_add_cmd(chip, CHECK_REG_CMD, SD_DCMPS_CTL, DCMPS_CHANGE_DONE, DCMPS_CHANGE_DONE);
906 retval = rtsx_send_cmd(chip, SD_CARD, 100);
907 if (retval != STATUS_SUCCESS)
908 TRACE_GOTO(chip, Fail);
910 val = *rtsx_get_cmd_data(chip);
911 if (val & DCMPS_ERROR)
912 TRACE_GOTO(chip, Fail);
914 if ((val & DCMPS_CURRENT_PHASE) != sample_point)
915 TRACE_GOTO(chip, Fail);
917 RTSX_WRITE_REG(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
919 RTSX_WRITE_REG(chip, SD_VP_CTL, PHASE_CHANGE, 0);
921 RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, 0);
926 RTSX_WRITE_REG(chip, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0);
928 return STATUS_SUCCESS;
931 #ifdef CONFIG_RTS_PSTOR_DEBUG
932 rtsx_read_register(chip, SD_VP_CTL, &val);
933 RTSX_DEBUGP("SD_VP_CTL: 0x%x\n", val);
934 rtsx_read_register(chip, SD_DCMPS_CTL, &val);
935 RTSX_DEBUGP("SD_DCMPS_CTL: 0x%x\n", val);
938 rtsx_write_register(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
939 rtsx_write_register(chip, SD_VP_CTL, PHASE_CHANGE, 0);
941 sd_reset_dcm(chip, tune_dir);
945 static int sd_check_spec(struct rtsx_chip *chip, u8 bus_width)
947 struct sd_info *sd_card = &(chip->sd_card);
951 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
952 if (retval != STATUS_SUCCESS)
953 TRACE_RET(chip, STATUS_FAIL);
955 cmd[0] = 0x40 | SEND_SCR;
961 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 8, 1, bus_width, buf, 8, 250);
962 if (retval != STATUS_SUCCESS) {
963 rtsx_clear_sd_error(chip);
964 TRACE_RET(chip, STATUS_FAIL);
967 memcpy(sd_card->raw_scr, buf, 8);
969 if ((buf[0] & 0x0F) == 0)
970 TRACE_RET(chip, STATUS_FAIL);
972 return STATUS_SUCCESS;
975 static int sd_query_switch_result(struct rtsx_chip *chip, u8 func_group, u8 func_to_switch,
976 u8 *buf, int buf_len)
978 u8 support_mask = 0, query_switch = 0, switch_busy = 0;
979 int support_offset = 0, query_switch_offset = 0, check_busy_offset = 0;
981 if (func_group == SD_FUNC_GROUP_1) {
982 support_offset = FUNCTION_GROUP1_SUPPORT_OFFSET;
983 query_switch_offset = FUNCTION_GROUP1_QUERY_SWITCH_OFFSET;
984 check_busy_offset = FUNCTION_GROUP1_CHECK_BUSY_OFFSET;
986 switch (func_to_switch) {
988 support_mask = HS_SUPPORT_MASK;
989 query_switch = HS_QUERY_SWITCH_OK;
990 switch_busy = HS_SWITCH_BUSY;
994 support_mask = SDR50_SUPPORT_MASK;
995 query_switch = SDR50_QUERY_SWITCH_OK;
996 switch_busy = SDR50_SWITCH_BUSY;
1000 support_mask = SDR104_SUPPORT_MASK;
1001 query_switch = SDR104_QUERY_SWITCH_OK;
1002 switch_busy = SDR104_SWITCH_BUSY;
1006 support_mask = DDR50_SUPPORT_MASK;
1007 query_switch = DDR50_QUERY_SWITCH_OK;
1008 switch_busy = DDR50_SWITCH_BUSY;
1012 TRACE_RET(chip, STATUS_FAIL);
1014 } else if (func_group == SD_FUNC_GROUP_3) {
1015 support_offset = FUNCTION_GROUP3_SUPPORT_OFFSET;
1016 query_switch_offset = FUNCTION_GROUP3_QUERY_SWITCH_OFFSET;
1017 check_busy_offset = FUNCTION_GROUP3_CHECK_BUSY_OFFSET;
1019 switch (func_to_switch) {
1020 case DRIVING_TYPE_A:
1021 support_mask = DRIVING_TYPE_A_MASK;
1022 query_switch = TYPE_A_QUERY_SWITCH_OK;
1023 switch_busy = TYPE_A_SWITCH_BUSY;
1026 case DRIVING_TYPE_C:
1027 support_mask = DRIVING_TYPE_C_MASK;
1028 query_switch = TYPE_C_QUERY_SWITCH_OK;
1029 switch_busy = TYPE_C_SWITCH_BUSY;
1032 case DRIVING_TYPE_D:
1033 support_mask = DRIVING_TYPE_D_MASK;
1034 query_switch = TYPE_D_QUERY_SWITCH_OK;
1035 switch_busy = TYPE_D_SWITCH_BUSY;
1039 TRACE_RET(chip, STATUS_FAIL);
1041 } else if (func_group == SD_FUNC_GROUP_4) {
1042 support_offset = FUNCTION_GROUP4_SUPPORT_OFFSET;
1043 query_switch_offset = FUNCTION_GROUP4_QUERY_SWITCH_OFFSET;
1044 check_busy_offset = FUNCTION_GROUP4_CHECK_BUSY_OFFSET;
1046 switch (func_to_switch) {
1047 case CURRENT_LIMIT_400:
1048 support_mask = CURRENT_LIMIT_400_MASK;
1049 query_switch = CURRENT_LIMIT_400_QUERY_SWITCH_OK;
1050 switch_busy = CURRENT_LIMIT_400_SWITCH_BUSY;
1053 case CURRENT_LIMIT_600:
1054 support_mask = CURRENT_LIMIT_600_MASK;
1055 query_switch = CURRENT_LIMIT_600_QUERY_SWITCH_OK;
1056 switch_busy = CURRENT_LIMIT_600_SWITCH_BUSY;
1059 case CURRENT_LIMIT_800:
1060 support_mask = CURRENT_LIMIT_800_MASK;
1061 query_switch = CURRENT_LIMIT_800_QUERY_SWITCH_OK;
1062 switch_busy = CURRENT_LIMIT_800_SWITCH_BUSY;
1066 TRACE_RET(chip, STATUS_FAIL);
1069 TRACE_RET(chip, STATUS_FAIL);
1072 if (func_group == SD_FUNC_GROUP_1) {
1073 if (!(buf[support_offset] & support_mask) ||
1074 ((buf[query_switch_offset] & 0x0F) != query_switch)) {
1075 TRACE_RET(chip, STATUS_FAIL);
1079 /* Check 'Busy Status' */
1080 if ((buf[DATA_STRUCTURE_VER_OFFSET] == 0x01) &&
1081 ((buf[check_busy_offset] & switch_busy) == switch_busy)) {
1082 TRACE_RET(chip, STATUS_FAIL);
1085 return STATUS_SUCCESS;
1088 static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode,
1089 u8 func_group, u8 func_to_switch, u8 bus_width)
1091 struct sd_info *sd_card = &(chip->sd_card);
1095 RTSX_DEBUGP("sd_check_switch_mode (mode = %d, func_group = %d, func_to_switch = %d)\n",
1096 mode, func_group, func_to_switch);
1098 cmd[0] = 0x40 | SWITCH;
1101 if (func_group == SD_FUNC_GROUP_1) {
1104 cmd[4] = 0xF0 + func_to_switch;
1105 } else if (func_group == SD_FUNC_GROUP_3) {
1107 cmd[3] = 0xF0 + func_to_switch;
1109 } else if (func_group == SD_FUNC_GROUP_4) {
1111 cmd[3] = 0x0F + (func_to_switch << 4);
1114 cmd[1] = SD_CHECK_MODE;
1120 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1, bus_width, buf, 64, 250);
1121 if (retval != STATUS_SUCCESS) {
1122 rtsx_clear_sd_error(chip);
1123 TRACE_RET(chip, STATUS_FAIL);
1128 if (func_group == NO_ARGUMENT) {
1129 sd_card->func_group1_mask = buf[0x0D];
1130 sd_card->func_group2_mask = buf[0x0B];
1131 sd_card->func_group3_mask = buf[0x09];
1132 sd_card->func_group4_mask = buf[0x07];
1134 RTSX_DEBUGP("func_group1_mask = 0x%02x\n", buf[0x0D]);
1135 RTSX_DEBUGP("func_group2_mask = 0x%02x\n", buf[0x0B]);
1136 RTSX_DEBUGP("func_group3_mask = 0x%02x\n", buf[0x09]);
1137 RTSX_DEBUGP("func_group4_mask = 0x%02x\n", buf[0x07]);
1139 /* Maximum current consumption, check whether current is acceptable;
1140 * bit[511:496] = 0x0000 means some error happened.
1142 u16 cc = ((u16)buf[0] << 8) | buf[1];
1143 RTSX_DEBUGP("Maximum current consumption: %dmA\n", cc);
1144 if ((cc == 0) || (cc > 800))
1145 TRACE_RET(chip, STATUS_FAIL);
1147 retval = sd_query_switch_result(chip, func_group, func_to_switch, buf, 64);
1148 if (retval != STATUS_SUCCESS)
1149 TRACE_RET(chip, STATUS_FAIL);
1151 if ((cc > 400) || (func_to_switch > CURRENT_LIMIT_400)) {
1152 RTSX_WRITE_REG(chip, OCPPARA2, SD_OCP_THD_MASK, chip->sd_800mA_ocp_thd);
1153 RTSX_WRITE_REG(chip, CARD_PWR_CTL, PMOS_STRG_MASK, PMOS_STRG_800mA);
1157 return STATUS_SUCCESS;
1160 static u8 downgrade_switch_mode(u8 func_group, u8 func_to_switch)
1162 if (func_group == SD_FUNC_GROUP_1) {
1163 if (func_to_switch > HS_SUPPORT)
1166 } else if (func_group == SD_FUNC_GROUP_4) {
1167 if (func_to_switch > CURRENT_LIMIT_200)
1171 return func_to_switch;
1174 static int sd_check_switch(struct rtsx_chip *chip,
1175 u8 func_group, u8 func_to_switch, u8 bus_width)
1179 int switch_good = 0;
1181 for (i = 0; i < 3; i++) {
1182 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1183 sd_set_err_code(chip, SD_NO_CARD);
1184 TRACE_RET(chip, STATUS_FAIL);
1187 retval = sd_check_switch_mode(chip, SD_CHECK_MODE, func_group,
1188 func_to_switch, bus_width);
1189 if (retval == STATUS_SUCCESS) {
1192 retval = sd_check_switch_mode(chip, SD_SWITCH_MODE,
1193 func_group, func_to_switch, bus_width);
1194 if (retval == STATUS_SUCCESS) {
1199 RTSX_READ_REG(chip, SD_STAT1, &stat);
1200 if (stat & SD_CRC16_ERR) {
1201 RTSX_DEBUGP("SD CRC16 error when switching mode\n");
1202 TRACE_RET(chip, STATUS_FAIL);
1206 func_to_switch = downgrade_switch_mode(func_group, func_to_switch);
1212 TRACE_RET(chip, STATUS_FAIL);
1214 return STATUS_SUCCESS;
1217 static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width)
1219 struct sd_info *sd_card = &(chip->sd_card);
1222 u8 func_to_switch = 0;
1224 /* Get supported functions */
1225 retval = sd_check_switch_mode(chip, SD_CHECK_MODE,
1226 NO_ARGUMENT, NO_ARGUMENT, bus_width);
1227 if (retval != STATUS_SUCCESS)
1228 TRACE_RET(chip, STATUS_FAIL);
1230 sd_card->func_group1_mask &= ~(sd_card->sd_switch_fail);
1232 /* Function Group 1: Access Mode */
1233 for (i = 0; i < 4; i++) {
1234 switch ((u8)(chip->sd_speed_prior >> (i*8))) {
1235 case SDR104_SUPPORT:
1236 if ((sd_card->func_group1_mask & SDR104_SUPPORT_MASK)
1237 && chip->sdr104_en) {
1238 func_to_switch = SDR104_SUPPORT;
1243 if ((sd_card->func_group1_mask & DDR50_SUPPORT_MASK)
1244 && chip->ddr50_en) {
1245 func_to_switch = DDR50_SUPPORT;
1250 if ((sd_card->func_group1_mask & SDR50_SUPPORT_MASK)
1251 && chip->sdr50_en) {
1252 func_to_switch = SDR50_SUPPORT;
1257 if (sd_card->func_group1_mask & HS_SUPPORT_MASK)
1258 func_to_switch = HS_SUPPORT;
1271 RTSX_DEBUGP("SD_FUNC_GROUP_1: func_to_switch = 0x%02x", func_to_switch);
1273 #ifdef SUPPORT_SD_LOCK
1274 if ((sd_card->sd_lock_status & SD_SDR_RST)
1275 && (DDR50_SUPPORT == func_to_switch)
1276 && (sd_card->func_group1_mask & SDR50_SUPPORT_MASK)) {
1277 func_to_switch = SDR50_SUPPORT;
1278 RTSX_DEBUGP("Using SDR50 instead of DDR50 for SD Lock\n");
1282 if (func_to_switch) {
1283 retval = sd_check_switch(chip, SD_FUNC_GROUP_1, func_to_switch, bus_width);
1284 if (retval != STATUS_SUCCESS) {
1285 if (func_to_switch == SDR104_SUPPORT) {
1286 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK;
1287 } else if (func_to_switch == DDR50_SUPPORT) {
1288 sd_card->sd_switch_fail =
1289 SDR104_SUPPORT_MASK | DDR50_SUPPORT_MASK;
1290 } else if (func_to_switch == SDR50_SUPPORT) {
1291 sd_card->sd_switch_fail =
1292 SDR104_SUPPORT_MASK | DDR50_SUPPORT_MASK |
1295 TRACE_RET(chip, STATUS_FAIL);
1298 if (func_to_switch == SDR104_SUPPORT)
1299 SET_SD_SDR104(sd_card);
1300 else if (func_to_switch == DDR50_SUPPORT)
1301 SET_SD_DDR50(sd_card);
1302 else if (func_to_switch == SDR50_SUPPORT)
1303 SET_SD_SDR50(sd_card);
1308 if (CHK_SD_DDR50(sd_card)) {
1309 RTSX_WRITE_REG(chip, SD_PUSH_POINT_CTL, 0x06, 0x04);
1310 retval = sd_set_sample_push_timing(chip);
1311 if (retval != STATUS_SUCCESS)
1312 TRACE_RET(chip, STATUS_FAIL);
1315 if (!func_to_switch || (func_to_switch == HS_SUPPORT)) {
1316 /* Do not try to switch current limit if the card doesn't
1317 * support UHS mode or we don't want it to support UHS mode
1319 return STATUS_SUCCESS;
1322 /* Function Group 4: Current Limit */
1323 func_to_switch = 0xFF;
1325 for (i = 0; i < 4; i++) {
1326 switch ((u8)(chip->sd_current_prior >> (i*8))) {
1327 case CURRENT_LIMIT_800:
1328 if (sd_card->func_group4_mask & CURRENT_LIMIT_800_MASK)
1329 func_to_switch = CURRENT_LIMIT_800;
1333 case CURRENT_LIMIT_600:
1334 if (sd_card->func_group4_mask & CURRENT_LIMIT_600_MASK)
1335 func_to_switch = CURRENT_LIMIT_600;
1339 case CURRENT_LIMIT_400:
1340 if (sd_card->func_group4_mask & CURRENT_LIMIT_400_MASK)
1341 func_to_switch = CURRENT_LIMIT_400;
1345 case CURRENT_LIMIT_200:
1346 if (sd_card->func_group4_mask & CURRENT_LIMIT_200_MASK)
1347 func_to_switch = CURRENT_LIMIT_200;
1355 if (func_to_switch != 0xFF)
1359 RTSX_DEBUGP("SD_FUNC_GROUP_4: func_to_switch = 0x%02x", func_to_switch);
1361 if (func_to_switch <= CURRENT_LIMIT_800) {
1362 retval = sd_check_switch(chip, SD_FUNC_GROUP_4, func_to_switch, bus_width);
1363 if (retval != STATUS_SUCCESS) {
1364 if (sd_check_err_code(chip, SD_NO_CARD))
1365 TRACE_RET(chip, STATUS_FAIL);
1367 RTSX_DEBUGP("Switch current limit finished! (%d)\n", retval);
1370 if (CHK_SD_DDR50(sd_card))
1371 RTSX_WRITE_REG(chip, SD_PUSH_POINT_CTL, 0x06, 0);
1373 return STATUS_SUCCESS;
1376 static int sd_wait_data_idle(struct rtsx_chip *chip)
1378 int retval = STATUS_TIMEDOUT;
1382 for (i = 0; i < 100; i++) {
1383 RTSX_READ_REG(chip, SD_DATA_STATE, &val);
1384 if (val & SD_DATA_IDLE) {
1385 retval = STATUS_SUCCESS;
1390 RTSX_DEBUGP("SD_DATA_STATE: 0x%02x\n", val);
1395 static int sd_sdr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1400 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1401 if (retval != STATUS_SUCCESS)
1402 TRACE_RET(chip, STATUS_FAIL);
1404 cmd[0] = 0x40 | SEND_TUNING_PATTERN;
1410 retval = sd_read_data(chip, SD_TM_AUTO_TUNING,
1411 cmd, 5, 0x40, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
1412 if (retval != STATUS_SUCCESS) {
1413 (void)sd_wait_data_idle(chip);
1415 rtsx_clear_sd_error(chip);
1416 TRACE_RET(chip, STATUS_FAIL);
1419 return STATUS_SUCCESS;
1422 static int sd_ddr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1424 struct sd_info *sd_card = &(chip->sd_card);
1428 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1429 if (retval != STATUS_SUCCESS)
1430 TRACE_RET(chip, STATUS_FAIL);
1432 RTSX_DEBUGP("sd ddr tuning rx\n");
1434 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
1435 if (retval != STATUS_SUCCESS)
1436 TRACE_RET(chip, STATUS_FAIL);
1438 cmd[0] = 0x40 | SD_STATUS;
1444 retval = sd_read_data(chip, SD_TM_NORMAL_READ,
1445 cmd, 5, 64, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
1446 if (retval != STATUS_SUCCESS) {
1447 (void)sd_wait_data_idle(chip);
1449 rtsx_clear_sd_error(chip);
1450 TRACE_RET(chip, STATUS_FAIL);
1453 return STATUS_SUCCESS;
1456 static int mmc_ddr_tunning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1458 struct sd_info *sd_card = &(chip->sd_card);
1460 u8 cmd[5], bus_width;
1462 if (CHK_MMC_8BIT(sd_card))
1463 bus_width = SD_BUS_WIDTH_8;
1464 else if (CHK_MMC_4BIT(sd_card))
1465 bus_width = SD_BUS_WIDTH_4;
1467 bus_width = SD_BUS_WIDTH_1;
1469 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1470 if (retval != STATUS_SUCCESS)
1471 TRACE_RET(chip, STATUS_FAIL);
1473 RTSX_DEBUGP("mmc ddr tuning rx\n");
1475 cmd[0] = 0x40 | SEND_EXT_CSD;
1481 retval = sd_read_data(chip, SD_TM_NORMAL_READ,
1482 cmd, 5, 0x200, 1, bus_width, NULL, 0, 100);
1483 if (retval != STATUS_SUCCESS) {
1484 (void)sd_wait_data_idle(chip);
1486 rtsx_clear_sd_error(chip);
1487 TRACE_RET(chip, STATUS_FAIL);
1490 return STATUS_SUCCESS;
1493 static int sd_sdr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
1495 struct sd_info *sd_card = &(chip->sd_card);
1498 retval = sd_change_phase(chip, sample_point, TUNE_TX);
1499 if (retval != STATUS_SUCCESS)
1500 TRACE_RET(chip, STATUS_FAIL);
1502 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, SD_RSP_80CLK_TIMEOUT_EN);
1504 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
1505 SD_RSP_TYPE_R1, NULL, 0);
1506 if (retval != STATUS_SUCCESS) {
1507 if (sd_check_err_code(chip, SD_RSP_TIMEOUT)) {
1508 rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1509 TRACE_RET(chip, STATUS_FAIL);
1513 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1515 return STATUS_SUCCESS;
1518 static int sd_ddr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
1520 struct sd_info *sd_card = &(chip->sd_card);
1522 u8 cmd[5], bus_width;
1524 retval = sd_change_phase(chip, sample_point, TUNE_TX);
1525 if (retval != STATUS_SUCCESS)
1526 TRACE_RET(chip, STATUS_FAIL);
1528 if (CHK_SD(sd_card)) {
1529 bus_width = SD_BUS_WIDTH_4;
1531 if (CHK_MMC_8BIT(sd_card))
1532 bus_width = SD_BUS_WIDTH_8;
1533 else if (CHK_MMC_4BIT(sd_card))
1534 bus_width = SD_BUS_WIDTH_4;
1536 bus_width = SD_BUS_WIDTH_1;
1539 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
1540 if (retval != STATUS_SUCCESS)
1541 TRACE_RET(chip, STATUS_FAIL);
1543 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, SD_RSP_80CLK_TIMEOUT_EN);
1545 cmd[0] = 0x40 | PROGRAM_CSD;
1551 retval = sd_write_data(chip, SD_TM_AUTO_WRITE_2,
1552 cmd, 5, 16, 1, bus_width, sd_card->raw_csd, 16, 100);
1553 if (retval != STATUS_SUCCESS) {
1554 rtsx_clear_sd_error(chip);
1555 rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1556 TRACE_RET(chip, STATUS_FAIL);
1559 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1561 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
1563 return STATUS_SUCCESS;
1566 static u8 sd_search_final_phase(struct rtsx_chip *chip, u32 phase_map, u8 tune_dir)
1568 struct sd_info *sd_card = &(chip->sd_card);
1569 struct timing_phase_path path[MAX_PHASE + 1];
1570 int i, j, cont_path_cnt;
1571 int new_block, max_len, final_path_idx;
1572 u8 final_phase = 0xFF;
1574 if (phase_map == 0xFFFFFFFF) {
1575 if (tune_dir == TUNE_RX)
1576 final_phase = (u8)chip->sd_default_rx_phase;
1578 final_phase = (u8)chip->sd_default_tx_phase;
1586 for (i = 0; i < MAX_PHASE + 1; i++) {
1587 if (phase_map & (1 << i)) {
1590 j = cont_path_cnt++;
1598 if (cont_path_cnt) {
1599 int idx = cont_path_cnt - 1;
1600 path[idx].len = path[idx].end - path[idx].start + 1;
1601 path[idx].mid = path[idx].start + path[idx].len / 2;
1606 if (cont_path_cnt == 0) {
1607 RTSX_DEBUGP("No continuous phase path\n");
1610 int idx = cont_path_cnt - 1;
1611 path[idx].len = path[idx].end - path[idx].start + 1;
1612 path[idx].mid = path[idx].start + path[idx].len / 2;
1615 if ((path[0].start == 0) && (path[cont_path_cnt - 1].end == MAX_PHASE)) {
1616 path[0].start = path[cont_path_cnt - 1].start - MAX_PHASE - 1;
1617 path[0].len += path[cont_path_cnt - 1].len;
1618 path[0].mid = path[0].start + path[0].len / 2;
1619 if (path[0].mid < 0)
1620 path[0].mid += MAX_PHASE + 1;
1628 for (i = 0; i < cont_path_cnt; i++) {
1629 if (path[i].len > max_len) {
1630 max_len = path[i].len;
1631 final_phase = (u8)path[i].mid;
1635 RTSX_DEBUGP("path[%d].start = %d\n", i, path[i].start);
1636 RTSX_DEBUGP("path[%d].end = %d\n", i, path[i].end);
1637 RTSX_DEBUGP("path[%d].len = %d\n", i, path[i].len);
1638 RTSX_DEBUGP("path[%d].mid = %d\n", i, path[i].mid);
1642 if (tune_dir == TUNE_TX) {
1643 if (CHK_SD_SDR104(sd_card)) {
1645 int temp_mid = (max_len - 16) / 2;
1646 int temp_final_phase =
1647 path[final_path_idx].end - (max_len - (6 + temp_mid));
1649 if (temp_final_phase < 0)
1650 final_phase = (u8)(temp_final_phase + MAX_PHASE + 1);
1652 final_phase = (u8)temp_final_phase;
1654 } else if (CHK_SD_SDR50(sd_card)) {
1656 int temp_mid = (max_len - 13) / 2;
1657 int temp_final_phase =
1658 path[final_path_idx].end - (max_len - (3 + temp_mid));
1660 if (temp_final_phase < 0)
1661 final_phase = (u8)(temp_final_phase + MAX_PHASE + 1);
1663 final_phase = (u8)temp_final_phase;
1669 RTSX_DEBUGP("Final chosen phase: %d\n", final_phase);
1673 static int sd_tuning_rx(struct rtsx_chip *chip)
1675 struct sd_info *sd_card = &(chip->sd_card);
1678 u32 raw_phase_map[3], phase_map;
1680 int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
1682 if (CHK_SD(sd_card)) {
1683 if (CHK_SD_DDR50(sd_card))
1684 tuning_cmd = sd_ddr_tuning_rx_cmd;
1686 tuning_cmd = sd_sdr_tuning_rx_cmd;
1689 if (CHK_MMC_DDR52(sd_card))
1690 tuning_cmd = mmc_ddr_tunning_rx_cmd;
1692 TRACE_RET(chip, STATUS_FAIL);
1695 for (i = 0; i < 3; i++) {
1696 raw_phase_map[i] = 0;
1697 for (j = MAX_PHASE; j >= 0; j--) {
1698 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1699 sd_set_err_code(chip, SD_NO_CARD);
1700 TRACE_RET(chip, STATUS_FAIL);
1703 retval = tuning_cmd(chip, (u8)j);
1704 if (retval == STATUS_SUCCESS)
1705 raw_phase_map[i] |= 1 << j;
1709 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1710 for (i = 0; i < 3; i++)
1711 RTSX_DEBUGP("RX raw_phase_map[%d] = 0x%08x\n", i, raw_phase_map[i]);
1713 RTSX_DEBUGP("RX phase_map = 0x%08x\n", phase_map);
1715 final_phase = sd_search_final_phase(chip, phase_map, TUNE_RX);
1716 if (final_phase == 0xFF)
1717 TRACE_RET(chip, STATUS_FAIL);
1719 retval = sd_change_phase(chip, final_phase, TUNE_RX);
1720 if (retval != STATUS_SUCCESS)
1721 TRACE_RET(chip, STATUS_FAIL);
1723 return STATUS_SUCCESS;
1726 static int sd_ddr_pre_tuning_tx(struct rtsx_chip *chip)
1728 struct sd_info *sd_card = &(chip->sd_card);
1734 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, SD_RSP_80CLK_TIMEOUT_EN);
1737 for (i = MAX_PHASE; i >= 0; i--) {
1738 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1739 sd_set_err_code(chip, SD_NO_CARD);
1740 rtsx_write_register(chip, SD_CFG3,
1741 SD_RSP_80CLK_TIMEOUT_EN, 0);
1742 TRACE_RET(chip, STATUS_FAIL);
1745 retval = sd_change_phase(chip, (u8)i, TUNE_TX);
1746 if (retval != STATUS_SUCCESS)
1749 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
1750 SD_RSP_TYPE_R1, NULL, 0);
1751 if ((retval == STATUS_SUCCESS) || !sd_check_err_code(chip, SD_RSP_TIMEOUT))
1752 phase_map |= 1 << i;
1755 RTSX_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1757 RTSX_DEBUGP("DDR TX pre tune phase_map = 0x%08x\n", phase_map);
1759 final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
1760 if (final_phase == 0xFF)
1761 TRACE_RET(chip, STATUS_FAIL);
1763 retval = sd_change_phase(chip, final_phase, TUNE_TX);
1764 if (retval != STATUS_SUCCESS)
1765 TRACE_RET(chip, STATUS_FAIL);
1767 RTSX_DEBUGP("DDR TX pre tune phase: %d\n", (int)final_phase);
1769 return STATUS_SUCCESS;
1772 static int sd_tuning_tx(struct rtsx_chip *chip)
1774 struct sd_info *sd_card = &(chip->sd_card);
1777 u32 raw_phase_map[3], phase_map;
1779 int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
1781 if (CHK_SD(sd_card)) {
1782 if (CHK_SD_DDR50(sd_card))
1783 tuning_cmd = sd_ddr_tuning_tx_cmd;
1785 tuning_cmd = sd_sdr_tuning_tx_cmd;
1788 if (CHK_MMC_DDR52(sd_card))
1789 tuning_cmd = sd_ddr_tuning_tx_cmd;
1791 TRACE_RET(chip, STATUS_FAIL);
1794 for (i = 0; i < 3; i++) {
1795 raw_phase_map[i] = 0;
1796 for (j = MAX_PHASE; j >= 0; j--) {
1797 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1798 sd_set_err_code(chip, SD_NO_CARD);
1799 rtsx_write_register(chip, SD_CFG3,
1800 SD_RSP_80CLK_TIMEOUT_EN, 0);
1801 TRACE_RET(chip, STATUS_FAIL);
1804 retval = tuning_cmd(chip, (u8)j);
1805 if (retval == STATUS_SUCCESS)
1806 raw_phase_map[i] |= 1 << j;
1810 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1811 for (i = 0; i < 3; i++)
1812 RTSX_DEBUGP("TX raw_phase_map[%d] = 0x%08x\n", i, raw_phase_map[i]);
1814 RTSX_DEBUGP("TX phase_map = 0x%08x\n", phase_map);
1816 final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
1817 if (final_phase == 0xFF)
1818 TRACE_RET(chip, STATUS_FAIL);
1820 retval = sd_change_phase(chip, final_phase, TUNE_TX);
1821 if (retval != STATUS_SUCCESS)
1822 TRACE_RET(chip, STATUS_FAIL);
1824 return STATUS_SUCCESS;
1827 static int sd_sdr_tuning(struct rtsx_chip *chip)
1831 retval = sd_tuning_tx(chip);
1832 if (retval != STATUS_SUCCESS)
1833 TRACE_RET(chip, STATUS_FAIL);
1835 retval = sd_tuning_rx(chip);
1836 if (retval != STATUS_SUCCESS)
1837 TRACE_RET(chip, STATUS_FAIL);
1839 return STATUS_SUCCESS;
1842 static int sd_ddr_tuning(struct rtsx_chip *chip)
1846 if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
1847 retval = sd_ddr_pre_tuning_tx(chip);
1848 if (retval != STATUS_SUCCESS)
1849 TRACE_RET(chip, STATUS_FAIL);
1851 retval = sd_change_phase(chip, (u8)chip->sd_ddr_tx_phase, TUNE_TX);
1852 if (retval != STATUS_SUCCESS)
1853 TRACE_RET(chip, STATUS_FAIL);
1856 retval = sd_tuning_rx(chip);
1857 if (retval != STATUS_SUCCESS)
1858 TRACE_RET(chip, STATUS_FAIL);
1860 if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
1861 retval = sd_tuning_tx(chip);
1862 if (retval != STATUS_SUCCESS)
1863 TRACE_RET(chip, STATUS_FAIL);
1866 return STATUS_SUCCESS;
1869 static int mmc_ddr_tuning(struct rtsx_chip *chip)
1873 if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
1874 retval = sd_ddr_pre_tuning_tx(chip);
1875 if (retval != STATUS_SUCCESS)
1876 TRACE_RET(chip, STATUS_FAIL);
1878 retval = sd_change_phase(chip, (u8)chip->mmc_ddr_tx_phase, TUNE_TX);
1879 if (retval != STATUS_SUCCESS)
1880 TRACE_RET(chip, STATUS_FAIL);
1883 retval = sd_tuning_rx(chip);
1884 if (retval != STATUS_SUCCESS)
1885 TRACE_RET(chip, STATUS_FAIL);
1887 if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
1888 retval = sd_tuning_tx(chip);
1889 if (retval != STATUS_SUCCESS)
1890 TRACE_RET(chip, STATUS_FAIL);
1893 return STATUS_SUCCESS;
1896 int sd_switch_clock(struct rtsx_chip *chip)
1898 struct sd_info *sd_card = &(chip->sd_card);
1902 retval = select_card(chip, SD_CARD);
1903 if (retval != STATUS_SUCCESS)
1904 TRACE_RET(chip, STATUS_FAIL);
1906 if (CHECK_PID(chip, 0x5209) &&
1907 (CHK_SD30_SPEED(sd_card) || CHK_MMC_DDR52(sd_card))) {
1908 if (sd_card->need_retune && (sd_card->sd_clock != chip->cur_clk)) {
1910 sd_card->need_retune = 0;
1914 retval = switch_clock(chip, sd_card->sd_clock);
1915 if (retval != STATUS_SUCCESS)
1916 TRACE_RET(chip, STATUS_FAIL);
1919 if (CHK_SD(sd_card)) {
1920 if (CHK_SD_DDR50(sd_card))
1921 retval = sd_ddr_tuning(chip);
1923 retval = sd_sdr_tuning(chip);
1925 if (CHK_MMC_DDR52(sd_card))
1926 retval = mmc_ddr_tuning(chip);
1929 if (retval != STATUS_SUCCESS)
1930 TRACE_RET(chip, STATUS_FAIL);
1933 return STATUS_SUCCESS;
1936 static int sd_prepare_reset(struct rtsx_chip *chip)
1938 struct sd_info *sd_card = &(chip->sd_card);
1941 if (chip->asic_code)
1942 sd_card->sd_clock = 29;
1944 sd_card->sd_clock = CLK_30;
1946 sd_card->sd_type = 0;
1947 sd_card->seq_mode = 0;
1948 sd_card->sd_data_buf_ready = 0;
1949 sd_card->capacity = 0;
1951 #ifdef SUPPORT_SD_LOCK
1952 sd_card->sd_lock_status = 0;
1953 sd_card->sd_erase_status = 0;
1956 chip->capacity[chip->card2lun[SD_CARD]] = 0;
1959 retval = sd_set_init_para(chip);
1960 if (retval != STATUS_SUCCESS)
1961 TRACE_RET(chip, retval);
1963 if (CHECK_PID(chip, 0x5209)) {
1964 RTSX_WRITE_REG(chip, REG_SD_CFG1, 0xFF,
1965 SD_CLK_DIVIDE_128 | SD_20_MODE | SD_BUS_WIDTH_1);
1966 RTSX_WRITE_REG(chip, SD_SAMPLE_POINT_CTL, 0xFF, SD20_RX_POS_EDGE);
1967 RTSX_WRITE_REG(chip, SD_PUSH_POINT_CTL, 0xFF, 0);
1969 RTSX_WRITE_REG(chip, REG_SD_CFG1, 0xFF, 0x40);
1972 RTSX_WRITE_REG(chip, CARD_STOP, SD_STOP | SD_CLR_ERR, SD_STOP | SD_CLR_ERR);
1974 retval = select_card(chip, SD_CARD);
1975 if (retval != STATUS_SUCCESS)
1976 TRACE_RET(chip, STATUS_FAIL);
1978 return STATUS_SUCCESS;
1981 static int sd_pull_ctl_disable(struct rtsx_chip *chip)
1983 if (CHECK_PID(chip, 0x5209)) {
1984 RTSX_WRITE_REG(chip, CARD_PULL_CTL1, 0xFF, 0x55);
1985 RTSX_WRITE_REG(chip, CARD_PULL_CTL2, 0xFF, 0x55);
1986 RTSX_WRITE_REG(chip, CARD_PULL_CTL3, 0xFF, 0xD5);
1987 } else if (CHECK_PID(chip, 0x5208)) {
1988 RTSX_WRITE_REG(chip, CARD_PULL_CTL1, 0xFF,
1989 XD_D3_PD | SD_D7_PD | SD_CLK_PD | SD_D5_PD);
1990 RTSX_WRITE_REG(chip, CARD_PULL_CTL2, 0xFF,
1991 SD_D6_PD | SD_D0_PD | SD_D1_PD | XD_D5_PD);
1992 RTSX_WRITE_REG(chip, CARD_PULL_CTL3, 0xFF,
1993 SD_D4_PD | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
1994 RTSX_WRITE_REG(chip, CARD_PULL_CTL4, 0xFF,
1995 XD_RDY_PD | SD_D3_PD | SD_D2_PD | XD_ALE_PD);
1996 RTSX_WRITE_REG(chip, CARD_PULL_CTL5, 0xFF,
1997 MS_INS_PU | SD_WP_PD | SD_CD_PU | SD_CMD_PD);
1998 RTSX_WRITE_REG(chip, CARD_PULL_CTL6, 0xFF, MS_D5_PD | MS_D4_PD);
1999 } else if (CHECK_PID(chip, 0x5288)) {
2000 if (CHECK_BARO_PKG(chip, QFN)) {
2001 RTSX_WRITE_REG(chip, CARD_PULL_CTL1, 0xFF, 0x55);
2002 RTSX_WRITE_REG(chip, CARD_PULL_CTL2, 0xFF, 0x55);
2003 RTSX_WRITE_REG(chip, CARD_PULL_CTL3, 0xFF, 0x4B);
2004 RTSX_WRITE_REG(chip, CARD_PULL_CTL4, 0xFF, 0x69);
2008 return STATUS_SUCCESS;
2011 int sd_pull_ctl_enable(struct rtsx_chip *chip)
2015 rtsx_init_cmd(chip);
2017 if (CHECK_PID(chip, 0x5209)) {
2018 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 0xAA);
2019 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 0xAA);
2020 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 0xE9);
2021 } else if (CHECK_PID(chip, 0x5208)) {
2022 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF,
2023 XD_D3_PD | SD_DAT7_PU | SD_CLK_NP | SD_D5_PU);
2024 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF,
2025 SD_D6_PU | SD_D0_PU | SD_D1_PU | XD_D5_PD);
2026 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF,
2027 SD_D4_PU | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
2028 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF,
2029 XD_RDY_PD | SD_D3_PU | SD_D2_PU | XD_ALE_PD);
2030 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF,
2031 MS_INS_PU | SD_WP_PU | SD_CD_PU | SD_CMD_PU);
2032 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF, MS_D5_PD | MS_D4_PD);
2033 } else if (CHECK_PID(chip, 0x5288)) {
2034 if (CHECK_BARO_PKG(chip, QFN)) {
2035 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 0xA8);
2036 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 0x5A);
2037 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 0x95);
2038 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF, 0xAA);
2042 retval = rtsx_send_cmd(chip, SD_CARD, 100);
2044 TRACE_RET(chip, STATUS_FAIL);
2046 return STATUS_SUCCESS;
2049 static int sd_init_power(struct rtsx_chip *chip)
2053 if (CHECK_PID(chip, 0x5209))
2054 RTSX_WRITE_REG(chip, PWR_GATE_CTRL, LDO3318_PWR_MASK, LDO_OFF);
2056 retval = sd_power_off_card3v3(chip);
2057 if (retval != STATUS_SUCCESS)
2058 TRACE_RET(chip, STATUS_FAIL);
2060 if (!chip->ft2_fast_mode)
2063 retval = enable_card_clock(chip, SD_CARD);
2064 if (retval != STATUS_SUCCESS)
2065 TRACE_RET(chip, STATUS_FAIL);
2067 if (chip->asic_code) {
2068 retval = sd_pull_ctl_enable(chip);
2069 if (retval != STATUS_SUCCESS)
2070 TRACE_RET(chip, STATUS_FAIL);
2072 RTSX_WRITE_REG(chip, FPGA_PULL_CTL, FPGA_SD_PULL_CTL_BIT | 0x20, 0);
2075 if (chip->ft2_fast_mode) {
2076 if (CHECK_PID(chip, 0x5209))
2077 RTSX_WRITE_REG(chip, PWR_GATE_CTRL, LDO3318_PWR_MASK, LDO_ON);
2080 retval = card_power_on(chip, SD_CARD);
2081 if (retval != STATUS_SUCCESS)
2082 TRACE_RET(chip, STATUS_FAIL);
2087 if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
2088 RTSX_DEBUGP("Over current, OCPSTAT is 0x%x\n", chip->ocp_stat);
2089 TRACE_RET(chip, STATUS_FAIL);
2094 RTSX_WRITE_REG(chip, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN);
2096 return STATUS_SUCCESS;
2099 static int sd_dummy_clock(struct rtsx_chip *chip)
2101 if (CHECK_PID(chip, 0x5209)) {
2102 RTSX_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN, SD_CLK_TOGGLE_EN);
2104 RTSX_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 0x00);
2106 RTSX_WRITE_REG(chip, REG_SD_CFG3, 0x01, 0x01);
2108 RTSX_WRITE_REG(chip, REG_SD_CFG3, 0x01, 0);
2111 return STATUS_SUCCESS;
2114 static int sd_read_lba0(struct rtsx_chip *chip)
2116 struct sd_info *sd_card = &(chip->sd_card);
2118 u8 cmd[5], bus_width;
2120 cmd[0] = 0x40 | READ_SINGLE_BLOCK;
2126 if (CHK_SD(sd_card)) {
2127 bus_width = SD_BUS_WIDTH_4;
2129 if (CHK_MMC_8BIT(sd_card))
2130 bus_width = SD_BUS_WIDTH_8;
2131 else if (CHK_MMC_4BIT(sd_card))
2132 bus_width = SD_BUS_WIDTH_4;
2134 bus_width = SD_BUS_WIDTH_1;
2137 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd,
2138 5, 512, 1, bus_width, NULL, 0, 100);
2139 if (retval != STATUS_SUCCESS) {
2140 rtsx_clear_sd_error(chip);
2141 TRACE_RET(chip, STATUS_FAIL);
2144 return STATUS_SUCCESS;
2147 static int sd_check_wp_state(struct rtsx_chip *chip)
2149 struct sd_info *sd_card = &(chip->sd_card);
2155 retval = sd_send_cmd_get_rsp(chip, APP_CMD,
2156 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
2157 if (retval != STATUS_SUCCESS)
2158 TRACE_RET(chip, STATUS_FAIL);
2160 cmd[0] = 0x40 | SD_STATUS;
2166 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1, SD_BUS_WIDTH_4, buf, 64, 250);
2167 if (retval != STATUS_SUCCESS) {
2168 rtsx_clear_sd_error(chip);
2170 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
2171 TRACE_RET(chip, STATUS_FAIL);
2174 RTSX_DEBUGP("ACMD13:\n");
2177 sd_card_type = ((u16)buf[2] << 8) | buf[3];
2178 RTSX_DEBUGP("sd_card_type = 0x%04x\n", sd_card_type);
2179 if ((sd_card_type == 0x0001) || (sd_card_type == 0x0002)) {
2180 /* ROM card or OTP */
2181 chip->card_wp |= SD_CARD;
2184 /* Check SD Machanical Write-Protect Switch */
2185 val = rtsx_readl(chip, RTSX_BIPR);
2186 if (val & SD_WRITE_PROTECT)
2187 chip->card_wp |= SD_CARD;
2189 return STATUS_SUCCESS;
2192 static int reset_sd(struct rtsx_chip *chip)
2194 struct sd_info *sd_card = &(chip->sd_card);
2195 int retval, i = 0, j = 0, k = 0, hi_cap_flow = 0;
2196 int sd_dont_switch = 0;
2197 int support_1v8 = 0;
2200 u8 switch_bus_width;
2213 #ifdef SUPPORT_SD_LOCK
2214 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
2215 goto SD_UNLOCK_ENTRY;
2218 retval = sd_prepare_reset(chip);
2219 if (retval != STATUS_SUCCESS)
2220 TRACE_RET(chip, STATUS_FAIL);
2222 retval = sd_dummy_clock(chip);
2223 if (retval != STATUS_SUCCESS)
2224 TRACE_RET(chip, STATUS_FAIL);
2226 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip) && try_sdio) {
2229 for (; rty_cnt < chip->sdio_retry_cnt; rty_cnt++) {
2230 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2231 sd_set_err_code(chip, SD_NO_CARD);
2232 TRACE_RET(chip, STATUS_FAIL);
2235 retval = sd_send_cmd_get_rsp(chip, IO_SEND_OP_COND, 0, SD_RSP_TYPE_R4, rsp, 5);
2236 if (retval == STATUS_SUCCESS) {
2237 int func_num = (rsp[1] >> 4) & 0x07;
2239 RTSX_DEBUGP("SD_IO card (Function number: %d)!\n", func_num);
2241 TRACE_RET(chip, STATUS_FAIL);
2247 sd_init_power(chip);
2249 sd_dummy_clock(chip);
2252 RTSX_DEBUGP("Normal card!\n");
2255 /* Start Initialization Process of SD Card */
2257 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0, NULL, 0);
2258 if (retval != STATUS_SUCCESS)
2259 TRACE_RET(chip, STATUS_FAIL);
2263 retval = sd_send_cmd_get_rsp(chip, SEND_IF_COND, 0x000001AA, SD_RSP_TYPE_R7, rsp, 5);
2264 if (retval == STATUS_SUCCESS) {
2265 if ((rsp[4] == 0xAA) && ((rsp[3] & 0x0f) == 0x01)) {
2267 if (CHECK_PID(chip, 0x5209)) {
2269 voltage = SUPPORT_VOLTAGE |
2270 SUPPORT_HIGH_AND_EXTENDED_CAPACITY;
2272 voltage = SUPPORT_VOLTAGE |
2273 SUPPORT_HIGH_AND_EXTENDED_CAPACITY |
2274 SUPPORT_MAX_POWER_PERMANCE | SUPPORT_1V8;
2277 voltage = SUPPORT_VOLTAGE | 0x40000000;
2283 voltage = SUPPORT_VOLTAGE;
2285 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0, NULL, 0);
2286 if (retval != STATUS_SUCCESS)
2287 TRACE_RET(chip, STATUS_FAIL);
2293 retval = sd_send_cmd_get_rsp(chip, APP_CMD, 0, SD_RSP_TYPE_R1, NULL, 0);
2294 if (retval != STATUS_SUCCESS) {
2295 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2296 sd_set_err_code(chip, SD_NO_CARD);
2297 TRACE_RET(chip, STATUS_FAIL);
2304 TRACE_RET(chip, STATUS_FAIL);
2307 retval = sd_send_cmd_get_rsp(chip, SD_APP_OP_COND, voltage, SD_RSP_TYPE_R3, rsp, 5);
2308 if (retval != STATUS_SUCCESS) {
2313 TRACE_RET(chip, STATUS_FAIL);
2318 } while (!(rsp[1] & 0x80) && (i < 255));
2321 TRACE_RET(chip, STATUS_FAIL);
2325 SET_SD_HCXC(sd_card);
2327 CLR_SD_HCXC(sd_card);
2329 if (CHECK_PID(chip, 0x5209) && CHK_SD_HCXC(sd_card) && !sd20_mode)
2330 support_1v8 = (rsp[1] & 0x01) ? 1 : 0;
2334 CLR_SD_HCXC(sd_card);
2337 RTSX_DEBUGP("support_1v8 = %d\n", support_1v8);
2340 retval = sd_voltage_switch(chip);
2341 if (retval != STATUS_SUCCESS)
2342 TRACE_RET(chip, STATUS_FAIL);
2345 retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2, NULL, 0);
2346 if (retval != STATUS_SUCCESS)
2347 TRACE_RET(chip, STATUS_FAIL);
2349 for (i = 0; i < 3; i++) {
2350 retval = sd_send_cmd_get_rsp(chip, SEND_RELATIVE_ADDR, 0, SD_RSP_TYPE_R6, rsp, 5);
2351 if (retval != STATUS_SUCCESS)
2352 TRACE_RET(chip, STATUS_FAIL);
2354 sd_card->sd_addr = (u32)rsp[1] << 24;
2355 sd_card->sd_addr += (u32)rsp[2] << 16;
2357 if (sd_card->sd_addr)
2361 retval = sd_check_csd(chip, 1);
2362 if (retval != STATUS_SUCCESS)
2363 TRACE_RET(chip, STATUS_FAIL);
2365 retval = sd_select_card(chip, 1);
2366 if (retval != STATUS_SUCCESS)
2367 TRACE_RET(chip, STATUS_FAIL);
2369 #ifdef SUPPORT_SD_LOCK
2371 retval = sd_update_lock_status(chip);
2372 if (retval != STATUS_SUCCESS)
2373 TRACE_RET(chip, STATUS_FAIL);
2375 if (sd_card->sd_lock_status & SD_LOCKED) {
2376 sd_card->sd_lock_status |= (SD_LOCK_1BIT_MODE | SD_PWD_EXIST);
2377 return STATUS_SUCCESS;
2378 } else if (!(sd_card->sd_lock_status & SD_UNLOCK_POW_ON)) {
2379 sd_card->sd_lock_status &= ~SD_PWD_EXIST;
2383 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
2384 if (retval != STATUS_SUCCESS)
2385 TRACE_RET(chip, STATUS_FAIL);
2387 retval = sd_send_cmd_get_rsp(chip, SET_CLR_CARD_DETECT, 0, SD_RSP_TYPE_R1, NULL, 0);
2388 if (retval != STATUS_SUCCESS)
2389 TRACE_RET(chip, STATUS_FAIL);
2392 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
2393 if (retval != STATUS_SUCCESS)
2394 TRACE_RET(chip, STATUS_FAIL);
2396 retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2, SD_RSP_TYPE_R1, NULL, 0);
2397 if (retval != STATUS_SUCCESS)
2398 TRACE_RET(chip, STATUS_FAIL);
2400 switch_bus_width = SD_BUS_WIDTH_4;
2402 switch_bus_width = SD_BUS_WIDTH_1;
2405 retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1, NULL, 0);
2406 if (retval != STATUS_SUCCESS)
2407 TRACE_RET(chip, STATUS_FAIL);
2409 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
2410 if (retval != STATUS_SUCCESS)
2411 TRACE_RET(chip, STATUS_FAIL);
2413 if (!(sd_card->raw_csd[4] & 0x40))
2416 if (!sd_dont_switch) {
2418 /* Set sd_switch_fail here, because we needn't
2419 * switch to UHS mode
2421 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
2422 DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK;
2425 /* Check the card whether follow SD1.1 spec or higher */
2426 retval = sd_check_spec(chip, switch_bus_width);
2427 if (retval == STATUS_SUCCESS) {
2428 retval = sd_switch_function(chip, switch_bus_width);
2429 if (retval != STATUS_SUCCESS) {
2430 if (CHECK_PID(chip, 0x5209))
2431 sd_change_bank_voltage(chip, SD_IO_3V3);
2433 sd_init_power(chip);
2441 if (CHECK_PID(chip, 0x5209))
2442 sd_change_bank_voltage(chip, SD_IO_3V3);
2444 sd_init_power(chip);
2454 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
2455 if (retval != STATUS_SUCCESS)
2456 TRACE_RET(chip, STATUS_FAIL);
2458 retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2, SD_RSP_TYPE_R1, NULL, 0);
2459 if (retval != STATUS_SUCCESS)
2460 TRACE_RET(chip, STATUS_FAIL);
2463 #ifdef SUPPORT_SD_LOCK
2464 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2467 if (!sd20_mode && CHK_SD30_SPEED(sd_card)) {
2470 RTSX_WRITE_REG(chip, SD30_DRIVE_SEL, 0x07, chip->sd30_drive_sel_1v8);
2472 retval = sd_set_init_para(chip);
2473 if (retval != STATUS_SUCCESS)
2474 TRACE_RET(chip, STATUS_FAIL);
2476 if (CHK_SD_DDR50(sd_card))
2477 retval = sd_ddr_tuning(chip);
2479 retval = sd_sdr_tuning(chip);
2481 if (retval != STATUS_SUCCESS) {
2483 TRACE_RET(chip, STATUS_FAIL);
2485 retval = sd_init_power(chip);
2486 if (retval != STATUS_SUCCESS)
2487 TRACE_RET(chip, STATUS_FAIL);
2495 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
2497 if (CHK_SD_DDR50(sd_card)) {
2498 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
2499 if (retval != STATUS_SUCCESS)
2504 retval = sd_read_lba0(chip);
2505 if (retval != STATUS_SUCCESS) {
2507 TRACE_RET(chip, STATUS_FAIL);
2509 retval = sd_init_power(chip);
2510 if (retval != STATUS_SUCCESS)
2511 TRACE_RET(chip, STATUS_FAIL);
2521 retval = sd_check_wp_state(chip);
2522 if (retval != STATUS_SUCCESS)
2523 TRACE_RET(chip, STATUS_FAIL);
2525 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
2527 #ifdef SUPPORT_SD_LOCK
2528 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
2529 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_H, 0xFF, 0x02);
2530 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_L, 0xFF, 0x00);
2534 return STATUS_SUCCESS;
2538 static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width)
2540 struct sd_info *sd_card = &(chip->sd_card);
2542 u8 buf[8] = {0}, bus_width, *ptr;
2546 retval = sd_send_cmd_get_rsp(chip, BUSTEST_W, 0, SD_RSP_TYPE_R1, NULL, 0);
2547 if (retval != STATUS_SUCCESS)
2548 TRACE_RET(chip, SWITCH_FAIL);
2550 if (width == MMC_8BIT_BUS) {
2555 bus_width = SD_BUS_WIDTH_8;
2560 bus_width = SD_BUS_WIDTH_4;
2563 if (!CHECK_PID(chip, 0x5209)) {
2564 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0x02);
2565 if (retval != STATUS_SUCCESS)
2566 TRACE_RET(chip, SWITCH_ERR);
2569 retval = sd_write_data(chip, SD_TM_AUTO_WRITE_3,
2570 NULL, 0, byte_cnt, 1, bus_width, buf, len, 100);
2571 if (retval != STATUS_SUCCESS) {
2572 if (CHECK_PID(chip, 0x5209)) {
2573 u8 val1 = 0, val2 = 0;
2574 rtsx_read_register(chip, REG_SD_STAT1, &val1);
2575 rtsx_read_register(chip, REG_SD_STAT2, &val2);
2576 rtsx_clear_sd_error(chip);
2577 if ((val1 & 0xE0) || val2)
2578 TRACE_RET(chip, SWITCH_ERR);
2580 rtsx_clear_sd_error(chip);
2581 rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
2582 TRACE_RET(chip, SWITCH_ERR);
2586 if (!CHECK_PID(chip, 0x5209)) {
2587 retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
2588 if (retval != STATUS_SUCCESS)
2589 TRACE_RET(chip, SWITCH_ERR);
2592 RTSX_DEBUGP("SD/MMC CMD %d\n", BUSTEST_R);
2594 rtsx_init_cmd(chip);
2596 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | BUSTEST_R);
2598 if (width == MMC_8BIT_BUS)
2599 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0x08);
2601 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0x04);
2603 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
2604 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
2606 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
2607 SD_CALCULATE_CRC7 | SD_NO_CHECK_CRC16 | SD_NO_WAIT_BUSY_END |
2608 SD_CHECK_CRC7 | SD_RSP_LEN_6);
2609 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER);
2610 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, SD_TM_NORMAL_READ | SD_TRANSFER_START);
2611 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, SD_TRANSFER_END);
2613 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2, 0, 0);
2614 if (width == MMC_8BIT_BUS)
2615 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 1, 0, 0);
2617 retval = rtsx_send_cmd(chip, SD_CARD, 100);
2619 rtsx_clear_sd_error(chip);
2620 TRACE_RET(chip, SWITCH_ERR);
2623 ptr = rtsx_get_cmd_data(chip) + 1;
2625 if (width == MMC_8BIT_BUS) {
2626 RTSX_DEBUGP("BUSTEST_R [8bits]: 0x%02x 0x%02x\n", ptr[0], ptr[1]);
2627 if ((ptr[0] == 0xAA) && (ptr[1] == 0x55)) {
2631 if (CHK_MMC_DDR52(sd_card))
2636 retval = sd_send_cmd_get_rsp(chip, SWITCH, arg, SD_RSP_TYPE_R1b, rsp, 5);
2637 if ((retval == STATUS_SUCCESS) && !(rsp[4] & MMC_SWITCH_ERR))
2638 return SWITCH_SUCCESS;
2641 RTSX_DEBUGP("BUSTEST_R [4bits]: 0x%02x\n", ptr[0]);
2642 if (ptr[0] == 0xA5) {
2646 if (CHK_MMC_DDR52(sd_card))
2651 retval = sd_send_cmd_get_rsp(chip, SWITCH, arg, SD_RSP_TYPE_R1b, rsp, 5);
2652 if ((retval == STATUS_SUCCESS) && !(rsp[4] & MMC_SWITCH_ERR))
2653 return SWITCH_SUCCESS;
2657 TRACE_RET(chip, SWITCH_FAIL);
2661 static int mmc_switch_timing_bus(struct rtsx_chip *chip, int switch_ddr)
2663 struct sd_info *sd_card = &(chip->sd_card);
2665 u8 *ptr, card_type, card_type_mask = 0;
2667 CLR_MMC_HS(sd_card);
2669 RTSX_DEBUGP("SD/MMC CMD %d\n", SEND_EXT_CSD);
2671 rtsx_init_cmd(chip);
2673 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | SEND_EXT_CSD);
2674 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, 0);
2675 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, 0);
2676 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, 0);
2677 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, 0);
2679 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0);
2680 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 2);
2681 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
2682 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
2684 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
2685 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END |
2686 SD_CHECK_CRC7 | SD_RSP_LEN_6);
2687 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER);
2688 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, SD_TM_NORMAL_READ | SD_TRANSFER_START);
2689 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, SD_TRANSFER_END);
2691 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 196, 0xFF, 0);
2692 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 212, 0xFF, 0);
2693 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 213, 0xFF, 0);
2694 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 214, 0xFF, 0);
2695 rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 215, 0xFF, 0);
2697 retval = rtsx_send_cmd(chip, SD_CARD, 1000);
2699 if (retval == -ETIMEDOUT) {
2700 rtsx_clear_sd_error(chip);
2701 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2702 SD_RSP_TYPE_R1, NULL, 0);
2704 TRACE_RET(chip, STATUS_FAIL);
2707 ptr = rtsx_get_cmd_data(chip);
2708 if (ptr[0] & SD_TRANSFER_ERR) {
2709 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
2710 TRACE_RET(chip, STATUS_FAIL);
2713 if (CHK_MMC_SECTOR_MODE(sd_card)) {
2714 sd_card->capacity = ((u32)ptr[5] << 24) | ((u32)ptr[4] << 16) |
2715 ((u32)ptr[3] << 8) | ((u32)ptr[2]);
2718 if (CHECK_PID(chip, 0x5209)) {
2719 #ifdef SUPPORT_SD_LOCK
2720 if (!(sd_card->sd_lock_status & SD_SDR_RST) &&
2721 (chip->sd_ctl & SUPPORT_MMC_DDR_MODE)) {
2722 card_type_mask = 0x07;
2724 card_type_mask = 0x03;
2727 if (chip->sd_ctl & SUPPORT_MMC_DDR_MODE)
2728 card_type_mask = 0x07;
2730 card_type_mask = 0x03;
2733 card_type_mask = 0x03;
2735 card_type = ptr[1] & card_type_mask;
2739 if (card_type & 0x04) {
2741 SET_MMC_DDR52(sd_card);
2743 SET_MMC_52M(sd_card);
2744 } else if (card_type & 0x02) {
2745 SET_MMC_52M(sd_card);
2747 SET_MMC_26M(sd_card);
2750 retval = sd_send_cmd_get_rsp(chip, SWITCH,
2751 0x03B90100, SD_RSP_TYPE_R1b, rsp, 5);
2752 if ((retval != STATUS_SUCCESS) || (rsp[4] & MMC_SWITCH_ERR))
2753 CLR_MMC_HS(sd_card);
2756 sd_choose_proper_clock(chip);
2757 retval = switch_clock(chip, sd_card->sd_clock);
2758 if (retval != STATUS_SUCCESS)
2759 TRACE_RET(chip, STATUS_FAIL);
2761 /* Test Bus Procedure */
2762 retval = mmc_test_switch_bus(chip, MMC_8BIT_BUS);
2763 if (retval == SWITCH_SUCCESS) {
2764 SET_MMC_8BIT(sd_card);
2765 chip->card_bus_width[chip->card2lun[SD_CARD]] = 8;
2766 #ifdef SUPPORT_SD_LOCK
2767 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2769 } else if (retval == SWITCH_FAIL) {
2770 retval = mmc_test_switch_bus(chip, MMC_4BIT_BUS);
2771 if (retval == SWITCH_SUCCESS) {
2772 SET_MMC_4BIT(sd_card);
2773 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
2774 #ifdef SUPPORT_SD_LOCK
2775 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2777 } else if (retval == SWITCH_FAIL) {
2778 CLR_MMC_8BIT(sd_card);
2779 CLR_MMC_4BIT(sd_card);
2781 TRACE_RET(chip, STATUS_FAIL);
2784 TRACE_RET(chip, STATUS_FAIL);
2787 return STATUS_SUCCESS;
2791 static int reset_mmc(struct rtsx_chip *chip)
2793 struct sd_info *sd_card = &(chip->sd_card);
2794 int retval, i = 0, j = 0, k = 0;
2800 #ifdef SUPPORT_SD_LOCK
2801 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
2802 goto MMC_UNLOCK_ENTRY;
2806 retval = sd_prepare_reset(chip);
2807 if (retval != STATUS_SUCCESS)
2808 TRACE_RET(chip, retval);
2813 retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0, NULL, 0);
2814 if (retval != STATUS_SUCCESS)
2815 TRACE_RET(chip, STATUS_FAIL);
2818 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2819 sd_set_err_code(chip, SD_NO_CARD);
2820 TRACE_RET(chip, STATUS_FAIL);
2823 retval = sd_send_cmd_get_rsp(chip, SEND_OP_COND,
2824 (SUPPORT_VOLTAGE|0x40000000), SD_RSP_TYPE_R3, rsp, 5);
2825 if (retval != STATUS_SUCCESS) {
2826 if (sd_check_err_code(chip, SD_BUSY) || sd_check_err_code(chip, SD_TO_ERR)) {
2829 sd_clr_err_code(chip);
2832 TRACE_RET(chip, STATUS_FAIL);
2837 sd_clr_err_code(chip);
2840 TRACE_RET(chip, STATUS_FAIL);
2847 } while (!(rsp[1] & 0x80) && (i < 255));
2850 TRACE_RET(chip, STATUS_FAIL);
2852 if ((rsp[1] & 0x60) == 0x40)
2853 SET_MMC_SECTOR_MODE(sd_card);
2855 CLR_MMC_SECTOR_MODE(sd_card);
2857 retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2, NULL, 0);
2858 if (retval != STATUS_SUCCESS)
2859 TRACE_RET(chip, STATUS_FAIL);
2861 sd_card->sd_addr = 0x00100000;
2862 retval = sd_send_cmd_get_rsp(chip, SET_RELATIVE_ADDR, sd_card->sd_addr, SD_RSP_TYPE_R6, rsp, 5);
2863 if (retval != STATUS_SUCCESS)
2864 TRACE_RET(chip, STATUS_FAIL);
2866 retval = sd_check_csd(chip, 1);
2867 if (retval != STATUS_SUCCESS)
2868 TRACE_RET(chip, STATUS_FAIL);
2870 spec_ver = (sd_card->raw_csd[0] & 0x3C) >> 2;
2872 retval = sd_select_card(chip, 1);
2873 if (retval != STATUS_SUCCESS)
2874 TRACE_RET(chip, STATUS_FAIL);
2876 retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1, NULL, 0);
2877 if (retval != STATUS_SUCCESS)
2878 TRACE_RET(chip, STATUS_FAIL);
2880 #ifdef SUPPORT_SD_LOCK
2882 retval = sd_update_lock_status(chip);
2883 if (retval != STATUS_SUCCESS)
2884 TRACE_RET(chip, STATUS_FAIL);
2887 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
2888 if (retval != STATUS_SUCCESS)
2889 TRACE_RET(chip, STATUS_FAIL);
2891 chip->card_bus_width[chip->card2lun[SD_CARD]] = 1;
2893 if (!sd_card->mmc_dont_switch_bus) {
2894 if (spec_ver == 4) {
2896 retval = mmc_switch_timing_bus(chip, switch_ddr);
2897 if (retval != STATUS_SUCCESS) {
2898 retval = sd_init_power(chip);
2899 if (retval != STATUS_SUCCESS)
2900 TRACE_RET(chip, STATUS_FAIL);
2901 sd_card->mmc_dont_switch_bus = 1;
2902 TRACE_GOTO(chip, Switch_Fail);
2906 if (CHK_MMC_SECTOR_MODE(sd_card) && (sd_card->capacity == 0))
2907 TRACE_RET(chip, STATUS_FAIL);
2909 if (switch_ddr && CHK_MMC_DDR52(sd_card)) {
2910 retval = sd_set_init_para(chip);
2911 if (retval != STATUS_SUCCESS)
2912 TRACE_RET(chip, STATUS_FAIL);
2914 retval = mmc_ddr_tuning(chip);
2915 if (retval != STATUS_SUCCESS) {
2916 retval = sd_init_power(chip);
2917 if (retval != STATUS_SUCCESS)
2918 TRACE_RET(chip, STATUS_FAIL);
2921 TRACE_GOTO(chip, Switch_Fail);
2924 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
2925 if (retval == STATUS_SUCCESS) {
2926 retval = sd_read_lba0(chip);
2927 if (retval != STATUS_SUCCESS) {
2928 retval = sd_init_power(chip);
2929 if (retval != STATUS_SUCCESS)
2930 TRACE_RET(chip, STATUS_FAIL);
2933 TRACE_GOTO(chip, Switch_Fail);
2939 #ifdef SUPPORT_SD_LOCK
2940 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
2941 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_H, 0xFF, 0x02);
2942 RTSX_WRITE_REG(chip, REG_SD_BLOCK_CNT_L, 0xFF, 0x00);
2946 temp = rtsx_readl(chip, RTSX_BIPR);
2947 if (temp & SD_WRITE_PROTECT)
2948 chip->card_wp |= SD_CARD;
2950 return STATUS_SUCCESS;
2953 int reset_sd_card(struct rtsx_chip *chip)
2955 struct sd_info *sd_card = &(chip->sd_card);
2958 sd_init_reg_addr(chip);
2960 memset(sd_card, 0, sizeof(struct sd_info));
2961 chip->capacity[chip->card2lun[SD_CARD]] = 0;
2963 retval = enable_card_clock(chip, SD_CARD);
2964 if (retval != STATUS_SUCCESS)
2965 TRACE_RET(chip, STATUS_FAIL);
2967 if (chip->ignore_sd && CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
2968 if (chip->asic_code) {
2969 retval = sd_pull_ctl_enable(chip);
2970 if (retval != STATUS_SUCCESS)
2971 TRACE_RET(chip, STATUS_FAIL);
2973 retval = rtsx_write_register(chip, FPGA_PULL_CTL,
2974 FPGA_SD_PULL_CTL_BIT | 0x20, 0);
2975 if (retval != STATUS_SUCCESS)
2976 TRACE_RET(chip, STATUS_FAIL);
2978 retval = card_share_mode(chip, SD_CARD);
2979 if (retval != STATUS_SUCCESS)
2980 TRACE_RET(chip, STATUS_FAIL);
2983 TRACE_RET(chip, STATUS_FAIL);
2986 retval = sd_init_power(chip);
2987 if (retval != STATUS_SUCCESS)
2988 TRACE_RET(chip, STATUS_FAIL);
2990 if (chip->sd_ctl & RESET_MMC_FIRST) {
2991 retval = reset_mmc(chip);
2992 if (retval != STATUS_SUCCESS) {
2993 if (sd_check_err_code(chip, SD_NO_CARD))
2994 TRACE_RET(chip, STATUS_FAIL);
2996 retval = reset_sd(chip);
2997 if (retval != STATUS_SUCCESS) {
2998 if (CHECK_PID(chip, 0x5209))
2999 sd_change_bank_voltage(chip, SD_IO_3V3);
3001 TRACE_RET(chip, STATUS_FAIL);
3005 retval = reset_sd(chip);
3006 if (retval != STATUS_SUCCESS) {
3007 if (sd_check_err_code(chip, SD_NO_CARD))
3008 TRACE_RET(chip, STATUS_FAIL);
3010 if (CHECK_PID(chip, 0x5209)) {
3011 retval = sd_change_bank_voltage(chip, SD_IO_3V3);
3012 if (retval != STATUS_SUCCESS)
3013 TRACE_RET(chip, STATUS_FAIL);
3017 TRACE_RET(chip, STATUS_FAIL);
3019 retval = reset_mmc(chip);
3020 if (retval != STATUS_SUCCESS)
3021 TRACE_RET(chip, STATUS_FAIL);
3026 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
3027 if (retval != STATUS_SUCCESS)
3028 TRACE_RET(chip, STATUS_FAIL);
3030 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
3031 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
3033 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
3035 retval = sd_set_init_para(chip);
3036 if (retval != STATUS_SUCCESS)
3037 TRACE_RET(chip, STATUS_FAIL);
3039 RTSX_DEBUGP("sd_card->sd_type = 0x%x\n", sd_card->sd_type);
3041 return STATUS_SUCCESS;
3044 static int reset_mmc_only(struct rtsx_chip *chip)
3046 struct sd_info *sd_card = &(chip->sd_card);
3049 sd_card->sd_type = 0;
3050 sd_card->seq_mode = 0;
3051 sd_card->sd_data_buf_ready = 0;
3052 sd_card->capacity = 0;
3053 sd_card->sd_switch_fail = 0;
3055 #ifdef SUPPORT_SD_LOCK
3056 sd_card->sd_lock_status = 0;
3057 sd_card->sd_erase_status = 0;
3060 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity = 0;
3062 retval = enable_card_clock(chip, SD_CARD);
3063 if (retval != STATUS_SUCCESS)
3064 TRACE_RET(chip, STATUS_FAIL);
3066 retval = sd_init_power(chip);
3067 if (retval != STATUS_SUCCESS)
3068 TRACE_RET(chip, STATUS_FAIL);
3070 retval = reset_mmc(chip);
3071 if (retval != STATUS_SUCCESS)
3072 TRACE_RET(chip, STATUS_FAIL);
3074 retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
3075 if (retval != STATUS_SUCCESS)
3076 TRACE_RET(chip, STATUS_FAIL);
3078 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
3079 RTSX_WRITE_REG(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
3081 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
3083 retval = sd_set_init_para(chip);
3084 if (retval != STATUS_SUCCESS)
3085 TRACE_RET(chip, STATUS_FAIL);
3087 RTSX_DEBUGP("In reset_mmc_only, sd_card->sd_type = 0x%x\n", sd_card->sd_type);
3089 return STATUS_SUCCESS;
3092 #define WAIT_DATA_READY_RTY_CNT 255
3094 static int wait_data_buf_ready(struct rtsx_chip *chip)
3096 struct sd_info *sd_card = &(chip->sd_card);
3099 for (i = 0; i < WAIT_DATA_READY_RTY_CNT; i++) {
3100 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3101 sd_set_err_code(chip, SD_NO_CARD);
3102 TRACE_RET(chip, STATUS_FAIL);
3105 sd_card->sd_data_buf_ready = 0;
3107 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
3108 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3109 if (retval != STATUS_SUCCESS)
3110 TRACE_RET(chip, STATUS_FAIL);
3112 if (sd_card->sd_data_buf_ready) {
3113 return sd_send_cmd_get_rsp(chip, SEND_STATUS,
3114 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3118 sd_set_err_code(chip, SD_TO_ERR);
3120 TRACE_RET(chip, STATUS_FAIL);
3123 void sd_stop_seq_mode(struct rtsx_chip *chip)
3125 struct sd_info *sd_card = &(chip->sd_card);
3128 if (sd_card->seq_mode) {
3129 retval = sd_switch_clock(chip);
3130 if (retval != STATUS_SUCCESS)
3133 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3134 SD_RSP_TYPE_R1b, NULL, 0);
3135 if (retval != STATUS_SUCCESS)
3136 sd_set_err_code(chip, SD_STS_ERR);
3138 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
3139 if (retval != STATUS_SUCCESS)
3140 sd_set_err_code(chip, SD_STS_ERR);
3142 sd_card->seq_mode = 0;
3144 rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
3148 static inline int sd_auto_tune_clock(struct rtsx_chip *chip)
3150 struct sd_info *sd_card = &(chip->sd_card);
3153 if (chip->asic_code) {
3154 if (sd_card->sd_clock > 30)
3155 sd_card->sd_clock -= 20;
3157 switch (sd_card->sd_clock) {
3159 sd_card->sd_clock = CLK_150;
3163 sd_card->sd_clock = CLK_120;
3167 sd_card->sd_clock = CLK_100;
3171 sd_card->sd_clock = CLK_80;
3175 sd_card->sd_clock = CLK_60;
3179 sd_card->sd_clock = CLK_50;
3187 retval = sd_switch_clock(chip);
3188 if (retval != STATUS_SUCCESS)
3189 TRACE_RET(chip, STATUS_FAIL);
3191 return STATUS_SUCCESS;
3194 int sd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32 start_sector, u16 sector_cnt)
3196 struct sd_info *sd_card = &(chip->sd_card);
3201 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3202 RTSX_DEBUGP("sd_rw: Read %d %s from 0x%x\n", sector_cnt,
3203 (sector_cnt > 1) ? "sectors" : "sector", start_sector);
3205 RTSX_DEBUGP("sd_rw: Write %d %s to 0x%x\n", sector_cnt,
3206 (sector_cnt > 1) ? "sectors" : "sector", start_sector);
3209 sd_card->cleanup_counter = 0;
3211 if (!(chip->card_ready & SD_CARD)) {
3212 sd_card->seq_mode = 0;
3214 retval = reset_sd_card(chip);
3215 if (retval == STATUS_SUCCESS) {
3216 chip->card_ready |= SD_CARD;
3217 chip->card_fail &= ~SD_CARD;
3219 chip->card_ready &= ~SD_CARD;
3220 chip->card_fail |= SD_CARD;
3221 chip->capacity[chip->card2lun[SD_CARD]] = 0;
3222 chip->rw_need_retry = 1;
3223 TRACE_RET(chip, STATUS_FAIL);
3227 if (!CHK_SD_HCXC(sd_card) && !CHK_MMC_SECTOR_MODE(sd_card))
3228 data_addr = start_sector << 9;
3230 data_addr = start_sector;
3232 sd_clr_err_code(chip);
3234 retval = sd_switch_clock(chip);
3235 if (retval != STATUS_SUCCESS) {
3236 sd_set_err_code(chip, SD_IO_ERR);
3237 TRACE_GOTO(chip, RW_FAIL);
3240 if (sd_card->seq_mode && ((sd_card->pre_dir != srb->sc_data_direction)
3241 || ((sd_card->pre_sec_addr + sd_card->pre_sec_cnt) != start_sector))) {
3242 if ((sd_card->pre_sec_cnt < 0x80)
3243 && (sd_card->pre_dir == DMA_FROM_DEVICE)
3244 && !CHK_SD30_SPEED(sd_card)
3245 && !CHK_SD_HS(sd_card)
3246 && !CHK_MMC_HS(sd_card)) {
3247 sd_send_cmd_get_rsp(chip, SEND_STATUS,
3248 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3251 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
3252 0, SD_RSP_TYPE_R1b, NULL, 0);
3253 if (retval != STATUS_SUCCESS) {
3254 chip->rw_need_retry = 1;
3255 sd_set_err_code(chip, SD_STS_ERR);
3256 TRACE_GOTO(chip, RW_FAIL);
3259 sd_card->seq_mode = 0;
3261 retval = rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
3262 if (retval != STATUS_SUCCESS) {
3263 sd_set_err_code(chip, SD_IO_ERR);
3264 TRACE_GOTO(chip, RW_FAIL);
3267 if ((sd_card->pre_sec_cnt < 0x80)
3268 && !CHK_SD30_SPEED(sd_card)
3269 && !CHK_SD_HS(sd_card)
3270 && !CHK_MMC_HS(sd_card)) {
3271 sd_send_cmd_get_rsp(chip, SEND_STATUS,
3272 sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3276 rtsx_init_cmd(chip);
3278 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0x00);
3279 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 0x02);
3280 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, (u8)sector_cnt);
3281 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, (u8)(sector_cnt >> 8));
3283 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, RING_BUFFER);
3285 if (CHK_MMC_8BIT(sd_card))
3286 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_8);
3287 else if (CHK_MMC_4BIT(sd_card) || CHK_SD(sd_card))
3288 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
3290 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_1);
3292 if (sd_card->seq_mode) {
3293 cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END |
3294 SD_NO_CHECK_CRC7 | SD_RSP_LEN_0;
3295 if (CHECK_PID(chip, 0x5209)) {
3296 if (!CHK_SD30_SPEED(sd_card))
3297 cfg2 |= SD_NO_CHECK_WAIT_CRC_TO;
3299 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, cfg2);
3301 trans_dma_enable(srb->sc_data_direction, chip, sector_cnt * 512, DMA_512);
3303 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3304 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3305 SD_TM_AUTO_READ_3 | SD_TRANSFER_START);
3307 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3308 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3311 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, SD_TRANSFER_END);
3313 rtsx_send_cmd_no_wait(chip);
3315 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3316 RTSX_DEBUGP("SD/MMC CMD %d\n", READ_MULTIPLE_BLOCK);
3317 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
3318 0x40 | READ_MULTIPLE_BLOCK);
3319 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(data_addr >> 24));
3320 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(data_addr >> 16));
3321 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(data_addr >> 8));
3322 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)data_addr);
3324 cfg2 = SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END |
3325 SD_CHECK_CRC7 | SD_RSP_LEN_6;
3326 if (CHECK_PID(chip, 0x5209)) {
3327 if (!CHK_SD30_SPEED(sd_card))
3328 cfg2 |= SD_NO_CHECK_WAIT_CRC_TO;
3330 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, cfg2);
3332 trans_dma_enable(srb->sc_data_direction, chip, sector_cnt * 512, DMA_512);
3334 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3335 SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
3336 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3337 SD_TRANSFER_END, SD_TRANSFER_END);
3339 rtsx_send_cmd_no_wait(chip);
3341 retval = rtsx_send_cmd(chip, SD_CARD, 50);
3343 rtsx_clear_sd_error(chip);
3345 chip->rw_need_retry = 1;
3346 sd_set_err_code(chip, SD_TO_ERR);
3347 TRACE_GOTO(chip, RW_FAIL);
3350 retval = wait_data_buf_ready(chip);
3351 if (retval != STATUS_SUCCESS) {
3352 chip->rw_need_retry = 1;
3353 sd_set_err_code(chip, SD_TO_ERR);
3354 TRACE_GOTO(chip, RW_FAIL);
3357 retval = sd_send_cmd_get_rsp(chip, WRITE_MULTIPLE_BLOCK,
3358 data_addr, SD_RSP_TYPE_R1, NULL, 0);
3359 if (retval != STATUS_SUCCESS) {
3360 chip->rw_need_retry = 1;
3361 TRACE_GOTO(chip, RW_FAIL);
3364 rtsx_init_cmd(chip);
3366 cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END |
3367 SD_NO_CHECK_CRC7 | SD_RSP_LEN_0;
3368 if (CHECK_PID(chip, 0x5209)) {
3369 if (!CHK_SD30_SPEED(sd_card))
3370 cfg2 |= SD_NO_CHECK_WAIT_CRC_TO;
3372 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, cfg2);
3374 trans_dma_enable(srb->sc_data_direction, chip, sector_cnt * 512, DMA_512);
3376 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3377 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3378 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3379 SD_TRANSFER_END, SD_TRANSFER_END);
3381 rtsx_send_cmd_no_wait(chip);
3384 sd_card->seq_mode = 1;
3387 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb), scsi_bufflen(srb),
3388 scsi_sg_count(srb), srb->sc_data_direction, chip->sd_timeout);
3393 sd_card->seq_mode = 0;
3395 if (retval == -ETIMEDOUT)
3396 err = STATUS_TIMEDOUT;
3400 rtsx_read_register(chip, REG_SD_STAT1, &stat);
3401 rtsx_clear_sd_error(chip);
3402 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3403 chip->rw_need_retry = 0;
3404 RTSX_DEBUGP("No card exist, exit sd_rw\n");
3405 TRACE_RET(chip, STATUS_FAIL);
3408 chip->rw_need_retry = 1;
3410 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0, SD_RSP_TYPE_R1b, NULL, 0);
3411 if (retval != STATUS_SUCCESS) {
3412 sd_set_err_code(chip, SD_STS_ERR);
3413 TRACE_GOTO(chip, RW_FAIL);
3416 if (stat & (SD_CRC7_ERR | SD_CRC16_ERR | SD_CRC_WRITE_ERR)) {
3417 RTSX_DEBUGP("SD CRC error, tune clock!\n");
3418 sd_set_err_code(chip, SD_CRC_ERR);
3419 TRACE_GOTO(chip, RW_FAIL);
3422 if (err == STATUS_TIMEDOUT) {
3423 sd_set_err_code(chip, SD_TO_ERR);
3424 TRACE_GOTO(chip, RW_FAIL);
3427 TRACE_RET(chip, err);
3430 sd_card->pre_sec_addr = start_sector;
3431 sd_card->pre_sec_cnt = sector_cnt;
3432 sd_card->pre_dir = srb->sc_data_direction;
3434 return STATUS_SUCCESS;
3437 sd_card->seq_mode = 0;
3439 if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3440 chip->rw_need_retry = 0;
3441 RTSX_DEBUGP("No card exist, exit sd_rw\n");
3442 TRACE_RET(chip, STATUS_FAIL);
3445 if (sd_check_err_code(chip, SD_CRC_ERR)) {
3446 if (CHK_MMC_4BIT(sd_card) || CHK_MMC_8BIT(sd_card)) {
3447 sd_card->mmc_dont_switch_bus = 1;
3448 reset_mmc_only(chip);
3449 sd_card->mmc_dont_switch_bus = 0;
3451 sd_card->need_retune = 1;
3452 sd_auto_tune_clock(chip);
3454 } else if (sd_check_err_code(chip, SD_TO_ERR | SD_STS_ERR)) {
3455 retval = reset_sd_card(chip);
3456 if (retval != STATUS_SUCCESS) {
3457 chip->card_ready &= ~SD_CARD;
3458 chip->card_fail |= SD_CARD;
3459 chip->capacity[chip->card2lun[SD_CARD]] = 0;
3463 TRACE_RET(chip, STATUS_FAIL);
3467 int soft_reset_sd_card(struct rtsx_chip *chip)
3469 return reset_sd(chip);
3472 int ext_sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx,
3473 u32 arg, u8 rsp_type, u8 *rsp, int rsp_len, int special_check)
3482 RTSX_DEBUGP("EXT SD/MMC CMD %d\n", cmd_idx);
3484 if (rsp_type == SD_RSP_TYPE_R1b)
3489 rtsx_init_cmd(chip);
3491 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
3492 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24));
3493 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16));
3494 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8));
3495 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg);
3497 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
3498 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE,
3499 0x01, PINGPONG_BUFFER);
3500 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
3501 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
3502 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, SD_TRANSFER_END);
3504 if (rsp_type == SD_RSP_TYPE_R2) {
3505 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16; reg_addr++)
3506 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
3509 } else if (rsp_type != SD_RSP_TYPE_R0) {
3510 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4; reg_addr++)
3511 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
3515 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0, 0);
3517 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0);
3519 retval = rtsx_send_cmd(chip, SD_CARD, timeout);
3521 if (retval == -ETIMEDOUT) {
3522 rtsx_clear_sd_error(chip);
3524 if (rsp_type & SD_WAIT_BUSY_END) {
3525 retval = sd_check_data0_status(chip);
3526 if (retval != STATUS_SUCCESS)
3527 TRACE_RET(chip, retval);
3529 sd_set_err_code(chip, SD_TO_ERR);
3532 TRACE_RET(chip, STATUS_FAIL);
3535 if (rsp_type == SD_RSP_TYPE_R0)
3536 return STATUS_SUCCESS;
3538 ptr = rtsx_get_cmd_data(chip) + 1;
3540 if ((ptr[0] & 0xC0) != 0) {
3541 sd_set_err_code(chip, SD_STS_ERR);
3542 TRACE_RET(chip, STATUS_FAIL);
3545 if (!(rsp_type & SD_NO_CHECK_CRC7)) {
3546 if (ptr[stat_idx] & SD_CRC7_ERR) {
3547 if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
3548 sd_set_err_code(chip, SD_CRC_ERR);
3549 TRACE_RET(chip, STATUS_FAIL);
3551 if (rty_cnt < SD_MAX_RETRY_COUNT) {
3556 sd_set_err_code(chip, SD_CRC_ERR);
3557 TRACE_RET(chip, STATUS_FAIL);
3562 if ((cmd_idx == SELECT_CARD) || (cmd_idx == APP_CMD) ||
3563 (cmd_idx == SEND_STATUS) || (cmd_idx == STOP_TRANSMISSION)) {
3564 if ((cmd_idx != STOP_TRANSMISSION) && (special_check == 0)) {
3566 TRACE_RET(chip, STATUS_FAIL);
3568 #ifdef SUPPORT_SD_LOCK
3574 TRACE_RET(chip, STATUS_FAIL);
3577 TRACE_RET(chip, STATUS_FAIL);
3579 if (cmd_idx == SELECT_CARD) {
3580 if (rsp_type == SD_RSP_TYPE_R2) {
3581 if ((ptr[3] & 0x1E) != 0x04)
3582 TRACE_RET(chip, STATUS_FAIL);
3584 } else if (rsp_type == SD_RSP_TYPE_R0) {
3585 if ((ptr[3] & 0x1E) != 0x03)
3586 TRACE_RET(chip, STATUS_FAIL);
3592 memcpy(rsp, ptr, rsp_len);
3594 return STATUS_SUCCESS;
3597 int ext_sd_get_rsp(struct rtsx_chip *chip, int len, u8 *rsp, u8 rsp_type)
3599 int retval, rsp_len;
3602 if (rsp_type == SD_RSP_TYPE_R0)
3603 return STATUS_SUCCESS;
3605 rtsx_init_cmd(chip);
3607 if (rsp_type == SD_RSP_TYPE_R2) {
3608 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16; reg_addr++)
3609 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
3612 } else if (rsp_type != SD_RSP_TYPE_R0) {
3613 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4; reg_addr++)
3614 rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
3618 rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0xFF, 0);
3620 retval = rtsx_send_cmd(chip, SD_CARD, 100);
3621 if (retval != STATUS_SUCCESS)
3622 TRACE_RET(chip, STATUS_FAIL);
3625 int min_len = (rsp_len < len) ? rsp_len : len;
3627 memcpy(rsp, rtsx_get_cmd_data(chip), min_len);
3629 RTSX_DEBUGP("min_len = %d\n", min_len);
3630 RTSX_DEBUGP("Response in cmd buf: 0x%x 0x%x 0x%x 0x%x\n",
3631 rsp[0], rsp[1], rsp[2], rsp[3]);
3634 return STATUS_SUCCESS;
3637 int sd_pass_thru_mode(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3639 struct sd_info *sd_card = &(chip->sd_card);
3640 unsigned int lun = SCSI_LUN(srb);
3663 sd_card->pre_cmd_err = 0;
3665 if (!(CHK_BIT(chip->lun_mc, lun))) {
3666 SET_BIT(chip->lun_mc, lun);
3667 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
3668 TRACE_RET(chip, TRANSPORT_FAILED);
3671 if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) || (0x20 != srb->cmnd[4]) ||
3672 (0x43 != srb->cmnd[5]) || (0x61 != srb->cmnd[6]) ||
3673 (0x72 != srb->cmnd[7]) || (0x64 != srb->cmnd[8])) {
3674 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3675 TRACE_RET(chip, TRANSPORT_FAILED);
3678 switch (srb->cmnd[1] & 0x0F) {
3680 sd_card->sd_pass_thru_en = 0;
3684 sd_card->sd_pass_thru_en = 1;
3688 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3689 TRACE_RET(chip, TRANSPORT_FAILED);
3692 buf[5] = (1 == CHK_SD(sd_card)) ? 0x01 : 0x02;
3693 if (chip->card_wp & SD_CARD)
3696 buf[6] = (u8)(sd_card->sd_addr >> 16);
3697 buf[7] = (u8)(sd_card->sd_addr >> 24);
3699 buf[15] = chip->max_lun;
3701 len = min(18, (int)scsi_bufflen(srb));
3702 rtsx_stor_set_xfer_buf(buf, len, srb);
3704 return TRANSPORT_GOOD;
3707 static inline int get_rsp_type(struct scsi_cmnd *srb, u8 *rsp_type, int *rsp_len)
3709 if (!rsp_type || !rsp_len)
3712 switch (srb->cmnd[10]) {
3714 *rsp_type = SD_RSP_TYPE_R0;
3719 *rsp_type = SD_RSP_TYPE_R1;
3724 *rsp_type = SD_RSP_TYPE_R1b;
3729 *rsp_type = SD_RSP_TYPE_R2;
3734 *rsp_type = SD_RSP_TYPE_R3;
3742 return STATUS_SUCCESS;
3745 int sd_execute_no_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3747 struct sd_info *sd_card = &(chip->sd_card);
3748 unsigned int lun = SCSI_LUN(srb);
3749 int retval, rsp_len;
3750 u8 cmd_idx, rsp_type;
3751 u8 standby = 0, acmd = 0;
3754 if (!sd_card->sd_pass_thru_en) {
3755 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3756 TRACE_RET(chip, TRANSPORT_FAILED);
3759 retval = sd_switch_clock(chip);
3760 if (retval != STATUS_SUCCESS)
3761 TRACE_RET(chip, TRANSPORT_FAILED);
3763 if (sd_card->pre_cmd_err) {
3764 sd_card->pre_cmd_err = 0;
3765 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
3766 TRACE_RET(chip, TRANSPORT_FAILED);
3769 cmd_idx = srb->cmnd[2] & 0x3F;
3770 if (srb->cmnd[1] & 0x02)
3773 if (srb->cmnd[1] & 0x01)
3776 arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
3777 ((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
3779 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
3780 if (retval != STATUS_SUCCESS) {
3781 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3782 TRACE_RET(chip, TRANSPORT_FAILED);
3784 sd_card->last_rsp_type = rsp_type;
3786 retval = sd_switch_clock(chip);
3787 if (retval != STATUS_SUCCESS)
3788 TRACE_RET(chip, TRANSPORT_FAILED);
3790 #ifdef SUPPORT_SD_LOCK
3791 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
3792 if (CHK_MMC_8BIT(sd_card)) {
3793 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_8);
3794 if (retval != STATUS_SUCCESS)
3795 TRACE_RET(chip, TRANSPORT_FAILED);
3797 } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
3798 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
3799 if (retval != STATUS_SUCCESS)
3800 TRACE_RET(chip, TRANSPORT_FAILED);
3804 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
3805 if (retval != STATUS_SUCCESS)
3806 TRACE_RET(chip, TRANSPORT_FAILED);
3810 retval = sd_select_card(chip, 0);
3811 if (retval != STATUS_SUCCESS)
3812 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3816 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
3817 SD_RSP_TYPE_R1, NULL, 0, 0);
3818 if (retval != STATUS_SUCCESS)
3819 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3822 retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
3823 sd_card->rsp, rsp_len, 0);
3824 if (retval != STATUS_SUCCESS)
3825 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3828 retval = sd_select_card(chip, 1);
3829 if (retval != STATUS_SUCCESS)
3830 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3833 #ifdef SUPPORT_SD_LOCK
3834 retval = sd_update_lock_status(chip);
3835 if (retval != STATUS_SUCCESS)
3836 TRACE_GOTO(chip, SD_Execute_Cmd_Failed);
3839 scsi_set_resid(srb, 0);
3840 return TRANSPORT_GOOD;
3842 SD_Execute_Cmd_Failed:
3843 sd_card->pre_cmd_err = 1;
3844 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
3845 release_sd_card(chip);
3846 do_reset_sd_card(chip);
3847 if (!(chip->card_ready & SD_CARD))
3848 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
3850 TRACE_RET(chip, TRANSPORT_FAILED);
3853 int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3855 struct sd_info *sd_card = &(chip->sd_card);
3856 unsigned int lun = SCSI_LUN(srb);
3857 int retval, rsp_len, i;
3858 int cmd13_checkbit = 0, read_err = 0;
3859 u8 cmd_idx, rsp_type, bus_width;
3860 u8 send_cmd12 = 0, standby = 0, acmd = 0;
3863 if (!sd_card->sd_pass_thru_en) {
3864 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3865 TRACE_RET(chip, TRANSPORT_FAILED);
3868 if (sd_card->pre_cmd_err) {
3869 sd_card->pre_cmd_err = 0;
3870 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
3871 TRACE_RET(chip, TRANSPORT_FAILED);
3874 retval = sd_switch_clock(chip);
3875 if (retval != STATUS_SUCCESS)
3876 TRACE_RET(chip, TRANSPORT_FAILED);
3878 cmd_idx = srb->cmnd[2] & 0x3F;
3879 if (srb->cmnd[1] & 0x04)
3882 if (srb->cmnd[1] & 0x02)
3885 if (srb->cmnd[1] & 0x01)
3888 data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8] << 8) | srb->cmnd[9];
3890 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
3891 if (retval != STATUS_SUCCESS) {
3892 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3893 TRACE_RET(chip, TRANSPORT_FAILED);
3895 sd_card->last_rsp_type = rsp_type;
3897 retval = sd_switch_clock(chip);
3898 if (retval != STATUS_SUCCESS)
3899 TRACE_RET(chip, TRANSPORT_FAILED);
3901 #ifdef SUPPORT_SD_LOCK
3902 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
3903 if (CHK_MMC_8BIT(sd_card))
3904 bus_width = SD_BUS_WIDTH_8;
3905 else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card))
3906 bus_width = SD_BUS_WIDTH_4;
3908 bus_width = SD_BUS_WIDTH_1;
3910 bus_width = SD_BUS_WIDTH_4;
3912 RTSX_DEBUGP("bus_width = %d\n", bus_width);
3914 bus_width = SD_BUS_WIDTH_4;
3917 if (data_len < 512) {
3918 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
3919 SD_RSP_TYPE_R1, NULL, 0, 0);
3920 if (retval != STATUS_SUCCESS)
3921 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3925 retval = sd_select_card(chip, 0);
3926 if (retval != STATUS_SUCCESS)
3927 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3931 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
3932 SD_RSP_TYPE_R1, NULL, 0, 0);
3933 if (retval != STATUS_SUCCESS)
3934 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3937 if (data_len <= 512) {
3940 u16 byte_cnt, blk_cnt;
3943 byte_cnt = ((u16)(srb->cmnd[8] & 0x03) << 8) | srb->cmnd[9];
3946 cmd[0] = 0x40 | cmd_idx;
3947 cmd[1] = srb->cmnd[3];
3948 cmd[2] = srb->cmnd[4];
3949 cmd[3] = srb->cmnd[5];
3950 cmd[4] = srb->cmnd[6];
3952 buf = kmalloc(data_len, GFP_KERNEL);
3954 TRACE_RET(chip, TRANSPORT_ERROR);
3956 retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, byte_cnt,
3957 blk_cnt, bus_width, buf, data_len, 2000);
3958 if (retval != STATUS_SUCCESS) {
3961 rtsx_clear_sd_error(chip);
3962 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3965 min_len = min(data_len, scsi_bufflen(srb));
3966 rtsx_stor_set_xfer_buf(buf, min_len, srb);
3969 } else if (!(data_len & 0x1FF)) {
3970 rtsx_init_cmd(chip);
3972 trans_dma_enable(DMA_FROM_DEVICE, chip, data_len, DMA_512);
3974 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 0x02);
3975 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0x00);
3976 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
3977 0xFF, (srb->cmnd[7] & 0xFE) >> 1);
3978 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
3979 0xFF, (u8)((data_len & 0x0001FE00) >> 9));
3981 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
3982 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, srb->cmnd[3]);
3983 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, srb->cmnd[4]);
3984 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, srb->cmnd[5]);
3985 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, srb->cmnd[6]);
3987 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
3988 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
3990 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
3991 0xFF, SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
3992 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, SD_TRANSFER_END);
3994 rtsx_send_cmd_no_wait(chip);
3996 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb), scsi_bufflen(srb),
3997 scsi_sg_count(srb), DMA_FROM_DEVICE, 10000);
4000 rtsx_clear_sd_error(chip);
4001 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4005 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4008 retval = ext_sd_get_rsp(chip, rsp_len, sd_card->rsp, rsp_type);
4009 if (retval != STATUS_SUCCESS)
4010 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4013 retval = sd_select_card(chip, 1);
4014 if (retval != STATUS_SUCCESS)
4015 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4019 retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
4020 0, SD_RSP_TYPE_R1b, NULL, 0, 0);
4021 if (retval != STATUS_SUCCESS)
4022 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4025 if (data_len < 512) {
4026 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
4027 SD_RSP_TYPE_R1, NULL, 0, 0);
4028 if (retval != STATUS_SUCCESS)
4029 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4031 retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
4032 if (retval != STATUS_SUCCESS)
4033 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4035 retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
4036 if (retval != STATUS_SUCCESS)
4037 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4040 if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
4043 for (i = 0; i < 3; i++) {
4044 retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
4045 SD_RSP_TYPE_R1, NULL, 0, cmd13_checkbit);
4046 if (retval == STATUS_SUCCESS)
4049 if (retval != STATUS_SUCCESS)
4050 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4052 scsi_set_resid(srb, 0);
4053 return TRANSPORT_GOOD;
4055 SD_Execute_Read_Cmd_Failed:
4056 sd_card->pre_cmd_err = 1;
4057 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4059 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
4061 release_sd_card(chip);
4062 do_reset_sd_card(chip);
4063 if (!(chip->card_ready & SD_CARD))
4064 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4066 TRACE_RET(chip, TRANSPORT_FAILED);
4069 int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4071 struct sd_info *sd_card = &(chip->sd_card);
4072 unsigned int lun = SCSI_LUN(srb);
4073 int retval, rsp_len, i;
4074 int cmd13_checkbit = 0, write_err = 0;
4075 u8 cmd_idx, rsp_type;
4076 u8 send_cmd12 = 0, standby = 0, acmd = 0;
4078 #ifdef SUPPORT_SD_LOCK
4079 int lock_cmd_fail = 0;
4080 u8 sd_lock_state = 0;
4081 u8 lock_cmd_type = 0;
4084 if (!sd_card->sd_pass_thru_en) {
4085 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4086 TRACE_RET(chip, TRANSPORT_FAILED);
4089 if (sd_card->pre_cmd_err) {
4090 sd_card->pre_cmd_err = 0;
4091 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4092 TRACE_RET(chip, TRANSPORT_FAILED);
4095 retval = sd_switch_clock(chip);
4096 if (retval != STATUS_SUCCESS)
4097 TRACE_RET(chip, TRANSPORT_FAILED);
4099 cmd_idx = srb->cmnd[2] & 0x3F;
4100 if (srb->cmnd[1] & 0x04)
4103 if (srb->cmnd[1] & 0x02)
4106 if (srb->cmnd[1] & 0x01)
4109 data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8] << 8) | srb->cmnd[9];
4110 arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
4111 ((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
4113 #ifdef SUPPORT_SD_LOCK
4114 if (cmd_idx == LOCK_UNLOCK) {
4115 sd_lock_state = sd_card->sd_lock_status;
4116 sd_lock_state &= SD_LOCKED;
4120 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
4121 if (retval != STATUS_SUCCESS) {
4122 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4123 TRACE_RET(chip, TRANSPORT_FAILED);
4125 sd_card->last_rsp_type = rsp_type;
4127 retval = sd_switch_clock(chip);
4128 if (retval != STATUS_SUCCESS)
4129 TRACE_RET(chip, TRANSPORT_FAILED);
4131 #ifdef SUPPORT_SD_LOCK
4132 if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
4133 if (CHK_MMC_8BIT(sd_card)) {
4134 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_8);
4135 if (retval != STATUS_SUCCESS)
4136 TRACE_RET(chip, TRANSPORT_FAILED);
4138 } else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
4139 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
4140 if (retval != STATUS_SUCCESS)
4141 TRACE_RET(chip, TRANSPORT_FAILED);
4145 retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
4146 if (retval != STATUS_SUCCESS)
4147 TRACE_RET(chip, TRANSPORT_FAILED);
4150 if (data_len < 512) {
4151 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
4152 SD_RSP_TYPE_R1, NULL, 0, 0);
4153 if (retval != STATUS_SUCCESS)
4154 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4158 retval = sd_select_card(chip, 0);
4159 if (retval != STATUS_SUCCESS)
4160 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4164 retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
4165 SD_RSP_TYPE_R1, NULL, 0, 0);
4166 if (retval != STATUS_SUCCESS)
4167 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4170 retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
4171 sd_card->rsp, rsp_len, 0);
4172 if (retval != STATUS_SUCCESS)
4173 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4175 if (data_len <= 512) {
4179 buf = kmalloc(data_len, GFP_KERNEL);
4181 TRACE_RET(chip, TRANSPORT_ERROR);
4183 rtsx_stor_get_xfer_buf(buf, data_len, srb);
4185 #ifdef SUPPORT_SD_LOCK
4186 if (cmd_idx == LOCK_UNLOCK)
4187 lock_cmd_type = buf[0] & 0x0F;
4190 if (data_len > 256) {
4191 rtsx_init_cmd(chip);
4192 for (i = 0; i < 256; i++) {
4193 rtsx_add_cmd(chip, WRITE_REG_CMD,
4194 PPBUF_BASE2 + i, 0xFF, buf[i]);
4196 retval = rtsx_send_cmd(chip, 0, 250);
4197 if (retval != STATUS_SUCCESS) {
4199 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4202 rtsx_init_cmd(chip);
4203 for (i = 256; i < data_len; i++) {
4204 rtsx_add_cmd(chip, WRITE_REG_CMD,
4205 PPBUF_BASE2 + i, 0xFF, buf[i]);
4207 retval = rtsx_send_cmd(chip, 0, 250);
4208 if (retval != STATUS_SUCCESS) {
4210 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4213 rtsx_init_cmd(chip);
4214 for (i = 0; i < data_len; i++) {
4215 rtsx_add_cmd(chip, WRITE_REG_CMD,
4216 PPBUF_BASE2 + i, 0xFF, buf[i]);
4218 retval = rtsx_send_cmd(chip, 0, 250);
4219 if (retval != STATUS_SUCCESS) {
4221 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4227 rtsx_init_cmd(chip);
4229 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, srb->cmnd[8] & 0x03);
4230 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, srb->cmnd[9]);
4231 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0x00);
4232 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 0x01);
4233 rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER);
4235 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
4236 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
4237 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, SD_TRANSFER_END);
4239 retval = rtsx_send_cmd(chip, SD_CARD, 250);
4240 } else if (!(data_len & 0x1FF)) {
4241 rtsx_init_cmd(chip);
4243 trans_dma_enable(DMA_TO_DEVICE, chip, data_len, DMA_512);
4245 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 0x02);
4246 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0x00);
4247 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
4248 0xFF, (srb->cmnd[7] & 0xFE) >> 1);
4249 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
4250 0xFF, (u8)((data_len & 0x0001FE00) >> 9));
4252 rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF, SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
4253 rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END, SD_TRANSFER_END);
4255 rtsx_send_cmd_no_wait(chip);
4257 retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb), scsi_bufflen(srb),
4258 scsi_sg_count(srb), DMA_TO_DEVICE, 10000);
4261 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4266 rtsx_clear_sd_error(chip);
4267 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4270 #ifdef SUPPORT_SD_LOCK
4271 if (cmd_idx == LOCK_UNLOCK) {
4272 if (lock_cmd_type == SD_ERASE) {
4273 sd_card->sd_erase_status = SD_UNDER_ERASING;
4274 scsi_set_resid(srb, 0);
4275 return TRANSPORT_GOOD;
4278 rtsx_init_cmd(chip);
4279 if (CHECK_PID(chip, 0x5209))
4280 rtsx_add_cmd(chip, CHECK_REG_CMD, SD_BUS_STAT, SD_DAT0_STATUS, SD_DAT0_STATUS);
4282 rtsx_add_cmd(chip, CHECK_REG_CMD, 0xFD30, 0x02, 0x02);
4284 rtsx_send_cmd(chip, SD_CARD, 250);
4286 retval = sd_update_lock_status(chip);
4287 if (retval != STATUS_SUCCESS) {
4288 RTSX_DEBUGP("Lock command fail!\n");
4292 #endif /* SUPPORT_SD_LOCK */
4295 retval = sd_select_card(chip, 1);
4296 if (retval != STATUS_SUCCESS)
4297 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4301 retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
4302 0, SD_RSP_TYPE_R1b, NULL, 0, 0);
4303 if (retval != STATUS_SUCCESS)
4304 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4307 if (data_len < 512) {
4308 retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
4309 SD_RSP_TYPE_R1, NULL, 0, 0);
4310 if (retval != STATUS_SUCCESS)
4311 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4313 retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
4314 if (retval != STATUS_SUCCESS)
4315 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4317 rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
4318 if (retval != STATUS_SUCCESS)
4319 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4322 if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
4325 for (i = 0; i < 3; i++) {
4326 retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
4327 SD_RSP_TYPE_R1, NULL, 0, cmd13_checkbit);
4328 if (retval == STATUS_SUCCESS)
4331 if (retval != STATUS_SUCCESS)
4332 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4334 #ifdef SUPPORT_SD_LOCK
4335 if (cmd_idx == LOCK_UNLOCK) {
4336 if (!lock_cmd_fail) {
4337 RTSX_DEBUGP("lock_cmd_type = 0x%x\n", lock_cmd_type);
4338 if (lock_cmd_type & SD_CLR_PWD)
4339 sd_card->sd_lock_status &= ~SD_PWD_EXIST;
4341 if (lock_cmd_type & SD_SET_PWD)
4342 sd_card->sd_lock_status |= SD_PWD_EXIST;
4345 RTSX_DEBUGP("sd_lock_state = 0x%x, sd_card->sd_lock_status = 0x%x\n",
4346 sd_lock_state, sd_card->sd_lock_status);
4347 if (sd_lock_state ^ (sd_card->sd_lock_status & SD_LOCKED)) {
4348 sd_card->sd_lock_notify = 1;
4349 if (sd_lock_state) {
4350 if (sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) {
4351 sd_card->sd_lock_status |= (SD_UNLOCK_POW_ON | SD_SDR_RST);
4352 if (CHK_SD(sd_card)) {
4353 retval = reset_sd(chip);
4354 if (retval != STATUS_SUCCESS) {
4355 sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
4356 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4360 sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
4366 if (lock_cmd_fail) {
4367 scsi_set_resid(srb, 0);
4368 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4369 TRACE_RET(chip, TRANSPORT_FAILED);
4371 #endif /* SUPPORT_SD_LOCK */
4373 scsi_set_resid(srb, 0);
4374 return TRANSPORT_GOOD;
4376 SD_Execute_Write_Cmd_Failed:
4377 sd_card->pre_cmd_err = 1;
4378 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4380 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
4382 release_sd_card(chip);
4383 do_reset_sd_card(chip);
4384 if (!(chip->card_ready & SD_CARD))
4385 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4387 TRACE_RET(chip, TRANSPORT_FAILED);
4390 int sd_get_cmd_rsp(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4392 struct sd_info *sd_card = &(chip->sd_card);
4393 unsigned int lun = SCSI_LUN(srb);
4397 if (!sd_card->sd_pass_thru_en) {
4398 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4399 TRACE_RET(chip, TRANSPORT_FAILED);
4402 if (sd_card->pre_cmd_err) {
4403 sd_card->pre_cmd_err = 0;
4404 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4405 TRACE_RET(chip, TRANSPORT_FAILED);
4408 data_len = ((u16)srb->cmnd[7] << 8) | srb->cmnd[8];
4410 if (sd_card->last_rsp_type == SD_RSP_TYPE_R0) {
4411 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4412 TRACE_RET(chip, TRANSPORT_FAILED);
4413 } else if (sd_card->last_rsp_type == SD_RSP_TYPE_R2) {
4414 count = (data_len < 17) ? data_len : 17;
4416 count = (data_len < 6) ? data_len : 6;
4418 rtsx_stor_set_xfer_buf(sd_card->rsp, count, srb);
4420 RTSX_DEBUGP("Response length: %d\n", data_len);
4421 RTSX_DEBUGP("Response: 0x%x 0x%x 0x%x 0x%x\n",
4422 sd_card->rsp[0], sd_card->rsp[1], sd_card->rsp[2], sd_card->rsp[3]);
4424 scsi_set_resid(srb, 0);
4425 return TRANSPORT_GOOD;
4428 int sd_hw_rst(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4430 struct sd_info *sd_card = &(chip->sd_card);
4431 unsigned int lun = SCSI_LUN(srb);
4434 if (!sd_card->sd_pass_thru_en) {
4435 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4436 TRACE_RET(chip, TRANSPORT_FAILED);
4439 if (sd_card->pre_cmd_err) {
4440 sd_card->pre_cmd_err = 0;
4441 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4442 TRACE_RET(chip, TRANSPORT_FAILED);
4445 if ((0x53 != srb->cmnd[2]) || (0x44 != srb->cmnd[3]) || (0x20 != srb->cmnd[4]) ||
4446 (0x43 != srb->cmnd[5]) || (0x61 != srb->cmnd[6]) ||
4447 (0x72 != srb->cmnd[7]) || (0x64 != srb->cmnd[8])) {
4448 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4449 TRACE_RET(chip, TRANSPORT_FAILED);
4452 switch (srb->cmnd[1] & 0x0F) {
4454 #ifdef SUPPORT_SD_LOCK
4455 if (0x64 == srb->cmnd[9])
4456 sd_card->sd_lock_status |= SD_SDR_RST;
4458 retval = reset_sd_card(chip);
4459 if (retval != STATUS_SUCCESS) {
4460 #ifdef SUPPORT_SD_LOCK
4461 sd_card->sd_lock_status &= ~SD_SDR_RST;
4463 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4464 sd_card->pre_cmd_err = 1;
4465 TRACE_RET(chip, TRANSPORT_FAILED);
4467 #ifdef SUPPORT_SD_LOCK
4468 sd_card->sd_lock_status &= ~SD_SDR_RST;
4473 retval = soft_reset_sd_card(chip);
4474 if (retval != STATUS_SUCCESS) {
4475 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4476 sd_card->pre_cmd_err = 1;
4477 TRACE_RET(chip, TRANSPORT_FAILED);
4482 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4483 TRACE_RET(chip, TRANSPORT_FAILED);
4486 scsi_set_resid(srb, 0);
4487 return TRANSPORT_GOOD;
4491 void sd_cleanup_work(struct rtsx_chip *chip)
4493 struct sd_info *sd_card = &(chip->sd_card);
4495 if (sd_card->seq_mode) {
4496 RTSX_DEBUGP("SD: stop transmission\n");
4497 sd_stop_seq_mode(chip);
4498 sd_card->cleanup_counter = 0;
4502 int sd_power_off_card3v3(struct rtsx_chip *chip)
4506 retval = disable_card_clock(chip, SD_CARD);
4507 if (retval != STATUS_SUCCESS)
4508 TRACE_RET(chip, STATUS_FAIL);
4510 RTSX_WRITE_REG(chip, CARD_OE, SD_OUTPUT_EN, 0);
4512 if (!chip->ft2_fast_mode) {
4513 retval = card_power_off(chip, SD_CARD);
4514 if (retval != STATUS_SUCCESS)
4515 TRACE_RET(chip, STATUS_FAIL);
4520 if (chip->asic_code) {
4521 retval = sd_pull_ctl_disable(chip);
4522 if (retval != STATUS_SUCCESS)
4523 TRACE_RET(chip, STATUS_FAIL);
4525 RTSX_WRITE_REG(chip, FPGA_PULL_CTL,
4526 FPGA_SD_PULL_CTL_BIT | 0x20, FPGA_SD_PULL_CTL_BIT);
4529 return STATUS_SUCCESS;
4532 int release_sd_card(struct rtsx_chip *chip)
4534 struct sd_info *sd_card = &(chip->sd_card);
4537 RTSX_DEBUGP("release_sd_card\n");
4539 chip->card_ready &= ~SD_CARD;
4540 chip->card_fail &= ~SD_CARD;
4541 chip->card_wp &= ~SD_CARD;
4546 #ifdef SUPPORT_SD_LOCK
4547 sd_card->sd_lock_status = 0;
4548 sd_card->sd_erase_status = 0;
4551 memset(sd_card->raw_csd, 0, 16);
4552 memset(sd_card->raw_scr, 0, 8);
4554 retval = sd_power_off_card3v3(chip);
4555 if (retval != STATUS_SUCCESS)
4556 TRACE_RET(chip, STATUS_FAIL);
4558 if (CHECK_PID(chip, 0x5209)) {
4559 retval = sd_change_bank_voltage(chip, SD_IO_3V3);
4560 if (retval != STATUS_SUCCESS)
4561 TRACE_RET(chip, STATUS_FAIL);
4563 if (CHK_SD30_SPEED(sd_card))
4564 RTSX_WRITE_REG(chip, SD30_DRIVE_SEL, 0x07, chip->sd30_drive_sel_3v3);
4566 RTSX_WRITE_REG(chip, OCPPARA2, SD_OCP_THD_MASK, chip->sd_400mA_ocp_thd);
4569 return STATUS_SUCCESS;