On 06/06/19 7:24 PM, Faiz Abbas wrote:
> The HOST_CONTROL2 register is a part of SDHC v3.00 and not just specific
> to arasan/zynq controllers. Add the same to sdhci.h.
> 
> Also create a common API to set UHS timings in HOST_CONTROL2.
> 
> Signed-off-by: Faiz Abbas <faiz_ab...@ti.com>
> Reviewed-by: Tom Rini <tr...@konsulko.com>
> Tested-by: Lokesh Vutla <lokeshvu...@ti.com>

This is causing build failure for the following defconfig:
xilinx_zynqmp_zcu104_revA_defconfig

➜  u-boot git:(master) v78make xilinx_zynqmp_zcu104_revA_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  YACC    scripts/kconfig/zconf.tab.c
  LEX     scripts/kconfig/zconf.lex.c
  HOSTCC  scripts/kconfig/zconf.tab.o
v8  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
➜  u-boot git:(master) v78make -j4 -s
drivers/mmc/zynq_sdhci.c: In function ‘arasan_sdhci_execute_tuning’:
drivers/mmc/zynq_sdhci.c:97:27: error: ‘SDHCI_HOST_CTRL2’ undeclared (first use
in this function); did you mean ‘SDHCI_HOST_CONTROL2’?
  ctrl = sdhci_readw(host, SDHCI_HOST_CTRL2);
                           ^~~~~~~~~~~~~~~~
                           SDHCI_HOST_CONTROL2
drivers/mmc/zynq_sdhci.c:97:27: note: each undeclared identifier is reported
only once for each function it appears in
drivers/mmc/zynq_sdhci.c: In function ‘arasan_sdhci_set_control_reg’:
drivers/mmc/zynq_sdhci.c:182:27: error: ‘SDHCI_HOST_CTRL2’ undeclared (first use
in this function); did you mean ‘SDHCI_HOST_CONTROL2’?
   reg = sdhci_readw(host, SDHCI_HOST_CTRL2);
                           ^~~~~~~~~~~~~~~~
                           SDHCI_HOST_CONTROL2
drivers/mmc/zynq_sdhci.c:183:10: error: ‘SDHCI_18V_SIGNAL’ undeclared (first use
in this function); did you mean ‘SDHCI_DIV_HI_MASK’?
   reg |= SDHCI_18V_SIGNAL;
          ^~~~~~~~~~~~~~~~
          SDHCI_DIV_HI_MASK
scripts/Makefile.build:278: recipe for target 'drivers/mmc/zynq_sdhci.o' failed
make[2]: *** [drivers/mmc/zynq_sdhci.o] Error 1
scripts/Makefile.build:432: recipe for target 'drivers/mmc' failed
make[1]: *** [drivers/mmc] Error 2
Makefile:1582: recipe for target 'drivers' failed
make: *** [drivers] Error 2
make: *** Waiting for unfinished jobs....


Can you fix it and repost the series?

Thanks and regards,
Lokesh


