cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sd.c (114778B)


      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 |= (
   4505					SD_UNLOCK_POW_ON | SD_SDR_RST);
   4506				if (CHK_SD(sd_card)) {
   4507					retval = reset_sd(chip);
   4508					if (retval != STATUS_SUCCESS) {
   4509						sd_card->sd_lock_status &= ~(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}