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-of-arasan.c (51881B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Arasan Secure Digital Host Controller Interface.
      4 * Copyright (C) 2011 - 2012 Michal Simek <monstr@monstr.eu>
      5 * Copyright (c) 2012 Wind River Systems, Inc.
      6 * Copyright (C) 2013 Pengutronix e.K.
      7 * Copyright (C) 2013 Xilinx Inc.
      8 *
      9 * Based on sdhci-of-esdhc.c
     10 *
     11 * Copyright (c) 2007 Freescale Semiconductor, Inc.
     12 * Copyright (c) 2009 MontaVista Software, Inc.
     13 *
     14 * Authors: Xiaobo Xie <X.Xie@freescale.com>
     15 *	    Anton Vorontsov <avorontsov@ru.mvista.com>
     16 */
     17
     18#include <linux/clk-provider.h>
     19#include <linux/mfd/syscon.h>
     20#include <linux/module.h>
     21#include <linux/of_device.h>
     22#include <linux/phy/phy.h>
     23#include <linux/regmap.h>
     24#include <linux/of.h>
     25#include <linux/firmware/xlnx-zynqmp.h>
     26
     27#include "cqhci.h"
     28#include "sdhci-pltfm.h"
     29
     30#define SDHCI_ARASAN_VENDOR_REGISTER	0x78
     31
     32#define SDHCI_ARASAN_ITAPDLY_REGISTER	0xF0F8
     33#define SDHCI_ARASAN_ITAPDLY_SEL_MASK	0xFF
     34
     35#define SDHCI_ARASAN_OTAPDLY_REGISTER	0xF0FC
     36#define SDHCI_ARASAN_OTAPDLY_SEL_MASK	0x3F
     37
     38#define SDHCI_ARASAN_CQE_BASE_ADDR	0x200
     39#define VENDOR_ENHANCED_STROBE		BIT(0)
     40
     41#define PHY_CLK_TOO_SLOW_HZ		400000
     42
     43#define SDHCI_ITAPDLY_CHGWIN		0x200
     44#define SDHCI_ITAPDLY_ENABLE		0x100
     45#define SDHCI_OTAPDLY_ENABLE		0x40
     46
     47/* Default settings for ZynqMP Clock Phases */
     48#define ZYNQMP_ICLK_PHASE {0, 63, 63, 0, 63,  0,   0, 183, 54,  0, 0}
     49#define ZYNQMP_OCLK_PHASE {0, 72, 60, 0, 60, 72, 135, 48, 72, 135, 0}
     50
     51#define VERSAL_ICLK_PHASE {0, 132, 132, 0, 132, 0, 0, 162, 90, 0, 0}
     52#define VERSAL_OCLK_PHASE {0,  60, 48, 0, 48, 72, 90, 36, 60, 90, 0}
     53
     54/*
     55 * On some SoCs the syscon area has a feature where the upper 16-bits of
     56 * each 32-bit register act as a write mask for the lower 16-bits.  This allows
     57 * atomic updates of the register without locking.  This macro is used on SoCs
     58 * that have that feature.
     59 */
     60#define HIWORD_UPDATE(val, mask, shift) \
     61		((val) << (shift) | (mask) << ((shift) + 16))
     62
     63/**
     64 * struct sdhci_arasan_soc_ctl_field - Field used in sdhci_arasan_soc_ctl_map
     65 *
     66 * @reg:	Offset within the syscon of the register containing this field
     67 * @width:	Number of bits for this field
     68 * @shift:	Bit offset within @reg of this field (or -1 if not avail)
     69 */
     70struct sdhci_arasan_soc_ctl_field {
     71	u32 reg;
     72	u16 width;
     73	s16 shift;
     74};
     75
     76/**
     77 * struct sdhci_arasan_soc_ctl_map - Map in syscon to corecfg registers
     78 *
     79 * @baseclkfreq:	Where to find corecfg_baseclkfreq
     80 * @clockmultiplier:	Where to find corecfg_clockmultiplier
     81 * @support64b:		Where to find SUPPORT64B bit
     82 * @hiword_update:	If true, use HIWORD_UPDATE to access the syscon
     83 *
     84 * It's up to the licensee of the Arsan IP block to make these available
     85 * somewhere if needed.  Presumably these will be scattered somewhere that's
     86 * accessible via the syscon API.
     87 */
     88struct sdhci_arasan_soc_ctl_map {
     89	struct sdhci_arasan_soc_ctl_field	baseclkfreq;
     90	struct sdhci_arasan_soc_ctl_field	clockmultiplier;
     91	struct sdhci_arasan_soc_ctl_field	support64b;
     92	bool					hiword_update;
     93};
     94
     95/**
     96 * struct sdhci_arasan_clk_ops - Clock Operations for Arasan SD controller
     97 *
     98 * @sdcardclk_ops:	The output clock related operations
     99 * @sampleclk_ops:	The sample clock related operations
    100 */
    101struct sdhci_arasan_clk_ops {
    102	const struct clk_ops *sdcardclk_ops;
    103	const struct clk_ops *sampleclk_ops;
    104};
    105
    106/**
    107 * struct sdhci_arasan_clk_data - Arasan Controller Clock Data.
    108 *
    109 * @sdcardclk_hw:	Struct for the clock we might provide to a PHY.
    110 * @sdcardclk:		Pointer to normal 'struct clock' for sdcardclk_hw.
    111 * @sampleclk_hw:	Struct for the clock we might provide to a PHY.
    112 * @sampleclk:		Pointer to normal 'struct clock' for sampleclk_hw.
    113 * @clk_phase_in:	Array of Input Clock Phase Delays for all speed modes
    114 * @clk_phase_out:	Array of Output Clock Phase Delays for all speed modes
    115 * @set_clk_delays:	Function pointer for setting Clock Delays
    116 * @clk_of_data:	Platform specific runtime clock data storage pointer
    117 */
    118struct sdhci_arasan_clk_data {
    119	struct clk_hw	sdcardclk_hw;
    120	struct clk      *sdcardclk;
    121	struct clk_hw	sampleclk_hw;
    122	struct clk      *sampleclk;
    123	int		clk_phase_in[MMC_TIMING_MMC_HS400 + 1];
    124	int		clk_phase_out[MMC_TIMING_MMC_HS400 + 1];
    125	void		(*set_clk_delays)(struct sdhci_host *host);
    126	void		*clk_of_data;
    127};
    128
    129/**
    130 * struct sdhci_arasan_data - Arasan Controller Data
    131 *
    132 * @host:		Pointer to the main SDHCI host structure.
    133 * @clk_ahb:		Pointer to the AHB clock
    134 * @phy:		Pointer to the generic phy
    135 * @is_phy_on:		True if the PHY is on; false if not.
    136 * @has_cqe:		True if controller has command queuing engine.
    137 * @clk_data:		Struct for the Arasan Controller Clock Data.
    138 * @clk_ops:		Struct for the Arasan Controller Clock Operations.
    139 * @soc_ctl_base:	Pointer to regmap for syscon for soc_ctl registers.
    140 * @soc_ctl_map:	Map to get offsets into soc_ctl registers.
    141 * @quirks:		Arasan deviations from spec.
    142 */
    143struct sdhci_arasan_data {
    144	struct sdhci_host *host;
    145	struct clk	*clk_ahb;
    146	struct phy	*phy;
    147	bool		is_phy_on;
    148
    149	bool		has_cqe;
    150	struct sdhci_arasan_clk_data clk_data;
    151	const struct sdhci_arasan_clk_ops *clk_ops;
    152
    153	struct regmap	*soc_ctl_base;
    154	const struct sdhci_arasan_soc_ctl_map *soc_ctl_map;
    155	unsigned int	quirks;
    156
    157/* Controller does not have CD wired and will not function normally without */
    158#define SDHCI_ARASAN_QUIRK_FORCE_CDTEST	BIT(0)
    159/* Controller immediately reports SDHCI_CLOCK_INT_STABLE after enabling the
    160 * internal clock even when the clock isn't stable */
    161#define SDHCI_ARASAN_QUIRK_CLOCK_UNSTABLE BIT(1)
    162/*
    163 * Some of the Arasan variations might not have timing requirements
    164 * met at 25MHz for Default Speed mode, those controllers work at
    165 * 19MHz instead
    166 */
    167#define SDHCI_ARASAN_QUIRK_CLOCK_25_BROKEN BIT(2)
    168};
    169
    170struct sdhci_arasan_of_data {
    171	const struct sdhci_arasan_soc_ctl_map *soc_ctl_map;
    172	const struct sdhci_pltfm_data *pdata;
    173	const struct sdhci_arasan_clk_ops *clk_ops;
    174};
    175
    176static const struct sdhci_arasan_soc_ctl_map rk3399_soc_ctl_map = {
    177	.baseclkfreq = { .reg = 0xf000, .width = 8, .shift = 8 },
    178	.clockmultiplier = { .reg = 0xf02c, .width = 8, .shift = 0},
    179	.hiword_update = true,
    180};
    181
    182static const struct sdhci_arasan_soc_ctl_map intel_lgm_emmc_soc_ctl_map = {
    183	.baseclkfreq = { .reg = 0xa0, .width = 8, .shift = 2 },
    184	.clockmultiplier = { .reg = 0, .width = -1, .shift = -1 },
    185	.hiword_update = false,
    186};
    187
    188static const struct sdhci_arasan_soc_ctl_map intel_lgm_sdxc_soc_ctl_map = {
    189	.baseclkfreq = { .reg = 0x80, .width = 8, .shift = 2 },
    190	.clockmultiplier = { .reg = 0, .width = -1, .shift = -1 },
    191	.hiword_update = false,
    192};
    193
    194static const struct sdhci_arasan_soc_ctl_map thunderbay_soc_ctl_map = {
    195	.baseclkfreq = { .reg = 0x0, .width = 8, .shift = 14 },
    196	.clockmultiplier = { .reg = 0x4, .width = 8, .shift = 14 },
    197	.support64b = { .reg = 0x4, .width = 1, .shift = 24 },
    198	.hiword_update = false,
    199};
    200
    201static const struct sdhci_arasan_soc_ctl_map intel_keembay_soc_ctl_map = {
    202	.baseclkfreq = { .reg = 0x0, .width = 8, .shift = 14 },
    203	.clockmultiplier = { .reg = 0x4, .width = 8, .shift = 14 },
    204	.support64b = { .reg = 0x4, .width = 1, .shift = 24 },
    205	.hiword_update = false,
    206};
    207
    208/**
    209 * sdhci_arasan_syscon_write - Write to a field in soc_ctl registers
    210 *
    211 * @host:	The sdhci_host
    212 * @fld:	The field to write to
    213 * @val:	The value to write
    214 *
    215 * This function allows writing to fields in sdhci_arasan_soc_ctl_map.
    216 * Note that if a field is specified as not available (shift < 0) then
    217 * this function will silently return an error code.  It will be noisy
    218 * and print errors for any other (unexpected) errors.
    219 *
    220 * Return: 0 on success and error value on error
    221 */
    222static int sdhci_arasan_syscon_write(struct sdhci_host *host,
    223				   const struct sdhci_arasan_soc_ctl_field *fld,
    224				   u32 val)
    225{
    226	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    227	struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
    228	struct regmap *soc_ctl_base = sdhci_arasan->soc_ctl_base;
    229	u32 reg = fld->reg;
    230	u16 width = fld->width;
    231	s16 shift = fld->shift;
    232	int ret;
    233
    234	/*
    235	 * Silently return errors for shift < 0 so caller doesn't have
    236	 * to check for fields which are optional.  For fields that
    237	 * are required then caller needs to do something special
    238	 * anyway.
    239	 */
    240	if (shift < 0)
    241		return -EINVAL;
    242
    243	if (sdhci_arasan->soc_ctl_map->hiword_update)
    244		ret = regmap_write(soc_ctl_base, reg,
    245				   HIWORD_UPDATE(val, GENMASK(width, 0),
    246						 shift));
    247	else
    248		ret = regmap_update_bits(soc_ctl_base, reg,
    249					 GENMASK(shift + width, shift),
    250					 val << shift);
    251
    252	/* Yell about (unexpected) regmap errors */
    253	if (ret)
    254		pr_warn("%s: Regmap write fail: %d\n",
    255			 mmc_hostname(host->mmc), ret);
    256
    257	return ret;
    258}
    259
    260static void sdhci_arasan_set_clock(struct sdhci_host *host, unsigned int clock)
    261{
    262	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    263	struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
    264	struct sdhci_arasan_clk_data *clk_data = &sdhci_arasan->clk_data;
    265	bool ctrl_phy = false;
    266
    267	if (!IS_ERR(sdhci_arasan->phy)) {
    268		if (!sdhci_arasan->is_phy_on && clock <= PHY_CLK_TOO_SLOW_HZ) {
    269			/*
    270			 * If PHY off, set clock to max speed and power PHY on.
    271			 *
    272			 * Although PHY docs apparently suggest power cycling
    273			 * when changing the clock the PHY doesn't like to be
    274			 * powered on while at low speeds like those used in ID
    275			 * mode.  Even worse is powering the PHY on while the
    276			 * clock is off.
    277			 *
    278			 * To workaround the PHY limitations, the best we can
    279			 * do is to power it on at a faster speed and then slam
    280			 * through low speeds without power cycling.
    281			 */
    282			sdhci_set_clock(host, host->max_clk);
    283			if (phy_power_on(sdhci_arasan->phy)) {
    284				pr_err("%s: Cannot power on phy.\n",
    285				       mmc_hostname(host->mmc));
    286				return;
    287			}
    288
    289			sdhci_arasan->is_phy_on = true;
    290
    291			/*
    292			 * We'll now fall through to the below case with
    293			 * ctrl_phy = false (so we won't turn off/on).  The
    294			 * sdhci_set_clock() will set the real clock.
    295			 */
    296		} else if (clock > PHY_CLK_TOO_SLOW_HZ) {
    297			/*
    298			 * At higher clock speeds the PHY is fine being power
    299			 * cycled and docs say you _should_ power cycle when
    300			 * changing clock speeds.
    301			 */
    302			ctrl_phy = true;
    303		}
    304	}
    305
    306	if (ctrl_phy && sdhci_arasan->is_phy_on) {
    307		phy_power_off(sdhci_arasan->phy);
    308		sdhci_arasan->is_phy_on = false;
    309	}
    310
    311	if (sdhci_arasan->quirks & SDHCI_ARASAN_QUIRK_CLOCK_25_BROKEN) {
    312		/*
    313		 * Some of the Arasan variations might not have timing
    314		 * requirements met at 25MHz for Default Speed mode,
    315		 * those controllers work at 19MHz instead.
    316		 */
    317		if (clock == DEFAULT_SPEED_MAX_DTR)
    318			clock = (DEFAULT_SPEED_MAX_DTR * 19) / 25;
    319	}
    320
    321	/* Set the Input and Output Clock Phase Delays */
    322	if (clk_data->set_clk_delays)
    323		clk_data->set_clk_delays(host);
    324
    325	sdhci_set_clock(host, clock);
    326
    327	if (sdhci_arasan->quirks & SDHCI_ARASAN_QUIRK_CLOCK_UNSTABLE)
    328		/*
    329		 * Some controllers immediately report SDHCI_CLOCK_INT_STABLE
    330		 * after enabling the clock even though the clock is not
    331		 * stable. Trying to use a clock without waiting here results
    332		 * in EILSEQ while detecting some older/slower cards. The
    333		 * chosen delay is the maximum delay from sdhci_set_clock.
    334		 */
    335		msleep(20);
    336
    337	if (ctrl_phy) {
    338		if (phy_power_on(sdhci_arasan->phy)) {
    339			pr_err("%s: Cannot power on phy.\n",
    340			       mmc_hostname(host->mmc));
    341			return;
    342		}
    343
    344		sdhci_arasan->is_phy_on = true;
    345	}
    346}
    347
    348static void sdhci_arasan_hs400_enhanced_strobe(struct mmc_host *mmc,
    349					struct mmc_ios *ios)
    350{
    351	u32 vendor;
    352	struct sdhci_host *host = mmc_priv(mmc);
    353
    354	vendor = sdhci_readl(host, SDHCI_ARASAN_VENDOR_REGISTER);
    355	if (ios->enhanced_strobe)
    356		vendor |= VENDOR_ENHANCED_STROBE;
    357	else
    358		vendor &= ~VENDOR_ENHANCED_STROBE;
    359
    360	sdhci_writel(host, vendor, SDHCI_ARASAN_VENDOR_REGISTER);
    361}
    362
    363static void sdhci_arasan_reset(struct sdhci_host *host, u8 mask)
    364{
    365	u8 ctrl;
    366	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    367	struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
    368
    369	sdhci_reset(host, mask);
    370
    371	if (sdhci_arasan->quirks & SDHCI_ARASAN_QUIRK_FORCE_CDTEST) {
    372		ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL);
    373		ctrl |= SDHCI_CTRL_CDTEST_INS | SDHCI_CTRL_CDTEST_EN;
    374		sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
    375	}
    376}
    377
    378static int sdhci_arasan_voltage_switch(struct mmc_host *mmc,
    379				       struct mmc_ios *ios)
    380{
    381	switch (ios->signal_voltage) {
    382	case MMC_SIGNAL_VOLTAGE_180:
    383		/*
    384		 * Plese don't switch to 1V8 as arasan,5.1 doesn't
    385		 * actually refer to this setting to indicate the
    386		 * signal voltage and the state machine will be broken
    387		 * actually if we force to enable 1V8. That's something
    388		 * like broken quirk but we could work around here.
    389		 */
    390		return 0;
    391	case MMC_SIGNAL_VOLTAGE_330:
    392	case MMC_SIGNAL_VOLTAGE_120:
    393		/* We don't support 3V3 and 1V2 */
    394		break;
    395	}
    396
    397	return -EINVAL;
    398}
    399
    400static const struct sdhci_ops sdhci_arasan_ops = {
    401	.set_clock = sdhci_arasan_set_clock,
    402	.get_max_clock = sdhci_pltfm_clk_get_max_clock,
    403	.get_timeout_clock = sdhci_pltfm_clk_get_max_clock,
    404	.set_bus_width = sdhci_set_bus_width,
    405	.reset = sdhci_arasan_reset,
    406	.set_uhs_signaling = sdhci_set_uhs_signaling,
    407	.set_power = sdhci_set_power_and_bus_voltage,
    408};
    409
    410static u32 sdhci_arasan_cqhci_irq(struct sdhci_host *host, u32 intmask)
    411{
    412	int cmd_error = 0;
    413	int data_error = 0;
    414
    415	if (!sdhci_cqe_irq(host, intmask, &cmd_error, &data_error))
    416		return intmask;
    417
    418	cqhci_irq(host->mmc, intmask, cmd_error, data_error);
    419
    420	return 0;
    421}
    422
    423static void sdhci_arasan_dumpregs(struct mmc_host *mmc)
    424{
    425	sdhci_dumpregs(mmc_priv(mmc));
    426}
    427
    428static void sdhci_arasan_cqe_enable(struct mmc_host *mmc)
    429{
    430	struct sdhci_host *host = mmc_priv(mmc);
    431	u32 reg;
    432
    433	reg = sdhci_readl(host, SDHCI_PRESENT_STATE);
    434	while (reg & SDHCI_DATA_AVAILABLE) {
    435		sdhci_readl(host, SDHCI_BUFFER);
    436		reg = sdhci_readl(host, SDHCI_PRESENT_STATE);
    437	}
    438
    439	sdhci_cqe_enable(mmc);
    440}
    441
    442static const struct cqhci_host_ops sdhci_arasan_cqhci_ops = {
    443	.enable         = sdhci_arasan_cqe_enable,
    444	.disable        = sdhci_cqe_disable,
    445	.dumpregs       = sdhci_arasan_dumpregs,
    446};
    447
    448static const struct sdhci_ops sdhci_arasan_cqe_ops = {
    449	.set_clock = sdhci_arasan_set_clock,
    450	.get_max_clock = sdhci_pltfm_clk_get_max_clock,
    451	.get_timeout_clock = sdhci_pltfm_clk_get_max_clock,
    452	.set_bus_width = sdhci_set_bus_width,
    453	.reset = sdhci_arasan_reset,
    454	.set_uhs_signaling = sdhci_set_uhs_signaling,
    455	.set_power = sdhci_set_power_and_bus_voltage,
    456	.irq = sdhci_arasan_cqhci_irq,
    457};
    458
    459static const struct sdhci_pltfm_data sdhci_arasan_cqe_pdata = {
    460	.ops = &sdhci_arasan_cqe_ops,
    461	.quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN,
    462	.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
    463			SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN,
    464};
    465
    466static const struct sdhci_pltfm_data sdhci_arasan_thunderbay_pdata = {
    467	.ops = &sdhci_arasan_cqe_ops,
    468	.quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
    469	.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
    470		SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN |
    471		SDHCI_QUIRK2_STOP_WITH_TC |
    472		SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400,
    473};
    474
    475#ifdef CONFIG_PM_SLEEP
    476/**
    477 * sdhci_arasan_suspend - Suspend method for the driver
    478 * @dev:	Address of the device structure
    479 *
    480 * Put the device in a low power state.
    481 *
    482 * Return: 0 on success and error value on error
    483 */
    484static int sdhci_arasan_suspend(struct device *dev)
    485{
    486	struct sdhci_host *host = dev_get_drvdata(dev);
    487	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    488	struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
    489	int ret;
    490
    491	if (host->tuning_mode != SDHCI_TUNING_MODE_3)
    492		mmc_retune_needed(host->mmc);
    493
    494	if (sdhci_arasan->has_cqe) {
    495		ret = cqhci_suspend(host->mmc);
    496		if (ret)
    497			return ret;
    498	}
    499
    500	ret = sdhci_suspend_host(host);
    501	if (ret)
    502		return ret;
    503
    504	if (!IS_ERR(sdhci_arasan->phy) && sdhci_arasan->is_phy_on) {
    505		ret = phy_power_off(sdhci_arasan->phy);
    506		if (ret) {
    507			dev_err(dev, "Cannot power off phy.\n");
    508			if (sdhci_resume_host(host))
    509				dev_err(dev, "Cannot resume host.\n");
    510
    511			return ret;
    512		}
    513		sdhci_arasan->is_phy_on = false;
    514	}
    515
    516	clk_disable(pltfm_host->clk);
    517	clk_disable(sdhci_arasan->clk_ahb);
    518
    519	return 0;
    520}
    521
    522/**
    523 * sdhci_arasan_resume - Resume method for the driver
    524 * @dev:	Address of the device structure
    525 *
    526 * Resume operation after suspend
    527 *
    528 * Return: 0 on success and error value on error
    529 */
    530static int sdhci_arasan_resume(struct device *dev)
    531{
    532	struct sdhci_host *host = dev_get_drvdata(dev);
    533	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    534	struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
    535	int ret;
    536
    537	ret = clk_enable(sdhci_arasan->clk_ahb);
    538	if (ret) {
    539		dev_err(dev, "Cannot enable AHB clock.\n");
    540		return ret;
    541	}
    542
    543	ret = clk_enable(pltfm_host->clk);
    544	if (ret) {
    545		dev_err(dev, "Cannot enable SD clock.\n");
    546		return ret;
    547	}
    548
    549	if (!IS_ERR(sdhci_arasan->phy) && host->mmc->actual_clock) {
    550		ret = phy_power_on(sdhci_arasan->phy);
    551		if (ret) {
    552			dev_err(dev, "Cannot power on phy.\n");
    553			return ret;
    554		}
    555		sdhci_arasan->is_phy_on = true;
    556	}
    557
    558	ret = sdhci_resume_host(host);
    559	if (ret) {
    560		dev_err(dev, "Cannot resume host.\n");
    561		return ret;
    562	}
    563
    564	if (sdhci_arasan->has_cqe)
    565		return cqhci_resume(host->mmc);
    566
    567	return 0;
    568}
    569#endif /* ! CONFIG_PM_SLEEP */
    570
    571static SIMPLE_DEV_PM_OPS(sdhci_arasan_dev_pm_ops, sdhci_arasan_suspend,
    572			 sdhci_arasan_resume);
    573
    574/**
    575 * sdhci_arasan_sdcardclk_recalc_rate - Return the card clock rate
    576 *
    577 * @hw:			Pointer to the hardware clock structure.
    578 * @parent_rate:		The parent rate (should be rate of clk_xin).
    579 *
    580 * Return the current actual rate of the SD card clock.  This can be used
    581 * to communicate with out PHY.
    582 *
    583 * Return: The card clock rate.
    584 */
    585static unsigned long sdhci_arasan_sdcardclk_recalc_rate(struct clk_hw *hw,
    586						      unsigned long parent_rate)
    587{
    588	struct sdhci_arasan_clk_data *clk_data =
    589		container_of(hw, struct sdhci_arasan_clk_data, sdcardclk_hw);
    590	struct sdhci_arasan_data *sdhci_arasan =
    591		container_of(clk_data, struct sdhci_arasan_data, clk_data);
    592	struct sdhci_host *host = sdhci_arasan->host;
    593
    594	return host->mmc->actual_clock;
    595}
    596
    597static const struct clk_ops arasan_sdcardclk_ops = {
    598	.recalc_rate = sdhci_arasan_sdcardclk_recalc_rate,
    599};
    600
    601/**
    602 * sdhci_arasan_sampleclk_recalc_rate - Return the sampling clock rate
    603 *
    604 * @hw:			Pointer to the hardware clock structure.
    605 * @parent_rate:		The parent rate (should be rate of clk_xin).
    606 *
    607 * Return the current actual rate of the sampling clock.  This can be used
    608 * to communicate with out PHY.
    609 *
    610 * Return: The sample clock rate.
    611 */
    612static unsigned long sdhci_arasan_sampleclk_recalc_rate(struct clk_hw *hw,
    613						      unsigned long parent_rate)
    614{
    615	struct sdhci_arasan_clk_data *clk_data =
    616		container_of(hw, struct sdhci_arasan_clk_data, sampleclk_hw);
    617	struct sdhci_arasan_data *sdhci_arasan =
    618		container_of(clk_data, struct sdhci_arasan_data, clk_data);
    619	struct sdhci_host *host = sdhci_arasan->host;
    620
    621	return host->mmc->actual_clock;
    622}
    623
    624static const struct clk_ops arasan_sampleclk_ops = {
    625	.recalc_rate = sdhci_arasan_sampleclk_recalc_rate,
    626};
    627
    628/**
    629 * sdhci_zynqmp_sdcardclk_set_phase - Set the SD Output Clock Tap Delays
    630 *
    631 * @hw:			Pointer to the hardware clock structure.
    632 * @degrees:		The clock phase shift between 0 - 359.
    633 *
    634 * Set the SD Output Clock Tap Delays for Output path
    635 *
    636 * Return: 0 on success and error value on error
    637 */
    638static int sdhci_zynqmp_sdcardclk_set_phase(struct clk_hw *hw, int degrees)
    639{
    640	struct sdhci_arasan_clk_data *clk_data =
    641		container_of(hw, struct sdhci_arasan_clk_data, sdcardclk_hw);
    642	struct sdhci_arasan_data *sdhci_arasan =
    643		container_of(clk_data, struct sdhci_arasan_data, clk_data);
    644	struct sdhci_host *host = sdhci_arasan->host;
    645	const char *clk_name = clk_hw_get_name(hw);
    646	u32 node_id = !strcmp(clk_name, "clk_out_sd0") ? NODE_SD_0 : NODE_SD_1;
    647	u8 tap_delay, tap_max = 0;
    648	int ret;
    649
    650	/* This is applicable for SDHCI_SPEC_300 and above */
    651	if (host->version < SDHCI_SPEC_300)
    652		return 0;
    653
    654	switch (host->timing) {
    655	case MMC_TIMING_MMC_HS:
    656	case MMC_TIMING_SD_HS:
    657	case MMC_TIMING_UHS_SDR25:
    658	case MMC_TIMING_UHS_DDR50:
    659	case MMC_TIMING_MMC_DDR52:
    660		/* For 50MHz clock, 30 Taps are available */
    661		tap_max = 30;
    662		break;
    663	case MMC_TIMING_UHS_SDR50:
    664		/* For 100MHz clock, 15 Taps are available */
    665		tap_max = 15;
    666		break;
    667	case MMC_TIMING_UHS_SDR104:
    668	case MMC_TIMING_MMC_HS200:
    669		/* For 200MHz clock, 8 Taps are available */
    670		tap_max = 8;
    671		break;
    672	default:
    673		break;
    674	}
    675
    676	tap_delay = (degrees * tap_max) / 360;
    677
    678	/* Set the Clock Phase */
    679	ret = zynqmp_pm_set_sd_tapdelay(node_id, PM_TAPDELAY_OUTPUT, tap_delay);
    680	if (ret)
    681		pr_err("Error setting Output Tap Delay\n");
    682
    683	/* Release DLL Reset */
    684	zynqmp_pm_sd_dll_reset(node_id, PM_DLL_RESET_RELEASE);
    685
    686	return ret;
    687}
    688
    689static const struct clk_ops zynqmp_sdcardclk_ops = {
    690	.recalc_rate = sdhci_arasan_sdcardclk_recalc_rate,
    691	.set_phase = sdhci_zynqmp_sdcardclk_set_phase,
    692};
    693
    694/**
    695 * sdhci_zynqmp_sampleclk_set_phase - Set the SD Input Clock Tap Delays
    696 *
    697 * @hw:			Pointer to the hardware clock structure.
    698 * @degrees:		The clock phase shift between 0 - 359.
    699 *
    700 * Set the SD Input Clock Tap Delays for Input path
    701 *
    702 * Return: 0 on success and error value on error
    703 */
    704static int sdhci_zynqmp_sampleclk_set_phase(struct clk_hw *hw, int degrees)
    705{
    706	struct sdhci_arasan_clk_data *clk_data =
    707		container_of(hw, struct sdhci_arasan_clk_data, sampleclk_hw);
    708	struct sdhci_arasan_data *sdhci_arasan =
    709		container_of(clk_data, struct sdhci_arasan_data, clk_data);
    710	struct sdhci_host *host = sdhci_arasan->host;
    711	const char *clk_name = clk_hw_get_name(hw);
    712	u32 node_id = !strcmp(clk_name, "clk_in_sd0") ? NODE_SD_0 : NODE_SD_1;
    713	u8 tap_delay, tap_max = 0;
    714	int ret;
    715
    716	/* This is applicable for SDHCI_SPEC_300 and above */
    717	if (host->version < SDHCI_SPEC_300)
    718		return 0;
    719
    720	/* Assert DLL Reset */
    721	zynqmp_pm_sd_dll_reset(node_id, PM_DLL_RESET_ASSERT);
    722
    723	switch (host->timing) {
    724	case MMC_TIMING_MMC_HS:
    725	case MMC_TIMING_SD_HS:
    726	case MMC_TIMING_UHS_SDR25:
    727	case MMC_TIMING_UHS_DDR50:
    728	case MMC_TIMING_MMC_DDR52:
    729		/* For 50MHz clock, 120 Taps are available */
    730		tap_max = 120;
    731		break;
    732	case MMC_TIMING_UHS_SDR50:
    733		/* For 100MHz clock, 60 Taps are available */
    734		tap_max = 60;
    735		break;
    736	case MMC_TIMING_UHS_SDR104:
    737	case MMC_TIMING_MMC_HS200:
    738		/* For 200MHz clock, 30 Taps are available */
    739		tap_max = 30;
    740		break;
    741	default:
    742		break;
    743	}
    744
    745	tap_delay = (degrees * tap_max) / 360;
    746
    747	/* Set the Clock Phase */
    748	ret = zynqmp_pm_set_sd_tapdelay(node_id, PM_TAPDELAY_INPUT, tap_delay);
    749	if (ret)
    750		pr_err("Error setting Input Tap Delay\n");
    751
    752	return ret;
    753}
    754
    755static const struct clk_ops zynqmp_sampleclk_ops = {
    756	.recalc_rate = sdhci_arasan_sampleclk_recalc_rate,
    757	.set_phase = sdhci_zynqmp_sampleclk_set_phase,
    758};
    759
    760/**
    761 * sdhci_versal_sdcardclk_set_phase - Set the SD Output Clock Tap Delays
    762 *
    763 * @hw:			Pointer to the hardware clock structure.
    764 * @degrees:		The clock phase shift between 0 - 359.
    765 *
    766 * Set the SD Output Clock Tap Delays for Output path
    767 *
    768 * Return: 0 on success and error value on error
    769 */
    770static int sdhci_versal_sdcardclk_set_phase(struct clk_hw *hw, int degrees)
    771{
    772	struct sdhci_arasan_clk_data *clk_data =
    773		container_of(hw, struct sdhci_arasan_clk_data, sdcardclk_hw);
    774	struct sdhci_arasan_data *sdhci_arasan =
    775		container_of(clk_data, struct sdhci_arasan_data, clk_data);
    776	struct sdhci_host *host = sdhci_arasan->host;
    777	u8 tap_delay, tap_max = 0;
    778
    779	/* This is applicable for SDHCI_SPEC_300 and above */
    780	if (host->version < SDHCI_SPEC_300)
    781		return 0;
    782
    783	switch (host->timing) {
    784	case MMC_TIMING_MMC_HS:
    785	case MMC_TIMING_SD_HS:
    786	case MMC_TIMING_UHS_SDR25:
    787	case MMC_TIMING_UHS_DDR50:
    788	case MMC_TIMING_MMC_DDR52:
    789		/* For 50MHz clock, 30 Taps are available */
    790		tap_max = 30;
    791		break;
    792	case MMC_TIMING_UHS_SDR50:
    793		/* For 100MHz clock, 15 Taps are available */
    794		tap_max = 15;
    795		break;
    796	case MMC_TIMING_UHS_SDR104:
    797	case MMC_TIMING_MMC_HS200:
    798		/* For 200MHz clock, 8 Taps are available */
    799		tap_max = 8;
    800		break;
    801	default:
    802		break;
    803	}
    804
    805	tap_delay = (degrees * tap_max) / 360;
    806
    807	/* Set the Clock Phase */
    808	if (tap_delay) {
    809		u32 regval;
    810
    811		regval = sdhci_readl(host, SDHCI_ARASAN_OTAPDLY_REGISTER);
    812		regval |= SDHCI_OTAPDLY_ENABLE;
    813		sdhci_writel(host, regval, SDHCI_ARASAN_OTAPDLY_REGISTER);
    814		regval &= ~SDHCI_ARASAN_OTAPDLY_SEL_MASK;
    815		regval |= tap_delay;
    816		sdhci_writel(host, regval, SDHCI_ARASAN_OTAPDLY_REGISTER);
    817	}
    818
    819	return 0;
    820}
    821
    822static const struct clk_ops versal_sdcardclk_ops = {
    823	.recalc_rate = sdhci_arasan_sdcardclk_recalc_rate,
    824	.set_phase = sdhci_versal_sdcardclk_set_phase,
    825};
    826
    827/**
    828 * sdhci_versal_sampleclk_set_phase - Set the SD Input Clock Tap Delays
    829 *
    830 * @hw:			Pointer to the hardware clock structure.
    831 * @degrees:		The clock phase shift between 0 - 359.
    832 *
    833 * Set the SD Input Clock Tap Delays for Input path
    834 *
    835 * Return: 0 on success and error value on error
    836 */
    837static int sdhci_versal_sampleclk_set_phase(struct clk_hw *hw, int degrees)
    838{
    839	struct sdhci_arasan_clk_data *clk_data =
    840		container_of(hw, struct sdhci_arasan_clk_data, sampleclk_hw);
    841	struct sdhci_arasan_data *sdhci_arasan =
    842		container_of(clk_data, struct sdhci_arasan_data, clk_data);
    843	struct sdhci_host *host = sdhci_arasan->host;
    844	u8 tap_delay, tap_max = 0;
    845
    846	/* This is applicable for SDHCI_SPEC_300 and above */
    847	if (host->version < SDHCI_SPEC_300)
    848		return 0;
    849
    850	switch (host->timing) {
    851	case MMC_TIMING_MMC_HS:
    852	case MMC_TIMING_SD_HS:
    853	case MMC_TIMING_UHS_SDR25:
    854	case MMC_TIMING_UHS_DDR50:
    855	case MMC_TIMING_MMC_DDR52:
    856		/* For 50MHz clock, 120 Taps are available */
    857		tap_max = 120;
    858		break;
    859	case MMC_TIMING_UHS_SDR50:
    860		/* For 100MHz clock, 60 Taps are available */
    861		tap_max = 60;
    862		break;
    863	case MMC_TIMING_UHS_SDR104:
    864	case MMC_TIMING_MMC_HS200:
    865		/* For 200MHz clock, 30 Taps are available */
    866		tap_max = 30;
    867		break;
    868	default:
    869		break;
    870	}
    871
    872	tap_delay = (degrees * tap_max) / 360;
    873
    874	/* Set the Clock Phase */
    875	if (tap_delay) {
    876		u32 regval;
    877
    878		regval = sdhci_readl(host, SDHCI_ARASAN_ITAPDLY_REGISTER);
    879		regval |= SDHCI_ITAPDLY_CHGWIN;
    880		sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER);
    881		regval |= SDHCI_ITAPDLY_ENABLE;
    882		sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER);
    883		regval &= ~SDHCI_ARASAN_ITAPDLY_SEL_MASK;
    884		regval |= tap_delay;
    885		sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER);
    886		regval &= ~SDHCI_ITAPDLY_CHGWIN;
    887		sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER);
    888	}
    889
    890	return 0;
    891}
    892
    893static const struct clk_ops versal_sampleclk_ops = {
    894	.recalc_rate = sdhci_arasan_sampleclk_recalc_rate,
    895	.set_phase = sdhci_versal_sampleclk_set_phase,
    896};
    897
    898static void arasan_zynqmp_dll_reset(struct sdhci_host *host, u32 deviceid)
    899{
    900	u16 clk;
    901
    902	clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
    903	clk &= ~(SDHCI_CLOCK_CARD_EN | SDHCI_CLOCK_INT_EN);
    904	sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
    905
    906	/* Issue DLL Reset */
    907	zynqmp_pm_sd_dll_reset(deviceid, PM_DLL_RESET_PULSE);
    908
    909	clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
    910
    911	sdhci_enable_clk(host, clk);
    912}
    913
    914static int arasan_zynqmp_execute_tuning(struct mmc_host *mmc, u32 opcode)
    915{
    916	struct sdhci_host *host = mmc_priv(mmc);
    917	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    918	struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
    919	struct clk_hw *hw = &sdhci_arasan->clk_data.sdcardclk_hw;
    920	const char *clk_name = clk_hw_get_name(hw);
    921	u32 device_id = !strcmp(clk_name, "clk_out_sd0") ? NODE_SD_0 :
    922							   NODE_SD_1;
    923	int err;
    924
    925	/* ZynqMP SD controller does not perform auto tuning in DDR50 mode */
    926	if (mmc->ios.timing == MMC_TIMING_UHS_DDR50)
    927		return 0;
    928
    929	arasan_zynqmp_dll_reset(host, device_id);
    930
    931	err = sdhci_execute_tuning(mmc, opcode);
    932	if (err)
    933		return err;
    934
    935	arasan_zynqmp_dll_reset(host, device_id);
    936
    937	return 0;
    938}
    939
    940/**
    941 * sdhci_arasan_update_clockmultiplier - Set corecfg_clockmultiplier
    942 *
    943 * @host:		The sdhci_host
    944 * @value:		The value to write
    945 *
    946 * The corecfg_clockmultiplier is supposed to contain clock multiplier
    947 * value of programmable clock generator.
    948 *
    949 * NOTES:
    950 * - Many existing devices don't seem to do this and work fine.  To keep
    951 *   compatibility for old hardware where the device tree doesn't provide a
    952 *   register map, this function is a noop if a soc_ctl_map hasn't been provided
    953 *   for this platform.
    954 * - The value of corecfg_clockmultiplier should sync with that of corresponding
    955 *   value reading from sdhci_capability_register. So this function is called
    956 *   once at probe time and never called again.
    957 */
    958static void sdhci_arasan_update_clockmultiplier(struct sdhci_host *host,
    959						u32 value)
    960{
    961	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
    962	struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
    963	const struct sdhci_arasan_soc_ctl_map *soc_ctl_map =
    964		sdhci_arasan->soc_ctl_map;
    965
    966	/* Having a map is optional */
    967	if (!soc_ctl_map)
    968		return;
    969
    970	/* If we have a map, we expect to have a syscon */
    971	if (!sdhci_arasan->soc_ctl_base) {
    972		pr_warn("%s: Have regmap, but no soc-ctl-syscon\n",
    973			mmc_hostname(host->mmc));
    974		return;
    975	}
    976
    977	sdhci_arasan_syscon_write(host, &soc_ctl_map->clockmultiplier, value);
    978}
    979
    980/**
    981 * sdhci_arasan_update_baseclkfreq - Set corecfg_baseclkfreq
    982 *
    983 * @host:		The sdhci_host
    984 *
    985 * The corecfg_baseclkfreq is supposed to contain the MHz of clk_xin.  This
    986 * function can be used to make that happen.
    987 *
    988 * NOTES:
    989 * - Many existing devices don't seem to do this and work fine.  To keep
    990 *   compatibility for old hardware where the device tree doesn't provide a
    991 *   register map, this function is a noop if a soc_ctl_map hasn't been provided
    992 *   for this platform.
    993 * - It's assumed that clk_xin is not dynamic and that we use the SDHCI divider
    994 *   to achieve lower clock rates.  That means that this function is called once
    995 *   at probe time and never called again.
    996 */
    997static void sdhci_arasan_update_baseclkfreq(struct sdhci_host *host)
    998{
    999	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
   1000	struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
   1001	const struct sdhci_arasan_soc_ctl_map *soc_ctl_map =
   1002		sdhci_arasan->soc_ctl_map;
   1003	u32 mhz = DIV_ROUND_CLOSEST_ULL(clk_get_rate(pltfm_host->clk), 1000000);
   1004
   1005	/* Having a map is optional */
   1006	if (!soc_ctl_map)
   1007		return;
   1008
   1009	/* If we have a map, we expect to have a syscon */
   1010	if (!sdhci_arasan->soc_ctl_base) {
   1011		pr_warn("%s: Have regmap, but no soc-ctl-syscon\n",
   1012			mmc_hostname(host->mmc));
   1013		return;
   1014	}
   1015
   1016	sdhci_arasan_syscon_write(host, &soc_ctl_map->baseclkfreq, mhz);
   1017}
   1018
   1019static void sdhci_arasan_set_clk_delays(struct sdhci_host *host)
   1020{
   1021	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
   1022	struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
   1023	struct sdhci_arasan_clk_data *clk_data = &sdhci_arasan->clk_data;
   1024
   1025	clk_set_phase(clk_data->sampleclk,
   1026		      clk_data->clk_phase_in[host->timing]);
   1027	clk_set_phase(clk_data->sdcardclk,
   1028		      clk_data->clk_phase_out[host->timing]);
   1029}
   1030
   1031static void arasan_dt_read_clk_phase(struct device *dev,
   1032				     struct sdhci_arasan_clk_data *clk_data,
   1033				     unsigned int timing, const char *prop)
   1034{
   1035	struct device_node *np = dev->of_node;
   1036
   1037	u32 clk_phase[2] = {0};
   1038	int ret;
   1039
   1040	/*
   1041	 * Read Tap Delay values from DT, if the DT does not contain the
   1042	 * Tap Values then use the pre-defined values.
   1043	 */
   1044	ret = of_property_read_variable_u32_array(np, prop, &clk_phase[0],
   1045						  2, 0);
   1046	if (ret < 0) {
   1047		dev_dbg(dev, "Using predefined clock phase for %s = %d %d\n",
   1048			prop, clk_data->clk_phase_in[timing],
   1049			clk_data->clk_phase_out[timing]);
   1050		return;
   1051	}
   1052
   1053	/* The values read are Input and Output Clock Delays in order */
   1054	clk_data->clk_phase_in[timing] = clk_phase[0];
   1055	clk_data->clk_phase_out[timing] = clk_phase[1];
   1056}
   1057
   1058/**
   1059 * arasan_dt_parse_clk_phases - Read Clock Delay values from DT
   1060 *
   1061 * @dev:		Pointer to our struct device.
   1062 * @clk_data:		Pointer to the Clock Data structure
   1063 *
   1064 * Called at initialization to parse the values of Clock Delays.
   1065 */
   1066static void arasan_dt_parse_clk_phases(struct device *dev,
   1067				       struct sdhci_arasan_clk_data *clk_data)
   1068{
   1069	u32 mio_bank = 0;
   1070	int i;
   1071
   1072	/*
   1073	 * This has been kept as a pointer and is assigned a function here.
   1074	 * So that different controller variants can assign their own handling
   1075	 * function.
   1076	 */
   1077	clk_data->set_clk_delays = sdhci_arasan_set_clk_delays;
   1078
   1079	if (of_device_is_compatible(dev->of_node, "xlnx,zynqmp-8.9a")) {
   1080		u32 zynqmp_iclk_phase[MMC_TIMING_MMC_HS400 + 1] =
   1081			ZYNQMP_ICLK_PHASE;
   1082		u32 zynqmp_oclk_phase[MMC_TIMING_MMC_HS400 + 1] =
   1083			ZYNQMP_OCLK_PHASE;
   1084
   1085		of_property_read_u32(dev->of_node, "xlnx,mio-bank", &mio_bank);
   1086		if (mio_bank == 2) {
   1087			zynqmp_oclk_phase[MMC_TIMING_UHS_SDR104] = 90;
   1088			zynqmp_oclk_phase[MMC_TIMING_MMC_HS200] = 90;
   1089		}
   1090
   1091		for (i = 0; i <= MMC_TIMING_MMC_HS400; i++) {
   1092			clk_data->clk_phase_in[i] = zynqmp_iclk_phase[i];
   1093			clk_data->clk_phase_out[i] = zynqmp_oclk_phase[i];
   1094		}
   1095	}
   1096
   1097	if (of_device_is_compatible(dev->of_node, "xlnx,versal-8.9a")) {
   1098		u32 versal_iclk_phase[MMC_TIMING_MMC_HS400 + 1] =
   1099			VERSAL_ICLK_PHASE;
   1100		u32 versal_oclk_phase[MMC_TIMING_MMC_HS400 + 1] =
   1101			VERSAL_OCLK_PHASE;
   1102
   1103		for (i = 0; i <= MMC_TIMING_MMC_HS400; i++) {
   1104			clk_data->clk_phase_in[i] = versal_iclk_phase[i];
   1105			clk_data->clk_phase_out[i] = versal_oclk_phase[i];
   1106		}
   1107	}
   1108
   1109	arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_LEGACY,
   1110				 "clk-phase-legacy");
   1111	arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_MMC_HS,
   1112				 "clk-phase-mmc-hs");
   1113	arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_SD_HS,
   1114				 "clk-phase-sd-hs");
   1115	arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_UHS_SDR12,
   1116				 "clk-phase-uhs-sdr12");
   1117	arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_UHS_SDR25,
   1118				 "clk-phase-uhs-sdr25");
   1119	arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_UHS_SDR50,
   1120				 "clk-phase-uhs-sdr50");
   1121	arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_UHS_SDR104,
   1122				 "clk-phase-uhs-sdr104");
   1123	arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_UHS_DDR50,
   1124				 "clk-phase-uhs-ddr50");
   1125	arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_MMC_DDR52,
   1126				 "clk-phase-mmc-ddr52");
   1127	arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_MMC_HS200,
   1128				 "clk-phase-mmc-hs200");
   1129	arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_MMC_HS400,
   1130				 "clk-phase-mmc-hs400");
   1131}
   1132
   1133static const struct sdhci_pltfm_data sdhci_arasan_pdata = {
   1134	.ops = &sdhci_arasan_ops,
   1135	.quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN,
   1136	.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
   1137			SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN |
   1138			SDHCI_QUIRK2_STOP_WITH_TC,
   1139};
   1140
   1141static const struct sdhci_arasan_clk_ops arasan_clk_ops = {
   1142	.sdcardclk_ops = &arasan_sdcardclk_ops,
   1143	.sampleclk_ops = &arasan_sampleclk_ops,
   1144};
   1145
   1146static struct sdhci_arasan_of_data sdhci_arasan_generic_data = {
   1147	.pdata = &sdhci_arasan_pdata,
   1148	.clk_ops = &arasan_clk_ops,
   1149};
   1150
   1151static const struct sdhci_arasan_of_data sdhci_arasan_thunderbay_data = {
   1152	.soc_ctl_map = &thunderbay_soc_ctl_map,
   1153	.pdata = &sdhci_arasan_thunderbay_pdata,
   1154	.clk_ops = &arasan_clk_ops,
   1155};
   1156
   1157static const struct sdhci_pltfm_data sdhci_keembay_emmc_pdata = {
   1158	.ops = &sdhci_arasan_cqe_ops,
   1159	.quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN |
   1160		SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC |
   1161		SDHCI_QUIRK_NO_LED |
   1162		SDHCI_QUIRK_32BIT_DMA_ADDR |
   1163		SDHCI_QUIRK_32BIT_DMA_SIZE |
   1164		SDHCI_QUIRK_32BIT_ADMA_SIZE,
   1165	.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
   1166		SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN |
   1167		SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 |
   1168		SDHCI_QUIRK2_STOP_WITH_TC |
   1169		SDHCI_QUIRK2_BROKEN_64_BIT_DMA,
   1170};
   1171
   1172static const struct sdhci_pltfm_data sdhci_keembay_sd_pdata = {
   1173	.ops = &sdhci_arasan_ops,
   1174	.quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN |
   1175		SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC |
   1176		SDHCI_QUIRK_NO_LED |
   1177		SDHCI_QUIRK_32BIT_DMA_ADDR |
   1178		SDHCI_QUIRK_32BIT_DMA_SIZE |
   1179		SDHCI_QUIRK_32BIT_ADMA_SIZE,
   1180	.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
   1181		SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN |
   1182		SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON |
   1183		SDHCI_QUIRK2_STOP_WITH_TC |
   1184		SDHCI_QUIRK2_BROKEN_64_BIT_DMA,
   1185};
   1186
   1187static const struct sdhci_pltfm_data sdhci_keembay_sdio_pdata = {
   1188	.ops = &sdhci_arasan_ops,
   1189	.quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN |
   1190		SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC |
   1191		SDHCI_QUIRK_NO_LED |
   1192		SDHCI_QUIRK_32BIT_DMA_ADDR |
   1193		SDHCI_QUIRK_32BIT_DMA_SIZE |
   1194		SDHCI_QUIRK_32BIT_ADMA_SIZE,
   1195	.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
   1196		SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN |
   1197		SDHCI_QUIRK2_HOST_OFF_CARD_ON |
   1198		SDHCI_QUIRK2_BROKEN_64_BIT_DMA,
   1199};
   1200
   1201static struct sdhci_arasan_of_data sdhci_arasan_rk3399_data = {
   1202	.soc_ctl_map = &rk3399_soc_ctl_map,
   1203	.pdata = &sdhci_arasan_cqe_pdata,
   1204	.clk_ops = &arasan_clk_ops,
   1205};
   1206
   1207static struct sdhci_arasan_of_data intel_lgm_emmc_data = {
   1208	.soc_ctl_map = &intel_lgm_emmc_soc_ctl_map,
   1209	.pdata = &sdhci_arasan_cqe_pdata,
   1210	.clk_ops = &arasan_clk_ops,
   1211};
   1212
   1213static struct sdhci_arasan_of_data intel_lgm_sdxc_data = {
   1214	.soc_ctl_map = &intel_lgm_sdxc_soc_ctl_map,
   1215	.pdata = &sdhci_arasan_cqe_pdata,
   1216	.clk_ops = &arasan_clk_ops,
   1217};
   1218
   1219static const struct sdhci_pltfm_data sdhci_arasan_zynqmp_pdata = {
   1220	.ops = &sdhci_arasan_ops,
   1221	.quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN |
   1222			SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN |
   1223			SDHCI_QUIRK2_STOP_WITH_TC,
   1224};
   1225
   1226static const struct sdhci_arasan_clk_ops zynqmp_clk_ops = {
   1227	.sdcardclk_ops = &zynqmp_sdcardclk_ops,
   1228	.sampleclk_ops = &zynqmp_sampleclk_ops,
   1229};
   1230
   1231static struct sdhci_arasan_of_data sdhci_arasan_zynqmp_data = {
   1232	.pdata = &sdhci_arasan_zynqmp_pdata,
   1233	.clk_ops = &zynqmp_clk_ops,
   1234};
   1235
   1236static const struct sdhci_arasan_clk_ops versal_clk_ops = {
   1237	.sdcardclk_ops = &versal_sdcardclk_ops,
   1238	.sampleclk_ops = &versal_sampleclk_ops,
   1239};
   1240
   1241static struct sdhci_arasan_of_data sdhci_arasan_versal_data = {
   1242	.pdata = &sdhci_arasan_zynqmp_pdata,
   1243	.clk_ops = &versal_clk_ops,
   1244};
   1245
   1246static struct sdhci_arasan_of_data intel_keembay_emmc_data = {
   1247	.soc_ctl_map = &intel_keembay_soc_ctl_map,
   1248	.pdata = &sdhci_keembay_emmc_pdata,
   1249	.clk_ops = &arasan_clk_ops,
   1250};
   1251
   1252static struct sdhci_arasan_of_data intel_keembay_sd_data = {
   1253	.soc_ctl_map = &intel_keembay_soc_ctl_map,
   1254	.pdata = &sdhci_keembay_sd_pdata,
   1255	.clk_ops = &arasan_clk_ops,
   1256};
   1257
   1258static struct sdhci_arasan_of_data intel_keembay_sdio_data = {
   1259	.soc_ctl_map = &intel_keembay_soc_ctl_map,
   1260	.pdata = &sdhci_keembay_sdio_pdata,
   1261	.clk_ops = &arasan_clk_ops,
   1262};
   1263
   1264static const struct of_device_id sdhci_arasan_of_match[] = {
   1265	/* SoC-specific compatible strings w/ soc_ctl_map */
   1266	{
   1267		.compatible = "rockchip,rk3399-sdhci-5.1",
   1268		.data = &sdhci_arasan_rk3399_data,
   1269	},
   1270	{
   1271		.compatible = "intel,lgm-sdhci-5.1-emmc",
   1272		.data = &intel_lgm_emmc_data,
   1273	},
   1274	{
   1275		.compatible = "intel,lgm-sdhci-5.1-sdxc",
   1276		.data = &intel_lgm_sdxc_data,
   1277	},
   1278	{
   1279		.compatible = "intel,keembay-sdhci-5.1-emmc",
   1280		.data = &intel_keembay_emmc_data,
   1281	},
   1282	{
   1283		.compatible = "intel,keembay-sdhci-5.1-sd",
   1284		.data = &intel_keembay_sd_data,
   1285	},
   1286	{
   1287		.compatible = "intel,keembay-sdhci-5.1-sdio",
   1288		.data = &intel_keembay_sdio_data,
   1289	},
   1290	{
   1291		.compatible = "intel,thunderbay-sdhci-5.1",
   1292		.data = &sdhci_arasan_thunderbay_data,
   1293	},
   1294	/* Generic compatible below here */
   1295	{
   1296		.compatible = "arasan,sdhci-8.9a",
   1297		.data = &sdhci_arasan_generic_data,
   1298	},
   1299	{
   1300		.compatible = "arasan,sdhci-5.1",
   1301		.data = &sdhci_arasan_generic_data,
   1302	},
   1303	{
   1304		.compatible = "arasan,sdhci-4.9a",
   1305		.data = &sdhci_arasan_generic_data,
   1306	},
   1307	{
   1308		.compatible = "xlnx,zynqmp-8.9a",
   1309		.data = &sdhci_arasan_zynqmp_data,
   1310	},
   1311	{
   1312		.compatible = "xlnx,versal-8.9a",
   1313		.data = &sdhci_arasan_versal_data,
   1314	},
   1315	{ /* sentinel */ }
   1316};
   1317MODULE_DEVICE_TABLE(of, sdhci_arasan_of_match);
   1318
   1319/**
   1320 * sdhci_arasan_register_sdcardclk - Register the sdcardclk for a PHY to use
   1321 *
   1322 * @sdhci_arasan:	Our private data structure.
   1323 * @clk_xin:		Pointer to the functional clock
   1324 * @dev:		Pointer to our struct device.
   1325 *
   1326 * Some PHY devices need to know what the actual card clock is.  In order for
   1327 * them to find out, we'll provide a clock through the common clock framework
   1328 * for them to query.
   1329 *
   1330 * Return: 0 on success and error value on error
   1331 */
   1332static int
   1333sdhci_arasan_register_sdcardclk(struct sdhci_arasan_data *sdhci_arasan,
   1334				struct clk *clk_xin,
   1335				struct device *dev)
   1336{
   1337	struct sdhci_arasan_clk_data *clk_data = &sdhci_arasan->clk_data;
   1338	struct device_node *np = dev->of_node;
   1339	struct clk_init_data sdcardclk_init;
   1340	const char *parent_clk_name;
   1341	int ret;
   1342
   1343	ret = of_property_read_string_index(np, "clock-output-names", 0,
   1344					    &sdcardclk_init.name);
   1345	if (ret) {
   1346		dev_err(dev, "DT has #clock-cells but no clock-output-names\n");
   1347		return ret;
   1348	}
   1349
   1350	parent_clk_name = __clk_get_name(clk_xin);
   1351	sdcardclk_init.parent_names = &parent_clk_name;
   1352	sdcardclk_init.num_parents = 1;
   1353	sdcardclk_init.flags = CLK_GET_RATE_NOCACHE;
   1354	sdcardclk_init.ops = sdhci_arasan->clk_ops->sdcardclk_ops;
   1355
   1356	clk_data->sdcardclk_hw.init = &sdcardclk_init;
   1357	clk_data->sdcardclk =
   1358		devm_clk_register(dev, &clk_data->sdcardclk_hw);
   1359	if (IS_ERR(clk_data->sdcardclk))
   1360		return PTR_ERR(clk_data->sdcardclk);
   1361	clk_data->sdcardclk_hw.init = NULL;
   1362
   1363	ret = of_clk_add_provider(np, of_clk_src_simple_get,
   1364				  clk_data->sdcardclk);
   1365	if (ret)
   1366		dev_err(dev, "Failed to add sdcard clock provider\n");
   1367
   1368	return ret;
   1369}
   1370
   1371/**
   1372 * sdhci_arasan_register_sampleclk - Register the sampleclk for a PHY to use
   1373 *
   1374 * @sdhci_arasan:	Our private data structure.
   1375 * @clk_xin:		Pointer to the functional clock
   1376 * @dev:		Pointer to our struct device.
   1377 *
   1378 * Some PHY devices need to know what the actual card clock is.  In order for
   1379 * them to find out, we'll provide a clock through the common clock framework
   1380 * for them to query.
   1381 *
   1382 * Return: 0 on success and error value on error
   1383 */
   1384static int
   1385sdhci_arasan_register_sampleclk(struct sdhci_arasan_data *sdhci_arasan,
   1386				struct clk *clk_xin,
   1387				struct device *dev)
   1388{
   1389	struct sdhci_arasan_clk_data *clk_data = &sdhci_arasan->clk_data;
   1390	struct device_node *np = dev->of_node;
   1391	struct clk_init_data sampleclk_init;
   1392	const char *parent_clk_name;
   1393	int ret;
   1394
   1395	ret = of_property_read_string_index(np, "clock-output-names", 1,
   1396					    &sampleclk_init.name);
   1397	if (ret) {
   1398		dev_err(dev, "DT has #clock-cells but no clock-output-names\n");
   1399		return ret;
   1400	}
   1401
   1402	parent_clk_name = __clk_get_name(clk_xin);
   1403	sampleclk_init.parent_names = &parent_clk_name;
   1404	sampleclk_init.num_parents = 1;
   1405	sampleclk_init.flags = CLK_GET_RATE_NOCACHE;
   1406	sampleclk_init.ops = sdhci_arasan->clk_ops->sampleclk_ops;
   1407
   1408	clk_data->sampleclk_hw.init = &sampleclk_init;
   1409	clk_data->sampleclk =
   1410		devm_clk_register(dev, &clk_data->sampleclk_hw);
   1411	if (IS_ERR(clk_data->sampleclk))
   1412		return PTR_ERR(clk_data->sampleclk);
   1413	clk_data->sampleclk_hw.init = NULL;
   1414
   1415	ret = of_clk_add_provider(np, of_clk_src_simple_get,
   1416				  clk_data->sampleclk);
   1417	if (ret)
   1418		dev_err(dev, "Failed to add sample clock provider\n");
   1419
   1420	return ret;
   1421}
   1422
   1423/**
   1424 * sdhci_arasan_unregister_sdclk - Undoes sdhci_arasan_register_sdclk()
   1425 *
   1426 * @dev:		Pointer to our struct device.
   1427 *
   1428 * Should be called any time we're exiting and sdhci_arasan_register_sdclk()
   1429 * returned success.
   1430 */
   1431static void sdhci_arasan_unregister_sdclk(struct device *dev)
   1432{
   1433	struct device_node *np = dev->of_node;
   1434
   1435	if (!of_find_property(np, "#clock-cells", NULL))
   1436		return;
   1437
   1438	of_clk_del_provider(dev->of_node);
   1439}
   1440
   1441/**
   1442 * sdhci_arasan_update_support64b - Set SUPPORT_64B (64-bit System Bus Support)
   1443 * @host:		The sdhci_host
   1444 * @value:		The value to write
   1445 *
   1446 * This should be set based on the System Address Bus.
   1447 * 0: the Core supports only 32-bit System Address Bus.
   1448 * 1: the Core supports 64-bit System Address Bus.
   1449 *
   1450 * NOTE:
   1451 * For Keem Bay, it is required to clear this bit. Its default value is 1'b1.
   1452 * Keem Bay does not support 64-bit access.
   1453 */
   1454static void sdhci_arasan_update_support64b(struct sdhci_host *host, u32 value)
   1455{
   1456	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
   1457	struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
   1458	const struct sdhci_arasan_soc_ctl_map *soc_ctl_map;
   1459
   1460	/* Having a map is optional */
   1461	soc_ctl_map = sdhci_arasan->soc_ctl_map;
   1462	if (!soc_ctl_map)
   1463		return;
   1464
   1465	/* If we have a map, we expect to have a syscon */
   1466	if (!sdhci_arasan->soc_ctl_base) {
   1467		pr_warn("%s: Have regmap, but no soc-ctl-syscon\n",
   1468			mmc_hostname(host->mmc));
   1469		return;
   1470	}
   1471
   1472	sdhci_arasan_syscon_write(host, &soc_ctl_map->support64b, value);
   1473}
   1474
   1475/**
   1476 * sdhci_arasan_register_sdclk - Register the sdcardclk for a PHY to use
   1477 *
   1478 * @sdhci_arasan:	Our private data structure.
   1479 * @clk_xin:		Pointer to the functional clock
   1480 * @dev:		Pointer to our struct device.
   1481 *
   1482 * Some PHY devices need to know what the actual card clock is.  In order for
   1483 * them to find out, we'll provide a clock through the common clock framework
   1484 * for them to query.
   1485 *
   1486 * Note: without seriously re-architecting SDHCI's clock code and testing on
   1487 * all platforms, there's no way to create a totally beautiful clock here
   1488 * with all clock ops implemented.  Instead, we'll just create a clock that can
   1489 * be queried and set the CLK_GET_RATE_NOCACHE attribute to tell common clock
   1490 * framework that we're doing things behind its back.  This should be sufficient
   1491 * to create nice clean device tree bindings and later (if needed) we can try
   1492 * re-architecting SDHCI if we see some benefit to it.
   1493 *
   1494 * Return: 0 on success and error value on error
   1495 */
   1496static int sdhci_arasan_register_sdclk(struct sdhci_arasan_data *sdhci_arasan,
   1497				       struct clk *clk_xin,
   1498				       struct device *dev)
   1499{
   1500	struct device_node *np = dev->of_node;
   1501	u32 num_clks = 0;
   1502	int ret;
   1503
   1504	/* Providing a clock to the PHY is optional; no error if missing */
   1505	if (of_property_read_u32(np, "#clock-cells", &num_clks) < 0)
   1506		return 0;
   1507
   1508	ret = sdhci_arasan_register_sdcardclk(sdhci_arasan, clk_xin, dev);
   1509	if (ret)
   1510		return ret;
   1511
   1512	if (num_clks) {
   1513		ret = sdhci_arasan_register_sampleclk(sdhci_arasan, clk_xin,
   1514						      dev);
   1515		if (ret) {
   1516			sdhci_arasan_unregister_sdclk(dev);
   1517			return ret;
   1518		}
   1519	}
   1520
   1521	return 0;
   1522}
   1523
   1524static int sdhci_arasan_add_host(struct sdhci_arasan_data *sdhci_arasan)
   1525{
   1526	struct sdhci_host *host = sdhci_arasan->host;
   1527	struct cqhci_host *cq_host;
   1528	bool dma64;
   1529	int ret;
   1530
   1531	if (!sdhci_arasan->has_cqe)
   1532		return sdhci_add_host(host);
   1533
   1534	ret = sdhci_setup_host(host);
   1535	if (ret)
   1536		return ret;
   1537
   1538	cq_host = devm_kzalloc(host->mmc->parent,
   1539			       sizeof(*cq_host), GFP_KERNEL);
   1540	if (!cq_host) {
   1541		ret = -ENOMEM;
   1542		goto cleanup;
   1543	}
   1544
   1545	cq_host->mmio = host->ioaddr + SDHCI_ARASAN_CQE_BASE_ADDR;
   1546	cq_host->ops = &sdhci_arasan_cqhci_ops;
   1547
   1548	dma64 = host->flags & SDHCI_USE_64_BIT_DMA;
   1549	if (dma64)
   1550		cq_host->caps |= CQHCI_TASK_DESC_SZ_128;
   1551
   1552	ret = cqhci_init(cq_host, host->mmc, dma64);
   1553	if (ret)
   1554		goto cleanup;
   1555
   1556	ret = __sdhci_add_host(host);
   1557	if (ret)
   1558		goto cleanup;
   1559
   1560	return 0;
   1561
   1562cleanup:
   1563	sdhci_cleanup_host(host);
   1564	return ret;
   1565}
   1566
   1567static int sdhci_arasan_probe(struct platform_device *pdev)
   1568{
   1569	int ret;
   1570	struct device_node *node;
   1571	struct clk *clk_xin;
   1572	struct sdhci_host *host;
   1573	struct sdhci_pltfm_host *pltfm_host;
   1574	struct device *dev = &pdev->dev;
   1575	struct device_node *np = dev->of_node;
   1576	struct sdhci_arasan_data *sdhci_arasan;
   1577	const struct sdhci_arasan_of_data *data;
   1578
   1579	data = of_device_get_match_data(dev);
   1580	if (!data)
   1581		return -EINVAL;
   1582
   1583	host = sdhci_pltfm_init(pdev, data->pdata, sizeof(*sdhci_arasan));
   1584
   1585	if (IS_ERR(host))
   1586		return PTR_ERR(host);
   1587
   1588	pltfm_host = sdhci_priv(host);
   1589	sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
   1590	sdhci_arasan->host = host;
   1591
   1592	sdhci_arasan->soc_ctl_map = data->soc_ctl_map;
   1593	sdhci_arasan->clk_ops = data->clk_ops;
   1594
   1595	node = of_parse_phandle(np, "arasan,soc-ctl-syscon", 0);
   1596	if (node) {
   1597		sdhci_arasan->soc_ctl_base = syscon_node_to_regmap(node);
   1598		of_node_put(node);
   1599
   1600		if (IS_ERR(sdhci_arasan->soc_ctl_base)) {
   1601			ret = dev_err_probe(dev,
   1602					    PTR_ERR(sdhci_arasan->soc_ctl_base),
   1603					    "Can't get syscon\n");
   1604			goto err_pltfm_free;
   1605		}
   1606	}
   1607
   1608	sdhci_get_of_property(pdev);
   1609
   1610	sdhci_arasan->clk_ahb = devm_clk_get(dev, "clk_ahb");
   1611	if (IS_ERR(sdhci_arasan->clk_ahb)) {
   1612		ret = dev_err_probe(dev, PTR_ERR(sdhci_arasan->clk_ahb),
   1613				    "clk_ahb clock not found.\n");
   1614		goto err_pltfm_free;
   1615	}
   1616
   1617	clk_xin = devm_clk_get(dev, "clk_xin");
   1618	if (IS_ERR(clk_xin)) {
   1619		ret = dev_err_probe(dev, PTR_ERR(clk_xin), "clk_xin clock not found.\n");
   1620		goto err_pltfm_free;
   1621	}
   1622
   1623	ret = clk_prepare_enable(sdhci_arasan->clk_ahb);
   1624	if (ret) {
   1625		dev_err(dev, "Unable to enable AHB clock.\n");
   1626		goto err_pltfm_free;
   1627	}
   1628
   1629	/* If clock-frequency property is set, use the provided value */
   1630	if (pltfm_host->clock &&
   1631	    pltfm_host->clock != clk_get_rate(clk_xin)) {
   1632		ret = clk_set_rate(clk_xin, pltfm_host->clock);
   1633		if (ret) {
   1634			dev_err(&pdev->dev, "Failed to set SD clock rate\n");
   1635			goto clk_dis_ahb;
   1636		}
   1637	}
   1638
   1639	ret = clk_prepare_enable(clk_xin);
   1640	if (ret) {
   1641		dev_err(dev, "Unable to enable SD clock.\n");
   1642		goto clk_dis_ahb;
   1643	}
   1644
   1645	if (of_property_read_bool(np, "xlnx,fails-without-test-cd"))
   1646		sdhci_arasan->quirks |= SDHCI_ARASAN_QUIRK_FORCE_CDTEST;
   1647
   1648	if (of_property_read_bool(np, "xlnx,int-clock-stable-broken"))
   1649		sdhci_arasan->quirks |= SDHCI_ARASAN_QUIRK_CLOCK_UNSTABLE;
   1650
   1651	pltfm_host->clk = clk_xin;
   1652
   1653	if (of_device_is_compatible(np, "rockchip,rk3399-sdhci-5.1"))
   1654		sdhci_arasan_update_clockmultiplier(host, 0x0);
   1655
   1656	if (of_device_is_compatible(np, "intel,keembay-sdhci-5.1-emmc") ||
   1657	    of_device_is_compatible(np, "intel,keembay-sdhci-5.1-sd") ||
   1658	    of_device_is_compatible(np, "intel,keembay-sdhci-5.1-sdio") ||
   1659	    of_device_is_compatible(np, "intel,thunderbay-sdhci-5.1")) {
   1660		sdhci_arasan_update_clockmultiplier(host, 0x0);
   1661		sdhci_arasan_update_support64b(host, 0x0);
   1662
   1663		host->mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY;
   1664	}
   1665
   1666	sdhci_arasan_update_baseclkfreq(host);
   1667
   1668	ret = sdhci_arasan_register_sdclk(sdhci_arasan, clk_xin, dev);
   1669	if (ret)
   1670		goto clk_disable_all;
   1671
   1672	if (of_device_is_compatible(np, "xlnx,zynqmp-8.9a")) {
   1673		host->mmc_host_ops.execute_tuning =
   1674			arasan_zynqmp_execute_tuning;
   1675
   1676		sdhci_arasan->quirks |= SDHCI_ARASAN_QUIRK_CLOCK_25_BROKEN;
   1677		host->quirks |= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12;
   1678	}
   1679
   1680	arasan_dt_parse_clk_phases(dev, &sdhci_arasan->clk_data);
   1681
   1682	ret = mmc_of_parse(host->mmc);
   1683	if (ret) {
   1684		ret = dev_err_probe(dev, ret, "parsing dt failed.\n");
   1685		goto unreg_clk;
   1686	}
   1687
   1688	sdhci_arasan->phy = ERR_PTR(-ENODEV);
   1689	if (of_device_is_compatible(np, "arasan,sdhci-5.1")) {
   1690		sdhci_arasan->phy = devm_phy_get(dev, "phy_arasan");
   1691		if (IS_ERR(sdhci_arasan->phy)) {
   1692			ret = dev_err_probe(dev, PTR_ERR(sdhci_arasan->phy),
   1693					    "No phy for arasan,sdhci-5.1.\n");
   1694			goto unreg_clk;
   1695		}
   1696
   1697		ret = phy_init(sdhci_arasan->phy);
   1698		if (ret < 0) {
   1699			dev_err(dev, "phy_init err.\n");
   1700			goto unreg_clk;
   1701		}
   1702
   1703		host->mmc_host_ops.hs400_enhanced_strobe =
   1704					sdhci_arasan_hs400_enhanced_strobe;
   1705		host->mmc_host_ops.start_signal_voltage_switch =
   1706					sdhci_arasan_voltage_switch;
   1707		sdhci_arasan->has_cqe = true;
   1708		host->mmc->caps2 |= MMC_CAP2_CQE;
   1709
   1710		if (!of_property_read_bool(np, "disable-cqe-dcmd"))
   1711			host->mmc->caps2 |= MMC_CAP2_CQE_DCMD;
   1712	}
   1713
   1714	ret = sdhci_arasan_add_host(sdhci_arasan);
   1715	if (ret)
   1716		goto err_add_host;
   1717
   1718	return 0;
   1719
   1720err_add_host:
   1721	if (!IS_ERR(sdhci_arasan->phy))
   1722		phy_exit(sdhci_arasan->phy);
   1723unreg_clk:
   1724	sdhci_arasan_unregister_sdclk(dev);
   1725clk_disable_all:
   1726	clk_disable_unprepare(clk_xin);
   1727clk_dis_ahb:
   1728	clk_disable_unprepare(sdhci_arasan->clk_ahb);
   1729err_pltfm_free:
   1730	sdhci_pltfm_free(pdev);
   1731	return ret;
   1732}
   1733
   1734static int sdhci_arasan_remove(struct platform_device *pdev)
   1735{
   1736	int ret;
   1737	struct sdhci_host *host = platform_get_drvdata(pdev);
   1738	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
   1739	struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host);
   1740	struct clk *clk_ahb = sdhci_arasan->clk_ahb;
   1741
   1742	if (!IS_ERR(sdhci_arasan->phy)) {
   1743		if (sdhci_arasan->is_phy_on)
   1744			phy_power_off(sdhci_arasan->phy);
   1745		phy_exit(sdhci_arasan->phy);
   1746	}
   1747
   1748	sdhci_arasan_unregister_sdclk(&pdev->dev);
   1749
   1750	ret = sdhci_pltfm_unregister(pdev);
   1751
   1752	clk_disable_unprepare(clk_ahb);
   1753
   1754	return ret;
   1755}
   1756
   1757static struct platform_driver sdhci_arasan_driver = {
   1758	.driver = {
   1759		.name = "sdhci-arasan",
   1760		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
   1761		.of_match_table = sdhci_arasan_of_match,
   1762		.pm = &sdhci_arasan_dev_pm_ops,
   1763	},
   1764	.probe = sdhci_arasan_probe,
   1765	.remove = sdhci_arasan_remove,
   1766};
   1767
   1768module_platform_driver(sdhci_arasan_driver);
   1769
   1770MODULE_DESCRIPTION("Driver for the Arasan SDHCI Controller");
   1771MODULE_AUTHOR("Soeren Brinkmann <soren.brinkmann@xilinx.com>");
   1772MODULE_LICENSE("GPL");