1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com>
4  */
5 
6 #include <linux/bitops.h>
7 #include <linux/io.h>
8 
9 #include "../init.h"
10 #include "../sc-regs.h"
11 
uniphier_pxs2_clk_init(void)12 void uniphier_pxs2_clk_init(void)
13 {
14 #ifdef CONFIG_USB_DWC3_UNIPHIER
15 	u32 tmp;
16 
17 	/* deassert reset */
18 	tmp = readl(sc_base + SC_RSTCTRL);
19 	tmp |= SC_RSTCTRL_NRST_USB3B0 | SC_RSTCTRL_NRST_GIO;
20 	writel(tmp, sc_base + SC_RSTCTRL);
21 	readl(sc_base + SC_RSTCTRL); /* dummy read */
22 
23 	tmp = readl(sc_base + SC_RSTCTRL2);
24 	tmp |= SC_RSTCTRL2_NRST_USB3B1;
25 	writel(tmp, sc_base + SC_RSTCTRL2);
26 	readl(sc_base + SC_RSTCTRL2); /* dummy read */
27 
28 	tmp = readl(sc_base + SC_RSTCTRL6);
29 	tmp |= 0x37;
30 	writel(tmp, sc_base + SC_RSTCTRL6);
31 
32 	/* provide clocks */
33 	tmp = readl(sc_base + SC_CLKCTRL);
34 	tmp |= BIT(20) | BIT(19) | SC_CLKCTRL_CEN_USB31 | SC_CLKCTRL_CEN_USB30 |
35 		SC_CLKCTRL_CEN_GIO;
36 	writel(tmp, sc_base + SC_CLKCTRL);
37 	readl(sc_base + SC_CLKCTRL); /* dummy read */
38 #endif
39 }
40