dm: treewide: Rename auto_alloc_size members to be shorter
[platform/kernel/u-boot.git] / drivers / mmc / mtk-sd.c
index 2341373..d701a4c 100644 (file)
@@ -14,8 +14,8 @@
 #include <malloc.h>
 #include <mapmem.h>
 #include <stdbool.h>
-#include <watchdog.h>
 #include <asm/gpio.h>
+#include <dm/device_compat.h>
 #include <dm/pinctrl.h>
 #include <linux/bitops.h>
 #include <linux/io.h>
@@ -531,6 +531,7 @@ static int msdc_start_command(struct msdc_host *host, struct mmc_cmd *cmd,
                blocks = data->blocks;
 
        writel(CMD_INTS_MASK, &host->base->msdc_int);
+       writel(DATA_INTS_MASK, &host->base->msdc_int);
        writel(blocks, &host->base->sdc_blk_num);
        writel(cmd->cmdarg, &host->base->sdc_arg);
        writel(rawcmd, &host->base->sdc_cmd);
@@ -677,13 +678,9 @@ static int msdc_start_data(struct msdc_host *host, struct mmc_data *data)
        u32 size;
        int ret;
 
-       WATCHDOG_RESET();
-
        if (data->flags == MMC_DATA_WRITE)
                host->last_data_write = 1;
 
-       writel(DATA_INTS_MASK, &host->base->msdc_int);
-
        size = data->blocks * data->blocksize;
 
        if (data->flags == MMC_DATA_WRITE)
@@ -777,7 +774,8 @@ static void msdc_set_buswidth(struct msdc_host *host, u32 width)
        writel(val, &host->base->sdc_cfg);
 }
 
-static void msdc_set_mclk(struct msdc_host *host, enum bus_mode timing, u32 hz)
+static void msdc_set_mclk(struct udevice *dev,
+                         struct msdc_host *host, enum bus_mode timing, u32 hz)
 {
        u32 mode;
        u32 div;
@@ -900,7 +898,7 @@ static int msdc_ops_set_ios(struct udevice *dev)
                clock = mmc->cfg->f_min;
 
        if (host->mclk != clock || host->timing != mmc->selected_mode)
-               msdc_set_mclk(host, mmc->selected_mode, clock);
+               msdc_set_mclk(dev, host, mmc->selected_mode, clock);
 
        return 0;
 }
@@ -960,7 +958,8 @@ static int get_delay_len(u32 delay, u32 start_bit)
        return PAD_DELAY_MAX - start_bit;
 }
 
-static struct msdc_delay_phase get_best_delay(struct msdc_host *host, u32 delay)
+static struct msdc_delay_phase get_best_delay(struct udevice *dev,
+                                             struct msdc_host *host, u32 delay)
 {
        int start = 0, len = 0;
        int start_final = 0, len_final = 0;
@@ -1070,7 +1069,7 @@ static int hs400_tune_response(struct udevice *dev, u32 opcode)
                }
        }
 
-       final_cmd_delay = get_best_delay(host, cmd_delay);
+       final_cmd_delay = get_best_delay(dev, host, cmd_delay);
        clrsetbits_le32(tune_reg, PAD_CMD_TUNE_RX_DLY3,
                        final_cmd_delay.final_phase <<
                        PAD_CMD_TUNE_RX_DLY3_S);
@@ -1120,7 +1119,7 @@ static int msdc_tune_response(struct udevice *dev, u32 opcode)
                }
        }
 
-       final_rise_delay = get_best_delay(host, rise_delay);
+       final_rise_delay = get_best_delay(dev, host, rise_delay);
        /* if rising edge has enough margin, do not scan falling edge */
        if (final_rise_delay.maxlen >= 12 ||
            (final_rise_delay.start == 0 && final_rise_delay.maxlen >= 4))
@@ -1142,7 +1141,7 @@ static int msdc_tune_response(struct udevice *dev, u32 opcode)
                }
        }
 
-       final_fall_delay = get_best_delay(host, fall_delay);
+       final_fall_delay = get_best_delay(dev, host, fall_delay);
 
 skip_fall:
        final_maxlen = max(final_rise_delay.maxlen, final_fall_delay.maxlen);
@@ -1172,15 +1171,15 @@ skip_fall:
                        internal_delay |= (1 << i);
        }
 
-       dev_err(dev, "Final internal delay: 0x%x\n", internal_delay);
+       dev_dbg(dev, "Final internal delay: 0x%x\n", internal_delay);
 
