diff --git a/include/target.h b/include/target.h
index c973a61..bb3a6f7 100644
--- a/include/target.h
+++ b/include/target.h
@@ -53,6 +53,10 @@
 bool target_display_panel_node(char *pbuf, uint16_t buf_size);
 uint32_t target_get_boot_device();
 
+const char * target_usb_controller();
+void target_usb_phy_reset(void);
+void target_usb_phy_mux_configure(void);
+
 /* Boot device */
 enum boot_device
 {
diff --git a/platform/apq8084/acpuclock.c b/platform/apq8084/acpuclock.c
index 8c3f841..b785aa1 100644
--- a/platform/apq8084/acpuclock.c
+++ b/platform/apq8084/acpuclock.c
@@ -206,3 +206,36 @@
 	clock_ce_enable(instance);
 
 }
+
+void clock_usb30_gdsc_enable(void)
+{
+	uint32_t reg = readl(GCC_USB30_GDSCR);
+
+	reg &= ~(0x1);
+
+	writel(reg, GCC_USB30_GDSCR);
+}
+
+/* enables usb30 interface and master clocks */
+void clock_usb30_init(void)
+{
+	int ret;
+
+	/* interface clock */
+	ret = clk_get_set_enable("usb30_iface_clk", 0, 1);
+	if(ret)
+	{
+		dprintf(CRITICAL, "failed to set usb30_iface_clk. ret = %d\n", ret);
+		ASSERT(0);
+	}
+
+	clock_usb30_gdsc_enable();
+
+	/* master clock */
+	ret = clk_get_set_enable("usb30_master_clk", 125000000, 1);
+	if(ret)
+	{
+		dprintf(CRITICAL, "failed to set usb30_master_clk. ret = %d\n", ret);
+		ASSERT(0);
+	}
+}
diff --git a/platform/apq8084/apq8084-clock.c b/platform/apq8084/apq8084-clock.c
index c939bad..a353a15 100644
--- a/platform/apq8084/apq8084-clock.c
+++ b/platform/apq8084/apq8084-clock.c
@@ -281,6 +281,54 @@
 	},
 };
 
+/* USB 3.0 Clocks */
+static struct clk_freq_tbl ftbl_gcc_usb30_master_clk[] =
+{
+	F(125000000, gpll0, 1, 5, 24),
+	F_END
+};
+
+static struct rcg_clk usb30_master_clk_src =
+{
+	.cmd_reg      = (uint32_t *) GCC_USB30_MASTER_CMD_RCGR,
+	.cfg_reg      = (uint32_t *) GCC_USB30_MASTER_CFG_RCGR,
+	.m_reg        = (uint32_t *) GCC_USB30_MASTER_M,
+	.n_reg        = (uint32_t *) GCC_USB30_MASTER_N,
+	.d_reg        = (uint32_t *) GCC_USB30_MASTER_D,
+
+	.set_rate     = clock_lib2_rcg_set_rate_mnd,
+	.freq_tbl     = ftbl_gcc_usb30_master_clk,
+	.current_freq = &rcg_dummy_freq,
+
+	.c = {
+		.dbg_name = "usb30_master_clk_src",
+		.ops      = &clk_ops_rcg,
+	},
+};
+
+
+static struct branch_clk gcc_usb30_master_clk =
+{
+	.cbcr_reg     = (uint32_t *) GCC_USB30_MASTER_CBCR,
+	.parent       = &usb30_master_clk_src.c,
+
+	.c = {
+		.dbg_name = "gcc_usb30_master_clk",
+		.ops      = &clk_ops_branch,
+	},
+};
+
+static struct branch_clk gcc_sys_noc_usb30_axi_clk =
+{
+	.cbcr_reg     = (uint32_t *) SYS_NOC_USB3_AXI_CBCR,
+	.has_sibling  = 1,
+
+	.c = {
+		.dbg_name = "gcc_sys_noc_usb3_axi_clk",
+		.ops      = &clk_ops_branch,
+	},
+};
+
 /* Clock lookup table */
 static struct clk_lookup msm_clocks_8084[] =
 {
@@ -292,6 +340,10 @@
 
 	CLK_LOOKUP("usb_iface_clk",  gcc_usb_hs_ahb_clk.c),
 	CLK_LOOKUP("usb_core_clk",   gcc_usb_hs_system_clk.c),
+
+	/* USB 3.0 */
+	CLK_LOOKUP("usb30_iface_clk",  gcc_sys_noc_usb30_axi_clk.c),
+	CLK_LOOKUP("usb30_master_clk", gcc_usb30_master_clk.c),
 };
 
 void platform_clock_init(void)
