| From 697542bceae51f7620af333b065dd09d213629fb Mon Sep 17 00:00:00 2001 |
| From: Jaehoon Chung <jh80.chung@samsung.com> |
| Date: Fri, 22 Oct 2021 17:21:06 +0900 |
| Subject: mmc: dw_mmc: exynos: fix the finding clock sample value |
| |
| From: Jaehoon Chung <jh80.chung@samsung.com> |
| |
| commit 697542bceae51f7620af333b065dd09d213629fb upstream. |
| |
| Even though there are candiates value if can't find best value, it's |
| returned -EIO. It's not proper behavior. |
| If there is not best value, use a first candiate value to work eMMC. |
| |
| Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com> |
| Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> |
| Tested-by: Christian Hewitt <christianshewitt@gmail.com> |
| Cc: stable@vger.kernel.org |
| Fixes: c537a1c5ff63 ("mmc: dw_mmc: exynos: add variable delay tuning sequence") |
| Link: https://lore.kernel.org/r/20211022082106.1557-1-jh80.chung@samsung.com |
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/mmc/host/dw_mmc-exynos.c | 14 ++++++++++++++ |
| 1 file changed, 14 insertions(+) |
| |
| --- a/drivers/mmc/host/dw_mmc-exynos.c |
| +++ b/drivers/mmc/host/dw_mmc-exynos.c |
| @@ -440,6 +440,18 @@ static s8 dw_mci_exynos_get_best_clksmpl |
| } |
| } |
| |
| + /* |
| + * If there is no cadiates value, then it needs to return -EIO. |
| + * If there are candiates values and don't find bset clk sample value, |
| + * then use a first candiates clock sample value. |
| + */ |
| + for (i = 0; i < iter; i++) { |
| + __c = ror8(candiates, i); |
| + if ((__c & 0x1) == 0x1) { |
| + loc = i; |
| + goto out; |
| + } |
| + } |
| out: |
| return loc; |
| } |
| @@ -470,6 +482,8 @@ static int dw_mci_exynos_execute_tuning( |
| priv->tuned_sample = found; |
| } else { |
| ret = -EIO; |
| + dev_warn(&mmc->class_dev, |
| + "There is no candiates value about clksmpl!\n"); |
| } |
| |
| return ret; |