[U-Boot] [PATCH v1 0/2]

This series is about fixing 2 issues: - SD breakage with QEmu / vexpress-a15 - incorrect version identification for MMC above version 4.41 (included)
Thanks to Jonathan Gray and eil Eilmsteiner Heribert for reporting them.
Jean-Jacques Hiblot (2): mmc: Fix bug in sd_set_card_speed() mmc: fix bug in mmc_startup_v4()
drivers/mmc/mmc.c | 3 ++- include/mmc.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-)

After settings the speed of the sd with the switch command, a check is done to make sure that the new speed has been set. The current check has a masking error: speed are encoded on 4 bits only. Fix it by masking the upper bits.
This fixes a problem seen with QEmu emulating a vexpress-a15.
Reported-by: Jonathan Gray jsg@jsg.id.au Signed-off-by: Jean-Jacques Hiblot jjhiblot@ti.com
---
drivers/mmc/mmc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 255310a..31614dd 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1333,7 +1333,7 @@ static int sd_set_card_speed(struct mmc *mmc, enum bus_mode mode) if (err) return err;
- if ((__be32_to_cpu(switch_status[4]) >> 24) != speed) + if (((__be32_to_cpu(switch_status[4]) >> 24) & 0xF) != speed) return -ENOTSUPP;
return 0;

On Fri, Feb 09, 2018 at 12:09:27PM +0100, Jean-Jacques Hiblot wrote:
After settings the speed of the sd with the switch command, a check is done to make sure that the new speed has been set. The current check has a masking error: speed are encoded on 4 bits only. Fix it by masking the upper bits.
This fixes a problem seen with QEmu emulating a vexpress-a15.
Reported-by: Jonathan Gray jsg@jsg.id.au Signed-off-by: Jean-Jacques Hiblot jjhiblot@ti.com
With this change the emulated mmc controller can be accessed again here.
Tested-by: Jonathan Gray jsg@jsg.id.au
drivers/mmc/mmc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 255310a..31614dd 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1333,7 +1333,7 @@ static int sd_set_card_speed(struct mmc *mmc, enum bus_mode mode) if (err) return err;
- if ((__be32_to_cpu(switch_status[4]) >> 24) != speed)
if (((__be32_to_cpu(switch_status[4]) >> 24) & 0xF) != speed) return -ENOTSUPP;
return 0;
-- 1.9.1

On 02/10/2018 07:52 AM, Jonathan Gray wrote:
On Fri, Feb 09, 2018 at 12:09:27PM +0100, Jean-Jacques Hiblot wrote:
After settings the speed of the sd with the switch command, a check is done to make sure that the new speed has been set. The current check has a masking error: speed are encoded on 4 bits only. Fix it by masking the upper bits.
This fixes a problem seen with QEmu emulating a vexpress-a15.
Reported-by: Jonathan Gray jsg@jsg.id.au Signed-off-by: Jean-Jacques Hiblot jjhiblot@ti.com
With this change the emulated mmc controller can be accessed again here.
Tested-by: Jonathan Gray jsg@jsg.id.au
Thanks for testing. I will pick this. When i apply to u-boot-mmc, i will notice.
Best Regards, Jaehoon Chung
drivers/mmc/mmc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 255310a..31614dd 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1333,7 +1333,7 @@ static int sd_set_card_speed(struct mmc *mmc, enum bus_mode mode) if (err) return err;
- if ((__be32_to_cpu(switch_status[4]) >> 24) != speed)
if (((__be32_to_cpu(switch_status[4]) >> 24) & 0xF) != speed) return -ENOTSUPP;
return 0;
-- 1.9.1

On 02/09/2018 08:09 PM, Jean-Jacques Hiblot wrote:
After settings the speed of the sd with the switch command, a check is done to make sure that the new speed has been set. The current check has a masking error: speed are encoded on 4 bits only. Fix it by masking the upper bits.
This fixes a problem seen with QEmu emulating a vexpress-a15.
Reported-by: Jonathan Gray jsg@jsg.id.au Signed-off-by: Jean-Jacques Hiblot jjhiblot@ti.com
Applied to u-boot-mmc. Thanks!
Best Regards, Jaehoon Chung
drivers/mmc/mmc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 255310a..31614dd 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1333,7 +1333,7 @@ static int sd_set_card_speed(struct mmc *mmc, enum bus_mode mode) if (err) return err;
- if ((__be32_to_cpu(switch_status[4]) >> 24) != speed)
if (((__be32_to_cpu(switch_status[4]) >> 24) & 0xF) != speed) return -ENOTSUPP;
return 0;

