|
@@ -331,9 +331,25 @@ void set_usboh3_clk(void)
|
|
|
|
|
|
void set_usb_phy1_clk(void)
|
|
|
{
|
|
|
+ struct ccm_reg *ccm = (struct ccm_reg *)CCM_BASE_ADDR;
|
|
|
struct anadig_reg *anadig = (struct anadig_reg *)ANADIG_BASE_ADDR;
|
|
|
u32 reg;
|
|
|
+ /*setup clocking and PLL*/
|
|
|
+ reg = readl(&ccm->clpcr);
|
|
|
+ reg &= ~CCM_CLPCR_SBYOS_MASK;
|
|
|
+ writel(reg, &ccm->clpcr);
|
|
|
+
|
|
|
+ /*setup 3v0 regulator*/
|
|
|
+ reg = readl(&anadig->reg_3p0);
|
|
|
+ reg |= ANADIG_3P0_EN_BO_MASK;
|
|
|
+ reg |= ANADIG_3P0_EN_LINREG_MASK;
|
|
|
+ writel(reg, &anadig->reg_3p0);
|
|
|
+ while(!(readl(&anadig->reg_3p0)& ANADIG_3P0_OK_VDD3P0_MASK))
|
|
|
+
|
|
|
+
|
|
|
reg = readl(&anadig->pll3_ctrl);
|
|
|
+ reg &= ~ANADIG_PLL3_CTRL_BYPASS_CLK_SRC;
|
|
|
+ reg &= ~ANADIG_PLL3_CTRL_BYPASS;
|
|
|
reg |= ANADIG_PLL3_CTRL_POWERDOWN;
|
|
|
reg |= ANADIG_PLL3_CTRL_ENUSBCLK;
|
|
|
writel(reg, &anadig->pll3_ctrl);
|
|
@@ -342,21 +358,37 @@ void set_usb_phy1_clk(void)
|
|
|
void enable_usboh3_clk(unsigned char enable)
|
|
|
{
|
|
|
struct ccm_reg *ccm = (struct ccm_reg *)CCM_BASE_ADDR;
|
|
|
- u32 reg;
|
|
|
- reg = readl(&ccm->ccgr1);
|
|
|
- if (enable)
|
|
|
- reg |= CCM_CCGR1_USBC0_CTRL_MASK ;
|
|
|
- else
|
|
|
- reg &= ~CCM_CCGR1_USBC0_CTRL_MASK;
|
|
|
- writel(reg, &ccm->ccgr1);
|
|
|
+ struct anadig_reg *anadig = (struct anadig_reg *)ANADIG_BASE_ADDR;
|
|
|
+ u32 reg;
|
|
|
+ reg = readl(&ccm->ccgr1);
|
|
|
+ if (enable)
|
|
|
+ reg |= CCM_CCGR1_USBC0_CTRL_MASK ;
|
|
|
+ else
|
|
|
+ reg &= ~CCM_CCGR1_USBC0_CTRL_MASK;
|
|
|
+ writel(reg, &ccm->ccgr1);
|
|
|
+
|
|
|
+ reg = readl(&anadig->pll3_ctrl);
|
|
|
+ reg &= ~ANADIG_PLL3_CTRL_BYPASS_CLK_SRC;
|
|
|
+ reg &= ~ANADIG_PLL3_CTRL_BYPASS;
|
|
|
+ reg |= ANADIG_PLL3_CTRL_POWERDOWN;
|
|
|
+ reg |= ANADIG_PLL3_CTRL_ENUSBCLK;
|
|
|
+ writel(reg, &anadig->pll3_ctrl);
|
|
|
}
|
|
|
|
|
|
void enable_usb_phy1_clk(unsigned char enable)
|
|
|
{
|
|
|
- if (enable) {
|
|
|
- writel(BM_USBPHY_CTRL_CLKGATE, USB_PHY0_BASE_ADDR + HW_USBPHY_CTRL_CLR);
|
|
|
- } else {
|
|
|
- writel(BM_USBPHY_CTRL_CLKGATE, USB_PHY0_BASE_ADDR + HW_USBPHY_CTRL_SET);
|
|
|
- }
|
|
|
+ u32 reg;
|
|
|
+ void* usb_reg = (void *)0x40035800;
|
|
|
+ if (enable) {
|
|
|
+ writel(BM_USBPHY_CTRL_SFTRST | BM_USBPHY_CTRL_CLKGATE, USB_PHY0_BASE_ADDR + HW_USBPHY_CTRL_CLR);
|
|
|
+ writel(BM_USBPHY_DEBUG_CLKGATE, USB_PHY0_BASE_ADDR + HW_USBPHY_DEBUG_CLR);
|
|
|
+ writel(BM_USBPHY_CTRL_ENUTMILEVEL3 | BM_USBPHY_CTRL_ENUTMILEVEL2, USB_PHY0_BASE_ADDR + HW_USBPHY_CTRL_SET);
|
|
|
+ writel(0, USB_PHY0_BASE_ADDR + HW_USBPHY_PWD);
|
|
|
+ reg = readl(&usb_reg);
|
|
|
+ reg |= 1<<9;
|
|
|
+ writel(reg, &usb_reg);
|
|
|
+ } else {
|
|
|
+ writel(BM_USBPHY_CTRL_CLKGATE, USB_PHY0_BASE_ADDR + HW_USBPHY_CTRL_SET);
|
|
|
+ }
|
|
|
}
|
|
|
|