|
@@ -154,6 +154,7 @@ enum mx6q_clks {
|
|
|
usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg,
|
|
|
pll4_audio, pll5_video, pll8_mlb, pll7_usb_host, pll6_enet, ssi1_ipg,
|
|
|
ssi2_ipg, ssi3_ipg, rom, usbphy1, usbphy2, ldb_di0_div_3_5, ldb_di1_div_3_5,
|
|
|
+ sata_ref, sata_ref_100m, pcie_ref, pcie_ref_125m, enet_ref,
|
|
|
clk_max
|
|
|
};
|
|
|
|
|
@@ -164,6 +165,13 @@ static enum mx6q_clks const clks_init_on[] __initconst = {
|
|
|
mmdc_ch0_axi, rom,
|
|
|
};
|
|
|
|
|
|
+static struct clk_div_table clk_enet_ref_table[] = {
|
|
|
+ { .val = 0, .div = 20, },
|
|
|
+ { .val = 1, .div = 10, },
|
|
|
+ { .val = 2, .div = 5, },
|
|
|
+ { .val = 3, .div = 4, },
|
|
|
+};
|
|
|
+
|
|
|
int __init mx6q_clocks_init(void)
|
|
|
{
|
|
|
struct device_node *np;
|
|
@@ -196,13 +204,23 @@ int __init mx6q_clocks_init(void)
|
|
|
clk[pll3_usb_otg] = imx_clk_pllv3(IMX_PLLV3_USB, "pll3_usb_otg", "osc", base + 0x10, 0x2000, 0x3);
|
|
|
clk[pll4_audio] = imx_clk_pllv3(IMX_PLLV3_AV, "pll4_audio", "osc", base + 0x70, 0x2000, 0x7f);
|
|
|
clk[pll5_video] = imx_clk_pllv3(IMX_PLLV3_AV, "pll5_video", "osc", base + 0xa0, 0x2000, 0x7f);
|
|
|
- clk[pll6_enet] = imx_clk_pllv3(IMX_PLLV3_ENET, "pll6_enet", "osc", base + 0xe0, 0x182000, 0x3);
|
|
|
+ clk[pll6_enet] = imx_clk_pllv3(IMX_PLLV3_ENET, "pll6_enet", "osc", base + 0xe0, 0x2000, 0x3);
|
|
|
clk[pll7_usb_host] = imx_clk_pllv3(IMX_PLLV3_USB, "pll7_usb_host","osc", base + 0x20, 0x2000, 0x3);
|
|
|
clk[pll8_mlb] = imx_clk_pllv3(IMX_PLLV3_MLB, "pll8_mlb", "osc", base + 0xd0, 0x2000, 0x0);
|
|
|
|
|
|
clk[usbphy1] = imx_clk_gate("usbphy1", "pll3_usb_otg", base + 0x10, 6);
|
|
|
clk[usbphy2] = imx_clk_gate("usbphy2", "pll7_usb_host", base + 0x20, 6);
|
|
|
|
|
|
+ clk[sata_ref] = imx_clk_fixed_factor("sata_ref", "pll6_enet", 1, 5);
|
|
|
+ clk[pcie_ref] = imx_clk_fixed_factor("pcie_ref", "pll6_enet", 1, 4);
|
|
|
+
|
|
|
+ clk[sata_ref_100m] = imx_clk_gate("sata_ref_100m", "sata_ref", base + 0xe0, 20);
|
|
|
+ clk[pcie_ref_125m] = imx_clk_gate("pcie_ref_125m", "pcie_ref", base + 0xe0, 19);
|
|
|
+
|
|
|
+ clk[enet_ref] = clk_register_divider_table(NULL, "enet_ref", "pll6_enet", 0,
|
|
|
+ base + 0xe0, 0, 2, 0, clk_enet_ref_table,
|
|
|
+ &imx_ccm_lock);
|
|
|
+
|
|
|
/* name parent_name reg idx */
|
|
|
clk[pll2_pfd0_352m] = imx_clk_pfd("pll2_pfd0_352m", "pll2_bus", base + 0x100, 0);
|
|
|
clk[pll2_pfd1_594m] = imx_clk_pfd("pll2_pfd1_594m", "pll2_bus", base + 0x100, 1);
|