diff options
-rw-r--r-- | Documentation/devicetree/bindings/clock/imx6q-clock.txt | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/clk-imx6q.c | 26 |
2 files changed, 24 insertions, 4 deletions
diff --git a/Documentation/devicetree/bindings/clock/imx6q-clock.txt b/Documentation/devicetree/bindings/clock/imx6q-clock.txt index f73fdf595568..969b38e06ad3 100644 --- a/Documentation/devicetree/bindings/clock/imx6q-clock.txt +++ b/Documentation/devicetree/bindings/clock/imx6q-clock.txt | |||
@@ -203,6 +203,8 @@ clocks and IDs. | |||
203 | pcie_ref 188 | 203 | pcie_ref 188 |
204 | pcie_ref_125m 189 | 204 | pcie_ref_125m 189 |
205 | enet_ref 190 | 205 | enet_ref 190 |
206 | usbphy1_gate 191 | ||
207 | usbphy2_gate 192 | ||
206 | 208 | ||
207 | Examples: | 209 | Examples: |
208 | 210 | ||
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index c0c4e723b7f5..905bec2a08a4 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c | |||
@@ -154,8 +154,8 @@ enum mx6q_clks { | |||
154 | usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg, | 154 | usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg, |
155 | pll4_audio, pll5_video, pll8_mlb, pll7_usb_host, pll6_enet, ssi1_ipg, | 155 | pll4_audio, pll5_video, pll8_mlb, pll7_usb_host, pll6_enet, ssi1_ipg, |
156 | ssi2_ipg, ssi3_ipg, rom, usbphy1, usbphy2, ldb_di0_div_3_5, ldb_di1_div_3_5, | 156 | ssi2_ipg, ssi3_ipg, rom, usbphy1, usbphy2, ldb_di0_div_3_5, ldb_di1_div_3_5, |
157 | sata_ref, sata_ref_100m, pcie_ref, pcie_ref_125m, enet_ref, | 157 | sata_ref, sata_ref_100m, pcie_ref, pcie_ref_125m, enet_ref, usbphy1_gate, |
158 | clk_max | 158 | usbphy2_gate, clk_max |
159 | }; | 159 | }; |
160 | 160 | ||
161 | static struct clk *clk[clk_max]; | 161 | static struct clk *clk[clk_max]; |
@@ -208,8 +208,21 @@ int __init mx6q_clocks_init(void) | |||
208 | clk[pll7_usb_host] = imx_clk_pllv3(IMX_PLLV3_USB, "pll7_usb_host","osc", base + 0x20, 0x3); | 208 | clk[pll7_usb_host] = imx_clk_pllv3(IMX_PLLV3_USB, "pll7_usb_host","osc", base + 0x20, 0x3); |
209 | clk[pll8_mlb] = imx_clk_pllv3(IMX_PLLV3_MLB, "pll8_mlb", "osc", base + 0xd0, 0x0); | 209 | clk[pll8_mlb] = imx_clk_pllv3(IMX_PLLV3_MLB, "pll8_mlb", "osc", base + 0xd0, 0x0); |
210 | 210 | ||
211 | clk[usbphy1] = imx_clk_gate("usbphy1", "pll3_usb_otg", base + 0x10, 6); | 211 | /* |
212 | clk[usbphy2] = imx_clk_gate("usbphy2", "pll7_usb_host", base + 0x20, 6); | 212 | * Bit 20 is the reserved and read-only bit, we do this only for: |
213 | * - Do nothing for usbphy clk_enable/disable | ||
214 | * - Keep refcount when do usbphy clk_enable/disable, in that case, | ||
215 | * the clk framework may need to enable/disable usbphy's parent | ||
216 | */ | ||
217 | clk[usbphy1] = imx_clk_gate("usbphy1", "pll3_usb_otg", base + 0x10, 20); | ||
218 | clk[usbphy2] = imx_clk_gate("usbphy2", "pll7_usb_host", base + 0x20, 20); | ||
219 | |||
220 | /* | ||
221 | * usbphy*_gate needs to be on after system boots up, and software | ||
222 | * never needs to control it anymore. | ||
223 | */ | ||
224 | clk[usbphy1_gate] = imx_clk_gate("usbphy1_gate", "dummy", base + 0x10, 6); | ||
225 | clk[usbphy2_gate] = imx_clk_gate("usbphy2_gate", "dummy", base + 0x20, 6); | ||
213 | 226 | ||
214 | clk[sata_ref] = imx_clk_fixed_factor("sata_ref", "pll6_enet", 1, 5); | 227 | clk[sata_ref] = imx_clk_fixed_factor("sata_ref", "pll6_enet", 1, 5); |
215 | clk[pcie_ref] = imx_clk_fixed_factor("pcie_ref", "pll6_enet", 1, 4); | 228 | clk[pcie_ref] = imx_clk_fixed_factor("pcie_ref", "pll6_enet", 1, 4); |
@@ -436,6 +449,11 @@ int __init mx6q_clocks_init(void) | |||
436 | for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) | 449 | for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) |
437 | clk_prepare_enable(clk[clks_init_on[i]]); | 450 | clk_prepare_enable(clk[clks_init_on[i]]); |
438 | 451 | ||
452 | if (IS_ENABLED(CONFIG_USB_MXS_PHY)) { | ||
453 | clk_prepare_enable(clk[usbphy1_gate]); | ||
454 | clk_prepare_enable(clk[usbphy2_gate]); | ||
455 | } | ||
456 | |||
439 | /* Set initial power mode */ | 457 | /* Set initial power mode */ |
440 | imx6q_set_lpm(WAIT_CLOCKED); | 458 | imx6q_set_lpm(WAIT_CLOCKED); |
441 | 459 | ||