[PATCH 1/3] mmc: sunxi: Refactor mod clock register offset
Jaehoon Chung
jh80.chung at samsung.com
Mon Jan 11 02:33:32 CET 2021
On 1/11/21 10:03 AM, Andre Przywara wrote:
> So far the only difference between the various Allwinner MMC controller
> we are concerned about is the mod clock register offset.
> This is actually not directly related to the MMC controller IP, but an
> integration choice, dependent on the SoC this appears in.
>
> To avoid becoming trapped with some compatible fallback strings, let's
> remove the whole struct sunxi_mmc_variant, and replace this with a SoC
> based choice, which we can derive from the CONFIG_MACH_SUNx_y symbols.
>
> This will later simplify H616 support.
>
> Signed-off-by: Andre Przywara <andre.przywara at arm.com>
Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com>
Best Regards,
Jaehoon Chung
> ---
> drivers/mmc/sunxi_mmc.c | 84 +++++++++++------------------------------
> 1 file changed, 23 insertions(+), 61 deletions(-)
>
> diff --git a/drivers/mmc/sunxi_mmc.c b/drivers/mmc/sunxi_mmc.c
> index 0e03b07ce55..bbdbbc7a373 100644
> --- a/drivers/mmc/sunxi_mmc.c
> +++ b/drivers/mmc/sunxi_mmc.c
> @@ -23,12 +23,6 @@
> #include <asm-generic/gpio.h>
> #include <linux/delay.h>
>
> -#ifdef CONFIG_DM_MMC
> -struct sunxi_mmc_variant {
> - u16 mclk_offset;
> -};
> -#endif
> -
> struct sunxi_mmc_plat {
> struct mmc_config cfg;
> struct mmc mmc;
> @@ -42,9 +36,6 @@ struct sunxi_mmc_priv {
> int cd_inverted; /* Inverted Card Detect */
> struct sunxi_mmc *reg;
> struct mmc_config cfg;
> -#ifdef CONFIG_DM_MMC
> - const struct sunxi_mmc_variant *variant;
> -#endif
> };
>
> #if !CONFIG_IS_ENABLED(DM_MMC)
> @@ -605,6 +596,17 @@ static const struct dm_mmc_ops sunxi_mmc_ops = {
> .get_cd = sunxi_mmc_getcd,
> };
>
> +static unsigned get_mclk_offset(void)
> +{
> + if (IS_ENABLED(CONFIG_MACH_SUN9I_A80))
> + return 0x410;
> +
> + if (IS_ENABLED(CONFIG_MACH_SUN50I_H6))
> + return 0x830;
> +
> + return 0x88;
> +};
> +
> static int sunxi_mmc_probe(struct udevice *dev)
> {
> struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
> @@ -633,8 +635,6 @@ static int sunxi_mmc_probe(struct udevice *dev)
> cfg->f_max = 52000000;
>
> priv->reg = (void *)dev_read_addr(dev);
> - priv->variant =
> - (const struct sunxi_mmc_variant *)dev_get_driver_data(dev);
>
> /* We don't have a sunxi clock driver so find the clock address here */
> ret = dev_read_phandle_with_args(dev, "clocks", "#clock-cells", 0,
> @@ -644,8 +644,7 @@ static int sunxi_mmc_probe(struct udevice *dev)
> ccu_reg = (u32 *)ofnode_get_addr(args.node);
>
> priv->mmc_no = ((uintptr_t)priv->reg - SUNXI_MMC0_BASE) / 0x1000;
> - priv->mclkreg = (void *)ccu_reg +
> - (priv->variant->mclk_offset + (priv->mmc_no * 4));
> + priv->mclkreg = (void *)ccu_reg + get_mclk_offset() + priv->mmc_no * 4;
>
> ret = clk_get_by_name(dev, "ahb", &gate_clk);
> if (!ret)
> @@ -687,55 +686,18 @@ static int sunxi_mmc_bind(struct udevice *dev)
> return mmc_bind(dev, &plat->mmc, &plat->cfg);
> }
>
> -static const struct sunxi_mmc_variant sun4i_a10_variant = {
> - .mclk_offset = 0x88,
> -};
> -
> -static const struct sunxi_mmc_variant sun9i_a80_variant = {
> - .mclk_offset = 0x410,
> -};
> -
> -static const struct sunxi_mmc_variant sun50i_h6_variant = {
> - .mclk_offset = 0x830,
> -};
> -
> static const struct udevice_id sunxi_mmc_ids[] = {
> - {
> - .compatible = "allwinner,sun4i-a10-mmc",
> - .data = (ulong)&sun4i_a10_variant,
> - },
> - {
> - .compatible = "allwinner,sun5i-a13-mmc",
> - .data = (ulong)&sun4i_a10_variant,
> - },
> - {
> - .compatible = "allwinner,sun7i-a20-mmc",
> - .data = (ulong)&sun4i_a10_variant,
> - },
> - {
> - .compatible = "allwinner,sun8i-a83t-emmc",
> - .data = (ulong)&sun4i_a10_variant,
> - },
> - {
> - .compatible = "allwinner,sun9i-a80-mmc",
> - .data = (ulong)&sun9i_a80_variant,
> - },
> - {
> - .compatible = "allwinner,sun50i-a64-mmc",
> - .data = (ulong)&sun4i_a10_variant,
> - },
> - {
> - .compatible = "allwinner,sun50i-a64-emmc",
> - .data = (ulong)&sun4i_a10_variant,
> - },
> - {
> - .compatible = "allwinner,sun50i-h6-mmc",
> - .data = (ulong)&sun50i_h6_variant,
> - },
> - {
> - .compatible = "allwinner,sun50i-h6-emmc",
> - .data = (ulong)&sun50i_h6_variant,
> - },
> + { .compatible = "allwinner,sun4i-a10-mmc" },
> + { .compatible = "allwinner,sun5i-a13-mmc" },
> + { .compatible = "allwinner,sun7i-a20-mmc" },
> + { .compatible = "allwinner,sun8i-a83t-emmc" },
> + { .compatible = "allwinner,sun9i-a80-mmc" },
> + { .compatible = "allwinner,sun50i-a64-mmc" },
> + { .compatible = "allwinner,sun50i-a64-emmc" },
> + { .compatible = "allwinner,sun50i-h6-mmc" },
> + { .compatible = "allwinner,sun50i-h6-emmc" },
> + { .compatible = "allwinner,sun50i-a100-mmc" },
> + { .compatible = "allwinner,sun50i-a100-emmc" },
> { /* sentinel */ }
> };
>
>
More information about the U-Boot
mailing list