Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0-or-later
2 : : /*
3 : : * linux/drivers/mmc/host/sdhci.c - Secure Digital Host Controller Interface driver
4 : : *
5 : : * Copyright (C) 2005-2008 Pierre Ossman, All Rights Reserved.
6 : : *
7 : : * Thanks to the following companies for their support:
8 : : *
9 : : * - JMicron (hardware and technical support)
10 : : */
11 : :
12 : : #include <linux/delay.h>
13 : : #include <linux/ktime.h>
14 : : #include <linux/highmem.h>
15 : : #include <linux/io.h>
16 : : #include <linux/module.h>
17 : : #include <linux/dma-mapping.h>
18 : : #include <linux/slab.h>
19 : : #include <linux/scatterlist.h>
20 : : #include <linux/sizes.h>
21 : : #include <linux/swiotlb.h>
22 : : #include <linux/regulator/consumer.h>
23 : : #include <linux/pm_runtime.h>
24 : : #include <linux/of.h>
25 : :
26 : : #include <linux/leds.h>
27 : :
28 : : #include <linux/mmc/mmc.h>
29 : : #include <linux/mmc/host.h>
30 : : #include <linux/mmc/card.h>
31 : : #include <linux/mmc/sdio.h>
32 : : #include <linux/mmc/slot-gpio.h>
33 : :
34 : : #include "sdhci.h"
35 : :
36 : : #define DRIVER_NAME "sdhci"
37 : :
38 : : #define DBG(f, x...) \
39 : : pr_debug("%s: " DRIVER_NAME ": " f, mmc_hostname(host->mmc), ## x)
40 : :
41 : : #define SDHCI_DUMP(f, x...) \
42 : : pr_debug("%s: " DRIVER_NAME ": " f, mmc_hostname(host->mmc), ## x)
43 : :
44 : : #define MAX_TUNING_LOOP 40
45 : :
46 : : static unsigned int debug_quirks = 0;
47 : : static unsigned int debug_quirks2;
48 : :
49 : : static void sdhci_finish_data(struct sdhci_host *);
50 : :
51 : : static void sdhci_enable_preset_value(struct sdhci_host *host, bool enable);
52 : :
53 : 0 : void sdhci_dumpregs(struct sdhci_host *host)
54 : : {
55 : : SDHCI_DUMP("============ SDHCI REGISTER DUMP ===========\n");
56 : :
57 : : SDHCI_DUMP("Sys addr: 0x%08x | Version: 0x%08x\n",
58 : : sdhci_readl(host, SDHCI_DMA_ADDRESS),
59 : : sdhci_readw(host, SDHCI_HOST_VERSION));
60 : : SDHCI_DUMP("Blk size: 0x%08x | Blk cnt: 0x%08x\n",
61 : : sdhci_readw(host, SDHCI_BLOCK_SIZE),
62 : : sdhci_readw(host, SDHCI_BLOCK_COUNT));
63 : : SDHCI_DUMP("Argument: 0x%08x | Trn mode: 0x%08x\n",
64 : : sdhci_readl(host, SDHCI_ARGUMENT),
65 : : sdhci_readw(host, SDHCI_TRANSFER_MODE));
66 : : SDHCI_DUMP("Present: 0x%08x | Host ctl: 0x%08x\n",
67 : : sdhci_readl(host, SDHCI_PRESENT_STATE),
68 : : sdhci_readb(host, SDHCI_HOST_CONTROL));
69 : : SDHCI_DUMP("Power: 0x%08x | Blk gap: 0x%08x\n",
70 : : sdhci_readb(host, SDHCI_POWER_CONTROL),
71 : : sdhci_readb(host, SDHCI_BLOCK_GAP_CONTROL));
72 : : SDHCI_DUMP("Wake-up: 0x%08x | Clock: 0x%08x\n",
73 : : sdhci_readb(host, SDHCI_WAKE_UP_CONTROL),
74 : : sdhci_readw(host, SDHCI_CLOCK_CONTROL));
75 : : SDHCI_DUMP("Timeout: 0x%08x | Int stat: 0x%08x\n",
76 : : sdhci_readb(host, SDHCI_TIMEOUT_CONTROL),
77 : : sdhci_readl(host, SDHCI_INT_STATUS));
78 : : SDHCI_DUMP("Int enab: 0x%08x | Sig enab: 0x%08x\n",
79 : : sdhci_readl(host, SDHCI_INT_ENABLE),
80 : : sdhci_readl(host, SDHCI_SIGNAL_ENABLE));
81 : : SDHCI_DUMP("ACmd stat: 0x%08x | Slot int: 0x%08x\n",
82 : : sdhci_readw(host, SDHCI_AUTO_CMD_STATUS),
83 : : sdhci_readw(host, SDHCI_SLOT_INT_STATUS));
84 : : SDHCI_DUMP("Caps: 0x%08x | Caps_1: 0x%08x\n",
85 : : sdhci_readl(host, SDHCI_CAPABILITIES),
86 : : sdhci_readl(host, SDHCI_CAPABILITIES_1));
87 : : SDHCI_DUMP("Cmd: 0x%08x | Max curr: 0x%08x\n",
88 : : sdhci_readw(host, SDHCI_COMMAND),
89 : : sdhci_readl(host, SDHCI_MAX_CURRENT));
90 : : SDHCI_DUMP("Resp[0]: 0x%08x | Resp[1]: 0x%08x\n",
91 : : sdhci_readl(host, SDHCI_RESPONSE),
92 : : sdhci_readl(host, SDHCI_RESPONSE + 4));
93 : : SDHCI_DUMP("Resp[2]: 0x%08x | Resp[3]: 0x%08x\n",
94 : : sdhci_readl(host, SDHCI_RESPONSE + 8),
95 : : sdhci_readl(host, SDHCI_RESPONSE + 12));
96 : : SDHCI_DUMP("Host ctl2: 0x%08x\n",
97 : : sdhci_readw(host, SDHCI_HOST_CONTROL2));
98 : :
99 : : if (host->flags & SDHCI_USE_ADMA) {
100 : : if (host->flags & SDHCI_USE_64_BIT_DMA) {
101 : : SDHCI_DUMP("ADMA Err: 0x%08x | ADMA Ptr: 0x%08x%08x\n",
102 : : sdhci_readl(host, SDHCI_ADMA_ERROR),
103 : : sdhci_readl(host, SDHCI_ADMA_ADDRESS_HI),
104 : : sdhci_readl(host, SDHCI_ADMA_ADDRESS));
105 : : } else {
106 : : SDHCI_DUMP("ADMA Err: 0x%08x | ADMA Ptr: 0x%08x\n",
107 : : sdhci_readl(host, SDHCI_ADMA_ERROR),
108 : : sdhci_readl(host, SDHCI_ADMA_ADDRESS));
109 : : }
110 : : }
111 : :
112 : : SDHCI_DUMP("============================================\n");
113 : 0 : }
114 : : EXPORT_SYMBOL_GPL(sdhci_dumpregs);
115 : :
116 : : /*****************************************************************************\
117 : : * *
118 : : * Low level functions *
119 : : * *
120 : : \*****************************************************************************/
121 : :
122 : : static void sdhci_do_enable_v4_mode(struct sdhci_host *host)
123 : : {
124 : : u16 ctrl2;
125 : :
126 : : ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
127 [ # # # # : 0 : if (ctrl2 & SDHCI_CTRL_V4_MODE)
# # ]
128 : : return;
129 : :
130 : 0 : ctrl2 |= SDHCI_CTRL_V4_MODE;
131 : : sdhci_writew(host, ctrl2, SDHCI_HOST_CONTROL2);
132 : : }
133 : :
134 : : /*
135 : : * This can be called before sdhci_add_host() by Vendor's host controller
136 : : * driver to enable v4 mode if supported.
137 : : */
138 : 0 : void sdhci_enable_v4_mode(struct sdhci_host *host)
139 : : {
140 : 0 : host->v4_mode = true;
141 : : sdhci_do_enable_v4_mode(host);
142 : 0 : }
143 : : EXPORT_SYMBOL_GPL(sdhci_enable_v4_mode);
144 : :
145 : : static inline bool sdhci_data_line_cmd(struct mmc_command *cmd)
146 : : {
147 [ # # # # : 0 : return cmd->data || cmd->flags & MMC_RSP_BUSY;
# # # # #
# # # # #
# # # # #
# # # # #
# # # # ]
148 : : }
149 : :
150 : 0 : static void sdhci_set_card_detection(struct sdhci_host *host, bool enable)
151 : : {
152 : : u32 present;
153 : :
154 [ # # # # ]: 0 : if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) ||
155 [ # # ]: 0 : !mmc_card_is_removable(host->mmc) || mmc_can_gpio_cd(host->mmc))
156 : 0 : return;
157 : :
158 [ # # ]: 0 : if (enable) {
159 : 0 : present = sdhci_readl(host, SDHCI_PRESENT_STATE) &
160 : : SDHCI_CARD_PRESENT;
161 : :
162 [ # # ]: 0 : host->ier |= present ? SDHCI_INT_CARD_REMOVE :
163 : : SDHCI_INT_CARD_INSERT;
164 : : } else {
165 : 0 : host->ier &= ~(SDHCI_INT_CARD_REMOVE | SDHCI_INT_CARD_INSERT);
166 : : }
167 : :
168 : 0 : sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
169 : 0 : sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
170 : : }
171 : :
172 : : static void sdhci_enable_card_detection(struct sdhci_host *host)
173 : : {
174 : 0 : sdhci_set_card_detection(host, true);
175 : : }
176 : :
177 : : static void sdhci_disable_card_detection(struct sdhci_host *host)
178 : : {
179 : 0 : sdhci_set_card_detection(host, false);
180 : : }
181 : :
182 : 0 : static void sdhci_runtime_pm_bus_on(struct sdhci_host *host)
183 : : {
184 [ # # ]: 0 : if (host->bus_on)
185 : 0 : return;
186 : 0 : host->bus_on = true;
187 : 0 : pm_runtime_get_noresume(host->mmc->parent);
188 : : }
189 : :
190 : 0 : static void sdhci_runtime_pm_bus_off(struct sdhci_host *host)
191 : : {
192 [ # # ]: 0 : if (!host->bus_on)
193 : 0 : return;
194 : 0 : host->bus_on = false;
195 : 0 : pm_runtime_put_noidle(host->mmc->parent);
196 : : }
197 : :
198 : 0 : void sdhci_reset(struct sdhci_host *host, u8 mask)
199 : : {
200 : : ktime_t timeout;
201 : :
202 : : sdhci_writeb(host, mask, SDHCI_SOFTWARE_RESET);
203 : :
204 [ # # ]: 0 : if (mask & SDHCI_RESET_ALL) {
205 : 0 : host->clock = 0;
206 : : /* Reset-all turns off SD Bus Power */
207 [ # # ]: 0 : if (host->quirks2 & SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON)
208 : 0 : sdhci_runtime_pm_bus_off(host);
209 : : }
210 : :
211 : : /* Wait max 100 ms */
212 : 0 : timeout = ktime_add_ms(ktime_get(), 100);
213 : :
214 : : /* hw clears the bit when it's done */
215 : : while (1) {
216 : 0 : bool timedout = ktime_after(ktime_get(), timeout);
217 : :
218 [ # # ]: 0 : if (!(sdhci_readb(host, SDHCI_SOFTWARE_RESET) & mask))
219 : : break;
220 [ # # ]: 0 : if (timedout) {
221 : 0 : pr_err("%s: Reset 0x%x never completed.\n",
222 : : mmc_hostname(host->mmc), (int)mask);
223 : : sdhci_dumpregs(host);
224 : 0 : return;
225 : : }
226 : 0 : udelay(10);
227 : 0 : }
228 : : }
229 : : EXPORT_SYMBOL_GPL(sdhci_reset);
230 : :
231 : 0 : static void sdhci_do_reset(struct sdhci_host *host, u8 mask)
232 : : {
233 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_NO_CARD_NO_RESET) {
234 : 0 : struct mmc_host *mmc = host->mmc;
235 : :
236 [ # # ]: 0 : if (!mmc->ops->get_cd(mmc))
237 : 0 : return;
238 : : }
239 : :
240 : 0 : host->ops->reset(host, mask);
241 : :
242 [ # # ]: 0 : if (mask & SDHCI_RESET_ALL) {
243 [ # # ]: 0 : if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA)) {
244 [ # # ]: 0 : if (host->ops->enable_dma)
245 : 0 : host->ops->enable_dma(host);
246 : : }
247 : :
248 : : /* Resetting the controller clears many */
249 : 0 : host->preset_enabled = false;
250 : : }
251 : : }
252 : :
253 : : static void sdhci_set_default_irqs(struct sdhci_host *host)
254 : : {
255 : 0 : host->ier = SDHCI_INT_BUS_POWER | SDHCI_INT_DATA_END_BIT |
256 : : SDHCI_INT_DATA_CRC | SDHCI_INT_DATA_TIMEOUT |
257 : : SDHCI_INT_INDEX | SDHCI_INT_END_BIT | SDHCI_INT_CRC |
258 : : SDHCI_INT_TIMEOUT | SDHCI_INT_DATA_END |
259 : : SDHCI_INT_RESPONSE;
260 : :
261 [ # # # # ]: 0 : if (host->tuning_mode == SDHCI_TUNING_MODE_2 ||
262 : : host->tuning_mode == SDHCI_TUNING_MODE_3)
263 : 0 : host->ier |= SDHCI_INT_RETUNE;
264 : :
265 : 0 : sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
266 : 0 : sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
267 : : }
268 : :
269 : 0 : static void sdhci_config_dma(struct sdhci_host *host)
270 : : {
271 : : u8 ctrl;
272 : : u16 ctrl2;
273 : :
274 [ # # ]: 0 : if (host->version < SDHCI_SPEC_200)
275 : 0 : return;
276 : :
277 : : ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL);
278 : :
279 : : /*
280 : : * Always adjust the DMA selection as some controllers
281 : : * (e.g. JMicron) can't do PIO properly when the selection
282 : : * is ADMA.
283 : : */
284 : 0 : ctrl &= ~SDHCI_CTRL_DMA_MASK;
285 [ # # ]: 0 : if (!(host->flags & SDHCI_REQ_USE_DMA))
286 : : goto out;
287 : :
288 : : /* Note if DMA Select is zero then SDMA is selected */
289 [ # # ]: 0 : if (host->flags & SDHCI_USE_ADMA)
290 : 0 : ctrl |= SDHCI_CTRL_ADMA32;
291 : :
292 [ # # ]: 0 : if (host->flags & SDHCI_USE_64_BIT_DMA) {
293 : : /*
294 : : * If v4 mode, all supported DMA can be 64-bit addressing if
295 : : * controller supports 64-bit system address, otherwise only
296 : : * ADMA can support 64-bit addressing.
297 : : */
298 [ # # ]: 0 : if (host->v4_mode) {
299 : : ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
300 : 0 : ctrl2 |= SDHCI_CTRL_64BIT_ADDR;
301 : : sdhci_writew(host, ctrl2, SDHCI_HOST_CONTROL2);
302 [ # # ]: 0 : } else if (host->flags & SDHCI_USE_ADMA) {
303 : : /*
304 : : * Don't need to undo SDHCI_CTRL_ADMA32 in order to
305 : : * set SDHCI_CTRL_ADMA64.
306 : : */
307 : 0 : ctrl |= SDHCI_CTRL_ADMA64;
308 : : }
309 : : }
310 : :
311 : : out:
312 : : sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
313 : : }
314 : :
315 : 0 : static void sdhci_init(struct sdhci_host *host, int soft)
316 : : {
317 : 0 : struct mmc_host *mmc = host->mmc;
318 : :
319 [ # # ]: 0 : if (soft)
320 : 0 : sdhci_do_reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA);
321 : : else
322 : 0 : sdhci_do_reset(host, SDHCI_RESET_ALL);
323 : :
324 [ # # ]: 0 : if (host->v4_mode)
325 : : sdhci_do_enable_v4_mode(host);
326 : :
327 : : sdhci_set_default_irqs(host);
328 : :
329 : 0 : host->cqe_on = false;
330 : :
331 [ # # ]: 0 : if (soft) {
332 : : /* force clock reconfiguration */
333 : 0 : host->clock = 0;
334 : 0 : mmc->ops->set_ios(mmc, &mmc->ios);
335 : : }
336 : 0 : }
337 : :
338 : 0 : static void sdhci_reinit(struct sdhci_host *host)
339 : : {
340 : 0 : sdhci_init(host, 0);
341 : : sdhci_enable_card_detection(host);
342 : 0 : }
343 : :
344 : : static void __sdhci_led_activate(struct sdhci_host *host)
345 : : {
346 : : u8 ctrl;
347 : :
348 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_NO_LED)
349 : : return;
350 : :
351 : : ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL);
352 : 0 : ctrl |= SDHCI_CTRL_LED;
353 : : sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
354 : : }
355 : :
356 : : static void __sdhci_led_deactivate(struct sdhci_host *host)
357 : : {
358 : : u8 ctrl;
359 : :
360 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_NO_LED)
361 : : return;
362 : :
363 : : ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL);
364 : 0 : ctrl &= ~SDHCI_CTRL_LED;
365 : : sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
366 : : }
367 : :
368 : : #if IS_REACHABLE(CONFIG_LEDS_CLASS)
369 : 0 : static void sdhci_led_control(struct led_classdev *led,
370 : : enum led_brightness brightness)
371 : : {
372 : : struct sdhci_host *host = container_of(led, struct sdhci_host, led);
373 : : unsigned long flags;
374 : :
375 : 0 : spin_lock_irqsave(&host->lock, flags);
376 : :
377 [ # # ]: 0 : if (host->runtime_suspended)
378 : : goto out;
379 : :
380 [ # # ]: 0 : if (brightness == LED_OFF)
381 : : __sdhci_led_deactivate(host);
382 : : else
383 : : __sdhci_led_activate(host);
384 : : out:
385 : : spin_unlock_irqrestore(&host->lock, flags);
386 : 0 : }
387 : :
388 : 0 : static int sdhci_led_register(struct sdhci_host *host)
389 : : {
390 : 0 : struct mmc_host *mmc = host->mmc;
391 : :
392 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_NO_LED)
393 : : return 0;
394 : :
395 : 0 : snprintf(host->led_name, sizeof(host->led_name),
396 : : "%s::", mmc_hostname(mmc));
397 : :
398 : 0 : host->led.name = host->led_name;
399 : 0 : host->led.brightness = LED_OFF;
400 : 0 : host->led.default_trigger = mmc_hostname(mmc);
401 : 0 : host->led.brightness_set = sdhci_led_control;
402 : :
403 : 0 : return led_classdev_register(mmc_dev(mmc), &host->led);
404 : : }
405 : :
406 : : static void sdhci_led_unregister(struct sdhci_host *host)
407 : : {
408 [ # # # # ]: 0 : if (host->quirks & SDHCI_QUIRK_NO_LED)
409 : : return;
410 : :
411 : 0 : led_classdev_unregister(&host->led);
412 : : }
413 : :
414 : : static inline void sdhci_led_activate(struct sdhci_host *host)
415 : : {
416 : : }
417 : :
418 : : static inline void sdhci_led_deactivate(struct sdhci_host *host)
419 : : {
420 : : }
421 : :
422 : : #else
423 : :
424 : : static inline int sdhci_led_register(struct sdhci_host *host)
425 : : {
426 : : return 0;
427 : : }
428 : :
429 : : static inline void sdhci_led_unregister(struct sdhci_host *host)
430 : : {
431 : : }
432 : :
433 : : static inline void sdhci_led_activate(struct sdhci_host *host)
434 : : {
435 : : __sdhci_led_activate(host);
436 : : }
437 : :
438 : : static inline void sdhci_led_deactivate(struct sdhci_host *host)
439 : : {
440 : : __sdhci_led_deactivate(host);
441 : : }
442 : :
443 : : #endif
444 : :
445 : 0 : static void sdhci_mod_timer(struct sdhci_host *host, struct mmc_request *mrq,
446 : : unsigned long timeout)
447 : : {
448 [ # # ]: 0 : if (sdhci_data_line_cmd(mrq->cmd))
449 : 0 : mod_timer(&host->data_timer, timeout);
450 : : else
451 : 0 : mod_timer(&host->timer, timeout);
452 : 0 : }
453 : :
454 : 0 : static void sdhci_del_timer(struct sdhci_host *host, struct mmc_request *mrq)
455 : : {
456 [ # # ]: 0 : if (sdhci_data_line_cmd(mrq->cmd))
457 : 0 : del_timer(&host->data_timer);
458 : : else
459 : 0 : del_timer(&host->timer);
460 : 0 : }
461 : :
462 : : static inline bool sdhci_has_requests(struct sdhci_host *host)
463 : : {
464 [ # # # # : 0 : return host->cmd || host->data_cmd;
# # # # ]
465 : : }
466 : :
467 : : /*****************************************************************************\
468 : : * *
469 : : * Core functions *
470 : : * *
471 : : \*****************************************************************************/
472 : :
473 : 0 : static void sdhci_read_block_pio(struct sdhci_host *host)
474 : : {
475 : : unsigned long flags;
476 : : size_t blksize, len, chunk;
477 : : u32 uninitialized_var(scratch);
478 : : u8 *buf;
479 : :
480 : : DBG("PIO reading\n");
481 : :
482 : 0 : blksize = host->data->blksz;
483 : : chunk = 0;
484 : :
485 : 0 : local_irq_save(flags);
486 : :
487 [ # # ]: 0 : while (blksize) {
488 [ # # ]: 0 : BUG_ON(!sg_miter_next(&host->sg_miter));
489 : :
490 : 0 : len = min(host->sg_miter.length, blksize);
491 : :
492 : 0 : blksize -= len;
493 : 0 : host->sg_miter.consumed = len;
494 : :
495 : 0 : buf = host->sg_miter.addr;
496 : :
497 [ # # ]: 0 : while (len) {
498 [ # # ]: 0 : if (chunk == 0) {
499 : : scratch = sdhci_readl(host, SDHCI_BUFFER);
500 : : chunk = 4;
501 : : }
502 : :
503 : 0 : *buf = scratch & 0xFF;
504 : :
505 : 0 : buf++;
506 : 0 : scratch >>= 8;
507 : 0 : chunk--;
508 : 0 : len--;
509 : : }
510 : : }
511 : :
512 : 0 : sg_miter_stop(&host->sg_miter);
513 : :
514 [ # # ]: 0 : local_irq_restore(flags);
515 : 0 : }
516 : :
517 : 0 : static void sdhci_write_block_pio(struct sdhci_host *host)
518 : : {
519 : : unsigned long flags;
520 : : size_t blksize, len, chunk;
521 : : u32 scratch;
522 : : u8 *buf;
523 : :
524 : : DBG("PIO writing\n");
525 : :
526 : 0 : blksize = host->data->blksz;
527 : : chunk = 0;
528 : : scratch = 0;
529 : :
530 : 0 : local_irq_save(flags);
531 : :
532 [ # # ]: 0 : while (blksize) {
533 [ # # ]: 0 : BUG_ON(!sg_miter_next(&host->sg_miter));
534 : :
535 : 0 : len = min(host->sg_miter.length, blksize);
536 : :
537 : 0 : blksize -= len;
538 : 0 : host->sg_miter.consumed = len;
539 : :
540 : 0 : buf = host->sg_miter.addr;
541 : :
542 [ # # ]: 0 : while (len) {
543 : 0 : scratch |= (u32)*buf << (chunk * 8);
544 : :
545 : 0 : buf++;
546 : 0 : chunk++;
547 : 0 : len--;
548 : :
549 [ # # # # ]: 0 : if ((chunk == 4) || ((len == 0) && (blksize == 0))) {
550 : : sdhci_writel(host, scratch, SDHCI_BUFFER);
551 : : chunk = 0;
552 : : scratch = 0;
553 : : }
554 : : }
555 : : }
556 : :
557 : 0 : sg_miter_stop(&host->sg_miter);
558 : :
559 [ # # ]: 0 : local_irq_restore(flags);
560 : 0 : }
561 : :
562 : 0 : static void sdhci_transfer_pio(struct sdhci_host *host)
563 : : {
564 : : u32 mask;
565 : :
566 [ # # ]: 0 : if (host->blocks == 0)
567 : 0 : return;
568 : :
569 [ # # ]: 0 : if (host->data->flags & MMC_DATA_READ)
570 : : mask = SDHCI_DATA_AVAILABLE;
571 : : else
572 : : mask = SDHCI_SPACE_AVAILABLE;
573 : :
574 : : /*
575 : : * Some controllers (JMicron JMB38x) mess up the buffer bits
576 : : * for transfers < 4 bytes. As long as it is just one block,
577 : : * we can ignore the bits.
578 : : */
579 [ # # # # ]: 0 : if ((host->quirks & SDHCI_QUIRK_BROKEN_SMALL_PIO) &&
580 : 0 : (host->data->blocks == 1))
581 : : mask = ~0;
582 : :
583 [ # # ]: 0 : while (sdhci_readl(host, SDHCI_PRESENT_STATE) & mask) {
584 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_PIO_NEEDS_DELAY)
585 : 0 : udelay(100);
586 : :
587 [ # # ]: 0 : if (host->data->flags & MMC_DATA_READ)
588 : 0 : sdhci_read_block_pio(host);
589 : : else
590 : 0 : sdhci_write_block_pio(host);
591 : :
592 : 0 : host->blocks--;
593 [ # # ]: 0 : if (host->blocks == 0)
594 : : break;
595 : : }
596 : :
597 : : DBG("PIO transfer complete.\n");
598 : : }
599 : :
600 : 0 : static int sdhci_pre_dma_transfer(struct sdhci_host *host,
601 : : struct mmc_data *data, int cookie)
602 : : {
603 : : int sg_count;
604 : :
605 : : /*
606 : : * If the data buffers are already mapped, return the previous
607 : : * dma_map_sg() result.
608 : : */
609 [ # # ]: 0 : if (data->host_cookie == COOKIE_PRE_MAPPED)
610 : 0 : return data->sg_count;
611 : :
612 : : /* Bounce write requests to the bounce buffer */
613 [ # # ]: 0 : if (host->bounce_buffer) {
614 : 0 : unsigned int length = data->blksz * data->blocks;
615 : :
616 [ # # ]: 0 : if (length > host->bounce_buffer_size) {
617 : 0 : pr_err("%s: asked for transfer of %u bytes exceeds bounce buffer %u bytes\n",
618 : : mmc_hostname(host->mmc), length,
619 : : host->bounce_buffer_size);
620 : 0 : return -EIO;
621 : : }
622 [ # # ]: 0 : if (mmc_get_dma_dir(data) == DMA_TO_DEVICE) {
623 : : /* Copy the data to the bounce buffer */
624 : 0 : sg_copy_to_buffer(data->sg, data->sg_len,
625 : : host->bounce_buffer,
626 : : length);
627 : : }
628 : : /* Switch ownership to the DMA */
629 : 0 : dma_sync_single_for_device(host->mmc->parent,
630 : : host->bounce_addr,
631 : : host->bounce_buffer_size,
632 : : mmc_get_dma_dir(data));
633 : : /* Just a dummy value */
634 : : sg_count = 1;
635 : : } else {
636 : : /* Just access the data directly from memory */
637 : 0 : sg_count = dma_map_sg(mmc_dev(host->mmc),
638 : : data->sg, data->sg_len,
639 : : mmc_get_dma_dir(data));
640 : : }
641 : :
642 [ # # ]: 0 : if (sg_count == 0)
643 : : return -ENOSPC;
644 : :
645 : 0 : data->sg_count = sg_count;
646 : 0 : data->host_cookie = cookie;
647 : :
648 : 0 : return sg_count;
649 : : }
650 : :
651 : 0 : static char *sdhci_kmap_atomic(struct scatterlist *sg, unsigned long *flags)
652 : : {
653 : 0 : local_irq_save(*flags);
654 : 0 : return kmap_atomic(sg_page(sg)) + sg->offset;
655 : : }
656 : :
657 : 0 : static void sdhci_kunmap_atomic(void *buffer, unsigned long *flags)
658 : : {
659 : : kunmap_atomic(buffer);
660 [ # # ]: 0 : local_irq_restore(*flags);
661 : 0 : }
662 : :
663 : 0 : void sdhci_adma_write_desc(struct sdhci_host *host, void **desc,
664 : : dma_addr_t addr, int len, unsigned int cmd)
665 : : {
666 : 0 : struct sdhci_adma2_64_desc *dma_desc = *desc;
667 : :
668 : : /* 32-bit and 64-bit descriptors have these members in same position */
669 : 0 : dma_desc->cmd = cpu_to_le16(cmd);
670 : 0 : dma_desc->len = cpu_to_le16(len);
671 : 0 : dma_desc->addr_lo = cpu_to_le32(lower_32_bits(addr));
672 : :
673 [ # # # # ]: 0 : if (host->flags & SDHCI_USE_64_BIT_DMA)
674 : 0 : dma_desc->addr_hi = cpu_to_le32(upper_32_bits(addr));
675 : :
676 : 0 : *desc += host->desc_sz;
677 : 0 : }
678 : : EXPORT_SYMBOL_GPL(sdhci_adma_write_desc);
679 : :
680 : 0 : static inline void __sdhci_adma_write_desc(struct sdhci_host *host,
681 : : void **desc, dma_addr_t addr,
682 : : int len, unsigned int cmd)
683 : : {
684 [ # # ]: 0 : if (host->ops->adma_write_desc)
685 : 0 : host->ops->adma_write_desc(host, desc, addr, len, cmd);
686 : : else
687 : : sdhci_adma_write_desc(host, desc, addr, len, cmd);
688 : 0 : }
689 : :
690 : : static void sdhci_adma_mark_end(void *desc)
691 : : {
692 : : struct sdhci_adma2_64_desc *dma_desc = desc;
693 : :
694 : : /* 32-bit and 64-bit descriptors have 'cmd' in same position */
695 : 0 : dma_desc->cmd |= cpu_to_le16(ADMA2_END);
696 : : }
697 : :
698 : 0 : static void sdhci_adma_table_pre(struct sdhci_host *host,
699 : : struct mmc_data *data, int sg_count)
700 : : {
701 : : struct scatterlist *sg;
702 : : unsigned long flags;
703 : : dma_addr_t addr, align_addr;
704 : : void *desc, *align;
705 : : char *buffer;
706 : : int len, offset, i;
707 : :
708 : : /*
709 : : * The spec does not specify endianness of descriptor table.
710 : : * We currently guess that it is LE.
711 : : */
712 : :
713 : 0 : host->sg_count = sg_count;
714 : :
715 : 0 : desc = host->adma_table;
716 : 0 : align = host->align_buffer;
717 : :
718 : 0 : align_addr = host->align_addr;
719 : :
720 [ # # ]: 0 : for_each_sg(data->sg, sg, host->sg_count, i) {
721 : 0 : addr = sg_dma_address(sg);
722 : 0 : len = sg_dma_len(sg);
723 : :
724 : : /*
725 : : * The SDHCI specification states that ADMA addresses must
726 : : * be 32-bit aligned. If they aren't, then we use a bounce
727 : : * buffer for the (up to three) bytes that screw up the
728 : : * alignment.
729 : : */
730 : 0 : offset = (SDHCI_ADMA2_ALIGN - (addr & SDHCI_ADMA2_MASK)) &
731 : : SDHCI_ADMA2_MASK;
732 [ # # ]: 0 : if (offset) {
733 [ # # ]: 0 : if (data->flags & MMC_DATA_WRITE) {
734 : 0 : buffer = sdhci_kmap_atomic(sg, &flags);
735 : 0 : memcpy(align, buffer, offset);
736 : 0 : sdhci_kunmap_atomic(buffer, &flags);
737 : : }
738 : :
739 : : /* tran, valid */
740 : 0 : __sdhci_adma_write_desc(host, &desc, align_addr,
741 : : offset, ADMA2_TRAN_VALID);
742 : :
743 : : BUG_ON(offset > 65536);
744 : :
745 : 0 : align += SDHCI_ADMA2_ALIGN;
746 : 0 : align_addr += SDHCI_ADMA2_ALIGN;
747 : :
748 : 0 : addr += offset;
749 : 0 : len -= offset;
750 : : }
751 : :
752 [ # # ]: 0 : BUG_ON(len > 65536);
753 : :
754 : : /* tran, valid */
755 [ # # ]: 0 : if (len)
756 : 0 : __sdhci_adma_write_desc(host, &desc, addr, len,
757 : : ADMA2_TRAN_VALID);
758 : :
759 : : /*
760 : : * If this triggers then we have a calculation bug
761 : : * somewhere. :/
762 : : */
763 [ # # ]: 0 : WARN_ON((desc - host->adma_table) >= host->adma_table_sz);
764 : : }
765 : :
766 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC) {
767 : : /* Mark the last descriptor as the terminating descriptor */
768 [ # # ]: 0 : if (desc != host->adma_table) {
769 : 0 : desc -= host->desc_sz;
770 : : sdhci_adma_mark_end(desc);
771 : : }
772 : : } else {
773 : : /* Add a terminating entry - nop, end, valid */
774 : 0 : __sdhci_adma_write_desc(host, &desc, 0, 0, ADMA2_NOP_END_VALID);
775 : : }
776 : 0 : }
777 : :
778 : 0 : static void sdhci_adma_table_post(struct sdhci_host *host,
779 : : struct mmc_data *data)
780 : : {
781 : : struct scatterlist *sg;
782 : : int i, size;
783 : : void *align;
784 : : char *buffer;
785 : : unsigned long flags;
786 : :
787 [ # # ]: 0 : if (data->flags & MMC_DATA_READ) {
788 : : bool has_unaligned = false;
789 : :
790 : : /* Do a quick scan of the SG list for any unaligned mappings */
791 [ # # ]: 0 : for_each_sg(data->sg, sg, host->sg_count, i)
792 [ # # ]: 0 : if (sg_dma_address(sg) & SDHCI_ADMA2_MASK) {
793 : : has_unaligned = true;
794 : : break;
795 : : }
796 : :
797 [ # # ]: 0 : if (has_unaligned) {
798 : 0 : dma_sync_sg_for_cpu(mmc_dev(host->mmc), data->sg,
799 : 0 : data->sg_len, DMA_FROM_DEVICE);
800 : :
801 : 0 : align = host->align_buffer;
802 : :
803 [ # # ]: 0 : for_each_sg(data->sg, sg, host->sg_count, i) {
804 [ # # ]: 0 : if (sg_dma_address(sg) & SDHCI_ADMA2_MASK) {
805 : 0 : size = SDHCI_ADMA2_ALIGN -
806 : : (sg_dma_address(sg) & SDHCI_ADMA2_MASK);
807 : :
808 : 0 : buffer = sdhci_kmap_atomic(sg, &flags);
809 : 0 : memcpy(buffer, align, size);
810 : 0 : sdhci_kunmap_atomic(buffer, &flags);
811 : :
812 : 0 : align += SDHCI_ADMA2_ALIGN;
813 : : }
814 : : }
815 : : }
816 : : }
817 : 0 : }
818 : :
819 : : static void sdhci_set_adma_addr(struct sdhci_host *host, dma_addr_t addr)
820 : : {
821 : : sdhci_writel(host, lower_32_bits(addr), SDHCI_ADMA_ADDRESS);
822 [ # # # # ]: 0 : if (host->flags & SDHCI_USE_64_BIT_DMA)
823 : : sdhci_writel(host, upper_32_bits(addr), SDHCI_ADMA_ADDRESS_HI);
824 : : }
825 : :
826 : : static dma_addr_t sdhci_sdma_address(struct sdhci_host *host)
827 : : {
828 [ # # # # ]: 0 : if (host->bounce_buffer)
829 : 0 : return host->bounce_addr;
830 : : else
831 : 0 : return sg_dma_address(host->data->sg);
832 : : }
833 : :
834 : 0 : static void sdhci_set_sdma_addr(struct sdhci_host *host, dma_addr_t addr)
835 : : {
836 [ # # ]: 0 : if (host->v4_mode)
837 : : sdhci_set_adma_addr(host, addr);
838 : : else
839 : : sdhci_writel(host, addr, SDHCI_DMA_ADDRESS);
840 : 0 : }
841 : :
842 : 0 : static unsigned int sdhci_target_timeout(struct sdhci_host *host,
843 : : struct mmc_command *cmd,
844 : : struct mmc_data *data)
845 : : {
846 : : unsigned int target_timeout;
847 : :
848 : : /* timeout in us */
849 [ # # ]: 0 : if (!data) {
850 : 0 : target_timeout = cmd->busy_timeout * 1000;
851 : : } else {
852 : 0 : target_timeout = DIV_ROUND_UP(data->timeout_ns, 1000);
853 [ # # # # ]: 0 : if (host->clock && data->timeout_clks) {
854 : : unsigned long long val;
855 : :
856 : : /*
857 : : * data->timeout_clks is in units of clock cycles.
858 : : * host->clock is in Hz. target_timeout is in us.
859 : : * Hence, us = 1000000 * cycles / Hz. Round up.
860 : : */
861 : 0 : val = 1000000ULL * data->timeout_clks;
862 [ # # # # : 0 : if (do_div(val, host->clock))
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # ]
863 : 0 : target_timeout++;
864 : 0 : target_timeout += val;
865 : : }
866 : : }
867 : :
868 : 0 : return target_timeout;
869 : : }
870 : :
871 : 0 : static void sdhci_calc_sw_timeout(struct sdhci_host *host,
872 : : struct mmc_command *cmd)
873 : : {
874 : 0 : struct mmc_data *data = cmd->data;
875 : 0 : struct mmc_host *mmc = host->mmc;
876 : : struct mmc_ios *ios = &mmc->ios;
877 : 0 : unsigned char bus_width = 1 << ios->bus_width;
878 : : unsigned int blksz;
879 : : unsigned int freq;
880 : : u64 target_timeout;
881 : : u64 transfer_time;
882 : :
883 : 0 : target_timeout = sdhci_target_timeout(host, cmd, data);
884 : 0 : target_timeout *= NSEC_PER_USEC;
885 : :
886 [ # # ]: 0 : if (data) {
887 : 0 : blksz = data->blksz;
888 [ # # ]: 0 : freq = host->mmc->actual_clock ? : host->clock;
889 : 0 : transfer_time = (u64)blksz * NSEC_PER_SEC * (8 / bus_width);
890 [ # # # # : 0 : do_div(transfer_time, freq);
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # # # #
# # ]
891 : : /* multiply by '2' to account for any unknowns */
892 : 0 : transfer_time = transfer_time * 2;
893 : : /* calculate timeout for the entire data */
894 : 0 : host->data_timeout = data->blocks * target_timeout +
895 : : transfer_time;
896 : : } else {
897 : 0 : host->data_timeout = target_timeout;
898 : : }
899 : :
900 [ # # ]: 0 : if (host->data_timeout)
901 : 0 : host->data_timeout += MMC_CMD_TRANSFER_TIME;
902 : 0 : }
903 : :
904 : 0 : static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd,
905 : : bool *too_big)
906 : : {
907 : : u8 count;
908 : : struct mmc_data *data;
909 : : unsigned target_timeout, current_timeout;
910 : :
911 : 0 : *too_big = true;
912 : :
913 : : /*
914 : : * If the host controller provides us with an incorrect timeout
915 : : * value, just skip the check and use 0xE. The hardware may take
916 : : * longer to time out, but that's much better than having a too-short
917 : : * timeout value.
918 : : */
919 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_BROKEN_TIMEOUT_VAL)
920 : : return 0xE;
921 : :
922 : : /* Unspecified command, asume max */
923 [ # # ]: 0 : if (cmd == NULL)
924 : : return 0xE;
925 : :
926 : 0 : data = cmd->data;
927 : : /* Unspecified timeout, assume max */
928 [ # # # # ]: 0 : if (!data && !cmd->busy_timeout)
929 : : return 0xE;
930 : :
931 : : /* timeout in us */
932 : 0 : target_timeout = sdhci_target_timeout(host, cmd, data);
933 : :
934 : : /*
935 : : * Figure out needed cycles.
936 : : * We do this in steps in order to fit inside a 32 bit int.
937 : : * The first step is the minimum timeout, which will have a
938 : : * minimum resolution of 6 bits:
939 : : * (1) 2^13*1000 > 2^22,
940 : : * (2) host->timeout_clk < 2^16
941 : : * =>
942 : : * (1) / (2) > 2^6
943 : : */
944 : : count = 0;
945 : 0 : current_timeout = (1 << 13) * 1000 / host->timeout_clk;
946 [ # # ]: 0 : while (current_timeout < target_timeout) {
947 : 0 : count++;
948 : 0 : current_timeout <<= 1;
949 [ # # ]: 0 : if (count >= 0xF)
950 : : break;
951 : : }
952 : :
953 [ # # ]: 0 : if (count >= 0xF) {
954 : : if (!(host->quirks2 & SDHCI_QUIRK2_DISABLE_HW_TIMEOUT))
955 : : DBG("Too large timeout 0x%x requested for CMD%d!\n",
956 : : count, cmd->opcode);
957 : : count = 0xE;
958 : : } else {
959 : 0 : *too_big = false;
960 : : }
961 : :
962 : 0 : return count;
963 : : }
964 : :
965 : 0 : static void sdhci_set_transfer_irqs(struct sdhci_host *host)
966 : : {
967 : : u32 pio_irqs = SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL;
968 : : u32 dma_irqs = SDHCI_INT_DMA_END | SDHCI_INT_ADMA_ERROR;
969 : :
970 [ # # ]: 0 : if (host->flags & SDHCI_REQ_USE_DMA)
971 : 0 : host->ier = (host->ier & ~pio_irqs) | dma_irqs;
972 : : else
973 : 0 : host->ier = (host->ier & ~dma_irqs) | pio_irqs;
974 : :
975 [ # # ]: 0 : if (host->flags & (SDHCI_AUTO_CMD23 | SDHCI_AUTO_CMD12))
976 : 0 : host->ier |= SDHCI_INT_AUTO_CMD_ERR;
977 : : else
978 : 0 : host->ier &= ~SDHCI_INT_AUTO_CMD_ERR;
979 : :
980 : 0 : sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
981 : 0 : sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
982 : 0 : }
983 : :
984 : 0 : void sdhci_set_data_timeout_irq(struct sdhci_host *host, bool enable)
985 : : {
986 [ # # ]: 0 : if (enable)
987 : 0 : host->ier |= SDHCI_INT_DATA_TIMEOUT;
988 : : else
989 : 0 : host->ier &= ~SDHCI_INT_DATA_TIMEOUT;
990 : 0 : sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
991 : 0 : sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
992 : 0 : }
993 : : EXPORT_SYMBOL_GPL(sdhci_set_data_timeout_irq);
994 : :
995 : 0 : void __sdhci_set_timeout(struct sdhci_host *host, struct mmc_command *cmd)
996 : : {
997 : 0 : bool too_big = false;
998 : 0 : u8 count = sdhci_calc_timeout(host, cmd, &too_big);
999 : :
1000 [ # # # # ]: 0 : if (too_big &&
1001 : 0 : host->quirks2 & SDHCI_QUIRK2_DISABLE_HW_TIMEOUT) {
1002 : 0 : sdhci_calc_sw_timeout(host, cmd);
1003 : : sdhci_set_data_timeout_irq(host, false);
1004 [ # # ]: 0 : } else if (!(host->ier & SDHCI_INT_DATA_TIMEOUT)) {
1005 : : sdhci_set_data_timeout_irq(host, true);
1006 : : }
1007 : :
1008 : : sdhci_writeb(host, count, SDHCI_TIMEOUT_CONTROL);
1009 : 0 : }
1010 : : EXPORT_SYMBOL_GPL(__sdhci_set_timeout);
1011 : :
1012 : 0 : static void sdhci_set_timeout(struct sdhci_host *host, struct mmc_command *cmd)
1013 : : {
1014 [ # # ]: 0 : if (host->ops->set_timeout)
1015 : 0 : host->ops->set_timeout(host, cmd);
1016 : : else
1017 : 0 : __sdhci_set_timeout(host, cmd);
1018 : 0 : }
1019 : :
1020 : 0 : static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
1021 : : {
1022 : 0 : struct mmc_data *data = cmd->data;
1023 : :
1024 : 0 : host->data_timeout = 0;
1025 : :
1026 [ # # ]: 0 : if (sdhci_data_line_cmd(cmd))
1027 : 0 : sdhci_set_timeout(host, cmd);
1028 : :
1029 [ # # ]: 0 : if (!data)
1030 : 0 : return;
1031 : :
1032 [ # # ]: 0 : WARN_ON(host->data);
1033 : :
1034 : : /* Sanity checks */
1035 [ # # ]: 0 : BUG_ON(data->blksz * data->blocks > 524288);
1036 [ # # ]: 0 : BUG_ON(data->blksz > host->mmc->max_blk_size);
1037 [ # # ]: 0 : BUG_ON(data->blocks > 65535);
1038 : :
1039 : 0 : host->data = data;
1040 : 0 : host->data_early = 0;
1041 : 0 : host->data->bytes_xfered = 0;
1042 : :
1043 [ # # ]: 0 : if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA)) {
1044 : : struct scatterlist *sg;
1045 : : unsigned int length_mask, offset_mask;
1046 : : int i;
1047 : :
1048 : 0 : host->flags |= SDHCI_REQ_USE_DMA;
1049 : :
1050 : : /*
1051 : : * FIXME: This doesn't account for merging when mapping the
1052 : : * scatterlist.
1053 : : *
1054 : : * The assumption here being that alignment and lengths are
1055 : : * the same after DMA mapping to device address space.
1056 : : */
1057 : : length_mask = 0;
1058 : : offset_mask = 0;
1059 [ # # ]: 0 : if (host->flags & SDHCI_USE_ADMA) {
1060 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_32BIT_ADMA_SIZE) {
1061 : : length_mask = 3;
1062 : : /*
1063 : : * As we use up to 3 byte chunks to work
1064 : : * around alignment problems, we need to
1065 : : * check the offset as well.
1066 : : */
1067 : : offset_mask = 3;
1068 : : }
1069 : : } else {
1070 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_32BIT_DMA_SIZE)
1071 : : length_mask = 3;
1072 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_32BIT_DMA_ADDR)
1073 : : offset_mask = 3;
1074 : : }
1075 : :
1076 [ # # ]: 0 : if (unlikely(length_mask | offset_mask)) {
1077 [ # # ]: 0 : for_each_sg(data->sg, sg, data->sg_len, i) {
1078 [ # # ]: 0 : if (sg->length & length_mask) {
1079 : : DBG("Reverting to PIO because of transfer size (%d)\n",
1080 : : sg->length);
1081 : 0 : host->flags &= ~SDHCI_REQ_USE_DMA;
1082 : 0 : break;
1083 : : }
1084 [ # # ]: 0 : if (sg->offset & offset_mask) {
1085 : : DBG("Reverting to PIO because of bad alignment\n");
1086 : 0 : host->flags &= ~SDHCI_REQ_USE_DMA;
1087 : 0 : break;
1088 : : }
1089 : : }
1090 : : }
1091 : : }
1092 : :
1093 [ # # ]: 0 : if (host->flags & SDHCI_REQ_USE_DMA) {
1094 : 0 : int sg_cnt = sdhci_pre_dma_transfer(host, data, COOKIE_MAPPED);
1095 : :
1096 [ # # ]: 0 : if (sg_cnt <= 0) {
1097 : : /*
1098 : : * This only happens when someone fed
1099 : : * us an invalid request.
1100 : : */
1101 : 0 : WARN_ON(1);
1102 : 0 : host->flags &= ~SDHCI_REQ_USE_DMA;
1103 [ # # ]: 0 : } else if (host->flags & SDHCI_USE_ADMA) {
1104 : 0 : sdhci_adma_table_pre(host, data, sg_cnt);
1105 : 0 : sdhci_set_adma_addr(host, host->adma_addr);
1106 : : } else {
1107 [ # # ]: 0 : WARN_ON(sg_cnt != 1);
1108 : 0 : sdhci_set_sdma_addr(host, sdhci_sdma_address(host));
1109 : : }
1110 : : }
1111 : :
1112 : 0 : sdhci_config_dma(host);
1113 : :
1114 [ # # ]: 0 : if (!(host->flags & SDHCI_REQ_USE_DMA)) {
1115 : : int flags;
1116 : :
1117 : : flags = SG_MITER_ATOMIC;
1118 [ # # ]: 0 : if (host->data->flags & MMC_DATA_READ)
1119 : : flags |= SG_MITER_TO_SG;
1120 : : else
1121 : : flags |= SG_MITER_FROM_SG;
1122 : 0 : sg_miter_start(&host->sg_miter, data->sg, data->sg_len, flags);
1123 : 0 : host->blocks = data->blocks;
1124 : : }
1125 : :
1126 : 0 : sdhci_set_transfer_irqs(host);
1127 : :
1128 : : /* Set the DMA boundary value and block size */
1129 : 0 : sdhci_writew(host, SDHCI_MAKE_BLKSZ(host->sdma_boundary, data->blksz),
1130 : : SDHCI_BLOCK_SIZE);
1131 : :
1132 : : /*
1133 : : * For Version 4.10 onwards, if v4 mode is enabled, 32-bit Block Count
1134 : : * can be supported, in that case 16-bit block count register must be 0.
1135 : : */
1136 [ # # # # : 0 : if (host->version >= SDHCI_SPEC_410 && host->v4_mode &&
# # ]
1137 : 0 : (host->quirks2 & SDHCI_QUIRK2_USE_32BIT_BLK_CNT)) {
1138 [ # # ]: 0 : if (sdhci_readw(host, SDHCI_BLOCK_COUNT))
1139 : : sdhci_writew(host, 0, SDHCI_BLOCK_COUNT);
1140 : 0 : sdhci_writew(host, data->blocks, SDHCI_32BIT_BLK_CNT);
1141 : : } else {
1142 : 0 : sdhci_writew(host, data->blocks, SDHCI_BLOCK_COUNT);
1143 : : }
1144 : : }
1145 : :
1146 : : static inline bool sdhci_auto_cmd12(struct sdhci_host *host,
1147 : : struct mmc_request *mrq)
1148 : : {
1149 [ # # # # : 0 : return !mrq->sbc && (host->flags & SDHCI_AUTO_CMD12) &&
# # # # #
# # # ]
1150 : 0 : !mrq->cap_cmd_during_tfr;
1151 : : }
1152 : :
1153 : 0 : static inline void sdhci_auto_cmd_select(struct sdhci_host *host,
1154 : : struct mmc_command *cmd,
1155 : : u16 *mode)
1156 : : {
1157 [ # # # # ]: 0 : bool use_cmd12 = sdhci_auto_cmd12(host, cmd->mrq) &&
1158 : 0 : (cmd->opcode != SD_IO_RW_EXTENDED);
1159 [ # # # # ]: 0 : bool use_cmd23 = cmd->mrq->sbc && (host->flags & SDHCI_AUTO_CMD23);
1160 : : u16 ctrl2;
1161 : :
1162 : : /*
1163 : : * In case of Version 4.10 or later, use of 'Auto CMD Auto
1164 : : * Select' is recommended rather than use of 'Auto CMD12
1165 : : * Enable' or 'Auto CMD23 Enable'.
1166 : : */
1167 [ # # # # ]: 0 : if (host->version >= SDHCI_SPEC_410 && (use_cmd12 || use_cmd23)) {
1168 : 0 : *mode |= SDHCI_TRNS_AUTO_SEL;
1169 : :
1170 : : ctrl2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
1171 [ # # ]: 0 : if (use_cmd23)
1172 : 0 : ctrl2 |= SDHCI_CMD23_ENABLE;
1173 : : else
1174 : 0 : ctrl2 &= ~SDHCI_CMD23_ENABLE;
1175 : : sdhci_writew(host, ctrl2, SDHCI_HOST_CONTROL2);
1176 : :
1177 : 0 : return;
1178 : : }
1179 : :
1180 : : /*
1181 : : * If we are sending CMD23, CMD12 never gets sent
1182 : : * on successful completion (so no Auto-CMD12).
1183 : : */
1184 [ # # ]: 0 : if (use_cmd12)
1185 : 0 : *mode |= SDHCI_TRNS_AUTO_CMD12;
1186 [ # # ]: 0 : else if (use_cmd23)
1187 : 0 : *mode |= SDHCI_TRNS_AUTO_CMD23;
1188 : : }
1189 : :
1190 : 0 : static void sdhci_set_transfer_mode(struct sdhci_host *host,
1191 : : struct mmc_command *cmd)
1192 : : {
1193 : 0 : u16 mode = 0;
1194 : 0 : struct mmc_data *data = cmd->data;
1195 : :
1196 [ # # ]: 0 : if (data == NULL) {
1197 [ # # ]: 0 : if (host->quirks2 &
1198 : : SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD) {
1199 : : /* must not clear SDHCI_TRANSFER_MODE when tuning */
1200 [ # # ]: 0 : if (cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200)
1201 : : sdhci_writew(host, 0x0, SDHCI_TRANSFER_MODE);
1202 : : } else {
1203 : : /* clear Auto CMD settings for no data CMDs */
1204 : 0 : mode = sdhci_readw(host, SDHCI_TRANSFER_MODE);
1205 : 0 : sdhci_writew(host, mode & ~(SDHCI_TRNS_AUTO_CMD12 |
1206 : : SDHCI_TRNS_AUTO_CMD23), SDHCI_TRANSFER_MODE);
1207 : : }
1208 : 0 : return;
1209 : : }
1210 : :
1211 [ # # ]: 0 : WARN_ON(!host->data);
1212 : :
1213 [ # # ]: 0 : if (!(host->quirks2 & SDHCI_QUIRK2_SUPPORT_SINGLE))
1214 : 0 : mode = SDHCI_TRNS_BLK_CNT_EN;
1215 : :
1216 [ # # # # ]: 0 : if (mmc_op_multi(cmd->opcode) || data->blocks > 1) {
1217 : 0 : mode = SDHCI_TRNS_BLK_CNT_EN | SDHCI_TRNS_MULTI;
1218 : 0 : sdhci_auto_cmd_select(host, cmd, &mode);
1219 [ # # # # ]: 0 : if (cmd->mrq->sbc && (host->flags & SDHCI_AUTO_CMD23))
1220 : 0 : sdhci_writel(host, cmd->mrq->sbc->arg, SDHCI_ARGUMENT2);
1221 : : }
1222 : :
1223 [ # # ]: 0 : if (data->flags & MMC_DATA_READ)
1224 : 0 : mode |= SDHCI_TRNS_READ;
1225 [ # # ]: 0 : if (host->flags & SDHCI_REQ_USE_DMA)
1226 : 0 : mode |= SDHCI_TRNS_DMA;
1227 : :
1228 : 0 : sdhci_writew(host, mode, SDHCI_TRANSFER_MODE);
1229 : : }
1230 : :
1231 : 0 : static bool sdhci_needs_reset(struct sdhci_host *host, struct mmc_request *mrq)
1232 : : {
1233 [ # # # # ]: 0 : return (!(host->flags & SDHCI_DEVICE_DEAD) &&
1234 [ # # # # ]: 0 : ((mrq->cmd && mrq->cmd->error) ||
1235 [ # # # # ]: 0 : (mrq->sbc && mrq->sbc->error) ||
1236 [ # # # # : 0 : (mrq->data && mrq->data->stop && mrq->data->stop->error) ||
# # ]
1237 : 0 : (host->quirks & SDHCI_QUIRK_RESET_AFTER_REQUEST)));
1238 : : }
1239 : :
1240 : 0 : static void __sdhci_finish_mrq(struct sdhci_host *host, struct mmc_request *mrq)
1241 : : {
1242 : : int i;
1243 : :
1244 [ # # # # ]: 0 : if (host->cmd && host->cmd->mrq == mrq)
1245 : 0 : host->cmd = NULL;
1246 : :
1247 [ # # # # ]: 0 : if (host->data_cmd && host->data_cmd->mrq == mrq)
1248 : 0 : host->data_cmd = NULL;
1249 : :
1250 [ # # # # ]: 0 : if (host->data && host->data->mrq == mrq)
1251 : 0 : host->data = NULL;
1252 : :
1253 [ # # ]: 0 : if (sdhci_needs_reset(host, mrq))
1254 : 0 : host->pending_reset = true;
1255 : :
1256 [ # # ]: 0 : for (i = 0; i < SDHCI_MAX_MRQS; i++) {
1257 [ # # ]: 0 : if (host->mrqs_done[i] == mrq) {
1258 : 0 : WARN_ON(1);
1259 : 0 : return;
1260 : : }
1261 : : }
1262 : :
1263 [ # # ]: 0 : for (i = 0; i < SDHCI_MAX_MRQS; i++) {
1264 [ # # ]: 0 : if (!host->mrqs_done[i]) {
1265 : 0 : host->mrqs_done[i] = mrq;
1266 : 0 : break;
1267 : : }
1268 : : }
1269 : :
1270 [ # # ]: 0 : WARN_ON(i >= SDHCI_MAX_MRQS);
1271 : :
1272 : 0 : sdhci_del_timer(host, mrq);
1273 : :
1274 : : if (!sdhci_has_requests(host))
1275 : : sdhci_led_deactivate(host);
1276 : : }
1277 : :
1278 : 0 : static void sdhci_finish_mrq(struct sdhci_host *host, struct mmc_request *mrq)
1279 : : {
1280 : 0 : __sdhci_finish_mrq(host, mrq);
1281 : :
1282 : 0 : queue_work(host->complete_wq, &host->complete_work);
1283 : 0 : }
1284 : :
1285 : 0 : static void sdhci_finish_data(struct sdhci_host *host)
1286 : : {
1287 : 0 : struct mmc_command *data_cmd = host->data_cmd;
1288 : 0 : struct mmc_data *data = host->data;
1289 : :
1290 : 0 : host->data = NULL;
1291 : 0 : host->data_cmd = NULL;
1292 : :
1293 : : /*
1294 : : * The controller needs a reset of internal state machines upon error
1295 : : * conditions.
1296 : : */
1297 [ # # ]: 0 : if (data->error) {
1298 [ # # # # ]: 0 : if (!host->cmd || host->cmd == data_cmd)
1299 : 0 : sdhci_do_reset(host, SDHCI_RESET_CMD);
1300 : 0 : sdhci_do_reset(host, SDHCI_RESET_DATA);
1301 : : }
1302 : :
1303 [ # # ]: 0 : if ((host->flags & (SDHCI_REQ_USE_DMA | SDHCI_USE_ADMA)) ==
1304 : : (SDHCI_REQ_USE_DMA | SDHCI_USE_ADMA))
1305 : 0 : sdhci_adma_table_post(host, data);
1306 : :
1307 : : /*
1308 : : * The specification states that the block count register must
1309 : : * be updated, but it does not specify at what point in the
1310 : : * data flow. That makes the register entirely useless to read
1311 : : * back so we have to assume that nothing made it to the card
1312 : : * in the event of an error.
1313 : : */
1314 [ # # ]: 0 : if (data->error)
1315 : 0 : data->bytes_xfered = 0;
1316 : : else
1317 : 0 : data->bytes_xfered = data->blksz * data->blocks;
1318 : :
1319 : : /*
1320 : : * Need to send CMD12 if -
1321 : : * a) open-ended multiblock transfer (no CMD23)
1322 : : * b) error in multiblock transfer
1323 : : */
1324 [ # # # # ]: 0 : if (data->stop &&
1325 [ # # ]: 0 : (data->error ||
1326 : 0 : !data->mrq->sbc)) {
1327 : : /*
1328 : : * 'cap_cmd_during_tfr' request must not use the command line
1329 : : * after mmc_command_done() has been called. It is upper layer's
1330 : : * responsibility to send the stop command if required.
1331 : : */
1332 [ # # ]: 0 : if (data->mrq->cap_cmd_during_tfr) {
1333 : 0 : __sdhci_finish_mrq(host, data->mrq);
1334 : : } else {
1335 : : /* Avoid triggering warning in sdhci_send_command() */
1336 : 0 : host->cmd = NULL;
1337 : 0 : sdhci_send_command(host, data->stop);
1338 : : }
1339 : : } else {
1340 : 0 : __sdhci_finish_mrq(host, data->mrq);
1341 : : }
1342 : 0 : }
1343 : :
1344 : 0 : void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
1345 : : {
1346 : : int flags;
1347 : : u32 mask;
1348 : : unsigned long timeout;
1349 : :
1350 [ # # ]: 0 : WARN_ON(host->cmd);
1351 : :
1352 : : /* Initially, a command has no error */
1353 : 0 : cmd->error = 0;
1354 : :
1355 [ # # # # ]: 0 : if ((host->quirks2 & SDHCI_QUIRK2_STOP_WITH_TC) &&
1356 : 0 : cmd->opcode == MMC_STOP_TRANSMISSION)
1357 : 0 : cmd->flags |= MMC_RSP_BUSY;
1358 : :
1359 : : /* Wait max 10 ms */
1360 : : timeout = 10;
1361 : :
1362 : : mask = SDHCI_CMD_INHIBIT;
1363 [ # # ]: 0 : if (sdhci_data_line_cmd(cmd))
1364 : : mask |= SDHCI_DATA_INHIBIT;
1365 : :
1366 : : /* We shouldn't wait for data inihibit for stop commands, even
1367 : : though they might use busy signaling */
1368 [ # # # # ]: 0 : if (cmd->mrq->data && (cmd == cmd->mrq->data->stop))
1369 : : mask &= ~SDHCI_DATA_INHIBIT;
1370 : :
1371 [ # # ]: 0 : while (sdhci_readl(host, SDHCI_PRESENT_STATE) & mask) {
1372 [ # # ]: 0 : if (timeout == 0) {
1373 : 0 : pr_err("%s: Controller never released inhibit bit(s).\n",
1374 : : mmc_hostname(host->mmc));
1375 : : sdhci_dumpregs(host);
1376 : 0 : cmd->error = -EIO;
1377 : 0 : sdhci_finish_mrq(host, cmd->mrq);
1378 : 0 : return;
1379 : : }
1380 : 0 : timeout--;
1381 : 0 : mdelay(1);
1382 : : }
1383 : :
1384 : 0 : host->cmd = cmd;
1385 [ # # ]: 0 : if (sdhci_data_line_cmd(cmd)) {
1386 [ # # ]: 0 : WARN_ON(host->data_cmd);
1387 : 0 : host->data_cmd = cmd;
1388 : : }
1389 : :
1390 : 0 : sdhci_prepare_data(host, cmd);
1391 : :
1392 : 0 : sdhci_writel(host, cmd->arg, SDHCI_ARGUMENT);
1393 : :
1394 : 0 : sdhci_set_transfer_mode(host, cmd);
1395 : :
1396 [ # # ]: 0 : if ((cmd->flags & MMC_RSP_136) && (cmd->flags & MMC_RSP_BUSY)) {
1397 : 0 : pr_err("%s: Unsupported response type!\n",
1398 : : mmc_hostname(host->mmc));
1399 : 0 : cmd->error = -EINVAL;
1400 : 0 : sdhci_finish_mrq(host, cmd->mrq);
1401 : 0 : return;
1402 : : }
1403 : :
1404 [ # # ]: 0 : if (!(cmd->flags & MMC_RSP_PRESENT))
1405 : : flags = SDHCI_CMD_RESP_NONE;
1406 [ # # ]: 0 : else if (cmd->flags & MMC_RSP_136)
1407 : : flags = SDHCI_CMD_RESP_LONG;
1408 [ # # ]: 0 : else if (cmd->flags & MMC_RSP_BUSY)
1409 : : flags = SDHCI_CMD_RESP_SHORT_BUSY;
1410 : : else
1411 : : flags = SDHCI_CMD_RESP_SHORT;
1412 : :
1413 [ # # ]: 0 : if (cmd->flags & MMC_RSP_CRC)
1414 : 0 : flags |= SDHCI_CMD_CRC;
1415 [ # # ]: 0 : if (cmd->flags & MMC_RSP_OPCODE)
1416 : 0 : flags |= SDHCI_CMD_INDEX;
1417 : :
1418 : : /* CMD19 is special in that the Data Present Select should be set */
1419 [ # # # # : 0 : if (cmd->data || cmd->opcode == MMC_SEND_TUNING_BLOCK ||
# # ]
1420 : : cmd->opcode == MMC_SEND_TUNING_BLOCK_HS200)
1421 : 0 : flags |= SDHCI_CMD_DATA;
1422 : :
1423 : 0 : timeout = jiffies;
1424 [ # # ]: 0 : if (host->data_timeout)
1425 : 0 : timeout += nsecs_to_jiffies(host->data_timeout);
1426 [ # # # # ]: 0 : else if (!cmd->data && cmd->busy_timeout > 9000)
1427 : 0 : timeout += DIV_ROUND_UP(cmd->busy_timeout, 1000) * HZ + HZ;
1428 : : else
1429 : 0 : timeout += 10 * HZ;
1430 : 0 : sdhci_mod_timer(host, cmd->mrq, timeout);
1431 : :
1432 : 0 : sdhci_writew(host, SDHCI_MAKE_CMD(cmd->opcode, flags), SDHCI_COMMAND);
1433 : : }
1434 : : EXPORT_SYMBOL_GPL(sdhci_send_command);
1435 : :
1436 : 0 : static void sdhci_read_rsp_136(struct sdhci_host *host, struct mmc_command *cmd)
1437 : : {
1438 : : int i, reg;
1439 : :
1440 [ # # ]: 0 : for (i = 0; i < 4; i++) {
1441 : 0 : reg = SDHCI_RESPONSE + (3 - i) * 4;
1442 : 0 : cmd->resp[i] = sdhci_readl(host, reg);
1443 : : }
1444 : :
1445 [ # # ]: 0 : if (host->quirks2 & SDHCI_QUIRK2_RSP_136_HAS_CRC)
1446 : 0 : return;
1447 : :
1448 : : /* CRC is stripped so we need to do some shifting */
1449 [ # # ]: 0 : for (i = 0; i < 4; i++) {
1450 : 0 : cmd->resp[i] <<= 8;
1451 [ # # ]: 0 : if (i != 3)
1452 : 0 : cmd->resp[i] |= cmd->resp[i + 1] >> 24;
1453 : : }
1454 : : }
1455 : :
1456 : 0 : static void sdhci_finish_command(struct sdhci_host *host)
1457 : : {
1458 : 0 : struct mmc_command *cmd = host->cmd;
1459 : :
1460 : 0 : host->cmd = NULL;
1461 : :
1462 [ # # ]: 0 : if (cmd->flags & MMC_RSP_PRESENT) {
1463 [ # # ]: 0 : if (cmd->flags & MMC_RSP_136) {
1464 : 0 : sdhci_read_rsp_136(host, cmd);
1465 : : } else {
1466 : 0 : cmd->resp[0] = sdhci_readl(host, SDHCI_RESPONSE);
1467 : : }
1468 : : }
1469 : :
1470 [ # # # # ]: 0 : if (cmd->mrq->cap_cmd_during_tfr && cmd == cmd->mrq->cmd)
1471 : 0 : mmc_command_done(host->mmc, cmd->mrq);
1472 : :
1473 : : /*
1474 : : * The host can send and interrupt when the busy state has
1475 : : * ended, allowing us to wait without wasting CPU cycles.
1476 : : * The busy signal uses DAT0 so this is similar to waiting
1477 : : * for data to complete.
1478 : : *
1479 : : * Note: The 1.0 specification is a bit ambiguous about this
1480 : : * feature so there might be some problems with older
1481 : : * controllers.
1482 : : */
1483 [ # # ]: 0 : if (cmd->flags & MMC_RSP_BUSY) {
1484 [ # # ]: 0 : if (cmd->data) {
1485 : : DBG("Cannot wait for busy signal when also doing a data transfer");
1486 [ # # # # ]: 0 : } else if (!(host->quirks & SDHCI_QUIRK_NO_BUSY_IRQ) &&
1487 : 0 : cmd == host->data_cmd) {
1488 : : /* Command complete before busy is ended */
1489 : 0 : return;
1490 : : }
1491 : : }
1492 : :
1493 : : /* Finished CMD23, now send actual command. */
1494 [ # # ]: 0 : if (cmd == cmd->mrq->sbc) {
1495 : 0 : sdhci_send_command(host, cmd->mrq->cmd);
1496 : : } else {
1497 : :
1498 : : /* Processed actual command. */
1499 [ # # # # ]: 0 : if (host->data && host->data_early)
1500 : 0 : sdhci_finish_data(host);
1501 : :
1502 [ # # ]: 0 : if (!cmd->data)
1503 : 0 : __sdhci_finish_mrq(host, cmd->mrq);
1504 : : }
1505 : : }
1506 : :
1507 : 0 : static u16 sdhci_get_preset_value(struct sdhci_host *host)
1508 : : {
1509 : : u16 preset = 0;
1510 : :
1511 [ # # # # : 0 : switch (host->timing) {
# # # ]
1512 : : case MMC_TIMING_UHS_SDR12:
1513 : : preset = sdhci_readw(host, SDHCI_PRESET_FOR_SDR12);
1514 : 0 : break;
1515 : : case MMC_TIMING_UHS_SDR25:
1516 : : preset = sdhci_readw(host, SDHCI_PRESET_FOR_SDR25);
1517 : 0 : break;
1518 : : case MMC_TIMING_UHS_SDR50:
1519 : : preset = sdhci_readw(host, SDHCI_PRESET_FOR_SDR50);
1520 : 0 : break;
1521 : : case MMC_TIMING_UHS_SDR104:
1522 : : case MMC_TIMING_MMC_HS200:
1523 : : preset = sdhci_readw(host, SDHCI_PRESET_FOR_SDR104);
1524 : 0 : break;
1525 : : case MMC_TIMING_UHS_DDR50:
1526 : : case MMC_TIMING_MMC_DDR52:
1527 : : preset = sdhci_readw(host, SDHCI_PRESET_FOR_DDR50);
1528 : 0 : break;
1529 : : case MMC_TIMING_MMC_HS400:
1530 : : preset = sdhci_readw(host, SDHCI_PRESET_FOR_HS400);
1531 : 0 : break;
1532 : : default:
1533 : 0 : pr_warn("%s: Invalid UHS-I mode selected\n",
1534 : : mmc_hostname(host->mmc));
1535 : : preset = sdhci_readw(host, SDHCI_PRESET_FOR_SDR12);
1536 : 0 : break;
1537 : : }
1538 : 0 : return preset;
1539 : : }
1540 : :
1541 : 0 : u16 sdhci_calc_clk(struct sdhci_host *host, unsigned int clock,
1542 : : unsigned int *actual_clock)
1543 : : {
1544 : : int div = 0; /* Initialized for compiler warning */
1545 : : int real_div = div, clk_mul = 1;
1546 : : u16 clk = 0;
1547 : : bool switch_base_clk = false;
1548 : :
1549 [ # # ]: 0 : if (host->version >= SDHCI_SPEC_300) {
1550 [ # # ]: 0 : if (host->preset_enabled) {
1551 : : u16 pre_val;
1552 : :
1553 : : clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1554 : 0 : pre_val = sdhci_get_preset_value(host);
1555 : 0 : div = (pre_val & SDHCI_PRESET_SDCLK_FREQ_MASK)
1556 : : >> SDHCI_PRESET_SDCLK_FREQ_SHIFT;
1557 [ # # # # ]: 0 : if (host->clk_mul &&
1558 : 0 : (pre_val & SDHCI_PRESET_CLKGEN_SEL_MASK)) {
1559 : : clk = SDHCI_PROG_CLOCK_MODE;
1560 : 0 : real_div = div + 1;
1561 : 0 : clk_mul = host->clk_mul;
1562 : : } else {
1563 : 0 : real_div = max_t(int, 1, div << 1);
1564 : : }
1565 : : goto clock_set;
1566 : : }
1567 : :
1568 : : /*
1569 : : * Check if the Host Controller supports Programmable Clock
1570 : : * Mode.
1571 : : */
1572 [ # # ]: 0 : if (host->clk_mul) {
1573 [ # # ]: 0 : for (div = 1; div <= 1024; div++) {
1574 [ # # ]: 0 : if ((host->max_clk * host->clk_mul / div)
1575 : : <= clock)
1576 : : break;
1577 : : }
1578 [ # # ]: 0 : if ((host->max_clk * host->clk_mul / div) <= clock) {
1579 : : /*
1580 : : * Set Programmable Clock Mode in the Clock
1581 : : * Control register.
1582 : : */
1583 : : clk = SDHCI_PROG_CLOCK_MODE;
1584 : 0 : real_div = div;
1585 : 0 : clk_mul = host->clk_mul;
1586 : 0 : div--;
1587 : : } else {
1588 : : /*
1589 : : * Divisor can be too small to reach clock
1590 : : * speed requirement. Then use the base clock.
1591 : : */
1592 : : switch_base_clk = true;
1593 : : }
1594 : : }
1595 : :
1596 [ # # # # ]: 0 : if (!host->clk_mul || switch_base_clk) {
1597 : : /* Version 3.00 divisors must be a multiple of 2. */
1598 [ # # ]: 0 : if (host->max_clk <= clock)
1599 : : div = 1;
1600 : : else {
1601 [ # # ]: 0 : for (div = 2; div < SDHCI_MAX_DIV_SPEC_300;
1602 : 0 : div += 2) {
1603 [ # # ]: 0 : if ((host->max_clk / div) <= clock)
1604 : : break;
1605 : : }
1606 : : }
1607 : : real_div = div;
1608 : 0 : div >>= 1;
1609 [ # # ]: 0 : if ((host->quirks2 & SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN)
1610 [ # # # # ]: 0 : && !div && host->max_clk <= 25000000)
1611 : : div = 1;
1612 : : }
1613 : : } else {
1614 : : /* Version 2.00 divisors must be a power of 2. */
1615 [ # # ]: 0 : for (div = 1; div < SDHCI_MAX_DIV_SPEC_200; div *= 2) {
1616 [ # # ]: 0 : if ((host->max_clk / div) <= clock)
1617 : : break;
1618 : : }
1619 : 0 : real_div = div;
1620 : 0 : div >>= 1;
1621 : : }
1622 : :
1623 : : clock_set:
1624 [ # # ]: 0 : if (real_div)
1625 : 0 : *actual_clock = (host->max_clk * clk_mul) / real_div;
1626 : 0 : clk |= (div & SDHCI_DIV_MASK) << SDHCI_DIVIDER_SHIFT;
1627 : 0 : clk |= ((div & SDHCI_DIV_HI_MASK) >> SDHCI_DIV_MASK_LEN)
1628 : 0 : << SDHCI_DIVIDER_HI_SHIFT;
1629 : :
1630 : 0 : return clk;
1631 : : }
1632 : : EXPORT_SYMBOL_GPL(sdhci_calc_clk);
1633 : :
1634 : 0 : void sdhci_enable_clk(struct sdhci_host *host, u16 clk)
1635 : : {
1636 : : ktime_t timeout;
1637 : :
1638 : 0 : clk |= SDHCI_CLOCK_INT_EN;
1639 : : sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
1640 : :
1641 : : /* Wait max 150 ms */
1642 : 0 : timeout = ktime_add_ms(ktime_get(), 150);
1643 : : while (1) {
1644 : 0 : bool timedout = ktime_after(ktime_get(), timeout);
1645 : :
1646 : : clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1647 [ # # ]: 0 : if (clk & SDHCI_CLOCK_INT_STABLE)
1648 : : break;
1649 [ # # ]: 0 : if (timedout) {
1650 : 0 : pr_err("%s: Internal clock never stabilised.\n",
1651 : : mmc_hostname(host->mmc));
1652 : : sdhci_dumpregs(host);
1653 : : return;
1654 : : }
1655 : 0 : udelay(10);
1656 : 0 : }
1657 : :
1658 [ # # # # ]: 0 : if (host->version >= SDHCI_SPEC_410 && host->v4_mode) {
1659 : : clk |= SDHCI_CLOCK_PLL_EN;
1660 : 0 : clk &= ~SDHCI_CLOCK_INT_STABLE;
1661 : : sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
1662 : :
1663 : : /* Wait max 150 ms */
1664 : 0 : timeout = ktime_add_ms(ktime_get(), 150);
1665 : : while (1) {
1666 : 0 : bool timedout = ktime_after(ktime_get(), timeout);
1667 : :
1668 : : clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1669 [ # # ]: 0 : if (clk & SDHCI_CLOCK_INT_STABLE)
1670 : : break;
1671 [ # # ]: 0 : if (timedout) {
1672 : 0 : pr_err("%s: PLL clock never stabilised.\n",
1673 : : mmc_hostname(host->mmc));
1674 : : sdhci_dumpregs(host);
1675 : : return;
1676 : : }
1677 : 0 : udelay(10);
1678 : 0 : }
1679 : : }
1680 : :
1681 : 0 : clk |= SDHCI_CLOCK_CARD_EN;
1682 : : sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
1683 : : }
1684 : : EXPORT_SYMBOL_GPL(sdhci_enable_clk);
1685 : :
1686 : 0 : void sdhci_set_clock(struct sdhci_host *host, unsigned int clock)
1687 : : {
1688 : : u16 clk;
1689 : :
1690 : 0 : host->mmc->actual_clock = 0;
1691 : :
1692 : : sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL);
1693 : :
1694 [ # # ]: 0 : if (clock == 0)
1695 : 0 : return;
1696 : :
1697 : 0 : clk = sdhci_calc_clk(host, clock, &host->mmc->actual_clock);
1698 : 0 : sdhci_enable_clk(host, clk);
1699 : : }
1700 : : EXPORT_SYMBOL_GPL(sdhci_set_clock);
1701 : :
1702 : 0 : static void sdhci_set_power_reg(struct sdhci_host *host, unsigned char mode,
1703 : : unsigned short vdd)
1704 : : {
1705 : 0 : struct mmc_host *mmc = host->mmc;
1706 : :
1707 : 0 : mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd);
1708 : :
1709 [ # # ]: 0 : if (mode != MMC_POWER_OFF)
1710 : : sdhci_writeb(host, SDHCI_POWER_ON, SDHCI_POWER_CONTROL);
1711 : : else
1712 : : sdhci_writeb(host, 0, SDHCI_POWER_CONTROL);
1713 : 0 : }
1714 : :
1715 : 0 : void sdhci_set_power_noreg(struct sdhci_host *host, unsigned char mode,
1716 : : unsigned short vdd)
1717 : : {
1718 : : u8 pwr = 0;
1719 : :
1720 [ # # ]: 0 : if (mode != MMC_POWER_OFF) {
1721 [ # # # # ]: 0 : switch (1 << vdd) {
1722 : : case MMC_VDD_165_195:
1723 : : /*
1724 : : * Without a regulator, SDHCI does not support 2.0v
1725 : : * so we only get here if the driver deliberately
1726 : : * added the 2.0v range to ocr_avail. Map it to 1.8v
1727 : : * for the purpose of turning on the power.
1728 : : */
1729 : : case MMC_VDD_20_21:
1730 : : pwr = SDHCI_POWER_180;
1731 : : break;
1732 : : case MMC_VDD_29_30:
1733 : : case MMC_VDD_30_31:
1734 : : pwr = SDHCI_POWER_300;
1735 : 0 : break;
1736 : : case MMC_VDD_32_33:
1737 : : case MMC_VDD_33_34:
1738 : : pwr = SDHCI_POWER_330;
1739 : 0 : break;
1740 : : default:
1741 : 0 : WARN(1, "%s: Invalid vdd %#x\n",
1742 : : mmc_hostname(host->mmc), vdd);
1743 : 0 : break;
1744 : : }
1745 : : }
1746 : :
1747 [ # # ]: 0 : if (host->pwr == pwr)
1748 : 0 : return;
1749 : :
1750 : 0 : host->pwr = pwr;
1751 : :
1752 [ # # ]: 0 : if (pwr == 0) {
1753 : : sdhci_writeb(host, 0, SDHCI_POWER_CONTROL);
1754 [ # # ]: 0 : if (host->quirks2 & SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON)
1755 : 0 : sdhci_runtime_pm_bus_off(host);
1756 : : } else {
1757 : : /*
1758 : : * Spec says that we should clear the power reg before setting
1759 : : * a new value. Some controllers don't seem to like this though.
1760 : : */
1761 [ # # ]: 0 : if (!(host->quirks & SDHCI_QUIRK_SINGLE_POWER_WRITE))
1762 : : sdhci_writeb(host, 0, SDHCI_POWER_CONTROL);
1763 : :
1764 : : /*
1765 : : * At least the Marvell CaFe chip gets confused if we set the
1766 : : * voltage and set turn on power at the same time, so set the
1767 : : * voltage first.
1768 : : */
1769 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER)
1770 : : sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL);
1771 : :
1772 : 0 : pwr |= SDHCI_POWER_ON;
1773 : :
1774 : : sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL);
1775 : :
1776 [ # # ]: 0 : if (host->quirks2 & SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON)
1777 : 0 : sdhci_runtime_pm_bus_on(host);
1778 : :
1779 : : /*
1780 : : * Some controllers need an extra 10ms delay of 10ms before
1781 : : * they can apply clock after applying power
1782 : : */
1783 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_DELAY_AFTER_POWER)
1784 [ # # ]: 0 : mdelay(10);
1785 : : }
1786 : : }
1787 : : EXPORT_SYMBOL_GPL(sdhci_set_power_noreg);
1788 : :
1789 : 0 : void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
1790 : : unsigned short vdd)
1791 : : {
1792 [ # # ]: 0 : if (IS_ERR(host->mmc->supply.vmmc))
1793 : 0 : sdhci_set_power_noreg(host, mode, vdd);
1794 : : else
1795 : 0 : sdhci_set_power_reg(host, mode, vdd);
1796 : 0 : }
1797 : : EXPORT_SYMBOL_GPL(sdhci_set_power);
1798 : :
1799 : : /*****************************************************************************\
1800 : : * *
1801 : : * MMC callbacks *
1802 : : * *
1803 : : \*****************************************************************************/
1804 : :
1805 : 0 : void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
1806 : : {
1807 : : struct sdhci_host *host;
1808 : : int present;
1809 : : unsigned long flags;
1810 : :
1811 : : host = mmc_priv(mmc);
1812 : :
1813 : : /* Firstly check card presence */
1814 : 0 : present = mmc->ops->get_cd(mmc);
1815 : :
1816 : 0 : spin_lock_irqsave(&host->lock, flags);
1817 : :
1818 : : sdhci_led_activate(host);
1819 : :
1820 : : /*
1821 : : * Ensure we don't send the STOP for non-SET_BLOCK_COUNTED
1822 : : * requests if Auto-CMD12 is enabled.
1823 : : */
1824 [ # # ]: 0 : if (sdhci_auto_cmd12(host, mrq)) {
1825 [ # # ]: 0 : if (mrq->stop) {
1826 : 0 : mrq->data->stop = NULL;
1827 : 0 : mrq->stop = NULL;
1828 : : }
1829 : : }
1830 : :
1831 [ # # # # ]: 0 : if (!present || host->flags & SDHCI_DEVICE_DEAD) {
1832 : 0 : mrq->cmd->error = -ENOMEDIUM;
1833 : 0 : sdhci_finish_mrq(host, mrq);
1834 : : } else {
1835 [ # # # # ]: 0 : if (mrq->sbc && !(host->flags & SDHCI_AUTO_CMD23))
1836 : 0 : sdhci_send_command(host, mrq->sbc);
1837 : : else
1838 : 0 : sdhci_send_command(host, mrq->cmd);
1839 : : }
1840 : :
1841 : : spin_unlock_irqrestore(&host->lock, flags);
1842 : 0 : }
1843 : : EXPORT_SYMBOL_GPL(sdhci_request);
1844 : :
1845 : 0 : void sdhci_set_bus_width(struct sdhci_host *host, int width)
1846 : : {
1847 : : u8 ctrl;
1848 : :
1849 : : ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL);
1850 [ # # ]: 0 : if (width == MMC_BUS_WIDTH_8) {
1851 : 0 : ctrl &= ~SDHCI_CTRL_4BITBUS;
1852 : 0 : ctrl |= SDHCI_CTRL_8BITBUS;
1853 : : } else {
1854 [ # # ]: 0 : if (host->mmc->caps & MMC_CAP_8_BIT_DATA)
1855 : 0 : ctrl &= ~SDHCI_CTRL_8BITBUS;
1856 [ # # ]: 0 : if (width == MMC_BUS_WIDTH_4)
1857 : 0 : ctrl |= SDHCI_CTRL_4BITBUS;
1858 : : else
1859 : 0 : ctrl &= ~SDHCI_CTRL_4BITBUS;
1860 : : }
1861 : : sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
1862 : 0 : }
1863 : : EXPORT_SYMBOL_GPL(sdhci_set_bus_width);
1864 : :
1865 : 0 : void sdhci_set_uhs_signaling(struct sdhci_host *host, unsigned timing)
1866 : : {
1867 : : u16 ctrl_2;
1868 : :
1869 : : ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
1870 : : /* Select Bus Speed Mode for host */
1871 : 0 : ctrl_2 &= ~SDHCI_CTRL_UHS_MASK;
1872 [ # # ]: 0 : if ((timing == MMC_TIMING_MMC_HS200) ||
1873 : 0 : (timing == MMC_TIMING_UHS_SDR104))
1874 : 0 : ctrl_2 |= SDHCI_CTRL_UHS_SDR104;
1875 [ # # ]: 0 : else if (timing == MMC_TIMING_UHS_SDR12)
1876 : : ctrl_2 |= SDHCI_CTRL_UHS_SDR12;
1877 [ # # ]: 0 : else if (timing == MMC_TIMING_UHS_SDR25)
1878 : 0 : ctrl_2 |= SDHCI_CTRL_UHS_SDR25;
1879 [ # # ]: 0 : else if (timing == MMC_TIMING_UHS_SDR50)
1880 : 0 : ctrl_2 |= SDHCI_CTRL_UHS_SDR50;
1881 [ # # ]: 0 : else if ((timing == MMC_TIMING_UHS_DDR50) ||
1882 : : (timing == MMC_TIMING_MMC_DDR52))
1883 : 0 : ctrl_2 |= SDHCI_CTRL_UHS_DDR50;
1884 [ # # ]: 0 : else if (timing == MMC_TIMING_MMC_HS400)
1885 : 0 : ctrl_2 |= SDHCI_CTRL_HS400; /* Non-standard */
1886 : : sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
1887 : 0 : }
1888 : : EXPORT_SYMBOL_GPL(sdhci_set_uhs_signaling);
1889 : :
1890 : 0 : void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
1891 : : {
1892 : : struct sdhci_host *host = mmc_priv(mmc);
1893 : : u8 ctrl;
1894 : :
1895 [ # # ]: 0 : if (ios->power_mode == MMC_POWER_UNDEFINED)
1896 : : return;
1897 : :
1898 [ # # ]: 0 : if (host->flags & SDHCI_DEVICE_DEAD) {
1899 [ # # # # ]: 0 : if (!IS_ERR(mmc->supply.vmmc) &&
1900 : : ios->power_mode == MMC_POWER_OFF)
1901 : 0 : mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0);
1902 : : return;
1903 : : }
1904 : :
1905 : : /*
1906 : : * Reset the chip on each power off.
1907 : : * Should clear out any weird states.
1908 : : */
1909 [ # # ]: 0 : if (ios->power_mode == MMC_POWER_OFF) {
1910 : : sdhci_writel(host, 0, SDHCI_SIGNAL_ENABLE);
1911 : 0 : sdhci_reinit(host);
1912 : : }
1913 : :
1914 [ # # # # ]: 0 : if (host->version >= SDHCI_SPEC_300 &&
1915 [ # # ]: 0 : (ios->power_mode == MMC_POWER_UP) &&
1916 : 0 : !(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN))
1917 : 0 : sdhci_enable_preset_value(host, false);
1918 : :
1919 [ # # # # ]: 0 : if (!ios->clock || ios->clock != host->clock) {
1920 : 0 : host->ops->set_clock(host, ios->clock);
1921 : 0 : host->clock = ios->clock;
1922 : :
1923 [ # # # # ]: 0 : if (host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK &&
1924 : : host->clock) {
1925 : 0 : host->timeout_clk = host->mmc->actual_clock ?
1926 [ # # ]: 0 : host->mmc->actual_clock / 1000 :
1927 : : host->clock / 1000;
1928 : 0 : host->mmc->max_busy_timeout =
1929 : 0 : host->ops->get_max_timeout_count ?
1930 [ # # ]: 0 : host->ops->get_max_timeout_count(host) :
1931 : : 1 << 27;
1932 : 0 : host->mmc->max_busy_timeout /= host->timeout_clk;
1933 : : }
1934 : : }
1935 : :
1936 [ # # ]: 0 : if (host->ops->set_power)
1937 : 0 : host->ops->set_power(host, ios->power_mode, ios->vdd);
1938 : : else
1939 : 0 : sdhci_set_power(host, ios->power_mode, ios->vdd);
1940 : :
1941 [ # # ]: 0 : if (host->ops->platform_send_init_74_clocks)
1942 : 0 : host->ops->platform_send_init_74_clocks(host, ios->power_mode);
1943 : :
1944 : 0 : host->ops->set_bus_width(host, ios->bus_width);
1945 : :
1946 : : ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL);
1947 : :
1948 [ # # ]: 0 : if (!(host->quirks & SDHCI_QUIRK_NO_HISPD_BIT)) {
1949 [ # # ]: 0 : if (ios->timing == MMC_TIMING_SD_HS ||
1950 : 0 : ios->timing == MMC_TIMING_MMC_HS ||
1951 [ # # ]: 0 : ios->timing == MMC_TIMING_MMC_HS400 ||
1952 [ # # ]: 0 : ios->timing == MMC_TIMING_MMC_HS200 ||
1953 [ # # ]: 0 : ios->timing == MMC_TIMING_MMC_DDR52 ||
1954 [ # # ]: 0 : ios->timing == MMC_TIMING_UHS_SDR50 ||
1955 [ # # ]: 0 : ios->timing == MMC_TIMING_UHS_SDR104 ||
1956 [ # # ]: 0 : ios->timing == MMC_TIMING_UHS_DDR50 ||
1957 : : ios->timing == MMC_TIMING_UHS_SDR25)
1958 : 0 : ctrl |= SDHCI_CTRL_HISPD;
1959 : : else
1960 : 0 : ctrl &= ~SDHCI_CTRL_HISPD;
1961 : : }
1962 : :
1963 [ # # ]: 0 : if (host->version >= SDHCI_SPEC_300) {
1964 : : u16 clk, ctrl_2;
1965 : :
1966 [ # # ]: 0 : if (!host->preset_enabled) {
1967 : : sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
1968 : : /*
1969 : : * We only need to set Driver Strength if the
1970 : : * preset value enable is not set.
1971 : : */
1972 : : ctrl_2 = sdhci_readw(host, SDHCI_HOST_CONTROL2);
1973 : 0 : ctrl_2 &= ~SDHCI_CTRL_DRV_TYPE_MASK;
1974 [ # # ]: 0 : if (ios->drv_type == MMC_SET_DRIVER_TYPE_A)
1975 : 0 : ctrl_2 |= SDHCI_CTRL_DRV_TYPE_A;
1976 [ # # ]: 0 : else if (ios->drv_type == MMC_SET_DRIVER_TYPE_B)
1977 : : ctrl_2 |= SDHCI_CTRL_DRV_TYPE_B;
1978 [ # # ]: 0 : else if (ios->drv_type == MMC_SET_DRIVER_TYPE_C)
1979 : 0 : ctrl_2 |= SDHCI_CTRL_DRV_TYPE_C;
1980 [ # # ]: 0 : else if (ios->drv_type == MMC_SET_DRIVER_TYPE_D)
1981 : 0 : ctrl_2 |= SDHCI_CTRL_DRV_TYPE_D;
1982 : : else {
1983 : 0 : pr_warn("%s: invalid driver type, default to driver type B\n",
1984 : : mmc_hostname(mmc));
1985 : : ctrl_2 |= SDHCI_CTRL_DRV_TYPE_B;
1986 : : }
1987 : :
1988 : : sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2);
1989 : : } else {
1990 : : /*
1991 : : * According to SDHC Spec v3.00, if the Preset Value
1992 : : * Enable in the Host Control 2 register is set, we
1993 : : * need to reset SD Clock Enable before changing High
1994 : : * Speed Enable to avoid generating clock gliches.
1995 : : */
1996 : :
1997 : : /* Reset SD Clock Enable */
1998 : : clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
1999 : 0 : clk &= ~SDHCI_CLOCK_CARD_EN;
2000 : : sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
2001 : :
2002 : : sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
2003 : :
2004 : : /* Re-enable SD Clock */
2005 : 0 : host->ops->set_clock(host, host->clock);
2006 : : }
2007 : :
2008 : : /* Reset SD Clock Enable */
2009 : : clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
2010 : 0 : clk &= ~SDHCI_CLOCK_CARD_EN;
2011 : : sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL);
2012 : :
2013 : 0 : host->ops->set_uhs_signaling(host, ios->timing);
2014 : 0 : host->timing = ios->timing;
2015 : :
2016 [ # # # # ]: 0 : if (!(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN) &&
2017 : 0 : ((ios->timing == MMC_TIMING_UHS_SDR12) ||
2018 : : (ios->timing == MMC_TIMING_UHS_SDR25) ||
2019 : : (ios->timing == MMC_TIMING_UHS_SDR50) ||
2020 : : (ios->timing == MMC_TIMING_UHS_SDR104) ||
2021 : 0 : (ios->timing == MMC_TIMING_UHS_DDR50) ||
2022 : : (ios->timing == MMC_TIMING_MMC_DDR52))) {
2023 : : u16 preset;
2024 : :
2025 : 0 : sdhci_enable_preset_value(host, true);
2026 : 0 : preset = sdhci_get_preset_value(host);
2027 : 0 : ios->drv_type = (preset & SDHCI_PRESET_DRV_MASK)
2028 : 0 : >> SDHCI_PRESET_DRV_SHIFT;
2029 : : }
2030 : :
2031 : : /* Re-enable SD Clock */
2032 : 0 : host->ops->set_clock(host, host->clock);
2033 : : } else
2034 : : sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
2035 : :
2036 : : /*
2037 : : * Some (ENE) controllers go apeshit on some ios operation,
2038 : : * signalling timeout and CRC errors even on CMD0. Resetting
2039 : : * it on each ios seems to solve the problem.
2040 : : */
2041 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS)
2042 : 0 : sdhci_do_reset(host, SDHCI_RESET_CMD | SDHCI_RESET_DATA);
2043 : : }
2044 : : EXPORT_SYMBOL_GPL(sdhci_set_ios);
2045 : :
2046 : 0 : static int sdhci_get_cd(struct mmc_host *mmc)
2047 : : {
2048 : : struct sdhci_host *host = mmc_priv(mmc);
2049 : 0 : int gpio_cd = mmc_gpio_get_cd(mmc);
2050 : :
2051 [ # # ]: 0 : if (host->flags & SDHCI_DEVICE_DEAD)
2052 : : return 0;
2053 : :
2054 : : /* If nonremovable, assume that the card is always present. */
2055 [ # # ]: 0 : if (!mmc_card_is_removable(host->mmc))
2056 : : return 1;
2057 : :
2058 : : /*
2059 : : * Try slot gpio detect, if defined it take precedence
2060 : : * over build in controller functionality
2061 : : */
2062 [ # # ]: 0 : if (gpio_cd >= 0)
2063 : 0 : return !!gpio_cd;
2064 : :
2065 : : /* If polling, assume that the card is always present. */
2066 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION)
2067 : : return 1;
2068 : :
2069 : : /* Host native card detect */
2070 : 0 : return !!(sdhci_readl(host, SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT);
2071 : : }
2072 : :
2073 : 0 : static int sdhci_check_ro(struct sdhci_host *host)
2074 : : {
2075 : : unsigned long flags;
2076 : : int is_readonly;
2077 : :
2078 : 0 : spin_lock_irqsave(&host->lock, flags);
2079 : :
2080 [ # # ]: 0 : if (host->flags & SDHCI_DEVICE_DEAD)
2081 : : is_readonly = 0;
2082 [ # # ]: 0 : else if (host->ops->get_ro)
2083 : 0 : is_readonly = host->ops->get_ro(host);
2084 [ # # ]: 0 : else if (mmc_can_gpio_ro(host->mmc))
2085 : 0 : is_readonly = mmc_gpio_get_ro(host->mmc);
2086 : : else
2087 : 0 : is_readonly = !(sdhci_readl(host, SDHCI_PRESENT_STATE)
2088 : 0 : & SDHCI_WRITE_PROTECT);
2089 : :
2090 : : spin_unlock_irqrestore(&host->lock, flags);
2091 : :
2092 : : /* This quirk needs to be replaced by a callback-function later */
2093 : 0 : return host->quirks & SDHCI_QUIRK_INVERTED_WRITE_PROTECT ?
2094 [ # # ]: 0 : !is_readonly : is_readonly;
2095 : : }
2096 : :
2097 : : #define SAMPLE_COUNT 5
2098 : :
2099 : 0 : static int sdhci_get_ro(struct mmc_host *mmc)
2100 : : {
2101 : : struct sdhci_host *host = mmc_priv(mmc);
2102 : : int i, ro_count;
2103 : :
2104 [ # # ]: 0 : if (!(host->quirks & SDHCI_QUIRK_UNSTABLE_RO_DETECT))
2105 : 0 : return sdhci_check_ro(host);
2106 : :
2107 : : ro_count = 0;
2108 [ # # ]: 0 : for (i = 0; i < SAMPLE_COUNT; i++) {
2109 [ # # ]: 0 : if (sdhci_check_ro(host)) {
2110 [ # # ]: 0 : if (++ro_count > SAMPLE_COUNT / 2)
2111 : : return 1;
2112 : : }
2113 : 0 : msleep(30);
2114 : : }
2115 : : return 0;
2116 : : }
2117 : :
2118 : 0 : static void sdhci_hw_reset(struct mmc_host *mmc)
2119 : : {
2120 : : struct sdhci_host *host = mmc_priv(mmc);
2121 : :
2122 [ # # # # ]: 0 : if (host->ops && host->ops->hw_reset)
2123 : 0 : host->ops->hw_reset(host);
2124 : 0 : }
2125 : :
2126 : 0 : static void sdhci_enable_sdio_irq_nolock(struct sdhci_host *host, int enable)
2127 : : {
2128 [ # # ]: 0 : if (!(host->flags & SDHCI_DEVICE_DEAD)) {
2129 [ # # ]: 0 : if (enable)
2130 : 0 : host->ier |= SDHCI_INT_CARD_INT;
2131 : : else
2132 : 0 : host->ier &= ~SDHCI_INT_CARD_INT;
2133 : :
2134 : 0 : sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
2135 : 0 : sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
2136 : : }
2137 : 0 : }
2138 : :
2139 : 0 : void sdhci_enable_sdio_irq(struct mmc_host *mmc, int enable)
2140 : : {
2141 : : struct sdhci_host *host = mmc_priv(mmc);
2142 : : unsigned long flags;
2143 : :
2144 [ # # ]: 0 : if (enable)
2145 : 0 : pm_runtime_get_noresume(host->mmc->parent);
2146 : :
2147 : 0 : spin_lock_irqsave(&host->lock, flags);
2148 : 0 : sdhci_enable_sdio_irq_nolock(host, enable);
2149 : : spin_unlock_irqrestore(&host->lock, flags);
2150 : :
2151 [ # # ]: 0 : if (!enable)
2152 : 0 : pm_runtime_put_noidle(host->mmc->parent);
2153 : 0 : }
2154 : : EXPORT_SYMBOL_GPL(sdhci_enable_sdio_irq);
2155 : :
2156 : 0 : static void sdhci_ack_sdio_irq(struct mmc_host *mmc)
2157 : : {
2158 : : struct sdhci_host *host = mmc_priv(mmc);
2159 : : unsigned long flags;
2160 : :
2161 : 0 : spin_lock_irqsave(&host->lock, flags);
2162 : 0 : sdhci_enable_sdio_irq_nolock(host, true);
2163 : : spin_unlock_irqrestore(&host->lock, flags);
2164 : 0 : }
2165 : :
2166 : 0 : int sdhci_start_signal_voltage_switch(struct mmc_host *mmc,
2167 : : struct mmc_ios *ios)
2168 : : {
2169 : : struct sdhci_host *host = mmc_priv(mmc);
2170 : : u16 ctrl;
2171 : : int ret;
2172 : :
2173 : : /*
2174 : : * Signal Voltage Switching is only applicable for Host Controllers
2175 : : * v3.00 and above.
2176 : : */
2177 [ # # ]: 0 : if (host->version < SDHCI_SPEC_300)
2178 : : return 0;
2179 : :
2180 : : ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
2181 : :
2182 [ # # # # ]: 0 : switch (ios->signal_voltage) {
2183 : : case MMC_SIGNAL_VOLTAGE_330:
2184 [ # # ]: 0 : if (!(host->flags & SDHCI_SIGNALING_330))
2185 : : return -EINVAL;
2186 : : /* Set 1.8V Signal Enable in the Host Control2 register to 0 */
2187 : 0 : ctrl &= ~SDHCI_CTRL_VDD_180;
2188 : : sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
2189 : :
2190 [ # # ]: 0 : if (!IS_ERR(mmc->supply.vqmmc)) {
2191 : 0 : ret = mmc_regulator_set_vqmmc(mmc, ios);
2192 [ # # ]: 0 : if (ret) {
2193 : 0 : pr_warn("%s: Switching to 3.3V signalling voltage failed\n",
2194 : : mmc_hostname(mmc));
2195 : 0 : return -EIO;
2196 : : }
2197 : : }
2198 : : /* Wait for 5ms */
2199 : 0 : usleep_range(5000, 5500);
2200 : :
2201 : : /* 3.3V regulator output should be stable within 5 ms */
2202 : : ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
2203 [ # # ]: 0 : if (!(ctrl & SDHCI_CTRL_VDD_180))
2204 : : return 0;
2205 : :
2206 : 0 : pr_warn("%s: 3.3V regulator output did not became stable\n",
2207 : : mmc_hostname(mmc));
2208 : :
2209 : 0 : return -EAGAIN;
2210 : : case MMC_SIGNAL_VOLTAGE_180:
2211 [ # # ]: 0 : if (!(host->flags & SDHCI_SIGNALING_180))
2212 : : return -EINVAL;
2213 [ # # ]: 0 : if (!IS_ERR(mmc->supply.vqmmc)) {
2214 : 0 : ret = mmc_regulator_set_vqmmc(mmc, ios);
2215 [ # # ]: 0 : if (ret) {
2216 : 0 : pr_warn("%s: Switching to 1.8V signalling voltage failed\n",
2217 : : mmc_hostname(mmc));
2218 : 0 : return -EIO;
2219 : : }
2220 : : }
2221 : :
2222 : : /*
2223 : : * Enable 1.8V Signal Enable in the Host Control2
2224 : : * register
2225 : : */
2226 : 0 : ctrl |= SDHCI_CTRL_VDD_180;
2227 : : sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
2228 : :
2229 : : /* Some controller need to do more when switching */
2230 [ # # ]: 0 : if (host->ops->voltage_switch)
2231 : 0 : host->ops->voltage_switch(host);
2232 : :
2233 : : /* 1.8V regulator output should be stable within 5 ms */
2234 : : ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
2235 [ # # ]: 0 : if (ctrl & SDHCI_CTRL_VDD_180)
2236 : : return 0;
2237 : :
2238 : 0 : pr_warn("%s: 1.8V regulator output did not became stable\n",
2239 : : mmc_hostname(mmc));
2240 : :
2241 : 0 : return -EAGAIN;
2242 : : case MMC_SIGNAL_VOLTAGE_120:
2243 [ # # ]: 0 : if (!(host->flags & SDHCI_SIGNALING_120))
2244 : : return -EINVAL;
2245 [ # # ]: 0 : if (!IS_ERR(mmc->supply.vqmmc)) {
2246 : 0 : ret = mmc_regulator_set_vqmmc(mmc, ios);
2247 [ # # ]: 0 : if (ret) {
2248 : 0 : pr_warn("%s: Switching to 1.2V signalling voltage failed\n",
2249 : : mmc_hostname(mmc));
2250 : 0 : return -EIO;
2251 : : }
2252 : : }
2253 : : return 0;
2254 : : default:
2255 : : /* No signal voltage switch required */
2256 : : return 0;
2257 : : }
2258 : : }
2259 : : EXPORT_SYMBOL_GPL(sdhci_start_signal_voltage_switch);
2260 : :
2261 : 0 : static int sdhci_card_busy(struct mmc_host *mmc)
2262 : : {
2263 : : struct sdhci_host *host = mmc_priv(mmc);
2264 : : u32 present_state;
2265 : :
2266 : : /* Check whether DAT[0] is 0 */
2267 : : present_state = sdhci_readl(host, SDHCI_PRESENT_STATE);
2268 : :
2269 : 0 : return !(present_state & SDHCI_DATA_0_LVL_MASK);
2270 : : }
2271 : :
2272 : 0 : static int sdhci_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_ios *ios)
2273 : : {
2274 : : struct sdhci_host *host = mmc_priv(mmc);
2275 : : unsigned long flags;
2276 : :
2277 : 0 : spin_lock_irqsave(&host->lock, flags);
2278 : 0 : host->flags |= SDHCI_HS400_TUNING;
2279 : : spin_unlock_irqrestore(&host->lock, flags);
2280 : :
2281 : 0 : return 0;
2282 : : }
2283 : :
2284 : 0 : void sdhci_start_tuning(struct sdhci_host *host)
2285 : : {
2286 : : u16 ctrl;
2287 : :
2288 : : ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
2289 : 0 : ctrl |= SDHCI_CTRL_EXEC_TUNING;
2290 [ # # ]: 0 : if (host->quirks2 & SDHCI_QUIRK2_TUNING_WORK_AROUND)
2291 : 0 : ctrl |= SDHCI_CTRL_TUNED_CLK;
2292 : : sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
2293 : :
2294 : : /*
2295 : : * As per the Host Controller spec v3.00, tuning command
2296 : : * generates Buffer Read Ready interrupt, so enable that.
2297 : : *
2298 : : * Note: The spec clearly says that when tuning sequence
2299 : : * is being performed, the controller does not generate
2300 : : * interrupts other than Buffer Read Ready interrupt. But
2301 : : * to make sure we don't hit a controller bug, we _only_
2302 : : * enable Buffer Read Ready interrupt here.
2303 : : */
2304 : : sdhci_writel(host, SDHCI_INT_DATA_AVAIL, SDHCI_INT_ENABLE);
2305 : : sdhci_writel(host, SDHCI_INT_DATA_AVAIL, SDHCI_SIGNAL_ENABLE);
2306 : 0 : }
2307 : : EXPORT_SYMBOL_GPL(sdhci_start_tuning);
2308 : :
2309 : 0 : void sdhci_end_tuning(struct sdhci_host *host)
2310 : : {
2311 : 0 : sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
2312 : 0 : sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
2313 : 0 : }
2314 : : EXPORT_SYMBOL_GPL(sdhci_end_tuning);
2315 : :
2316 : 0 : void sdhci_reset_tuning(struct sdhci_host *host)
2317 : : {
2318 : : u16 ctrl;
2319 : :
2320 : : ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
2321 : : ctrl &= ~SDHCI_CTRL_TUNED_CLK;
2322 : 0 : ctrl &= ~SDHCI_CTRL_EXEC_TUNING;
2323 : : sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
2324 : 0 : }
2325 : : EXPORT_SYMBOL_GPL(sdhci_reset_tuning);
2326 : :
2327 : 0 : void sdhci_abort_tuning(struct sdhci_host *host, u32 opcode)
2328 : : {
2329 : : sdhci_reset_tuning(host);
2330 : :
2331 : 0 : sdhci_do_reset(host, SDHCI_RESET_CMD);
2332 : 0 : sdhci_do_reset(host, SDHCI_RESET_DATA);
2333 : :
2334 : : sdhci_end_tuning(host);
2335 : :
2336 : 0 : mmc_abort_tuning(host->mmc, opcode);
2337 : 0 : }
2338 : : EXPORT_SYMBOL_GPL(sdhci_abort_tuning);
2339 : :
2340 : : /*
2341 : : * We use sdhci_send_tuning() because mmc_send_tuning() is not a good fit. SDHCI
2342 : : * tuning command does not have a data payload (or rather the hardware does it
2343 : : * automatically) so mmc_send_tuning() will return -EIO. Also the tuning command
2344 : : * interrupt setup is different to other commands and there is no timeout
2345 : : * interrupt so special handling is needed.
2346 : : */
2347 : 0 : void sdhci_send_tuning(struct sdhci_host *host, u32 opcode)
2348 : : {
2349 : 0 : struct mmc_host *mmc = host->mmc;
2350 : 0 : struct mmc_command cmd = {};
2351 : 0 : struct mmc_request mrq = {};
2352 : : unsigned long flags;
2353 : 0 : u32 b = host->sdma_boundary;
2354 : :
2355 : 0 : spin_lock_irqsave(&host->lock, flags);
2356 : :
2357 : 0 : cmd.opcode = opcode;
2358 : 0 : cmd.flags = MMC_RSP_R1 | MMC_CMD_ADTC;
2359 : 0 : cmd.mrq = &mrq;
2360 : :
2361 : 0 : mrq.cmd = &cmd;
2362 : : /*
2363 : : * In response to CMD19, the card sends 64 bytes of tuning
2364 : : * block to the Host Controller. So we set the block size
2365 : : * to 64 here.
2366 : : */
2367 [ # # # # ]: 0 : if (cmd.opcode == MMC_SEND_TUNING_BLOCK_HS200 &&
2368 : 0 : mmc->ios.bus_width == MMC_BUS_WIDTH_8)
2369 : 0 : sdhci_writew(host, SDHCI_MAKE_BLKSZ(b, 128), SDHCI_BLOCK_SIZE);
2370 : : else
2371 : 0 : sdhci_writew(host, SDHCI_MAKE_BLKSZ(b, 64), SDHCI_BLOCK_SIZE);
2372 : :
2373 : : /*
2374 : : * The tuning block is sent by the card to the host controller.
2375 : : * So we set the TRNS_READ bit in the Transfer Mode register.
2376 : : * This also takes care of setting DMA Enable and Multi Block
2377 : : * Select in the same register to 0.
2378 : : */
2379 : : sdhci_writew(host, SDHCI_TRNS_READ, SDHCI_TRANSFER_MODE);
2380 : :
2381 : 0 : sdhci_send_command(host, &cmd);
2382 : :
2383 : 0 : host->cmd = NULL;
2384 : :
2385 : 0 : sdhci_del_timer(host, &mrq);
2386 : :
2387 : 0 : host->tuning_done = 0;
2388 : :
2389 : : spin_unlock_irqrestore(&host->lock, flags);
2390 : :
2391 : : /* Wait for Buffer Read Ready interrupt */
2392 [ # # # # : 0 : wait_event_timeout(host->buf_ready_int, (host->tuning_done == 1),
# # # # ]
2393 : : msecs_to_jiffies(50));
2394 : :
2395 : 0 : }
2396 : : EXPORT_SYMBOL_GPL(sdhci_send_tuning);
2397 : :
2398 : 0 : static int __sdhci_execute_tuning(struct sdhci_host *host, u32 opcode)
2399 : : {
2400 : : int i;
2401 : :
2402 : : /*
2403 : : * Issue opcode repeatedly till Execute Tuning is set to 0 or the number
2404 : : * of loops reaches tuning loop count.
2405 : : */
2406 [ # # ]: 0 : for (i = 0; i < host->tuning_loop_count; i++) {
2407 : : u16 ctrl;
2408 : :
2409 : 0 : sdhci_send_tuning(host, opcode);
2410 : :
2411 [ # # ]: 0 : if (!host->tuning_done) {
2412 : : pr_debug("%s: Tuning timeout, falling back to fixed sampling clock\n",
2413 : : mmc_hostname(host->mmc));
2414 : 0 : sdhci_abort_tuning(host, opcode);
2415 : 0 : return -ETIMEDOUT;
2416 : : }
2417 : :
2418 : : /* Spec does not require a delay between tuning cycles */
2419 [ # # ]: 0 : if (host->tuning_delay > 0)
2420 [ # # # # : 0 : mdelay(host->tuning_delay);
# # # # #
# ]
2421 : :
2422 : : ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
2423 [ # # ]: 0 : if (!(ctrl & SDHCI_CTRL_EXEC_TUNING)) {
2424 [ # # ]: 0 : if (ctrl & SDHCI_CTRL_TUNED_CLK)
2425 : : return 0; /* Success! */
2426 : : break;
2427 : : }
2428 : :
2429 : : }
2430 : :
2431 : 0 : pr_info("%s: Tuning failed, falling back to fixed sampling clock\n",
2432 : : mmc_hostname(host->mmc));
2433 : : sdhci_reset_tuning(host);
2434 : 0 : return -EAGAIN;
2435 : : }
2436 : :
2437 : 0 : int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
2438 : : {
2439 : : struct sdhci_host *host = mmc_priv(mmc);
2440 : : int err = 0;
2441 : : unsigned int tuning_count = 0;
2442 : : bool hs400_tuning;
2443 : :
2444 : 0 : hs400_tuning = host->flags & SDHCI_HS400_TUNING;
2445 : :
2446 [ # # ]: 0 : if (host->tuning_mode == SDHCI_TUNING_MODE_1)
2447 : 0 : tuning_count = host->tuning_count;
2448 : :
2449 : : /*
2450 : : * The Host Controller needs tuning in case of SDR104 and DDR50
2451 : : * mode, and for SDR50 mode when Use Tuning for SDR50 is set in
2452 : : * the Capabilities register.
2453 : : * If the Host Controller supports the HS200 mode then the
2454 : : * tuning function has to be executed.
2455 : : */
2456 [ # # # # : 0 : switch (host->timing) {
# ]
2457 : : /* HS400 tuning is done in HS200 mode */
2458 : : case MMC_TIMING_MMC_HS400:
2459 : : err = -EINVAL;
2460 : 0 : goto out;
2461 : :
2462 : : case MMC_TIMING_MMC_HS200:
2463 : : /*
2464 : : * Periodic re-tuning for HS400 is not expected to be needed, so
2465 : : * disable it here.
2466 : : */
2467 [ # # ]: 0 : if (hs400_tuning)
2468 : : tuning_count = 0;
2469 : : break;
2470 : :
2471 : : case MMC_TIMING_UHS_SDR104:
2472 : : case MMC_TIMING_UHS_DDR50:
2473 : : break;
2474 : :
2475 : : case MMC_TIMING_UHS_SDR50:
2476 [ # # ]: 0 : if (host->flags & SDHCI_SDR50_NEEDS_TUNING)
2477 : : break;
2478 : : /* FALLTHROUGH */
2479 : :
2480 : : default:
2481 : : goto out;
2482 : : }
2483 : :
2484 [ # # ]: 0 : if (host->ops->platform_execute_tuning) {
2485 : 0 : err = host->ops->platform_execute_tuning(host, opcode);
2486 : 0 : goto out;
2487 : : }
2488 : :
2489 : 0 : host->mmc->retune_period = tuning_count;
2490 : :
2491 [ # # ]: 0 : if (host->tuning_delay < 0)
2492 : 0 : host->tuning_delay = opcode == MMC_SEND_TUNING_BLOCK;
2493 : :
2494 : 0 : sdhci_start_tuning(host);
2495 : :
2496 : 0 : host->tuning_err = __sdhci_execute_tuning(host, opcode);
2497 : :
2498 : : sdhci_end_tuning(host);
2499 : : out:
2500 : 0 : host->flags &= ~SDHCI_HS400_TUNING;
2501 : :
2502 : 0 : return err;
2503 : : }
2504 : : EXPORT_SYMBOL_GPL(sdhci_execute_tuning);
2505 : :
2506 : 0 : static void sdhci_enable_preset_value(struct sdhci_host *host, bool enable)
2507 : : {
2508 : : /* Host Controller v3.00 defines preset value registers */
2509 [ # # ]: 0 : if (host->version < SDHCI_SPEC_300)
2510 : 0 : return;
2511 : :
2512 : : /*
2513 : : * We only enable or disable Preset Value if they are not already
2514 : : * enabled or disabled respectively. Otherwise, we bail out.
2515 : : */
2516 [ # # ]: 0 : if (host->preset_enabled != enable) {
2517 : : u16 ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
2518 : :
2519 [ # # ]: 0 : if (enable)
2520 : 0 : ctrl |= SDHCI_CTRL_PRESET_VAL_ENABLE;
2521 : : else
2522 : 0 : ctrl &= ~SDHCI_CTRL_PRESET_VAL_ENABLE;
2523 : :
2524 : : sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
2525 : :
2526 [ # # ]: 0 : if (enable)
2527 : 0 : host->flags |= SDHCI_PV_ENABLED;
2528 : : else
2529 : 0 : host->flags &= ~SDHCI_PV_ENABLED;
2530 : :
2531 : 0 : host->preset_enabled = enable;
2532 : : }
2533 : : }
2534 : :
2535 : 0 : static void sdhci_post_req(struct mmc_host *mmc, struct mmc_request *mrq,
2536 : : int err)
2537 : : {
2538 : : struct sdhci_host *host = mmc_priv(mmc);
2539 : 0 : struct mmc_data *data = mrq->data;
2540 : :
2541 [ # # ]: 0 : if (data->host_cookie != COOKIE_UNMAPPED)
2542 : 0 : dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
2543 : : mmc_get_dma_dir(data));
2544 : :
2545 : 0 : data->host_cookie = COOKIE_UNMAPPED;
2546 : 0 : }
2547 : :
2548 : 0 : static void sdhci_pre_req(struct mmc_host *mmc, struct mmc_request *mrq)
2549 : : {
2550 : : struct sdhci_host *host = mmc_priv(mmc);
2551 : :
2552 : 0 : mrq->data->host_cookie = COOKIE_UNMAPPED;
2553 : :
2554 : : /*
2555 : : * No pre-mapping in the pre hook if we're using the bounce buffer,
2556 : : * for that we would need two bounce buffers since one buffer is
2557 : : * in flight when this is getting called.
2558 : : */
2559 [ # # # # ]: 0 : if (host->flags & SDHCI_REQ_USE_DMA && !host->bounce_buffer)
2560 : 0 : sdhci_pre_dma_transfer(host, mrq->data, COOKIE_PRE_MAPPED);
2561 : 0 : }
2562 : :
2563 : 0 : static void sdhci_error_out_mrqs(struct sdhci_host *host, int err)
2564 : : {
2565 [ # # ]: 0 : if (host->data_cmd) {
2566 : 0 : host->data_cmd->error = err;
2567 : 0 : sdhci_finish_mrq(host, host->data_cmd->mrq);
2568 : : }
2569 : :
2570 [ # # ]: 0 : if (host->cmd) {
2571 : 0 : host->cmd->error = err;
2572 : 0 : sdhci_finish_mrq(host, host->cmd->mrq);
2573 : : }
2574 : 0 : }
2575 : :
2576 : 0 : static void sdhci_card_event(struct mmc_host *mmc)
2577 : : {
2578 : : struct sdhci_host *host = mmc_priv(mmc);
2579 : : unsigned long flags;
2580 : : int present;
2581 : :
2582 : : /* First check if client has provided their own card event */
2583 [ # # ]: 0 : if (host->ops->card_event)
2584 : 0 : host->ops->card_event(host);
2585 : :
2586 : 0 : present = mmc->ops->get_cd(mmc);
2587 : :
2588 : 0 : spin_lock_irqsave(&host->lock, flags);
2589 : :
2590 : : /* Check sdhci_has_requests() first in case we are runtime suspended */
2591 [ # # # # ]: 0 : if (sdhci_has_requests(host) && !present) {
2592 : 0 : pr_err("%s: Card removed during transfer!\n",
2593 : : mmc_hostname(host->mmc));
2594 : 0 : pr_err("%s: Resetting controller.\n",
2595 : : mmc_hostname(host->mmc));
2596 : :
2597 : 0 : sdhci_do_reset(host, SDHCI_RESET_CMD);
2598 : 0 : sdhci_do_reset(host, SDHCI_RESET_DATA);
2599 : :
2600 : 0 : sdhci_error_out_mrqs(host, -ENOMEDIUM);
2601 : : }
2602 : :
2603 : : spin_unlock_irqrestore(&host->lock, flags);
2604 : 0 : }
2605 : :
2606 : : static const struct mmc_host_ops sdhci_ops = {
2607 : : .request = sdhci_request,
2608 : : .post_req = sdhci_post_req,
2609 : : .pre_req = sdhci_pre_req,
2610 : : .set_ios = sdhci_set_ios,
2611 : : .get_cd = sdhci_get_cd,
2612 : : .get_ro = sdhci_get_ro,
2613 : : .hw_reset = sdhci_hw_reset,
2614 : : .enable_sdio_irq = sdhci_enable_sdio_irq,
2615 : : .ack_sdio_irq = sdhci_ack_sdio_irq,
2616 : : .start_signal_voltage_switch = sdhci_start_signal_voltage_switch,
2617 : : .prepare_hs400_tuning = sdhci_prepare_hs400_tuning,
2618 : : .execute_tuning = sdhci_execute_tuning,
2619 : : .card_event = sdhci_card_event,
2620 : : .card_busy = sdhci_card_busy,
2621 : : };
2622 : :
2623 : : /*****************************************************************************\
2624 : : * *
2625 : : * Request done *
2626 : : * *
2627 : : \*****************************************************************************/
2628 : :
2629 : 0 : static bool sdhci_request_done(struct sdhci_host *host)
2630 : : {
2631 : : unsigned long flags;
2632 : : struct mmc_request *mrq;
2633 : : int i;
2634 : :
2635 : 0 : spin_lock_irqsave(&host->lock, flags);
2636 : :
2637 [ # # ]: 0 : for (i = 0; i < SDHCI_MAX_MRQS; i++) {
2638 : 0 : mrq = host->mrqs_done[i];
2639 [ # # ]: 0 : if (mrq)
2640 : : break;
2641 : : }
2642 : :
2643 [ # # ]: 0 : if (!mrq) {
2644 : : spin_unlock_irqrestore(&host->lock, flags);
2645 : 0 : return true;
2646 : : }
2647 : :
2648 : : /*
2649 : : * Always unmap the data buffers if they were mapped by
2650 : : * sdhci_prepare_data() whenever we finish with a request.
2651 : : * This avoids leaking DMA mappings on error.
2652 : : */
2653 [ # # ]: 0 : if (host->flags & SDHCI_REQ_USE_DMA) {
2654 : 0 : struct mmc_data *data = mrq->data;
2655 : :
2656 [ # # # # ]: 0 : if (data && data->host_cookie == COOKIE_MAPPED) {
2657 [ # # ]: 0 : if (host->bounce_buffer) {
2658 : : /*
2659 : : * On reads, copy the bounced data into the
2660 : : * sglist
2661 : : */
2662 [ # # ]: 0 : if (mmc_get_dma_dir(data) == DMA_FROM_DEVICE) {
2663 : 0 : unsigned int length = data->bytes_xfered;
2664 : :
2665 [ # # ]: 0 : if (length > host->bounce_buffer_size) {
2666 : 0 : pr_err("%s: bounce buffer is %u bytes but DMA claims to have transferred %u bytes\n",
2667 : : mmc_hostname(host->mmc),
2668 : : host->bounce_buffer_size,
2669 : : data->bytes_xfered);
2670 : : /* Cap it down and continue */
2671 : 0 : length = host->bounce_buffer_size;
2672 : : }
2673 : 0 : dma_sync_single_for_cpu(
2674 : 0 : host->mmc->parent,
2675 : : host->bounce_addr,
2676 : : host->bounce_buffer_size,
2677 : : DMA_FROM_DEVICE);
2678 : 0 : sg_copy_from_buffer(data->sg,
2679 : : data->sg_len,
2680 : 0 : host->bounce_buffer,
2681 : : length);
2682 : : } else {
2683 : : /* No copying, just switch ownership */
2684 : 0 : dma_sync_single_for_cpu(
2685 : 0 : host->mmc->parent,
2686 : : host->bounce_addr,
2687 : : host->bounce_buffer_size,
2688 : : mmc_get_dma_dir(data));
2689 : : }
2690 : : } else {
2691 : : /* Unmap the raw data */
2692 : 0 : dma_unmap_sg(mmc_dev(host->mmc), data->sg,
2693 : : data->sg_len,
2694 : : mmc_get_dma_dir(data));
2695 : : }
2696 : 0 : data->host_cookie = COOKIE_UNMAPPED;
2697 : : }
2698 : : }
2699 : :
2700 : : /*
2701 : : * The controller needs a reset of internal state machines
2702 : : * upon error conditions.
2703 : : */
2704 [ # # ]: 0 : if (sdhci_needs_reset(host, mrq)) {
2705 : : /*
2706 : : * Do not finish until command and data lines are available for
2707 : : * reset. Note there can only be one other mrq, so it cannot
2708 : : * also be in mrqs_done, otherwise host->cmd and host->data_cmd
2709 : : * would both be null.
2710 : : */
2711 [ # # # # ]: 0 : if (host->cmd || host->data_cmd) {
2712 : : spin_unlock_irqrestore(&host->lock, flags);
2713 : 0 : return true;
2714 : : }
2715 : :
2716 : : /* Some controllers need this kick or reset won't work here */
2717 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_CLOCK_BEFORE_RESET)
2718 : : /* This is to force an update */
2719 : 0 : host->ops->set_clock(host, host->clock);
2720 : :
2721 : : /* Spec says we should do both at the same time, but Ricoh
2722 : : controllers do not like that. */
2723 : 0 : sdhci_do_reset(host, SDHCI_RESET_CMD);
2724 : 0 : sdhci_do_reset(host, SDHCI_RESET_DATA);
2725 : :
2726 : 0 : host->pending_reset = false;
2727 : : }
2728 : :
2729 : 0 : host->mrqs_done[i] = NULL;
2730 : :
2731 : : spin_unlock_irqrestore(&host->lock, flags);
2732 : :
2733 : 0 : mmc_request_done(host->mmc, mrq);
2734 : :
2735 : 0 : return false;
2736 : : }
2737 : :
2738 : 0 : static void sdhci_complete_work(struct work_struct *work)
2739 : : {
2740 : 0 : struct sdhci_host *host = container_of(work, struct sdhci_host,
2741 : : complete_work);
2742 : :
2743 [ # # ]: 0 : while (!sdhci_request_done(host))
2744 : : ;
2745 : 0 : }
2746 : :
2747 : 0 : static void sdhci_timeout_timer(struct timer_list *t)
2748 : : {
2749 : : struct sdhci_host *host;
2750 : : unsigned long flags;
2751 : :
2752 : 0 : host = from_timer(host, t, timer);
2753 : :
2754 : 0 : spin_lock_irqsave(&host->lock, flags);
2755 : :
2756 [ # # # # ]: 0 : if (host->cmd && !sdhci_data_line_cmd(host->cmd)) {
2757 : : pr_debug("%s: Timeout waiting for hardware cmd interrupt.\n",
2758 : : mmc_hostname(host->mmc));
2759 : : sdhci_dumpregs(host);
2760 : :
2761 : 0 : host->cmd->error = -ETIMEDOUT;
2762 : 0 : sdhci_finish_mrq(host, host->cmd->mrq);
2763 : : }
2764 : :
2765 : : spin_unlock_irqrestore(&host->lock, flags);
2766 : 0 : }
2767 : :
2768 : 0 : static void sdhci_timeout_data_timer(struct timer_list *t)
2769 : : {
2770 : : struct sdhci_host *host;
2771 : : unsigned long flags;
2772 : :
2773 : 0 : host = from_timer(host, t, data_timer);
2774 : :
2775 : 0 : spin_lock_irqsave(&host->lock, flags);
2776 : :
2777 [ # # # # : 0 : if (host->data || host->data_cmd ||
# # ]
2778 [ # # ]: 0 : (host->cmd && sdhci_data_line_cmd(host->cmd))) {
2779 : : pr_debug("%s: Timeout waiting for hardware interrupt.\n",
2780 : : mmc_hostname(host->mmc));
2781 : : sdhci_dumpregs(host);
2782 : :
2783 [ # # ]: 0 : if (host->data) {
2784 : 0 : host->data->error = -ETIMEDOUT;
2785 : 0 : sdhci_finish_data(host);
2786 : 0 : queue_work(host->complete_wq, &host->complete_work);
2787 [ # # ]: 0 : } else if (host->data_cmd) {
2788 : 0 : host->data_cmd->error = -ETIMEDOUT;
2789 : 0 : sdhci_finish_mrq(host, host->data_cmd->mrq);
2790 : : } else {
2791 : 0 : host->cmd->error = -ETIMEDOUT;
2792 : 0 : sdhci_finish_mrq(host, host->cmd->mrq);
2793 : : }
2794 : : }
2795 : :
2796 : : spin_unlock_irqrestore(&host->lock, flags);
2797 : 0 : }
2798 : :
2799 : : /*****************************************************************************\
2800 : : * *
2801 : : * Interrupt handling *
2802 : : * *
2803 : : \*****************************************************************************/
2804 : :
2805 : 0 : static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask, u32 *intmask_p)
2806 : : {
2807 : : /* Handle auto-CMD12 error */
2808 [ # # # # ]: 0 : if (intmask & SDHCI_INT_AUTO_CMD_ERR && host->data_cmd) {
2809 : 0 : struct mmc_request *mrq = host->data_cmd->mrq;
2810 : : u16 auto_cmd_status = sdhci_readw(host, SDHCI_AUTO_CMD_STATUS);
2811 : 0 : int data_err_bit = (auto_cmd_status & SDHCI_AUTO_CMD_TIMEOUT) ?
2812 [ # # ]: 0 : SDHCI_INT_DATA_TIMEOUT :
2813 : : SDHCI_INT_DATA_CRC;
2814 : :
2815 : : /* Treat auto-CMD12 error the same as data error */
2816 [ # # # # ]: 0 : if (!mrq->sbc && (host->flags & SDHCI_AUTO_CMD12)) {
2817 : 0 : *intmask_p |= data_err_bit;
2818 : 0 : return;
2819 : : }
2820 : : }
2821 : :
2822 [ # # ]: 0 : if (!host->cmd) {
2823 : : /*
2824 : : * SDHCI recovers from errors by resetting the cmd and data
2825 : : * circuits. Until that is done, there very well might be more
2826 : : * interrupts, so ignore them in that case.
2827 : : */
2828 [ # # ]: 0 : if (host->pending_reset)
2829 : : return;
2830 : 0 : pr_err("%s: Got command interrupt 0x%08x even though no command operation was in progress.\n",
2831 : : mmc_hostname(host->mmc), (unsigned)intmask);
2832 : : sdhci_dumpregs(host);
2833 : : return;
2834 : : }
2835 : :
2836 [ # # ]: 0 : if (intmask & (SDHCI_INT_TIMEOUT | SDHCI_INT_CRC |
2837 : : SDHCI_INT_END_BIT | SDHCI_INT_INDEX)) {
2838 [ # # ]: 0 : if (intmask & SDHCI_INT_TIMEOUT)
2839 : 0 : host->cmd->error = -ETIMEDOUT;
2840 : : else
2841 : 0 : host->cmd->error = -EILSEQ;
2842 : :
2843 : : /* Treat data command CRC error the same as data CRC error */
2844 [ # # # # ]: 0 : if (host->cmd->data &&
2845 : 0 : (intmask & (SDHCI_INT_CRC | SDHCI_INT_TIMEOUT)) ==
2846 : : SDHCI_INT_CRC) {
2847 : 0 : host->cmd = NULL;
2848 : 0 : *intmask_p |= SDHCI_INT_DATA_CRC;
2849 : 0 : return;
2850 : : }
2851 : :
2852 : 0 : __sdhci_finish_mrq(host, host->cmd->mrq);
2853 : 0 : return;
2854 : : }
2855 : :
2856 : : /* Handle auto-CMD23 error */
2857 [ # # ]: 0 : if (intmask & SDHCI_INT_AUTO_CMD_ERR) {
2858 : 0 : struct mmc_request *mrq = host->cmd->mrq;
2859 : : u16 auto_cmd_status = sdhci_readw(host, SDHCI_AUTO_CMD_STATUS);
2860 : 0 : int err = (auto_cmd_status & SDHCI_AUTO_CMD_TIMEOUT) ?
2861 [ # # ]: 0 : -ETIMEDOUT :
2862 : : -EILSEQ;
2863 : :
2864 [ # # # # ]: 0 : if (mrq->sbc && (host->flags & SDHCI_AUTO_CMD23)) {
2865 : 0 : mrq->sbc->error = err;
2866 : 0 : __sdhci_finish_mrq(host, mrq);
2867 : 0 : return;
2868 : : }
2869 : : }
2870 : :
2871 [ # # ]: 0 : if (intmask & SDHCI_INT_RESPONSE)
2872 : 0 : sdhci_finish_command(host);
2873 : : }
2874 : :
2875 : : static void sdhci_adma_show_error(struct sdhci_host *host)
2876 : : {
2877 : 0 : void *desc = host->adma_table;
2878 : : dma_addr_t dma = host->adma_addr;
2879 : :
2880 : : sdhci_dumpregs(host);
2881 : :
2882 : : while (true) {
2883 : : struct sdhci_adma2_64_desc *dma_desc = desc;
2884 : :
2885 : : if (host->flags & SDHCI_USE_64_BIT_DMA)
2886 : : SDHCI_DUMP("%08llx: DMA 0x%08x%08x, LEN 0x%04x, Attr=0x%02x\n",
2887 : : (unsigned long long)dma,
2888 : : le32_to_cpu(dma_desc->addr_hi),
2889 : : le32_to_cpu(dma_desc->addr_lo),
2890 : : le16_to_cpu(dma_desc->len),
2891 : : le16_to_cpu(dma_desc->cmd));
2892 : : else
2893 : : SDHCI_DUMP("%08llx: DMA 0x%08x, LEN 0x%04x, Attr=0x%02x\n",
2894 : : (unsigned long long)dma,
2895 : : le32_to_cpu(dma_desc->addr_lo),
2896 : : le16_to_cpu(dma_desc->len),
2897 : : le16_to_cpu(dma_desc->cmd));
2898 : :
2899 : 0 : desc += host->desc_sz;
2900 : : dma += host->desc_sz;
2901 : :
2902 [ # # ]: 0 : if (dma_desc->cmd & cpu_to_le16(ADMA2_END))
2903 : : break;
2904 : : }
2905 : : }
2906 : :
2907 : 0 : static void sdhci_data_irq(struct sdhci_host *host, u32 intmask)
2908 : : {
2909 : : u32 command;
2910 : :
2911 : : /* CMD19 generates _only_ Buffer Read Ready interrupt */
2912 [ # # ]: 0 : if (intmask & SDHCI_INT_DATA_AVAIL) {
2913 : 0 : command = SDHCI_GET_CMD(sdhci_readw(host, SDHCI_COMMAND));
2914 [ # # ]: 0 : if (command == MMC_SEND_TUNING_BLOCK ||
2915 : 0 : command == MMC_SEND_TUNING_BLOCK_HS200) {
2916 : 0 : host->tuning_done = 1;
2917 : 0 : wake_up(&host->buf_ready_int);
2918 : 0 : return;
2919 : : }
2920 : : }
2921 : :
2922 [ # # ]: 0 : if (!host->data) {
2923 : 0 : struct mmc_command *data_cmd = host->data_cmd;
2924 : :
2925 : : /*
2926 : : * The "data complete" interrupt is also used to
2927 : : * indicate that a busy state has ended. See comment
2928 : : * above in sdhci_cmd_irq().
2929 : : */
2930 [ # # # # ]: 0 : if (data_cmd && (data_cmd->flags & MMC_RSP_BUSY)) {
2931 [ # # ]: 0 : if (intmask & SDHCI_INT_DATA_TIMEOUT) {
2932 : 0 : host->data_cmd = NULL;
2933 : 0 : data_cmd->error = -ETIMEDOUT;
2934 : 0 : __sdhci_finish_mrq(host, data_cmd->mrq);
2935 : 0 : return;
2936 : : }
2937 [ # # ]: 0 : if (intmask & SDHCI_INT_DATA_END) {
2938 : 0 : host->data_cmd = NULL;
2939 : : /*
2940 : : * Some cards handle busy-end interrupt
2941 : : * before the command completed, so make
2942 : : * sure we do things in the proper order.
2943 : : */
2944 [ # # ]: 0 : if (host->cmd == data_cmd)
2945 : : return;
2946 : :
2947 : 0 : __sdhci_finish_mrq(host, data_cmd->mrq);
2948 : 0 : return;
2949 : : }
2950 : : }
2951 : :
2952 : : /*
2953 : : * SDHCI recovers from errors by resetting the cmd and data
2954 : : * circuits. Until that is done, there very well might be more
2955 : : * interrupts, so ignore them in that case.
2956 : : */
2957 [ # # ]: 0 : if (host->pending_reset)
2958 : : return;
2959 : :
2960 : 0 : pr_err("%s: Got data interrupt 0x%08x even though no data operation was in progress.\n",
2961 : : mmc_hostname(host->mmc), (unsigned)intmask);
2962 : : sdhci_dumpregs(host);
2963 : :
2964 : : return;
2965 : : }
2966 : :
2967 [ # # ]: 0 : if (intmask & SDHCI_INT_DATA_TIMEOUT)
2968 : 0 : host->data->error = -ETIMEDOUT;
2969 [ # # ]: 0 : else if (intmask & SDHCI_INT_DATA_END_BIT)
2970 : 0 : host->data->error = -EILSEQ;
2971 [ # # # # ]: 0 : else if ((intmask & SDHCI_INT_DATA_CRC) &&
2972 : 0 : SDHCI_GET_CMD(sdhci_readw(host, SDHCI_COMMAND))
2973 : : != MMC_BUS_TEST_R)
2974 : 0 : host->data->error = -EILSEQ;
2975 [ # # ]: 0 : else if (intmask & SDHCI_INT_ADMA_ERROR) {
2976 : 0 : pr_err("%s: ADMA error: 0x%08x\n", mmc_hostname(host->mmc),
2977 : : intmask);
2978 : : sdhci_adma_show_error(host);
2979 : 0 : host->data->error = -EIO;
2980 [ # # ]: 0 : if (host->ops->adma_workaround)
2981 : 0 : host->ops->adma_workaround(host, intmask);
2982 : : }
2983 : :
2984 [ # # ]: 0 : if (host->data->error)
2985 : 0 : sdhci_finish_data(host);
2986 : : else {
2987 [ # # ]: 0 : if (intmask & (SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL))
2988 : 0 : sdhci_transfer_pio(host);
2989 : :
2990 : : /*
2991 : : * We currently don't do anything fancy with DMA
2992 : : * boundaries, but as we can't disable the feature
2993 : : * we need to at least restart the transfer.
2994 : : *
2995 : : * According to the spec sdhci_readl(host, SDHCI_DMA_ADDRESS)
2996 : : * should return a valid address to continue from, but as
2997 : : * some controllers are faulty, don't trust them.
2998 : : */
2999 [ # # ]: 0 : if (intmask & SDHCI_INT_DMA_END) {
3000 : : dma_addr_t dmastart, dmanow;
3001 : :
3002 : : dmastart = sdhci_sdma_address(host);
3003 : 0 : dmanow = dmastart + host->data->bytes_xfered;
3004 : : /*
3005 : : * Force update to the next DMA block boundary.
3006 : : */
3007 : 0 : dmanow = (dmanow &
3008 : 0 : ~((dma_addr_t)SDHCI_DEFAULT_BOUNDARY_SIZE - 1)) +
3009 : : SDHCI_DEFAULT_BOUNDARY_SIZE;
3010 : 0 : host->data->bytes_xfered = dmanow - dmastart;
3011 : : DBG("DMA base %pad, transferred 0x%06x bytes, next %pad\n",
3012 : : &dmastart, host->data->bytes_xfered, &dmanow);
3013 : 0 : sdhci_set_sdma_addr(host, dmanow);
3014 : : }
3015 : :
3016 [ # # ]: 0 : if (intmask & SDHCI_INT_DATA_END) {
3017 [ # # ]: 0 : if (host->cmd == host->data_cmd) {
3018 : : /*
3019 : : * Data managed to finish before the
3020 : : * command completed. Make sure we do
3021 : : * things in the proper order.
3022 : : */
3023 : 0 : host->data_early = 1;
3024 : : } else {
3025 : 0 : sdhci_finish_data(host);
3026 : : }
3027 : : }
3028 : : }
3029 : : }
3030 : :
3031 : : static inline bool sdhci_defer_done(struct sdhci_host *host,
3032 : : struct mmc_request *mrq)
3033 : : {
3034 : 0 : struct mmc_data *data = mrq->data;
3035 : :
3036 [ # # # # ]: 0 : return host->pending_reset ||
3037 [ # # # # ]: 0 : ((host->flags & SDHCI_REQ_USE_DMA) && data &&
3038 : 0 : data->host_cookie == COOKIE_MAPPED);
3039 : : }
3040 : :
3041 : 0 : static irqreturn_t sdhci_irq(int irq, void *dev_id)
3042 : : {
3043 : 0 : struct mmc_request *mrqs_done[SDHCI_MAX_MRQS] = {0};
3044 : : irqreturn_t result = IRQ_NONE;
3045 : : struct sdhci_host *host = dev_id;
3046 : : u32 intmask, mask, unexpected = 0;
3047 : : int max_loops = 16;
3048 : : int i;
3049 : :
3050 : : spin_lock(&host->lock);
3051 : :
3052 [ # # ]: 0 : if (host->runtime_suspended) {
3053 : : spin_unlock(&host->lock);
3054 : 0 : return IRQ_NONE;
3055 : : }
3056 : :
3057 : 0 : intmask = sdhci_readl(host, SDHCI_INT_STATUS);
3058 [ # # ]: 0 : if (!intmask || intmask == 0xffffffff) {
3059 : : result = IRQ_NONE;
3060 : : goto out;
3061 : : }
3062 : :
3063 : : do {
3064 : : DBG("IRQ status 0x%08x\n", intmask);
3065 : :
3066 [ # # ]: 0 : if (host->ops->irq) {
3067 : 0 : intmask = host->ops->irq(host, intmask);
3068 [ # # ]: 0 : if (!intmask)
3069 : : goto cont;
3070 : : }
3071 : :
3072 : : /* Clear selected interrupts. */
3073 : 0 : mask = intmask & (SDHCI_INT_CMD_MASK | SDHCI_INT_DATA_MASK |
3074 : : SDHCI_INT_BUS_POWER);
3075 : : sdhci_writel(host, mask, SDHCI_INT_STATUS);
3076 : :
3077 [ # # ]: 0 : if (intmask & (SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE)) {
3078 : 0 : u32 present = sdhci_readl(host, SDHCI_PRESENT_STATE) &
3079 : : SDHCI_CARD_PRESENT;
3080 : :
3081 : : /*
3082 : : * There is a observation on i.mx esdhc. INSERT
3083 : : * bit will be immediately set again when it gets
3084 : : * cleared, if a card is inserted. We have to mask
3085 : : * the irq to prevent interrupt storm which will
3086 : : * freeze the system. And the REMOVE gets the
3087 : : * same situation.
3088 : : *
3089 : : * More testing are needed here to ensure it works
3090 : : * for other platforms though.
3091 : : */
3092 : 0 : host->ier &= ~(SDHCI_INT_CARD_INSERT |
3093 : : SDHCI_INT_CARD_REMOVE);
3094 [ # # ]: 0 : host->ier |= present ? SDHCI_INT_CARD_REMOVE :
3095 : : SDHCI_INT_CARD_INSERT;
3096 : : sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
3097 : 0 : sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
3098 : :
3099 : 0 : sdhci_writel(host, intmask & (SDHCI_INT_CARD_INSERT |
3100 : : SDHCI_INT_CARD_REMOVE), SDHCI_INT_STATUS);
3101 : :
3102 : 0 : host->thread_isr |= intmask & (SDHCI_INT_CARD_INSERT |
3103 : : SDHCI_INT_CARD_REMOVE);
3104 : : result = IRQ_WAKE_THREAD;
3105 : : }
3106 : :
3107 [ # # ]: 0 : if (intmask & SDHCI_INT_CMD_MASK)
3108 : 0 : sdhci_cmd_irq(host, intmask & SDHCI_INT_CMD_MASK, &intmask);
3109 : :
3110 [ # # ]: 0 : if (intmask & SDHCI_INT_DATA_MASK)
3111 : 0 : sdhci_data_irq(host, intmask & SDHCI_INT_DATA_MASK);
3112 : :
3113 [ # # ]: 0 : if (intmask & SDHCI_INT_BUS_POWER)
3114 : 0 : pr_err("%s: Card is consuming too much power!\n",
3115 : : mmc_hostname(host->mmc));
3116 : :
3117 [ # # ]: 0 : if (intmask & SDHCI_INT_RETUNE)
3118 : 0 : mmc_retune_needed(host->mmc);
3119 : :
3120 [ # # # # ]: 0 : if ((intmask & SDHCI_INT_CARD_INT) &&
3121 : 0 : (host->ier & SDHCI_INT_CARD_INT)) {
3122 : 0 : sdhci_enable_sdio_irq_nolock(host, false);
3123 : 0 : sdio_signal_irq(host->mmc);
3124 : : }
3125 : :
3126 : 0 : intmask &= ~(SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE |
3127 : : SDHCI_INT_CMD_MASK | SDHCI_INT_DATA_MASK |
3128 : : SDHCI_INT_ERROR | SDHCI_INT_BUS_POWER |
3129 : : SDHCI_INT_RETUNE | SDHCI_INT_CARD_INT);
3130 : :
3131 [ # # ]: 0 : if (intmask) {
3132 : 0 : unexpected |= intmask;
3133 : : sdhci_writel(host, intmask, SDHCI_INT_STATUS);
3134 : : }
3135 : : cont:
3136 [ # # ]: 0 : if (result == IRQ_NONE)
3137 : : result = IRQ_HANDLED;
3138 : :
3139 : 0 : intmask = sdhci_readl(host, SDHCI_INT_STATUS);
3140 [ # # # # ]: 0 : } while (intmask && --max_loops);
3141 : :
3142 : : /* Determine if mrqs can be completed immediately */
3143 [ # # ]: 0 : for (i = 0; i < SDHCI_MAX_MRQS; i++) {
3144 : 0 : struct mmc_request *mrq = host->mrqs_done[i];
3145 : :
3146 [ # # ]: 0 : if (!mrq)
3147 : 0 : continue;
3148 : :
3149 [ # # ]: 0 : if (sdhci_defer_done(host, mrq)) {
3150 : : result = IRQ_WAKE_THREAD;
3151 : : } else {
3152 : 0 : mrqs_done[i] = mrq;
3153 : 0 : host->mrqs_done[i] = NULL;
3154 : : }
3155 : : }
3156 : : out:
3157 : : spin_unlock(&host->lock);
3158 : :
3159 : : /* Process mrqs ready for immediate completion */
3160 [ # # ]: 0 : for (i = 0; i < SDHCI_MAX_MRQS; i++) {
3161 [ # # ]: 0 : if (mrqs_done[i])
3162 : 0 : mmc_request_done(host->mmc, mrqs_done[i]);
3163 : : }
3164 : :
3165 [ # # ]: 0 : if (unexpected) {
3166 : 0 : pr_err("%s: Unexpected interrupt 0x%08x.\n",
3167 : : mmc_hostname(host->mmc), unexpected);
3168 : : sdhci_dumpregs(host);
3169 : : }
3170 : :
3171 : 0 : return result;
3172 : : }
3173 : :
3174 : 0 : static irqreturn_t sdhci_thread_irq(int irq, void *dev_id)
3175 : : {
3176 : : struct sdhci_host *host = dev_id;
3177 : : unsigned long flags;
3178 : : u32 isr;
3179 : :
3180 [ # # ]: 0 : while (!sdhci_request_done(host))
3181 : : ;
3182 : :
3183 : 0 : spin_lock_irqsave(&host->lock, flags);
3184 : 0 : isr = host->thread_isr;
3185 : 0 : host->thread_isr = 0;
3186 : : spin_unlock_irqrestore(&host->lock, flags);
3187 : :
3188 [ # # ]: 0 : if (isr & (SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE)) {
3189 : 0 : struct mmc_host *mmc = host->mmc;
3190 : :
3191 : 0 : mmc->ops->card_event(mmc);
3192 : 0 : mmc_detect_change(mmc, msecs_to_jiffies(200));
3193 : : }
3194 : :
3195 : 0 : return IRQ_HANDLED;
3196 : : }
3197 : :
3198 : : /*****************************************************************************\
3199 : : * *
3200 : : * Suspend/resume *
3201 : : * *
3202 : : \*****************************************************************************/
3203 : :
3204 : : #ifdef CONFIG_PM
3205 : :
3206 : 0 : static bool sdhci_cd_irq_can_wakeup(struct sdhci_host *host)
3207 : : {
3208 [ # # ]: 0 : return mmc_card_is_removable(host->mmc) &&
3209 [ # # # # ]: 0 : !(host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) &&
3210 : 0 : !mmc_can_gpio_cd(host->mmc);
3211 : : }
3212 : :
3213 : : /*
3214 : : * To enable wakeup events, the corresponding events have to be enabled in
3215 : : * the Interrupt Status Enable register too. See 'Table 1-6: Wakeup Signal
3216 : : * Table' in the SD Host Controller Standard Specification.
3217 : : * It is useless to restore SDHCI_INT_ENABLE state in
3218 : : * sdhci_disable_irq_wakeups() since it will be set by
3219 : : * sdhci_enable_card_detection() or sdhci_init().
3220 : : */
3221 : 0 : static bool sdhci_enable_irq_wakeups(struct sdhci_host *host)
3222 : : {
3223 : : u8 mask = SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE |
3224 : : SDHCI_WAKE_ON_INT;
3225 : : u32 irq_val = 0;
3226 : : u8 wake_val = 0;
3227 : : u8 val;
3228 : :
3229 [ # # ]: 0 : if (sdhci_cd_irq_can_wakeup(host)) {
3230 : : wake_val |= SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE;
3231 : : irq_val |= SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE;
3232 : : }
3233 : :
3234 [ # # ]: 0 : if (mmc_card_wake_sdio_irq(host->mmc)) {
3235 : 0 : wake_val |= SDHCI_WAKE_ON_INT;
3236 : 0 : irq_val |= SDHCI_INT_CARD_INT;
3237 : : }
3238 : :
3239 [ # # ]: 0 : if (!irq_val)
3240 : : return false;
3241 : :
3242 : : val = sdhci_readb(host, SDHCI_WAKE_UP_CONTROL);
3243 : 0 : val &= ~mask;
3244 : 0 : val |= wake_val;
3245 : : sdhci_writeb(host, val, SDHCI_WAKE_UP_CONTROL);
3246 : :
3247 : : sdhci_writel(host, irq_val, SDHCI_INT_ENABLE);
3248 : :
3249 : 0 : host->irq_wake_enabled = !enable_irq_wake(host->irq);
3250 : :
3251 : 0 : return host->irq_wake_enabled;
3252 : : }
3253 : :
3254 : 0 : static void sdhci_disable_irq_wakeups(struct sdhci_host *host)
3255 : : {
3256 : : u8 val;
3257 : : u8 mask = SDHCI_WAKE_ON_INSERT | SDHCI_WAKE_ON_REMOVE
3258 : : | SDHCI_WAKE_ON_INT;
3259 : :
3260 : : val = sdhci_readb(host, SDHCI_WAKE_UP_CONTROL);
3261 : 0 : val &= ~mask;
3262 : : sdhci_writeb(host, val, SDHCI_WAKE_UP_CONTROL);
3263 : :
3264 : 0 : disable_irq_wake(host->irq);
3265 : :
3266 : 0 : host->irq_wake_enabled = false;
3267 : 0 : }
3268 : :
3269 : 0 : int sdhci_suspend_host(struct sdhci_host *host)
3270 : : {
3271 : : sdhci_disable_card_detection(host);
3272 : :
3273 : 0 : mmc_retune_timer_stop(host->mmc);
3274 : :
3275 [ # # # # ]: 0 : if (!device_may_wakeup(mmc_dev(host->mmc)) ||
3276 : 0 : !sdhci_enable_irq_wakeups(host)) {
3277 : 0 : host->ier = 0;
3278 : : sdhci_writel(host, 0, SDHCI_INT_ENABLE);
3279 : : sdhci_writel(host, 0, SDHCI_SIGNAL_ENABLE);
3280 : 0 : free_irq(host->irq, host);
3281 : : }
3282 : :
3283 : 0 : return 0;
3284 : : }
3285 : :
3286 : : EXPORT_SYMBOL_GPL(sdhci_suspend_host);
3287 : :
3288 : 0 : int sdhci_resume_host(struct sdhci_host *host)
3289 : : {
3290 : 0 : struct mmc_host *mmc = host->mmc;
3291 : : int ret = 0;
3292 : :
3293 [ # # ]: 0 : if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA)) {
3294 [ # # ]: 0 : if (host->ops->enable_dma)
3295 : 0 : host->ops->enable_dma(host);
3296 : : }
3297 : :
3298 [ # # # # ]: 0 : if ((host->mmc->pm_flags & MMC_PM_KEEP_POWER) &&
3299 : 0 : (host->quirks2 & SDHCI_QUIRK2_HOST_OFF_CARD_ON)) {
3300 : : /* Card keeps power but host controller does not */
3301 : 0 : sdhci_init(host, 0);
3302 : 0 : host->pwr = 0;
3303 : 0 : host->clock = 0;
3304 : 0 : mmc->ops->set_ios(mmc, &mmc->ios);
3305 : : } else {
3306 : 0 : sdhci_init(host, (host->mmc->pm_flags & MMC_PM_KEEP_POWER));
3307 : : }
3308 : :
3309 [ # # ]: 0 : if (host->irq_wake_enabled) {
3310 : 0 : sdhci_disable_irq_wakeups(host);
3311 : : } else {
3312 : 0 : ret = request_threaded_irq(host->irq, sdhci_irq,
3313 : : sdhci_thread_irq, IRQF_SHARED,
3314 : 0 : mmc_hostname(host->mmc), host);
3315 [ # # ]: 0 : if (ret)
3316 : : return ret;
3317 : : }
3318 : :
3319 : : sdhci_enable_card_detection(host);
3320 : :
3321 : 0 : return ret;
3322 : : }
3323 : :
3324 : : EXPORT_SYMBOL_GPL(sdhci_resume_host);
3325 : :
3326 : 0 : int sdhci_runtime_suspend_host(struct sdhci_host *host)
3327 : : {
3328 : : unsigned long flags;
3329 : :
3330 : 0 : mmc_retune_timer_stop(host->mmc);
3331 : :
3332 : 0 : spin_lock_irqsave(&host->lock, flags);
3333 : 0 : host->ier &= SDHCI_INT_CARD_INT;
3334 : : sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
3335 : 0 : sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
3336 : : spin_unlock_irqrestore(&host->lock, flags);
3337 : :
3338 : 0 : synchronize_hardirq(host->irq);
3339 : :
3340 : 0 : spin_lock_irqsave(&host->lock, flags);
3341 : 0 : host->runtime_suspended = true;
3342 : : spin_unlock_irqrestore(&host->lock, flags);
3343 : :
3344 : 0 : return 0;
3345 : : }
3346 : : EXPORT_SYMBOL_GPL(sdhci_runtime_suspend_host);
3347 : :
3348 : 0 : int sdhci_runtime_resume_host(struct sdhci_host *host, int soft_reset)
3349 : : {
3350 : 0 : struct mmc_host *mmc = host->mmc;
3351 : : unsigned long flags;
3352 : 0 : int host_flags = host->flags;
3353 : :
3354 [ # # ]: 0 : if (host_flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA)) {
3355 [ # # ]: 0 : if (host->ops->enable_dma)
3356 : 0 : host->ops->enable_dma(host);
3357 : : }
3358 : :
3359 : 0 : sdhci_init(host, soft_reset);
3360 : :
3361 [ # # ]: 0 : if (mmc->ios.power_mode != MMC_POWER_UNDEFINED &&
3362 : : mmc->ios.power_mode != MMC_POWER_OFF) {
3363 : : /* Force clock and power re-program */
3364 : 0 : host->pwr = 0;
3365 : 0 : host->clock = 0;
3366 : 0 : mmc->ops->start_signal_voltage_switch(mmc, &mmc->ios);
3367 : 0 : mmc->ops->set_ios(mmc, &mmc->ios);
3368 : :
3369 [ # # # # ]: 0 : if ((host_flags & SDHCI_PV_ENABLED) &&
3370 : 0 : !(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN)) {
3371 : 0 : spin_lock_irqsave(&host->lock, flags);
3372 : 0 : sdhci_enable_preset_value(host, true);
3373 : : spin_unlock_irqrestore(&host->lock, flags);
3374 : : }
3375 : :
3376 [ # # # # ]: 0 : if ((mmc->caps2 & MMC_CAP2_HS400_ES) &&
3377 : 0 : mmc->ops->hs400_enhanced_strobe)
3378 : 0 : mmc->ops->hs400_enhanced_strobe(mmc, &mmc->ios);
3379 : : }
3380 : :
3381 : 0 : spin_lock_irqsave(&host->lock, flags);
3382 : :
3383 : 0 : host->runtime_suspended = false;
3384 : :
3385 : : /* Enable SDIO IRQ */
3386 [ # # ]: 0 : if (sdio_irq_claimed(mmc))
3387 : 0 : sdhci_enable_sdio_irq_nolock(host, true);
3388 : :
3389 : : /* Enable Card Detection */
3390 : : sdhci_enable_card_detection(host);
3391 : :
3392 : : spin_unlock_irqrestore(&host->lock, flags);
3393 : :
3394 : 0 : return 0;
3395 : : }
3396 : : EXPORT_SYMBOL_GPL(sdhci_runtime_resume_host);
3397 : :
3398 : : #endif /* CONFIG_PM */
3399 : :
3400 : : /*****************************************************************************\
3401 : : * *
3402 : : * Command Queue Engine (CQE) helpers *
3403 : : * *
3404 : : \*****************************************************************************/
3405 : :
3406 : 0 : void sdhci_cqe_enable(struct mmc_host *mmc)
3407 : : {
3408 : : struct sdhci_host *host = mmc_priv(mmc);
3409 : : unsigned long flags;
3410 : : u8 ctrl;
3411 : :
3412 : 0 : spin_lock_irqsave(&host->lock, flags);
3413 : :
3414 : : ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL);
3415 : 0 : ctrl &= ~SDHCI_CTRL_DMA_MASK;
3416 : : /*
3417 : : * Host from V4.10 supports ADMA3 DMA type.
3418 : : * ADMA3 performs integrated descriptor which is more suitable
3419 : : * for cmd queuing to fetch both command and transfer descriptors.
3420 : : */
3421 [ # # # # ]: 0 : if (host->v4_mode && (host->caps1 & SDHCI_CAN_DO_ADMA3))
3422 : 0 : ctrl |= SDHCI_CTRL_ADMA3;
3423 [ # # ]: 0 : else if (host->flags & SDHCI_USE_64_BIT_DMA)
3424 : 0 : ctrl |= SDHCI_CTRL_ADMA64;
3425 : : else
3426 : 0 : ctrl |= SDHCI_CTRL_ADMA32;
3427 : : sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
3428 : :
3429 : 0 : sdhci_writew(host, SDHCI_MAKE_BLKSZ(host->sdma_boundary, 512),
3430 : : SDHCI_BLOCK_SIZE);
3431 : :
3432 : : /* Set maximum timeout */
3433 : 0 : sdhci_set_timeout(host, NULL);
3434 : :
3435 : 0 : host->ier = host->cqe_ier;
3436 : :
3437 : : sdhci_writel(host, host->ier, SDHCI_INT_ENABLE);
3438 : 0 : sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE);
3439 : :
3440 : 0 : host->cqe_on = true;
3441 : :
3442 : : pr_debug("%s: sdhci: CQE on, IRQ mask %#x, IRQ status %#x\n",
3443 : : mmc_hostname(mmc), host->ier,
3444 : : sdhci_readl(host, SDHCI_INT_STATUS));
3445 : :
3446 : : spin_unlock_irqrestore(&host->lock, flags);
3447 : 0 : }
3448 : : EXPORT_SYMBOL_GPL(sdhci_cqe_enable);
3449 : :
3450 : 0 : void sdhci_cqe_disable(struct mmc_host *mmc, bool recovery)
3451 : : {
3452 : : struct sdhci_host *host = mmc_priv(mmc);
3453 : : unsigned long flags;
3454 : :
3455 : 0 : spin_lock_irqsave(&host->lock, flags);
3456 : :
3457 : : sdhci_set_default_irqs(host);
3458 : :
3459 : 0 : host->cqe_on = false;
3460 : :
3461 [ # # ]: 0 : if (recovery) {
3462 : 0 : sdhci_do_reset(host, SDHCI_RESET_CMD);
3463 : 0 : sdhci_do_reset(host, SDHCI_RESET_DATA);
3464 : : }
3465 : :
3466 : : pr_debug("%s: sdhci: CQE off, IRQ mask %#x, IRQ status %#x\n",
3467 : : mmc_hostname(mmc), host->ier,
3468 : : sdhci_readl(host, SDHCI_INT_STATUS));
3469 : :
3470 : : spin_unlock_irqrestore(&host->lock, flags);
3471 : 0 : }
3472 : : EXPORT_SYMBOL_GPL(sdhci_cqe_disable);
3473 : :
3474 : 0 : bool sdhci_cqe_irq(struct sdhci_host *host, u32 intmask, int *cmd_error,
3475 : : int *data_error)
3476 : : {
3477 : : u32 mask;
3478 : :
3479 [ # # ]: 0 : if (!host->cqe_on)
3480 : : return false;
3481 : :
3482 [ # # ]: 0 : if (intmask & (SDHCI_INT_INDEX | SDHCI_INT_END_BIT | SDHCI_INT_CRC))
3483 : 0 : *cmd_error = -EILSEQ;
3484 [ # # ]: 0 : else if (intmask & SDHCI_INT_TIMEOUT)
3485 : 0 : *cmd_error = -ETIMEDOUT;
3486 : : else
3487 : 0 : *cmd_error = 0;
3488 : :
3489 [ # # ]: 0 : if (intmask & (SDHCI_INT_DATA_END_BIT | SDHCI_INT_DATA_CRC))
3490 : 0 : *data_error = -EILSEQ;
3491 [ # # ]: 0 : else if (intmask & SDHCI_INT_DATA_TIMEOUT)
3492 : 0 : *data_error = -ETIMEDOUT;
3493 [ # # ]: 0 : else if (intmask & SDHCI_INT_ADMA_ERROR)
3494 : 0 : *data_error = -EIO;
3495 : : else
3496 : 0 : *data_error = 0;
3497 : :
3498 : : /* Clear selected interrupts. */
3499 : 0 : mask = intmask & host->cqe_ier;
3500 : : sdhci_writel(host, mask, SDHCI_INT_STATUS);
3501 : :
3502 [ # # ]: 0 : if (intmask & SDHCI_INT_BUS_POWER)
3503 : 0 : pr_err("%s: Card is consuming too much power!\n",
3504 : : mmc_hostname(host->mmc));
3505 : :
3506 : 0 : intmask &= ~(host->cqe_ier | SDHCI_INT_ERROR);
3507 [ # # ]: 0 : if (intmask) {
3508 : : sdhci_writel(host, intmask, SDHCI_INT_STATUS);
3509 : 0 : pr_err("%s: CQE: Unexpected interrupt 0x%08x.\n",
3510 : : mmc_hostname(host->mmc), intmask);
3511 : : sdhci_dumpregs(host);
3512 : : }
3513 : :
3514 : : return true;
3515 : : }
3516 : : EXPORT_SYMBOL_GPL(sdhci_cqe_irq);
3517 : :
3518 : : /*****************************************************************************\
3519 : : * *
3520 : : * Device allocation/registration *
3521 : : * *
3522 : : \*****************************************************************************/
3523 : :
3524 : 0 : struct sdhci_host *sdhci_alloc_host(struct device *dev,
3525 : : size_t priv_size)
3526 : : {
3527 : : struct mmc_host *mmc;
3528 : : struct sdhci_host *host;
3529 : :
3530 [ # # ]: 0 : WARN_ON(dev == NULL);
3531 : :
3532 : 0 : mmc = mmc_alloc_host(sizeof(struct sdhci_host) + priv_size, dev);
3533 [ # # ]: 0 : if (!mmc)
3534 : : return ERR_PTR(-ENOMEM);
3535 : :
3536 : : host = mmc_priv(mmc);
3537 : 0 : host->mmc = mmc;
3538 : 0 : host->mmc_host_ops = sdhci_ops;
3539 : 0 : mmc->ops = &host->mmc_host_ops;
3540 : :
3541 : 0 : host->flags = SDHCI_SIGNALING_330;
3542 : :
3543 : 0 : host->cqe_ier = SDHCI_CQE_INT_MASK;
3544 : 0 : host->cqe_err_ier = SDHCI_CQE_INT_ERR_MASK;
3545 : :
3546 : 0 : host->tuning_delay = -1;
3547 : 0 : host->tuning_loop_count = MAX_TUNING_LOOP;
3548 : :
3549 : 0 : host->sdma_boundary = SDHCI_DEFAULT_BOUNDARY_ARG;
3550 : :
3551 : : /*
3552 : : * The DMA table descriptor count is calculated as the maximum
3553 : : * number of segments times 2, to allow for an alignment
3554 : : * descriptor for each segment, plus 1 for a nop end descriptor.
3555 : : */
3556 : 0 : host->adma_table_cnt = SDHCI_MAX_SEGS * 2 + 1;
3557 : :
3558 : 0 : return host;
3559 : : }
3560 : :
3561 : : EXPORT_SYMBOL_GPL(sdhci_alloc_host);
3562 : :
3563 : 0 : static int sdhci_set_dma_mask(struct sdhci_host *host)
3564 : : {
3565 : 0 : struct mmc_host *mmc = host->mmc;
3566 : 0 : struct device *dev = mmc_dev(mmc);
3567 : : int ret = -EINVAL;
3568 : :
3569 [ # # ]: 0 : if (host->quirks2 & SDHCI_QUIRK2_BROKEN_64_BIT_DMA)
3570 : 0 : host->flags &= ~SDHCI_USE_64_BIT_DMA;
3571 : :
3572 : : /* Try 64-bit mask if hardware is capable of it */
3573 [ # # ]: 0 : if (host->flags & SDHCI_USE_64_BIT_DMA) {
3574 : 0 : ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));
3575 [ # # ]: 0 : if (ret) {
3576 : 0 : pr_warn("%s: Failed to set 64-bit DMA mask.\n",
3577 : : mmc_hostname(mmc));
3578 : 0 : host->flags &= ~SDHCI_USE_64_BIT_DMA;
3579 : : }
3580 : : }
3581 : :
3582 : : /* 32-bit mask as default & fallback */
3583 [ # # ]: 0 : if (ret) {
3584 : 0 : ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(32));
3585 [ # # ]: 0 : if (ret)
3586 : 0 : pr_warn("%s: Failed to set 32-bit DMA mask.\n",
3587 : : mmc_hostname(mmc));
3588 : : }
3589 : :
3590 : 0 : return ret;
3591 : : }
3592 : :
3593 : 0 : void __sdhci_read_caps(struct sdhci_host *host, const u16 *ver,
3594 : : const u32 *caps, const u32 *caps1)
3595 : : {
3596 : : u16 v;
3597 : 0 : u64 dt_caps_mask = 0;
3598 : 0 : u64 dt_caps = 0;
3599 : :
3600 [ # # ]: 0 : if (host->read_caps)
3601 : 0 : return;
3602 : :
3603 : 0 : host->read_caps = true;
3604 : :
3605 [ # # ]: 0 : if (debug_quirks)
3606 : 0 : host->quirks = debug_quirks;
3607 : :
3608 [ # # ]: 0 : if (debug_quirks2)
3609 : 0 : host->quirks2 = debug_quirks2;
3610 : :
3611 : 0 : sdhci_do_reset(host, SDHCI_RESET_ALL);
3612 : :
3613 [ # # ]: 0 : if (host->v4_mode)
3614 : : sdhci_do_enable_v4_mode(host);
3615 : :
3616 : 0 : of_property_read_u64(mmc_dev(host->mmc)->of_node,
3617 : : "sdhci-caps-mask", &dt_caps_mask);
3618 : 0 : of_property_read_u64(mmc_dev(host->mmc)->of_node,
3619 : : "sdhci-caps", &dt_caps);
3620 : :
3621 [ # # ]: 0 : v = ver ? *ver : sdhci_readw(host, SDHCI_HOST_VERSION);
3622 : 0 : host->version = (v & SDHCI_SPEC_VER_MASK) >> SDHCI_SPEC_VER_SHIFT;
3623 : :
3624 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_MISSING_CAPS)
3625 : : return;
3626 : :
3627 [ # # ]: 0 : if (caps) {
3628 : 0 : host->caps = *caps;
3629 : : } else {
3630 : 0 : host->caps = sdhci_readl(host, SDHCI_CAPABILITIES);
3631 : 0 : host->caps &= ~lower_32_bits(dt_caps_mask);
3632 : 0 : host->caps |= lower_32_bits(dt_caps);
3633 : : }
3634 : :
3635 [ # # ]: 0 : if (host->version < SDHCI_SPEC_300)
3636 : : return;
3637 : :
3638 [ # # ]: 0 : if (caps1) {
3639 : 0 : host->caps1 = *caps1;
3640 : : } else {
3641 : 0 : host->caps1 = sdhci_readl(host, SDHCI_CAPABILITIES_1);
3642 : 0 : host->caps1 &= ~upper_32_bits(dt_caps_mask);
3643 : 0 : host->caps1 |= upper_32_bits(dt_caps);
3644 : : }
3645 : : }
3646 : : EXPORT_SYMBOL_GPL(__sdhci_read_caps);
3647 : :
3648 : 0 : static void sdhci_allocate_bounce_buffer(struct sdhci_host *host)
3649 : : {
3650 : 0 : struct mmc_host *mmc = host->mmc;
3651 : : unsigned int max_blocks;
3652 : : unsigned int bounce_size;
3653 : : int ret;
3654 : :
3655 : : /*
3656 : : * Cap the bounce buffer at 64KB. Using a bigger bounce buffer
3657 : : * has diminishing returns, this is probably because SD/MMC
3658 : : * cards are usually optimized to handle this size of requests.
3659 : : */
3660 : : bounce_size = SZ_64K;
3661 : : /*
3662 : : * Adjust downwards to maximum request size if this is less
3663 : : * than our segment size, else hammer down the maximum
3664 : : * request size to the maximum buffer size.
3665 : : */
3666 [ # # ]: 0 : if (mmc->max_req_size < bounce_size)
3667 : : bounce_size = mmc->max_req_size;
3668 : 0 : max_blocks = bounce_size / 512;
3669 : :
3670 : : /*
3671 : : * When we just support one segment, we can get significant
3672 : : * speedups by the help of a bounce buffer to group scattered
3673 : : * reads/writes together.
3674 : : */
3675 : 0 : host->bounce_buffer = devm_kmalloc(mmc->parent,
3676 : : bounce_size,
3677 : : GFP_KERNEL);
3678 [ # # ]: 0 : if (!host->bounce_buffer) {
3679 : 0 : pr_err("%s: failed to allocate %u bytes for bounce buffer, falling back to single segments\n",
3680 : : mmc_hostname(mmc),
3681 : : bounce_size);
3682 : : /*
3683 : : * Exiting with zero here makes sure we proceed with
3684 : : * mmc->max_segs == 1.
3685 : : */
3686 : 0 : return;
3687 : : }
3688 : :
3689 : 0 : host->bounce_addr = dma_map_single(mmc->parent,
3690 : : host->bounce_buffer,
3691 : : bounce_size,
3692 : : DMA_BIDIRECTIONAL);
3693 : : ret = dma_mapping_error(mmc->parent, host->bounce_addr);
3694 [ # # ]: 0 : if (ret)
3695 : : /* Again fall back to max_segs == 1 */
3696 : : return;
3697 : 0 : host->bounce_buffer_size = bounce_size;
3698 : :
3699 : : /* Lie about this since we're bouncing */
3700 : 0 : mmc->max_segs = max_blocks;
3701 : 0 : mmc->max_seg_size = bounce_size;
3702 : 0 : mmc->max_req_size = bounce_size;
3703 : :
3704 : 0 : pr_info("%s bounce up to %u segments into one, max segment size %u bytes\n",
3705 : : mmc_hostname(mmc), max_blocks, bounce_size);
3706 : : }
3707 : :
3708 : : static inline bool sdhci_can_64bit_dma(struct sdhci_host *host)
3709 : : {
3710 : : /*
3711 : : * According to SD Host Controller spec v4.10, bit[27] added from
3712 : : * version 4.10 in Capabilities Register is used as 64-bit System
3713 : : * Address support for V4 mode.
3714 : : */
3715 [ # # # # ]: 0 : if (host->version >= SDHCI_SPEC_410 && host->v4_mode)
3716 : 0 : return host->caps & SDHCI_CAN_64BIT_V4;
3717 : :
3718 : 0 : return host->caps & SDHCI_CAN_64BIT;
3719 : : }
3720 : :
3721 : 0 : int sdhci_setup_host(struct sdhci_host *host)
3722 : : {
3723 : : struct mmc_host *mmc;
3724 : : u32 max_current_caps;
3725 : : unsigned int ocr_avail;
3726 : : unsigned int override_timeout_clk;
3727 : : u32 max_clk;
3728 : : int ret;
3729 : :
3730 [ # # ]: 0 : WARN_ON(host == NULL);
3731 [ # # ]: 0 : if (host == NULL)
3732 : : return -EINVAL;
3733 : :
3734 : 0 : mmc = host->mmc;
3735 : :
3736 : : /*
3737 : : * If there are external regulators, get them. Note this must be done
3738 : : * early before resetting the host and reading the capabilities so that
3739 : : * the host can take the appropriate action if regulators are not
3740 : : * available.
3741 : : */
3742 : 0 : ret = mmc_regulator_get_supply(mmc);
3743 [ # # ]: 0 : if (ret)
3744 : : return ret;
3745 : :
3746 : : DBG("Version: 0x%08x | Present: 0x%08x\n",
3747 : : sdhci_readw(host, SDHCI_HOST_VERSION),
3748 : : sdhci_readl(host, SDHCI_PRESENT_STATE));
3749 : : DBG("Caps: 0x%08x | Caps_1: 0x%08x\n",
3750 : : sdhci_readl(host, SDHCI_CAPABILITIES),
3751 : : sdhci_readl(host, SDHCI_CAPABILITIES_1));
3752 : :
3753 : : sdhci_read_caps(host);
3754 : :
3755 : 0 : override_timeout_clk = host->timeout_clk;
3756 : :
3757 [ # # ]: 0 : if (host->version > SDHCI_SPEC_420) {
3758 : 0 : pr_err("%s: Unknown controller version (%d). You may experience problems.\n",
3759 : : mmc_hostname(mmc), host->version);
3760 : : }
3761 : :
3762 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_BROKEN_CQE)
3763 : 0 : mmc->caps2 &= ~MMC_CAP2_CQE;
3764 : :
3765 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_FORCE_DMA)
3766 : 0 : host->flags |= SDHCI_USE_SDMA;
3767 [ # # ]: 0 : else if (!(host->caps & SDHCI_CAN_DO_SDMA))
3768 : : DBG("Controller doesn't have SDMA capability\n");
3769 : : else
3770 : 0 : host->flags |= SDHCI_USE_SDMA;
3771 : :
3772 [ # # # # ]: 0 : if ((host->quirks & SDHCI_QUIRK_BROKEN_DMA) &&
3773 : 0 : (host->flags & SDHCI_USE_SDMA)) {
3774 : : DBG("Disabling DMA as it is marked broken\n");
3775 : 0 : host->flags &= ~SDHCI_USE_SDMA;
3776 : : }
3777 : :
3778 [ # # # # ]: 0 : if ((host->version >= SDHCI_SPEC_200) &&
3779 : 0 : (host->caps & SDHCI_CAN_DO_ADMA2))
3780 : 0 : host->flags |= SDHCI_USE_ADMA;
3781 : :
3782 [ # # # # ]: 0 : if ((host->quirks & SDHCI_QUIRK_BROKEN_ADMA) &&
3783 : 0 : (host->flags & SDHCI_USE_ADMA)) {
3784 : : DBG("Disabling ADMA as it is marked broken\n");
3785 : 0 : host->flags &= ~SDHCI_USE_ADMA;
3786 : : }
3787 : :
3788 [ # # ]: 0 : if (sdhci_can_64bit_dma(host))
3789 : 0 : host->flags |= SDHCI_USE_64_BIT_DMA;
3790 : :
3791 [ # # ]: 0 : if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA)) {
3792 [ # # ]: 0 : if (host->ops->set_dma_mask)
3793 : 0 : ret = host->ops->set_dma_mask(host);
3794 : : else
3795 : 0 : ret = sdhci_set_dma_mask(host);
3796 : :
3797 [ # # # # ]: 0 : if (!ret && host->ops->enable_dma)
3798 : 0 : ret = host->ops->enable_dma(host);
3799 : :
3800 [ # # ]: 0 : if (ret) {
3801 : 0 : pr_warn("%s: No suitable DMA available - falling back to PIO\n",
3802 : : mmc_hostname(mmc));
3803 : 0 : host->flags &= ~(SDHCI_USE_SDMA | SDHCI_USE_ADMA);
3804 : :
3805 : : ret = 0;
3806 : : }
3807 : : }
3808 : :
3809 : : /* SDMA does not support 64-bit DMA if v4 mode not set */
3810 [ # # # # ]: 0 : if ((host->flags & SDHCI_USE_64_BIT_DMA) && !host->v4_mode)
3811 : 0 : host->flags &= ~SDHCI_USE_SDMA;
3812 : :
3813 [ # # ]: 0 : if (host->flags & SDHCI_USE_ADMA) {
3814 : : dma_addr_t dma;
3815 : : void *buf;
3816 : :
3817 [ # # ]: 0 : if (host->flags & SDHCI_USE_64_BIT_DMA) {
3818 [ # # ]: 0 : host->adma_table_sz = host->adma_table_cnt *
3819 : 0 : SDHCI_ADMA2_64_DESC_SZ(host);
3820 [ # # ]: 0 : host->desc_sz = SDHCI_ADMA2_64_DESC_SZ(host);
3821 : : } else {
3822 : 0 : host->adma_table_sz = host->adma_table_cnt *
3823 : : SDHCI_ADMA2_32_DESC_SZ;
3824 : 0 : host->desc_sz = SDHCI_ADMA2_32_DESC_SZ;
3825 : : }
3826 : :
3827 : 0 : host->align_buffer_sz = SDHCI_MAX_SEGS * SDHCI_ADMA2_ALIGN;
3828 : : /*
3829 : : * Use zalloc to zero the reserved high 32-bits of 128-bit
3830 : : * descriptors so that they never need to be written.
3831 : : */
3832 : 0 : buf = dma_alloc_coherent(mmc_dev(mmc),
3833 : 0 : host->align_buffer_sz + host->adma_table_sz,
3834 : : &dma, GFP_KERNEL);
3835 [ # # ]: 0 : if (!buf) {
3836 : 0 : pr_warn("%s: Unable to allocate ADMA buffers - falling back to standard DMA\n",
3837 : : mmc_hostname(mmc));
3838 : 0 : host->flags &= ~SDHCI_USE_ADMA;
3839 [ # # ]: 0 : } else if ((dma + host->align_buffer_sz) &
3840 : : (SDHCI_ADMA2_DESC_ALIGN - 1)) {
3841 : 0 : pr_warn("%s: unable to allocate aligned ADMA descriptor\n",
3842 : : mmc_hostname(mmc));
3843 : 0 : host->flags &= ~SDHCI_USE_ADMA;
3844 : 0 : dma_free_coherent(mmc_dev(mmc), host->align_buffer_sz +
3845 : 0 : host->adma_table_sz, buf, dma);
3846 : : } else {
3847 : 0 : host->align_buffer = buf;
3848 : 0 : host->align_addr = dma;
3849 : :
3850 : 0 : host->adma_table = buf + host->align_buffer_sz;
3851 : 0 : host->adma_addr = dma + host->align_buffer_sz;
3852 : : }
3853 : : }
3854 : :
3855 : : /*
3856 : : * If we use DMA, then it's up to the caller to set the DMA
3857 : : * mask, but PIO does not need the hw shim so we set a new
3858 : : * mask here in that case.
3859 : : */
3860 [ # # ]: 0 : if (!(host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA))) {
3861 : 0 : host->dma_mask = DMA_BIT_MASK(64);
3862 : 0 : mmc_dev(mmc)->dma_mask = &host->dma_mask;
3863 : : }
3864 : :
3865 [ # # ]: 0 : if (host->version >= SDHCI_SPEC_300)
3866 : 0 : host->max_clk = (host->caps & SDHCI_CLOCK_V3_BASE_MASK)
3867 : 0 : >> SDHCI_CLOCK_BASE_SHIFT;
3868 : : else
3869 : 0 : host->max_clk = (host->caps & SDHCI_CLOCK_BASE_MASK)
3870 : 0 : >> SDHCI_CLOCK_BASE_SHIFT;
3871 : :
3872 : 0 : host->max_clk *= 1000000;
3873 [ # # # # ]: 0 : if (host->max_clk == 0 || host->quirks &
3874 : : SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN) {
3875 [ # # ]: 0 : if (!host->ops->get_max_clock) {
3876 : 0 : pr_err("%s: Hardware doesn't specify base clock frequency.\n",
3877 : : mmc_hostname(mmc));
3878 : : ret = -ENODEV;
3879 : 0 : goto undma;
3880 : : }
3881 : 0 : host->max_clk = host->ops->get_max_clock(host);
3882 : : }
3883 : :
3884 : : /*
3885 : : * In case of Host Controller v3.00, find out whether clock
3886 : : * multiplier is supported.
3887 : : */
3888 : 0 : host->clk_mul = (host->caps1 & SDHCI_CLOCK_MUL_MASK) >>
3889 : : SDHCI_CLOCK_MUL_SHIFT;
3890 : :
3891 : : /*
3892 : : * In case the value in Clock Multiplier is 0, then programmable
3893 : : * clock mode is not supported, otherwise the actual clock
3894 : : * multiplier is one more than the value of Clock Multiplier
3895 : : * in the Capabilities Register.
3896 : : */
3897 [ # # ]: 0 : if (host->clk_mul)
3898 : 0 : host->clk_mul += 1;
3899 : :
3900 : : /*
3901 : : * Set host parameters.
3902 : : */
3903 : 0 : max_clk = host->max_clk;
3904 : :
3905 [ # # ]: 0 : if (host->ops->get_min_clock)
3906 : 0 : mmc->f_min = host->ops->get_min_clock(host);
3907 [ # # ]: 0 : else if (host->version >= SDHCI_SPEC_300) {
3908 [ # # ]: 0 : if (host->clk_mul)
3909 : 0 : max_clk = host->max_clk * host->clk_mul;
3910 : : /*
3911 : : * Divided Clock Mode minimum clock rate is always less than
3912 : : * Programmable Clock Mode minimum clock rate.
3913 : : */
3914 : 0 : mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_300;
3915 : : } else
3916 : 0 : mmc->f_min = host->max_clk / SDHCI_MAX_DIV_SPEC_200;
3917 : :
3918 [ # # # # ]: 0 : if (!mmc->f_max || mmc->f_max > max_clk)
3919 : 0 : mmc->f_max = max_clk;
3920 : :
3921 [ # # ]: 0 : if (!(host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK)) {
3922 : 0 : host->timeout_clk = (host->caps & SDHCI_TIMEOUT_CLK_MASK) >>
3923 : : SDHCI_TIMEOUT_CLK_SHIFT;
3924 : :
3925 [ # # ]: 0 : if (host->caps & SDHCI_TIMEOUT_CLK_UNIT)
3926 : 0 : host->timeout_clk *= 1000;
3927 : :
3928 [ # # ]: 0 : if (host->timeout_clk == 0) {
3929 [ # # ]: 0 : if (!host->ops->get_timeout_clock) {
3930 : 0 : pr_err("%s: Hardware doesn't specify timeout clock frequency.\n",
3931 : : mmc_hostname(mmc));
3932 : : ret = -ENODEV;
3933 : 0 : goto undma;
3934 : : }
3935 : :
3936 : 0 : host->timeout_clk =
3937 : 0 : DIV_ROUND_UP(host->ops->get_timeout_clock(host),
3938 : : 1000);
3939 : : }
3940 : :
3941 [ # # ]: 0 : if (override_timeout_clk)
3942 : 0 : host->timeout_clk = override_timeout_clk;
3943 : :
3944 : 0 : mmc->max_busy_timeout = host->ops->get_max_timeout_count ?
3945 [ # # ]: 0 : host->ops->get_max_timeout_count(host) : 1 << 27;
3946 : 0 : mmc->max_busy_timeout /= host->timeout_clk;
3947 : : }
3948 : :
3949 [ # # # # ]: 0 : if (host->quirks2 & SDHCI_QUIRK2_DISABLE_HW_TIMEOUT &&
3950 : 0 : !host->ops->get_max_timeout_count)
3951 : 0 : mmc->max_busy_timeout = 0;
3952 : :
3953 : 0 : mmc->caps |= MMC_CAP_SDIO_IRQ | MMC_CAP_ERASE | MMC_CAP_CMD23;
3954 : 0 : mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;
3955 : :
3956 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12)
3957 : 0 : host->flags |= SDHCI_AUTO_CMD12;
3958 : :
3959 : : /*
3960 : : * For v3 mode, Auto-CMD23 stuff only works in ADMA or PIO.
3961 : : * For v4 mode, SDMA may use Auto-CMD23 as well.
3962 : : */
3963 [ # # # # ]: 0 : if ((host->version >= SDHCI_SPEC_300) &&
3964 : 0 : ((host->flags & SDHCI_USE_ADMA) ||
3965 [ # # # # ]: 0 : !(host->flags & SDHCI_USE_SDMA) || host->v4_mode) &&
3966 : 0 : !(host->quirks2 & SDHCI_QUIRK2_ACMD23_BROKEN)) {
3967 : 0 : host->flags |= SDHCI_AUTO_CMD23;
3968 : 0 : DBG("Auto-CMD23 available\n");
3969 : : } else {
3970 : : DBG("Auto-CMD23 unavailable\n");
3971 : : }
3972 : :
3973 : : /*
3974 : : * A controller may support 8-bit width, but the board itself
3975 : : * might not have the pins brought out. Boards that support
3976 : : * 8-bit width must set "mmc->caps |= MMC_CAP_8_BIT_DATA;" in
3977 : : * their platform code before calling sdhci_add_host(), and we
3978 : : * won't assume 8-bit width for hosts without that CAP.
3979 : : */
3980 [ # # ]: 0 : if (!(host->quirks & SDHCI_QUIRK_FORCE_1_BIT_DATA))
3981 : 0 : mmc->caps |= MMC_CAP_4_BIT_DATA;
3982 : :
3983 [ # # ]: 0 : if (host->quirks2 & SDHCI_QUIRK2_HOST_NO_CMD23)
3984 : 0 : mmc->caps &= ~MMC_CAP_CMD23;
3985 : :
3986 [ # # ]: 0 : if (host->caps & SDHCI_CAN_DO_HISPD)
3987 : 0 : mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED;
3988 : :
3989 [ # # # # ]: 0 : if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) &&
3990 [ # # ]: 0 : mmc_card_is_removable(mmc) &&
3991 : 0 : mmc_gpio_get_cd(host->mmc) < 0)
3992 : 0 : mmc->caps |= MMC_CAP_NEEDS_POLL;
3993 : :
3994 [ # # ]: 0 : if (!IS_ERR(mmc->supply.vqmmc)) {
3995 : 0 : ret = regulator_enable(mmc->supply.vqmmc);
3996 : :
3997 : : /* If vqmmc provides no 1.8V signalling, then there's no UHS */
3998 [ # # ]: 0 : if (!regulator_is_supported_voltage(mmc->supply.vqmmc, 1700000,
3999 : : 1950000))
4000 : 0 : host->caps1 &= ~(SDHCI_SUPPORT_SDR104 |
4001 : : SDHCI_SUPPORT_SDR50 |
4002 : : SDHCI_SUPPORT_DDR50);
4003 : :
4004 : : /* In eMMC case vqmmc might be a fixed 1.8V regulator */
4005 [ # # ]: 0 : if (!regulator_is_supported_voltage(mmc->supply.vqmmc, 2700000,
4006 : : 3600000))
4007 : 0 : host->flags &= ~SDHCI_SIGNALING_330;
4008 : :
4009 [ # # ]: 0 : if (ret) {
4010 : 0 : pr_warn("%s: Failed to enable vqmmc regulator: %d\n",
4011 : : mmc_hostname(mmc), ret);
4012 : 0 : mmc->supply.vqmmc = ERR_PTR(-EINVAL);
4013 : : }
4014 : : }
4015 : :
4016 [ # # ]: 0 : if (host->quirks2 & SDHCI_QUIRK2_NO_1_8_V) {
4017 : 0 : host->caps1 &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 |
4018 : : SDHCI_SUPPORT_DDR50);
4019 : : /*
4020 : : * The SDHCI controller in a SoC might support HS200/HS400
4021 : : * (indicated using mmc-hs200-1_8v/mmc-hs400-1_8v dt property),
4022 : : * but if the board is modeled such that the IO lines are not
4023 : : * connected to 1.8v then HS200/HS400 cannot be supported.
4024 : : * Disable HS200/HS400 if the board does not have 1.8v connected
4025 : : * to the IO lines. (Applicable for other modes in 1.8v)
4026 : : */
4027 : 0 : mmc->caps2 &= ~(MMC_CAP2_HSX00_1_8V | MMC_CAP2_HS400_ES);
4028 : 0 : mmc->caps &= ~(MMC_CAP_1_8V_DDR | MMC_CAP_UHS);
4029 : : }
4030 : :
4031 : : /* Any UHS-I mode in caps implies SDR12 and SDR25 support. */
4032 [ # # ]: 0 : if (host->caps1 & (SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 |
4033 : : SDHCI_SUPPORT_DDR50))
4034 : 0 : mmc->caps |= MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25;
4035 : :
4036 : : /* SDR104 supports also implies SDR50 support */
4037 [ # # ]: 0 : if (host->caps1 & SDHCI_SUPPORT_SDR104) {
4038 : 0 : mmc->caps |= MMC_CAP_UHS_SDR104 | MMC_CAP_UHS_SDR50;
4039 : : /* SD3.0: SDR104 is supported so (for eMMC) the caps2
4040 : : * field can be promoted to support HS200.
4041 : : */
4042 [ # # ]: 0 : if (!(host->quirks2 & SDHCI_QUIRK2_BROKEN_HS200))
4043 : 0 : mmc->caps2 |= MMC_CAP2_HS200;
4044 [ # # ]: 0 : } else if (host->caps1 & SDHCI_SUPPORT_SDR50) {
4045 : 0 : mmc->caps |= MMC_CAP_UHS_SDR50;
4046 : : }
4047 : :
4048 [ # # # # ]: 0 : if (host->quirks2 & SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 &&
4049 : 0 : (host->caps1 & SDHCI_SUPPORT_HS400))
4050 : 0 : mmc->caps2 |= MMC_CAP2_HS400;
4051 : :
4052 [ # # # # ]: 0 : if ((mmc->caps2 & MMC_CAP2_HSX00_1_2V) &&
4053 [ # # ]: 0 : (IS_ERR(mmc->supply.vqmmc) ||
4054 : 0 : !regulator_is_supported_voltage(mmc->supply.vqmmc, 1100000,
4055 : : 1300000)))
4056 : 0 : mmc->caps2 &= ~MMC_CAP2_HSX00_1_2V;
4057 : :
4058 [ # # # # ]: 0 : if ((host->caps1 & SDHCI_SUPPORT_DDR50) &&
4059 : 0 : !(host->quirks2 & SDHCI_QUIRK2_BROKEN_DDR50))
4060 : 0 : mmc->caps |= MMC_CAP_UHS_DDR50;
4061 : :
4062 : : /* Does the host need tuning for SDR50? */
4063 [ # # ]: 0 : if (host->caps1 & SDHCI_USE_SDR50_TUNING)
4064 : 0 : host->flags |= SDHCI_SDR50_NEEDS_TUNING;
4065 : :
4066 : : /* Driver Type(s) (A, C, D) supported by the host */
4067 [ # # ]: 0 : if (host->caps1 & SDHCI_DRIVER_TYPE_A)
4068 : 0 : mmc->caps |= MMC_CAP_DRIVER_TYPE_A;
4069 [ # # ]: 0 : if (host->caps1 & SDHCI_DRIVER_TYPE_C)
4070 : 0 : mmc->caps |= MMC_CAP_DRIVER_TYPE_C;
4071 [ # # ]: 0 : if (host->caps1 & SDHCI_DRIVER_TYPE_D)
4072 : 0 : mmc->caps |= MMC_CAP_DRIVER_TYPE_D;
4073 : :
4074 : : /* Initial value for re-tuning timer count */
4075 : 0 : host->tuning_count = (host->caps1 & SDHCI_RETUNING_TIMER_COUNT_MASK) >>
4076 : : SDHCI_RETUNING_TIMER_COUNT_SHIFT;
4077 : :
4078 : : /*
4079 : : * In case Re-tuning Timer is not disabled, the actual value of
4080 : : * re-tuning timer will be 2 ^ (n - 1).
4081 : : */
4082 [ # # ]: 0 : if (host->tuning_count)
4083 : 0 : host->tuning_count = 1 << (host->tuning_count - 1);
4084 : :
4085 : : /* Re-tuning mode supported by the Host Controller */
4086 : 0 : host->tuning_mode = (host->caps1 & SDHCI_RETUNING_MODE_MASK) >>
4087 : : SDHCI_RETUNING_MODE_SHIFT;
4088 : :
4089 : : ocr_avail = 0;
4090 : :
4091 : : /*
4092 : : * According to SD Host Controller spec v3.00, if the Host System
4093 : : * can afford more than 150mA, Host Driver should set XPC to 1. Also
4094 : : * the value is meaningful only if Voltage Support in the Capabilities
4095 : : * register is set. The actual current value is 4 times the register
4096 : : * value.
4097 : : */
4098 : : max_current_caps = sdhci_readl(host, SDHCI_MAX_CURRENT);
4099 [ # # # # ]: 0 : if (!max_current_caps && !IS_ERR(mmc->supply.vmmc)) {
4100 : 0 : int curr = regulator_get_current_limit(mmc->supply.vmmc);
4101 [ # # ]: 0 : if (curr > 0) {
4102 : :
4103 : : /* convert to SDHCI_MAX_CURRENT format */
4104 : 0 : curr = curr/1000; /* convert to mA */
4105 : 0 : curr = curr/SDHCI_MAX_CURRENT_MULTIPLIER;
4106 : :
4107 : 0 : curr = min_t(u32, curr, SDHCI_MAX_CURRENT_LIMIT);
4108 : 0 : max_current_caps =
4109 : 0 : (curr << SDHCI_MAX_CURRENT_330_SHIFT) |
4110 : 0 : (curr << SDHCI_MAX_CURRENT_300_SHIFT) |
4111 : 0 : (curr << SDHCI_MAX_CURRENT_180_SHIFT);
4112 : : }
4113 : : }
4114 : :
4115 [ # # ]: 0 : if (host->caps & SDHCI_CAN_VDD_330) {
4116 : : ocr_avail |= MMC_VDD_32_33 | MMC_VDD_33_34;
4117 : :
4118 : 0 : mmc->max_current_330 = ((max_current_caps &
4119 : 0 : SDHCI_MAX_CURRENT_330_MASK) >>
4120 : 0 : SDHCI_MAX_CURRENT_330_SHIFT) *
4121 : : SDHCI_MAX_CURRENT_MULTIPLIER;
4122 : : }
4123 [ # # ]: 0 : if (host->caps & SDHCI_CAN_VDD_300) {
4124 : 0 : ocr_avail |= MMC_VDD_29_30 | MMC_VDD_30_31;
4125 : :
4126 : 0 : mmc->max_current_300 = ((max_current_caps &
4127 : 0 : SDHCI_MAX_CURRENT_300_MASK) >>
4128 : 0 : SDHCI_MAX_CURRENT_300_SHIFT) *
4129 : : SDHCI_MAX_CURRENT_MULTIPLIER;
4130 : : }
4131 [ # # ]: 0 : if (host->caps & SDHCI_CAN_VDD_180) {
4132 : 0 : ocr_avail |= MMC_VDD_165_195;
4133 : :
4134 : 0 : mmc->max_current_180 = ((max_current_caps &
4135 : 0 : SDHCI_MAX_CURRENT_180_MASK) >>
4136 : 0 : SDHCI_MAX_CURRENT_180_SHIFT) *
4137 : : SDHCI_MAX_CURRENT_MULTIPLIER;
4138 : : }
4139 : :
4140 : : /* If OCR set by host, use it instead. */
4141 [ # # ]: 0 : if (host->ocr_mask)
4142 : : ocr_avail = host->ocr_mask;
4143 : :
4144 : : /* If OCR set by external regulators, give it highest prio. */
4145 [ # # ]: 0 : if (mmc->ocr_avail)
4146 : : ocr_avail = mmc->ocr_avail;
4147 : :
4148 : 0 : mmc->ocr_avail = ocr_avail;
4149 : 0 : mmc->ocr_avail_sdio = ocr_avail;
4150 [ # # ]: 0 : if (host->ocr_avail_sdio)
4151 : 0 : mmc->ocr_avail_sdio &= host->ocr_avail_sdio;
4152 : 0 : mmc->ocr_avail_sd = ocr_avail;
4153 [ # # ]: 0 : if (host->ocr_avail_sd)
4154 : 0 : mmc->ocr_avail_sd &= host->ocr_avail_sd;
4155 : : else /* normal SD controllers don't support 1.8V */
4156 : 0 : mmc->ocr_avail_sd &= ~MMC_VDD_165_195;
4157 : 0 : mmc->ocr_avail_mmc = ocr_avail;
4158 [ # # ]: 0 : if (host->ocr_avail_mmc)
4159 : 0 : mmc->ocr_avail_mmc &= host->ocr_avail_mmc;
4160 : :
4161 [ # # ]: 0 : if (mmc->ocr_avail == 0) {
4162 : 0 : pr_err("%s: Hardware doesn't report any support voltages.\n",
4163 : : mmc_hostname(mmc));
4164 : : ret = -ENODEV;
4165 : : goto unreg;
4166 : : }
4167 : :
4168 [ # # ]: 0 : if ((mmc->caps & (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 |
4169 : : MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 |
4170 [ # # ]: 0 : MMC_CAP_UHS_DDR50 | MMC_CAP_1_8V_DDR)) ||
4171 : 0 : (mmc->caps2 & (MMC_CAP2_HS200_1_8V_SDR | MMC_CAP2_HS400_1_8V)))
4172 : 0 : host->flags |= SDHCI_SIGNALING_180;
4173 : :
4174 [ # # ]: 0 : if (mmc->caps2 & MMC_CAP2_HSX00_1_2V)
4175 : 0 : host->flags |= SDHCI_SIGNALING_120;
4176 : :
4177 : 0 : spin_lock_init(&host->lock);
4178 : :
4179 : : /*
4180 : : * Maximum number of sectors in one transfer. Limited by SDMA boundary
4181 : : * size (512KiB). Note some tuning modes impose a 4MiB limit, but this
4182 : : * is less anyway.
4183 : : */
4184 : 0 : mmc->max_req_size = 524288;
4185 : :
4186 : : /*
4187 : : * Maximum number of segments. Depends on if the hardware
4188 : : * can do scatter/gather or not.
4189 : : */
4190 [ # # ]: 0 : if (host->flags & SDHCI_USE_ADMA) {
4191 : 0 : mmc->max_segs = SDHCI_MAX_SEGS;
4192 [ # # ]: 0 : } else if (host->flags & SDHCI_USE_SDMA) {
4193 : 0 : mmc->max_segs = 1;
4194 : : if (swiotlb_max_segment()) {
4195 : : unsigned int max_req_size = (1 << IO_TLB_SHIFT) *
4196 : : IO_TLB_SEGSIZE;
4197 : : mmc->max_req_size = min(mmc->max_req_size,
4198 : : max_req_size);
4199 : : }
4200 : : } else { /* PIO */
4201 : 0 : mmc->max_segs = SDHCI_MAX_SEGS;
4202 : : }
4203 : :
4204 : : /*
4205 : : * Maximum segment size. Could be one segment with the maximum number
4206 : : * of bytes. When doing hardware scatter/gather, each entry cannot
4207 : : * be larger than 64 KiB though.
4208 : : */
4209 [ # # ]: 0 : if (host->flags & SDHCI_USE_ADMA) {
4210 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC)
4211 : 0 : mmc->max_seg_size = 65535;
4212 : : else
4213 : 0 : mmc->max_seg_size = 65536;
4214 : : } else {
4215 : 0 : mmc->max_seg_size = mmc->max_req_size;
4216 : : }
4217 : :
4218 : : /*
4219 : : * Maximum block size. This varies from controller to controller and
4220 : : * is specified in the capabilities register.
4221 : : */
4222 [ # # ]: 0 : if (host->quirks & SDHCI_QUIRK_FORCE_BLK_SZ_2048) {
4223 : 0 : mmc->max_blk_size = 2;
4224 : : } else {
4225 : 0 : mmc->max_blk_size = (host->caps & SDHCI_MAX_BLOCK_MASK) >>
4226 : : SDHCI_MAX_BLOCK_SHIFT;
4227 [ # # ]: 0 : if (mmc->max_blk_size >= 3) {
4228 : 0 : pr_warn("%s: Invalid maximum block size, assuming 512 bytes\n",
4229 : : mmc_hostname(mmc));
4230 : 0 : mmc->max_blk_size = 0;
4231 : : }
4232 : : }
4233 : :
4234 : 0 : mmc->max_blk_size = 512 << mmc->max_blk_size;
4235 : :
4236 : : /*
4237 : : * Maximum block count.
4238 : : */
4239 [ # # ]: 0 : mmc->max_blk_count = (host->quirks & SDHCI_QUIRK_NO_MULTIBLOCK) ? 1 : 65535;
4240 : :
4241 [ # # ]: 0 : if (mmc->max_segs == 1)
4242 : : /* This may alter mmc->*_blk_* parameters */
4243 : 0 : sdhci_allocate_bounce_buffer(host);
4244 : :
4245 : : return 0;
4246 : :
4247 : : unreg:
4248 [ # # ]: 0 : if (!IS_ERR(mmc->supply.vqmmc))
4249 : 0 : regulator_disable(mmc->supply.vqmmc);
4250 : : undma:
4251 [ # # ]: 0 : if (host->align_buffer)
4252 : 0 : dma_free_coherent(mmc_dev(mmc), host->align_buffer_sz +
4253 : 0 : host->adma_table_sz, host->align_buffer,
4254 : : host->align_addr);
4255 : 0 : host->adma_table = NULL;
4256 : 0 : host->align_buffer = NULL;
4257 : :
4258 : 0 : return ret;
4259 : : }
4260 : : EXPORT_SYMBOL_GPL(sdhci_setup_host);
4261 : :
4262 : 0 : void sdhci_cleanup_host(struct sdhci_host *host)
4263 : : {
4264 : 0 : struct mmc_host *mmc = host->mmc;
4265 : :
4266 [ # # ]: 0 : if (!IS_ERR(mmc->supply.vqmmc))
4267 : 0 : regulator_disable(mmc->supply.vqmmc);
4268 : :
4269 [ # # ]: 0 : if (host->align_buffer)
4270 : 0 : dma_free_coherent(mmc_dev(mmc), host->align_buffer_sz +
4271 : 0 : host->adma_table_sz, host->align_buffer,
4272 : : host->align_addr);
4273 : 0 : host->adma_table = NULL;
4274 : 0 : host->align_buffer = NULL;
4275 : 0 : }
4276 : : EXPORT_SYMBOL_GPL(sdhci_cleanup_host);
4277 : :
4278 : 0 : int __sdhci_add_host(struct sdhci_host *host)
4279 : : {
4280 : : unsigned int flags = WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_HIGHPRI;
4281 : 0 : struct mmc_host *mmc = host->mmc;
4282 : : int ret;
4283 : :
4284 : 0 : host->complete_wq = alloc_workqueue("sdhci", flags, 0);
4285 [ # # ]: 0 : if (!host->complete_wq)
4286 : : return -ENOMEM;
4287 : :
4288 : 0 : INIT_WORK(&host->complete_work, sdhci_complete_work);
4289 : :
4290 : 0 : timer_setup(&host->timer, sdhci_timeout_timer, 0);
4291 : 0 : timer_setup(&host->data_timer, sdhci_timeout_data_timer, 0);
4292 : :
4293 : 0 : init_waitqueue_head(&host->buf_ready_int);
4294 : :
4295 : 0 : sdhci_init(host, 0);
4296 : :
4297 : 0 : ret = request_threaded_irq(host->irq, sdhci_irq, sdhci_thread_irq,
4298 : : IRQF_SHARED, mmc_hostname(mmc), host);
4299 [ # # ]: 0 : if (ret) {
4300 : 0 : pr_err("%s: Failed to request IRQ %d: %d\n",
4301 : : mmc_hostname(mmc), host->irq, ret);
4302 : 0 : goto unwq;
4303 : : }
4304 : :
4305 : 0 : ret = sdhci_led_register(host);
4306 [ # # ]: 0 : if (ret) {
4307 : 0 : pr_err("%s: Failed to register LED device: %d\n",
4308 : : mmc_hostname(mmc), ret);
4309 : 0 : goto unirq;
4310 : : }
4311 : :
4312 : 0 : ret = mmc_add_host(mmc);
4313 [ # # ]: 0 : if (ret)
4314 : : goto unled;
4315 : :
4316 [ # # # # : 0 : pr_info("%s: SDHCI controller on %s [%s] using %s\n",
# # ]
4317 : : mmc_hostname(mmc), host->hw_name, dev_name(mmc_dev(mmc)),
4318 : : (host->flags & SDHCI_USE_ADMA) ?
4319 : : (host->flags & SDHCI_USE_64_BIT_DMA) ? "ADMA 64-bit" : "ADMA" :
4320 : : (host->flags & SDHCI_USE_SDMA) ? "DMA" : "PIO");
4321 : :
4322 : : sdhci_enable_card_detection(host);
4323 : :
4324 : 0 : return 0;
4325 : :
4326 : : unled:
4327 : : sdhci_led_unregister(host);
4328 : : unirq:
4329 : 0 : sdhci_do_reset(host, SDHCI_RESET_ALL);
4330 : : sdhci_writel(host, 0, SDHCI_INT_ENABLE);
4331 : : sdhci_writel(host, 0, SDHCI_SIGNAL_ENABLE);
4332 : 0 : free_irq(host->irq, host);
4333 : : unwq:
4334 : 0 : destroy_workqueue(host->complete_wq);
4335 : :
4336 : 0 : return ret;
4337 : : }
4338 : : EXPORT_SYMBOL_GPL(__sdhci_add_host);
4339 : :
4340 : 0 : int sdhci_add_host(struct sdhci_host *host)
4341 : : {
4342 : : int ret;
4343 : :
4344 : 0 : ret = sdhci_setup_host(host);
4345 [ # # ]: 0 : if (ret)
4346 : : return ret;
4347 : :
4348 : 0 : ret = __sdhci_add_host(host);
4349 [ # # ]: 0 : if (ret)
4350 : : goto cleanup;
4351 : :
4352 : : return 0;
4353 : :
4354 : : cleanup:
4355 : 0 : sdhci_cleanup_host(host);
4356 : :
4357 : 0 : return ret;
4358 : : }
4359 : : EXPORT_SYMBOL_GPL(sdhci_add_host);
4360 : :
4361 : 0 : void sdhci_remove_host(struct sdhci_host *host, int dead)
4362 : : {
4363 : 0 : struct mmc_host *mmc = host->mmc;
4364 : : unsigned long flags;
4365 : :
4366 [ # # ]: 0 : if (dead) {
4367 : 0 : spin_lock_irqsave(&host->lock, flags);
4368 : :
4369 : 0 : host->flags |= SDHCI_DEVICE_DEAD;
4370 : :
4371 [ # # ]: 0 : if (sdhci_has_requests(host)) {
4372 : 0 : pr_err("%s: Controller removed during "
4373 : : " transfer!\n", mmc_hostname(mmc));
4374 : 0 : sdhci_error_out_mrqs(host, -ENOMEDIUM);
4375 : : }
4376 : :
4377 : : spin_unlock_irqrestore(&host->lock, flags);
4378 : : }
4379 : :
4380 : : sdhci_disable_card_detection(host);
4381 : :
4382 : 0 : mmc_remove_host(mmc);
4383 : :
4384 : : sdhci_led_unregister(host);
4385 : :
4386 [ # # ]: 0 : if (!dead)
4387 : 0 : sdhci_do_reset(host, SDHCI_RESET_ALL);
4388 : :
4389 : : sdhci_writel(host, 0, SDHCI_INT_ENABLE);
4390 : : sdhci_writel(host, 0, SDHCI_SIGNAL_ENABLE);
4391 : 0 : free_irq(host->irq, host);
4392 : :
4393 : 0 : del_timer_sync(&host->timer);
4394 : 0 : del_timer_sync(&host->data_timer);
4395 : :
4396 : 0 : destroy_workqueue(host->complete_wq);
4397 : :
4398 [ # # ]: 0 : if (!IS_ERR(mmc->supply.vqmmc))
4399 : 0 : regulator_disable(mmc->supply.vqmmc);
4400 : :
4401 [ # # ]: 0 : if (host->align_buffer)
4402 : 0 : dma_free_coherent(mmc_dev(mmc), host->align_buffer_sz +
4403 : 0 : host->adma_table_sz, host->align_buffer,
4404 : : host->align_addr);
4405 : :
4406 : 0 : host->adma_table = NULL;
4407 : 0 : host->align_buffer = NULL;
4408 : 0 : }
4409 : :
4410 : : EXPORT_SYMBOL_GPL(sdhci_remove_host);
4411 : :
4412 : 0 : void sdhci_free_host(struct sdhci_host *host)
4413 : : {
4414 : 0 : mmc_free_host(host->mmc);
4415 : 0 : }
4416 : :
4417 : : EXPORT_SYMBOL_GPL(sdhci_free_host);
4418 : :
4419 : : /*****************************************************************************\
4420 : : * *
4421 : : * Driver init/exit *
4422 : : * *
4423 : : \*****************************************************************************/
4424 : :
4425 : 404 : static int __init sdhci_drv_init(void)
4426 : : {
4427 : 404 : pr_info(DRIVER_NAME
4428 : : ": Secure Digital Host Controller Interface driver\n");
4429 : 404 : pr_info(DRIVER_NAME ": Copyright(c) Pierre Ossman\n");
4430 : :
4431 : 404 : return 0;
4432 : : }
4433 : :
4434 : 0 : static void __exit sdhci_drv_exit(void)
4435 : : {
4436 : 0 : }
4437 : :
4438 : : module_init(sdhci_drv_init);
4439 : : module_exit(sdhci_drv_exit);
4440 : :
4441 : : module_param(debug_quirks, uint, 0444);
4442 : : module_param(debug_quirks2, uint, 0444);
4443 : :
4444 : : MODULE_AUTHOR("Pierre Ossman <pierre@ossman.eu>");
4445 : : MODULE_DESCRIPTION("Secure Digital Host Controller Interface core driver");
4446 : : MODULE_LICENSE("GPL");
4447 : :
4448 : : MODULE_PARM_DESC(debug_quirks, "Force certain quirks.");
4449 : : MODULE_PARM_DESC(debug_quirks2, "Force certain other quirks.");
|