Skip to contentSkip to conversation

tegra: mmc: Set the bus width correctly

PATCH New Simon Glass 4 participants 5 messages Jun 8, 2017 – Jun 20, 2017

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 tegra: mmc: Set the bus width correctly

The driver currently does not reset bit 5 of the hostctl register even if the MMC stack requests it. Then means that once a bus width of 8 is selected it is not possible to change it back to 1. This breaks 'mmc rescan' which needs to start off with a bus width of 1.

The problem was surfaced by enabling CONFIG_DM_MMC_OPS on tegra. Without this option the MMC stack fully reinits the driver on a 'mmc rescan'. But with this option driver model does not re-probe a driver once it has been probed once.

Fix the driver to honour the request.

---

 drivers/mmc/tegra_mmc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/mmc/tegra_mmc.c +1 -1
index 338e42b528..7d945a172e 100644
@@ -438,7 +438,7 @@ static int tegra_mmc_set_ios(struct udevice *dev)
 	else if (mmc->bus_width == 4)
 		ctrl |= (1 << 1);
 	else
-		ctrl &= ~(1 << 1);
+		ctrl &= ~(1 << 1 | 1 << 5);
 
 	writeb(ctrl, &priv->reg->hostctl);
 	debug("mmc_set_ios: hostctl = %08X\n", ctrl);
Signature · 1 line
2.13.0.506.g27d5fe0cd-goog
#1 lore raw

PATCH 1/1 tegra: mmc: Set the bus width correctly

Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Simon" == Simon Glass <[email protected]> writes:

Simon> The driver currently does not reset bit 5 of the hostctl Simon> register even if the MMC stack requests it. Then means that Simon> once a bus width of 8 is selected it is not possible to change Simon> it back to 1. This breaks 'mmc rescan' which needs to start off Simon> with a bus width of 1.

Simon> The problem was surfaced by enabling CONFIG_DM_MMC_OPS on Simon> tegra. Without this option the MMC stack fully reinits the Simon> driver on a 'mmc rescan'. But with this option driver model Simon> does not re-probe a driver once it has been probed once.

Simon> Fix the driver to honour the request.

Simon> Signed-off-by: Simon Glass <[email protected]> ---

Simon> drivers/mmc/tegra_mmc.c | 2 +- 1 file changed, 1 insertion(+), Simon> 1 deletion(-)

Simon> diff --git a/drivers/mmc/tegra_mmc.c b/drivers/mmc/tegra_mmc.c Simon> index 338e42b528..7d945a172e 100644 ---
Simon> a/drivers/mmc/tegra_mmc.c +++ b/drivers/mmc/tegra_mmc.c @@ Simon> -438,7 +438,7 @@ static int tegra_mmc_set_ios(struct udevice Simon> *dev) else if (mmc->bus_width == 4) ctrl |= (1 << 1); else - Simon> ctrl &= ~(1 << 1); + ctrl &= ~(1 << 1 | 1 << 5);

