Fix issue with certain MMC cards on Raspberry Pi
This commit is contained in:
parent
d7be3592de
commit
7cac5dd637
115
mmc-use-core-clock-frequency-in-bcm2835-sdhost.patch
Normal file
115
mmc-use-core-clock-frequency-in-bcm2835-sdhost.patch
Normal file
@ -0,0 +1,115 @@
|
||||
From patchwork Sat Mar 17 05:15:48 2018
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
MIME-Version: 1.0
|
||||
Content-Transfer-Encoding: 7bit
|
||||
Subject: [U-Boot] mmc: use core clock frequency in bcm2835 sdhost
|
||||
X-Patchwork-Submitter: Jonathan Gray <jsg@jsg.id.au>
|
||||
X-Patchwork-Id: 887255
|
||||
Message-Id: <20180317051548.42856-1-jsg@jsg.id.au>
|
||||
To: u-boot@lists.denx.de
|
||||
Cc: Alexander Graf <agraf@suse.de>
|
||||
Date: Sat, 17 Mar 2018 16:15:48 +1100
|
||||
From: Jonathan Gray <jsg@jsg.id.au>
|
||||
List-Id: U-Boot discussion <u-boot.lists.denx.de>
|
||||
|
||||
In raspberrypi-firmware 7fdcd00e00a42a1c91e8bd6f5eb8352fe9358557 and
|
||||
later start.elf now sets the EMMC clock to 200 MHz.
|
||||
|
||||
According to Phil Elwell in
|
||||
https://github.com/raspberrypi/firmware/issues/953
|
||||
the SDHost controller shares the core/VPU clock and doesn't use
|
||||
the EMMC clock.
|
||||
|
||||
Use the core clock id when determining the frequency to allow
|
||||
U-Boot to work with recent versions of raspberrypi-firmware.
|
||||
Otherwise U-Boot hangs at:
|
||||
|
||||
U-Boot 2018.03 (Mar 14 2018 - 20:36:00 +1100)
|
||||
|
||||
DRAM: 948 MiB
|
||||
RPI 3 Model B (0xa02082)
|
||||
MMC: mmc@7e202000: 0, sdhci@7e300000: 1
|
||||
Loading Environment from FAT...
|
||||
|
||||
Signed-off-by: Jonathan Gray <jsg@jsg.id.au>
|
||||
Cc: Alexander Graf <agraf@suse.de>
|
||||
Cc: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
arch/arm/mach-bcm283x/include/mach/msg.h | 3 ++-
|
||||
arch/arm/mach-bcm283x/msg.c | 4 ++--
|
||||
drivers/mmc/bcm2835_sdhci.c | 2 +-
|
||||
drivers/mmc/bcm2835_sdhost.c | 3 ++-
|
||||
4 files changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-bcm283x/include/mach/msg.h b/arch/arm/mach-bcm283x/include/mach/msg.h
|
||||
index 478b1f1c50..d055480ba1 100644
|
||||
--- a/arch/arm/mach-bcm283x/include/mach/msg.h
|
||||
+++ b/arch/arm/mach-bcm283x/include/mach/msg.h
|
||||
@@ -18,9 +18,10 @@ int bcm2835_power_on_module(u32 module);
|
||||
/**
|
||||
* bcm2835_get_mmc_clock() - get the frequency of the MMC clock
|
||||
*
|
||||
+ * @clock_id: ID of clock to get frequency for
|
||||
* @return clock frequency, or -ve on error
|
||||
*/
|
||||
-int bcm2835_get_mmc_clock(void);
|
||||
+int bcm2835_get_mmc_clock(u32 clock_id);
|
||||
|
||||
/**
|
||||
* bcm2835_get_video_size() - get the current display size
|
||||
diff --git a/arch/arm/mach-bcm283x/msg.c b/arch/arm/mach-bcm283x/msg.c
|
||||
index 92e93ad9e5..ad29f3be09 100644
|
||||
--- a/arch/arm/mach-bcm283x/msg.c
|
||||
+++ b/arch/arm/mach-bcm283x/msg.c
|
||||
@@ -65,7 +65,7 @@ int bcm2835_power_on_module(u32 module)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-int bcm2835_get_mmc_clock(void)
|
||||
+int bcm2835_get_mmc_clock(u32 clock_id)
|
||||
{
|
||||
ALLOC_CACHE_ALIGN_BUFFER(struct msg_get_clock_rate, msg_clk, 1);
|
||||
int ret;
|
||||
@@ -76,7 +76,7 @@ int bcm2835_get_mmc_clock(void)
|
||||
|
||||
BCM2835_MBOX_INIT_HDR(msg_clk);
|
||||
BCM2835_MBOX_INIT_TAG(&msg_clk->get_clock_rate, GET_CLOCK_RATE);
|
||||
- msg_clk->get_clock_rate.body.req.clock_id = BCM2835_MBOX_CLOCK_ID_EMMC;
|
||||
+ msg_clk->get_clock_rate.body.req.clock_id = clock_id;
|
||||
|
||||
ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN, &msg_clk->hdr);
|
||||
if (ret) {
|
||||
diff --git a/drivers/mmc/bcm2835_sdhci.c b/drivers/mmc/bcm2835_sdhci.c
|
||||
index 3157354d2a..08bddd410e 100644
|
||||
--- a/drivers/mmc/bcm2835_sdhci.c
|
||||
+++ b/drivers/mmc/bcm2835_sdhci.c
|
||||
@@ -183,7 +183,7 @@ static int bcm2835_sdhci_probe(struct udevice *dev)
|
||||
if (base == FDT_ADDR_T_NONE)
|
||||
return -EINVAL;
|
||||
|
||||
- ret = bcm2835_get_mmc_clock();
|
||||
+ ret = bcm2835_get_mmc_clock(BCM2835_MBOX_CLOCK_ID_EMMC);
|
||||
if (ret < 0) {
|
||||
debug("%s: Failed to set MMC clock (err=%d)\n", __func__, ret);
|
||||
return ret;
|
||||
diff --git a/drivers/mmc/bcm2835_sdhost.c b/drivers/mmc/bcm2835_sdhost.c
|
||||
index 1bf52a3019..bccd182e50 100644
|
||||
--- a/drivers/mmc/bcm2835_sdhost.c
|
||||
+++ b/drivers/mmc/bcm2835_sdhost.c
|
||||
@@ -35,6 +35,7 @@
|
||||
#include <dm.h>
|
||||
#include <mmc.h>
|
||||
#include <asm/arch/msg.h>
|
||||
+#include <asm/arch/mbox.h>
|
||||
#include <asm/unaligned.h>
|
||||
#include <linux/compat.h>
|
||||
#include <linux/io.h>
|
||||
@@ -941,7 +942,7 @@ static int bcm2835_probe(struct udevice *dev)
|
||||
if (!host->ioaddr)
|
||||
return -ENOMEM;
|
||||
|
||||
- host->max_clk = bcm2835_get_mmc_clock();
|
||||
+ host->max_clk = bcm2835_get_mmc_clock(BCM2835_MBOX_CLOCK_ID_CORE);
|
||||
|
||||
bcm2835_add_host(host);
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
Name: uboot-tools
|
||||
Version: 2018.03
|
||||
Release: 2%{?candidate:.%{candidate}}%{?dist}
|
||||
Release: 3%{?candidate:.%{candidate}}%{?dist}
|
||||
Summary: U-Boot utilities
|
||||
License: GPLv2+ BSD LGPL-2.1+ LGPL-2.0+
|
||||
URL: http://www.denx.de/wiki/U-Boot
|
||||
@ -30,6 +30,7 @@ Patch10: dragonboard-fixes.patch
|
||||
Patch11: BeagleBoard.org-PocketBeagle.patch
|
||||
Patch12: mx6cuboxi-add-support-for-detecting-Revision-1.5-SoM.patch
|
||||
Patch13: rpi-3-plus-support.patch
|
||||
Patch14: mmc-use-core-clock-frequency-in-bcm2835-sdhost.patch
|
||||
# Patch19: mvebu-enable-generic-distro-boot-config.patch
|
||||
|
||||
BuildRequires: bc
|
||||
@ -289,6 +290,9 @@ cp -p board/warp7/README builds/docs/README.warp7
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Tue Mar 20 2018 Peter Robinson <pbrobinson@fedoraproject.org> 2018.03-3
|
||||
- Fix issue with certain MMC cards on Raspberry Pi
|
||||
|
||||
* Fri Mar 16 2018 Peter Robinson <pbrobinson@fedoraproject.org> 2018.03-2
|
||||
- Add support for Raspberry Pi 3+
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user