Index: boot/arch/arm32/include/arch.h
===================================================================
--- boot/arch/arm32/include/arch.h	(revision 087768f08b373a348b08eef890ee678a9a30e80b)
+++ boot/arch/arm32/include/arch.h	(revision c91fe327a1a12c2bb0984ce41e8a96f1644bcc65)
@@ -42,4 +42,6 @@
 #ifdef MACHINE_gta02
 #define BOOT_BASE	0x30008000
+#elif defined MACHINE_beagleboardxm
+#define BOOT_BASE	0x80000000
 #else
 #define BOOT_BASE	0x00000000
@@ -47,4 +49,8 @@
 
 #define BOOT_OFFSET	(BOOT_BASE + 0xa00000)
+
+#ifdef MACHINE_beagleboardxm
+	#define PA2KA(addr)  (addr)
+#else
 
 #ifndef __ASM__
@@ -56,4 +62,6 @@
 #endif
 
+#endif
+
 /** @}
  */
Index: boot/arch/arm32/include/main.h
===================================================================
--- boot/arch/arm32/include/main.h	(revision 087768f08b373a348b08eef890ee678a9a30e80b)
+++ boot/arch/arm32/include/main.h	(revision c91fe327a1a12c2bb0984ce41e8a96f1644bcc65)
@@ -40,4 +40,16 @@
 /** Address where characters to be printed are expected. */
 
+
+/** BeagleBoard-xM UART register address
+ *
+ * This is UART3 of AM/DM37x CPU
+ */
+#define BBXM_SCONS_THR          0x49020000
+#define BBXM_SCONS_SSR          0x49020044
+
+/* Check this bit before writing (tx fifo full) */
+#define BBXM_THR_FULL           0x00000001
+
+
 /** GTA02 serial console UART register addresses.
  *
Index: boot/arch/arm32/src/mm.c
===================================================================
--- boot/arch/arm32/src/mm.c	(revision 087768f08b373a348b08eef890ee678a9a30e80b)
+++ boot/arch/arm32/src/mm.c	(revision c91fe327a1a12c2bb0984ce41e8a96f1644bcc65)
@@ -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 087768f08b373a348b08eef890ee678a9a30e80b)
+++ boot/arch/arm32/src/putchar.c	(revision c91fe327a1a12c2bb0984ce41e8a96f1644bcc65)
@@ -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);
