mmc: renesas_sdhi: add helper to access quirks
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Sun, 20 Nov 2022 11:34:56 +0000 (12:34 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Wed, 7 Dec 2022 12:22:37 +0000 (13:22 +0100)
Add a macro to check for a quirk because it a) ensures that the check
for non-empty 'quirks' struct is not forgotten and b) is easier to read.
Convert existing quirk access as well.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Link: https://lore.kernel.org/r/20221120113457.42010-4-wsa+renesas@sang-engineering.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/renesas_sdhi.h
drivers/mmc/host/renesas_sdhi_core.c
drivers/mmc/host/renesas_sdhi_internal_dmac.c

index 8f96457c9739b60e0bf4f9a74778fc7e715dcfa1..ea2a85174a09563e093c763bd197290f0dc5ae35 100644 (file)
@@ -38,6 +38,8 @@ struct renesas_sdhi_of_data {
 
 #define SDHI_CALIB_TABLE_MAX 32
 
+#define sdhi_has_quirk(p, q) ((p)->quirks && (p)->quirks->q)
+
 struct renesas_sdhi_quirks {
        bool hs400_disabled;
        bool hs400_4taps;
index d2521cf1411db49d9f074f768c38470afa5f57f2..ad8f79fe01b2417a6e406f603cbfa498fb207402 100644 (file)
@@ -141,7 +141,7 @@ static unsigned int renesas_sdhi_clk_update(struct tmio_mmc_host *host,
 
        if (priv->clkh) {
                /* HS400 with 4TAP needs different clock settings */
-               bool use_4tap = priv->quirks && priv->quirks->hs400_4taps;
+               bool use_4tap = sdhi_has_quirk(priv, hs400_4taps);
                bool need_slow_clkh = host->mmc->ios.timing == MMC_TIMING_MMC_HS400;
                clkh_shift = use_4tap && need_slow_clkh ? 1 : 2;
                ref_clk = priv->clkh;
@@ -383,7 +383,7 @@ static void renesas_sdhi_hs400_complete(struct mmc_host *mmc)
        struct tmio_mmc_host *host = mmc_priv(mmc);
        struct renesas_sdhi *priv = host_to_priv(host);
        u32 bad_taps = priv->quirks ? priv->quirks->hs400_bad_taps : 0;
-       bool use_4tap = priv->quirks && priv->quirks->hs400_4taps;
+       bool use_4tap = sdhi_has_quirk(priv, hs400_4taps);
 
        sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, ~CLK_CTL_SCLKEN &
                sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL));
@@ -395,7 +395,7 @@ static void renesas_sdhi_hs400_complete(struct mmc_host *mmc)
        sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_DT2FF,
                       priv->scc_tappos_hs400);
 
-       if (priv->quirks && priv->quirks->manual_tap_correction)
+       if (sdhi_has_quirk(priv, manual_tap_correction))
                sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_RVSCNTL,
                               ~SH_MOBILE_SDHI_SCC_RVSCNTL_RVSEN &
                               sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_RVSCNTL));
@@ -546,7 +546,7 @@ static void renesas_sdhi_reset_hs400_mode(struct tmio_mmc_host *host,
                         SH_MOBILE_SDHI_SCC_TMPPORT2_HS400OSEL) &
                        sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2));
 
-       if (priv->quirks && (priv->quirks->hs400_calib_table || priv->quirks->hs400_bad_taps))
+       if (sdhi_has_quirk(priv, hs400_calib_table) || sdhi_has_quirk(priv, hs400_bad_taps))
                renesas_sdhi_adjust_hs400_mode_disable(host);
 
        sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, CLK_CTL_SCLKEN |
@@ -732,7 +732,7 @@ static bool renesas_sdhi_manual_correction(struct tmio_mmc_host *host, bool use_
        sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_RVSREQ, 0);
 
        /* Change TAP position according to correction status */
