Message ID | 20190118133223.16650-1-afenkart@gmail.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | 71e3e00c96efa851b2d5d3a3731711f9cc958b5b |
Headers | show |
Series | [v2] mmc: meson-gx: enable signal re-sampling together with tuning | expand |
On Fri, 2019-01-18 at 14:32 +0100, Andreas Fenkart wrote: > card detection fails on "BeeLink Mini M8 SII" if enabled too early > mmc1: error -110 whilst initialising MMC card > > Fixes: 71645e65729f ("mmc: meson-gx: add signal resampling") > Signed-off-by: Andreas Fenkart <afenkart@gmail.com> > --- > drivers/mmc/host/meson-gx-mmc.c | 14 +++++++++----- > 1 file changed, 9 insertions(+), 5 deletions(-) Reviewed-by: Jerome Brunet <jbrunet@baylibre.com> on the axg-s400 (eMMC and SDIO) on lhe libretech-cc (eMMC and SD) Tested-by: Jerome Brunet <jbrunet@baylibre.com>
On Fri, 18 Jan 2019 at 14:32, Andreas Fenkart <afenkart@gmail.com> wrote: > > card detection fails on "BeeLink Mini M8 SII" if enabled too early > mmc1: error -110 whilst initialising MMC card > > Fixes: 71645e65729f ("mmc: meson-gx: add signal resampling") > Signed-off-by: Andreas Fenkart <afenkart@gmail.com> Applied for fixes, thanks! Kind regards Uffe > --- > drivers/mmc/host/meson-gx-mmc.c | 14 +++++++++----- > 1 file changed, 9 insertions(+), 5 deletions(-) > > diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c > index c2690c1a50ff..dba499009d0c 100644 > --- a/drivers/mmc/host/meson-gx-mmc.c > +++ b/drivers/mmc/host/meson-gx-mmc.c > @@ -738,6 +738,11 @@ static int meson_mmc_clk_phase_tuning(struct mmc_host *mmc, u32 opcode, > static int meson_mmc_execute_tuning(struct mmc_host *mmc, u32 opcode) > { > struct meson_host *host = mmc_priv(mmc); > + int adj = 0; > + > + /* enable signal resampling w/o delay */ > + adj = ADJUST_ADJ_EN; > + writel(adj, host->regs + host->data->adjust); > > return meson_mmc_clk_phase_tuning(mmc, opcode, host->rx_clk); > } > @@ -768,6 +773,9 @@ static void meson_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) > if (!IS_ERR(mmc->supply.vmmc)) > mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd); > > + /* disable signal resampling */ > + writel(0, host->regs + host->data->adjust); > + > /* Reset rx phase */ > clk_set_phase(host->rx_clk, 0); > > @@ -1166,7 +1174,7 @@ static int meson_mmc_get_cd(struct mmc_host *mmc) > > static void meson_mmc_cfg_init(struct meson_host *host) > { > - u32 cfg = 0, adj = 0; > + u32 cfg = 0; > > cfg |= FIELD_PREP(CFG_RESP_TIMEOUT_MASK, > ilog2(SD_EMMC_CFG_RESP_TIMEOUT)); > @@ -1177,10 +1185,6 @@ static void meson_mmc_cfg_init(struct meson_host *host) > cfg |= CFG_ERR_ABORT; > > writel(cfg, host->regs + SD_EMMC_CFG); > - > - /* enable signal resampling w/o delay */ > - adj = ADJUST_ADJ_EN; > - writel(adj, host->regs + host->data->adjust); > } > > static int meson_mmc_card_busy(struct mmc_host *mmc) > -- > 2.20.1 >
diff --git a/drivers/mmc/host/meson-gx-mmc.c b/drivers/mmc/host/meson-gx-mmc.c index c2690c1a50ff..dba499009d0c 100644 --- a/drivers/mmc/host/meson-gx-mmc.c +++ b/drivers/mmc/host/meson-gx-mmc.c @@ -738,6 +738,11 @@ static int meson_mmc_clk_phase_tuning(struct mmc_host *mmc, u32 opcode, static int meson_mmc_execute_tuning(struct mmc_host *mmc, u32 opcode) { struct meson_host *host = mmc_priv(mmc); + int adj = 0; + + /* enable signal resampling w/o delay */ + adj = ADJUST_ADJ_EN; + writel(adj, host->regs + host->data->adjust); return meson_mmc_clk_phase_tuning(mmc, opcode, host->rx_clk); } @@ -768,6 +773,9 @@ static void meson_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) if (!IS_ERR(mmc->supply.vmmc)) mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd); + /* disable signal resampling */ + writel(0, host->regs + host->data->adjust); + /* Reset rx phase */ clk_set_phase(host->rx_clk, 0); @@ -1166,7 +1174,7 @@ static int meson_mmc_get_cd(struct mmc_host *mmc) static void meson_mmc_cfg_init(struct meson_host *host) { - u32 cfg = 0, adj = 0; + u32 cfg = 0; cfg |= FIELD_PREP(CFG_RESP_TIMEOUT_MASK, ilog2(SD_EMMC_CFG_RESP_TIMEOUT)); @@ -1177,10 +1185,6 @@ static void meson_mmc_cfg_init(struct meson_host *host) cfg |= CFG_ERR_ABORT; writel(cfg, host->regs + SD_EMMC_CFG); - - /* enable signal resampling w/o delay */ - adj = ADJUST_ADJ_EN; - writel(adj, host->regs + host->data->adjust); } static int meson_mmc_card_busy(struct mmc_host *mmc)
card detection fails on "BeeLink Mini M8 SII" if enabled too early mmc1: error -110 whilst initialising MMC card Fixes: 71645e65729f ("mmc: meson-gx: add signal resampling") Signed-off-by: Andreas Fenkart <afenkart@gmail.com> --- drivers/mmc/host/meson-gx-mmc.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)