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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.