| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (c) 2012, 2013, NVIDIA CORPORATION. All rights reserved. |
|---|
| 3 | | - * |
|---|
| 4 | | - * This program is free software; you can redistribute it and/or modify it |
|---|
| 5 | | - * under the terms and conditions of the GNU General Public License, |
|---|
| 6 | | - * version 2, as published by the Free Software Foundation. |
|---|
| 7 | | - * |
|---|
| 8 | | - * This program is distributed in the hope it will be useful, but WITHOUT |
|---|
| 9 | | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|---|
| 10 | | - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
|---|
| 11 | | - * more details. |
|---|
| 12 | | - * |
|---|
| 13 | | - * You should have received a copy of the GNU General Public License |
|---|
| 14 | | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
|---|
| 15 | 4 | */ |
|---|
| 16 | 5 | |
|---|
| 17 | 6 | #include <linux/io.h> |
|---|
| .. | .. |
|---|
| 746 | 735 | [tegra_clk_fuse_burn] = { .dt_id = TEGRA114_CLK_FUSE_BURN, .present = true }, |
|---|
| 747 | 736 | [tegra_clk_clk_32k] = { .dt_id = TEGRA114_CLK_CLK_32K, .present = true }, |
|---|
| 748 | 737 | [tegra_clk_clk_m] = { .dt_id = TEGRA114_CLK_CLK_M, .present = true }, |
|---|
| 749 | | - [tegra_clk_clk_m_div2] = { .dt_id = TEGRA114_CLK_CLK_M_DIV2, .present = true }, |
|---|
| 750 | | - [tegra_clk_clk_m_div4] = { .dt_id = TEGRA114_CLK_CLK_M_DIV4, .present = true }, |
|---|
| 738 | + [tegra_clk_osc] = { .dt_id = TEGRA114_CLK_OSC, .present = true }, |
|---|
| 739 | + [tegra_clk_osc_div2] = { .dt_id = TEGRA114_CLK_OSC_DIV2, .present = true }, |
|---|
| 740 | + [tegra_clk_osc_div4] = { .dt_id = TEGRA114_CLK_OSC_DIV4, .present = true }, |
|---|
| 751 | 741 | [tegra_clk_pll_ref] = { .dt_id = TEGRA114_CLK_PLL_REF, .present = true }, |
|---|
| 752 | 742 | [tegra_clk_pll_c] = { .dt_id = TEGRA114_CLK_PLL_C, .present = true }, |
|---|
| 753 | 743 | [tegra_clk_pll_c_out1] = { .dt_id = TEGRA114_CLK_PLL_C_OUT1, .present = true }, |
|---|
| .. | .. |
|---|
| 789 | 779 | [tegra_clk_audio3] = { .dt_id = TEGRA114_CLK_AUDIO3, .present = true }, |
|---|
| 790 | 780 | [tegra_clk_audio4] = { .dt_id = TEGRA114_CLK_AUDIO4, .present = true }, |
|---|
| 791 | 781 | [tegra_clk_spdif] = { .dt_id = TEGRA114_CLK_SPDIF, .present = true }, |
|---|
| 792 | | - [tegra_clk_clk_out_1] = { .dt_id = TEGRA114_CLK_CLK_OUT_1, .present = true }, |
|---|
| 793 | | - [tegra_clk_clk_out_2] = { .dt_id = TEGRA114_CLK_CLK_OUT_2, .present = true }, |
|---|
| 794 | | - [tegra_clk_clk_out_3] = { .dt_id = TEGRA114_CLK_CLK_OUT_3, .present = true }, |
|---|
| 795 | | - [tegra_clk_blink] = { .dt_id = TEGRA114_CLK_BLINK, .present = true }, |
|---|
| 796 | 782 | [tegra_clk_xusb_host_src] = { .dt_id = TEGRA114_CLK_XUSB_HOST_SRC, .present = true }, |
|---|
| 797 | 783 | [tegra_clk_xusb_falcon_src] = { .dt_id = TEGRA114_CLK_XUSB_FALCON_SRC, .present = true }, |
|---|
| 798 | 784 | [tegra_clk_xusb_fs_src] = { .dt_id = TEGRA114_CLK_XUSB_FS_SRC, .present = true }, |
|---|
| .. | .. |
|---|
| 814 | 800 | [tegra_clk_audio3_mux] = { .dt_id = TEGRA114_CLK_AUDIO3_MUX, .present = true }, |
|---|
| 815 | 801 | [tegra_clk_audio4_mux] = { .dt_id = TEGRA114_CLK_AUDIO4_MUX, .present = true }, |
|---|
| 816 | 802 | [tegra_clk_spdif_mux] = { .dt_id = TEGRA114_CLK_SPDIF_MUX, .present = true }, |
|---|
| 817 | | - [tegra_clk_clk_out_1_mux] = { .dt_id = TEGRA114_CLK_CLK_OUT_1_MUX, .present = true }, |
|---|
| 818 | | - [tegra_clk_clk_out_2_mux] = { .dt_id = TEGRA114_CLK_CLK_OUT_2_MUX, .present = true }, |
|---|
| 819 | | - [tegra_clk_clk_out_3_mux] = { .dt_id = TEGRA114_CLK_CLK_OUT_3_MUX, .present = true }, |
|---|
| 820 | 803 | [tegra_clk_dsia_mux] = { .dt_id = TEGRA114_CLK_DSIA_MUX, .present = true }, |
|---|
| 821 | 804 | [tegra_clk_dsib_mux] = { .dt_id = TEGRA114_CLK_DSIB_MUX, .present = true }, |
|---|
| 822 | 805 | [tegra_clk_cec] = { .dt_id = TEGRA114_CLK_CEC, .present = true }, |
|---|
| .. | .. |
|---|
| 826 | 809 | { .con_id = "clk_m", .dt_id = TEGRA114_CLK_CLK_M }, |
|---|
| 827 | 810 | { .con_id = "pll_ref", .dt_id = TEGRA114_CLK_PLL_REF }, |
|---|
| 828 | 811 | { .con_id = "clk_32k", .dt_id = TEGRA114_CLK_CLK_32K }, |
|---|
| 829 | | - { .con_id = "clk_m_div2", .dt_id = TEGRA114_CLK_CLK_M_DIV2 }, |
|---|
| 830 | | - { .con_id = "clk_m_div4", .dt_id = TEGRA114_CLK_CLK_M_DIV4 }, |
|---|
| 812 | + { .con_id = "osc", .dt_id = TEGRA114_CLK_OSC }, |
|---|
| 813 | + { .con_id = "osc_div2", .dt_id = TEGRA114_CLK_OSC_DIV2 }, |
|---|
| 814 | + { .con_id = "osc_div4", .dt_id = TEGRA114_CLK_OSC_DIV4 }, |
|---|
| 831 | 815 | { .con_id = "pll_c", .dt_id = TEGRA114_CLK_PLL_C }, |
|---|
| 832 | 816 | { .con_id = "pll_c_out1", .dt_id = TEGRA114_CLK_PLL_C_OUT1 }, |
|---|
| 833 | 817 | { .con_id = "pll_c2", .dt_id = TEGRA114_CLK_PLL_C2 }, |
|---|
| .. | .. |
|---|
| 874 | 858 | { .con_id = "audio3_2x", .dt_id = TEGRA114_CLK_AUDIO3_2X }, |
|---|
| 875 | 859 | { .con_id = "audio4_2x", .dt_id = TEGRA114_CLK_AUDIO4_2X }, |
|---|
| 876 | 860 | { .con_id = "spdif_2x", .dt_id = TEGRA114_CLK_SPDIF_2X }, |
|---|
| 877 | | - { .con_id = "extern1", .dev_id = "clk_out_1", .dt_id = TEGRA114_CLK_EXTERN1 }, |
|---|
| 878 | | - { .con_id = "extern2", .dev_id = "clk_out_2", .dt_id = TEGRA114_CLK_EXTERN2 }, |
|---|
| 879 | | - { .con_id = "extern3", .dev_id = "clk_out_3", .dt_id = TEGRA114_CLK_EXTERN3 }, |
|---|
| 880 | | - { .con_id = "blink", .dt_id = TEGRA114_CLK_BLINK }, |
|---|
| 861 | + { .con_id = "extern1", .dt_id = TEGRA114_CLK_EXTERN1 }, |
|---|
| 862 | + { .con_id = "extern2", .dt_id = TEGRA114_CLK_EXTERN2 }, |
|---|
| 863 | + { .con_id = "extern3", .dt_id = TEGRA114_CLK_EXTERN3 }, |
|---|
| 881 | 864 | { .con_id = "cclk_g", .dt_id = TEGRA114_CLK_CCLK_G }, |
|---|
| 882 | 865 | { .con_id = "cclk_lp", .dt_id = TEGRA114_CLK_CCLK_LP }, |
|---|
| 883 | 866 | { .con_id = "sclk", .dt_id = TEGRA114_CLK_SCLK }, |
|---|
| .. | .. |
|---|
| 911 | 894 | /* clk_32k */ |
|---|
| 912 | 895 | clk = clk_register_fixed_rate(NULL, "clk_32k", NULL, 0, 32768); |
|---|
| 913 | 896 | clks[TEGRA114_CLK_CLK_32K] = clk; |
|---|
| 914 | | - |
|---|
| 915 | | - /* clk_m_div2 */ |
|---|
| 916 | | - clk = clk_register_fixed_factor(NULL, "clk_m_div2", "clk_m", |
|---|
| 917 | | - CLK_SET_RATE_PARENT, 1, 2); |
|---|
| 918 | | - clks[TEGRA114_CLK_CLK_M_DIV2] = clk; |
|---|
| 919 | | - |
|---|
| 920 | | - /* clk_m_div4 */ |
|---|
| 921 | | - clk = clk_register_fixed_factor(NULL, "clk_m_div4", "clk_m", |
|---|
| 922 | | - CLK_SET_RATE_PARENT, 1, 4); |
|---|
| 923 | | - clks[TEGRA114_CLK_CLK_M_DIV4] = clk; |
|---|
| 924 | | - |
|---|
| 925 | 897 | } |
|---|
| 926 | 898 | |
|---|
| 927 | 899 | static void __init tegra114_pll_init(void __iomem *clk_base, |
|---|
| .. | .. |
|---|
| 1164 | 1136 | { TEGRA114_CLK_UARTB, TEGRA114_CLK_PLL_P, 408000000, 0 }, |
|---|
| 1165 | 1137 | { TEGRA114_CLK_UARTC, TEGRA114_CLK_PLL_P, 408000000, 0 }, |
|---|
| 1166 | 1138 | { TEGRA114_CLK_UARTD, TEGRA114_CLK_PLL_P, 408000000, 0 }, |
|---|
| 1167 | | - { TEGRA114_CLK_PLL_A, TEGRA114_CLK_CLK_MAX, 564480000, 1 }, |
|---|
| 1168 | | - { TEGRA114_CLK_PLL_A_OUT0, TEGRA114_CLK_CLK_MAX, 11289600, 1 }, |
|---|
| 1169 | | - { TEGRA114_CLK_EXTERN1, TEGRA114_CLK_PLL_A_OUT0, 0, 1 }, |
|---|
| 1170 | | - { TEGRA114_CLK_CLK_OUT_1_MUX, TEGRA114_CLK_EXTERN1, 0, 1 }, |
|---|
| 1171 | | - { TEGRA114_CLK_CLK_OUT_1, TEGRA114_CLK_CLK_MAX, 0, 1 }, |
|---|
| 1139 | + { TEGRA114_CLK_PLL_A, TEGRA114_CLK_CLK_MAX, 564480000, 0 }, |
|---|
| 1140 | + { TEGRA114_CLK_PLL_A_OUT0, TEGRA114_CLK_CLK_MAX, 11289600, 0 }, |
|---|
| 1172 | 1141 | { TEGRA114_CLK_I2S0, TEGRA114_CLK_PLL_A_OUT0, 11289600, 0 }, |
|---|
| 1173 | 1142 | { TEGRA114_CLK_I2S1, TEGRA114_CLK_PLL_A_OUT0, 11289600, 0 }, |
|---|
| 1174 | 1143 | { TEGRA114_CLK_I2S2, TEGRA114_CLK_PLL_A_OUT0, 11289600, 0 }, |
|---|
| .. | .. |
|---|
| 1348 | 1317 | } |
|---|
| 1349 | 1318 | |
|---|
| 1350 | 1319 | pmc_base = of_iomap(node, 0); |
|---|
| 1320 | + of_node_put(node); |
|---|
| 1351 | 1321 | if (!pmc_base) { |
|---|
| 1352 | 1322 | pr_err("Can't map pmc registers\n"); |
|---|
| 1353 | 1323 | WARN_ON(1); |
|---|
| .. | .. |
|---|
| 1370 | 1340 | tegra_audio_clk_init(clk_base, pmc_base, tegra114_clks, |
|---|
| 1371 | 1341 | tegra114_audio_plls, |
|---|
| 1372 | 1342 | ARRAY_SIZE(tegra114_audio_plls), 24000000); |
|---|
| 1373 | | - tegra_pmc_clk_init(pmc_base, tegra114_clks); |
|---|
| 1374 | 1343 | tegra_super_clk_gen4_init(clk_base, pmc_base, tegra114_clks, |
|---|
| 1375 | 1344 | &pll_x_params); |
|---|
| 1376 | 1345 | |
|---|