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