On 2/8/24 18:33, Linus Walleij wrote:
> The PL180/MMCI driver is implied to use CONFIG_DM and the ARM
> defconfigs such as configs/vexpress_ca9x4_defconfig will get it
> as well.
> 
> With a simple oneline to default to not being the v2 variant,
> the original ARM MMCI variant works fine with the driver as well.
> The IP version actually needs to be read out from a register on
> the ARM versions, but we will simply assume we are running on the
> original hardware if arm,primecell-periphid is not explicitly
> specified in the device tree.
> 
> Drop the !CONFIG_DM code and depend on DM_MMC.
> 
> Tested on the Versatile Express CA9x4 board.
> 
> Signed-off-by: Linus Walleij <linus.wall...@linaro.org>

Reviewed-by: Jaehoon Chung <jh80.ch...@samsung.com>

Sorry for late. I will apply this patch to u-boot-mmc/master. Thanks.

Best Regards,
Jaehoon Chung

> ---
>  drivers/mmc/Kconfig          |  1 +
>  drivers/mmc/arm_pl180_mmci.c | 66 
> ++------------------------------------------
>  2 files changed, 3 insertions(+), 64 deletions(-)
> 
> 
> ---
> base-commit: 0101a2ffe125911ebf89172b495f5ff14f2fd058
> change-id: 20240208-uboot-vexpress-ca9-127bd6b163df
> 
> Best regards,
> 
> diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
> index 17618c3bdcc1..59716c3966e5 100644
> --- a/drivers/mmc/Kconfig
> +++ b/drivers/mmc/Kconfig
> @@ -79,6 +79,7 @@ config MMC_SPI_CRC_ON
>  
>  config ARM_PL180_MMCI
>       bool "ARM AMBA Multimedia Card Interface and compatible support"
> +     depends on DM_MMC
>       help
>         This selects the ARM(R) AMBA(R) PrimeCell Multimedia Card
>         Interface (PL180, PL181 and compatible) support.
> diff --git a/drivers/mmc/arm_pl180_mmci.c b/drivers/mmc/arm_pl180_mmci.c
> index 5cf5502ed545..2666b65362bc 100644
> --- a/drivers/mmc/arm_pl180_mmci.c
> +++ b/drivers/mmc/arm_pl180_mmci.c
> @@ -18,6 +18,7 @@
>  #include <malloc.h>
>  #include <mmc.h>
>  #include <dm/device_compat.h>
> +#include <dm.h>
>  
>  #include <asm/io.h>
>  #include <asm-generic/gpio.h>
> @@ -25,8 +26,6 @@
>  #include "arm_pl180_mmci.h"
>  #include <linux/delay.h>
>  
> -#ifdef CONFIG_DM_MMC
> -#include <dm.h>
>  #define MMC_CLOCK_MAX        48000000
>  #define MMC_CLOCK_MIN        400000
>  
> @@ -34,7 +33,6 @@ struct arm_pl180_mmc_plat {
>       struct mmc_config cfg;
>       struct mmc mmc;
>  };
> -#endif
>  
>  static int wait_for_command_end(struct mmc *dev, struct mmc_cmd *cmd)
>  {
> @@ -358,65 +356,6 @@ static int  host_set_ios(struct mmc *dev)
>       return 0;
>  }
>  
> -#ifndef CONFIG_DM_MMC
> -/* MMC uses open drain drivers in the enumeration phase */
> -static int mmc_host_reset(struct mmc *dev)
> -{
> -     struct pl180_mmc_host *host = dev->priv;
> -
> -     writel(host->pwr_init, &host->base->power);
> -
> -     return 0;
> -}
> -
> -static const struct mmc_ops arm_pl180_mmci_ops = {
> -     .send_cmd = host_request,
> -     .set_ios = host_set_ios,
> -     .init = mmc_host_reset,
> -};
> -
> -/*
> - * mmc_host_init - initialize the mmc controller.
> - * Set initial clock and power for mmc slot.
> - * Initialize mmc struct and register with mmc framework.
> - */
> -
> -int arm_pl180_mmci_init(struct pl180_mmc_host *host, struct mmc **mmc)
> -{
> -     u32 sdi_u32;
> -
> -     writel(host->pwr_init, &host->base->power);
> -     writel(host->clkdiv_init, &host->base->clock);
> -     udelay(CLK_CHANGE_DELAY);
> -
> -     /* Disable mmc interrupts */
> -     sdi_u32 = readl(&host->base->mask0) & ~SDI_MASK0_MASK;
> -     writel(sdi_u32, &host->base->mask0);
> -
> -     host->cfg.name = host->name;
> -     host->cfg.ops = &arm_pl180_mmci_ops;
> -
> -     /* TODO remove the duplicates */
> -     host->cfg.host_caps = host->caps;
> -     host->cfg.voltages = host->voltages;
> -     host->cfg.f_min = host->clock_min;
> -     host->cfg.f_max = host->clock_max;
> -     if (host->b_max != 0)
> -             host->cfg.b_max = host->b_max;
> -     else
> -             host->cfg.b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
> -
> -     *mmc = mmc_create(&host->cfg, host);
> -     if (!*mmc)
> -             return -1;
> -     debug("registered mmc interface number is:%d\n",
> -           (*mmc)->block_dev.devnum);
> -
> -     return 0;
> -}
> -#endif
> -
> -#ifdef CONFIG_DM_MMC
>  static void arm_pl180_mmc_init(struct pl180_mmc_host *host)
>  {
>       u32 sdi_u32;
> @@ -477,7 +416,7 @@ static int arm_pl180_mmc_probe(struct udevice *dev)
>               host->version2 = true;
>               break;
>       default:
> -             host->version2 = true;
> +             host->version2 = false; /* ARM variant */
>       }
>  
>       gpio_request_by_name(dev, "cd-gpios", 0, &host->cd_gpio, GPIOD_IS_IN);
> @@ -561,4 +500,3 @@ U_BOOT_DRIVER(arm_pl180_mmc) = {
>       .priv_auto      = sizeof(struct pl180_mmc_host),
>       .plat_auto      = sizeof(struct arm_pl180_mmc_plat),
>  };
> -#endif

Reply via email to