xref: /openbmc/linux/drivers/staging/rts5208/sd.c (revision e040b626)
1 /* Driver for Realtek PCI-Express card reader
2  *
3  * Copyright(c) 2009-2013 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  *   Wei WANG (wei_wang@realsil.com.cn)
20  *   Micky Ching (micky_ching@realsil.com.cn)
21  */
22 
23 #include <linux/blkdev.h>
24 #include <linux/kthread.h>
25 #include <linux/sched.h>
26 
27 #include "rtsx.h"
28 #include "sd.h"
29 
30 #define SD_MAX_RETRY_COUNT	3
31 
32 static u16 REG_SD_CFG1;
33 static u16 REG_SD_CFG2;
34 static u16 REG_SD_CFG3;
35 static u16 REG_SD_STAT1;
36 static u16 REG_SD_STAT2;
37 static u16 REG_SD_BUS_STAT;
38 static u16 REG_SD_PAD_CTL;
39 static u16 REG_SD_SAMPLE_POINT_CTL;
40 static u16 REG_SD_PUSH_POINT_CTL;
41 static u16 REG_SD_CMD0;
42 static u16 REG_SD_CMD1;
43 static u16 REG_SD_CMD2;
44 static u16 REG_SD_CMD3;
45 static u16 REG_SD_CMD4;
46 static u16 REG_SD_CMD5;
47 static u16 REG_SD_BYTE_CNT_L;
48 static u16 REG_SD_BYTE_CNT_H;
49 static u16 REG_SD_BLOCK_CNT_L;
50 static u16 REG_SD_BLOCK_CNT_H;
51 static u16 REG_SD_TRANSFER;
52 static u16 REG_SD_VPCLK0_CTL;
53 static u16 REG_SD_VPCLK1_CTL;
54 static u16 REG_SD_DCMPS0_CTL;
55 static u16 REG_SD_DCMPS1_CTL;
56 
57 static inline void sd_set_err_code(struct rtsx_chip *chip, u8 err_code)
58 {
59 	struct sd_info *sd_card = &(chip->sd_card);
60 
61 	sd_card->err_code |= err_code;
62 }
63 
64 static inline void sd_clr_err_code(struct rtsx_chip *chip)
65 {
66 	struct sd_info *sd_card = &(chip->sd_card);
67 
68 	sd_card->err_code = 0;
69 }
70 
71 static inline int sd_check_err_code(struct rtsx_chip *chip, u8 err_code)
72 {
73 	struct sd_info *sd_card = &(chip->sd_card);
74 
75 	return sd_card->err_code & err_code;
76 }
77 
78 static void sd_init_reg_addr(struct rtsx_chip *chip)
79 {
80 	REG_SD_CFG1 = 0xFD31;
81 	REG_SD_CFG2 = 0xFD33;
82 	REG_SD_CFG3 = 0xFD3E;
83 	REG_SD_STAT1 = 0xFD30;
84 	REG_SD_STAT2 = 0;
85 	REG_SD_BUS_STAT = 0;
86 	REG_SD_PAD_CTL = 0;
87 	REG_SD_SAMPLE_POINT_CTL = 0;
88 	REG_SD_PUSH_POINT_CTL = 0;
89 	REG_SD_CMD0 = 0xFD34;
90 	REG_SD_CMD1 = 0xFD35;
91 	REG_SD_CMD2 = 0xFD36;
92 	REG_SD_CMD3 = 0xFD37;
93 	REG_SD_CMD4 = 0xFD38;
94 	REG_SD_CMD5 = 0xFD5A;
95 	REG_SD_BYTE_CNT_L = 0xFD39;
96 	REG_SD_BYTE_CNT_H = 0xFD3A;
97 	REG_SD_BLOCK_CNT_L = 0xFD3B;
98 	REG_SD_BLOCK_CNT_H = 0xFD3C;
99 	REG_SD_TRANSFER = 0xFD32;
100 	REG_SD_VPCLK0_CTL = 0;
101 	REG_SD_VPCLK1_CTL = 0;
102 	REG_SD_DCMPS0_CTL = 0;
103 	REG_SD_DCMPS1_CTL = 0;
104 }
105 
106 static int sd_check_data0_status(struct rtsx_chip *chip)
107 {
108 	int retval;
109 	u8 stat;
110 
111 	retval = rtsx_read_register(chip, REG_SD_STAT1, &stat);
112 	if (retval) {
113 		rtsx_trace(chip);
114 		return retval;
115 	}
116 
117 	if (!(stat & SD_DAT0_STATUS)) {
118 		sd_set_err_code(chip, SD_BUSY);
119 		rtsx_trace(chip);
120 		return STATUS_FAIL;
121 	}
122 
123 	return STATUS_SUCCESS;
124 }
125 
126 static int sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx,
127 		u32 arg, u8 rsp_type, u8 *rsp, int rsp_len)
128 {
129 	struct sd_info *sd_card = &(chip->sd_card);
130 	int retval;
131 	int timeout = 100;
132 	u16 reg_addr;
133 	u8 *ptr;
134 	int stat_idx = 0;
135 	int rty_cnt = 0;
136 
137 	sd_clr_err_code(chip);
138 
139 	dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d, arg = 0x%08x\n", cmd_idx, arg);
140 
141 	if (rsp_type == SD_RSP_TYPE_R1b)
142 		timeout = 3000;
143 
144 RTY_SEND_CMD:
145 
146 	rtsx_init_cmd(chip);
147 
148 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
149 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24));
150 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16));
151 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8));
152 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg);
153 
154 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
155 	rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE,
156 			0x01, PINGPONG_BUFFER);
157 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
158 			0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
159 	rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
160 		SD_TRANSFER_END | SD_STAT_IDLE, SD_TRANSFER_END | SD_STAT_IDLE);
161 
162 	if (rsp_type == SD_RSP_TYPE_R2) {
163 		for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
164 		     reg_addr++)
165 			rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
166 
167 		stat_idx = 16;
168 	} else if (rsp_type != SD_RSP_TYPE_R0) {
169 		for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
170 		     reg_addr++)
171 			rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
172 
173 		stat_idx = 5;
174 	}
175 
176 	rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0);
177 
178 	retval = rtsx_send_cmd(chip, SD_CARD, timeout);
179 	if (retval < 0) {
180 		u8 val;
181 
182 		rtsx_read_register(chip, REG_SD_STAT1, &val);
183 		dev_dbg(rtsx_dev(chip), "SD_STAT1: 0x%x\n", val);
184 
185 		rtsx_read_register(chip, REG_SD_CFG3, &val);
186 		dev_dbg(rtsx_dev(chip), "SD_CFG3: 0x%x\n", val);
187 
188 		if (retval == -ETIMEDOUT) {
189 			if (rsp_type & SD_WAIT_BUSY_END) {
190 				retval = sd_check_data0_status(chip);
191 				if (retval != STATUS_SUCCESS) {
192 					rtsx_clear_sd_error(chip);
193 					rtsx_trace(chip);
194 					return retval;
195 				}
196 			} else {
197 				sd_set_err_code(chip, SD_TO_ERR);
198 			}
199 			retval = STATUS_TIMEDOUT;
200 		} else {
201 			retval = STATUS_FAIL;
202 		}
203 		rtsx_clear_sd_error(chip);
204 
205 		rtsx_trace(chip);
206 		return retval;
207 	}
208 
209 	if (rsp_type == SD_RSP_TYPE_R0)
210 		return STATUS_SUCCESS;
211 
212 	ptr = rtsx_get_cmd_data(chip) + 1;
213 
214 	if ((ptr[0] & 0xC0) != 0) {
215 		sd_set_err_code(chip, SD_STS_ERR);
216 		rtsx_trace(chip);
217 		return STATUS_FAIL;
218 	}
219 
220 	if (!(rsp_type & SD_NO_CHECK_CRC7)) {
221 		if (ptr[stat_idx] & SD_CRC7_ERR) {
222 			if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
223 				sd_set_err_code(chip, SD_CRC_ERR);
224 				rtsx_trace(chip);
225 				return STATUS_FAIL;
226 			}
227 			if (rty_cnt < SD_MAX_RETRY_COUNT) {
228 				wait_timeout(20);
229 				rty_cnt++;
230 				goto RTY_SEND_CMD;
231 			} else {
232 				sd_set_err_code(chip, SD_CRC_ERR);
233 				rtsx_trace(chip);
234 				return STATUS_FAIL;
235 			}
236 		}
237 	}
238 
239 	if ((rsp_type == SD_RSP_TYPE_R1) || (rsp_type == SD_RSP_TYPE_R1b)) {
240 		if ((cmd_idx != SEND_RELATIVE_ADDR) &&
241 			(cmd_idx != SEND_IF_COND)) {
242 			if (cmd_idx != STOP_TRANSMISSION) {
243 				if (ptr[1] & 0x80) {
244 					rtsx_trace(chip);
245 					return STATUS_FAIL;
246 				}
247 			}
248 #ifdef SUPPORT_SD_LOCK
249 			if (ptr[1] & 0x7D) {
250 #else
251 			if (ptr[1] & 0x7F) {
252 #endif
253 				dev_dbg(rtsx_dev(chip), "ptr[1]: 0x%02x\n",
254 					ptr[1]);
255 				rtsx_trace(chip);
256 				return STATUS_FAIL;
257 			}
258 			if (ptr[2] & 0xFF) {
259 				dev_dbg(rtsx_dev(chip), "ptr[2]: 0x%02x\n",
260 					ptr[2]);
261 				rtsx_trace(chip);
262 				return STATUS_FAIL;
263 			}
264 			if (ptr[3] & 0x80) {
265 				dev_dbg(rtsx_dev(chip), "ptr[3]: 0x%02x\n",
266 					ptr[3]);
267 				rtsx_trace(chip);
268 				return STATUS_FAIL;
269 			}
270 			if (ptr[3] & 0x01)
271 				sd_card->sd_data_buf_ready = 1;
272 			else
273 				sd_card->sd_data_buf_ready = 0;
274 		}
275 	}
276 
277 	if (rsp && rsp_len)
278 		memcpy(rsp, ptr, rsp_len);
279 
280 	return STATUS_SUCCESS;
281 }
282 
283 static int sd_read_data(struct rtsx_chip *chip,
284 			u8 trans_mode, u8 *cmd, int cmd_len, u16 byte_cnt,
285 			u16 blk_cnt, u8 bus_width, u8 *buf, int buf_len,
286 			int timeout)
287 {
288 	struct sd_info *sd_card = &(chip->sd_card);
289 	int retval;
290 	int i;
291 
292 	sd_clr_err_code(chip);
293 
294 	if (!buf)
295 		buf_len = 0;
296 
297 	if (buf_len > 512) {
298 		rtsx_trace(chip);
299 		return STATUS_FAIL;
300 	}
301 
302 	rtsx_init_cmd(chip);
303 
304 	if (cmd_len) {
305 		dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40);
306 		for (i = 0; i < (min(cmd_len, 6)); i++)
307 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0 + i,
308 				     0xFF, cmd[i]);
309 	}
310 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
311 		(u8)byte_cnt);
312 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
313 		(u8)(byte_cnt >> 8));
314 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
315 		(u8)blk_cnt);
316 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
317 		(u8)(blk_cnt >> 8));
318 
319 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
320 
321 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
322 		SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
323 		SD_CHECK_CRC7 | SD_RSP_LEN_6);
324 	if (trans_mode != SD_TM_AUTO_TUNING)
325 		rtsx_add_cmd(chip, WRITE_REG_CMD,
326 			CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER);
327 
328 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
329 		trans_mode | SD_TRANSFER_START);
330 	rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
331 		SD_TRANSFER_END);
332 
333 	retval = rtsx_send_cmd(chip, SD_CARD, timeout);
334 	if (retval < 0) {
335 		if (retval == -ETIMEDOUT) {
336 			sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
337 					    SD_RSP_TYPE_R1, NULL, 0);
338 		}
339 
340 		rtsx_trace(chip);
341 		return STATUS_FAIL;
342 	}
343 
344 	if (buf && buf_len) {
345 		retval = rtsx_read_ppbuf(chip, buf, buf_len);
346 		if (retval != STATUS_SUCCESS) {
347 			rtsx_trace(chip);
348 			return STATUS_FAIL;
349 		}
350 	}
351 
352 	return STATUS_SUCCESS;
353 }
354 
355 static int sd_write_data(struct rtsx_chip *chip, u8 trans_mode,
356 		u8 *cmd, int cmd_len, u16 byte_cnt, u16 blk_cnt, u8 bus_width,
357 		u8 *buf, int buf_len, int timeout)
358 {
359 	struct sd_info *sd_card = &(chip->sd_card);
360 	int retval;
361 	int i;
362 
363 	sd_clr_err_code(chip);
364 
365 	if (!buf)
366 		buf_len = 0;
367 
368 	if (buf_len > 512) {
369 		/* This function can't write data more than one page */
370 		rtsx_trace(chip);
371 		return STATUS_FAIL;
372 	}
373 
374 	if (buf && buf_len) {
375 		retval = rtsx_write_ppbuf(chip, buf, buf_len);
376 		if (retval != STATUS_SUCCESS) {
377 			rtsx_trace(chip);
378 			return STATUS_FAIL;
379 		}
380 	}
381 
382 	rtsx_init_cmd(chip);
383 
384 	if (cmd_len) {
385 		dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", cmd[0] - 0x40);
386 		for (i = 0; i < (min(cmd_len, 6)); i++) {
387 			rtsx_add_cmd(chip, WRITE_REG_CMD,
388 				     REG_SD_CMD0 + i, 0xFF, cmd[i]);
389 		}
390 	}
391 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
392 		(u8)byte_cnt);
393 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
394 		(u8)(byte_cnt >> 8));
395 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
396 		(u8)blk_cnt);
397 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
398 		(u8)(blk_cnt >> 8));
399 
400 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
401 
402 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
403 		SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END |
404 		SD_CHECK_CRC7 | SD_RSP_LEN_6);
405 
406 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
407 		trans_mode | SD_TRANSFER_START);
408 	rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
409 		SD_TRANSFER_END);
410 
411 	retval = rtsx_send_cmd(chip, SD_CARD, timeout);
412 	if (retval < 0) {
413 		if (retval == -ETIMEDOUT) {
414 			sd_send_cmd_get_rsp(chip, SEND_STATUS,
415 				sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
416 		}
417 
418 		rtsx_trace(chip);
419 		return STATUS_FAIL;
420 	}
421 
422 	return STATUS_SUCCESS;
423 }
424 
425 static int sd_check_csd(struct rtsx_chip *chip, char check_wp)
426 {
427 	struct sd_info *sd_card = &(chip->sd_card);
428 	int retval;
429 	int i;
430 	u8 csd_ver, trans_speed;
431 	u8 rsp[16];
432 
433 	for (i = 0; i < 6; i++) {
434 		if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
435 			sd_set_err_code(chip, SD_NO_CARD);
436 			rtsx_trace(chip);
437 			return STATUS_FAIL;
438 		}
439 
440 		retval = sd_send_cmd_get_rsp(chip, SEND_CSD, sd_card->sd_addr,
441 					SD_RSP_TYPE_R2, rsp, 16);
442 		if (retval == STATUS_SUCCESS)
443 			break;
444 	}
445 
446 	if (i == 6) {
447 		rtsx_trace(chip);
448 		return STATUS_FAIL;
449 	}
450 
451 	memcpy(sd_card->raw_csd, rsp + 1, 15);
452 
453 	dev_dbg(rtsx_dev(chip), "CSD Response:\n");
454 	dev_dbg(rtsx_dev(chip), "%*ph\n", 16, sd_card->raw_csd);
455 
456 	csd_ver = (rsp[1] & 0xc0) >> 6;
457 	dev_dbg(rtsx_dev(chip), "csd_ver = %d\n", csd_ver);
458 
459 	trans_speed = rsp[4];
460 	if ((trans_speed & 0x07) == 0x02) {
461 		if ((trans_speed & 0xf8) >= 0x30) {
462 			if (chip->asic_code)
463 				sd_card->sd_clock = 47;
464 			else
465 				sd_card->sd_clock = CLK_50;
466 
467 		} else if ((trans_speed & 0xf8) == 0x28) {
468 			if (chip->asic_code)
469 				sd_card->sd_clock = 39;
470 			else
471 				sd_card->sd_clock = CLK_40;
472 
473 		} else if ((trans_speed & 0xf8) == 0x20) {
474 			if (chip->asic_code)
475 				sd_card->sd_clock = 29;
476 			else
477 				sd_card->sd_clock = CLK_30;
478 
479 		} else if ((trans_speed & 0xf8) >= 0x10) {
480 			if (chip->asic_code)
481 				sd_card->sd_clock = 23;
482 			else
483 				sd_card->sd_clock = CLK_20;
484 
485 		} else if ((trans_speed & 0x08) >= 0x08) {
486 			if (chip->asic_code)
487 				sd_card->sd_clock = 19;
488 			else
489 				sd_card->sd_clock = CLK_20;
490 		} else {
491 			rtsx_trace(chip);
492 			return STATUS_FAIL;
493 		}
494 	} else {
495 		rtsx_trace(chip);
496 		return STATUS_FAIL;
497 	}
498 
499 	if (CHK_MMC_SECTOR_MODE(sd_card)) {
500 		sd_card->capacity = 0;
501 	} else {
502 		if ((!CHK_SD_HCXC(sd_card)) || (csd_ver == 0)) {
503 			u8 blk_size, c_size_mult;
504 			u16 c_size;
505 
506 			blk_size = rsp[6] & 0x0F;
507 			c_size =  ((u16)(rsp[7] & 0x03) << 10)
508 					+ ((u16)rsp[8] << 2)
509 					+ ((u16)(rsp[9] & 0xC0) >> 6);
510 			c_size_mult = (u8)((rsp[10] & 0x03) << 1);
511 			c_size_mult += (rsp[11] & 0x80) >> 7;
512 			sd_card->capacity = (((u32)(c_size + 1)) *
513 					(1 << (c_size_mult + 2)))
514 				<< (blk_size - 9);
515 		} else {
516 			u32 total_sector = 0;
517 
518 			total_sector = (((u32)rsp[8] & 0x3f) << 16) |
519 				((u32)rsp[9] << 8) | (u32)rsp[10];
520 			sd_card->capacity = (total_sector + 1) << 10;
521 		}
522 	}
523 
524 	if (check_wp) {
525 		if (rsp[15] & 0x30)
526 			chip->card_wp |= SD_CARD;
527 
528 		dev_dbg(rtsx_dev(chip), "CSD WP Status: 0x%x\n", rsp[15]);
529 	}
530 
531 	return STATUS_SUCCESS;
532 }
533 
534 static int sd_set_sample_push_timing(struct rtsx_chip *chip)
535 {
536 	int retval;
537 	struct sd_info *sd_card = &(chip->sd_card);
538 	u8 val = 0;
539 
540 	if ((chip->sd_ctl & SD_PUSH_POINT_CTL_MASK) == SD_PUSH_POINT_DELAY)
541 		val |= 0x10;
542 
543 	if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) == SD_SAMPLE_POINT_AUTO) {
544 		if (chip->asic_code) {
545 			if (CHK_SD_HS(sd_card) || CHK_MMC_52M(sd_card)) {
546 				if (val & 0x10)
547 					val |= 0x04;
548 				else
549 					val |= 0x08;
550 			}
551 		} else {
552 			if (val & 0x10)
553 				val |= 0x04;
554 			else
555 				val |= 0x08;
556 		}
557 	} else if ((chip->sd_ctl & SD_SAMPLE_POINT_CTL_MASK) ==
558 		SD_SAMPLE_POINT_DELAY) {
559 		if (val & 0x10)
560 			val |= 0x04;
561 		else
562 			val |= 0x08;
563 	}
564 
565 	retval = rtsx_write_register(chip, REG_SD_CFG1, 0x1C, val);
566 	if (retval) {
567 		rtsx_trace(chip);
568 		return retval;
569 	}
570 
571 	return STATUS_SUCCESS;
572 }
573 
574 static void sd_choose_proper_clock(struct rtsx_chip *chip)
575 {
576 	struct sd_info *sd_card = &(chip->sd_card);
577 
578 	if (CHK_SD_SDR104(sd_card)) {
579 		if (chip->asic_code)
580 			sd_card->sd_clock = chip->asic_sd_sdr104_clk;
581 		else
582 			sd_card->sd_clock = chip->fpga_sd_sdr104_clk;
583 
584 	} else if (CHK_SD_DDR50(sd_card)) {
585 		if (chip->asic_code)
586 			sd_card->sd_clock = chip->asic_sd_ddr50_clk;
587 		else
588 			sd_card->sd_clock = chip->fpga_sd_ddr50_clk;
589 
590 	} else if (CHK_SD_SDR50(sd_card)) {
591 		if (chip->asic_code)
592 			sd_card->sd_clock = chip->asic_sd_sdr50_clk;
593 		else
594 			sd_card->sd_clock = chip->fpga_sd_sdr50_clk;
595 
596 	} else if (CHK_SD_HS(sd_card)) {
597 		if (chip->asic_code)
598 			sd_card->sd_clock = chip->asic_sd_hs_clk;
599 		else
600 			sd_card->sd_clock = chip->fpga_sd_hs_clk;
601 
602 	} else if (CHK_MMC_52M(sd_card) || CHK_MMC_DDR52(sd_card)) {
603 		if (chip->asic_code)
604 			sd_card->sd_clock = chip->asic_mmc_52m_clk;
605 		else
606 			sd_card->sd_clock = chip->fpga_mmc_52m_clk;
607 
608 	} else if (CHK_MMC_26M(sd_card)) {
609 		if (chip->asic_code)
610 			sd_card->sd_clock = 48;
611 		else
612 			sd_card->sd_clock = CLK_50;
613 	}
614 }
615 
616 static int sd_set_clock_divider(struct rtsx_chip *chip, u8 clk_div)
617 {
618 	int retval;
619 	u8 mask = 0, val = 0;
620 
621 	mask = 0x60;
622 	if (clk_div == SD_CLK_DIVIDE_0)
623 		val = 0x00;
624 	else if (clk_div == SD_CLK_DIVIDE_128)
625 		val = 0x40;
626 	else if (clk_div == SD_CLK_DIVIDE_256)
627 		val = 0x20;
628 
629 	retval = rtsx_write_register(chip, REG_SD_CFG1, mask, val);
630 	if (retval) {
631 		rtsx_trace(chip);
632 		return retval;
633 	}
634 
635 	return STATUS_SUCCESS;
636 }
637 
638 static int sd_set_init_para(struct rtsx_chip *chip)
639 {
640 	struct sd_info *sd_card = &(chip->sd_card);
641 	int retval;
642 
643 	retval = sd_set_sample_push_timing(chip);
644 	if (retval != STATUS_SUCCESS) {
645 		rtsx_trace(chip);
646 		return STATUS_FAIL;
647 	}
648 
649 	sd_choose_proper_clock(chip);
650 
651 	retval = switch_clock(chip, sd_card->sd_clock);
652 	if (retval != STATUS_SUCCESS) {
653 		rtsx_trace(chip);
654 		return STATUS_FAIL;
655 	}
656 
657 	return STATUS_SUCCESS;
658 }
659 
660 int sd_select_card(struct rtsx_chip *chip, int select)
661 {
662 	struct sd_info *sd_card = &(chip->sd_card);
663 	int retval;
664 	u8 cmd_idx, cmd_type;
665 	u32 addr;
666 
667 	if (select) {
668 		cmd_idx = SELECT_CARD;
669 		cmd_type = SD_RSP_TYPE_R1;
670 		addr = sd_card->sd_addr;
671 	} else {
672 		cmd_idx = DESELECT_CARD;
673 		cmd_type = SD_RSP_TYPE_R0;
674 		addr = 0;
675 	}
676 
677 	retval = sd_send_cmd_get_rsp(chip, cmd_idx, addr, cmd_type, NULL, 0);
678 	if (retval != STATUS_SUCCESS) {
679 		rtsx_trace(chip);
680 		return STATUS_FAIL;
681 	}
682 
683 	return STATUS_SUCCESS;
684 }
685 
686 #ifdef SUPPORT_SD_LOCK
687 static int sd_update_lock_status(struct rtsx_chip *chip)
688 {
689 	struct sd_info *sd_card = &(chip->sd_card);
690 	int retval;
691 	u8 rsp[5];
692 
693 	retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
694 				SD_RSP_TYPE_R1, rsp, 5);
695 	if (retval != STATUS_SUCCESS) {
696 		rtsx_trace(chip);
697 		return STATUS_FAIL;
698 	}
699 
700 	if (rsp[1] & 0x02)
701 		sd_card->sd_lock_status |= SD_LOCKED;
702 	else
703 		sd_card->sd_lock_status &= ~SD_LOCKED;
704 
705 	dev_dbg(rtsx_dev(chip), "sd_card->sd_lock_status = 0x%x\n",
706 		sd_card->sd_lock_status);
707 
708 	if (rsp[1] & 0x01) {
709 		rtsx_trace(chip);
710 		return STATUS_FAIL;
711 	}
712 
713 	return STATUS_SUCCESS;
714 }
715 #endif
716 
717 static int sd_wait_state_data_ready(struct rtsx_chip *chip, u8 state,
718 				u8 data_ready, int polling_cnt)
719 {
720 	struct sd_info *sd_card = &(chip->sd_card);
721 	int retval, i;
722 	u8 rsp[5];
723 
724 	for (i = 0; i < polling_cnt; i++) {
725 		retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
726 					sd_card->sd_addr, SD_RSP_TYPE_R1, rsp,
727 					5);
728 		if (retval != STATUS_SUCCESS) {
729 			rtsx_trace(chip);
730 			return STATUS_FAIL;
731 		}
732 
733 		if (((rsp[3] & 0x1E) == state) &&
734 			((rsp[3] & 0x01) == data_ready))
735 			return STATUS_SUCCESS;
736 	}
737 
738 	rtsx_trace(chip);
739 	return STATUS_FAIL;
740 }
741 
742 static int sd_change_bank_voltage(struct rtsx_chip *chip, u8 voltage)
743 {
744 	int retval;
745 
746 	if (voltage == SD_IO_3V3) {
747 		if (chip->asic_code) {
748 			retval = rtsx_write_phy_register(chip, 0x08,
749 							0x4FC0 |
750 							chip->phy_voltage);
751 			if (retval != STATUS_SUCCESS) {
752 				rtsx_trace(chip);
753 				return STATUS_FAIL;
754 			}
755 		} else {
756 			retval = rtsx_write_register(chip, SD_PAD_CTL,
757 						     SD_IO_USING_1V8, 0);
758 			if (retval) {
759 				rtsx_trace(chip);
760 				return retval;
761 			}
762 		}
763 	} else if (voltage == SD_IO_1V8) {
764 		if (chip->asic_code) {
765 			retval = rtsx_write_phy_register(chip, 0x08,
766 							0x4C40 |
767 							chip->phy_voltage);
768 			if (retval != STATUS_SUCCESS) {
769 				rtsx_trace(chip);
770 				return STATUS_FAIL;
771 			}
772 		} else {
773 			retval = rtsx_write_register(chip, SD_PAD_CTL,
774 						     SD_IO_USING_1V8,
775 						     SD_IO_USING_1V8);
776 			if (retval) {
777 				rtsx_trace(chip);
778 				return retval;
779 			}
780 		}
781 	} else {
782 		rtsx_trace(chip);
783 		return STATUS_FAIL;
784 	}
785 
786 	return STATUS_SUCCESS;
787 }
788 
789 static int sd_voltage_switch(struct rtsx_chip *chip)
790 {
791 	int retval;
792 	u8 stat;
793 
794 	retval = rtsx_write_register(chip, SD_BUS_STAT,
795 				     SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
796 				     SD_CLK_TOGGLE_EN);
797 	if (retval) {
798 		rtsx_trace(chip);
799 		return retval;
800 	}
801 
802 	retval = sd_send_cmd_get_rsp(chip, VOLTAGE_SWITCH, 0, SD_RSP_TYPE_R1,
803 				NULL, 0);
804 	if (retval != STATUS_SUCCESS) {
805 		rtsx_trace(chip);
806 		return STATUS_FAIL;
807 	}
808 
809 	udelay(chip->sd_voltage_switch_delay);
810 
811 	retval = rtsx_read_register(chip, SD_BUS_STAT, &stat);
812 	if (retval) {
813 		rtsx_trace(chip);
814 		return retval;
815 	}
816 	if (stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
817 				SD_DAT1_STATUS | SD_DAT0_STATUS)) {
818 		rtsx_trace(chip);
819 		return STATUS_FAIL;
820 	}
821 
822 	retval = rtsx_write_register(chip, SD_BUS_STAT, 0xFF,
823 				     SD_CLK_FORCE_STOP);
824 	if (retval) {
825 		rtsx_trace(chip);
826 		return retval;
827 	}
828 	retval = sd_change_bank_voltage(chip, SD_IO_1V8);
829 	if (retval != STATUS_SUCCESS) {
830 		rtsx_trace(chip);
831 		return STATUS_FAIL;
832 	}
833 
834 	wait_timeout(50);
835 
836 	retval = rtsx_write_register(chip, SD_BUS_STAT, 0xFF,
837 				     SD_CLK_TOGGLE_EN);
838 	if (retval) {
839 		rtsx_trace(chip);
840 		return retval;
841 	}
842 	wait_timeout(10);
843 
844 	retval = rtsx_read_register(chip, SD_BUS_STAT, &stat);
845 	if (retval) {
846 		rtsx_trace(chip);
847 		return retval;
848 	}
849 	if ((stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
850 				SD_DAT1_STATUS | SD_DAT0_STATUS)) !=
851 			(SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
852 				SD_DAT1_STATUS | SD_DAT0_STATUS)) {
853 		dev_dbg(rtsx_dev(chip), "SD_BUS_STAT: 0x%x\n", stat);
854 		rtsx_write_register(chip, SD_BUS_STAT,
855 				SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
856 		rtsx_write_register(chip, CARD_CLK_EN, 0xFF, 0);
857 		rtsx_trace(chip);
858 		return STATUS_FAIL;
859 	}
860 
861 	retval = rtsx_write_register(chip, SD_BUS_STAT,
862 				     SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
863 	if (retval) {
864 		rtsx_trace(chip);
865 		return retval;
866 	}
867 
868 	return STATUS_SUCCESS;
869 }
870 
871 static int sd_reset_dcm(struct rtsx_chip *chip, u8 tune_dir)
872 {
873 	int retval;
874 
875 	if (tune_dir == TUNE_RX) {
876 		retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF,
877 					     DCM_RESET | DCM_RX);
878 		if (retval) {
879 			rtsx_trace(chip);
880 			return retval;
881 		}
882 		retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, DCM_RX);
883 		if (retval) {
884 			rtsx_trace(chip);
885 			return retval;
886 		}
887 	} else {
888 		retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF,
889 					     DCM_RESET | DCM_TX);
890 		if (retval) {
891 			rtsx_trace(chip);
892 			return retval;
893 		}
894 		retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, DCM_TX);
895 		if (retval) {
896 			rtsx_trace(chip);
897 			return retval;
898 		}
899 	}
900 
901 	return STATUS_SUCCESS;
902 }
903 
904 static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir)
905 {
906 	struct sd_info *sd_card = &(chip->sd_card);
907 	u16 SD_VP_CTL, SD_DCMPS_CTL;
908 	u8 val;
909 	int retval;
910 	bool ddr_rx = false;
911 
912 	dev_dbg(rtsx_dev(chip), "sd_change_phase (sample_point = %d, tune_dir = %d)\n",
913 		sample_point, tune_dir);
914 
915 	if (tune_dir == TUNE_RX) {
916 		SD_VP_CTL = SD_VPRX_CTL;
917 		SD_DCMPS_CTL = SD_DCMPS_RX_CTL;
918 		if (CHK_SD_DDR50(sd_card))
919 			ddr_rx = true;
920 	} else {
921 		SD_VP_CTL = SD_VPTX_CTL;
922 		SD_DCMPS_CTL = SD_DCMPS_TX_CTL;
923 	}
924 
925 	if (chip->asic_code) {
926 		retval = rtsx_write_register(chip, CLK_CTL, CHANGE_CLK,
927 					     CHANGE_CLK);
928 		if (retval) {
929 			rtsx_trace(chip);
930 			return retval;
931 		}
932 		retval = rtsx_write_register(chip, SD_VP_CTL, 0x1F,
933 					     sample_point);
934 		if (retval) {
935 			rtsx_trace(chip);
936 			return retval;
937 		}
938 		retval = rtsx_write_register(chip, SD_VPCLK0_CTL,
939 					     PHASE_NOT_RESET, 0);
940 		if (retval) {
941 			rtsx_trace(chip);
942 			return retval;
943 		}
944 		retval = rtsx_write_register(chip, SD_VPCLK0_CTL,
945 					     PHASE_NOT_RESET, PHASE_NOT_RESET);
946 		if (retval) {
947 			rtsx_trace(chip);
948 			return retval;
949 		}
950 		retval = rtsx_write_register(chip, CLK_CTL, CHANGE_CLK, 0);
951 		if (retval) {
952 			rtsx_trace(chip);
953 			return retval;
954 		}
955 	} else {
956 		rtsx_read_register(chip, SD_VP_CTL, &val);
957 		dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
958 		rtsx_read_register(chip, SD_DCMPS_CTL, &val);
959 		dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val);
960 
961 		if (ddr_rx) {
962 			retval = rtsx_write_register(chip, SD_VP_CTL,
963 						     PHASE_CHANGE,
964 						     PHASE_CHANGE);
965 			if (retval) {
966 				rtsx_trace(chip);
967 				return retval;
968 			}
969 			udelay(50);
970 			retval = rtsx_write_register(chip, SD_VP_CTL, 0xFF,
971 						     PHASE_CHANGE | PHASE_NOT_RESET | sample_point);
972 			if (retval) {
973 				rtsx_trace(chip);
974 				return retval;
975 			}
976 		} else {
977 			retval = rtsx_write_register(chip, CLK_CTL,
978 						     CHANGE_CLK, CHANGE_CLK);
979 			if (retval) {
980 				rtsx_trace(chip);
981 				return retval;
982 			}
983 			udelay(50);
984 			retval = rtsx_write_register(chip, SD_VP_CTL, 0xFF,
985 						     PHASE_NOT_RESET | sample_point);
986 			if (retval) {
987 				rtsx_trace(chip);
988 				return retval;
989 			}
990 		}
991 		udelay(100);
992 
993 		rtsx_init_cmd(chip);
994 		rtsx_add_cmd(chip, WRITE_REG_CMD, SD_DCMPS_CTL, DCMPS_CHANGE,
995 			DCMPS_CHANGE);
996 		rtsx_add_cmd(chip, CHECK_REG_CMD, SD_DCMPS_CTL,
997 			DCMPS_CHANGE_DONE, DCMPS_CHANGE_DONE);
998 		retval = rtsx_send_cmd(chip, SD_CARD, 100);
999 		if (retval != STATUS_SUCCESS) {
1000 			rtsx_trace(chip);
1001 			goto Fail;
1002 		}
1003 
1004 		val = *rtsx_get_cmd_data(chip);
1005 		if (val & DCMPS_ERROR) {
1006 			rtsx_trace(chip);
1007 			goto Fail;
1008 		}
1009 
1010 		if ((val & DCMPS_CURRENT_PHASE) != sample_point) {
1011 			rtsx_trace(chip);
1012 			goto Fail;
1013 		}
1014 
1015 		retval = rtsx_write_register(chip, SD_DCMPS_CTL,
1016 					     DCMPS_CHANGE, 0);
1017 		if (retval) {
1018 			rtsx_trace(chip);
1019 			return retval;
1020 		}
1021 		if (ddr_rx) {
1022 			retval = rtsx_write_register(chip, SD_VP_CTL,
1023 						     PHASE_CHANGE, 0);
1024 			if (retval) {
1025 				rtsx_trace(chip);
1026 				return retval;
1027 			}
1028 		} else {
1029 			retval = rtsx_write_register(chip, CLK_CTL,
1030 						     CHANGE_CLK, 0);
1031 			if (retval) {
1032 				rtsx_trace(chip);
1033 				return retval;
1034 			}
1035 		}
1036 
1037 		udelay(50);
1038 	}
1039 
1040 	retval = rtsx_write_register(chip, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0);
1041 	if (retval) {
1042 		rtsx_trace(chip);
1043 		return retval;
1044 	}
1045 
1046 	return STATUS_SUCCESS;
1047 
1048 Fail:
1049 	rtsx_read_register(chip, SD_VP_CTL, &val);
1050 	dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
1051 	rtsx_read_register(chip, SD_DCMPS_CTL, &val);
1052 	dev_dbg(rtsx_dev(chip), "SD_DCMPS_CTL: 0x%x\n", val);
1053 
1054 	rtsx_write_register(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
1055 	rtsx_write_register(chip, SD_VP_CTL, PHASE_CHANGE, 0);
1056 	wait_timeout(10);
1057 	sd_reset_dcm(chip, tune_dir);
1058 	return STATUS_FAIL;
1059 }
1060 
1061 static int sd_check_spec(struct rtsx_chip *chip, u8 bus_width)
1062 {
1063 	struct sd_info *sd_card = &(chip->sd_card);
1064 	int retval;
1065 	u8 cmd[5], buf[8];
1066 
1067 	retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
1068 				SD_RSP_TYPE_R1, NULL, 0);
1069 	if (retval != STATUS_SUCCESS) {
1070 		rtsx_trace(chip);
1071 		return STATUS_FAIL;
1072 	}
1073 
1074 	cmd[0] = 0x40 | SEND_SCR;
1075 	cmd[1] = 0;
1076 	cmd[2] = 0;
1077 	cmd[3] = 0;
1078 	cmd[4] = 0;
1079 
1080 	retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 8, 1, bus_width,
1081 			buf, 8, 250);
1082 	if (retval != STATUS_SUCCESS) {
1083 		rtsx_clear_sd_error(chip);
1084 		rtsx_trace(chip);
1085 		return STATUS_FAIL;
1086 	}
1087 
1088 	memcpy(sd_card->raw_scr, buf, 8);
1089 
1090 	if ((buf[0] & 0x0F) == 0) {
1091 		rtsx_trace(chip);
1092 		return STATUS_FAIL;
1093 	}
1094 
1095 	return STATUS_SUCCESS;
1096 }
1097 
1098 static int sd_query_switch_result(struct rtsx_chip *chip, u8 func_group,
1099 				u8 func_to_switch, u8 *buf, int buf_len)
1100 {
1101 	u8 support_mask = 0, query_switch = 0, switch_busy = 0;
1102 	int support_offset = 0, query_switch_offset = 0, check_busy_offset = 0;
1103 
1104 	if (func_group == SD_FUNC_GROUP_1) {
1105 		support_offset = FUNCTION_GROUP1_SUPPORT_OFFSET;
1106 		query_switch_offset = FUNCTION_GROUP1_QUERY_SWITCH_OFFSET;
1107 		check_busy_offset = FUNCTION_GROUP1_CHECK_BUSY_OFFSET;
1108 
1109 		switch (func_to_switch) {
1110 		case HS_SUPPORT:
1111 			support_mask = HS_SUPPORT_MASK;
1112 			query_switch = HS_QUERY_SWITCH_OK;
1113 			switch_busy = HS_SWITCH_BUSY;
1114 			break;
1115 
1116 		case SDR50_SUPPORT:
1117 			support_mask = SDR50_SUPPORT_MASK;
1118 			query_switch = SDR50_QUERY_SWITCH_OK;
1119 			switch_busy = SDR50_SWITCH_BUSY;
1120 			break;
1121 
1122 		case SDR104_SUPPORT:
1123 			support_mask = SDR104_SUPPORT_MASK;
1124 			query_switch = SDR104_QUERY_SWITCH_OK;
1125 			switch_busy = SDR104_SWITCH_BUSY;
1126 			break;
1127 
1128 		case DDR50_SUPPORT:
1129 			support_mask = DDR50_SUPPORT_MASK;
1130 			query_switch = DDR50_QUERY_SWITCH_OK;
1131 			switch_busy = DDR50_SWITCH_BUSY;
1132 			break;
1133 
1134 		default:
1135 			rtsx_trace(chip);
1136 			return STATUS_FAIL;
1137 		}
1138 	} else if (func_group == SD_FUNC_GROUP_3) {
1139 		support_offset = FUNCTION_GROUP3_SUPPORT_OFFSET;
1140 		query_switch_offset = FUNCTION_GROUP3_QUERY_SWITCH_OFFSET;
1141 		check_busy_offset = FUNCTION_GROUP3_CHECK_BUSY_OFFSET;
1142 
1143 		switch (func_to_switch) {
1144 		case DRIVING_TYPE_A:
1145 			support_mask = DRIVING_TYPE_A_MASK;
1146 			query_switch = TYPE_A_QUERY_SWITCH_OK;
1147 			switch_busy = TYPE_A_SWITCH_BUSY;
1148 			break;
1149 
1150 		case DRIVING_TYPE_C:
1151 			support_mask = DRIVING_TYPE_C_MASK;
1152 			query_switch = TYPE_C_QUERY_SWITCH_OK;
1153 			switch_busy = TYPE_C_SWITCH_BUSY;
1154 			break;
1155 
1156 		case DRIVING_TYPE_D:
1157 			support_mask = DRIVING_TYPE_D_MASK;
1158 			query_switch = TYPE_D_QUERY_SWITCH_OK;
1159 			switch_busy = TYPE_D_SWITCH_BUSY;
1160 			break;
1161 
1162 		default:
1163 			rtsx_trace(chip);
1164 			return STATUS_FAIL;
1165 		}
1166 	} else if (func_group == SD_FUNC_GROUP_4) {
1167 		support_offset = FUNCTION_GROUP4_SUPPORT_OFFSET;
1168 		query_switch_offset = FUNCTION_GROUP4_QUERY_SWITCH_OFFSET;
1169 		check_busy_offset = FUNCTION_GROUP4_CHECK_BUSY_OFFSET;
1170 
1171 		switch (func_to_switch) {
1172 		case CURRENT_LIMIT_400:
1173 			support_mask = CURRENT_LIMIT_400_MASK;
1174 			query_switch = CURRENT_LIMIT_400_QUERY_SWITCH_OK;
1175 			switch_busy = CURRENT_LIMIT_400_SWITCH_BUSY;
1176 			break;
1177 
1178 		case CURRENT_LIMIT_600:
1179 			support_mask = CURRENT_LIMIT_600_MASK;
1180 			query_switch = CURRENT_LIMIT_600_QUERY_SWITCH_OK;
1181 			switch_busy = CURRENT_LIMIT_600_SWITCH_BUSY;
1182 			break;
1183 
1184 		case CURRENT_LIMIT_800:
1185 			support_mask = CURRENT_LIMIT_800_MASK;
1186 			query_switch = CURRENT_LIMIT_800_QUERY_SWITCH_OK;
1187 			switch_busy = CURRENT_LIMIT_800_SWITCH_BUSY;
1188 			break;
1189 
1190 		default:
1191 			rtsx_trace(chip);
1192 			return STATUS_FAIL;
1193 		}
1194 	} else {
1195 		rtsx_trace(chip);
1196 		return STATUS_FAIL;
1197 	}
1198 
1199 	if (func_group == SD_FUNC_GROUP_1) {
1200 		if (!(buf[support_offset] & support_mask) ||
1201 			((buf[query_switch_offset] & 0x0F) != query_switch)) {
1202 			rtsx_trace(chip);
1203 			return STATUS_FAIL;
1204 		}
1205 	}
1206 
1207 	/* Check 'Busy Status' */
1208 	if ((buf[DATA_STRUCTURE_VER_OFFSET] == 0x01) &&
1209 		    ((buf[check_busy_offset] & switch_busy) == switch_busy)) {
1210 		rtsx_trace(chip);
1211 		return STATUS_FAIL;
1212 	}
1213 
1214 	return STATUS_SUCCESS;
1215 }
1216 
1217 static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode,
1218 		u8 func_group, u8 func_to_switch, u8 bus_width)
1219 {
1220 	struct sd_info *sd_card = &(chip->sd_card);
1221 	int retval;
1222 	u8 cmd[5], buf[64];
1223 
1224 	dev_dbg(rtsx_dev(chip), "sd_check_switch_mode (mode = %d, func_group = %d, func_to_switch = %d)\n",
1225 		mode, func_group, func_to_switch);
1226 
1227 	cmd[0] = 0x40 | SWITCH;
1228 	cmd[1] = mode;
1229 
1230 	if (func_group == SD_FUNC_GROUP_1) {
1231 		cmd[2] = 0xFF;
1232 		cmd[3] = 0xFF;
1233 		cmd[4] = 0xF0 + func_to_switch;
1234 	} else if (func_group == SD_FUNC_GROUP_3) {
1235 		cmd[2] = 0xFF;
1236 		cmd[3] = 0xF0 + func_to_switch;
1237 		cmd[4] = 0xFF;
1238 	} else if (func_group == SD_FUNC_GROUP_4) {
1239 		cmd[2] = 0xFF;
1240 		cmd[3] = 0x0F + (func_to_switch << 4);
1241 		cmd[4] = 0xFF;
1242 	} else {
1243 		cmd[1] = SD_CHECK_MODE;
1244 		cmd[2] = 0xFF;
1245 		cmd[3] = 0xFF;
1246 		cmd[4] = 0xFF;
1247 	}
1248 
1249 	retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1, bus_width,
1250 			buf, 64, 250);
1251 	if (retval != STATUS_SUCCESS) {
1252 		rtsx_clear_sd_error(chip);
1253 		rtsx_trace(chip);
1254 		return STATUS_FAIL;
1255 	}
1256 
1257 	dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf);
1258 
1259 	if (func_group == NO_ARGUMENT) {
1260 		sd_card->func_group1_mask = buf[0x0D];
1261 		sd_card->func_group2_mask = buf[0x0B];
1262 		sd_card->func_group3_mask = buf[0x09];
1263 		sd_card->func_group4_mask = buf[0x07];
1264 
1265 		dev_dbg(rtsx_dev(chip), "func_group1_mask = 0x%02x\n",
1266 			buf[0x0D]);
1267 		dev_dbg(rtsx_dev(chip), "func_group2_mask = 0x%02x\n",
1268 			buf[0x0B]);
1269 		dev_dbg(rtsx_dev(chip), "func_group3_mask = 0x%02x\n",
1270 			buf[0x09]);
1271 		dev_dbg(rtsx_dev(chip), "func_group4_mask = 0x%02x\n",
1272 			buf[0x07]);
1273 	} else {
1274 		/* Maximum current consumption, check whether current is
1275 		 * acceptable; bit[511:496] = 0x0000 means some error happened.
1276 		 */
1277 		u16 cc = ((u16)buf[0] << 8) | buf[1];
1278 
1279 		dev_dbg(rtsx_dev(chip), "Maximum current consumption: %dmA\n",
1280 			cc);
1281 		if ((cc == 0) || (cc > 800)) {
1282 			rtsx_trace(chip);
1283 			return STATUS_FAIL;
1284 		}
1285 
1286 		retval = sd_query_switch_result(chip, func_group,
1287 						func_to_switch, buf, 64);
1288 		if (retval != STATUS_SUCCESS) {
1289 			rtsx_trace(chip);
1290 			return STATUS_FAIL;
1291 		}
1292 
1293 		if ((cc > 400) || (func_to_switch > CURRENT_LIMIT_400)) {
1294 			retval = rtsx_write_register(chip, OCPPARA2,
1295 						     SD_OCP_THD_MASK,
1296 						     chip->sd_800mA_ocp_thd);
1297 			if (retval) {
1298 				rtsx_trace(chip);
1299 				return retval;
1300 			}
1301 			retval = rtsx_write_register(chip, CARD_PWR_CTL,
1302 						     PMOS_STRG_MASK,
1303 						     PMOS_STRG_800mA);
1304 			if (retval) {
1305 				rtsx_trace(chip);
1306 				return retval;
1307 			}
1308 		}
1309 	}
1310 
1311 	return STATUS_SUCCESS;
1312 }
1313 
1314 static u8 downgrade_switch_mode(u8 func_group, u8 func_to_switch)
1315 {
1316 	if (func_group == SD_FUNC_GROUP_1) {
1317 		if (func_to_switch > HS_SUPPORT)
1318 			func_to_switch--;
1319 
1320 	} else if (func_group == SD_FUNC_GROUP_4) {
1321 		if (func_to_switch > CURRENT_LIMIT_200)
1322 			func_to_switch--;
1323 	}
1324 
1325 	return func_to_switch;
1326 }
1327 
1328 static int sd_check_switch(struct rtsx_chip *chip,
1329 		u8 func_group, u8 func_to_switch, u8 bus_width)
1330 {
1331 	int retval;
1332 	int i;
1333 	bool switch_good = false;
1334 
1335 	for (i = 0; i < 3; i++) {
1336 		if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1337 			sd_set_err_code(chip, SD_NO_CARD);
1338 			rtsx_trace(chip);
1339 			return STATUS_FAIL;
1340 		}
1341 
1342 		retval = sd_check_switch_mode(chip, SD_CHECK_MODE, func_group,
1343 				func_to_switch, bus_width);
1344 		if (retval == STATUS_SUCCESS) {
1345 			u8 stat;
1346 
1347 			retval = sd_check_switch_mode(chip, SD_SWITCH_MODE,
1348 					func_group, func_to_switch, bus_width);
1349 			if (retval == STATUS_SUCCESS) {
1350 				switch_good = true;
1351 				break;
1352 			}
1353 
1354 			retval = rtsx_read_register(chip, SD_STAT1, &stat);
1355 			if (retval) {
1356 				rtsx_trace(chip);
1357 				return retval;
1358 			}
1359 			if (stat & SD_CRC16_ERR) {
1360 				dev_dbg(rtsx_dev(chip), "SD CRC16 error when switching mode\n");
1361 				rtsx_trace(chip);
1362 				return STATUS_FAIL;
1363 			}
1364 		}
1365 
1366 		func_to_switch = downgrade_switch_mode(func_group,
1367 						func_to_switch);
1368 
1369 		wait_timeout(20);
1370 	}
1371 
1372 	if (!switch_good) {
1373 		rtsx_trace(chip);
1374 		return STATUS_FAIL;
1375 	}
1376 
1377 	return STATUS_SUCCESS;
1378 }
1379 
1380 static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width)
1381 {
1382 	struct sd_info *sd_card = &(chip->sd_card);
1383 	int retval;
1384 	int i;
1385 	u8 func_to_switch = 0;
1386 
1387 	/* Get supported functions */
1388 	retval = sd_check_switch_mode(chip, SD_CHECK_MODE,
1389 			NO_ARGUMENT, NO_ARGUMENT, bus_width);
1390 	if (retval != STATUS_SUCCESS) {
1391 		rtsx_trace(chip);
1392 		return STATUS_FAIL;
1393 	}
1394 
1395 	sd_card->func_group1_mask &= ~(sd_card->sd_switch_fail);
1396 
1397 	/* Function Group 1: Access Mode */
1398 	for (i = 0; i < 4; i++) {
1399 		switch ((u8)(chip->sd_speed_prior >> (i*8))) {
1400 		case SDR104_SUPPORT:
1401 			if ((sd_card->func_group1_mask & SDR104_SUPPORT_MASK)
1402 					&& chip->sdr104_en) {
1403 				func_to_switch = SDR104_SUPPORT;
1404 			}
1405 			break;
1406 
1407 		case DDR50_SUPPORT:
1408 			if ((sd_card->func_group1_mask & DDR50_SUPPORT_MASK)
1409 					&& chip->ddr50_en) {
1410 				func_to_switch = DDR50_SUPPORT;
1411 			}
1412 			break;
1413 
1414 		case SDR50_SUPPORT:
1415 			if ((sd_card->func_group1_mask & SDR50_SUPPORT_MASK)
1416 					&& chip->sdr50_en) {
1417 				func_to_switch = SDR50_SUPPORT;
1418 			}
1419 			break;
1420 
1421 		case HS_SUPPORT:
1422 			if (sd_card->func_group1_mask & HS_SUPPORT_MASK)
1423 				func_to_switch = HS_SUPPORT;
1424 
1425 			break;
1426 
1427 		default:
1428 			continue;
1429 		}
1430 
1431 		if (func_to_switch)
1432 			break;
1433 
1434 	}
1435 	dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_1: func_to_switch = 0x%02x",
1436 		func_to_switch);
1437 
1438 #ifdef SUPPORT_SD_LOCK
1439 	if ((sd_card->sd_lock_status & SD_SDR_RST) &&
1440 	    (func_to_switch == DDR50_SUPPORT) &&
1441 	    (sd_card->func_group1_mask & SDR50_SUPPORT_MASK)) {
1442 		func_to_switch = SDR50_SUPPORT;
1443 		dev_dbg(rtsx_dev(chip), "Using SDR50 instead of DDR50 for SD Lock\n");
1444 	}
1445 #endif
1446 
1447 	if (func_to_switch) {
1448 		retval = sd_check_switch(chip, SD_FUNC_GROUP_1, func_to_switch,
1449 					bus_width);
1450 		if (retval != STATUS_SUCCESS) {
1451 			if (func_to_switch == SDR104_SUPPORT) {
1452 				sd_card->sd_switch_fail = SDR104_SUPPORT_MASK;
1453 			} else if (func_to_switch == DDR50_SUPPORT) {
1454 				sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
1455 					DDR50_SUPPORT_MASK;
1456 			} else if (func_to_switch == SDR50_SUPPORT) {
1457 				sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
1458 					DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK;
1459 			}
1460 			rtsx_trace(chip);
1461 			return STATUS_FAIL;
1462 		}
1463 
1464 		if (func_to_switch == SDR104_SUPPORT)
1465 			SET_SD_SDR104(sd_card);
1466 		else if (func_to_switch == DDR50_SUPPORT)
1467 			SET_SD_DDR50(sd_card);
1468 		else if (func_to_switch == SDR50_SUPPORT)
1469 			SET_SD_SDR50(sd_card);
1470 		else
1471 			SET_SD_HS(sd_card);
1472 	}
1473 
1474 	if (CHK_SD_DDR50(sd_card)) {
1475 		retval = rtsx_write_register(chip, SD_PUSH_POINT_CTL, 0x06,
1476 					     0x04);
1477 		if (retval) {
1478 			rtsx_trace(chip);
1479 			return retval;
1480 		}
1481 		retval = sd_set_sample_push_timing(chip);
1482 		if (retval != STATUS_SUCCESS) {
1483 			rtsx_trace(chip);
1484 			return STATUS_FAIL;
1485 		}
1486 	}
1487 
1488 	if (!func_to_switch || (func_to_switch == HS_SUPPORT)) {
1489 		/* Do not try to switch current limit if the card doesn't
1490 		 * support UHS mode or we don't want it to support UHS mode
1491 		 */
1492 		return STATUS_SUCCESS;
1493 	}
1494 
1495 	/* Function Group 4: Current Limit */
1496 	func_to_switch = 0xFF;
1497 
1498 	for (i = 0; i < 4; i++) {
1499 		switch ((u8)(chip->sd_current_prior >> (i*8))) {
1500 		case CURRENT_LIMIT_800:
1501 			if (sd_card->func_group4_mask & CURRENT_LIMIT_800_MASK)
1502 				func_to_switch = CURRENT_LIMIT_800;
1503 
1504 			break;
1505 
1506 		case CURRENT_LIMIT_600:
1507 			if (sd_card->func_group4_mask & CURRENT_LIMIT_600_MASK)
1508 				func_to_switch = CURRENT_LIMIT_600;
1509 
1510 			break;
1511 
1512 		case CURRENT_LIMIT_400:
1513 			if (sd_card->func_group4_mask & CURRENT_LIMIT_400_MASK)
1514 				func_to_switch = CURRENT_LIMIT_400;
1515 
1516 			break;
1517 
1518 		case CURRENT_LIMIT_200:
1519 			if (sd_card->func_group4_mask & CURRENT_LIMIT_200_MASK)
1520 				func_to_switch = CURRENT_LIMIT_200;
1521 
1522 			break;
1523 
1524 		default:
1525 			continue;
1526 		}
1527 
1528 		if (func_to_switch != 0xFF)
1529 			break;
1530 	}
1531 
1532 	dev_dbg(rtsx_dev(chip), "SD_FUNC_GROUP_4: func_to_switch = 0x%02x",
1533 		func_to_switch);
1534 
1535 	if (func_to_switch <= CURRENT_LIMIT_800) {
1536 		retval = sd_check_switch(chip, SD_FUNC_GROUP_4, func_to_switch,
1537 					bus_width);
1538 		if (retval != STATUS_SUCCESS) {
1539 			if (sd_check_err_code(chip, SD_NO_CARD)) {
1540 				rtsx_trace(chip);
1541 				return STATUS_FAIL;
1542 			}
1543 		}
1544 		dev_dbg(rtsx_dev(chip), "Switch current limit finished! (%d)\n",
1545 			retval);
1546 	}
1547 
1548 	if (CHK_SD_DDR50(sd_card)) {
1549 		retval = rtsx_write_register(chip, SD_PUSH_POINT_CTL, 0x06, 0);
1550 		if (retval) {
1551 			rtsx_trace(chip);
1552 			return retval;
1553 		}
1554 	}
1555 
1556 	return STATUS_SUCCESS;
1557 }
1558 
1559 static int sd_wait_data_idle(struct rtsx_chip *chip)
1560 {
1561 	int retval = STATUS_TIMEDOUT;
1562 	int i;
1563 	u8 val = 0;
1564 
1565 	for (i = 0; i < 100; i++) {
1566 		retval = rtsx_read_register(chip, SD_DATA_STATE, &val);
1567 		if (retval) {
1568 			rtsx_trace(chip);
1569 			return retval;
1570 		}
1571 		if (val & SD_DATA_IDLE) {
1572 			retval = STATUS_SUCCESS;
1573 			break;
1574 		}
1575 		udelay(100);
1576 	}
1577 	dev_dbg(rtsx_dev(chip), "SD_DATA_STATE: 0x%02x\n", val);
1578 
1579 	return retval;
1580 }
1581 
1582 static int sd_sdr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1583 {
1584 	int retval;
1585 	u8 cmd[5];
1586 
1587 	retval = sd_change_phase(chip, sample_point, TUNE_RX);
1588 	if (retval != STATUS_SUCCESS) {
1589 		rtsx_trace(chip);
1590 		return STATUS_FAIL;
1591 	}
1592 
1593 	cmd[0] = 0x40 | SEND_TUNING_PATTERN;
1594 	cmd[1] = 0;
1595 	cmd[2] = 0;
1596 	cmd[3] = 0;
1597 	cmd[4] = 0;
1598 
1599 	retval = sd_read_data(chip, SD_TM_AUTO_TUNING,
1600 			cmd, 5, 0x40, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
1601 	if (retval != STATUS_SUCCESS) {
1602 		(void)sd_wait_data_idle(chip);
1603 
1604 		rtsx_clear_sd_error(chip);
1605 		rtsx_trace(chip);
1606 		return STATUS_FAIL;
1607 	}
1608 
1609 	return STATUS_SUCCESS;
1610 }
1611 
1612 static int sd_ddr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1613 {
1614 	struct sd_info *sd_card = &(chip->sd_card);
1615 	int retval;
1616 	u8 cmd[5];
1617 
1618 	retval = sd_change_phase(chip, sample_point, TUNE_RX);
1619 	if (retval != STATUS_SUCCESS) {
1620 		rtsx_trace(chip);
1621 		return STATUS_FAIL;
1622 	}
1623 
1624 	dev_dbg(rtsx_dev(chip), "sd ddr tuning rx\n");
1625 
1626 	retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
1627 				SD_RSP_TYPE_R1, NULL, 0);
1628 	if (retval != STATUS_SUCCESS) {
1629 		rtsx_trace(chip);
1630 		return STATUS_FAIL;
1631 	}
1632 
1633 	cmd[0] = 0x40 | SD_STATUS;
1634 	cmd[1] = 0;
1635 	cmd[2] = 0;
1636 	cmd[3] = 0;
1637 	cmd[4] = 0;
1638 
1639 	retval = sd_read_data(chip, SD_TM_NORMAL_READ,
1640 			cmd, 5, 64, 1, SD_BUS_WIDTH_4, NULL, 0, 100);
1641 	if (retval != STATUS_SUCCESS) {
1642 		(void)sd_wait_data_idle(chip);
1643 
1644 		rtsx_clear_sd_error(chip);
1645 		rtsx_trace(chip);
1646 		return STATUS_FAIL;
1647 	}
1648 
1649 	return STATUS_SUCCESS;
1650 }
1651 
1652 static int mmc_ddr_tunning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
1653 {
1654 	struct sd_info *sd_card = &(chip->sd_card);
1655 	int retval;
1656 	u8 cmd[5], bus_width;
1657 
1658 	if (CHK_MMC_8BIT(sd_card))
1659 		bus_width = SD_BUS_WIDTH_8;
1660 	else if (CHK_MMC_4BIT(sd_card))
1661 		bus_width = SD_BUS_WIDTH_4;
1662 	else
1663 		bus_width = SD_BUS_WIDTH_1;
1664 
1665 	retval = sd_change_phase(chip, sample_point, TUNE_RX);
1666 	if (retval != STATUS_SUCCESS) {
1667 		rtsx_trace(chip);
1668 		return STATUS_FAIL;
1669 	}
1670 
1671 	dev_dbg(rtsx_dev(chip), "mmc ddr tuning rx\n");
1672 
1673 	cmd[0] = 0x40 | SEND_EXT_CSD;
1674 	cmd[1] = 0;
1675 	cmd[2] = 0;
1676 	cmd[3] = 0;
1677 	cmd[4] = 0;
1678 
1679 	retval = sd_read_data(chip, SD_TM_NORMAL_READ,
1680 			cmd, 5, 0x200, 1, bus_width, NULL, 0, 100);
1681 	if (retval != STATUS_SUCCESS) {
1682 		(void)sd_wait_data_idle(chip);
1683 
1684 		rtsx_clear_sd_error(chip);
1685 		rtsx_trace(chip);
1686 		return STATUS_FAIL;
1687 	}
1688 
1689 	return STATUS_SUCCESS;
1690 }
1691 
1692 static int sd_sdr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
1693 {
1694 	struct sd_info *sd_card = &(chip->sd_card);
1695 	int retval;
1696 
1697 	retval = sd_change_phase(chip, sample_point, TUNE_TX);
1698 	if (retval != STATUS_SUCCESS) {
1699 		rtsx_trace(chip);
1700 		return STATUS_FAIL;
1701 	}
1702 
1703 	retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1704 				     SD_RSP_80CLK_TIMEOUT_EN);
1705 	if (retval) {
1706 		rtsx_trace(chip);
1707 		return retval;
1708 	}
1709 
1710 	retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
1711 		SD_RSP_TYPE_R1, NULL, 0);
1712 	if (retval != STATUS_SUCCESS) {
1713 		if (sd_check_err_code(chip, SD_RSP_TIMEOUT)) {
1714 			rtsx_write_register(chip, SD_CFG3,
1715 					SD_RSP_80CLK_TIMEOUT_EN, 0);
1716 			rtsx_trace(chip);
1717 			return STATUS_FAIL;
1718 		}
1719 	}
1720 
1721 	retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1722 				     0);
1723 	if (retval) {
1724 		rtsx_trace(chip);
1725 		return retval;
1726 	}
1727 
1728 	return STATUS_SUCCESS;
1729 }
1730 
1731 static int sd_ddr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
1732 {
1733 	struct sd_info *sd_card = &(chip->sd_card);
1734 	int retval;
1735 	u8 cmd[5], bus_width;
1736 
1737 	retval = sd_change_phase(chip, sample_point, TUNE_TX);
1738 	if (retval != STATUS_SUCCESS) {
1739 		rtsx_trace(chip);
1740 		return STATUS_FAIL;
1741 	}
1742 
1743 	if (CHK_SD(sd_card)) {
1744 		bus_width = SD_BUS_WIDTH_4;
1745 	} else {
1746 		if (CHK_MMC_8BIT(sd_card))
1747 			bus_width = SD_BUS_WIDTH_8;
1748 		else if (CHK_MMC_4BIT(sd_card))
1749 			bus_width = SD_BUS_WIDTH_4;
1750 		else
1751 			bus_width = SD_BUS_WIDTH_1;
1752 	}
1753 
1754 	retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
1755 	if (retval != STATUS_SUCCESS) {
1756 		rtsx_trace(chip);
1757 		return STATUS_FAIL;
1758 	}
1759 
1760 	retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1761 				     SD_RSP_80CLK_TIMEOUT_EN);
1762 	if (retval) {
1763 		rtsx_trace(chip);
1764 		return retval;
1765 	}
1766 
1767 	cmd[0] = 0x40 | PROGRAM_CSD;
1768 	cmd[1] = 0;
1769 	cmd[2] = 0;
1770 	cmd[3] = 0;
1771 	cmd[4] = 0;
1772 
1773 	retval = sd_write_data(chip, SD_TM_AUTO_WRITE_2,
1774 			cmd, 5, 16, 1, bus_width, sd_card->raw_csd, 16, 100);
1775 	if (retval != STATUS_SUCCESS) {
1776 		rtsx_clear_sd_error(chip);
1777 		rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
1778 		rtsx_trace(chip);
1779 		return STATUS_FAIL;
1780 	}
1781 
1782 	retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1783 				     0);
1784 	if (retval) {
1785 		rtsx_trace(chip);
1786 		return retval;
1787 	}
1788 
1789 	sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1,
1790 			NULL, 0);
1791 
1792 	return STATUS_SUCCESS;
1793 }
1794 
1795 static u8 sd_search_final_phase(struct rtsx_chip *chip, u32 phase_map,
1796 				u8 tune_dir)
1797 {
1798 	struct sd_info *sd_card = &(chip->sd_card);
1799 	struct timing_phase_path path[MAX_PHASE + 1];
1800 	int i, j, cont_path_cnt;
1801 	bool new_block;
1802 	int max_len, final_path_idx;
1803 	u8 final_phase = 0xFF;
1804 
1805 	if (phase_map == 0xFFFFFFFF) {
1806 		if (tune_dir == TUNE_RX)
1807 			final_phase = (u8)chip->sd_default_rx_phase;
1808 		else
1809 			final_phase = (u8)chip->sd_default_tx_phase;
1810 
1811 		goto Search_Finish;
1812 	}
1813 
1814 	cont_path_cnt = 0;
1815 	new_block = true;
1816 	j = 0;
1817 	for (i = 0; i < MAX_PHASE + 1; i++) {
1818 		if (phase_map & (1 << i)) {
1819 			if (new_block) {
1820 				new_block = false;
1821 				j = cont_path_cnt++;
1822 				path[j].start = i;
1823 				path[j].end = i;
1824 			} else {
1825 				path[j].end = i;
1826 			}
1827 		} else {
1828 			new_block = true;
1829 			if (cont_path_cnt) {
1830 				int idx = cont_path_cnt - 1;
1831 
1832 				path[idx].len = path[idx].end -
1833 					path[idx].start + 1;
1834 				path[idx].mid = path[idx].start +
1835 					path[idx].len / 2;
1836 			}
1837 		}
1838 	}
1839 
1840 	if (cont_path_cnt == 0) {
1841 		dev_dbg(rtsx_dev(chip), "No continuous phase path\n");
1842 		goto Search_Finish;
1843 	} else {
1844 		int idx = cont_path_cnt - 1;
1845 
1846 		path[idx].len = path[idx].end - path[idx].start + 1;
1847 		path[idx].mid = path[idx].start + path[idx].len / 2;
1848 	}
1849 
1850 	if ((path[0].start == 0) &&
1851 		(path[cont_path_cnt - 1].end == MAX_PHASE)) {
1852 		path[0].start = path[cont_path_cnt - 1].start - MAX_PHASE - 1;
1853 		path[0].len += path[cont_path_cnt - 1].len;
1854 		path[0].mid = path[0].start + path[0].len / 2;
1855 		if (path[0].mid < 0)
1856 			path[0].mid += MAX_PHASE + 1;
1857 
1858 		cont_path_cnt--;
1859 	}
1860 
1861 	max_len = 0;
1862 	final_phase = 0;
1863 	final_path_idx = 0;
1864 	for (i = 0; i < cont_path_cnt; i++) {
1865 		if (path[i].len > max_len) {
1866 			max_len = path[i].len;
1867 			final_phase = (u8)path[i].mid;
1868 			final_path_idx = i;
1869 		}
1870 
1871 		dev_dbg(rtsx_dev(chip), "path[%d].start = %d\n",
1872 			i, path[i].start);
1873 		dev_dbg(rtsx_dev(chip), "path[%d].end = %d\n", i, path[i].end);
1874 		dev_dbg(rtsx_dev(chip), "path[%d].len = %d\n", i, path[i].len);
1875 		dev_dbg(rtsx_dev(chip), "path[%d].mid = %d\n", i, path[i].mid);
1876 		dev_dbg(rtsx_dev(chip), "\n");
1877 	}
1878 
1879 	if (tune_dir == TUNE_TX) {
1880 		if (CHK_SD_SDR104(sd_card)) {
1881 			if (max_len > 15) {
1882 				int temp_mid = (max_len - 16) / 2;
1883 				int temp_final_phase =
1884 					path[final_path_idx].end -
1885 					(max_len - (6 + temp_mid));
1886 
1887 				if (temp_final_phase < 0)
1888 					final_phase = (u8)(temp_final_phase +
1889 							MAX_PHASE + 1);
1890 				else
1891 					final_phase = (u8)temp_final_phase;
1892 			}
1893 		} else if (CHK_SD_SDR50(sd_card)) {
1894 			if (max_len > 12) {
1895 				int temp_mid = (max_len - 13) / 2;
1896 				int temp_final_phase =
1897 					path[final_path_idx].end -
1898 					(max_len - (3 + temp_mid));
1899 
1900 				if (temp_final_phase < 0)
1901 					final_phase = (u8)(temp_final_phase +
1902 							MAX_PHASE + 1);
1903 				else
1904 					final_phase = (u8)temp_final_phase;
1905 			}
1906 		}
1907 	}
1908 
1909 Search_Finish:
1910 	dev_dbg(rtsx_dev(chip), "Final chosen phase: %d\n", final_phase);
1911 	return final_phase;
1912 }
1913 
1914 static int sd_tuning_rx(struct rtsx_chip *chip)
1915 {
1916 	struct sd_info *sd_card = &(chip->sd_card);
1917 	int retval;
1918 	int i, j;
1919 	u32 raw_phase_map[3], phase_map;
1920 	u8 final_phase;
1921 	int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
1922 
1923 	if (CHK_SD(sd_card)) {
1924 		if (CHK_SD_DDR50(sd_card))
1925 			tuning_cmd = sd_ddr_tuning_rx_cmd;
1926 		else
1927 			tuning_cmd = sd_sdr_tuning_rx_cmd;
1928 
1929 	} else {
1930 		if (CHK_MMC_DDR52(sd_card)) {
1931 			tuning_cmd = mmc_ddr_tunning_rx_cmd;
1932 		} else {
1933 			rtsx_trace(chip);
1934 			return STATUS_FAIL;
1935 		}
1936 	}
1937 
1938 	for (i = 0; i < 3; i++) {
1939 		raw_phase_map[i] = 0;
1940 		for (j = MAX_PHASE; j >= 0; j--) {
1941 			if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1942 				sd_set_err_code(chip, SD_NO_CARD);
1943 				rtsx_trace(chip);
1944 				return STATUS_FAIL;
1945 			}
1946 
1947 			retval = tuning_cmd(chip, (u8)j);
1948 			if (retval == STATUS_SUCCESS)
1949 				raw_phase_map[i] |= 1 << j;
1950 		}
1951 	}
1952 
1953 	phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1954 	for (i = 0; i < 3; i++)
1955 		dev_dbg(rtsx_dev(chip), "RX raw_phase_map[%d] = 0x%08x\n",
1956 			i, raw_phase_map[i]);
1957 
1958 	dev_dbg(rtsx_dev(chip), "RX phase_map = 0x%08x\n", phase_map);
1959 
1960 	final_phase = sd_search_final_phase(chip, phase_map, TUNE_RX);
1961 	if (final_phase == 0xFF) {
1962 		rtsx_trace(chip);
1963 		return STATUS_FAIL;
1964 	}
1965 
1966 	retval = sd_change_phase(chip, final_phase, TUNE_RX);
1967 	if (retval != STATUS_SUCCESS) {
1968 		rtsx_trace(chip);
1969 		return STATUS_FAIL;
1970 	}
1971 
1972 	return STATUS_SUCCESS;
1973 }
1974 
1975 static int sd_ddr_pre_tuning_tx(struct rtsx_chip *chip)
1976 {
1977 	struct sd_info *sd_card = &(chip->sd_card);
1978 	int retval;
1979 	int i;
1980 	u32 phase_map;
1981 	u8 final_phase;
1982 
1983 	retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
1984 				     SD_RSP_80CLK_TIMEOUT_EN);
1985 	if (retval) {
1986 		rtsx_trace(chip);
1987 		return retval;
1988 	}
1989 
1990 	phase_map = 0;
1991 	for (i = MAX_PHASE; i >= 0; i--) {
1992 		if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
1993 			sd_set_err_code(chip, SD_NO_CARD);
1994 			rtsx_write_register(chip, SD_CFG3,
1995 						SD_RSP_80CLK_TIMEOUT_EN, 0);
1996 			rtsx_trace(chip);
1997 			return STATUS_FAIL;
1998 		}
1999 
2000 		retval = sd_change_phase(chip, (u8)i, TUNE_TX);
2001 		if (retval != STATUS_SUCCESS)
2002 			continue;
2003 
2004 		retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
2005 					sd_card->sd_addr, SD_RSP_TYPE_R1, NULL,
2006 					0);
2007 		if ((retval == STATUS_SUCCESS) ||
2008 			!sd_check_err_code(chip, SD_RSP_TIMEOUT))
2009 			phase_map |= 1 << i;
2010 	}
2011 
2012 	retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
2013 				     0);
2014 	if (retval) {
2015 		rtsx_trace(chip);
2016 		return retval;
2017 	}
2018 
2019 	dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase_map = 0x%08x\n",
2020 		phase_map);
2021 
2022 	final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
2023 	if (final_phase == 0xFF) {
2024 		rtsx_trace(chip);
2025 		return STATUS_FAIL;
2026 	}
2027 
2028 	retval = sd_change_phase(chip, final_phase, TUNE_TX);
2029 	if (retval != STATUS_SUCCESS) {
2030 		rtsx_trace(chip);
2031 		return STATUS_FAIL;
2032 	}
2033 
2034 	dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase: %d\n",
2035 		(int)final_phase);
2036 
2037 	return STATUS_SUCCESS;
2038 }
2039 
2040 static int sd_tuning_tx(struct rtsx_chip *chip)
2041 {
2042 	struct sd_info *sd_card = &(chip->sd_card);
2043 	int retval;
2044 	int i, j;
2045 	u32 raw_phase_map[3], phase_map;
2046 	u8 final_phase;
2047 	int (*tuning_cmd)(struct rtsx_chip *chip, u8 sample_point);
2048 
2049 	if (CHK_SD(sd_card)) {
2050 		if (CHK_SD_DDR50(sd_card))
2051 			tuning_cmd = sd_ddr_tuning_tx_cmd;
2052 		else
2053 			tuning_cmd = sd_sdr_tuning_tx_cmd;
2054 
2055 	} else {
2056 		if (CHK_MMC_DDR52(sd_card)) {
2057 			tuning_cmd = sd_ddr_tuning_tx_cmd;
2058 		} else {
2059 			rtsx_trace(chip);
2060 			return STATUS_FAIL;
2061 		}
2062 	}
2063 
2064 	for (i = 0; i < 3; i++) {
2065 		raw_phase_map[i] = 0;
2066 		for (j = MAX_PHASE; j >= 0; j--) {
2067 			if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2068 				sd_set_err_code(chip, SD_NO_CARD);
2069 				rtsx_write_register(chip, SD_CFG3,
2070 						    SD_RSP_80CLK_TIMEOUT_EN, 0);
2071 				rtsx_trace(chip);
2072 				return STATUS_FAIL;
2073 			}
2074 
2075 			retval = tuning_cmd(chip, (u8)j);
2076 			if (retval == STATUS_SUCCESS)
2077 				raw_phase_map[i] |= 1 << j;
2078 		}
2079 	}
2080 
2081 	phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
2082 	for (i = 0; i < 3; i++)
2083 		dev_dbg(rtsx_dev(chip), "TX raw_phase_map[%d] = 0x%08x\n",
2084 			i, raw_phase_map[i]);
2085 
2086 	dev_dbg(rtsx_dev(chip), "TX phase_map = 0x%08x\n", phase_map);
2087 
2088 	final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
2089 	if (final_phase == 0xFF) {
2090 		rtsx_trace(chip);
2091 		return STATUS_FAIL;
2092 	}
2093 
2094 	retval = sd_change_phase(chip, final_phase, TUNE_TX);
2095 	if (retval != STATUS_SUCCESS) {
2096 		rtsx_trace(chip);
2097 		return STATUS_FAIL;
2098 	}
2099 
2100 	return STATUS_SUCCESS;
2101 }
2102 
2103 static int sd_sdr_tuning(struct rtsx_chip *chip)
2104 {
2105 	int retval;
2106 
2107 	retval = sd_tuning_tx(chip);
2108 	if (retval != STATUS_SUCCESS) {
2109 		rtsx_trace(chip);
2110 		return STATUS_FAIL;
2111 	}
2112 
2113 	retval = sd_tuning_rx(chip);
2114 	if (retval != STATUS_SUCCESS) {
2115 		rtsx_trace(chip);
2116 		return STATUS_FAIL;
2117 	}
2118 
2119 	return STATUS_SUCCESS;
2120 }
2121 
2122 static int sd_ddr_tuning(struct rtsx_chip *chip)
2123 {
2124 	int retval;
2125 
2126 	if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
2127 		retval = sd_ddr_pre_tuning_tx(chip);
2128 		if (retval != STATUS_SUCCESS) {
2129 			rtsx_trace(chip);
2130 			return STATUS_FAIL;
2131 		}
2132 	} else {
2133 		retval = sd_change_phase(chip, (u8)chip->sd_ddr_tx_phase,
2134 					TUNE_TX);
2135 		if (retval != STATUS_SUCCESS) {
2136 			rtsx_trace(chip);
2137 			return STATUS_FAIL;
2138 		}
2139 	}
2140 
2141 	retval = sd_tuning_rx(chip);
2142 	if (retval != STATUS_SUCCESS) {
2143 		rtsx_trace(chip);
2144 		return STATUS_FAIL;
2145 	}
2146 
2147 	if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
2148 		retval = sd_tuning_tx(chip);
2149 		if (retval != STATUS_SUCCESS) {
2150 			rtsx_trace(chip);
2151 			return STATUS_FAIL;
2152 		}
2153 	}
2154 
2155 	return STATUS_SUCCESS;
2156 }
2157 
2158 static int mmc_ddr_tuning(struct rtsx_chip *chip)
2159 {
2160 	int retval;
2161 
2162 	if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
2163 		retval = sd_ddr_pre_tuning_tx(chip);
2164 		if (retval != STATUS_SUCCESS) {
2165 			rtsx_trace(chip);
2166 			return STATUS_FAIL;
2167 		}
2168 	} else {
2169 		retval = sd_change_phase(chip, (u8)chip->mmc_ddr_tx_phase,
2170 					TUNE_TX);
2171 		if (retval != STATUS_SUCCESS) {
2172 			rtsx_trace(chip);
2173 			return STATUS_FAIL;
2174 		}
2175 	}
2176 
2177 	retval = sd_tuning_rx(chip);
2178 	if (retval != STATUS_SUCCESS) {
2179 		rtsx_trace(chip);
2180 		return STATUS_FAIL;
2181 	}
2182 
2183 	if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
2184 		retval = sd_tuning_tx(chip);
2185 		if (retval != STATUS_SUCCESS) {
2186 			rtsx_trace(chip);
2187 			return STATUS_FAIL;
2188 		}
2189 	}
2190 
2191 	return STATUS_SUCCESS;
2192 }
2193 
2194 int sd_switch_clock(struct rtsx_chip *chip)
2195 {
2196 	struct sd_info *sd_card = &(chip->sd_card);
2197 	int retval;
2198 	int re_tuning = 0;
2199 
2200 	retval = select_card(chip, SD_CARD);
2201 	if (retval != STATUS_SUCCESS) {
2202 		rtsx_trace(chip);
2203 		return STATUS_FAIL;
2204 	}
2205 
2206 	retval = switch_clock(chip, sd_card->sd_clock);
2207 	if (retval != STATUS_SUCCESS) {
2208 		rtsx_trace(chip);
2209 		return STATUS_FAIL;
2210 	}
2211 
2212 	if (re_tuning) {
2213 		if (CHK_SD(sd_card)) {
2214 			if (CHK_SD_DDR50(sd_card))
2215 				retval = sd_ddr_tuning(chip);
2216 			else
2217 				retval = sd_sdr_tuning(chip);
2218 		} else {
2219 			if (CHK_MMC_DDR52(sd_card))
2220 				retval = mmc_ddr_tuning(chip);
2221 		}
2222 
2223 		if (retval != STATUS_SUCCESS) {
2224 			rtsx_trace(chip);
2225 			return STATUS_FAIL;
2226 		}
2227 	}
2228 
2229 	return STATUS_SUCCESS;
2230 }
2231 
2232 static int sd_prepare_reset(struct rtsx_chip *chip)
2233 {
2234 	struct sd_info *sd_card = &(chip->sd_card);
2235 	int retval;
2236 
2237 	if (chip->asic_code)
2238 		sd_card->sd_clock = 29;
2239 	else
2240 		sd_card->sd_clock = CLK_30;
2241 
2242 	sd_card->sd_type = 0;
2243 	sd_card->seq_mode = 0;
2244 	sd_card->sd_data_buf_ready = 0;
2245 	sd_card->capacity = 0;
2246 
2247 #ifdef SUPPORT_SD_LOCK
2248 	sd_card->sd_lock_status = 0;
2249 	sd_card->sd_erase_status = 0;
2250 #endif
2251 
2252 	chip->capacity[chip->card2lun[SD_CARD]] = 0;
2253 	chip->sd_io = 0;
2254 
2255 	retval = sd_set_init_para(chip);
2256 	if (retval != STATUS_SUCCESS) {
2257 		rtsx_trace(chip);
2258 		return retval;
2259 	}
2260 
2261 	retval = rtsx_write_register(chip, REG_SD_CFG1, 0xFF, 0x40);
2262 	if (retval) {
2263 		rtsx_trace(chip);
2264 		return retval;
2265 	}
2266 
2267 	retval = rtsx_write_register(chip, CARD_STOP, SD_STOP | SD_CLR_ERR,
2268 				     SD_STOP | SD_CLR_ERR);
2269 	if (retval) {
2270 		rtsx_trace(chip);
2271 		return retval;
2272 	}
2273 
2274 	retval = select_card(chip, SD_CARD);
2275 	if (retval != STATUS_SUCCESS) {
2276 		rtsx_trace(chip);
2277 		return STATUS_FAIL;
2278 	}
2279 
2280 	return STATUS_SUCCESS;
2281 }
2282 
2283 static int sd_pull_ctl_disable(struct rtsx_chip *chip)
2284 {
2285 	int retval;
2286 
2287 	if (CHECK_PID(chip, 0x5208)) {
2288 		retval = rtsx_write_register(chip, CARD_PULL_CTL1, 0xFF,
2289 					     XD_D3_PD | SD_D7_PD | SD_CLK_PD | SD_D5_PD);
2290 		if (retval) {
2291 			rtsx_trace(chip);
2292 			return retval;
2293 		}
2294 		retval = rtsx_write_register(chip, CARD_PULL_CTL2, 0xFF,
2295 					     SD_D6_PD | SD_D0_PD | SD_D1_PD | XD_D5_PD);
2296 		if (retval) {
2297 			rtsx_trace(chip);
2298 			return retval;
2299 		}
2300 		retval = rtsx_write_register(chip, CARD_PULL_CTL3, 0xFF,
2301 					     SD_D4_PD | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
2302 		if (retval) {
2303 			rtsx_trace(chip);
2304 			return retval;
2305 		}
2306 		retval = rtsx_write_register(chip, CARD_PULL_CTL4, 0xFF,
2307 					     XD_RDY_PD | SD_D3_PD | SD_D2_PD | XD_ALE_PD);
2308 		if (retval) {
2309 			rtsx_trace(chip);
2310 			return retval;
2311 		}
2312 		retval = rtsx_write_register(chip, CARD_PULL_CTL5, 0xFF,
2313 					     MS_INS_PU | SD_WP_PD | SD_CD_PU | SD_CMD_PD);
2314 		if (retval) {
2315 			rtsx_trace(chip);
2316 			return retval;
2317 		}
2318 		retval = rtsx_write_register(chip, CARD_PULL_CTL6, 0xFF,
2319 					     MS_D5_PD | MS_D4_PD);
2320 		if (retval) {
2321 			rtsx_trace(chip);
2322 			return retval;
2323 		}
2324 	} else if (CHECK_PID(chip, 0x5288)) {
2325 		if (CHECK_BARO_PKG(chip, QFN)) {
2326 			retval = rtsx_write_register(chip, CARD_PULL_CTL1,
2327 						     0xFF, 0x55);
2328 			if (retval) {
2329 				rtsx_trace(chip);
2330 				return retval;
2331 			}
2332 			retval = rtsx_write_register(chip, CARD_PULL_CTL2,
2333 						     0xFF, 0x55);
2334 			if (retval) {
2335 				rtsx_trace(chip);
2336 				return retval;
2337 			}
2338 			retval = rtsx_write_register(chip, CARD_PULL_CTL3,
2339 						     0xFF, 0x4B);
2340 			if (retval) {
2341 				rtsx_trace(chip);
2342 				return retval;
2343 			}
2344 			retval = rtsx_write_register(chip, CARD_PULL_CTL4,
2345 						     0xFF, 0x69);
2346 			if (retval) {
2347 				rtsx_trace(chip);
2348 				return retval;
2349 			}
2350 		}
2351 	}
2352 
2353 	return STATUS_SUCCESS;
2354 }
2355 
2356 int sd_pull_ctl_enable(struct rtsx_chip *chip)
2357 {
2358 	int retval;
2359 
2360 	rtsx_init_cmd(chip);
2361 
2362 	if (CHECK_PID(chip, 0x5208)) {
2363 		rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF,
2364 			XD_D3_PD | SD_DAT7_PU | SD_CLK_NP | SD_D5_PU);
2365 		rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF,
2366 			SD_D6_PU | SD_D0_PU | SD_D1_PU | XD_D5_PD);
2367 		rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF,
2368 			SD_D4_PU | XD_CE_PD | XD_CLE_PD | XD_CD_PU);
2369 		rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF,
2370 			XD_RDY_PD | SD_D3_PU | SD_D2_PU | XD_ALE_PD);
2371 		rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL5, 0xFF,
2372 			MS_INS_PU | SD_WP_PU | SD_CD_PU | SD_CMD_PU);
2373 		rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL6, 0xFF,
2374 			MS_D5_PD | MS_D4_PD);
2375 	} else if (CHECK_PID(chip, 0x5288)) {
2376 		if (CHECK_BARO_PKG(chip, QFN)) {
2377 			rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL1, 0xFF,
2378 				0xA8);
2379 			rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL2, 0xFF,
2380 				0x5A);
2381 			rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL3, 0xFF,
2382 				0x95);
2383 			rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_PULL_CTL4, 0xFF,
2384 				0xAA);
2385 		}
2386 	}
2387 
2388 	retval = rtsx_send_cmd(chip, SD_CARD, 100);
2389 	if (retval < 0) {
2390 		rtsx_trace(chip);
2391 		return STATUS_FAIL;
2392 	}
2393 
2394 	return STATUS_SUCCESS;
2395 }
2396 
2397 static int sd_init_power(struct rtsx_chip *chip)
2398 {
2399 	int retval;
2400 
2401 	retval = sd_power_off_card3v3(chip);
2402 	if (retval != STATUS_SUCCESS) {
2403 		rtsx_trace(chip);
2404 		return STATUS_FAIL;
2405 	}
2406 
2407 	if (!chip->ft2_fast_mode)
2408 		wait_timeout(250);
2409 
2410 	retval = enable_card_clock(chip, SD_CARD);
2411 	if (retval != STATUS_SUCCESS) {
2412 		rtsx_trace(chip);
2413 		return STATUS_FAIL;
2414 	}
2415 
2416 	if (chip->asic_code) {
2417 		retval = sd_pull_ctl_enable(chip);
2418 		if (retval != STATUS_SUCCESS) {
2419 			rtsx_trace(chip);
2420 			return STATUS_FAIL;
2421 		}
2422 	} else {
2423 		retval = rtsx_write_register(chip, FPGA_PULL_CTL,
2424 					     FPGA_SD_PULL_CTL_BIT | 0x20, 0);
2425 		if (retval) {
2426 			rtsx_trace(chip);
2427 			return retval;
2428 		}
2429 	}
2430 
2431 	if (!chip->ft2_fast_mode) {
2432 		retval = card_power_on(chip, SD_CARD);
2433 		if (retval != STATUS_SUCCESS) {
2434 			rtsx_trace(chip);
2435 			return STATUS_FAIL;
2436 		}
2437 
2438 		wait_timeout(260);
2439 
2440 #ifdef SUPPORT_OCP
2441 		if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
2442 			dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
2443 				chip->ocp_stat);
2444 			rtsx_trace(chip);
2445 			return STATUS_FAIL;
2446 		}
2447 #endif
2448 	}
2449 
2450 	retval = rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN,
2451 				     SD_OUTPUT_EN);
2452 	if (retval) {
2453 		rtsx_trace(chip);
2454 		return retval;
2455 	}
2456 
2457 	return STATUS_SUCCESS;
2458 }
2459 
2460 static int sd_dummy_clock(struct rtsx_chip *chip)
2461 {
2462 	int retval;
2463 
2464 	retval = rtsx_write_register(chip, REG_SD_CFG3, 0x01, 0x01);
2465 	if (retval) {
2466 		rtsx_trace(chip);
2467 		return retval;
2468 	}
2469 	wait_timeout(5);
2470 	retval = rtsx_write_register(chip, REG_SD_CFG3, 0x01, 0);
2471 	if (retval) {
2472 		rtsx_trace(chip);
2473 		return retval;
2474 	}
2475 
2476 	return STATUS_SUCCESS;
2477 }
2478 
2479 static int sd_read_lba0(struct rtsx_chip *chip)
2480 {
2481 	struct sd_info *sd_card = &(chip->sd_card);
2482 	int retval;
2483 	u8 cmd[5], bus_width;
2484 
2485 	cmd[0] = 0x40 | READ_SINGLE_BLOCK;
2486 	cmd[1] = 0;
2487 	cmd[2] = 0;
2488 	cmd[3] = 0;
2489 	cmd[4] = 0;
2490 
2491 	if (CHK_SD(sd_card)) {
2492 		bus_width = SD_BUS_WIDTH_4;
2493 	} else {
2494 		if (CHK_MMC_8BIT(sd_card))
2495 			bus_width = SD_BUS_WIDTH_8;
2496 		else if (CHK_MMC_4BIT(sd_card))
2497 			bus_width = SD_BUS_WIDTH_4;
2498 		else
2499 			bus_width = SD_BUS_WIDTH_1;
2500 	}
2501 
2502 	retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd,
2503 		5, 512, 1, bus_width, NULL, 0, 100);
2504 	if (retval != STATUS_SUCCESS) {
2505 		rtsx_clear_sd_error(chip);
2506 		rtsx_trace(chip);
2507 		return STATUS_FAIL;
2508 	}
2509 
2510 	return STATUS_SUCCESS;
2511 }
2512 
2513 static int sd_check_wp_state(struct rtsx_chip *chip)
2514 {
2515 	struct sd_info *sd_card = &(chip->sd_card);
2516 	int retval;
2517 	u32 val;
2518 	u16 sd_card_type;
2519 	u8 cmd[5], buf[64];
2520 
2521 	retval = sd_send_cmd_get_rsp(chip, APP_CMD,
2522 			sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
2523 	if (retval != STATUS_SUCCESS) {
2524 		rtsx_trace(chip);
2525 		return STATUS_FAIL;
2526 	}
2527 
2528 	cmd[0] = 0x40 | SD_STATUS;
2529 	cmd[1] = 0;
2530 	cmd[2] = 0;
2531 	cmd[3] = 0;
2532 	cmd[4] = 0;
2533 
2534 	retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, 64, 1,
2535 			SD_BUS_WIDTH_4, buf, 64, 250);
2536 	if (retval != STATUS_SUCCESS) {
2537 		rtsx_clear_sd_error(chip);
2538 
2539 		sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2540 				SD_RSP_TYPE_R1, NULL, 0);
2541 		rtsx_trace(chip);
2542 		return STATUS_FAIL;
2543 	}
2544 
2545 	dev_dbg(rtsx_dev(chip), "ACMD13:\n");
2546 	dev_dbg(rtsx_dev(chip), "%*ph\n", 64, buf);
2547 
2548 	sd_card_type = ((u16)buf[2] << 8) | buf[3];
2549 	dev_dbg(rtsx_dev(chip), "sd_card_type = 0x%04x\n", sd_card_type);
2550 	if ((sd_card_type == 0x0001) || (sd_card_type == 0x0002)) {
2551 		/* ROM card or OTP */
2552 		chip->card_wp |= SD_CARD;
2553 	}
2554 
2555 	/* Check SD Machanical Write-Protect Switch */
2556 	val = rtsx_readl(chip, RTSX_BIPR);
2557 	if (val & SD_WRITE_PROTECT)
2558 		chip->card_wp |= SD_CARD;
2559 
2560 	return STATUS_SUCCESS;
2561 }
2562 
2563 static int reset_sd(struct rtsx_chip *chip)
2564 {
2565 	struct sd_info *sd_card = &(chip->sd_card);
2566 	bool hi_cap_flow = false;
2567 	int retval, i = 0, j = 0, k = 0;
2568 	bool sd_dont_switch = false;
2569 	bool support_1v8 = false;
2570 	bool try_sdio = true;
2571 	u8 rsp[16];
2572 	u8 switch_bus_width;
2573 	u32 voltage = 0;
2574 	bool sd20_mode = false;
2575 
2576 	SET_SD(sd_card);
2577 
2578 Switch_Fail:
2579 
2580 	i = 0;
2581 	j = 0;
2582 	k = 0;
2583 	hi_cap_flow = false;
2584 
2585 #ifdef SUPPORT_SD_LOCK
2586 	if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
2587 		goto SD_UNLOCK_ENTRY;
2588 #endif
2589 
2590 	retval = sd_prepare_reset(chip);
2591 	if (retval != STATUS_SUCCESS)
2592 		goto Status_Fail;
2593 
2594 	retval = sd_dummy_clock(chip);
2595 	if (retval != STATUS_SUCCESS)
2596 		goto Status_Fail;
2597 
2598 	if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip) && try_sdio) {
2599 		int rty_cnt = 0;
2600 
2601 		for (; rty_cnt < chip->sdio_retry_cnt; rty_cnt++) {
2602 			if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2603 				sd_set_err_code(chip, SD_NO_CARD);
2604 				goto Status_Fail;
2605 			}
2606 
2607 			retval = sd_send_cmd_get_rsp(chip, IO_SEND_OP_COND, 0,
2608 						SD_RSP_TYPE_R4, rsp, 5);
2609 			if (retval == STATUS_SUCCESS) {
2610 				int func_num = (rsp[1] >> 4) & 0x07;
2611 
2612 				if (func_num) {
2613 					dev_dbg(rtsx_dev(chip), "SD_IO card (Function number: %d)!\n",
2614 						func_num);
2615 					chip->sd_io = 1;
2616 					goto Status_Fail;
2617 				}
2618 
2619 				break;
2620 			}
2621 
2622 			sd_init_power(chip);
2623 
2624 			sd_dummy_clock(chip);
2625 		}
2626 
2627 		dev_dbg(rtsx_dev(chip), "Normal card!\n");
2628 	}
2629 
2630 	/* Start Initialization Process of SD Card */
2631 RTY_SD_RST:
2632 	retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
2633 				NULL, 0);
2634 	if (retval != STATUS_SUCCESS)
2635 		goto Status_Fail;
2636 
2637 	wait_timeout(20);
2638 
2639 	retval = sd_send_cmd_get_rsp(chip, SEND_IF_COND, 0x000001AA,
2640 				SD_RSP_TYPE_R7, rsp, 5);
2641 	if (retval == STATUS_SUCCESS) {
2642 		if ((rsp[4] == 0xAA) && ((rsp[3] & 0x0f) == 0x01)) {
2643 			hi_cap_flow = true;
2644 			voltage = SUPPORT_VOLTAGE | 0x40000000;
2645 		}
2646 	}
2647 
2648 	if (!hi_cap_flow) {
2649 		voltage = SUPPORT_VOLTAGE;
2650 
2651 		retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0,
2652 					SD_RSP_TYPE_R0, NULL, 0);
2653 		if (retval != STATUS_SUCCESS)
2654 			goto Status_Fail;
2655 
2656 		wait_timeout(20);
2657 	}
2658 
2659 	do {
2660 		retval = sd_send_cmd_get_rsp(chip, APP_CMD, 0, SD_RSP_TYPE_R1,
2661 					NULL, 0);
2662 		if (retval != STATUS_SUCCESS) {
2663 			if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
2664 				sd_set_err_code(chip, SD_NO_CARD);
2665 				goto Status_Fail;
2666 			}
2667 
2668 			j++;
2669 			if (j < 3)
2670 				goto RTY_SD_RST;
2671 			else
2672 				goto Status_Fail;
2673 		}
2674 
2675 		retval = sd_send_cmd_get_rsp(chip, SD_APP_OP_COND, voltage,
2676 					SD_RSP_TYPE_R3, rsp, 5);
2677 		if (retval != STATUS_SUCCESS) {
2678 			k++;
2679 			if (k < 3)
2680 				goto RTY_SD_RST;
2681 			else
2682 				goto Status_Fail;
2683 		}
2684 
2685 		i++;
2686 		wait_timeout(20);
2687 	} while (!(rsp[1] & 0x80) && (i < 255));
2688 
2689 	if (i == 255)
2690 		goto Status_Fail;
2691 
2692 	if (hi_cap_flow) {
2693 		if (rsp[1] & 0x40)
2694 			SET_SD_HCXC(sd_card);
2695 		else
2696 			CLR_SD_HCXC(sd_card);
2697 
2698 		support_1v8 = false;
2699 	} else {
2700 		CLR_SD_HCXC(sd_card);
2701 		support_1v8 = false;
2702 	}
2703 	dev_dbg(rtsx_dev(chip), "support_1v8 = %d\n", support_1v8);
2704 
2705 	if (support_1v8) {
2706 		retval = sd_voltage_switch(chip);
2707 		if (retval != STATUS_SUCCESS)
2708 			goto Status_Fail;
2709 	}
2710 
2711 	retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
2712 				NULL, 0);
2713 	if (retval != STATUS_SUCCESS)
2714 		goto Status_Fail;
2715 
2716 	for (i = 0; i < 3; i++) {
2717 		retval = sd_send_cmd_get_rsp(chip, SEND_RELATIVE_ADDR, 0,
2718 					SD_RSP_TYPE_R6, rsp, 5);
2719 		if (retval != STATUS_SUCCESS)
2720 			goto Status_Fail;
2721 
2722 		sd_card->sd_addr = (u32)rsp[1] << 24;
2723 		sd_card->sd_addr += (u32)rsp[2] << 16;
2724 
2725 		if (sd_card->sd_addr)
2726 			break;
2727 	}
2728 
2729 	retval = sd_check_csd(chip, 1);
2730 	if (retval != STATUS_SUCCESS)
2731 		goto Status_Fail;
2732 
2733 	retval = sd_select_card(chip, 1);
2734 	if (retval != STATUS_SUCCESS)
2735 		goto Status_Fail;
2736 
2737 #ifdef SUPPORT_SD_LOCK
2738 SD_UNLOCK_ENTRY:
2739 	retval = sd_update_lock_status(chip);
2740 	if (retval != STATUS_SUCCESS)
2741 		goto Status_Fail;
2742 
2743 	if (sd_card->sd_lock_status & SD_LOCKED) {
2744 		sd_card->sd_lock_status |= (SD_LOCK_1BIT_MODE | SD_PWD_EXIST);
2745 		return STATUS_SUCCESS;
2746 	} else if (!(sd_card->sd_lock_status & SD_UNLOCK_POW_ON)) {
2747 		sd_card->sd_lock_status &= ~SD_PWD_EXIST;
2748 	}
2749 #endif
2750 
2751 	retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2752 				SD_RSP_TYPE_R1, NULL, 0);
2753 	if (retval != STATUS_SUCCESS)
2754 		goto Status_Fail;
2755 
2756 	retval = sd_send_cmd_get_rsp(chip, SET_CLR_CARD_DETECT, 0,
2757 				SD_RSP_TYPE_R1, NULL, 0);
2758 	if (retval != STATUS_SUCCESS)
2759 		goto Status_Fail;
2760 
2761 	if (support_1v8) {
2762 		retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2763 					SD_RSP_TYPE_R1, NULL, 0);
2764 		if (retval != STATUS_SUCCESS)
2765 			goto Status_Fail;
2766 
2767 		retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2,
2768 					SD_RSP_TYPE_R1, NULL, 0);
2769 		if (retval != STATUS_SUCCESS)
2770 			goto Status_Fail;
2771 
2772 		switch_bus_width = SD_BUS_WIDTH_4;
2773 	} else {
2774 		switch_bus_width = SD_BUS_WIDTH_1;
2775 	}
2776 
2777 	retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
2778 				NULL, 0);
2779 	if (retval != STATUS_SUCCESS)
2780 		goto Status_Fail;
2781 
2782 	retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
2783 	if (retval != STATUS_SUCCESS)
2784 		goto Status_Fail;
2785 
2786 	if (!(sd_card->raw_csd[4] & 0x40))
2787 		sd_dont_switch = true;
2788 
2789 	if (!sd_dont_switch) {
2790 		if (sd20_mode) {
2791 			/* Set sd_switch_fail here, because we needn't
2792 			 * switch to UHS mode
2793 			 */
2794 			sd_card->sd_switch_fail = SDR104_SUPPORT_MASK |
2795 				DDR50_SUPPORT_MASK | SDR50_SUPPORT_MASK;
2796 		}
2797 
2798 		/* Check the card whether follow SD1.1 spec or higher */
2799 		retval = sd_check_spec(chip, switch_bus_width);
2800 		if (retval == STATUS_SUCCESS) {
2801 			retval = sd_switch_function(chip, switch_bus_width);
2802 			if (retval != STATUS_SUCCESS) {
2803 				sd_init_power(chip);
2804 				sd_dont_switch = true;
2805 				try_sdio = false;
2806 
2807 				goto Switch_Fail;
2808 			}
2809 		} else {
2810 			if (support_1v8) {
2811 				sd_init_power(chip);
2812 				sd_dont_switch = true;
2813 				try_sdio = false;
2814 
2815 				goto Switch_Fail;
2816 			}
2817 		}
2818 	}
2819 
2820 	if (!support_1v8) {
2821 		retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
2822 					SD_RSP_TYPE_R1, NULL, 0);
2823 		if (retval != STATUS_SUCCESS)
2824 			goto Status_Fail;
2825 
2826 		retval = sd_send_cmd_get_rsp(chip, SET_BUS_WIDTH, 2,
2827 					SD_RSP_TYPE_R1, NULL, 0);
2828 		if (retval != STATUS_SUCCESS)
2829 			goto Status_Fail;
2830 	}
2831 
2832 #ifdef SUPPORT_SD_LOCK
2833 	sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
2834 #endif
2835 
2836 	if (!sd20_mode && CHK_SD30_SPEED(sd_card)) {
2837 		int read_lba0 = 1;
2838 
2839 		retval = rtsx_write_register(chip, SD30_DRIVE_SEL, 0x07,
2840 					     chip->sd30_drive_sel_1v8);
2841 		if (retval) {
2842 			rtsx_trace(chip);
2843 			return retval;
2844 		}
2845 
2846 		retval = sd_set_init_para(chip);
2847 		if (retval != STATUS_SUCCESS)
2848 			goto Status_Fail;
2849 
2850 		if (CHK_SD_DDR50(sd_card))
2851 			retval = sd_ddr_tuning(chip);
2852 		else
2853 			retval = sd_sdr_tuning(chip);
2854 
2855 		if (retval != STATUS_SUCCESS) {
2856 			if (sd20_mode) {
2857 				goto Status_Fail;
2858 			} else {
2859 				retval = sd_init_power(chip);
2860 				if (retval != STATUS_SUCCESS)
2861 					goto Status_Fail;
2862 
2863 				try_sdio = false;
2864 				sd20_mode = true;
2865 				goto Switch_Fail;
2866 			}
2867 		}
2868 
2869 		sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
2870 				SD_RSP_TYPE_R1, NULL, 0);
2871 
2872 		if (CHK_SD_DDR50(sd_card)) {
2873 			retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
2874 			if (retval != STATUS_SUCCESS)
2875 				read_lba0 = 0;
2876 		}
2877 
2878 		if (read_lba0) {
2879 			retval = sd_read_lba0(chip);
2880 			if (retval != STATUS_SUCCESS) {
2881 				if (sd20_mode) {
2882 					goto Status_Fail;
2883 				} else {
2884 					retval = sd_init_power(chip);
2885 					if (retval != STATUS_SUCCESS)
2886 						goto Status_Fail;
2887 
2888 					try_sdio = false;
2889 					sd20_mode = true;
2890 					goto Switch_Fail;
2891 				}
2892 			}
2893 		}
2894 	}
2895 
2896 	retval = sd_check_wp_state(chip);
2897 	if (retval != STATUS_SUCCESS)
2898 		goto Status_Fail;
2899 
2900 	chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
2901 
2902 #ifdef SUPPORT_SD_LOCK
2903 	if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
2904 		retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_H, 0xFF,
2905 					     0x02);
2906 		if (retval) {
2907 			rtsx_trace(chip);
2908 			return retval;
2909 		}
2910 		retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_L, 0xFF,
2911 					     0x00);
2912 		if (retval) {
2913 			rtsx_trace(chip);
2914 			return retval;
2915 		}
2916 	}
2917 #endif
2918 
2919 	return STATUS_SUCCESS;
2920 
2921 Status_Fail:
2922 	rtsx_trace(chip);
2923 	return STATUS_FAIL;
2924 }
2925 
2926 static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width)
2927 {
2928 	struct sd_info *sd_card = &(chip->sd_card);
2929 	int retval;
2930 	u8 buf[8] = {0}, bus_width, *ptr;
2931 	u16 byte_cnt;
2932 	int len;
2933 
2934 	retval = sd_send_cmd_get_rsp(chip, BUSTEST_W, 0, SD_RSP_TYPE_R1, NULL,
2935 				0);
2936 	if (retval != STATUS_SUCCESS) {
2937 		rtsx_trace(chip);
2938 		return SWITCH_FAIL;
2939 	}
2940 
2941 	if (width == MMC_8BIT_BUS) {
2942 		buf[0] = 0x55;
2943 		buf[1] = 0xAA;
2944 		len = 8;
2945 		byte_cnt = 8;
2946 		bus_width = SD_BUS_WIDTH_8;
2947 	} else {
2948 		buf[0] = 0x5A;
2949 		len = 4;
2950 		byte_cnt = 4;
2951 		bus_width = SD_BUS_WIDTH_4;
2952 	}
2953 
2954 	retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0x02);
2955 	if (retval != STATUS_SUCCESS) {
2956 		rtsx_trace(chip);
2957 		return SWITCH_ERR;
2958 	}
2959 
2960 	retval = sd_write_data(chip, SD_TM_AUTO_WRITE_3,
2961 			NULL, 0, byte_cnt, 1, bus_width, buf, len, 100);
2962 	if (retval != STATUS_SUCCESS) {
2963 		rtsx_clear_sd_error(chip);
2964 		rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
2965 		rtsx_trace(chip);
2966 		return SWITCH_ERR;
2967 	}
2968 
2969 	retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
2970 	if (retval != STATUS_SUCCESS) {
2971 		rtsx_trace(chip);
2972 		return SWITCH_ERR;
2973 	}
2974 
2975 	dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", BUSTEST_R);
2976 
2977 	rtsx_init_cmd(chip);
2978 
2979 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | BUSTEST_R);
2980 
2981 	if (width == MMC_8BIT_BUS)
2982 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L,
2983 			0xFF, 0x08);
2984 	else
2985 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L,
2986 			0xFF, 0x04);
2987 
2988 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
2989 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
2990 
2991 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
2992 		SD_CALCULATE_CRC7 | SD_NO_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
2993 		SD_CHECK_CRC7 | SD_RSP_LEN_6);
2994 	rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
2995 		PINGPONG_BUFFER);
2996 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
2997 		SD_TM_NORMAL_READ | SD_TRANSFER_START);
2998 	rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
2999 		SD_TRANSFER_END);
3000 
3001 	rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2, 0, 0);
3002 	if (width == MMC_8BIT_BUS)
3003 		rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 1, 0, 0);
3004 
3005 	retval = rtsx_send_cmd(chip, SD_CARD, 100);
3006 	if (retval < 0) {
3007 		rtsx_clear_sd_error(chip);
3008 		rtsx_trace(chip);
3009 		return SWITCH_ERR;
3010 	}
3011 
3012 	ptr = rtsx_get_cmd_data(chip) + 1;
3013 
3014 	if (width == MMC_8BIT_BUS) {
3015 		dev_dbg(rtsx_dev(chip), "BUSTEST_R [8bits]: 0x%02x 0x%02x\n",
3016 			ptr[0], ptr[1]);
3017 		if ((ptr[0] == 0xAA) && (ptr[1] == 0x55)) {
3018 			u8 rsp[5];
3019 			u32 arg;
3020 
3021 			if (CHK_MMC_DDR52(sd_card))
3022 				arg = 0x03B70600;
3023 			else
3024 				arg = 0x03B70200;
3025 
3026 			retval = sd_send_cmd_get_rsp(chip, SWITCH, arg,
3027 						SD_RSP_TYPE_R1b, rsp, 5);
3028 			if ((retval == STATUS_SUCCESS) &&
3029 				!(rsp[4] & MMC_SWITCH_ERR))
3030 				return SWITCH_SUCCESS;
3031 		}
3032 	} else {
3033 		dev_dbg(rtsx_dev(chip), "BUSTEST_R [4bits]: 0x%02x\n", ptr[0]);
3034 		if (ptr[0] == 0xA5) {
3035 			u8 rsp[5];
3036 			u32 arg;
3037 
3038 			if (CHK_MMC_DDR52(sd_card))
3039 				arg = 0x03B70500;
3040 			else
3041 				arg = 0x03B70100;
3042 
3043 			retval = sd_send_cmd_get_rsp(chip, SWITCH, arg,
3044 						SD_RSP_TYPE_R1b, rsp, 5);
3045 			if ((retval == STATUS_SUCCESS) &&
3046 				!(rsp[4] & MMC_SWITCH_ERR))
3047 				return SWITCH_SUCCESS;
3048 		}
3049 	}
3050 
3051 	rtsx_trace(chip);
3052 	return SWITCH_FAIL;
3053 }
3054 
3055 static int mmc_switch_timing_bus(struct rtsx_chip *chip, bool switch_ddr)
3056 {
3057 	struct sd_info *sd_card = &(chip->sd_card);
3058 	int retval;
3059 	u8 *ptr, card_type, card_type_mask = 0;
3060 
3061 	CLR_MMC_HS(sd_card);
3062 
3063 	dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", SEND_EXT_CSD);
3064 
3065 	rtsx_init_cmd(chip);
3066 
3067 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
3068 		0x40 | SEND_EXT_CSD);
3069 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, 0);
3070 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, 0);
3071 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, 0);
3072 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, 0);
3073 
3074 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0);
3075 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 2);
3076 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF, 1);
3077 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF, 0);
3078 
3079 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
3080 		SD_CALCULATE_CRC7 | SD_CHECK_CRC16 | SD_NO_WAIT_BUSY_END|
3081 		SD_CHECK_CRC7 | SD_RSP_LEN_6);
3082 	rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
3083 		PINGPONG_BUFFER);
3084 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3085 		SD_TM_NORMAL_READ | SD_TRANSFER_START);
3086 	rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
3087 		SD_TRANSFER_END);
3088 
3089 	rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 196, 0xFF, 0);
3090 	rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 212, 0xFF, 0);
3091 	rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 213, 0xFF, 0);
3092 	rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 214, 0xFF, 0);
3093 	rtsx_add_cmd(chip, READ_REG_CMD, PPBUF_BASE2 + 215, 0xFF, 0);
3094 
3095 	retval = rtsx_send_cmd(chip, SD_CARD, 1000);
3096 	if (retval < 0) {
3097 		if (retval == -ETIMEDOUT) {
3098 			rtsx_clear_sd_error(chip);
3099 			sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3100 					SD_RSP_TYPE_R1, NULL, 0);
3101 		}
3102 		rtsx_trace(chip);
3103 		return STATUS_FAIL;
3104 	}
3105 
3106 	ptr = rtsx_get_cmd_data(chip);
3107 	if (ptr[0] & SD_TRANSFER_ERR) {
3108 		sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3109 				SD_RSP_TYPE_R1, NULL, 0);
3110 		rtsx_trace(chip);
3111 		return STATUS_FAIL;
3112 	}
3113 
3114 	if (CHK_MMC_SECTOR_MODE(sd_card)) {
3115 		sd_card->capacity = ((u32)ptr[5] << 24) | ((u32)ptr[4] << 16) |
3116 			((u32)ptr[3] << 8) | ((u32)ptr[2]);
3117 	}
3118 
3119 	card_type_mask = 0x03;
3120 	card_type = ptr[1] & card_type_mask;
3121 	if (card_type) {
3122 		u8 rsp[5];
3123 
3124 		if (card_type & 0x04) {
3125 			if (switch_ddr)
3126 				SET_MMC_DDR52(sd_card);
3127 			else
3128 				SET_MMC_52M(sd_card);
3129 		} else if (card_type & 0x02) {
3130 			SET_MMC_52M(sd_card);
3131 		} else {
3132 			SET_MMC_26M(sd_card);
3133 		}
3134 
3135 		retval = sd_send_cmd_get_rsp(chip, SWITCH,
3136 				0x03B90100, SD_RSP_TYPE_R1b, rsp, 5);
3137 		if ((retval != STATUS_SUCCESS) || (rsp[4] & MMC_SWITCH_ERR))
3138 			CLR_MMC_HS(sd_card);
3139 	}
3140 
3141 	sd_choose_proper_clock(chip);
3142 	retval = switch_clock(chip, sd_card->sd_clock);
3143 	if (retval != STATUS_SUCCESS) {
3144 		rtsx_trace(chip);
3145 		return STATUS_FAIL;
3146 	}
3147 
3148 	/* Test Bus Procedure */
3149 	retval = mmc_test_switch_bus(chip, MMC_8BIT_BUS);
3150 	if (retval == SWITCH_SUCCESS) {
3151 		SET_MMC_8BIT(sd_card);
3152 		chip->card_bus_width[chip->card2lun[SD_CARD]] = 8;
3153 #ifdef SUPPORT_SD_LOCK
3154 		sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
3155 #endif
3156 	} else if (retval == SWITCH_FAIL) {
3157 		retval = mmc_test_switch_bus(chip, MMC_4BIT_BUS);
3158 		if (retval == SWITCH_SUCCESS) {
3159 			SET_MMC_4BIT(sd_card);
3160 			chip->card_bus_width[chip->card2lun[SD_CARD]] = 4;
3161 #ifdef SUPPORT_SD_LOCK
3162 			sd_card->sd_lock_status &= ~SD_LOCK_1BIT_MODE;
3163 #endif
3164 		} else if (retval == SWITCH_FAIL) {
3165 			CLR_MMC_8BIT(sd_card);
3166 			CLR_MMC_4BIT(sd_card);
3167 		} else {
3168 			rtsx_trace(chip);
3169 			return STATUS_FAIL;
3170 		}
3171 	} else {
3172 		rtsx_trace(chip);
3173 		return STATUS_FAIL;
3174 	}
3175 
3176 	return STATUS_SUCCESS;
3177 }
3178 
3179 static int reset_mmc(struct rtsx_chip *chip)
3180 {
3181 	struct sd_info *sd_card = &(chip->sd_card);
3182 	int retval, i = 0, j = 0, k = 0;
3183 	bool switch_ddr = true;
3184 	u8 rsp[16];
3185 	u8 spec_ver = 0;
3186 	u32 temp;
3187 
3188 #ifdef SUPPORT_SD_LOCK
3189 	if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON)
3190 		goto MMC_UNLOCK_ENTRY;
3191 #endif
3192 
3193 Switch_Fail:
3194 	retval = sd_prepare_reset(chip);
3195 	if (retval != STATUS_SUCCESS) {
3196 		rtsx_trace(chip);
3197 		return retval;
3198 	}
3199 
3200 	SET_MMC(sd_card);
3201 
3202 RTY_MMC_RST:
3203 	retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
3204 				NULL, 0);
3205 	if (retval != STATUS_SUCCESS) {
3206 		rtsx_trace(chip);
3207 		return STATUS_FAIL;
3208 	}
3209 
3210 	do {
3211 		if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3212 			sd_set_err_code(chip, SD_NO_CARD);
3213 			rtsx_trace(chip);
3214 			return STATUS_FAIL;
3215 		}
3216 
3217 		retval = sd_send_cmd_get_rsp(chip, SEND_OP_COND,
3218 					(SUPPORT_VOLTAGE | 0x40000000),
3219 					SD_RSP_TYPE_R3, rsp, 5);
3220 		if (retval != STATUS_SUCCESS) {
3221 			if (sd_check_err_code(chip, SD_BUSY) ||
3222 				sd_check_err_code(chip, SD_TO_ERR)) {
3223 				k++;
3224 				if (k < 20) {
3225 					sd_clr_err_code(chip);
3226 					goto RTY_MMC_RST;
3227 				} else {
3228 					rtsx_trace(chip);
3229 					return STATUS_FAIL;
3230 				}
3231 			} else {
3232 				j++;
3233 				if (j < 100) {
3234 					sd_clr_err_code(chip);
3235 					goto RTY_MMC_RST;
3236 				} else {
3237 					rtsx_trace(chip);
3238 					return STATUS_FAIL;
3239 				}
3240 			}
3241 		}
3242 
3243 		wait_timeout(20);
3244 		i++;
3245 	} while (!(rsp[1] & 0x80) && (i < 255));
3246 
3247 	if (i == 255) {
3248 		rtsx_trace(chip);
3249 		return STATUS_FAIL;
3250 	}
3251 
3252 	if ((rsp[1] & 0x60) == 0x40)
3253 		SET_MMC_SECTOR_MODE(sd_card);
3254 	else
3255 		CLR_MMC_SECTOR_MODE(sd_card);
3256 
3257 	retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
3258 				NULL, 0);
3259 	if (retval != STATUS_SUCCESS) {
3260 		rtsx_trace(chip);
3261 		return STATUS_FAIL;
3262 	}
3263 
3264 	sd_card->sd_addr = 0x00100000;
3265 	retval = sd_send_cmd_get_rsp(chip, SET_RELATIVE_ADDR, sd_card->sd_addr,
3266 				SD_RSP_TYPE_R6, rsp, 5);
3267 	if (retval != STATUS_SUCCESS) {
3268 		rtsx_trace(chip);
3269 		return STATUS_FAIL;
3270 	}
3271 
3272 	retval = sd_check_csd(chip, 1);
3273 	if (retval != STATUS_SUCCESS) {
3274 		rtsx_trace(chip);
3275 		return STATUS_FAIL;
3276 	}
3277 
3278 	spec_ver = (sd_card->raw_csd[0] & 0x3C) >> 2;
3279 
3280 	retval = sd_select_card(chip, 1);
3281 	if (retval != STATUS_SUCCESS) {
3282 		rtsx_trace(chip);
3283 		return STATUS_FAIL;
3284 	}
3285 
3286 	retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
3287 				NULL, 0);
3288 	if (retval != STATUS_SUCCESS) {
3289 		rtsx_trace(chip);
3290 		return STATUS_FAIL;
3291 	}
3292 
3293 #ifdef SUPPORT_SD_LOCK
3294 MMC_UNLOCK_ENTRY:
3295 	retval = sd_update_lock_status(chip);
3296 	if (retval != STATUS_SUCCESS) {
3297 		rtsx_trace(chip);
3298 		return STATUS_FAIL;
3299 	}
3300 #endif
3301 
3302 	retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
3303 	if (retval != STATUS_SUCCESS) {
3304 		rtsx_trace(chip);
3305 		return STATUS_FAIL;
3306 	}
3307 
3308 	chip->card_bus_width[chip->card2lun[SD_CARD]] = 1;
3309 
3310 	if (!sd_card->mmc_dont_switch_bus) {
3311 		if (spec_ver == 4) {
3312 			/* MMC 4.x Cards */
3313 			retval = mmc_switch_timing_bus(chip, switch_ddr);
3314 			if (retval != STATUS_SUCCESS) {
3315 				retval = sd_init_power(chip);
3316 				if (retval != STATUS_SUCCESS) {
3317 					rtsx_trace(chip);
3318 					return STATUS_FAIL;
3319 				}
3320 				sd_card->mmc_dont_switch_bus = 1;
3321 				rtsx_trace(chip);
3322 				goto Switch_Fail;
3323 			}
3324 		}
3325 
3326 		if (CHK_MMC_SECTOR_MODE(sd_card) && (sd_card->capacity == 0)) {
3327 			rtsx_trace(chip);
3328 			return STATUS_FAIL;
3329 		}
3330 
3331 		if (switch_ddr && CHK_MMC_DDR52(sd_card)) {
3332 			retval = sd_set_init_para(chip);
3333 			if (retval != STATUS_SUCCESS) {
3334 				rtsx_trace(chip);
3335 				return STATUS_FAIL;
3336 			}
3337 
3338 			retval = mmc_ddr_tuning(chip);
3339 			if (retval != STATUS_SUCCESS) {
3340 				retval = sd_init_power(chip);
3341 				if (retval != STATUS_SUCCESS) {
3342 					rtsx_trace(chip);
3343 					return STATUS_FAIL;
3344 				}
3345 
3346 				switch_ddr = false;
3347 				rtsx_trace(chip);
3348 				goto Switch_Fail;
3349 			}
3350 
3351 			retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
3352 			if (retval == STATUS_SUCCESS) {
3353 				retval = sd_read_lba0(chip);
3354 				if (retval != STATUS_SUCCESS) {
3355 					retval = sd_init_power(chip);
3356 					if (retval != STATUS_SUCCESS) {
3357 						rtsx_trace(chip);
3358 						return STATUS_FAIL;
3359 					}
3360 
3361 					switch_ddr = false;
3362 					rtsx_trace(chip);
3363 					goto Switch_Fail;
3364 				}
3365 			}
3366 		}
3367 	}
3368 
3369 #ifdef SUPPORT_SD_LOCK
3370 	if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
3371 		retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_H, 0xFF,
3372 					     0x02);
3373 		if (retval) {
3374 			rtsx_trace(chip);
3375 			return retval;
3376 		}
3377 		retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_L, 0xFF,
3378 					     0x00);
3379 		if (retval) {
3380 			rtsx_trace(chip);
3381 			return retval;
3382 		}
3383 	}
3384 #endif
3385 
3386 	temp = rtsx_readl(chip, RTSX_BIPR);
3387 	if (temp & SD_WRITE_PROTECT)
3388 		chip->card_wp |= SD_CARD;
3389 
3390 	return STATUS_SUCCESS;
3391 }
3392 
3393 int reset_sd_card(struct rtsx_chip *chip)
3394 {
3395 	struct sd_info *sd_card = &(chip->sd_card);
3396 	int retval;
3397 
3398 	sd_init_reg_addr(chip);
3399 
3400 	memset(sd_card, 0, sizeof(struct sd_info));
3401 	chip->capacity[chip->card2lun[SD_CARD]] = 0;
3402 
3403 	retval = enable_card_clock(chip, SD_CARD);
3404 	if (retval != STATUS_SUCCESS) {
3405 		rtsx_trace(chip);
3406 		return STATUS_FAIL;
3407 	}
3408 
3409 	if (chip->ignore_sd && CHK_SDIO_EXIST(chip) &&
3410 		!CHK_SDIO_IGNORED(chip)) {
3411 		if (chip->asic_code) {
3412 			retval = sd_pull_ctl_enable(chip);
3413 			if (retval != STATUS_SUCCESS) {
3414 				rtsx_trace(chip);
3415 				return STATUS_FAIL;
3416 			}
3417 		} else {
3418 			retval = rtsx_write_register(chip, FPGA_PULL_CTL,
3419 						FPGA_SD_PULL_CTL_BIT | 0x20, 0);
3420 			if (retval != STATUS_SUCCESS) {
3421 				rtsx_trace(chip);
3422 				return STATUS_FAIL;
3423 			}
3424 		}
3425 		retval = card_share_mode(chip, SD_CARD);
3426 		if (retval != STATUS_SUCCESS) {
3427 			rtsx_trace(chip);
3428 			return STATUS_FAIL;
3429 		}
3430 
3431 		chip->sd_io = 1;
3432 		rtsx_trace(chip);
3433 		return STATUS_FAIL;
3434 	}
3435 
3436 	retval = sd_init_power(chip);
3437 	if (retval != STATUS_SUCCESS) {
3438 		rtsx_trace(chip);
3439 		return STATUS_FAIL;
3440 	}
3441 
3442 	if (chip->sd_ctl & RESET_MMC_FIRST) {
3443 		retval = reset_mmc(chip);
3444 		if (retval != STATUS_SUCCESS) {
3445 			if (sd_check_err_code(chip, SD_NO_CARD)) {
3446 				rtsx_trace(chip);
3447 				return STATUS_FAIL;
3448 			}
3449 
3450 			retval = reset_sd(chip);
3451 			if (retval != STATUS_SUCCESS) {
3452 				rtsx_trace(chip);
3453 				return STATUS_FAIL;
3454 			}
3455 		}
3456 	} else {
3457 		retval = reset_sd(chip);
3458 		if (retval != STATUS_SUCCESS) {
3459 			if (sd_check_err_code(chip, SD_NO_CARD)) {
3460 				rtsx_trace(chip);
3461 				return STATUS_FAIL;
3462 			}
3463 
3464 			if (chip->sd_io) {
3465 				rtsx_trace(chip);
3466 				return STATUS_FAIL;
3467 			}
3468 			retval = reset_mmc(chip);
3469 			if (retval != STATUS_SUCCESS) {
3470 				rtsx_trace(chip);
3471 				return STATUS_FAIL;
3472 			}
3473 		}
3474 	}
3475 
3476 	retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
3477 	if (retval != STATUS_SUCCESS) {
3478 		rtsx_trace(chip);
3479 		return STATUS_FAIL;
3480 	}
3481 
3482 	retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
3483 	if (retval) {
3484 		rtsx_trace(chip);
3485 		return retval;
3486 	}
3487 	retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
3488 	if (retval) {
3489 		rtsx_trace(chip);
3490 		return retval;
3491 	}
3492 
3493 	chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
3494 
3495 	retval = sd_set_init_para(chip);
3496 	if (retval != STATUS_SUCCESS) {
3497 		rtsx_trace(chip);
3498 		return STATUS_FAIL;
3499 	}
3500 
3501 	dev_dbg(rtsx_dev(chip), "sd_card->sd_type = 0x%x\n", sd_card->sd_type);
3502 
3503 	return STATUS_SUCCESS;
3504 }
3505 
3506 static int reset_mmc_only(struct rtsx_chip *chip)
3507 {
3508 	struct sd_info *sd_card = &(chip->sd_card);
3509 	int retval;
3510 
3511 	sd_card->sd_type = 0;
3512 	sd_card->seq_mode = 0;
3513 	sd_card->sd_data_buf_ready = 0;
3514 	sd_card->capacity = 0;
3515 	sd_card->sd_switch_fail = 0;
3516 
3517 #ifdef SUPPORT_SD_LOCK
3518 	sd_card->sd_lock_status = 0;
3519 	sd_card->sd_erase_status = 0;
3520 #endif
3521 
3522 	chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity = 0;
3523 
3524 	retval = enable_card_clock(chip, SD_CARD);
3525 	if (retval != STATUS_SUCCESS) {
3526 		rtsx_trace(chip);
3527 		return STATUS_FAIL;
3528 	}
3529 
3530 	retval = sd_init_power(chip);
3531 	if (retval != STATUS_SUCCESS) {
3532 		rtsx_trace(chip);
3533 		return STATUS_FAIL;
3534 	}
3535 
3536 	retval = reset_mmc(chip);
3537 	if (retval != STATUS_SUCCESS) {
3538 		rtsx_trace(chip);
3539 		return STATUS_FAIL;
3540 	}
3541 
3542 	retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
3543 	if (retval != STATUS_SUCCESS) {
3544 		rtsx_trace(chip);
3545 		return STATUS_FAIL;
3546 	}
3547 
3548 	retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
3549 	if (retval) {
3550 		rtsx_trace(chip);
3551 		return retval;
3552 	}
3553 	retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
3554 	if (retval) {
3555 		rtsx_trace(chip);
3556 		return retval;
3557 	}
3558 
3559 	chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
3560 
3561 	retval = sd_set_init_para(chip);
3562 	if (retval != STATUS_SUCCESS) {
3563 		rtsx_trace(chip);
3564 		return STATUS_FAIL;
3565 	}
3566 
3567 	dev_dbg(rtsx_dev(chip), "In reset_mmc_only, sd_card->sd_type = 0x%x\n",
3568 		sd_card->sd_type);
3569 
3570 	return STATUS_SUCCESS;
3571 }
3572 
3573 #define WAIT_DATA_READY_RTY_CNT		255
3574 
3575 static int wait_data_buf_ready(struct rtsx_chip *chip)
3576 {
3577 	struct sd_info *sd_card = &(chip->sd_card);
3578 	int i, retval;
3579 
3580 	for (i = 0; i < WAIT_DATA_READY_RTY_CNT; i++) {
3581 		if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3582 			sd_set_err_code(chip, SD_NO_CARD);
3583 			rtsx_trace(chip);
3584 			return STATUS_FAIL;
3585 		}
3586 
3587 		sd_card->sd_data_buf_ready = 0;
3588 
3589 		retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
3590 				sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3591 		if (retval != STATUS_SUCCESS) {
3592 			rtsx_trace(chip);
3593 			return STATUS_FAIL;
3594 		}
3595 
3596 		if (sd_card->sd_data_buf_ready) {
3597 			return sd_send_cmd_get_rsp(chip, SEND_STATUS,
3598 				sd_card->sd_addr, SD_RSP_TYPE_R1, NULL, 0);
3599 		}
3600 	}
3601 
3602 	sd_set_err_code(chip, SD_TO_ERR);
3603 
3604 	rtsx_trace(chip);
3605 	return STATUS_FAIL;
3606 }
3607 
3608 void sd_stop_seq_mode(struct rtsx_chip *chip)
3609 {
3610 	struct sd_info *sd_card = &(chip->sd_card);
3611 	int retval;
3612 
3613 	if (sd_card->seq_mode) {
3614 		retval = sd_switch_clock(chip);
3615 		if (retval != STATUS_SUCCESS)
3616 			return;
3617 
3618 		retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3619 				SD_RSP_TYPE_R1b, NULL, 0);
3620 		if (retval != STATUS_SUCCESS)
3621 			sd_set_err_code(chip, SD_STS_ERR);
3622 
3623 		retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
3624 		if (retval != STATUS_SUCCESS)
3625 			sd_set_err_code(chip, SD_STS_ERR);
3626 
3627 		sd_card->seq_mode = 0;
3628 
3629 		rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
3630 	}
3631 }
3632 
3633 static inline int sd_auto_tune_clock(struct rtsx_chip *chip)
3634 {
3635 	struct sd_info *sd_card = &(chip->sd_card);
3636 	int retval;
3637 
3638 	if (chip->asic_code) {
3639 		if (sd_card->sd_clock > 30)
3640 			sd_card->sd_clock -= 20;
3641 	} else {
3642 		switch (sd_card->sd_clock) {
3643 		case CLK_200:
3644 			sd_card->sd_clock = CLK_150;
3645 			break;
3646 
3647 		case CLK_150:
3648 			sd_card->sd_clock = CLK_120;
3649 			break;
3650 
3651 		case CLK_120:
3652 			sd_card->sd_clock = CLK_100;
3653 			break;
3654 
3655 		case CLK_100:
3656 			sd_card->sd_clock = CLK_80;
3657 			break;
3658 
3659 		case CLK_80:
3660 			sd_card->sd_clock = CLK_60;
3661 			break;
3662 
3663 		case CLK_60:
3664 			sd_card->sd_clock = CLK_50;
3665 			break;
3666 
3667 		default:
3668 			break;
3669 		}
3670 	}
3671 
3672 	retval = sd_switch_clock(chip);
3673 	if (retval != STATUS_SUCCESS) {
3674 		rtsx_trace(chip);
3675 		return STATUS_FAIL;
3676 	}
3677 
3678 	return STATUS_SUCCESS;
3679 }
3680 
3681 int sd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip, u32 start_sector,
3682 	u16 sector_cnt)
3683 {
3684 	struct sd_info *sd_card = &(chip->sd_card);
3685 	u32 data_addr;
3686 	u8 cfg2;
3687 	int retval;
3688 
3689 	if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3690 		dev_dbg(rtsx_dev(chip), "sd_rw: Read %d %s from 0x%x\n",
3691 			sector_cnt, (sector_cnt > 1) ? "sectors" : "sector",
3692 			start_sector);
3693 	} else {
3694 		dev_dbg(rtsx_dev(chip), "sd_rw: Write %d %s to 0x%x\n",
3695 			sector_cnt, (sector_cnt > 1) ? "sectors" : "sector",
3696 			start_sector);
3697 	}
3698 
3699 	sd_card->cleanup_counter = 0;
3700 
3701 	if (!(chip->card_ready & SD_CARD)) {
3702 		sd_card->seq_mode = 0;
3703 
3704 		retval = reset_sd_card(chip);
3705 		if (retval == STATUS_SUCCESS) {
3706 			chip->card_ready |= SD_CARD;
3707 			chip->card_fail &= ~SD_CARD;
3708 		} else {
3709 			chip->card_ready &= ~SD_CARD;
3710 			chip->card_fail |= SD_CARD;
3711 			chip->capacity[chip->card2lun[SD_CARD]] = 0;
3712 			chip->rw_need_retry = 1;
3713 			rtsx_trace(chip);
3714 			return STATUS_FAIL;
3715 		}
3716 	}
3717 
3718 	if (!CHK_SD_HCXC(sd_card) && !CHK_MMC_SECTOR_MODE(sd_card))
3719 		data_addr = start_sector << 9;
3720 	else
3721 		data_addr = start_sector;
3722 
3723 	sd_clr_err_code(chip);
3724 
3725 	retval = sd_switch_clock(chip);
3726 	if (retval != STATUS_SUCCESS) {
3727 		sd_set_err_code(chip, SD_IO_ERR);
3728 		rtsx_trace(chip);
3729 		goto RW_FAIL;
3730 	}
3731 
3732 	if (sd_card->seq_mode &&
3733 		((sd_card->pre_dir != srb->sc_data_direction) ||
3734 			((sd_card->pre_sec_addr + sd_card->pre_sec_cnt) !=
3735 				start_sector))) {
3736 		if ((sd_card->pre_sec_cnt < 0x80)
3737 				&& (sd_card->pre_dir == DMA_FROM_DEVICE)
3738 				&& !CHK_SD30_SPEED(sd_card)
3739 				&& !CHK_SD_HS(sd_card)
3740 				&& !CHK_MMC_HS(sd_card)) {
3741 			sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3742 					SD_RSP_TYPE_R1, NULL, 0);
3743 		}
3744 
3745 		retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
3746 				0, SD_RSP_TYPE_R1b, NULL, 0);
3747 		if (retval != STATUS_SUCCESS) {
3748 			chip->rw_need_retry = 1;
3749 			sd_set_err_code(chip, SD_STS_ERR);
3750 			rtsx_trace(chip);
3751 			goto RW_FAIL;
3752 		}
3753 
3754 		sd_card->seq_mode = 0;
3755 
3756 		retval = rtsx_write_register(chip, RBCTL, RB_FLUSH, RB_FLUSH);
3757 		if (retval != STATUS_SUCCESS) {
3758 			sd_set_err_code(chip, SD_IO_ERR);
3759 			rtsx_trace(chip);
3760 			goto RW_FAIL;
3761 		}
3762 
3763 		if ((sd_card->pre_sec_cnt < 0x80)
3764 				&& !CHK_SD30_SPEED(sd_card)
3765 				&& !CHK_SD_HS(sd_card)
3766 				&& !CHK_MMC_HS(sd_card)) {
3767 			sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
3768 					SD_RSP_TYPE_R1, NULL, 0);
3769 		}
3770 	}
3771 
3772 	rtsx_init_cmd(chip);
3773 
3774 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF, 0x00);
3775 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF, 0x02);
3776 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
3777 		(u8)sector_cnt);
3778 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
3779 		(u8)(sector_cnt >> 8));
3780 
3781 	rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01, RING_BUFFER);
3782 
3783 	if (CHK_MMC_8BIT(sd_card))
3784 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3785 			0x03, SD_BUS_WIDTH_8);
3786 	else if (CHK_MMC_4BIT(sd_card) || CHK_SD(sd_card))
3787 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3788 			0x03, SD_BUS_WIDTH_4);
3789 	else
3790 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1,
3791 			0x03, SD_BUS_WIDTH_1);
3792 
3793 	if (sd_card->seq_mode) {
3794 		cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16|
3795 			SD_NO_WAIT_BUSY_END | SD_NO_CHECK_CRC7 |
3796 			SD_RSP_LEN_0;
3797 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, cfg2);
3798 
3799 		trans_dma_enable(srb->sc_data_direction, chip, sector_cnt * 512,
3800 				DMA_512);
3801 
3802 		if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3803 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3804 				     SD_TM_AUTO_READ_3 | SD_TRANSFER_START);
3805 		} else {
3806 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3807 				     SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3808 		}
3809 
3810 		rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3811 			SD_TRANSFER_END, SD_TRANSFER_END);
3812 
3813 		rtsx_send_cmd_no_wait(chip);
3814 	} else {
3815 		if (srb->sc_data_direction == DMA_FROM_DEVICE) {
3816 			dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n",
3817 				READ_MULTIPLE_BLOCK);
3818 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
3819 				     0x40 | READ_MULTIPLE_BLOCK);
3820 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF,
3821 				(u8)(data_addr >> 24));
3822 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF,
3823 				(u8)(data_addr >> 16));
3824 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF,
3825 				(u8)(data_addr >> 8));
3826 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF,
3827 				(u8)data_addr);
3828 
3829 			cfg2 = SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
3830 				SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 |
3831 				SD_RSP_LEN_6;
3832 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
3833 				cfg2);
3834 
3835 			trans_dma_enable(srb->sc_data_direction, chip,
3836 					sector_cnt * 512, DMA_512);
3837 
3838 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3839 				     SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
3840 			rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3841 				     SD_TRANSFER_END, SD_TRANSFER_END);
3842 
3843 			rtsx_send_cmd_no_wait(chip);
3844 		} else {
3845 			retval = rtsx_send_cmd(chip, SD_CARD, 50);
3846 			if (retval < 0) {
3847 				rtsx_clear_sd_error(chip);
3848 
3849 				chip->rw_need_retry = 1;
3850 				sd_set_err_code(chip, SD_TO_ERR);
3851 				rtsx_trace(chip);
3852 				goto RW_FAIL;
3853 			}
3854 
3855 			retval = wait_data_buf_ready(chip);
3856 			if (retval != STATUS_SUCCESS) {
3857 				chip->rw_need_retry = 1;
3858 				sd_set_err_code(chip, SD_TO_ERR);
3859 				rtsx_trace(chip);
3860 				goto RW_FAIL;
3861 			}
3862 
3863 			retval = sd_send_cmd_get_rsp(chip, WRITE_MULTIPLE_BLOCK,
3864 					data_addr, SD_RSP_TYPE_R1, NULL, 0);
3865 			if (retval != STATUS_SUCCESS) {
3866 				chip->rw_need_retry = 1;
3867 				rtsx_trace(chip);
3868 				goto RW_FAIL;
3869 			}
3870 
3871 			rtsx_init_cmd(chip);
3872 
3873 			cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 |
3874 				SD_NO_WAIT_BUSY_END |
3875 				SD_NO_CHECK_CRC7 | SD_RSP_LEN_0;
3876 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF,
3877 				cfg2);
3878 
3879 			trans_dma_enable(srb->sc_data_direction, chip,
3880 					sector_cnt * 512, DMA_512);
3881 
3882 			rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
3883 				     SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
3884 			rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
3885 				     SD_TRANSFER_END, SD_TRANSFER_END);
3886 
3887 			rtsx_send_cmd_no_wait(chip);
3888 		}
3889 
3890 		sd_card->seq_mode = 1;
3891 	}
3892 
3893 	retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
3894 				scsi_bufflen(srb), scsi_sg_count(srb),
3895 				srb->sc_data_direction, chip->sd_timeout);
3896 	if (retval < 0) {
3897 		u8 stat = 0;
3898 		int err;
3899 
3900 		sd_card->seq_mode = 0;
3901 
3902 		if (retval == -ETIMEDOUT)
3903 			err = STATUS_TIMEDOUT;
3904 		else
3905 			err = STATUS_FAIL;
3906 
3907 		rtsx_read_register(chip, REG_SD_STAT1, &stat);
3908 		rtsx_clear_sd_error(chip);
3909 		if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3910 			chip->rw_need_retry = 0;
3911 			dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n");
3912 			rtsx_trace(chip);
3913 			return STATUS_FAIL;
3914 		}
3915 
3916 		chip->rw_need_retry = 1;
3917 
3918 		retval = sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
3919 					SD_RSP_TYPE_R1b, NULL, 0);
3920 		if (retval != STATUS_SUCCESS) {
3921 			sd_set_err_code(chip, SD_STS_ERR);
3922 			rtsx_trace(chip);
3923 			goto RW_FAIL;
3924 		}
3925 
3926 		if (stat & (SD_CRC7_ERR | SD_CRC16_ERR | SD_CRC_WRITE_ERR)) {
3927 			dev_dbg(rtsx_dev(chip), "SD CRC error, tune clock!\n");
3928 			sd_set_err_code(chip, SD_CRC_ERR);
3929 			rtsx_trace(chip);
3930 			goto RW_FAIL;
3931 		}
3932 
3933 		if (err == STATUS_TIMEDOUT) {
3934 			sd_set_err_code(chip, SD_TO_ERR);
3935 			rtsx_trace(chip);
3936 			goto RW_FAIL;
3937 		}
3938 
3939 		rtsx_trace(chip);
3940 		return err;
3941 	}
3942 
3943 	sd_card->pre_sec_addr = start_sector;
3944 	sd_card->pre_sec_cnt = sector_cnt;
3945 	sd_card->pre_dir = srb->sc_data_direction;
3946 
3947 	return STATUS_SUCCESS;
3948 
3949 RW_FAIL:
3950 	sd_card->seq_mode = 0;
3951 
3952 	if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
3953 		chip->rw_need_retry = 0;
3954 		dev_dbg(rtsx_dev(chip), "No card exist, exit sd_rw\n");
3955 		rtsx_trace(chip);
3956 		return STATUS_FAIL;
3957 	}
3958 
3959 	if (sd_check_err_code(chip, SD_CRC_ERR)) {
3960 		if (CHK_MMC_4BIT(sd_card) || CHK_MMC_8BIT(sd_card)) {
3961 			sd_card->mmc_dont_switch_bus = 1;
3962 			reset_mmc_only(chip);
3963 			sd_card->mmc_dont_switch_bus = 0;
3964 		} else {
3965 			sd_card->need_retune = 1;
3966 			sd_auto_tune_clock(chip);
3967 		}
3968 	} else if (sd_check_err_code(chip, SD_TO_ERR | SD_STS_ERR)) {
3969 		retval = reset_sd_card(chip);
3970 		if (retval != STATUS_SUCCESS) {
3971 			chip->card_ready &= ~SD_CARD;
3972 			chip->card_fail |= SD_CARD;
3973 			chip->capacity[chip->card2lun[SD_CARD]] = 0;
3974 		}
3975 	}
3976 
3977 	rtsx_trace(chip);
3978 	return STATUS_FAIL;
3979 }
3980 
3981 #ifdef SUPPORT_CPRM
3982 int soft_reset_sd_card(struct rtsx_chip *chip)
3983 {
3984 	return reset_sd(chip);
3985 }
3986 
3987 int ext_sd_send_cmd_get_rsp(struct rtsx_chip *chip, u8 cmd_idx,
3988 		u32 arg, u8 rsp_type, u8 *rsp, int rsp_len, bool special_check)
3989 {
3990 	int retval;
3991 	int timeout = 100;
3992 	u16 reg_addr;
3993 	u8 *ptr;
3994 	int stat_idx = 0;
3995 	int rty_cnt = 0;
3996 
3997 	dev_dbg(rtsx_dev(chip), "EXT SD/MMC CMD %d\n", cmd_idx);
3998 
3999 	if (rsp_type == SD_RSP_TYPE_R1b)
4000 		timeout = 3000;
4001 
4002 RTY_SEND_CMD:
4003 
4004 	rtsx_init_cmd(chip);
4005 
4006 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF, 0x40 | cmd_idx);
4007 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF, (u8)(arg >> 24));
4008 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF, (u8)(arg >> 16));
4009 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF, (u8)(arg >> 8));
4010 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF, (u8)arg);
4011 
4012 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
4013 	rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE,
4014 			0x01, PINGPONG_BUFFER);
4015 	rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
4016 			0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
4017 	rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER, SD_TRANSFER_END,
4018 		SD_TRANSFER_END);
4019 
4020 	if (rsp_type == SD_RSP_TYPE_R2) {
4021 		for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
4022 		     reg_addr++)
4023 			rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
4024 
4025 		stat_idx = 17;
4026 	} else if (rsp_type != SD_RSP_TYPE_R0) {
4027 		for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
4028 		     reg_addr++)
4029 			rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0, 0);
4030 
4031 		stat_idx = 6;
4032 	}
4033 	rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0, 0);
4034 
4035 	rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_STAT1, 0, 0);
4036 
4037 	retval = rtsx_send_cmd(chip, SD_CARD, timeout);
4038 	if (retval < 0) {
4039 		if (retval == -ETIMEDOUT) {
4040 			rtsx_clear_sd_error(chip);
4041 
4042 			if (rsp_type & SD_WAIT_BUSY_END) {
4043 				retval = sd_check_data0_status(chip);
4044 				if (retval != STATUS_SUCCESS) {
4045 					rtsx_trace(chip);
4046 					return retval;
4047 				}
4048 			} else {
4049 				sd_set_err_code(chip, SD_TO_ERR);
4050 			}
4051 		}
4052 		rtsx_trace(chip);
4053 		return STATUS_FAIL;
4054 	}
4055 
4056 	if (rsp_type == SD_RSP_TYPE_R0)
4057 		return STATUS_SUCCESS;
4058 
4059 	ptr = rtsx_get_cmd_data(chip) + 1;
4060 
4061 	if ((ptr[0] & 0xC0) != 0) {
4062 		sd_set_err_code(chip, SD_STS_ERR);
4063 		rtsx_trace(chip);
4064 		return STATUS_FAIL;
4065 	}
4066 
4067 	if (!(rsp_type & SD_NO_CHECK_CRC7)) {
4068 		if (ptr[stat_idx] & SD_CRC7_ERR) {
4069 			if (cmd_idx == WRITE_MULTIPLE_BLOCK) {
4070 				sd_set_err_code(chip, SD_CRC_ERR);
4071 				rtsx_trace(chip);
4072 				return STATUS_FAIL;
4073 			}
4074 			if (rty_cnt < SD_MAX_RETRY_COUNT) {
4075 				wait_timeout(20);
4076 				rty_cnt++;
4077 				goto RTY_SEND_CMD;
4078 			} else {
4079 				sd_set_err_code(chip, SD_CRC_ERR);
4080 				rtsx_trace(chip);
4081 				return STATUS_FAIL;
4082 			}
4083 		}
4084 	}
4085 
4086 	if ((cmd_idx == SELECT_CARD) || (cmd_idx == APP_CMD) ||
4087 		(cmd_idx == SEND_STATUS) || (cmd_idx == STOP_TRANSMISSION)) {
4088 		if ((cmd_idx != STOP_TRANSMISSION) && !special_check) {
4089 			if (ptr[1] & 0x80) {
4090 				rtsx_trace(chip);
4091 				return STATUS_FAIL;
4092 			}
4093 		}
4094 #ifdef SUPPORT_SD_LOCK
4095 		if (ptr[1] & 0x7D) {
4096 #else
4097 		if (ptr[1] & 0x7F) {
4098 #endif
4099 			rtsx_trace(chip);
4100 			return STATUS_FAIL;
4101 		}
4102 		if (ptr[2] & 0xF8) {
4103 			rtsx_trace(chip);
4104 			return STATUS_FAIL;
4105 		}
4106 
4107 		if (cmd_idx == SELECT_CARD) {
4108 			if (rsp_type == SD_RSP_TYPE_R2) {
4109 				if ((ptr[3] & 0x1E) != 0x04) {
4110 					rtsx_trace(chip);
4111 					return STATUS_FAIL;
4112 				}
4113 
4114 			} else if (rsp_type == SD_RSP_TYPE_R0) {
4115 				if ((ptr[3] & 0x1E) != 0x03) {
4116 					rtsx_trace(chip);
4117 					return STATUS_FAIL;
4118 				}
4119 			}
4120 		}
4121 	}
4122 
4123 	if (rsp && rsp_len)
4124 		memcpy(rsp, ptr, rsp_len);
4125 
4126 	return STATUS_SUCCESS;
4127 }
4128 
4129 int ext_sd_get_rsp(struct rtsx_chip *chip, int len, u8 *rsp, u8 rsp_type)
4130 {
4131 	int retval, rsp_len;
4132 	u16 reg_addr;
4133 
4134 	if (rsp_type == SD_RSP_TYPE_R0)
4135 		return STATUS_SUCCESS;
4136 
4137 	rtsx_init_cmd(chip);
4138 
4139 	if (rsp_type == SD_RSP_TYPE_R2) {
4140 		for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16;
4141 		     reg_addr++)
4142 			rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
4143 
4144 		rsp_len = 17;
4145 	} else if (rsp_type != SD_RSP_TYPE_R0) {
4146 		for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4;
4147 		     reg_addr++)
4148 			rtsx_add_cmd(chip, READ_REG_CMD, reg_addr, 0xFF, 0);
4149 
4150 		rsp_len = 6;
4151 	}
4152 	rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0xFF, 0);
4153 
4154 	retval = rtsx_send_cmd(chip, SD_CARD, 100);
4155 	if (retval != STATUS_SUCCESS) {
4156 		rtsx_trace(chip);
4157 		return STATUS_FAIL;
4158 	}
4159 
4160 	if (rsp) {
4161 		int min_len = (rsp_len < len) ? rsp_len : len;
4162 
4163 		memcpy(rsp, rtsx_get_cmd_data(chip), min_len);
4164 
4165 		dev_dbg(rtsx_dev(chip), "min_len = %d\n", min_len);
4166 		dev_dbg(rtsx_dev(chip), "Response in cmd buf: 0x%x 0x%x 0x%x 0x%x\n",
4167 			rsp[0], rsp[1], rsp[2], rsp[3]);
4168 	}
4169 
4170 	return STATUS_SUCCESS;
4171 }
4172 
4173 int sd_pass_thru_mode(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4174 {
4175 	struct sd_info *sd_card = &(chip->sd_card);
4176 	unsigned int lun = SCSI_LUN(srb);
4177 	int len;
4178 	u8 buf[18] = {
4179 		0x00,
4180 		0x00,
4181 		0x00,
4182 		0x0E,
4183 		0x00,
4184 		0x00,
4185 		0x00,
4186 		0x00,
4187 		0x53,
4188 		0x44,
4189 		0x20,
4190 		0x43,
4191 		0x61,
4192 		0x72,
4193 		0x64,
4194 		0x00,
4195 		0x00,
4196 		0x00,
4197 	};
4198 
4199 	sd_card->pre_cmd_err = 0;
4200 
4201 	if (!(CHK_BIT(chip->lun_mc, lun))) {
4202 		SET_BIT(chip->lun_mc, lun);
4203 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4204 		rtsx_trace(chip);
4205 		return TRANSPORT_FAILED;
4206 	}
4207 
4208 	if ((srb->cmnd[2] != 0x53) || (srb->cmnd[3] != 0x44) ||
4209 		(srb->cmnd[4] != 0x20) || (srb->cmnd[5] != 0x43) ||
4210 		(srb->cmnd[6] != 0x61) || (srb->cmnd[7] != 0x72) ||
4211 		(srb->cmnd[8] != 0x64)) {
4212 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4213 		rtsx_trace(chip);
4214 		return TRANSPORT_FAILED;
4215 	}
4216 
4217 	switch (srb->cmnd[1] & 0x0F) {
4218 	case 0:
4219 		sd_card->sd_pass_thru_en = 0;
4220 		break;
4221 
4222 	case 1:
4223 		sd_card->sd_pass_thru_en = 1;
4224 		break;
4225 
4226 	default:
4227 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4228 		rtsx_trace(chip);
4229 		return TRANSPORT_FAILED;
4230 	}
4231 
4232 	buf[5] = (CHK_SD(sd_card) == 1) ? 0x01 : 0x02;
4233 	if (chip->card_wp & SD_CARD)
4234 		buf[5] |= 0x80;
4235 
4236 	buf[6] = (u8)(sd_card->sd_addr >> 16);
4237 	buf[7] = (u8)(sd_card->sd_addr >> 24);
4238 
4239 	buf[15] = chip->max_lun;
4240 
4241 	len = min_t(int, 18, scsi_bufflen(srb));
4242 	rtsx_stor_set_xfer_buf(buf, len, srb);
4243 
4244 	return TRANSPORT_GOOD;
4245 }
4246 
4247 static inline int get_rsp_type(struct scsi_cmnd *srb, u8 *rsp_type,
4248 			int *rsp_len)
4249 {
4250 	if (!rsp_type || !rsp_len)
4251 		return STATUS_FAIL;
4252 
4253 	switch (srb->cmnd[10]) {
4254 	case 0x03:
4255 		*rsp_type = SD_RSP_TYPE_R0;
4256 		*rsp_len = 0;
4257 		break;
4258 
4259 	case 0x04:
4260 		*rsp_type = SD_RSP_TYPE_R1;
4261 		*rsp_len = 6;
4262 		break;
4263 
4264 	case 0x05:
4265 		*rsp_type = SD_RSP_TYPE_R1b;
4266 		*rsp_len = 6;
4267 		break;
4268 
4269 	case 0x06:
4270 		*rsp_type = SD_RSP_TYPE_R2;
4271 		*rsp_len = 17;
4272 		break;
4273 
4274 	case 0x07:
4275 		*rsp_type = SD_RSP_TYPE_R3;
4276 		*rsp_len = 6;
4277 		break;
4278 
4279 	default:
4280 		return STATUS_FAIL;
4281 	}
4282 
4283 	return STATUS_SUCCESS;
4284 }
4285 
4286 int sd_execute_no_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4287 {
4288 	struct sd_info *sd_card = &(chip->sd_card);
4289 	unsigned int lun = SCSI_LUN(srb);
4290 	int retval, rsp_len;
4291 	u8 cmd_idx, rsp_type;
4292 	bool standby = false, acmd = false;
4293 	u32 arg;
4294 
4295 	if (!sd_card->sd_pass_thru_en) {
4296 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4297 		rtsx_trace(chip);
4298 		return TRANSPORT_FAILED;
4299 	}
4300 
4301 	retval = sd_switch_clock(chip);
4302 	if (retval != STATUS_SUCCESS) {
4303 		rtsx_trace(chip);
4304 		return TRANSPORT_FAILED;
4305 	}
4306 
4307 	if (sd_card->pre_cmd_err) {
4308 		sd_card->pre_cmd_err = 0;
4309 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4310 		rtsx_trace(chip);
4311 		return TRANSPORT_FAILED;
4312 	}
4313 
4314 	cmd_idx = srb->cmnd[2] & 0x3F;
4315 	if (srb->cmnd[1] & 0x02)
4316 		standby = true;
4317 
4318 	if (srb->cmnd[1] & 0x01)
4319 		acmd = true;
4320 
4321 	arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
4322 		((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
4323 
4324 	retval = get_rsp_type(srb, &rsp_type, &rsp_len);
4325 	if (retval != STATUS_SUCCESS) {
4326 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4327 		rtsx_trace(chip);
4328 		return TRANSPORT_FAILED;
4329 	}
4330 	sd_card->last_rsp_type = rsp_type;
4331 
4332 	retval = sd_switch_clock(chip);
4333 	if (retval != STATUS_SUCCESS) {
4334 		rtsx_trace(chip);
4335 		return TRANSPORT_FAILED;
4336 	}
4337 
4338 #ifdef SUPPORT_SD_LOCK
4339 	if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
4340 		if (CHK_MMC_8BIT(sd_card)) {
4341 			retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4342 						SD_BUS_WIDTH_8);
4343 			if (retval != STATUS_SUCCESS) {
4344 				rtsx_trace(chip);
4345 				return TRANSPORT_FAILED;
4346 			}
4347 
4348 		} else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
4349 			retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4350 						SD_BUS_WIDTH_4);
4351 			if (retval != STATUS_SUCCESS) {
4352 				rtsx_trace(chip);
4353 				return TRANSPORT_FAILED;
4354 			}
4355 		}
4356 	}
4357 #else
4358 	retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
4359 	if (retval != STATUS_SUCCESS) {
4360 		rtsx_trace(chip);
4361 		return TRANSPORT_FAILED;
4362 	}
4363 #endif
4364 
4365 	if (standby) {
4366 		retval = sd_select_card(chip, 0);
4367 		if (retval != STATUS_SUCCESS) {
4368 			rtsx_trace(chip);
4369 			goto SD_Execute_Cmd_Failed;
4370 		}
4371 	}
4372 
4373 	if (acmd) {
4374 		retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
4375 						sd_card->sd_addr,
4376 						SD_RSP_TYPE_R1, NULL, 0, false);
4377 		if (retval != STATUS_SUCCESS) {
4378 			rtsx_trace(chip);
4379 			goto SD_Execute_Cmd_Failed;
4380 		}
4381 	}
4382 
4383 	retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
4384 			sd_card->rsp, rsp_len, false);
4385 	if (retval != STATUS_SUCCESS) {
4386 		rtsx_trace(chip);
4387 		goto SD_Execute_Cmd_Failed;
4388 	}
4389 
4390 	if (standby) {
4391 		retval = sd_select_card(chip, 1);
4392 		if (retval != STATUS_SUCCESS) {
4393 			rtsx_trace(chip);
4394 			goto SD_Execute_Cmd_Failed;
4395 		}
4396 	}
4397 
4398 #ifdef SUPPORT_SD_LOCK
4399 	retval = sd_update_lock_status(chip);
4400 	if (retval != STATUS_SUCCESS) {
4401 		rtsx_trace(chip);
4402 		goto SD_Execute_Cmd_Failed;
4403 	}
4404 #endif
4405 
4406 	scsi_set_resid(srb, 0);
4407 	return TRANSPORT_GOOD;
4408 
4409 SD_Execute_Cmd_Failed:
4410 	sd_card->pre_cmd_err = 1;
4411 	set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4412 	release_sd_card(chip);
4413 	do_reset_sd_card(chip);
4414 	if (!(chip->card_ready & SD_CARD))
4415 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4416 
4417 	rtsx_trace(chip);
4418 	return TRANSPORT_FAILED;
4419 }
4420 
4421 int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4422 {
4423 	struct sd_info *sd_card = &(chip->sd_card);
4424 	unsigned int lun = SCSI_LUN(srb);
4425 	int retval, rsp_len, i;
4426 	bool read_err = false, cmd13_checkbit = false;
4427 	u8 cmd_idx, rsp_type, bus_width;
4428 	bool standby = false, send_cmd12 = false, acmd = false;
4429 	u32 data_len;
4430 
4431 	if (!sd_card->sd_pass_thru_en) {
4432 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4433 		rtsx_trace(chip);
4434 		return TRANSPORT_FAILED;
4435 	}
4436 
4437 	if (sd_card->pre_cmd_err) {
4438 		sd_card->pre_cmd_err = 0;
4439 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4440 		rtsx_trace(chip);
4441 		return TRANSPORT_FAILED;
4442 	}
4443 
4444 	retval = sd_switch_clock(chip);
4445 	if (retval != STATUS_SUCCESS) {
4446 		rtsx_trace(chip);
4447 		return TRANSPORT_FAILED;
4448 	}
4449 
4450 	cmd_idx = srb->cmnd[2] & 0x3F;
4451 	if (srb->cmnd[1] & 0x04)
4452 		send_cmd12 = true;
4453 
4454 	if (srb->cmnd[1] & 0x02)
4455 		standby = true;
4456 
4457 	if (srb->cmnd[1] & 0x01)
4458 		acmd = true;
4459 
4460 	data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8]
4461 						<< 8) | srb->cmnd[9];
4462 
4463 	retval = get_rsp_type(srb, &rsp_type, &rsp_len);
4464 	if (retval != STATUS_SUCCESS) {
4465 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4466 		rtsx_trace(chip);
4467 		return TRANSPORT_FAILED;
4468 	}
4469 	sd_card->last_rsp_type = rsp_type;
4470 
4471 	retval = sd_switch_clock(chip);
4472 	if (retval != STATUS_SUCCESS) {
4473 		rtsx_trace(chip);
4474 		return TRANSPORT_FAILED;
4475 	}
4476 
4477 #ifdef SUPPORT_SD_LOCK
4478 	if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
4479 		if (CHK_MMC_8BIT(sd_card))
4480 			bus_width = SD_BUS_WIDTH_8;
4481 		else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card))
4482 			bus_width = SD_BUS_WIDTH_4;
4483 		else
4484 			bus_width = SD_BUS_WIDTH_1;
4485 	} else {
4486 		bus_width = SD_BUS_WIDTH_4;
4487 	}
4488 	dev_dbg(rtsx_dev(chip), "bus_width = %d\n", bus_width);
4489 #else
4490 	bus_width = SD_BUS_WIDTH_4;
4491 #endif
4492 
4493 	if (data_len < 512) {
4494 		retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
4495 				SD_RSP_TYPE_R1, NULL, 0, false);
4496 		if (retval != STATUS_SUCCESS) {
4497 			rtsx_trace(chip);
4498 			goto SD_Execute_Read_Cmd_Failed;
4499 		}
4500 	}
4501 
4502 	if (standby) {
4503 		retval = sd_select_card(chip, 0);
4504 		if (retval != STATUS_SUCCESS) {
4505 			rtsx_trace(chip);
4506 			goto SD_Execute_Read_Cmd_Failed;
4507 		}
4508 	}
4509 
4510 	if (acmd) {
4511 		retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
4512 						sd_card->sd_addr,
4513 						SD_RSP_TYPE_R1, NULL, 0, false);
4514 		if (retval != STATUS_SUCCESS) {
4515 			rtsx_trace(chip);
4516 			goto SD_Execute_Read_Cmd_Failed;
4517 		}
4518 	}
4519 
4520 	if (data_len <= 512) {
4521 		int min_len;
4522 		u8 *buf;
4523 		u16 byte_cnt, blk_cnt;
4524 		u8 cmd[5];
4525 
4526 		byte_cnt = ((u16)(srb->cmnd[8] & 0x03) << 8) | srb->cmnd[9];
4527 		blk_cnt = 1;
4528 
4529 		cmd[0] = 0x40 | cmd_idx;
4530 		cmd[1] = srb->cmnd[3];
4531 		cmd[2] = srb->cmnd[4];
4532 		cmd[3] = srb->cmnd[5];
4533 		cmd[4] = srb->cmnd[6];
4534 
4535 		buf = kmalloc(data_len, GFP_KERNEL);
4536 		if (!buf) {
4537 			rtsx_trace(chip);
4538 			return TRANSPORT_ERROR;
4539 		}
4540 
4541 		retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, byte_cnt,
4542 				       blk_cnt, bus_width, buf, data_len, 2000);
4543 		if (retval != STATUS_SUCCESS) {
4544 			read_err = true;
4545 			kfree(buf);
4546 			rtsx_clear_sd_error(chip);
4547 			rtsx_trace(chip);
4548 			goto SD_Execute_Read_Cmd_Failed;
4549 		}
4550 
4551 		min_len = min(data_len, scsi_bufflen(srb));
4552 		rtsx_stor_set_xfer_buf(buf, min_len, srb);
4553 
4554 		kfree(buf);
4555 	} else if (!(data_len & 0x1FF)) {
4556 		rtsx_init_cmd(chip);
4557 
4558 		trans_dma_enable(DMA_FROM_DEVICE, chip, data_len, DMA_512);
4559 
4560 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
4561 			0x02);
4562 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
4563 			0x00);
4564 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
4565 				0xFF, (srb->cmnd[7] & 0xFE) >> 1);
4566 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
4567 				0xFF, (u8)((data_len & 0x0001FE00) >> 9));
4568 
4569 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD0, 0xFF,
4570 			0x40 | cmd_idx);
4571 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD1, 0xFF,
4572 			srb->cmnd[3]);
4573 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD2, 0xFF,
4574 			srb->cmnd[4]);
4575 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD3, 0xFF,
4576 			srb->cmnd[5]);
4577 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CMD4, 0xFF,
4578 			srb->cmnd[6]);
4579 
4580 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG1, 0x03, bus_width);
4581 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_CFG2, 0xFF, rsp_type);
4582 
4583 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER,
4584 			     0xFF, SD_TM_AUTO_READ_2 | SD_TRANSFER_START);
4585 		rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
4586 			SD_TRANSFER_END, SD_TRANSFER_END);
4587 
4588 		rtsx_send_cmd_no_wait(chip);
4589 
4590 		retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
4591 					scsi_bufflen(srb), scsi_sg_count(srb),
4592 					DMA_FROM_DEVICE, 10000);
4593 		if (retval < 0) {
4594 			read_err = true;
4595 			rtsx_clear_sd_error(chip);
4596 			rtsx_trace(chip);
4597 			goto SD_Execute_Read_Cmd_Failed;
4598 		}
4599 
4600 	} else {
4601 		rtsx_trace(chip);
4602 		goto SD_Execute_Read_Cmd_Failed;
4603 	}
4604 
4605 	retval = ext_sd_get_rsp(chip, rsp_len, sd_card->rsp, rsp_type);
4606 	if (retval != STATUS_SUCCESS) {
4607 		rtsx_trace(chip);
4608 		goto SD_Execute_Read_Cmd_Failed;
4609 	}
4610 
4611 	if (standby) {
4612 		retval = sd_select_card(chip, 1);
4613 		if (retval != STATUS_SUCCESS) {
4614 			rtsx_trace(chip);
4615 			goto SD_Execute_Read_Cmd_Failed;
4616 		}
4617 	}
4618 
4619 	if (send_cmd12) {
4620 		retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
4621 				0, SD_RSP_TYPE_R1b, NULL, 0, false);
4622 		if (retval != STATUS_SUCCESS) {
4623 			rtsx_trace(chip);
4624 			goto SD_Execute_Read_Cmd_Failed;
4625 		}
4626 	}
4627 
4628 	if (data_len < 512) {
4629 		retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
4630 				SD_RSP_TYPE_R1, NULL, 0, false);
4631 		if (retval != STATUS_SUCCESS) {
4632 			rtsx_trace(chip);
4633 			goto SD_Execute_Read_Cmd_Failed;
4634 		}
4635 
4636 		retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
4637 		if (retval != STATUS_SUCCESS) {
4638 			rtsx_trace(chip);
4639 			goto SD_Execute_Read_Cmd_Failed;
4640 		}
4641 
4642 		retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
4643 		if (retval != STATUS_SUCCESS) {
4644 			rtsx_trace(chip);
4645 			goto SD_Execute_Read_Cmd_Failed;
4646 		}
4647 	}
4648 
4649 	if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
4650 		cmd13_checkbit = true;
4651 
4652 	for (i = 0; i < 3; i++) {
4653 		retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS,
4654 						sd_card->sd_addr,
4655 						SD_RSP_TYPE_R1, NULL, 0,
4656 						cmd13_checkbit);
4657 		if (retval == STATUS_SUCCESS)
4658 			break;
4659 	}
4660 	if (retval != STATUS_SUCCESS) {
4661 		rtsx_trace(chip);
4662 		goto SD_Execute_Read_Cmd_Failed;
4663 	}
4664 
4665 	scsi_set_resid(srb, 0);
4666 	return TRANSPORT_GOOD;
4667 
4668 SD_Execute_Read_Cmd_Failed:
4669 	sd_card->pre_cmd_err = 1;
4670 	set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
4671 	if (read_err)
4672 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
4673 
4674 	release_sd_card(chip);
4675 	do_reset_sd_card(chip);
4676 	if (!(chip->card_ready & SD_CARD))
4677 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
4678 
4679 	rtsx_trace(chip);
4680 	return TRANSPORT_FAILED;
4681 }
4682 
4683 int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
4684 {
4685 	struct sd_info *sd_card = &(chip->sd_card);
4686 	unsigned int lun = SCSI_LUN(srb);
4687 	int retval, rsp_len, i;
4688 	bool write_err = false, cmd13_checkbit = false;
4689 	u8 cmd_idx, rsp_type;
4690 	bool standby = false, send_cmd12 = false, acmd = false;
4691 	u32 data_len, arg;
4692 #ifdef SUPPORT_SD_LOCK
4693 	int lock_cmd_fail = 0;
4694 	u8 sd_lock_state = 0;
4695 	u8 lock_cmd_type = 0;
4696 #endif
4697 
4698 	if (!sd_card->sd_pass_thru_en) {
4699 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4700 		rtsx_trace(chip);
4701 		return TRANSPORT_FAILED;
4702 	}
4703 
4704 	if (sd_card->pre_cmd_err) {
4705 		sd_card->pre_cmd_err = 0;
4706 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
4707 		rtsx_trace(chip);
4708 		return TRANSPORT_FAILED;
4709 	}
4710 
4711 	retval = sd_switch_clock(chip);
4712 	if (retval != STATUS_SUCCESS) {
4713 		rtsx_trace(chip);
4714 		return TRANSPORT_FAILED;
4715 	}
4716 
4717 	cmd_idx = srb->cmnd[2] & 0x3F;
4718 	if (srb->cmnd[1] & 0x04)
4719 		send_cmd12 = true;
4720 
4721 	if (srb->cmnd[1] & 0x02)
4722 		standby = true;
4723 
4724 	if (srb->cmnd[1] & 0x01)
4725 		acmd = true;
4726 
4727 	data_len = ((u32)srb->cmnd[7] << 16) | ((u32)srb->cmnd[8]
4728 						<< 8) | srb->cmnd[9];
4729 	arg = ((u32)srb->cmnd[3] << 24) | ((u32)srb->cmnd[4] << 16) |
4730 		((u32)srb->cmnd[5] << 8) | srb->cmnd[6];
4731 
4732 #ifdef SUPPORT_SD_LOCK
4733 	if (cmd_idx == LOCK_UNLOCK) {
4734 		sd_lock_state = sd_card->sd_lock_status;
4735 		sd_lock_state &= SD_LOCKED;
4736 	}
4737 #endif
4738 
4739 	retval = get_rsp_type(srb, &rsp_type, &rsp_len);
4740 	if (retval != STATUS_SUCCESS) {
4741 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
4742 		rtsx_trace(chip);
4743 		return TRANSPORT_FAILED;
4744 	}
4745 	sd_card->last_rsp_type = rsp_type;
4746 
4747 	retval = sd_switch_clock(chip);
4748 	if (retval != STATUS_SUCCESS) {
4749 		rtsx_trace(chip);
4750 		return TRANSPORT_FAILED;
4751 	}
4752 
4753 #ifdef SUPPORT_SD_LOCK
4754 	if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
4755 		if (CHK_MMC_8BIT(sd_card)) {
4756 			retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4757 						SD_BUS_WIDTH_8);
4758 			if (retval != STATUS_SUCCESS) {
4759 				rtsx_trace(chip);
4760 				return TRANSPORT_FAILED;
4761 			}
4762 
4763 		} else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
4764 			retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
4765 						SD_BUS_WIDTH_4);
4766 			if (retval != STATUS_SUCCESS) {
4767 				rtsx_trace(chip);
4768 				return TRANSPORT_FAILED;
4769 			}
4770 		}
4771 	}
4772 #else
4773 	retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
4774 	if (retval != STATUS_SUCCESS) {
4775 		rtsx_trace(chip);
4776 		return TRANSPORT_FAILED;
4777 	}
4778 #endif
4779 
4780 	if (data_len < 512) {
4781 		retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
4782 				SD_RSP_TYPE_R1, NULL, 0, false);
4783 		if (retval != STATUS_SUCCESS) {
4784 			rtsx_trace(chip);
4785 			goto SD_Execute_Write_Cmd_Failed;
4786 		}
4787 	}
4788 
4789 	if (standby) {
4790 		retval = sd_select_card(chip, 0);
4791 		if (retval != STATUS_SUCCESS) {
4792 			rtsx_trace(chip);
4793 			goto SD_Execute_Write_Cmd_Failed;
4794 		}
4795 	}
4796 
4797 	if (acmd) {
4798 		retval = ext_sd_send_cmd_get_rsp(chip, APP_CMD,
4799 						sd_card->sd_addr,
4800 						SD_RSP_TYPE_R1, NULL, 0, false);
4801 		if (retval != STATUS_SUCCESS) {
4802 			rtsx_trace(chip);
4803 			goto SD_Execute_Write_Cmd_Failed;
4804 		}
4805 	}
4806 
4807 	retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
4808 			sd_card->rsp, rsp_len, false);
4809 	if (retval != STATUS_SUCCESS) {
4810 		rtsx_trace(chip);
4811 		goto SD_Execute_Write_Cmd_Failed;
4812 	}
4813 
4814 	if (data_len <= 512) {
4815 		u16 i;
4816 		u8 *buf;
4817 
4818 		buf = kmalloc(data_len, GFP_KERNEL);
4819 		if (!buf) {
4820 			rtsx_trace(chip);
4821 			return TRANSPORT_ERROR;
4822 		}
4823 
4824 		rtsx_stor_get_xfer_buf(buf, data_len, srb);
4825 
4826 #ifdef SUPPORT_SD_LOCK
4827 		if (cmd_idx == LOCK_UNLOCK)
4828 			lock_cmd_type = buf[0] & 0x0F;
4829 #endif
4830 
4831 		if (data_len > 256) {
4832 			rtsx_init_cmd(chip);
4833 			for (i = 0; i < 256; i++) {
4834 				rtsx_add_cmd(chip, WRITE_REG_CMD,
4835 						PPBUF_BASE2 + i, 0xFF, buf[i]);
4836 			}
4837 			retval = rtsx_send_cmd(chip, 0, 250);
4838 			if (retval != STATUS_SUCCESS) {
4839 				kfree(buf);
4840 				rtsx_trace(chip);
4841 				goto SD_Execute_Write_Cmd_Failed;
4842 			}
4843 
4844 			rtsx_init_cmd(chip);
4845 			for (i = 256; i < data_len; i++) {
4846 				rtsx_add_cmd(chip, WRITE_REG_CMD,
4847 						PPBUF_BASE2 + i, 0xFF, buf[i]);
4848 			}
4849 			retval = rtsx_send_cmd(chip, 0, 250);
4850 			if (retval != STATUS_SUCCESS) {
4851 				kfree(buf);
4852 				rtsx_trace(chip);
4853 				goto SD_Execute_Write_Cmd_Failed;
4854 			}
4855 		} else {
4856 			rtsx_init_cmd(chip);
4857 			for (i = 0; i < data_len; i++) {
4858 				rtsx_add_cmd(chip, WRITE_REG_CMD,
4859 						PPBUF_BASE2 + i, 0xFF, buf[i]);
4860 			}
4861 			retval = rtsx_send_cmd(chip, 0, 250);
4862 			if (retval != STATUS_SUCCESS) {
4863 				kfree(buf);
4864 				rtsx_trace(chip);
4865 				goto SD_Execute_Write_Cmd_Failed;
4866 			}
4867 		}
4868 
4869 		kfree(buf);
4870 
4871 		rtsx_init_cmd(chip);
4872 
4873 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
4874 			srb->cmnd[8] & 0x03);
4875 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
4876 			srb->cmnd[9]);
4877 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H, 0xFF,
4878 			0x00);
4879 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L, 0xFF,
4880 			0x01);
4881 		rtsx_add_cmd(chip, WRITE_REG_CMD, CARD_DATA_SOURCE, 0x01,
4882 			PINGPONG_BUFFER);
4883 
4884 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
4885 			     SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
4886 		rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
4887 			SD_TRANSFER_END, SD_TRANSFER_END);
4888 
4889 		retval = rtsx_send_cmd(chip, SD_CARD, 250);
4890 	} else if (!(data_len & 0x1FF)) {
4891 		rtsx_init_cmd(chip);
4892 
4893 		trans_dma_enable(DMA_TO_DEVICE, chip, data_len, DMA_512);
4894 
4895 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_H, 0xFF,
4896 			0x02);
4897 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BYTE_CNT_L, 0xFF,
4898 			0x00);
4899 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_H,
4900 				0xFF, (srb->cmnd[7] & 0xFE) >> 1);
4901 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_BLOCK_CNT_L,
4902 				0xFF, (u8)((data_len & 0x0001FE00) >> 9));
4903 
4904 		rtsx_add_cmd(chip, WRITE_REG_CMD, REG_SD_TRANSFER, 0xFF,
4905 			SD_TM_AUTO_WRITE_3 | SD_TRANSFER_START);
4906 		rtsx_add_cmd(chip, CHECK_REG_CMD, REG_SD_TRANSFER,
4907 			SD_TRANSFER_END, SD_TRANSFER_END);
4908 
4909 		rtsx_send_cmd_no_wait(chip);
4910 
4911 		retval = rtsx_transfer_data(chip, SD_CARD, scsi_sglist(srb),
4912 					scsi_bufflen(srb), scsi_sg_count(srb),
4913 					DMA_TO_DEVICE, 10000);
4914 
4915 	} else {
4916 		rtsx_trace(chip);
4917 		goto SD_Execute_Write_Cmd_Failed;
4918 	}
4919 
4920 	if (retval < 0) {
4921 		write_err = true;
4922 		rtsx_clear_sd_error(chip);
4923 		rtsx_trace(chip);
4924 		goto SD_Execute_Write_Cmd_Failed;
4925 	}
4926 
4927 #ifdef SUPPORT_SD_LOCK
4928 	if (cmd_idx == LOCK_UNLOCK) {
4929 		if (lock_cmd_type == SD_ERASE) {
4930 			sd_card->sd_erase_status = SD_UNDER_ERASING;
4931 			scsi_set_resid(srb, 0);
4932 			return TRANSPORT_GOOD;
4933 		}
4934 
4935 		rtsx_init_cmd(chip);
4936 		rtsx_add_cmd(chip, CHECK_REG_CMD, 0xFD30, 0x02, 0x02);
4937 
4938 		rtsx_send_cmd(chip, SD_CARD, 250);
4939 
4940 		retval = sd_update_lock_status(chip);
4941 		if (retval != STATUS_SUCCESS) {
4942 			dev_dbg(rtsx_dev(chip), "Lock command fail!\n");
4943 			lock_cmd_fail = 1;
4944 		}
4945 	}
4946 #endif /* SUPPORT_SD_LOCK */
4947 
4948 	if (standby) {
4949 		retval = sd_select_card(chip, 1);
4950 		if (retval != STATUS_SUCCESS) {
4951 			rtsx_trace(chip);
4952 			goto SD_Execute_Write_Cmd_Failed;
4953 		}
4954 	}
4955 
4956 	if (send_cmd12) {
4957 		retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION,
4958 				0, SD_RSP_TYPE_R1b, NULL, 0, false);
4959 		if (retval != STATUS_SUCCESS) {
4960 			rtsx_trace(chip);
4961 			goto SD_Execute_Write_Cmd_Failed;
4962 		}
4963 	}
4964 
4965 	if (data_len < 512) {
4966 		retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
4967 				SD_RSP_TYPE_R1, NULL, 0, false);
4968 		if (retval != STATUS_SUCCESS) {
4969 			rtsx_trace(chip);
4970 			goto SD_Execute_Write_Cmd_Failed;
4971 		}
4972 
4973 		retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
4974 		if (retval != STATUS_SUCCESS) {
4975 			rtsx_trace(chip);
4976 			goto SD_Execute_Write_Cmd_Failed;
4977 		}
4978 
4979 		rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
4980 		if (retval != STATUS_SUCCESS) {
4981 			rtsx_trace(chip);
4982 			goto SD_Execute_Write_Cmd_Failed;
4983 		}
4984 	}
4985 
4986 	if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
4987 		cmd13_checkbit = true;
4988 
4989 	for (i = 0; i < 3; i++) {
4990 		retval = ext_sd_send_cmd_get_rsp(chip, SEND_STATUS,
4991 						sd_card->sd_addr,
4992 						SD_RSP_TYPE_R1, NULL, 0,
4993 						cmd13_checkbit);
4994 		if (retval == STATUS_SUCCESS)
4995 			break;
4996 	}
4997 	if (retval != STATUS_SUCCESS) {
4998 		rtsx_trace(chip);
4999 		goto SD_Execute_Write_Cmd_Failed;
5000 	}
5001 
5002 #ifdef SUPPORT_SD_LOCK
5003 	if (cmd_idx == LOCK_UNLOCK) {
5004 		if (!lock_cmd_fail) {
5005 			dev_dbg(rtsx_dev(chip), "lock_cmd_type = 0x%x\n",
5006 				lock_cmd_type);
5007 			if (lock_cmd_type & SD_CLR_PWD)
5008 				sd_card->sd_lock_status &= ~SD_PWD_EXIST;
5009 
5010 			if (lock_cmd_type & SD_SET_PWD)
5011 				sd_card->sd_lock_status |= SD_PWD_EXIST;
5012 		}
5013 
5014 		dev_dbg(rtsx_dev(chip), "sd_lock_state = 0x%x, sd_card->sd_lock_status = 0x%x\n",
5015 			sd_lock_state, sd_card->sd_lock_status);
5016 		if (sd_lock_state ^ (sd_card->sd_lock_status & SD_LOCKED)) {
5017 			sd_card->sd_lock_notify = 1;
5018 			if (sd_lock_state) {
5019 				if (sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) {
5020 					sd_card->sd_lock_status |= (
5021 						SD_UNLOCK_POW_ON | SD_SDR_RST);
5022 					if (CHK_SD(sd_card)) {
5023 						retval = reset_sd(chip);
5024 						if (retval != STATUS_SUCCESS) {
5025 							sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
5026 							rtsx_trace(chip);
5027 							goto SD_Execute_Write_Cmd_Failed;
5028 						}
5029 					}
5030 
5031 					sd_card->sd_lock_status &= ~(SD_UNLOCK_POW_ON | SD_SDR_RST);
5032 				}
5033 			}
5034 		}
5035 	}
5036 
5037 	if (lock_cmd_fail) {
5038 		scsi_set_resid(srb, 0);
5039 		set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
5040 		rtsx_trace(chip);
5041 		return TRANSPORT_FAILED;
5042 	}
5043 #endif  /* SUPPORT_SD_LOCK */
5044 
5045 	scsi_set_resid(srb, 0);
5046 	return TRANSPORT_GOOD;
5047 
5048 SD_Execute_Write_Cmd_Failed:
5049 	sd_card->pre_cmd_err = 1;
5050 	set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
5051 	if (write_err)
5052 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
5053 
5054 	release_sd_card(chip);
5055 	do_reset_sd_card(chip);
5056 	if (!(chip->card_ready & SD_CARD))
5057 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
5058 
5059 	rtsx_trace(chip);
5060 	return TRANSPORT_FAILED;
5061 }
5062 
5063 int sd_get_cmd_rsp(struct scsi_cmnd *srb, struct rtsx_chip *chip)
5064 {
5065 	struct sd_info *sd_card = &(chip->sd_card);
5066 	unsigned int lun = SCSI_LUN(srb);
5067 	int count;
5068 	u16 data_len;
5069 
5070 	if (!sd_card->sd_pass_thru_en) {
5071 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
5072 		rtsx_trace(chip);
5073 		return TRANSPORT_FAILED;
5074 	}
5075 
5076 	if (sd_card->pre_cmd_err) {
5077 		sd_card->pre_cmd_err = 0;
5078 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
5079 		rtsx_trace(chip);
5080 		return TRANSPORT_FAILED;
5081 	}
5082 
5083 	data_len = ((u16)srb->cmnd[7] << 8) | srb->cmnd[8];
5084 
5085 	if (sd_card->last_rsp_type == SD_RSP_TYPE_R0) {
5086 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
5087 		rtsx_trace(chip);
5088 		return TRANSPORT_FAILED;
5089 	} else if (sd_card->last_rsp_type == SD_RSP_TYPE_R2) {
5090 		count = (data_len < 17) ? data_len : 17;
5091 	} else {
5092 		count = (data_len < 6) ? data_len : 6;
5093 	}
5094 	rtsx_stor_set_xfer_buf(sd_card->rsp, count, srb);
5095 
5096 	dev_dbg(rtsx_dev(chip), "Response length: %d\n", data_len);
5097 	dev_dbg(rtsx_dev(chip), "Response: 0x%x 0x%x 0x%x 0x%x\n",
5098 		sd_card->rsp[0], sd_card->rsp[1],
5099 		sd_card->rsp[2], sd_card->rsp[3]);
5100 
5101 	scsi_set_resid(srb, 0);
5102 	return TRANSPORT_GOOD;
5103 }
5104 
5105 int sd_hw_rst(struct scsi_cmnd *srb, struct rtsx_chip *chip)
5106 {
5107 	struct sd_info *sd_card = &(chip->sd_card);
5108 	unsigned int lun = SCSI_LUN(srb);
5109 	int retval;
5110 
5111 	if (!sd_card->sd_pass_thru_en) {
5112 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
5113 		rtsx_trace(chip);
5114 		return TRANSPORT_FAILED;
5115 	}
5116 
5117 	if (sd_card->pre_cmd_err) {
5118 		sd_card->pre_cmd_err = 0;
5119 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
5120 		rtsx_trace(chip);
5121 		return TRANSPORT_FAILED;
5122 	}
5123 
5124 	if ((srb->cmnd[2] != 0x53) || (srb->cmnd[3] != 0x44) ||
5125 		(srb->cmnd[4] != 0x20) || (srb->cmnd[5] != 0x43) ||
5126 		(srb->cmnd[6] != 0x61) || (srb->cmnd[7] != 0x72) ||
5127 		(srb->cmnd[8] != 0x64)) {
5128 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
5129 		rtsx_trace(chip);
5130 		return TRANSPORT_FAILED;
5131 	}
5132 
5133 	switch (srb->cmnd[1] & 0x0F) {
5134 	case 0:
5135 #ifdef SUPPORT_SD_LOCK
5136 		if (srb->cmnd[9] == 0x64)
5137 			sd_card->sd_lock_status |= SD_SDR_RST;
5138 #endif
5139 		retval = reset_sd_card(chip);
5140 		if (retval != STATUS_SUCCESS) {
5141 #ifdef SUPPORT_SD_LOCK
5142 			sd_card->sd_lock_status &= ~SD_SDR_RST;
5143 #endif
5144 			set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
5145 			sd_card->pre_cmd_err = 1;
5146 			rtsx_trace(chip);
5147 			return TRANSPORT_FAILED;
5148 		}
5149 #ifdef SUPPORT_SD_LOCK
5150 		sd_card->sd_lock_status &= ~SD_SDR_RST;
5151 #endif
5152 		break;
5153 
5154 	case 1:
5155 		retval = soft_reset_sd_card(chip);
5156 		if (retval != STATUS_SUCCESS) {
5157 			set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
5158 			sd_card->pre_cmd_err = 1;
5159 			rtsx_trace(chip);
5160 			return TRANSPORT_FAILED;
5161 		}
5162 		break;
5163 
5164 	default:
5165 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
5166 		rtsx_trace(chip);
5167 		return TRANSPORT_FAILED;
5168 	}
5169 
5170 	scsi_set_resid(srb, 0);
5171 	return TRANSPORT_GOOD;
5172 }
5173 #endif
5174 
5175 void sd_cleanup_work(struct rtsx_chip *chip)
5176 {
5177 	struct sd_info *sd_card = &(chip->sd_card);
5178 
5179 	if (sd_card->seq_mode) {
5180 		dev_dbg(rtsx_dev(chip), "SD: stop transmission\n");
5181 		sd_stop_seq_mode(chip);
5182 		sd_card->cleanup_counter = 0;
5183 	}
5184 }
5185 
5186 int sd_power_off_card3v3(struct rtsx_chip *chip)
5187 {
5188 	int retval;
5189 
5190 	retval = disable_card_clock(chip, SD_CARD);
5191 	if (retval != STATUS_SUCCESS) {
5192 		rtsx_trace(chip);
5193 		return STATUS_FAIL;
5194 	}
5195 
5196 	retval = rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
5197 	if (retval) {
5198 		rtsx_trace(chip);
5199 		return retval;
5200 	}
5201 
5202 	if (!chip->ft2_fast_mode) {
5203 		retval = card_power_off(chip, SD_CARD);
5204 		if (retval != STATUS_SUCCESS) {
5205 			rtsx_trace(chip);
5206 			return STATUS_FAIL;
5207 		}
5208 
5209 		wait_timeout(50);
5210 	}
5211 
5212 	if (chip->asic_code) {
5213 		retval = sd_pull_ctl_disable(chip);
5214 		if (retval != STATUS_SUCCESS) {
5215 			rtsx_trace(chip);
5216 			return STATUS_FAIL;
5217 		}
5218 	} else {
5219 		retval = rtsx_write_register(chip, FPGA_PULL_CTL,
5220 					     FPGA_SD_PULL_CTL_BIT | 0x20,
5221 					     FPGA_SD_PULL_CTL_BIT);
5222 		if (retval) {
5223 			rtsx_trace(chip);
5224 			return retval;
5225 		}
5226 	}
5227 
5228 	return STATUS_SUCCESS;
5229 }
5230 
5231 int release_sd_card(struct rtsx_chip *chip)
5232 {
5233 	struct sd_info *sd_card = &(chip->sd_card);
5234 	int retval;
5235 
5236 	chip->card_ready &= ~SD_CARD;
5237 	chip->card_fail &= ~SD_CARD;
5238 	chip->card_wp &= ~SD_CARD;
5239 
5240 	chip->sd_io = 0;
5241 	chip->sd_int = 0;
5242 
5243 #ifdef SUPPORT_SD_LOCK
5244 	sd_card->sd_lock_status = 0;
5245 	sd_card->sd_erase_status = 0;
5246 #endif
5247 
5248 	memset(sd_card->raw_csd, 0, 16);
5249 	memset(sd_card->raw_scr, 0, 8);
5250 
5251 	retval = sd_power_off_card3v3(chip);
5252 	if (retval != STATUS_SUCCESS) {
5253 		rtsx_trace(chip);
5254 		return STATUS_FAIL;
5255 	}
5256 
5257 	return STATUS_SUCCESS;
5258 }
5259