xref: /openbmc/linux/drivers/staging/rts5208/rtsx_chip.c (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
1  // SPDX-License-Identifier: GPL-2.0+
2  /*
3   * Driver for Realtek PCI-Express card reader
4   *
5   * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved.
6   *
7   * Author:
8   *   Wei WANG (wei_wang@realsil.com.cn)
9   *   Micky Ching (micky_ching@realsil.com.cn)
10   */
11  
12  #include <linux/blkdev.h>
13  #include <linux/kthread.h>
14  #include <linux/sched.h>
15  #include <linux/workqueue.h>
16  #include <linux/vmalloc.h>
17  
18  #include "rtsx.h"
19  #include "sd.h"
20  #include "xd.h"
21  #include "ms.h"
22  
rtsx_calibration(struct rtsx_chip * chip)23  static void rtsx_calibration(struct rtsx_chip *chip)
24  {
25  	rtsx_write_phy_register(chip, 0x1B, 0x135E);
26  	wait_timeout(10);
27  	rtsx_write_phy_register(chip, 0x00, 0x0280);
28  	rtsx_write_phy_register(chip, 0x01, 0x7112);
29  	rtsx_write_phy_register(chip, 0x01, 0x7110);
30  	rtsx_write_phy_register(chip, 0x01, 0x7112);
31  	rtsx_write_phy_register(chip, 0x01, 0x7113);
32  	rtsx_write_phy_register(chip, 0x00, 0x0288);
33  }
34  
rtsx_enable_card_int(struct rtsx_chip * chip)35  void rtsx_enable_card_int(struct rtsx_chip *chip)
36  {
37  	u32 reg = rtsx_readl(chip, RTSX_BIER);
38  	int i;
39  
40  	for (i = 0; i <= chip->max_lun; i++) {
41  		if (chip->lun2card[i] & XD_CARD)
42  			reg |= XD_INT_EN;
43  		if (chip->lun2card[i] & SD_CARD)
44  			reg |= SD_INT_EN;
45  		if (chip->lun2card[i] & MS_CARD)
46  			reg |= MS_INT_EN;
47  	}
48  	if (chip->hw_bypass_sd)
49  		reg &= ~((u32)SD_INT_EN);
50  
51  	rtsx_writel(chip, RTSX_BIER, reg);
52  }
53  
rtsx_enable_bus_int(struct rtsx_chip * chip)54  void rtsx_enable_bus_int(struct rtsx_chip *chip)
55  {
56  	u32 reg = 0;
57  #ifndef DISABLE_CARD_INT
58  	int i;
59  #endif
60  
61  	reg = TRANS_OK_INT_EN | TRANS_FAIL_INT_EN;
62  
63  #ifndef DISABLE_CARD_INT
64  	for (i = 0; i <= chip->max_lun; i++) {
65  		dev_dbg(rtsx_dev(chip), "lun2card[%d] = 0x%02x\n",
66  			i, chip->lun2card[i]);
67  
68  		if (chip->lun2card[i] & XD_CARD)
69  			reg |= XD_INT_EN;
70  		if (chip->lun2card[i] & SD_CARD)
71  			reg |= SD_INT_EN;
72  		if (chip->lun2card[i] & MS_CARD)
73  			reg |= MS_INT_EN;
74  	}
75  	if (chip->hw_bypass_sd)
76  		reg &= ~((u32)SD_INT_EN);
77  #endif
78  
79  	if (chip->ic_version >= IC_VER_C)
80  		reg |= DELINK_INT_EN;
81  #ifdef SUPPORT_OCP
82  	reg |= OC_INT_EN;
83  #endif
84  	if (!chip->adma_mode)
85  		reg |= DATA_DONE_INT_EN;
86  
87  	/* Enable Bus Interrupt */
88  	rtsx_writel(chip, RTSX_BIER, reg);
89  
90  	dev_dbg(rtsx_dev(chip), "RTSX_BIER: 0x%08x\n", reg);
91  }
92  
rtsx_disable_bus_int(struct rtsx_chip * chip)93  void rtsx_disable_bus_int(struct rtsx_chip *chip)
94  {
95  	rtsx_writel(chip, RTSX_BIER, 0);
96  }
97  
rtsx_pre_handle_sdio_old(struct rtsx_chip * chip)98  static int rtsx_pre_handle_sdio_old(struct rtsx_chip *chip)
99  {
100  	int retval;
101  
102  	if (chip->ignore_sd && CHK_SDIO_EXIST(chip)) {
103  		if (chip->asic_code) {
104  			retval = rtsx_write_register(chip, CARD_PULL_CTL5,
105  						     0xFF,
106  						     MS_INS_PU | SD_WP_PU |
107  						     SD_CD_PU | SD_CMD_PU);
108  			if (retval)
109  				return retval;
110  		} else {
111  			retval = rtsx_write_register(chip, FPGA_PULL_CTL,
112  						     0xFF,
113  						     FPGA_SD_PULL_CTL_EN);
114  			if (retval)
115  				return retval;
116  		}
117  		retval = rtsx_write_register(chip, CARD_SHARE_MODE, 0xFF,
118  					     CARD_SHARE_48_SD);
119  		if (retval)
120  			return retval;
121  
122  		/* Enable SDIO internal clock */
123  		retval = rtsx_write_register(chip, 0xFF2C, 0x01, 0x01);
124  		if (retval)
125  			return retval;
126  
127  		retval = rtsx_write_register(chip, SDIO_CTRL, 0xFF,
128  					     SDIO_BUS_CTRL | SDIO_CD_CTRL);
129  		if (retval)
130  			return retval;
131  
132  		chip->sd_int = 1;
133  		chip->sd_io = 1;
134  	} else {
135  		chip->need_reset |= SD_CARD;
136  	}
137  
138  	return STATUS_SUCCESS;
139  }
140  
141  #ifdef HW_AUTO_SWITCH_SD_BUS
rtsx_pre_handle_sdio_new(struct rtsx_chip * chip)142  static int rtsx_pre_handle_sdio_new(struct rtsx_chip *chip)
143  {
144  	u8 tmp;
145  	bool sw_bypass_sd = false;
146  	int retval;
147  
148  	if (chip->driver_first_load) {
149  		if (CHECK_PID(chip, 0x5288)) {
150  			retval = rtsx_read_register(chip, 0xFE5A, &tmp);
151  			if (retval)
152  				return retval;
153  			if (tmp & 0x08)
154  				sw_bypass_sd = true;
155  		} else if (CHECK_PID(chip, 0x5208)) {
156  			retval = rtsx_read_register(chip, 0xFE70, &tmp);
157  			if (retval)
158  				return retval;
159  			if (tmp & 0x80)
160  				sw_bypass_sd = true;
161  		}
162  	} else {
163  		if (chip->sdio_in_charge)
164  			sw_bypass_sd = true;
165  	}
166  	dev_dbg(rtsx_dev(chip), "chip->sdio_in_charge = %d\n",
167  		chip->sdio_in_charge);
168  	dev_dbg(rtsx_dev(chip), "chip->driver_first_load = %d\n",
169  		chip->driver_first_load);
170  	dev_dbg(rtsx_dev(chip), "sw_bypass_sd = %d\n",
171  		sw_bypass_sd);
172  
173  	if (sw_bypass_sd) {
174  		u8 cd_toggle_mask = 0;
175  
176  		retval = rtsx_read_register(chip, TLPTISTAT, &tmp);
177  		if (retval)
178  			return retval;
179  		cd_toggle_mask = 0x08;
180  
181  		if (tmp & cd_toggle_mask) {
182  			/* Disable sdio_bus_auto_switch */
183  			if (CHECK_PID(chip, 0x5288)) {
184  				retval = rtsx_write_register(chip, 0xFE5A,
185  							     0x08, 0x00);
186  				if (retval)
187  					return retval;
188  			} else if (CHECK_PID(chip, 0x5208)) {
189  				retval = rtsx_write_register(chip, 0xFE70,
190  							     0x80, 0x00);
191  				if (retval)
192  					return retval;
193  			}
194  
195  			retval = rtsx_write_register(chip, TLPTISTAT, 0xFF,
196  						     tmp);
197  			if (retval)
198  				return retval;
199  
200  			chip->need_reset |= SD_CARD;
201  		} else {
202  			dev_dbg(rtsx_dev(chip), "Chip inserted with SDIO!\n");
203  
204  			if (chip->asic_code) {
205  				retval = sd_pull_ctl_enable(chip);
206  				if (retval != STATUS_SUCCESS)
207  					return STATUS_FAIL;
208  			} else {
209  				retval = rtsx_write_register
210  						(chip, FPGA_PULL_CTL,
211  						 FPGA_SD_PULL_CTL_BIT | 0x20,
212  						 0);
213  				if (retval)
214  					return retval;
215  			}
216  			retval = card_share_mode(chip, SD_CARD);
217  			if (retval != STATUS_SUCCESS)
218  				return STATUS_FAIL;
219  
220  			/* Enable sdio_bus_auto_switch */
221  			if (CHECK_PID(chip, 0x5288)) {
222  				retval = rtsx_write_register(chip, 0xFE5A,
223  							     0x08, 0x08);
224  				if (retval)
225  					return retval;
226  			} else if (CHECK_PID(chip, 0x5208)) {
227  				retval = rtsx_write_register(chip, 0xFE70,
228  							     0x80, 0x80);
229  				if (retval)
230  					return retval;
231  			}
232  
233  			chip->chip_insert_with_sdio = 1;
234  			chip->sd_io = 1;
235  		}
236  	} else {
237  		retval = rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
238  		if (retval)
239  			return retval;
240  
241  		chip->need_reset |= SD_CARD;
242  	}
243  
244  	return STATUS_SUCCESS;
245  }
246  #endif
247  
rtsx_reset_aspm(struct rtsx_chip * chip)248  static int rtsx_reset_aspm(struct rtsx_chip *chip)
249  {
250  	int ret;
251  
252  	if (chip->dynamic_aspm) {
253  		if (!CHK_SDIO_EXIST(chip) || !CHECK_PID(chip, 0x5288))
254  			return STATUS_SUCCESS;
255  
256  		ret = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFF,
257  					chip->aspm_l0s_l1_en);
258  		if (ret != STATUS_SUCCESS)
259  			return STATUS_FAIL;
260  
261  		return STATUS_SUCCESS;
262  	}
263  
264  	if (CHECK_PID(chip, 0x5208)) {
265  		ret = rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF, 0x3F);
266  		if (ret)
267  			return ret;
268  	}
269  	ret = rtsx_write_config_byte(chip, LCTLR, chip->aspm_l0s_l1_en);
270  	if (ret != STATUS_SUCCESS)
271  		return STATUS_FAIL;
272  
273  	chip->aspm_level[0] = chip->aspm_l0s_l1_en;
274  	if (CHK_SDIO_EXIST(chip)) {
275  		chip->aspm_level[1] = chip->aspm_l0s_l1_en;
276  		ret = rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
277  					0xC0, 0xFF, chip->aspm_l0s_l1_en);
278  		if (ret != STATUS_SUCCESS)
279  			return STATUS_FAIL;
280  	}
281  
282  	chip->aspm_enabled = 1;
283  
284  	return STATUS_SUCCESS;
285  }
286  
rtsx_enable_pcie_intr(struct rtsx_chip * chip)287  static int rtsx_enable_pcie_intr(struct rtsx_chip *chip)
288  {
289  	int ret;
290  
291  	if (!chip->asic_code || !CHECK_PID(chip, 0x5208)) {
292  		rtsx_enable_bus_int(chip);
293  		return STATUS_SUCCESS;
294  	}
295  
296  	if (chip->phy_debug_mode) {
297  		ret = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0);
298  		if (ret)
299  			return ret;
300  		rtsx_disable_bus_int(chip);
301  	} else {
302  		rtsx_enable_bus_int(chip);
303  	}
304  
305  	if (chip->ic_version >= IC_VER_D) {
306  		u16 reg;
307  
308  		ret = rtsx_read_phy_register(chip, 0x00, &reg);
309  		if (ret != STATUS_SUCCESS)
310  			return STATUS_FAIL;
311  
312  		reg &= 0xFE7F;
313  		reg |= 0x80;
314  		ret = rtsx_write_phy_register(chip, 0x00, reg);
315  		if (ret != STATUS_SUCCESS)
316  			return STATUS_FAIL;
317  
318  		ret = rtsx_read_phy_register(chip, 0x1C, &reg);
319  		if (ret != STATUS_SUCCESS)
320  			return STATUS_FAIL;
321  
322  		reg &= 0xFFF7;
323  		ret = rtsx_write_phy_register(chip, 0x1C, reg);
324  		if (ret != STATUS_SUCCESS)
325  			return STATUS_FAIL;
326  	}
327  
328  	if (chip->driver_first_load && chip->ic_version < IC_VER_C)
329  		rtsx_calibration(chip);
330  
331  	return STATUS_SUCCESS;
332  }
333  
rtsx_reset_chip(struct rtsx_chip * chip)334  int rtsx_reset_chip(struct rtsx_chip *chip)
335  {
336  	int retval;
337  
338  	rtsx_writel(chip, RTSX_HCBAR, chip->host_cmds_addr);
339  
340  	rtsx_disable_aspm(chip);
341  
342  	retval = rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 0x00);
343  	if (retval)
344  		return retval;
345  
346  	/* Disable card clock */
347  	retval = rtsx_write_register(chip, CARD_CLK_EN, 0x1E, 0);
348  	if (retval)
349  		return retval;
350  
351  #ifdef SUPPORT_OCP
352  	/* SSC power on, OCD power on */
353  	if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
354  		retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN, 0);
355  		if (retval)
356  			return retval;
357  	} else {
358  		retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN,
359  					     MS_OC_POWER_DOWN);
360  		if (retval)
361  			return retval;
362  	}
363  
364  	retval = rtsx_write_register(chip, OCPPARA1, OCP_TIME_MASK,
365  				     OCP_TIME_800);
366  	if (retval)
367  		return retval;
368  	retval = rtsx_write_register(chip, OCPPARA2, OCP_THD_MASK,
369  				     OCP_THD_244_946);
370  	if (retval)
371  		return retval;
372  	retval = rtsx_write_register(chip, OCPCTL, 0xFF,
373  				     CARD_OC_INT_EN | CARD_DETECT_EN);
374  	if (retval)
375  		return retval;
376  #else
377  	/* OC power down */
378  	retval = rtsx_write_register(chip, FPDCTL, OC_POWER_DOWN,
379  				     OC_POWER_DOWN);
380  	if (retval)
381  		return retval;
382  #endif
383  
384  	if (!CHECK_PID(chip, 0x5288)) {
385  		retval = rtsx_write_register(chip, CARD_GPIO_DIR, 0xFF, 0x03);
386  		if (retval)
387  			return retval;
388  	}
389  
390  	/* Turn off LED */
391  	retval = rtsx_write_register(chip, CARD_GPIO, 0xFF, 0x03);
392  	if (retval)
393  		return retval;
394  
395  	/* Reset delink mode */
396  	retval = rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0);
397  	if (retval)
398  		return retval;
399  
400  	/* Card driving select */
401  	retval = rtsx_write_register(chip, CARD_DRIVE_SEL, 0xFF,
402  				     chip->card_drive_sel);
403  	if (retval)
404  		return retval;
405  
406  #ifdef LED_AUTO_BLINK
407  	retval = rtsx_write_register(chip, CARD_AUTO_BLINK, 0xFF,
408  				     LED_BLINK_SPEED | BLINK_EN | LED_GPIO0);
409  	if (retval)
410  		return retval;
411  #endif
412  
413  	if (chip->asic_code) {
414  		/* Enable SSC Clock */
415  		retval = rtsx_write_register(chip, SSC_CTL1, 0xFF,
416  					     SSC_8X_EN | SSC_SEL_4M);
417  		if (retval)
418  			return retval;
419  		retval = rtsx_write_register(chip, SSC_CTL2, 0xFF, 0x12);
420  		if (retval)
421  			return retval;
422  	}
423  
424  	/*
425  	 * Disable cd_pwr_save (u_force_rst_core_en=0, u_cd_rst_core_en=0)
426  	 *    0xFE5B
427  	 *    bit[1]    u_cd_rst_core_en	rst_value = 0
428  	 *    bit[2]    u_force_rst_core_en	rst_value = 0
429  	 *    bit[5]    u_mac_phy_rst_n_dbg	rst_value = 1
430  	 *    bit[4]	u_non_sticky_rst_n_dbg	rst_value = 0
431  	 */
432  	retval = rtsx_write_register(chip, CHANGE_LINK_STATE, 0x16, 0x10);
433  	if (retval)
434  		return retval;
435  
436  	/* Enable ASPM */
437  	if (chip->aspm_l0s_l1_en) {
438  		retval = rtsx_reset_aspm(chip);
439  		if (retval != STATUS_SUCCESS)
440  			return STATUS_FAIL;
441  	} else {
442  		if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
443  			retval = rtsx_write_phy_register(chip, 0x07, 0x0129);
444  			if (retval != STATUS_SUCCESS)
445  				return STATUS_FAIL;
446  		}
447  		retval = rtsx_write_config_byte(chip, LCTLR,
448  						chip->aspm_l0s_l1_en);
449  		if (retval != STATUS_SUCCESS)
450  			return STATUS_FAIL;
451  	}
452  
453  	retval = rtsx_write_config_byte(chip, 0x81, 1);
454  	if (retval != STATUS_SUCCESS)
455  		return STATUS_FAIL;
456  
457  	if (CHK_SDIO_EXIST(chip)) {
458  		retval = rtsx_write_cfg_dw(chip,
459  					   CHECK_PID(chip, 0x5288) ? 2 : 1,
460  					   0xC0, 0xFF00, 0x0100);
461  
462  		if (retval != STATUS_SUCCESS)
463  			return STATUS_FAIL;
464  	}
465  
466  	if (CHECK_PID(chip, 0x5288) && !CHK_SDIO_EXIST(chip)) {
467  		retval = rtsx_write_cfg_dw(chip, 2, 0xC0, 0xFFFF, 0x0103);
468  		if (retval != STATUS_SUCCESS)
469  			return STATUS_FAIL;
470  
471  		retval = rtsx_write_cfg_dw(chip, 2, 0x84, 0xFF, 0x03);
472  		if (retval != STATUS_SUCCESS)
473  			return STATUS_FAIL;
474  	}
475  
476  	retval = rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT,
477  				     LINK_RDY_INT);
478  	if (retval)
479  		return retval;
480  
481  	retval = rtsx_write_register(chip, PERST_GLITCH_WIDTH, 0xFF, 0x80);
482  	if (retval)
483  		return retval;
484  
485  	retval = rtsx_enable_pcie_intr(chip);
486  	if (retval != STATUS_SUCCESS)
487  		return STATUS_FAIL;
488  
489  	chip->need_reset = 0;
490  
491  	chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
492  
493  	if (chip->hw_bypass_sd)
494  		goto nextcard;
495  	dev_dbg(rtsx_dev(chip), "In %s, chip->int_reg = 0x%x\n", __func__,
496  		chip->int_reg);
497  	if (chip->int_reg & SD_EXIST) {
498  #ifdef HW_AUTO_SWITCH_SD_BUS
499  		if (CHECK_PID(chip, 0x5208) && chip->ic_version < IC_VER_C)
500  			retval = rtsx_pre_handle_sdio_old(chip);
501  		else
502  			retval = rtsx_pre_handle_sdio_new(chip);
503  
504  		dev_dbg(rtsx_dev(chip), "chip->need_reset = 0x%x (%s)\n",
505  			(unsigned int)(chip->need_reset), __func__);
506  #else  /* HW_AUTO_SWITCH_SD_BUS */
507  		retval = rtsx_pre_handle_sdio_old(chip);
508  #endif  /* HW_AUTO_SWITCH_SD_BUS */
509  		if (retval != STATUS_SUCCESS)
510  			return STATUS_FAIL;
511  
512  	} else {
513  		chip->sd_io = 0;
514  		retval = rtsx_write_register(chip, SDIO_CTRL,
515  					     SDIO_BUS_CTRL | SDIO_CD_CTRL, 0);
516  		if (retval)
517  			return retval;
518  	}
519  
520  nextcard:
521  	if (chip->int_reg & XD_EXIST)
522  		chip->need_reset |= XD_CARD;
523  	if (chip->int_reg & MS_EXIST)
524  		chip->need_reset |= MS_CARD;
525  	if (chip->int_reg & CARD_EXIST) {
526  		retval = rtsx_write_register(chip, SSC_CTL1, SSC_RSTB,
527  					     SSC_RSTB);
528  		if (retval)
529  			return retval;
530  	}
531  
532  	dev_dbg(rtsx_dev(chip), "In %s, chip->need_reset = 0x%x\n", __func__,
533  		(unsigned int)(chip->need_reset));
534  
535  	retval = rtsx_write_register(chip, RCCTL, 0x01, 0x00);
536  	if (retval)
537  		return retval;
538  
539  	if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
540  		/* Turn off main power when entering S3/S4 state */
541  		retval = rtsx_write_register(chip, MAIN_PWR_OFF_CTL, 0x03,
542  					     0x03);
543  		if (retval)
544  			return retval;
545  	}
546  
547  	if (chip->remote_wakeup_en && !chip->auto_delink_en) {
548  		retval = rtsx_write_register(chip, WAKE_SEL_CTL, 0x07, 0x07);
549  		if (retval)
550  			return retval;
551  		if (chip->aux_pwr_exist) {
552  			retval = rtsx_write_register(chip, PME_FORCE_CTL,
553  						     0xFF, 0x33);
554  			if (retval)
555  				return retval;
556  		}
557  	} else {
558  		retval = rtsx_write_register(chip, WAKE_SEL_CTL, 0x07, 0x04);
559  		if (retval)
560  			return retval;
561  		retval = rtsx_write_register(chip, PME_FORCE_CTL, 0xFF, 0x30);
562  		if (retval)
563  			return retval;
564  	}
565  
566  	if (CHECK_PID(chip, 0x5208) && chip->ic_version >= IC_VER_D) {
567  		retval = rtsx_write_register(chip, PETXCFG, 0x1C, 0x14);
568  		if (retval)
569  			return retval;
570  	}
571  
572  	if (chip->asic_code && CHECK_PID(chip, 0x5208)) {
573  		retval = rtsx_clr_phy_reg_bit(chip, 0x1C, 2);
574  		if (retval != STATUS_SUCCESS)
575  			return STATUS_FAIL;
576  	}
577  
578  	if (chip->ft2_fast_mode) {
579  		retval = rtsx_write_register(chip, CARD_PWR_CTL, 0xFF,
580  					     MS_PARTIAL_POWER_ON |
581  					     SD_PARTIAL_POWER_ON);
582  		if (retval)
583  			return retval;
584  		udelay(chip->pmos_pwr_on_interval);
585  		retval = rtsx_write_register(chip, CARD_PWR_CTL, 0xFF,
586  					     MS_POWER_ON | SD_POWER_ON);
587  		if (retval)
588  			return retval;
589  
590  		wait_timeout(200);
591  	}
592  
593  	/* Reset card */
594  	rtsx_reset_detected_cards(chip, 0);
595  
596  	chip->driver_first_load = 0;
597  
598  	return STATUS_SUCCESS;
599  }
600  
valid_sd_speed_prior(u32 sd_speed_prior)601  static inline int valid_sd_speed_prior(u32 sd_speed_prior)
602  {
603  	bool valid_para = true;
604  	int i;
605  
606  	for (i = 0; i < 4; i++) {
607  		u8 tmp = (u8)(sd_speed_prior >> (i * 8));
608  
609  		if (tmp < 0x01 || tmp > 0x04) {
610  			valid_para = false;
611  			break;
612  		}
613  	}
614  
615  	return valid_para;
616  }
617  
valid_sd_current_prior(u32 sd_current_prior)618  static inline int valid_sd_current_prior(u32 sd_current_prior)
619  {
620  	bool valid_para = true;
621  	int i;
622  
623  	for (i = 0; i < 4; i++) {
624  		u8 tmp = (u8)(sd_current_prior >> (i * 8));
625  
626  		if (tmp > 0x03) {
627  			valid_para = false;
628  			break;
629  		}
630  	}
631  
632  	return valid_para;
633  }
634  
rts5208_init(struct rtsx_chip * chip)635  static int rts5208_init(struct rtsx_chip *chip)
636  {
637  	int retval;
638  	u16 reg = 0;
639  	u8 val = 0;
640  
641  	retval = rtsx_write_register(chip, CLK_SEL, 0x03, 0x03);
642  	if (retval)
643  		return retval;
644  	retval = rtsx_read_register(chip, CLK_SEL, &val);
645  	if (retval)
646  		return retval;
647  	chip->asic_code = val == 0 ? 1 : 0;
648  
649  	if (chip->asic_code) {
650  		retval = rtsx_read_phy_register(chip, 0x1C, &reg);
651  		if (retval != STATUS_SUCCESS)
652  			return STATUS_FAIL;
653  
654  		dev_dbg(rtsx_dev(chip), "Value of phy register 0x1C is 0x%x\n",
655  			reg);
656  		chip->ic_version = (reg >> 4) & 0x07;
657  		chip->phy_debug_mode = reg & PHY_DEBUG_MODE ? 1 : 0;
658  
659  	} else {
660  		retval = rtsx_read_register(chip, 0xFE80, &val);
661  		if (retval)
662  			return retval;
663  		chip->ic_version = val;
664  		chip->phy_debug_mode = 0;
665  	}
666  
667  	retval = rtsx_read_register(chip, PDINFO, &val);
668  	if (retval)
669  		return retval;
670  	dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
671  	chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
672  
673  	retval = rtsx_read_register(chip, 0xFE50, &val);
674  	if (retval)
675  		return retval;
676  	chip->hw_bypass_sd = val & 0x01 ? 1 : 0;
677  
678  	rtsx_read_config_byte(chip, 0x0E, &val);
679  	if (val & 0x80)
680  		SET_SDIO_EXIST(chip);
681  	else
682  		CLR_SDIO_EXIST(chip);
683  
684  	if (chip->use_hw_setting) {
685  		retval = rtsx_read_register(chip, CHANGE_LINK_STATE, &val);
686  		if (retval)
687  			return retval;
688  		chip->auto_delink_en = val & 0x80 ? 1 : 0;
689  	}
690  
691  	return STATUS_SUCCESS;
692  }
693  
rts5288_init(struct rtsx_chip * chip)694  static int rts5288_init(struct rtsx_chip *chip)
695  {
696  	int retval;
697  	u8 val = 0, max_func;
698  	u32 lval = 0;
699  
700  	retval = rtsx_write_register(chip, CLK_SEL, 0x03, 0x03);
701  	if (retval)
702  		return retval;
703  	retval = rtsx_read_register(chip, CLK_SEL, &val);
704  	if (retval)
705  		return retval;
706  	chip->asic_code = val == 0 ? 1 : 0;
707  
708  	chip->ic_version = 0;
709  	chip->phy_debug_mode = 0;
710  
711  	retval = rtsx_read_register(chip, PDINFO, &val);
712  	if (retval)
713  		return retval;
714  	dev_dbg(rtsx_dev(chip), "PDINFO: 0x%x\n", val);
715  	chip->aux_pwr_exist = val & AUX_PWR_DETECTED ? 1 : 0;
716  
717  	retval = rtsx_read_register(chip, CARD_SHARE_MODE, &val);
718  	if (retval)
719  		return retval;
720  	dev_dbg(rtsx_dev(chip), "CARD_SHARE_MODE: 0x%x\n", val);
721  	chip->baro_pkg = val & 0x04 ? QFN : LQFP;
722  
723  	retval = rtsx_read_register(chip, 0xFE5A, &val);
724  	if (retval)
725  		return retval;
726  	chip->hw_bypass_sd = val & 0x10 ? 1 : 0;
727  
728  	retval = rtsx_read_cfg_dw(chip, 0, 0x718, &lval);
729  	if (retval != STATUS_SUCCESS)
730  		return STATUS_FAIL;
731  
732  	max_func = (u8)((lval >> 29) & 0x07);
733  	dev_dbg(rtsx_dev(chip), "Max function number: %d\n", max_func);
734  	if (max_func == 0x02)
735  		SET_SDIO_EXIST(chip);
736  	else
737  		CLR_SDIO_EXIST(chip);
738  
739  	if (chip->use_hw_setting) {
740  		retval = rtsx_read_register(chip, CHANGE_LINK_STATE, &val);
741  		if (retval)
742  			return retval;
743  		chip->auto_delink_en = val & 0x80 ? 1 : 0;
744  
745  		if (CHECK_BARO_PKG(chip, LQFP))
746  			chip->lun_mode = SD_MS_1LUN;
747  		else
748  			chip->lun_mode = DEFAULT_SINGLE;
749  	}
750  
751  	return STATUS_SUCCESS;
752  }
753  
rtsx_init_chip(struct rtsx_chip * chip)754  int rtsx_init_chip(struct rtsx_chip *chip)
755  {
756  	struct sd_info *sd_card = &chip->sd_card;
757  	struct xd_info *xd_card = &chip->xd_card;
758  	struct ms_info *ms_card = &chip->ms_card;
759  	int retval;
760  	unsigned int i;
761  
762  	dev_dbg(rtsx_dev(chip), "Vendor ID: 0x%04x, Product ID: 0x%04x\n",
763  		chip->vendor_id, chip->product_id);
764  
765  	chip->ic_version = 0;
766  
767  	memset(xd_card, 0, sizeof(struct xd_info));
768  	memset(sd_card, 0, sizeof(struct sd_info));
769  	memset(ms_card, 0, sizeof(struct ms_info));
770  
771  	chip->xd_reset_counter = 0;
772  	chip->sd_reset_counter = 0;
773  	chip->ms_reset_counter = 0;
774  
775  	chip->xd_show_cnt = MAX_SHOW_CNT;
776  	chip->sd_show_cnt = MAX_SHOW_CNT;
777  	chip->ms_show_cnt = MAX_SHOW_CNT;
778  
779  	chip->sd_io = 0;
780  	chip->auto_delink_cnt = 0;
781  	chip->auto_delink_allowed = 1;
782  	rtsx_set_stat(chip, RTSX_STAT_INIT);
783  
784  	chip->aspm_enabled = 0;
785  	chip->chip_insert_with_sdio = 0;
786  	chip->sdio_aspm = 0;
787  	chip->sdio_idle = 0;
788  	chip->sdio_counter = 0;
789  	chip->cur_card = 0;
790  	chip->phy_debug_mode = 0;
791  	chip->sdio_func_exist = 0;
792  	memset(chip->sdio_raw_data, 0, 12);
793  
794  	for (i = 0; i < MAX_ALLOWED_LUN_CNT; i++) {
795  		set_sense_type(chip, i, SENSE_TYPE_NO_SENSE);
796  		chip->rw_fail_cnt[i] = 0;
797  	}
798  
799  	if (!valid_sd_speed_prior(chip->sd_speed_prior))
800  		chip->sd_speed_prior = 0x01040203;
801  
802  	dev_dbg(rtsx_dev(chip), "sd_speed_prior = 0x%08x\n",
803  		chip->sd_speed_prior);
804  
805  	if (!valid_sd_current_prior(chip->sd_current_prior))
806  		chip->sd_current_prior = 0x00010203;
807  
808  	dev_dbg(rtsx_dev(chip), "sd_current_prior = 0x%08x\n",
809  		chip->sd_current_prior);
810  
811  	if (chip->sd_ddr_tx_phase > 31 || chip->sd_ddr_tx_phase < 0)
812  		chip->sd_ddr_tx_phase = 0;
813  
814  	if (chip->mmc_ddr_tx_phase > 31 || chip->mmc_ddr_tx_phase < 0)
815  		chip->mmc_ddr_tx_phase = 0;
816  
817  	retval = rtsx_write_register(chip, FPDCTL, SSC_POWER_DOWN, 0);
818  	if (retval)
819  		return retval;
820  	wait_timeout(200);
821  	retval = rtsx_write_register(chip, CLK_DIV, 0x07, 0x07);
822  	if (retval)
823  		return retval;
824  	dev_dbg(rtsx_dev(chip), "chip->use_hw_setting = %d\n",
825  		chip->use_hw_setting);
826  
827  	if (CHECK_PID(chip, 0x5208)) {
828  		retval = rts5208_init(chip);
829  		if (retval != STATUS_SUCCESS)
830  			return STATUS_FAIL;
831  
832  	} else if (CHECK_PID(chip, 0x5288)) {
833  		retval = rts5288_init(chip);
834  		if (retval != STATUS_SUCCESS)
835  			return STATUS_FAIL;
836  	}
837  
838  	if (chip->ss_en == 2)
839  		chip->ss_en = 0;
840  
841  	dev_dbg(rtsx_dev(chip), "chip->asic_code = %d\n", chip->asic_code);
842  	dev_dbg(rtsx_dev(chip), "chip->ic_version = 0x%x\n", chip->ic_version);
843  	dev_dbg(rtsx_dev(chip), "chip->phy_debug_mode = %d\n",
844  		chip->phy_debug_mode);
845  	dev_dbg(rtsx_dev(chip), "chip->aux_pwr_exist = %d\n",
846  		chip->aux_pwr_exist);
847  	dev_dbg(rtsx_dev(chip), "chip->sdio_func_exist = %d\n",
848  		chip->sdio_func_exist);
849  	dev_dbg(rtsx_dev(chip), "chip->hw_bypass_sd = %d\n",
850  		chip->hw_bypass_sd);
851  	dev_dbg(rtsx_dev(chip), "chip->aspm_l0s_l1_en = %d\n",
852  		chip->aspm_l0s_l1_en);
853  	dev_dbg(rtsx_dev(chip), "chip->lun_mode = %d\n", chip->lun_mode);
854  	dev_dbg(rtsx_dev(chip), "chip->auto_delink_en = %d\n",
855  		chip->auto_delink_en);
856  	dev_dbg(rtsx_dev(chip), "chip->ss_en = %d\n", chip->ss_en);
857  	dev_dbg(rtsx_dev(chip), "chip->baro_pkg = %d\n", chip->baro_pkg);
858  
859  	if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
860  		chip->card2lun[SD_CARD] = 0;
861  		chip->card2lun[MS_CARD] = 1;
862  		chip->card2lun[XD_CARD] = 0xFF;
863  		chip->lun2card[0] = SD_CARD;
864  		chip->lun2card[1] = MS_CARD;
865  		chip->max_lun = 1;
866  		SET_SDIO_IGNORED(chip);
867  	} else if (CHECK_LUN_MODE(chip, SD_MS_1LUN)) {
868  		chip->card2lun[SD_CARD] = 0;
869  		chip->card2lun[MS_CARD] = 0;
870  		chip->card2lun[XD_CARD] = 0xFF;
871  		chip->lun2card[0] = SD_CARD | MS_CARD;
872  		chip->max_lun = 0;
873  	} else {
874  		chip->card2lun[XD_CARD] = 0;
875  		chip->card2lun[SD_CARD] = 0;
876  		chip->card2lun[MS_CARD] = 0;
877  		chip->lun2card[0] = XD_CARD | SD_CARD | MS_CARD;
878  		chip->max_lun = 0;
879  	}
880  
881  	retval = rtsx_reset_chip(chip);
882  	if (retval != STATUS_SUCCESS)
883  		return STATUS_FAIL;
884  
885  	return STATUS_SUCCESS;
886  }
887  
rtsx_release_chip(struct rtsx_chip * chip)888  void rtsx_release_chip(struct rtsx_chip *chip)
889  {
890  	xd_free_l2p_tbl(chip);
891  	ms_free_l2p_tbl(chip);
892  	chip->card_exist = 0;
893  	chip->card_ready = 0;
894  }
895  
896  #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
rtsx_blink_led(struct rtsx_chip * chip)897  static inline void rtsx_blink_led(struct rtsx_chip *chip)
898  {
899  	if (chip->card_exist && chip->blink_led) {
900  		if (chip->led_toggle_counter < LED_TOGGLE_INTERVAL) {
901  			chip->led_toggle_counter++;
902  		} else {
903  			chip->led_toggle_counter = 0;
904  			toggle_gpio(chip, LED_GPIO);
905  		}
906  	}
907  }
908  #endif
909  
rtsx_monitor_aspm_config(struct rtsx_chip * chip)910  static void rtsx_monitor_aspm_config(struct rtsx_chip *chip)
911  {
912  	bool reg_changed, maybe_support_aspm;
913  	u32 tmp = 0;
914  	u8 reg0 = 0, reg1 = 0;
915  
916  	maybe_support_aspm = false;
917  	reg_changed = false;
918  	rtsx_read_config_byte(chip, LCTLR, &reg0);
919  	if (chip->aspm_level[0] != reg0) {
920  		reg_changed = true;
921  		chip->aspm_level[0] = reg0;
922  	}
923  	if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
924  		rtsx_read_cfg_dw(chip, 1, 0xC0, &tmp);
925  		reg1 = (u8)tmp;
926  		if (chip->aspm_level[1] != reg1) {
927  			reg_changed = true;
928  			chip->aspm_level[1] = reg1;
929  		}
930  
931  		if ((reg0 & 0x03) && (reg1 & 0x03))
932  			maybe_support_aspm = true;
933  
934  	} else {
935  		if (reg0 & 0x03)
936  			maybe_support_aspm = true;
937  	}
938  
939  	if (reg_changed) {
940  		if (maybe_support_aspm)
941  			chip->aspm_l0s_l1_en = 0x03;
942  
943  		dev_dbg(rtsx_dev(chip),
944  			"aspm_level[0] = 0x%02x, aspm_level[1] = 0x%02x\n",
945  			chip->aspm_level[0], chip->aspm_level[1]);
946  
947  		if (chip->aspm_l0s_l1_en) {
948  			chip->aspm_enabled = 1;
949  		} else {
950  			chip->aspm_enabled = 0;
951  			chip->sdio_aspm = 0;
952  		}
953  		rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFF,
954  				    0x30 | chip->aspm_level[0] |
955  				    (chip->aspm_level[1] << 2));
956  	}
957  }
958  
rtsx_manage_ocp(struct rtsx_chip * chip)959  static void rtsx_manage_ocp(struct rtsx_chip *chip)
960  {
961  #ifdef SUPPORT_OCP
962  	if (!chip->ocp_int)
963  		return;
964  
965  	rtsx_read_register(chip, OCPSTAT, &chip->ocp_stat);
966  
967  	if (chip->card_exist & SD_CARD)
968  		sd_power_off_card3v3(chip);
969  	else if (chip->card_exist & MS_CARD)
970  		ms_power_off_card3v3(chip);
971  	else if (chip->card_exist & XD_CARD)
972  		xd_power_off_card3v3(chip);
973  
974  	chip->ocp_int = 0;
975  #endif
976  }
977  
rtsx_manage_sd_lock(struct rtsx_chip * chip)978  static void rtsx_manage_sd_lock(struct rtsx_chip *chip)
979  {
980  #ifdef SUPPORT_SD_LOCK
981  	struct sd_info *sd_card = &chip->sd_card;
982  	u8 val;
983  
984  	if (!sd_card->sd_erase_status)
985  		return;
986  
987  	if (chip->card_exist & SD_CARD) {
988  		rtsx_read_register(chip, 0xFD30, &val);
989  		if (val & 0x02) {
990  			sd_card->sd_erase_status = SD_NOT_ERASE;
991  			sd_card->sd_lock_notify = 1;
992  			chip->need_reinit |= SD_CARD;
993  		}
994  	} else {
995  		sd_card->sd_erase_status = SD_NOT_ERASE;
996  	}
997  #endif
998  }
999  
rtsx_is_ss_allowed(struct rtsx_chip * chip)1000  static bool rtsx_is_ss_allowed(struct rtsx_chip *chip)
1001  {
1002  	u32 val;
1003  
1004  	if (!chip->ss_en || CHECK_PID(chip, 0x5288))
1005  		return false;
1006  
1007  	if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) {
1008  		rtsx_read_cfg_dw(chip, 1, 0x04, &val);
1009  		if (val & 0x07)
1010  			return false;
1011  	}
1012  
1013  	return true;
1014  }
1015  
rtsx_manage_ss(struct rtsx_chip * chip)1016  static void rtsx_manage_ss(struct rtsx_chip *chip)
1017  {
1018  	if (!rtsx_is_ss_allowed(chip) || chip->sd_io)
1019  		return;
1020  
1021  	if (rtsx_get_stat(chip) != RTSX_STAT_IDLE) {
1022  		chip->ss_counter = 0;
1023  		return;
1024  	}
1025  
1026  	if (chip->ss_counter < (chip->ss_idle_period / POLLING_INTERVAL))
1027  		chip->ss_counter++;
1028  	else
1029  		rtsx_exclusive_enter_ss(chip);
1030  }
1031  
rtsx_manage_aspm(struct rtsx_chip * chip)1032  static void rtsx_manage_aspm(struct rtsx_chip *chip)
1033  {
1034  	u8 data;
1035  
1036  	if (!CHECK_PID(chip, 0x5208))
1037  		return;
1038  
1039  	rtsx_monitor_aspm_config(chip);
1040  
1041  #ifdef SUPPORT_SDIO_ASPM
1042  	if (!CHK_SDIO_EXIST(chip) || CHK_SDIO_IGNORED(chip) ||
1043  	    !chip->aspm_l0s_l1_en || !chip->dynamic_aspm)
1044  		return;
1045  
1046  	if (chip->sd_io) {
1047  		dynamic_configure_sdio_aspm(chip);
1048  		return;
1049  	}
1050  
1051  	if (chip->sdio_aspm)
1052  		return;
1053  
1054  	dev_dbg(rtsx_dev(chip), "SDIO enter ASPM!\n");
1055  	data = 0x30 | (chip->aspm_level[1] << 2);
1056  	rtsx_write_register(chip, ASPM_FORCE_CTL, 0xFC, data);
1057  	chip->sdio_aspm = 1;
1058  #endif
1059  }
1060  
rtsx_manage_idle(struct rtsx_chip * chip)1061  static void rtsx_manage_idle(struct rtsx_chip *chip)
1062  {
1063  	if (chip->idle_counter < IDLE_MAX_COUNT) {
1064  		chip->idle_counter++;
1065  		return;
1066  	}
1067  
1068  	if (rtsx_get_stat(chip) == RTSX_STAT_IDLE)
1069  		return;
1070  
1071  	dev_dbg(rtsx_dev(chip), "Idle state!\n");
1072  	rtsx_set_stat(chip, RTSX_STAT_IDLE);
1073  
1074  #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1075  	chip->led_toggle_counter = 0;
1076  #endif
1077  	rtsx_force_power_on(chip, SSC_PDCTL);
1078  
1079  	turn_off_led(chip, LED_GPIO);
1080  
1081  	if (chip->auto_power_down && !chip->card_ready && !chip->sd_io)
1082  		rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1083  }
1084  
rtsx_manage_2lun_mode(struct rtsx_chip * chip)1085  static void rtsx_manage_2lun_mode(struct rtsx_chip *chip)
1086  {
1087  #ifdef SUPPORT_OCP
1088  	u8 sd_oc, ms_oc;
1089  
1090  	sd_oc = chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER);
1091  	ms_oc = chip->ocp_stat & (MS_OC_NOW | MS_OC_EVER);
1092  
1093  	if (sd_oc || ms_oc)
1094  		dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
1095  			chip->ocp_stat);
1096  
1097  	if (sd_oc && (chip->card_exist & SD_CARD)) {
1098  		rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1099  		card_power_off(chip, SD_CARD);
1100  		chip->card_fail |= SD_CARD;
1101  	}
1102  
1103  	if (ms_oc && (chip->card_exist & MS_CARD)) {
1104  		rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1105  		card_power_off(chip, MS_CARD);
1106  		chip->card_fail |= MS_CARD;
1107  	}
1108  #endif
1109  }
1110  
rtsx_manage_1lun_mode(struct rtsx_chip * chip)1111  static void rtsx_manage_1lun_mode(struct rtsx_chip *chip)
1112  {
1113  #ifdef SUPPORT_OCP
1114  	if (!(chip->ocp_stat & (SD_OC_NOW | SD_OC_EVER)))
1115  		return;
1116  
1117  	dev_dbg(rtsx_dev(chip), "Over current, OCPSTAT is 0x%x\n",
1118  		chip->ocp_stat);
1119  
1120  	if (chip->card_exist & SD_CARD) {
1121  		rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
1122  		chip->card_fail |= SD_CARD;
1123  	} else if (chip->card_exist & MS_CARD) {
1124  		rtsx_write_register(chip, CARD_OE, MS_OUTPUT_EN, 0);
1125  		chip->card_fail |= MS_CARD;
1126  	} else if (chip->card_exist & XD_CARD) {
1127  		rtsx_write_register(chip, CARD_OE, XD_OUTPUT_EN, 0);
1128  		chip->card_fail |= XD_CARD;
1129  	}
1130  	card_power_off(chip, SD_CARD);
1131  #endif
1132  }
1133  
rtsx_delink_stage1(struct rtsx_chip * chip,int enter_L1,int stage3_cnt)1134  static void rtsx_delink_stage1(struct rtsx_chip *chip, int enter_L1,
1135  			       int stage3_cnt)
1136  {
1137  	u8 val;
1138  
1139  	rtsx_set_stat(chip, RTSX_STAT_DELINK);
1140  
1141  	if (chip->asic_code && CHECK_PID(chip, 0x5208))
1142  		rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1143  
1144  	if (chip->card_exist)
1145  		dev_dbg(rtsx_dev(chip), "False card inserted, do force delink\n");
1146  	else
1147  		dev_dbg(rtsx_dev(chip), "No card inserted, do delink\n");
1148  
1149  	if (enter_L1)
1150  		rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03, 1);
1151  
1152  	if (chip->card_exist)
1153  		val = 0x02;
1154  	else
1155  		val = 0x0A;
1156  
1157  	rtsx_write_register(chip, CHANGE_LINK_STATE, val, val);
1158  
1159  	if (enter_L1)
1160  		rtsx_enter_L1(chip);
1161  
1162  	if (chip->card_exist)
1163  		chip->auto_delink_cnt = stage3_cnt + 1;
1164  }
1165  
rtsx_delink_stage(struct rtsx_chip * chip)1166  static void rtsx_delink_stage(struct rtsx_chip *chip)
1167  {
1168  	int delink_stage1_cnt, delink_stage2_cnt, delink_stage3_cnt;
1169  	int enter_L1;
1170  
1171  	if (!chip->auto_delink_en || !chip->auto_delink_allowed ||
1172  	    chip->card_ready || chip->card_ejected || chip->sd_io) {
1173  		chip->auto_delink_cnt = 0;
1174  		return;
1175  	}
1176  
1177  	enter_L1 = chip->auto_delink_in_L1 &&
1178  		(chip->aspm_l0s_l1_en || chip->ss_en);
1179  
1180  	delink_stage1_cnt = chip->delink_stage1_step;
1181  	delink_stage2_cnt = delink_stage1_cnt + chip->delink_stage2_step;
1182  	delink_stage3_cnt = delink_stage2_cnt + chip->delink_stage3_step;
1183  
1184  	if (chip->auto_delink_cnt > delink_stage3_cnt)
1185  		return;
1186  
1187  	if (chip->auto_delink_cnt == delink_stage1_cnt)
1188  		rtsx_delink_stage1(chip, enter_L1, delink_stage3_cnt);
1189  
1190  	if (chip->auto_delink_cnt == delink_stage2_cnt) {
1191  		dev_dbg(rtsx_dev(chip), "Try to do force delink\n");
1192  
1193  		if (enter_L1)
1194  			rtsx_exit_L1(chip);
1195  
1196  		if (chip->asic_code && CHECK_PID(chip, 0x5208))
1197  			rtsx_set_phy_reg_bit(chip, 0x1C, 2);
1198  
1199  		rtsx_write_register(chip, CHANGE_LINK_STATE, 0x0A, 0x0A);
1200  	}
1201  
1202  	chip->auto_delink_cnt++;
1203  }
1204  
rtsx_polling_func(struct rtsx_chip * chip)1205  void rtsx_polling_func(struct rtsx_chip *chip)
1206  {
1207  	if (rtsx_chk_stat(chip, RTSX_STAT_SUSPEND))
1208  		return;
1209  
1210  	if (rtsx_chk_stat(chip, RTSX_STAT_DELINK))
1211  		goto delink_stage;
1212  
1213  	if (chip->polling_config) {
1214  		u8 val;
1215  
1216  		rtsx_read_config_byte(chip, 0, &val);
1217  	}
1218  
1219  	if (rtsx_chk_stat(chip, RTSX_STAT_SS))
1220  		return;
1221  
1222  	rtsx_manage_ocp(chip);
1223  
1224  	rtsx_manage_sd_lock(chip);
1225  
1226  	rtsx_init_cards(chip);
1227  
1228  	rtsx_manage_ss(chip);
1229  
1230  	rtsx_manage_aspm(chip);
1231  
1232  	rtsx_manage_idle(chip);
1233  
1234  	switch (rtsx_get_stat(chip)) {
1235  	case RTSX_STAT_RUN:
1236  #if !defined(LED_AUTO_BLINK) && defined(REGULAR_BLINK)
1237  		rtsx_blink_led(chip);
1238  #endif
1239  		do_remaining_work(chip);
1240  		break;
1241  
1242  	case RTSX_STAT_IDLE:
1243  		if (chip->sd_io && !chip->sd_int)
1244  			try_to_switch_sdio_ctrl(chip);
1245  
1246  		rtsx_enable_aspm(chip);
1247  		break;
1248  
1249  	default:
1250  		break;
1251  	}
1252  
1253  	if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
1254  		rtsx_manage_2lun_mode(chip);
1255  	else
1256  		rtsx_manage_1lun_mode(chip);
1257  
1258  delink_stage:
1259  	rtsx_delink_stage(chip);
1260  }
1261  
1262  /**
1263   * rtsx_stop_cmd - stop command transfer and DMA transfer
1264   * @chip: Realtek's card reader chip
1265   * @card: flash card type
1266   *
1267   * Stop command transfer and DMA transfer.
1268   * This function is called in error handler.
1269   */
rtsx_stop_cmd(struct rtsx_chip * chip,int card)1270  void rtsx_stop_cmd(struct rtsx_chip *chip, int card)
1271  {
1272  	int i;
1273  
1274  	for (i = 0; i <= 8; i++) {
1275  		int addr = RTSX_HCBAR + i * 4;
1276  		u32 reg;
1277  
1278  		reg = rtsx_readl(chip, addr);
1279  		dev_dbg(rtsx_dev(chip), "BAR (0x%02x): 0x%08x\n", addr, reg);
1280  	}
1281  	rtsx_writel(chip, RTSX_HCBCTLR, STOP_CMD);
1282  	rtsx_writel(chip, RTSX_HDBCTLR, STOP_DMA);
1283  
1284  	for (i = 0; i < 16; i++) {
1285  		u16 addr = 0xFE20 + (u16)i;
1286  		u8 val;
1287  
1288  		rtsx_read_register(chip, addr, &val);
1289  		dev_dbg(rtsx_dev(chip), "0x%04X: 0x%02x\n", addr, val);
1290  	}
1291  
1292  	rtsx_write_register(chip, DMACTL, 0x80, 0x80);
1293  	rtsx_write_register(chip, RBCTL, 0x80, 0x80);
1294  }
1295  
1296  #define MAX_RW_REG_CNT		1024
1297  
rtsx_write_register(struct rtsx_chip * chip,u16 addr,u8 mask,u8 data)1298  int rtsx_write_register(struct rtsx_chip *chip, u16 addr, u8 mask, u8 data)
1299  {
1300  	int i;
1301  	u32 val = 3 << 30;
1302  
1303  	val |= (u32)(addr & 0x3FFF) << 16;
1304  	val |= (u32)mask << 8;
1305  	val |= (u32)data;
1306  
1307  	rtsx_writel(chip, RTSX_HAIMR, val);
1308  
1309  	for (i = 0; i < MAX_RW_REG_CNT; i++) {
1310  		val = rtsx_readl(chip, RTSX_HAIMR);
1311  		if ((val & BIT(31)) == 0) {
1312  			if (data != (u8)val)
1313  				return STATUS_FAIL;
1314  
1315  			return STATUS_SUCCESS;
1316  		}
1317  	}
1318  
1319  	return STATUS_TIMEDOUT;
1320  }
1321  
rtsx_read_register(struct rtsx_chip * chip,u16 addr,u8 * data)1322  int rtsx_read_register(struct rtsx_chip *chip, u16 addr, u8 *data)
1323  {
1324  	u32 val = 2 << 30;
1325  	int i;
1326  
1327  	if (data)
1328  		*data = 0;
1329  
1330  	val |= (u32)(addr & 0x3FFF) << 16;
1331  
1332  	rtsx_writel(chip, RTSX_HAIMR, val);
1333  
1334  	for (i = 0; i < MAX_RW_REG_CNT; i++) {
1335  		val = rtsx_readl(chip, RTSX_HAIMR);
1336  		if ((val & BIT(31)) == 0)
1337  			break;
1338  	}
1339  
1340  	if (i >= MAX_RW_REG_CNT)
1341  		return STATUS_TIMEDOUT;
1342  
1343  	if (data)
1344  		*data = (u8)(val & 0xFF);
1345  
1346  	return STATUS_SUCCESS;
1347  }
1348  
rtsx_write_cfg_dw(struct rtsx_chip * chip,u8 func_no,u16 addr,u32 mask,u32 val)1349  int rtsx_write_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 mask,
1350  		      u32 val)
1351  {
1352  	int retval;
1353  	u8 mode = 0, tmp;
1354  	int i;
1355  
1356  	for (i = 0; i < 4; i++) {
1357  		if (mask & 0xFF) {
1358  			retval = rtsx_write_register(chip, CFGDATA0 + i,
1359  						     0xFF,
1360  						     (u8)(val & mask & 0xFF));
1361  			if (retval)
1362  				return retval;
1363  			mode |= (1 << i);
1364  		}
1365  		mask >>= 8;
1366  		val >>= 8;
1367  	}
1368  
1369  	if (mode) {
1370  		retval = rtsx_write_register(chip, CFGADDR0, 0xFF, (u8)addr);
1371  		if (retval)
1372  			return retval;
1373  		retval = rtsx_write_register(chip, CFGADDR1, 0xFF,
1374  					     (u8)(addr >> 8));
1375  		if (retval)
1376  			return retval;
1377  
1378  		retval = rtsx_write_register(chip, CFGRWCTL, 0xFF,
1379  					     0x80 | mode |
1380  					     ((func_no & 0x03) << 4));
1381  		if (retval)
1382  			return retval;
1383  
1384  		for (i = 0; i < MAX_RW_REG_CNT; i++) {
1385  			retval = rtsx_read_register(chip, CFGRWCTL, &tmp);
1386  			if (retval)
1387  				return retval;
1388  			if ((tmp & 0x80) == 0)
1389  				break;
1390  		}
1391  	}
1392  
1393  	return STATUS_SUCCESS;
1394  }
1395  
rtsx_read_cfg_dw(struct rtsx_chip * chip,u8 func_no,u16 addr,u32 * val)1396  int rtsx_read_cfg_dw(struct rtsx_chip *chip, u8 func_no, u16 addr, u32 *val)
1397  {
1398  	int retval;
1399  	int i;
1400  	u8 tmp;
1401  	u32 data = 0;
1402  
1403  	retval = rtsx_write_register(chip, CFGADDR0, 0xFF, (u8)addr);
1404  	if (retval)
1405  		return retval;
1406  	retval = rtsx_write_register(chip, CFGADDR1, 0xFF, (u8)(addr >> 8));
1407  	if (retval)
1408  		return retval;
1409  	retval = rtsx_write_register(chip, CFGRWCTL, 0xFF,
1410  				     0x80 | ((func_no & 0x03) << 4));
1411  	if (retval)
1412  		return retval;
1413  
1414  	for (i = 0; i < MAX_RW_REG_CNT; i++) {
1415  		retval = rtsx_read_register(chip, CFGRWCTL, &tmp);
1416  		if (retval)
1417  			return retval;
1418  		if ((tmp & 0x80) == 0)
1419  			break;
1420  	}
1421  
1422  	for (i = 0; i < 4; i++) {
1423  		retval = rtsx_read_register(chip, CFGDATA0 + i, &tmp);
1424  		if (retval)
1425  			return retval;
1426  		data |= (u32)tmp << (i * 8);
1427  	}
1428  
1429  	if (val)
1430  		*val = data;
1431  
1432  	return STATUS_SUCCESS;
1433  }
1434  
rtsx_write_cfg_seq(struct rtsx_chip * chip,u8 func,u16 addr,u8 * buf,int len)1435  int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1436  		       int len)
1437  {
1438  	u32 *data, *mask;
1439  	u16 offset = addr % 4;
1440  	u16 aligned_addr = addr - offset;
1441  	int dw_len, i, j;
1442  	int retval;
1443  	size_t size;
1444  
1445  	if (!buf)
1446  		return STATUS_NOMEM;
1447  
1448  	if ((len + offset) % 4)
1449  		dw_len = (len + offset) / 4 + 1;
1450  	else
1451  		dw_len = (len + offset) / 4;
1452  
1453  	dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1454  
1455  	size = array_size(dw_len, 4);
1456  	data = vzalloc(size);
1457  	if (!data)
1458  		return STATUS_NOMEM;
1459  
1460  	mask = vzalloc(size);
1461  	if (!mask) {
1462  		vfree(data);
1463  		return STATUS_NOMEM;
1464  	}
1465  
1466  	j = 0;
1467  	for (i = 0; i < len; i++) {
1468  		mask[j] |= 0xFF << (offset * 8);
1469  		data[j] |= buf[i] << (offset * 8);
1470  		if (++offset == 4) {
1471  			j++;
1472  			offset = 0;
1473  		}
1474  	}
1475  
1476  	print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, mask, size);
1477  	print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, data, size);
1478  
1479  	for (i = 0; i < dw_len; i++) {
1480  		retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i * 4,
1481  					   mask[i], data[i]);
1482  		if (retval != STATUS_SUCCESS) {
1483  			vfree(data);
1484  			vfree(mask);
1485  			return STATUS_FAIL;
1486  		}
1487  	}
1488  
1489  	vfree(data);
1490  	vfree(mask);
1491  
1492  	return STATUS_SUCCESS;
1493  }
1494  
rtsx_read_cfg_seq(struct rtsx_chip * chip,u8 func,u16 addr,u8 * buf,int len)1495  int rtsx_read_cfg_seq(struct rtsx_chip *chip, u8 func, u16 addr, u8 *buf,
1496  		      int len)
1497  {
1498  	u32 *data;
1499  	u16 offset = addr % 4;
1500  	u16 aligned_addr = addr - offset;
1501  	int dw_len, i, j;
1502  	int retval;
1503  
1504  	if ((len + offset) % 4)
1505  		dw_len = (len + offset) / 4 + 1;
1506  	else
1507  		dw_len = (len + offset) / 4;
1508  
1509  	dev_dbg(rtsx_dev(chip), "dw_len = %d\n", dw_len);
1510  
1511  	data = vmalloc(array_size(dw_len, 4));
1512  	if (!data)
1513  		return STATUS_NOMEM;
1514  
1515  	for (i = 0; i < dw_len; i++) {
1516  		retval = rtsx_read_cfg_dw(chip, func, aligned_addr + i * 4,
1517  					  data + i);
1518  		if (retval != STATUS_SUCCESS) {
1519  			vfree(data);
1520  			return STATUS_FAIL;
1521  		}
1522  	}
1523  
1524  	if (buf) {
1525  		j = 0;
1526  
1527  		for (i = 0; i < len; i++) {
1528  			buf[i] = (u8)(data[j] >> (offset * 8));
1529  			if (++offset == 4) {
1530  				j++;
1531  				offset = 0;
1532  			}
1533  		}
1534  	}
1535  
1536  	vfree(data);
1537  
1538  	return STATUS_SUCCESS;
1539  }
1540  
rtsx_write_phy_register(struct rtsx_chip * chip,u8 addr,u16 val)1541  int rtsx_write_phy_register(struct rtsx_chip *chip, u8 addr, u16 val)
1542  {
1543  	int retval;
1544  	bool finished = false;
1545  	int i;
1546  	u8 tmp;
1547  
1548  	retval = rtsx_write_register(chip, PHYDATA0, 0xFF, (u8)val);
1549  	if (retval)
1550  		return retval;
1551  	retval = rtsx_write_register(chip, PHYDATA1, 0xFF, (u8)(val >> 8));
1552  	if (retval)
1553  		return retval;
1554  	retval = rtsx_write_register(chip, PHYADDR, 0xFF, addr);
1555  	if (retval)
1556  		return retval;
1557  	retval = rtsx_write_register(chip, PHYRWCTL, 0xFF, 0x81);
1558  	if (retval)
1559  		return retval;
1560  
1561  	for (i = 0; i < 100000; i++) {
1562  		retval = rtsx_read_register(chip, PHYRWCTL, &tmp);
1563  		if (retval)
1564  			return retval;
1565  		if (!(tmp & 0x80)) {
1566  			finished = true;
1567  			break;
1568  		}
1569  	}
1570  
1571  	if (!finished)
1572  		return STATUS_FAIL;
1573  
1574  	return STATUS_SUCCESS;
1575  }
1576  
rtsx_read_phy_register(struct rtsx_chip * chip,u8 addr,u16 * val)1577  int rtsx_read_phy_register(struct rtsx_chip *chip, u8 addr, u16 *val)
1578  {
1579  	int retval;
1580  	bool finished = false;
1581  	int i;
1582  	u16 data = 0;
1583  	u8 tmp;
1584  
1585  	retval = rtsx_write_register(chip, PHYADDR, 0xFF, addr);
1586  	if (retval)
1587  		return retval;
1588  	retval = rtsx_write_register(chip, PHYRWCTL, 0xFF, 0x80);
1589  	if (retval)
1590  		return retval;
1591  
1592  	for (i = 0; i < 100000; i++) {
1593  		retval = rtsx_read_register(chip, PHYRWCTL, &tmp);
1594  		if (retval)
1595  			return retval;
1596  		if (!(tmp & 0x80)) {
1597  			finished = true;
1598  			break;
1599  		}
1600  	}
1601  
1602  	if (!finished)
1603  		return STATUS_FAIL;
1604  
1605  	retval = rtsx_read_register(chip, PHYDATA0, &tmp);
1606  	if (retval)
1607  		return retval;
1608  	data = tmp;
1609  	retval = rtsx_read_register(chip, PHYDATA1, &tmp);
1610  	if (retval)
1611  		return retval;
1612  	data |= (u16)tmp << 8;
1613  
1614  	if (val)
1615  		*val = data;
1616  
1617  	return STATUS_SUCCESS;
1618  }
1619  
rtsx_read_efuse(struct rtsx_chip * chip,u8 addr,u8 * val)1620  int rtsx_read_efuse(struct rtsx_chip *chip, u8 addr, u8 *val)
1621  {
1622  	int retval;
1623  	int i;
1624  	u8 data = 0;
1625  
1626  	retval = rtsx_write_register(chip, EFUSE_CTRL, 0xFF, 0x80 | addr);
1627  	if (retval)
1628  		return retval;
1629  
1630  	for (i = 0; i < 100; i++) {
1631  		retval = rtsx_read_register(chip, EFUSE_CTRL, &data);
1632  		if (retval)
1633  			return retval;
1634  		if (!(data & 0x80))
1635  			break;
1636  		udelay(1);
1637  	}
1638  
1639  	if (data & 0x80)
1640  		return STATUS_TIMEDOUT;
1641  
1642  	retval = rtsx_read_register(chip, EFUSE_DATA, &data);
1643  	if (retval)
1644  		return retval;
1645  	if (val)
1646  		*val = data;
1647  
1648  	return STATUS_SUCCESS;
1649  }
1650  
rtsx_write_efuse(struct rtsx_chip * chip,u8 addr,u8 val)1651  int rtsx_write_efuse(struct rtsx_chip *chip, u8 addr, u8 val)
1652  {
1653  	int retval;
1654  	int i, j;
1655  	u8 data = 0, tmp = 0xFF;
1656  
1657  	for (i = 0; i < 8; i++) {
1658  		if (val & (u8)(1 << i))
1659  			continue;
1660  
1661  		tmp &= (~(u8)(1 << i));
1662  		dev_dbg(rtsx_dev(chip), "Write 0x%x to 0x%x\n", tmp, addr);
1663  
1664  		retval = rtsx_write_register(chip, EFUSE_DATA, 0xFF, tmp);
1665  		if (retval)
1666  			return retval;
1667  		retval = rtsx_write_register(chip, EFUSE_CTRL, 0xFF,
1668  					     0xA0 | addr);
1669  		if (retval)
1670  			return retval;
1671  
1672  		for (j = 0; j < 100; j++) {
1673  			retval = rtsx_read_register(chip, EFUSE_CTRL, &data);
1674  			if (retval)
1675  				return retval;
1676  			if (!(data & 0x80))
1677  				break;
1678  			wait_timeout(3);
1679  		}
1680  
1681  		if (data & 0x80)
1682  			return STATUS_TIMEDOUT;
1683  
1684  		wait_timeout(5);
1685  	}
1686  
1687  	return STATUS_SUCCESS;
1688  }
1689  
rtsx_clr_phy_reg_bit(struct rtsx_chip * chip,u8 reg,u8 bit)1690  int rtsx_clr_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1691  {
1692  	int retval;
1693  	u16 value;
1694  
1695  	retval = rtsx_read_phy_register(chip, reg, &value);
1696  	if (retval != STATUS_SUCCESS)
1697  		return STATUS_FAIL;
1698  
1699  	if (value & (1 << bit)) {
1700  		value &= ~(1 << bit);
1701  		retval = rtsx_write_phy_register(chip, reg, value);
1702  		if (retval != STATUS_SUCCESS)
1703  			return STATUS_FAIL;
1704  	}
1705  
1706  	return STATUS_SUCCESS;
1707  }
1708  
rtsx_set_phy_reg_bit(struct rtsx_chip * chip,u8 reg,u8 bit)1709  int rtsx_set_phy_reg_bit(struct rtsx_chip *chip, u8 reg, u8 bit)
1710  {
1711  	int retval;
1712  	u16 value;
1713  
1714  	retval = rtsx_read_phy_register(chip, reg, &value);
1715  	if (retval != STATUS_SUCCESS)
1716  		return STATUS_FAIL;
1717  
1718  	if ((value & (1 << bit)) == 0) {
1719  		value |= (1 << bit);
1720  		retval = rtsx_write_phy_register(chip, reg, value);
1721  		if (retval != STATUS_SUCCESS)
1722  			return STATUS_FAIL;
1723  	}
1724  
1725  	return STATUS_SUCCESS;
1726  }
1727  
rtsx_handle_pm_dstate(struct rtsx_chip * chip,u8 dstate)1728  static void rtsx_handle_pm_dstate(struct rtsx_chip *chip, u8 dstate)
1729  {
1730  	u32 ultmp;
1731  
1732  	dev_dbg(rtsx_dev(chip), "%04x set pm_dstate to %d\n",
1733  		chip->product_id, dstate);
1734  
1735  	if (CHK_SDIO_EXIST(chip)) {
1736  		u8 func_no;
1737  
1738  		if (CHECK_PID(chip, 0x5288))
1739  			func_no = 2;
1740  		else
1741  			func_no = 1;
1742  
1743  		rtsx_read_cfg_dw(chip, func_no, 0x84, &ultmp);
1744  		dev_dbg(rtsx_dev(chip), "pm_dstate of function %d: 0x%x\n",
1745  			(int)func_no, ultmp);
1746  		rtsx_write_cfg_dw(chip, func_no, 0x84, 0xFF, dstate);
1747  	}
1748  
1749  	rtsx_write_config_byte(chip, 0x44, dstate);
1750  	rtsx_write_config_byte(chip, 0x45, 0);
1751  }
1752  
rtsx_enter_L1(struct rtsx_chip * chip)1753  void rtsx_enter_L1(struct rtsx_chip *chip)
1754  {
1755  	rtsx_handle_pm_dstate(chip, 2);
1756  }
1757  
rtsx_exit_L1(struct rtsx_chip * chip)1758  void rtsx_exit_L1(struct rtsx_chip *chip)
1759  {
1760  	rtsx_write_config_byte(chip, 0x44, 0);
1761  	rtsx_write_config_byte(chip, 0x45, 0);
1762  }
1763  
rtsx_enter_ss(struct rtsx_chip * chip)1764  void rtsx_enter_ss(struct rtsx_chip *chip)
1765  {
1766  	dev_dbg(rtsx_dev(chip), "Enter Selective Suspend State!\n");
1767  
1768  	rtsx_write_register(chip, IRQSTAT0, LINK_RDY_INT, LINK_RDY_INT);
1769  
1770  	if (chip->power_down_in_ss) {
1771  		rtsx_power_off_card(chip);
1772  		rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1773  	}
1774  
1775  	if (CHK_SDIO_EXIST(chip))
1776  		rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
1777  				  0xC0, 0xFF00, 0x0100);
1778  
1779  	if (chip->auto_delink_en) {
1780  		rtsx_write_register(chip, HOST_SLEEP_STATE, 0x01, 0x01);
1781  	} else {
1782  		if (!chip->phy_debug_mode) {
1783  			u32 tmp;
1784  
1785  			tmp = rtsx_readl(chip, RTSX_BIER);
1786  			tmp |= CARD_INT;
1787  			rtsx_writel(chip, RTSX_BIER, tmp);
1788  		}
1789  
1790  		rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 0);
1791  	}
1792  
1793  	rtsx_enter_L1(chip);
1794  
1795  	RTSX_CLR_DELINK(chip);
1796  	rtsx_set_stat(chip, RTSX_STAT_SS);
1797  }
1798  
rtsx_exit_ss(struct rtsx_chip * chip)1799  void rtsx_exit_ss(struct rtsx_chip *chip)
1800  {
1801  	dev_dbg(rtsx_dev(chip), "Exit Selective Suspend State!\n");
1802  
1803  	rtsx_exit_L1(chip);
1804  
1805  	if (chip->power_down_in_ss) {
1806  		rtsx_force_power_on(chip, SSC_PDCTL | OC_PDCTL);
1807  		udelay(1000);
1808  	}
1809  
1810  	if (RTSX_TST_DELINK(chip)) {
1811  		chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1812  		rtsx_reinit_cards(chip, 1);
1813  		RTSX_CLR_DELINK(chip);
1814  	} else if (chip->power_down_in_ss) {
1815  		chip->need_reinit = SD_CARD | MS_CARD | XD_CARD;
1816  		rtsx_reinit_cards(chip, 0);
1817  	}
1818  }
1819  
rtsx_pre_handle_interrupt(struct rtsx_chip * chip)1820  int rtsx_pre_handle_interrupt(struct rtsx_chip *chip)
1821  {
1822  	u32 status, int_enable;
1823  	bool exit_ss = false;
1824  #ifdef SUPPORT_OCP
1825  	u32 ocp_int = 0;
1826  
1827  	ocp_int = OC_INT;
1828  #endif
1829  
1830  	if (chip->ss_en) {
1831  		chip->ss_counter = 0;
1832  		if (rtsx_get_stat(chip) == RTSX_STAT_SS) {
1833  			exit_ss = true;
1834  			rtsx_exit_L1(chip);
1835  			rtsx_set_stat(chip, RTSX_STAT_RUN);
1836  		}
1837  	}
1838  
1839  	int_enable = rtsx_readl(chip, RTSX_BIER);
1840  	chip->int_reg = rtsx_readl(chip, RTSX_BIPR);
1841  
1842  	if (((chip->int_reg & int_enable) == 0) ||
1843  	    chip->int_reg == 0xFFFFFFFF)
1844  		return STATUS_FAIL;
1845  
1846  	status = chip->int_reg &= (int_enable | 0x7FFFFF);
1847  
1848  	if (status & CARD_INT) {
1849  		chip->auto_delink_cnt = 0;
1850  
1851  		if (status & SD_INT) {
1852  			if (status & SD_EXIST) {
1853  				set_bit(SD_NR, &chip->need_reset);
1854  			} else {
1855  				set_bit(SD_NR, &chip->need_release);
1856  				chip->sd_reset_counter = 0;
1857  				chip->sd_show_cnt = 0;
1858  				clear_bit(SD_NR, &chip->need_reset);
1859  			}
1860  		} else {
1861  			/*
1862  			 * If multi-luns, it's possible that
1863  			 * when plugging/unplugging one card
1864  			 * there is another card which still
1865  			 * exists in the slot. In this case,
1866  			 * all existed cards should be reset.
1867  			 */
1868  			if (exit_ss && (status & SD_EXIST))
1869  				set_bit(SD_NR, &chip->need_reinit);
1870  		}
1871  		if (!CHECK_PID(chip, 0x5288) || CHECK_BARO_PKG(chip, QFN)) {
1872  			if (status & XD_INT) {
1873  				if (status & XD_EXIST) {
1874  					set_bit(XD_NR, &chip->need_reset);
1875  				} else {
1876  					set_bit(XD_NR, &chip->need_release);
1877  					chip->xd_reset_counter = 0;
1878  					chip->xd_show_cnt = 0;
1879  					clear_bit(XD_NR, &chip->need_reset);
1880  				}
1881  			} else {
1882  				if (exit_ss && (status & XD_EXIST))
1883  					set_bit(XD_NR, &chip->need_reinit);
1884  			}
1885  		}
1886  		if (status & MS_INT) {
1887  			if (status & MS_EXIST) {
1888  				set_bit(MS_NR, &chip->need_reset);
1889  			} else {
1890  				set_bit(MS_NR, &chip->need_release);
1891  				chip->ms_reset_counter = 0;
1892  				chip->ms_show_cnt = 0;
1893  				clear_bit(MS_NR, &chip->need_reset);
1894  			}
1895  		} else {
1896  			if (exit_ss && (status & MS_EXIST))
1897  				set_bit(MS_NR, &chip->need_reinit);
1898  		}
1899  	}
1900  
1901  #ifdef SUPPORT_OCP
1902  	chip->ocp_int = ocp_int & status;
1903  #endif
1904  
1905  	if (chip->sd_io && (chip->int_reg & DATA_DONE_INT))
1906  		chip->int_reg &= ~(u32)DATA_DONE_INT;
1907  
1908  	return STATUS_SUCCESS;
1909  }
1910  
rtsx_do_before_power_down(struct rtsx_chip * chip,int pm_stat)1911  void rtsx_do_before_power_down(struct rtsx_chip *chip, int pm_stat)
1912  {
1913  	int retval;
1914  
1915  	dev_dbg(rtsx_dev(chip), "%s, pm_stat = %d\n", __func__, pm_stat);
1916  
1917  	rtsx_set_stat(chip, RTSX_STAT_SUSPEND);
1918  
1919  	retval = rtsx_force_power_on(chip, SSC_PDCTL);
1920  	if (retval != STATUS_SUCCESS)
1921  		return;
1922  
1923  	rtsx_release_cards(chip);
1924  	rtsx_disable_bus_int(chip);
1925  	turn_off_led(chip, LED_GPIO);
1926  
1927  #ifdef HW_AUTO_SWITCH_SD_BUS
1928  	if (chip->sd_io) {
1929  		chip->sdio_in_charge = 1;
1930  		if (CHECK_PID(chip, 0x5208)) {
1931  			rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1932  			/* Enable sdio_bus_auto_switch */
1933  			rtsx_write_register(chip, 0xFE70, 0x80, 0x80);
1934  		} else if (CHECK_PID(chip, 0x5288)) {
1935  			rtsx_write_register(chip, TLPTISTAT, 0x08, 0x08);
1936  			/* Enable sdio_bus_auto_switch */
1937  			rtsx_write_register(chip, 0xFE5A, 0x08, 0x08);
1938  		}
1939  	}
1940  #endif
1941  
1942  	if (CHECK_PID(chip, 0x5208) && chip->ic_version >= IC_VER_D) {
1943  		/* u_force_clkreq_0 */
1944  		rtsx_write_register(chip, PETXCFG, 0x08, 0x08);
1945  	}
1946  
1947  	if (pm_stat == PM_S1) {
1948  		dev_dbg(rtsx_dev(chip), "Host enter S1\n");
1949  		rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1950  				    HOST_ENTER_S1);
1951  	} else if (pm_stat == PM_S3) {
1952  		if (chip->s3_pwr_off_delay > 0)
1953  			wait_timeout(chip->s3_pwr_off_delay);
1954  
1955  		dev_dbg(rtsx_dev(chip), "Host enter S3\n");
1956  		rtsx_write_register(chip, HOST_SLEEP_STATE, 0x03,
1957  				    HOST_ENTER_S3);
1958  	}
1959  
1960  	if (chip->do_delink_before_power_down && chip->auto_delink_en)
1961  		rtsx_write_register(chip, CHANGE_LINK_STATE, 0x02, 2);
1962  
1963  	rtsx_force_power_down(chip, SSC_PDCTL | OC_PDCTL);
1964  
1965  	chip->cur_clk = 0;
1966  	chip->cur_card = 0;
1967  	chip->card_exist = 0;
1968  }
1969  
rtsx_enable_aspm(struct rtsx_chip * chip)1970  void rtsx_enable_aspm(struct rtsx_chip *chip)
1971  {
1972  	if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && !chip->aspm_enabled) {
1973  		dev_dbg(rtsx_dev(chip), "Try to enable ASPM\n");
1974  		chip->aspm_enabled = 1;
1975  
1976  		if (chip->asic_code && CHECK_PID(chip, 0x5208))
1977  			rtsx_write_phy_register(chip, 0x07, 0);
1978  		if (CHECK_PID(chip, 0x5208)) {
1979  			rtsx_write_register(chip, ASPM_FORCE_CTL, 0xF3,
1980  					    0x30 | chip->aspm_level[0]);
1981  		} else {
1982  			rtsx_write_config_byte(chip, LCTLR,
1983  					       chip->aspm_l0s_l1_en);
1984  		}
1985  
1986  		if (CHK_SDIO_EXIST(chip)) {
1987  			u16 val = chip->aspm_l0s_l1_en | 0x0100;
1988  
1989  			rtsx_write_cfg_dw(chip, CHECK_PID(chip, 0x5288) ? 2 : 1,
1990  					  0xC0, 0xFFF, val);
1991  		}
1992  	}
1993  }
1994  
rtsx_disable_aspm(struct rtsx_chip * chip)1995  void rtsx_disable_aspm(struct rtsx_chip *chip)
1996  {
1997  	if (CHECK_PID(chip, 0x5208))
1998  		rtsx_monitor_aspm_config(chip);
1999  
2000  	if (chip->aspm_l0s_l1_en && chip->dynamic_aspm && chip->aspm_enabled) {
2001  		dev_dbg(rtsx_dev(chip), "Try to disable ASPM\n");
2002  		chip->aspm_enabled = 0;
2003  
2004  		if (chip->asic_code && CHECK_PID(chip, 0x5208))
2005  			rtsx_write_phy_register(chip, 0x07, 0x0129);
2006  		if (CHECK_PID(chip, 0x5208))
2007  			rtsx_write_register(chip, ASPM_FORCE_CTL,
2008  					    0xF3, 0x30);
2009  		else
2010  			rtsx_write_config_byte(chip, LCTLR, 0x00);
2011  
2012  		wait_timeout(1);
2013  	}
2014  }
2015  
rtsx_read_ppbuf(struct rtsx_chip * chip,u8 * buf,int buf_len)2016  int rtsx_read_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2017  {
2018  	int retval;
2019  	int i, j;
2020  	u16 reg_addr;
2021  	u8 *ptr;
2022  
2023  	if (!buf)
2024  		return STATUS_ERROR;
2025  
2026  	ptr = buf;
2027  	reg_addr = PPBUF_BASE2;
2028  	for (i = 0; i < buf_len / 256; i++) {
2029  		rtsx_init_cmd(chip);
2030  
2031  		for (j = 0; j < 256; j++)
2032  			rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2033  
2034  		retval = rtsx_send_cmd(chip, 0, 250);
2035  		if (retval < 0)
2036  			return STATUS_FAIL;
2037  
2038  		memcpy(ptr, rtsx_get_cmd_data(chip), 256);
2039  		ptr += 256;
2040  	}
2041  
2042  	if (buf_len % 256) {
2043  		rtsx_init_cmd(chip);
2044  
2045  		for (j = 0; j < buf_len % 256; j++)
2046  			rtsx_add_cmd(chip, READ_REG_CMD, reg_addr++, 0, 0);
2047  
2048  		retval = rtsx_send_cmd(chip, 0, 250);
2049  		if (retval < 0)
2050  			return STATUS_FAIL;
2051  	}
2052  
2053  	memcpy(ptr, rtsx_get_cmd_data(chip), buf_len % 256);
2054  
2055  	return STATUS_SUCCESS;
2056  }
2057  
rtsx_write_ppbuf(struct rtsx_chip * chip,u8 * buf,int buf_len)2058  int rtsx_write_ppbuf(struct rtsx_chip *chip, u8 *buf, int buf_len)
2059  {
2060  	int retval;
2061  	int i, j;
2062  	u16 reg_addr;
2063  	u8 *ptr;
2064  
2065  	if (!buf)
2066  		return STATUS_ERROR;
2067  
2068  	ptr = buf;
2069  	reg_addr = PPBUF_BASE2;
2070  	for (i = 0; i < buf_len / 256; i++) {
2071  		rtsx_init_cmd(chip);
2072  
2073  		for (j = 0; j < 256; j++) {
2074  			rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
2075  				     *ptr);
2076  			ptr++;
2077  		}
2078  
2079  		retval = rtsx_send_cmd(chip, 0, 250);
2080  		if (retval < 0)
2081  			return STATUS_FAIL;
2082  	}
2083  
2084  	if (buf_len % 256) {
2085  		rtsx_init_cmd(chip);
2086  
2087  		for (j = 0; j < buf_len % 256; j++) {
2088  			rtsx_add_cmd(chip, WRITE_REG_CMD, reg_addr++, 0xFF,
2089  				     *ptr);
2090  			ptr++;
2091  		}
2092  
2093  		retval = rtsx_send_cmd(chip, 0, 250);
2094  		if (retval < 0)
2095  			return STATUS_FAIL;
2096  	}
2097  
2098  	return STATUS_SUCCESS;
2099  }
2100  
rtsx_check_chip_exist(struct rtsx_chip * chip)2101  int rtsx_check_chip_exist(struct rtsx_chip *chip)
2102  {
2103  	if (rtsx_readl(chip, 0) == 0xFFFFFFFF)
2104  		return STATUS_FAIL;
2105  
2106  	return STATUS_SUCCESS;
2107  }
2108  
rtsx_force_power_on(struct rtsx_chip * chip,u8 ctl)2109  int rtsx_force_power_on(struct rtsx_chip *chip, u8 ctl)
2110  {
2111  	int retval;
2112  	u8 mask = 0;
2113  
2114  	if (ctl & SSC_PDCTL)
2115  		mask |= SSC_POWER_DOWN;
2116  
2117  #ifdef SUPPORT_OCP
2118  	if (ctl & OC_PDCTL) {
2119  		mask |= SD_OC_POWER_DOWN;
2120  		if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2121  			mask |= MS_OC_POWER_DOWN;
2122  	}
2123  #endif
2124  
2125  	if (mask) {
2126  		retval = rtsx_write_register(chip, FPDCTL, mask, 0);
2127  		if (retval != STATUS_SUCCESS)
2128  			return STATUS_FAIL;
2129  
2130  		if (CHECK_PID(chip, 0x5288))
2131  			wait_timeout(200);
2132  	}
2133  
2134  	return STATUS_SUCCESS;
2135  }
2136  
rtsx_force_power_down(struct rtsx_chip * chip,u8 ctl)2137  int rtsx_force_power_down(struct rtsx_chip *chip, u8 ctl)
2138  {
2139  	int retval;
2140  	u8 mask = 0, val = 0;
2141  
2142  	if (ctl & SSC_PDCTL)
2143  		mask |= SSC_POWER_DOWN;
2144  
2145  #ifdef SUPPORT_OCP
2146  	if (ctl & OC_PDCTL) {
2147  		mask |= SD_OC_POWER_DOWN;
2148  		if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2149  			mask |= MS_OC_POWER_DOWN;
2150  	}
2151  #endif
2152  
2153  	if (mask) {
2154  		val = mask;
2155  		retval = rtsx_write_register(chip, FPDCTL, mask, val);
2156  		if (retval != STATUS_SUCCESS)
2157  			return STATUS_FAIL;
2158  	}
2159  
2160  	return STATUS_SUCCESS;
2161  }
2162