mmc: mmci: add hardware busy timeout feature
In the stm32_sdmmc variant, the datatimer is active not only during data transfers with the DPSM, but also while waiting for the busyend IRQs from commands having the MMC_RSP_BUSY flag set. This leads to an incorrect IRQ being raised to signal MCI_DATATIMEOUT error, which simply breaks the behaviour. Address this by updating the datatimer value before sending a command having the MMC_RSP_BUSY flag set. To inform the mmc core about the maximum supported busy timeout, which also depends on the current clock rate, set ->max_busy_timeout (in ms). Signed-off-by: Ludovic Barre <ludovic.barre@st.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:

committed by
Ulf Hansson

parent
e2b98d83ff
commit
8266c585f4
@@ -287,6 +287,8 @@ struct mmci_host;
|
||||
* @signal_direction: input/out direction of bus signals can be indicated
|
||||
* @pwrreg_clkgate: MMCIPOWER register must be used to gate the clock
|
||||
* @busy_detect: true if the variant supports busy detection on DAT0.
|
||||
* @busy_timeout: true if the variant starts data timer when the DPSM
|
||||
* enter in Wait_R or Busy state.
|
||||
* @busy_dpsm_flag: bitmask enabling busy detection in the DPSM
|
||||
* @busy_detect_flag: bitmask identifying the bit in the MMCISTATUS register
|
||||
* indicating that the card is busy
|
||||
@@ -333,6 +335,7 @@ struct variant_data {
|
||||
u8 signal_direction:1;
|
||||
u8 pwrreg_clkgate:1;
|
||||
u8 busy_detect:1;
|
||||
u8 busy_timeout:1;
|
||||
u32 busy_dpsm_flag;
|
||||
u32 busy_detect_flag;
|
||||
u32 busy_detect_mask;
|
||||
|
Reference in New Issue
Block a user