#include <asm/io.h>
 #include <linux/compiler.h>
 #include <asm/semihosting.h>
+#include <dm/platdata.h>
+#include <dm/platform_data/serial_pl01x.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
+static const struct pl01x_serial_platdata serial_platdata = {
+       .base = V2M_UART0,
+       .type = TYPE_PL011,
+       .clock = 2400 * 1000,
+};
+
+U_BOOT_DEVICE(vexpress_serials) = {
+       .name = "serial_pl01x",
+       .platdata = &serial_platdata,
+};
+
 int board_init(void)
 {
        return 0;
 
 #ifndef __VEXPRESS_AEMV8A_H
 #define __VEXPRESS_AEMV8A_H
 
+#define CONFIG_DM
+
 /* We use generic board for v8 Versatile Express */
 #define CONFIG_SYS_GENERIC_BOARD
 
 #define CONFIG_SYS_MEMTEST_END         (V2M_BASE + 0x80000000)
 
 /* Size of malloc() pool */
+#define CONFIG_SYS_MALLOC_F_LEN                0x2000
 #define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + (8 << 20))
 
 /* Ethernet Configuration */
 #endif
 
 /* PL011 Serial Configuration */
+#define CONFIG_BAUDRATE                        115200
+#ifdef CONFIG_DM
+#define CONFIG_DM_SERIAL
+#define CONFIG_PL01X_SERIAL
+#else
+#define CONFIG_SYS_SERIAL0             V2M_UART0
+#define CONFIG_SYS_SERIAL1             V2M_UART1
+#define CONFIG_CONS_INDEX              0
 #define CONFIG_PL011_SERIAL
 #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
 #define CONFIG_PL011_CLOCK             7273800
 #endif
 #define CONFIG_PL01x_PORTS             {(void *)CONFIG_SYS_SERIAL0, \
                                         (void *)CONFIG_SYS_SERIAL1}
-#define CONFIG_CONS_INDEX              0
+#endif
 
 #define CONFIG_BAUDRATE                        115200
 #define CONFIG_SYS_SERIAL0             V2M_UART0