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
21static u16 REG_SD_CFG1;
22static u16 REG_SD_CFG2;
23static u16 REG_SD_CFG3;
24static u16 REG_SD_STAT1;
25static u16 REG_SD_STAT2;
26static u16 REG_SD_BUS_STAT;
27static u16 REG_SD_PAD_CTL;
28static u16 REG_SD_SAMPLE_POINT_CTL;
29static u16 REG_SD_PUSH_POINT_CTL;
30static u16 REG_SD_CMD0;
31static u16 REG_SD_CMD1;
32static u16 REG_SD_CMD2;
33static u16 REG_SD_CMD3;
34static u16 REG_SD_CMD4;
35static u16 REG_SD_CMD5;
36static u16 REG_SD_BYTE_CNT_L;
37static u16 REG_SD_BYTE_CNT_H;
38static u16 REG_SD_BLOCK_CNT_L;
39static u16 REG_SD_BLOCK_CNT_H;
40static u16 REG_SD_TRANSFER;
41static u16 REG_SD_VPCLK0_CTL;
42static u16 REG_SD_VPCLK1_CTL;
43static u16 REG_SD_DCMPS0_CTL;
44static u16 REG_SD_DCMPS1_CTL;
45
46static 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
53static 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
60static 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
67static 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
95static 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
112static 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
130RTY_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
260static 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
327static 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
393static 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
497static 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
535static 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
577static 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
597static 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
615int 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
640static 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
666static 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
688static 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
726static 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
790static 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
815static 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
930fail:
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
943static 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
975static 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
1088static 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
1176static 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
1190static 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
1238static 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
1405static 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
1426static 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
1453static 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
1488static 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
1525static 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
1557static 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
1612static 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
1726search_finish:
1727	dev_dbg(rtsx_dev(chip), "Final chosen phase: %d\n", final_phase);
1728	return final_phase;
1729}
1730
1731static 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
1785static 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
1841static 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
1897static 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
1912static 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
1940static 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
1968int 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
2000static 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
2043static 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
2101int 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
2140static 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
2190static 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
2205static 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
2238static 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
2285static 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
2300switch_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 */
2353RTY_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
2460SD_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
2629status_fail:
2630	return STATUS_FAIL;
2631}
2632
2633static 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
2753static 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
2871static 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
2885switch_fail:
2886	retval = sd_prepare_reset(chip);
2887	if (retval != STATUS_SUCCESS)
2888		return retval;
2889
2890	SET_MMC(sd_card);
2891
2892RTY_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
2967MMC_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
3045int 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
3130static 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
3185static 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
3215void 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
3240static 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
3286int 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
3544RW_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
3575int 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
3591RTY_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
3699int 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
3741int 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
3812static 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
3851int 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
3952sd_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
3963int 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
4183sd_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
4197int 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
4529sd_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
4543int 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
4582int 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
4646void 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
4657int 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
4692int 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