> ---
>  drivers/mmc/sdhci.c      | 28 ++++++++++++++++++++++++++++
>  drivers/mmc/zynq_sdhci.c | 31 ++-----------------------------
>  include/sdhci.h          | 19 ++++++++++++++++++-
>  3 files changed, 48 insertions(+), 30 deletions(-)
> 
> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
> index 75e6567631..79edb18fe5 100644
> --- a/drivers/mmc/sdhci.c
> +++ b/drivers/mmc/sdhci.c
> @@ -533,6 +533,34 @@ static void sdhci_set_power(struct sdhci_host *host, 
> unsigned short power)
>       sdhci_writeb(host, pwr, SDHCI_POWER_CONTROL);
>  }
>  
> +void sdhci_set_uhs_timing(struct sdhci_host *host)
> +{
> +     struct mmc *mmc = (struct mmc *)host->mmc;
> +     u32 reg;
> +
> +     reg = sdhci_readw(host, SDHCI_HOST_CONTROL2);
> +     reg &= ~SDHCI_CTRL_UHS_MASK;
> +
> +     switch (mmc->selected_mode) {
> +     case UHS_SDR50:
> +     case MMC_HS_52:
> +             reg |= SDHCI_CTRL_UHS_SDR50;
> +             break;
> +     case UHS_DDR50:
> +     case MMC_DDR_52:
> +             reg |= SDHCI_CTRL_UHS_DDR50;
> +             break;
> +     case UHS_SDR104:
> +     case MMC_HS_200:
> +             reg |= SDHCI_CTRL_UHS_SDR104;
> +             break;
> +     default:
> +             reg |= SDHCI_CTRL_UHS_SDR12;
> +     }
> +
> +     sdhci_writew(host, reg, SDHCI_HOST_CONTROL2);
> +}
> +
>  #ifdef CONFIG_DM_MMC
>  static int sdhci_set_ios(struct udevice *dev)
>  {
> diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c
> index 08023783de..b39e1d7a19 100644
> --- a/drivers/mmc/zynq_sdhci.c
> +++ b/drivers/mmc/zynq_sdhci.c
> @@ -48,11 +48,6 @@ static const u8 mode2timing[] = {
>       [MMC_HS_200] = MMC_HS200_BUS_SPEED,
>  };
>  
> -#define SDHCI_HOST_CTRL2     0x3E
> -#define SDHCI_CTRL2_MODE_MASK        0x7
> -#define SDHCI_18V_SIGNAL     0x8
> -#define SDHCI_CTRL_EXEC_TUNING       0x0040
> -#define SDHCI_CTRL_TUNED_CLK 0x80
>  #define SDHCI_TUNING_LOOP_COUNT      40
>  
>  static void arasan_zynqmp_dll_reset(struct sdhci_host *host, u8 deviceid)
> @@ -190,30 +185,8 @@ static void arasan_sdhci_set_control_reg(struct 
> sdhci_host *host)
>       }
>  
>       if (mmc->selected_mode > SD_HS &&
> -         mmc->selected_mode <= UHS_DDR50) {
> -             reg = sdhci_readw(host, SDHCI_HOST_CTRL2);
> -             reg &= ~SDHCI_CTRL2_MODE_MASK;
> -             switch (mmc->selected_mode) {
> -             case UHS_SDR12:
> -                     reg |= UHS_SDR12_BUS_SPEED;
> -                     break;
> -             case UHS_SDR25:
> -                     reg |= UHS_SDR25_BUS_SPEED;
> -                     break;
> -             case UHS_SDR50:
> -                     reg |= UHS_SDR50_BUS_SPEED;
> -                     break;
> -             case UHS_SDR104:
> -                     reg |= UHS_SDR104_BUS_SPEED;
> -                     break;
> -             case UHS_DDR50:
> -                     reg |= UHS_DDR50_BUS_SPEED;
> -                     break;
> -             default:
> -                     break;
> -             }
> -             sdhci_writew(host, reg, SDHCI_HOST_CTRL2);
> -     }
> +         mmc->selected_mode <= UHS_DDR50)
> +             sdhci_set_uhs_timing(host);
>  }
>  #endif
>  
> diff --git a/include/sdhci.h b/include/sdhci.h
> index 3dcbc14965..01addb7a60 100644
> --- a/include/sdhci.h
> +++ b/include/sdhci.h
> @@ -144,7 +144,23 @@
>  
>  #define SDHCI_ACMD12_ERR     0x3C
>  
> -/* 3E-3F reserved */
> +#define SDHCI_HOST_CONTROL2  0x3E
> +#define  SDHCI_CTRL_UHS_MASK 0x0007
> +#define  SDHCI_CTRL_UHS_SDR12        0x0000
> +#define  SDHCI_CTRL_UHS_SDR25        0x0001
> +#define  SDHCI_CTRL_UHS_SDR50        0x0002
> +#define  SDHCI_CTRL_UHS_SDR104       0x0003
> +#define  SDHCI_CTRL_UHS_DDR50        0x0004
> +#define  SDHCI_CTRL_HS400    0x0005 /* Non-standard */
> +#define  SDHCI_CTRL_VDD_180  0x0008
> +#define  SDHCI_CTRL_DRV_TYPE_MASK    0x0030
> +#define  SDHCI_CTRL_DRV_TYPE_B       0x0000
> +#define  SDHCI_CTRL_DRV_TYPE_A       0x0010
> +#define  SDHCI_CTRL_DRV_TYPE_C       0x0020
> +#define  SDHCI_CTRL_DRV_TYPE_D       0x0030
> +#define  SDHCI_CTRL_EXEC_TUNING      0x0040
> +#define  SDHCI_CTRL_TUNED_CLK        0x0080
> +#define  SDHCI_CTRL_PRESET_VAL_ENABLE        0x8000
>  
>  #define SDHCI_CAPABILITIES   0x40
>  #define  SDHCI_TIMEOUT_CLK_MASK      0x0000003F
> @@ -467,6 +483,7 @@ int sdhci_bind(struct udevice *dev, struct mmc *mmc, 
> struct mmc_config *cfg);
>  int add_sdhci(struct sdhci_host *host, u32 f_max, u32 f_min);
>  #endif /* !CONFIG_BLK */
>  
> +void sdhci_set_uhs_timing(struct sdhci_host *host);
>  #ifdef CONFIG_DM_MMC
>  /* Export the operations to drivers */
>  int sdhci_probe(struct udevice *dev);
> 
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to