The correspondence between mmc versions as used in u-boot and the version numbers reported in register EXT_CSD_REV is wrong for versions above and including MMC_VERSION_4_41. All those versions were shifted by one: real 4.5 hardware appeared to be MMC_VERSION_5_0.
Fix this by adding the missing version in the correspondence table.
Reported-by: eil Eilmsteiner Heribert eil@keba.com Signed-off-by: Jean-Jacques Hiblot jjhiblot@ti.com
---
drivers/mmc/mmc.c | 1 + include/mmc.h | 1 + 2 files changed, 2 insertions(+)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 31614dd..99e2a75 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1950,6 +1950,7 @@ static int mmc_startup_v4(struct mmc *mmc) MMC_VERSION_4_1, MMC_VERSION_4_2, MMC_VERSION_4_3, + MMC_VERSION_4_4, MMC_VERSION_4_41, MMC_VERSION_4_5, MMC_VERSION_5_0, diff --git a/include/mmc.h b/include/mmc.h index a46eaed..86f885b 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -54,6 +54,7 @@ #define MMC_VERSION_4_1 MAKE_MMC_VERSION(4, 1, 0) #define MMC_VERSION_4_2 MAKE_MMC_VERSION(4, 2, 0) #define MMC_VERSION_4_3 MAKE_MMC_VERSION(4, 3, 0) +#define MMC_VERSION_4_4 MAKE_MMC_VERSION(4, 4, 0) #define MMC_VERSION_4_41 MAKE_MMC_VERSION(4, 4, 1) #define MMC_VERSION_4_5 MAKE_MMC_VERSION(4, 5, 0) #define MMC_VERSION_5_0 MAKE_MMC_VERSION(5, 0, 0)

On 9 February 2018 at 04:09, Jean-Jacques Hiblot jjhiblot@ti.com wrote:
The correspondence between mmc versions as used in u-boot and the version
U-Boot
numbers reported in register EXT_CSD_REV is wrong for versions above and including MMC_VERSION_4_41. All those versions were shifted by one: real 4.5 hardware appeared to be MMC_VERSION_5_0.
Fix this by adding the missing version in the correspondence table.
Reported-by: eil Eilmsteiner Heribert eil@keba.com Signed-off-by: Jean-Jacques Hiblot jjhiblot@ti.com
drivers/mmc/mmc.c | 1 + include/mmc.h | 1 + 2 files changed, 2 insertions(+)
Reviewed-by: Simon Glass sjg@chromium.org
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 31614dd..99e2a75 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1950,6 +1950,7 @@ static int mmc_startup_v4(struct mmc *mmc) MMC_VERSION_4_1, MMC_VERSION_4_2, MMC_VERSION_4_3,
MMC_VERSION_4_4, MMC_VERSION_4_41, MMC_VERSION_4_5, MMC_VERSION_5_0,
diff --git a/include/mmc.h b/include/mmc.h index a46eaed..86f885b 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -54,6 +54,7 @@ #define MMC_VERSION_4_1 MAKE_MMC_VERSION(4, 1, 0) #define MMC_VERSION_4_2 MAKE_MMC_VERSION(4, 2, 0) #define MMC_VERSION_4_3 MAKE_MMC_VERSION(4, 3, 0) +#define MMC_VERSION_4_4 MAKE_MMC_VERSION(4, 4, 0) #define MMC_VERSION_4_41 MAKE_MMC_VERSION(4, 4, 1) #define MMC_VERSION_4_5 MAKE_MMC_VERSION(4, 5, 0)
#define MMC_VERSION_5_0 MAKE_MMC_VERSION(5, 0, 0)
1.9.1