Simon> writeb(ctrl, &priv->reg->hostctl); debug("mmc_set_ios:
Simon> hostctl = %08X\n", ctrl); -- 2.13.0.506.g27d5fe0cd-goog

Simon> --
Dr Peter Chubb Tel: +61 2 9490 5852 http://ts.data61.csiro.au/
Trustworthy Systems Group Data61 (formerly NICTA)

#2 lore raw

PATCH 1/1 tegra: mmc: Set the bus width correctly

Hi,

Quoted 29 lines · On 7 June 2017 at 22:03, <[email protected]> wrote:
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Simon" == Simon Glass <[email protected]> writes:

Simon> The driver currently does not reset bit 5 of the hostctl Simon> register even if the MMC stack requests it. Then means that Simon> once a bus width of 8 is selected it is not possible to change Simon> it back to 1. This breaks 'mmc rescan' which needs to start off Simon> with a bus width of 1.

Simon> The problem was surfaced by enabling CONFIG_DM_MMC_OPS on Simon> tegra. Without this option the MMC stack fully reinits the Simon> driver on a 'mmc rescan'. But with this option driver model Simon> does not re-probe a driver once it has been probed once.

Simon> Fix the driver to honour the request.

Simon> Signed-off-by: Simon Glass <[email protected]> ---

Simon> drivers/mmc/tegra_mmc.c | 2 +- 1 file changed, 1 insertion(+), Simon> 1 deletion(-)

Simon> diff --git a/drivers/mmc/tegra_mmc.c b/drivers/mmc/tegra_mmc.c Simon> index 338e42b528..7d945a172e 100644 ---
Simon> a/drivers/mmc/tegra_mmc.c +++ b/drivers/mmc/tegra_mmc.c @@ Simon> -438,7 +438,7 @@ static int tegra_mmc_set_ios(struct udevice Simon> *dev) else if (mmc->bus_width == 4) ctrl |= (1 << 1); else - Simon> ctrl &= ~(1 << 1); + ctrl &= ~(1 << 1 | 1 << 5);

Quoted 2 lines

Simon> writeb(ctrl, &priv->reg->hostctl); debug("mmc_set_ios:
Simon> hostctl = %08X\n", ctrl); -- 2.13.0.506.g27d5fe0cd-goog

Thanks for testing this.

Tom please note this is a bug fix.

- Simon

#3 lore raw

PATCH 1/1 tegra: mmc: Set the bus width correctly

Thanks, Simon. I'll take it in to u-boot-tegra/master for the next PR.

Quoted 42 lines

-----Original Message-----
From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
Sent: Wednesday, June 14, 2017 4:32 AM
To: Peter Chubb <[email protected]>
Cc: U-Boot Mailing List <[email protected]>; Tom Warren <[email protected]>; Stephen Warren <[email protected]>; Jaehoon Chung <[email protected]>; Stephen Warren <[email protected]>
Subject: Re: [PATCH] tegra: mmc: Set the bus width correctly

Hi,

Quoted 29 lines · On 7 June 2017 at 22:03, <[email protected]> wrote:
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Simon" == Simon Glass <[email protected]> writes:

Simon> The driver currently does not reset bit 5 of the hostctl Simon> register even if the MMC stack requests it. Then means that Simon> once a bus width of 8 is selected it is not possible to change Simon> it back to 1. This breaks 'mmc rescan' which needs to start off Simon> with a bus width of 1.

Simon> The problem was surfaced by enabling CONFIG_DM_MMC_OPS on Simon> tegra. Without this option the MMC stack fully reinits the Simon> driver on a 'mmc rescan'. But with this option driver model Simon> does not re-probe a driver once it has been probed once.

Simon> Fix the driver to honour the request.

Simon> Signed-off-by: Simon Glass <[email protected]> ---

Simon> drivers/mmc/tegra_mmc.c | 2 +- 1 file changed, 1 insertion(+), Simon> 1 deletion(-)

Simon> diff --git a/drivers/mmc/tegra_mmc.c b/drivers/mmc/tegra_mmc.c Simon> index 338e42b528..7d945a172e 100644 ---
Simon> a/drivers/mmc/tegra_mmc.c +++ b/drivers/mmc/tegra_mmc.c @@ Simon> -438,7 +438,7 @@ static int tegra_mmc_set_ios(struct udevice Simon> *dev) else if (mmc->bus_width == 4) ctrl |= (1 << 1); else - Simon> ctrl &= ~(1 << 1); + ctrl &= ~(1 << 1 | 1 << 5);

Quoted 8 lines
Quoted 2 lines

Simon> writeb(ctrl, &priv->reg->hostctl); debug("mmc_set_ios:
Simon> hostctl = %08X\n", ctrl); -- 2.13.0.506.g27d5fe0cd-goog

Thanks for testing this.

Tom please note this is a bug fix.

- Simon

--
nvpublic

#4 lore raw

PATCH 1/1 tegra: mmc: Set the bus width correctly

Quoted 1 line · Tom Warren

Thanks, Simon. I'll take it in to u-boot-tegra/master for the next PR.

I assume this means it'll make v2017.07? Currently v2017.07-rc2 is broken, and this patch fixes the regression for me:

Quoted 49 lines
Quoted 49 lines

-----Original Message-----
From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
Sent: Wednesday, June 14, 2017 4:32 AM
To: Peter Chubb <[email protected]>
Cc: U-Boot Mailing List <[email protected]>; Tom Warren <[email protected]>; Stephen Warren <[email protected]>; Jaehoon Chung <[email protected]>; Stephen Warren <[email protected]>
Subject: Re: [PATCH] tegra: mmc: Set the bus width correctly

Hi,

Quoted 29 lines · On 7 June 2017 at 22:03, <[email protected]> wrote:
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Simon" == Simon Glass <[email protected]> writes:

Simon> The driver currently does not reset bit 5 of the hostctl Simon> register even if the MMC stack requests it. Then means that Simon> once a bus width of 8 is selected it is not possible to change Simon> it back to 1. This breaks 'mmc rescan' which needs to start off Simon> with a bus width of 1.

Simon> The problem was surfaced by enabling CONFIG_DM_MMC_OPS on Simon> tegra. Without this option the MMC stack fully reinits the Simon> driver on a 'mmc rescan'. But with this option driver model Simon> does not re-probe a driver once it has been probed once.

Simon> Fix the driver to honour the request.

Simon> Signed-off-by: Simon Glass <[email protected]> ---

Simon> drivers/mmc/tegra_mmc.c | 2 +- 1 file changed, 1 insertion(+), Simon> 1 deletion(-)

Simon> diff --git a/drivers/mmc/tegra_mmc.c b/drivers/mmc/tegra_mmc.c Simon> index 338e42b528..7d945a172e 100644 ---
Simon> a/drivers/mmc/tegra_mmc.c +++ b/drivers/mmc/tegra_mmc.c @@ Simon> -438,7 +438,7 @@ static int tegra_mmc_set_ios(struct udevice Simon> *dev) else if (mmc->bus_width == 4) ctrl |= (1 << 1); else - Simon> ctrl &= ~(1 << 1); + ctrl &= ~(1 << 1 | 1 << 5);

Quoted 2 lines

Simon> writeb(ctrl, &priv->reg->hostctl); debug("mmc_set_ios:
Simon> hostctl = %08X\n", ctrl); -- 2.13.0.506.g27d5fe0cd-goog

Thanks for testing this.

Tom please note this is a bug fix.

Quoted 7 lines
Quoted 1 line

- Simon

--
nvpublic
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
https://lists.denx.de/listinfo/u-boot

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170620/26cd6472/attachment.sig>