Re: [PATCH v3] mmc: mtk-sd: reduce CIT for better performance

From: AngeloGioacchino Del Regno
Date: Tue Jun 06 2023 - 05:00:08 EST


Il 06/06/23 10:17, Wenbin Mei (梅文彬) ha scritto:
On Mon, 2023-06-05 at 10:48 +0200, AngeloGioacchino Del Regno wrote:

External email : Please do not click links or open attachments until
you have verified the sender or the content.
Il 05/06/23 08:01, Wenbin Mei ha scritto:
CQHCI_SSC1 indicates to CQE the polling period to use when using
periodic
SEND_QUEUE_STATUS(CMD13) polling.
Since MSDC CQE uses msdc_hclk as ITCFVAL, so driver should use hclk
frequency to get the actual time.
The default value 0x1000 that corresponds to 150us for MediaTek
SoCs, let's
decrease it to 0x40 that corresponds to 2.35us, which can improve
the
performance of some eMMC devices.

Signed-off-by: Wenbin Mei <wenbin.mei@xxxxxxxxxxxx>

OK! That's almost good now. There's only one consideration here: if
MediaTek
SoCs *require* msdc_hclk to calculate the CIT time, this means that
this clock
is critical for CQHCI functionality.

If msdc_hclk is not present, CQHCI cannot work correctly... so you
don't have
to cover the case in which there's no msdc_hclk clock: if that's not
present,
either fail probing, or disable CQHCI.

---
drivers/mmc/host/cqhci.h | 1 +
drivers/mmc/host/mtk-sd.c | 47
+++++++++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+)

diff --git a/drivers/mmc/host/cqhci.h b/drivers/mmc/host/cqhci.h
index ba9387ed90eb..292b89ebd978 100644
--- a/drivers/mmc/host/cqhci.h
+++ b/drivers/mmc/host/cqhci.h
@@ -23,6 +23,7 @@
/* capabilities */
#define CQHCI_CAP0x04
#define CQHCI_CAP_CS0x10000000 /* Crypto Support */
+#define CQHCI_CAP_ITCFMUL(x)(((x) & GENMASK(15, 12)) >> 12)
/* configuration */
#define CQHCI_CFG0x08
diff --git a/drivers/mmc/host/mtk-sd.c b/drivers/mmc/host/mtk-sd.c
index edade0e54a0c..c221ef8a6992 100644
--- a/drivers/mmc/host/mtk-sd.c
+++ b/drivers/mmc/host/mtk-sd.c
@@ -473,6 +473,7 @@ struct msdc_host {
struct msdc_tune_para def_tune_para; /* default tune setting */
struct msdc_tune_para saved_tune_para; /* tune result of
CMD21/CMD19 */
struct cqhci_host *cq_host;
+u32 cq_ssc1_time;
};
static const struct mtk_mmc_compatible mt2701_compat = {
@@ -2450,9 +2451,50 @@ static void
msdc_hs400_enhanced_strobe(struct mmc_host *mmc,
}
}
+static void msdc_cqe_cit_cal(struct msdc_host *host, u64 timer_ns)

static int msdc_cqe_cit_cal(....)

Sorry, I missed this comment.
I think there is no need to return a value.
Becuase msdc_hclk is exist, and if not present, it will return earily.
Even if it goes to the default case in the switch flow, we will assign
a default value.
So I think it's better to return null, do you think it is okay?


Yeah ignore this comment; I've noticed that HCLK is already mandatory, otherwise
the probe function will fail earlier anyway.

Thanks,
Angelo