On 9 February 2018 at 13:09, Jean-Jacques Hiblot jjhiblot@ti.com wrote:
The correspondence between mmc versions as used in u-boot and the version numbers reported in register EXT_CSD_REV is wrong for versions above and including MMC_VERSION_4_41. All those versions were shifted by one: real 4.5 hardware appeared to be MMC_VERSION_5_0.
Fix this by adding the missing version in the correspondence table.
Reported-by: eil Eilmsteiner Heribert eil@keba.com Signed-off-by: Jean-Jacques Hiblot jjhiblot@ti.com
drivers/mmc/mmc.c | 1 + include/mmc.h | 1 + 2 files changed, 2 insertions(+)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 31614dd..99e2a75 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1950,6 +1950,7 @@ static int mmc_startup_v4(struct mmc *mmc) MMC_VERSION_4_1, MMC_VERSION_4_2, MMC_VERSION_4_3,
MMC_VERSION_4_4, MMC_VERSION_4_41, MMC_VERSION_4_5, MMC_VERSION_5_0,
diff --git a/include/mmc.h b/include/mmc.h index a46eaed..86f885b 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -54,6 +54,7 @@ #define MMC_VERSION_4_1 MAKE_MMC_VERSION(4, 1, 0) #define MMC_VERSION_4_2 MAKE_MMC_VERSION(4, 2, 0) #define MMC_VERSION_4_3 MAKE_MMC_VERSION(4, 3, 0) +#define MMC_VERSION_4_4 MAKE_MMC_VERSION(4, 4, 0) #define MMC_VERSION_4_41 MAKE_MMC_VERSION(4, 4, 1) #define MMC_VERSION_4_5 MAKE_MMC_VERSION(4, 5, 0)
#define MMC_VERSION_5_0 MAKE_MMC_VERSION(5, 0, 0)
1.9.1
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Reviewed-by: Sam Protsenko semen.protsenko@linaro.org
This patch fixes eMMC on AM57x EVM / X15 boards, which was broken in 58a6fb7b0496 ("mmc: reworked version lookup in mmc_startup_v4") commit.
Thanks.

Hi Tom,
Can we merge this fix, please? We are having troubles with X15 board in Linaro lab due to this bug... Would be great to have this patch in v2018.03. I know, relying on master branch is not good, but it is what it is, I'll talk with guys if we can change the policy.
Thanks!
On 14 February 2018 at 17:02, Sam Protsenko semen.protsenko@linaro.org wrote:
On 9 February 2018 at 13:09, Jean-Jacques Hiblot jjhiblot@ti.com wrote:
The correspondence between mmc versions as used in u-boot and the version numbers reported in register EXT_CSD_REV is wrong for versions above and including MMC_VERSION_4_41. All those versions were shifted by one: real 4.5 hardware appeared to be MMC_VERSION_5_0.
Fix this by adding the missing version in the correspondence table.
Reported-by: eil Eilmsteiner Heribert eil@keba.com Signed-off-by: Jean-Jacques Hiblot jjhiblot@ti.com
drivers/mmc/mmc.c | 1 + include/mmc.h | 1 + 2 files changed, 2 insertions(+)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 31614dd..99e2a75 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1950,6 +1950,7 @@ static int mmc_startup_v4(struct mmc *mmc) MMC_VERSION_4_1, MMC_VERSION_4_2, MMC_VERSION_4_3,
MMC_VERSION_4_4, MMC_VERSION_4_41, MMC_VERSION_4_5, MMC_VERSION_5_0,
diff --git a/include/mmc.h b/include/mmc.h index a46eaed..86f885b 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -54,6 +54,7 @@ #define MMC_VERSION_4_1 MAKE_MMC_VERSION(4, 1, 0) #define MMC_VERSION_4_2 MAKE_MMC_VERSION(4, 2, 0) #define MMC_VERSION_4_3 MAKE_MMC_VERSION(4, 3, 0) +#define MMC_VERSION_4_4 MAKE_MMC_VERSION(4, 4, 0) #define MMC_VERSION_4_41 MAKE_MMC_VERSION(4, 4, 1) #define MMC_VERSION_4_5 MAKE_MMC_VERSION(4, 5, 0)
#define MMC_VERSION_5_0 MAKE_MMC_VERSION(5, 0, 0)
1.9.1
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Reviewed-by: Sam Protsenko semen.protsenko@linaro.org
This patch fixes eMMC on AM57x EVM / X15 boards, which was broken in 58a6fb7b0496 ("mmc: reworked version lookup in mmc_startup_v4") commit.
Thanks.