diff --git a/platform/apq8084/include/platform/clock.h b/platform/apq8084/include/platform/clock.h
index bf63755..b620dd0 100644
--- a/platform/apq8084/include/platform/clock.h
+++ b/platform/apq8084/include/platform/clock.h
@@ -45,5 +45,6 @@
 void mdp_clock_init(void);
 void clock_ce_enable(uint8_t instance);
 void clock_ce_disable(uint8_t instance);
+void clock_usb30_init(void);
 
 #endif
diff --git a/platform/apq8084/include/platform/iomap.h b/platform/apq8084/include/platform/iomap.h
index d1ca7a9..7f47659 100644
--- a/platform/apq8084/include/platform/iomap.h
+++ b/platform/apq8084/include/platform/iomap.h
@@ -108,13 +108,36 @@
 #define SDCC1_D                     (CLK_CTL_BASE + 0x4E0) /* d */
 #define SDCC1_CDCCAL_SLEEP_CBCR     (CLK_CTL_BASE + 0x4E4)
 
+/* USB 3.0 clocks */
+#define SYS_NOC_USB3_AXI_CBCR       (CLK_CTL_BASE + 0x0108)
+
+#define GCC_USB_30_BCR              (CLK_CTL_BASE + 0x03C0)
+#define GCC_USB_30_MISC             (CLK_CTL_BASE + 0x03C4)
+
+#define GCC_USB30_MASTER_CBCR       (CLK_CTL_BASE + 0x03C8)
+#define GCC_USB30_SLEEP_CBCR        (CLK_CTL_BASE + 0x03CC)
+#define GCC_USB30_MOCK_UTMI_CBCR    (CLK_CTL_BASE + 0x03D0)
+
+#define GCC_USB30_MASTER_CMD_RCGR   (CLK_CTL_BASE + 0x03D4)
+#define GCC_USB30_MASTER_CFG_RCGR   (CLK_CTL_BASE + 0x03D8)
+#define GCC_USB30_MASTER_M          (CLK_CTL_BASE + 0x03DC)
+#define GCC_USB30_MASTER_N          (CLK_CTL_BASE + 0x03E0)
+#define GCC_USB30_MASTER_D          (CLK_CTL_BASE + 0x03E4)
+
+#define GCC_USB3_PHY_BCR            (CLK_CTL_BASE + 0x03FC)
+#define GCC_USB30_GDSCR             (CLK_CTL_BASE + 0x1E84)
+
+/* USB30 base */
+#define MSM_USB30_BASE               0xF9200000
+#define MSM_USB30_QSCRATCH_BASE      0xF92F8800
+
+
 /* Addresses below this point needs to be verified.
  * Included only for compilation purposes.
  */
 #define MSM_USB_BASE                (PERIPH_SS_BASE + 0x00255000)
 
 #define CLK_CTL_BASE                0xFC400000
-
 #define GCC_WDOG_DEBUG              (CLK_CTL_BASE +  0x00001780)
 
 #define USB_HS_BCR                  (CLK_CTL_BASE + 0x480)
@@ -128,6 +151,7 @@
 #define MSM_CE2_BAM_BASE            0xFD444000
 #define MSM_CE2_BASE                0xFD45A000
 #define USB2_PHY_SEL                0xFD4AB000
+#define COPSS_USB_CONTROL_WITH_JDR  0xFD4AB204
 
 #define TLMM_BASE_ADDR              0xFD510000
 #define GPIO_CONFIG_ADDR(x)         (TLMM_BASE_ADDR + 0x1000 + (x)*0x10)
diff --git a/platform/apq8084/include/platform/irqs.h b/platform/apq8084/include/platform/irqs.h
index 33e1a12..5a614d3 100644
--- a/platform/apq8084/include/platform/irqs.h
+++ b/platform/apq8084/include/platform/irqs.h
@@ -47,6 +47,7 @@
 
 #define UFS_IRQ                                (GIC_SPI_START + 28)
 
