0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/module.h>
0011 #include <linux/slab.h>
0012 #include <linux/highmem.h>
0013 #include <linux/delay.h>
0014 #include <linux/platform_device.h>
0015 #include <linux/workqueue.h>
0016 #include <linux/mmc/host.h>
0017 #include <linux/mmc/mmc.h>
0018 #include <linux/mmc/sd.h>
0019 #include <linux/mmc/sdio.h>
0020 #include <linux/mmc/card.h>
0021 #include <linux/rtsx_pci.h>
0022 #include <asm/unaligned.h>
0023 #include <linux/pm_runtime.h>
0024
0025 struct realtek_pci_sdmmc {
0026 struct platform_device *pdev;
0027 struct rtsx_pcr *pcr;
0028 struct mmc_host *mmc;
0029 struct mmc_request *mrq;
0030 #define SDMMC_WORKQ_NAME "rtsx_pci_sdmmc_workq"
0031
0032 struct work_struct work;
0033 struct mutex host_mutex;
0034
0035 u8 ssc_depth;
0036 unsigned int clock;
0037 bool vpclk;
0038 bool double_clk;
0039 bool eject;
0040 bool initial_mode;
0041 int prev_power_state;
0042 int sg_count;
0043 s32 cookie;
0044 int cookie_sg_count;
0045 bool using_cookie;
0046 };
0047
0048 static int sdmmc_init_sd_express(struct mmc_host *mmc, struct mmc_ios *ios);
0049
0050 static inline struct device *sdmmc_dev(struct realtek_pci_sdmmc *host)
0051 {
0052 return &(host->pdev->dev);
0053 }
0054
0055 static inline void sd_clear_error(struct realtek_pci_sdmmc *host)
0056 {
0057 rtsx_pci_write_register(host->pcr, CARD_STOP,
0058 SD_STOP | SD_CLR_ERR, SD_STOP | SD_CLR_ERR);
0059 }
0060
0061 #ifdef DEBUG
0062 static void dump_reg_range(struct realtek_pci_sdmmc *host, u16 start, u16 end)
0063 {
0064 u16 len = end - start + 1;
0065 int i;
0066 u8 data[8];
0067
0068 for (i = 0; i < len; i += 8) {
0069 int j;
0070 int n = min(8, len - i);
0071
0072 memset(&data, 0, sizeof(data));
0073 for (j = 0; j < n; j++)
0074 rtsx_pci_read_register(host->pcr, start + i + j,
0075 data + j);
0076 dev_dbg(sdmmc_dev(host), "0x%04X(%d): %8ph\n",
0077 start + i, n, data);
0078 }
0079 }
0080
0081 static void sd_print_debug_regs(struct realtek_pci_sdmmc *host)
0082 {
0083 dump_reg_range(host, 0xFDA0, 0xFDB3);
0084 dump_reg_range(host, 0xFD52, 0xFD69);
0085 }
0086 #else
0087 #define sd_print_debug_regs(host)
0088 #endif
0089
0090 static inline int sd_get_cd_int(struct realtek_pci_sdmmc *host)
0091 {
0092 return rtsx_pci_readl(host->pcr, RTSX_BIPR) & SD_EXIST;
0093 }
0094
0095 static void sd_cmd_set_sd_cmd(struct rtsx_pcr *pcr, struct mmc_command *cmd)
0096 {
0097 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_CMD0, 0xFF,
0098 SD_CMD_START | cmd->opcode);
0099 rtsx_pci_write_be32(pcr, SD_CMD1, cmd->arg);
0100 }
0101
0102 static void sd_cmd_set_data_len(struct rtsx_pcr *pcr, u16 blocks, u16 blksz)
0103 {
0104 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_BLOCK_CNT_L, 0xFF, blocks);
0105 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_BLOCK_CNT_H, 0xFF, blocks >> 8);
0106 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_BYTE_CNT_L, 0xFF, blksz);
0107 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_BYTE_CNT_H, 0xFF, blksz >> 8);
0108 }
0109
0110 static int sd_response_type(struct mmc_command *cmd)
0111 {
0112 switch (mmc_resp_type(cmd)) {
0113 case MMC_RSP_NONE:
0114 return SD_RSP_TYPE_R0;
0115 case MMC_RSP_R1:
0116 return SD_RSP_TYPE_R1;
0117 case MMC_RSP_R1_NO_CRC:
0118 return SD_RSP_TYPE_R1 | SD_NO_CHECK_CRC7;
0119 case MMC_RSP_R1B:
0120 return SD_RSP_TYPE_R1b;
0121 case MMC_RSP_R2:
0122 return SD_RSP_TYPE_R2;
0123 case MMC_RSP_R3:
0124 return SD_RSP_TYPE_R3;
0125 default:
0126 return -EINVAL;
0127 }
0128 }
0129
0130 static int sd_status_index(int resp_type)
0131 {
0132 if (resp_type == SD_RSP_TYPE_R0)
0133 return 0;
0134 else if (resp_type == SD_RSP_TYPE_R2)
0135 return 16;
0136
0137 return 5;
0138 }
0139
0140
0141
0142
0143
0144
0145
0146
0147 static int sd_pre_dma_transfer(struct realtek_pci_sdmmc *host,
0148 struct mmc_data *data, bool pre)
0149 {
0150 struct rtsx_pcr *pcr = host->pcr;
0151 int read = data->flags & MMC_DATA_READ;
0152 int count = 0;
0153 int using_cookie = 0;
0154
0155 if (!pre && data->host_cookie && data->host_cookie != host->cookie) {
0156 dev_err(sdmmc_dev(host),
0157 "error: data->host_cookie = %d, host->cookie = %d\n",
0158 data->host_cookie, host->cookie);
0159 data->host_cookie = 0;
0160 }
0161
0162 if (pre || data->host_cookie != host->cookie) {
0163 count = rtsx_pci_dma_map_sg(pcr, data->sg, data->sg_len, read);
0164 } else {
0165 count = host->cookie_sg_count;
0166 using_cookie = 1;
0167 }
0168
0169 if (pre) {
0170 host->cookie_sg_count = count;
0171 if (++host->cookie < 0)
0172 host->cookie = 1;
0173 data->host_cookie = host->cookie;
0174 } else {
0175 host->sg_count = count;
0176 }
0177
0178 return using_cookie;
0179 }
0180
0181 static void sdmmc_pre_req(struct mmc_host *mmc, struct mmc_request *mrq)
0182 {
0183 struct realtek_pci_sdmmc *host = mmc_priv(mmc);
0184 struct mmc_data *data = mrq->data;
0185
0186 if (data->host_cookie) {
0187 dev_err(sdmmc_dev(host),
0188 "error: reset data->host_cookie = %d\n",
0189 data->host_cookie);
0190 data->host_cookie = 0;
0191 }
0192
0193 sd_pre_dma_transfer(host, data, true);
0194 dev_dbg(sdmmc_dev(host), "pre dma sg: %d\n", host->cookie_sg_count);
0195 }
0196
0197 static void sdmmc_post_req(struct mmc_host *mmc, struct mmc_request *mrq,
0198 int err)
0199 {
0200 struct realtek_pci_sdmmc *host = mmc_priv(mmc);
0201 struct rtsx_pcr *pcr = host->pcr;
0202 struct mmc_data *data = mrq->data;
0203 int read = data->flags & MMC_DATA_READ;
0204
0205 rtsx_pci_dma_unmap_sg(pcr, data->sg, data->sg_len, read);
0206 data->host_cookie = 0;
0207 }
0208
0209 static void sd_send_cmd_get_rsp(struct realtek_pci_sdmmc *host,
0210 struct mmc_command *cmd)
0211 {
0212 struct rtsx_pcr *pcr = host->pcr;
0213 u8 cmd_idx = (u8)cmd->opcode;
0214 u32 arg = cmd->arg;
0215 int err = 0;
0216 int timeout = 100;
0217 int i;
0218 u8 *ptr;
0219 int rsp_type;
0220 int stat_idx;
0221 bool clock_toggled = false;
0222
0223 dev_dbg(sdmmc_dev(host), "%s: SD/MMC CMD %d, arg = 0x%08x\n",
0224 __func__, cmd_idx, arg);
0225
0226 rsp_type = sd_response_type(cmd);
0227 if (rsp_type < 0)
0228 goto out;
0229
0230 stat_idx = sd_status_index(rsp_type);
0231
0232 if (rsp_type == SD_RSP_TYPE_R1b)
0233 timeout = cmd->busy_timeout ? cmd->busy_timeout : 3000;
0234
0235 if (cmd->opcode == SD_SWITCH_VOLTAGE) {
0236 err = rtsx_pci_write_register(pcr, SD_BUS_STAT,
0237 0xFF, SD_CLK_TOGGLE_EN);
0238 if (err < 0)
0239 goto out;
0240
0241 clock_toggled = true;
0242 }
0243
0244 rtsx_pci_init_cmd(pcr);
0245 sd_cmd_set_sd_cmd(pcr, cmd);
0246 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_CFG2, 0xFF, rsp_type);
0247 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_DATA_SOURCE,
0248 0x01, PINGPONG_BUFFER);
0249 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_TRANSFER,
0250 0xFF, SD_TM_CMD_RSP | SD_TRANSFER_START);
0251 rtsx_pci_add_cmd(pcr, CHECK_REG_CMD, SD_TRANSFER,
0252 SD_TRANSFER_END | SD_STAT_IDLE,
0253 SD_TRANSFER_END | SD_STAT_IDLE);
0254
0255 if (rsp_type == SD_RSP_TYPE_R2) {
0256
0257 for (i = PPBUF_BASE2; i < PPBUF_BASE2 + 16; i++)
0258 rtsx_pci_add_cmd(pcr, READ_REG_CMD, (u16)i, 0, 0);
0259 } else if (rsp_type != SD_RSP_TYPE_R0) {
0260
0261 for (i = SD_CMD0; i <= SD_CMD4; i++)
0262 rtsx_pci_add_cmd(pcr, READ_REG_CMD, (u16)i, 0, 0);
0263 }
0264
0265 rtsx_pci_add_cmd(pcr, READ_REG_CMD, SD_STAT1, 0, 0);
0266
0267 err = rtsx_pci_send_cmd(pcr, timeout);
0268 if (err < 0) {
0269 sd_print_debug_regs(host);
0270 sd_clear_error(host);
0271 dev_dbg(sdmmc_dev(host),
0272 "rtsx_pci_send_cmd error (err = %d)\n", err);
0273 goto out;
0274 }
0275
0276 if (rsp_type == SD_RSP_TYPE_R0) {
0277 err = 0;
0278 goto out;
0279 }
0280
0281
0282 ptr = rtsx_pci_get_cmd_data(pcr) + 1;
0283
0284
0285 if ((ptr[0] & 0xC0) != 0) {
0286 err = -EILSEQ;
0287 dev_dbg(sdmmc_dev(host), "Invalid response bit\n");
0288 goto out;
0289 }
0290
0291
0292 if (!(rsp_type & SD_NO_CHECK_CRC7)) {
0293 if (ptr[stat_idx] & SD_CRC7_ERR) {
0294 err = -EILSEQ;
0295 dev_dbg(sdmmc_dev(host), "CRC7 error\n");
0296 goto out;
0297 }
0298 }
0299
0300 if (rsp_type == SD_RSP_TYPE_R2) {
0301
0302
0303
0304
0305
0306 ptr[16] = 1;
0307
0308 for (i = 0; i < 4; i++) {
0309 cmd->resp[i] = get_unaligned_be32(ptr + 1 + i * 4);
0310 dev_dbg(sdmmc_dev(host), "cmd->resp[%d] = 0x%08x\n",
0311 i, cmd->resp[i]);
0312 }
0313 } else {
0314 cmd->resp[0] = get_unaligned_be32(ptr + 1);
0315 dev_dbg(sdmmc_dev(host), "cmd->resp[0] = 0x%08x\n",
0316 cmd->resp[0]);
0317 }
0318
0319 out:
0320 cmd->error = err;
0321
0322 if (err && clock_toggled)
0323 rtsx_pci_write_register(pcr, SD_BUS_STAT,
0324 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
0325 }
0326
0327 static int sd_read_data(struct realtek_pci_sdmmc *host, struct mmc_command *cmd,
0328 u16 byte_cnt, u8 *buf, int buf_len, int timeout)
0329 {
0330 struct rtsx_pcr *pcr = host->pcr;
0331 int err;
0332 u8 trans_mode;
0333
0334 dev_dbg(sdmmc_dev(host), "%s: SD/MMC CMD %d, arg = 0x%08x\n",
0335 __func__, cmd->opcode, cmd->arg);
0336
0337 if (!buf)
0338 buf_len = 0;
0339
0340 if (cmd->opcode == MMC_SEND_TUNING_BLOCK)
0341 trans_mode = SD_TM_AUTO_TUNING;
0342 else
0343 trans_mode = SD_TM_NORMAL_READ;
0344
0345 rtsx_pci_init_cmd(pcr);
0346 sd_cmd_set_sd_cmd(pcr, cmd);
0347 sd_cmd_set_data_len(pcr, 1, byte_cnt);
0348 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_CFG2, 0xFF,
0349 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
0350 SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 | SD_RSP_LEN_6);
0351 if (trans_mode != SD_TM_AUTO_TUNING)
0352 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD,
0353 CARD_DATA_SOURCE, 0x01, PINGPONG_BUFFER);
0354
0355 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_TRANSFER,
0356 0xFF, trans_mode | SD_TRANSFER_START);
0357 rtsx_pci_add_cmd(pcr, CHECK_REG_CMD, SD_TRANSFER,
0358 SD_TRANSFER_END, SD_TRANSFER_END);
0359
0360 err = rtsx_pci_send_cmd(pcr, timeout);
0361 if (err < 0) {
0362 sd_print_debug_regs(host);
0363 dev_dbg(sdmmc_dev(host),
0364 "rtsx_pci_send_cmd fail (err = %d)\n", err);
0365 return err;
0366 }
0367
0368 if (buf && buf_len) {
0369 err = rtsx_pci_read_ppbuf(pcr, buf, buf_len);
0370 if (err < 0) {
0371 dev_dbg(sdmmc_dev(host),
0372 "rtsx_pci_read_ppbuf fail (err = %d)\n", err);
0373 return err;
0374 }
0375 }
0376
0377 return 0;
0378 }
0379
0380 static int sd_write_data(struct realtek_pci_sdmmc *host,
0381 struct mmc_command *cmd, u16 byte_cnt, u8 *buf, int buf_len,
0382 int timeout)
0383 {
0384 struct rtsx_pcr *pcr = host->pcr;
0385 int err;
0386
0387 dev_dbg(sdmmc_dev(host), "%s: SD/MMC CMD %d, arg = 0x%08x\n",
0388 __func__, cmd->opcode, cmd->arg);
0389
0390 if (!buf)
0391 buf_len = 0;
0392
0393 sd_send_cmd_get_rsp(host, cmd);
0394 if (cmd->error)
0395 return cmd->error;
0396
0397 if (buf && buf_len) {
0398 err = rtsx_pci_write_ppbuf(pcr, buf, buf_len);
0399 if (err < 0) {
0400 dev_dbg(sdmmc_dev(host),
0401 "rtsx_pci_write_ppbuf fail (err = %d)\n", err);
0402 return err;
0403 }
0404 }
0405
0406 rtsx_pci_init_cmd(pcr);
0407 sd_cmd_set_data_len(pcr, 1, byte_cnt);
0408 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_CFG2, 0xFF,
0409 SD_CALCULATE_CRC7 | SD_CHECK_CRC16 |
0410 SD_NO_WAIT_BUSY_END | SD_CHECK_CRC7 | SD_RSP_LEN_0);
0411 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
0412 SD_TRANSFER_START | SD_TM_AUTO_WRITE_3);
0413 rtsx_pci_add_cmd(pcr, CHECK_REG_CMD, SD_TRANSFER,
0414 SD_TRANSFER_END, SD_TRANSFER_END);
0415
0416 err = rtsx_pci_send_cmd(pcr, timeout);
0417 if (err < 0) {
0418 sd_print_debug_regs(host);
0419 dev_dbg(sdmmc_dev(host),
0420 "rtsx_pci_send_cmd fail (err = %d)\n", err);
0421 return err;
0422 }
0423
0424 return 0;
0425 }
0426
0427 static int sd_read_long_data(struct realtek_pci_sdmmc *host,
0428 struct mmc_request *mrq)
0429 {
0430 struct rtsx_pcr *pcr = host->pcr;
0431 struct mmc_host *mmc = host->mmc;
0432 struct mmc_card *card = mmc->card;
0433 struct mmc_command *cmd = mrq->cmd;
0434 struct mmc_data *data = mrq->data;
0435 int uhs = mmc_card_uhs(card);
0436 u8 cfg2 = 0;
0437 int err;
0438 int resp_type;
0439 size_t data_len = data->blksz * data->blocks;
0440
0441 dev_dbg(sdmmc_dev(host), "%s: SD/MMC CMD %d, arg = 0x%08x\n",
0442 __func__, cmd->opcode, cmd->arg);
0443
0444 resp_type = sd_response_type(cmd);
0445 if (resp_type < 0)
0446 return resp_type;
0447
0448 if (!uhs)
0449 cfg2 |= SD_NO_CHECK_WAIT_CRC_TO;
0450
0451 rtsx_pci_init_cmd(pcr);
0452 sd_cmd_set_sd_cmd(pcr, cmd);
0453 sd_cmd_set_data_len(pcr, data->blocks, data->blksz);
0454 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, IRQSTAT0,
0455 DMA_DONE_INT, DMA_DONE_INT);
0456 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, DMATC3,
0457 0xFF, (u8)(data_len >> 24));
0458 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, DMATC2,
0459 0xFF, (u8)(data_len >> 16));
0460 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, DMATC1,
0461 0xFF, (u8)(data_len >> 8));
0462 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, DMATC0, 0xFF, (u8)data_len);
0463 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, DMACTL,
0464 0x03 | DMA_PACK_SIZE_MASK,
0465 DMA_DIR_FROM_CARD | DMA_EN | DMA_512);
0466 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_DATA_SOURCE,
0467 0x01, RING_BUFFER);
0468 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_CFG2, 0xFF, cfg2 | resp_type);
0469 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
0470 SD_TRANSFER_START | SD_TM_AUTO_READ_2);
0471 rtsx_pci_add_cmd(pcr, CHECK_REG_CMD, SD_TRANSFER,
0472 SD_TRANSFER_END, SD_TRANSFER_END);
0473 rtsx_pci_send_cmd_no_wait(pcr);
0474
0475 err = rtsx_pci_dma_transfer(pcr, data->sg, host->sg_count, 1, 10000);
0476 if (err < 0) {
0477 sd_print_debug_regs(host);
0478 sd_clear_error(host);
0479 return err;
0480 }
0481
0482 return 0;
0483 }
0484
0485 static int sd_write_long_data(struct realtek_pci_sdmmc *host,
0486 struct mmc_request *mrq)
0487 {
0488 struct rtsx_pcr *pcr = host->pcr;
0489 struct mmc_host *mmc = host->mmc;
0490 struct mmc_card *card = mmc->card;
0491 struct mmc_command *cmd = mrq->cmd;
0492 struct mmc_data *data = mrq->data;
0493 int uhs = mmc_card_uhs(card);
0494 u8 cfg2;
0495 int err;
0496 size_t data_len = data->blksz * data->blocks;
0497
0498 sd_send_cmd_get_rsp(host, cmd);
0499 if (cmd->error)
0500 return cmd->error;
0501
0502 dev_dbg(sdmmc_dev(host), "%s: SD/MMC CMD %d, arg = 0x%08x\n",
0503 __func__, cmd->opcode, cmd->arg);
0504
0505 cfg2 = SD_NO_CALCULATE_CRC7 | SD_CHECK_CRC16 |
0506 SD_NO_WAIT_BUSY_END | SD_NO_CHECK_CRC7 | SD_RSP_LEN_0;
0507
0508 if (!uhs)
0509 cfg2 |= SD_NO_CHECK_WAIT_CRC_TO;
0510
0511 rtsx_pci_init_cmd(pcr);
0512 sd_cmd_set_data_len(pcr, data->blocks, data->blksz);
0513 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, IRQSTAT0,
0514 DMA_DONE_INT, DMA_DONE_INT);
0515 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, DMATC3,
0516 0xFF, (u8)(data_len >> 24));
0517 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, DMATC2,
0518 0xFF, (u8)(data_len >> 16));
0519 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, DMATC1,
0520 0xFF, (u8)(data_len >> 8));
0521 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, DMATC0, 0xFF, (u8)data_len);
0522 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, DMACTL,
0523 0x03 | DMA_PACK_SIZE_MASK,
0524 DMA_DIR_TO_CARD | DMA_EN | DMA_512);
0525 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_DATA_SOURCE,
0526 0x01, RING_BUFFER);
0527 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_CFG2, 0xFF, cfg2);
0528 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_TRANSFER, 0xFF,
0529 SD_TRANSFER_START | SD_TM_AUTO_WRITE_3);
0530 rtsx_pci_add_cmd(pcr, CHECK_REG_CMD, SD_TRANSFER,
0531 SD_TRANSFER_END, SD_TRANSFER_END);
0532 rtsx_pci_send_cmd_no_wait(pcr);
0533 err = rtsx_pci_dma_transfer(pcr, data->sg, host->sg_count, 0, 10000);
0534 if (err < 0) {
0535 sd_clear_error(host);
0536 return err;
0537 }
0538
0539 return 0;
0540 }
0541
0542 static inline void sd_enable_initial_mode(struct realtek_pci_sdmmc *host)
0543 {
0544 rtsx_pci_write_register(host->pcr, SD_CFG1,
0545 SD_CLK_DIVIDE_MASK, SD_CLK_DIVIDE_128);
0546 }
0547
0548 static inline void sd_disable_initial_mode(struct realtek_pci_sdmmc *host)
0549 {
0550 rtsx_pci_write_register(host->pcr, SD_CFG1,
0551 SD_CLK_DIVIDE_MASK, SD_CLK_DIVIDE_0);
0552 }
0553
0554 static int sd_rw_multi(struct realtek_pci_sdmmc *host, struct mmc_request *mrq)
0555 {
0556 struct mmc_data *data = mrq->data;
0557 int err;
0558
0559 if (host->sg_count < 0) {
0560 data->error = host->sg_count;
0561 dev_dbg(sdmmc_dev(host), "%s: sg_count = %d is invalid\n",
0562 __func__, host->sg_count);
0563 return data->error;
0564 }
0565
0566 if (data->flags & MMC_DATA_READ) {
0567 if (host->initial_mode)
0568 sd_disable_initial_mode(host);
0569
0570 err = sd_read_long_data(host, mrq);
0571
0572 if (host->initial_mode)
0573 sd_enable_initial_mode(host);
0574
0575 return err;
0576 }
0577
0578 return sd_write_long_data(host, mrq);
0579 }
0580
0581 static void sd_normal_rw(struct realtek_pci_sdmmc *host,
0582 struct mmc_request *mrq)
0583 {
0584 struct mmc_command *cmd = mrq->cmd;
0585 struct mmc_data *data = mrq->data;
0586 u8 *buf;
0587
0588 buf = kzalloc(data->blksz, GFP_NOIO);
0589 if (!buf) {
0590 cmd->error = -ENOMEM;
0591 return;
0592 }
0593
0594 if (data->flags & MMC_DATA_READ) {
0595 if (host->initial_mode)
0596 sd_disable_initial_mode(host);
0597
0598 cmd->error = sd_read_data(host, cmd, (u16)data->blksz, buf,
0599 data->blksz, 200);
0600
0601 if (host->initial_mode)
0602 sd_enable_initial_mode(host);
0603
0604 sg_copy_from_buffer(data->sg, data->sg_len, buf, data->blksz);
0605 } else {
0606 sg_copy_to_buffer(data->sg, data->sg_len, buf, data->blksz);
0607
0608 cmd->error = sd_write_data(host, cmd, (u16)data->blksz, buf,
0609 data->blksz, 200);
0610 }
0611
0612 kfree(buf);
0613 }
0614
0615 static int sd_change_phase(struct realtek_pci_sdmmc *host,
0616 u8 sample_point, bool rx)
0617 {
0618 struct rtsx_pcr *pcr = host->pcr;
0619 u16 SD_VP_CTL = 0;
0620 dev_dbg(sdmmc_dev(host), "%s(%s): sample_point = %d\n",
0621 __func__, rx ? "RX" : "TX", sample_point);
0622
0623 rtsx_pci_write_register(pcr, CLK_CTL, CHANGE_CLK, CHANGE_CLK);
0624 if (rx) {
0625 SD_VP_CTL = SD_VPRX_CTL;
0626 rtsx_pci_write_register(pcr, SD_VPRX_CTL,
0627 PHASE_SELECT_MASK, sample_point);
0628 } else {
0629 SD_VP_CTL = SD_VPTX_CTL;
0630 rtsx_pci_write_register(pcr, SD_VPTX_CTL,
0631 PHASE_SELECT_MASK, sample_point);
0632 }
0633 rtsx_pci_write_register(pcr, SD_VP_CTL, PHASE_NOT_RESET, 0);
0634 rtsx_pci_write_register(pcr, SD_VP_CTL, PHASE_NOT_RESET,
0635 PHASE_NOT_RESET);
0636 rtsx_pci_write_register(pcr, CLK_CTL, CHANGE_CLK, 0);
0637 rtsx_pci_write_register(pcr, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0);
0638
0639 return 0;
0640 }
0641
0642 static inline u32 test_phase_bit(u32 phase_map, unsigned int bit)
0643 {
0644 bit %= RTSX_PHASE_MAX;
0645 return phase_map & (1 << bit);
0646 }
0647
0648 static int sd_get_phase_len(u32 phase_map, unsigned int start_bit)
0649 {
0650 int i;
0651
0652 for (i = 0; i < RTSX_PHASE_MAX; i++) {
0653 if (test_phase_bit(phase_map, start_bit + i) == 0)
0654 return i;
0655 }
0656 return RTSX_PHASE_MAX;
0657 }
0658
0659 static u8 sd_search_final_phase(struct realtek_pci_sdmmc *host, u32 phase_map)
0660 {
0661 int start = 0, len = 0;
0662 int start_final = 0, len_final = 0;
0663 u8 final_phase = 0xFF;
0664
0665 if (phase_map == 0) {
0666 dev_err(sdmmc_dev(host), "phase error: [map:%x]\n", phase_map);
0667 return final_phase;
0668 }
0669
0670 while (start < RTSX_PHASE_MAX) {
0671 len = sd_get_phase_len(phase_map, start);
0672 if (len_final < len) {
0673 start_final = start;
0674 len_final = len;
0675 }
0676 start += len ? len : 1;
0677 }
0678
0679 final_phase = (start_final + len_final / 2) % RTSX_PHASE_MAX;
0680 dev_dbg(sdmmc_dev(host), "phase: [map:%x] [maxlen:%d] [final:%d]\n",
0681 phase_map, len_final, final_phase);
0682
0683 return final_phase;
0684 }
0685
0686 static void sd_wait_data_idle(struct realtek_pci_sdmmc *host)
0687 {
0688 int i;
0689 u8 val = 0;
0690
0691 for (i = 0; i < 100; i++) {
0692 rtsx_pci_read_register(host->pcr, SD_DATA_STATE, &val);
0693 if (val & SD_DATA_IDLE)
0694 return;
0695
0696 udelay(100);
0697 }
0698 }
0699
0700 static int sd_tuning_rx_cmd(struct realtek_pci_sdmmc *host,
0701 u8 opcode, u8 sample_point)
0702 {
0703 int err;
0704 struct mmc_command cmd = {};
0705 struct rtsx_pcr *pcr = host->pcr;
0706
0707 sd_change_phase(host, sample_point, true);
0708
0709 rtsx_pci_write_register(pcr, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
0710 SD_RSP_80CLK_TIMEOUT_EN);
0711
0712 cmd.opcode = opcode;
0713 err = sd_read_data(host, &cmd, 0x40, NULL, 0, 100);
0714 if (err < 0) {
0715
0716 sd_wait_data_idle(host);
0717 sd_clear_error(host);
0718 rtsx_pci_write_register(pcr, SD_CFG3,
0719 SD_RSP_80CLK_TIMEOUT_EN, 0);
0720 return err;
0721 }
0722
0723 rtsx_pci_write_register(pcr, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN, 0);
0724 return 0;
0725 }
0726
0727 static int sd_tuning_phase(struct realtek_pci_sdmmc *host,
0728 u8 opcode, u32 *phase_map)
0729 {
0730 int err, i;
0731 u32 raw_phase_map = 0;
0732
0733 for (i = 0; i < RTSX_PHASE_MAX; i++) {
0734 err = sd_tuning_rx_cmd(host, opcode, (u8)i);
0735 if (err == 0)
0736 raw_phase_map |= 1 << i;
0737 }
0738
0739 if (phase_map)
0740 *phase_map = raw_phase_map;
0741
0742 return 0;
0743 }
0744
0745 static int sd_tuning_rx(struct realtek_pci_sdmmc *host, u8 opcode)
0746 {
0747 int err, i;
0748 u32 raw_phase_map[RX_TUNING_CNT] = {0}, phase_map;
0749 u8 final_phase;
0750
0751 for (i = 0; i < RX_TUNING_CNT; i++) {
0752 err = sd_tuning_phase(host, opcode, &(raw_phase_map[i]));
0753 if (err < 0)
0754 return err;
0755
0756 if (raw_phase_map[i] == 0)
0757 break;
0758 }
0759
0760 phase_map = 0xFFFFFFFF;
0761 for (i = 0; i < RX_TUNING_CNT; i++) {
0762 dev_dbg(sdmmc_dev(host), "RX raw_phase_map[%d] = 0x%08x\n",
0763 i, raw_phase_map[i]);
0764 phase_map &= raw_phase_map[i];
0765 }
0766 dev_dbg(sdmmc_dev(host), "RX phase_map = 0x%08x\n", phase_map);
0767
0768 if (phase_map) {
0769 final_phase = sd_search_final_phase(host, phase_map);
0770 if (final_phase == 0xFF)
0771 return -EINVAL;
0772
0773 err = sd_change_phase(host, final_phase, true);
0774 if (err < 0)
0775 return err;
0776 } else {
0777 return -EINVAL;
0778 }
0779
0780 return 0;
0781 }
0782
0783 static inline int sdio_extblock_cmd(struct mmc_command *cmd,
0784 struct mmc_data *data)
0785 {
0786 return (cmd->opcode == SD_IO_RW_EXTENDED) && (data->blksz == 512);
0787 }
0788
0789 static inline int sd_rw_cmd(struct mmc_command *cmd)
0790 {
0791 return mmc_op_multi(cmd->opcode) ||
0792 (cmd->opcode == MMC_READ_SINGLE_BLOCK) ||
0793 (cmd->opcode == MMC_WRITE_BLOCK);
0794 }
0795
0796 static void sd_request(struct work_struct *work)
0797 {
0798 struct realtek_pci_sdmmc *host = container_of(work,
0799 struct realtek_pci_sdmmc, work);
0800 struct rtsx_pcr *pcr = host->pcr;
0801
0802 struct mmc_host *mmc = host->mmc;
0803 struct mmc_request *mrq = host->mrq;
0804 struct mmc_command *cmd = mrq->cmd;
0805 struct mmc_data *data = mrq->data;
0806
0807 unsigned int data_size = 0;
0808 int err;
0809
0810 if (host->eject || !sd_get_cd_int(host)) {
0811 cmd->error = -ENOMEDIUM;
0812 goto finish;
0813 }
0814
0815 err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD);
0816 if (err) {
0817 cmd->error = err;
0818 goto finish;
0819 }
0820
0821 mutex_lock(&pcr->pcr_mutex);
0822
0823 rtsx_pci_start_run(pcr);
0824
0825 rtsx_pci_switch_clock(pcr, host->clock, host->ssc_depth,
0826 host->initial_mode, host->double_clk, host->vpclk);
0827 rtsx_pci_write_register(pcr, CARD_SELECT, 0x07, SD_MOD_SEL);
0828 rtsx_pci_write_register(pcr, CARD_SHARE_MODE,
0829 CARD_SHARE_MASK, CARD_SHARE_48_SD);
0830
0831 mutex_lock(&host->host_mutex);
0832 host->mrq = mrq;
0833 mutex_unlock(&host->host_mutex);
0834
0835 if (mrq->data)
0836 data_size = data->blocks * data->blksz;
0837
0838 if (!data_size) {
0839 sd_send_cmd_get_rsp(host, cmd);
0840 } else if (sd_rw_cmd(cmd) || sdio_extblock_cmd(cmd, data)) {
0841 cmd->error = sd_rw_multi(host, mrq);
0842 if (!host->using_cookie)
0843 sdmmc_post_req(host->mmc, host->mrq, 0);
0844
0845 if (mmc_op_multi(cmd->opcode) && mrq->stop)
0846 sd_send_cmd_get_rsp(host, mrq->stop);
0847 } else {
0848 sd_normal_rw(host, mrq);
0849 }
0850
0851 if (mrq->data) {
0852 if (cmd->error || data->error)
0853 data->bytes_xfered = 0;
0854 else
0855 data->bytes_xfered = data->blocks * data->blksz;
0856 }
0857
0858 mutex_unlock(&pcr->pcr_mutex);
0859
0860 finish:
0861 if (cmd->error) {
0862 dev_dbg(sdmmc_dev(host), "CMD %d 0x%08x error(%d)\n",
0863 cmd->opcode, cmd->arg, cmd->error);
0864 }
0865
0866 mutex_lock(&host->host_mutex);
0867 host->mrq = NULL;
0868 mutex_unlock(&host->host_mutex);
0869
0870 mmc_request_done(mmc, mrq);
0871 }
0872
0873 static void sdmmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
0874 {
0875 struct realtek_pci_sdmmc *host = mmc_priv(mmc);
0876 struct mmc_data *data = mrq->data;
0877
0878 mutex_lock(&host->host_mutex);
0879 host->mrq = mrq;
0880 mutex_unlock(&host->host_mutex);
0881
0882 if (sd_rw_cmd(mrq->cmd) || sdio_extblock_cmd(mrq->cmd, data))
0883 host->using_cookie = sd_pre_dma_transfer(host, data, false);
0884
0885 schedule_work(&host->work);
0886 }
0887
0888 static int sd_set_bus_width(struct realtek_pci_sdmmc *host,
0889 unsigned char bus_width)
0890 {
0891 int err = 0;
0892 u8 width[] = {
0893 [MMC_BUS_WIDTH_1] = SD_BUS_WIDTH_1BIT,
0894 [MMC_BUS_WIDTH_4] = SD_BUS_WIDTH_4BIT,
0895 [MMC_BUS_WIDTH_8] = SD_BUS_WIDTH_8BIT,
0896 };
0897
0898 if (bus_width <= MMC_BUS_WIDTH_8)
0899 err = rtsx_pci_write_register(host->pcr, SD_CFG1,
0900 0x03, width[bus_width]);
0901
0902 return err;
0903 }
0904
0905 static int sd_power_on(struct realtek_pci_sdmmc *host, unsigned char power_mode)
0906 {
0907 struct rtsx_pcr *pcr = host->pcr;
0908 struct mmc_host *mmc = host->mmc;
0909 int err;
0910 u32 val;
0911 u8 test_mode;
0912
0913 if (host->prev_power_state == MMC_POWER_ON)
0914 return 0;
0915
0916 if (host->prev_power_state == MMC_POWER_UP) {
0917 rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 0);
0918 goto finish;
0919 }
0920
0921 msleep(100);
0922
0923 rtsx_pci_init_cmd(pcr);
0924 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SELECT, 0x07, SD_MOD_SEL);
0925 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_SHARE_MODE,
0926 CARD_SHARE_MASK, CARD_SHARE_48_SD);
0927 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_CLK_EN,
0928 SD_CLK_EN, SD_CLK_EN);
0929 err = rtsx_pci_send_cmd(pcr, 100);
0930 if (err < 0)
0931 return err;
0932
0933 err = rtsx_pci_card_pull_ctl_enable(pcr, RTSX_SD_CARD);
0934 if (err < 0)
0935 return err;
0936
0937 err = rtsx_pci_card_power_on(pcr, RTSX_SD_CARD);
0938 if (err < 0)
0939 return err;
0940
0941 mdelay(1);
0942
0943 err = rtsx_pci_write_register(pcr, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN);
0944 if (err < 0)
0945 return err;
0946
0947
0948 rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, SD_CLK_TOGGLE_EN);
0949
0950 if (PCI_PID(pcr) == PID_5261) {
0951
0952
0953
0954
0955 rtsx_pci_read_register(pcr, RTS5261_FW_CFG_INFO0, &test_mode);
0956 if (test_mode & RTS5261_FW_EXPRESS_TEST_MASK) {
0957 sdmmc_init_sd_express(mmc, NULL);
0958 return 0;
0959 }
0960 if (pcr->extra_caps & EXTRA_CAPS_SD_EXPRESS)
0961 mmc->caps2 |= MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V;
0962
0963
0964
0965
0966
0967 val = rtsx_pci_readl(pcr, RTSX_BIPR);
0968 if (val & SD_WRITE_PROTECT) {
0969 pcr->extra_caps &= ~EXTRA_CAPS_SD_EXPRESS;
0970 mmc->caps2 &= ~(MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V);
0971 }
0972 }
0973
0974 finish:
0975 host->prev_power_state = power_mode;
0976 return 0;
0977 }
0978
0979 static int sd_power_off(struct realtek_pci_sdmmc *host)
0980 {
0981 struct rtsx_pcr *pcr = host->pcr;
0982 int err;
0983
0984 host->prev_power_state = MMC_POWER_OFF;
0985
0986 rtsx_pci_init_cmd(pcr);
0987
0988 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_CLK_EN, SD_CLK_EN, 0);
0989 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_OE, SD_OUTPUT_EN, 0);
0990
0991 err = rtsx_pci_send_cmd(pcr, 100);
0992 if (err < 0)
0993 return err;
0994
0995 err = rtsx_pci_card_power_off(pcr, RTSX_SD_CARD);
0996 if (err < 0)
0997 return err;
0998
0999 return rtsx_pci_card_pull_ctl_disable(pcr, RTSX_SD_CARD);
1000 }
1001
1002 static int sd_set_power_mode(struct realtek_pci_sdmmc *host,
1003 unsigned char power_mode)
1004 {
1005 int err;
1006
1007 if (power_mode == MMC_POWER_OFF)
1008 err = sd_power_off(host);
1009 else
1010 err = sd_power_on(host, power_mode);
1011
1012 return err;
1013 }
1014
1015 static int sd_set_timing(struct realtek_pci_sdmmc *host, unsigned char timing)
1016 {
1017 struct rtsx_pcr *pcr = host->pcr;
1018 int err = 0;
1019
1020 rtsx_pci_init_cmd(pcr);
1021
1022 switch (timing) {
1023 case MMC_TIMING_UHS_SDR104:
1024 case MMC_TIMING_UHS_SDR50:
1025 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_CFG1,
1026 0x0C | SD_ASYNC_FIFO_NOT_RST,
1027 SD_30_MODE | SD_ASYNC_FIFO_NOT_RST);
1028 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CLK_CTL,
1029 CLK_LOW_FREQ, CLK_LOW_FREQ);
1030 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_CLK_SOURCE, 0xFF,
1031 CRC_VAR_CLK0 | SD30_FIX_CLK | SAMPLE_VAR_CLK1);
1032 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CLK_CTL, CLK_LOW_FREQ, 0);
1033 break;
1034
1035 case MMC_TIMING_MMC_DDR52:
1036 case MMC_TIMING_UHS_DDR50:
1037 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_CFG1,
1038 0x0C | SD_ASYNC_FIFO_NOT_RST,
1039 SD_DDR_MODE | SD_ASYNC_FIFO_NOT_RST);
1040 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CLK_CTL,
1041 CLK_LOW_FREQ, CLK_LOW_FREQ);
1042 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_CLK_SOURCE, 0xFF,
1043 CRC_VAR_CLK0 | SD30_FIX_CLK | SAMPLE_VAR_CLK1);
1044 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CLK_CTL, CLK_LOW_FREQ, 0);
1045 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_PUSH_POINT_CTL,
1046 DDR_VAR_TX_CMD_DAT, DDR_VAR_TX_CMD_DAT);
1047 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_SAMPLE_POINT_CTL,
1048 DDR_VAR_RX_DAT | DDR_VAR_RX_CMD,
1049 DDR_VAR_RX_DAT | DDR_VAR_RX_CMD);
1050 break;
1051
1052 case MMC_TIMING_MMC_HS:
1053 case MMC_TIMING_SD_HS:
1054 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_CFG1,
1055 0x0C, SD_20_MODE);
1056 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CLK_CTL,
1057 CLK_LOW_FREQ, CLK_LOW_FREQ);
1058 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_CLK_SOURCE, 0xFF,
1059 CRC_FIX_CLK | SD30_VAR_CLK0 | SAMPLE_VAR_CLK1);
1060 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CLK_CTL, CLK_LOW_FREQ, 0);
1061 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_PUSH_POINT_CTL,
1062 SD20_TX_SEL_MASK, SD20_TX_14_AHEAD);
1063 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_SAMPLE_POINT_CTL,
1064 SD20_RX_SEL_MASK, SD20_RX_14_DELAY);
1065 break;
1066
1067 default:
1068 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD,
1069 SD_CFG1, 0x0C, SD_20_MODE);
1070 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CLK_CTL,
1071 CLK_LOW_FREQ, CLK_LOW_FREQ);
1072 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CARD_CLK_SOURCE, 0xFF,
1073 CRC_FIX_CLK | SD30_VAR_CLK0 | SAMPLE_VAR_CLK1);
1074 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, CLK_CTL, CLK_LOW_FREQ, 0);
1075 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD,
1076 SD_PUSH_POINT_CTL, 0xFF, 0);
1077 rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, SD_SAMPLE_POINT_CTL,
1078 SD20_RX_SEL_MASK, SD20_RX_POS_EDGE);
1079 break;
1080 }
1081
1082 err = rtsx_pci_send_cmd(pcr, 100);
1083
1084 return err;
1085 }
1086
1087 static void sdmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
1088 {
1089 struct realtek_pci_sdmmc *host = mmc_priv(mmc);
1090 struct rtsx_pcr *pcr = host->pcr;
1091
1092 if (host->eject)
1093 return;
1094
1095 if (rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD))
1096 return;
1097
1098 mutex_lock(&pcr->pcr_mutex);
1099
1100 rtsx_pci_start_run(pcr);
1101
1102 sd_set_bus_width(host, ios->bus_width);
1103 sd_set_power_mode(host, ios->power_mode);
1104 sd_set_timing(host, ios->timing);
1105
1106 host->vpclk = false;
1107 host->double_clk = true;
1108
1109 switch (ios->timing) {
1110 case MMC_TIMING_UHS_SDR104:
1111 case MMC_TIMING_UHS_SDR50:
1112 host->ssc_depth = RTSX_SSC_DEPTH_2M;
1113 host->vpclk = true;
1114 host->double_clk = false;
1115 break;
1116 case MMC_TIMING_MMC_DDR52:
1117 case MMC_TIMING_UHS_DDR50:
1118 case MMC_TIMING_UHS_SDR25:
1119 host->ssc_depth = RTSX_SSC_DEPTH_1M;
1120 break;
1121 default:
1122 host->ssc_depth = RTSX_SSC_DEPTH_500K;
1123 break;
1124 }
1125
1126 host->initial_mode = (ios->clock <= 1000000) ? true : false;
1127
1128 host->clock = ios->clock;
1129 rtsx_pci_switch_clock(pcr, ios->clock, host->ssc_depth,
1130 host->initial_mode, host->double_clk, host->vpclk);
1131
1132 mutex_unlock(&pcr->pcr_mutex);
1133 }
1134
1135 static int sdmmc_get_ro(struct mmc_host *mmc)
1136 {
1137 struct realtek_pci_sdmmc *host = mmc_priv(mmc);
1138 struct rtsx_pcr *pcr = host->pcr;
1139 int ro = 0;
1140 u32 val;
1141
1142 if (host->eject)
1143 return -ENOMEDIUM;
1144
1145 mutex_lock(&pcr->pcr_mutex);
1146
1147 rtsx_pci_start_run(pcr);
1148
1149
1150 val = rtsx_pci_readl(pcr, RTSX_BIPR);
1151 dev_dbg(sdmmc_dev(host), "%s: RTSX_BIPR = 0x%08x\n", __func__, val);
1152 if (val & SD_WRITE_PROTECT)
1153 ro = 1;
1154
1155 mutex_unlock(&pcr->pcr_mutex);
1156
1157 return ro;
1158 }
1159
1160 static int sdmmc_get_cd(struct mmc_host *mmc)
1161 {
1162 struct realtek_pci_sdmmc *host = mmc_priv(mmc);
1163 struct rtsx_pcr *pcr = host->pcr;
1164 int cd = 0;
1165 u32 val;
1166
1167 if (host->eject)
1168 return cd;
1169
1170 mutex_lock(&pcr->pcr_mutex);
1171
1172 rtsx_pci_start_run(pcr);
1173
1174
1175 val = rtsx_pci_card_exist(pcr);
1176 dev_dbg(sdmmc_dev(host), "%s: RTSX_BIPR = 0x%08x\n", __func__, val);
1177 if (val & SD_EXIST)
1178 cd = 1;
1179
1180 mutex_unlock(&pcr->pcr_mutex);
1181
1182 return cd;
1183 }
1184
1185 static int sd_wait_voltage_stable_1(struct realtek_pci_sdmmc *host)
1186 {
1187 struct rtsx_pcr *pcr = host->pcr;
1188 int err;
1189 u8 stat;
1190
1191
1192
1193
1194
1195 mdelay(1);
1196
1197
1198
1199
1200
1201 err = rtsx_pci_read_register(pcr, SD_BUS_STAT, &stat);
1202 if (err < 0)
1203 return err;
1204
1205 if (stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
1206 SD_DAT1_STATUS | SD_DAT0_STATUS))
1207 return -EINVAL;
1208
1209
1210 err = rtsx_pci_write_register(pcr, SD_BUS_STAT,
1211 0xFF, SD_CLK_FORCE_STOP);
1212 if (err < 0)
1213 return err;
1214
1215 return 0;
1216 }
1217
1218 static int sd_wait_voltage_stable_2(struct realtek_pci_sdmmc *host)
1219 {
1220 struct rtsx_pcr *pcr = host->pcr;
1221 int err;
1222 u8 stat, mask, val;
1223
1224
1225 msleep(50);
1226
1227
1228 err = rtsx_pci_write_register(pcr, SD_BUS_STAT, 0xFF, SD_CLK_TOGGLE_EN);
1229 if (err < 0)
1230 return err;
1231
1232
1233
1234
1235 msleep(20);
1236
1237
1238 err = rtsx_pci_read_register(pcr, SD_BUS_STAT, &stat);
1239 if (err < 0)
1240 return err;
1241
1242 mask = SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
1243 SD_DAT1_STATUS | SD_DAT0_STATUS;
1244 val = SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
1245 SD_DAT1_STATUS | SD_DAT0_STATUS;
1246 if ((stat & mask) != val) {
1247 dev_dbg(sdmmc_dev(host),
1248 "%s: SD_BUS_STAT = 0x%x\n", __func__, stat);
1249 rtsx_pci_write_register(pcr, SD_BUS_STAT,
1250 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
1251 rtsx_pci_write_register(pcr, CARD_CLK_EN, 0xFF, 0);
1252 return -EINVAL;
1253 }
1254
1255 return 0;
1256 }
1257
1258 static int sdmmc_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios)
1259 {
1260 struct realtek_pci_sdmmc *host = mmc_priv(mmc);
1261 struct rtsx_pcr *pcr = host->pcr;
1262 int err = 0;
1263 u8 voltage;
1264
1265 dev_dbg(sdmmc_dev(host), "%s: signal_voltage = %d\n",
1266 __func__, ios->signal_voltage);
1267
1268 if (host->eject)
1269 return -ENOMEDIUM;
1270
1271 err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD);
1272 if (err)
1273 return err;
1274
1275 mutex_lock(&pcr->pcr_mutex);
1276
1277 rtsx_pci_start_run(pcr);
1278
1279 if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330)
1280 voltage = OUTPUT_3V3;
1281 else
1282 voltage = OUTPUT_1V8;
1283
1284 if (voltage == OUTPUT_1V8) {
1285 err = sd_wait_voltage_stable_1(host);
1286 if (err < 0)
1287 goto out;
1288 }
1289
1290 err = rtsx_pci_switch_output_voltage(pcr, voltage);
1291 if (err < 0)
1292 goto out;
1293
1294 if (voltage == OUTPUT_1V8) {
1295 err = sd_wait_voltage_stable_2(host);
1296 if (err < 0)
1297 goto out;
1298 }
1299
1300 out:
1301
1302 err = rtsx_pci_write_register(pcr, SD_BUS_STAT,
1303 SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
1304
1305 mutex_unlock(&pcr->pcr_mutex);
1306
1307 return err;
1308 }
1309
1310 static int sdmmc_execute_tuning(struct mmc_host *mmc, u32 opcode)
1311 {
1312 struct realtek_pci_sdmmc *host = mmc_priv(mmc);
1313 struct rtsx_pcr *pcr = host->pcr;
1314 int err = 0;
1315
1316 if (host->eject)
1317 return -ENOMEDIUM;
1318
1319 err = rtsx_pci_card_exclusive_check(host->pcr, RTSX_SD_CARD);
1320 if (err)
1321 return err;
1322
1323 mutex_lock(&pcr->pcr_mutex);
1324
1325 rtsx_pci_start_run(pcr);
1326
1327
1328 switch (mmc->ios.timing) {
1329 case MMC_TIMING_UHS_SDR104:
1330 err = sd_change_phase(host, SDR104_TX_PHASE(pcr), false);
1331 break;
1332
1333 case MMC_TIMING_UHS_SDR50:
1334 err = sd_change_phase(host, SDR50_TX_PHASE(pcr), false);
1335 break;
1336
1337 case MMC_TIMING_UHS_DDR50:
1338 err = sd_change_phase(host, DDR50_TX_PHASE(pcr), false);
1339 break;
1340
1341 default:
1342 err = 0;
1343 }
1344
1345 if (err)
1346 goto out;
1347
1348
1349 if ((mmc->ios.timing == MMC_TIMING_UHS_SDR104) ||
1350 (mmc->ios.timing == MMC_TIMING_UHS_SDR50))
1351 err = sd_tuning_rx(host, opcode);
1352 else if (mmc->ios.timing == MMC_TIMING_UHS_DDR50)
1353 err = sd_change_phase(host, DDR50_RX_PHASE(pcr), true);
1354
1355 out:
1356 mutex_unlock(&pcr->pcr_mutex);
1357
1358 return err;
1359 }
1360
1361 static int sdmmc_init_sd_express(struct mmc_host *mmc, struct mmc_ios *ios)
1362 {
1363 u32 relink_time;
1364 struct realtek_pci_sdmmc *host = mmc_priv(mmc);
1365 struct rtsx_pcr *pcr = host->pcr;
1366
1367
1368 relink_time = 0x8FFF;
1369
1370 rtsx_pci_write_register(pcr, 0xFF01, 0xFF, relink_time);
1371 rtsx_pci_write_register(pcr, 0xFF02, 0xFF, relink_time >> 8);
1372 rtsx_pci_write_register(pcr, 0xFF03, 0x01, relink_time >> 16);
1373
1374 rtsx_pci_write_register(pcr, PETXCFG, 0x80, 0x80);
1375 rtsx_pci_write_register(pcr, LDO_VCC_CFG0,
1376 RTS5261_LDO1_OCP_THD_MASK,
1377 pcr->option.sd_800mA_ocp_thd);
1378
1379 if (pcr->ops->disable_auto_blink)
1380 pcr->ops->disable_auto_blink(pcr);
1381
1382
1383 pcr->hw_param.interrupt_en &= ~(SD_INT_EN);
1384 rtsx_pci_writel(pcr, RTSX_BIER, pcr->hw_param.interrupt_en);
1385
1386 rtsx_pci_write_register(pcr, RTS5260_AUTOLOAD_CFG4,
1387 RTS5261_AUX_CLK_16M_EN, RTS5261_AUX_CLK_16M_EN);
1388 rtsx_pci_write_register(pcr, RTS5261_FW_CFG0,
1389 RTS5261_FW_ENTER_EXPRESS, RTS5261_FW_ENTER_EXPRESS);
1390 rtsx_pci_write_register(pcr, RTS5261_FW_CFG1,
1391 RTS5261_MCU_CLOCK_GATING, RTS5261_MCU_CLOCK_GATING);
1392 rtsx_pci_write_register(pcr, RTS5261_FW_CFG1,
1393 RTS5261_MCU_BUS_SEL_MASK | RTS5261_MCU_CLOCK_SEL_MASK
1394 | RTS5261_DRIVER_ENABLE_FW,
1395 RTS5261_MCU_CLOCK_SEL_16M | RTS5261_DRIVER_ENABLE_FW);
1396 host->eject = true;
1397 return 0;
1398 }
1399
1400 static const struct mmc_host_ops realtek_pci_sdmmc_ops = {
1401 .pre_req = sdmmc_pre_req,
1402 .post_req = sdmmc_post_req,
1403 .request = sdmmc_request,
1404 .set_ios = sdmmc_set_ios,
1405 .get_ro = sdmmc_get_ro,
1406 .get_cd = sdmmc_get_cd,
1407 .start_signal_voltage_switch = sdmmc_switch_voltage,
1408 .execute_tuning = sdmmc_execute_tuning,
1409 .init_sd_express = sdmmc_init_sd_express,
1410 };
1411
1412 static void init_extra_caps(struct realtek_pci_sdmmc *host)
1413 {
1414 struct mmc_host *mmc = host->mmc;
1415 struct rtsx_pcr *pcr = host->pcr;
1416
1417 dev_dbg(sdmmc_dev(host), "pcr->extra_caps = 0x%x\n", pcr->extra_caps);
1418
1419 if (pcr->extra_caps & EXTRA_CAPS_SD_SDR50)
1420 mmc->caps |= MMC_CAP_UHS_SDR50;
1421 if (pcr->extra_caps & EXTRA_CAPS_SD_SDR104)
1422 mmc->caps |= MMC_CAP_UHS_SDR104;
1423 if (pcr->extra_caps & EXTRA_CAPS_SD_DDR50)
1424 mmc->caps |= MMC_CAP_UHS_DDR50;
1425 if (pcr->extra_caps & EXTRA_CAPS_MMC_HSDDR)
1426 mmc->caps |= MMC_CAP_1_8V_DDR;
1427 if (pcr->extra_caps & EXTRA_CAPS_MMC_8BIT)
1428 mmc->caps |= MMC_CAP_8_BIT_DATA;
1429 if (pcr->extra_caps & EXTRA_CAPS_NO_MMC)
1430 mmc->caps2 |= MMC_CAP2_NO_MMC;
1431 if (pcr->extra_caps & EXTRA_CAPS_SD_EXPRESS)
1432 mmc->caps2 |= MMC_CAP2_SD_EXP | MMC_CAP2_SD_EXP_1_2V;
1433 }
1434
1435 static void realtek_init_host(struct realtek_pci_sdmmc *host)
1436 {
1437 struct mmc_host *mmc = host->mmc;
1438 struct rtsx_pcr *pcr = host->pcr;
1439
1440 mmc->f_min = 250000;
1441 mmc->f_max = 208000000;
1442 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
1443 mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SD_HIGHSPEED |
1444 MMC_CAP_MMC_HIGHSPEED | MMC_CAP_BUS_WIDTH_TEST |
1445 MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25;
1446 if (pcr->rtd3_en)
1447 mmc->caps = mmc->caps | MMC_CAP_AGGRESSIVE_PM;
1448 mmc->caps2 = MMC_CAP2_NO_PRESCAN_POWERUP | MMC_CAP2_FULL_PWR_CYCLE |
1449 MMC_CAP2_NO_SDIO;
1450 mmc->max_current_330 = 400;
1451 mmc->max_current_180 = 800;
1452 mmc->ops = &realtek_pci_sdmmc_ops;
1453
1454 init_extra_caps(host);
1455
1456 mmc->max_segs = 256;
1457 mmc->max_seg_size = 65536;
1458 mmc->max_blk_size = 512;
1459 mmc->max_blk_count = 65535;
1460 mmc->max_req_size = 524288;
1461 }
1462
1463 static void rtsx_pci_sdmmc_card_event(struct platform_device *pdev)
1464 {
1465 struct realtek_pci_sdmmc *host = platform_get_drvdata(pdev);
1466
1467 host->cookie = -1;
1468 mmc_detect_change(host->mmc, 0);
1469 }
1470
1471 static int rtsx_pci_sdmmc_drv_probe(struct platform_device *pdev)
1472 {
1473 struct mmc_host *mmc;
1474 struct realtek_pci_sdmmc *host;
1475 struct rtsx_pcr *pcr;
1476 struct pcr_handle *handle = pdev->dev.platform_data;
1477
1478 if (!handle)
1479 return -ENXIO;
1480
1481 pcr = handle->pcr;
1482 if (!pcr)
1483 return -ENXIO;
1484
1485 dev_dbg(&(pdev->dev), ": Realtek PCI-E SDMMC controller found\n");
1486
1487 mmc = mmc_alloc_host(sizeof(*host), &pdev->dev);
1488 if (!mmc)
1489 return -ENOMEM;
1490
1491 host = mmc_priv(mmc);
1492 host->pcr = pcr;
1493 mmc->ios.power_delay_ms = 5;
1494 host->mmc = mmc;
1495 host->pdev = pdev;
1496 host->cookie = -1;
1497 host->prev_power_state = MMC_POWER_OFF;
1498 INIT_WORK(&host->work, sd_request);
1499 platform_set_drvdata(pdev, host);
1500 pcr->slots[RTSX_SD_CARD].p_dev = pdev;
1501 pcr->slots[RTSX_SD_CARD].card_event = rtsx_pci_sdmmc_card_event;
1502
1503 mutex_init(&host->host_mutex);
1504
1505 realtek_init_host(host);
1506
1507 pm_runtime_no_callbacks(&pdev->dev);
1508 pm_runtime_set_active(&pdev->dev);
1509 pm_runtime_enable(&pdev->dev);
1510 pm_runtime_set_autosuspend_delay(&pdev->dev, 200);
1511 pm_runtime_mark_last_busy(&pdev->dev);
1512 pm_runtime_use_autosuspend(&pdev->dev);
1513
1514 mmc_add_host(mmc);
1515
1516 return 0;
1517 }
1518
1519 static int rtsx_pci_sdmmc_drv_remove(struct platform_device *pdev)
1520 {
1521 struct realtek_pci_sdmmc *host = platform_get_drvdata(pdev);
1522 struct rtsx_pcr *pcr;
1523 struct mmc_host *mmc;
1524
1525 if (!host)
1526 return 0;
1527
1528 pcr = host->pcr;
1529 pcr->slots[RTSX_SD_CARD].p_dev = NULL;
1530 pcr->slots[RTSX_SD_CARD].card_event = NULL;
1531 mmc = host->mmc;
1532
1533 cancel_work_sync(&host->work);
1534
1535 mutex_lock(&host->host_mutex);
1536 if (host->mrq) {
1537 dev_dbg(&(pdev->dev),
1538 "%s: Controller removed during transfer\n",
1539 mmc_hostname(mmc));
1540
1541 rtsx_pci_complete_unfinished_transfer(pcr);
1542
1543 host->mrq->cmd->error = -ENOMEDIUM;
1544 if (host->mrq->stop)
1545 host->mrq->stop->error = -ENOMEDIUM;
1546 mmc_request_done(mmc, host->mrq);
1547 }
1548 mutex_unlock(&host->host_mutex);
1549
1550 mmc_remove_host(mmc);
1551 host->eject = true;
1552
1553 flush_work(&host->work);
1554
1555 pm_runtime_dont_use_autosuspend(&pdev->dev);
1556 pm_runtime_disable(&pdev->dev);
1557
1558 mmc_free_host(mmc);
1559
1560 dev_dbg(&(pdev->dev),
1561 ": Realtek PCI-E SDMMC controller has been removed\n");
1562
1563 return 0;
1564 }
1565
1566 static const struct platform_device_id rtsx_pci_sdmmc_ids[] = {
1567 {
1568 .name = DRV_NAME_RTSX_PCI_SDMMC,
1569 }, {
1570
1571 }
1572 };
1573 MODULE_DEVICE_TABLE(platform, rtsx_pci_sdmmc_ids);
1574
1575 static struct platform_driver rtsx_pci_sdmmc_driver = {
1576 .probe = rtsx_pci_sdmmc_drv_probe,
1577 .remove = rtsx_pci_sdmmc_drv_remove,
1578 .id_table = rtsx_pci_sdmmc_ids,
1579 .driver = {
1580 .name = DRV_NAME_RTSX_PCI_SDMMC,
1581 .probe_type = PROBE_PREFER_ASYNCHRONOUS,
1582 },
1583 };
1584 module_platform_driver(rtsx_pci_sdmmc_driver);
1585
1586 MODULE_LICENSE("GPL");
1587 MODULE_AUTHOR("Wei WANG <wei_wang@realsil.com.cn>");
1588 MODULE_DESCRIPTION("Realtek PCI-E SD/MMC Card Host Driver");