-       internal_delay_phase = get_best_delay(host, internal_delay);
+       internal_delay_phase = get_best_delay(dev, host, internal_delay);
        clrsetbits_le32(tune_reg, MSDC_PAD_TUNE_CMDRRDLY_M,
                        internal_delay_phase.final_phase <<
                        MSDC_PAD_TUNE_CMDRRDLY_S);
 
 skip_internal:
-       dev_err(dev, "Final cmd pad delay: %x\n", final_delay);
+       dev_dbg(dev, "Final cmd pad delay: %x\n", final_delay);
        return final_delay == 0xff ? -EIO : 0;
 }
 
@@ -1217,7 +1216,7 @@ static int msdc_tune_data(struct udevice *dev, u32 opcode)
                }
        }
 
-       final_rise_delay = get_best_delay(host, rise_delay);
+       final_rise_delay = get_best_delay(dev, host, rise_delay);
        if (final_rise_delay.maxlen >= 12 ||
            (final_rise_delay.start == 0 && final_rise_delay.maxlen >= 4))
                goto skip_fall;
@@ -1240,7 +1239,7 @@ static int msdc_tune_data(struct udevice *dev, u32 opcode)
                }
        }
 
-       final_fall_delay = get_best_delay(host, fall_delay);
+       final_fall_delay = get_best_delay(dev, host, fall_delay);
 
 skip_fall:
        final_maxlen = max(final_rise_delay.maxlen, final_fall_delay.maxlen);
@@ -1266,7 +1265,7 @@ skip_fall:
                                host->hs200_write_int_delay <<
                                MSDC_PAD_TUNE_DATWRDLY_S);
 
-       dev_err(dev, "Final data pad delay: %x\n", final_delay);
+       dev_dbg(dev, "Final data pad delay: %x\n", final_delay);
 
        return final_delay == 0xff ? -EIO : 0;
 }
@@ -1296,7 +1295,7 @@ static int msdc_tune_together(struct udevice *dev, u32 opcode)
                        rise_delay |= (1 << i);
        }
 
-       final_rise_delay = get_best_delay(host, rise_delay);
+       final_rise_delay = get_best_delay(dev, host, rise_delay);
        if (final_rise_delay.maxlen >= 12 ||
            (final_rise_delay.start == 0 && final_rise_delay.maxlen >= 4))
                goto skip_fall;
@@ -1312,7 +1311,7 @@ static int msdc_tune_together(struct udevice *dev, u32 opcode)
                        fall_delay |= (1 << i);
        }
 
-       final_fall_delay = get_best_delay(host, fall_delay);
+       final_fall_delay = get_best_delay(dev, host, fall_delay);
 
 skip_fall:
        final_maxlen = max(final_rise_delay.maxlen, final_fall_delay.maxlen);
@@ -1625,6 +1624,15 @@ static const struct msdc_compatible mt7620_compat = {
        .enhance_rx = false
 };
 
+static const struct msdc_compatible mt7622_compat = {
+       .clk_div_bits = 12,
+       .pad_tune0 = true,
+       .async_fifo = true,
+       .data_tune = true,
+       .busy_check = true,
+       .stop_clk_fix = true,
+};
+
 static const struct msdc_compatible mt7623_compat = {
        .clk_div_bits = 12,
        .sclk_cycle_shift = 20,
@@ -1668,6 +1676,7 @@ static const struct msdc_compatible mt8183_compat = {
 
 static const struct udevice_id msdc_ids[] = {
        { .compatible = "mediatek,mt7620-mmc", .data = (ulong)&mt7620_compat },
+       { .compatible = "mediatek,mt7622-mmc", .data = (ulong)&mt7622_compat },
        { .compatible = "mediatek,mt7623-mmc", .data = (ulong)&mt7623_compat },
        { .compatible = "mediatek,mt8512-mmc", .data = (ulong)&mt8512_compat },
        { .compatible = "mediatek,mt8516-mmc", .data = (ulong)&mt8516_compat },
@@ -1683,6 +1692,6 @@ U_BOOT_DRIVER(mtk_sd_drv) = {
        .bind = msdc_drv_bind,
        .probe = msdc_drv_probe,
        .ops = &msdc_ops,
-       .platdata_auto_alloc_size = sizeof(struct msdc_plat),
-       .priv_auto_alloc_size = sizeof(struct msdc_host),
+       .platdata_auto  = sizeof(struct msdc_plat),
+       .priv_auto      = sizeof(struct msdc_host),
 };