-       if (priv->quirks && priv->quirks->manual_tap_correction &&
+       if (sdhi_has_quirk(priv, manual_tap_correction) &&
            host->mmc->ios.timing == MMC_TIMING_MMC_HS400) {
                u32 bad_taps = priv->quirks ? priv->quirks->hs400_bad_taps : 0;
                /*
@@ -796,7 +796,7 @@ static bool renesas_sdhi_check_scc_error(struct tmio_mmc_host *host,
                                         struct mmc_request *mrq)
 {
        struct renesas_sdhi *priv = host_to_priv(host);
-       bool use_4tap = priv->quirks && priv->quirks->hs400_4taps;
+       bool use_4tap = sdhi_has_quirk(priv, hs400_4taps);
        bool ret = false;
 
        /*
@@ -990,7 +990,7 @@ int renesas_sdhi_probe(struct platform_device *pdev,
        host->multi_io_quirk    = renesas_sdhi_multi_io_quirk;
        host->dma_ops           = dma_ops;
 
-       if (quirks && quirks->hs400_disabled)
+       if (sdhi_has_quirk(priv, hs400_disabled))
                host->mmc->caps2 &= ~(MMC_CAP2_HS400 | MMC_CAP2_HS400_ES);
 
        /* For some SoC, we disable internal WP. GPIO may override this */
@@ -1055,7 +1055,7 @@ int renesas_sdhi_probe(struct platform_device *pdev,
        if (ver == SDHI_VER_GEN2_SDR50)
                mmc_data->flags &= ~TMIO_MMC_HAVE_CBSY;
 
-       if (ver == SDHI_VER_GEN3_SDMMC && quirks && quirks->hs400_calib_table) {
+       if (ver == SDHI_VER_GEN3_SDMMC && sdhi_has_quirk(priv, hs400_calib_table)) {
                host->fixup_request = renesas_sdhi_fixup_request;
                priv->adjust_hs400_calib_table = *(
                        res->start == SDHI_GEN3_MMC0_ADDR ?
@@ -1076,7 +1076,7 @@ int renesas_sdhi_probe(struct platform_device *pdev,
            host->mmc->caps2 & (MMC_CAP2_HS200_1_8V_SDR |
                                MMC_CAP2_HS400_1_8V))) {
                const struct renesas_sdhi_scc *taps = of_data->taps;
-               bool use_4tap = quirks && quirks->hs400_4taps;
+               bool use_4tap = sdhi_has_quirk(priv, hs400_4taps);
                bool hit = false;
 
                for (i = 0; i < of_data->taps_num; i++) {
index f6d1e04a627f3d487754e3c4e708f199b60c2075..29f562115c66e595daf76ed50318705a70f39926 100644 (file)
@@ -285,7 +285,7 @@ renesas_sdhi_internal_dmac_enable_dma(struct tmio_mmc_host *host, bool enable)
 {
        struct renesas_sdhi *priv = host_to_priv(host);
        u32 dma_irqs = INFO1_DTRANEND0 |
-                       (priv->quirks && priv->quirks->old_info1_layout ?
+                       (sdhi_has_quirk(priv, old_info1_layout) ?
                        INFO1_DTRANEND1_OLD : INFO1_DTRANEND1);
 
        if (!host->chan_tx || !host->chan_rx)
@@ -318,7 +318,7 @@ static bool renesas_sdhi_internal_dmac_dma_irq(struct tmio_mmc_host *host)
        struct renesas_sdhi_dma *dma_priv = &priv->dma_priv;
 
        u32 dma_irqs = INFO1_DTRANEND0 |
-                       (priv->quirks && priv->quirks->old_info1_layout ?
+                       (sdhi_has_quirk(priv, old_info1_layout) ?
                        INFO1_DTRANEND1_OLD : INFO1_DTRANEND1);
        u32 status = readl(host->ctl + DM_CM_INFO1);
 
@@ -396,7 +396,7 @@ renesas_sdhi_internal_dmac_start_dma(struct tmio_mmc_host *host,
        struct scatterlist *sg = host->sg_ptr;
        u32 dtran_mode = DTRAN_MODE_BUS_WIDTH;
 
-       if (!(priv->quirks && priv->quirks->fixed_addr_mode))
+       if (!sdhi_has_quirk(priv, fixed_addr_mode))
                dtran_mode |= DTRAN_MODE_ADDR_MODE;
 
        if (!renesas_sdhi_internal_dmac_map(host, data, COOKIE_MAPPED))
@@ -404,7 +404,7 @@ renesas_sdhi_internal_dmac_start_dma(struct tmio_mmc_host *host,
 
        if (data->flags & MMC_DATA_READ) {
                dtran_mode |= DTRAN_MODE_CH_NUM_CH1;
-               if (priv->quirks && priv->quirks->dma_one_rx_only &&
+               if (sdhi_has_quirk(priv, dma_one_rx_only) &&
                    test_and_set_bit(SDHI_INTERNAL_DMAC_RX_IN_USE, &global_flags))
                        goto force_pio_with_unmap;
        } else {