On 02/16/2018 02:22 AM, Sam Protsenko wrote:
Hi Tom,
Can we merge this fix, please? We are having troubles with X15 board in Linaro lab due to this bug... Would be great to have this patch in v2018.03. I know, relying on master branch is not good, but it is what it is, I'll talk with guys if we can change the policy.
i will send the PR with this patch on today.
Thanks!
On 14 February 2018 at 17:02, Sam Protsenko semen.protsenko@linaro.org wrote:
On 9 February 2018 at 13:09, Jean-Jacques Hiblot jjhiblot@ti.com wrote:
The correspondence between mmc versions as used in u-boot and the version numbers reported in register EXT_CSD_REV is wrong for versions above and including MMC_VERSION_4_41. All those versions were shifted by one: real 4.5 hardware appeared to be MMC_VERSION_5_0.
Fix this by adding the missing version in the correspondence table.
Reported-by: eil Eilmsteiner Heribert eil@keba.com Signed-off-by: Jean-Jacques Hiblot jjhiblot@ti.com
drivers/mmc/mmc.c | 1 + include/mmc.h | 1 + 2 files changed, 2 insertions(+)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 31614dd..99e2a75 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1950,6 +1950,7 @@ static int mmc_startup_v4(struct mmc *mmc) MMC_VERSION_4_1, MMC_VERSION_4_2, MMC_VERSION_4_3,
MMC_VERSION_4_4, MMC_VERSION_4_41, MMC_VERSION_4_5, MMC_VERSION_5_0,
diff --git a/include/mmc.h b/include/mmc.h index a46eaed..86f885b 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -54,6 +54,7 @@ #define MMC_VERSION_4_1 MAKE_MMC_VERSION(4, 1, 0) #define MMC_VERSION_4_2 MAKE_MMC_VERSION(4, 2, 0) #define MMC_VERSION_4_3 MAKE_MMC_VERSION(4, 3, 0) +#define MMC_VERSION_4_4 MAKE_MMC_VERSION(4, 4, 0) #define MMC_VERSION_4_41 MAKE_MMC_VERSION(4, 4, 1) #define MMC_VERSION_4_5 MAKE_MMC_VERSION(4, 5, 0)
#define MMC_VERSION_5_0 MAKE_MMC_VERSION(5, 0, 0)
1.9.1
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
Reviewed-by: Sam Protsenko semen.protsenko@linaro.org
This patch fixes eMMC on AM57x EVM / X15 boards, which was broken in 58a6fb7b0496 ("mmc: reworked version lookup in mmc_startup_v4") commit.
Thanks.

On 02/09/2018 08:09 PM, Jean-Jacques Hiblot wrote:
The correspondence between mmc versions as used in u-boot and the version numbers reported in register EXT_CSD_REV is wrong for versions above and including MMC_VERSION_4_41. All those versions were shifted by one: real 4.5 hardware appeared to be MMC_VERSION_5_0.
Fix this by adding the missing version in the correspondence table.
Reported-by: eil Eilmsteiner Heribert eil@keba.com Signed-off-by: Jean-Jacques Hiblot jjhiblot@ti.com
Applied to u-boot-mmc. Thanks!
Best Regards, Jaehoon Chung
drivers/mmc/mmc.c | 1 + include/mmc.h | 1 + 2 files changed, 2 insertions(+)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 31614dd..99e2a75 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1950,6 +1950,7 @@ static int mmc_startup_v4(struct mmc *mmc) MMC_VERSION_4_1, MMC_VERSION_4_2, MMC_VERSION_4_3,
MMC_VERSION_4_41, MMC_VERSION_4_5, MMC_VERSION_5_0,MMC_VERSION_4_4,
diff --git a/include/mmc.h b/include/mmc.h index a46eaed..86f885b 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -54,6 +54,7 @@ #define MMC_VERSION_4_1 MAKE_MMC_VERSION(4, 1, 0) #define MMC_VERSION_4_2 MAKE_MMC_VERSION(4, 2, 0) #define MMC_VERSION_4_3 MAKE_MMC_VERSION(4, 3, 0) +#define MMC_VERSION_4_4 MAKE_MMC_VERSION(4, 4, 0) #define MMC_VERSION_4_41 MAKE_MMC_VERSION(4, 4, 1) #define MMC_VERSION_4_5 MAKE_MMC_VERSION(4, 5, 0) #define MMC_VERSION_5_0 MAKE_MMC_VERSION(5, 0, 0)
participants (5)
-
Jaehoon Chung
-
Jean-Jacques Hiblot
-
Jonathan Gray
-
Sam Protsenko
-
Simon Glass