@@ -1993,8 +1993,7 @@ static void sdhci_reset_tuning(struct sdhci_host *host)
1993
1993
sdhci_writew (host , ctrl , SDHCI_HOST_CONTROL2 );
1994
1994
}
1995
1995
1996
- static void sdhci_abort_tuning (struct sdhci_host * host , u32 opcode ,
1997
- unsigned long flags )
1996
+ static void sdhci_abort_tuning (struct sdhci_host * host , u32 opcode )
1998
1997
{
1999
1998
sdhci_reset_tuning (host );
2000
1999
@@ -2003,9 +2002,7 @@ static void sdhci_abort_tuning(struct sdhci_host *host, u32 opcode,
2003
2002
2004
2003
sdhci_end_tuning (host );
2005
2004
2006
- spin_unlock_irqrestore (& host -> lock , flags );
2007
2005
mmc_abort_tuning (host -> mmc , opcode );
2008
- spin_lock_irqsave (& host -> lock , flags );
2009
2006
}
2010
2007
2011
2008
/*
@@ -2015,12 +2012,14 @@ static void sdhci_abort_tuning(struct sdhci_host *host, u32 opcode,
2015
2012
* interrupt setup is different to other commands and there is no timeout
2016
2013
* interrupt so special handling is needed.
2017
2014
*/
2018
- static void sdhci_send_tuning (struct sdhci_host * host , u32 opcode ,
2019
- unsigned long flags )
2015
+ static void sdhci_send_tuning (struct sdhci_host * host , u32 opcode )
2020
2016
{
2021
2017
struct mmc_host * mmc = host -> mmc ;
2022
2018
struct mmc_command cmd = {};
2023
2019
struct mmc_request mrq = {};
2020
+ unsigned long flags ;
2021
+
2022
+ spin_lock_irqsave (& host -> lock , flags );
2024
2023
2025
2024
cmd .opcode = opcode ;
2026
2025
cmd .flags = MMC_RSP_R1 | MMC_CMD_ADTC ;
@@ -2054,17 +2053,16 @@ static void sdhci_send_tuning(struct sdhci_host *host, u32 opcode,
2054
2053
2055
2054
host -> tuning_done = 0 ;
2056
2055
2056
+ mmiowb ();
2057
2057
spin_unlock_irqrestore (& host -> lock , flags );
2058
2058
2059
2059
/* Wait for Buffer Read Ready interrupt */
2060
2060
wait_event_timeout (host -> buf_ready_int , (host -> tuning_done == 1 ),
2061
2061
msecs_to_jiffies (50 ));
2062
2062
2063
- spin_lock_irqsave (& host -> lock , flags );
2064
2063
}
2065
2064
2066
- static void __sdhci_execute_tuning (struct sdhci_host * host , u32 opcode ,
2067
- unsigned long flags )
2065
+ static void __sdhci_execute_tuning (struct sdhci_host * host , u32 opcode )
2068
2066
{
2069
2067
int i ;
2070
2068
@@ -2075,12 +2073,12 @@ static void __sdhci_execute_tuning(struct sdhci_host *host, u32 opcode,
2075
2073
for (i = 0 ; i < MAX_TUNING_LOOP ; i ++ ) {
2076
2074
u16 ctrl ;
2077
2075
2078
- sdhci_send_tuning (host , opcode , flags );
2076
+ sdhci_send_tuning (host , opcode );
2079
2077
2080
2078
if (!host -> tuning_done ) {
2081
2079
pr_info ("%s: Tuning timeout, falling back to fixed sampling clock\n" ,
2082
2080
mmc_hostname (host -> mmc ));
2083
- sdhci_abort_tuning (host , opcode , flags );
2081
+ sdhci_abort_tuning (host , opcode );
2084
2082
return ;
2085
2083
}
2086
2084
@@ -2105,12 +2103,9 @@ int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
2105
2103
{
2106
2104
struct sdhci_host * host = mmc_priv (mmc );
2107
2105
int err = 0 ;
2108
- unsigned long flags ;
2109
2106
unsigned int tuning_count = 0 ;
2110
2107
bool hs400_tuning ;
2111
2108
2112
- spin_lock_irqsave (& host -> lock , flags );
2113
-
2114
2109
hs400_tuning = host -> flags & SDHCI_HS400_TUNING ;
2115
2110
2116
2111
if (host -> tuning_mode == SDHCI_TUNING_MODE_1 )
@@ -2127,7 +2122,7 @@ int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
2127
2122
/* HS400 tuning is done in HS200 mode */
2128
2123
case MMC_TIMING_MMC_HS400 :
2129
2124
err = - EINVAL ;
2130
- goto out_unlock ;
2125
+ goto out ;
2131
2126
2132
2127
case MMC_TIMING_MMC_HS200 :
2133
2128
/*
@@ -2148,26 +2143,23 @@ int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
2148
2143
/* FALLTHROUGH */
2149
2144
2150
2145
default :
2151
- goto out_unlock ;
2146
+ goto out ;
2152
2147
}
2153
2148
2154
2149
if (host -> ops -> platform_execute_tuning ) {
2155
- spin_unlock_irqrestore (& host -> lock , flags );
2156
2150
err = host -> ops -> platform_execute_tuning (host , opcode );
2157
- spin_lock_irqsave (& host -> lock , flags );
2158
- goto out_unlock ;
2151
+ goto out ;
2159
2152
}
2160
2153
2161
2154
host -> mmc -> retune_period = tuning_count ;
2162
2155
2163
2156
sdhci_start_tuning (host );
2164
2157
2165
- __sdhci_execute_tuning (host , opcode , flags );
2158
+ __sdhci_execute_tuning (host , opcode );
2166
2159
2167
2160
sdhci_end_tuning (host );
2168
- out_unlock :
2161
+ out :
2169
2162
host -> flags &= ~SDHCI_HS400_TUNING ;
2170
- spin_unlock_irqrestore (& host -> lock , flags );
2171
2163
2172
2164
return err ;
2173
2165
}
0 commit comments