1 /* 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 
sd_set_reset_fail(struct rts51x_chip * chip,u8 err_code)38 static 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 
sd_clear_reset_fail(struct rts51x_chip * chip)45 static 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 
sd_check_reset_fail(struct rts51x_chip * chip,u8 err_code)52 static 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 
sd_set_err_code(struct rts51x_chip * chip,u8 err_code)59 static 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 
sd_clr_err_code(struct rts51x_chip * chip)66 static 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 
sd_check_err_code(struct rts51x_chip * chip,u8 err_code)73 static 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 
sd_parse_err_code(struct rts51x_chip * chip)80 static int sd_parse_err_code(struct rts51x_chip *chip)
81 {
82 	TRACE_RET(chip, STATUS_FAIL);
83 }
84 
sd_check_data0_status(struct rts51x_chip * chip)85 int 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 
sd_send_cmd_get_rsp(struct rts51x_chip * chip,u8 cmd_idx,u32 arg,u8 rsp_type,u8 * rsp,int rsp_len)101 static 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 
119 RTY_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 
281 static 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 
295 int 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 
367 static 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 
444 static 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 
556 static 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 
631 static 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 
670 static 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 
688 int 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
713 int 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 
742 int 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 
769 static 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 
824 static 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 
890 Fail:
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 
905 static 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 
939 static 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 
1050 static 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 
1113 static 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 
1156 static 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 
1255 static 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 
1276 static 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 
1304 static 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 
1341 static 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 
1379 static 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 
1407 static 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 
1458 static 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 
1564 Search_Finish:
1565 	RTS51X_DEBUGP("Final choosen phase: %d\n", final_phase);
1566 	return final_phase;
1567 }
1568 
1569 static 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 
1623 static 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 
1667 static 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 
1721 static 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 
1736 static 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 
1765 static 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 
1794 int 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 
1831 static 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 
1865 static 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 
1884 static 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 
1903 static 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 
1998 static 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 
2007 int 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);
2021 Switch_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 */
2039 RTY_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 
2094 RTY_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
2194 SD_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 
2399 static 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 
2522 static 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 
2646 static 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 
2660 MMC_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 
2668 RTY_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
2767 MMC_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 
2867 int 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 
2981 static 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 
3009 void 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 
3030 static 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 
3054 int 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 
3292 void 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 
3303 inline 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 
3325 int 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 
3344 int 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 }
3401