Message ID | 1438052781-25261-1-git-send-email-shawn.lin@rock-chips.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi, Shawn. On 07/28/2015 12:06 PM, Shawn Lin wrote: > This patch fixes the following issues reported by checkpatch.pl: > - use -EINVAL instead of -ENOSYS, to fix warning message: > "ENOSYS means 'invalid syscall nr' and nothing else" > - split lines whose length is greater than 80 characters > - avoid quoted string split across lines > - use min_t instead of min, to fix warning message: > "min() should probably be min_t(int, cnt, host->part_buf_count)" Thanks for fixing coding style. But i will apply this patch(https://patchwork.kernel.org/patch/6672581/). So if you can fix with this patch, then it's helpful to me. If you can't, i will modify your patch before applying. How about? > > Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> > --- > > drivers/mmc/host/dw_mmc.c | 85 ++++++++++++++++++++++++++++++----------------- > 1 file changed, 54 insertions(+), 31 deletions(-) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index 40e9d8e..6aede38 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -235,8 +235,8 @@ static u32 dw_mci_prepare_command(struct mmc_host *mmc, struct mmc_command *cmd) > struct dw_mci *host = slot->host; > const struct dw_mci_drv_data *drv_data = slot->host->drv_data; > u32 cmdr; > - cmd->error = -EINPROGRESS; > > + cmd->error = -EINPROGRESS; > cmdr = cmd->opcode; > > if (cmd->opcode == MMC_STOP_TRANSMISSION || > @@ -371,6 +371,7 @@ static void dw_mci_start_command(struct dw_mci *host, > cmd->arg, cmd_flags); > > mci_writel(host, CMDARG, cmd->arg); > + /* Make sure CMDARG is configured before CMD */ > wmb(); > dw_mci_wait_while_busy(host, cmd_flags); > > @@ -380,6 +381,7 @@ static void dw_mci_start_command(struct dw_mci *host, > static inline void send_stop_abort(struct dw_mci *host, struct mmc_data *data) > { > struct mmc_command *stop = data->stop ? data->stop : &host->stop_abort; > + > dw_mci_start_command(host, stop, host->stop_cmdr); > } > > @@ -463,6 +465,7 @@ static void dw_mci_translate_sglist(struct dw_mci *host, struct mmc_data *data, > unsigned int sg_len) > { > int i; > + > if (host->dma_64bit_address == 1) { > struct idmac_desc_64addr *desc = host->sg_cpu; > > @@ -524,7 +527,7 @@ static void dw_mci_translate_sglist(struct dw_mci *host, struct mmc_data *data, > desc->des0 |= cpu_to_le32(IDMAC_DES0_LD); > } > > - wmb(); > + wmb(); /* drain writebuffer */ > } > > static void dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len) > @@ -542,7 +545,7 @@ static void dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len) > temp |= SDMMC_CTRL_USE_IDMAC; > mci_writel(host, CTRL, temp); > > - wmb(); > + wmb(); /* drain writebuffer */ > > /* Enable the IDMAC */ > temp = mci_readl(host, BMOD); > @@ -589,7 +592,9 @@ static int dw_mci_idmac_init(struct dw_mci *host) > host->ring_size = PAGE_SIZE / sizeof(struct idmac_desc); > > /* Forward link the descriptor list */ > - for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++) { > + for (i = 0, p = host->sg_cpu; > + i < host->ring_size - 1; > + i++, p++) { > p->des3 = cpu_to_le32(host->sg_dma + > (sizeof(struct idmac_desc) * (i + 1))); > p->des1 = 0; > @@ -718,7 +723,7 @@ static void dw_mci_adjust_fifoth(struct dw_mci *host, struct mmc_data *data) > u32 fifo_width = 1 << host->data_shift; > u32 blksz_depth = blksz / fifo_width, fifoth_val; > u32 msize = 0, rx_wmark = 1, tx_wmark, tx_wmark_invers; > - int idx = (sizeof(mszs) / sizeof(mszs[0])) - 1; > + int idx = ARRAY_SIZE(mszs) - 1; > > tx_wmark = (host->fifo_depth) / 2; > tx_wmark_invers = host->fifo_depth - tx_wmark; > @@ -843,6 +848,7 @@ static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data) > static void dw_mci_submit_data(struct dw_mci *host, struct mmc_data *data) > { > unsigned long irqflags; > + int flags = SG_MITER_ATOMIC; > u32 temp; > > data->error = -EINPROGRESS; > @@ -859,7 +865,6 @@ static void dw_mci_submit_data(struct dw_mci *host, struct mmc_data *data) > } > > if (dw_mci_submit_data_dma(host, data)) { > - int flags = SG_MITER_ATOMIC; > if (host->data->flags & MMC_DATA_READ) > flags |= SG_MITER_TO_SG; > else > @@ -906,6 +911,7 @@ static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg) > unsigned int cmd_status = 0; > > mci_writel(host, CMDARG, arg); > + /* Make sure CMDARG is configured before CMD */ > wmb(); > dw_mci_wait_while_busy(host, cmd); > mci_writel(host, CMD, SDMMC_CMD_START | cmd); > @@ -1019,6 +1025,7 @@ static void __dw_mci_start_request(struct dw_mci *host, > > if (data) { > dw_mci_submit_data(host, data); > + /* drain writebuffer */ > wmb(); I think good that you have consistency for above comment. wmb(); /* drain writebuffer */ or /* drain writebuffer */ wmb(); What do you want? Best Regards, Jaehoon Chung > } > > @@ -1384,14 +1391,15 @@ static int dw_mci_execute_tuning(struct mmc_host *mmc, u32 opcode) > struct dw_mci_slot *slot = mmc_priv(mmc); > struct dw_mci *host = slot->host; > const struct dw_mci_drv_data *drv_data = host->drv_data; > - int err = -ENOSYS; > + int err = -EINVAL; > > if (drv_data && drv_data->execute_tuning) > err = drv_data->execute_tuning(slot); > return err; > } > > -static int dw_mci_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_ios *ios) > +static int dw_mci_prepare_hs400_tuning(struct mmc_host *mmc, > + struct mmc_ios *ios) > { > struct dw_mci_slot *slot = mmc_priv(mmc); > struct dw_mci *host = slot->host; > @@ -1743,7 +1751,7 @@ static int dw_mci_push_part_bytes(struct dw_mci *host, void *buf, int cnt) > /* pull first bytes from part_buf, only use during pull */ > static int dw_mci_pull_part_bytes(struct dw_mci *host, void *buf, int cnt) > { > - cnt = min(cnt, (int)host->part_buf_count); > + cnt = min_t(int, cnt, host->part_buf_count); > if (cnt) { > memcpy(buf, (void *)&host->part_buf + host->part_buf_start, > cnt); > @@ -1769,6 +1777,7 @@ static void dw_mci_push_data16(struct dw_mci *host, void *buf, int cnt) > /* try and push anything in the part_buf */ > if (unlikely(host->part_buf_count)) { > int len = dw_mci_push_part_bytes(host, buf, cnt); > + > buf += len; > cnt -= len; > if (host->part_buf_count == 2) { > @@ -1795,6 +1804,7 @@ static void dw_mci_push_data16(struct dw_mci *host, void *buf, int cnt) > #endif > { > u16 *pdata = buf; > + > for (; cnt >= 2; cnt -= 2) > mci_fifo_writew(host->fifo_reg, *pdata++); > buf = pdata; > @@ -1819,6 +1829,7 @@ static void dw_mci_pull_data16(struct dw_mci *host, void *buf, int cnt) > int len = min(cnt & -2, (int)sizeof(aligned_buf)); > int items = len >> 1; > int i; > + > for (i = 0; i < items; ++i) > aligned_buf[i] = mci_fifo_readw(host->fifo_reg); > /* memcpy from aligned buffer into output buffer */ > @@ -1830,6 +1841,7 @@ static void dw_mci_pull_data16(struct dw_mci *host, void *buf, int cnt) > #endif > { > u16 *pdata = buf; > + > for (; cnt >= 2; cnt -= 2) > *pdata++ = mci_fifo_readw(host->fifo_reg); > buf = pdata; > @@ -1848,6 +1860,7 @@ static void dw_mci_push_data32(struct dw_mci *host, void *buf, int cnt) > /* try and push anything in the part_buf */ > if (unlikely(host->part_buf_count)) { > int len = dw_mci_push_part_bytes(host, buf, cnt); > + > buf += len; > cnt -= len; > if (host->part_buf_count == 4) { > @@ -1874,6 +1887,7 @@ static void dw_mci_push_data32(struct dw_mci *host, void *buf, int cnt) > #endif > { > u32 *pdata = buf; > + > for (; cnt >= 4; cnt -= 4) > mci_fifo_writel(host->fifo_reg, *pdata++); > buf = pdata; > @@ -1898,6 +1912,7 @@ static void dw_mci_pull_data32(struct dw_mci *host, void *buf, int cnt) > int len = min(cnt & -4, (int)sizeof(aligned_buf)); > int items = len >> 2; > int i; > + > for (i = 0; i < items; ++i) > aligned_buf[i] = mci_fifo_readl(host->fifo_reg); > /* memcpy from aligned buffer into output buffer */ > @@ -1909,6 +1924,7 @@ static void dw_mci_pull_data32(struct dw_mci *host, void *buf, int cnt) > #endif > { > u32 *pdata = buf; > + > for (; cnt >= 4; cnt -= 4) > *pdata++ = mci_fifo_readl(host->fifo_reg); > buf = pdata; > @@ -1927,6 +1943,7 @@ static void dw_mci_push_data64(struct dw_mci *host, void *buf, int cnt) > /* try and push anything in the part_buf */ > if (unlikely(host->part_buf_count)) { > int len = dw_mci_push_part_bytes(host, buf, cnt); > + > buf += len; > cnt -= len; > > @@ -1954,6 +1971,7 @@ static void dw_mci_push_data64(struct dw_mci *host, void *buf, int cnt) > #endif > { > u64 *pdata = buf; > + > for (; cnt >= 8; cnt -= 8) > mci_fifo_writeq(host->fifo_reg, *pdata++); > buf = pdata; > @@ -1978,6 +1996,7 @@ static void dw_mci_pull_data64(struct dw_mci *host, void *buf, int cnt) > int len = min(cnt & -8, (int)sizeof(aligned_buf)); > int items = len >> 3; > int i; > + > for (i = 0; i < items; ++i) > aligned_buf[i] = mci_fifo_readq(host->fifo_reg); > > @@ -1990,6 +2009,7 @@ static void dw_mci_pull_data64(struct dw_mci *host, void *buf, int cnt) > #endif > { > u64 *pdata = buf; > + > for (; cnt >= 8; cnt -= 8) > *pdata++ = mci_fifo_readq(host->fifo_reg); > buf = pdata; > @@ -2065,7 +2085,7 @@ static void dw_mci_read_data_pio(struct dw_mci *host, bool dto) > done: > sg_miter_stop(sg_miter); > host->sg = NULL; > - smp_wmb(); > + smp_wmb(); /* drain writebuffer */ > set_bit(EVENT_XFER_COMPLETE, &host->pending_events); > } > > @@ -2119,7 +2139,7 @@ static void dw_mci_write_data_pio(struct dw_mci *host) > done: > sg_miter_stop(sg_miter); > host->sg = NULL; > - smp_wmb(); > + smp_wmb(); /* drain writebuffer */ > set_bit(EVENT_XFER_COMPLETE, &host->pending_events); > } > > @@ -2128,6 +2148,7 @@ static void dw_mci_cmd_interrupt(struct dw_mci *host, u32 status) > if (!host->cmd_status) > host->cmd_status = status; > > + /* drain writebuffer */ > smp_wmb(); > > set_bit(EVENT_CMD_COMPLETE, &host->pending_events); > @@ -2192,7 +2213,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) > if (pending & DW_MCI_CMD_ERROR_FLAGS) { > mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS); > host->cmd_status = pending; > - smp_wmb(); > + smp_wmb(); /* drain writebuffer */ > set_bit(EVENT_CMD_COMPLETE, &host->pending_events); > } > > @@ -2200,7 +2221,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) > /* if there is an error report DATA_ERROR */ > mci_writel(host, RINTSTS, DW_MCI_DATA_ERROR_FLAGS); > host->data_status = pending; > - smp_wmb(); > + smp_wmb(); /* drain writebuffer */ > set_bit(EVENT_DATA_ERROR, &host->pending_events); > tasklet_schedule(&host->tasklet); > } > @@ -2209,7 +2230,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) > mci_writel(host, RINTSTS, SDMMC_INT_DATA_OVER); > if (!host->data_status) > host->data_status = pending; > - smp_wmb(); > + smp_wmb(); /* drain writebuffer */ > if (host->dir_status == DW_MCI_RECV_STATUS) { > if (host->sg != NULL) > dw_mci_read_data_pio(host, true); > @@ -2473,8 +2494,8 @@ static void dw_mci_init_dma(struct dw_mci *host) > if (host->dma_ops->init && host->dma_ops->start && > host->dma_ops->stop && host->dma_ops->cleanup) { > if (host->dma_ops->init(host)) { > - dev_err(host->dev, "%s: Unable to initialize " > - "DMA Controller.\n", __func__); > + dev_err(host->dev, "%s: Unable to initialize DMA Controller.\n", > + __func__); > goto no_dma; > } > } else { > @@ -2488,7 +2509,6 @@ static void dw_mci_init_dma(struct dw_mci *host) > no_dma: > dev_info(host->dev, "Using PIO mode.\n"); > host->use_dma = 0; > - return; > } > > static bool dw_mci_ctrl_reset(struct dw_mci *host, u32 reset) > @@ -2542,6 +2562,7 @@ static bool dw_mci_reset(struct dw_mci *host) > if (host->use_dma) { > unsigned long timeout = jiffies + msecs_to_jiffies(500); > u32 status; > + > do { > status = mci_readl(host, STATUS); > if (!(status & SDMMC_STATUS_DMA_REQ)) > @@ -2551,8 +2572,8 @@ static bool dw_mci_reset(struct dw_mci *host) > > if (status & SDMMC_STATUS_DMA_REQ) { > dev_err(host->dev, > - "%s: Timeout waiting for dma_req to " > - "clear during reset\n", __func__); > + "%s: Timeout waiting for dma_req to clear during reset\n", > + __func__); > goto ciu_out; > } > > @@ -2563,8 +2584,8 @@ static bool dw_mci_reset(struct dw_mci *host) > } else { > /* if the controller reset bit did clear, then set clock regs */ > if (!(mci_readl(host, CTRL) & SDMMC_CTRL_RESET)) { > - dev_err(host->dev, "%s: fifo/dma reset bits didn't " > - "clear but ciu was reset, doing clock update\n", > + dev_err(host->dev, > + "%s: fifo/dma reset bits didn't clear but ciu was reset, doing clock update\n", > __func__); > goto ciu_out; > } > @@ -2625,8 +2646,8 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host) > /* find out number of slots supported */ > if (of_property_read_u32(dev->of_node, "num-slots", > &pdata->num_slots)) { > - dev_info(dev, "num-slots property not found, " > - "assuming 1 slot is available\n"); > + dev_info(dev, > + "num-slots property not found, assuming 1 slot is available\n"); > pdata->num_slots = 1; > } > > @@ -2636,8 +2657,8 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host) > pdata->quirks |= of_quirks[idx].id; > > if (of_property_read_u32(np, "fifo-depth", &pdata->fifo_depth)) > - dev_info(dev, "fifo-depth property not found, using " > - "value of FIFOTH register as default\n"); > + dev_info(dev, > + "fifo-depth property not found, using value of FIFOTH register as default\n"); > > of_property_read_u32(np, "card-detect-delay", &pdata->detect_delay_ms); > > @@ -2874,11 +2895,11 @@ int dw_mci_probe(struct dw_mci *host) > mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER | > SDMMC_INT_TXDR | SDMMC_INT_RXDR | > DW_MCI_ERROR_FLAGS); > - mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci interrupt */ > + /* Enable mci interrupt */ > + mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); > > - dev_info(host->dev, "DW MMC controller at irq %d, " > - "%d bit host data width, " > - "%u deep fifo\n", > + dev_info(host->dev, > + "DW MMC controller at irq %d,%d bit host data width,%u deep fifo\n", > host->irq, width, fifo_size); > > /* We need at least one slot to succeed */ > @@ -2893,8 +2914,9 @@ int dw_mci_probe(struct dw_mci *host) > if (init_slots) { > dev_info(host->dev, "%d slots initialized\n", init_slots); > } else { > - dev_dbg(host->dev, "attempted to initialize %d slots, " > - "but failed on all\n", host->num_slots); > + dev_dbg(host->dev, > + "attempted to initialize %d slots, but failed on all\n", > + host->num_slots); > goto err_dmaunmap; > } > > @@ -2992,6 +3014,7 @@ int dw_mci_resume(struct dw_mci *host) > > for (i = 0; i < host->num_slots; i++) { > struct dw_mci_slot *slot = host->slot[i]; > + > if (!slot) > continue; > if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) { > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 2015-8-3 12:07, Jaehoon Chung wrote: > Hi, Shawn. > > On 07/28/2015 12:06 PM, Shawn Lin wrote: >> This patch fixes the following issues reported by checkpatch.pl: >> - use -EINVAL instead of -ENOSYS, to fix warning message: >> "ENOSYS means 'invalid syscall nr' and nothing else" >> - split lines whose length is greater than 80 characters >> - avoid quoted string split across lines >> - use min_t instead of min, to fix warning message: >> "min() should probably be min_t(int, cnt, host->part_buf_count)" > > Thanks for fixing coding style. > But i will apply this patch(https://patchwork.kernel.org/patch/6672581/). > So if you can fix with this patch, then it's helpful to me. > If you can't, i will modify your patch before applying. > How about? > Okay, I will fix with this patch and resend it. >> >> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> >> --- >> >> drivers/mmc/host/dw_mmc.c | 85 ++++++++++++++++++++++++++++++----------------- >> 1 file changed, 54 insertions(+), 31 deletions(-) >> >> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c >> index 40e9d8e..6aede38 100644 >> --- a/drivers/mmc/host/dw_mmc.c >> +++ b/drivers/mmc/host/dw_mmc.c >> @@ -235,8 +235,8 @@ static u32 dw_mci_prepare_command(struct mmc_host *mmc, struct mmc_command *cmd) >> struct dw_mci *host = slot->host; >> const struct dw_mci_drv_data *drv_data = slot->host->drv_data; >> u32 cmdr; >> - cmd->error = -EINPROGRESS; >> >> + cmd->error = -EINPROGRESS; >> cmdr = cmd->opcode; >> >> if (cmd->opcode == MMC_STOP_TRANSMISSION || >> @@ -371,6 +371,7 @@ static void dw_mci_start_command(struct dw_mci *host, >> cmd->arg, cmd_flags); >> >> mci_writel(host, CMDARG, cmd->arg); >> + /* Make sure CMDARG is configured before CMD */ >> wmb(); >> dw_mci_wait_while_busy(host, cmd_flags); >> >> @@ -380,6 +381,7 @@ static void dw_mci_start_command(struct dw_mci *host, >> static inline void send_stop_abort(struct dw_mci *host, struct mmc_data *data) >> { >> struct mmc_command *stop = data->stop ? data->stop : &host->stop_abort; >> + >> dw_mci_start_command(host, stop, host->stop_cmdr); >> } >> >> @@ -463,6 +465,7 @@ static void dw_mci_translate_sglist(struct dw_mci *host, struct mmc_data *data, >> unsigned int sg_len) >> { >> int i; >> + >> if (host->dma_64bit_address == 1) { >> struct idmac_desc_64addr *desc = host->sg_cpu; >> >> @@ -524,7 +527,7 @@ static void dw_mci_translate_sglist(struct dw_mci *host, struct mmc_data *data, >> desc->des0 |= cpu_to_le32(IDMAC_DES0_LD); >> } >> >> - wmb(); >> + wmb(); /* drain writebuffer */ >> } >> >> static void dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len) >> @@ -542,7 +545,7 @@ static void dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len) >> temp |= SDMMC_CTRL_USE_IDMAC; >> mci_writel(host, CTRL, temp); >> >> - wmb(); >> + wmb(); /* drain writebuffer */ >> >> /* Enable the IDMAC */ >> temp = mci_readl(host, BMOD); >> @@ -589,7 +592,9 @@ static int dw_mci_idmac_init(struct dw_mci *host) >> host->ring_size = PAGE_SIZE / sizeof(struct idmac_desc); >> >> /* Forward link the descriptor list */ >> - for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++) { >> + for (i = 0, p = host->sg_cpu; >> + i < host->ring_size - 1; >> + i++, p++) { >> p->des3 = cpu_to_le32(host->sg_dma + >> (sizeof(struct idmac_desc) * (i + 1))); >> p->des1 = 0; >> @@ -718,7 +723,7 @@ static void dw_mci_adjust_fifoth(struct dw_mci *host, struct mmc_data *data) >> u32 fifo_width = 1 << host->data_shift; >> u32 blksz_depth = blksz / fifo_width, fifoth_val; >> u32 msize = 0, rx_wmark = 1, tx_wmark, tx_wmark_invers; >> - int idx = (sizeof(mszs) / sizeof(mszs[0])) - 1; >> + int idx = ARRAY_SIZE(mszs) - 1; >> >> tx_wmark = (host->fifo_depth) / 2; >> tx_wmark_invers = host->fifo_depth - tx_wmark; >> @@ -843,6 +848,7 @@ static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data) >> static void dw_mci_submit_data(struct dw_mci *host, struct mmc_data *data) >> { >> unsigned long irqflags; >> + int flags = SG_MITER_ATOMIC; >> u32 temp; >> >> data->error = -EINPROGRESS; >> @@ -859,7 +865,6 @@ static void dw_mci_submit_data(struct dw_mci *host, struct mmc_data *data) >> } >> >> if (dw_mci_submit_data_dma(host, data)) { >> - int flags = SG_MITER_ATOMIC; >> if (host->data->flags & MMC_DATA_READ) >> flags |= SG_MITER_TO_SG; >> else >> @@ -906,6 +911,7 @@ static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg) >> unsigned int cmd_status = 0; >> >> mci_writel(host, CMDARG, arg); >> + /* Make sure CMDARG is configured before CMD */ >> wmb(); >> dw_mci_wait_while_busy(host, cmd); >> mci_writel(host, CMD, SDMMC_CMD_START | cmd); >> @@ -1019,6 +1025,7 @@ static void __dw_mci_start_request(struct dw_mci *host, >> >> if (data) { >> dw_mci_submit_data(host, data); >> + /* drain writebuffer */ >> wmb(); > > I think good that you have consistency for above comment. > wmb(); /* drain writebuffer */ > or > /* drain writebuffer */ > wmb(); > > What do you want? > > Best Regards, > Jaehoon Chung > >> } >> >> @@ -1384,14 +1391,15 @@ static int dw_mci_execute_tuning(struct mmc_host *mmc, u32 opcode) >> struct dw_mci_slot *slot = mmc_priv(mmc); >> struct dw_mci *host = slot->host; >> const struct dw_mci_drv_data *drv_data = host->drv_data; >> - int err = -ENOSYS; >> + int err = -EINVAL; >> >> if (drv_data && drv_data->execute_tuning) >> err = drv_data->execute_tuning(slot); >> return err; >> } >> >> -static int dw_mci_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_ios *ios) >> +static int dw_mci_prepare_hs400_tuning(struct mmc_host *mmc, >> + struct mmc_ios *ios) >> { >> struct dw_mci_slot *slot = mmc_priv(mmc); >> struct dw_mci *host = slot->host; >> @@ -1743,7 +1751,7 @@ static int dw_mci_push_part_bytes(struct dw_mci *host, void *buf, int cnt) >> /* pull first bytes from part_buf, only use during pull */ >> static int dw_mci_pull_part_bytes(struct dw_mci *host, void *buf, int cnt) >> { >> - cnt = min(cnt, (int)host->part_buf_count); >> + cnt = min_t(int, cnt, host->part_buf_count); >> if (cnt) { >> memcpy(buf, (void *)&host->part_buf + host->part_buf_start, >> cnt); >> @@ -1769,6 +1777,7 @@ static void dw_mci_push_data16(struct dw_mci *host, void *buf, int cnt) >> /* try and push anything in the part_buf */ >> if (unlikely(host->part_buf_count)) { >> int len = dw_mci_push_part_bytes(host, buf, cnt); >> + >> buf += len; >> cnt -= len; >> if (host->part_buf_count == 2) { >> @@ -1795,6 +1804,7 @@ static void dw_mci_push_data16(struct dw_mci *host, void *buf, int cnt) >> #endif >> { >> u16 *pdata = buf; >> + >> for (; cnt >= 2; cnt -= 2) >> mci_fifo_writew(host->fifo_reg, *pdata++); >> buf = pdata; >> @@ -1819,6 +1829,7 @@ static void dw_mci_pull_data16(struct dw_mci *host, void *buf, int cnt) >> int len = min(cnt & -2, (int)sizeof(aligned_buf)); >> int items = len >> 1; >> int i; >> + >> for (i = 0; i < items; ++i) >> aligned_buf[i] = mci_fifo_readw(host->fifo_reg); >> /* memcpy from aligned buffer into output buffer */ >> @@ -1830,6 +1841,7 @@ static void dw_mci_pull_data16(struct dw_mci *host, void *buf, int cnt) >> #endif >> { >> u16 *pdata = buf; >> + >> for (; cnt >= 2; cnt -= 2) >> *pdata++ = mci_fifo_readw(host->fifo_reg); >> buf = pdata; >> @@ -1848,6 +1860,7 @@ static void dw_mci_push_data32(struct dw_mci *host, void *buf, int cnt) >> /* try and push anything in the part_buf */ >> if (unlikely(host->part_buf_count)) { >> int len = dw_mci_push_part_bytes(host, buf, cnt); >> + >> buf += len; >> cnt -= len; >> if (host->part_buf_count == 4) { >> @@ -1874,6 +1887,7 @@ static void dw_mci_push_data32(struct dw_mci *host, void *buf, int cnt) >> #endif >> { >> u32 *pdata = buf; >> + >> for (; cnt >= 4; cnt -= 4) >> mci_fifo_writel(host->fifo_reg, *pdata++); >> buf = pdata; >> @@ -1898,6 +1912,7 @@ static void dw_mci_pull_data32(struct dw_mci *host, void *buf, int cnt) >> int len = min(cnt & -4, (int)sizeof(aligned_buf)); >> int items = len >> 2; >> int i; >> + >> for (i = 0; i < items; ++i) >> aligned_buf[i] = mci_fifo_readl(host->fifo_reg); >> /* memcpy from aligned buffer into output buffer */ >> @@ -1909,6 +1924,7 @@ static void dw_mci_pull_data32(struct dw_mci *host, void *buf, int cnt) >> #endif >> { >> u32 *pdata = buf; >> + >> for (; cnt >= 4; cnt -= 4) >> *pdata++ = mci_fifo_readl(host->fifo_reg); >> buf = pdata; >> @@ -1927,6 +1943,7 @@ static void dw_mci_push_data64(struct dw_mci *host, void *buf, int cnt) >> /* try and push anything in the part_buf */ >> if (unlikely(host->part_buf_count)) { >> int len = dw_mci_push_part_bytes(host, buf, cnt); >> + >> buf += len; >> cnt -= len; >> >> @@ -1954,6 +1971,7 @@ static void dw_mci_push_data64(struct dw_mci *host, void *buf, int cnt) >> #endif >> { >> u64 *pdata = buf; >> + >> for (; cnt >= 8; cnt -= 8) >> mci_fifo_writeq(host->fifo_reg, *pdata++); >> buf = pdata; >> @@ -1978,6 +1996,7 @@ static void dw_mci_pull_data64(struct dw_mci *host, void *buf, int cnt) >> int len = min(cnt & -8, (int)sizeof(aligned_buf)); >> int items = len >> 3; >> int i; >> + >> for (i = 0; i < items; ++i) >> aligned_buf[i] = mci_fifo_readq(host->fifo_reg); >> >> @@ -1990,6 +2009,7 @@ static void dw_mci_pull_data64(struct dw_mci *host, void *buf, int cnt) >> #endif >> { >> u64 *pdata = buf; >> + >> for (; cnt >= 8; cnt -= 8) >> *pdata++ = mci_fifo_readq(host->fifo_reg); >> buf = pdata; >> @@ -2065,7 +2085,7 @@ static void dw_mci_read_data_pio(struct dw_mci *host, bool dto) >> done: >> sg_miter_stop(sg_miter); >> host->sg = NULL; >> - smp_wmb(); >> + smp_wmb(); /* drain writebuffer */ >> set_bit(EVENT_XFER_COMPLETE, &host->pending_events); >> } >> >> @@ -2119,7 +2139,7 @@ static void dw_mci_write_data_pio(struct dw_mci *host) >> done: >> sg_miter_stop(sg_miter); >> host->sg = NULL; >> - smp_wmb(); >> + smp_wmb(); /* drain writebuffer */ >> set_bit(EVENT_XFER_COMPLETE, &host->pending_events); >> } >> >> @@ -2128,6 +2148,7 @@ static void dw_mci_cmd_interrupt(struct dw_mci *host, u32 status) >> if (!host->cmd_status) >> host->cmd_status = status; >> >> + /* drain writebuffer */ >> smp_wmb(); >> >> set_bit(EVENT_CMD_COMPLETE, &host->pending_events); >> @@ -2192,7 +2213,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) >> if (pending & DW_MCI_CMD_ERROR_FLAGS) { >> mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS); >> host->cmd_status = pending; >> - smp_wmb(); >> + smp_wmb(); /* drain writebuffer */ >> set_bit(EVENT_CMD_COMPLETE, &host->pending_events); >> } >> >> @@ -2200,7 +2221,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) >> /* if there is an error report DATA_ERROR */ >> mci_writel(host, RINTSTS, DW_MCI_DATA_ERROR_FLAGS); >> host->data_status = pending; >> - smp_wmb(); >> + smp_wmb(); /* drain writebuffer */ >> set_bit(EVENT_DATA_ERROR, &host->pending_events); >> tasklet_schedule(&host->tasklet); >> } >> @@ -2209,7 +2230,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) >> mci_writel(host, RINTSTS, SDMMC_INT_DATA_OVER); >> if (!host->data_status) >> host->data_status = pending; >> - smp_wmb(); >> + smp_wmb(); /* drain writebuffer */ >> if (host->dir_status == DW_MCI_RECV_STATUS) { >> if (host->sg != NULL) >> dw_mci_read_data_pio(host, true); >> @@ -2473,8 +2494,8 @@ static void dw_mci_init_dma(struct dw_mci *host) >> if (host->dma_ops->init && host->dma_ops->start && >> host->dma_ops->stop && host->dma_ops->cleanup) { >> if (host->dma_ops->init(host)) { >> - dev_err(host->dev, "%s: Unable to initialize " >> - "DMA Controller.\n", __func__); >> + dev_err(host->dev, "%s: Unable to initialize DMA Controller.\n", >> + __func__); >> goto no_dma; >> } >> } else { >> @@ -2488,7 +2509,6 @@ static void dw_mci_init_dma(struct dw_mci *host) >> no_dma: >> dev_info(host->dev, "Using PIO mode.\n"); >> host->use_dma = 0; >> - return; >> } >> >> static bool dw_mci_ctrl_reset(struct dw_mci *host, u32 reset) >> @@ -2542,6 +2562,7 @@ static bool dw_mci_reset(struct dw_mci *host) >> if (host->use_dma) { >> unsigned long timeout = jiffies + msecs_to_jiffies(500); >> u32 status; >> + >> do { >> status = mci_readl(host, STATUS); >> if (!(status & SDMMC_STATUS_DMA_REQ)) >> @@ -2551,8 +2572,8 @@ static bool dw_mci_reset(struct dw_mci *host) >> >> if (status & SDMMC_STATUS_DMA_REQ) { >> dev_err(host->dev, >> - "%s: Timeout waiting for dma_req to " >> - "clear during reset\n", __func__); >> + "%s: Timeout waiting for dma_req to clear during reset\n", >> + __func__); >> goto ciu_out; >> } >> >> @@ -2563,8 +2584,8 @@ static bool dw_mci_reset(struct dw_mci *host) >> } else { >> /* if the controller reset bit did clear, then set clock regs */ >> if (!(mci_readl(host, CTRL) & SDMMC_CTRL_RESET)) { >> - dev_err(host->dev, "%s: fifo/dma reset bits didn't " >> - "clear but ciu was reset, doing clock update\n", >> + dev_err(host->dev, >> + "%s: fifo/dma reset bits didn't clear but ciu was reset, doing clock update\n", >> __func__); >> goto ciu_out; >> } >> @@ -2625,8 +2646,8 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host) >> /* find out number of slots supported */ >> if (of_property_read_u32(dev->of_node, "num-slots", >> &pdata->num_slots)) { >> - dev_info(dev, "num-slots property not found, " >> - "assuming 1 slot is available\n"); >> + dev_info(dev, >> + "num-slots property not found, assuming 1 slot is available\n"); >> pdata->num_slots = 1; >> } >> >> @@ -2636,8 +2657,8 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host) >> pdata->quirks |= of_quirks[idx].id; >> >> if (of_property_read_u32(np, "fifo-depth", &pdata->fifo_depth)) >> - dev_info(dev, "fifo-depth property not found, using " >> - "value of FIFOTH register as default\n"); >> + dev_info(dev, >> + "fifo-depth property not found, using value of FIFOTH register as default\n"); >> >> of_property_read_u32(np, "card-detect-delay", &pdata->detect_delay_ms); >> >> @@ -2874,11 +2895,11 @@ int dw_mci_probe(struct dw_mci *host) >> mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER | >> SDMMC_INT_TXDR | SDMMC_INT_RXDR | >> DW_MCI_ERROR_FLAGS); >> - mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci interrupt */ >> + /* Enable mci interrupt */ >> + mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); >> >> - dev_info(host->dev, "DW MMC controller at irq %d, " >> - "%d bit host data width, " >> - "%u deep fifo\n", >> + dev_info(host->dev, >> + "DW MMC controller at irq %d,%d bit host data width,%u deep fifo\n", >> host->irq, width, fifo_size); >> >> /* We need at least one slot to succeed */ >> @@ -2893,8 +2914,9 @@ int dw_mci_probe(struct dw_mci *host) >> if (init_slots) { >> dev_info(host->dev, "%d slots initialized\n", init_slots); >> } else { >> - dev_dbg(host->dev, "attempted to initialize %d slots, " >> - "but failed on all\n", host->num_slots); >> + dev_dbg(host->dev, >> + "attempted to initialize %d slots, but failed on all\n", >> + host->num_slots); >> goto err_dmaunmap; >> } >> >> @@ -2992,6 +3014,7 @@ int dw_mci_resume(struct dw_mci *host) >> >> for (i = 0; i < host->num_slots; i++) { >> struct dw_mci_slot *slot = host->slot[i]; >> + >> if (!slot) >> continue; >> if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) { >> > > > > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 40e9d8e..6aede38 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -235,8 +235,8 @@ static u32 dw_mci_prepare_command(struct mmc_host *mmc, struct mmc_command *cmd) struct dw_mci *host = slot->host; const struct dw_mci_drv_data *drv_data = slot->host->drv_data; u32 cmdr; - cmd->error = -EINPROGRESS; + cmd->error = -EINPROGRESS; cmdr = cmd->opcode; if (cmd->opcode == MMC_STOP_TRANSMISSION || @@ -371,6 +371,7 @@ static void dw_mci_start_command(struct dw_mci *host, cmd->arg, cmd_flags); mci_writel(host, CMDARG, cmd->arg); + /* Make sure CMDARG is configured before CMD */ wmb(); dw_mci_wait_while_busy(host, cmd_flags); @@ -380,6 +381,7 @@ static void dw_mci_start_command(struct dw_mci *host, static inline void send_stop_abort(struct dw_mci *host, struct mmc_data *data) { struct mmc_command *stop = data->stop ? data->stop : &host->stop_abort; + dw_mci_start_command(host, stop, host->stop_cmdr); } @@ -463,6 +465,7 @@ static void dw_mci_translate_sglist(struct dw_mci *host, struct mmc_data *data, unsigned int sg_len) { int i; + if (host->dma_64bit_address == 1) { struct idmac_desc_64addr *desc = host->sg_cpu; @@ -524,7 +527,7 @@ static void dw_mci_translate_sglist(struct dw_mci *host, struct mmc_data *data, desc->des0 |= cpu_to_le32(IDMAC_DES0_LD); } - wmb(); + wmb(); /* drain writebuffer */ } static void dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len) @@ -542,7 +545,7 @@ static void dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len) temp |= SDMMC_CTRL_USE_IDMAC; mci_writel(host, CTRL, temp); - wmb(); + wmb(); /* drain writebuffer */ /* Enable the IDMAC */ temp = mci_readl(host, BMOD); @@ -589,7 +592,9 @@ static int dw_mci_idmac_init(struct dw_mci *host) host->ring_size = PAGE_SIZE / sizeof(struct idmac_desc); /* Forward link the descriptor list */ - for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++) { + for (i = 0, p = host->sg_cpu; + i < host->ring_size - 1; + i++, p++) { p->des3 = cpu_to_le32(host->sg_dma + (sizeof(struct idmac_desc) * (i + 1))); p->des1 = 0; @@ -718,7 +723,7 @@ static void dw_mci_adjust_fifoth(struct dw_mci *host, struct mmc_data *data) u32 fifo_width = 1 << host->data_shift; u32 blksz_depth = blksz / fifo_width, fifoth_val; u32 msize = 0, rx_wmark = 1, tx_wmark, tx_wmark_invers; - int idx = (sizeof(mszs) / sizeof(mszs[0])) - 1; + int idx = ARRAY_SIZE(mszs) - 1; tx_wmark = (host->fifo_depth) / 2; tx_wmark_invers = host->fifo_depth - tx_wmark; @@ -843,6 +848,7 @@ static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data) static void dw_mci_submit_data(struct dw_mci *host, struct mmc_data *data) { unsigned long irqflags; + int flags = SG_MITER_ATOMIC; u32 temp; data->error = -EINPROGRESS; @@ -859,7 +865,6 @@ static void dw_mci_submit_data(struct dw_mci *host, struct mmc_data *data) } if (dw_mci_submit_data_dma(host, data)) { - int flags = SG_MITER_ATOMIC; if (host->data->flags & MMC_DATA_READ) flags |= SG_MITER_TO_SG; else @@ -906,6 +911,7 @@ static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg) unsigned int cmd_status = 0; mci_writel(host, CMDARG, arg); + /* Make sure CMDARG is configured before CMD */ wmb(); dw_mci_wait_while_busy(host, cmd); mci_writel(host, CMD, SDMMC_CMD_START | cmd); @@ -1019,6 +1025,7 @@ static void __dw_mci_start_request(struct dw_mci *host, if (data) { dw_mci_submit_data(host, data); + /* drain writebuffer */ wmb(); } @@ -1384,14 +1391,15 @@ static int dw_mci_execute_tuning(struct mmc_host *mmc, u32 opcode) struct dw_mci_slot *slot = mmc_priv(mmc); struct dw_mci *host = slot->host; const struct dw_mci_drv_data *drv_data = host->drv_data; - int err = -ENOSYS; + int err = -EINVAL; if (drv_data && drv_data->execute_tuning) err = drv_data->execute_tuning(slot); return err; } -static int dw_mci_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_ios *ios) +static int dw_mci_prepare_hs400_tuning(struct mmc_host *mmc, + struct mmc_ios *ios) { struct dw_mci_slot *slot = mmc_priv(mmc); struct dw_mci *host = slot->host; @@ -1743,7 +1751,7 @@ static int dw_mci_push_part_bytes(struct dw_mci *host, void *buf, int cnt) /* pull first bytes from part_buf, only use during pull */ static int dw_mci_pull_part_bytes(struct dw_mci *host, void *buf, int cnt) { - cnt = min(cnt, (int)host->part_buf_count); + cnt = min_t(int, cnt, host->part_buf_count); if (cnt) { memcpy(buf, (void *)&host->part_buf + host->part_buf_start, cnt); @@ -1769,6 +1777,7 @@ static void dw_mci_push_data16(struct dw_mci *host, void *buf, int cnt) /* try and push anything in the part_buf */ if (unlikely(host->part_buf_count)) { int len = dw_mci_push_part_bytes(host, buf, cnt); + buf += len; cnt -= len; if (host->part_buf_count == 2) { @@ -1795,6 +1804,7 @@ static void dw_mci_push_data16(struct dw_mci *host, void *buf, int cnt) #endif { u16 *pdata = buf; + for (; cnt >= 2; cnt -= 2) mci_fifo_writew(host->fifo_reg, *pdata++); buf = pdata; @@ -1819,6 +1829,7 @@ static void dw_mci_pull_data16(struct dw_mci *host, void *buf, int cnt) int len = min(cnt & -2, (int)sizeof(aligned_buf)); int items = len >> 1; int i; + for (i = 0; i < items; ++i) aligned_buf[i] = mci_fifo_readw(host->fifo_reg); /* memcpy from aligned buffer into output buffer */ @@ -1830,6 +1841,7 @@ static void dw_mci_pull_data16(struct dw_mci *host, void *buf, int cnt) #endif { u16 *pdata = buf; + for (; cnt >= 2; cnt -= 2) *pdata++ = mci_fifo_readw(host->fifo_reg); buf = pdata; @@ -1848,6 +1860,7 @@ static void dw_mci_push_data32(struct dw_mci *host, void *buf, int cnt) /* try and push anything in the part_buf */ if (unlikely(host->part_buf_count)) { int len = dw_mci_push_part_bytes(host, buf, cnt); + buf += len; cnt -= len; if (host->part_buf_count == 4) { @@ -1874,6 +1887,7 @@ static void dw_mci_push_data32(struct dw_mci *host, void *buf, int cnt) #endif { u32 *pdata = buf; + for (; cnt >= 4; cnt -= 4) mci_fifo_writel(host->fifo_reg, *pdata++); buf = pdata; @@ -1898,6 +1912,7 @@ static void dw_mci_pull_data32(struct dw_mci *host, void *buf, int cnt) int len = min(cnt & -4, (int)sizeof(aligned_buf)); int items = len >> 2; int i; + for (i = 0; i < items; ++i) aligned_buf[i] = mci_fifo_readl(host->fifo_reg); /* memcpy from aligned buffer into output buffer */ @@ -1909,6 +1924,7 @@ static void dw_mci_pull_data32(struct dw_mci *host, void *buf, int cnt) #endif { u32 *pdata = buf; + for (; cnt >= 4; cnt -= 4) *pdata++ = mci_fifo_readl(host->fifo_reg); buf = pdata; @@ -1927,6 +1943,7 @@ static void dw_mci_push_data64(struct dw_mci *host, void *buf, int cnt) /* try and push anything in the part_buf */ if (unlikely(host->part_buf_count)) { int len = dw_mci_push_part_bytes(host, buf, cnt); + buf += len; cnt -= len; @@ -1954,6 +1971,7 @@ static void dw_mci_push_data64(struct dw_mci *host, void *buf, int cnt) #endif { u64 *pdata = buf; + for (; cnt >= 8; cnt -= 8) mci_fifo_writeq(host->fifo_reg, *pdata++); buf = pdata; @@ -1978,6 +1996,7 @@ static void dw_mci_pull_data64(struct dw_mci *host, void *buf, int cnt) int len = min(cnt & -8, (int)sizeof(aligned_buf)); int items = len >> 3; int i; + for (i = 0; i < items; ++i) aligned_buf[i] = mci_fifo_readq(host->fifo_reg); @@ -1990,6 +2009,7 @@ static void dw_mci_pull_data64(struct dw_mci *host, void *buf, int cnt) #endif { u64 *pdata = buf; + for (; cnt >= 8; cnt -= 8) *pdata++ = mci_fifo_readq(host->fifo_reg); buf = pdata; @@ -2065,7 +2085,7 @@ static void dw_mci_read_data_pio(struct dw_mci *host, bool dto) done: sg_miter_stop(sg_miter); host->sg = NULL; - smp_wmb(); + smp_wmb(); /* drain writebuffer */ set_bit(EVENT_XFER_COMPLETE, &host->pending_events); } @@ -2119,7 +2139,7 @@ static void dw_mci_write_data_pio(struct dw_mci *host) done: sg_miter_stop(sg_miter); host->sg = NULL; - smp_wmb(); + smp_wmb(); /* drain writebuffer */ set_bit(EVENT_XFER_COMPLETE, &host->pending_events); } @@ -2128,6 +2148,7 @@ static void dw_mci_cmd_interrupt(struct dw_mci *host, u32 status) if (!host->cmd_status) host->cmd_status = status; + /* drain writebuffer */ smp_wmb(); set_bit(EVENT_CMD_COMPLETE, &host->pending_events); @@ -2192,7 +2213,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) if (pending & DW_MCI_CMD_ERROR_FLAGS) { mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS); host->cmd_status = pending; - smp_wmb(); + smp_wmb(); /* drain writebuffer */ set_bit(EVENT_CMD_COMPLETE, &host->pending_events); } @@ -2200,7 +2221,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) /* if there is an error report DATA_ERROR */ mci_writel(host, RINTSTS, DW_MCI_DATA_ERROR_FLAGS); host->data_status = pending; - smp_wmb(); + smp_wmb(); /* drain writebuffer */ set_bit(EVENT_DATA_ERROR, &host->pending_events); tasklet_schedule(&host->tasklet); } @@ -2209,7 +2230,7 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) mci_writel(host, RINTSTS, SDMMC_INT_DATA_OVER); if (!host->data_status) host->data_status = pending; - smp_wmb(); + smp_wmb(); /* drain writebuffer */ if (host->dir_status == DW_MCI_RECV_STATUS) { if (host->sg != NULL) dw_mci_read_data_pio(host, true); @@ -2473,8 +2494,8 @@ static void dw_mci_init_dma(struct dw_mci *host) if (host->dma_ops->init && host->dma_ops->start && host->dma_ops->stop && host->dma_ops->cleanup) { if (host->dma_ops->init(host)) { - dev_err(host->dev, "%s: Unable to initialize " - "DMA Controller.\n", __func__); + dev_err(host->dev, "%s: Unable to initialize DMA Controller.\n", + __func__); goto no_dma; } } else { @@ -2488,7 +2509,6 @@ static void dw_mci_init_dma(struct dw_mci *host) no_dma: dev_info(host->dev, "Using PIO mode.\n"); host->use_dma = 0; - return; } static bool dw_mci_ctrl_reset(struct dw_mci *host, u32 reset) @@ -2542,6 +2562,7 @@ static bool dw_mci_reset(struct dw_mci *host) if (host->use_dma) { unsigned long timeout = jiffies + msecs_to_jiffies(500); u32 status; + do { status = mci_readl(host, STATUS); if (!(status & SDMMC_STATUS_DMA_REQ)) @@ -2551,8 +2572,8 @@ static bool dw_mci_reset(struct dw_mci *host) if (status & SDMMC_STATUS_DMA_REQ) { dev_err(host->dev, - "%s: Timeout waiting for dma_req to " - "clear during reset\n", __func__); + "%s: Timeout waiting for dma_req to clear during reset\n", + __func__); goto ciu_out; } @@ -2563,8 +2584,8 @@ static bool dw_mci_reset(struct dw_mci *host) } else { /* if the controller reset bit did clear, then set clock regs */ if (!(mci_readl(host, CTRL) & SDMMC_CTRL_RESET)) { - dev_err(host->dev, "%s: fifo/dma reset bits didn't " - "clear but ciu was reset, doing clock update\n", + dev_err(host->dev, + "%s: fifo/dma reset bits didn't clear but ciu was reset, doing clock update\n", __func__); goto ciu_out; } @@ -2625,8 +2646,8 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host) /* find out number of slots supported */ if (of_property_read_u32(dev->of_node, "num-slots", &pdata->num_slots)) { - dev_info(dev, "num-slots property not found, " - "assuming 1 slot is available\n"); + dev_info(dev, + "num-slots property not found, assuming 1 slot is available\n"); pdata->num_slots = 1; } @@ -2636,8 +2657,8 @@ static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host) pdata->quirks |= of_quirks[idx].id; if (of_property_read_u32(np, "fifo-depth", &pdata->fifo_depth)) - dev_info(dev, "fifo-depth property not found, using " - "value of FIFOTH register as default\n"); + dev_info(dev, + "fifo-depth property not found, using value of FIFOTH register as default\n"); of_property_read_u32(np, "card-detect-delay", &pdata->detect_delay_ms); @@ -2874,11 +2895,11 @@ int dw_mci_probe(struct dw_mci *host) mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER | SDMMC_INT_TXDR | SDMMC_INT_RXDR | DW_MCI_ERROR_FLAGS); - mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci interrupt */ + /* Enable mci interrupt */ + mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); - dev_info(host->dev, "DW MMC controller at irq %d, " - "%d bit host data width, " - "%u deep fifo\n", + dev_info(host->dev, + "DW MMC controller at irq %d,%d bit host data width,%u deep fifo\n", host->irq, width, fifo_size); /* We need at least one slot to succeed */ @@ -2893,8 +2914,9 @@ int dw_mci_probe(struct dw_mci *host) if (init_slots) { dev_info(host->dev, "%d slots initialized\n", init_slots); } else { - dev_dbg(host->dev, "attempted to initialize %d slots, " - "but failed on all\n", host->num_slots); + dev_dbg(host->dev, + "attempted to initialize %d slots, but failed on all\n", + host->num_slots); goto err_dmaunmap; } @@ -2992,6 +3014,7 @@ int dw_mci_resume(struct dw_mci *host) for (i = 0; i < host->num_slots; i++) { struct dw_mci_slot *slot = host->slot[i]; + if (!slot) continue; if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) {
This patch fixes the following issues reported by checkpatch.pl: - use -EINVAL instead of -ENOSYS, to fix warning message: "ENOSYS means 'invalid syscall nr' and nothing else" - split lines whose length is greater than 80 characters - avoid quoted string split across lines - use min_t instead of min, to fix warning message: "min() should probably be min_t(int, cnt, host->part_buf_count)" Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> --- drivers/mmc/host/dw_mmc.c | 85 ++++++++++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 31 deletions(-)