Index: uspace/drv/infrastructure/rootamdm37x/rootamdm37x.c
===================================================================
--- uspace/drv/infrastructure/rootamdm37x/rootamdm37x.c	(revision 708ec6055caafd4c69e064032b4399f562dc07b3)
+++ uspace/drv/infrastructure/rootamdm37x/rootamdm37x.c	(revision 3a0148321ef5f3074bda6eb61cba9a22ad562d33)
@@ -158,4 +158,9 @@
 }
 
+/** Initialize USB TLL port connections.
+ *
+ * Different modes are on page 3312 of the Manual Figure 22-34.
+ * Select mode than can operate in FS/LS.
+ */
 static int usb_tll_init()
 {
@@ -173,5 +178,5 @@
 		return ret;
 
-	/* Reset USB tll */
+	/* Reset USB TLL */
 	usb_tll->sysconfig |= TLL_SYSCONFIG_SOFTRESET_FLAG;
 	ddf_msg(LVL_DEBUG2, "Waiting for USB TLL reset");
@@ -179,4 +184,70 @@
 	ddf_msg(LVL_DEBUG, "USB TLL Reset done.");
 
+	{
+	/* Setup idle mode (smart idle) */
+	uint32_t sysc = usb_tll->sysconfig;
+	sysc |= TLL_SYSCONFIG_CLOCKACTIVITY_FLAG | TLL_SYSCONFIG_AUTOIDLE_FLAG;
+	sysc = (sysc
+	    & ~(TLL_SYSCONFIG_SIDLE_MODE_MASK << TLL_SYSCONFIG_SIDLE_MODE_SHIFT)
+	    ) | (0x2 << TLL_SYSCONFIG_SIDLE_MODE_SHIFT);
+	usb_tll->sysconfig = sysc;
+	ddf_msg(LVL_DEBUG2, "Set TLL->sysconfig (%p) to %x:%x.",
+	    &usb_tll->sysconfig, usb_tll->sysconfig, sysc);
+	}
+
+	{
+	/* Smart idle for UHH */
+	uint32_t sysc = uhh_conf->sysconfig;
+	sysc |= UHH_SYSCONFIG_CLOCKACTIVITY_FLAG | UHH_SYSCONFIG_AUTOIDLE_FLAG;
+	sysc = (sysc
+	    & ~(UHH_SYSCONFIG_SIDLE_MODE_MASK << UHH_SYSCONFIG_SIDLE_MODE_SHIFT)
+	    ) | (0x2 << UHH_SYSCONFIG_SIDLE_MODE_SHIFT);
+	sysc = (sysc
+	    & ~(UHH_SYSCONFIG_MIDLE_MODE_MASK << UHH_SYSCONFIG_MIDLE_MODE_SHIFT)
+	    ) | (0x2 << UHH_SYSCONFIG_MIDLE_MODE_SHIFT);
+	ddf_msg(LVL_DEBUG2, "Set UHH->sysconfig (%p) to %x.",
+	    &uhh_conf->sysconfig, uhh_conf->sysconfig);
+	uhh_conf->sysconfig = sysc;
+
+	/* All ports are connected on BBxM */
+	uhh_conf->hostconfig |= (UHH_HOSTCONFIG_P1_CONNECT_STATUS_FLAG
+	    | UHH_HOSTCONFIG_P2_CONNECT_STATUS_FLAG
+	    | UHH_HOSTCONFIG_P3_CONNECT_STATUS_FLAG);
+
+	/* Set all ports to go through TLL(UTMI)
+	 * Direct connection can only work in HS mode */
+	uhh_conf->hostconfig |= (UHH_HOSTCONFIG_P1_ULPI_BYPASS_FLAG
+	    | UHH_HOSTCONFIG_P2_ULPI_BYPASS_FLAG
+	    | UHH_HOSTCONFIG_P3_ULPI_BYPASS_FLAG);
+	ddf_msg(LVL_DEBUG2, "Set UHH->hostconfig (%p) to %x.",
+	    &uhh_conf->hostconfig, uhh_conf->hostconfig);
+	}
+
+	usb_tll->shared_conf |= TLL_SHARED_CONF_FCLK_IS_ON_FLAG;
+	ddf_msg(LVL_DEBUG2, "Set shared conf port (%p) to %x.",
+	    &usb_tll->shared_conf, usb_tll->shared_conf);
+
+	for (unsigned i = 0; i < 3; ++i) {
+		uint32_t ch = usb_tll->channel_conf[i];
+		/* Clear Channel mode and FSLS mode */
+		ch &= ~(TLL_CHANNEL_CONF_CHANMODE_MASK
+		    << TLL_CHANNEL_CONF_CHANMODE_SHIFT)
+		    & ~(TLL_CHANNEL_CONF_FSLSMODE_MASK
+		    << TLL_CHANNEL_CONF_FSLSMODE_SHIFT);
+
+		/* Serial mode is the only one capable of FS/LS operation. */
+		ch |= (TLL_CHANNEL_CONF_CHANMODE_UTMI_SERIAL_MODE
+		    << TLL_CHANNEL_CONF_CHANMODE_SHIFT);
+
+		/* Select FS/LS mode, no idea what the difference is
+		 * one of bidirectional modes might be good choice
+		 * 2 = 3pin bidi phy. */
+		ch |= (2 << TLL_CHANNEL_CONF_FSLSMODE_SHIFT);
+
+		/* Write to register */
+		ddf_msg(LVL_DEBUG2, "Setting port %u(%p) to %x.",
+		    i, &usb_tll->channel_conf[i], ch);
+		usb_tll->channel_conf[i] = ch;
+	}
 	return EOK;
 }
Index: uspace/drv/infrastructure/rootamdm37x/usbtll.h
===================================================================
--- uspace/drv/infrastructure/rootamdm37x/usbtll.h	(revision 708ec6055caafd4c69e064032b4399f562dc07b3)
+++ uspace/drv/infrastructure/rootamdm37x/usbtll.h	(revision 3a0148321ef5f3074bda6eb61cba9a22ad562d33)
@@ -82,4 +82,8 @@
 #define TLL_CHANNEL_CONF_CHANMODE_MASK  0x3
 #define TLL_CHANNEL_CONF_CHANMODE_SHIFT  1
+#define TLL_CHANNEL_CONF_CHANMODE_UTMI_ULPI_MODE 0
+#define TLL_CHANNEL_CONF_CHANMODE_UTMI_SERIAL_MODE 1
+#define TLL_CHANNEL_CONF_CHANMODE_UTMI_TRANS_MODE 2
+#define TLL_CHANNEL_CONF_CHANMODE_NO_MODE 3
 #define TLL_CHANNEL_CONF_UTMIISADEV_FLAG  (1 << 3)
 #define TLL_CHANNEL_CONF_TLLATTACH_FLAG  (1 << 4)
