Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * Copyright (C) 2019 Genesys Logic, Inc.
   4 *
   5 * Authors: Ben Chuang <ben.chuang@genesyslogic.com.tw>
   6 *
   7 * Version: v0.9.0 (2019-08-08)
   8 */
   9
  10#include <linux/bitfield.h>
  11#include <linux/bits.h>
  12#include <linux/pci.h>
  13#include <linux/mmc/mmc.h>
  14#include <linux/delay.h>
  15#include <linux/of.h>
  16#include <linux/iopoll.h>
  17#include "sdhci.h"
  18#include "sdhci-cqhci.h"
  19#include "sdhci-pci.h"
  20#include "cqhci.h"
  21#include "sdhci-uhs2.h"
  22
  23/*  Genesys Logic extra registers */
  24#define SDHCI_GLI_9750_WT         0x800
  25#define   SDHCI_GLI_9750_WT_EN      BIT(0)
  26#define   GLI_9750_WT_EN_ON	    0x1
  27#define   GLI_9750_WT_EN_OFF	    0x0
  28
  29#define SDHCI_GLI_9750_CFG2          0x848
  30#define   SDHCI_GLI_9750_CFG2_L1DLY    GENMASK(28, 24)
  31#define   GLI_9750_CFG2_L1DLY_VALUE    0x1F
  32
  33#define SDHCI_GLI_9750_DRIVING      0x860
  34#define   SDHCI_GLI_9750_DRIVING_1    GENMASK(11, 0)
  35#define   SDHCI_GLI_9750_DRIVING_2    GENMASK(27, 26)
  36#define   GLI_9750_DRIVING_1_VALUE    0xFFF
  37#define   GLI_9750_DRIVING_2_VALUE    0x3
  38#define   SDHCI_GLI_9750_SEL_1        BIT(29)
  39#define   SDHCI_GLI_9750_SEL_2        BIT(31)
  40#define   SDHCI_GLI_9750_ALL_RST      (BIT(24)|BIT(25)|BIT(28)|BIT(30))
  41
  42#define SDHCI_GLI_9750_PLL	      0x864
  43#define   SDHCI_GLI_9750_PLL_LDIV       GENMASK(9, 0)
  44#define   SDHCI_GLI_9750_PLL_PDIV       GENMASK(14, 12)
  45#define   SDHCI_GLI_9750_PLL_DIR        BIT(15)
  46#define   SDHCI_GLI_9750_PLL_TX2_INV    BIT(23)
  47#define   SDHCI_GLI_9750_PLL_TX2_DLY    GENMASK(22, 20)
  48#define   GLI_9750_PLL_TX2_INV_VALUE    0x1
  49#define   GLI_9750_PLL_TX2_DLY_VALUE    0x0
  50#define   SDHCI_GLI_9750_PLLSSC_STEP    GENMASK(28, 24)
  51#define   SDHCI_GLI_9750_PLLSSC_EN      BIT(31)
  52
  53#define SDHCI_GLI_9750_PLLSSC        0x86C
  54#define   SDHCI_GLI_9750_PLLSSC_PPM    GENMASK(31, 16)
  55
  56#define SDHCI_GLI_9750_SW_CTRL      0x874
  57#define   SDHCI_GLI_9750_SW_CTRL_4    GENMASK(7, 6)
  58#define   GLI_9750_SW_CTRL_4_VALUE    0x3
  59
  60#define SDHCI_GLI_9750_MISC            0x878
  61#define   SDHCI_GLI_9750_MISC_TX1_INV    BIT(2)
  62#define   SDHCI_GLI_9750_MISC_RX_INV     BIT(3)
  63#define   SDHCI_GLI_9750_MISC_TX1_DLY    GENMASK(6, 4)
  64#define   GLI_9750_MISC_TX1_INV_VALUE    0x0
  65#define   GLI_9750_MISC_RX_INV_ON        0x1
  66#define   GLI_9750_MISC_RX_INV_OFF       0x0
  67#define   GLI_9750_MISC_RX_INV_VALUE     GLI_9750_MISC_RX_INV_OFF
  68#define   GLI_9750_MISC_TX1_DLY_VALUE    0x5
  69#define   SDHCI_GLI_9750_MISC_SSC_OFF    BIT(26)
  70
  71#define SDHCI_GLI_9750_TUNING_CONTROL	          0x540
  72#define   SDHCI_GLI_9750_TUNING_CONTROL_EN          BIT(4)
  73#define   GLI_9750_TUNING_CONTROL_EN_ON             0x1
  74#define   GLI_9750_TUNING_CONTROL_EN_OFF            0x0
  75#define   SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_1    BIT(16)
  76#define   SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_2    GENMASK(20, 19)
  77#define   GLI_9750_TUNING_CONTROL_GLITCH_1_VALUE    0x1
  78#define   GLI_9750_TUNING_CONTROL_GLITCH_2_VALUE    0x2
  79
  80#define SDHCI_GLI_9750_TUNING_PARAMETERS           0x544
  81#define   SDHCI_GLI_9750_TUNING_PARAMETERS_RX_DLY    GENMASK(2, 0)
  82#define   GLI_9750_TUNING_PARAMETERS_RX_DLY_VALUE    0x1
  83
  84#define SDHCI_GLI_9763E_CTRL_HS400  0x7
  85
  86#define SDHCI_GLI_9763E_HS400_ES_REG      0x52C
  87#define   SDHCI_GLI_9763E_HS400_ES_BIT      BIT(8)
  88
  89#define PCIE_GLI_9763E_VHS	 0x884
  90#define   GLI_9763E_VHS_REV	   GENMASK(19, 16)
  91#define   GLI_9763E_VHS_REV_R      0x0
  92#define   GLI_9763E_VHS_REV_M      0x1
  93#define   GLI_9763E_VHS_REV_W      0x2
  94#define PCIE_GLI_9763E_MB	 0x888
  95#define   GLI_9763E_MB_CMDQ_OFF	   BIT(19)
  96#define   GLI_9763E_MB_ERP_ON      BIT(7)
  97#define PCIE_GLI_9763E_SCR	 0x8E0
  98#define   GLI_9763E_SCR_AXI_REQ	   BIT(9)
  99
 100#define PCIE_GLI_9763E_CFG       0x8A0
 101#define   GLI_9763E_CFG_LPSN_DIS   BIT(12)
 102
 103#define PCIE_GLI_9763E_CFG2      0x8A4
 104#define   GLI_9763E_CFG2_L1DLY     GENMASK(28, 19)
 105#define   GLI_9763E_CFG2_L1DLY_MID 0x54
 106
 107#define PCIE_GLI_9763E_MMC_CTRL  0x960
 108#define   GLI_9763E_HS400_SLOW     BIT(3)
 109
 110#define PCIE_GLI_9763E_CLKRXDLY  0x934
 111#define   GLI_9763E_HS400_RXDLY    GENMASK(31, 28)
 112#define   GLI_9763E_HS400_RXDLY_5  0x5
 113
 114#define SDHCI_GLI_9763E_CQE_BASE_ADDR	 0x200
 115#define GLI_9763E_CQE_TRNS_MODE	   (SDHCI_TRNS_MULTI | \
 116				    SDHCI_TRNS_BLK_CNT_EN | \
 117				    SDHCI_TRNS_DMA)
 118
 119#define PCI_GLI_9755_WT       0x800
 120#define   PCI_GLI_9755_WT_EN    BIT(0)
 121#define   GLI_9755_WT_EN_ON     0x1
 122#define   GLI_9755_WT_EN_OFF    0x0
 123
 124#define PCI_GLI_9755_PECONF   0x44
 125#define   PCI_GLI_9755_LFCLK    GENMASK(14, 12)
 126#define   PCI_GLI_9755_DMACLK   BIT(29)
 127#define   PCI_GLI_9755_INVERT_CD  BIT(30)
 128#define   PCI_GLI_9755_INVERT_WP  BIT(31)
 129
 130#define PCI_GLI_9755_CFG2          0x48
 131#define   PCI_GLI_9755_CFG2_L1DLY    GENMASK(28, 24)
 132#define   GLI_9755_CFG2_L1DLY_VALUE  0x1F
 133
 134#define PCI_GLI_9755_PLL            0x64
 135#define   PCI_GLI_9755_PLL_LDIV       GENMASK(9, 0)
 136#define   PCI_GLI_9755_PLL_PDIV       GENMASK(14, 12)
 137#define   PCI_GLI_9755_PLL_DIR        BIT(15)
 138#define   PCI_GLI_9755_PLLSSC_STEP    GENMASK(28, 24)
 139#define   PCI_GLI_9755_PLLSSC_EN      BIT(31)
 140
 141#define PCI_GLI_9755_PLLSSC        0x68
 142#define   PCI_GLI_9755_PLLSSC_PPM    GENMASK(15, 0)
 143#define   PCI_GLI_9755_PLLSSC_RTL             BIT(24)
 144#define   GLI_9755_PLLSSC_RTL_VALUE           0x1
 145#define   PCI_GLI_9755_PLLSSC_TRANS_PASS      BIT(27)
 146#define   GLI_9755_PLLSSC_TRANS_PASS_VALUE    0x1
 147#define   PCI_GLI_9755_PLLSSC_RECV            GENMASK(29, 28)
 148#define   GLI_9755_PLLSSC_RECV_VALUE          0x0
 149#define   PCI_GLI_9755_PLLSSC_TRAN            GENMASK(31, 30)
 150#define   GLI_9755_PLLSSC_TRAN_VALUE          0x3
 151
 152#define PCI_GLI_9755_UHS2_PLL            0x6C
 153#define   PCI_GLI_9755_UHS2_PLL_SSC        GENMASK(9, 8)
 154#define   GLI_9755_UHS2_PLL_SSC_VALUE      0x0
 155#define   PCI_GLI_9755_UHS2_PLL_DELAY      BIT(18)
 156#define   GLI_9755_UHS2_PLL_DELAY_VALUE    0x1
 157#define   PCI_GLI_9755_UHS2_PLL_PDRST      BIT(27)
 158#define   GLI_9755_UHS2_PLL_PDRST_VALUE    0x1
 159
 160#define PCI_GLI_9755_SerDes  0x70
 161#define   PCI_GLI_9755_UHS2_SERDES_INTR       GENMASK(2, 0)
 162#define   GLI_9755_UHS2_SERDES_INTR_VALUE     0x3
 163#define   PCI_GLI_9755_UHS2_SERDES_ZC1        BIT(3)
 164#define   GLI_9755_UHS2_SERDES_ZC1_VALUE      0x0
 165#define   PCI_GLI_9755_UHS2_SERDES_ZC2        GENMASK(7, 4)
 166#define   GLI_9755_UHS2_SERDES_ZC2_DEFAULT    0xB
 167#define   GLI_9755_UHS2_SERDES_ZC2_SANDISK    0x0
 168#define PCI_GLI_9755_SCP_DIS   BIT(19)
 169#define   PCI_GLI_9755_UHS2_SERDES_TRAN       GENMASK(27, 24)
 170#define   GLI_9755_UHS2_SERDES_TRAN_VALUE     0xC
 171#define   PCI_GLI_9755_UHS2_SERDES_RECV       GENMASK(31, 28)
 172#define   GLI_9755_UHS2_SERDES_RECV_VALUE     0xF
 173
 174#define PCI_GLI_9755_MISC	    0x78
 175#define   PCI_GLI_9755_MISC_SSC_OFF    BIT(26)
 176
 177#define SDHCI_GLI_9767_SD_HOST_OPERATION_CTL				0x508
 178#define   SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_CMD_CONFLICT_CHECK	  BIT(0)
 179#define   SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE			  GENMASK(21, 16)
 180#define   SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_PLUG_IN_VALUE	  0x05
 181#define   SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_PLUG_OUT_VALUE	  0x3F
 182#define   SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE		  GENMASK(23, 22)
 183#define   SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE_1MS	  0x2
 184#define   SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE_10MS	  0x3
 185
 186#define SDHCI_GLI_9767_GM_BURST_SIZE			0x510
 187#define   SDHCI_GLI_9767_GM_BURST_SIZE_AXI_ALWAYS_SET	  BIT(8)
 188
 189#define PCIE_GLI_9767_VHS	0x884
 190#define   GLI_9767_VHS_REV	  GENMASK(19, 16)
 191#define   GLI_9767_VHS_REV_R	  0x0
 192#define   GLI_9767_VHS_REV_M	  0x1
 193#define   GLI_9767_VHS_REV_W	  0x2
 194
 195#define PCIE_GLI_9767_COM_MAILBOX		0x888
 196#define   PCIE_GLI_9767_COM_MAILBOX_SSC_EN	  BIT(1)
 197
 198#define PCIE_GLI_9767_CFG		0x8A0
 199#define   PCIE_GLI_9767_CFG_LOW_PWR_OFF	  BIT(12)
 200
 201#define PCIE_GLI_9767_COMBO_MUX_CTL			0x8C8
 202#define   PCIE_GLI_9767_COMBO_MUX_CTL_RST_EN		  BIT(6)
 203#define   PCIE_GLI_9767_COMBO_MUX_CTL_WAIT_PERST_EN	  BIT(10)
 204
 205#define PCIE_GLI_9767_PWR_MACRO_CTL					0x8D0
 206#define   PCIE_GLI_9767_PWR_MACRO_CTL_LOW_VOLTAGE			  GENMASK(3, 0)
 207#define   PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE		  GENMASK(15, 12)
 208#define   PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE_VALUE	  0x7
 209#define   PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL		  GENMASK(29, 28)
 210#define   PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL_VALUE		  0x3
 211
 212#define PCIE_GLI_9767_SCR				0x8E0
 213#define   PCIE_GLI_9767_SCR_AUTO_AXI_W_BURST		  BIT(6)
 214#define   PCIE_GLI_9767_SCR_AUTO_AXI_R_BURST		  BIT(7)
 215#define   PCIE_GLI_9767_SCR_AXI_REQ			  BIT(9)
 216#define   PCIE_GLI_9767_SCR_CARD_DET_PWR_SAVING_EN	  BIT(10)
 217#define   PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE0	  BIT(16)
 218#define   PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE1	  BIT(17)
 219#define   PCIE_GLI_9767_SCR_CORE_PWR_D3_OFF		  BIT(21)
 220#define   PCIE_GLI_9767_SCR_CFG_RST_DATA_LINK_DOWN	  BIT(30)
 221
 222#define PCIE_GLI_9767_RESET_REG				0x8E4
 223#define   PCIE_GLI_9767_RESET_REG_SD_HOST_SW_RESET	  BIT(0)
 224
 225#define PCIE_GLI_9767_UHS2_PHY_SET_REG1				0x90C
 226#define   PCIE_GLI_9767_UHS2_PHY_SET_REG1_SERDES_INTR		  GENMASK(31, 29)
 227#define   PCIE_GLI_9767_UHS2_PHY_SET_REG1_SERDES_INTR_VALUE	  0x3
 228
 229#define PCIE_GLI_9767_SDHC_CAP			0x91C
 230#define   PCIE_GLI_9767_SDHC_CAP_SDEI_RESULT	  BIT(5)
 231
 232#define PCIE_GLI_9767_SD_PLL_CTL			0x938
 233#define   PCIE_GLI_9767_SD_PLL_CTL_PLL_LDIV		  GENMASK(9, 0)
 234#define   PCIE_GLI_9767_SD_PLL_CTL_PLL_PDIV		  GENMASK(15, 12)
 235#define   PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN		  BIT(16)
 236#define   PCIE_GLI_9767_SD_PLL_CTL_SSC_EN		  BIT(19)
 237#define   PCIE_GLI_9767_SD_PLL_CTL_SSC_STEP_SETTING	  GENMASK(28, 24)
 238
 239#define PCIE_GLI_9767_SD_PLL_CTL2		0x93C
 240#define   PCIE_GLI_9767_SD_PLL_CTL2_PLLSSC_PPM	  GENMASK(31, 16)
 241
 242#define PCIE_GLI_9767_SD_EXPRESS_CTL			0x940
 243#define   PCIE_GLI_9767_SD_EXPRESS_CTL_SDEI_EXE		  BIT(0)
 244#define   PCIE_GLI_9767_SD_EXPRESS_CTL_SD_EXPRESS_MODE	  BIT(1)
 245
 246#define PCIE_GLI_9767_SD_DATA_MULTI_CTL				0x944
 247#define   PCIE_GLI_9767_SD_DATA_MULTI_CTL_SELECT_UHS2		  BIT(5)
 248#define   PCIE_GLI_9767_SD_DATA_MULTI_CTL_UHS2_SWITCH_CTL	  BIT(8)
 249#define   PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME	  GENMASK(23, 16)
 250#define   PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME_VALUE	  0x64
 251
 252#define PCIE_GLI_9767_UHS2_PHY_SET_REG2					0x948
 253#define   PCIE_GLI_9767_UHS2_PHY_SET_REG2_SSC_PPM_SETTING		  GENMASK(22, 21)
 254#define   PCIE_GLI_9767_UHS2_PHY_SET_REG2_SSC_PPM_SETTING_VALUE		  0x0
 255
 256#define PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2			0x950
 257#define   PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2_SDEI_COMPLETE	  BIT(0)
 258
 259#define PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2				0x954
 260#define   PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2_SDEI_COMPLETE_STATUS_EN	  BIT(0)
 261
 262#define PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2				0x958
 263#define   PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2_SDEI_COMPLETE_SIGNAL_EN	  BIT(0)
 264
 265#define PCIE_GLI_9767_UHS2_CTL1				0x95C
 266#define   PCIE_GLI_9767_UHS2_CTL1_TRANS_PASS		  BIT(5)
 267#define   PCIE_GLI_9767_UHS2_CTL1_TRANS_PASS_VALUE	  0x1
 268#define   PCIE_GLI_9767_UHS2_CTL1_DECODING_CTL		  BIT(6)
 269#define   PCIE_GLI_9767_UHS2_CTL1_DECODING_CTL_VALUE	  0x1
 270#define   PCIE_GLI_9767_UHS2_CTL1_SERDES_TRAN		  GENMASK(10, 7)
 271#define   PCIE_GLI_9767_UHS2_CTL1_SERDES_TRAN_VALUE	  0x3
 272#define   PCIE_GLI_9767_UHS2_CTL1_SERDES_RECV		  GENMASK(14, 11)
 273#define   PCIE_GLI_9767_UHS2_CTL1_SERDES_RECV_VALUE	  0xf
 274#define   PCIE_GLI_9767_UHS2_CTL1_DIR_TRANS		  GENMASK(16, 15)
 275#define   PCIE_GLI_9767_UHS2_CTL1_DIR_TRANS_VALUE	  0x0
 276#define   PCIE_GLI_9767_UHS2_CTL1_DIR_RECV		  GENMASK(18, 17)
 277#define   PCIE_GLI_9767_UHS2_CTL1_DIR_RECV_VALUE	  0x0
 278#define   PCIE_GLI_9767_UHS2_CTL1_PDRST			  BIT(25)
 279#define   PCIE_GLI_9767_UHS2_CTL1_PDRST_VALUE		  0x1
 280
 281#define PCIE_GLI_9767_UHS2_CTL2			0x964
 282#define   PCIE_GLI_9767_UHS2_CTL2_ZC		  GENMASK(3, 0)
 283#define   PCIE_GLI_9767_UHS2_CTL2_ZC_VALUE	  0xb
 284#define   PCIE_GLI_9767_UHS2_CTL2_ZC_CTL	  BIT(6)
 285#define   PCIE_GLI_9767_UHS2_CTL2_ZC_CTL_VALUE	  0x1
 286
 287#define GLI_MAX_TUNING_LOOP 40
 288
 289/* Genesys Logic chipset */
 290static inline void gl9750_wt_on(struct sdhci_host *host)
 291{
 292	u32 wt_value;
 293	u32 wt_enable;
 294
 295	wt_value = sdhci_readl(host, SDHCI_GLI_9750_WT);
 296	wt_enable = FIELD_GET(SDHCI_GLI_9750_WT_EN, wt_value);
 297
 298	if (wt_enable == GLI_9750_WT_EN_ON)
 299		return;
 300
 301	wt_value &= ~SDHCI_GLI_9750_WT_EN;
 302	wt_value |= FIELD_PREP(SDHCI_GLI_9750_WT_EN, GLI_9750_WT_EN_ON);
 303
 304	sdhci_writel(host, wt_value, SDHCI_GLI_9750_WT);
 305}
 306
 307static inline void gl9750_wt_off(struct sdhci_host *host)
 308{
 309	u32 wt_value;
 310	u32 wt_enable;
 311
 312	wt_value = sdhci_readl(host, SDHCI_GLI_9750_WT);
 313	wt_enable = FIELD_GET(SDHCI_GLI_9750_WT_EN, wt_value);
 314
 315	if (wt_enable == GLI_9750_WT_EN_OFF)
 316		return;
 317
 318	wt_value &= ~SDHCI_GLI_9750_WT_EN;
 319	wt_value |= FIELD_PREP(SDHCI_GLI_9750_WT_EN, GLI_9750_WT_EN_OFF);
 320
 321	sdhci_writel(host, wt_value, SDHCI_GLI_9750_WT);
 322}
 323
 324static void gli_set_9750(struct sdhci_host *host)
 325{
 326	u32 driving_value;
 327	u32 pll_value;
 328	u32 sw_ctrl_value;
 329	u32 misc_value;
 330	u32 parameter_value;
 331	u32 control_value;
 332	u16 ctrl2;
 333
 334	gl9750_wt_on(host);
 335
 336	driving_value = sdhci_readl(host, SDHCI_GLI_9750_DRIVING);
 337	pll_value = sdhci_readl(host, SDHCI_GLI_9750_PLL);
 338	sw_ctrl_value = sdhci_readl(host, SDHCI_GLI_9750_SW_CTRL);
 339	misc_value = sdhci_readl(host, SDHCI_GLI_9750_MISC);
 340	parameter_value = sdhci_readl(host, SDHCI_GLI_9750_TUNING_PARAMETERS);
 341	control_value = sdhci_readl(host, SDHCI_GLI_9750_TUNING_CONTROL);
 342
 343	driving_value &= ~(SDHCI_GLI_9750_DRIVING_1);
 344	driving_value &= ~(SDHCI_GLI_9750_DRIVING_2);
 345	driving_value |= FIELD_PREP(SDHCI_GLI_9750_DRIVING_1,
 346				    GLI_9750_DRIVING_1_VALUE);
 347	driving_value |= FIELD_PREP(SDHCI_GLI_9750_DRIVING_2,
 348				    GLI_9750_DRIVING_2_VALUE);
 349	driving_value &= ~(SDHCI_GLI_9750_SEL_1|SDHCI_GLI_9750_SEL_2|SDHCI_GLI_9750_ALL_RST);
 350	driving_value |= SDHCI_GLI_9750_SEL_2;
 351	sdhci_writel(host, driving_value, SDHCI_GLI_9750_DRIVING);
 352
 353	sw_ctrl_value &= ~SDHCI_GLI_9750_SW_CTRL_4;
 354	sw_ctrl_value |= FIELD_PREP(SDHCI_GLI_9750_SW_CTRL_4,
 355				    GLI_9750_SW_CTRL_4_VALUE);
 356	sdhci_writel(host, sw_ctrl_value, SDHCI_GLI_9750_SW_CTRL);
 357
 358	/* reset the tuning flow after reinit and before starting tuning */
 359	pll_value &= ~SDHCI_GLI_9750_PLL_TX2_INV;
 360	pll_value &= ~SDHCI_GLI_9750_PLL_TX2_DLY;
 361	pll_value |= FIELD_PREP(SDHCI_GLI_9750_PLL_TX2_INV,
 362				GLI_9750_PLL_TX2_INV_VALUE);
 363	pll_value |= FIELD_PREP(SDHCI_GLI_9750_PLL_TX2_DLY,
 364				GLI_9750_PLL_TX2_DLY_VALUE);
 365
 366	misc_value &= ~SDHCI_GLI_9750_MISC_TX1_INV;
 367	misc_value &= ~SDHCI_GLI_9750_MISC_RX_INV;
 368	misc_value &= ~SDHCI_GLI_9750_MISC_TX1_DLY;
 369	misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_TX1_INV,
 370				 GLI_9750_MISC_TX1_INV_VALUE);
 371	misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_RX_INV,
 372				 GLI_9750_MISC_RX_INV_VALUE);
 373	misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_TX1_DLY,
 374				 GLI_9750_MISC_TX1_DLY_VALUE);
 375
 376	parameter_value &= ~SDHCI_GLI_9750_TUNING_PARAMETERS_RX_DLY;
 377	parameter_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_PARAMETERS_RX_DLY,
 378				      GLI_9750_TUNING_PARAMETERS_RX_DLY_VALUE);
 379
 380	control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_1;
 381	control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_2;
 382	control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_1,
 383				    GLI_9750_TUNING_CONTROL_GLITCH_1_VALUE);
 384	control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_GLITCH_2,
 385				    GLI_9750_TUNING_CONTROL_GLITCH_2_VALUE);
 386
 387	sdhci_writel(host, pll_value, SDHCI_GLI_9750_PLL);
 388	sdhci_writel(host, misc_value, SDHCI_GLI_9750_MISC);
 389
 390	/* disable tuned clk */
 391	ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
 392	ctrl2 &= ~SDHCI_CTRL_TUNED_CLK;
 393	sdhci_writew(host, ctrl2, SDHCI_HOST_CONTROL2);
 394
 395	/* enable tuning parameters control */
 396	control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_EN;
 397	control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_EN,
 398				    GLI_9750_TUNING_CONTROL_EN_ON);
 399	sdhci_writel(host, control_value, SDHCI_GLI_9750_TUNING_CONTROL);
 400
 401	/* write tuning parameters */
 402	sdhci_writel(host, parameter_value, SDHCI_GLI_9750_TUNING_PARAMETERS);
 403
 404	/* disable tuning parameters control */
 405	control_value &= ~SDHCI_GLI_9750_TUNING_CONTROL_EN;
 406	control_value |= FIELD_PREP(SDHCI_GLI_9750_TUNING_CONTROL_EN,
 407				    GLI_9750_TUNING_CONTROL_EN_OFF);
 408	sdhci_writel(host, control_value, SDHCI_GLI_9750_TUNING_CONTROL);
 409
 410	/* clear tuned clk */
 411	ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
 412	ctrl2 &= ~SDHCI_CTRL_TUNED_CLK;
 413	sdhci_writew(host, ctrl2, SDHCI_HOST_CONTROL2);
 414
 415	gl9750_wt_off(host);
 416}
 417
 418static void gli_set_9750_rx_inv(struct sdhci_host *host, bool b)
 419{
 420	u32 misc_value;
 421
 422	gl9750_wt_on(host);
 423
 424	misc_value = sdhci_readl(host, SDHCI_GLI_9750_MISC);
 425	misc_value &= ~SDHCI_GLI_9750_MISC_RX_INV;
 426	if (b) {
 427		misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_RX_INV,
 428					 GLI_9750_MISC_RX_INV_ON);
 429	} else {
 430		misc_value |= FIELD_PREP(SDHCI_GLI_9750_MISC_RX_INV,
 431					 GLI_9750_MISC_RX_INV_OFF);
 432	}
 433	sdhci_writel(host, misc_value, SDHCI_GLI_9750_MISC);
 434
 435	gl9750_wt_off(host);
 436}
 437
 438static int __sdhci_execute_tuning_9750(struct sdhci_host *host, u32 opcode)
 439{
 440	int i;
 441	int rx_inv;
 442
 443	for (rx_inv = 0; rx_inv < 2; rx_inv++) {
 444		gli_set_9750_rx_inv(host, !!rx_inv);
 445		sdhci_start_tuning(host);
 446
 447		for (i = 0; i < GLI_MAX_TUNING_LOOP; i++) {
 448			u16 ctrl;
 449
 450			sdhci_send_tuning(host, opcode);
 451
 452			if (!host->tuning_done) {
 453				sdhci_abort_tuning(host, opcode);
 454				break;
 455			}
 456
 457			ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
 458			if (!(ctrl & SDHCI_CTRL_EXEC_TUNING)) {
 459				if (ctrl & SDHCI_CTRL_TUNED_CLK)
 460					return 0; /* Success! */
 461				break;
 462			}
 463		}
 464	}
 465	if (!host->tuning_done) {
 466		pr_info("%s: Tuning timeout, falling back to fixed sampling clock\n",
 467			mmc_hostname(host->mmc));
 468		return -ETIMEDOUT;
 469	}
 470
 471	pr_info("%s: Tuning failed, falling back to fixed sampling clock\n",
 472		mmc_hostname(host->mmc));
 473	sdhci_reset_tuning(host);
 474
 475	return -EAGAIN;
 476}
 477
 478static int gl9750_execute_tuning(struct sdhci_host *host, u32 opcode)
 479{
 480	host->mmc->retune_period = 0;
 481	if (host->tuning_mode == SDHCI_TUNING_MODE_1)
 482		host->mmc->retune_period = host->tuning_count;
 483
 484	gli_set_9750(host);
 485	host->tuning_err = __sdhci_execute_tuning_9750(host, opcode);
 486	sdhci_end_tuning(host);
 487
 488	return 0;
 489}
 490
 491static void gl9750_disable_ssc_pll(struct sdhci_host *host)
 492{
 493	u32 pll;
 494
 495	gl9750_wt_on(host);
 496	pll = sdhci_readl(host, SDHCI_GLI_9750_PLL);
 497	pll &= ~(SDHCI_GLI_9750_PLL_DIR | SDHCI_GLI_9750_PLLSSC_EN);
 498	sdhci_writel(host, pll, SDHCI_GLI_9750_PLL);
 499	gl9750_wt_off(host);
 500}
 501
 502static void gl9750_set_pll(struct sdhci_host *host, u8 dir, u16 ldiv, u8 pdiv)
 503{
 504	u32 pll;
 505
 506	gl9750_wt_on(host);
 507	pll = sdhci_readl(host, SDHCI_GLI_9750_PLL);
 508	pll &= ~(SDHCI_GLI_9750_PLL_LDIV |
 509		 SDHCI_GLI_9750_PLL_PDIV |
 510		 SDHCI_GLI_9750_PLL_DIR);
 511	pll |= FIELD_PREP(SDHCI_GLI_9750_PLL_LDIV, ldiv) |
 512	       FIELD_PREP(SDHCI_GLI_9750_PLL_PDIV, pdiv) |
 513	       FIELD_PREP(SDHCI_GLI_9750_PLL_DIR, dir);
 514	sdhci_writel(host, pll, SDHCI_GLI_9750_PLL);
 515	gl9750_wt_off(host);
 516
 517	/* wait for pll stable */
 518	mdelay(1);
 519}
 520
 521static bool gl9750_ssc_enable(struct sdhci_host *host)
 522{
 523	u32 misc;
 524	u8 off;
 525
 526	gl9750_wt_on(host);
 527	misc = sdhci_readl(host, SDHCI_GLI_9750_MISC);
 528	off = FIELD_GET(SDHCI_GLI_9750_MISC_SSC_OFF, misc);
 529	gl9750_wt_off(host);
 530
 531	return !off;
 532}
 533
 534static void gl9750_set_ssc(struct sdhci_host *host, u8 enable, u8 step, u16 ppm)
 535{
 536	u32 pll;
 537	u32 ssc;
 538
 539	gl9750_wt_on(host);
 540	pll = sdhci_readl(host, SDHCI_GLI_9750_PLL);
 541	ssc = sdhci_readl(host, SDHCI_GLI_9750_PLLSSC);
 542	pll &= ~(SDHCI_GLI_9750_PLLSSC_STEP |
 543		 SDHCI_GLI_9750_PLLSSC_EN);
 544	ssc &= ~SDHCI_GLI_9750_PLLSSC_PPM;
 545	pll |= FIELD_PREP(SDHCI_GLI_9750_PLLSSC_STEP, step) |
 546	       FIELD_PREP(SDHCI_GLI_9750_PLLSSC_EN, enable);
 547	ssc |= FIELD_PREP(SDHCI_GLI_9750_PLLSSC_PPM, ppm);
 548	sdhci_writel(host, ssc, SDHCI_GLI_9750_PLLSSC);
 549	sdhci_writel(host, pll, SDHCI_GLI_9750_PLL);
 550	gl9750_wt_off(host);
 551}
 552
 553static void gl9750_set_ssc_pll_205mhz(struct sdhci_host *host)
 554{
 555	bool enable = gl9750_ssc_enable(host);
 556
 557	/* set pll to 205MHz and ssc */
 558	gl9750_set_ssc(host, enable, 0xF, 0x5A1D);
 559	gl9750_set_pll(host, 0x1, 0x246, 0x0);
 560}
 561
 562static void gl9750_set_ssc_pll_100mhz(struct sdhci_host *host)
 563{
 564	bool enable = gl9750_ssc_enable(host);
 565
 566	/* set pll to 100MHz and ssc */
 567	gl9750_set_ssc(host, enable, 0xE, 0x51EC);
 568	gl9750_set_pll(host, 0x1, 0x244, 0x1);
 569}
 570
 571static void gl9750_set_ssc_pll_50mhz(struct sdhci_host *host)
 572{
 573	bool enable = gl9750_ssc_enable(host);
 574
 575	/* set pll to 50MHz and ssc */
 576	gl9750_set_ssc(host, enable, 0xE, 0x51EC);
 577	gl9750_set_pll(host, 0x1, 0x244, 0x3);
 578}
 579
 580static void sdhci_gl9750_set_clock(struct sdhci_host *host, unsigned int clock)
 581{
 582	struct mmc_ios *ios = &host->mmc->ios;
 583	u16 clk;
 584
 585	host->mmc->actual_clock = 0;
 586
 587	gl9750_disable_ssc_pll(host);
 588	sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
 589
 590	if (clock == 0)
 591		return;
 592
 593	clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
 594	if (clock == 200000000 && ios->timing == MMC_TIMING_UHS_SDR104) {
 595		host->mmc->actual_clock = 205000000;
 596		gl9750_set_ssc_pll_205mhz(host);
 597	} else if (clock == 100000000) {
 598		gl9750_set_ssc_pll_100mhz(host);
 599	} else if (clock == 50000000) {
 600		gl9750_set_ssc_pll_50mhz(host);
 601	}
 602
 603	sdhci_enable_clk(host, clk);
 604}
 605
 606static void gl9750_hw_setting(struct sdhci_host *host)
 607{
 608	struct sdhci_pci_slot *slot = sdhci_priv(host);
 609	struct pci_dev *pdev;
 610	int aer;
 611	u32 value;
 612
 613	pdev = slot->chip->pdev;
 614
 615	gl9750_wt_on(host);
 616
 617	value = sdhci_readl(host, SDHCI_GLI_9750_CFG2);
 618	value &= ~SDHCI_GLI_9750_CFG2_L1DLY;
 619	/* set ASPM L1 entry delay to 7.9us */
 620	value |= FIELD_PREP(SDHCI_GLI_9750_CFG2_L1DLY,
 621			    GLI_9750_CFG2_L1DLY_VALUE);
 622	sdhci_writel(host, value, SDHCI_GLI_9750_CFG2);
 623
 624	/* toggle PM state to allow GL9750 to enter ASPM L1.2 */
 625	pci_set_power_state(pdev, PCI_D3hot);
 626	pci_set_power_state(pdev, PCI_D0);
 627
 628	/* mask the replay timer timeout of AER */
 629	aer = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR);
 630	if (aer) {
 631		pci_read_config_dword(pdev, aer + PCI_ERR_COR_MASK, &value);
 632		value |= PCI_ERR_COR_REP_TIMER;
 633		pci_write_config_dword(pdev, aer + PCI_ERR_COR_MASK, value);
 634	}
 635
 636	gl9750_wt_off(host);
 637}
 638
 639static void gli_pcie_enable_msi(struct sdhci_pci_slot *slot)
 640{
 641	int ret;
 642
 643	ret = pci_alloc_irq_vectors(slot->chip->pdev, 1, 1,
 644				    PCI_IRQ_MSI | PCI_IRQ_MSIX);
 645	if (ret < 0) {
 646		pr_warn("%s: enable PCI MSI failed, error=%d\n",
 647		       mmc_hostname(slot->host->mmc), ret);
 648		return;
 649	}
 650
 651	slot->host->irq = pci_irq_vector(slot->chip->pdev, 0);
 652}
 653
 654static inline void gl9755_wt_on(struct pci_dev *pdev)
 655{
 656	u32 wt_value;
 657	u32 wt_enable;
 658
 659	pci_read_config_dword(pdev, PCI_GLI_9755_WT, &wt_value);
 660	wt_enable = FIELD_GET(PCI_GLI_9755_WT_EN, wt_value);
 661
 662	if (wt_enable == GLI_9755_WT_EN_ON)
 663		return;
 664
 665	wt_value &= ~PCI_GLI_9755_WT_EN;
 666	wt_value |= FIELD_PREP(PCI_GLI_9755_WT_EN, GLI_9755_WT_EN_ON);
 667
 668	pci_write_config_dword(pdev, PCI_GLI_9755_WT, wt_value);
 669}
 670
 671static inline void gl9755_wt_off(struct pci_dev *pdev)
 672{
 673	u32 wt_value;
 674	u32 wt_enable;
 675
 676	pci_read_config_dword(pdev, PCI_GLI_9755_WT, &wt_value);
 677	wt_enable = FIELD_GET(PCI_GLI_9755_WT_EN, wt_value);
 678
 679	if (wt_enable == GLI_9755_WT_EN_OFF)
 680		return;
 681
 682	wt_value &= ~PCI_GLI_9755_WT_EN;
 683	wt_value |= FIELD_PREP(PCI_GLI_9755_WT_EN, GLI_9755_WT_EN_OFF);
 684
 685	pci_write_config_dword(pdev, PCI_GLI_9755_WT, wt_value);
 686}
 687
 688static void gl9755_disable_ssc_pll(struct pci_dev *pdev)
 689{
 690	u32 pll;
 691
 692	gl9755_wt_on(pdev);
 693	pci_read_config_dword(pdev, PCI_GLI_9755_PLL, &pll);
 694	pll &= ~(PCI_GLI_9755_PLL_DIR | PCI_GLI_9755_PLLSSC_EN);
 695	pci_write_config_dword(pdev, PCI_GLI_9755_PLL, pll);
 696	gl9755_wt_off(pdev);
 697}
 698
 699static void gl9755_set_pll(struct pci_dev *pdev, u8 dir, u16 ldiv, u8 pdiv)
 700{
 701	u32 pll;
 702
 703	gl9755_wt_on(pdev);
 704	pci_read_config_dword(pdev, PCI_GLI_9755_PLL, &pll);
 705	pll &= ~(PCI_GLI_9755_PLL_LDIV |
 706		 PCI_GLI_9755_PLL_PDIV |
 707		 PCI_GLI_9755_PLL_DIR);
 708	pll |= FIELD_PREP(PCI_GLI_9755_PLL_LDIV, ldiv) |
 709	       FIELD_PREP(PCI_GLI_9755_PLL_PDIV, pdiv) |
 710	       FIELD_PREP(PCI_GLI_9755_PLL_DIR, dir);
 711	pci_write_config_dword(pdev, PCI_GLI_9755_PLL, pll);
 712	gl9755_wt_off(pdev);
 713
 714	/* wait for pll stable */
 715	mdelay(1);
 716}
 717
 718static bool gl9755_ssc_enable(struct pci_dev *pdev)
 719{
 720	u32 misc;
 721	u8 off;
 722
 723	gl9755_wt_on(pdev);
 724	pci_read_config_dword(pdev, PCI_GLI_9755_MISC, &misc);
 725	off = FIELD_GET(PCI_GLI_9755_MISC_SSC_OFF, misc);
 726	gl9755_wt_off(pdev);
 727
 728	return !off;
 729}
 730
 731static void gl9755_set_ssc(struct pci_dev *pdev, u8 enable, u8 step, u16 ppm)
 732{
 733	u32 pll;
 734	u32 ssc;
 735
 736	gl9755_wt_on(pdev);
 737	pci_read_config_dword(pdev, PCI_GLI_9755_PLL, &pll);
 738	pci_read_config_dword(pdev, PCI_GLI_9755_PLLSSC, &ssc);
 739	pll &= ~(PCI_GLI_9755_PLLSSC_STEP |
 740		 PCI_GLI_9755_PLLSSC_EN);
 741	ssc &= ~PCI_GLI_9755_PLLSSC_PPM;
 742	pll |= FIELD_PREP(PCI_GLI_9755_PLLSSC_STEP, step) |
 743	       FIELD_PREP(PCI_GLI_9755_PLLSSC_EN, enable);
 744	ssc |= FIELD_PREP(PCI_GLI_9755_PLLSSC_PPM, ppm);
 745	pci_write_config_dword(pdev, PCI_GLI_9755_PLLSSC, ssc);
 746	pci_write_config_dword(pdev, PCI_GLI_9755_PLL, pll);
 747	gl9755_wt_off(pdev);
 748}
 749
 750static void gl9755_set_ssc_pll_205mhz(struct pci_dev *pdev)
 751{
 752	bool enable = gl9755_ssc_enable(pdev);
 753
 754	/* set pll to 205MHz and ssc */
 755	gl9755_set_ssc(pdev, enable, 0xF, 0x5A1D);
 756	gl9755_set_pll(pdev, 0x1, 0x246, 0x0);
 757}
 758
 759static void gl9755_set_ssc_pll_100mhz(struct pci_dev *pdev)
 760{
 761	bool enable = gl9755_ssc_enable(pdev);
 762
 763	/* set pll to 100MHz and ssc */
 764	gl9755_set_ssc(pdev, enable, 0xE, 0x51EC);
 765	gl9755_set_pll(pdev, 0x1, 0x244, 0x1);
 766}
 767
 768static void gl9755_set_ssc_pll_50mhz(struct pci_dev *pdev)
 769{
 770	bool enable = gl9755_ssc_enable(pdev);
 771
 772	/* set pll to 50MHz and ssc */
 773	gl9755_set_ssc(pdev, enable, 0xE, 0x51EC);
 774	gl9755_set_pll(pdev, 0x1, 0x244, 0x3);
 775}
 776
 777static void sdhci_gl9755_set_clock(struct sdhci_host *host, unsigned int clock)
 778{
 779	struct sdhci_pci_slot *slot = sdhci_priv(host);
 780	struct mmc_ios *ios = &host->mmc->ios;
 781	struct pci_dev *pdev;
 782	u16 clk;
 783
 784	pdev = slot->chip->pdev;
 785	host->mmc->actual_clock = 0;
 786
 787	gl9755_disable_ssc_pll(pdev);
 788	sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
 789
 790	if (clock == 0)
 791		return;
 792
 793	clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
 794	if (clock == 200000000 && ios->timing == MMC_TIMING_UHS_SDR104) {
 795		host->mmc->actual_clock = 205000000;
 796		gl9755_set_ssc_pll_205mhz(pdev);
 797	} else if (clock == 100000000) {
 798		gl9755_set_ssc_pll_100mhz(pdev);
 799	} else if (clock == 50000000) {
 800		gl9755_set_ssc_pll_50mhz(pdev);
 801	}
 802
 803	sdhci_enable_clk(host, clk);
 804}
 805
 806static void gl9755_hw_setting(struct sdhci_pci_slot *slot)
 807{
 808	struct pci_dev *pdev = slot->chip->pdev;
 809	int aer;
 810	u32 value;
 811
 812	gl9755_wt_on(pdev);
 813
 814	pci_read_config_dword(pdev, PCI_GLI_9755_PECONF, &value);
 815	/*
 816	 * Apple ARM64 platforms using these chips may have
 817	 * inverted CD/WP detection.
 818	 */
 819	if (of_property_read_bool(pdev->dev.of_node, "cd-inverted"))
 820		value |= PCI_GLI_9755_INVERT_CD;
 821	if (of_property_read_bool(pdev->dev.of_node, "wp-inverted"))
 822		value |= PCI_GLI_9755_INVERT_WP;
 823	value &= ~PCI_GLI_9755_LFCLK;
 824	value &= ~PCI_GLI_9755_DMACLK;
 825	pci_write_config_dword(pdev, PCI_GLI_9755_PECONF, value);
 826
 827	/* enable short circuit protection */
 828	pci_read_config_dword(pdev, PCI_GLI_9755_SerDes, &value);
 829	value &= ~PCI_GLI_9755_SCP_DIS;
 830	pci_write_config_dword(pdev, PCI_GLI_9755_SerDes, value);
 831
 832	pci_read_config_dword(pdev, PCI_GLI_9755_CFG2, &value);
 833	value &= ~PCI_GLI_9755_CFG2_L1DLY;
 834	/* set ASPM L1 entry delay to 7.9us */
 835	value |= FIELD_PREP(PCI_GLI_9755_CFG2_L1DLY,
 836			    GLI_9755_CFG2_L1DLY_VALUE);
 837	pci_write_config_dword(pdev, PCI_GLI_9755_CFG2, value);
 838
 839	/* toggle PM state to allow GL9755 to enter ASPM L1.2 */
 840	pci_set_power_state(pdev, PCI_D3hot);
 841	pci_set_power_state(pdev, PCI_D0);
 842
 843	/* mask the replay timer timeout of AER */
 844	aer = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR);
 845	if (aer) {
 846		pci_read_config_dword(pdev, aer + PCI_ERR_COR_MASK, &value);
 847		value |= PCI_ERR_COR_REP_TIMER;
 848		pci_write_config_dword(pdev, aer + PCI_ERR_COR_MASK, value);
 849	}
 850
 851	gl9755_wt_off(pdev);
 852}
 853
 854static void gl9755_vendor_init(struct sdhci_host *host)
 855{
 856	struct sdhci_pci_slot *slot = sdhci_priv(host);
 857	struct pci_dev *pdev = slot->chip->pdev;
 858	u32 serdes;
 859	u32 pllssc;
 860	u32 uhs2_pll;
 861
 862	gl9755_wt_on(pdev);
 863
 864	pci_read_config_dword(pdev, PCI_GLI_9755_SerDes, &serdes);
 865	serdes &= ~PCI_GLI_9755_UHS2_SERDES_TRAN;
 866	serdes |= FIELD_PREP(PCI_GLI_9755_UHS2_SERDES_TRAN,
 867			     GLI_9755_UHS2_SERDES_TRAN_VALUE);
 868	serdes &= ~PCI_GLI_9755_UHS2_SERDES_RECV;
 869	serdes |= FIELD_PREP(PCI_GLI_9755_UHS2_SERDES_RECV,
 870			     GLI_9755_UHS2_SERDES_RECV_VALUE);
 871	serdes &= ~PCI_GLI_9755_UHS2_SERDES_INTR;
 872	serdes |= FIELD_PREP(PCI_GLI_9755_UHS2_SERDES_INTR,
 873			     GLI_9755_UHS2_SERDES_INTR_VALUE);
 874	serdes &= ~PCI_GLI_9755_UHS2_SERDES_ZC1;
 875	serdes |= FIELD_PREP(PCI_GLI_9755_UHS2_SERDES_ZC1,
 876			     GLI_9755_UHS2_SERDES_ZC1_VALUE);
 877	serdes &= ~PCI_GLI_9755_UHS2_SERDES_ZC2;
 878	serdes |= FIELD_PREP(PCI_GLI_9755_UHS2_SERDES_ZC2,
 879			     GLI_9755_UHS2_SERDES_ZC2_DEFAULT);
 880	pci_write_config_dword(pdev, PCI_GLI_9755_SerDes, serdes);
 881
 882	pci_read_config_dword(pdev, PCI_GLI_9755_UHS2_PLL, &uhs2_pll);
 883	uhs2_pll &= ~PCI_GLI_9755_UHS2_PLL_SSC;
 884	uhs2_pll |= FIELD_PREP(PCI_GLI_9755_UHS2_PLL_SSC,
 885			  GLI_9755_UHS2_PLL_SSC_VALUE);
 886	uhs2_pll &= ~PCI_GLI_9755_UHS2_PLL_DELAY;
 887	uhs2_pll |= FIELD_PREP(PCI_GLI_9755_UHS2_PLL_DELAY,
 888			  GLI_9755_UHS2_PLL_DELAY_VALUE);
 889	uhs2_pll &= ~PCI_GLI_9755_UHS2_PLL_PDRST;
 890	uhs2_pll |= FIELD_PREP(PCI_GLI_9755_UHS2_PLL_PDRST,
 891			  GLI_9755_UHS2_PLL_PDRST_VALUE);
 892	pci_write_config_dword(pdev, PCI_GLI_9755_UHS2_PLL, uhs2_pll);
 893
 894	pci_read_config_dword(pdev, PCI_GLI_9755_PLLSSC, &pllssc);
 895	pllssc &= ~PCI_GLI_9755_PLLSSC_RTL;
 896	pllssc |= FIELD_PREP(PCI_GLI_9755_PLLSSC_RTL,
 897			  GLI_9755_PLLSSC_RTL_VALUE);
 898	pllssc &= ~PCI_GLI_9755_PLLSSC_TRANS_PASS;
 899	pllssc |= FIELD_PREP(PCI_GLI_9755_PLLSSC_TRANS_PASS,
 900			  GLI_9755_PLLSSC_TRANS_PASS_VALUE);
 901	pllssc &= ~PCI_GLI_9755_PLLSSC_RECV;
 902	pllssc |= FIELD_PREP(PCI_GLI_9755_PLLSSC_RECV,
 903			  GLI_9755_PLLSSC_RECV_VALUE);
 904	pllssc &= ~PCI_GLI_9755_PLLSSC_TRAN;
 905	pllssc |= FIELD_PREP(PCI_GLI_9755_PLLSSC_TRAN,
 906			  GLI_9755_PLLSSC_TRAN_VALUE);
 907	pci_write_config_dword(pdev, PCI_GLI_9755_PLLSSC, pllssc);
 908
 909	gl9755_wt_off(pdev);
 910}
 911
 912static void sdhci_gli_pre_detect_init(struct sdhci_host *host)
 913{
 914	/* Need more time on UHS2 detect flow */
 915	sdhci_writeb(host, 0xA7, SDHCI_UHS2_TIMER_CTRL);
 916}
 917
 918static void sdhci_gli_overcurrent_event_enable(struct sdhci_host *host, bool enable)
 919{
 920	u32 mask;
 921
 922	mask = sdhci_readl(host, SDHCI_SIGNAL_ENABLE);
 923	if (enable)
 924		mask |= SDHCI_INT_BUS_POWER;
 925	else
 926		mask &= ~SDHCI_INT_BUS_POWER;
 927
 928	sdhci_writel(host, mask, SDHCI_SIGNAL_ENABLE);
 929
 930	mask = sdhci_readl(host, SDHCI_INT_ENABLE);
 931	if (enable)
 932		mask |= SDHCI_INT_BUS_POWER;
 933	else
 934		mask &= ~SDHCI_INT_BUS_POWER;
 935
 936	sdhci_writel(host, mask, SDHCI_INT_ENABLE);
 937}
 938
 939static void gl9755_set_power(struct sdhci_host *host, unsigned char mode,
 940			     unsigned short vdd)
 941{
 942	u8 pwr = 0;
 943
 944	if (mode != MMC_POWER_OFF) {
 945		pwr = sdhci_get_vdd_value(vdd);
 946		if (!pwr)
 947			WARN(1, "%s: Invalid vdd %#x\n", mmc_hostname(host->mmc), vdd);
 948		pwr |= SDHCI_VDD2_POWER_180;
 949	}
 950
 951	if (host->pwr == pwr)
 952		return;
 953
 954	host->pwr = pwr;
 955
 956	if (pwr == 0) {
 957		sdhci_gli_overcurrent_event_enable(host, false);
 958		sdhci_writeb(host, 0, SDHCI_POWER_CONTROL);
 959	} else {
 960		sdhci_gli_overcurrent_event_enable(host, false);
 961		sdhci_writeb(host, 0, SDHCI_POWER_CONTROL);
 962
 963		pwr |= (SDHCI_POWER_ON | SDHCI_VDD2_POWER_ON);
 964
 965		sdhci_writeb(host, pwr & 0xf, SDHCI_POWER_CONTROL);
 966		/* wait stable */
 967		mdelay(5);
 968		sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL);
 969		/* wait stable */
 970		mdelay(5);
 971		sdhci_gli_overcurrent_event_enable(host, true);
 972	}
 973}
 974
 975static bool sdhci_wait_clock_stable(struct sdhci_host *host)
 976{
 977	u16 clk = 0;
 978
 979	if (read_poll_timeout_atomic(sdhci_readw, clk, (clk & SDHCI_CLOCK_INT_STABLE),
 980				     10, 20000, false, host, SDHCI_CLOCK_CONTROL)) {
 981		pr_err("%s: Internal clock never stabilised.\n", mmc_hostname(host->mmc));
 982		sdhci_dumpregs(host);
 983		return false;
 984	}
 985	return true;
 986}
 987
 988static void sdhci_gli_enable_internal_clock(struct sdhci_host *host)
 989{
 990	u16 ctrl2;
 991
 992	ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
 993
 994	sdhci_writew(host, SDHCI_CLOCK_INT_EN, SDHCI_CLOCK_CONTROL);
 995
 996	if (!((ctrl2 & SDHCI_CTRL_V4_MODE) &&
 997	      (ctrl2 & SDHCI_CTRL_UHS2_ENABLE))) {
 998		sdhci_wait_clock_stable(host);
 999		sdhci_writew(host, SDHCI_CTRL_V4_MODE, SDHCI_HOST_CONTROL2);
1000	}
1001}
1002
1003static int sdhci_gli_wait_software_reset_done(struct sdhci_host *host, u8 mask)
1004{
1005	u8 rst;
1006
1007	/* hw clears the bit when it's done */
1008	if (read_poll_timeout_atomic(sdhci_readb, rst, !(rst & mask),
1009				     10, 100000, false, host, SDHCI_SOFTWARE_RESET)) {
1010		pr_err("%s: Reset 0x%x never completed.\n", mmc_hostname(host->mmc), (int)mask);
1011		sdhci_dumpregs(host);
1012		/* manual clear */
1013		sdhci_writeb(host, 0, SDHCI_SOFTWARE_RESET);
1014		return -ETIMEDOUT;
1015	}
1016
1017	return 0;
1018}
1019
1020static void sdhci_gli_uhs2_reset_sd_tran(struct sdhci_host *host)
1021{
1022	/* do this on UHS2 mode */
1023	if (host->mmc->uhs2_sd_tran) {
1024		sdhci_uhs2_reset(host, SDHCI_UHS2_SW_RESET_SD);
1025		sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
1026		sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
1027		sdhci_uhs2_clear_set_irqs(host,
1028					  SDHCI_INT_ALL_MASK,
1029					  SDHCI_UHS2_INT_ERROR_MASK);
1030	}
1031}
1032
1033static void sdhci_gl9755_reset(struct sdhci_host *host, u8 mask)
1034{
1035	/* need internal clock */
1036	if (mask & SDHCI_RESET_ALL)
1037		sdhci_gli_enable_internal_clock(host);
1038
1039	sdhci_writeb(host, mask, SDHCI_SOFTWARE_RESET);
1040
1041	/* reset sd-tran on UHS2 mode if need to reset cmd/data */
1042	if ((mask & SDHCI_RESET_CMD) | (mask & SDHCI_RESET_DATA))
1043		sdhci_gli_uhs2_reset_sd_tran(host);
1044
1045	if (mask & SDHCI_RESET_ALL)
1046		host->clock = 0;
1047
1048	sdhci_gli_wait_software_reset_done(host, mask);
1049}
1050
1051static inline void gl9767_vhs_read(struct pci_dev *pdev)
1052{
1053	u32 vhs_enable;
1054	u32 vhs_value;
1055
1056	pci_read_config_dword(pdev, PCIE_GLI_9767_VHS, &vhs_value);
1057	vhs_enable = FIELD_GET(GLI_9767_VHS_REV, vhs_value);
1058
1059	if (vhs_enable == GLI_9767_VHS_REV_R)
1060		return;
1061
1062	vhs_value &= ~GLI_9767_VHS_REV;
1063	vhs_value |= FIELD_PREP(GLI_9767_VHS_REV, GLI_9767_VHS_REV_R);
1064
1065	pci_write_config_dword(pdev, PCIE_GLI_9767_VHS, vhs_value);
1066}
1067
1068static inline void gl9767_vhs_write(struct pci_dev *pdev)
1069{
1070	u32 vhs_enable;
1071	u32 vhs_value;
1072
1073	pci_read_config_dword(pdev, PCIE_GLI_9767_VHS, &vhs_value);
1074	vhs_enable = FIELD_GET(GLI_9767_VHS_REV, vhs_value);
1075
1076	if (vhs_enable == GLI_9767_VHS_REV_W)
1077		return;
1078
1079	vhs_value &= ~GLI_9767_VHS_REV;
1080	vhs_value |= FIELD_PREP(GLI_9767_VHS_REV, GLI_9767_VHS_REV_W);
1081
1082	pci_write_config_dword(pdev, PCIE_GLI_9767_VHS, vhs_value);
1083}
1084
1085static bool gl9767_ssc_enable(struct pci_dev *pdev)
1086{
1087	u32 value;
1088	u8 enable;
1089
1090	gl9767_vhs_write(pdev);
1091
1092	pci_read_config_dword(pdev, PCIE_GLI_9767_COM_MAILBOX, &value);
1093	enable = FIELD_GET(PCIE_GLI_9767_COM_MAILBOX_SSC_EN, value);
1094
1095	gl9767_vhs_read(pdev);
1096
1097	return enable;
1098}
1099
1100static void gl9767_set_ssc(struct pci_dev *pdev, u8 enable, u8 step, u16 ppm)
1101{
1102	u32 pll;
1103	u32 ssc;
1104
1105	gl9767_vhs_write(pdev);
1106
1107	pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, &pll);
1108	pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL2, &ssc);
1109	pll &= ~(PCIE_GLI_9767_SD_PLL_CTL_SSC_STEP_SETTING |
1110		 PCIE_GLI_9767_SD_PLL_CTL_SSC_EN);
1111	ssc &= ~PCIE_GLI_9767_SD_PLL_CTL2_PLLSSC_PPM;
1112	pll |= FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_SSC_STEP_SETTING, step) |
1113	       FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_SSC_EN, enable);
1114	ssc |= FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL2_PLLSSC_PPM, ppm);
1115	pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL2, ssc);
1116	pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, pll);
1117
1118	gl9767_vhs_read(pdev);
1119}
1120
1121static void gl9767_set_pll(struct pci_dev *pdev, u8 dir, u16 ldiv, u8 pdiv)
1122{
1123	u32 pll;
1124
1125	gl9767_vhs_write(pdev);
1126
1127	pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, &pll);
1128	pll &= ~(PCIE_GLI_9767_SD_PLL_CTL_PLL_LDIV |
1129		 PCIE_GLI_9767_SD_PLL_CTL_PLL_PDIV |
1130		 PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN);
1131	pll |= FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_PLL_LDIV, ldiv) |
1132	       FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_PLL_PDIV, pdiv) |
1133	       FIELD_PREP(PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN, dir);
1134	pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, pll);
1135
1136	gl9767_vhs_read(pdev);
1137
1138	/* wait for pll stable */
1139	usleep_range(1000, 1100);
1140}
1141
1142static void gl9767_set_ssc_pll_205mhz(struct pci_dev *pdev)
1143{
1144	bool enable = gl9767_ssc_enable(pdev);
1145
1146	/* set pll to 205MHz and ssc */
1147	gl9767_set_ssc(pdev, enable, 0x1F, 0xF5C3);
1148	gl9767_set_pll(pdev, 0x1, 0x246, 0x0);
1149}
1150
1151static void gl9767_disable_ssc_pll(struct pci_dev *pdev)
1152{
1153	u32 pll;
1154
1155	gl9767_vhs_write(pdev);
1156
1157	pci_read_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, &pll);
1158	pll &= ~(PCIE_GLI_9767_SD_PLL_CTL_PLL_DIR_EN | PCIE_GLI_9767_SD_PLL_CTL_SSC_EN);
1159	pci_write_config_dword(pdev, PCIE_GLI_9767_SD_PLL_CTL, pll);
1160
1161	gl9767_vhs_read(pdev);
1162}
1163
1164static void gl9767_set_low_power_negotiation(struct pci_dev *pdev, bool enable)
1165{
1166	u32 value;
1167
1168	gl9767_vhs_write(pdev);
1169
1170	pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
1171	if (enable)
1172		value &= ~PCIE_GLI_9767_CFG_LOW_PWR_OFF;
1173	else
1174		value |= PCIE_GLI_9767_CFG_LOW_PWR_OFF;
1175	pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
1176
1177	gl9767_vhs_read(pdev);
1178}
1179
1180static void sdhci_gl9767_set_clock(struct sdhci_host *host, unsigned int clock)
1181{
1182	struct sdhci_pci_slot *slot = sdhci_priv(host);
1183	struct mmc_ios *ios = &host->mmc->ios;
1184	struct pci_dev *pdev;
1185	u16 clk;
1186
1187	pdev = slot->chip->pdev;
1188	host->mmc->actual_clock = 0;
1189
1190	gl9767_set_low_power_negotiation(pdev, false);
1191	gl9767_disable_ssc_pll(pdev);
1192	sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
1193
1194	if (clock == 0) {
1195		gl9767_set_low_power_negotiation(pdev, true);
1196		return;
1197	}
1198
1199	clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
1200	if (clock == 200000000 && ios->timing == MMC_TIMING_UHS_SDR104) {
1201		host->mmc->actual_clock = 205000000;
1202		gl9767_set_ssc_pll_205mhz(pdev);
1203	}
1204
1205	sdhci_enable_clk(host, clk);
1206	gl9767_set_low_power_negotiation(pdev, true);
1207}
1208
1209static void sdhci_gl9767_set_card_detect_debounce_time(struct sdhci_host *host)
1210{
1211	u32 value;
1212
1213	value = sdhci_readl(host, SDHCI_GLI_9767_SD_HOST_OPERATION_CTL);
1214	value &= ~(SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE |
1215		   SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE);
1216	if (sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT)
1217		value |= FIELD_PREP(SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE,
1218				    SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_PLUG_IN_VALUE) |
1219			 FIELD_PREP(SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE,
1220				    SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE_1MS);
1221	else
1222		value |= FIELD_PREP(SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE,
1223				    SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_PLUG_OUT_VALUE) |
1224			 FIELD_PREP(SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE,
1225				    SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_DEBOUNCE_SCALE_10MS);
1226	sdhci_writel(host, value, SDHCI_GLI_9767_SD_HOST_OPERATION_CTL);
1227}
1228
1229static void sdhci_gl9767_card_event(struct sdhci_host *host)
1230{
1231	sdhci_gl9767_set_card_detect_debounce_time(host);
1232}
1233
1234static void gli_set_9767(struct sdhci_host *host)
1235{
1236	u32 value;
1237
1238	value = sdhci_readl(host, SDHCI_GLI_9767_GM_BURST_SIZE);
1239	value &= ~SDHCI_GLI_9767_GM_BURST_SIZE_AXI_ALWAYS_SET;
1240	sdhci_writel(host, value, SDHCI_GLI_9767_GM_BURST_SIZE);
1241
1242	value = sdhci_readl(host, SDHCI_GLI_9767_SD_HOST_OPERATION_CTL);
1243	value &= ~SDHCI_GLI_9767_SD_HOST_OPERATION_CTL_CMD_CONFLICT_CHECK;
1244	sdhci_writel(host, value, SDHCI_GLI_9767_SD_HOST_OPERATION_CTL);
1245
1246	sdhci_gl9767_set_card_detect_debounce_time(host);
1247}
1248
1249static void gl9767_hw_setting(struct sdhci_pci_slot *slot)
1250{
1251	struct pci_dev *pdev = slot->chip->pdev;
1252	u32 value;
1253
1254	gl9767_vhs_write(pdev);
1255
1256	pci_read_config_dword(pdev, PCIE_GLI_9767_PWR_MACRO_CTL, &value);
1257	value &= ~(PCIE_GLI_9767_PWR_MACRO_CTL_LOW_VOLTAGE |
1258		   PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE |
1259		   PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL);
1260
1261	value |= PCIE_GLI_9767_PWR_MACRO_CTL_LOW_VOLTAGE |
1262		 FIELD_PREP(PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE,
1263			    PCIE_GLI_9767_PWR_MACRO_CTL_LD0_LOW_OUTPUT_VOLTAGE_VALUE) |
1264		 FIELD_PREP(PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL,
1265			    PCIE_GLI_9767_PWR_MACRO_CTL_RCLK_AMPLITUDE_CTL_VALUE);
1266	pci_write_config_dword(pdev, PCIE_GLI_9767_PWR_MACRO_CTL, value);
1267
1268	pci_read_config_dword(pdev, PCIE_GLI_9767_SCR, &value);
1269	value &= ~(PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE0 |
1270		   PCIE_GLI_9767_SCR_SYSTEM_CLK_SELECT_MODE1 |
1271		   PCIE_GLI_9767_SCR_CFG_RST_DATA_LINK_DOWN);
1272
1273	value |= PCIE_GLI_9767_SCR_AUTO_AXI_W_BURST |
1274		 PCIE_GLI_9767_SCR_AUTO_AXI_R_BURST |
1275		 PCIE_GLI_9767_SCR_AXI_REQ |
1276		 PCIE_GLI_9767_SCR_CARD_DET_PWR_SAVING_EN |
1277		 PCIE_GLI_9767_SCR_CORE_PWR_D3_OFF;
1278	pci_write_config_dword(pdev, PCIE_GLI_9767_SCR, value);
1279
1280	gl9767_vhs_read(pdev);
1281}
1282
1283static void sdhci_gl9767_reset(struct sdhci_host *host, u8 mask)
1284{
1285	struct sdhci_pci_slot *slot = sdhci_priv(host);
1286	struct pci_dev *pdev = slot->chip->pdev;
1287	u32 value;
1288
1289	/* need internal clock */
1290	if (mask & SDHCI_RESET_ALL) {
1291		sdhci_gli_enable_internal_clock(host);
1292
1293		gl9767_vhs_write(pdev);
1294
1295		pci_read_config_dword(pdev, PCIE_GLI_9767_RESET_REG, &value);
1296		value &= ~PCIE_GLI_9767_RESET_REG_SD_HOST_SW_RESET;
1297		pci_write_config_dword(pdev, PCIE_GLI_9767_RESET_REG, value);
1298
1299		if (read_poll_timeout_atomic(pci_read_config_dword, value,
1300					     !(value & PCIE_GLI_9767_RESET_REG_SD_HOST_SW_RESET),
1301					     1, 5, true, pdev, PCIE_GLI_9767_RESET_REG, &value)) {
1302			pr_warn("%s: %s: Reset SDHC AHB and TL-AMBA failure.\n",
1303				__func__, mmc_hostname(host->mmc));
1304			gl9767_vhs_read(pdev);
1305			return;
1306		}
1307		gl9767_vhs_read(pdev);
1308	}
1309
1310	if (mmc_card_uhs2(host->mmc)) {
1311		if (mask & (SDHCI_RESET_CMD | SDHCI_RESET_DATA)) {
1312			sdhci_writeb(host, mask, SDHCI_SOFTWARE_RESET);
1313			sdhci_gli_uhs2_reset_sd_tran(host);
1314			sdhci_gli_wait_software_reset_done(host, mask);
1315		} else {
1316			sdhci_uhs2_reset(host, mask);
1317		}
1318	} else {
1319		sdhci_reset(host, mask);
1320	}
1321
1322	gli_set_9767(host);
1323}
1324
1325static int gl9767_init_sd_express(struct mmc_host *mmc, struct mmc_ios *ios)
1326{
1327	struct sdhci_host *host = mmc_priv(mmc);
1328	struct sdhci_pci_slot *slot = sdhci_priv(host);
1329	struct pci_dev *pdev;
1330	u32 value;
1331	int i;
1332
1333	pdev = slot->chip->pdev;
1334
1335	if (mmc->ops->get_ro(mmc)) {
1336		mmc->ios.timing &= ~(MMC_TIMING_SD_EXP | MMC_TIMING_SD_EXP_1_2V);
1337		return 0;
1338	}
1339
1340	gl9767_vhs_write(pdev);
1341
1342	pci_read_config_dword(pdev, PCIE_GLI_9767_COMBO_MUX_CTL, &value);
1343	value &= ~(PCIE_GLI_9767_COMBO_MUX_CTL_RST_EN | PCIE_GLI_9767_COMBO_MUX_CTL_WAIT_PERST_EN);
1344	pci_write_config_dword(pdev, PCIE_GLI_9767_COMBO_MUX_CTL, value);
1345
1346	pci_read_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, &value);
1347	value &= ~PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME;
1348	value |= FIELD_PREP(PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME,
1349			    PCIE_GLI_9767_SD_DATA_MULTI_CTL_DISCONNECT_TIME_VALUE);
1350	pci_write_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, value);
1351
1352	pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2, &value);
1353	value |= PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2_SDEI_COMPLETE;
1354	pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2, value);
1355
1356	pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2, &value);
1357	value |= PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2_SDEI_COMPLETE_STATUS_EN;
1358	pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_EN_REG2, value);
1359
1360	pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2, &value);
1361	value |= PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2_SDEI_COMPLETE_SIGNAL_EN;
1362	pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_SIGNAL_EN_REG2, value);
1363
1364	pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
1365	value |= PCIE_GLI_9767_CFG_LOW_PWR_OFF;
1366	pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
1367
1368	value = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1369	value &= ~(SDHCI_CLOCK_CARD_EN | SDHCI_CLOCK_PLL_EN);
1370	sdhci_writew(host, value, SDHCI_CLOCK_CONTROL);
1371
1372	value = sdhci_readb(host, SDHCI_POWER_CONTROL);
1373	value |= (SDHCI_VDD2_POWER_180 | SDHCI_VDD2_POWER_ON);
1374	sdhci_writeb(host, value, SDHCI_POWER_CONTROL);
1375
1376	pci_read_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, &value);
1377	value |= PCIE_GLI_9767_SD_EXPRESS_CTL_SDEI_EXE;
1378	pci_write_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, value);
1379
1380	for (i = 0; i < 2; i++) {
1381		usleep_range(10000, 10100);
1382		pci_read_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2, &value);
1383		if (value & PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2_SDEI_COMPLETE) {
1384			pci_write_config_dword(pdev, PCIE_GLI_9767_NORMAL_ERR_INT_STATUS_REG2,
1385					       value);
1386			break;
1387		}
1388	}
1389
1390	pci_read_config_dword(pdev, PCIE_GLI_9767_SDHC_CAP, &value);
1391	if (value & PCIE_GLI_9767_SDHC_CAP_SDEI_RESULT) {
1392		pci_read_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, &value);
1393		value |= PCIE_GLI_9767_SD_EXPRESS_CTL_SD_EXPRESS_MODE;
1394		pci_write_config_dword(pdev, PCIE_GLI_9767_SD_EXPRESS_CTL, value);
1395	} else {
1396		mmc->ios.timing &= ~(MMC_TIMING_SD_EXP | MMC_TIMING_SD_EXP_1_2V);
1397
1398		value = sdhci_readb(host, SDHCI_POWER_CONTROL);
1399		value &= ~(SDHCI_VDD2_POWER_180 | SDHCI_VDD2_POWER_ON);
1400		sdhci_writeb(host, value, SDHCI_POWER_CONTROL);
1401
1402		value = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1403		value |= (SDHCI_CLOCK_CARD_EN | SDHCI_CLOCK_PLL_EN);
1404		sdhci_writew(host, value, SDHCI_CLOCK_CONTROL);
1405	}
1406
1407	pci_read_config_dword(pdev, PCIE_GLI_9767_CFG, &value);
1408	value &= ~PCIE_GLI_9767_CFG_LOW_PWR_OFF;
1409	pci_write_config_dword(pdev, PCIE_GLI_9767_CFG, value);
1410	gl9767_vhs_read(pdev);
1411
1412	return 0;
1413}
1414
1415static void gl9767_vendor_init(struct sdhci_host *host)
1416{
1417	struct sdhci_pci_slot *slot = sdhci_priv(host);
1418	struct pci_dev *pdev = slot->chip->pdev;
1419	u32 value;
1420
1421	gl9767_vhs_write(pdev);
1422
1423	pci_read_config_dword(pdev, PCIE_GLI_9767_UHS2_PHY_SET_REG1, &value);
1424	value |= FIELD_PREP(PCIE_GLI_9767_UHS2_PHY_SET_REG1_SERDES_INTR,
1425			    PCIE_GLI_9767_UHS2_PHY_SET_REG1_SERDES_INTR_VALUE);
1426	pci_write_config_dword(pdev, PCIE_GLI_9767_UHS2_PHY_SET_REG1, value);
1427
1428	pci_read_config_dword(pdev, PCIE_GLI_9767_UHS2_PHY_SET_REG2, &value);
1429	value |= FIELD_PREP(PCIE_GLI_9767_UHS2_PHY_SET_REG2_SSC_PPM_SETTING,
1430			    PCIE_GLI_9767_UHS2_PHY_SET_REG2_SSC_PPM_SETTING_VALUE);
1431	pci_write_config_dword(pdev, PCIE_GLI_9767_UHS2_PHY_SET_REG2, value);
1432
1433	pci_read_config_dword(pdev, PCIE_GLI_9767_UHS2_CTL1, &value);
1434	value |= FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_TRANS_PASS,
1435			    PCIE_GLI_9767_UHS2_CTL1_TRANS_PASS_VALUE) |
1436		 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_DECODING_CTL,
1437			    PCIE_GLI_9767_UHS2_CTL1_DECODING_CTL_VALUE) |
1438		 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_SERDES_TRAN,
1439			    PCIE_GLI_9767_UHS2_CTL1_SERDES_TRAN_VALUE) |
1440		 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_SERDES_RECV,
1441			    PCIE_GLI_9767_UHS2_CTL1_SERDES_RECV_VALUE) |
1442		 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_DIR_TRANS,
1443			    PCIE_GLI_9767_UHS2_CTL1_DIR_TRANS_VALUE) |
1444		 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_DIR_RECV,
1445			    PCIE_GLI_9767_UHS2_CTL1_DIR_RECV_VALUE) |
1446		 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL1_PDRST,
1447			    PCIE_GLI_9767_UHS2_CTL1_PDRST_VALUE);
1448	pci_write_config_dword(pdev, PCIE_GLI_9767_UHS2_CTL1, value);
1449
1450	pci_read_config_dword(pdev, PCIE_GLI_9767_UHS2_CTL2, &value);
1451	value |= FIELD_PREP(PCIE_GLI_9767_UHS2_CTL2_ZC,
1452			    PCIE_GLI_9767_UHS2_CTL2_ZC_VALUE) |
1453		 FIELD_PREP(PCIE_GLI_9767_UHS2_CTL2_ZC_CTL,
1454			    PCIE_GLI_9767_UHS2_CTL2_ZC_CTL_VALUE);
1455	pci_write_config_dword(pdev, PCIE_GLI_9767_UHS2_CTL2, value);
1456
1457	gl9767_vhs_read(pdev);
1458}
1459
1460static void sdhci_gl9767_set_power(struct sdhci_host *host, unsigned char mode,	unsigned short vdd)
1461{
1462	struct sdhci_pci_slot *slot = sdhci_priv(host);
1463	struct pci_dev *pdev = slot->chip->pdev;
1464	u32 value;
1465
1466	if (mmc_card_uhs2(host->mmc)) {
1467		gl9767_vhs_write(pdev);
1468
1469		pci_read_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, &value);
1470		value |= PCIE_GLI_9767_SD_DATA_MULTI_CTL_SELECT_UHS2 |
1471			 PCIE_GLI_9767_SD_DATA_MULTI_CTL_UHS2_SWITCH_CTL;
1472		pci_write_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, value);
1473
1474		gl9767_vhs_read(pdev);
1475
1476		sdhci_gli_overcurrent_event_enable(host, false);
1477		sdhci_uhs2_set_power(host, mode, vdd);
1478		sdhci_gli_overcurrent_event_enable(host, true);
1479	} else {
1480		gl9767_vhs_write(pdev);
1481
1482		pci_read_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, &value);
1483		value &= ~(PCIE_GLI_9767_SD_DATA_MULTI_CTL_SELECT_UHS2 |
1484			   PCIE_GLI_9767_SD_DATA_MULTI_CTL_UHS2_SWITCH_CTL);
1485		pci_write_config_dword(pdev, PCIE_GLI_9767_SD_DATA_MULTI_CTL, value);
1486
1487		gl9767_vhs_read(pdev);
1488
1489		sdhci_gli_overcurrent_event_enable(host, false);
1490		sdhci_set_power(host, mode, vdd);
1491		sdhci_gli_overcurrent_event_enable(host, true);
1492	}
1493}
1494
1495static int gli_probe_slot_gl9750(struct sdhci_pci_slot *slot)
1496{
1497	struct sdhci_host *host = slot->host;
1498
1499	gl9750_hw_setting(host);
1500	gli_pcie_enable_msi(slot);
1501	slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
1502	sdhci_enable_v4_mode(host);
1503
1504	return 0;
1505}
1506
1507static int gli_probe_slot_gl9755(struct sdhci_pci_slot *slot)
1508{
1509	struct sdhci_host *host = slot->host;
1510
1511	gl9755_hw_setting(slot);
1512	gli_pcie_enable_msi(slot);
1513	slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
1514	sdhci_enable_v4_mode(host);
1515	gl9755_vendor_init(host);
1516
1517	return 0;
1518}
1519
1520static int gli_probe_slot_gl9767(struct sdhci_pci_slot *slot)
1521{
1522	struct sdhci_host *host = slot->host;
1523
1524	gli_set_9767(host);
1525	gl9767_hw_setting(slot);
1526	gli_pcie_enable_msi(slot);
1527	slot->host->mmc->caps2 |= MMC_CAP2_NO_SDIO;
1528	host->mmc->caps2 |= MMC_CAP2_SD_EXP;
1529	host->mmc_host_ops.init_sd_express = gl9767_init_sd_express;
1530	sdhci_enable_v4_mode(host);
1531	gl9767_vendor_init(host);
1532
1533	return 0;
1534}
1535
1536static void sdhci_gli_voltage_switch(struct sdhci_host *host)
1537{
1538	/*
1539	 * According to Section 3.6.1 signal voltage switch procedure in
1540	 * SD Host Controller Simplified Spec. 4.20, steps 6~8 are as
1541	 * follows:
1542	 * (6) Set 1.8V Signal Enable in the Host Control 2 register.
1543	 * (7) Wait 5ms. 1.8V voltage regulator shall be stable within this
1544	 *     period.
1545	 * (8) If 1.8V Signal Enable is cleared by Host Controller, go to
1546	 *     step (12).
1547	 *
1548	 * Wait 5ms after set 1.8V signal enable in Host Control 2 register
1549	 * to ensure 1.8V signal enable bit is set by GL9750/GL9755.
1550	 *
1551	 * ...however, the controller in the NUC10i3FNK4 (a 9755) requires
1552	 * slightly longer than 5ms before the control register reports that
1553	 * 1.8V is ready, and far longer still before the card will actually
1554	 * work reliably.
1555	 */
1556	usleep_range(100000, 110000);
1557}
1558
1559static void sdhci_gl9767_voltage_switch(struct sdhci_host *host)
1560{
1561	/*
1562	 * According to Section 3.6.1 signal voltage switch procedure in
1563	 * SD Host Controller Simplified Spec. 4.20, steps 6~8 are as
1564	 * follows:
1565	 * (6) Set 1.8V Signal Enable in the Host Control 2 register.
1566	 * (7) Wait 5ms. 1.8V voltage regulator shall be stable within this
1567	 *     period.
1568	 * (8) If 1.8V Signal Enable is cleared by Host Controller, go to
1569	 *     step (12).
1570	 *
1571	 * Wait 5ms after set 1.8V signal enable in Host Control 2 register
1572	 * to ensure 1.8V signal enable bit is set by GL9767.
1573	 *
1574	 */
1575	usleep_range(5000, 5500);
1576}
1577
1578static void sdhci_gl9750_reset(struct sdhci_host *host, u8 mask)
1579{
1580	sdhci_reset(host, mask);
1581	gli_set_9750(host);
1582}
1583
1584static u32 sdhci_gl9750_readl(struct sdhci_host *host, int reg)
1585{
1586	u32 value;
1587
1588	value = readl(host->ioaddr + reg);
1589	if (unlikely(reg == SDHCI_MAX_CURRENT && !(value & 0xff)))
1590		value |= 0xc8;
1591
1592	return value;
1593}
1594
1595static void gl9763e_hs400_enhanced_strobe(struct mmc_host *mmc,
1596					  struct mmc_ios *ios)
1597{
1598	struct sdhci_host *host = mmc_priv(mmc);
1599	u32 val;
1600
1601	val = sdhci_readl(host, SDHCI_GLI_9763E_HS400_ES_REG);
1602	if (ios->enhanced_strobe)
1603		val |= SDHCI_GLI_9763E_HS400_ES_BIT;
1604	else
1605		val &= ~SDHCI_GLI_9763E_HS400_ES_BIT;
1606
1607	sdhci_writel(host, val, SDHCI_GLI_9763E_HS400_ES_REG);
1608}
1609
1610static void gl9763e_set_low_power_negotiation(struct sdhci_pci_slot *slot,
1611					      bool enable)
1612{
1613	struct pci_dev *pdev = slot->chip->pdev;
1614	u32 value;
1615
1616	pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1617	value &= ~GLI_9763E_VHS_REV;
1618	value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_W);
1619	pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1620
1621	pci_read_config_dword(pdev, PCIE_GLI_9763E_CFG, &value);
1622
1623	if (enable)
1624		value &= ~GLI_9763E_CFG_LPSN_DIS;
1625	else
1626		value |= GLI_9763E_CFG_LPSN_DIS;
1627
1628	pci_write_config_dword(pdev, PCIE_GLI_9763E_CFG, value);
1629
1630	pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1631	value &= ~GLI_9763E_VHS_REV;
1632	value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_R);
1633	pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1634}
1635
1636static void sdhci_set_gl9763e_signaling(struct sdhci_host *host,
1637					unsigned int timing)
1638{
1639	u16 ctrl_2;
1640
1641	ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
1642	ctrl_2 &= ~SDHCI_CTRL_UHS_MASK;
1643	if (timing == MMC_TIMING_MMC_HS200)
1644		ctrl_2 |= SDHCI_CTRL_UHS_SDR104;
1645	else if (timing == MMC_TIMING_MMC_HS)
1646		ctrl_2 |= SDHCI_CTRL_UHS_SDR25;
1647	else if (timing == MMC_TIMING_MMC_DDR52)
1648		ctrl_2 |= SDHCI_CTRL_UHS_DDR50;
1649	else if (timing == MMC_TIMING_MMC_HS400)
1650		ctrl_2 |= SDHCI_GLI_9763E_CTRL_HS400;
1651
1652	sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
1653}
1654
1655static void sdhci_gl9763e_dumpregs(struct mmc_host *mmc)
1656{
1657	sdhci_dumpregs(mmc_priv(mmc));
1658}
1659
1660static void sdhci_gl9763e_cqe_pre_enable(struct mmc_host *mmc)
1661{
1662	struct cqhci_host *cq_host = mmc->cqe_private;
1663	u32 value;
1664
1665	value = cqhci_readl(cq_host, CQHCI_CFG);
1666	value |= CQHCI_ENABLE;
1667	cqhci_writel(cq_host, value, CQHCI_CFG);
1668}
1669
1670static void sdhci_gl9763e_cqe_enable(struct mmc_host *mmc)
1671{
1672	struct sdhci_host *host = mmc_priv(mmc);
1673
1674	sdhci_writew(host, GLI_9763E_CQE_TRNS_MODE, SDHCI_TRANSFER_MODE);
1675	sdhci_cqe_enable(mmc);
1676}
1677
1678static u32 sdhci_gl9763e_cqhci_irq(struct sdhci_host *host, u32 intmask)
1679{
1680	int cmd_error = 0;
1681	int data_error = 0;
1682
1683	if (!sdhci_cqe_irq(host, intmask, &cmd_error, &data_error))
1684		return intmask;
1685
1686	cqhci_irq(host->mmc, intmask, cmd_error, data_error);
1687
1688	return 0;
1689}
1690
1691static void sdhci_gl9763e_cqe_post_disable(struct mmc_host *mmc)
1692{
1693	struct sdhci_host *host = mmc_priv(mmc);
1694	struct cqhci_host *cq_host = mmc->cqe_private;
1695	u32 value;
1696
1697	value = cqhci_readl(cq_host, CQHCI_CFG);
1698	value &= ~CQHCI_ENABLE;
1699	cqhci_writel(cq_host, value, CQHCI_CFG);
1700	sdhci_writew(host, 0x0, SDHCI_TRANSFER_MODE);
1701}
1702
1703static const struct cqhci_host_ops sdhci_gl9763e_cqhci_ops = {
1704	.enable         = sdhci_gl9763e_cqe_enable,
1705	.disable        = sdhci_cqe_disable,
1706	.dumpregs       = sdhci_gl9763e_dumpregs,
1707	.pre_enable     = sdhci_gl9763e_cqe_pre_enable,
1708	.post_disable   = sdhci_gl9763e_cqe_post_disable,
1709};
1710
1711static int gl9763e_add_host(struct sdhci_pci_slot *slot)
1712{
1713	struct device *dev = &slot->chip->pdev->dev;
1714	struct sdhci_host *host = slot->host;
1715	struct cqhci_host *cq_host;
1716	bool dma64;
1717	int ret;
1718
1719	ret = sdhci_setup_host(host);
1720	if (ret)
1721		return ret;
1722
1723	cq_host = devm_kzalloc(dev, sizeof(*cq_host), GFP_KERNEL);
1724	if (!cq_host) {
1725		ret = -ENOMEM;
1726		goto cleanup;
1727	}
1728
1729	cq_host->mmio = host->ioaddr + SDHCI_GLI_9763E_CQE_BASE_ADDR;
1730	cq_host->ops = &sdhci_gl9763e_cqhci_ops;
1731
1732	dma64 = host->flags & SDHCI_USE_64_BIT_DMA;
1733	if (dma64)
1734		cq_host->caps |= CQHCI_TASK_DESC_SZ_128;
1735
1736	ret = cqhci_init(cq_host, host->mmc, dma64);
1737	if (ret)
1738		goto cleanup;
1739
1740	ret = __sdhci_add_host(host);
1741	if (ret)
1742		goto cleanup;
1743
1744	/* Disable LPM negotiation to avoid entering L1 state. */
1745	gl9763e_set_low_power_negotiation(slot, false);
1746
1747	return 0;
1748
1749cleanup:
1750	sdhci_cleanup_host(host);
1751	return ret;
1752}
1753
1754static void gli_set_gl9763e(struct sdhci_pci_slot *slot)
1755{
1756	struct pci_dev *pdev = slot->chip->pdev;
1757	u32 value;
1758
1759	pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1760	value &= ~GLI_9763E_VHS_REV;
1761	value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_W);
1762	pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1763
1764	pci_read_config_dword(pdev, PCIE_GLI_9763E_SCR, &value);
1765	value |= GLI_9763E_SCR_AXI_REQ;
1766	pci_write_config_dword(pdev, PCIE_GLI_9763E_SCR, value);
1767
1768	pci_read_config_dword(pdev, PCIE_GLI_9763E_MMC_CTRL, &value);
1769	value &= ~GLI_9763E_HS400_SLOW;
1770	pci_write_config_dword(pdev, PCIE_GLI_9763E_MMC_CTRL, value);
1771
1772	pci_read_config_dword(pdev, PCIE_GLI_9763E_CFG2, &value);
1773	value &= ~GLI_9763E_CFG2_L1DLY;
1774	/* set ASPM L1 entry delay to 21us */
1775	value |= FIELD_PREP(GLI_9763E_CFG2_L1DLY, GLI_9763E_CFG2_L1DLY_MID);
1776	pci_write_config_dword(pdev, PCIE_GLI_9763E_CFG2, value);
1777
1778	pci_read_config_dword(pdev, PCIE_GLI_9763E_CLKRXDLY, &value);
1779	value &= ~GLI_9763E_HS400_RXDLY;
1780	value |= FIELD_PREP(GLI_9763E_HS400_RXDLY, GLI_9763E_HS400_RXDLY_5);
1781	pci_write_config_dword(pdev, PCIE_GLI_9763E_CLKRXDLY, value);
1782
1783	pci_read_config_dword(pdev, PCIE_GLI_9763E_VHS, &value);
1784	value &= ~GLI_9763E_VHS_REV;
1785	value |= FIELD_PREP(GLI_9763E_VHS_REV, GLI_9763E_VHS_REV_R);
1786	pci_write_config_dword(pdev, PCIE_GLI_9763E_VHS, value);
1787}
1788
1789#ifdef CONFIG_PM
1790static int gl9763e_runtime_suspend(struct sdhci_pci_chip *chip)
1791{
1792	struct sdhci_pci_slot *slot = chip->slots[0];
1793	struct sdhci_host *host = slot->host;
1794	u16 clock;
1795
1796	/* Enable LPM negotiation to allow entering L1 state */
1797	gl9763e_set_low_power_negotiation(slot, true);
1798
1799	clock = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1800	clock &= ~(SDHCI_CLOCK_PLL_EN | SDHCI_CLOCK_CARD_EN);
1801	sdhci_writew(host, clock, SDHCI_CLOCK_CONTROL);
1802
1803	return 0;
1804}
1805
1806static int gl9763e_runtime_resume(struct sdhci_pci_chip *chip)
1807{
1808	struct sdhci_pci_slot *slot = chip->slots[0];
1809	struct sdhci_host *host = slot->host;
1810	u16 clock;
1811
1812	if (host->mmc->ios.power_mode != MMC_POWER_ON)
1813		return 0;
1814
1815	clock = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1816
1817	clock |= SDHCI_CLOCK_PLL_EN;
1818	clock &= ~SDHCI_CLOCK_INT_STABLE;
1819	sdhci_writew(host, clock, SDHCI_CLOCK_CONTROL);
1820
1821	/* Wait max 150 ms */
1822	if (read_poll_timeout(sdhci_readw, clock, (clock & SDHCI_CLOCK_INT_STABLE),
1823			      1000, 150000, false, host, SDHCI_CLOCK_CONTROL)) {
1824		pr_err("%s: PLL clock never stabilised.\n",
1825		       mmc_hostname(host->mmc));
1826		sdhci_dumpregs(host);
1827	}
1828
1829	clock |= SDHCI_CLOCK_CARD_EN;
1830	sdhci_writew(host, clock, SDHCI_CLOCK_CONTROL);
1831
1832	/* Disable LPM negotiation to avoid entering L1 state. */
1833	gl9763e_set_low_power_negotiation(slot, false);
1834
1835	return 0;
1836}
1837#endif
1838
1839#ifdef CONFIG_PM_SLEEP
1840static int sdhci_pci_gli_resume(struct sdhci_pci_chip *chip)
1841{
1842	struct sdhci_pci_slot *slot = chip->slots[0];
1843
1844	pci_free_irq_vectors(slot->chip->pdev);
1845	gli_pcie_enable_msi(slot);
1846
1847	return sdhci_pci_resume_host(chip);
1848}
1849
1850static int gl9763e_resume(struct sdhci_pci_chip *chip)
1851{
1852	struct sdhci_pci_slot *slot = chip->slots[0];
1853	int ret;
1854
1855	ret = sdhci_pci_gli_resume(chip);
1856	if (ret)
1857		return ret;
1858
1859	ret = cqhci_resume(slot->host->mmc);
1860	if (ret)
1861		return ret;
1862
1863	/*
1864	 * Disable LPM negotiation to bring device back in sync
1865	 * with its runtime_pm state.
1866	 */
1867	gl9763e_set_low_power_negotiation(slot, false);
1868
1869	return 0;
1870}
1871
1872static int gl9763e_suspend(struct sdhci_pci_chip *chip)
1873{
1874	struct sdhci_pci_slot *slot = chip->slots[0];
1875	int ret;
1876
1877	/*
1878	 * Certain SoCs can suspend only with the bus in low-
1879	 * power state, notably x86 SoCs when using S0ix.
1880	 * Re-enable LPM negotiation to allow entering L1 state
1881	 * and entering system suspend.
1882	 */
1883	gl9763e_set_low_power_negotiation(slot, true);
1884
1885	ret = cqhci_suspend(slot->host->mmc);
1886	if (ret)
1887		goto err_suspend;
1888
1889	ret = sdhci_suspend_host(slot->host);
1890	if (ret)
1891		goto err_suspend_host;
1892
1893	return 0;
1894
1895err_suspend_host:
1896	cqhci_resume(slot->host->mmc);
1897err_suspend:
1898	gl9763e_set_low_power_negotiation(slot, false);
1899	return ret;
1900}
1901#endif
1902
1903static int gli_probe_slot_gl9763e(struct sdhci_pci_slot *slot)
1904{
1905	struct pci_dev *pdev = slot->chip->pdev;
1906	struct sdhci_host *host = slot->host;
1907	u32 value;
1908
1909	host->mmc->caps |= MMC_CAP_8_BIT_DATA |
1910			   MMC_CAP_1_8V_DDR |
1911			   MMC_CAP_NONREMOVABLE;
1912	host->mmc->caps2 |= MMC_CAP2_HS200_1_8V_SDR |
1913			    MMC_CAP2_HS400_1_8V |
1914			    MMC_CAP2_HS400_ES |
1915			    MMC_CAP2_NO_SDIO |
1916			    MMC_CAP2_NO_SD;
1917
1918	pci_read_config_dword(pdev, PCIE_GLI_9763E_MB, &value);
1919	if (!(value & GLI_9763E_MB_CMDQ_OFF))
1920		if (value & GLI_9763E_MB_ERP_ON)
1921			host->mmc->caps2 |= MMC_CAP2_CQE | MMC_CAP2_CQE_DCMD;
1922
1923	gli_pcie_enable_msi(slot);
1924	host->mmc_host_ops.hs400_enhanced_strobe =
1925					gl9763e_hs400_enhanced_strobe;
1926	gli_set_gl9763e(slot);
1927	sdhci_enable_v4_mode(host);
1928
1929	return 0;
1930}
1931
1932#define REG_OFFSET_IN_BITS(reg) ((reg) << 3 & 0x18)
1933
1934static u16 sdhci_gli_readw(struct sdhci_host *host, int reg)
1935{
1936	u32 val = readl(host->ioaddr + (reg & ~3));
1937	u16 word;
1938
1939	word = (val >> REG_OFFSET_IN_BITS(reg)) & 0xffff;
1940	return word;
1941}
1942
1943static u8 sdhci_gli_readb(struct sdhci_host *host, int reg)
1944{
1945	u32 val = readl(host->ioaddr + (reg & ~3));
1946	u8 byte = (val >> REG_OFFSET_IN_BITS(reg)) & 0xff;
1947
1948	return byte;
1949}
1950
1951static const struct sdhci_ops sdhci_gl9755_ops = {
1952	.read_w			= sdhci_gli_readw,
1953	.read_b			= sdhci_gli_readb,
1954	.set_clock		= sdhci_gl9755_set_clock,
1955	.set_power		= gl9755_set_power,
1956	.enable_dma		= sdhci_pci_enable_dma,
1957	.set_bus_width		= sdhci_set_bus_width,
1958	.reset			= sdhci_gl9755_reset,
1959	.set_uhs_signaling	= sdhci_set_uhs_signaling,
1960	.voltage_switch		= sdhci_gli_voltage_switch,
1961	.dump_uhs2_regs		= sdhci_uhs2_dump_regs,
1962	.set_timeout		= sdhci_uhs2_set_timeout,
1963	.irq			= sdhci_uhs2_irq,
1964	.uhs2_pre_detect_init   = sdhci_gli_pre_detect_init,
1965};
1966
1967const struct sdhci_pci_fixes sdhci_gl9755 = {
1968	.quirks		= SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
1969	.quirks2	= SDHCI_QUIRK2_BROKEN_DDR50,
1970	.probe_slot	= gli_probe_slot_gl9755,
1971	.add_host	= sdhci_pci_uhs2_add_host,
1972	.remove_host	= sdhci_pci_uhs2_remove_host,
1973	.ops            = &sdhci_gl9755_ops,
1974#ifdef CONFIG_PM_SLEEP
1975	.resume         = sdhci_pci_gli_resume,
1976#endif
1977};
1978
1979static const struct sdhci_ops sdhci_gl9750_ops = {
1980	.read_w			= sdhci_gli_readw,
1981	.read_b			= sdhci_gli_readb,
1982	.read_l                 = sdhci_gl9750_readl,
1983	.set_clock		= sdhci_gl9750_set_clock,
1984	.enable_dma		= sdhci_pci_enable_dma,
1985	.set_bus_width		= sdhci_set_bus_width,
1986	.reset			= sdhci_gl9750_reset,
1987	.set_uhs_signaling	= sdhci_set_uhs_signaling,
1988	.voltage_switch		= sdhci_gli_voltage_switch,
1989	.platform_execute_tuning = gl9750_execute_tuning,
1990};
1991
1992const struct sdhci_pci_fixes sdhci_gl9750 = {
1993	.quirks		= SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
1994	.quirks2	= SDHCI_QUIRK2_BROKEN_DDR50,
1995	.probe_slot	= gli_probe_slot_gl9750,
1996	.ops            = &sdhci_gl9750_ops,
1997#ifdef CONFIG_PM_SLEEP
1998	.resume         = sdhci_pci_gli_resume,
1999#endif
2000};
2001
2002static const struct sdhci_ops sdhci_gl9763e_ops = {
2003	.set_clock		= sdhci_set_clock,
2004	.enable_dma		= sdhci_pci_enable_dma,
2005	.set_bus_width		= sdhci_set_bus_width,
2006	.reset			= sdhci_and_cqhci_reset,
2007	.set_uhs_signaling	= sdhci_set_gl9763e_signaling,
2008	.voltage_switch		= sdhci_gli_voltage_switch,
2009	.irq                    = sdhci_gl9763e_cqhci_irq,
2010};
2011
2012const struct sdhci_pci_fixes sdhci_gl9763e = {
2013	.quirks		= SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
2014	.probe_slot	= gli_probe_slot_gl9763e,
2015	.ops            = &sdhci_gl9763e_ops,
2016#ifdef CONFIG_PM_SLEEP
2017	.resume		= gl9763e_resume,
2018	.suspend	= gl9763e_suspend,
2019#endif
2020#ifdef CONFIG_PM
2021	.runtime_suspend = gl9763e_runtime_suspend,
2022	.runtime_resume  = gl9763e_runtime_resume,
2023	.allow_runtime_pm = true,
2024#endif
2025	.add_host       = gl9763e_add_host,
2026};
2027
2028static const struct sdhci_ops sdhci_gl9767_ops = {
2029	.set_clock		 = sdhci_gl9767_set_clock,
2030	.enable_dma		 = sdhci_pci_enable_dma,
2031	.set_bus_width		 = sdhci_set_bus_width,
2032	.reset			 = sdhci_gl9767_reset,
2033	.set_uhs_signaling	 = sdhci_set_uhs_signaling,
2034	.voltage_switch		 = sdhci_gl9767_voltage_switch,
2035	.dump_uhs2_regs		 = sdhci_uhs2_dump_regs,
2036	.set_timeout		 = sdhci_uhs2_set_timeout,
2037	.irq			 = sdhci_uhs2_irq,
2038	.set_power		 = sdhci_gl9767_set_power,
2039	.uhs2_pre_detect_init	 = sdhci_gli_pre_detect_init,
2040	.card_event		 = sdhci_gl9767_card_event,
2041};
2042
2043const struct sdhci_pci_fixes sdhci_gl9767 = {
2044	.quirks		= SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
2045	.quirks2	= SDHCI_QUIRK2_BROKEN_DDR50,
2046	.probe_slot	= gli_probe_slot_gl9767,
2047	.add_host	= sdhci_pci_uhs2_add_host,
2048	.remove_host	= sdhci_pci_uhs2_remove_host,
2049	.ops		= &sdhci_gl9767_ops,
2050#ifdef CONFIG_PM_SLEEP
2051	.resume		= sdhci_pci_gli_resume,
2052#endif
2053};