diff mbox series

[U-Boot,2/6] mmc: break out get_op_cond code to its own function

Message ID 827400c05baf0f65ab2d6f6f148d6b813b3bc848.1528719594.git.baruch@tkos.co.il
State Awaiting Upstream
Delegated to: Stefano Babic
Headers show
Series mx6cuboxi: Add support for SOMs with eMMC | expand

Commit Message

Baruch Siach June 11, 2018, 12:26 p.m. UTC
From: Jon Nettleton <jon@solid-run.com>

This code is useful for testing the existance of devices that
do not have card detect capabilities.  This breaks out the core
functionality and leaves the actual init logic and error reporting
in mmc_start_init().

Signed-off-by: Jon Nettleton <jon@solid-run.com>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
 drivers/mmc/mmc.c | 61 +++++++++++++++++++++++++++--------------------
 include/mmc.h     | 10 ++++++++
 2 files changed, 45 insertions(+), 26 deletions(-)

Comments

Stefano Babic June 27, 2018, 7:59 a.m. UTC | #1
Hi Baruch,

On 11/06/2018 14:26, Baruch Siach wrote:
> From: Jon Nettleton <jon@solid-run.com>
> 
> This code is useful for testing the existance of devices that
> do not have card detect capabilities.  This breaks out the core
> functionality and leaves the actual init logic and error reporting
> in mmc_start_init().
> 
> Signed-off-by: Jon Nettleton <jon@solid-run.com>
> Signed-off-by: Baruch Siach <baruch@tkos.co.il>
> ---
>  drivers/mmc/mmc.c | 61 +++++++++++++++++++++++++++--------------------
>  include/mmc.h     | 10 ++++++++
>  2 files changed, 45 insertions(+), 26 deletions(-)
> 
> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
> index f7827f527aa5..ad429f49c992 100644
> --- a/drivers/mmc/mmc.c
> +++ b/drivers/mmc/mmc.c
> @@ -2491,36 +2491,11 @@ static int mmc_power_cycle(struct mmc *mmc)
>  	return mmc_power_on(mmc);
>  }
>  
> -int mmc_start_init(struct mmc *mmc)
> +int mmc_get_op_cond(struct mmc *mmc)
>  {
> -	bool no_card;
>  	bool uhs_en = supports_uhs(mmc->cfg->host_caps);
>  	int err;
>  
> -	/*
> -	 * all hosts are capable of 1 bit bus-width and able to use the legacy
> -	 * timings.
> -	 */
> -	mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) |
> -			 MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT;
> -
> -#if !defined(CONFIG_MMC_BROKEN_CD)
> -	/* we pretend there's no card when init is NULL */
> -	no_card = mmc_getcd(mmc) == 0;
> -#else
> -	no_card = 0;
> -#endif
> -#if !CONFIG_IS_ENABLED(DM_MMC)
> -	no_card = no_card || (mmc->cfg->ops->init == NULL);
> -#endif
> -	if (no_card) {
> -		mmc->has_init = 0;
> -#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
> -		pr_err("MMC: no card present\n");
> -#endif
> -		return -ENOMEDIUM;
> -	}
> -
>  	if (mmc->has_init)
>  		return 0;
>  
> @@ -2597,6 +2572,40 @@ retry:
>  		}
>  	}
>  
> +	return err;
> +}
> +
> +int mmc_start_init(struct mmc *mmc)
> +{
> +	bool no_card;
> +	int err = 0;
> +
> +	/*
> +	 * all hosts are capable of 1 bit bus-width and able to use the legacy
> +	 * timings.
> +	 */
> +	mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) |
> +			 MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT;
> +
> +#if !defined(CONFIG_MMC_BROKEN_CD)
> +	/* we pretend there's no card when init is NULL */
> +	no_card = mmc_getcd(mmc) == 0;
> +#else
> +	no_card = 0;
> +#endif
> +#if !CONFIG_IS_ENABLED(DM_MMC)
> +	no_card = no_card || (mmc->cfg->ops->init == NULL);
> +#endif
> +	if (no_card) {
> +		mmc->has_init = 0;
> +#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
> +		pr_err("MMC: no card present\n");
> +#endif
> +		return -ENOMEDIUM;
> +	}
> +
> +	err = mmc_get_op_cond(mmc);
> +
>  	if (!err)
>  		mmc->init_in_progress = 1;
>  
> diff --git a/include/mmc.h b/include/mmc.h
> index 1729292d27bd..df4255b828a7 100644
> --- a/include/mmc.h
> +++ b/include/mmc.h
> @@ -752,6 +752,16 @@ int mmc_rpmb_write(struct mmc *mmc, void *addr, unsigned short blk,
>  int mmc_set_bkops_enable(struct mmc *mmc);
>  #endif
>  
> +/**
> + * Start device initialization and return immediately; it does not block on
> + * polling OCR (operation condition register) status. Useful for checking
> + * the presence of SD/eMMC when no card detect logic is available.
> + *
> + * @param mmc	Pointer to a MMC device struct
> + * @return 0 on success, <0 on error.
> + */
> +int mmc_get_op_cond(struct mmc *mmc);
> +
>  /**
>   * Start device initialization and return immediately; it does not block on
>   * polling OCR (operation condition register) status.  Then you should call
> 

Reviewed-by: Stefano Babic <sbabic@denx.de>

Anyway, this is related to MMC subsystem. I added Jaehoon in CC for his
review / ACK. I will hold on the series (related to i.MX) until then.

Best regards,
Stefano Babic
diff mbox series

Patch

diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index f7827f527aa5..ad429f49c992 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -2491,36 +2491,11 @@  static int mmc_power_cycle(struct mmc *mmc)
 	return mmc_power_on(mmc);
 }
 
-int mmc_start_init(struct mmc *mmc)
+int mmc_get_op_cond(struct mmc *mmc)
 {
-	bool no_card;
 	bool uhs_en = supports_uhs(mmc->cfg->host_caps);
 	int err;
 
-	/*
-	 * all hosts are capable of 1 bit bus-width and able to use the legacy
-	 * timings.
-	 */
-	mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) |
-			 MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT;
-
-#if !defined(CONFIG_MMC_BROKEN_CD)
-	/* we pretend there's no card when init is NULL */
-	no_card = mmc_getcd(mmc) == 0;
-#else
-	no_card = 0;
-#endif
-#if !CONFIG_IS_ENABLED(DM_MMC)
-	no_card = no_card || (mmc->cfg->ops->init == NULL);
-#endif
-	if (no_card) {
-		mmc->has_init = 0;
-#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
-		pr_err("MMC: no card present\n");
-#endif
-		return -ENOMEDIUM;
-	}
-
 	if (mmc->has_init)
 		return 0;
 
