|
26 | 26 | #define CLKS_NR_MISC (CLK_DOUT_MISC_OSC_DIV2 + 1)
|
27 | 27 | #define CLKS_NR_HSI0 (CLK_DOUT_HSI0_PCIE_APB + 1)
|
28 | 28 | #define CLKS_NR_HSI1 (CLK_MOUT_HSI1_USBDRD + 1)
|
| 29 | +#define CLKS_NR_HSI2 (CLK_DOUT_HSI2_ETHERNET_PTP + 1) |
29 | 30 |
|
30 | 31 | /* ---- CMU_TOP ------------------------------------------------------------ */
|
31 | 32 |
|
@@ -1752,6 +1753,74 @@ static const struct samsung_cmu_info hsi1_cmu_info __initconst = {
|
1752 | 1753 | .clk_name = "noc",
|
1753 | 1754 | };
|
1754 | 1755 |
|
| 1756 | +/* ---- CMU_HSI2 --------------------------------------------------------- */ |
| 1757 | + |
| 1758 | +/* Register Offset definitions for CMU_HSI2 (0x16b00000) */ |
| 1759 | +#define PLL_LOCKTIME_PLL_ETH 0x0 |
| 1760 | +#define PLL_CON3_PLL_ETH 0x10c |
| 1761 | +#define PLL_CON0_MUX_CLKCMU_HSI2_ETHERNET_USER 0x600 |
| 1762 | +#define PLL_CON0_MUX_CLKCMU_HSI2_NOC_UFS_USER 0x610 |
| 1763 | +#define PLL_CON0_MUX_CLKCMU_HSI2_UFS_EMBD_USER 0x630 |
| 1764 | +#define CLK_CON_MUX_MUX_CLK_HSI2_ETHERNET 0x1000 |
| 1765 | +#define CLK_CON_DIV_DIV_CLK_HSI2_ETHERNET 0x1800 |
| 1766 | +#define CLK_CON_DIV_DIV_CLK_HSI2_ETHERNET_PTP 0x1804 |
| 1767 | + |
| 1768 | +static const unsigned long hsi2_clk_regs[] __initconst = { |
| 1769 | + PLL_LOCKTIME_PLL_ETH, |
| 1770 | + PLL_CON3_PLL_ETH, |
| 1771 | + PLL_CON0_MUX_CLKCMU_HSI2_ETHERNET_USER, |
| 1772 | + PLL_CON0_MUX_CLKCMU_HSI2_NOC_UFS_USER, |
| 1773 | + PLL_CON0_MUX_CLKCMU_HSI2_UFS_EMBD_USER, |
| 1774 | + CLK_CON_MUX_MUX_CLK_HSI2_ETHERNET, |
| 1775 | + CLK_CON_DIV_DIV_CLK_HSI2_ETHERNET, |
| 1776 | + CLK_CON_DIV_DIV_CLK_HSI2_ETHERNET_PTP, |
| 1777 | +}; |
| 1778 | + |
| 1779 | +static const struct samsung_pll_clock hsi2_pll_clks[] __initconst = { |
| 1780 | + /* CMU_HSI2_PLL */ |
| 1781 | + PLL(pll_531x, FOUT_PLL_ETH, "fout_pll_eth", "oscclk", |
| 1782 | + PLL_LOCKTIME_PLL_ETH, PLL_CON3_PLL_ETH, NULL), |
| 1783 | +}; |
| 1784 | + |
| 1785 | +/* List of parent clocks for Muxes in CMU_HSI2 */ |
| 1786 | +PNAME(mout_clkcmu_hsi2_noc_ufs_user_p) = { "oscclk", "dout_clkcmu_hsi2_noc_ufs" }; |
| 1787 | +PNAME(mout_clkcmu_hsi2_ufs_embd_user_p) = { "oscclk", "dout_clkcmu_hsi2_ufs_embd" }; |
| 1788 | +PNAME(mout_hsi2_ethernet_p) = { "fout_pll_eth", "mout_clkcmu_hsi2_ethernet_user" }; |
| 1789 | +PNAME(mout_clkcmu_hsi2_ethernet_user_p) = { "oscclk", "dout_clkcmu_hsi2_ethernet" }; |
| 1790 | + |
| 1791 | +static const struct samsung_mux_clock hsi2_mux_clks[] __initconst = { |
| 1792 | + MUX(CLK_MOUT_HSI2_NOC_UFS_USER, "mout_clkcmu_hsi2_noc_ufs_user", |
| 1793 | + mout_clkcmu_hsi2_noc_ufs_user_p, PLL_CON0_MUX_CLKCMU_HSI2_NOC_UFS_USER, 4, 1), |
| 1794 | + MUX(CLK_MOUT_HSI2_UFS_EMBD_USER, "mout_clkcmu_hsi2_ufs_embd_user", |
| 1795 | + mout_clkcmu_hsi2_ufs_embd_user_p, PLL_CON0_MUX_CLKCMU_HSI2_UFS_EMBD_USER, 4, 1), |
| 1796 | + MUX(CLK_MOUT_HSI2_ETHERNET, "mout_hsi2_ethernet", |
| 1797 | + mout_hsi2_ethernet_p, CLK_CON_MUX_MUX_CLK_HSI2_ETHERNET, 0, 1), |
| 1798 | + MUX(CLK_MOUT_HSI2_ETHERNET_USER, "mout_clkcmu_hsi2_ethernet_user", |
| 1799 | + mout_clkcmu_hsi2_ethernet_user_p, PLL_CON0_MUX_CLKCMU_HSI2_ETHERNET_USER, 4, 1), |
| 1800 | +}; |
| 1801 | + |
| 1802 | +static const struct samsung_div_clock hsi2_div_clks[] __initconst = { |
| 1803 | + DIV(CLK_DOUT_HSI2_ETHERNET, "dout_hsi2_ethernet", |
| 1804 | + "mout_hsi2_ethernet", CLK_CON_DIV_DIV_CLK_HSI2_ETHERNET, |
| 1805 | + 0, 4), |
| 1806 | + DIV(CLK_DOUT_HSI2_ETHERNET_PTP, "dout_hsi2_ethernet_ptp", |
| 1807 | + "mout_hsi2_ethernet", CLK_CON_DIV_DIV_CLK_HSI2_ETHERNET_PTP, |
| 1808 | + 0, 4), |
| 1809 | +}; |
| 1810 | + |
| 1811 | +static const struct samsung_cmu_info hsi2_cmu_info __initconst = { |
| 1812 | + .pll_clks = hsi2_pll_clks, |
| 1813 | + .nr_pll_clks = ARRAY_SIZE(hsi2_pll_clks), |
| 1814 | + .mux_clks = hsi2_mux_clks, |
| 1815 | + .nr_mux_clks = ARRAY_SIZE(hsi2_mux_clks), |
| 1816 | + .div_clks = hsi2_div_clks, |
| 1817 | + .nr_div_clks = ARRAY_SIZE(hsi2_div_clks), |
| 1818 | + .nr_clk_ids = CLKS_NR_HSI2, |
| 1819 | + .clk_regs = hsi2_clk_regs, |
| 1820 | + .nr_clk_regs = ARRAY_SIZE(hsi2_clk_regs), |
| 1821 | + .clk_name = "noc", |
| 1822 | +}; |
| 1823 | + |
1755 | 1824 | static int __init exynosautov920_cmu_probe(struct platform_device *pdev)
|
1756 | 1825 | {
|
1757 | 1826 | const struct samsung_cmu_info *info;
|
@@ -1779,6 +1848,9 @@ static const struct of_device_id exynosautov920_cmu_of_match[] = {
|
1779 | 1848 | }, {
|
1780 | 1849 | .compatible = "samsung,exynosautov920-cmu-hsi1",
|
1781 | 1850 | .data = &hsi1_cmu_info,
|
| 1851 | + }, { |
| 1852 | + .compatible = "samsung,exynosautov920-cmu-hsi2", |
| 1853 | + .data = &hsi2_cmu_info, |
1782 | 1854 | },
|
1783 | 1855 | { }
|
1784 | 1856 | };
|
|
0 commit comments