.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * tifm_sd.c - TI FlashMedia driver |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright (C) 2006 Alex Dubov <oakad@yahoo.com> |
---|
5 | 6 | * |
---|
6 | | - * This program is free software; you can redistribute it and/or modify |
---|
7 | | - * it under the terms of the GNU General Public License version 2 as |
---|
8 | | - * published by the Free Software Foundation. |
---|
9 | | - * |
---|
10 | 7 | * Special thanks to Brad Campbell for extensive testing of this driver. |
---|
11 | | - * |
---|
12 | 8 | */ |
---|
13 | 9 | |
---|
14 | 10 | |
---|
.. | .. |
---|
76 | 72 | #define TIFM_MMCSD_CMD_ADTC 0x3000 |
---|
77 | 73 | |
---|
78 | 74 | #define TIFM_MMCSD_MAX_BLOCK_SIZE 0x0800UL |
---|
| 75 | + |
---|
| 76 | +#define TIFM_MMCSD_REQ_TIMEOUT_MS 1000 |
---|
79 | 77 | |
---|
80 | 78 | enum { |
---|
81 | 79 | CMD_READY = 0x0001, |
---|
.. | .. |
---|
336 | 334 | rc |= TIFM_MMCSD_RSP_R0; |
---|
337 | 335 | break; |
---|
338 | 336 | case MMC_RSP_R1B: |
---|
339 | | - rc |= TIFM_MMCSD_RSP_BUSY; // deliberate fall-through |
---|
| 337 | + rc |= TIFM_MMCSD_RSP_BUSY; |
---|
| 338 | + fallthrough; |
---|
340 | 339 | case MMC_RSP_R1: |
---|
341 | 340 | rc |= TIFM_MMCSD_RSP_R1; |
---|
342 | 341 | break; |
---|
.. | .. |
---|
888 | 887 | struct tifm_dev *sock = host->dev; |
---|
889 | 888 | |
---|
890 | 889 | writel(0, sock->addr + SOCK_MMCSD_INT_ENABLE); |
---|
891 | | - mmiowb(); |
---|
892 | 890 | host->clk_div = 61; |
---|
893 | 891 | host->clk_freq = 20000000; |
---|
894 | 892 | writel(TIFM_MMCSD_RESET, sock->addr + SOCK_MMCSD_SYSTEM_CONTROL); |
---|
.. | .. |
---|
939 | 937 | writel(TIFM_MMCSD_CERR | TIFM_MMCSD_BRS | TIFM_MMCSD_EOC |
---|
940 | 938 | | TIFM_MMCSD_ERRMASK, |
---|
941 | 939 | sock->addr + SOCK_MMCSD_INT_ENABLE); |
---|
942 | | - mmiowb(); |
---|
943 | 940 | |
---|
944 | 941 | return 0; |
---|
945 | 942 | } |
---|
.. | .. |
---|
964 | 961 | host = mmc_priv(mmc); |
---|
965 | 962 | tifm_set_drvdata(sock, mmc); |
---|
966 | 963 | host->dev = sock; |
---|
967 | | - host->timeout_jiffies = msecs_to_jiffies(1000); |
---|
| 964 | + host->timeout_jiffies = msecs_to_jiffies(TIFM_MMCSD_REQ_TIMEOUT_MS); |
---|
| 965 | + /* |
---|
| 966 | + * We use a fixed request timeout of 1s, hence inform the core about it. |
---|
| 967 | + * A future improvement should instead respect the cmd->busy_timeout. |
---|
| 968 | + */ |
---|
| 969 | + mmc->max_busy_timeout = TIFM_MMCSD_REQ_TIMEOUT_MS; |
---|
968 | 970 | |
---|
969 | 971 | tasklet_init(&host->finish_tasklet, tifm_sd_end_cmd, |
---|
970 | 972 | (unsigned long)host); |
---|
.. | .. |
---|
1004 | 1006 | spin_lock_irqsave(&sock->lock, flags); |
---|
1005 | 1007 | host->eject = 1; |
---|
1006 | 1008 | writel(0, sock->addr + SOCK_MMCSD_INT_ENABLE); |
---|
1007 | | - mmiowb(); |
---|
1008 | 1009 | spin_unlock_irqrestore(&sock->lock, flags); |
---|
1009 | 1010 | |
---|
1010 | 1011 | tasklet_kill(&host->finish_tasklet); |
---|