mmc: dw_mmc: Extract waiting for data busy into a separate routine
Waiting for data busy is a logically separate operation and should be implemented as a separate routine. Follow Linux kernel example and extract it from dwmci_send_cmd(). This way it doesn't clutter dwmci_send_cmd() function, and can be reused later in other cases. No functional change. Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> Reviewed-by: Quentin Schulz <quentin.schulz@cherry.de> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
This commit is contained in:

committed by
Minkyu Kang

parent
96ea89000f
commit
2015f24f78
@@ -245,6 +245,21 @@ static int dwmci_set_transfer_mode(struct dwmci_host *host,
|
||||
return mode;
|
||||
}
|
||||
|
||||
static void dwmci_wait_while_busy(struct dwmci_host *host, struct mmc_cmd *cmd)
|
||||
{
|
||||
unsigned int timeout = 500; /* msec */
|
||||
ulong start;
|
||||
|
||||
start = get_timer(0);
|
||||
while (dwmci_readl(host, DWMCI_STATUS) & DWMCI_BUSY) {
|
||||
if (get_timer(start) > timeout) {
|
||||
debug("%s: Timeout on data busy, continue anyway\n",
|
||||
__func__);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DM_MMC
|
||||
static int dwmci_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
|
||||
struct mmc_data *data)
|
||||
@@ -259,19 +274,11 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
|
||||
ALLOC_CACHE_ALIGN_BUFFER(struct dwmci_idmac, cur_idmac,
|
||||
data ? DIV_ROUND_UP(data->blocks, 8) : 0);
|
||||
int ret = 0, flags = 0, i;
|
||||
unsigned int timeout = 500;
|
||||
u32 retry = 100000;
|
||||
u32 mask, ctrl;
|
||||
ulong start = get_timer(0);
|
||||
struct bounce_buffer bbstate;
|
||||
|
||||
while (dwmci_readl(host, DWMCI_STATUS) & DWMCI_BUSY) {
|
||||
if (get_timer(start) > timeout) {
|
||||
debug("%s: Timeout on data busy, continue anyway\n", __func__);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
dwmci_wait_while_busy(host, cmd);
|
||||
dwmci_writel(host, DWMCI_RINTSTS, DWMCI_INTMSK_ALL);
|
||||
|
||||
if (data) {
|
||||
|
Reference in New Issue
Block a user