From 8ae1f8298820a19380bafc07ad554bd629cc27be Mon Sep 17 00:00:00 2001 From: Jonathan Gray Date: Sat, 17 Mar 2018 16:15:48 +1100 Subject: mmc: use core clock frequency in bcm2835 sdhost 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 Signed-off-by: Alexander Graf --- arch/arm/mach-bcm283x/include/mach/msg.h | 3 ++- arch/arm/mach-bcm283x/msg.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'arch/arm') diff --git a/arch/arm/mach-bcm283x/include/mach/msg.h b/arch/arm/mach-bcm283x/include/mach/msg.h index 478b1f1c501..d055480ba11 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 92e93ad9e55..ad29f3be09e 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) { -- cgit v1.2.3