diff options
| author | Stephen Warren <swarren@wwwdotorg.org> | 2013-01-29 16:37:42 +0000 | 
|---|---|---|
| committer | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2013-03-20 15:32:16 +0100 | 
| commit | 131a1e603b3a8438b84b41940bc6a2051a36e087 (patch) | |
| tree | e1b9f5bbdeb6043d780c212bcca814a8ba96b90a /board/raspberrypi | |
| parent | 9a4fbe4fbdeb3ffadeb277236c672c2712443a1b (diff) | |
| download | olio-uboot-2014.01-131a1e603b3a8438b84b41940bc6a2051a36e087.tar.xz olio-uboot-2014.01-131a1e603b3a8438b84b41940bc6a2051a36e087.zip | |
ARM: rpi_b: enable SD controller, add related env/cmds
Enable the SD controller driver for the Raspberry Pi. Enable a number
of useful MMC, partition, and filesystem-related commands. Set up the
environment to provide standard locations for loading a kernel, DTB,
etc. Provide a boot command that loads and executes boot.scr.uimg from
the SD card; this is written considering future extensibilty to USB
storage.
Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
Diffstat (limited to 'board/raspberrypi')
| -rw-r--r-- | board/raspberrypi/rpi_b/rpi_b.c | 26 | 
1 files changed, 26 insertions, 0 deletions
| diff --git a/board/raspberrypi/rpi_b/rpi_b.c b/board/raspberrypi/rpi_b/rpi_b.c index 3c654a1ac..6b3e095ba 100644 --- a/board/raspberrypi/rpi_b/rpi_b.c +++ b/board/raspberrypi/rpi_b/rpi_b.c @@ -16,6 +16,7 @@  #include <common.h>  #include <asm/arch/mbox.h> +#include <asm/arch/sdhci.h>  #include <asm/global_data.h>  DECLARE_GLOBAL_DATA_PTR; @@ -26,6 +27,12 @@ struct msg_get_arm_mem {  	u32 end_tag;  }; +struct msg_get_clock_rate { +	struct bcm2835_mbox_hdr hdr; +	struct bcm2835_mbox_tag_get_clock_rate get_clock_rate; +	u32 end_tag; +}; +  int dram_init(void)  {  	ALLOC_ALIGN_BUFFER(struct msg_get_arm_mem, msg, 1, 16); @@ -51,3 +58,22 @@ int board_init(void)  	return 0;  } + +int board_mmc_init(void) +{ +	ALLOC_ALIGN_BUFFER(struct msg_get_clock_rate, msg_clk, 1, 16); +	int ret; + +	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; + +	ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN, &msg_clk->hdr); +	if (ret) { +		printf("bcm2835: Could not query eMMC clock rate\n"); +		return -1; +	} + +	return bcm2835_sdhci_init(BCM2835_SDHCI_BASE, +				  msg_clk->get_clock_rate.body.resp.rate_hz); +} |