blob: d5dd2f926d1d8920350ba5c52e734ba1c556b742 [file] [log] [blame]
edwin_rong1dac4182011-07-19 17:10:35 +08001/* Driver for Realtek RTS51xx USB card reader
2 *
3 * Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved.
4 *
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
8 * later version.
9 *
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.
14 *
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/>.
17 *
18 * Author:
19 * wwang (wei_wang@realsil.com.cn)
20 * No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
21 * Maintainer:
22 * Edwin Rong (edwin_rong@realsil.com.cn)
23 * No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
24 */
25
26#include <linux/blkdev.h>
27#include <linux/kthread.h>
28#include <linux/sched.h>
29
30#include "debug.h"
31#include "trace.h"
32#include "rts51x.h"
33#include "rts51x_transport.h"
34#include "rts51x_scsi.h"
35#include "rts51x_card.h"
36#include "sd.h"
37
38static inline void sd_set_reset_fail(struct rts51x_chip *chip, u8 err_code)
39{
40 struct sd_info *sd_card = &(chip->sd_card);
41
42 sd_card->sd_reset_fail |= err_code;
43}
44
45static inline void sd_clear_reset_fail(struct rts51x_chip *chip)
46{
47 struct sd_info *sd_card = &(chip->sd_card);
48
49 sd_card->sd_reset_fail = 0;
50}
51
52static inline int sd_check_reset_fail(struct rts51x_chip *chip, u8 err_code)
53{
54 struct sd_info *sd_card = &(chip->sd_card);
55
56 return sd_card->sd_reset_fail & err_code;
57}
58
59static inline void sd_set_err_code(struct rts51x_chip *chip, u8 err_code)
60{
61 struct sd_info *sd_card = &(chip->sd_card);
62
63 sd_card->err_code |= err_code;
64}
65
66static inline void sd_clr_err_code(struct rts51x_chip *chip)
67{
68 struct sd_info *sd_card = &(chip->sd_card);
69
70 sd_card->err_code = 0;
71}
72
73static inline int sd_check_err_code(struct rts51x_chip *chip, u8 err_code)
74{
75 struct sd_info *sd_card = &(chip->sd_card);
76
77 return sd_card->err_code & err_code;
78}
79
80static int sd_parse_err_code(struct rts51x_chip *chip)
81{
82 TRACE_RET(chip, STATUS_FAIL);
83}
84
85int sd_check_data0_status(struct rts51x_chip *chip)
86{
87 int retval;
88 u8 stat;
89
90 retval = rts51x_ep0_read_register(chip, SD_BUS_STAT, &stat);
91 if (retval != STATUS_SUCCESS)
92 TRACE_RET(chip, retval);
93 if (!(stat & SD_DAT0_STATUS)) {
94 sd_set_err_code(chip, SD_BUSY);
95 TRACE_RET(chip, STATUS_FAIL);
96 }
97
98 return STATUS_SUCCESS;
99}
100
101static int sd_send_cmd_get_rsp(struct rts51x_chip *chip, u8 cmd_idx,
102 u32 arg, u8 rsp_type, u8 *rsp, int rsp_len)
103{
104 struct sd_info *sd_card = &(chip->sd_card);
105 int retval;
106 int timeout = 50;
107 u16 reg_addr;
108 u8 buf[17], stat;
109 int len = 2;
110 int rty_cnt = 0;
111
112 sd_clr_err_code(chip);
113
114 RTS51X_DEBUGP("SD/MMC CMD %d, arg = 0x%08x\n", cmd_idx, arg);
115
116 if (rsp_type == SD_RSP_TYPE_R1b)
117 timeout = 3000;
118
119RTY_SEND_CMD:
120
121 rts51x_init_cmd(chip);
122
123 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD0, 0xFF, 0x40 | cmd_idx);
124 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD1, 0xFF, (u8) (arg >> 24));
125 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD2, 0xFF, (u8) (arg >> 16));
126 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD3, 0xFF, (u8) (arg >> 8));
127 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD4, 0xFF, (u8) arg);
128
129 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG2, 0xFF, rsp_type);
130 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
131 PINGPONG_BUFFER);
132 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
133 SD_TM_CMD_RSP | SD_TRANSFER_START);
134 rts51x_add_cmd(chip, CHECK_REG_CMD, SD_TRANSFER,
135 SD_TRANSFER_END | SD_STAT_IDLE,
136 SD_TRANSFER_END | SD_STAT_IDLE);
137
138 rts51x_add_cmd(chip, READ_REG_CMD, SD_STAT1, 0, 0);
139
140 if (CHECK_USB(chip, USB_20)) {
141 if (rsp_type == SD_RSP_TYPE_R2) {
142 /* Read data from ping-pong buffer */
143 for (reg_addr = PPBUF_BASE2;
144 reg_addr < PPBUF_BASE2 + 16; reg_addr++) {
145 rts51x_add_cmd(chip, READ_REG_CMD, reg_addr, 0,
146 0);
147 }
148 len = 18;
149 } else if (rsp_type != SD_RSP_TYPE_R0) {
150 /* Read data from SD_CMDx registers */
151 for (reg_addr = SD_CMD0; reg_addr <= SD_CMD4;
152 reg_addr++) {
153 rts51x_add_cmd(chip, READ_REG_CMD, reg_addr, 0,
154 0);
155 }
156 len = 7;
157 } else {
158 len = 2;
159 }
160 } else {
161 len = 2;
162 }
163
164 retval = rts51x_send_cmd(chip, MODE_CR, 100);
165 if (retval != STATUS_SUCCESS)
166 TRACE_RET(chip, retval);
167
168 retval = rts51x_get_rsp(chip, len, timeout);
169
170 if (CHECK_SD_TRANS_FAIL(chip, retval)) {
171 u8 val;
172
173 rts51x_ep0_read_register(chip, SD_STAT1, &val);
174 RTS51X_DEBUGP("SD_STAT1: 0x%x\n", val);
175
176 rts51x_ep0_read_register(chip, SD_STAT2, &val);
177 RTS51X_DEBUGP("SD_STAT2: 0x%x\n", val);
178
179 if (val & SD_RSP_80CLK_TIMEOUT)
180 sd_set_err_code(chip, SD_RSP_TIMEOUT);
181
182 rts51x_ep0_read_register(chip, SD_BUS_STAT, &val);
183 RTS51X_DEBUGP("SD_BUS_STAT: 0x%x\n", val);
184
185 if (retval == STATUS_TIMEDOUT) {
186 if (rsp_type & SD_WAIT_BUSY_END) {
187 retval = sd_check_data0_status(chip);
188 if (retval != STATUS_SUCCESS)
189 TRACE_RET(chip, retval);
190 } else {
191 sd_set_err_code(chip, SD_TO_ERR);
192 }
193 }
194 rts51x_clear_sd_error(chip);
195
196 TRACE_RET(chip, STATUS_FAIL);
197 }
198
199 if (rsp_type == SD_RSP_TYPE_R0)
200 return STATUS_SUCCESS;
201
202 if (CHECK_USB(chip, USB_20)) {
203 rts51x_read_rsp_buf(chip, 2, buf, len - 2);
204 } else {
205 if (rsp_type == SD_RSP_TYPE_R2) {
206 reg_addr = PPBUF_BASE2;
207 len = 16;
208 } else {
209 reg_addr = SD_CMD0;
210 len = 5;
211 }
212 retval = rts51x_seq_read_register(chip, reg_addr,
213 (unsigned short)len, buf);
214 if (retval != STATUS_SUCCESS)
215 TRACE_RET(chip, retval);
216 }
217 stat = chip->rsp_buf[1];
218
219 /* Check (Start,Transmission) bit of Response */
220 if ((buf[0] & 0xC0) != 0) {
221 sd_set_err_code(chip, SD_STS_ERR);
222 TRACE_RET(chip, STATUS_FAIL);
223 }
224 /* Check CRC7 */
225 if (!(rsp_type & SD_NO_CHECK_CRC7)) {
226 if (stat & SD_CRC7_ERR) {
227 if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
228 sd_set_err_code(chip, SD_CRC_ERR);
229 TRACE_RET(chip, STATUS_FAIL);
230 }
231 if (rty_cnt < SD_MAX_RETRY_COUNT) {
232 wait_timeout(20);
233 rty_cnt++;
234 goto RTY_SEND_CMD;
235 } else {
236 sd_set_err_code(chip, SD_CRC_ERR);
237 TRACE_RET(chip, STATUS_FAIL);
238 }
239 }
240 }
241 /* Check Status */
242 if ((rsp_type == SD_RSP_TYPE_R1) || (rsp_type == SD_RSP_TYPE_R1b)) {
243 if ((cmd_idx != SEND_RELATIVE_ADDR)
244 && (cmd_idx != SEND_IF_COND)) {
245 if (cmd_idx != STOP_TRANSMISSION) {
246 if (buf[1] & 0x80)
247 TRACE_RET(chip, STATUS_FAIL);
248 }
249#ifdef SUPPORT_SD_LOCK
250 /* exclude bit25 CARD_IS_LOCKED */
251 if (buf[1] & 0x7D) {
252#else
253 if (buf[1] & 0x7F) {
254#endif
255 RTS51X_DEBUGP("buf[1]: 0x%02x\n", buf[1]);
256 TRACE_RET(chip, STATUS_FAIL);
257 }
258 if (buf[2] & 0xFF) {
259 RTS51X_DEBUGP("buf[2]: 0x%02x\n", buf[2]);
260 TRACE_RET(chip, STATUS_FAIL);
261 }
262 if (buf[3] & 0x80) {
263 RTS51X_DEBUGP("buf[3]: 0x%02x\n", buf[3]);
264 TRACE_RET(chip, STATUS_FAIL);
265 }
266 if (buf[3] & 0x01) {
267 /* Get "READY_FOR_DATA" bit */
268 sd_card->sd_data_buf_ready = 1;
269 } else {
270 sd_card->sd_data_buf_ready = 0;
271 }
272 }
273 }
274
275 if (rsp && rsp_len)
276 memcpy(rsp, buf, rsp_len);
277
278 return STATUS_SUCCESS;
279}
280
281static inline void sd_print_debug_reg(struct rts51x_chip *chip)
282{
283#ifdef CONFIG_RTS5139_DEBUG
284 u8 val = 0;
285
286 rts51x_ep0_read_register(chip, SD_STAT1, &val);
287 RTS51X_DEBUGP("SD_STAT1: 0x%x\n", val);
288 rts51x_ep0_read_register(chip, SD_STAT2, &val);
289 RTS51X_DEBUGP("SD_STAT2: 0x%x\n", val);
290 rts51x_ep0_read_register(chip, SD_BUS_STAT, &val);
291 RTS51X_DEBUGP("SD_BUS_STAT: 0x%x\n", val);
292#endif
293}
294
295int sd_read_data(struct rts51x_chip *chip, u8 trans_mode, u8 *cmd, int cmd_len,
296 u16 byte_cnt, u16 blk_cnt, u8 bus_width, u8 *buf, int buf_len,
297 int timeout)
298{
299 struct sd_info *sd_card = &(chip->sd_card);
300 int retval;
301 int i;
302
303 sd_clr_err_code(chip);
304
305 if (!buf)
306 buf_len = 0;
307
308 if (buf_len > 512)
309 /* This function can't read data more than one page */
310 TRACE_RET(chip, STATUS_FAIL);
311
312 rts51x_init_cmd(chip);
313
314 if (cmd_len) {
315 RTS51X_DEBUGP("SD/MMC CMD %d\n", cmd[0] - 0x40);
316 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++) {
317 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD0 + i, 0xFF,
318 cmd[i]);
319 }
320 }
321 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_L, 0xFF, (u8) byte_cnt);
322 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_H, 0xFF,
323 (u8) (byte_cnt >> 8));
324 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_L, 0xFF, (u8) blk_cnt);
325 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_H, 0xFF,
326 (u8) (blk_cnt >> 8));
327
328 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG1, 0x03, bus_width);
329
330 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG2, 0xFF,
331 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END
332 | SD_CHECK_CRC7 | SD_RSP_LEN_6);
333 if (trans_mode != SD_TM_AUTO_TUNING) {
334 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
335 PINGPONG_BUFFER);
336 }
337 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
338 trans_mode | SD_TRANSFER_START);
339 rts51x_add_cmd(chip, CHECK_REG_CMD, SD_TRANSFER, SD_TRANSFER_END,
340 SD_TRANSFER_END);
341
342 retval = rts51x_send_cmd(chip, MODE_CR, 100);
343 if (retval != STATUS_SUCCESS)
344 TRACE_RET(chip, retval);
345
346 retval = rts51x_get_rsp(chip, 1, timeout);
347
348 if (CHECK_SD_TRANS_FAIL(chip, retval)) {
349 sd_print_debug_reg(chip);
350 if (retval == STATUS_TIMEDOUT) {
351 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
352 SD_RSP_TYPE_R1, NULL, 0);
353 }
354
355 TRACE_RET(chip, STATUS_FAIL);
356 }
357
358 if (buf && buf_len) {
359 retval = rts51x_read_ppbuf(chip, buf, buf_len);
360 if (retval != STATUS_SUCCESS)
361 TRACE_RET(chip, retval);
362 }
363
364 return STATUS_SUCCESS;
365}
366
367static int sd_write_data(struct rts51x_chip *chip, u8 trans_mode,
368 u8 *cmd, int cmd_len, u16 byte_cnt, u16 blk_cnt,
369 u8 bus_width, u8 *buf, int buf_len, int timeout)
370{
371 struct sd_info *sd_card = &(chip->sd_card);
372 int retval;
373 int i;
374
375 sd_clr_err_code(chip);
376
377 if (!buf)
378 buf_len = 0;
379
380 /* This function can't write data more than one page */
381 if (buf_len > 512)
382 TRACE_RET(chip, STATUS_FAIL);
383
384 if (buf && buf_len) {
385 retval = rts51x_write_ppbuf(chip, buf, buf_len);
386 if (retval != STATUS_SUCCESS)
387 TRACE_RET(chip, retval);
388 }
389
390 rts51x_init_cmd(chip);
391
392 if (cmd_len) {
393 RTS51X_DEBUGP("SD/MMC CMD %d\n", cmd[0] - 0x40);
394 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++) {
395 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD0 + i, 0xFF,
396 cmd[i]);
397 }
398 }
399 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_L, 0xFF, (u8) byte_cnt);
400 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_H, 0xFF,
401 (u8) (byte_cnt >> 8));
402 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_L, 0xFF, (u8) blk_cnt);
403 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_H, 0xFF,
404 (u8) (blk_cnt >> 8));
405
406 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG1, 0x03, bus_width);
407
408 if (cmd_len) {
409 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG2, 0xFF,
410 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
411 SD_WAIT_BUSY_END | SD_CHECK_CRC7 | SD_RSP_LEN_6);
412
413 } else {
414 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG2, 0xFF,
415 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
416 SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 |
417 SD_RSP_LEN_6);
418 }
419
420 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
421 trans_mode | SD_TRANSFER_START);
422 rts51x_add_cmd(chip, CHECK_REG_CMD, SD_TRANSFER, SD_TRANSFER_END,
423 SD_TRANSFER_END);
424
425 retval = rts51x_send_cmd(chip, MODE_CR, 100);
426 if (retval != STATUS_SUCCESS)
427 TRACE_RET(chip, retval);
428
429 retval = rts51x_get_rsp(chip, 1, timeout);
430
431 if (CHECK_SD_TRANS_FAIL(chip, retval)) {
432 sd_print_debug_reg(chip);
433
434 if (retval == STATUS_TIMEDOUT)
435 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
436 SD_RSP_TYPE_R1, NULL, 0);
437
438 TRACE_RET(chip, STATUS_FAIL);
439 }
440
441 return STATUS_SUCCESS;
442}
443
444static int sd_check_csd(struct rts51x_chip *chip, char check_wp)
445{
446 struct sd_info *sd_card = &(chip->sd_card);
447 int retval;
448 int i;
449 u8 csd_ver, trans_speed;
450 u8 rsp[16];
451
452 for (i = 0; i < 6; i++) {
453 if (monitor_card_cd(chip, SD_CARD) == CD_NOT_EXIST) {
454 sd_set_reset_fail(chip, SD_RESET_FAIL);
455 TRACE_RET(chip, STATUS_FAIL);
456 }
457
458 retval =
459 sd_send_cmd_get_rsp(chip, SEND_CSD, sd_card->sd_addr,
460 SD_RSP_TYPE_R2, rsp, 16);
461 if (retval == STATUS_SUCCESS)
462 break;
463 }
464
465 if (i == 6)
466 TRACE_RET(chip, STATUS_FAIL);
467 memcpy(sd_card->raw_csd, rsp + 1, 15);
468 /* Get CRC7 */
469 RTS51X_READ_REG(chip, SD_CMD5, sd_card->raw_csd + 15);
470
471 RTS51X_DEBUGP("CSD Response:\n");
472 RTS51X_DUMP(rsp, 16);
473
474 /* Get CSD Version */
475 csd_ver = (rsp[1] & 0xc0) >> 6;
476 RTS51X_DEBUGP("csd_ver = %d\n", csd_ver);
477
478 trans_speed = rsp[4];
479 if ((trans_speed & 0x07) == 0x02) { /* 10Mbits/s */
480 if ((trans_speed & 0xf8) >= 0x30) { /* >25Mbits/s */
481 if (chip->asic_code)
482 sd_card->sd_clock = 46;
483 else
484 sd_card->sd_clock = CLK_50;
485 } else if ((trans_speed & 0xf8) == 0x28) { /* 20Mbits/s */
486 if (chip->asic_code)
487 sd_card->sd_clock = 39;
488 else
489 sd_card->sd_clock = CLK_40;
490 } else if ((trans_speed & 0xf8) == 0x20) { /* 15Mbits/s */
491 if (chip->asic_code)
492 sd_card->sd_clock = 29;
493 else
494 sd_card->sd_clock = CLK_30;
495 } else if ((trans_speed & 0xf8) >= 0x10) { /* 12Mbits/s */
496 if (chip->asic_code)
497 sd_card->sd_clock = 23;
498 else
499 sd_card->sd_clock = CLK_20;
500 } else if ((trans_speed & 0x08) >= 0x08) { /* 10Mbits/s */
501 if (chip->asic_code)
502 sd_card->sd_clock = 19;
503 else
504 sd_card->sd_clock = CLK_20;
505 } /*else { */
506 /*If this ,then slow card will use 30M clock */
507 /* TRACE_RET(chip, STATUS_FAIL); */
508 /* } */
509 }
510 /*else {
511 TRACE_RET(chip, STATUS_FAIL);
512 } */
513 if (CHK_MMC_SECTOR_MODE(sd_card)) {
514 sd_card->capacity = 0;
515 } else {
516 /* For High-Capacity Card, CSD_STRUCTURE always be "0x1" */
517 if ((!CHK_SD_HCXC(sd_card)) || (csd_ver == 0)) {
518 /* Calculate total sector according to C_SIZE,
519 * C_SIZE_MULT & READ_BL_LEN */
520 u8 blk_size, c_size_mult;
521 u16 c_size;
522 /* Get READ_BL_LEN */
523 blk_size = rsp[6] & 0x0F;
524 /* Get C_SIZE */
525 c_size = ((u16) (rsp[7] & 0x03) << 10)
526 + ((u16) rsp[8] << 2)
527 + ((u16) (rsp[9] & 0xC0) >> 6);
528 /* Get C_SIZE_MUL */
529 c_size_mult = (u8) ((rsp[10] & 0x03) << 1);
530 c_size_mult += (rsp[11] & 0x80) >> 7;
531 /* Calculate total Capacity */
532 sd_card->capacity =
533 (((u32) (c_size + 1)) *
534 (1 << (c_size_mult + 2))) << (blk_size - 9);
535 } else {
536 /* High Capacity Card and Use CSD2.0 Version */
537 u32 total_sector = 0;
538 total_sector = (((u32) rsp[8] & 0x3f) << 16) |
539 ((u32) rsp[9] << 8) | (u32) rsp[10];
540 /* Total Capacity= (C_SIZE+1) *
541 * 512K Byte = (C_SIZE+1)K Sector,1K = 1024 Bytes */
542 sd_card->capacity = (total_sector + 1) << 10;
543 }
544 }
545
546 /* We need check Write-Protected Status by Field PERM WP or TEMP WP */
547 if (check_wp) {
548 if (rsp[15] & 0x30)
549 chip->card_wp |= SD_CARD;
550 RTS51X_DEBUGP("CSD WP Status: 0x%x\n", rsp[15]);
551 }
552
553 return STATUS_SUCCESS;
554}
555
556static int sd_set_sample_push_timing(struct rts51x_chip *chip)
557{
558 struct sd_info *sd_card = &(chip->sd_card);
559 int retval;
560
561 rts51x_init_cmd(chip);
562
563 if (CHK_SD_SDR104(sd_card) || CHK_SD_SDR50(sd_card)) {
564 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG1,
565 0x0C | SD_ASYNC_FIFO_RST,
566 SD_30_MODE | SD_ASYNC_FIFO_RST);
567 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_CLK_SOURCE, 0xFF,
568 CRC_VAR_CLK0 | SD30_FIX_CLK | SAMPLE_VAR_CLK1);
569 } else if (CHK_SD_DDR50(sd_card) || CHK_MMC_DDR52(sd_card)) {
570 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG1,
571 0x0C | SD_ASYNC_FIFO_RST,
572 SD_DDR_MODE | SD_ASYNC_FIFO_RST);
573 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_CLK_SOURCE, 0xFF,
574 CRC_VAR_CLK0 | SD30_FIX_CLK | SAMPLE_VAR_CLK1);
575 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_PUSH_POINT_CTL,
576 DDR_VAR_TX_CMD_DAT, DDR_VAR_TX_CMD_DAT);
577 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_SAMPLE_POINT_CTL,
578 DDR_VAR_RX_DAT | DDR_VAR_RX_CMD,
579 DDR_VAR_RX_DAT | DDR_VAR_RX_CMD);
580 } else {
581 u8 val = 0;
582
583 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG1, 0x0C, SD_20_MODE);
584 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_CLK_SOURCE, 0xFF,
585 CRC_FIX_CLK | SD30_VAR_CLK0 | SAMPLE_VAR_CLK1);
586
587 if ((chip->option.sd_ctl & SD_PUSH_POINT_CTL_MASK) ==
588 SD_PUSH_POINT_AUTO) {
589 val = SD20_TX_NEG_EDGE;
590 } else if ((chip->option.sd_ctl & SD_PUSH_POINT_CTL_MASK) ==
591 SD_PUSH_POINT_DELAY) {
592 val = SD20_TX_14_AHEAD;
593 } else {
594 val = SD20_TX_NEG_EDGE;
595 }
596 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_PUSH_POINT_CTL,
597 SD20_TX_SEL_MASK, val);
598
599 if ((chip->option.sd_ctl & SD_SAMPLE_POINT_CTL_MASK) ==
600 SD_SAMPLE_POINT_AUTO) {
601 if (chip->asic_code) {
602 if (CHK_SD_HS(sd_card) || CHK_MMC_52M(sd_card))
603 val = SD20_RX_14_DELAY;
604 else
605 val = SD20_RX_POS_EDGE;
606 } else {
607 val = SD20_RX_14_DELAY;
608 }
609 } else if ((chip->option.sd_ctl & SD_SAMPLE_POINT_CTL_MASK) ==
610 SD_SAMPLE_POINT_DELAY) {
611 val = SD20_RX_14_DELAY;
612 } else {
613 val = SD20_RX_POS_EDGE;
614 }
615 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_SAMPLE_POINT_CTL,
616 SD20_RX_SEL_MASK, val);
617 }
618
619 if (CHK_MMC_DDR52(sd_card) && CHK_MMC_8BIT(sd_card)) {
620 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_DMA1_CTL,
621 EXTEND_DMA1_ASYNC_SIGNAL, 0);
622 }
623
624 retval = rts51x_send_cmd(chip, MODE_C, 100);
625 if (retval != STATUS_SUCCESS)
626 TRACE_RET(chip, retval);
627
628 return STATUS_SUCCESS;
629}
630
631static void sd_choose_proper_clock(struct rts51x_chip *chip)
632{
633 struct sd_info *sd_card = &(chip->sd_card);
634
635 if (CHK_SD_SDR104(sd_card)) {
636 if (chip->asic_code)
637 sd_card->sd_clock = chip->option.asic_sd_sdr104_clk;
638 else
639 sd_card->sd_clock = chip->option.fpga_sd_sdr104_clk;
640 } else if (CHK_SD_DDR50(sd_card)) {
641 if (chip->asic_code)
642 sd_card->sd_clock = chip->option.asic_sd_ddr50_clk;
643 else
644 sd_card->sd_clock = chip->option.fpga_sd_ddr50_clk;
645 } else if (CHK_SD_SDR50(sd_card)) {
646 if (chip->asic_code)
647 sd_card->sd_clock = chip->option.asic_sd_sdr50_clk;
648 else
649 sd_card->sd_clock = chip->option.fpga_sd_sdr50_clk;
650 } else if (CHK_SD_HS(sd_card)) {
651 if (chip->asic_code)
652 sd_card->sd_clock = chip->option.asic_sd_hs_clk;
653 else
654 sd_card->sd_clock = chip->option.fpga_sd_hs_clk;
655 } else if (CHK_MMC_52M(sd_card) || CHK_MMC_DDR52(sd_card)) {
656 if (chip->asic_code)
657 sd_card->sd_clock = chip->option.asic_mmc_52m_clk;
658 else
659 sd_card->sd_clock = chip->option.fpga_mmc_52m_clk;
660 } else if (CHK_MMC_26M(sd_card)) {
661 if (chip->asic_code) {
662 sd_card->sd_clock = 46;
663 RTS51X_DEBUGP("Set MMC clock to 22.5MHz\n");
664 } else {
665 sd_card->sd_clock = CLK_50;
666 }
667 }
668}
669
670static int sd_set_init_para(struct rts51x_chip *chip)
671{
672 struct sd_info *sd_card = &(chip->sd_card);
673 int retval;
674
675 retval = sd_set_sample_push_timing(chip);
676 if (retval != STATUS_SUCCESS)
677 TRACE_RET(chip, retval);
678
679 sd_choose_proper_clock(chip);
680
681 retval = switch_clock(chip, sd_card->sd_clock);
682 if (retval != STATUS_SUCCESS)
683 TRACE_RET(chip, retval);
684
685 return STATUS_SUCCESS;
686}
687
688int sd_select_card(struct rts51x_chip *chip, int select)
689{
690 struct sd_info *sd_card = &(chip->sd_card);
691 int retval;
692 u8 cmd_idx, cmd_type;
693 u32 addr;
694
695 if (select) {
696 cmd_idx = SELECT_CARD;
697 cmd_type = SD_RSP_TYPE_R1;
698 addr = sd_card->sd_addr;
699 } else {
700 cmd_idx = DESELECT_CARD;
701 cmd_type = SD_RSP_TYPE_R0;
702 addr = 0;
703 }
704
705 retval = sd_send_cmd_get_rsp(chip, cmd_idx, addr, cmd_type, NULL, 0);
706 if (retval != STATUS_SUCCESS)
707 TRACE_RET(chip, retval);
708
709 return STATUS_SUCCESS;
710}
711
712#ifdef SUPPORT_SD_LOCK
713int sd_update_lock_status(struct rts51x_chip *chip)
714{
715 struct sd_info *sd_card = &(chip->sd_card);
716 int retval;
717 u8 rsp[5];
718
719 retval =
720 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
721 SD_RSP_TYPE_R1, rsp, 5);
722 if (retval != STATUS_SUCCESS)
723 TRACE_RET(chip, STATUS_FAIL);
724
725 if (rsp[1] & 0x02)
726 sd_card->sd_lock_status |= SD_LOCKED;
727 else
728 sd_card->sd_lock_status &= ~SD_LOCKED;
729
730 RTS51X_DEBUGP("sd_card->sd_lock_status = 0x%x\n",
731 sd_card->sd_lock_status);
732
733 if (rsp[1] & 0x01) {
734 /* LOCK_UNLOCK_FAILED */
735 TRACE_RET(chip, STATUS_FAIL);
736 }
737
738 return STATUS_SUCCESS;
739}
740#endif
741
742int sd_wait_currentstate_dataready(struct rts51x_chip *chip, u8 statechk,
743 u8 rdychk, u16 pollingcnt)
744{
745 struct sd_info *sd_card = &(chip->sd_card);
746 int retval;
747 u8 rsp[5];
748 u16 i;
749
750 for (i = 0; i < pollingcnt; i++) {
751
752 retval =
753 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
754 SD_RSP_TYPE_R1, rsp, 5);
755 if (retval == STATUS_SUCCESS) {
756 if (((rsp[3] & 0x1E) == statechk)
757 && ((rsp[3] & 0x01) == rdychk)) {
758 return STATUS_SUCCESS;
759 }
760 } else {
761 rts51x_clear_sd_error(chip);
762 TRACE_RET(chip, STATUS_FAIL);
763 }
764 }
765
766 return STATUS_TIMEDOUT;
767}
768
769static int sd_voltage_switch(struct rts51x_chip *chip)
770{
771 int retval;
772 u8 stat;
773
774 RTS51X_WRITE_REG(chip, SD_BUS_STAT,
775 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
776 SD_CLK_TOGGLE_EN);
777
778 retval =
779 sd_send_cmd_get_rsp(chip, VOLTAGE_SWITCH, 0, SD_RSP_TYPE_R1, NULL,
780 0);
781 if (retval != STATUS_SUCCESS)
782 TRACE_RET(chip, retval);
783
784 RTS51X_READ_REG(chip, SD_BUS_STAT, &stat);
785 if (stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
786 SD_DAT1_STATUS | SD_DAT0_STATUS))
787 TRACE_RET(chip, STATUS_FAIL);
788
789 rts51x_init_cmd(chip);
790 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BUS_STAT, 0xFF,
791 SD_CLK_FORCE_STOP);
792 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_PAD_CTL, SD_IO_USING_1V8,
793 SD_IO_USING_1V8);
794 if (chip->asic_code)
795 rts51x_add_cmd(chip, WRITE_REG_CMD, LDO_POWER_CFG,
796 TUNE_SD18_MASK, TUNE_SD18_1V8);
797 retval = rts51x_send_cmd(chip, MODE_C, 100);
798 if (retval != STATUS_SUCCESS)
799 TRACE_RET(chip, retval);
800
801 wait_timeout(chip->option.D3318_off_delay);
802
803 RTS51X_WRITE_REG(chip, SD_BUS_STAT, 0xFF, SD_CLK_TOGGLE_EN);
804 wait_timeout(10);
805
806 RTS51X_READ_REG(chip, SD_BUS_STAT, &stat);
807 if ((stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
808 SD_DAT1_STATUS | SD_DAT0_STATUS)) !=
809 (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
810 SD_DAT1_STATUS | SD_DAT0_STATUS)) {
811 rts51x_init_cmd(chip);
812 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BUS_STAT, 0xFF,
813 SD_CLK_FORCE_STOP);
814 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_CLK_EN, 0xFF, 0);
815 rts51x_send_cmd(chip, MODE_C, 100);
816 TRACE_RET(chip, STATUS_FAIL);
817 }
818 RTS51X_WRITE_REG(chip, SD_BUS_STAT,
819 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
820
821 return STATUS_SUCCESS;
822}
823
824static int sd_change_phase(struct rts51x_chip *chip, u8 sample_point,
825 u8 tune_dir)
826{
827 u16 SD_VP_CTL, SD_DCMPS_CTL;
828 u8 val;
829 int retval;
830
831 RTS51X_DEBUGP("sd_change_phase (sample_point = %d, tune_dir = %d)\n",
832 sample_point, tune_dir);
833
834 if (tune_dir == TUNE_RX) {
835 SD_VP_CTL = SD_VPCLK1_CTL;
836 SD_DCMPS_CTL = SD_DCMPS1_CTL;
837 } else {
838 SD_VP_CTL = SD_VPCLK0_CTL;
839 SD_DCMPS_CTL = SD_DCMPS0_CTL;
840 }
841
842 if (chip->asic_code) {
843 RTS51X_WRITE_REG(chip, CLK_DIV, CLK_CHANGE, CLK_CHANGE);
844 RTS51X_WRITE_REG(chip, SD_VP_CTL, 0x1F, sample_point);
845 RTS51X_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET, 0);
846 RTS51X_WRITE_REG(chip, SD_VPCLK0_CTL, PHASE_NOT_RESET,
847 PHASE_NOT_RESET);
848 RTS51X_WRITE_REG(chip, CLK_DIV, CLK_CHANGE, 0);
849 } else {
850#ifdef CONFIG_RTS5139_DEBUG
851 RTS51X_READ_REG(chip, SD_VP_CTL, &val);
852 RTS51X_DEBUGP("SD_VP_CTL: 0x%x\n", val);
853 RTS51X_READ_REG(chip, SD_DCMPS_CTL, &val);
854 RTS51X_DEBUGP("SD_DCMPS_CTL: 0x%x\n", val);
855#endif
856
857 RTS51X_WRITE_REG(chip, CLK_DIV, CLK_CHANGE, CLK_CHANGE);
858 udelay(100);
859 RTS51X_WRITE_REG(chip, SD_VP_CTL, 0xFF,
860 PHASE_NOT_RESET | sample_point);
861 udelay(200);
862
863 rts51x_init_cmd(chip);
864 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_DCMPS_CTL, DCMPS_CHANGE,
865 DCMPS_CHANGE);
866 rts51x_add_cmd(chip, CHECK_REG_CMD, SD_DCMPS_CTL,
867 DCMPS_CHANGE_DONE, DCMPS_CHANGE_DONE);
868 retval = rts51x_send_cmd(chip, MODE_CR, 100);
869 if (retval != STATUS_SUCCESS)
870 TRACE_GOTO(chip, Fail);
871
872 retval = rts51x_get_rsp(chip, 1, 500);
873 if (retval != STATUS_SUCCESS)
874 TRACE_GOTO(chip, Fail);
875
876 val = chip->rsp_buf[0];
877 if (val & DCMPS_ERROR)
878 TRACE_GOTO(chip, Fail);
879 if ((val & DCMPS_CURRENT_PHASE) != sample_point)
880 TRACE_GOTO(chip, Fail);
881 RTS51X_WRITE_REG(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
882 RTS51X_WRITE_REG(chip, CLK_DIV, CLK_CHANGE, 0);
883 udelay(100);
884 }
885
886 RTS51X_WRITE_REG(chip, SD_CFG1, SD_ASYNC_FIFO_RST, 0);
887
888 return STATUS_SUCCESS;
889
890Fail:
891#ifdef CONFIG_RTS5139_DEBUG
892 rts51x_ep0_read_register(chip, SD_VP_CTL, &val);
893 RTS51X_DEBUGP("SD_VP_CTL: 0x%x\n", val);
894 rts51x_ep0_read_register(chip, SD_DCMPS_CTL, &val);
895 RTS51X_DEBUGP("SD_DCMPS_CTL: 0x%x\n", val);
896#endif
897
898 RTS51X_WRITE_REG(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
899 RTS51X_WRITE_REG(chip, SD_VP_CTL, PHASE_CHANGE, 0);
900 wait_timeout(10);
901
902 return STATUS_FAIL;
903}
904
905static int sd_check_spec(struct rts51x_chip *chip, u8 bus_width)
906{
907 struct sd_info *sd_card = &(chip->sd_card);
908 int retval;
909 u8 cmd[5], buf[8];
910
911 retval =
912 sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, SD_RSP_TYPE_R1,
913 NULL, 0);
914 if (retval != STATUS_SUCCESS)
915 TRACE_RET(chip, STATUS_FAIL);
916
917 cmd[0] = 0x40 | SEND_SCR;
918 cmd[1] = 0;
919 cmd[2] = 0;
920 cmd[3] = 0;
921 cmd[4] = 0;
922
923 retval =
924 sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 8, 1, bus_width, buf,
925 8, 250);
926 if (retval != STATUS_SUCCESS) {
927 rts51x_clear_sd_error(chip);
928 TRACE_RET(chip, retval);
929 }
930
931 memcpy(sd_card->raw_scr, buf, 8);
932
933 if ((buf[0] & 0x0F) == 0)
934 TRACE_RET(chip, STATUS_FAIL);
935
936 return STATUS_SUCCESS;
937}
938
939static int sd_query_switch_result(struct rts51x_chip *chip, u8 func_group,
940 u8 func_to_switch, u8 *buf, int buf_len)
941{
942 u8 support_mask = 0, query_switch = 0, switch_busy = 0;
943 int support_offset = 0, query_switch_offset = 0, check_busy_offset = 0;
944
945 if (func_group == SD_FUNC_GROUP_1) {
946 support_offset = FUNCTION_GROUP1_SUPPORT_OFFSET;
947 query_switch_offset = FUNCTION_GROUP1_QUERY_SWITCH_OFFSET;
948 check_busy_offset = FUNCTION_GROUP1_CHECK_BUSY_OFFSET;
949
950 switch (func_to_switch) {
951 case HS_SUPPORT:
952 support_mask = HS_SUPPORT_MASK;
953 query_switch = HS_QUERY_SWITCH_OK;
954 switch_busy = HS_SWITCH_BUSY;
955 break;
956
957 case SDR50_SUPPORT:
958 support_mask = SDR50_SUPPORT_MASK;
959 query_switch = SDR50_QUERY_SWITCH_OK;
960 switch_busy = SDR50_SWITCH_BUSY;
961 break;
962
963 case SDR104_SUPPORT:
964 support_mask = SDR104_SUPPORT_MASK;
965 query_switch = SDR104_QUERY_SWITCH_OK;
966 switch_busy = SDR104_SWITCH_BUSY;
967 break;
968
969 case DDR50_SUPPORT:
970 support_mask = DDR50_SUPPORT_MASK;
971 query_switch = DDR50_QUERY_SWITCH_OK;
972 switch_busy = DDR50_SWITCH_BUSY;
973 break;
974
975 default:
976 TRACE_RET(chip, STATUS_FAIL);
977 }
978 } else if (func_group == SD_FUNC_GROUP_3) {
979 support_offset = FUNCTION_GROUP3_SUPPORT_OFFSET;
980 query_switch_offset = FUNCTION_GROUP3_QUERY_SWITCH_OFFSET;
981 check_busy_offset = FUNCTION_GROUP3_CHECK_BUSY_OFFSET;
982
983 switch (func_to_switch) {
984 case DRIVING_TYPE_A:
985 support_mask = DRIVING_TYPE_A_MASK;
986 query_switch = TYPE_A_QUERY_SWITCH_OK;
987 switch_busy = TYPE_A_SWITCH_BUSY;
988 break;
989
990 case DRIVING_TYPE_C:
991 support_mask = DRIVING_TYPE_C_MASK;
992 query_switch = TYPE_C_QUERY_SWITCH_OK;
993 switch_busy = TYPE_C_SWITCH_BUSY;
994 break;
995
996 case DRIVING_TYPE_D:
997 support_mask = DRIVING_TYPE_D_MASK;
998 query_switch = TYPE_D_QUERY_SWITCH_OK;
999 switch_busy = TYPE_D_SWITCH_BUSY;
1000 break;
1001
1002 default:
1003 TRACE_RET(chip, STATUS_FAIL);
1004 }
1005 } else if (func_group == SD_FUNC_GROUP_4) {
1006 support_offset = FUNCTION_GROUP4_SUPPORT_OFFSET;
1007 query_switch_offset = FUNCTION_GROUP4_QUERY_SWITCH_OFFSET;
1008 check_busy_offset = FUNCTION_GROUP4_CHECK_BUSY_OFFSET;
1009
1010 switch (func_to_switch) {
1011 case CURRENT_LIMIT_400:
1012 support_mask = CURRENT_LIMIT_400_MASK;
1013 query_switch = CURRENT_LIMIT_400_QUERY_SWITCH_OK;
1014 switch_busy = CURRENT_LIMIT_400_SWITCH_BUSY;
1015 break;
1016
1017 case CURRENT_LIMIT_600:
1018 support_mask = CURRENT_LIMIT_600_MASK;
1019 query_switch = CURRENT_LIMIT_600_QUERY_SWITCH_OK;
1020 switch_busy = CURRENT_LIMIT_600_SWITCH_BUSY;
1021 break;
1022
1023 case CURRENT_LIMIT_800:
1024 support_mask = CURRENT_LIMIT_800_MASK;
1025 query_switch = CURRENT_LIMIT_800_QUERY_SWITCH_OK;
1026 switch_busy = CURRENT_LIMIT_800_SWITCH_BUSY;
1027 break;
1028
1029 default:
1030 TRACE_RET(chip, STATUS_FAIL);
1031 }
1032 } else {
1033 TRACE_RET(chip, STATUS_FAIL);
1034 }
1035
1036 if (func_group == SD_FUNC_GROUP_4)
1037 buf[query_switch_offset] =
1038 (buf[query_switch_offset] & 0xf0) >> 4;
1039 if (!(buf[support_offset] & support_mask) ||
1040 ((buf[query_switch_offset] & 0x0F) != query_switch))
1041 TRACE_RET(chip, STATUS_FAIL);
1042
1043 if ((buf[DATA_STRUCTURE_VER_OFFSET] == 0x01) &&
1044 ((buf[check_busy_offset] & switch_busy) == switch_busy))
1045 TRACE_RET(chip, STATUS_FAIL);
1046
1047 return STATUS_SUCCESS;
1048}
1049
1050static int sd_check_switch_mode(struct rts51x_chip *chip, u8 mode,
1051 u8 func_group, u8 func_to_switch, u8 bus_width)
1052{
1053 struct sd_info *sd_card = &(chip->sd_card);
1054 int retval;
1055 u8 cmd[5], buf[64];
1056
1057 RTS51X_DEBUGP("sd_check_switch_mode (mode = %d, func_group = %d,"
1058 "func_to_switch = %d)\n", mode, func_group, func_to_switch);
1059
1060 cmd[0] = 0x40 | SWITCH;
1061 cmd[1] = mode;
1062
1063 if (func_group == SD_FUNC_GROUP_1) {
1064 cmd[2] = 0xFF;
1065 cmd[3] = 0xFF;
1066 cmd[4] = 0xF0 + func_to_switch;
1067 } else if (func_group == SD_FUNC_GROUP_3) {
1068 cmd[2] = 0xFF;
1069 cmd[3] = 0xF0 + func_to_switch;
1070 cmd[4] = 0xFF;
1071 } else if (func_group == SD_FUNC_GROUP_4) {
1072 cmd[2] = 0xFF;
1073 cmd[3] = 0x0F + (func_to_switch << 4);
1074 cmd[4] = 0xFF;
1075 } else {
1076 cmd[1] = SD_CHECK_MODE;
1077 cmd[2] = 0xFF;
1078 cmd[3] = 0xFF;
1079 cmd[4] = 0xFF;
1080 }
1081
1082 retval =
1083 sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1, bus_width, buf,
1084 64, 250);
1085 if (retval != STATUS_SUCCESS) {
1086 rts51x_clear_sd_error(chip);
1087 TRACE_RET(chip, retval);
1088 }
1089
1090 if (func_group == NO_ARGUMENT) {
1091 sd_card->func_group1_mask = buf[0x0D];
1092 sd_card->func_group2_mask = buf[0x0B];
1093 sd_card->func_group3_mask = buf[0x09];
1094 sd_card->func_group4_mask = buf[0x07];
1095
1096 RTS51X_DEBUGP("func_group1_mask = 0x%02x\n", buf[0x0D]);
1097 RTS51X_DEBUGP("func_group2_mask = 0x%02x\n", buf[0x0B]);
1098 RTS51X_DEBUGP("func_group3_mask = 0x%02x\n", buf[0x09]);
1099 RTS51X_DEBUGP("func_group4_mask = 0x%02x\n", buf[0x07]);
1100 } else {
1101 if ((buf[0] == 0) && (buf[1] == 0))
1102 TRACE_RET(chip, STATUS_FAIL);
1103 retval =
1104 sd_query_switch_result(chip, func_group, func_to_switch,
1105 buf, 64);
1106 if (retval != STATUS_SUCCESS)
1107 TRACE_RET(chip, retval);
1108 }
1109
1110 return STATUS_SUCCESS;
1111}
1112
1113static int sd_check_switch(struct rts51x_chip *chip,
1114 u8 func_group, u8 func_to_switch, u8 bus_width)
1115{
1116 int retval;
1117 int i;
1118 int switch_good = 0;
1119
1120 for (i = 0; i < 3; i++) {
1121 if (monitor_card_cd(chip, SD_CARD) == CD_NOT_EXIST) {
1122 sd_set_reset_fail(chip, SD_RESET_FAIL);
1123 TRACE_RET(chip, STATUS_FAIL);
1124 }
1125
1126 retval = sd_check_switch_mode(chip, SD_CHECK_MODE, func_group,
1127 func_to_switch, bus_width);
1128 if (retval == STATUS_SUCCESS) {
1129 u8 stat;
1130
1131 retval = sd_check_switch_mode(chip, SD_SWITCH_MODE,
1132 func_group, func_to_switch, bus_width);
1133 if (retval == STATUS_SUCCESS) {
1134 switch_good = 1;
1135 break;
1136 }
1137
1138 RTS51X_READ_REG(chip, SD_STAT1, &stat);
1139
1140 if (stat & SD_CRC16_ERR) {
1141 RTS51X_DEBUGP("SD CRC16 error when switching"
1142 "mode\n");
1143 TRACE_RET(chip, STATUS_FAIL);
1144 }
1145 }
1146
1147 wait_timeout(20);
1148 }
1149
1150 if (!switch_good)
1151 TRACE_RET(chip, STATUS_FAIL);
1152
1153 return STATUS_SUCCESS;
1154}
1155
1156static int sd_switch_function(struct rts51x_chip *chip, u8 bus_width)
1157{
1158 struct sd_info *sd_card = &(chip->sd_card);
1159 int retval;
1160 int i;
1161 u8 func_to_switch = 0;
1162
1163 /* Get supported functions */
1164 retval = sd_check_switch_mode(chip, SD_CHECK_MODE,
1165 NO_ARGUMENT, NO_ARGUMENT, bus_width);
1166 if (retval != STATUS_SUCCESS)
1167 TRACE_RET(chip, retval);
1168
1169 sd_card->func_group1_mask &= ~(sd_card->sd_switch_fail);
1170
1171 for (i = 0; i < 4; i++) {
1172 switch ((u8) (chip->option.sd_speed_prior >> (i * 8))) {
1173 case DDR50_SUPPORT:
1174 if ((sd_card->func_group1_mask & DDR50_SUPPORT_MASK)
1175 && (CHECK_UHS50(chip)))
1176 func_to_switch = DDR50_SUPPORT;
1177 break;
1178
1179 case SDR50_SUPPORT:
1180 if ((sd_card->func_group1_mask & SDR50_SUPPORT_MASK)
1181 && (CHECK_UHS50(chip)))
1182 func_to_switch = SDR50_SUPPORT;
1183 break;
1184
1185 case HS_SUPPORT:
1186 if (sd_card->func_group1_mask & HS_SUPPORT_MASK)
1187 func_to_switch = HS_SUPPORT;
1188 break;
1189
1190 default:
1191 continue;
1192 }
1193
1194 if (func_to_switch)
1195 break;
1196 }
1197 RTS51X_DEBUGP("SD_FUNC_GROUP_1: func_to_switch = 0x%02x",
1198 func_to_switch);
1199
1200#ifdef SUPPORT_SD_LOCK
1201 if ((sd_card->sd_lock_status & SD_SDR_RST)
1202 && (DDR50_SUPPORT == func_to_switch)
1203 && (sd_card->func_group1_mask & SDR50_SUPPORT_MASK)) {
1204 func_to_switch = SDR50_SUPPORT;
1205 RTS51X_DEBUGP("Using SDR50 instead of DDR50 for SD Lock\n");
1206 }
1207#endif
1208
1209 if (func_to_switch) {
1210 retval =
1211 sd_check_switch(chip, SD_FUNC_GROUP_1, func_to_switch,
1212 bus_width);
1213 if (retval != STATUS_SUCCESS) {
1214 if (func_to_switch == SDR104_SUPPORT)
1215 sd_card->sd_switch_fail = SDR104_SUPPORT_MASK;
1216 else if (func_to_switch == DDR50_SUPPORT)
1217 sd_card->sd_switch_fail = DDR50_SUPPORT_MASK;
1218 else if (func_to_switch == SDR50_SUPPORT)
1219 sd_card->sd_switch_fail = SDR50_SUPPORT_MASK;
1220 else if (func_to_switch == HS_SUPPORT)
1221 sd_card->sd_switch_fail = HS_SUPPORT_MASK;
1222
1223 TRACE_RET(chip, retval);
1224 }
1225
1226 if (func_to_switch == SDR104_SUPPORT)
1227 SET_SD_SDR104(sd_card);
1228 else if (func_to_switch == DDR50_SUPPORT)
1229 SET_SD_DDR50(sd_card);
1230 else if (func_to_switch == SDR50_SUPPORT)
1231 SET_SD_SDR50(sd_card);
1232 else
1233 SET_SD_HS(sd_card);
1234 }
1235
1236 if (CHK_SD_DDR50(sd_card))
1237 RTS51X_WRITE_REG(chip, SD_CFG1, 0x0C, SD_DDR_MODE);
1238
1239 func_to_switch = 0;
1240 if (sd_card->func_group4_mask & CURRENT_LIMIT_400_MASK)
1241 func_to_switch = CURRENT_LIMIT_400;
1242
1243 if (func_to_switch) {
1244 RTS51X_DEBUGP("Try to switch current_limit_400\n");
1245 retval =
1246 sd_check_switch(chip, SD_FUNC_GROUP_4, func_to_switch,
1247 bus_width);
1248 RTS51X_DEBUGP("Switch current_limit_400 status: (%d)\n",
1249 retval);
1250 }
1251
1252 return STATUS_SUCCESS;
1253}
1254
1255static int sd_wait_data_idle(struct rts51x_chip *chip)
1256{
1257 int retval = STATUS_TIMEDOUT;
1258 int i;
1259 u8 val = 0;
1260
1261 for (i = 0; i < 100; i++) {
1262 retval = rts51x_ep0_read_register(chip, SD_DATA_STATE, &val);
1263 if (retval != STATUS_SUCCESS)
1264 TRACE_RET(chip, STATUS_FAIL);
1265 if (val & SD_DATA_IDLE) {
1266 retval = STATUS_SUCCESS;
1267 break;
1268 }
1269 udelay(100);
1270 }
1271 RTS51X_DEBUGP("SD_DATA_STATE: 0x%02x\n", val);
1272
1273 return retval;
1274}
1275
1276static int sd_sdr_tuning_rx_cmd(struct rts51x_chip *chip, u8 sample_point)
1277{
1278 int retval;
1279 u8 cmd[5];
1280
1281 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1282 if (retval != STATUS_SUCCESS)
1283 TRACE_RET(chip, retval);
1284
1285 cmd[0] = 0x40 | SEND_TUNING_PATTERN;
1286 cmd[1] = 0;
1287 cmd[2] = 0;
1288 cmd[3] = 0;
1289 cmd[4] = 0;
1290
1291 retval = sd_read_data(chip, SD_TM_AUTO_TUNING,
1292 cmd, 5, 0x40, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
1293 if (retval != STATUS_SUCCESS) {
1294 /* Wait till SD DATA IDLE */
1295 (void)sd_wait_data_idle(chip);
1296
1297 rts51x_clear_sd_error(chip);
1298 TRACE_RET(chip, STATUS_FAIL);
1299 }
1300
1301 return STATUS_SUCCESS;
1302}
1303
1304static int sd_ddr_tuning_rx_cmd(struct rts51x_chip *chip, u8 sample_point)
1305{
1306 struct sd_info *sd_card = &(chip->sd_card);
1307 int retval;
1308 u8 cmd[5];
1309
1310 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1311 if (retval != STATUS_SUCCESS)
1312 TRACE_RET(chip, retval);
1313
1314 RTS51X_DEBUGP("sd ddr tuning rx\n");
1315
1316 retval =
1317 sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, SD_RSP_TYPE_R1,
1318 NULL, 0);
1319 if (retval != STATUS_SUCCESS)
1320 TRACE_RET(chip, retval);
1321
1322 cmd[0] = 0x40 | SD_STATUS;
1323 cmd[1] = 0;
1324 cmd[2] = 0;
1325 cmd[3] = 0;
1326 cmd[4] = 0;
1327
1328 retval = sd_read_data(chip, SD_TM_NORMAL_READ,
1329 cmd, 5, 64, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
1330 if (retval != STATUS_SUCCESS) {
1331 /* Wait till SD DATA IDLE */
1332 (void)sd_wait_data_idle(chip);
1333
1334 rts51x_clear_sd_error(chip);
1335 TRACE_RET(chip, STATUS_FAIL);
1336 }
1337
1338 return STATUS_SUCCESS;
1339}
1340
1341static int mmc_ddr_tunning_rx_cmd(struct rts51x_chip *chip, u8 sample_point)
1342{
1343 struct sd_info *sd_card = &(chip->sd_card);
1344 int retval;
1345 u8 cmd[5], bus_width;
1346
1347 if (CHK_MMC_8BIT(sd_card))
1348 bus_width = SD_BUS_WIDTH_8;
1349 else if (CHK_MMC_4BIT(sd_card))
1350 bus_width = SD_BUS_WIDTH_4;
1351 else
1352 bus_width = SD_BUS_WIDTH_1;
1353
1354 retval = sd_change_phase(chip, sample_point, TUNE_RX);
1355 if (retval != STATUS_SUCCESS)
1356 TRACE_RET(chip, retval);
1357
1358 RTS51X_DEBUGP("mmc ddr tuning rx\n");
1359
1360 cmd[0] = 0x40 | SEND_EXT_CSD;
1361 cmd[1] = 0;
1362 cmd[2] = 0;
1363 cmd[3] = 0;
1364 cmd[4] = 0;
1365
1366 retval = sd_read_data(chip, SD_TM_NORMAL_READ,
1367 cmd, 5, 0x200, 1, bus_width, NULL, 0, 100);
1368 if (retval != STATUS_SUCCESS) {
1369 /* Wait till SD DATA IDLE */
1370 (void)sd_wait_data_idle(chip);
1371
1372 rts51x_clear_sd_error(chip);
1373 TRACE_RET(chip, STATUS_FAIL);
1374 }
1375
1376 return STATUS_SUCCESS;
1377}
1378
1379static int sd_sdr_tuning_tx_cmd(struct rts51x_chip *chip, u8 sample_point)
1380{
1381 struct sd_info *sd_card = &(chip->sd_card);
1382 int retval;
1383
1384 retval = sd_change_phase(chip, sample_point, TUNE_TX);
1385 if (retval != STATUS_SUCCESS)
1386 TRACE_RET(chip, retval);
1387
1388 RTS51X_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1389 SD_RSP_80CLK_TIMEOUT_EN);
1390
1391 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
1392 SD_RSP_TYPE_R1, NULL, 0);
1393 if (retval != STATUS_SUCCESS) {
1394 if (sd_check_err_code(chip, SD_RSP_TIMEOUT)) {
1395 /* Tunning TX fail */
1396 rts51x_ep0_write_register(chip, SD_CFG3,
1397 SD_RSP_80CLK_TIMEOUT_EN, 0);
1398 TRACE_RET(chip, STATUS_FAIL);
1399 }
1400 }
1401
1402 RTS51X_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1403
1404 return STATUS_SUCCESS;
1405}
1406
1407static int sd_ddr_tuning_tx_cmd(struct rts51x_chip *chip, u8 sample_point)
1408{
1409 struct sd_info *sd_card = &(chip->sd_card);
1410 int retval;
1411 u8 cmd[5], bus_width;
1412
1413 retval = sd_change_phase(chip, sample_point, TUNE_TX);
1414 if (retval != STATUS_SUCCESS)
1415 TRACE_RET(chip, retval);
1416
1417 if (CHK_SD(sd_card)) {
1418 bus_width = SD_BUS_WIDTH_4;
1419 } else {
1420 if (CHK_MMC_8BIT(sd_card))
1421 bus_width = SD_BUS_WIDTH_8;
1422 else if (CHK_MMC_4BIT(sd_card))
1423 bus_width = SD_BUS_WIDTH_4;
1424 else
1425 bus_width = SD_BUS_WIDTH_1;
1426 }
1427 retval = sd_wait_currentstate_dataready(chip, 0x08, 1, 20);
1428 if (retval != STATUS_SUCCESS)
1429 TRACE_RET(chip, STATUS_FAIL);
1430
1431 RTS51X_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1432 SD_RSP_80CLK_TIMEOUT_EN);
1433
1434 cmd[0] = 0x40 | PROGRAM_CSD;
1435 cmd[1] = 0;
1436 cmd[2] = 0;
1437 cmd[3] = 0;
1438 cmd[4] = 0;
1439
1440 retval = sd_write_data(chip, SD_TM_AUTO_WRITE_2,
1441 cmd, 5, 16, 1, bus_width, sd_card->raw_csd, 16, 100);
1442 if (retval != STATUS_SUCCESS) {
1443 rts51x_clear_sd_error(chip);
1444 /* Tunning TX fail */
1445 rts51x_ep0_write_register(chip, SD_CFG3,
1446 SD_RSP_80CLK_TIMEOUT_EN, 0);
1447 TRACE_RET(chip, STATUS_FAIL);
1448 }
1449
1450 RTS51X_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1451
1452 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1,
1453 NULL, 0);
1454
1455 return STATUS_SUCCESS;
1456}
1457
1458static u8 sd_search_final_phase(struct rts51x_chip *chip, u32 phase_map,
1459 u8 tune_dir)
1460{
1461 struct sd_info *sd_card = &(chip->sd_card);
1462 struct timing_phase_path path[MAX_PHASE + 1];
1463 int i, j, cont_path_cnt;
1464 int new_block, max_len;
1465 u8 final_phase = 0xFF;
1466 int final_path_idx;
1467
1468 if (phase_map == 0xffff) {
1469 if (CHK_SD_DDR50(sd_card)) {
1470 if (tune_dir == TUNE_TX)
1471 final_phase = chip->option.ddr50_tx_phase;
1472 else
1473 final_phase = chip->option.ddr50_rx_phase;
1474 RTS51X_DEBUGP("DDR50 tuning dir:%d all pass,"
1475 "so select default phase:0x%x.\n",
1476 tune_dir, final_phase);
1477 } else {
1478 if (tune_dir == TUNE_TX)
1479 final_phase = chip->option.sdr50_tx_phase;
1480 else
1481 final_phase = chip->option.sdr50_rx_phase;
1482 RTS51X_DEBUGP("SDR50 tuning dir:%d all pass,"
1483 "so select default phase:0x%x.\n",
1484 tune_dir, final_phase);
1485 }
1486 goto Search_Finish;
1487 }
1488
1489 cont_path_cnt = 0;
1490 new_block = 1;
1491 j = 0;
1492 for (i = 0; i < MAX_PHASE + 1; i++) {
1493 if (phase_map & (1 << i)) {
1494 if (new_block) {
1495 new_block = 0;
1496 j = cont_path_cnt++;
1497 path[j].start = i;
1498 path[j].end = i;
1499 } else {
1500 path[j].end = i;
1501 }
1502 } else {
1503 new_block = 1;
1504 if (cont_path_cnt) {
1505 int idx = cont_path_cnt - 1;
1506 path[idx].len =
1507 path[idx].end - path[idx].start + 1;
1508 path[idx].mid =
1509 path[idx].start + path[idx].len / 2;
1510 }
1511 }
1512 }
1513
1514 if (cont_path_cnt == 0) {
1515 RTS51X_DEBUGP("No continuous phase path\n");
1516 goto Search_Finish;
1517 } else {
1518 int idx = cont_path_cnt - 1;
1519 path[idx].len = path[idx].end - path[idx].start + 1;
1520 path[idx].mid = path[idx].start + path[idx].len / 2;
1521 }
1522
1523 if ((path[0].start == 0) &&
1524 (path[cont_path_cnt - 1].end == MAX_PHASE)) {
1525 path[0].start = path[cont_path_cnt - 1].start - MAX_PHASE - 1;
1526 path[0].len += path[cont_path_cnt - 1].len;
1527 path[0].mid = path[0].start + path[0].len / 2;
1528 if (path[0].mid < 0)
1529 path[0].mid += MAX_PHASE + 1;
1530 cont_path_cnt--;
1531 }
1532 max_len = 0;
1533 final_phase = 0;
1534 final_path_idx = 0;
1535 for (i = 0; i < cont_path_cnt; i++) {
1536 if (path[i].len > max_len) {
1537 max_len = path[i].len;
1538 final_phase = (u8) path[i].mid;
1539 final_path_idx = i;
1540 }
1541
1542 RTS51X_DEBUGP("path[%d].start = %d\n", i, path[i].start);
1543 RTS51X_DEBUGP("path[%d].end = %d\n", i, path[i].end);
1544 RTS51X_DEBUGP("path[%d].len = %d\n", i, path[i].len);
1545 RTS51X_DEBUGP("path[%d].mid = %d\n", i, path[i].mid);
1546 RTS51X_DEBUGP("\n");
1547 }
1548
1549 if ((tune_dir == TUNE_TX) && (CHK_SD_SDR50(sd_card))
1550 && chip->option.sdr50_phase_sel) {
1551 if (max_len > 6) {
1552 int temp_mid = (max_len - 6) / 2;
1553 int temp_final_phase =
1554 path[final_path_idx].end - (max_len -
1555 (3 + temp_mid));
1556
1557 if (temp_final_phase < 0)
1558 final_phase = temp_final_phase + MAX_PHASE + 1;
1559 else
1560 final_phase = (u8) temp_final_phase;
1561 }
1562 }
1563
1564Search_Finish:
1565 RTS51X_DEBUGP("Final choosen phase: %d\n", final_phase);
1566 return final_phase;
1567}
1568
1569static int sd_tuning_rx(struct rts51x_chip *chip)
1570{
1571 struct sd_info *sd_card = &(chip->sd_card);
1572 int retval;
1573 int i, j;
1574 u32 raw_phase_map[3], phase_map;
1575 u8 final_phase;
1576 int (*tuning_cmd) (struct rts51x_chip *chip, u8 sample_point);
1577
1578 if (CHK_SD(sd_card)) {
1579 if (CHK_SD_DDR50(sd_card))
1580 tuning_cmd = sd_ddr_tuning_rx_cmd;
1581 else
1582 tuning_cmd = sd_sdr_tuning_rx_cmd;
1583 } else {
1584 if (CHK_MMC_DDR52(sd_card))
1585 tuning_cmd = mmc_ddr_tunning_rx_cmd;
1586 else
1587 TRACE_RET(chip, STATUS_FAIL);
1588 }
1589
1590 for (i = 0; i < 3; i++) {
1591 raw_phase_map[i] = 0;
1592 for (j = MAX_PHASE; j >= 0; j--) {
1593 if (monitor_card_cd(chip, SD_CARD) == CD_NOT_EXIST) {
1594 sd_set_reset_fail(chip, SD_RESET_FAIL);
1595 TRACE_RET(chip, STATUS_FAIL);
1596 }
1597
1598 retval = tuning_cmd(chip, (u8) j);
1599 if (retval == STATUS_SUCCESS)
1600 raw_phase_map[i] |= 1 << j;
1601 else
1602 RTS51X_DEBUGP("Tuning phase %d fail\n", j);
1603 }
1604 }
1605
1606 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1607 for (i = 0; i < 3; i++)
1608 RTS51X_DEBUGP("RX raw_phase_map[%d] = 0x%04x\n", i,
1609 raw_phase_map[i]);
1610 RTS51X_DEBUGP("RX phase_map = 0x%04x\n", phase_map);
1611
1612 final_phase = sd_search_final_phase(chip, phase_map, TUNE_RX);
1613 if (final_phase == 0xFF)
1614 TRACE_RET(chip, STATUS_FAIL);
1615
1616 retval = tuning_cmd(chip, final_phase);
1617 if (retval != STATUS_SUCCESS)
1618 TRACE_RET(chip, retval);
1619
1620 return STATUS_SUCCESS;
1621}
1622
1623static int sd_ddr_pre_tuning_tx(struct rts51x_chip *chip)
1624{
1625 struct sd_info *sd_card = &(chip->sd_card);
1626 int retval;
1627 u8 i;
1628 u8 pre_tune_tx_phase;
1629 u32 pre_tune_phase_map;
1630
1631 RTS51X_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1632 SD_RSP_80CLK_TIMEOUT_EN);
1633
1634 pre_tune_tx_phase = 0xFF;
1635 pre_tune_phase_map = 0x0000;
1636 for (i = 0; i < MAX_PHASE + 1; i++) {
1637 if (monitor_card_cd(chip, SD_CARD) == CD_NOT_EXIST) {
1638 sd_set_reset_fail(chip, SD_RESET_FAIL);
1639 TRACE_RET(chip, STATUS_FAIL);
1640 }
1641
1642 retval = sd_change_phase(chip, (u8) i, TUNE_TX);
1643 if (retval != STATUS_SUCCESS)
1644 TRACE_RET(chip, retval);
1645
1646 retval =
1647 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
1648 SD_RSP_TYPE_R1, NULL, 0);
1649 if ((retval == STATUS_SUCCESS)
1650 || !sd_check_err_code(chip, SD_RSP_TIMEOUT))
1651 pre_tune_phase_map |= (u32) 1 << i;
1652 }
1653
1654 RTS51X_WRITE_REG(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1655
1656 pre_tune_tx_phase =
1657 sd_search_final_phase(chip, pre_tune_phase_map, TUNE_TX);
1658 if (pre_tune_tx_phase == 0xFF)
1659 TRACE_RET(chip, STATUS_FAIL);
1660
1661 sd_change_phase(chip, pre_tune_tx_phase, TUNE_TX);
1662 RTS51X_DEBUGP("DDR TX pre tune phase: %d\n", (int)pre_tune_tx_phase);
1663
1664 return STATUS_SUCCESS;
1665}
1666
1667static int sd_tuning_tx(struct rts51x_chip *chip)
1668{
1669 struct sd_info *sd_card = &(chip->sd_card);
1670 int retval;
1671 int i, j;
1672 u32 raw_phase_map[3], phase_map;
1673 u8 final_phase;
1674 int (*tuning_cmd) (struct rts51x_chip *chip, u8 sample_point);
1675
1676 if (CHK_SD(sd_card)) {
1677 if (CHK_SD_DDR50(sd_card))
1678 tuning_cmd = sd_ddr_tuning_tx_cmd;
1679 else
1680 tuning_cmd = sd_sdr_tuning_tx_cmd;
1681 } else {
1682 if (CHK_MMC_DDR52(sd_card))
1683 tuning_cmd = sd_ddr_tuning_tx_cmd;
1684 else
1685 TRACE_RET(chip, STATUS_FAIL);
1686 }
1687
1688 for (i = 0; i < 3; i++) {
1689 raw_phase_map[i] = 0;
1690 for (j = MAX_PHASE; j >= 0; j--) {
1691 if (monitor_card_cd(chip, SD_CARD) == CD_NOT_EXIST) {
1692 sd_set_reset_fail(chip, SD_RESET_FAIL);
1693 TRACE_RET(chip, STATUS_FAIL);
1694 }
1695
1696 retval = tuning_cmd(chip, (u8) j);
1697 if (retval == STATUS_SUCCESS)
1698 raw_phase_map[i] |= 1 << j;
1699 else
1700 RTS51X_DEBUGP("Tuning phase %d fail\n", j);
1701 }
1702 }
1703
1704 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1705 for (i = 0; i < 3; i++)
1706 RTS51X_DEBUGP("TX raw_phase_map[%d] = 0x%04x\n", i,
1707 raw_phase_map[i]);
1708 RTS51X_DEBUGP("TX phase_map = 0x%04x\n", phase_map);
1709
1710 final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
1711 if (final_phase == 0xFF)
1712 TRACE_RET(chip, STATUS_FAIL);
1713
1714 retval = tuning_cmd(chip, final_phase);
1715 if (retval != STATUS_SUCCESS)
1716 TRACE_RET(chip, retval);
1717
1718 return STATUS_SUCCESS;
1719}
1720
1721static int sd_sdr_tuning(struct rts51x_chip *chip)
1722{
1723 int retval;
1724
1725 retval = sd_tuning_tx(chip);
1726 if (retval != STATUS_SUCCESS)
1727 TRACE_RET(chip, retval);
1728
1729 retval = sd_tuning_rx(chip);
1730 if (retval != STATUS_SUCCESS)
1731 TRACE_RET(chip, retval);
1732
1733 return STATUS_SUCCESS;
1734}
1735
1736static int sd_ddr_tuning(struct rts51x_chip *chip)
1737{
1738 int retval;
1739
1740 if (!(chip->option.sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
1741 retval = sd_ddr_pre_tuning_tx(chip);
1742 if (retval != STATUS_SUCCESS)
1743 TRACE_RET(chip, retval);
1744 } else {
1745 retval =
1746 sd_change_phase(chip, (u8) chip->option.sd_ddr_tx_phase,
1747 TUNE_TX);
1748 if (retval != STATUS_SUCCESS)
1749 TRACE_RET(chip, retval);
1750 }
1751
1752 retval = sd_tuning_rx(chip);
1753 if (retval != STATUS_SUCCESS)
1754 TRACE_RET(chip, retval);
1755
1756 if (!(chip->option.sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
1757 retval = sd_tuning_tx(chip);
1758 if (retval != STATUS_SUCCESS)
1759 TRACE_RET(chip, retval);
1760 }
1761
1762 return STATUS_SUCCESS;
1763}
1764
1765static int mmc_ddr_tuning(struct rts51x_chip *chip)
1766{
1767 int retval;
1768
1769 if (!(chip->option.sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
1770 retval = sd_ddr_pre_tuning_tx(chip);
1771 if (retval != STATUS_SUCCESS)
1772 TRACE_RET(chip, retval);
1773 } else {
1774 retval =
1775 sd_change_phase(chip, (u8) chip->option.mmc_ddr_tx_phase,
1776 TUNE_TX);
1777 if (retval != STATUS_SUCCESS)
1778 TRACE_RET(chip, retval);
1779 }
1780
1781 retval = sd_tuning_rx(chip);
1782 if (retval != STATUS_SUCCESS)
1783 TRACE_RET(chip, retval);
1784
1785 if (!(chip->option.sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
1786 retval = sd_tuning_tx(chip);
1787 if (retval != STATUS_SUCCESS)
1788 TRACE_RET(chip, retval);
1789 }
1790
1791 return STATUS_SUCCESS;
1792}
1793
1794int sd_switch_clock(struct rts51x_chip *chip)
1795{
1796 struct sd_info *sd_card = &(chip->sd_card);
1797 int retval;
1798 int re_tuning = 0;
1799
1800 retval = rts51x_select_card(chip, SD_CARD);
1801 if (retval != STATUS_SUCCESS)
1802 TRACE_RET(chip, retval);
1803
1804 if (CHK_SD30_SPEED(sd_card) || CHK_MMC_DDR52(sd_card)) {
1805 if (sd_card->sd_clock != chip->cur_clk)
1806 re_tuning = 1;
1807 }
1808
1809 retval = switch_clock(chip, sd_card->sd_clock);
1810 if (retval != STATUS_SUCCESS)
1811 TRACE_RET(chip, retval);
1812
1813 if (re_tuning) {
1814 if (CHK_SD(sd_card)) {
1815 if (CHK_SD_DDR50(sd_card))
1816 retval = sd_ddr_tuning(chip);
1817 else
1818 retval = sd_sdr_tuning(chip);
1819 } else {
1820 if (CHK_MMC_DDR52(sd_card))
1821 retval = mmc_ddr_tuning(chip);
1822 }
1823
1824 if (retval != STATUS_SUCCESS)
1825 TRACE_RET(chip, retval);
1826 }
1827
1828 return STATUS_SUCCESS;
1829}
1830
1831static int sd_prepare_reset(struct rts51x_chip *chip)
1832{
1833 struct sd_info *sd_card = &(chip->sd_card);
1834 int retval;
1835
1836 if (chip->asic_code)
1837 sd_card->sd_clock = 29;
1838 else
1839 sd_card->sd_clock = CLK_30;
1840
1841 /* Set SD Clocks */
1842 retval = sd_set_init_para(chip);
1843 if (retval != STATUS_SUCCESS)
1844 TRACE_RET(chip, retval);
1845
1846 rts51x_init_cmd(chip);
1847
1848 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG1, 0xFF,
1849 SD_CLK_DIVIDE_128 | SD_20_MODE | SD_BUS_WIDTH_1);
1850 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_SAMPLE_POINT_CTL, 0xFF,
1851 SD20_RX_POS_EDGE);
1852 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_PUSH_POINT_CTL, 0xFF, 0);
1853
1854 retval = rts51x_send_cmd(chip, MODE_C, 100);
1855 if (retval != STATUS_SUCCESS)
1856 TRACE_RET(chip, retval);
1857
1858 retval = rts51x_select_card(chip, SD_CARD);
1859 if (retval != STATUS_SUCCESS)
1860 TRACE_RET(chip, retval);
1861
1862 return STATUS_SUCCESS;
1863}
1864
1865static void sd_pull_ctl_disable(struct rts51x_chip *chip)
1866{
1867 if (CHECK_PKG(chip, LQFP48)) {
1868 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 0x55);
1869 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 0x55);
1870 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 0x95);
1871 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF, 0x55);
1872 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF, 0x55);
1873 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF, 0xA5);
1874 } else {
1875 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 0x65);
1876 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 0x55);
1877 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 0x95);
1878 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF, 0x55);
1879 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF, 0x56);
1880 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF, 0x59);
1881 }
1882}
1883
1884static void sd_pull_ctl_enable(struct rts51x_chip *chip)
1885{
1886 if (CHECK_PKG(chip, LQFP48)) {
1887 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 0xAA);
1888 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 0xAA);
1889 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 0xA9);
1890 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF, 0x55);
1891 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF, 0x55);
1892 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF, 0xA5);
1893 } else {
1894 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF, 0xA5);
1895 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF, 0x9A);
1896 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF, 0xA5);
1897 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF, 0x9A);
1898 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF, 0x65);
1899 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF, 0x5A);
1900 }
1901}
1902
1903static int sd_init_power(struct rts51x_chip *chip)
1904{
1905 int retval;
1906
1907 rts51x_init_cmd(chip);
1908
1909 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, LDO3318_PWR_MASK,
1910 LDO_ON);
1911 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_PAD_CTL, SD_IO_USING_1V8,
1912 SD_IO_USING_3V3);
1913 if (chip->asic_code)
1914 rts51x_add_cmd(chip, WRITE_REG_CMD, LDO_POWER_CFG,
1915 TUNE_SD18_MASK, TUNE_SD18_3V3);
1916 if (chip->asic_code)
1917 sd_pull_ctl_disable(chip);
1918 else
1919 rts51x_add_cmd(chip, WRITE_REG_CMD, FPGA_PULL_CTL,
1920 FPGA_SD_PULL_CTL_BIT | 0x20,
1921 FPGA_SD_PULL_CTL_BIT);
1922 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_OE, SD_OUTPUT_EN, 0);
1923 if (!chip->option.FT2_fast_mode)
1924 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, POWER_MASK,
1925 POWER_OFF);
1926
1927 retval = rts51x_send_cmd(chip, MODE_C, 100);
1928 if (retval != STATUS_SUCCESS)
1929 TRACE_RET(chip, retval);
1930 if (!chip->option.FT2_fast_mode) {
1931#ifdef SD_XD_IO_FOLLOW_PWR
1932 if (CHECK_PKG(chip, LQFP48)
1933 || chip->option.rts5129_D3318_off_enable)
1934 rts51x_write_register(chip, CARD_PWR_CTL,
1935 LDO_OFF, LDO_OFF);
1936#endif
1937 wait_timeout(250);
1938
1939#ifdef SD_XD_IO_FOLLOW_PWR
1940 if (CHECK_PKG(chip, LQFP48)
1941 || chip->option.rts5129_D3318_off_enable) {
1942 rts51x_init_cmd(chip);
1943 if (chip->asic_code)
1944 sd_pull_ctl_enable(chip);
1945 else
1946 rts51x_add_cmd(chip, WRITE_REG_CMD,
1947 FPGA_PULL_CTL,
1948 FPGA_SD_PULL_CTL_BIT | 0x20, 0);
1949 retval = rts51x_send_cmd(chip, MODE_C, 100);
1950 if (retval != STATUS_SUCCESS)
1951 TRACE_RET(chip, retval);
1952 } else {
1953 if (chip->asic_code)
1954 rts51x_write_register(chip, CARD_PULL_CTL6,
1955 0x03, 0x00);
1956 }
1957#endif
1958
1959 /* Power on card */
1960 retval = card_power_on(chip, SD_CARD);
1961 if (retval != STATUS_SUCCESS)
1962 TRACE_RET(chip, retval);
1963
1964 wait_timeout(260);
1965
1966#ifdef SUPPORT_OCP
1967 rts51x_get_card_status(chip, &(chip->card_status));
1968 chip->ocp_stat = (chip->card_status >> 4) & 0x03;
1969
1970 if (chip->ocp_stat & (MS_OCP_NOW | MS_OCP_EVER)) {
1971 RTS51X_DEBUGP("Over current, OCPSTAT is 0x%x\n",
1972 chip->ocp_stat);
1973 TRACE_RET(chip, STATUS_FAIL);
1974 }
1975#endif
1976 }
1977
1978 rts51x_init_cmd(chip);
1979 if (chip->asic_code) {
1980 sd_pull_ctl_enable(chip);
1981 } else {
1982 rts51x_add_cmd(chip, WRITE_REG_CMD, FPGA_PULL_CTL,
1983 FPGA_SD_PULL_CTL_BIT | 0x20, 0);
1984 }
1985 retval = rts51x_send_cmd(chip, MODE_C, 100);
1986 if (retval != STATUS_SUCCESS)
1987 TRACE_RET(chip, retval);
1988#ifdef SD_XD_IO_FOLLOW_PWR
1989 rts51x_write_register(chip, CARD_INT_PEND, XD_INT | MS_INT | SD_INT,
1990 XD_INT | MS_INT | SD_INT);
1991#endif
1992
1993 RTS51X_WRITE_REG(chip, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN);
1994
1995 return STATUS_SUCCESS;
1996}
1997
1998static int sd_dummy_clock(struct rts51x_chip *chip)
1999{
2000 RTS51X_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN, SD_CLK_TOGGLE_EN);
2001 wait_timeout(5);
2002 RTS51X_WRITE_REG(chip, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 0x00);
2003
2004 return STATUS_SUCCESS;
2005}
2006
2007int reset_sd(struct rts51x_chip *chip)
2008{
2009 struct sd_info *sd_card = &(chip->sd_card);
2010 int retval, i = 0, j = 0, k = 0, hi_cap_flow = 0;
2011 int sd_dont_switch = 0;
2012 int support_1v8 = 0;
2013 u8 rsp[16];
2014 u8 switch_bus_width;
2015 u32 voltage = 0;
2016 u8 cmd[5], buf[64];
2017 u16 sd_card_type;
2018
2019 SET_SD(sd_card);
2020 CLR_RETRY_SD20_MODE(sd_card);
2021Switch_Fail:
2022 i = 0;
2023 j = 0;
2024 k = 0;
2025 hi_cap_flow = 0;
2026 support_1v8 = 0;
2027#ifdef SUPPORT_SD_LOCK
2028 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
2029 goto SD_UNLOCK_ENTRY;
2030#endif
2031
2032 retval = sd_prepare_reset(chip);
2033 if (retval != STATUS_SUCCESS)
2034 TRACE_RET(chip, retval);
2035
2036 sd_dummy_clock(chip);
2037
2038 /* Start Initialization Process of SD Card */
2039RTY_SD_RST:
2040 retval =
2041 sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0, NULL,
2042 0);
2043 if (retval != STATUS_SUCCESS)
2044 TRACE_RET(chip, retval);
2045
2046 wait_timeout(20);
2047
2048 retval =
2049 sd_send_cmd_get_rsp(chip, SEND_IF_COND, 0x000001AA, SD_RSP_TYPE_R7,
2050 rsp, 5);
2051 if (retval == STATUS_SUCCESS) {
2052 if ((rsp[4] == 0xAA) && ((rsp[3] & 0x0f) == 0x01)) {
2053 hi_cap_flow = 1;
2054 if (CHK_RETRY_SD20_MODE(sd_card)) {
2055 voltage =
2056 SUPPORT_VOLTAGE |
2057 SUPPORT_HIGH_AND_EXTENDED_CAPACITY;
2058 } else {
2059 voltage =
2060 SUPPORT_VOLTAGE |
2061 SUPPORT_HIGH_AND_EXTENDED_CAPACITY |
2062 SUPPORT_MAX_POWER_PERMANCE | SUPPORT_1V8;
2063 }
2064 }
2065 }
2066
2067 if (!hi_cap_flow) {
2068 voltage = SUPPORT_VOLTAGE;
2069
2070 retval =
2071 sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
2072 NULL, 0);
2073 if (retval != STATUS_SUCCESS)
2074 TRACE_RET(chip, retval);
2075 wait_timeout(20);
2076 }
2077
2078 /* ACMD41 */
2079 do {
2080 {
2081 u8 temp = 0;
2082 rts51x_read_register(chip, CARD_INT_PEND, &temp);
2083 RTS51X_DEBUGP("CARD_INT_PEND:%x\n", temp);
2084 if (temp & SD_INT) {
2085 chip->reset_need_retry = 1;
2086 rts51x_write_register(chip, CARD_INT_PEND,
2087 XD_INT | SD_INT | MS_INT,
2088 XD_INT | SD_INT | MS_INT);
2089 sd_set_reset_fail(chip, SD_RESET_FAIL);
2090 TRACE_RET(chip, STATUS_FAIL);
2091 }
2092 }
2093
2094RTY_CMD55:
2095 retval =
2096 sd_send_cmd_get_rsp(chip, APP_CMD, 0, SD_RSP_TYPE_R1, NULL,
2097 0);
2098 if (retval != STATUS_SUCCESS) {
2099 if (monitor_card_cd(chip, SD_CARD) == CD_NOT_EXIST) {
2100 sd_set_reset_fail(chip, SD_RESET_FAIL);
2101 TRACE_RET(chip, STATUS_FAIL);
2102 }
2103
2104 j++;
2105 if (chip->option.speed_mmc) {
2106 if (j < 2)
2107 goto RTY_CMD55;
2108 else
2109 TRACE_RET(chip, STATUS_FAIL);
2110 } else {
2111 if (j < 3)
2112 goto RTY_SD_RST;
2113 else
2114 TRACE_RET(chip, STATUS_FAIL);
2115 }
2116 }
2117
2118 retval =
2119 sd_send_cmd_get_rsp(chip, SD_APP_OP_COND, voltage,
2120 SD_RSP_TYPE_R3, rsp, 5);
2121 if (retval != STATUS_SUCCESS) {
2122 k++;
2123 if (k < 3)
2124 goto RTY_SD_RST;
2125 else
2126 TRACE_RET(chip, STATUS_FAIL);
2127 }
2128
2129 i++;
2130 wait_timeout(20);
2131 } while (!(rsp[1] & 0x80) && (i < 255)); /* Not complete power on */
2132
2133 if (i == 255) {
2134 /* Time out */
2135 TRACE_RET(chip, STATUS_FAIL);
2136 }
2137
2138 if (hi_cap_flow) {
2139 if (rsp[1] & 0x40)
2140 SET_SD_HCXC(sd_card);
2141 else
2142 CLR_SD_HCXC(sd_card);
2143 if (!CHK_RETRY_SD20_MODE(sd_card)) {
2144 if ((CHK_SD_HCXC(sd_card)) && (CHECK_UHS50(chip))) {
2145 support_1v8 = (rsp[1] & 0x01) ? 1 : 0;
2146 RTS51X_DEBUGP("support_1v8 = %d\n",
2147 support_1v8);
2148 }
2149 }
2150 } else {
2151 CLR_SD_HCXC(sd_card);
2152 support_1v8 = 0;
2153 }
2154
2155 /* CMD11: Switch Voltage */
2156 if (support_1v8 && CHECK_UHS50(chip)
2157 && !(((u8) chip->option.sd_speed_prior & SDR104_SUPPORT) ==
2158 HS_SUPPORT)) {
2159 retval = sd_voltage_switch(chip);
2160 if (retval != STATUS_SUCCESS) {
2161 SET_RETRY_SD20_MODE(sd_card);
2162 sd_init_power(chip);
2163 RTS51X_DEBUGP("1.8v switch fail\n");
2164 goto Switch_Fail;
2165 }
2166 }
2167
2168 /* CMD 2 */
2169 retval =
2170 sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2, NULL, 0);
2171 if (retval != STATUS_SUCCESS)
2172 TRACE_RET(chip, retval);
2173
2174 /* CMD 3 */
2175 retval =
2176 sd_send_cmd_get_rsp(chip, SEND_RELATIVE_ADDR, 0, SD_RSP_TYPE_R6,
2177 rsp, 5);
2178 if (retval != STATUS_SUCCESS)
2179 TRACE_RET(chip, retval);
2180
2181 sd_card->sd_addr = (u32) rsp[1] << 24;
2182 sd_card->sd_addr += (u32) rsp[2] << 16;
2183
2184 /* Get CSD register for Calculating Timing,Capacity,
2185 * Check CSD to determaine as if this is the SD ROM card */
2186 retval = sd_check_csd(chip, 1);
2187 if (retval != STATUS_SUCCESS)
2188 TRACE_RET(chip, retval);
2189 /* Select SD card */
2190 retval = sd_select_card(chip, 1);
2191 if (retval != STATUS_SUCCESS)
2192 TRACE_RET(chip, retval);
2193#ifdef SUPPORT_SD_LOCK
2194SD_UNLOCK_ENTRY:
2195 /* Get SD lock status */
2196 retval = sd_update_lock_status(chip);
2197 if (retval != STATUS_SUCCESS)
2198 TRACE_RET(chip, STATUS_FAIL);
2199
2200 if (sd_card->sd_lock_status & SD_LOCKED) {
2201 sd_card->sd_lock_status |= (SD_LOCK_1BIT_MODE | SD_PWD_EXIST);
2202 return STATUS_SUCCESS;
2203 } else if (!(sd_card->sd_lock_status & SD_UNLOCK_POW_ON)) {
2204 sd_card->sd_lock_status &= ~SD_PWD_EXIST;
2205 }
2206#endif
2207
2208 /* ACMD42 */
2209 retval =
2210 sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr, SD_RSP_TYPE_R1,
2211 NULL, 0);
2212 if (retval != STATUS_SUCCESS)
2213 TRACE_RET(chip, retval);
2214
2215 retval =
2216 sd_send_cmd_get_rsp(chip, SET_CLR_CARD_DETECT, 0, SD_RSP_TYPE_R1,
2217 NULL, 0);
2218 if (retval != STATUS_SUCCESS)
2219 TRACE_RET(chip, retval);
2220
2221 if (support_1v8) {
2222 /* ACMD6 */
2223 retval =
2224 sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2225 SD_RSP_TYPE_R1, NULL, 0);
2226 if (retval != STATUS_SUCCESS)
2227 TRACE_RET(chip, retval);
2228 /* Enable 4 bit data bus */
2229 retval =
2230 sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2, SD_RSP_TYPE_R1,
2231 NULL, 0);
2232 if (retval != STATUS_SUCCESS)
2233 TRACE_RET(chip, retval);
2234 switch_bus_width = SD_BUS_WIDTH_4;
2235 } else {
2236 switch_bus_width = SD_BUS_WIDTH_1;
2237 }
2238
2239 /* Set block length 512 bytes for all block commands */
2240 retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN,
2241 0x200, SD_RSP_TYPE_R1, NULL, 0);
2242 if (retval != STATUS_SUCCESS)
2243 TRACE_RET(chip, retval);
2244
2245 RTS51X_WRITE_REG(chip, SD_CFG1, SD_CLK_DIVIDE_MASK, SD_CLK_DIVIDE_0);
2246
2247 if (!(sd_card->raw_csd[4] & 0x40)) {
2248 sd_dont_switch = 1;
2249 RTS51X_DEBUGP("Not support class ten\n");
2250 }
2251
2252 if (!sd_dont_switch) {
2253 /* Check the card whether flow SD1.1 spec or higher */
2254 retval = sd_check_spec(chip, switch_bus_width);
2255 if (retval == STATUS_SUCCESS) {
2256 retval = sd_switch_function(chip, switch_bus_width);
2257 if (retval != STATUS_SUCCESS) {
2258 if ((sd_card->sd_switch_fail ==
2259 SDR104_SUPPORT_MASK)
2260 || (sd_card->sd_switch_fail ==
2261 DDR50_SUPPORT_MASK)
2262 || (sd_card->sd_switch_fail ==
2263 SDR50_SUPPORT_MASK)) {
2264 sd_init_power(chip);
2265 SET_RETRY_SD20_MODE(sd_card);
2266 } else if (sd_card->sd_switch_fail ==
2267 HS_SUPPORT_MASK) {
2268 sd_dont_switch = 1;
2269 }
2270 goto Switch_Fail;
2271 }
2272 } else {
2273 if (support_1v8) {
2274 SET_RETRY_SD20_MODE(sd_card);
2275 sd_init_power(chip);
2276 sd_dont_switch = 1;
2277
2278 goto Switch_Fail;
2279 }
2280 }
2281 }
2282
2283 if (!support_1v8) {
2284 /* ACMD6 */
2285 retval =
2286 sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2287 SD_RSP_TYPE_R1, NULL, 0);
2288 if (retval != STATUS_SUCCESS)
2289 TRACE_RET(chip, retval);
2290 /* Enable 4 bit data bus */
2291 retval =
2292 sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2, SD_RSP_TYPE_R1,
2293 NULL, 0);
2294 if (retval != STATUS_SUCCESS)
2295 TRACE_RET(chip, retval);
2296 }
2297#ifdef SUPPORT_SD_LOCK
2298 /* clear 1 bit mode status */
2299 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2300#endif
2301
2302 if (CHK_SD30_SPEED(sd_card)) {
2303 rts51x_write_register(chip, SD30_DRIVE_SEL, SD30_DRIVE_MASK,
2304 0x03);
2305
2306 retval = sd_set_init_para(chip);
2307 if (retval != STATUS_SUCCESS)
2308 TRACE_RET(chip, retval);
2309
2310 if (CHK_SD_DDR50(sd_card))
2311 retval = sd_ddr_tuning(chip);
2312 else
2313 retval = sd_sdr_tuning(chip);
2314
2315 if (retval != STATUS_SUCCESS) {
2316 SET_RETRY_SD20_MODE(sd_card);
2317 RTS51X_DEBUGP("tuning phase fail,goto SD20 mode\n");
2318 sd_init_power(chip);
2319 CLR_SD30_SPEED(sd_card);
2320 goto Switch_Fail;
2321 }
2322 if (STATUS_SUCCESS ==
2323 sd_wait_currentstate_dataready(chip, 0x08, 1, 20)) {
2324 cmd[0] = 0x40 | READ_SINGLE_BLOCK;
2325 cmd[1] = 0x00;
2326 cmd[2] = 0x00;
2327 cmd[3] = 0x00;
2328 cmd[4] = 0x00;
2329 retval =
2330 sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 512,
2331 1, SD_BUS_WIDTH_4, NULL, 0, 600);
2332 if (retval != STATUS_SUCCESS) {
2333 SET_RETRY_SD20_MODE(sd_card);
2334 RTS51X_DEBUGP("read lba0 fail,"
2335 "goto SD20 mode\n");
2336 sd_init_power(chip);
2337 CLR_SD30_SPEED(sd_card);
2338 goto Switch_Fail;
2339 }
2340 }
2341 }
2342 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1,
2343 NULL, 0);
2344
2345 retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2346 SD_RSP_TYPE_R1, NULL, 0);
2347 if (retval == STATUS_SUCCESS) {
2348 int ret;
2349 cmd[0] = 0x40 | SEND_STATUS;
2350 cmd[1] = 0x00;
2351 cmd[2] = 0x00;
2352 cmd[3] = 0x00;
2353 cmd[4] = 0x00;
2354 ret =
2355 sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1,
2356 SD_BUS_WIDTH_4, buf, 64, 600);
2357 if (ret == STATUS_SUCCESS) {
2358 sd_card_type = ((u16) buf[2] << 8) | (u16) buf[3];
2359 RTS51X_DEBUGP("sd_card_type:0x%4x\n", sd_card_type);
2360 if ((sd_card_type == 0x0001)
2361 || (sd_card_type == 0x0002))
2362 chip->card_wp |= SD_CARD;
2363 } else {
2364 rts51x_clear_sd_error(chip);
2365 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2366 SD_RSP_TYPE_R1, NULL, 0);
2367 }
2368 } else {
2369 rts51x_clear_sd_error(chip);
2370 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2371 SD_RSP_TYPE_R1, NULL, 0);
2372 }
2373
2374 /* Check SD Machanical Write-Protect Switch */
2375 retval = rts51x_get_card_status(chip, &(chip->card_status));
2376 if (retval != STATUS_SUCCESS)
2377 TRACE_RET(chip, retval);
2378 if (chip->card_status & SD_WP)
2379 chip->card_wp |= SD_CARD;
2380
2381 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
2382
2383#ifdef SUPPORT_SD_LOCK
2384 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
2385 rts51x_init_cmd(chip);
2386
2387 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_H, 0xFF, 0x02);
2388 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_L, 0xFF, 0x00);
2389
2390 retval = rts51x_send_cmd(chip, MODE_C, 100);
2391 if (retval != STATUS_SUCCESS)
2392 TRACE_RET(chip, retval);
2393 }
2394#endif
2395
2396 return STATUS_SUCCESS;
2397}
2398
2399static int mmc_test_switch_bus(struct rts51x_chip *chip, u8 width)
2400{
2401 struct sd_info *sd_card = &(chip->sd_card);
2402 int retval;
2403 u8 buf[8] = { 0 }, bus_width;
2404 u16 byte_cnt;
2405 int len;
2406
2407 retval =
2408 sd_send_cmd_get_rsp(chip, BUSTEST_W, 0, SD_RSP_TYPE_R1, NULL, 0);
2409 if (retval != STATUS_SUCCESS)
2410 TRACE_RET(chip, retval);
2411
2412 if (width == MMC_8BIT_BUS) {
2413 buf[0] = 0x55;
2414 buf[1] = 0xAA;
2415 len = 8;
2416 byte_cnt = 8;
2417 bus_width = SD_BUS_WIDTH_8;
2418 } else {
2419 buf[0] = 0x5A;
2420 len = 4;
2421 byte_cnt = 4;
2422 bus_width = SD_BUS_WIDTH_4;
2423 }
2424
2425 retval = sd_write_data(chip, SD_TM_AUTO_WRITE_3,
2426 NULL, 0, byte_cnt, 1, bus_width, buf, len, 100);
2427 if (retval != STATUS_SUCCESS) {
2428 u8 val1 = 0, val2 = 0;
2429 rts51x_ep0_read_register(chip, SD_STAT1, &val1);
2430 rts51x_ep0_read_register(chip, SD_STAT2, &val2);
2431 rts51x_clear_sd_error(chip);
2432 if ((val1 & 0xE0) || val2)
2433 TRACE_RET(chip, STATUS_FAIL);
2434 }
2435 RTS51X_DEBUGP("SD/MMC CMD %d\n", BUSTEST_R);
2436
2437 rts51x_init_cmd(chip);
2438
2439 /* CMD14 */
2440 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD0, 0xFF, 0x40 | BUSTEST_R);
2441
2442 if (width == MMC_8BIT_BUS)
2443 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_L, 0xFF, 0x08);
2444 else
2445 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_L, 0xFF, 0x04);
2446
2447 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_L, 0xFF, 1);
2448 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_H, 0xFF, 0);
2449
2450 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG2, 0xFF,
2451 SD_CALCULATE_CRC7 | SD_NO_CHECK_CRC16 |
2452 SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 | SD_RSP_LEN_6);
2453 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
2454 PINGPONG_BUFFER);
2455 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
2456 SD_TM_NORMAL_READ | SD_TRANSFER_START);
2457 rts51x_add_cmd(chip, CHECK_REG_CMD, SD_TRANSFER, SD_TRANSFER_END,
2458 SD_TRANSFER_END);
2459
2460 rts51x_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2, 0, 0);
2461 if (width == MMC_8BIT_BUS) {
2462 len = 3;
2463 rts51x_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 1, 0, 0);
2464 } else {
2465 len = 2;
2466 }
2467
2468 retval = rts51x_send_cmd(chip, MODE_CR, 100);
2469 if (retval != STATUS_SUCCESS)
2470 TRACE_RET(chip, retval);
2471
2472 retval = rts51x_get_rsp(chip, len, 100);
2473 if (CHECK_SD_TRANS_FAIL(chip, retval)) {
2474 rts51x_clear_sd_error(chip);
2475 TRACE_RET(chip, STATUS_FAIL);
2476 }
2477
2478 rts51x_read_rsp_buf(chip, 1, buf, 2);
2479
2480 if (width == MMC_8BIT_BUS) {
2481 RTS51X_DEBUGP("BUSTEST_R [8bits]: 0x%02x 0x%02x\n",
2482 buf[0], buf[1]);
2483 if ((buf[0] == 0xAA) && (buf[1] == 0x55)) {
2484 u8 rsp[5];
2485 u32 arg;
2486
2487 if (CHK_MMC_DDR52(sd_card))
2488 arg = 0x03B70600;
2489 else
2490 arg = 0x03B70200;
2491 /* Switch MMC to 8-bit mode */
2492 retval =
2493 sd_send_cmd_get_rsp(chip, SWITCH, arg,
2494 SD_RSP_TYPE_R1b, rsp, 5);
2495 if ((retval == STATUS_SUCCESS)
2496 && !(rsp[4] & MMC_SWITCH_ERR))
2497 return STATUS_SUCCESS;
2498 }
2499 } else {
2500 RTS51X_DEBUGP("BUSTEST_R [4bits]: 0x%02x\n", buf[0]);
2501 if (buf[0] == 0xA5) {
2502 u8 rsp[5];
2503 u32 arg;
2504
2505 if (CHK_MMC_DDR52(sd_card))
2506 arg = 0x03B70500;
2507 else
2508 arg = 0x03B70100;
2509 /* Switch MMC to 4-bit mode */
2510 retval =
2511 sd_send_cmd_get_rsp(chip, SWITCH, arg,
2512 SD_RSP_TYPE_R1b, rsp, 5);
2513 if ((retval == STATUS_SUCCESS)
2514 && !(rsp[4] & MMC_SWITCH_ERR))
2515 return STATUS_SUCCESS;
2516 }
2517 }
2518
2519 TRACE_RET(chip, STATUS_FAIL);
2520}
2521
2522static int mmc_switch_timing_bus(struct rts51x_chip *chip)
2523{
2524 struct sd_info *sd_card = &(chip->sd_card);
2525 int retval;
2526 u8 card_type, card_type_mask = 0;
2527 u8 buf[6];
2528
2529 CLR_MMC_HS(sd_card);
2530
2531 RTS51X_DEBUGP("SD/MMC CMD %d\n", SEND_EXT_CSD);
2532
2533 rts51x_init_cmd(chip);
2534
2535 /* SEND_EXT_CSD command */
2536 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD0, 0xFF,
2537 0x40 | SEND_EXT_CSD);
2538 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD1, 0xFF, 0);
2539 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD2, 0xFF, 0);
2540 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD3, 0xFF, 0);
2541 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD4, 0xFF, 0);
2542
2543 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_L, 0xFF, 0);
2544 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_H, 0xFF, 2);
2545 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_L, 0xFF, 1);
2546 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_H, 0xFF, 0);
2547
2548 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG2, 0xFF,
2549 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END
2550 | SD_CHECK_CRC7 | SD_RSP_LEN_6);
2551 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
2552 PINGPONG_BUFFER);
2553 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
2554 SD_TM_NORMAL_READ | SD_TRANSFER_START);
2555 rts51x_add_cmd(chip, CHECK_REG_CMD, SD_TRANSFER, SD_TRANSFER_END,
2556 SD_TRANSFER_END);
2557
2558 rts51x_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 196, 0xFF, 0);
2559 rts51x_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 212, 0xFF, 0);
2560 rts51x_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 213, 0xFF, 0);
2561 rts51x_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 214, 0xFF, 0);
2562 rts51x_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 215, 0xFF, 0);
2563
2564 retval = rts51x_send_cmd(chip, MODE_CR, 100);
2565 if (retval != STATUS_SUCCESS)
2566 TRACE_RET(chip, retval);
2567
2568 retval = rts51x_get_rsp(chip, 6, 1000);
2569
2570 if (CHECK_SD_TRANS_FAIL(chip, retval)) {
2571 if (retval == STATUS_TIMEDOUT) {
2572 rts51x_clear_sd_error(chip);
2573 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2574 SD_RSP_TYPE_R1, NULL, 0);
2575 }
2576 TRACE_RET(chip, STATUS_FAIL);
2577 }
2578
2579 rts51x_read_rsp_buf(chip, 0, buf, 6);
2580
2581 if (buf[0] & SD_TRANSFER_ERR) {
2582 sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2583 SD_RSP_TYPE_R1, NULL, 0);
2584 TRACE_RET(chip, STATUS_FAIL);
2585 }
2586 if (CHK_MMC_SECTOR_MODE(sd_card))
2587 sd_card->capacity =
2588 ((u32) buf[5] << 24) | ((u32) buf[4] << 16) |
2589 ((u32) buf[3] << 8) | ((u32) buf[2]);
2590#ifdef SUPPORT_SD_LOCK
2591 if (!(sd_card->sd_lock_status & SD_SDR_RST) && CHECK_UHS50(chip))
2592 card_type_mask = 0x07;
2593 else
2594 card_type_mask = 0x03;
2595#else
2596 if (CHECK_UHS50(chip))
2597 card_type_mask = 0x07;
2598 else
2599 card_type_mask = 0x03;
2600#endif
2601
2602 card_type = buf[1] & card_type_mask;
2603 if (card_type) {
2604 /* CARD TYPE FIELD = DDR52MHz, 52MHz or 26MHz */
2605 u8 rsp[5];
2606
2607 if (card_type & 0x04)
2608 SET_MMC_DDR52(sd_card);
2609 else if (card_type & 0x02)
2610 SET_MMC_52M(sd_card);
2611 else
2612 SET_MMC_26M(sd_card);
2613
2614 retval =
2615 sd_send_cmd_get_rsp(chip, SWITCH, 0x03B90100,
2616 SD_RSP_TYPE_R1b, rsp, 5);
2617 if ((retval != STATUS_SUCCESS) || (rsp[4] & MMC_SWITCH_ERR))
2618 CLR_MMC_HS(sd_card);
2619 }
2620 sd_choose_proper_clock(chip);
2621 retval = switch_clock(chip, sd_card->sd_clock);
2622 if (retval != STATUS_SUCCESS)
2623 TRACE_RET(chip, retval);
2624
2625 /* Test Bus Procedure */
2626 if (mmc_test_switch_bus(chip, MMC_8BIT_BUS) == STATUS_SUCCESS) {
2627 SET_MMC_8BIT(sd_card);
2628 chip->card_bus_width[chip->card2lun[SD_CARD]] = 8;
2629#ifdef SUPPORT_SD_LOCK
2630 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2631#endif
2632 } else if (mmc_test_switch_bus(chip, MMC_4BIT_BUS) == STATUS_SUCCESS) {
2633 SET_MMC_4BIT(sd_card);
2634 chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
2635#ifdef SUPPORT_SD_LOCK
2636 sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2637#endif
2638 } else {
2639 CLR_MMC_8BIT(sd_card);
2640 CLR_MMC_4BIT(sd_card);
2641 }
2642
2643 return STATUS_SUCCESS;
2644}
2645
2646static int reset_mmc(struct rts51x_chip *chip)
2647{
2648 struct sd_info *sd_card = &(chip->sd_card);
2649 int retval, i = 0, j = 0, k = 0;
2650 u8 rsp[16];
2651 u8 spec_ver = 0;
2652 u8 change_to_ddr52 = 1;
2653 u8 cmd[5];
2654
2655#ifdef SUPPORT_SD_LOCK
2656 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
2657 goto MMC_UNLOCK_ENTRY;
2658#endif
2659
2660MMC_DDR_FAIL:
2661
2662 retval = sd_prepare_reset(chip);
2663 if (retval != STATUS_SUCCESS)
2664 TRACE_RET(chip, retval);
2665
2666 SET_MMC(sd_card);
2667
2668RTY_MMC_RST:
2669 retval =
2670 sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0, NULL,
2671 0);
2672 if (retval != STATUS_SUCCESS)
2673 TRACE_RET(chip, retval);
2674
2675 do {
2676 {
2677 u8 temp = 0;
2678 rts51x_read_register(chip, CARD_INT_PEND, &temp);
2679 if (temp & SD_INT) {
2680 chip->reset_need_retry = 1;
2681 rts51x_write_register(chip, CARD_INT_PEND,
2682 XD_INT | SD_INT | MS_INT,
2683 XD_INT | SD_INT | MS_INT);
2684 sd_set_reset_fail(chip, MMC_RESET_FAIL);
2685 TRACE_RET(chip, STATUS_FAIL);
2686 }
2687 }
2688
2689 /* CMD 1 */
2690 retval = sd_send_cmd_get_rsp(chip, SEND_OP_COND,
2691 (SUPPORT_VOLTAGE | 0x40000000),
2692 SD_RSP_TYPE_R3, rsp, 5);
2693 if (retval != STATUS_SUCCESS) {
2694 if (monitor_card_cd(chip, SD_CARD) == CD_NOT_EXIST) {
2695 sd_set_reset_fail(chip, MMC_RESET_FAIL);
2696 TRACE_RET(chip, STATUS_FAIL);
2697 }
2698
2699 if (sd_check_err_code(chip, SD_BUSY)
2700 || sd_check_err_code(chip, SD_TO_ERR)) {
2701 k++;
2702 if (k < 20) {
2703 sd_clr_err_code(chip);
2704 goto RTY_MMC_RST;
2705 } else {
2706 TRACE_RET(chip, STATUS_FAIL);
2707 }
2708 } else {
2709 j++;
2710 if (j < 100) {
2711 sd_clr_err_code(chip);
2712 goto RTY_MMC_RST;
2713 } else {
2714 TRACE_RET(chip, STATUS_FAIL);
2715 }
2716 }
2717 }
2718
2719 wait_timeout(20);
2720 i++;
2721 } while (!(rsp[1] & 0x80) && (i < 100)); /* Not complete power on */
2722
2723 if (i == 100) {
2724 /* Time out */
2725 TRACE_RET(chip, STATUS_FAIL);
2726 }
2727
2728 if ((rsp[1] & 0x60) == 0x40)
2729 SET_MMC_SECTOR_MODE(sd_card);
2730 else
2731 CLR_MMC_SECTOR_MODE(sd_card);
2732
2733 /* CMD 2 */
2734 retval =
2735 sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2, NULL, 0);
2736 if (retval != STATUS_SUCCESS)
2737 TRACE_RET(chip, retval);
2738
2739 /* CMD 3 */
2740 sd_card->sd_addr = 0x00100000;
2741 retval =
2742 sd_send_cmd_get_rsp(chip, SET_RELATIVE_ADDR, sd_card->sd_addr,
2743 SD_RSP_TYPE_R6, rsp, 5);
2744 if (retval != STATUS_SUCCESS)
2745 TRACE_RET(chip, retval);
2746
2747 /* Get CSD register for Calculating Timing,Capacity
2748 * Check CSD to determaine as if this is the SD ROM card */
2749 retval = sd_check_csd(chip, 1);
2750 if (retval != STATUS_SUCCESS)
2751 TRACE_RET(chip, retval);
2752 /* Get MMC Spec_Ver in the CSD register */
2753 spec_ver = (sd_card->raw_csd[0] & 0x3C) >> 2;
2754
2755 /* Select MMC card */
2756 retval = sd_select_card(chip, 1);
2757 if (retval != STATUS_SUCCESS)
2758 TRACE_RET(chip, retval);
2759
2760 /* Set block length 512 bytes for all block commands */
2761 retval =
2762 sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1, NULL,
2763 0);
2764 if (retval != STATUS_SUCCESS)
2765 TRACE_RET(chip, retval);
2766#ifdef SUPPORT_SD_LOCK
2767MMC_UNLOCK_ENTRY:
2768 /* Get SD lock status */
2769 retval = sd_update_lock_status(chip);
2770 if (retval != STATUS_SUCCESS)
2771 TRACE_RET(chip, STATUS_FAIL);
2772#endif
2773
2774 RTS51X_WRITE_REG(chip, SD_CFG1, SD_CLK_DIVIDE_MASK, SD_CLK_DIVIDE_0);
2775
2776 if (chip->ic_version < 2)
2777 rts51x_write_register(chip, SD30_DRIVE_SEL, SD30_DRIVE_MASK,
2778 0x02);
2779 rts51x_write_register(chip, CARD_DRIVE_SEL, SD20_DRIVE_MASK, DRIVE_8mA);
2780
2781 chip->card_bus_width[chip->card2lun[SD_CARD]] = 1;
2782 if (spec_ver == 4) {
2783 /* MMC 4.x Cards */
2784 (void)mmc_switch_timing_bus(chip);
2785 }
2786
2787 if (CHK_MMC_SECTOR_MODE(sd_card) && (sd_card->capacity == 0))
2788 TRACE_RET(chip, STATUS_FAIL);
2789
2790 if (CHK_MMC_DDR52(sd_card) && change_to_ddr52) {
2791 /* Card is extracted while identifying */
2792 if (monitor_card_cd(chip, SD_CARD) == CD_NOT_EXIST)
2793 TRACE_RET(chip, STATUS_FAIL);
2794
2795 retval = sd_set_init_para(chip);
2796 if (retval != STATUS_SUCCESS) {
2797 CLR_MMC_DDR52(sd_card);
2798 sd_init_power(chip);
2799 change_to_ddr52 = 0;
2800 goto MMC_DDR_FAIL;
2801 }
2802
2803 retval = mmc_ddr_tuning(chip);
2804 if (retval != STATUS_SUCCESS) {
2805 CLR_MMC_DDR52(sd_card);
2806 sd_init_power(chip);
2807 change_to_ddr52 = 0;
2808 goto MMC_DDR_FAIL;
2809 }
2810
2811 if (STATUS_SUCCESS ==
2812 sd_wait_currentstate_dataready(chip, 0x08, 1, 20)) {
2813 cmd[0] = 0x40 | READ_SINGLE_BLOCK;
2814 cmd[1] = 0x00;
2815 cmd[2] = 0x00;
2816 cmd[3] = 0x00;
2817 cmd[4] = 0x00;
2818 if (CHK_MMC_8BIT(sd_card)) {
2819 retval =
2820 sd_read_data(chip, SD_TM_NORMAL_READ, cmd,
2821 5, 512, 1, SD_BUS_WIDTH_8,
2822 NULL, 0, 600);
2823 } else if (CHK_MMC_4BIT(sd_card)) {
2824 retval =
2825 sd_read_data(chip, SD_TM_NORMAL_READ, cmd,
2826 5, 512, 1, SD_BUS_WIDTH_4,
2827 NULL, 0, 600);
2828 } else {
2829 retval =
2830 sd_read_data(chip, SD_TM_NORMAL_READ, cmd,
2831 5, 512, 1, SD_BUS_WIDTH_1,
2832 NULL, 0, 600);
2833 }
2834
2835 if (retval != STATUS_SUCCESS) {
2836 CLR_MMC_DDR52(sd_card);
2837 change_to_ddr52 = 0;
2838 RTS51X_DEBUGP("read lba0 fail,"
2839 "goto SD20 mode\n");
2840 sd_init_power(chip);
2841 goto MMC_DDR_FAIL;
2842 }
2843 }
2844 }
2845#ifdef SUPPORT_SD_LOCK
2846 if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
2847 rts51x_init_cmd(chip);
2848
2849 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_H, 0xFF, 0x02);
2850 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_L, 0xFF, 0x00);
2851
2852 retval = rts51x_send_cmd(chip, MODE_C, 100);
2853 if (retval != STATUS_SUCCESS)
2854 TRACE_RET(chip, retval);
2855 }
2856#endif
2857
2858 retval = rts51x_get_card_status(chip, &(chip->card_status));
2859 if (retval != STATUS_SUCCESS)
2860 TRACE_RET(chip, retval);
2861 if (chip->card_status & SD_WP)
2862 chip->card_wp |= SD_CARD;
2863
2864 return STATUS_SUCCESS;
2865}
2866
2867int reset_sd_card(struct rts51x_chip *chip)
2868{
2869 struct sd_info *sd_card = &(chip->sd_card);
2870 int retval;
2871 int i;
2872
2873 memset(sd_card, 0, sizeof(struct sd_info));
2874
2875 /* Init variables */
2876 sd_card->sd_type = 0;
2877 sd_card->seq_mode = 0;
2878 sd_card->sd_data_buf_ready = 0;
2879 sd_card->capacity = 0;
2880 sd_card->sd_switch_fail = 0;
2881
2882#ifdef SUPPORT_SD_LOCK
2883 sd_card->sd_lock_status = 0;
2884 sd_card->sd_erase_status = 0;
2885#endif
2886
2887 sd_clear_reset_fail(chip);
2888 enable_card_clock(chip, SD_CARD);
2889
2890 sd_init_power(chip);
2891
2892 chip->reset_need_retry = 0;
2893 for (i = 0; i < 3; i++) {
2894 if (!chip->option.reset_mmc_first) { /* reset sd first */
2895 retval = reset_sd(chip);
2896 if (retval != STATUS_SUCCESS) {
2897 /* Switch SD bus to 3V3 signal */
2898 RTS51X_WRITE_REG(chip, SD_PAD_CTL,
2899 SD_IO_USING_1V8, 0);
2900 if (sd_check_reset_fail(chip, SD_RESET_FAIL))
2901 sd_clear_reset_fail(chip);
2902 else
2903 retval = reset_mmc(chip);
2904 }
2905 } else { /* reset MMC first */
2906 retval = reset_mmc(chip);
2907 if (retval != STATUS_SUCCESS) {
2908 if (sd_check_reset_fail(chip, MMC_RESET_FAIL)) {
2909 sd_clear_reset_fail(chip);
2910 } else {
2911 retval = reset_sd(chip);
2912 if (retval != STATUS_SUCCESS) {
2913 /* Switch SD bus to
2914 * 3V3 signal */
2915 RTS51X_WRITE_REG(chip,
2916 SD_PAD_CTL,
2917 SD_IO_USING_1V8, 0);
2918 }
2919 }
2920 }
2921 }
2922
2923 if ((retval == STATUS_SUCCESS) || (!chip->reset_need_retry)) {
2924 /* if reset success or don't need retry,then break */
2925 break;
2926 }
2927 if (monitor_card_cd(chip, SD_CARD) == CD_NOT_EXIST) {
2928 /* card is extracted */
2929 break;
2930 }
2931 RTS51X_DEBUGP("retry reset sd card,%d\n", i);
2932 chip->reset_need_retry = 0;
2933 }
2934
2935 sd_clear_reset_fail(chip);
2936 chip->reset_need_retry = 0;
2937
2938 if (retval == STATUS_SUCCESS) {
2939 rts51x_init_cmd(chip);
2940 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG1, SD_CLK_DIVIDE_MASK,
2941 SD_CLK_DIVIDE_0);
2942 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_L, 0xFF, 0);
2943 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_H, 0xFF, 2);
2944 retval = rts51x_send_cmd(chip, MODE_C, 100);
2945 if (retval != STATUS_SUCCESS)
2946 TRACE_RET(chip, retval);
2947 } else {
2948 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity = 0;
2949 if (chip->option.reset_or_rw_fail_set_pad_drive) {
2950 rts51x_write_register(chip, CARD_DRIVE_SEL,
2951 SD20_DRIVE_MASK, DRIVE_8mA);
2952 }
2953 TRACE_RET(chip, STATUS_FAIL);
2954 }
2955
2956 chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
2957
2958 if (chip->option.sd_send_status_en) {
2959 sd_card->sd_send_status_en = 1;
2960 } else {
2961 if (sd_card->capacity > 0x20000) { /* 64MB */
2962 sd_card->sd_send_status_en = 0;
2963 } else {
2964 sd_card->sd_send_status_en = 1;
2965 }
2966 }
2967 RTS51X_DEBUGP("sd_card->sd_send_status = %d\n",
2968 sd_card->sd_send_status_en);
2969
2970 retval = sd_set_init_para(chip);
2971 if (retval != STATUS_SUCCESS)
2972 TRACE_RET(chip, retval);
2973
2974 RTS51X_DEBUGP("sd_card->sd_type = 0x%x\n", sd_card->sd_type);
2975
2976 return STATUS_SUCCESS;
2977}
2978
2979#define WAIT_DATA_READY_RTY_CNT 255
2980
2981static int wait_data_buf_ready(struct rts51x_chip *chip)
2982{
2983 struct sd_info *sd_card = &(chip->sd_card);
2984 int i, retval;
2985
2986 for (i = 0; i < WAIT_DATA_READY_RTY_CNT; i++) {
2987 if (monitor_card_cd(chip, SD_CARD) == CD_NOT_EXIST)
2988 TRACE_RET(chip, STATUS_FAIL);
2989
2990 sd_card->sd_data_buf_ready = 0;
2991
2992 retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
2993 sd_card->sd_addr, SD_RSP_TYPE_R1,
2994 NULL, 0);
2995 if (retval != STATUS_SUCCESS)
2996 TRACE_RET(chip, retval);
2997
2998 if (sd_card->sd_data_buf_ready)
2999 return sd_send_cmd_get_rsp(chip, SEND_STATUS,
3000 sd_card->sd_addr,
3001 SD_RSP_TYPE_R1, NULL, 0);
3002 }
3003
3004 sd_set_err_code(chip, SD_TO_ERR);
3005
3006 TRACE_RET(chip, STATUS_FAIL);
3007}
3008
3009void sd_stop_seq_mode(struct rts51x_chip *chip)
3010{
3011 struct sd_info *sd_card = &(chip->sd_card);
3012 int retval;
3013
3014 if (sd_card->seq_mode) {
3015 retval = sd_switch_clock(chip);
3016 if (retval != STATUS_SUCCESS)
3017 return;
3018
3019 retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3020 SD_RSP_TYPE_R1b, NULL, 0);
3021 if (retval != STATUS_SUCCESS)
3022 sd_set_err_code(chip, SD_STS_ERR);
3023 sd_card->seq_mode = 0;
3024
3025 rts51x_ep0_write_register(chip, MC_FIFO_CTL, FIFO_FLUSH,
3026 FIFO_FLUSH);
3027 }
3028}
3029
3030static inline int sd_auto_tune_clock(struct rts51x_chip *chip)
3031{
3032 struct sd_info *sd_card = &(chip->sd_card);
3033 int retval;
3034
3035 if (chip->asic_code) {
3036 if (sd_card->sd_clock > 30)
3037 sd_card->sd_clock -= 20;
3038 } else {
3039 if (sd_card->sd_clock == CLK_100)
3040 sd_card->sd_clock = CLK_80;
3041 else if (sd_card->sd_clock == CLK_80)
3042 sd_card->sd_clock = CLK_60;
3043 else if (sd_card->sd_clock == CLK_60)
3044 sd_card->sd_clock = CLK_50;
3045 }
3046
3047 retval = sd_switch_clock(chip);
3048 if (retval != STATUS_SUCCESS)
3049 TRACE_RET(chip, retval);
3050
3051 return STATUS_SUCCESS;
3052}
3053
3054int sd_rw(struct scsi_cmnd *srb, struct rts51x_chip *chip, u32 start_sector,
3055 u16 sector_cnt)
3056{
3057 struct sd_info *sd_card = &(chip->sd_card);
3058 u32 data_addr;
3059 int retval;
3060 u8 flag;
3061 unsigned int pipe;
3062 u8 stageflag;
3063
3064 sd_card->counter = 0;
3065
3066 if (!CHK_SD_HCXC(sd_card) && !CHK_MMC_SECTOR_MODE(sd_card))
3067 data_addr = start_sector << 9;
3068 else
3069 data_addr = start_sector;
3070
3071 RTS51X_DEBUGP("sd_rw, data_addr = 0x%x\n", data_addr);
3072
3073 sd_clr_err_code(chip);
3074
3075 retval = sd_switch_clock(chip);
3076 if (retval != STATUS_SUCCESS)
3077 TRACE_RET(chip, retval);
3078
3079 if (sd_card->seq_mode && ((sd_card->pre_dir != srb->sc_data_direction)
3080 ||
3081 ((sd_card->pre_sec_addr +
3082 sd_card->pre_sec_cnt) != start_sector))) {
3083 if ((sd_card->pre_dir == DMA_FROM_DEVICE)
3084 && !CHK_SD30_SPEED(sd_card)
3085 && !CHK_SD_HS(sd_card)
3086 && !CHK_MMC_HS(sd_card)
3087 && sd_card->sd_send_status_en) {
3088 sd_send_cmd_get_rsp(chip, SEND_STATUS,
3089 sd_card->sd_addr, SD_RSP_TYPE_R1,
3090 NULL, 0);
3091 }
3092
3093 retval =
3094 sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3095 SD_RSP_TYPE_R1b, NULL, 0);
3096 if (retval != STATUS_SUCCESS) {
3097 sd_set_err_code(chip, SD_STS_ERR);
3098 TRACE_RET(chip, sd_parse_err_code(chip));
3099 }
3100
3101 sd_card->seq_mode = 0;
3102
3103 RTS51X_WRITE_REG(chip, MC_FIFO_CTL, FIFO_FLUSH, FIFO_FLUSH);
3104
3105 if (!CHK_SD30_SPEED(sd_card)
3106 && !CHK_SD_HS(sd_card)
3107 && !CHK_MMC_HS(sd_card)
3108 && sd_card->sd_send_status_en) {
3109 /* random rw, so pre_sec_cnt < 0x80 */
3110 sd_send_cmd_get_rsp(chip, SEND_STATUS,
3111 sd_card->sd_addr, SD_RSP_TYPE_R1,
3112 NULL, 0);
3113 }
3114 }
3115
3116 rts51x_init_cmd(chip);
3117
3118 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_L, 0xFF, 0x00);
3119 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BYTE_CNT_H, 0xFF, 0x02);
3120 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_L, 0xFF,
3121 (u8) sector_cnt);
3122 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_BLOCK_CNT_H, 0xFF,
3123 (u8) (sector_cnt >> 8));
3124
3125 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
3126 RING_BUFFER);
3127
3128 if (CHK_MMC_8BIT(sd_card))
3129 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG1, 0x03,
3130 SD_BUS_WIDTH_8);
3131 else if (CHK_MMC_4BIT(sd_card) || CHK_SD(sd_card))
3132 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG1, 0x03,
3133 SD_BUS_WIDTH_4);
3134 else
3135 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG1, 0x03,
3136 SD_BUS_WIDTH_1);
3137
3138 if (sd_card->seq_mode) {
3139 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG2, 0xFF,
3140 SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 |
3141 SD_NO_WAIT_BUSY_END | SD_NO_CHECK_CRC7 |
3142 SD_RSP_LEN_0);
3143
3144 trans_dma_enable(srb->sc_data_direction, chip, sector_cnt * 512,
3145 DMA_512);
3146
3147 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3148 flag = MODE_CDIR;
3149 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
3150 SD_TM_AUTO_READ_3 | SD_TRANSFER_START);
3151 } else {
3152 flag = MODE_CDOR;
3153 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
3154 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3155 }
3156
3157 rts51x_add_cmd(chip, CHECK_REG_CMD, SD_TRANSFER,
3158 SD_TRANSFER_END, SD_TRANSFER_END);
3159
3160 retval = rts51x_send_cmd(chip, flag, 100);
3161 if (retval != STATUS_SUCCESS)
3162 TRACE_RET(chip, retval);
3163 } else {
3164 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3165 RTS51X_DEBUGP("SD/MMC CMD %d\n", READ_MULTIPLE_BLOCK);
3166 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD0, 0xFF,
3167 0x40 | READ_MULTIPLE_BLOCK);
3168 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD1, 0xFF,
3169 (u8) (data_addr >> 24));
3170 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD2, 0xFF,
3171 (u8) (data_addr >> 16));
3172 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD3, 0xFF,
3173 (u8) (data_addr >> 8));
3174 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CMD4, 0xFF,
3175 (u8) data_addr);
3176
3177 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG2, 0xFF,
3178 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
3179 SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 |
3180 SD_RSP_LEN_6);
3181
3182 trans_dma_enable(srb->sc_data_direction, chip,
3183 sector_cnt * 512, DMA_512);
3184
3185 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
3186 SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
3187 rts51x_add_cmd(chip, CHECK_REG_CMD, SD_TRANSFER,
3188 SD_TRANSFER_END, SD_TRANSFER_END);
3189
3190 retval = rts51x_send_cmd(chip, MODE_CDIR, 100);
3191 if (retval != STATUS_SUCCESS)
3192 TRACE_RET(chip, retval);
3193 } else {
3194 retval = rts51x_send_cmd(chip, MODE_C, 50);
3195 if (retval != STATUS_SUCCESS) {
3196 rts51x_clear_sd_error(chip);
3197
3198 sd_set_err_code(chip, SD_TO_ERR);
3199 TRACE_RET(chip, sd_parse_err_code(chip));
3200 }
3201
3202 retval = wait_data_buf_ready(chip);
3203 if (retval != STATUS_SUCCESS) {
3204 sd_set_err_code(chip, SD_TO_ERR);
3205 TRACE_RET(chip, sd_parse_err_code(chip));
3206 }
3207
3208 retval = sd_send_cmd_get_rsp(chip, WRITE_MULTIPLE_BLOCK,
3209 data_addr, SD_RSP_TYPE_R1,
3210 NULL, 0);
3211 if (retval != STATUS_SUCCESS) {
3212 sd_set_err_code(chip, SD_CRC_ERR);
3213 TRACE_RET(chip, sd_parse_err_code(chip));
3214 }
3215
3216 rts51x_init_cmd(chip);
3217
3218 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_CFG2, 0xFF,
3219 SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 |
3220 SD_NO_WAIT_BUSY_END | SD_NO_CHECK_CRC7 |
3221 SD_RSP_LEN_0);
3222
3223 trans_dma_enable(srb->sc_data_direction, chip,
3224 sector_cnt * 512, DMA_512);
3225
3226 rts51x_add_cmd(chip, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
3227 SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3228 rts51x_add_cmd(chip, CHECK_REG_CMD, SD_TRANSFER,
3229 SD_TRANSFER_END, SD_TRANSFER_END);
3230
3231 retval = rts51x_send_cmd(chip, MODE_CDOR, 100);
3232 if (retval != STATUS_SUCCESS)
3233 TRACE_RET(chip, retval);
3234 }
3235
3236 sd_card->seq_mode = 1;
3237 }
3238
3239 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3240 pipe = RCV_BULK_PIPE(chip);
3241 stageflag = STAGE_DI;
3242 } else {
3243 pipe = SND_BULK_PIPE(chip);
3244 stageflag = STAGE_DO;
3245 }
3246
3247 retval =
3248 rts51x_transfer_data_rcc(chip, pipe, scsi_sglist(srb),
3249 scsi_bufflen(srb), scsi_sg_count(srb),
3250 NULL, 10000, stageflag);
3251 if (retval != STATUS_SUCCESS) {
3252 u8 stat = 0;
3253 int err = retval;
3254
3255 sd_print_debug_reg(chip);
3256
3257 rts51x_ep0_read_register(chip, SD_STAT1, &stat);
3258 RTS51X_DEBUGP("SD_STAT1: 0x%x\n", stat);
3259
3260 rts51x_clear_sd_error(chip);
3261
3262 retval =
3263 sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3264 SD_RSP_TYPE_R1b, NULL, 0);
3265 if (retval != STATUS_SUCCESS) {
3266 sd_set_err_code(chip, SD_STS_ERR);
3267 TRACE_RET(chip, retval);
3268 }
3269
3270 if (stat & (SD_CRC7_ERR | SD_CRC16_ERR | SD_CRC_WRITE_ERR)) {
3271 RTS51X_DEBUGP("SD CRC error, tune clock!\n");
3272 sd_auto_tune_clock(chip);
3273 }
3274
3275 sd_card->seq_mode = 0;
3276
3277 TRACE_RET(chip, err);
3278 }
3279 retval = rts51x_get_rsp(chip, 1, 2000);
3280 if (CHECK_SD_TRANS_FAIL(chip, retval)) {
3281 rts51x_clear_sd_error(chip);
3282 TRACE_RET(chip, STATUS_FAIL);
3283 }
3284
3285 sd_card->pre_sec_addr = start_sector;
3286 sd_card->pre_sec_cnt = sector_cnt;
3287 sd_card->pre_dir = srb->sc_data_direction;
3288
3289 return STATUS_SUCCESS;
3290}
3291
3292void sd_cleanup_work(struct rts51x_chip *chip)
3293{
3294 struct sd_info *sd_card = &(chip->sd_card);
3295
3296 if (sd_card->seq_mode) {
3297 RTS51X_DEBUGP("SD: stop transmission\n");
3298 sd_stop_seq_mode(chip);
3299 sd_card->counter = 0;
3300 }
3301}
3302
3303inline void sd_fill_power_off_card3v3(struct rts51x_chip *chip)
3304{
3305 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_CLK_EN, SD_CLK_EN, 0);
3306
3307 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_OE, SD_OUTPUT_EN, 0);
3308 if (!chip->option.FT2_fast_mode) {
3309#ifdef SD_XD_IO_FOLLOW_PWR
3310 if (CHECK_PKG(chip, LQFP48)
3311 || chip->option.rts5129_D3318_off_enable)
3312 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL,
3313 POWER_MASK | LDO_OFF,
3314 POWER_OFF | LDO_OFF);
3315 else
3316 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL,
3317 POWER_MASK, POWER_OFF);
3318#else
3319 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, POWER_MASK,
3320 POWER_OFF);
3321#endif
3322 }
3323}
3324
3325int sd_power_off_card3v3(struct rts51x_chip *chip)
3326{
3327 int retval;
3328
3329 rts51x_init_cmd(chip);
3330
3331 sd_fill_power_off_card3v3(chip);
3332
3333 retval = rts51x_send_cmd(chip, MODE_C, 100);
3334 if (retval != STATUS_SUCCESS)
3335 TRACE_RET(chip, retval);
3336#ifdef SD_XD_IO_FOLLOW_PWR
3337 if (!chip->option.FT2_fast_mode)
3338 wait_timeout(chip->option.D3318_off_delay);
3339#endif
3340
3341 return STATUS_SUCCESS;
3342}
3343
3344int release_sd_card(struct rts51x_chip *chip)
3345{
3346 struct sd_info *sd_card = &(chip->sd_card);
3347 int retval;
3348
3349 RTS51X_DEBUGP("elease_sd_card\n");
3350
3351 chip->card_ready &= ~SD_CARD;
3352 chip->card_fail &= ~SD_CARD;
3353 chip->card_wp &= ~SD_CARD;
3354
3355#ifdef SUPPORT_SD_LOCK
3356 sd_card->sd_lock_status = 0;
3357 sd_card->sd_erase_status = 0;
3358#endif
3359
3360 memset(sd_card->raw_csd, 0, 16);
3361 memset(sd_card->raw_scr, 0, 8);
3362
3363 rts51x_write_register(chip, SFSM_ED, HW_CMD_STOP, HW_CMD_STOP);
3364 rts51x_write_register(chip, SD_PAD_CTL, SD_IO_USING_1V8, 0);
3365 if (CHECK_PKG(chip, LQFP48) || chip->option.rts5129_D3318_off_enable)
3366 sd_power_off_card3v3(chip);
3367
3368 rts51x_init_cmd(chip);
3369 if (!(CHECK_PKG(chip, LQFP48) || chip->option.rts5129_D3318_off_enable))
3370 sd_fill_power_off_card3v3(chip);
3371
3372 if (chip->asic_code)
3373 sd_pull_ctl_disable(chip);
3374 else
3375 rts51x_add_cmd(chip, WRITE_REG_CMD, FPGA_PULL_CTL,
3376 FPGA_SD_PULL_CTL_BIT | 0x20,
3377 FPGA_SD_PULL_CTL_BIT);
3378
3379 /* Switch LDO3318 to 3.3V */
3380 rts51x_add_cmd(chip, WRITE_REG_CMD, LDO_POWER_CFG, TUNE_SD18_MASK,
3381 TUNE_SD18_3V3);
3382
3383 if (CHK_MMC_DDR52(sd_card) && CHK_MMC_8BIT(sd_card))
3384 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_DMA1_CTL,
3385 EXTEND_DMA1_ASYNC_SIGNAL,
3386 EXTEND_DMA1_ASYNC_SIGNAL);
3387 if (CHK_SD30_SPEED(sd_card) || CHK_MMC(sd_card))
3388 rts51x_add_cmd(chip, WRITE_REG_CMD, SD30_DRIVE_SEL,
3389 SD30_DRIVE_MASK, chip->option.sd30_pad_drive);
3390 /* Suspend LDO3318 */
3391 rts51x_add_cmd(chip, WRITE_REG_CMD, CARD_PWR_CTL, LDO3318_PWR_MASK,
3392 LDO_SUSPEND);
3393
3394 retval = rts51x_send_cmd(chip, MODE_C, 100);
3395 if (retval != STATUS_SUCCESS)
3396 TRACE_RET(chip, retval);
3397 wait_timeout(20);
3398
3399 return STATUS_SUCCESS;
3400}