@@ -2597,6 +2572,40 @@  retry:
 		}
 	}
 
+	return err;
+}
+
+int mmc_start_init(struct mmc *mmc)
+{
+	bool no_card;
+	int err = 0;
+
+	/*
+	 * all hosts are capable of 1 bit bus-width and able to use the legacy
+	 * timings.
+	 */
+	mmc->host_caps = mmc->cfg->host_caps | MMC_CAP(SD_LEGACY) |
+			 MMC_CAP(MMC_LEGACY) | MMC_MODE_1BIT;
+
+#if !defined(CONFIG_MMC_BROKEN_CD)
+	/* we pretend there's no card when init is NULL */
+	no_card = mmc_getcd(mmc) == 0;
+#else
+	no_card = 0;
+#endif
+#if !CONFIG_IS_ENABLED(DM_MMC)
+	no_card = no_card || (mmc->cfg->ops->init == NULL);
+#endif
+	if (no_card) {
+		mmc->has_init = 0;
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+		pr_err("MMC: no card present\n");
+#endif
+		return -ENOMEDIUM;
+	}
+
+	err = mmc_get_op_cond(mmc);
+
 	if (!err)
 		mmc->init_in_progress = 1;
 
diff --git a/include/mmc.h b/include/mmc.h
index 1729292d27bd..df4255b828a7 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -752,6 +752,16 @@  int mmc_rpmb_write(struct mmc *mmc, void *addr, unsigned short blk,
 int mmc_set_bkops_enable(struct mmc *mmc);
 #endif
 
+/**
+ * Start device initialization and return immediately; it does not block on
+ * polling OCR (operation condition register) status. Useful for checking
+ * the presence of SD/eMMC when no card detect logic is available.
+ *
+ * @param mmc	Pointer to a MMC device struct
+ * @return 0 on success, <0 on error.
+ */
+int mmc_get_op_cond(struct mmc *mmc);
+
 /**
  * Start device initialization and return immediately; it does not block on
  * polling OCR (operation condition register) status.  Then you should call