Message ID | 20220720123737.117-1-charl.liu@bayhubtech.com |
---|---|
State | New |
Headers | show |
Series | [V1,1/1] mmc:sdhci:Fix the SD tuning CMD parameter issue that the SDHCI_TRANSFER_MODE is cleared from read direction to write direction incorrectly | expand |
On 20/07/22 15:37, Charl Liu wrote: > When cmd->opcode == MMC_SEND_TUNING_BLOCK, the SDHCI_TRANSFER_MODE > should also be kept > > Signed-off-by: Charl Liu <charl.liu@bayhubtech.com> > --- > Change in V1: > Keeping the SDHCI_TRANSFER_MODE when cmd->opcode == MMC_END_TUNING_ > BLOCK > --- > drivers/mmc/host/sdhci.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c > index 22152029e14c..6a0f6725dadb 100644 > --- a/drivers/mmc/host/sdhci.c > +++ b/drivers/mmc/host/sdhci.c > @@ -1430,7 +1430,8 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host, > if (host->quirks2 & > SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD) { > /* must not clear SDHCI_TRANSFER_MODE when tuning */ > - if (cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) > + if ((cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) && > + (cmd->opcode != MMC_SEND_TUNING_BLOCK)) mmc_op_tuning() could be used here > sdhci_writew(host, 0x0, SDHCI_TRANSFER_MODE); > } else { > /* clear Auto CMD settings for no data CMDs */
Hi, Adrian, Sorry response you so late. Does your comment "mmc_op_tuning() could be used here" means that we should use mmc_send_tuning() instead of sdhci_send_tuning? If yes, I think we need add below patch commit by Charl Liu for those reasons: 1.Bayhub host tuning command does not have a data payload and our hardware does it automatically, so mmc_send_tuning() will return -EIO. 2.Bayhub host can be used for both SD and eMMC cards. 3.Both MMC_SEND_TUNING_BLOCK and MMC_SEND_TUNING_BLOCK_HS200 are tuning command opcode, maybe the same logical at here is better? BR, Chevron -----邮件原件----- 发件人: Adrian Hunter <adrian.hunter@intel.com> 发送时间: Sunday, July 24, 2022 15:22 收件人: Charl Liu (WH) <charl.liu@bayhubtech.com>; ulf.hansson@linaro.org; linux-mmc@vger.kernel.org; linux-kernel@vger.kernel.org 抄送: Shaper Liu (WH) <shaper.liu@bayhubtech.com>; Chevron Li (WH) <chevron.li@bayhubtech.com>; Thomas Hu(WH) <thomas.hu@bayhubtech.com>; XiaoGuang Yu (WH) <xiaoguang.yu@bayhubtech.com>; Shirley Her(SC) <shirley.her@bayhubtech.com> 主题: Re: [PATCH V1 1/1] mmc:sdhci:Fix the SD tuning CMD parameter issue that the SDHCI_TRANSFER_MODE is cleared from read direction to write direction incorrectly On 20/07/22 15:37, Charl Liu wrote: > When cmd->opcode == MMC_SEND_TUNING_BLOCK, the SDHCI_TRANSFER_MODE > should also be kept > > Signed-off-by: Charl Liu <charl.liu@bayhubtech.com> > --- > Change in V1: > Keeping the SDHCI_TRANSFER_MODE when cmd->opcode == MMC_END_TUNING_ > BLOCK > --- > drivers/mmc/host/sdhci.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index > 22152029e14c..6a0f6725dadb 100644 > --- a/drivers/mmc/host/sdhci.c > +++ b/drivers/mmc/host/sdhci.c > @@ -1430,7 +1430,8 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host, > if (host->quirks2 & > SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD) { > /* must not clear SDHCI_TRANSFER_MODE when tuning */ > - if (cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) > + if ((cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) && > + (cmd->opcode != MMC_SEND_TUNING_BLOCK)) mmc_op_tuning() could be used here > sdhci_writew(host, 0x0, SDHCI_TRANSFER_MODE); > } else { > /* clear Auto CMD settings for no data CMDs */
On 31/08/22 15:04, Chevron Li (WH) wrote: > Hi, Adrian, > > Sorry response you so late. > > Does your comment "mmc_op_tuning() could be used here" means that we should use mmc_send_tuning() instead of sdhci_send_tuning? I just meant, instead of: - if (cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) + if ((cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) && + (cmd->opcode != MMC_SEND_TUNING_BLOCK)) this is simpler: - if (cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) + if (!mmc_op_tuning(cmd->opcode)) > > If yes, I think we need add below patch commit by Charl Liu for those reasons: > 1.Bayhub host tuning command does not have a data payload and our hardware does it automatically, so mmc_send_tuning() will return -EIO. > 2.Bayhub host can be used for both SD and eMMC cards. > 3.Both MMC_SEND_TUNING_BLOCK and MMC_SEND_TUNING_BLOCK_HS200 are tuning command opcode, maybe the same logical at here is better? > > BR, > Chevron > > -----邮件原件----- > 发件人: Adrian Hunter <adrian.hunter@intel.com> > 发送时间: Sunday, July 24, 2022 15:22 > 收件人: Charl Liu (WH) <charl.liu@bayhubtech.com>; ulf.hansson@linaro.org; linux-mmc@vger.kernel.org; linux-kernel@vger.kernel.org > 抄送: Shaper Liu (WH) <shaper.liu@bayhubtech.com>; Chevron Li (WH) <chevron.li@bayhubtech.com>; Thomas Hu(WH) <thomas.hu@bayhubtech.com>; XiaoGuang Yu (WH) <xiaoguang.yu@bayhubtech.com>; Shirley Her(SC) <shirley.her@bayhubtech.com> > 主题: Re: [PATCH V1 1/1] mmc:sdhci:Fix the SD tuning CMD parameter issue that the SDHCI_TRANSFER_MODE is cleared from read direction to write direction incorrectly > > On 20/07/22 15:37, Charl Liu wrote: >> When cmd->opcode == MMC_SEND_TUNING_BLOCK, the SDHCI_TRANSFER_MODE >> should also be kept >> >> Signed-off-by: Charl Liu <charl.liu@bayhubtech.com> >> --- >> Change in V1: >> Keeping the SDHCI_TRANSFER_MODE when cmd->opcode == MMC_END_TUNING_ >> BLOCK >> --- >> drivers/mmc/host/sdhci.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index >> 22152029e14c..6a0f6725dadb 100644 >> --- a/drivers/mmc/host/sdhci.c >> +++ b/drivers/mmc/host/sdhci.c >> @@ -1430,7 +1430,8 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host, >> if (host->quirks2 & >> SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD) { >> /* must not clear SDHCI_TRANSFER_MODE when tuning */ >> - if (cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) >> + if ((cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) && >> + (cmd->opcode != MMC_SEND_TUNING_BLOCK)) > > mmc_op_tuning() could be used here > >> sdhci_writew(host, 0x0, SDHCI_TRANSFER_MODE); >> } else { >> /* clear Auto CMD settings for no data CMDs */ >
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 22152029e14c..6a0f6725dadb 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1430,7 +1430,8 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host, if (host->quirks2 & SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD) { /* must not clear SDHCI_TRANSFER_MODE when tuning */ - if (cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) + if ((cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) && + (cmd->opcode != MMC_SEND_TUNING_BLOCK)) sdhci_writew(host, 0x0, SDHCI_TRANSFER_MODE); } else { /* clear Auto CMD settings for no data CMDs */
When cmd->opcode == MMC_SEND_TUNING_BLOCK, the SDHCI_TRANSFER_MODE should also be kept Signed-off-by: Charl Liu <charl.liu@bayhubtech.com> --- Change in V1: Keeping the SDHCI_TRANSFER_MODE when cmd->opcode == MMC_END_TUNING_ BLOCK --- drivers/mmc/host/sdhci.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)