From: Albert ARIBAUD <albert.u.boot@aribaud.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V5 REPOST 7/7] ARM: rpi_b: enable SD controller, add related env/cmds
Date: Wed, 20 Mar 2013 16:31:57 +0100 [thread overview]
Message-ID: <20130320163157.6d522905@lilith> (raw)
In-Reply-To: <1358303219-17503-7-git-send-email-swarren@wwwdotorg.org>
Hi Stephen,
On Tue, 15 Jan 2013 19:26:59 -0700, Stephen Warren
<swarren@wwwdotorg.org> wrote:
> 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>
> ---
> v5: No change.
> v4:
> * Merged with video patch series due to dependencies in rpi_b.h.
> * Rebased onto latest u-boot-arm/master; no real changes.
> v3: No such version was posted.
> v2: No change.
> ---
> arch/arm/include/asm/arch-bcm2835/mbox.h | 26 ++++++++++++
> board/raspberrypi/rpi_b/rpi_b.c | 26 ++++++++++++
> include/configs/rpi_b.h | 68 ++++++++++++++++++++++++++++--
> 3 files changed, 117 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/include/asm/arch-bcm2835/mbox.h b/arch/arm/include/asm/arch-bcm2835/mbox.h
> index 4752091..b07c4a0 100644
> --- a/arch/arm/include/asm/arch-bcm2835/mbox.h
> +++ b/arch/arm/include/asm/arch-bcm2835/mbox.h
> @@ -144,6 +144,32 @@ struct bcm2835_mbox_tag_get_arm_mem {
> } body;
> };
>
> +#define BCM2835_MBOX_TAG_GET_CLOCK_RATE 0x00030002
> +
> +#define BCM2835_MBOX_CLOCK_ID_EMMC 1
> +#define BCM2835_MBOX_CLOCK_ID_UART 2
> +#define BCM2835_MBOX_CLOCK_ID_ARM 3
> +#define BCM2835_MBOX_CLOCK_ID_CORE 4
> +#define BCM2835_MBOX_CLOCK_ID_V3D 5
> +#define BCM2835_MBOX_CLOCK_ID_H264 6
> +#define BCM2835_MBOX_CLOCK_ID_ISP 7
> +#define BCM2835_MBOX_CLOCK_ID_SDRAM 8
> +#define BCM2835_MBOX_CLOCK_ID_PIXEL 9
> +#define BCM2835_MBOX_CLOCK_ID_PWM 10
> +
> +struct bcm2835_mbox_tag_get_clock_rate {
> + struct bcm2835_mbox_tag_hdr tag_hdr;
> + union {
> + struct {
> + u32 clock_id;
> + } req;
> + struct {
> + u32 clock_id;
> + u32 rate_hz;
> + } resp;
> + } body;
> +};
> +
> #define BCM2835_MBOX_TAG_ALLOCATE_BUFFER 0x00040001
>
> struct bcm2835_mbox_tag_allocate_buffer {
> diff --git a/board/raspberrypi/rpi_b/rpi_b.c b/board/raspberrypi/rpi_b/rpi_b.c
> index 3c654a1..6b3e095 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);
> +}
> diff --git a/include/configs/rpi_b.h b/include/configs/rpi_b.h
> index e485a06..3d55d36 100644
> --- a/include/configs/rpi_b.h
> +++ b/include/configs/rpi_b.h
> @@ -51,6 +51,7 @@
> #define CONFIG_SYS_MALLOC_LEN SZ_4M
> #define CONFIG_SYS_MEMTEST_START 0x00100000
> #define CONFIG_SYS_MEMTEST_END 0x00200000
> +#define CONFIG_LOADADDR 0x00200000
>
> /* Flash */
> #define CONFIG_SYS_NO_FLASH
> @@ -70,6 +71,13 @@
> #define CONFIG_VIDEO_BCM2835
> #define CONFIG_SYS_WHITE_ON_BLACK
>
> +/* SD/MMC configuration */
> +#define CONFIG_GENERIC_MMC
> +#define CONFIG_MMC
> +#define CONFIG_SDHCI
> +#define CONFIG_MMC_SDHCI_IO_ACCESSORS
> +#define CONFIG_BCM2835_SDHCI
> +
> /* Console UART */
> #define CONFIG_PL011_SERIAL
> #define CONFIG_PL011_CLOCK 3000000
> @@ -85,12 +93,59 @@
> /* Environment */
> #define CONFIG_ENV_SIZE SZ_16K
> #define CONFIG_ENV_IS_NOWHERE
> +#define CONFIG_ENV_VARS_UBOOT_CONFIG
> #define CONFIG_SYS_LOAD_ADDR 0x1000000
> #define CONFIG_CONSOLE_MUX
> #define CONFIG_SYS_CONSOLE_IS_IN_ENV
> -#define CONFIG_EXTRA_ENV_SETTINGS "stdin=serial\0" \
> - "stderr=serial,lcd\0" \
> - "stdout=serial,lcd\0"
> +/*
> + * Memory layout for where various images get loaded by boot scripts:
> + *
> + * scriptaddr can be pretty much anywhere that doesn't conflict with something
> + * else. Put it low in memory to avoid conflicts.
> + *
> + * kernel_addr_r must be within the first 128M of RAM in order for the
> + * kernel's CONFIG_AUTO_ZRELADDR option to work. Since the kernel will
> + * decompress itself to 0x8000 after the start of RAM, kernel_addr_r
> + * should not overlap that area, or the kernel will have to copy itself
> + * somewhere else before decompression. Similarly, the address of any other
> + * data passed to the kernel shouldn't overlap the start of RAM. Pushing
> + * this up to 16M allows for a sizable kernel to be decompressed below the
> + * compressed load address.
> + *
> + * fdt_addr_r simply shouldn't overlap anything else. Choosing 32M allows for
> + * the compressed kernel to be up to 16M too.
> + *
> + * ramdisk_addr_r simply shouldn't overlap anything else. Choosing 33M allows
> + * for the FDT/DTB to be up to 1M, which is hopefully plenty.
> + */
> +#define CONFIG_EXTRA_ENV_SETTINGS \
> + "stdin=serial\0" \
> + "stderr=serial,lcd\0" \
> + "stdout=serial,lcd\0" \
> + "scriptaddr=0x00000000\0" \
> + "kernel_addr_r=0x01000000\0" \
> + "fdt_addr_r=0x02000000\0" \
> + "ramdisk_addr_r=0x02100000\0" \
> + "boot_targets=mmc0\0" \
> + \
> + "script_boot=" \
> + "if fatload ${devtype} ${devnum}:1 " \
> + "${scriptaddr} boot.scr.uimg; then " \
> + "source ${scriptaddr}; " \
> + "fi;\0" \
> + \
> + "mmc_boot=" \
> + "setenv devtype mmc; " \
> + "if mmc dev ${devnum}; then " \
> + "run script_boot; " \
> + "fi\0" \
> + \
> + "bootcmd_mmc0=setenv devnum 0; run mmc_boot\0" \
> +
> +#define CONFIG_BOOTCOMMAND \
> + "for target in ${boot_targets}; do run bootcmd_${target}; done"
> +
> +#define CONFIG_BOOTDELAY 2
>
> /* Shell */
> #define CONFIG_SYS_HUSH_PARSER
> @@ -105,6 +160,13 @@
> #include <config_cmd_default.h>
> #define CONFIG_CMD_BOOTZ
> #define CONFIG_CMD_GPIO
> +#define CONFIG_CMD_MMC
> +#define CONFIG_DOS_PARTITION
> +#define CONFIG_PARTITION_UUIDS
> +#define CONFIG_CMD_PART
> +#define CONFIG_CMD_FS_GENERIC
> +#define CONFIG_CMD_FAT
> +#define CONFIG_CMD_EXT
> /* Some things don't make sense on this HW or yet */
> #undef CONFIG_CMD_FPGA
> #undef CONFIG_CMD_NET
Applied to u-boot-arm/master, thanks!
Amicalement,
--
Albert.
next prev parent reply other threads:[~2013-03-20 15:31 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-16 2:26 [U-Boot] [PATCH V5 REPOST 1/7] ARM: bcm2835: add mailbox driver Stephen Warren
2013-01-16 2:26 ` [U-Boot] [PATCH V5 REPOST 2/7] ARM: rpi_b: use bcm2835 mbox driver to get memory size Stephen Warren
2013-03-20 15:31 ` Albert ARIBAUD
2013-01-16 2:26 ` [U-Boot] [PATCH V5 REPOST 3/7] lcd: calculate line_length after lcd_ctrl_init() Stephen Warren
2013-03-20 15:46 ` Albert ARIBAUD
2013-01-16 2:26 ` [U-Boot] [PATCH V5 REPOST 4/7] ARM: rpi_b: disable rpi_b dcache explicitly Stephen Warren
2013-03-20 15:31 ` Albert ARIBAUD
2013-01-16 2:26 ` [U-Boot] [PATCH V5 REPOST 5/7] video: add a driver for the bcm2835 Stephen Warren
2013-03-20 15:31 ` Albert ARIBAUD
2013-01-16 2:26 ` [U-Boot] [PATCH V5 REPOST 6/7] mmc: add bcm2835 driver Stephen Warren
2013-02-03 11:27 ` Albert ARIBAUD
2013-02-15 3:05 ` Stephen Warren
2013-03-10 6:34 ` Stephen Warren
2013-03-11 6:35 ` Albert ARIBAUD
2013-03-15 22:51 ` Stephen Warren
2013-03-16 8:09 ` Albert ARIBAUD
2013-03-20 14:33 ` Albert ARIBAUD
2013-03-20 15:31 ` Albert ARIBAUD
2013-01-16 2:26 ` [U-Boot] [PATCH V5 REPOST 7/7] ARM: rpi_b: enable SD controller, add related env/cmds Stephen Warren
2013-03-20 15:31 ` Albert ARIBAUD [this message]
2013-03-20 15:30 ` [U-Boot] [PATCH V5 REPOST 1/7] ARM: bcm2835: add mailbox driver Albert ARIBAUD
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130320163157.6d522905@lilith \
--to=albert.u.boot@aribaud.net \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox