dw_mmc: support send_auto_stop
Subsystems (2)
Jaehoon Chung
maintainerPATCH 1/1 dw_mmc: support send_auto_stop
This patch is set the send_auto_stop bit in CMD register. If use DW_MCI_QUIRK_SEND_AUTO_STOP, helps to send an exact number of data bytes.
--- drivers/mmc/host/dw_mmc.c | 10 ++++++++++ include/linux/mmc/dw_mmc.h | 2 ++ 2 files changed, 12 insertions(+), 0 deletions(-)
drivers/mmc/host/dw_mmc.c +10 -0
@@ -229,6 +229,8 @@ static void dw_mci_set_timeout(struct dw_mci *host)static u32 dw_mci_prepare_command (struct mmc_host *mmc,struct mmc_command *cmd) { +struct dw_mci_slot *slot =mmc_priv (mmc); +struct dw_mci *host = slot->host;struct mmc_data *data;u32 cmdr; cmd->error = -EINPROGRESS ;
@@ -257,6 +259,9 @@ static u32 dw_mci_prepare_command(struct mmc_host *mmc, struct mmc_command *cmd) cmdr |=SDMMC_CMD_STRM_MODE ;if (data->flags &MMC_DATA_WRITE ) cmdr |=SDMMC_CMD_DAT_WR ; +if ((host->quirks &DW_MCI_QUIRK_SEND_AUTO_STOP ) && + (data->blocks >1 )) + cmdr |=SDMMC_CMD_SEND_STOP ; }return cmdr;
@@ -656,6 +661,11 @@ static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)return ; } +if ((host->quirks &DW_MCI_QUIRK_SEND_AUTO_STOP ) && mrq->stop) { + mrq->data->stop =NULL ; + mrq->stop =NULL ; + } +/* We don't support multiple blocks of weird lengths. */ dw_mci_queue_request (host, slot, mrq); }
include/linux/mmc/dw_mmc.h +2 -0
@@ -176,6 +176,8 @@ struct dw_mci_dma_ops {#define DW_MCI_QUIRK_HIGHSPEED BIT(2)/* Unreliable card detection */ #define DW_MCI_QUIRK_BROKEN_CARD_DETECTION BIT(3) +/* Use Auto_Send_Stop Command */ +#define DW_MCI_QUIRK_SEND_AUTO_STOP BIT(4)struct dma_pdata ;
Quoted 7 lines · Jaehoon Chung
This patch is set the
send_auto_stopbit in CMD register. If useDW_MCI_QUIRK_SEND_AUTO_STOP, helps to send an exact number of data bytes.Signed-off-by Jaehoon Chung <[email protected]>Signed-off-by Kyungmin Park <[email protected]>
This is something I have been meaning to look into, does it improve latency or throughput in your experiments?
Is there a reason you have implemented it as a quirk? I would have thought if it was a win (in performance or code size) it would be applicable to all instances of this block?
If we implemented it as an unconditional feature then we could probably remove some of the explicit stop handling code.
Jaehoon Chung
maintainerQuoted 11 lines · Will Newton
Quoted 7 lines · Jaehoon Chung
This patch is set the
send_auto_stopbit in CMD register. If useDW_MCI_QUIRK_SEND_AUTO_STOP, helps to send an exact number of data bytes.Signed-off-by Jaehoon Chung <[email protected]>Signed-off-by Kyungmin Park <[email protected]>This is something I have been meaning to look into, does it improve latency or throughput in your experiments?
Not improve latency...but in my experiments, when i used this, i could find the stable throughput..
Quoted 4 lines
Is there a reason you have implemented it as a quirk? I would have thought if it was a win (in performance or code size) it would be applicable to all instances of this block?
I didn't test every case..so Somebody doesn't want to use send_auto_stop, So i think good that used the quirks...
you can see Send_Auto_Stop generation table in DesigneWare MMC controller spec I think that our case can use send_auto_stop...but i didn't ensure in other case
Quoted 8 lines
If we implemented it as an unconditional feature then we could probably remove some of the explicit stop handling code.
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html