Index: boot/arch/arm32/src/mm.c
===================================================================
--- boot/arch/arm32/src/mm.c	(revision 7e752b2a0d66c871748e5fa9e8bbe3a27c70a202)
+++ boot/arch/arm32/src/mm.c	(revision 161fbdac38609a0d06f79f81f364b0cee5130f21)
@@ -67,6 +67,12 @@
 static void init_boot_pt(void)
 {
-	pfn_t split_page = 0x800;
-	
+/* BeagleBoard-xM (MD37x) memory starts at 2GB border,
+ * thus mapping only lower 2GB is not not enough.
+ * Map entire AS 1:1 instead and hope it works. */
+#ifdef MACHINE_beagleboardxm
+	const pfn_t split_page = PTL0_ENTRIES;
+#else
+	const pfn_t split_page = 0x800;
+#endif
 	/* Create 1:1 virtual-physical mapping (in lower 2 GB). */
 	pfn_t page;
Index: boot/arch/arm32/src/putchar.c
===================================================================
--- boot/arch/arm32/src/putchar.c	(revision 7e752b2a0d66c871748e5fa9e8bbe3a27c70a202)
+++ boot/arch/arm32/src/putchar.c	(revision 161fbdac38609a0d06f79f81f364b0cee5130f21)
@@ -40,4 +40,26 @@
 #include <putchar.h>
 #include <str.h>
+
+#ifdef MACHINE_beagleboardxm
+
+/** Send a byte to the amdm37x serial console.
+ *
+ * @param byte		Byte to send.
+ */
+static void scons_sendb_bbxm(uint8_t byte)
+{
+	volatile uint32_t *thr =
+	    (volatile uint32_t *)BBXM_SCONS_THR;
+	volatile uint32_t *ssr =
+	    (volatile uint32_t *)BBXM_SCONS_SSR;
+
+	/* Wait until transmitter is empty. */
+	while ((*ssr & BBXM_THR_FULL) == 1) ;
+
+	/* Transmit byte. */
+	*thr = (uint32_t) byte;
+}
+
+#endif
 
 #ifdef MACHINE_gta02
@@ -97,4 +119,7 @@
 static void scons_sendb(uint8_t byte)
 {
+#ifdef MACHINE_beagleboardxm
+	scons_sendb_bbxm(byte);
+#endif
 #ifdef MACHINE_gta02
 	scons_sendb_gta02(byte);
