diff options
author | Stephen Warren <swarren@wwwdotorg.org> | 2013-01-29 16:37:37 +0000 |
---|---|---|
committer | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2013-03-20 15:29:29 +0100 |
commit | 3f397782ae6c6148f7fa12bbb62f309a4f5d897c (patch) | |
tree | 2803bad4839969cfa68a8ca75a3912d9783a5596 /board/raspberrypi | |
parent | 88077280c48ba4e0f3b9a305ffb748b1bba8380a (diff) | |
download | u-boot-imx-3f397782ae6c6148f7fa12bbb62f309a4f5d897c.zip u-boot-imx-3f397782ae6c6148f7fa12bbb62f309a4f5d897c.tar.gz u-boot-imx-3f397782ae6c6148f7fa12bbb62f309a4f5d897c.tar.bz2 |
ARM: rpi_b: use bcm2835 mbox driver to get memory size
The firmware running on the bcm2835 SoC's VideoCore CPU determines how
much of the system RAM is available for use by the ARM CPU. Previously,
U-Boot assumed that only 128MB was available, since this was the
smallest value configured by any public firmware. However, we can now
query the actual value at run-time from the firmware using the mbox
property protocol.
Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
Diffstat (limited to 'board/raspberrypi')
-rw-r--r-- | board/raspberrypi/rpi_b/rpi_b.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/board/raspberrypi/rpi_b/rpi_b.c b/board/raspberrypi/rpi_b/rpi_b.c index 688b0aa..3c654a1 100644 --- a/board/raspberrypi/rpi_b/rpi_b.c +++ b/board/raspberrypi/rpi_b/rpi_b.c @@ -15,13 +15,32 @@ */ #include <common.h> +#include <asm/arch/mbox.h> #include <asm/global_data.h> DECLARE_GLOBAL_DATA_PTR; +struct msg_get_arm_mem { + struct bcm2835_mbox_hdr hdr; + struct bcm2835_mbox_tag_get_arm_mem get_arm_mem; + u32 end_tag; +}; + int dram_init(void) { - gd->ram_size = CONFIG_SYS_SDRAM_SIZE; + ALLOC_ALIGN_BUFFER(struct msg_get_arm_mem, msg, 1, 16); + int ret; + + BCM2835_MBOX_INIT_HDR(msg); + BCM2835_MBOX_INIT_TAG(&msg->get_arm_mem, GET_ARM_MEMORY); + + ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN, &msg->hdr); + if (ret) { + printf("bcm2835: Could not query ARM memory size\n"); + return -1; + } + + gd->ram_size = msg->get_arm_mem.body.resp.mem_size; return 0; } |