Index: kernel/arch/arm32/src/mach/raspberrypi/raspberrypi.c
===================================================================
--- kernel/arch/arm32/src/mach/raspberrypi/raspberrypi.c	(revision c88250553aba5820e5ea6bf156edf1ed176d8737)
+++ kernel/arch/arm32/src/mach/raspberrypi/raspberrypi.c	(revision 409a996001b1ed2b78fd6bb8ba81e24a4023ac32)
@@ -39,4 +39,5 @@
 #include <genarch/drivers/bcm2835/irc.h>
 #include <genarch/drivers/bcm2835/timer.h>
+#include <genarch/drivers/bcm2835/mbox.h>
 #include <arch/mm/page.h>
 #include <mm/page.h>
@@ -50,12 +51,7 @@
 #include <ddi/device.h>
 
-#define RPI_MEMORY_START 0
-/*
- * TODO: size of available memory depends on hw model and
- * bootloader configuration, we should detect it somehow.
- * 128MB should be a safe value for now.
- * */
-#define RPI_MEMORY_SIZE  0x08000000
-#define RPI_MEMORY_SKIP  0x8000
+#define RPI_DEFAULT_MEMORY_START	0
+#define RPI_DEFAULT_MEMORY_SIZE		0x08000000
+#define RPI_MEMORY_SKIP			0x8000
 
 static void raspberrypi_init(void);
@@ -143,6 +139,14 @@
 static void raspberrypi_get_memory_extents(uintptr_t *start, size_t *size)
 {
-	*start = RPI_MEMORY_START + RPI_MEMORY_SKIP;
-	*size  = RPI_MEMORY_SIZE - RPI_MEMORY_SKIP;
+	uint32_t mbase, msize;
+
+	if (bcm2835_prop_get_memory(&mbase, &msize)) {
+		*start = mbase + RPI_MEMORY_SKIP;
+		*size  = msize - RPI_MEMORY_SKIP;
+	} else {
+		/* Stick to safe default values */
+		*start = RPI_DEFAULT_MEMORY_START + RPI_MEMORY_SKIP;
+		*size  = RPI_DEFAULT_MEMORY_SIZE - RPI_MEMORY_SKIP;
+	}
 }
 
