cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

sdhci-omap.c (39609B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/**
      3 * SDHCI Controller driver for TI's OMAP SoCs
      4 *
      5 * Copyright (C) 2017 Texas Instruments
      6 * Author: Kishon Vijay Abraham I <kishon@ti.com>
      7 */
      8
      9#include <linux/delay.h>
     10#include <linux/mmc/mmc.h>
     11#include <linux/mmc/slot-gpio.h>
     12#include <linux/module.h>
     13#include <linux/of.h>
     14#include <linux/of_device.h>
     15#include <linux/of_irq.h>
     16#include <linux/platform_device.h>
     17#include <linux/pm_runtime.h>
     18#include <linux/pm_wakeirq.h>
     19#include <linux/regulator/consumer.h>
     20#include <linux/pinctrl/consumer.h>
     21#include <linux/sys_soc.h>
     22#include <linux/thermal.h>
     23
     24#include "sdhci-pltfm.h"
     25
     26/*
     27 * Note that the register offsets used here are from omap_regs
     28 * base which is 0x100 for omap4 and later, and 0 for omap3 and
     29 * earlier.
     30 */
     31#define SDHCI_OMAP_SYSCONFIG	0x10
     32
     33#define SDHCI_OMAP_CON		0x2c
     34#define CON_DW8			BIT(5)
     35#define CON_DMA_MASTER		BIT(20)
     36#define CON_DDR			BIT(19)
     37#define CON_CLKEXTFREE		BIT(16)
     38#define CON_PADEN		BIT(15)
     39#define CON_CTPL		BIT(11)
     40#define CON_INIT		BIT(1)
     41#define CON_OD			BIT(0)
     42
     43#define SDHCI_OMAP_DLL		0x34
     44#define DLL_SWT			BIT(20)
     45#define DLL_FORCE_SR_C_SHIFT	13
     46#define DLL_FORCE_SR_C_MASK	(0x7f << DLL_FORCE_SR_C_SHIFT)
     47#define DLL_FORCE_VALUE		BIT(12)
     48#define DLL_CALIB		BIT(1)
     49
     50#define SDHCI_OMAP_CMD		0x10c
     51
     52#define SDHCI_OMAP_PSTATE	0x124
     53#define PSTATE_DLEV_DAT0	BIT(20)
     54#define PSTATE_DATI		BIT(1)
     55
     56#define SDHCI_OMAP_HCTL		0x128
     57#define HCTL_SDBP		BIT(8)
     58#define HCTL_SDVS_SHIFT		9
     59#define HCTL_SDVS_MASK		(0x7 << HCTL_SDVS_SHIFT)
     60#define HCTL_SDVS_33		(0x7 << HCTL_SDVS_SHIFT)
     61#define HCTL_SDVS_30		(0x6 << HCTL_SDVS_SHIFT)
     62#define HCTL_SDVS_18		(0x5 << HCTL_SDVS_SHIFT)
     63
     64#define SDHCI_OMAP_SYSCTL	0x12c
     65#define SYSCTL_CEN		BIT(2)
     66#define SYSCTL_CLKD_SHIFT	6
     67#define SYSCTL_CLKD_MASK	0x3ff
     68
     69#define SDHCI_OMAP_STAT		0x130
     70
     71#define SDHCI_OMAP_IE		0x134
     72#define INT_CC_EN		BIT(0)
     73
     74#define SDHCI_OMAP_ISE		0x138
     75
     76#define SDHCI_OMAP_AC12		0x13c
     77#define AC12_V1V8_SIGEN		BIT(19)
     78#define AC12_SCLK_SEL		BIT(23)
     79
     80#define SDHCI_OMAP_CAPA		0x140
     81#define CAPA_VS33		BIT(24)
     82#define CAPA_VS30		BIT(25)
     83#define CAPA_VS18		BIT(26)
     84
     85#define SDHCI_OMAP_CAPA2	0x144
     86#define CAPA2_TSDR50		BIT(13)
     87
     88#define SDHCI_OMAP_TIMEOUT	1		/* 1 msec */
     89
     90#define SYSCTL_CLKD_MAX		0x3FF
     91
     92#define IOV_1V8			1800000		/* 180000 uV */
     93#define IOV_3V0			3000000		/* 300000 uV */
     94#define IOV_3V3			3300000		/* 330000 uV */
     95
     96#define MAX_PHASE_DELAY		0x7C
     97
     98/* sdhci-omap controller flags */
     99#define SDHCI_OMAP_REQUIRE_IODELAY	BIT(0)
    100#define SDHCI_OMAP_SPECIAL_RESET	BIT(1)
    101
    102struct sdhci_omap_data {
    103	int omap_offset;	/* Offset for omap regs from base */
    104	u32 offset;		/* Offset for SDHCI regs from base */
    105	u8 flags;
    106};
    107
    108struct sdhci_omap_host {
    109	char			*version;
    110	void __iomem		*base;
    111	struct device		*dev;
    112	struct	regulator	*pbias;
    113	bool			pbias_enabled;
    114	struct sdhci_host	*host;
    115	u8			bus_mode;
    116	u8			power_mode;
    117	u8			timing;
    118	u8			flags;
    119
    120	struct pinctrl		*pinctrl;
    121	struct pinctrl_state	**pinctrl_state;
    122	int			wakeirq;
    123	bool			is_tuning;
    124
    125	/* Offset for omap specific registers from base */
    126	int			omap_offset;
    127
    128	/* Omap specific context save */
    129	u32			con;
    130	u32			hctl;
    131	u32			sysctl;
    132	u32			capa;
    133	u32			ie;
    134	u32			ise;
    135};
    136
    137static void sdhci_omap_start_clock(struct sdhci_omap_host *omap_host);
    138static void sdhci_omap_stop_clock(struct sdhci_omap_host *omap_host);
    139
    140static inline u32 sdhci_omap_readl(struct sdhci_omap_host *host,
    141				   unsigned int offset)
    142{
    143	return readl(host->base + host->omap_offset + offset);
    144}
    145
    146static inline void sdhci_omap_writel(struct sdhci_omap_host *host,
    147				     unsigned int offset, u32 data)
    148{
    149	writel(data, host->base + host->omap_offset + offset);
    150}
    151
    152static int sdhci_omap_set_pbias(struct sdhci_omap_host *omap_host,
    153				bool power_on, unsigned int iov)
    154{
    155	int ret;
    156	struct device *dev = omap_host->dev;
    157
    158	if (IS_ERR(omap_host->pbias))
    159		return 0;
    160
    161	if (power_on) {
    162		ret = regulator_set_voltage(omap_host->pbias, iov, iov);
    163		if (ret) {
    164			dev_err(dev, "pbias set voltage failed\n");
    165			return ret;
    166		}
    167
    168		if (omap_host->pbias_enabled)
    169			return 0;
    170
    171		ret = regulator_enable(omap_host->pbias);
    172		if (ret) {
    173			dev_err(dev, "pbias reg enable fail\n");
    174			return ret;
    175		}
    176
    177		omap_host->pbias_enabled = true;
    178	} else {
    179		if (!omap_host->pbias_enabled)
    180			return 0;
    181
    182		ret = regulator_disable(omap_host->pbias);
    183		if (ret) {
    184			dev_err(dev, "pbias reg disable fail\n");
    185			return ret;
    186		}
    187		omap_host->pbias_enabled = false;
    188	}
    189
    190	return 0;
    191}
    192
    193static int sdhci_omap_enable_iov(struct sdhci_omap_host *omap_host,
    194				 unsigned int iov_pbias)
    195{
    196	int ret;
    197	struct sdhci_host *host = omap_host->host;
    198	struct mmc_host *mmc = host->mmc;
    199
    200	ret = sdhci_omap_set_pbias(omap_host, false, 0);
    201	if (ret)
    202		return ret;
    203
    204	if (!IS_ERR(mmc->supply.vqmmc)) {
    205		/* Pick the right voltage to allow 3.0V for 3.3V nominal PBIAS */
    206		ret = mmc_regulator_set_vqmmc(mmc, &mmc->ios);
    207		if (ret < 0) {
    208			dev_err(mmc_dev(mmc), "vqmmc set voltage failed\n");
    209			return ret;
    210		}
    211	}
    212
    213	ret = sdhci_omap_set_pbias(omap_host, true, iov_pbias);
    214	if (ret)
    215		return ret;
    216
    217	return 0;
    218}
    219
    220static void sdhci_omap_conf_bus_power(struct sdhci_omap_host *omap_host,
    221				      unsigned char signal_voltage)
    222{
    223	u32 reg, capa;
    224	ktime_t timeout;
    225
    226	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_HCTL);
    227	reg &= ~HCTL_SDVS_MASK;
    228
    229	switch (signal_voltage) {
    230	case MMC_SIGNAL_VOLTAGE_330:
    231		capa = sdhci_omap_readl(omap_host, SDHCI_OMAP_CAPA);
    232		if (capa & CAPA_VS33)
    233			reg |= HCTL_SDVS_33;
    234		else if (capa & CAPA_VS30)
    235			reg |= HCTL_SDVS_30;
    236		else
    237			dev_warn(omap_host->dev, "misconfigured CAPA: %08x\n",
    238				 capa);
    239		break;
    240	case MMC_SIGNAL_VOLTAGE_180:
    241	default:
    242		reg |= HCTL_SDVS_18;
    243		break;
    244	}
    245
    246	sdhci_omap_writel(omap_host, SDHCI_OMAP_HCTL, reg);
    247
    248	reg |= HCTL_SDBP;
    249	sdhci_omap_writel(omap_host, SDHCI_OMAP_HCTL, reg);
    250
    251	/* wait 1ms */
    252	timeout = ktime_add_ms(ktime_get(), SDHCI_OMAP_TIMEOUT);
    253	while (1) {
    254		bool timedout = ktime_after(ktime_get(), timeout);
    255
    256		if (sdhci_omap_readl(omap_host, SDHCI_OMAP_HCTL) & HCTL_SDBP)
    257			break;
    258		if (WARN_ON(timedout))
    259			return;
    260		usleep_range(5, 10);
    261	}
    262}
    263
    264static void sdhci_omap_enable_sdio_irq(struct mmc_host *mmc, int enable)
    265{
    266	struct sdhci_host *host = mmc_priv(mmc);
    267	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    268	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
    269	u32 reg;
    270
    271	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON);
    272	if (enable)
    273		reg |= (CON_CTPL | CON_CLKEXTFREE);
    274	else
    275		reg &= ~(CON_CTPL | CON_CLKEXTFREE);
    276	sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg);
    277
    278	sdhci_enable_sdio_irq(mmc, enable);
    279}
    280
    281static inline void sdhci_omap_set_dll(struct sdhci_omap_host *omap_host,
    282				      int count)
    283{
    284	int i;
    285	u32 reg;
    286
    287	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_DLL);
    288	reg |= DLL_FORCE_VALUE;
    289	reg &= ~DLL_FORCE_SR_C_MASK;
    290	reg |= (count << DLL_FORCE_SR_C_SHIFT);
    291	sdhci_omap_writel(omap_host, SDHCI_OMAP_DLL, reg);
    292
    293	reg |= DLL_CALIB;
    294	sdhci_omap_writel(omap_host, SDHCI_OMAP_DLL, reg);
    295	for (i = 0; i < 1000; i++) {
    296		reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_DLL);
    297		if (reg & DLL_CALIB)
    298			break;
    299	}
    300	reg &= ~DLL_CALIB;
    301	sdhci_omap_writel(omap_host, SDHCI_OMAP_DLL, reg);
    302}
    303
    304static void sdhci_omap_disable_tuning(struct sdhci_omap_host *omap_host)
    305{
    306	u32 reg;
    307
    308	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_AC12);
    309	reg &= ~AC12_SCLK_SEL;
    310	sdhci_omap_writel(omap_host, SDHCI_OMAP_AC12, reg);
    311
    312	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_DLL);
    313	reg &= ~(DLL_FORCE_VALUE | DLL_SWT);
    314	sdhci_omap_writel(omap_host, SDHCI_OMAP_DLL, reg);
    315}
    316
    317static int sdhci_omap_execute_tuning(struct mmc_host *mmc, u32 opcode)
    318{
    319	struct sdhci_host *host = mmc_priv(mmc);
    320	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    321	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
    322	struct thermal_zone_device *thermal_dev;
    323	struct device *dev = omap_host->dev;
    324	struct mmc_ios *ios = &mmc->ios;
    325	u32 start_window = 0, max_window = 0;
    326	bool single_point_failure = false;
    327	bool dcrc_was_enabled = false;
    328	u8 cur_match, prev_match = 0;
    329	u32 length = 0, max_len = 0;
    330	u32 phase_delay = 0;
    331	int temperature;
    332	int ret = 0;
    333	u32 reg;
    334	int i;
    335
    336	/* clock tuning is not needed for upto 52MHz */
    337	if (ios->clock <= 52000000)
    338		return 0;
    339
    340	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CAPA2);
    341	if (ios->timing == MMC_TIMING_UHS_SDR50 && !(reg & CAPA2_TSDR50))
    342		return 0;
    343
    344	thermal_dev = thermal_zone_get_zone_by_name("cpu_thermal");
    345	if (IS_ERR(thermal_dev)) {
    346		dev_err(dev, "Unable to get thermal zone for tuning\n");
    347		return PTR_ERR(thermal_dev);
    348	}
    349
    350	ret = thermal_zone_get_temp(thermal_dev, &temperature);
    351	if (ret)
    352		return ret;
    353
    354	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_DLL);
    355	reg |= DLL_SWT;
    356	sdhci_omap_writel(omap_host, SDHCI_OMAP_DLL, reg);
    357
    358	/*
    359	 * OMAP5/DRA74X/DRA72x Errata i802:
    360	 * DCRC error interrupts (MMCHS_STAT[21] DCRC=0x1) can occur
    361	 * during the tuning procedure. So disable it during the
    362	 * tuning procedure.
    363	 */
    364	if (host->ier & SDHCI_INT_DATA_CRC) {
    365		host->ier &= ~SDHCI_INT_DATA_CRC;
    366		dcrc_was_enabled = true;
    367	}
    368
    369	omap_host->is_tuning = true;
    370
    371	/*
    372	 * Stage 1: Search for a maximum pass window ignoring any
    373	 * any single point failures. If the tuning value ends up
    374	 * near it, move away from it in stage 2 below
    375	 */
    376	while (phase_delay <= MAX_PHASE_DELAY) {
    377		sdhci_omap_set_dll(omap_host, phase_delay);
    378
    379		cur_match = !mmc_send_tuning(mmc, opcode, NULL);
    380		if (cur_match) {
    381			if (prev_match) {
    382				length++;
    383			} else if (single_point_failure) {
    384				/* ignore single point failure */
    385				length++;
    386			} else {
    387				start_window = phase_delay;
    388				length = 1;
    389			}
    390		} else {
    391			single_point_failure = prev_match;
    392		}
    393
    394		if (length > max_len) {
    395			max_window = start_window;
    396			max_len = length;
    397		}
    398
    399		prev_match = cur_match;
    400		phase_delay += 4;
    401	}
    402
    403	if (!max_len) {
    404		dev_err(dev, "Unable to find match\n");
    405		ret = -EIO;
    406		goto tuning_error;
    407	}
    408
    409	/*
    410	 * Assign tuning value as a ratio of maximum pass window based
    411	 * on temperature
    412	 */
    413	if (temperature < -20000)
    414		phase_delay = min(max_window + 4 * (max_len - 1) - 24,
    415				  max_window +
    416				  DIV_ROUND_UP(13 * max_len, 16) * 4);
    417	else if (temperature < 20000)
    418		phase_delay = max_window + DIV_ROUND_UP(9 * max_len, 16) * 4;
    419	else if (temperature < 40000)
    420		phase_delay = max_window + DIV_ROUND_UP(8 * max_len, 16) * 4;
    421	else if (temperature < 70000)
    422		phase_delay = max_window + DIV_ROUND_UP(7 * max_len, 16) * 4;
    423	else if (temperature < 90000)
    424		phase_delay = max_window + DIV_ROUND_UP(5 * max_len, 16) * 4;
    425	else if (temperature < 120000)
    426		phase_delay = max_window + DIV_ROUND_UP(4 * max_len, 16) * 4;
    427	else
    428		phase_delay = max_window + DIV_ROUND_UP(3 * max_len, 16) * 4;
    429
    430	/*
    431	 * Stage 2: Search for a single point failure near the chosen tuning
    432	 * value in two steps. First in the +3 to +10 range and then in the
    433	 * +2 to -10 range. If found, move away from it in the appropriate
    434	 * direction by the appropriate amount depending on the temperature.
    435	 */
    436	for (i = 3; i <= 10; i++) {
    437		sdhci_omap_set_dll(omap_host, phase_delay + i);
    438
    439		if (mmc_send_tuning(mmc, opcode, NULL)) {
    440			if (temperature < 10000)
    441				phase_delay += i + 6;
    442			else if (temperature < 20000)
    443				phase_delay += i - 12;
    444			else if (temperature < 70000)
    445				phase_delay += i - 8;
    446			else
    447				phase_delay += i - 6;
    448
    449			goto single_failure_found;
    450		}
    451	}
    452
    453	for (i = 2; i >= -10; i--) {
    454		sdhci_omap_set_dll(omap_host, phase_delay + i);
    455
    456		if (mmc_send_tuning(mmc, opcode, NULL)) {
    457			if (temperature < 10000)
    458				phase_delay += i + 12;
    459			else if (temperature < 20000)
    460				phase_delay += i + 8;
    461			else if (temperature < 70000)
    462				phase_delay += i + 8;
    463			else if (temperature < 90000)
    464				phase_delay += i + 10;
    465			else
    466				phase_delay += i + 12;
    467
    468			goto single_failure_found;
    469		}
    470	}
    471
    472single_failure_found:
    473	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_AC12);
    474	if (!(reg & AC12_SCLK_SEL)) {
    475		ret = -EIO;
    476		goto tuning_error;
    477	}
    478
    479	sdhci_omap_set_dll(omap_host, phase_delay);
    480
    481	omap_host->is_tuning = false;
    482
    483	goto ret;
    484
    485tuning_error:
    486	omap_host->is_tuning = false;
    487	dev_err(dev, "Tuning failed\n");
    488	sdhci_omap_disable_tuning(omap_host);
    489
    490ret:
    491	sdhci_reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA);
    492	/* Reenable forbidden interrupt */
    493	if (dcrc_was_enabled)
    494		host->ier |= SDHCI_INT_DATA_CRC;
    495	sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
    496	sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
    497	return ret;
    498}
    499
    500static int sdhci_omap_card_busy(struct mmc_host *mmc)
    501{
    502	u32 reg, ac12;
    503	int ret = false;
    504	struct sdhci_host *host = mmc_priv(mmc);
    505	struct sdhci_pltfm_host *pltfm_host;
    506	struct sdhci_omap_host *omap_host;
    507	u32 ier = host->ier;
    508
    509	pltfm_host = sdhci_priv(host);
    510	omap_host = sdhci_pltfm_priv(pltfm_host);
    511
    512	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON);
    513	ac12 = sdhci_omap_readl(omap_host, SDHCI_OMAP_AC12);
    514	reg &= ~CON_CLKEXTFREE;
    515	if (ac12 & AC12_V1V8_SIGEN)
    516		reg |= CON_CLKEXTFREE;
    517	reg |= CON_PADEN;
    518	sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg);
    519
    520	disable_irq(host->irq);
    521	ier |= SDHCI_INT_CARD_INT;
    522	sdhci_writel(host, ier, SDHCI_INT_ENABLE);
    523	sdhci_writel(host, ier, SDHCI_SIGNAL_ENABLE);
    524
    525	/*
    526	 * Delay is required for PSTATE to correctly reflect
    527	 * DLEV/CLEV values after PADEN is set.
    528	 */
    529	usleep_range(50, 100);
    530	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_PSTATE);
    531	if ((reg & PSTATE_DATI) || !(reg & PSTATE_DLEV_DAT0))
    532		ret = true;
    533
    534	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON);
    535	reg &= ~(CON_CLKEXTFREE | CON_PADEN);
    536	sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg);
    537
    538	sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
    539	sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
    540	enable_irq(host->irq);
    541
    542	return ret;
    543}
    544
    545static int sdhci_omap_start_signal_voltage_switch(struct mmc_host *mmc,
    546						  struct mmc_ios *ios)
    547{
    548	u32 reg;
    549	int ret;
    550	unsigned int iov;
    551	struct sdhci_host *host = mmc_priv(mmc);
    552	struct sdhci_pltfm_host *pltfm_host;
    553	struct sdhci_omap_host *omap_host;
    554	struct device *dev;
    555
    556	pltfm_host = sdhci_priv(host);
    557	omap_host = sdhci_pltfm_priv(pltfm_host);
    558	dev = omap_host->dev;
    559
    560	if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
    561		reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CAPA);
    562		if (!(reg & (CAPA_VS30 | CAPA_VS33)))
    563			return -EOPNOTSUPP;
    564
    565		if (reg & CAPA_VS30)
    566			iov = IOV_3V0;
    567		else
    568			iov = IOV_3V3;
    569
    570		sdhci_omap_conf_bus_power(omap_host, ios->signal_voltage);
    571
    572		reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_AC12);
    573		reg &= ~AC12_V1V8_SIGEN;
    574		sdhci_omap_writel(omap_host, SDHCI_OMAP_AC12, reg);
    575
    576	} else if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_180) {
    577		reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CAPA);
    578		if (!(reg & CAPA_VS18))
    579			return -EOPNOTSUPP;
    580
    581		iov = IOV_1V8;
    582
    583		sdhci_omap_conf_bus_power(omap_host, ios->signal_voltage);
    584
    585		reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_AC12);
    586		reg |= AC12_V1V8_SIGEN;
    587		sdhci_omap_writel(omap_host, SDHCI_OMAP_AC12, reg);
    588	} else {
    589		return -EOPNOTSUPP;
    590	}
    591
    592	ret = sdhci_omap_enable_iov(omap_host, iov);
    593	if (ret) {
    594		dev_err(dev, "failed to switch IO voltage to %dmV\n", iov);
    595		return ret;
    596	}
    597
    598	dev_dbg(dev, "IO voltage switched to %dmV\n", iov);
    599	return 0;
    600}
    601
    602static void sdhci_omap_set_timing(struct sdhci_omap_host *omap_host, u8 timing)
    603{
    604	int ret;
    605	struct pinctrl_state *pinctrl_state;
    606	struct device *dev = omap_host->dev;
    607
    608	if (!(omap_host->flags & SDHCI_OMAP_REQUIRE_IODELAY))
    609		return;
    610
    611	if (omap_host->timing == timing)
    612		return;
    613
    614	sdhci_omap_stop_clock(omap_host);
    615
    616	pinctrl_state = omap_host->pinctrl_state[timing];
    617	ret = pinctrl_select_state(omap_host->pinctrl, pinctrl_state);
    618	if (ret) {
    619		dev_err(dev, "failed to select pinctrl state\n");
    620		return;
    621	}
    622
    623	sdhci_omap_start_clock(omap_host);
    624	omap_host->timing = timing;
    625}
    626
    627static void sdhci_omap_set_power_mode(struct sdhci_omap_host *omap_host,
    628				      u8 power_mode)
    629{
    630	if (omap_host->bus_mode == MMC_POWER_OFF)
    631		sdhci_omap_disable_tuning(omap_host);
    632	omap_host->power_mode = power_mode;
    633}
    634
    635static void sdhci_omap_set_bus_mode(struct sdhci_omap_host *omap_host,
    636				    unsigned int mode)
    637{
    638	u32 reg;
    639
    640	if (omap_host->bus_mode == mode)
    641		return;
    642
    643	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON);
    644	if (mode == MMC_BUSMODE_OPENDRAIN)
    645		reg |= CON_OD;
    646	else
    647		reg &= ~CON_OD;
    648	sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg);
    649
    650	omap_host->bus_mode = mode;
    651}
    652
    653static void sdhci_omap_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
    654{
    655	struct sdhci_host *host = mmc_priv(mmc);
    656	struct sdhci_pltfm_host *pltfm_host;
    657	struct sdhci_omap_host *omap_host;
    658
    659	pltfm_host = sdhci_priv(host);
    660	omap_host = sdhci_pltfm_priv(pltfm_host);
    661
    662	sdhci_omap_set_bus_mode(omap_host, ios->bus_mode);
    663	sdhci_omap_set_timing(omap_host, ios->timing);
    664	sdhci_set_ios(mmc, ios);
    665	sdhci_omap_set_power_mode(omap_host, ios->power_mode);
    666}
    667
    668static u16 sdhci_omap_calc_divisor(struct sdhci_pltfm_host *host,
    669				   unsigned int clock)
    670{
    671	u16 dsor;
    672
    673	dsor = DIV_ROUND_UP(clk_get_rate(host->clk), clock);
    674	if (dsor > SYSCTL_CLKD_MAX)
    675		dsor = SYSCTL_CLKD_MAX;
    676
    677	return dsor;
    678}
    679
    680static void sdhci_omap_start_clock(struct sdhci_omap_host *omap_host)
    681{
    682	u32 reg;
    683
    684	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_SYSCTL);
    685	reg |= SYSCTL_CEN;
    686	sdhci_omap_writel(omap_host, SDHCI_OMAP_SYSCTL, reg);
    687}
    688
    689static void sdhci_omap_stop_clock(struct sdhci_omap_host *omap_host)
    690{
    691	u32 reg;
    692
    693	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_SYSCTL);
    694	reg &= ~SYSCTL_CEN;
    695	sdhci_omap_writel(omap_host, SDHCI_OMAP_SYSCTL, reg);
    696}
    697
    698static void sdhci_omap_set_clock(struct sdhci_host *host, unsigned int clock)
    699{
    700	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    701	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
    702	unsigned long clkdiv;
    703
    704	sdhci_omap_stop_clock(omap_host);
    705
    706	if (!clock)
    707		return;
    708
    709	clkdiv = sdhci_omap_calc_divisor(pltfm_host, clock);
    710	clkdiv = (clkdiv & SYSCTL_CLKD_MASK) << SYSCTL_CLKD_SHIFT;
    711	sdhci_enable_clk(host, clkdiv);
    712
    713	sdhci_omap_start_clock(omap_host);
    714}
    715
    716static void sdhci_omap_set_power(struct sdhci_host *host, unsigned char mode,
    717			  unsigned short vdd)
    718{
    719	struct mmc_host *mmc = host->mmc;
    720
    721	if (!IS_ERR(mmc->supply.vmmc))
    722		mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd);
    723}
    724
    725/*
    726 * MMCHS_HL_HWINFO has the MADMA_EN bit set if the controller instance
    727 * is connected to L3 interconnect and is bus master capable. Note that
    728 * the MMCHS_HL_HWINFO register is in the module registers before the
    729 * omap registers and sdhci registers. The offset can vary for omap
    730 * registers depending on the SoC. Do not use sdhci_omap_readl() here.
    731 */
    732static bool sdhci_omap_has_adma(struct sdhci_omap_host *omap_host, int offset)
    733{
    734	/* MMCHS_HL_HWINFO register is only available on omap4 and later */
    735	if (offset < 0x200)
    736		return false;
    737
    738	return readl(omap_host->base + 4) & 1;
    739}
    740
    741static int sdhci_omap_enable_dma(struct sdhci_host *host)
    742{
    743	u32 reg;
    744	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    745	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
    746
    747	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON);
    748	reg &= ~CON_DMA_MASTER;
    749	/* Switch to DMA slave mode when using external DMA */
    750	if (!host->use_external_dma)
    751		reg |= CON_DMA_MASTER;
    752
    753	sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg);
    754
    755	return 0;
    756}
    757
    758static unsigned int sdhci_omap_get_min_clock(struct sdhci_host *host)
    759{
    760	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    761
    762	return clk_get_rate(pltfm_host->clk) / SYSCTL_CLKD_MAX;
    763}
    764
    765static void sdhci_omap_set_bus_width(struct sdhci_host *host, int width)
    766{
    767	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    768	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
    769	u32 reg;
    770
    771	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON);
    772	if (width == MMC_BUS_WIDTH_8)
    773		reg |= CON_DW8;
    774	else
    775		reg &= ~CON_DW8;
    776	sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg);
    777
    778	sdhci_set_bus_width(host, width);
    779}
    780
    781static void sdhci_omap_init_74_clocks(struct sdhci_host *host, u8 power_mode)
    782{
    783	u32 reg;
    784	ktime_t timeout;
    785	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    786	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
    787
    788	if (omap_host->power_mode == power_mode)
    789		return;
    790
    791	if (power_mode != MMC_POWER_ON)
    792		return;
    793
    794	disable_irq(host->irq);
    795
    796	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON);
    797	reg |= CON_INIT;
    798	sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg);
    799	sdhci_omap_writel(omap_host, SDHCI_OMAP_CMD, 0x0);
    800
    801	/* wait 1ms */
    802	timeout = ktime_add_ms(ktime_get(), SDHCI_OMAP_TIMEOUT);
    803	while (1) {
    804		bool timedout = ktime_after(ktime_get(), timeout);
    805
    806		if (sdhci_omap_readl(omap_host, SDHCI_OMAP_STAT) & INT_CC_EN)
    807			break;
    808		if (WARN_ON(timedout))
    809			return;
    810		usleep_range(5, 10);
    811	}
    812
    813	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON);
    814	reg &= ~CON_INIT;
    815	sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg);
    816	sdhci_omap_writel(omap_host, SDHCI_OMAP_STAT, INT_CC_EN);
    817
    818	enable_irq(host->irq);
    819}
    820
    821static void sdhci_omap_set_uhs_signaling(struct sdhci_host *host,
    822					 unsigned int timing)
    823{
    824	u32 reg;
    825	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    826	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
    827
    828	sdhci_omap_stop_clock(omap_host);
    829
    830	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON);
    831	if (timing == MMC_TIMING_UHS_DDR50 || timing == MMC_TIMING_MMC_DDR52)
    832		reg |= CON_DDR;
    833	else
    834		reg &= ~CON_DDR;
    835	sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, reg);
    836
    837	sdhci_set_uhs_signaling(host, timing);
    838	sdhci_omap_start_clock(omap_host);
    839}
    840
    841#define MMC_TIMEOUT_US		20000		/* 20000 micro Sec */
    842static void sdhci_omap_reset(struct sdhci_host *host, u8 mask)
    843{
    844	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    845	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
    846	unsigned long limit = MMC_TIMEOUT_US;
    847	unsigned long i = 0;
    848	u32 sysc;
    849
    850	/* Save target module sysconfig configured by SoC PM layer */
    851	if (mask & SDHCI_RESET_ALL)
    852		sysc = sdhci_omap_readl(omap_host, SDHCI_OMAP_SYSCONFIG);
    853
    854	/* Don't reset data lines during tuning operation */
    855	if (omap_host->is_tuning)
    856		mask &= ~SDHCI_RESET_DATA;
    857
    858	if (omap_host->flags & SDHCI_OMAP_SPECIAL_RESET) {
    859		sdhci_writeb(host, mask, SDHCI_SOFTWARE_RESET);
    860		while ((!(sdhci_readb(host, SDHCI_SOFTWARE_RESET) & mask)) &&
    861		       (i++ < limit))
    862			udelay(1);
    863		i = 0;
    864		while ((sdhci_readb(host, SDHCI_SOFTWARE_RESET) & mask) &&
    865		       (i++ < limit))
    866			udelay(1);
    867
    868		if (sdhci_readb(host, SDHCI_SOFTWARE_RESET) & mask)
    869			dev_err(mmc_dev(host->mmc),
    870				"Timeout waiting on controller reset in %s\n",
    871				__func__);
    872
    873		goto restore_sysc;
    874	}
    875
    876	sdhci_reset(host, mask);
    877
    878restore_sysc:
    879	if (mask & SDHCI_RESET_ALL)
    880		sdhci_omap_writel(omap_host, SDHCI_OMAP_SYSCONFIG, sysc);
    881}
    882
    883#define CMD_ERR_MASK (SDHCI_INT_CRC | SDHCI_INT_END_BIT | SDHCI_INT_INDEX |\
    884		      SDHCI_INT_TIMEOUT)
    885#define CMD_MASK (CMD_ERR_MASK | SDHCI_INT_RESPONSE)
    886
    887static u32 sdhci_omap_irq(struct sdhci_host *host, u32 intmask)
    888{
    889	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    890	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
    891
    892	if (omap_host->is_tuning && host->cmd && !host->data_early &&
    893	    (intmask & CMD_ERR_MASK)) {
    894
    895		/*
    896		 * Since we are not resetting data lines during tuning
    897		 * operation, data error or data complete interrupts
    898		 * might still arrive. Mark this request as a failure
    899		 * but still wait for the data interrupt
    900		 */
    901		if (intmask & SDHCI_INT_TIMEOUT)
    902			host->cmd->error = -ETIMEDOUT;
    903		else
    904			host->cmd->error = -EILSEQ;
    905
    906		host->cmd = NULL;
    907
    908		/*
    909		 * Sometimes command error interrupts and command complete
    910		 * interrupt will arrive together. Clear all command related
    911		 * interrupts here.
    912		 */
    913		sdhci_writel(host, intmask & CMD_MASK, SDHCI_INT_STATUS);
    914		intmask &= ~CMD_MASK;
    915	}
    916
    917	return intmask;
    918}
    919
    920static void sdhci_omap_set_timeout(struct sdhci_host *host,
    921				   struct mmc_command *cmd)
    922{
    923	if (cmd->opcode == MMC_ERASE)
    924		sdhci_set_data_timeout_irq(host, false);
    925
    926	__sdhci_set_timeout(host, cmd);
    927}
    928
    929static struct sdhci_ops sdhci_omap_ops = {
    930	.set_clock = sdhci_omap_set_clock,
    931	.set_power = sdhci_omap_set_power,
    932	.enable_dma = sdhci_omap_enable_dma,
    933	.get_max_clock = sdhci_pltfm_clk_get_max_clock,
    934	.get_min_clock = sdhci_omap_get_min_clock,
    935	.set_bus_width = sdhci_omap_set_bus_width,
    936	.platform_send_init_74_clocks = sdhci_omap_init_74_clocks,
    937	.reset = sdhci_omap_reset,
    938	.set_uhs_signaling = sdhci_omap_set_uhs_signaling,
    939	.irq = sdhci_omap_irq,
    940	.set_timeout = sdhci_omap_set_timeout,
    941};
    942
    943static unsigned int sdhci_omap_regulator_get_caps(struct device *dev,
    944						  const char *name)
    945{
    946	struct regulator *reg;
    947	unsigned int caps = 0;
    948
    949	reg = regulator_get(dev, name);
    950	if (IS_ERR(reg))
    951		return ~0U;
    952
    953	if (regulator_is_supported_voltage(reg, 1700000, 1950000))
    954		caps |= SDHCI_CAN_VDD_180;
    955	if (regulator_is_supported_voltage(reg, 2700000, 3150000))
    956		caps |= SDHCI_CAN_VDD_300;
    957	if (regulator_is_supported_voltage(reg, 3150000, 3600000))
    958		caps |= SDHCI_CAN_VDD_330;
    959
    960	regulator_put(reg);
    961
    962	return caps;
    963}
    964
    965static int sdhci_omap_set_capabilities(struct sdhci_host *host)
    966{
    967	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    968	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
    969	struct device *dev = omap_host->dev;
    970	const u32 mask = SDHCI_CAN_VDD_180 | SDHCI_CAN_VDD_300 | SDHCI_CAN_VDD_330;
    971	unsigned int pbias, vqmmc, caps = 0;
    972	u32 reg;
    973
    974	pbias = sdhci_omap_regulator_get_caps(dev, "pbias");
    975	vqmmc = sdhci_omap_regulator_get_caps(dev, "vqmmc");
    976	caps = pbias & vqmmc;
    977
    978	if (pbias != ~0U && vqmmc == ~0U)
    979		dev_warn(dev, "vqmmc regulator missing for pbias\n");
    980	else if (caps == ~0U)
    981		return 0;
    982
    983	/*
    984	 * Quirk handling to allow 3.0V vqmmc with a valid 3.3V PBIAS. This is
    985	 * needed for 3.0V ldo9_reg on omap5 at least.
    986	 */
    987	if (pbias != ~0U && (pbias & SDHCI_CAN_VDD_330) &&
    988	    (vqmmc & SDHCI_CAN_VDD_300))
    989		caps |= SDHCI_CAN_VDD_330;
    990
    991	/* voltage capabilities might be set by boot loader, clear it */
    992	reg = sdhci_omap_readl(omap_host, SDHCI_OMAP_CAPA);
    993	reg &= ~(CAPA_VS18 | CAPA_VS30 | CAPA_VS33);
    994
    995	if (caps & SDHCI_CAN_VDD_180)
    996		reg |= CAPA_VS18;
    997
    998	if (caps & SDHCI_CAN_VDD_300)
    999		reg |= CAPA_VS30;
   1000
   1001	if (caps & SDHCI_CAN_VDD_330)
   1002		reg |= CAPA_VS33;
   1003
   1004	sdhci_omap_writel(omap_host, SDHCI_OMAP_CAPA, reg);
   1005
   1006	host->caps &= ~mask;
   1007	host->caps |= caps;
   1008
   1009	return 0;
   1010}
   1011
   1012static const struct sdhci_pltfm_data sdhci_omap_pdata = {
   1013	.quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION |
   1014		  SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK |
   1015		  SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN |
   1016		  SDHCI_QUIRK_NO_HISPD_BIT |
   1017		  SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC,
   1018	.quirks2 = SDHCI_QUIRK2_ACMD23_BROKEN |
   1019		   SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
   1020		   SDHCI_QUIRK2_RSP_136_HAS_CRC |
   1021		   SDHCI_QUIRK2_DISABLE_HW_TIMEOUT,
   1022	.ops = &sdhci_omap_ops,
   1023};
   1024
   1025static const struct sdhci_omap_data omap2430_data = {
   1026	.omap_offset = 0,
   1027	.offset = 0x100,
   1028};
   1029
   1030static const struct sdhci_omap_data omap3_data = {
   1031	.omap_offset = 0,
   1032	.offset = 0x100,
   1033};
   1034
   1035static const struct sdhci_omap_data omap4_data = {
   1036	.omap_offset = 0x100,
   1037	.offset = 0x200,
   1038	.flags = SDHCI_OMAP_SPECIAL_RESET,
   1039};
   1040
   1041static const struct sdhci_omap_data omap5_data = {
   1042	.omap_offset = 0x100,
   1043	.offset = 0x200,
   1044	.flags = SDHCI_OMAP_SPECIAL_RESET,
   1045};
   1046
   1047static const struct sdhci_omap_data k2g_data = {
   1048	.omap_offset = 0x100,
   1049	.offset = 0x200,
   1050};
   1051
   1052static const struct sdhci_omap_data am335_data = {
   1053	.omap_offset = 0x100,
   1054	.offset = 0x200,
   1055	.flags = SDHCI_OMAP_SPECIAL_RESET,
   1056};
   1057
   1058static const struct sdhci_omap_data am437_data = {
   1059	.omap_offset = 0x100,
   1060	.offset = 0x200,
   1061	.flags = SDHCI_OMAP_SPECIAL_RESET,
   1062};
   1063
   1064static const struct sdhci_omap_data dra7_data = {
   1065	.omap_offset = 0x100,
   1066	.offset = 0x200,
   1067	.flags	= SDHCI_OMAP_REQUIRE_IODELAY,
   1068};
   1069
   1070static const struct of_device_id omap_sdhci_match[] = {
   1071	{ .compatible = "ti,omap2430-sdhci", .data = &omap2430_data },
   1072	{ .compatible = "ti,omap3-sdhci", .data = &omap3_data },
   1073	{ .compatible = "ti,omap4-sdhci", .data = &omap4_data },
   1074	{ .compatible = "ti,omap5-sdhci", .data = &omap5_data },
   1075	{ .compatible = "ti,dra7-sdhci", .data = &dra7_data },
   1076	{ .compatible = "ti,k2g-sdhci", .data = &k2g_data },
   1077	{ .compatible = "ti,am335-sdhci", .data = &am335_data },
   1078	{ .compatible = "ti,am437-sdhci", .data = &am437_data },
   1079	{},
   1080};
   1081MODULE_DEVICE_TABLE(of, omap_sdhci_match);
   1082
   1083static struct pinctrl_state
   1084*sdhci_omap_iodelay_pinctrl_state(struct sdhci_omap_host *omap_host, char *mode,
   1085				  u32 *caps, u32 capmask)
   1086{
   1087	struct device *dev = omap_host->dev;
   1088	char *version = omap_host->version;
   1089	struct pinctrl_state *pinctrl_state = ERR_PTR(-ENODEV);
   1090	char str[20];
   1091
   1092	if (!(*caps & capmask))
   1093		goto ret;
   1094
   1095	if (version) {
   1096		snprintf(str, 20, "%s-%s", mode, version);
   1097		pinctrl_state = pinctrl_lookup_state(omap_host->pinctrl, str);
   1098	}
   1099
   1100	if (IS_ERR(pinctrl_state))
   1101		pinctrl_state = pinctrl_lookup_state(omap_host->pinctrl, mode);
   1102
   1103	if (IS_ERR(pinctrl_state)) {
   1104		dev_err(dev, "no pinctrl state for %s mode", mode);
   1105		*caps &= ~capmask;
   1106	}
   1107
   1108ret:
   1109	return pinctrl_state;
   1110}
   1111
   1112static int sdhci_omap_config_iodelay_pinctrl_state(struct sdhci_omap_host
   1113						   *omap_host)
   1114{
   1115	struct device *dev = omap_host->dev;
   1116	struct sdhci_host *host = omap_host->host;
   1117	struct mmc_host *mmc = host->mmc;
   1118	u32 *caps = &mmc->caps;
   1119	u32 *caps2 = &mmc->caps2;
   1120	struct pinctrl_state *state;
   1121	struct pinctrl_state **pinctrl_state;
   1122
   1123	if (!(omap_host->flags & SDHCI_OMAP_REQUIRE_IODELAY))
   1124		return 0;
   1125
   1126	pinctrl_state = devm_kcalloc(dev,
   1127				     MMC_TIMING_MMC_HS200 + 1,
   1128				     sizeof(*pinctrl_state),
   1129				     GFP_KERNEL);
   1130	if (!pinctrl_state)
   1131		return -ENOMEM;
   1132
   1133	omap_host->pinctrl = devm_pinctrl_get(omap_host->dev);
   1134	if (IS_ERR(omap_host->pinctrl)) {
   1135		dev_err(dev, "Cannot get pinctrl\n");
   1136		return PTR_ERR(omap_host->pinctrl);
   1137	}
   1138
   1139	state = pinctrl_lookup_state(omap_host->pinctrl, "default");
   1140	if (IS_ERR(state)) {
   1141		dev_err(dev, "no pinctrl state for default mode\n");
   1142		return PTR_ERR(state);
   1143	}
   1144	pinctrl_state[MMC_TIMING_LEGACY] = state;
   1145
   1146	state = sdhci_omap_iodelay_pinctrl_state(omap_host, "sdr104", caps,
   1147						 MMC_CAP_UHS_SDR104);
   1148	if (!IS_ERR(state))
   1149		pinctrl_state[MMC_TIMING_UHS_SDR104] = state;
   1150
   1151	state = sdhci_omap_iodelay_pinctrl_state(omap_host, "ddr50", caps,
   1152						 MMC_CAP_UHS_DDR50);
   1153	if (!IS_ERR(state))
   1154		pinctrl_state[MMC_TIMING_UHS_DDR50] = state;
   1155
   1156	state = sdhci_omap_iodelay_pinctrl_state(omap_host, "sdr50", caps,
   1157						 MMC_CAP_UHS_SDR50);
   1158	if (!IS_ERR(state))
   1159		pinctrl_state[MMC_TIMING_UHS_SDR50] = state;
   1160
   1161	state = sdhci_omap_iodelay_pinctrl_state(omap_host, "sdr25", caps,
   1162						 MMC_CAP_UHS_SDR25);
   1163	if (!IS_ERR(state))
   1164		pinctrl_state[MMC_TIMING_UHS_SDR25] = state;
   1165
   1166	state = sdhci_omap_iodelay_pinctrl_state(omap_host, "sdr12", caps,
   1167						 MMC_CAP_UHS_SDR12);
   1168	if (!IS_ERR(state))
   1169		pinctrl_state[MMC_TIMING_UHS_SDR12] = state;
   1170
   1171	state = sdhci_omap_iodelay_pinctrl_state(omap_host, "ddr_1_8v", caps,
   1172						 MMC_CAP_1_8V_DDR);
   1173	if (!IS_ERR(state)) {
   1174		pinctrl_state[MMC_TIMING_MMC_DDR52] = state;
   1175	} else {
   1176		state = sdhci_omap_iodelay_pinctrl_state(omap_host, "ddr_3_3v",
   1177							 caps,
   1178							 MMC_CAP_3_3V_DDR);
   1179		if (!IS_ERR(state))
   1180			pinctrl_state[MMC_TIMING_MMC_DDR52] = state;
   1181	}
   1182
   1183	state = sdhci_omap_iodelay_pinctrl_state(omap_host, "hs", caps,
   1184						 MMC_CAP_SD_HIGHSPEED);
   1185	if (!IS_ERR(state))
   1186		pinctrl_state[MMC_TIMING_SD_HS] = state;
   1187
   1188	state = sdhci_omap_iodelay_pinctrl_state(omap_host, "hs", caps,
   1189						 MMC_CAP_MMC_HIGHSPEED);
   1190	if (!IS_ERR(state))
   1191		pinctrl_state[MMC_TIMING_MMC_HS] = state;
   1192
   1193	state = sdhci_omap_iodelay_pinctrl_state(omap_host, "hs200_1_8v", caps2,
   1194						 MMC_CAP2_HS200_1_8V_SDR);
   1195	if (!IS_ERR(state))
   1196		pinctrl_state[MMC_TIMING_MMC_HS200] = state;
   1197
   1198	omap_host->pinctrl_state = pinctrl_state;
   1199
   1200	return 0;
   1201}
   1202
   1203static const struct soc_device_attribute sdhci_omap_soc_devices[] = {
   1204	{
   1205		.machine = "DRA7[45]*",
   1206		.revision = "ES1.[01]",
   1207	},
   1208	{
   1209		/* sentinel */
   1210	}
   1211};
   1212
   1213static int sdhci_omap_probe(struct platform_device *pdev)
   1214{
   1215	int ret;
   1216	u32 offset;
   1217	struct device *dev = &pdev->dev;
   1218	struct sdhci_host *host;
   1219	struct sdhci_pltfm_host *pltfm_host;
   1220	struct sdhci_omap_host *omap_host;
   1221	struct mmc_host *mmc;
   1222	const struct sdhci_omap_data *data;
   1223	const struct soc_device_attribute *soc;
   1224	struct resource *regs;
   1225
   1226	data = of_device_get_match_data(&pdev->dev);
   1227	if (!data) {
   1228		dev_err(dev, "no sdhci omap data\n");
   1229		return -EINVAL;
   1230	}
   1231	offset = data->offset;
   1232
   1233	regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
   1234	if (!regs)
   1235		return -ENXIO;
   1236
   1237	host = sdhci_pltfm_init(pdev, &sdhci_omap_pdata,
   1238				sizeof(*omap_host));
   1239	if (IS_ERR(host)) {
   1240		dev_err(dev, "Failed sdhci_pltfm_init\n");
   1241		return PTR_ERR(host);
   1242	}
   1243
   1244	pltfm_host = sdhci_priv(host);
   1245	omap_host = sdhci_pltfm_priv(pltfm_host);
   1246	omap_host->host = host;
   1247	omap_host->base = host->ioaddr;
   1248	omap_host->dev = dev;
   1249	omap_host->power_mode = MMC_POWER_UNDEFINED;
   1250	omap_host->timing = MMC_TIMING_LEGACY;
   1251	omap_host->flags = data->flags;
   1252	omap_host->omap_offset = data->omap_offset;
   1253	omap_host->con = -EINVAL; /* Prevent invalid restore on first resume */
   1254	host->ioaddr += offset;
   1255	host->mapbase = regs->start + offset;
   1256
   1257	mmc = host->mmc;
   1258	sdhci_get_of_property(pdev);
   1259	ret = mmc_of_parse(mmc);
   1260	if (ret)
   1261		goto err_pltfm_free;
   1262
   1263	soc = soc_device_match(sdhci_omap_soc_devices);
   1264	if (soc) {
   1265		omap_host->version = "rev11";
   1266		if (!strcmp(dev_name(dev), "4809c000.mmc"))
   1267			mmc->f_max = 96000000;
   1268		if (!strcmp(dev_name(dev), "480b4000.mmc"))
   1269			mmc->f_max = 48000000;
   1270		if (!strcmp(dev_name(dev), "480ad000.mmc"))
   1271			mmc->f_max = 48000000;
   1272	}
   1273
   1274	if (!mmc_can_gpio_ro(mmc))
   1275		mmc->caps2 |= MMC_CAP2_NO_WRITE_PROTECT;
   1276
   1277	pltfm_host->clk = devm_clk_get(dev, "fck");
   1278	if (IS_ERR(pltfm_host->clk)) {
   1279		ret = PTR_ERR(pltfm_host->clk);
   1280		goto err_pltfm_free;
   1281	}
   1282
   1283	ret = clk_set_rate(pltfm_host->clk, mmc->f_max);
   1284	if (ret) {
   1285		dev_err(dev, "failed to set clock to %d\n", mmc->f_max);
   1286		goto err_pltfm_free;
   1287	}
   1288
   1289	omap_host->pbias = devm_regulator_get_optional(dev, "pbias");
   1290	if (IS_ERR(omap_host->pbias)) {
   1291		ret = PTR_ERR(omap_host->pbias);
   1292		if (ret != -ENODEV)
   1293			goto err_pltfm_free;
   1294		dev_dbg(dev, "unable to get pbias regulator %d\n", ret);
   1295	}
   1296	omap_host->pbias_enabled = false;
   1297
   1298	/*
   1299	 * omap_device_pm_domain has callbacks to enable the main
   1300	 * functional clock, interface clock and also configure the
   1301	 * SYSCONFIG register of omap devices. The callback will be invoked
   1302	 * as part of pm_runtime_get_sync.
   1303	 */
   1304	pm_runtime_use_autosuspend(dev);
   1305	pm_runtime_set_autosuspend_delay(dev, 50);
   1306	pm_runtime_enable(dev);
   1307	ret = pm_runtime_resume_and_get(dev);
   1308	if (ret) {
   1309		dev_err(dev, "pm_runtime_get_sync failed\n");
   1310		goto err_rpm_disable;
   1311	}
   1312
   1313	ret = sdhci_omap_set_capabilities(host);
   1314	if (ret) {
   1315		dev_err(dev, "failed to set system capabilities\n");
   1316		goto err_rpm_put;
   1317	}
   1318
   1319	host->mmc_host_ops.start_signal_voltage_switch =
   1320					sdhci_omap_start_signal_voltage_switch;
   1321	host->mmc_host_ops.set_ios = sdhci_omap_set_ios;
   1322	host->mmc_host_ops.card_busy = sdhci_omap_card_busy;
   1323	host->mmc_host_ops.execute_tuning = sdhci_omap_execute_tuning;
   1324	host->mmc_host_ops.enable_sdio_irq = sdhci_omap_enable_sdio_irq;
   1325
   1326	/*
   1327	 * Switch to external DMA only if there is the "dmas" property and
   1328	 * ADMA is not available on the controller instance.
   1329	 */
   1330	if (device_property_present(dev, "dmas") &&
   1331	    !sdhci_omap_has_adma(omap_host, offset))
   1332		sdhci_switch_external_dma(host, true);
   1333
   1334	if (device_property_read_bool(dev, "ti,non-removable")) {
   1335		dev_warn_once(dev, "using old ti,non-removable property\n");
   1336		mmc->caps |= MMC_CAP_NONREMOVABLE;
   1337	}
   1338
   1339	/* R1B responses is required to properly manage HW busy detection. */
   1340	mmc->caps |= MMC_CAP_NEED_RSP_BUSY;
   1341
   1342	/* Allow card power off and runtime PM for eMMC/SD card devices */
   1343	mmc->caps |= MMC_CAP_POWER_OFF_CARD | MMC_CAP_AGGRESSIVE_PM;
   1344
   1345	ret = sdhci_setup_host(host);
   1346	if (ret)
   1347		goto err_rpm_put;
   1348
   1349	ret = sdhci_omap_config_iodelay_pinctrl_state(omap_host);
   1350	if (ret)
   1351		goto err_cleanup_host;
   1352
   1353	ret = __sdhci_add_host(host);
   1354	if (ret)
   1355		goto err_cleanup_host;
   1356
   1357	/*
   1358	 * SDIO devices can use the dat1 pin as a wake-up interrupt. Some
   1359	 * devices like wl1xxx, use an out-of-band GPIO interrupt instead.
   1360	 */
   1361	omap_host->wakeirq = of_irq_get_byname(dev->of_node, "wakeup");
   1362	if (omap_host->wakeirq == -EPROBE_DEFER) {
   1363		ret = -EPROBE_DEFER;
   1364		goto err_cleanup_host;
   1365	}
   1366	if (omap_host->wakeirq > 0) {
   1367		device_init_wakeup(dev, true);
   1368		ret = dev_pm_set_dedicated_wake_irq(dev, omap_host->wakeirq);
   1369		if (ret) {
   1370			device_init_wakeup(dev, false);
   1371			goto err_cleanup_host;
   1372		}
   1373		host->mmc->pm_caps |= MMC_PM_KEEP_POWER | MMC_PM_WAKE_SDIO_IRQ;
   1374	}
   1375
   1376	pm_runtime_mark_last_busy(dev);
   1377	pm_runtime_put_autosuspend(dev);
   1378
   1379	return 0;
   1380
   1381err_cleanup_host:
   1382	sdhci_cleanup_host(host);
   1383
   1384err_rpm_put:
   1385	pm_runtime_mark_last_busy(dev);
   1386	pm_runtime_put_autosuspend(dev);
   1387err_rpm_disable:
   1388	pm_runtime_dont_use_autosuspend(dev);
   1389	pm_runtime_disable(dev);
   1390
   1391err_pltfm_free:
   1392	sdhci_pltfm_free(pdev);
   1393	return ret;
   1394}
   1395
   1396static int sdhci_omap_remove(struct platform_device *pdev)
   1397{
   1398	struct device *dev = &pdev->dev;
   1399	struct sdhci_host *host = platform_get_drvdata(pdev);
   1400
   1401	pm_runtime_get_sync(dev);
   1402	sdhci_remove_host(host, true);
   1403	device_init_wakeup(dev, false);
   1404	dev_pm_clear_wake_irq(dev);
   1405	pm_runtime_dont_use_autosuspend(dev);
   1406	pm_runtime_put_sync(dev);
   1407	/* Ensure device gets disabled despite userspace sysfs config */
   1408	pm_runtime_force_suspend(dev);
   1409	sdhci_pltfm_free(pdev);
   1410
   1411	return 0;
   1412}
   1413
   1414#ifdef CONFIG_PM
   1415static void __maybe_unused sdhci_omap_context_save(struct sdhci_omap_host *omap_host)
   1416{
   1417	omap_host->con = sdhci_omap_readl(omap_host, SDHCI_OMAP_CON);
   1418	omap_host->hctl = sdhci_omap_readl(omap_host, SDHCI_OMAP_HCTL);
   1419	omap_host->sysctl = sdhci_omap_readl(omap_host, SDHCI_OMAP_SYSCTL);
   1420	omap_host->capa = sdhci_omap_readl(omap_host, SDHCI_OMAP_CAPA);
   1421	omap_host->ie = sdhci_omap_readl(omap_host, SDHCI_OMAP_IE);
   1422	omap_host->ise = sdhci_omap_readl(omap_host, SDHCI_OMAP_ISE);
   1423}
   1424
   1425/* Order matters here, HCTL must be restored in two phases */
   1426static void __maybe_unused sdhci_omap_context_restore(struct sdhci_omap_host *omap_host)
   1427{
   1428	sdhci_omap_writel(omap_host, SDHCI_OMAP_HCTL, omap_host->hctl);
   1429	sdhci_omap_writel(omap_host, SDHCI_OMAP_CAPA, omap_host->capa);
   1430	sdhci_omap_writel(omap_host, SDHCI_OMAP_HCTL, omap_host->hctl);
   1431
   1432	sdhci_omap_writel(omap_host, SDHCI_OMAP_SYSCTL, omap_host->sysctl);
   1433	sdhci_omap_writel(omap_host, SDHCI_OMAP_CON, omap_host->con);
   1434	sdhci_omap_writel(omap_host, SDHCI_OMAP_IE, omap_host->ie);
   1435	sdhci_omap_writel(omap_host, SDHCI_OMAP_ISE, omap_host->ise);
   1436}
   1437
   1438static int __maybe_unused sdhci_omap_runtime_suspend(struct device *dev)
   1439{
   1440	struct sdhci_host *host = dev_get_drvdata(dev);
   1441	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
   1442	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
   1443
   1444	sdhci_runtime_suspend_host(host);
   1445
   1446	sdhci_omap_context_save(omap_host);
   1447
   1448	pinctrl_pm_select_idle_state(dev);
   1449
   1450	return 0;
   1451}
   1452
   1453static int __maybe_unused sdhci_omap_runtime_resume(struct device *dev)
   1454{
   1455	struct sdhci_host *host = dev_get_drvdata(dev);
   1456	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
   1457	struct sdhci_omap_host *omap_host = sdhci_pltfm_priv(pltfm_host);
   1458
   1459	pinctrl_pm_select_default_state(dev);
   1460
   1461	if (omap_host->con != -EINVAL)
   1462		sdhci_omap_context_restore(omap_host);
   1463
   1464	sdhci_runtime_resume_host(host, 0);
   1465
   1466	return 0;
   1467}
   1468#endif
   1469
   1470static const struct dev_pm_ops sdhci_omap_dev_pm_ops = {
   1471	SET_RUNTIME_PM_OPS(sdhci_omap_runtime_suspend,
   1472			   sdhci_omap_runtime_resume, NULL)
   1473	SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
   1474				pm_runtime_force_resume)
   1475};
   1476
   1477static struct platform_driver sdhci_omap_driver = {
   1478	.probe = sdhci_omap_probe,
   1479	.remove = sdhci_omap_remove,
   1480	.driver = {
   1481		   .name = "sdhci-omap",
   1482		   .probe_type = PROBE_PREFER_ASYNCHRONOUS,
   1483		   .pm = &sdhci_omap_dev_pm_ops,
   1484		   .of_match_table = omap_sdhci_match,
   1485		  },
   1486};
   1487
   1488module_platform_driver(sdhci_omap_driver);
   1489
   1490MODULE_DESCRIPTION("SDHCI driver for OMAP SoCs");
   1491MODULE_AUTHOR("Texas Instruments Inc.");
   1492MODULE_LICENSE("GPL v2");
   1493MODULE_ALIAS("platform:sdhci_omap");