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