--- a/arch/mips/bcm63xx/clk.c
+++ b/arch/mips/bcm63xx/clk.c
@@ -258,6 +258,8 @@ static struct clk clk_pcm = {
  */
 static void usbh_set(struct clk *clk, int enable)
 {
+	u32 reg;
+
 	if (BCMCPU_IS_6318()) {
 		bcm_hwclock_set(CKCTL_6318_USB_EN, enable);
 		bcm_ub_hwclock_set(UB_CKCTL_6318_USB_EN, enable);
@@ -265,13 +267,19 @@ static void usbh_set(struct clk *clk, in
 		bcm_hwclock_set(CKCTL_6328_USBH_EN, enable);
 	} else if (BCMCPU_IS_6348()) {
 		bcm_hwclock_set(CKCTL_6348_USBH_EN, enable);
+	} else if (BCMCPU_IS_6358()) {
+		/* power cycle the USB PLL */
+		reg = bcm_rset_readl(RSET_USBH_PRIV, USBH_PRIV_PLL_CTRL_6358_REG);
+		reg &= ~USBH_PRIV_PLL_CTRL_6358_EN;
+		bcm_rset_writel(RSET_USBH_PRIV, reg, USBH_PRIV_PLL_CTRL_6358_REG);
+		mdelay(1);
+		reg |= USBH_PRIV_PLL_CTRL_6358_EN;
+		bcm_rset_writel(RSET_USBH_PRIV, reg, USBH_PRIV_PLL_CTRL_6358_REG);
 	} else if (BCMCPU_IS_6362()) {
 		bcm_hwclock_set(CKCTL_6362_USBH_EN, enable);
 	} else if (BCMCPU_IS_6368()) {
 		bcm_hwclock_set(CKCTL_6368_USBH_EN, enable);
 	} else if (BCMCPU_IS_63268()) {
-		u32 reg;
-
 		bcm_hwclock_set(CKCTL_63268_USBH_EN, enable);
 		bcm_misc_iddq_set(IDDQ_CTRL_63268_USBH, enable);
 		bcm63xx_core_set_reset(BCM63XX_RESET_USBH, !enable);
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
@@ -1043,9 +1043,11 @@
 #define USBH_PRIV_SETUP_IPP_MASK	(1 << USBH_PRIV_SETUP_IPP_SHIFT)
 
 #define USBH_PRIV_SETUP_6318_REG	0x00
+#define USBH_PRIV_PLL_CTRL_6358_REG	0x0c
 #define USBH_PRIV_PLL_CTRL1_6368_REG	0x18
 #define USBH_PRIV_PLL_CTRL1_6318_REG	0x04
 
+#define USBH_PRIV_PLL_CTRL_6358_EN		(1 << 25)
 #define USBH_PRIV_PLL_CTRL1_6318_SUSP_EN	(1 << 27)
 #define USBH_PRIV_PLL_CTRL1_6318_IDDQ_PWRDN	(1 << 31)
 #define USBH_PRIV_PLL_CTRL1_63268_IDDQ_PWRDN	(1 << 9)