1
/* Driver for Realtek PCI-Express card reader
3
* Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved.
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License as published by the
7
* Free Software Foundation; either version 2, or (at your option) any
10
* This program is distributed in the hope that it will be useful, but
11
* WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
* General Public License for more details.
15
* You should have received a copy of the GNU General Public License along
16
* with this program; if not, see <http://www.gnu.org/licenses/>.
19
* wwang (wei_wang@realsil.com.cn)
20
* No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
23
#include <linux/blkdev.h>
24
#include <linux/kthread.h>
25
#include <linux/sched.h>
26
#include <linux/workqueue.h>
27
#include <linux/vmalloc.h>
30
#include "rtsx_transport.h"
31
#include "rtsx_scsi.h"
32
#include "rtsx_card.h"
33
#include "rtsx_chip.h"
41
static void rtsx_calibration(struct rtsx_chip *chip)
43
rtsx_write_phy_register(chip, 0x1B, 0x135E);
45
rtsx_write_phy_register(chip, 0x00, 0x0280);
46
rtsx_write_phy_register(chip, 0x01, 0x7112);
47
rtsx_write_phy_register(chip, 0x01, 0x7110);
48
rtsx_write_phy_register(chip, 0x01, 0x7112);
49
rtsx_write_phy_register(chip, 0x01, 0x7113);
50
rtsx_write_phy_register(chip, 0x00, 0x0288);
53
void rtsx_disable_card_int(struct rtsx_chip *chip)
55
u32 reg = rtsx_readl(chip, RTSX_BIER);
57
reg &= ~(XD_INT_EN | SD_INT_EN | MS_INT_EN);
58
rtsx_writel(chip, RTSX_BIER, reg);
61
void rtsx_enable_card_int(struct rtsx_chip *chip)
63
u32 reg = rtsx_readl(chip, RTSX_BIER);
66
for (i = 0; i <= chip->max_lun; i++) {
67
if (chip->lun2card[i] & XD_CARD)
69
if (chip->lun2card[i] & SD_CARD)
71
if (chip->lun2card[i] & MS_CARD)
74
if (chip->hw_bypass_sd)
75
reg &= ~((u32)SD_INT_EN);
77
rtsx_writel(chip, RTSX_BIER, reg);
80
void rtsx_enable_bus_int(struct rtsx_chip *chip)
83
#ifndef DISABLE_CARD_INT
87
reg = TRANS_OK_INT_EN | TRANS_FAIL_INT_EN;
89
#ifndef DISABLE_CARD_INT
90
for (i = 0; i <= chip->max_lun; i++) {
91
RTSX_DEBUGP("lun2card[%d] = 0x%02x\n", i, chip->lun2card[i]);
93
if (chip->lun2card[i] & XD_CARD)
95
if (chip->lun2card[i] & SD_CARD)
97
if (chip->lun2card[i] & MS_CARD)
100
if (chip->hw_bypass_sd)
101
reg &= ~((u32)SD_INT_EN);
104
if (chip->ic_version >= IC_VER_C)
105
reg |= DELINK_INT_EN;
107
if (CHECK_PID(chip, 0x5209)) {
108
if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
109
reg |= MS_OC_INT_EN | SD_OC_INT_EN;
117
if (!chip->adma_mode)
118
reg |= DATA_DONE_INT_EN;
120
/* Enable Bus Interrupt */
121
rtsx_writel(chip, RTSX_BIER, reg);
123
RTSX_DEBUGP("RTSX_BIER: 0x%08x\n", reg);
126
void rtsx_disable_bus_int(struct rtsx_chip *chip)
128
rtsx_writel(chip, RTSX_BIER, 0);
131
static int rtsx_pre_handle_sdio_old(struct rtsx_chip *chip)
133
if (chip->ignore_sd && CHK_SDIO_EXIST(chip)) {
134
if (chip->asic_code) {
135
RTSX_WRITE_REG(chip, CARD_PULL_CTL5, 0xFF,
136
MS_INS_PU | SD_WP_PU | SD_CD_PU | SD_CMD_PU);
138
RTSX_WRITE_REG(chip, FPGA_PULL_CTL, 0xFF, FPGA_SD_PULL_CTL_EN);
140
RTSX_WRITE_REG(chip, CARD_SHARE_MODE, 0xFF, CARD_SHARE_48_SD);
142
/* Enable SDIO internal clock */
143
RTSX_WRITE_REG(chip, 0xFF2C, 0x01, 0x01);
145
RTSX_WRITE_REG(chip, SDIO_CTRL, 0xFF, SDIO_BUS_CTRL | SDIO_CD_CTRL);
150
chip->need_reset |= SD_CARD;
153
return STATUS_SUCCESS;
156
#ifdef HW_AUTO_SWITCH_SD_BUS
157
static int rtsx_pre_handle_sdio_new(struct rtsx_chip *chip)
160
int sw_bypass_sd = 0;
163
if (chip->driver_first_load) {
164
if (CHECK_PID(chip, 0x5288)) {
165
RTSX_READ_REG(chip, 0xFE5A, &tmp);
168
} else if (CHECK_PID(chip, 0x5208)) {
169
RTSX_READ_REG(chip, 0xFE70, &tmp);
172
} else if (CHECK_PID(chip, 0x5209)) {
173
RTSX_READ_REG(chip, SDIO_CFG, &tmp);
174
if (tmp & SDIO_BUS_AUTO_SWITCH)
178
if (chip->sdio_in_charge)
181
RTSX_DEBUGP("chip->sdio_in_charge = %d\n", chip->sdio_in_charge);
182
RTSX_DEBUGP("chip->driver_first_load = %d\n", chip->driver_first_load);
183
RTSX_DEBUGP("sw_bypass_sd = %d\n", sw_bypass_sd);
186
u8 cd_toggle_mask = 0;
188
RTSX_READ_REG(chip, TLPTISTAT, &tmp);
189
if (CHECK_PID(chip, 0x5209)) {
190
cd_toggle_mask = 0x10;
192
cd_toggle_mask = 0x08;
194
if (tmp & cd_toggle_mask) {
195
/* Disable sdio_bus_auto_switch */
196
if (CHECK_PID(chip, 0x5288)) {
197
RTSX_WRITE_REG(chip, 0xFE5A, 0x08, 0x00);
198
} else if (CHECK_PID(chip, 0x5208)) {
199
RTSX_WRITE_REG(chip, 0xFE70, 0x80, 0x00);
201
RTSX_WRITE_REG(chip, SDIO_CFG, SDIO_BUS_AUTO_SWITCH, 0);
203
RTSX_WRITE_REG(chip, TLPTISTAT, 0xFF, tmp);
205
chip->need_reset |= SD_CARD;
207
RTSX_DEBUGP("Chip inserted with SDIO!\n");
209
if (chip->asic_code) {
210
retval = sd_pull_ctl_enable(chip);
211
if (retval != STATUS_SUCCESS) {
212
TRACE_RET(chip, STATUS_FAIL);
215
RTSX_WRITE_REG(chip, FPGA_PULL_CTL, FPGA_SD_PULL_CTL_BIT | 0x20, 0);
217
retval = card_share_mode(chip, SD_CARD);
218
if (retval != STATUS_SUCCESS) {
219
TRACE_RET(chip, STATUS_FAIL);
222
/* Enable sdio_bus_auto_switch */
223
if (CHECK_PID(chip, 0x5288)) {
224
RTSX_WRITE_REG(chip, 0xFE5A, 0x08, 0x08);
225
} else if (CHECK_PID(chip, 0x5208)) {
226
RTSX_WRITE_REG(chip, 0xFE70, 0x80, 0x80);
228
RTSX_WRITE_REG(chip, SDIO_CFG,
229
SDIO_BUS_AUTO_SWITCH, SDIO_BUS_AUTO_SWITCH);
231
chip->chip_insert_with_sdio = 1;
235
if (CHECK_PID(chip, 0x5209)) {
236
RTSX_WRITE_REG(chip, TLPTISTAT, 0x10, 0x10);
238
RTSX_WRITE_REG(chip, TLPTISTAT, 0x08, 0x08);
240
chip->need_reset |= SD_CARD;
243
return STATUS_SUCCESS;
247
int rtsx_reset_chip(struct rtsx_chip *chip)
251
rtsx_writel(chip, RTSX_HCBAR, chip->host_cmds_addr);
253
rtsx_disable_aspm(chip);
255
if (CHECK_PID(chip, 0x5209) && chip->asic_code) {
259
retval = rtsx_write_phy_register(chip, 0x00, 0xB966);
260
if (retval != STATUS_SUCCESS) {
261
TRACE_RET(chip, STATUS_FAIL);
263
retval = rtsx_write_phy_register(chip, 0x01, 0x713F);
264
if (retval != STATUS_SUCCESS) {
265
TRACE_RET(chip, STATUS_FAIL);
267
retval = rtsx_write_phy_register(chip, 0x03, 0xA549);
268
if (retval != STATUS_SUCCESS) {
269
TRACE_RET(chip, STATUS_FAIL);
271
retval = rtsx_write_phy_register(chip, 0x06, 0xB235);
272
if (retval != STATUS_SUCCESS) {
273
TRACE_RET(chip, STATUS_FAIL);
275
retval = rtsx_write_phy_register(chip, 0x07, 0xEF40);
276
if (retval != STATUS_SUCCESS) {
277
TRACE_RET(chip, STATUS_FAIL);
279
retval = rtsx_write_phy_register(chip, 0x1E, 0xF8EB);
280
if (retval != STATUS_SUCCESS) {
281
TRACE_RET(chip, STATUS_FAIL);
283
retval = rtsx_write_phy_register(chip, 0x19, 0xFE6C);
284
if (retval != STATUS_SUCCESS) {
285
TRACE_RET(chip, STATUS_FAIL);
288
retval = rtsx_write_phy_register(chip, 0x0A, 0x05C0);
289
if (retval != STATUS_SUCCESS) {
290
TRACE_RET(chip, STATUS_FAIL);
293
retval = rtsx_write_cfg_dw(chip, 1, 0x110, 0xFFFF, 0xFFFF);
294
if (retval != STATUS_SUCCESS) {
295
TRACE_RET(chip, STATUS_FAIL);
298
retval = rtsx_read_phy_register(chip, 0x08, &val);
299
if (retval != STATUS_SUCCESS) {
300
TRACE_RET(chip, STATUS_FAIL);
302
RTSX_DEBUGP("Read from phy 0x08: 0x%04x\n", val);
304
if (chip->phy_voltage) {
305
chip->phy_voltage &= 0x3F;
306
RTSX_DEBUGP("chip->phy_voltage = 0x%x\n", chip->phy_voltage);
308
val |= chip->phy_voltage;
309
RTSX_DEBUGP("Write to phy 0x08: 0x%04x\n", val);
310
retval = rtsx_write_phy_register(chip, 0x08, val);
311
if (retval != STATUS_SUCCESS) {
312
TRACE_RET(chip, STATUS_FAIL);
315
chip->phy_voltage = (u8)(val & 0x3F);
316
RTSX_DEBUGP("Default, chip->phy_voltage = 0x%x\n", chip->phy_voltage);
320
RTSX_WRITE_REG(chip, HOST_SLEEP_STATE, 0x03, 0x00);
322
/* Disable card clock */
323
RTSX_WRITE_REG(chip, CARD_CLK_EN, 0x1E, 0);
326
/* SSC power on, OCD power on */
327
if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
328
RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, 0);
330
RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, MS_OC_POWER_DOWN);
332
if (CHECK_PID(chip, 0x5209)) {
333
RTSX_WRITE_REG(chip, OCPPARA1, SD_OCP_TIME_MASK | MS_OCP_TIME_MASK,
334
SD_OCP_TIME_800 | MS_OCP_TIME_800);
335
RTSX_WRITE_REG(chip, OCPPARA2, SD_OCP_THD_MASK | MS_OCP_THD_MASK,
336
chip->sd_400mA_ocp_thd | (chip->ms_ocp_thd << 4));
337
if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
338
RTSX_WRITE_REG(chip, OCPGLITCH, SD_OCP_GLITCH_MASK | MS_OCP_GLITCH_MASK,
339
SD_OCP_GLITCH_10000 | MS_OCP_GLITCH_10000);
341
RTSX_WRITE_REG(chip, OCPGLITCH, SD_OCP_GLITCH_MASK, SD_OCP_GLITCH_10000);
343
RTSX_WRITE_REG(chip, OCPCTL, 0xFF,
344
SD_OCP_INT_EN | SD_DETECT_EN | MS_OCP_INT_EN | MS_DETECT_EN);
346
RTSX_WRITE_REG(chip, OCPPARA1, OCP_TIME_MASK, OCP_TIME_800);
347
RTSX_WRITE_REG(chip, OCPPARA2, OCP_THD_MASK, OCP_THD_244_946);
348
RTSX_WRITE_REG(chip, OCPCTL, 0xFF, CARD_OC_INT_EN | CARD_DETECT_EN);
352
RTSX_WRITE_REG(chip, FPDCTL, OC_POWER_DOWN, OC_POWER_DOWN);
355
if (!CHECK_PID(chip, 0x5288)) {
356
RTSX_WRITE_REG(chip, CARD_GPIO_DIR, 0xFF, 0x03);
360
RTSX_WRITE_REG(chip, CARD_GPIO, 0xFF, 0x03);
362
/* Reset delink mode */
363
RTSX_WRITE_REG(chip, CHANGE_LINK_STATE, 0x0A, 0);
365
/* Card driving select */
366
RTSX_WRITE_REG(chip, CARD_DRIVE_SEL, 0xFF, chip->card_drive_sel);
367
if (CHECK_PID(chip, 0x5209)) {
368
RTSX_WRITE_REG(chip, SD30_DRIVE_SEL, 0x07, chip->sd30_drive_sel_3v3);
371
#ifdef LED_AUTO_BLINK
372
RTSX_WRITE_REG(chip, CARD_AUTO_BLINK, 0xFF,
373
LED_BLINK_SPEED | BLINK_EN | LED_GPIO0);
376
if (chip->asic_code) {
377
/* Enable SSC Clock */
378
RTSX_WRITE_REG(chip, SSC_CTL1, 0xFF, SSC_8X_EN | SSC_SEL_4M);
379
RTSX_WRITE_REG(chip, SSC_CTL2, 0xFF, 0x12);
382
/* Disable cd_pwr_save (u_force_rst_core_en=0, u_cd_rst_core_en=0)
384
bit[1] u_cd_rst_core_en rst_value = 0
385
bit[2] u_force_rst_core_en rst_value = 0
386
bit[5] u_mac_phy_rst_n_dbg rst_value = 1
387
bit[4] u_non_sticky_rst_n_dbg rst_value = 0
389
RTSX_WRITE_REG(chip, CHANGE_LINK_STATE, 0x16, 0x10);
392
if (chip->aspm_l0s_l1_en) {
393
if (chip->dynamic_aspm) {
394
if (CHK_SDIO_EXIST(chip)) {
395
if (CHECK_PID(chip, 0x5209)) {
396
retval = rtsx_write_cfg_dw(chip, 1, 0xC0, 0xFF, chip->aspm_l0s_l1_en);
397
if (retval != STATUS_SUCCESS) {
398
TRACE_RET(chip, STATUS_FAIL);
400
} else if (CHECK_PID(chip, 0x5288)) {
401
retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF, chip->aspm_l0s_l1_en);
402
if (retval != STATUS_SUCCESS) {
403
TRACE_RET(chip, STATUS_FAIL);
408
if (CHECK_PID(chip, 0x5208)) {
409
RTSX_WRITE_REG(chip, ASPM_FORCE_CTL, 0xFF, 0x3F);
412
retval = rtsx_write_config_byte(chip, LCTLR, chip->aspm_l0s_l1_en);
413
if (retval != STATUS_SUCCESS) {
414
TRACE_RET(chip, STATUS_FAIL);
416
chip->aspm_level[0] = chip->aspm_l0s_l1_en;
417
if (CHK_SDIO_EXIST(chip)) {
418
chip->aspm_level[1] = chip->aspm_l0s_l1_en;
419
if (CHECK_PID(chip, 0x5288)) {
420
retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF, chip->aspm_l0s_l1_en);
422
retval = rtsx_write_cfg_dw(chip, 1, 0xC0, 0xFF, chip->aspm_l0s_l1_en);
424
if (retval != STATUS_SUCCESS) {
425
TRACE_RET(chip, STATUS_FAIL);
429
chip->aspm_enabled = 1;
432
if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
433
retval = rtsx_write_phy_register(chip, 0x07, 0x0129);
434
if (retval != STATUS_SUCCESS) {
435
TRACE_RET(chip, STATUS_FAIL);
438
retval = rtsx_write_config_byte(chip, LCTLR, chip->aspm_l0s_l1_en);
439
if (retval != STATUS_SUCCESS) {
440
TRACE_RET(chip, STATUS_FAIL);
444
retval = rtsx_write_config_byte(chip, 0x81, 1);
445
if (retval != STATUS_SUCCESS) {
446
TRACE_RET(chip, STATUS_FAIL);
449
if (CHK_SDIO_EXIST(chip)) {
450
if (CHECK_PID(chip, 0x5288)) {
451
retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF00, 0x0100);
453
retval = rtsx_write_cfg_dw(chip, 1, 0xC0, 0xFF00, 0x0100);
455
if (retval != STATUS_SUCCESS) {
456
TRACE_RET(chip, STATUS_FAIL);
460
if (CHECK_PID(chip, 0x5209)) {
461
retval = rtsx_write_cfg_dw(chip, 0, 0x70C, 0xFF000000, 0x5B);
462
if (retval != STATUS_SUCCESS) {
463
TRACE_RET(chip, STATUS_FAIL);
467
if (CHECK_PID(chip, 0x5288)) {
468
if (!CHK_SDIO_EXIST(chip)) {
469
retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFFFF, 0x0103);
470
if (retval != STATUS_SUCCESS) {
471
TRACE_RET(chip, STATUS_FAIL);
473
retval = rtsx_write_cfg_dw(chip, 2, 0x84, 0xFF, 0x03);
474
if (retval != STATUS_SUCCESS) {
475
TRACE_RET(chip, STATUS_FAIL);
480
RTSX_WRITE_REG(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
482
RTSX_WRITE_REG(chip, PERST_GLITCH_WIDTH, 0xFF, 0x80);
484
if (CHECK_PID(chip, 0x5209)) {
485
RTSX_WRITE_REG(chip, PWD_SUSPEND_EN, 0xFF, 0xFF);
486
RTSX_WRITE_REG(chip, PWR_GATE_CTRL, PWR_GATE_EN, PWR_GATE_EN);
489
/* Enable PCIE interrupt */
490
if (chip->asic_code) {
491
if (CHECK_PID(chip, 0x5208)) {
492
if (chip->phy_debug_mode) {
493
RTSX_WRITE_REG(chip, CDRESUMECTL, 0x77, 0);
494
rtsx_disable_bus_int(chip);
496
rtsx_enable_bus_int(chip);
499
if (chip->ic_version >= IC_VER_D) {
501
retval = rtsx_read_phy_register(chip, 0x00, ®);
502
if (retval != STATUS_SUCCESS) {
503
TRACE_RET(chip, STATUS_FAIL);
507
retval = rtsx_write_phy_register(chip, 0x00, reg);
508
if (retval != STATUS_SUCCESS) {
509
TRACE_RET(chip, STATUS_FAIL);
511
retval = rtsx_read_phy_register(chip, 0x1C, ®);
512
if (retval != STATUS_SUCCESS) {
513
TRACE_RET(chip, STATUS_FAIL);
516
retval = rtsx_write_phy_register(chip, 0x1C, reg);
517
if (retval != STATUS_SUCCESS) {
518
TRACE_RET(chip, STATUS_FAIL);
522
if (chip->driver_first_load && (chip->ic_version < IC_VER_C)) {
523
rtsx_calibration(chip);
526
rtsx_enable_bus_int(chip);
529
rtsx_enable_bus_int(chip);
532
#ifdef HW_INT_WRITE_CLR
533
if (CHECK_PID(chip, 0x5209)) {
534
/* Set interrupt write clear */
535
RTSX_WRITE_REG(chip, NFTS_TX_CTRL, 0x02, 0);
539
chip->need_reset = 0;
541
chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
542
#ifdef HW_INT_WRITE_CLR
543
if (CHECK_PID(chip, 0x5209)) {
544
/* Clear interrupt flag */
545
rtsx_writel(chip, RTSX_BIPR, chip->int_reg);
548
if (chip->hw_bypass_sd)
550
RTSX_DEBUGP("In rtsx_reset_chip, chip->int_reg = 0x%x\n", chip->int_reg);
551
if (chip->int_reg & SD_EXIST) {
552
#ifdef HW_AUTO_SWITCH_SD_BUS
553
if (CHECK_PID(chip, 0x5208) && (chip->ic_version < IC_VER_C)) {
554
retval = rtsx_pre_handle_sdio_old(chip);
556
retval = rtsx_pre_handle_sdio_new(chip);
558
RTSX_DEBUGP("chip->need_reset = 0x%x (rtsx_reset_chip)\n", (unsigned int)(chip->need_reset));
559
#else /* HW_AUTO_SWITCH_SD_BUS */
560
retval = rtsx_pre_handle_sdio_old(chip);
561
#endif /* HW_AUTO_SWITCH_SD_BUS */
562
if (retval != STATUS_SUCCESS) {
563
TRACE_RET(chip, STATUS_FAIL);
567
RTSX_WRITE_REG(chip, SDIO_CTRL, SDIO_BUS_CTRL | SDIO_CD_CTRL, 0);
571
if (chip->int_reg & XD_EXIST)
572
chip->need_reset |= XD_CARD;
573
if (chip->int_reg & MS_EXIST)
574
chip->need_reset |= MS_CARD;
575
if (chip->int_reg & CARD_EXIST) {
576
RTSX_WRITE_REG(chip, SSC_CTL1, SSC_RSTB, SSC_RSTB);
579
RTSX_DEBUGP("In rtsx_init_chip, chip->need_reset = 0x%x\n", (unsigned int)(chip->need_reset));
581
RTSX_WRITE_REG(chip, RCCTL, 0x01, 0x00);
583
if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
584
/* Turn off main power when entering S3/S4 state */
585
RTSX_WRITE_REG(chip, MAIN_PWR_OFF_CTL, 0x03, 0x03);
588
if (chip->remote_wakeup_en && !chip->auto_delink_en) {
589
RTSX_WRITE_REG(chip, WAKE_SEL_CTL, 0x07, 0x07);
590
if (chip->aux_pwr_exist) {
591
RTSX_WRITE_REG(chip, PME_FORCE_CTL, 0xFF, 0x33);
594
RTSX_WRITE_REG(chip, WAKE_SEL_CTL, 0x07, 0x04);
595
RTSX_WRITE_REG(chip, PME_FORCE_CTL, 0xFF, 0x30);
598
if (CHECK_PID(chip, 0x5208) && (chip->ic_version >= IC_VER_D)) {
599
RTSX_WRITE_REG(chip, PETXCFG, 0x1C, 0x14);
600
} else if (CHECK_PID(chip, 0x5209)) {
601
if (chip->force_clkreq_0) {
602
RTSX_WRITE_REG(chip, PETXCFG, 0x08, 0x08);
604
RTSX_WRITE_REG(chip, PETXCFG, 0x08, 0x00);
608
if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
609
retval = rtsx_clr_phy_reg_bit(chip, 0x1C, 2);
610
if (retval != STATUS_SUCCESS) {
611
TRACE_RET(chip, STATUS_FAIL);
615
if (chip->ft2_fast_mode) {
616
RTSX_WRITE_REG(chip, CARD_PWR_CTL, 0xFF, MS_PARTIAL_POWER_ON | SD_PARTIAL_POWER_ON);
617
udelay(chip->pmos_pwr_on_interval);
618
RTSX_WRITE_REG(chip, CARD_PWR_CTL, 0xFF, MS_POWER_ON | SD_POWER_ON);
624
rtsx_reset_detected_cards(chip, 0);
626
chip->driver_first_load = 0;
628
return STATUS_SUCCESS;
631
static inline int check_sd_speed_prior(u32 sd_speed_prior)
633
int i, fake_para = 0;
635
for (i = 0; i < 4; i++) {
636
u8 tmp = (u8)(sd_speed_prior >> (i*8));
637
if ((tmp < 0x01) || (tmp > 0x04)) {
646
static inline int check_sd_current_prior(u32 sd_current_prior)
648
int i, fake_para = 0;
650
for (i = 0; i < 4; i++) {
651
u8 tmp = (u8)(sd_current_prior >> (i*8));
661
static int rts5209_init(struct rtsx_chip *chip)
667
val = rtsx_readb(chip, 0x1C);
668
if ((val & 0x10) == 0) {
674
chip->ic_version = val & 0x0F;
675
chip->phy_debug_mode = 0;
677
chip->aux_pwr_exist = 0;
679
chip->ms_power_class_en = 0x03;
681
retval = rtsx_read_cfg_dw(chip, 0, 0x724, &lval);
682
if (retval != STATUS_SUCCESS) {
683
TRACE_RET(chip, STATUS_FAIL);
685
RTSX_DEBUGP("dw in 0x724: 0x%x\n", lval);
689
chip->lun_mode = DEFAULT_SINGLE;
691
chip->lun_mode = SD_MS_2LUN;
694
SET_SDIO_EXIST(chip);
696
CLR_SDIO_EXIST(chip);
700
chip->hw_bypass_sd = 0;
702
chip->hw_bypass_sd = 1;
705
SET_SDIO_EXIST(chip);
706
chip->hw_bypass_sd = 0;
709
if (chip->use_hw_setting) {
712
chip->aspm_l0s_l1_en = (val >> 5) & 0x03;
714
val = (u8)(lval >> 8);
716
clk = (val >> 5) & 0x07;
718
chip->asic_sd_sdr50_clk = 98 - clk * 2;
722
chip->auto_delink_en = 1;
724
chip->auto_delink_en = 0;
727
if (chip->ss_en == 2) {
739
chip->asic_ms_hg_clk = (59 - clk) * 2;
741
val = (u8)(lval >> 16);
743
clk = (val >> 6) & 0x03;
745
chip->asic_sd_hs_clk = (49 - clk * 2) * 2;
746
chip->asic_mmc_52m_clk = (49 - clk * 2) * 2;
749
clk = (val >> 4) & 0x03;
751
chip->asic_sd_ddr50_clk = (48 - clk * 2) * 2;
769
val = (u8)(lval >> 24);
771
clk = (val >> 5) & 0x07;
773
chip->asic_sd_sdr104_clk = 206 - clk * 3;
776
chip->power_down_in_ss = 1;
778
chip->power_down_in_ss = 0;
781
chip->ms_power_class_en = val & 0x03;
784
if (chip->hp_watch_bios_hotplug && chip->auto_delink_en) {
787
retval = rtsx_read_pci_cfg_byte(0x00,
788
0x1C, 0x02, 0x58, ®58);
790
return STATUS_SUCCESS;
792
retval = rtsx_read_pci_cfg_byte(0x00,
793
0x1C, 0x02, 0x5B, ®5b);
795
return STATUS_SUCCESS;
798
RTSX_DEBUGP("reg58 = 0x%x, reg5b = 0x%x\n", reg58, reg5b);
800
if ((reg58 == 0x00) && (reg5b == 0x01)) {
801
chip->auto_delink_en = 0;
805
return STATUS_SUCCESS;
808
static int rts5208_init(struct rtsx_chip *chip)
814
RTSX_WRITE_REG(chip, CLK_SEL, 0x03, 0x03);
815
RTSX_READ_REG(chip, CLK_SEL, &val);
822
if (chip->asic_code) {
823
retval = rtsx_read_phy_register(chip, 0x1C, ®);
824
if (retval != STATUS_SUCCESS) {
825
TRACE_RET(chip, STATUS_FAIL);
827
RTSX_DEBUGP("Value of phy register 0x1C is 0x%x\n", reg);
828
chip->ic_version = (reg >> 4) & 0x07;
829
if (reg & PHY_DEBUG_MODE) {
830
chip->phy_debug_mode = 1;
832
chip->phy_debug_mode = 0;
835
RTSX_READ_REG(chip, 0xFE80, &val);
836
chip->ic_version = val;
837
chip->phy_debug_mode = 0;
840
RTSX_READ_REG(chip, PDINFO, &val);
841
RTSX_DEBUGP("PDINFO: 0x%x\n", val);
842
if (val & AUX_PWR_DETECTED) {
843
chip->aux_pwr_exist = 1;
845
chip->aux_pwr_exist = 0;
848
RTSX_READ_REG(chip, 0xFE50, &val);
850
chip->hw_bypass_sd = 1;
852
chip->hw_bypass_sd = 0;
855
rtsx_read_config_byte(chip, 0x0E, &val);
857
SET_SDIO_EXIST(chip);
859
CLR_SDIO_EXIST(chip);
862
if (chip->use_hw_setting) {
863
RTSX_READ_REG(chip, CHANGE_LINK_STATE, &val);
865
chip->auto_delink_en = 1;
867
chip->auto_delink_en = 0;
871
return STATUS_SUCCESS;
874
static int rts5288_init(struct rtsx_chip *chip)
877
u8 val = 0, max_func;
880
RTSX_WRITE_REG(chip, CLK_SEL, 0x03, 0x03);
881
RTSX_READ_REG(chip, CLK_SEL, &val);
888
chip->ic_version = 0;
889
chip->phy_debug_mode = 0;
891
RTSX_READ_REG(chip, PDINFO, &val);
892
RTSX_DEBUGP("PDINFO: 0x%x\n", val);
893
if (val & AUX_PWR_DETECTED) {
894
chip->aux_pwr_exist = 1;
896
chip->aux_pwr_exist = 0;
899
RTSX_READ_REG(chip, CARD_SHARE_MODE, &val);
900
RTSX_DEBUGP("CARD_SHARE_MODE: 0x%x\n", val);
902
chip->baro_pkg = QFN;
904
chip->baro_pkg = LQFP;
907
RTSX_READ_REG(chip, 0xFE5A, &val);
909
chip->hw_bypass_sd = 1;
911
chip->hw_bypass_sd = 0;
914
retval = rtsx_read_cfg_dw(chip, 0, 0x718, &lval);
915
if (retval != STATUS_SUCCESS) {
916
TRACE_RET(chip, STATUS_FAIL);
918
max_func = (u8)((lval >> 29) & 0x07);
919
RTSX_DEBUGP("Max function number: %d\n", max_func);
920
if (max_func == 0x02) {
921
SET_SDIO_EXIST(chip);
923
CLR_SDIO_EXIST(chip);
926
if (chip->use_hw_setting) {
927
RTSX_READ_REG(chip, CHANGE_LINK_STATE, &val);
929
chip->auto_delink_en = 1;
931
chip->auto_delink_en = 0;
934
if (CHECK_BARO_PKG(chip, LQFP)) {
935
chip->lun_mode = SD_MS_1LUN;
937
chip->lun_mode = DEFAULT_SINGLE;
941
return STATUS_SUCCESS;
944
int rtsx_init_chip(struct rtsx_chip *chip)
946
struct sd_info *sd_card = &(chip->sd_card);
947
struct xd_info *xd_card = &(chip->xd_card);
948
struct ms_info *ms_card = &(chip->ms_card);
952
RTSX_DEBUGP("Vendor ID: 0x%04x, Product ID: 0x%04x\n",
953
chip->vendor_id, chip->product_id);
955
chip->ic_version = 0;
961
memset(xd_card, 0, sizeof(struct xd_info));
962
memset(sd_card, 0, sizeof(struct sd_info));
963
memset(ms_card, 0, sizeof(struct ms_info));
965
chip->xd_reset_counter = 0;
966
chip->sd_reset_counter = 0;
967
chip->ms_reset_counter = 0;
969
chip->xd_show_cnt = MAX_SHOW_CNT;
970
chip->sd_show_cnt = MAX_SHOW_CNT;
971
chip->ms_show_cnt = MAX_SHOW_CNT;
974
chip->auto_delink_cnt = 0;
975
chip->auto_delink_allowed = 1;
976
rtsx_set_stat(chip, RTSX_STAT_INIT);
978
chip->aspm_enabled = 0;
979
chip->chip_insert_with_sdio = 0;
982
chip->sdio_counter = 0;
984
chip->phy_debug_mode = 0;
985
chip->sdio_func_exist = 0;
986
memset(chip->sdio_raw_data, 0, 12);
988
for (i = 0; i < MAX_ALLOWED_LUN_CNT; i++) {
989
set_sense_type(chip, i, SENSE_TYPE_NO_SENSE);
990
chip->rw_fail_cnt[i] = 0;
993
if (!check_sd_speed_prior(chip->sd_speed_prior)) {
994
chip->sd_speed_prior = 0x01040203;
996
RTSX_DEBUGP("sd_speed_prior = 0x%08x\n", chip->sd_speed_prior);
998
if (!check_sd_current_prior(chip->sd_current_prior)) {
999
chip->sd_current_prior = 0x00010203;
1001
RTSX_DEBUGP("sd_current_prior = 0x%08x\n", chip->sd_current_prior);
1003
if ((chip->sd_ddr_tx_phase > 31) || (chip->sd_ddr_tx_phase < 0)) {
1004
chip->sd_ddr_tx_phase = 0;
1006
if ((chip->mmc_ddr_tx_phase > 31) || (chip->mmc_ddr_tx_phase < 0)) {
1007
chip->mmc_ddr_tx_phase = 0;
1010
RTSX_WRITE_REG(chip, FPDCTL, SSC_POWER_DOWN, 0);
1012
RTSX_WRITE_REG(chip, CLK_DIV, 0x07, 0x07);
1013
RTSX_DEBUGP("chip->use_hw_setting = %d\n", chip->use_hw_setting);
1015
if (CHECK_PID(chip, 0x5209)) {
1016
retval = rts5209_init(chip);
1017
if (retval != STATUS_SUCCESS) {
1018
TRACE_RET(chip, STATUS_FAIL);
1020
} else if (CHECK_PID(chip, 0x5208)) {
1021
retval = rts5208_init(chip);
1022
if (retval != STATUS_SUCCESS) {
1023
TRACE_RET(chip, STATUS_FAIL);
1025
} else if (CHECK_PID(chip, 0x5288)) {
1026
retval = rts5288_init(chip);
1027
if (retval != STATUS_SUCCESS) {
1028
TRACE_RET(chip, STATUS_FAIL);
1032
if (chip->ss_en == 2) {
1036
RTSX_DEBUGP("chip->asic_code = %d\n", chip->asic_code);
1037
RTSX_DEBUGP("chip->ic_version = 0x%x\n", chip->ic_version);
1038
RTSX_DEBUGP("chip->phy_debug_mode = %d\n", chip->phy_debug_mode);
1039
RTSX_DEBUGP("chip->aux_pwr_exist = %d\n", chip->aux_pwr_exist);
1040
RTSX_DEBUGP("chip->sdio_func_exist = %d\n", chip->sdio_func_exist);
1041
RTSX_DEBUGP("chip->hw_bypass_sd = %d\n", chip->hw_bypass_sd);
1042
RTSX_DEBUGP("chip->aspm_l0s_l1_en = %d\n", chip->aspm_l0s_l1_en);
1043
RTSX_DEBUGP("chip->lun_mode = %d\n", chip->lun_mode);
1044
RTSX_DEBUGP("chip->auto_delink_en = %d\n", chip->auto_delink_en);
1045
RTSX_DEBUGP("chip->ss_en = %d\n", chip->ss_en);
1046
RTSX_DEBUGP("chip->baro_pkg = %d\n", chip->baro_pkg);
1048
if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
1049
chip->card2lun[SD_CARD] = 0;
1050
chip->card2lun[MS_CARD] = 1;
1051
chip->card2lun[XD_CARD] = 0xFF;
1052
chip->lun2card[0] = SD_CARD;
1053
chip->lun2card[1] = MS_CARD;
1055
SET_SDIO_IGNORED(chip);
1056
} else if (CHECK_LUN_MODE(chip, SD_MS_1LUN)) {
1057
chip->card2lun[SD_CARD] = 0;
1058
chip->card2lun[MS_CARD] = 0;
1059
chip->card2lun[XD_CARD] = 0xFF;
1060
chip->lun2card[0] = SD_CARD | MS_CARD;
1063
chip->card2lun[XD_CARD] = 0;
1064
chip->card2lun[SD_CARD] = 0;
1065
chip->card2lun[MS_CARD] = 0;
1066
chip->lun2card[0] = XD_CARD | SD_CARD | MS_CARD;
1070
retval = rtsx_reset_chip(chip);
1071
if (retval != STATUS_SUCCESS) {
1072
TRACE_RET(chip, STATUS_FAIL);
1075
return STATUS_SUCCESS;
1078
void rtsx_release_chip(struct rtsx_chip *chip)
1080
xd_free_l2p_tbl(chip);
1081
ms_free_l2p_tbl(chip);
1082
chip->card_exist = 0;
1083
chip->card_ready = 0;
1086
#if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1087
static inline void rtsx_blink_led(struct rtsx_chip *chip)
1089
if (chip->card_exist && chip->blink_led) {
1090
if (chip->led_toggle_counter < LED_TOGGLE_INTERVAL) {
1091
chip->led_toggle_counter++;
1093
chip->led_toggle_counter = 0;
1094
toggle_gpio(chip, LED_GPIO);
1100
static void rtsx_monitor_aspm_config(struct rtsx_chip *chip)
1102
int maybe_support_aspm, reg_changed;
1104
u8 reg0 = 0, reg1 = 0;
1106
maybe_support_aspm = 0;
1108
rtsx_read_config_byte(chip, LCTLR, ®0);
1109
if (chip->aspm_level[0] != reg0) {
1111
chip->aspm_level[0] = reg0;
1113
if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
1114
rtsx_read_cfg_dw(chip, 1, 0xC0, &tmp);
1116
if (chip->aspm_level[1] != reg1) {
1118
chip->aspm_level[1] = reg1;
1121
if ((reg0 & 0x03) && (reg1 & 0x03)) {
1122
maybe_support_aspm = 1;
1126
maybe_support_aspm = 1;
1131
if (maybe_support_aspm) {
1132
chip->aspm_l0s_l1_en = 0x03;
1134
RTSX_DEBUGP("aspm_level[0] = 0x%02x, aspm_level[1] = 0x%02x\n",
1135
chip->aspm_level[0], chip->aspm_level[1]);
1137
if (chip->aspm_l0s_l1_en) {
1138
chip->aspm_enabled = 1;
1140
chip->aspm_enabled = 0;
1141
chip->sdio_aspm = 0;
1143
rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF,
1144
0x30 | chip->aspm_level[0] | (chip->aspm_level[1] << 2));
1148
void rtsx_polling_func(struct rtsx_chip *chip)
1150
#ifdef SUPPORT_SD_LOCK
1151
struct sd_info *sd_card = &(chip->sd_card);
1155
if (rtsx_chk_stat(chip, RTSX_STAT_SUSPEND))
1158
if (rtsx_chk_stat(chip, RTSX_STAT_DELINK))
1161
if (chip->polling_config) {
1163
rtsx_read_config_byte(chip, 0, &val);
1166
if (rtsx_chk_stat(chip, RTSX_STAT_SS))
1170
if (chip->ocp_int) {
1171
rtsx_read_register(chip, OCPSTAT, &(chip->ocp_stat));
1173
if (CHECK_PID(chip, 0x5209) &&
1174
CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
1175
if (chip->ocp_int & SD_OC_INT)
1176
sd_power_off_card3v3(chip);
1177
if (chip->ocp_int & MS_OC_INT)
1178
ms_power_off_card3v3(chip);
1180
if (chip->card_exist & SD_CARD) {
1181
sd_power_off_card3v3(chip);
1182
} else if (chip->card_exist & MS_CARD) {
1183
ms_power_off_card3v3(chip);
1184
} else if (chip->card_exist & XD_CARD) {
1185
xd_power_off_card3v3(chip);
1193
#ifdef SUPPORT_SD_LOCK
1194
if (sd_card->sd_erase_status) {
1195
if (chip->card_exist & SD_CARD) {
1197
if (CHECK_PID(chip, 0x5209)) {
1198
rtsx_read_register(chip, SD_BUS_STAT, &val);
1199
if (val & SD_DAT0_STATUS) {
1200
sd_card->sd_erase_status = SD_NOT_ERASE;
1201
sd_card->sd_lock_notify = 1;
1202
chip->need_reinit |= SD_CARD;
1205
rtsx_read_register(chip, 0xFD30, &val);
1207
sd_card->sd_erase_status = SD_NOT_ERASE;
1208
sd_card->sd_lock_notify = 1;
1209
chip->need_reinit |= SD_CARD;
1213
sd_card->sd_erase_status = SD_NOT_ERASE;
1218
rtsx_init_cards(chip);
1223
if (CHECK_PID(chip, 0x5288)) {
1226
if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
1228
rtsx_read_cfg_dw(chip, 1, 0x04, &val);
1238
if (ss_allowed && !chip->sd_io) {
1239
if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) {
1240
chip->ss_counter = 0;
1242
if (chip->ss_counter <
1243
(chip->ss_idle_period / POLLING_INTERVAL)) {
1246
rtsx_exclusive_enter_ss(chip);
1252
if (CHECK_PID(chip, 0x5208)) {
1253
rtsx_monitor_aspm_config(chip);
1255
#ifdef SUPPORT_SDIO_ASPM
1256
if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip) &&
1257
chip->aspm_l0s_l1_en && chip->dynamic_aspm) {
1259
dynamic_configure_sdio_aspm(chip);
1261
if (!chip->sdio_aspm) {
1262
RTSX_DEBUGP("SDIO enter ASPM!\n");
1263
rtsx_write_register(chip,
1264
ASPM_FORCE_CTL, 0xFC,
1265
0x30 | (chip->aspm_level[1] << 2));
1266
chip->sdio_aspm = 1;
1273
if (chip->idle_counter < IDLE_MAX_COUNT) {
1274
chip->idle_counter++;
1276
if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) {
1277
RTSX_DEBUGP("Idle state!\n");
1278
rtsx_set_stat(chip, RTSX_STAT_IDLE);
1280
#if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1281
chip->led_toggle_counter = 0;
1283
rtsx_force_power_on(chip, SSC_PDCTL);
1285
turn_off_led(chip, LED_GPIO);
1287
if (chip->auto_power_down && !chip->card_ready && !chip->sd_io) {
1288
rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1293
switch (rtsx_get_stat(chip)) {
1295
#if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1296
rtsx_blink_led(chip);
1298
do_remaining_work(chip);
1301
case RTSX_STAT_IDLE:
1302
if (chip->sd_io && !chip->sd_int) {
1303
try_to_switch_sdio_ctrl(chip);
1305
rtsx_enable_aspm(chip);
1314
if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
1315
#ifdef CONFIG_RTS_PSTOR_DEBUG
1316
if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER | MS_OC_NOW | MS_OC_EVER)) {
1317
RTSX_DEBUGP("Over current, OCPSTAT is 0x%x\n", chip->ocp_stat);
1321
if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
1322
if (chip->card_exist & SD_CARD) {
1323
rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1324
card_power_off(chip, SD_CARD);
1325
chip->card_fail |= SD_CARD;
1328
if (chip->ocp_stat & (MS_OC_NOW | MS_OC_EVER)) {
1329
if (chip->card_exist & MS_CARD) {
1330
rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1331
card_power_off(chip, MS_CARD);
1332
chip->card_fail |= MS_CARD;
1336
if (chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)) {
1337
RTSX_DEBUGP("Over current, OCPSTAT is 0x%x\n", chip->ocp_stat);
1338
if (chip->card_exist & SD_CARD) {
1339
rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1340
chip->card_fail |= SD_CARD;
1341
} else if (chip->card_exist & MS_CARD) {
1342
rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1343
chip->card_fail |= MS_CARD;
1344
} else if (chip->card_exist & XD_CARD) {
1345
rtsx_write_register(chip, CARD_OE, XD_OUTPUT_EN, 0);
1346
chip->card_fail |= XD_CARD;
1348
card_power_off(chip, SD_CARD);
1354
if (chip->auto_delink_en && chip->auto_delink_allowed &&
1355
!chip->card_ready && !chip->card_ejected && !chip->sd_io) {
1356
int enter_L1 = chip->auto_delink_in_L1 && (chip->aspm_l0s_l1_en || chip->ss_en);
1357
int delink_stage1_cnt = chip->delink_stage1_step;
1358
int delink_stage2_cnt = delink_stage1_cnt + chip->delink_stage2_step;
1359
int delink_stage3_cnt = delink_stage2_cnt + chip->delink_stage3_step;
1361
if (chip->auto_delink_cnt <= delink_stage3_cnt) {
1362
if (chip->auto_delink_cnt == delink_stage1_cnt) {
1363
rtsx_set_stat(chip, RTSX_STAT_DELINK);
1365
if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
1366
rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1368
if (chip->card_exist) {
1369
RTSX_DEBUGP("False card inserted, do force delink\n");
1372
rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 1);
1374
rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0x0A);
1377
rtsx_enter_L1(chip);
1380
chip->auto_delink_cnt = delink_stage3_cnt + 1;
1382
RTSX_DEBUGP("No card inserted, do delink\n");
1385
rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 1);
1387
#ifdef HW_INT_WRITE_CLR
1388
if (CHECK_PID(chip, 0x5209)) {
1389
rtsx_writel(chip, RTSX_BIPR, 0xFFFFFFFF);
1390
RTSX_DEBUGP("RTSX_BIPR: 0x%x\n", rtsx_readl(chip, RTSX_BIPR));
1393
rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 0x02);
1396
rtsx_enter_L1(chip);
1401
if (chip->auto_delink_cnt == delink_stage2_cnt) {
1402
RTSX_DEBUGP("Try to do force delink\n");
1408
if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
1409
rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1411
rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0x0A);
1414
chip->auto_delink_cnt++;
1417
chip->auto_delink_cnt = 0;
1421
void rtsx_undo_delink(struct rtsx_chip *chip)
1423
chip->auto_delink_allowed = 0;
1424
rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0x00);
1428
* rtsx_stop_cmd - stop command transfer and DMA transfer
1429
* @chip: Realtek's card reader chip
1430
* @card: flash card type
1432
* Stop command transfer and DMA transfer.
1433
* This function is called in error handler.
1435
void rtsx_stop_cmd(struct rtsx_chip *chip, int card)
1439
for (i = 0; i <= 8; i++) {
1440
int addr = RTSX_HCBAR + i * 4;
1442
reg = rtsx_readl(chip, addr);
1443
RTSX_DEBUGP("BAR (0x%02x): 0x%08x\n", addr, reg);
1445
rtsx_writel(chip, RTSX_HCBCTLR, STOP_CMD);
1446
rtsx_writel(chip, RTSX_HDBCTLR, STOP_DMA);
1448
for (i = 0; i < 16; i++) {
1449
u16 addr = 0xFE20 + (u16)i;
1451
rtsx_read_register(chip, addr, &val);
1452
RTSX_DEBUGP("0x%04X: 0x%02x\n", addr, val);
1455
rtsx_write_register(chip, DMACTL, 0x80, 0x80);
1456
rtsx_write_register(chip, RBCTL, 0x80, 0x80);
1459
#define MAX_RW_REG_CNT 1024
1461
int rtsx_write_register(struct rtsx_chip *chip, u16 addr, u8 mask, u8 data)
1466
val |= (u32)(addr & 0x3FFF) << 16;
1467
val |= (u32)mask << 8;
1470
rtsx_writel(chip, RTSX_HAIMR, val);
1472
for (i = 0; i < MAX_RW_REG_CNT; i++) {
1473
val = rtsx_readl(chip, RTSX_HAIMR);
1474
if ((val & (1 << 31)) == 0) {
1475
if (data != (u8)val) {
1476
TRACE_RET(chip, STATUS_FAIL);
1478
return STATUS_SUCCESS;
1482
TRACE_RET(chip, STATUS_TIMEDOUT);
1485
int rtsx_read_register(struct rtsx_chip *chip, u16 addr, u8 *data)
1494
val |= (u32)(addr & 0x3FFF) << 16;
1496
rtsx_writel(chip, RTSX_HAIMR, val);
1498
for (i = 0; i < MAX_RW_REG_CNT; i++) {
1499
val = rtsx_readl(chip, RTSX_HAIMR);
1500
if ((val & (1 << 31)) == 0) {
1505
if (i >= MAX_RW_REG_CNT) {
1506
TRACE_RET(chip, STATUS_TIMEDOUT);
1510
*data = (u8)(val & 0xFF);
1513
return STATUS_SUCCESS;
1516
int rtsx_write_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 mask, u32 val)
1521
for (i = 0; i < 4; i++) {
1523
RTSX_WRITE_REG(chip, CFGDATA0 + i,
1524
0xFF, (u8)(val & mask & 0xFF));
1532
RTSX_WRITE_REG(chip, CFGADDR0, 0xFF, (u8)addr);
1533
RTSX_WRITE_REG(chip, CFGADDR1, 0xFF, (u8)(addr >> 8));
1535
RTSX_WRITE_REG(chip, CFGRWCTL, 0xFF,
1536
0x80 | mode | ((func_no & 0x03) << 4));
1538
for (i = 0; i < MAX_RW_REG_CNT; i++) {
1539
RTSX_READ_REG(chip, CFGRWCTL, &tmp);
1540
if ((tmp & 0x80) == 0) {
1546
return STATUS_SUCCESS;
1549
int rtsx_read_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 *val)
1555
RTSX_WRITE_REG(chip, CFGADDR0, 0xFF, (u8)addr);
1556
RTSX_WRITE_REG(chip, CFGADDR1, 0xFF, (u8)(addr >> 8));
1557
RTSX_WRITE_REG(chip, CFGRWCTL, 0xFF, 0x80 | ((func_no & 0x03) << 4));
1559
for (i = 0; i < MAX_RW_REG_CNT; i++) {
1560
RTSX_READ_REG(chip, CFGRWCTL, &tmp);
1561
if ((tmp & 0x80) == 0) {
1566
for (i = 0; i < 4; i++) {
1567
RTSX_READ_REG(chip, CFGDATA0 + i, &tmp);
1568
data |= (u32)tmp << (i * 8);
1575
return STATUS_SUCCESS;
1578
int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf, int len)
1581
u16 offset = addr % 4;
1582
u16 aligned_addr = addr - offset;
1586
RTSX_DEBUGP("%s\n", __func__);
1589
TRACE_RET(chip, STATUS_NOMEM);
1592
if ((len + offset) % 4) {
1593
dw_len = (len + offset) / 4 + 1;
1595
dw_len = (len + offset) / 4;
1597
RTSX_DEBUGP("dw_len = %d\n", dw_len);
1599
data = (u32 *)vmalloc(dw_len * 4);
1601
TRACE_RET(chip, STATUS_NOMEM);
1603
memset(data, 0, dw_len * 4);
1605
mask = (u32 *)vmalloc(dw_len * 4);
1608
TRACE_RET(chip, STATUS_NOMEM);
1610
memset(mask, 0, dw_len * 4);
1613
for (i = 0; i < len; i++) {
1614
mask[j] |= 0xFF << (offset * 8);
1615
data[j] |= buf[i] << (offset * 8);
1616
if (++offset == 4) {
1622
RTSX_DUMP(mask, dw_len * 4);
1623
RTSX_DUMP(data, dw_len * 4);
1625
for (i = 0; i < dw_len; i++) {
1626
retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i * 4, mask[i], data[i]);
1627
if (retval != STATUS_SUCCESS) {
1630
TRACE_RET(chip, STATUS_FAIL);
1637
return STATUS_SUCCESS;
1640
int rtsx_read_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf, int len)
1643
u16 offset = addr % 4;
1644
u16 aligned_addr = addr - offset;
1648
RTSX_DEBUGP("%s\n", __func__);
1650
if ((len + offset) % 4) {
1651
dw_len = (len + offset) / 4 + 1;
1653
dw_len = (len + offset) / 4;
1655
RTSX_DEBUGP("dw_len = %d\n", dw_len);
1657
data = (u32 *)vmalloc(dw_len * 4);
1659
TRACE_RET(chip, STATUS_NOMEM);
1662
for (i = 0; i < dw_len; i++) {
1663
retval = rtsx_read_cfg_dw(chip, func, aligned_addr + i * 4, data + i);
1664
if (retval != STATUS_SUCCESS) {
1666
TRACE_RET(chip, STATUS_FAIL);
1673
for (i = 0; i < len; i++) {
1674
buf[i] = (u8)(data[j] >> (offset * 8));
1675
if (++offset == 4) {
1684
return STATUS_SUCCESS;
1687
int rtsx_write_phy_register(struct rtsx_chip *chip, u8 addr, u16 val)
1689
int i, finished = 0;
1692
RTSX_WRITE_REG(chip, PHYDATA0, 0xFF, (u8)val);
1693
RTSX_WRITE_REG(chip, PHYDATA1, 0xFF, (u8)(val >> 8));
1694
RTSX_WRITE_REG(chip, PHYADDR, 0xFF, addr);
1695
RTSX_WRITE_REG(chip, PHYRWCTL, 0xFF, 0x81);
1697
for (i = 0; i < 100000; i++) {
1698
RTSX_READ_REG(chip, PHYRWCTL, &tmp);
1699
if (!(tmp & 0x80)) {
1706
TRACE_RET(chip, STATUS_FAIL);
1709
return STATUS_SUCCESS;
1712
int rtsx_read_phy_register(struct rtsx_chip *chip, u8 addr, u16 *val)
1714
int i, finished = 0;
1718
RTSX_WRITE_REG(chip, PHYADDR, 0xFF, addr);
1719
RTSX_WRITE_REG(chip, PHYRWCTL, 0xFF, 0x80);
1721
for (i = 0; i < 100000; i++) {
1722
RTSX_READ_REG(chip, PHYRWCTL, &tmp);
1723
if (!(tmp & 0x80)) {
1730
TRACE_RET(chip, STATUS_FAIL);
1733
RTSX_READ_REG(chip, PHYDATA0, &tmp);
1735
RTSX_READ_REG(chip, PHYDATA1, &tmp);
1736
data |= (u16)tmp << 8;
1741
return STATUS_SUCCESS;
1744
int rtsx_read_efuse(struct rtsx_chip *chip, u8 addr, u8 *val)
1749
RTSX_WRITE_REG(chip, EFUSE_CTRL, 0xFF, 0x80|addr);
1751
for (i = 0; i < 100; i++) {
1752
RTSX_READ_REG(chip, EFUSE_CTRL, &data);
1759
TRACE_RET(chip, STATUS_TIMEDOUT);
1762
RTSX_READ_REG(chip, EFUSE_DATA, &data);
1766
return STATUS_SUCCESS;
1769
int rtsx_write_efuse(struct rtsx_chip *chip, u8 addr, u8 val)
1772
u8 data = 0, tmp = 0xFF;
1774
for (i = 0; i < 8; i++) {
1775
if (val & (u8)(1 << i))
1778
tmp &= (~(u8)(1 << i));
1779
RTSX_DEBUGP("Write 0x%x to 0x%x\n", tmp, addr);
1781
RTSX_WRITE_REG(chip, EFUSE_DATA, 0xFF, tmp);
1782
RTSX_WRITE_REG(chip, EFUSE_CTRL, 0xFF, 0xA0|addr);
1784
for (j = 0; j < 100; j++) {
1785
RTSX_READ_REG(chip, EFUSE_CTRL, &data);
1792
TRACE_RET(chip, STATUS_TIMEDOUT);
1798
return STATUS_SUCCESS;
1801
int rtsx_clr_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1806
retval = rtsx_read_phy_register(chip, reg, &value);
1807
if (retval != STATUS_SUCCESS) {
1808
TRACE_RET(chip, STATUS_FAIL);
1810
if (value & (1 << bit)) {
1811
value &= ~(1 << bit);
1812
retval = rtsx_write_phy_register(chip, reg, value);
1813
if (retval != STATUS_SUCCESS) {
1814
TRACE_RET(chip, STATUS_FAIL);
1818
return STATUS_SUCCESS;
1821
int rtsx_set_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1826
retval = rtsx_read_phy_register(chip, reg, &value);
1827
if (retval != STATUS_SUCCESS) {
1828
TRACE_RET(chip, STATUS_FAIL);
1830
if (0 == (value & (1 << bit))) {
1831
value |= (1 << bit);
1832
retval = rtsx_write_phy_register(chip, reg, value);
1833
if (retval != STATUS_SUCCESS) {
1834
TRACE_RET(chip, STATUS_FAIL);
1838
return STATUS_SUCCESS;
1841
int rtsx_check_link_ready(struct rtsx_chip *chip)
1845
RTSX_READ_REG(chip, IRQSTAT0, &val);
1847
RTSX_DEBUGP("IRQSTAT0: 0x%x\n", val);
1848
if (val & LINK_RDY_INT) {
1849
RTSX_DEBUGP("Delinked!\n");
1850
rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
1854
return STATUS_SUCCESS;
1857
static void rtsx_handle_pm_dstate(struct rtsx_chip *chip, u8 dstate)
1861
RTSX_DEBUGP("%04x set pm_dstate to %d\n", chip->product_id, dstate);
1863
if (CHK_SDIO_EXIST(chip)) {
1866
if (CHECK_PID(chip, 0x5288)) {
1871
rtsx_read_cfg_dw(chip, func_no, 0x84, &ultmp);
1872
RTSX_DEBUGP("pm_dstate of function %d: 0x%x\n", (int)func_no, ultmp);
1873
rtsx_write_cfg_dw(chip, func_no, 0x84, 0xFF, dstate);
1876
rtsx_write_config_byte(chip, 0x44, dstate);
1877
rtsx_write_config_byte(chip, 0x45, 0);
1880
void rtsx_enter_L1(struct rtsx_chip *chip)
1882
rtsx_handle_pm_dstate(chip, 2);
1885
void rtsx_exit_L1(struct rtsx_chip *chip)
1887
rtsx_write_config_byte(chip, 0x44, 0);
1888
rtsx_write_config_byte(chip, 0x45, 0);
1891
void rtsx_enter_ss(struct rtsx_chip *chip)
1893
RTSX_DEBUGP("Enter Selective Suspend State!\n");
1895
rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
1897
if (chip->power_down_in_ss) {
1898
rtsx_power_off_card(chip);
1899
rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1902
if (CHK_SDIO_EXIST(chip)) {
1903
if (CHECK_PID(chip, 0x5288)) {
1904
rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF00, 0x0100);
1906
rtsx_write_cfg_dw(chip, 1, 0xC0, 0xFF00, 0x0100);
1910
if (chip->auto_delink_en) {
1911
rtsx_write_register(chip, HOST_SLEEP_STATE, 0x01, 0x01);
1913
if (!chip->phy_debug_mode) {
1915
tmp = rtsx_readl(chip, RTSX_BIER);
1917
rtsx_writel(chip, RTSX_BIER, tmp);
1920
rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 0);
1923
rtsx_enter_L1(chip);
1925
RTSX_CLR_DELINK(chip);
1926
rtsx_set_stat(chip, RTSX_STAT_SS);
1929
void rtsx_exit_ss(struct rtsx_chip *chip)
1931
RTSX_DEBUGP("Exit Selective Suspend State!\n");
1935
if (chip->power_down_in_ss) {
1936
rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
1940
if (RTSX_TST_DELINK(chip)) {
1941
chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1942
rtsx_reinit_cards(chip, 1);
1943
RTSX_CLR_DELINK(chip);
1944
} else if (chip->power_down_in_ss) {
1945
chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1946
rtsx_reinit_cards(chip, 0);
1950
int rtsx_pre_handle_interrupt(struct rtsx_chip *chip)
1952
u32 status, int_enable;
1957
if (CHECK_PID(chip, 0x5209)) {
1958
if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
1959
ocp_int = MS_OC_INT | SD_OC_INT;
1961
ocp_int = SD_OC_INT;
1969
chip->ss_counter = 0;
1970
if (rtsx_get_stat(chip) == RTSX_STAT_SS) {
1973
rtsx_set_stat(chip, RTSX_STAT_RUN);
1977
int_enable = rtsx_readl(chip, RTSX_BIER);
1978
chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
1980
#ifdef HW_INT_WRITE_CLR
1981
if (CHECK_PID(chip, 0x5209)) {
1982
rtsx_writel(chip, RTSX_BIPR, chip->int_reg);
1986
if (((chip->int_reg & int_enable) == 0) || (chip->int_reg == 0xFFFFFFFF))
1989
if (!chip->msi_en) {
1990
if (CHECK_PID(chip, 0x5209)) {
1992
rtsx_read_config_byte(chip, 0x05, &val);
1999
status = chip->int_reg &= (int_enable | 0x7FFFFF);
2001
if (status & CARD_INT) {
2002
chip->auto_delink_cnt = 0;
2004
if (status & SD_INT) {
2005
if (status & SD_EXIST) {
2006
set_bit(SD_NR, &(chip->need_reset));
2008
set_bit(SD_NR, &(chip->need_release));
2009
chip->sd_reset_counter = 0;
2010
chip->sd_show_cnt = 0;
2011
clear_bit(SD_NR, &(chip->need_reset));
2014
/* If multi-luns, it's possible that
2015
when plugging/unplugging one card
2016
there is another card which still
2017
exists in the slot. In this case,
2018
all existed cards should be reset.
2020
if (exit_ss && (status & SD_EXIST))
2021
set_bit(SD_NR, &(chip->need_reinit));
2023
if (!CHECK_PID(chip, 0x5288) || CHECK_BARO_PKG(chip, QFN)) {
2024
if (status & XD_INT) {
2025
if (status & XD_EXIST) {
2026
set_bit(XD_NR, &(chip->need_reset));
2028
set_bit(XD_NR, &(chip->need_release));
2029
chip->xd_reset_counter = 0;
2030
chip->xd_show_cnt = 0;
2031
clear_bit(XD_NR, &(chip->need_reset));
2034
if (exit_ss && (status & XD_EXIST))
2035
set_bit(XD_NR, &(chip->need_reinit));
2038
if (status & MS_INT) {
2039
if (status & MS_EXIST) {
2040
set_bit(MS_NR, &(chip->need_reset));
2042
set_bit(MS_NR, &(chip->need_release));
2043
chip->ms_reset_counter = 0;
2044
chip->ms_show_cnt = 0;
2045
clear_bit(MS_NR, &(chip->need_reset));
2048
if (exit_ss && (status & MS_EXIST))
2049
set_bit(MS_NR, &(chip->need_reinit));
2054
chip->ocp_int = ocp_int & status;
2058
if (chip->int_reg & DATA_DONE_INT)
2059
chip->int_reg &= ~(u32)DATA_DONE_INT;
2062
return STATUS_SUCCESS;
2065
void rtsx_do_before_power_down(struct rtsx_chip *chip, int pm_stat)
2069
RTSX_DEBUGP("rtsx_do_before_power_down, pm_stat = %d\n", pm_stat);
2071
rtsx_set_stat(chip, RTSX_STAT_SUSPEND);
2073
retval = rtsx_force_power_on(chip, SSC_PDCTL);
2074
if (retval != STATUS_SUCCESS)
2077
rtsx_release_cards(chip);
2078
rtsx_disable_bus_int(chip);
2079
turn_off_led(chip, LED_GPIO);
2081
#ifdef HW_AUTO_SWITCH_SD_BUS
2083
chip->sdio_in_charge = 1;
2084
if (CHECK_PID(chip, 0x5208)) {
2085
rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
2086
/* Enable sdio_bus_auto_switch */
2087
rtsx_write_register(chip, 0xFE70, 0x80, 0x80);
2088
} else if (CHECK_PID(chip, 0x5288)) {
2089
rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
2090
/* Enable sdio_bus_auto_switch */
2091
rtsx_write_register(chip, 0xFE5A, 0x08, 0x08);
2092
} else if (CHECK_PID(chip, 0x5209)) {
2093
rtsx_write_register(chip, TLPTISTAT, 0x10, 0x10);
2094
/* Enable sdio_bus_auto_switch */
2095
rtsx_write_register(chip, SDIO_CFG, SDIO_BUS_AUTO_SWITCH, SDIO_BUS_AUTO_SWITCH);
2100
if (CHECK_PID(chip, 0x5208) && (chip->ic_version >= IC_VER_D)) {
2101
/* u_force_clkreq_0 */
2102
rtsx_write_register(chip, PETXCFG, 0x08, 0x08);
2103
} else if (CHECK_PID(chip, 0x5209)) {
2104
/* u_force_clkreq_0 */
2105
rtsx_write_register(chip, PETXCFG, 0x08, 0x08);
2108
if (pm_stat == PM_S1) {
2109
RTSX_DEBUGP("Host enter S1\n");
2110
rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, HOST_ENTER_S1);
2111
} else if (pm_stat == PM_S3) {
2112
if (chip->s3_pwr_off_delay > 0) {
2113
wait_timeout(chip->s3_pwr_off_delay);
2115
RTSX_DEBUGP("Host enter S3\n");
2116
rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, HOST_ENTER_S3);
2119
if (chip->do_delink_before_power_down && chip->auto_delink_en) {
2120
rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 2);
2123
rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
2127
chip->card_exist = 0;
2130
void rtsx_enable_aspm(struct rtsx_chip *chip)
2132
if (chip->aspm_l0s_l1_en && chip->dynamic_aspm) {
2133
if (!chip->aspm_enabled) {
2134
RTSX_DEBUGP("Try to enable ASPM\n");
2135
chip->aspm_enabled = 1;
2137
if (chip->asic_code && CHECK_PID(chip, 0x5208))
2138
rtsx_write_phy_register(chip, 0x07, 0);
2139
if (CHECK_PID(chip, 0x5208)) {
2140
rtsx_write_register(chip, ASPM_FORCE_CTL, 0xF3,
2141
0x30 | chip->aspm_level[0]);
2143
rtsx_write_config_byte(chip, LCTLR, chip->aspm_l0s_l1_en);
2146
if (CHK_SDIO_EXIST(chip)) {
2147
u16 val = chip->aspm_l0s_l1_en | 0x0100;
2148
if (CHECK_PID(chip, 0x5288)) {
2149
rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFFFF, val);
2151
rtsx_write_cfg_dw(chip, 1, 0xC0, 0xFFFF, val);
2160
void rtsx_disable_aspm(struct rtsx_chip *chip)
2162
if (CHECK_PID(chip, 0x5208))
2163
rtsx_monitor_aspm_config(chip);
2165
if (chip->aspm_l0s_l1_en && chip->dynamic_aspm) {
2166
if (chip->aspm_enabled) {
2167
RTSX_DEBUGP("Try to disable ASPM\n");
2168
chip->aspm_enabled = 0;
2170
if (chip->asic_code && CHECK_PID(chip, 0x5208))
2171
rtsx_write_phy_register(chip, 0x07, 0x0129);
2172
if (CHECK_PID(chip, 0x5208)) {
2173
rtsx_write_register(chip, ASPM_FORCE_CTL, 0xF3, 0x30);
2175
rtsx_write_config_byte(chip, LCTLR, 0x00);
2184
int rtsx_read_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2192
TRACE_RET(chip, STATUS_ERROR);
2196
reg_addr = PPBUF_BASE2;
2197
for (i = 0; i < buf_len/256; i++) {
2198
rtsx_init_cmd(chip);
2200
for (j = 0; j < 256; j++)
2201
rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2203
retval = rtsx_send_cmd(chip, 0, 250);
2205
TRACE_RET(chip, STATUS_FAIL);
2208
memcpy(ptr, rtsx_get_cmd_data(chip), 256);
2213
rtsx_init_cmd(chip);
2215
for (j = 0; j < buf_len%256; j++)
2216
rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2218
retval = rtsx_send_cmd(chip, 0, 250);
2220
TRACE_RET(chip, STATUS_FAIL);
2224
memcpy(ptr, rtsx_get_cmd_data(chip), buf_len%256);
2226
return STATUS_SUCCESS;
2229
int rtsx_write_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2237
TRACE_RET(chip, STATUS_ERROR);
2241
reg_addr = PPBUF_BASE2;
2242
for (i = 0; i < buf_len/256; i++) {
2243
rtsx_init_cmd(chip);
2245
for (j = 0; j < 256; j++) {
2246
rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF, *ptr);
2250
retval = rtsx_send_cmd(chip, 0, 250);
2252
TRACE_RET(chip, STATUS_FAIL);
2257
rtsx_init_cmd(chip);
2259
for (j = 0; j < buf_len%256; j++) {
2260
rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF, *ptr);
2264
retval = rtsx_send_cmd(chip, 0, 250);
2266
TRACE_RET(chip, STATUS_FAIL);
2270
return STATUS_SUCCESS;
2273
int rtsx_check_chip_exist(struct rtsx_chip *chip)
2275
if (rtsx_readl(chip, 0) == 0xFFFFFFFF) {
2276
TRACE_RET(chip, STATUS_FAIL);
2279
return STATUS_SUCCESS;
2282
int rtsx_force_power_on(struct rtsx_chip *chip, u8 ctl)
2287
if (ctl & SSC_PDCTL)
2288
mask |= SSC_POWER_DOWN;
2291
if (ctl & OC_PDCTL) {
2292
mask |= SD_OC_POWER_DOWN;
2293
if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
2294
mask |= MS_OC_POWER_DOWN;
2300
retval = rtsx_write_register(chip, FPDCTL, mask, 0);
2301
if (retval != STATUS_SUCCESS) {
2302
TRACE_RET(chip, STATUS_FAIL);
2305
if (CHECK_PID(chip, 0x5288))
2309
return STATUS_SUCCESS;
2312
int rtsx_force_power_down(struct rtsx_chip *chip, u8 ctl)
2315
u8 mask = 0, val = 0;
2317
if (ctl & SSC_PDCTL)
2318
mask |= SSC_POWER_DOWN;
2321
if (ctl & OC_PDCTL) {
2322
mask |= SD_OC_POWER_DOWN;
2323
if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2324
mask |= MS_OC_POWER_DOWN;
2330
retval = rtsx_write_register(chip, FPDCTL, mask, val);
2331
if (retval != STATUS_SUCCESS) {
2332
TRACE_RET(chip, STATUS_FAIL);
2336
return STATUS_SUCCESS;