summaryrefslogtreecommitdiff
path: root/board/raspberrypi/rpi_b
diff options
context:
space:
mode:
authorStephen Warren <swarren@wwwdotorg.org>2013-01-29 16:37:37 +0000
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>2013-03-20 15:29:29 +0100
commit3f397782ae6c6148f7fa12bbb62f309a4f5d897c (patch)
tree2803bad4839969cfa68a8ca75a3912d9783a5596 /board/raspberrypi/rpi_b
parent88077280c48ba4e0f3b9a305ffb748b1bba8380a (diff)
downloadu-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/rpi_b')
-rw-r--r--board/raspberrypi/rpi_b/rpi_b.c21
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;
}