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;
|
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
|
#ifdef CONFIG_DM_MMC
|
||||||
static int dwmci_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
|
static int dwmci_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
|
||||||
struct mmc_data *data)
|
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,
|
ALLOC_CACHE_ALIGN_BUFFER(struct dwmci_idmac, cur_idmac,
|
||||||
data ? DIV_ROUND_UP(data->blocks, 8) : 0);
|
data ? DIV_ROUND_UP(data->blocks, 8) : 0);
|
||||||
int ret = 0, flags = 0, i;
|
int ret = 0, flags = 0, i;
|
||||||
unsigned int timeout = 500;
|
|
||||||
u32 retry = 100000;
|
u32 retry = 100000;
|
||||||
u32 mask, ctrl;
|
u32 mask, ctrl;
|
||||||
ulong start = get_timer(0);
|
|
||||||
struct bounce_buffer bbstate;
|
struct bounce_buffer bbstate;
|
||||||
|
|
||||||
while (dwmci_readl(host, DWMCI_STATUS) & DWMCI_BUSY) {
|
dwmci_wait_while_busy(host, cmd);
|
||||||
if (get_timer(start) > timeout) {
|
|
||||||
debug("%s: Timeout on data busy, continue anyway\n", __func__);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dwmci_writel(host, DWMCI_RINTSTS, DWMCI_INTMSK_ALL);
|
dwmci_writel(host, DWMCI_RINTSTS, DWMCI_INTMSK_ALL);
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
|
Reference in New Issue
Block a user