+#define USB30_EE1_IRQ                          (GIC_SPI_START + 131)
 #define USB1_HS_BAM_IRQ                        (GIC_SPI_START + 135)
 #define USB1_HS_IRQ                            (GIC_SPI_START + 134)
 #define USB2_IRQ                               (GIC_SPI_START + 141)
diff --git a/platform/fsm9900/platform.c b/platform/fsm9900/platform.c
index 7a1791e..c30f60b 100644
--- a/platform/fsm9900/platform.c
+++ b/platform/fsm9900/platform.c
@@ -62,8 +62,6 @@
 	{SYSTEM_IMEM_BASE, SYSTEM_IMEM_BASE, 1,              IMEM_MEMORY},
 };
 
-static struct smem_ram_ptable ram_ptable;
-
 /* Boot timestamps */
 #define BS_INFO_OFFSET     (0x6B0)
 #define BS_INFO_ADDR_V1    (RPM_MSG_RAM_BASE     + BS_INFO_OFFSET)
@@ -127,40 +125,47 @@
 {
 	uint32_t i;
 	uint32_t sections;
+	ram_partition ptn_entry;
 	uint32_t table_size = ARRAY_SIZE(mmu_section_table);
+	uint32_t len = 0;
 
-	ASSERT(smem_ram_ptable_init(&ram_ptable));
+	ASSERT(smem_ram_ptable_init_v1());
+
+	len = smem_get_ram_ptable_len();
 
 	/* Configure the MMU page entries for SDRAM and IMEM memory read
-	   from the smem ram table*/
-	for(i = 0; i < ram_ptable.len; i++)
+	   from the smem ram table */
+	for (i = 0; i < len; i++)
 	{
-		if(ram_ptable.parts[i].type == SYS_MEMORY)
+		smem_get_ram_ptable_entry(&ptn_entry, i);
+		if ((ptn_entry.type == SYS_MEMORY) &&
+		    ((ptn_entry.category == SDRAM) ||
+		     (ptn_entry.category == IMEM)))
 		{
-			if((ram_ptable.parts[i].category == SDRAM) ||
-			   (ram_ptable.parts[i].category == IMEM))
-			{
-				/* Check to ensure that start address is 1MB aligned */
-				ASSERT((ram_ptable.parts[i].start & 0xFFFFF) == 0);
+			/* Check to ensure that start address is 1MB aligned */
+			ASSERT((ptn_entry.start & (MB-1)) == 0);
 
-				sections = (ram_ptable.parts[i].size) / MB;
-				while(sections--) {
-					arm_mmu_map_section(ram_ptable.parts[i].start +
-								sections * MB,
-								ram_ptable.parts[i].start +
-								sections * MB,
-								(MMU_MEMORY_TYPE_NORMAL_WRITE_THROUGH | \
-								MMU_MEMORY_AP_READ_WRITE | MMU_MEMORY_XN));
-				}
+			sections = ptn_entry.size / MB;
+			while(sections--)
+			{
+				arm_mmu_map_section(
+					(ptn_entry.start + sections * MB),
+					(ptn_entry.start + sections * MB),
+					(MMU_MEMORY_TYPE_NORMAL_WRITE_THROUGH |
+					 MMU_MEMORY_AP_READ_WRITE |
+					 MMU_MEMORY_XN));
 			}
 		}
 	}
+
 	/* Configure the MMU page entries for memory read from the
 	   mmu_section_table */
-	for (i = 0; i < table_size; i++) {
+	for (i = 0; i < table_size; i++)
+	{
 		sections = mmu_section_table[i].num_of_sections;
 
-		while (sections--) {
+		while (sections--)
+		{
 			arm_mmu_map_section(mmu_section_table[i].paddress +
 					    sections * MB,
 					    mmu_section_table[i].vaddress +
diff --git a/platform/msm8974/platform.c b/platform/msm8974/platform.c
index 9ff92c3..5a7e1d4 100644
--- a/platform/msm8974/platform.c
+++ b/platform/msm8974/platform.c
@@ -128,6 +128,39 @@
 	return ret;
 }
 
+/* Check for 8974 PRO chip */
+int platform_is_8974Pro()
+{
+	uint32_t platform = board_platform_id();
+	int ret = 0;
+
+	switch(platform)
+	{
+		case APQ8074AA:
+		case APQ8074AB:
+		case APQ8074AC:
+
+		case MSM8274AA:
+		case MSM8274AB:
+		case MSM8274AC:
+
+		case MSM8674AA:
+		case MSM8674AB:
+		case MSM8674AC:
+
+		case MSM8974AA:
+		case MSM8974AB:
+		case MSM8974AC:
+
+			ret = 1;
+			break;
+		default:
+			ret = 0;
+	};
+
+	return ret;
+}
+
 addr_t get_bs_info_addr()
 {
 	uint32_t soc_ver = board_soc_version();
diff --git a/platform/msm_shared/usb30_dwc_hw.c b/platform/msm_shared/usb30_dwc_hw.c
index fd18f1a..86a10a9 100644
--- a/platform/msm_shared/usb30_dwc_hw.c
+++ b/platform/msm_shared/usb30_dwc_hw.c
@@ -39,6 +39,8 @@
 #include <usb30_dwc_hwio.h>
 #include <usb30_dwc.h>
 #include <usb30_dwc_hw.h>
+#include <smem.h>
+#include <board.h>
 
 extern char* ss_link_state_lookup[20];
 extern char* hs_link_state_lookup[20];
@@ -59,6 +61,11 @@
 
 #define ERR(...) dprintf(ALWAYS, __VA_ARGS__)
 
+__WEAK int platform_is_8974()
+{
+	return 0;
+}
+
 /* This file provides interface to interact with DWC hardware. This code
  * does not maintain any soft states. It programs the h/w as requested by the
  * APIs.
@@ -532,7 +539,11 @@
 void dwc_ss_phy_workaround_12(dwc_dev_t *dev)
 {
 	/* 12. */
-	REG_WRITEI(dev, GUSB3PIPECTL, 0, 0x30C0003);
+	if ( platform_is_8974() &&
+		 (board_soc_version() < BOARD_SOC_VERSION2))
+	{
+		REG_WRITEI(dev, GUSB3PIPECTL, 0, 0x30C0003);
+	}
 }
 
 /*  AXI master config */
@@ -540,11 +551,16 @@
 {
 	uint32_t reg = 0;
 
-	reg = (DWC_GSBUSCFG0_INCR4BRSTENA_BMSK |
-		   DWC_GSBUSCFG0_INCR8BRSTENA_BMSK |
-		   DWC_GSBUSCFG0_INCR16BRSTENA_BMSK);
+	/* 17. */
+	if ( platform_is_8974() &&
+		 (board_soc_version() < BOARD_SOC_VERSION2))
+	{
+		reg = (DWC_GSBUSCFG0_INCR4BRSTENA_BMSK |
+			   DWC_GSBUSCFG0_INCR8BRSTENA_BMSK |
+			   DWC_GSBUSCFG0_INCR16BRSTENA_BMSK);
 
-	REG_WRITE(dev, GSBUSCFG0, reg);
+		REG_WRITE(dev, GSBUSCFG0, reg);
+	}
 }
 
 /* read the controller id and version information */
diff --git a/platform/msm_shared/usb30_udc.c b/platform/msm_shared/usb30_udc.c
index 01c3d1d..ec95b93 100644
--- a/platform/msm_shared/usb30_udc.c
+++ b/platform/msm_shared/usb30_udc.c
@@ -43,6 +43,9 @@
 #include <usb30_dwc.h>
 #include <usb30_wrapper.h>
 #include <usb30_udc.h>
+#include <smem.h>
+#include <board.h>
+#include <platform/timer.h>
 
 //#define DEBUG_USB
 
@@ -100,24 +103,64 @@
 static udc_t *udc_dev = NULL;
 
 
-/* TODO: need to find right place for the tcsr functions. */
-
-/* UTMI MUX configuration to connect PHY to SNPS controller:
- * Configure primary HS phy mux to use UTMI interface
- * (connected to usb30 controller).
- */
-void tcsr_hs_phy_mux_configure(void)
+__WEAK int platform_is_8974()
 {
-	uint32_t reg;
-
-	reg = readl(USB2_PHY_SEL);
-
-	writel(reg | 0x1, USB2_PHY_SEL);
+	return 0;
 }
 
-void tcsr_hs_phy_mux_de_configure(void)
+__WEAK int platform_is_8974Pro()
 {
-	writel(0x0, USB2_PHY_SEL);
+	return 0;
+}
+
+static void phy_mux_configure(void)
+{
+	/* configuring of hs phy mux is different for some platforms. */
+	target_usb_phy_mux_configure();
+}
+
+static void phy_reset(usb_wrapper_dev_t *wrapper)
+{
+	/* phy reset is different for some platforms. */
+	if (platform_is_8974() || platform_is_8974Pro())
+	{
+		/* SS PHY */
+		usb_wrapper_ss_phy_reset(wrapper);
+
+		/* For 8974: hs phy is reset as part of soft reset.
+		 * No need for explicit reset.
+		 */
+	}
+	else if (board_platform_id() == APQ8084)
+	{
+		target_usb_phy_reset();
+	}
+}
+
+/* Initialize HS phy */
+void hs_phy_init(udc_t *dev)
+{
+	/* only for 8974 */
+	if (platform_is_8974() || platform_is_8974Pro())
+	{
+		/* 5.a, 5.b */
+		usb_wrapper_hs_phy_init(dev->wrapper_dev);
+
+		/* 5.d */
+		dwc_usb2_phy_soft_reset(dev->dwc);
+	}
+}
+
+/* vbus override */
+void vbus_override(udc_t *dev)
+{
+	/* when vbus signal is not available directly to the controller,
+	 * simulate vbus presense.
+	 */
+	if (board_platform_id() == APQ8084)
+	{
+		usb_wrapper_vbus_override(dev->wrapper_dev);
+	}
 }
 
 
@@ -175,17 +218,15 @@
 	/* section 4.4.2: Initialization and configuration sequences */
 
 	/* 1. UTMI Mux configuration */
-	tcsr_hs_phy_mux_configure();
+	phy_mux_configure();
 
 	/* 2. Put controller in reset */
 	dwc_reset(dwc, 1);
 
-	/* PHY reset (steps 3 - 7) must be done while dwc is in reset condition */
+	/* Steps 3 - 7 must be done while dwc is in reset condition */
 
-	/* 3. Reset SS PHY */
-	usb_wrapper_ss_phy_reset(wrapper);
-
-	/* HS PHY is reset as part of soft reset. No need for explicit reset. */
+	/* 3. Reset PHY */
+	phy_reset(wrapper);
 
 	/* 4. SS phy config */
 	usb_wrapper_ss_phy_configure(wrapper);
@@ -193,9 +234,6 @@
 	/* 5. HS phy init */
 	usb_wrapper_hs_phy_init(wrapper);
 
-	/* 5.d */
-	dwc_usb2_phy_soft_reset(dwc);
-
 	/* 6. hs phy config */
 	usb_wrapper_hs_phy_configure(wrapper);
 
@@ -222,6 +260,11 @@
 
 	/* 14. needed only for host mode. ignored. */
 
+	/* If the target does not support vbus detection in controller,
+	 * simulate vbus presence.
+	 */
+	vbus_override(udc_dev);
+
 	/* 15 - 20 */
 	dwc_device_init(dwc);
 }
diff --git a/platform/msm_shared/usb30_wrapper.c b/platform/msm_shared/usb30_wrapper.c
index f0f271b..4075a02 100644
--- a/platform/msm_shared/usb30_wrapper.c
+++ b/platform/msm_shared/usb30_wrapper.c
@@ -128,7 +128,6 @@
 	if ( (board_platform_id() == MSM8974) &&
 		 (board_soc_version() < BOARD_SOC_VERSION2))
 	{
-		/* TODO: confirm if V1 in HPG only applies to 8974 */
 		REG_WRITE(dev, GENERAL_CFG, 0x78);
 	}
 }
@@ -152,6 +151,23 @@
 	REG_WRITE_FIELD(dev, SS_PHY_PARAM_CTRL_1, LOS_BIAS, 0x5);
 }
 
+void usb_wrapper_vbus_override(usb_wrapper_dev_t *dev)
+{
+	/* set extenal vbus valid select */
+	REG_WRITE_FIELD(dev, HS_PHY_CTRL_COMMON, VBUSVLDEXTSEL0, 0x1);
+
+	/* enable D+ pullup */
+	REG_WRITE_FIELD(dev, HS_PHY_CTRL, VBUSVLDEXT0, 0x1);
+
+	/* set otg vbus valid from hs phy to controller */
+	REG_WRITE_FIELD(dev, HS_PHY_CTRL, UTMI_OTG_VBUS_VALID, 0x1);
+
+	/* Indicate value is driven by UTMI_OTG_VBUS_VALID bit */
+	REG_WRITE_FIELD(dev, HS_PHY_CTRL, SW_SESSVLD_SEL, 0x1);
+
+	/* Indicate power present to SS phy */
+	REG_WRITE_FIELD(dev, SS_PHY_CTRL, LANE0_PWR_PRESENT, 0x1);
+}
 
 /* API to read SS PHY registers */
 uint16_t usb_wrapper_ss_phy_read(usb_wrapper_dev_t *dev, uint16_t addr)
diff --git a/platform/msm_shared/usb30_wrapper.h b/platform/msm_shared/usb30_wrapper.h
index d274e51..a8904a0 100644
--- a/platform/msm_shared/usb30_wrapper.h
+++ b/platform/msm_shared/usb30_wrapper.h
@@ -59,6 +59,8 @@
 void usb_wrapper_hs_phy_init(usb_wrapper_dev_t *dev);
 void usb_wrapper_hs_phy_configure(usb_wrapper_dev_t *dev);
 
+void usb_wrapper_vbus_override(usb_wrapper_dev_t *dev);
+
 void usb_wrapper_workaround_10(usb_wrapper_dev_t *dev);
 void usb_wrapper_workaround_11(usb_wrapper_dev_t *dev);
 void usb_wrapper_workaround_13(usb_wrapper_dev_t *dev);
diff --git a/platform/msm_shared/usb30_wrapper_hwio.h b/platform/msm_shared/usb30_wrapper_hwio.h
index addfed8..1b5c9f7 100644
--- a/platform/msm_shared/usb30_wrapper_hwio.h
+++ b/platform/msm_shared/usb30_wrapper_hwio.h
@@ -139,6 +139,39 @@
 #define HWIO_RAM1_REG_RAM11_EN_BMSK                                              0x1
 #define HWIO_RAM1_REG_RAM11_EN_SHFT                                              0x0
 
+/* Note: HS_PHYCTRL_COMMON register is added only from 8084 and onwards. */
+#define HWIO_HS_PHY_CTRL_COMMON_ADDR(x)                                     ((x) + 0x000000ec)
+#define HWIO_HS_PHY_CTRL_COMMON_RMSK                                            0x7fff
+#define HWIO_HS_PHY_CTRL_COMMON_IN(x)      \
+        in_dword_masked(HWIO_HS_PHY_CTRL_COMMON_ADDR(x), HWIO_HS_PHY_CTRL_COMMON_RMSK)
+#define HWIO_HS_PHY_CTRL_COMMON_INM(x, m)      \
+        in_dword_masked(HWIO_HS_PHY_CTRL_COMMON_ADDR(x), m)
+#define HWIO_HS_PHY_CTRL_COMMON_OUT(x, v)      \
+        out_dword(HWIO_HS_PHY_CTRL_COMMON_ADDR(x),v)
+#define HWIO_HS_PHY_CTRL_COMMON_OUTM(x,m,v) \
+        out_dword_masked_ns(HWIO_HS_PHY_CTRL_COMMON_ADDR(x),m,v,HWIO_HS_PHY_CTRL_COMMON_IN(x))
+#define HWIO_HS_PHY_CTRL_COMMON_USE_CLKCORE_BMSK                                0x4000
+#define HWIO_HS_PHY_CTRL_COMMON_USE_CLKCORE_SHFT                                   0xe
+#define HWIO_HS_PHY_CTRL_COMMON_ACAENB0_BMSK                                    0x2000
+#define HWIO_HS_PHY_CTRL_COMMON_ACAENB0_SHFT                                       0xd
+#define HWIO_HS_PHY_CTRL_COMMON_VBUSVLDEXTSEL0_BMSK                             0x1000
+#define HWIO_HS_PHY_CTRL_COMMON_VBUSVLDEXTSEL0_SHFT                                0xc
+#define HWIO_HS_PHY_CTRL_COMMON_OTGDISABLE0_BMSK                                 0x800
+#define HWIO_HS_PHY_CTRL_COMMON_OTGDISABLE0_SHFT                                   0xb
+#define HWIO_HS_PHY_CTRL_COMMON_OTGTUNE0_BMSK                                    0x700
+#define HWIO_HS_PHY_CTRL_COMMON_OTGTUNE0_SHFT                                      0x8
+#define HWIO_HS_PHY_CTRL_COMMON_COMMONONN_BMSK                                    0x80
+#define HWIO_HS_PHY_CTRL_COMMON_COMMONONN_SHFT                                     0x7
+#define HWIO_HS_PHY_CTRL_COMMON_FSEL_BMSK                                         0x70
+#define HWIO_HS_PHY_CTRL_COMMON_FSEL_SHFT                                          0x4
+#define HWIO_HS_PHY_CTRL_COMMON_RETENABLEN_BMSK                                    0x8
+#define HWIO_HS_PHY_CTRL_COMMON_RETENABLEN_SHFT                                    0x3
+#define HWIO_HS_PHY_CTRL_COMMON_SIDDQ_BMSK                                         0x4
+#define HWIO_HS_PHY_CTRL_COMMON_SIDDQ_SHFT                                         0x2
+#define HWIO_HS_PHY_CTRL_COMMON_VATESTENB_BMSK                                     0x3
+#define HWIO_HS_PHY_CTRL_COMMON_VATESTENB_SHFT                                     0x0
+
+
 #define HWIO_HS_PHY_CTRL_ADDR(x)                                          ((x) + 0x00000010)
 #define HWIO_HS_PHY_CTRL_RMSK                                              0x7ffffff
 #define HWIO_HS_PHY_CTRL_POR                                              0x072203b2
@@ -150,6 +183,11 @@
         out_dword(HWIO_HS_PHY_CTRL_ADDR(x),v)
 #define HWIO_HS_PHY_CTRL_OUTM(x,m,v) \
         out_dword_masked_ns(HWIO_HS_PHY_CTRL_ADDR(x),m,v,HWIO_HS_PHY_CTRL_IN(x))
+
+/* Note: This field is introduced only in 8084 and onwards. */
+#define HWIO_HS_PHY_CTRL_SW_SESSVLD_SEL_BMSK                             0x10000000
+#define HWIO_HS_PHY_CTRL_SW_SESSVLD_SEL_SHFT                                   0x1c
+
 #define HWIO_HS_PHY_CTRL_CLAMP_MPM_DPSE_DMSE_EN_N_BMSK                     0x4000000
 #define HWIO_HS_PHY_CTRL_CLAMP_MPM_DPSE_DMSE_EN_N_SHFT                          0x1a
 #define HWIO_HS_PHY_CTRL_FREECLK_SEL_BMSK                                  0x2000000
diff --git a/project/apq8084.mk b/project/apq8084.mk
index 4e67a84..dd582ce 100644
--- a/project/apq8084.mk
+++ b/project/apq8084.mk
@@ -10,6 +10,7 @@
 EMMC_BOOT := 1
 ENABLE_SDHCI_SUPPORT := 1
 ENABLE_UFS_SUPPORT   := 1
+ENABLE_USB30_SUPPORT := 1
 
 #DEFINES += WITH_DEBUG_DCC=1
 DEFINES += WITH_DEBUG_UART=1
@@ -30,3 +31,7 @@
 ifeq ($(ENABLE_UFS_SUPPORT),1)
 DEFINES += UFS_SUPPORT=1
 endif
+
+ifeq ($(ENABLE_USB30_SUPPORT),1)
+DEFINES += USB30_SUPPORT=1
+endif
diff --git a/target/apq8084/init.c b/target/apq8084/init.c
index dc552f1..dc9bdd6 100644
--- a/target/apq8084/init.c
+++ b/target/apq8084/init.c
@@ -459,3 +459,49 @@
 
 	dprintf(CRITICAL, "Rebooting failed\n");
 }
+
+/* identify the usb controller to be used for the target */
+const char * target_usb_controller()
+{
+	return "dwc";
+}
+
+/* mux hs phy to route to dwc controller */
+static void phy_mux_configure_with_jdr()
+{
+	uint32_t val;
+
+	val = readl(COPSS_USB_CONTROL_WITH_JDR);
+
+	/* Note: there are no details regarding this bit in hpg or swi. */
+	val |= BIT(8);
+
+	writel(val, COPSS_USB_CONTROL_WITH_JDR);
+}
+
+/* configure hs phy mux if using dwc controller */
+void target_usb_phy_mux_configure(void)
+{
+	if(!strcmp(target_usb_controller(), "dwc"))
+	{
+		phy_mux_configure_with_jdr();
+	}
+}
+
+void target_usb_phy_reset(void)
+{
+	uint32_t val;
+
+	/* SS PHY reset */
+	val = readl(GCC_USB3_PHY_BCR) | BIT(0);
+	writel(val, GCC_USB3_PHY_BCR);
+	udelay(10);
+	writel(val & ~BIT(0), GCC_USB3_PHY_BCR);
+
+	/* HS PHY reset */
+	/* Note: reg/bit details are not mentioned in hpg or swi. */
+	val = readl(COPSS_USB_CONTROL_WITH_JDR) | BIT(11);
+	writel(val, COPSS_USB_CONTROL_WITH_JDR);
+	udelay(10);
+	writel(val & ~BIT(11), COPSS_USB_CONTROL_WITH_JDR);
+}
diff --git a/target/fsm9900/meminfo.c b/target/fsm9900/meminfo.c
index 5f9c490..c6dd53e 100644
--- a/target/fsm9900/meminfo.c
+++ b/target/fsm9900/meminfo.c
@@ -43,38 +43,44 @@
  */
 uint32_t target_dev_tree_mem(void *fdt, uint32_t memory_node_offset)
 {
-    struct smem_ram_ptable ram_ptable;
-    unsigned int i;
+	ram_partition ptn_entry;
+	unsigned int index;
 	int ret = 0;
+	uint32_t len = 0;
 
 	/* Make sure RAM partition table is initialized */
-	ASSERT(smem_ram_ptable_init(&ram_ptable));
+	ASSERT(smem_ram_ptable_init_v1());
 
-     /* Calculating the size of the mem_info_ptr */
-    for (i = 0 ; i < ram_ptable.len; i++)
-    {
-        if((ram_ptable.parts[i].category == SDRAM) &&
-           (ram_ptable.parts[i].type == SYS_MEMORY))
-        {
+	len = smem_get_ram_ptable_len();
+
+	/* Calculating the size of the mem_info_ptr */
+	for (index = 0 ; index < len; index++)
+	{
+		smem_get_ram_ptable_entry(&ptn_entry, index);
+
+		if((ptn_entry.category == SDRAM) &&
+			(ptn_entry.type == SYS_MEMORY))
+		{
 
 			/* Pass along all other usable memory regions to Linux */
 			ret = dev_tree_add_mem_info(fdt,
-										memory_node_offset,
-										ram_ptable.parts[i].start,
-										ram_ptable.parts[i].size);
+							memory_node_offset,
+							ptn_entry.start,
+							ptn_entry.size);
 
 			if (ret)
 			{
-				dprintf(CRITICAL, "Failed to add secondary banks memory addresses\n");
+				dprintf(CRITICAL,
+					"Failed to add secondary banks memory addresses\n");
 				goto target_dev_tree_mem_err;
 			}
 
-       }
-    }
+		}
+	}
 
 target_dev_tree_mem_err:
 
-    return ret;
+	return ret;
 }
 
 void *target_get_scratch_address(void)
diff --git a/target/init.c b/target/init.c
index 88c0134..85778ff 100644
--- a/target/init.c
+++ b/target/init.c
@@ -171,3 +171,8 @@
 {
 	return "ci";
 }
+
+/* override for target specific usb phy reset. */
+__WEAK void target_usb_phy_reset(void)
+{
+}
diff --git a/target/msm8974/init.c b/target/msm8974/init.c
index bb7fe08..7812d44 100644
--- a/target/msm8974/init.c
+++ b/target/msm8974/init.c
@@ -751,3 +751,25 @@
 			return "ci";
 	}
 }
+
+/* UTMI MUX configuration to connect PHY to SNPS controller:
+ * Configure primary HS phy mux to use UTMI interface
+ * (connected to usb30 controller).
+ */
+static void tcsr_hs_phy_mux_configure(void)
+{
+	uint32_t reg;
+
+	reg = readl(USB2_PHY_SEL);
+
+	writel(reg | 0x1, USB2_PHY_SEL);
+}
+
+/* configure hs phy mux if using dwc controller */
+void target_usb_phy_mux_configure(void)
+{
+	if(!strcmp(target_usb_controller(), "dwc"))
+	{
+		tcsr_hs_phy_mux_configure();
+	}
+}
