25 #include <linux/sched.h>
33 #define SD_MAX_RETRY_COUNT 3
35 static u16 REG_SD_CFG1;
36 static u16 REG_SD_CFG2;
37 static u16 REG_SD_CFG3;
38 static u16 REG_SD_STAT1;
39 static u16 REG_SD_STAT2;
40 static u16 REG_SD_BUS_STAT;
41 static u16 REG_SD_PAD_CTL;
42 static u16 REG_SD_SAMPLE_POINT_CTL;
43 static u16 REG_SD_PUSH_POINT_CTL;
44 static u16 REG_SD_CMD0;
45 static u16 REG_SD_CMD1;
46 static u16 REG_SD_CMD2;
47 static u16 REG_SD_CMD3;
48 static u16 REG_SD_CMD4;
49 static u16 REG_SD_CMD5;
50 static u16 REG_SD_BYTE_CNT_L;
51 static u16 REG_SD_BYTE_CNT_H;
52 static u16 REG_SD_BLOCK_CNT_L;
53 static u16 REG_SD_BLOCK_CNT_H;
54 static u16 REG_SD_TRANSFER;
55 static u16 REG_SD_VPCLK0_CTL;
56 static u16 REG_SD_VPCLK1_CTL;
57 static u16 REG_SD_DCMPS0_CTL;
58 static u16 REG_SD_DCMPS1_CTL;
109 REG_SD_CFG1 = 0xFD31;
110 REG_SD_CFG2 = 0xFD33;
111 REG_SD_CFG3 = 0xFD3E;
112 REG_SD_STAT1 = 0xFD30;
116 REG_SD_SAMPLE_POINT_CTL = 0;
117 REG_SD_PUSH_POINT_CTL = 0;
118 REG_SD_CMD0 = 0xFD34;
119 REG_SD_CMD1 = 0xFD35;
120 REG_SD_CMD2 = 0xFD36;
121 REG_SD_CMD3 = 0xFD37;
122 REG_SD_CMD4 = 0xFD38;
123 REG_SD_CMD5 = 0xFD5A;
124 REG_SD_BYTE_CNT_L = 0xFD39;
125 REG_SD_BYTE_CNT_H = 0xFD3A;
126 REG_SD_BLOCK_CNT_L = 0xFD3B;
127 REG_SD_BLOCK_CNT_H = 0xFD3C;
128 REG_SD_TRANSFER = 0xFD32;
129 REG_SD_VPCLK0_CTL = 0;
130 REG_SD_VPCLK1_CTL = 0;
131 REG_SD_DCMPS0_CTL = 0;
132 REG_SD_DCMPS1_CTL = 0;
146 sd_set_err_code(chip,
SD_BUSY);
164 sd_clr_err_code(chip);
166 RTSX_DEBUGP(
"SD/MMC CMD %d, arg = 0x%08x\n", cmd_idx, arg);
195 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4; reg_addr++)
215 rtsx_clear_sd_error(chip);
231 rtsx_clear_sd_error(chip);
241 rtsx_clear_sd_error(chip);
251 if ((ptr[0] & 0xC0) != 0) {
279 #ifdef SUPPORT_SD_LOCK
304 memcpy(rsp, ptr, rsp_len);
318 sd_clr_err_code(chip);
330 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++)
359 if (buf && buf_len) {
368 static int sd_write_data(
struct rtsx_chip *chip,
u8 trans_mode,
369 u8 *cmd,
int cmd_len,
u16 byte_cnt,
u16 blk_cnt,
u8 bus_width,
370 u8 *buf,
int buf_len,
int timeout)
376 sd_clr_err_code(chip);
386 if (buf && buf_len) {
396 for (i = 0; i < (cmd_len < 6 ? cmd_len : 6); i++) {
398 REG_SD_CMD0 + i, 0xFF, cmd[i]);
428 static int sd_check_csd(
struct rtsx_chip *chip,
char check_wp)
433 u8 csd_ver, trans_speed;
436 for (i = 0; i < 6; i++) {
458 csd_ver = (rsp[1] & 0xc0) >> 6;
461 trans_speed = rsp[4];
462 if ((trans_speed & 0x07) == 0x02) {
463 if ((trans_speed & 0xf8) >= 0x30) {
469 }
else if ((trans_speed & 0xf8) == 0x28) {
475 }
else if ((trans_speed & 0xf8) == 0x20) {
481 }
else if ((trans_speed & 0xf8) >= 0x10) {
487 }
else if ((trans_speed & 0x08) >= 0x08) {
505 blk_size = rsp[6] & 0x0F;
506 c_size = ((
u16)(rsp[7] & 0x03) << 10)
508 + ((
u16)(rsp[9] & 0xC0) >> 6);
509 c_size_mult = (
u8)((rsp[10] & 0x03) << 1);
510 c_size_mult += (rsp[11] & 0x80) >> 7;
511 sd_card->
capacity = (((
u32)(c_size + 1)) * (1 << (c_size_mult + 2))) << (blk_size - 9);
513 u32 total_sector = 0;
514 total_sector = (((
u32)rsp[8] & 0x3f) << 16) |
515 ((
u32)rsp[9] << 8) | (
u32)rsp[10];
516 sd_card->
capacity = (total_sector + 1) << 10;
530 static int sd_set_sample_push_timing(
struct rtsx_chip *chip)
620 static void sd_choose_proper_clock(
struct rtsx_chip *chip)
684 static int sd_set_init_para(
struct rtsx_chip *chip)
689 retval = sd_set_sample_push_timing(chip);
693 sd_choose_proper_clock(chip);
695 retval = switch_clock(chip, sd_card->
sd_clock);
719 retval = sd_send_cmd_get_rsp(chip, cmd_idx, addr, cmd_type,
NULL, 0);
726 #ifdef SUPPORT_SD_LOCK
727 static int sd_update_lock_status(
struct rtsx_chip *chip)
751 static int sd_wait_state_data_ready(
struct rtsx_chip *chip,
u8 state,
u8 data_ready,
int polling_cnt)
757 for (i = 0; i < polling_cnt; i++) {
763 if (((rsp[3] & 0x1E) == state) && ((rsp[3] & 0x01) == data_ready))
770 static int sd_change_bank_voltage(
struct rtsx_chip *chip,
u8 voltage)
797 static int sd_voltage_switch(
struct rtsx_chip *chip)
817 retval = sd_change_bank_voltage(chip,
SD_IO_1V8);
842 static int sd_reset_dcm(
struct rtsx_chip *chip,
u8 tune_dir)
855 static int sd_change_phase(
struct rtsx_chip *chip,
u8 sample_point,
u8 tune_dir)
858 u16 SD_VP_CTL, SD_DCMPS_CTL;
863 RTSX_DEBUGP(
"sd_change_phase (sample_point = %d, tune_dir = %d)\n",
864 sample_point, tune_dir);
883 #ifdef CONFIG_RTS_PSTOR_DEBUG
931 #ifdef CONFIG_RTS_PSTOR_DEBUG
941 sd_reset_dcm(chip, tune_dir);
945 static int sd_check_spec(
struct rtsx_chip *chip,
u8 bus_width)
963 rtsx_clear_sd_error(chip);
969 if ((buf[0] & 0x0F) == 0)
975 static int sd_query_switch_result(
struct rtsx_chip *chip,
u8 func_group,
u8 func_to_switch,
976 u8 *buf,
int buf_len)
978 u8 support_mask = 0, query_switch = 0, switch_busy = 0;
979 int support_offset = 0, query_switch_offset = 0, check_busy_offset = 0;
986 switch (func_to_switch) {
1019 switch (func_to_switch) {
1046 switch (func_to_switch) {
1073 if (!(buf[support_offset] & support_mask) ||
1074 ((buf[query_switch_offset] & 0x0F) != query_switch)) {
1081 ((buf[check_busy_offset] & switch_busy) == switch_busy)) {
1089 u8 func_group,
u8 func_to_switch,
u8 bus_width)
1095 RTSX_DEBUGP(
"sd_check_switch_mode (mode = %d, func_group = %d, func_to_switch = %d)\n",
1096 mode, func_group, func_to_switch);
1104 cmd[4] = 0xF0 + func_to_switch;
1107 cmd[3] = 0xF0 + func_to_switch;
1111 cmd[3] = 0x0F + (func_to_switch << 4);
1122 rtsx_clear_sd_error(chip);
1134 RTSX_DEBUGP(
"func_group1_mask = 0x%02x\n", buf[0x0D]);
1135 RTSX_DEBUGP(
"func_group2_mask = 0x%02x\n", buf[0x0B]);
1136 RTSX_DEBUGP(
"func_group3_mask = 0x%02x\n", buf[0x09]);
1137 RTSX_DEBUGP(
"func_group4_mask = 0x%02x\n", buf[0x07]);
1142 u16 cc = ((
u16)buf[0] << 8) | buf[1];
1143 RTSX_DEBUGP(
"Maximum current consumption: %dmA\n", cc);
1144 if ((cc == 0) || (cc > 800))
1147 retval = sd_query_switch_result(chip, func_group, func_to_switch, buf, 64);
1160 static u8 downgrade_switch_mode(
u8 func_group,
u8 func_to_switch)
1171 return func_to_switch;
1174 static int sd_check_switch(
struct rtsx_chip *chip,
1175 u8 func_group,
u8 func_to_switch,
u8 bus_width)
1179 int switch_good = 0;
1181 for (i = 0; i < 3; i++) {
1187 retval = sd_check_switch_mode(chip,
SD_CHECK_MODE, func_group,
1188 func_to_switch, bus_width);
1193 func_group, func_to_switch, bus_width);
1201 RTSX_DEBUGP(
"SD CRC16 error when switching mode\n");
1206 func_to_switch = downgrade_switch_mode(func_group, func_to_switch);
1217 static int sd_switch_function(
struct rtsx_chip *chip,
u8 bus_width)
1222 u8 func_to_switch = 0;
1233 for (i = 0; i < 4; i++) {
1271 RTSX_DEBUGP(
"SD_FUNC_GROUP_1: func_to_switch = 0x%02x", func_to_switch);
1273 #ifdef SUPPORT_SD_LOCK
1278 RTSX_DEBUGP(
"Using SDR50 instead of DDR50 for SD Lock\n");
1282 if (func_to_switch) {
1283 retval = sd_check_switch(chip,
SD_FUNC_GROUP_1, func_to_switch, bus_width);
1310 retval = sd_set_sample_push_timing(chip);
1315 if (!func_to_switch || (func_to_switch ==
HS_SUPPORT)) {
1323 func_to_switch = 0xFF;
1325 for (i = 0; i < 4; i++) {
1355 if (func_to_switch != 0xFF)
1359 RTSX_DEBUGP(
"SD_FUNC_GROUP_4: func_to_switch = 0x%02x", func_to_switch);
1362 retval = sd_check_switch(chip,
SD_FUNC_GROUP_4, func_to_switch, bus_width);
1367 RTSX_DEBUGP(
"Switch current limit finished! (%d)\n", retval);
1376 static int sd_wait_data_idle(
struct rtsx_chip *chip)
1382 for (i = 0; i < 100; i++) {
1395 static int sd_sdr_tuning_rx_cmd(
struct rtsx_chip *chip,
u8 sample_point)
1400 retval = sd_change_phase(chip, sample_point,
TUNE_RX);
1413 (
void)sd_wait_data_idle(chip);
1415 rtsx_clear_sd_error(chip);
1422 static int sd_ddr_tuning_rx_cmd(
struct rtsx_chip *chip,
u8 sample_point)
1428 retval = sd_change_phase(chip, sample_point,
TUNE_RX);
1447 (
void)sd_wait_data_idle(chip);
1449 rtsx_clear_sd_error(chip);
1456 static int mmc_ddr_tunning_rx_cmd(
struct rtsx_chip *chip,
u8 sample_point)
1469 retval = sd_change_phase(chip, sample_point,
TUNE_RX);
1482 cmd, 5, 0x200, 1, bus_width,
NULL, 0, 100);
1484 (
void)sd_wait_data_idle(chip);
1486 rtsx_clear_sd_error(chip);
1493 static int sd_sdr_tuning_tx_cmd(
struct rtsx_chip *chip,
u8 sample_point)
1498 retval = sd_change_phase(chip, sample_point,
TUNE_TX);
1518 static int sd_ddr_tuning_tx_cmd(
struct rtsx_chip *chip,
u8 sample_point)
1524 retval = sd_change_phase(chip, sample_point,
TUNE_TX);
1539 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
1552 cmd, 5, 16, 1, bus_width, sd_card->
raw_csd, 16, 100);
1554 rtsx_clear_sd_error(chip);
1566 static u8 sd_search_final_phase(
struct rtsx_chip *chip,
u32 phase_map,
u8 tune_dir)
1570 int i,
j, cont_path_cnt;
1572 u8 final_phase = 0xFF;
1574 if (phase_map == 0xFFFFFFFF) {
1587 if (phase_map & (1 << i)) {
1590 j = cont_path_cnt++;
1598 if (cont_path_cnt) {
1599 int idx = cont_path_cnt - 1;
1606 if (cont_path_cnt == 0) {
1610 int idx = cont_path_cnt - 1;
1616 path[0].start =
path[cont_path_cnt - 1].start - MAX_PHASE - 1;
1617 path[0].len +=
path[cont_path_cnt - 1].len;
1620 path[0].mid += MAX_PHASE + 1;
1628 for (i = 0; i < cont_path_cnt; i++) {
1630 max_len =
path[
i].len;
1645 int temp_mid = (max_len - 16) / 2;
1646 int temp_final_phase =
1647 path[final_path_idx].end - (max_len - (6 + temp_mid));
1649 if (temp_final_phase < 0)
1650 final_phase = (
u8)(temp_final_phase + MAX_PHASE + 1);
1652 final_phase = (
u8)temp_final_phase;
1656 int temp_mid = (max_len - 13) / 2;
1657 int temp_final_phase =
1658 path[final_path_idx].end - (max_len - (3 + temp_mid));
1660 if (temp_final_phase < 0)
1661 final_phase = (
u8)(temp_final_phase + MAX_PHASE + 1);
1663 final_phase = (
u8)temp_final_phase;
1669 RTSX_DEBUGP(
"Final chosen phase: %d\n", final_phase);
1673 static int sd_tuning_rx(
struct rtsx_chip *chip)
1678 u32 raw_phase_map[3], phase_map;
1684 tuning_cmd = sd_ddr_tuning_rx_cmd;
1686 tuning_cmd = sd_sdr_tuning_rx_cmd;
1690 tuning_cmd = mmc_ddr_tunning_rx_cmd;
1695 for (i = 0; i < 3; i++) {
1696 raw_phase_map[
i] = 0;
1697 for (j = MAX_PHASE; j >= 0; j--) {
1703 retval = tuning_cmd(chip, (
u8)j);
1705 raw_phase_map[
i] |= 1 <<
j;
1709 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1710 for (i = 0; i < 3; i++)
1711 RTSX_DEBUGP(
"RX raw_phase_map[%d] = 0x%08x\n", i, raw_phase_map[i]);
1713 RTSX_DEBUGP(
"RX phase_map = 0x%08x\n", phase_map);
1715 final_phase = sd_search_final_phase(chip, phase_map,
TUNE_RX);
1716 if (final_phase == 0xFF)
1719 retval = sd_change_phase(chip, final_phase,
TUNE_RX);
1726 static int sd_ddr_pre_tuning_tx(
struct rtsx_chip *chip)
1737 for (i = MAX_PHASE; i >= 0; i--) {
1745 retval = sd_change_phase(chip, (
u8)i,
TUNE_TX);
1752 phase_map |= 1 <<
i;
1757 RTSX_DEBUGP(
"DDR TX pre tune phase_map = 0x%08x\n", phase_map);
1759 final_phase = sd_search_final_phase(chip, phase_map,
TUNE_TX);
1760 if (final_phase == 0xFF)
1763 retval = sd_change_phase(chip, final_phase,
TUNE_TX);
1767 RTSX_DEBUGP(
"DDR TX pre tune phase: %d\n", (
int)final_phase);
1772 static int sd_tuning_tx(
struct rtsx_chip *chip)
1777 u32 raw_phase_map[3], phase_map;
1783 tuning_cmd = sd_ddr_tuning_tx_cmd;
1785 tuning_cmd = sd_sdr_tuning_tx_cmd;
1789 tuning_cmd = sd_ddr_tuning_tx_cmd;
1794 for (i = 0; i < 3; i++) {
1795 raw_phase_map[
i] = 0;
1796 for (j = MAX_PHASE; j >= 0; j--) {
1804 retval = tuning_cmd(chip, (
u8)j);
1806 raw_phase_map[
i] |= 1 <<
j;
1810 phase_map = raw_phase_map[0] & raw_phase_map[1] & raw_phase_map[2];
1811 for (i = 0; i < 3; i++)
1812 RTSX_DEBUGP(
"TX raw_phase_map[%d] = 0x%08x\n", i, raw_phase_map[i]);
1814 RTSX_DEBUGP(
"TX phase_map = 0x%08x\n", phase_map);
1816 final_phase = sd_search_final_phase(chip, phase_map,
TUNE_TX);
1817 if (final_phase == 0xFF)
1820 retval = sd_change_phase(chip, final_phase,
TUNE_TX);
1827 static int sd_sdr_tuning(
struct rtsx_chip *chip)
1831 retval = sd_tuning_tx(chip);
1835 retval = sd_tuning_rx(chip);
1842 static int sd_ddr_tuning(
struct rtsx_chip *chip)
1847 retval = sd_ddr_pre_tuning_tx(chip);
1856 retval = sd_tuning_rx(chip);
1861 retval = sd_tuning_tx(chip);
1869 static int mmc_ddr_tuning(
struct rtsx_chip *chip)
1874 retval = sd_ddr_pre_tuning_tx(chip);
1883 retval = sd_tuning_rx(chip);
1888 retval = sd_tuning_tx(chip);
1914 retval = switch_clock(chip, sd_card->
sd_clock);
1921 retval = sd_ddr_tuning(chip);
1923 retval = sd_sdr_tuning(chip);
1926 retval = mmc_ddr_tuning(chip);
1936 static int sd_prepare_reset(
struct rtsx_chip *chip)
1951 #ifdef SUPPORT_SD_LOCK
1959 retval = sd_set_init_para(chip);
1981 static int sd_pull_ctl_disable(
struct rtsx_chip *chip)
2049 static int sd_init_power(
struct rtsx_chip *chip)
2099 static int sd_dummy_clock(
struct rtsx_chip *chip)
2114 static int sd_read_lba0(
struct rtsx_chip *chip)
2138 5, 512, 1, bus_width,
NULL, 0, 100);
2140 rtsx_clear_sd_error(chip);
2147 static int sd_check_wp_state(
struct rtsx_chip *chip)
2155 retval = sd_send_cmd_get_rsp(chip,
APP_CMD,
2168 rtsx_clear_sd_error(chip);
2177 sd_card_type = ((
u16)buf[2] << 8) | buf[3];
2178 RTSX_DEBUGP(
"sd_card_type = 0x%04x\n", sd_card_type);
2179 if ((sd_card_type == 0x0001) || (sd_card_type == 0x0002)) {
2195 int retval, i = 0, j = 0,
k = 0, hi_cap_flow = 0;
2196 int sd_dont_switch = 0;
2197 int support_1v8 = 0;
2200 u8 switch_bus_width;
2213 #ifdef SUPPORT_SD_LOCK
2215 goto SD_UNLOCK_ENTRY;
2218 retval = sd_prepare_reset(chip);
2222 retval = sd_dummy_clock(chip);
2237 int func_num = (rsp[1] >> 4) & 0x07;
2239 RTSX_DEBUGP(
"SD_IO card (Function number: %d)!\n", func_num);
2247 sd_init_power(chip);
2249 sd_dummy_clock(chip);
2265 if ((rsp[4] == 0xAA) && ((rsp[3] & 0x0f) == 0x01)) {
2318 }
while (!(rsp[1] & 0x80) && (i < 255));
2330 support_1v8 = (rsp[1] & 0x01) ? 1 : 0;
2340 retval = sd_voltage_switch(chip);
2349 for (i = 0; i < 3; i++) {
2361 retval = sd_check_csd(chip, 1);
2369 #ifdef SUPPORT_SD_LOCK
2371 retval = sd_update_lock_status(chip);
2413 if (!(sd_card->
raw_csd[4] & 0x40))
2416 if (!sd_dont_switch) {
2426 retval = sd_check_spec(chip, switch_bus_width);
2428 retval = sd_switch_function(chip, switch_bus_width);
2431 sd_change_bank_voltage(chip,
SD_IO_3V3);
2433 sd_init_power(chip);
2442 sd_change_bank_voltage(chip,
SD_IO_3V3);
2444 sd_init_power(chip);
2463 #ifdef SUPPORT_SD_LOCK
2472 retval = sd_set_init_para(chip);
2477 retval = sd_ddr_tuning(chip);
2479 retval = sd_sdr_tuning(chip);
2485 retval = sd_init_power(chip);
2498 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
2504 retval = sd_read_lba0(chip);
2509 retval = sd_init_power(chip);
2521 retval = sd_check_wp_state(chip);
2527 #ifdef SUPPORT_SD_LOCK
2570 NULL, 0, byte_cnt, 1, bus_width, buf, len, 100);
2573 u8 val1 = 0, val2 = 0;
2576 rtsx_clear_sd_error(chip);
2577 if ((val1 & 0xE0) || val2)
2580 rtsx_clear_sd_error(chip);
2619 rtsx_clear_sd_error(chip);
2626 RTSX_DEBUGP(
"BUSTEST_R [8bits]: 0x%02x 0x%02x\n", ptr[0], ptr[1]);
2627 if ((ptr[0] == 0xAA) && (ptr[1] == 0x55)) {
2641 RTSX_DEBUGP(
"BUSTEST_R [4bits]: 0x%02x\n", ptr[0]);
2642 if (ptr[0] == 0xA5) {
2661 static int mmc_switch_timing_bus(
struct rtsx_chip *chip,
int switch_ddr)
2700 rtsx_clear_sd_error(chip);
2715 ((
u32)ptr[3] << 8) | ((
u32)ptr[2]);
2719 #ifdef SUPPORT_SD_LOCK
2722 card_type_mask = 0x07;
2724 card_type_mask = 0x03;
2728 card_type_mask = 0x07;
2730 card_type_mask = 0x03;
2733 card_type_mask = 0x03;
2735 card_type = ptr[1] & card_type_mask;
2739 if (card_type & 0x04) {
2744 }
else if (card_type & 0x02) {
2750 retval = sd_send_cmd_get_rsp(chip,
SWITCH,
2756 sd_choose_proper_clock(chip);
2757 retval = switch_clock(chip, sd_card->
sd_clock);
2766 #ifdef SUPPORT_SD_LOCK
2774 #ifdef SUPPORT_SD_LOCK
2791 static int reset_mmc(
struct rtsx_chip *chip)
2794 int retval, i = 0, j = 0,
k = 0;
2800 #ifdef SUPPORT_SD_LOCK
2802 goto MMC_UNLOCK_ENTRY;
2806 retval = sd_prepare_reset(chip);
2826 if (sd_check_err_code(chip,
SD_BUSY) || sd_check_err_code(chip,
SD_TO_ERR)) {
2829 sd_clr_err_code(chip);
2837 sd_clr_err_code(chip);
2847 }
while (!(rsp[1] & 0x80) && (i < 255));
2852 if ((rsp[1] & 0x60) == 0x40)
2861 sd_card->
sd_addr = 0x00100000;
2866 retval = sd_check_csd(chip, 1);
2870 spec_ver = (sd_card->
raw_csd[0] & 0x3C) >> 2;
2880 #ifdef SUPPORT_SD_LOCK
2882 retval = sd_update_lock_status(chip);
2894 if (spec_ver == 4) {
2896 retval = mmc_switch_timing_bus(chip, switch_ddr);
2898 retval = sd_init_power(chip);
2910 retval = sd_set_init_para(chip);
2914 retval = mmc_ddr_tuning(chip);
2916 retval = sd_init_power(chip);
2924 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
2926 retval = sd_read_lba0(chip);
2928 retval = sd_init_power(chip);
2939 #ifdef SUPPORT_SD_LOCK
2958 sd_init_reg_addr(chip);
2986 retval = sd_init_power(chip);
2991 retval = reset_mmc(chip);
2999 sd_change_bank_voltage(chip,
SD_IO_3V3);
3011 retval = sd_change_bank_voltage(chip,
SD_IO_3V3);
3019 retval = reset_mmc(chip);
3035 retval = sd_set_init_para(chip);
3044 static int reset_mmc_only(
struct rtsx_chip *chip)
3055 #ifdef SUPPORT_SD_LOCK
3066 retval = sd_init_power(chip);
3070 retval = reset_mmc(chip);
3083 retval = sd_set_init_para(chip);
3092 #define WAIT_DATA_READY_RTY_CNT 255
3094 static int wait_data_buf_ready(
struct rtsx_chip *chip)
3138 retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
3148 static inline int sd_auto_tune_clock(
struct rtsx_chip *chip)
3202 RTSX_DEBUGP(
"sd_rw: Read %d %s from 0x%x\n", sector_cnt,
3203 (sector_cnt > 1) ?
"sectors" :
"sector", start_sector);
3205 RTSX_DEBUGP(
"sd_rw: Write %d %s to 0x%x\n", sector_cnt,
3206 (sector_cnt > 1) ?
"sectors" :
"sector", start_sector);
3228 data_addr = start_sector << 9;
3232 sd_clr_err_code(chip);
3343 rtsx_clear_sd_error(chip);
3350 retval = wait_data_buf_ready(chip);
3401 rtsx_clear_sd_error(chip);
3448 reset_mmc_only(chip);
3452 sd_auto_tune_clock(chip);
3473 u32 arg,
u8 rsp_type,
u8 *rsp,
int rsp_len,
int special_check)
3505 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16; reg_addr++)
3510 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4; reg_addr++)
3522 rtsx_clear_sd_error(chip);
3540 if ((ptr[0] & 0xC0) != 0) {
3545 if (!(rsp_type & SD_NO_CHECK_CRC7)) {
3546 if (ptr[stat_idx] & SD_CRC7_ERR) {
3568 #ifdef SUPPORT_SD_LOCK
3581 if ((ptr[3] & 0x1E) != 0x04)
3585 if ((ptr[3] & 0x1E) != 0x03)
3592 memcpy(rsp, ptr, rsp_len);
3608 for (reg_addr = PPBUF_BASE2; reg_addr < PPBUF_BASE2 + 16; reg_addr++)
3613 for (reg_addr = REG_SD_CMD0; reg_addr <= REG_SD_CMD4; reg_addr++)
3625 int min_len = (rsp_len < len) ? rsp_len : len;
3630 RTSX_DEBUGP(
"Response in cmd buf: 0x%x 0x%x 0x%x 0x%x\n",
3631 rsp[0], rsp[1], rsp[2], rsp[3]);
3671 if ((0x53 != srb->
cmnd[2]) || (0x44 != srb->
cmnd[3]) || (0x20 != srb->
cmnd[4]) ||
3672 (0x43 != srb->
cmnd[5]) || (0x61 != srb->
cmnd[6]) ||
3673 (0x72 != srb->
cmnd[7]) || (0x64 != srb->
cmnd[8])) {
3678 switch (srb->
cmnd[1] & 0x0F) {
3692 buf[5] = (1 ==
CHK_SD(sd_card)) ? 0x01 : 0x02;
3701 len =
min(18, (
int)scsi_bufflen(srb));
3707 static inline int get_rsp_type(
struct scsi_cmnd *
srb,
u8 *rsp_type,
int *rsp_len)
3709 if (!rsp_type || !rsp_len)
3712 switch (srb->
cmnd[10]) {
3769 cmd_idx = srb->
cmnd[2] & 0x3F;
3770 if (srb->
cmnd[1] & 0x02)
3773 if (srb->
cmnd[1] & 0x01)
3779 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
3790 #ifdef SUPPORT_SD_LOCK
3823 sd_card->
rsp, rsp_len, 0);
3833 #ifdef SUPPORT_SD_LOCK
3834 retval = sd_update_lock_status(chip);
3839 scsi_set_resid(srb, 0);
3842 SD_Execute_Cmd_Failed:
3858 int cmd13_checkbit = 0, read_err = 0;
3860 u8 send_cmd12 = 0,
standby = 0, acmd = 0;
3878 cmd_idx = srb->
cmnd[2] & 0x3F;
3879 if (srb->
cmnd[1] & 0x04)
3882 if (srb->
cmnd[1] & 0x02)
3885 if (srb->
cmnd[1] & 0x01)
3890 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
3901 #ifdef SUPPORT_SD_LOCK
3917 if (data_len < 512) {
3921 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3927 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3934 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3937 if (data_len <= 512) {
3943 byte_cnt = ((
u16)(srb->
cmnd[8] & 0x03) << 8) | srb->
cmnd[9];
3946 cmd[0] = 0x40 | cmd_idx;
3947 cmd[1] = srb->
cmnd[3];
3948 cmd[2] = srb->
cmnd[4];
3949 cmd[3] = srb->
cmnd[5];
3950 cmd[4] = srb->
cmnd[6];
3957 blk_cnt, bus_width, buf, data_len, 2000);
3961 rtsx_clear_sd_error(chip);
3962 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
3965 min_len =
min(data_len, scsi_bufflen(srb));
3969 }
else if (!(data_len & 0x1FF)) {
3977 0xFF, (srb->
cmnd[7] & 0xFE) >> 1);
3979 0xFF, (
u8)((data_len & 0x0001FE00) >> 9));
4000 rtsx_clear_sd_error(chip);
4001 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4005 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4010 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4015 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4022 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4025 if (data_len < 512) {
4029 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4033 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4037 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4040 if ((srb->
cmnd[1] & 0x02) || (srb->
cmnd[1] & 0x04))
4043 for (i = 0; i < 3; i++) {
4050 TRACE_GOTO(chip, SD_Execute_Read_Cmd_Failed);
4052 scsi_set_resid(srb, 0);
4055 SD_Execute_Read_Cmd_Failed:
4074 int cmd13_checkbit = 0, write_err = 0;
4076 u8 send_cmd12 = 0,
standby = 0, acmd = 0;
4078 #ifdef SUPPORT_SD_LOCK
4079 int lock_cmd_fail = 0;
4080 u8 sd_lock_state = 0;
4081 u8 lock_cmd_type = 0;
4099 cmd_idx = srb->
cmnd[2] & 0x3F;
4100 if (srb->
cmnd[1] & 0x04)
4103 if (srb->
cmnd[1] & 0x02)
4106 if (srb->
cmnd[1] & 0x01)
4113 #ifdef SUPPORT_SD_LOCK
4120 retval = get_rsp_type(srb, &rsp_type, &rsp_len);
4131 #ifdef SUPPORT_SD_LOCK
4150 if (data_len < 512) {
4154 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4160 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4167 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4171 sd_card->
rsp, rsp_len, 0);
4173 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4175 if (data_len <= 512) {
4185 #ifdef SUPPORT_SD_LOCK
4187 lock_cmd_type = buf[0] & 0x0F;
4190 if (data_len > 256) {
4192 for (i = 0; i < 256; i++) {
4194 PPBUF_BASE2 + i, 0xFF, buf[i]);
4199 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4205 PPBUF_BASE2 + i, 0xFF, buf[i]);
4210 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4216 PPBUF_BASE2 + i, 0xFF, buf[i]);
4221 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4240 }
else if (!(data_len & 0x1FF)) {
4248 0xFF, (srb->
cmnd[7] & 0xFE) >> 1);
4250 0xFF, (
u8)((data_len & 0x0001FE00) >> 9));
4261 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4266 rtsx_clear_sd_error(chip);
4267 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4270 #ifdef SUPPORT_SD_LOCK
4274 scsi_set_resid(srb, 0);
4286 retval = sd_update_lock_status(chip);
4297 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4304 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4307 if (data_len < 512) {
4311 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4315 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4319 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4322 if ((srb->
cmnd[1] & 0x02) || (srb->
cmnd[1] & 0x04))
4325 for (i = 0; i < 3; i++) {
4332 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4334 #ifdef SUPPORT_SD_LOCK
4336 if (!lock_cmd_fail) {
4337 RTSX_DEBUGP(
"lock_cmd_type = 0x%x\n", lock_cmd_type);
4345 RTSX_DEBUGP(
"sd_lock_state = 0x%x, sd_card->sd_lock_status = 0x%x\n",
4349 if (sd_lock_state) {
4356 TRACE_GOTO(chip, SD_Execute_Write_Cmd_Failed);
4366 if (lock_cmd_fail) {
4367 scsi_set_resid(srb, 0);
4373 scsi_set_resid(srb, 0);
4376 SD_Execute_Write_Cmd_Failed:
4408 data_len = ((
u16)srb->
cmnd[7] << 8) | srb->
cmnd[8];
4414 count = (data_len < 17) ? data_len : 17;
4416 count = (data_len < 6) ? data_len : 6;
4422 sd_card->
rsp[0], sd_card->
rsp[1], sd_card->
rsp[2], sd_card->
rsp[3]);
4424 scsi_set_resid(srb, 0);
4445 if ((0x53 != srb->
cmnd[2]) || (0x44 != srb->
cmnd[3]) || (0x20 != srb->
cmnd[4]) ||
4446 (0x43 != srb->
cmnd[5]) || (0x61 != srb->
cmnd[6]) ||
4447 (0x72 != srb->
cmnd[7]) || (0x64 != srb->
cmnd[8])) {
4452 switch (srb->
cmnd[1] & 0x0F) {
4454 #ifdef SUPPORT_SD_LOCK
4455 if (0x64 == srb->
cmnd[9])
4460 #ifdef SUPPORT_SD_LOCK
4467 #ifdef SUPPORT_SD_LOCK
4486 scsi_set_resid(srb, 0);
4521 retval = sd_pull_ctl_disable(chip);
4546 #ifdef SUPPORT_SD_LOCK
4559 retval = sd_change_bank_voltage(chip,
SD_IO_3V3);