123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * Copyright (C) 2021 Alibaba Group Holding Limited.
- */
- #include <dt-bindings/clock/light-fm-ap-clock.h>
- #include <linux/clk.h>
- #include <linux/delay.h>
- #include <linux/err.h>
- #include <linux/init.h>
- #include <linux/io.h>
- #include <linux/module.h>
- #include <linux/of.h>
- #include <linux/of_device.h>
- #include <linux/of_address.h>
- #include <linux/platform_device.h>
- #include <linux/types.h>
- #include "clk.h"
- static struct clk *clks[CLK_END];
- static struct clk_onecell_data clk_data;
- /* Light Fullmask */
- static u32 share_cnt_x2h_cpusys_clk_en;
- static u32 share_cnt_dmac_cpusys_clk_en;
- static u32 share_cnt_timer0_clk_en;
- static u32 share_cnt_timer1_clk_en;
- static u32 share_cnt_axi4_cpusys2_clk_en;
- static u32 share_cnt_bmu_c910_clk_en;
- static u32 share_cnt_aon2cpu_a2x_clk_en;
- static u32 share_cnt_chip_dbg_clk_en;
- static u32 share_cnt_x2x_cpusys_clk_en;
- static u32 share_cnt_cfg2tee_x2h_clk_en;
- static u32 share_cnt_cpu2aon_x2h_clk_en;
- static u32 share_cnt_cpu2vp_x2p_clk_en;
- static u32 share_cnt_npu_core_clk_en;
- static u32 share_cnt_cpu2peri_x2h_clk_en;
- static u32 share_cnt_cpu2vi_x2h_clk_en;
- static u32 share_cnt_vpsys_axi_aclk_en;
- static u32 share_cnt_gmac1_clk_en;
- static u32 share_cnt_gmac0_clk_en;
- static u32 share_cnt_perisys_apb3_hclk_en;
- static u32 share_cnt_qspi0_clk_en;
- static u32 share_cnt_gmac_axi_clk_en;
- static u32 share_cnt_gpio0_clk_en;
- static u32 share_cnt_gpio1_clk_en;
- static u32 share_cnt_pwm_clk_en;
- static u32 share_cnt_spi_clk_en;
- static u32 share_cnt_uart0_clk_en;
- static u32 share_cnt_uart2_clk_en;
- static u32 share_cnt_i2c2_clk_en;
- static u32 share_cnt_peri_i2s_clk_en;
- static u32 share_cnt_qspi1_clk_en;
- static u32 share_cnt_uart1_clk_en;
- static u32 share_cnt_uart3_clk_en;
- static u32 share_cnt_uart4_clk_en;
- static u32 share_cnt_uart5_clk_en;
- static u32 share_cnt_i2c0_clk_en;
- static u32 share_cnt_i2c1_clk_en;
- static u32 share_cnt_i2c4_clk_en;
- static u32 share_cnt_i2c5_clk_en;
- static u32 share_cnt_gpio2_clk_en;
- static u32 share_cnt_gpio3_clk_en;
- static u32 share_cnt_vosys_axi_aclk_en;
- /* Light Fullmask PLL Bypass */
- static const char * const cpu_pll0_bypass_sels[] = {"cpu_pll0_foutpostdiv", "osc_24m", };
- static const char * const cpu_pll1_bypass_sels[] = {"cpu_pll1_foutpostdiv", "osc_24m", };
- static const char * const gmac_pll_bypass_sels[] = {"gmac_pll_foutpostdiv", "osc_24m", };
- static const char * const video_pll_bypass_sels[] = {"video_pll_foutpostdiv", "osc_24m", };
- static const char * const tee_pll_bypass_sels[] = {"tee_pll_foutpostdiv", "osc_24m"};
- static const char * const dpu0_pll_bypass_sels[] = {"dpu0_pll_foutpostdiv", "osc_24m"};
- static const char * const dpu1_pll_bypass_sels[] = {"dpu1_pll_foutpostdiv", "osc_24m"};
- /* light fullmask mux */
- static const char * const ahb2_cpusys_hclk_sels[] = {"ahb2_cpusys_hclk_out_div", "osc_24m"};
- static const char * const c910_cclk_i0_sels[] = {"cpu_pll0_foutpostdiv", "osc_24m"};
- static const char * const c910_cclk_sels[] = {"c910_cclk_i0", "cpu_pll1_foutpostdiv"};
- static const char * const cfg_axi_aclk_sels[] = {"cfg_axi_aclk_out_div", "osc_24m"};
- static const char * const teesys_hclk_sels[] = {"teesys_i1_hclk", "teesys_i0_hclk"};
- static const char * const perisys_ahb_hclk_sels[] = {"perisys_ahb_hclk_out_div", "osc_24m"};
- static const char * const clk_out_1_sels[] = {"osc_24m", "clk_out_1_out_div"};
- static const char * const clk_out_2_sels[] = {"osc_24m", "clk_out_2_out_div"};
- static const char * const clk_out_3_sels[] = {"osc_24m", "clk_out_3_out_div"};
- static const char * const clk_out_4_sels[] = {"osc_24m", "clk_out_4_out_div"};
- static const char * const peri_i2s_src_clk_sels[] = {"clkgen_peri_i2s_src_clk_0", "clkgen_peri_i2s_src_clk_1"};
- static const char * const npu_cclk_sels[] = {"gmac_pll_foutpostdiv", "npu_cclk_out_div"};
- static const char * const cfg_apb_pclk_sels[] = {"cfg_apb_pclk_out_div", "osc_24m"};
- static const char * const uart_sclk_sels[] = {"clk_100m", "osc_24m"};
- static const struct light_pll_rate_table light_cpupll_tbl[] = {
- LIGHT_PLL_RATE(2616000000U, 2616000000U, 1, 109, 0, 1, 1),
- LIGHT_PLL_RATE(2592000000U, 2592000000U, 1, 108, 0, 1, 1),
- LIGHT_PLL_RATE(2568000000U, 2568000000U, 1, 107, 0, 1, 1),
- LIGHT_PLL_RATE(2544000000U, 2544000000U, 1, 106, 0, 1, 1),
- LIGHT_PLL_RATE(2520000000U, 2520000000U, 1, 105, 0, 1, 1),
- LIGHT_PLL_RATE(2496000000U, 2496000000U, 1, 104, 0, 1, 1),
- LIGHT_PLL_RATE(2472000000U, 2472000000U, 1, 103, 0, 1, 1),
- LIGHT_PLL_RATE(2448000000U, 2448000000U, 1, 102, 0, 1, 1),
- LIGHT_PLL_RATE(2424000000U, 2424000000U, 1, 101, 0, 1, 1),
- LIGHT_PLL_RATE(2400000000U, 2400000000U, 1, 100, 0, 1, 1),
- LIGHT_PLL_RATE(2376000000U, 2376000000U, 1, 99, 0, 1, 1),
- LIGHT_PLL_RATE(2352000000U, 2352000000U, 1, 98, 0, 1, 1),
- LIGHT_PLL_RATE(2328000000U, 2328000000U, 1, 97, 0, 1, 1),
- LIGHT_PLL_RATE(2304000000U, 2304000000U, 1, 96, 0, 1, 1),
- LIGHT_PLL_RATE(2280000000U, 2280000000U, 1, 95, 0, 1, 1),
- LIGHT_PLL_RATE(2256000000U, 2256000000U, 1, 94, 0, 1, 1),
- LIGHT_PLL_RATE(2232000000U, 2232000000U, 1, 93, 0, 1, 1),
- LIGHT_PLL_RATE(2208000000U, 2208000000U, 1, 92, 0, 1, 1),
- LIGHT_PLL_RATE(2184000000U, 2184000000U, 1, 91, 0, 1, 1),
- LIGHT_PLL_RATE(2160000000U, 2160000000U, 1, 90, 0, 1, 1),
- LIGHT_PLL_RATE(2136000000U, 2136000000U, 1, 89, 0, 1, 1),
- LIGHT_PLL_RATE(2112000000U, 2112000000U, 1, 88, 0, 1, 1),
- LIGHT_PLL_RATE(2088000000U, 2088000000U, 1, 87, 0, 1, 1),
- LIGHT_PLL_RATE(2064000000U, 2064000000U, 1, 86, 0, 1, 1),
- LIGHT_PLL_RATE(2040000000U, 2040000000U, 1, 85, 0, 1, 1),
- LIGHT_PLL_RATE(2016000000U, 2016000000U, 1, 84, 0, 1, 1),
- LIGHT_PLL_RATE(1992000000U, 1992000000U, 1, 83, 0, 1, 1),
- LIGHT_PLL_RATE(1968000000U, 1968000000U, 1, 82, 0, 1, 1),
- LIGHT_PLL_RATE(1944000000U, 1944000000U, 1, 81, 0, 1, 1),
- LIGHT_PLL_RATE(1920000000U, 1920000000U, 1, 80, 0, 1, 1),
- LIGHT_PLL_RATE(1896000000U, 1896000000U, 1, 79, 0, 1, 1),
- LIGHT_PLL_RATE(1872000000U, 1872000000U, 1, 78, 0, 1, 1),
- LIGHT_PLL_RATE(1848000000U, 1848000000U, 1, 77, 0, 1, 1),
- LIGHT_PLL_RATE(1824000000U, 1824000000U, 1, 76, 0, 1, 1),
- LIGHT_PLL_RATE(1800000000U, 1800000000U, 1, 75, 0, 1, 1),
- LIGHT_PLL_RATE(1776000000U, 1776000000U, 1, 74, 0, 1, 1),
- LIGHT_PLL_RATE(1752000000U, 1752000000U, 1, 73, 0, 1, 1),
- LIGHT_PLL_RATE(1728000000U, 1728000000U, 1, 72, 0, 1, 1),
- LIGHT_PLL_RATE(1704000000U, 1704000000U, 1, 71, 0, 1, 1),
- LIGHT_PLL_RATE(1680000000U, 1680000000U, 1, 70, 0, 1, 1),
- LIGHT_PLL_RATE(1656000000U, 1656000000U, 1, 69, 0, 1, 1),
- LIGHT_PLL_RATE(1632000000U, 1632000000U, 1, 68, 0, 1, 1),
- LIGHT_PLL_RATE(1608000000U, 1608000000U, 1, 67, 0, 1, 1),
- LIGHT_PLL_RATE(1584000000U, 1584000000U, 1, 66, 0, 1, 1),
- LIGHT_PLL_RATE(1560000000U, 1560000000U, 1, 65, 0, 1, 1),
- LIGHT_PLL_RATE(1536000000U, 1536000000U, 1, 64, 0, 1, 1),
- LIGHT_PLL_RATE(1512000000U, 1512000000U, 1, 63, 0, 1, 1),
- LIGHT_PLL_RATE(3000000000U, 1500000000U, 1, 125, 0, 2, 1),
- LIGHT_PLL_RATE(2976000000U, 1488000000U, 1, 124, 0, 2, 1),
- LIGHT_PLL_RATE(2952000000U, 1476000000U, 1, 123, 0, 2, 1),
- LIGHT_PLL_RATE(2928000000U, 1464000000U, 1, 122, 0, 2, 1),
- LIGHT_PLL_RATE(2904000000U, 1452000000U, 1, 121, 0, 2, 1),
- LIGHT_PLL_RATE(2880000000U, 1440000000U, 1, 120, 0, 2, 1),
- LIGHT_PLL_RATE(2856000000U, 1428000000U, 1, 119, 0, 2, 1),
- LIGHT_PLL_RATE(2832000000U, 1416000000U, 1, 118, 0, 2, 1),
- LIGHT_PLL_RATE(2808000000U, 1404000000U, 1, 117, 0, 2, 1),
- LIGHT_PLL_RATE(2784000000U, 1392000000U, 1, 116, 0, 2, 1),
- LIGHT_PLL_RATE(2760000000U, 1380000000U, 1, 115, 0, 2, 1),
- LIGHT_PLL_RATE(2736000000U, 1368000000U, 1, 114, 0, 2, 1),
- LIGHT_PLL_RATE(2712000000U, 1356000000U, 1, 113, 0, 2, 1),
- LIGHT_PLL_RATE(2688000000U, 1344000000U, 1, 112, 0, 2, 1),
- LIGHT_PLL_RATE(2664000000U, 1332000000U, 1, 111, 0, 2, 1),
- LIGHT_PLL_RATE(2640000000U, 1320000000U, 1, 110, 0, 2, 1),
- LIGHT_PLL_RATE(2616000000U, 1308000000U, 1, 109, 0, 2, 1),
- LIGHT_PLL_RATE(2592000000U, 1296000000U, 1, 108, 0, 2, 1),
- LIGHT_PLL_RATE(2568000000U, 1284000000U, 1, 107, 0, 2, 1),
- LIGHT_PLL_RATE(2544000000U, 1272000000U, 1, 106, 0, 2, 1),
- LIGHT_PLL_RATE(2520000000U, 1260000000U, 1, 105, 0, 2, 1),
- LIGHT_PLL_RATE(2496000000U, 1248000000U, 1, 104, 0, 2, 1),
- LIGHT_PLL_RATE(2472000000U, 1236000000U, 1, 103, 0, 2, 1),
- LIGHT_PLL_RATE(2448000000U, 1224000000U, 1, 102, 0, 2, 1),
- LIGHT_PLL_RATE(2424000000U, 1212000000U, 1, 101, 0, 2, 1),
- LIGHT_PLL_RATE(2400000000U, 1200000000U, 1, 100, 0, 2, 1),
- LIGHT_PLL_RATE(2376000000U, 1188000000U, 1, 99, 0, 2, 1),
- LIGHT_PLL_RATE(2352000000U, 1176000000U, 1, 98, 0, 2, 1),
- LIGHT_PLL_RATE(2328000000U, 1164000000U, 1, 97, 0, 2, 1),
- LIGHT_PLL_RATE(2304000000U, 1152000000U, 1, 96, 0, 2, 1),
- LIGHT_PLL_RATE(2280000000U, 1140000000U, 1, 95, 0, 2, 1),
- LIGHT_PLL_RATE(2256000000U, 1128000000U, 1, 94, 0, 2, 1),
- LIGHT_PLL_RATE(2232000000U, 1116000000U, 1, 93, 0, 2, 1),
- LIGHT_PLL_RATE(2208000000U, 1104000000U, 1, 92, 0, 2, 1),
- LIGHT_PLL_RATE(2184000000U, 1092000000U, 1, 91, 0, 2, 1),
- LIGHT_PLL_RATE(2160000000U, 1080000000U, 1, 90, 0, 2, 1),
- LIGHT_PLL_RATE(2136000000U, 1068000000U, 1, 89, 0, 2, 1),
- LIGHT_PLL_RATE(2112000000U, 1056000000U, 1, 88, 0, 2, 1),
- LIGHT_PLL_RATE(2088000000U, 1044000000U, 1, 87, 0, 2, 1),
- LIGHT_PLL_RATE(2064000000U, 1032000000U, 1, 86, 0, 2, 1),
- LIGHT_PLL_RATE(2040000000U, 1020000000U, 1, 85, 0, 2, 1),
- LIGHT_PLL_RATE(2016000000U, 1008000000U, 1, 84, 0, 2, 1),
- LIGHT_PLL_RATE(3000000000U, 1000000000U, 1, 125, 0, 3, 1),
- LIGHT_PLL_RATE(2976000000U, 992000000U, 1, 124, 0, 3, 1),
- LIGHT_PLL_RATE(2952000000U, 984000000U, 1, 123, 0, 3, 1),
- LIGHT_PLL_RATE(2928000000U, 976000000U, 1, 122, 0, 3, 1),
- LIGHT_PLL_RATE(2904000000U, 968000000U, 1, 121, 0, 3, 1),
- LIGHT_PLL_RATE(2880000000U, 960000000U, 1, 120, 0, 3, 1),
- LIGHT_PLL_RATE(2856000000U, 952000000U, 1, 119, 0, 3, 1),
- LIGHT_PLL_RATE(2832000000U, 944000000U, 1, 118, 0, 3, 1),
- LIGHT_PLL_RATE(2808000000U, 936000000U, 1, 117, 0, 3, 1),
- LIGHT_PLL_RATE(2784000000U, 928000000U, 1, 116, 0, 3, 1),
- LIGHT_PLL_RATE(2760000000U, 920000000U, 1, 115, 0, 3, 1),
- LIGHT_PLL_RATE(2736000000U, 912000000U, 1, 114, 0, 3, 1),
- LIGHT_PLL_RATE(2712000000U, 904000000U, 1, 113, 0, 3, 1),
- LIGHT_PLL_RATE(1800000000U, 900000000U, 1, 75, 0, 2, 1),
- LIGHT_PLL_RATE(2688000000U, 896000000U, 1, 112, 0, 3, 1),
- LIGHT_PLL_RATE(2664000000U, 888000000U, 1, 111, 0, 3, 1),
- LIGHT_PLL_RATE(2640000000U, 880000000U, 1, 110, 0, 3, 1),
- LIGHT_PLL_RATE(2616000000U, 872000000U, 1, 109, 0, 3, 1),
- LIGHT_PLL_RATE(2592000000U, 864000000U, 1, 108, 0, 3, 1),
- LIGHT_PLL_RATE(2568000000U, 856000000U, 1, 107, 0, 3, 1),
- LIGHT_PLL_RATE(2544000000U, 848000000U, 1, 106, 0, 3, 1),
- LIGHT_PLL_RATE(2520000000U, 840000000U, 1, 105, 0, 3, 1),
- LIGHT_PLL_RATE(2496000000U, 832000000U, 1, 104, 0, 3, 1),
- LIGHT_PLL_RATE(2472000000U, 824000000U, 1, 103, 0, 3, 1),
- LIGHT_PLL_RATE(2448000000U, 816000000U, 1, 102, 0, 3, 1),
- LIGHT_PLL_RATE(2424000000U, 808000000U, 1, 101, 0, 3, 1),
- LIGHT_PLL_RATE(2400000000U, 800000000U, 1, 100, 0, 3, 1),
- LIGHT_PLL_RATE(2376000000U, 792000000U, 1, 99, 0, 3, 1),
- LIGHT_PLL_RATE(2352000000U, 784000000U, 1, 98, 0, 3, 1),
- LIGHT_PLL_RATE(2328000000U, 776000000U, 1, 97, 0, 3, 1),
- LIGHT_PLL_RATE(2304000000U, 768000000U, 1, 96, 0, 3, 1),
- LIGHT_PLL_RATE(2280000000U, 760000000U, 1, 95, 0, 3, 1),
- LIGHT_PLL_RATE(2256000000U, 752000000U, 1, 94, 0, 3, 1),
- LIGHT_PLL_RATE(2232000000U, 744000000U, 1, 93, 0, 3, 1),
- LIGHT_PLL_RATE(2208000000U, 736000000U, 1, 92, 0, 3, 1),
- LIGHT_PLL_RATE(2184000000U, 728000000U, 1, 91, 0, 3, 1),
- LIGHT_PLL_RATE(2160000000U, 720000000U, 1, 90, 0, 3, 1),
- LIGHT_PLL_RATE(2136000000U, 712000000U, 1, 89, 0, 3, 1),
- LIGHT_PLL_RATE(2808000000U, 702000000U, 1, 117, 0, 4, 1),
- LIGHT_PLL_RATE(2760000000U, 690000000U, 1, 115, 0, 4, 1),
- LIGHT_PLL_RATE(2712000000U, 678000000U, 1, 113, 0, 4, 1),
- LIGHT_PLL_RATE(2664000000U, 666000000U, 1, 111, 0, 4, 1),
- LIGHT_PLL_RATE(2616000000U, 654000000U, 1, 109, 0, 4, 1),
- LIGHT_PLL_RATE(2568000000U, 642000000U, 1, 107, 0, 4, 1),
- LIGHT_PLL_RATE(2520000000U, 630000000U, 1, 105, 0, 4, 1),
- LIGHT_PLL_RATE(2472000000U, 618000000U, 1, 103, 0, 4, 1),
- LIGHT_PLL_RATE(2424000000U, 606000000U, 1, 101, 0, 4, 1),
- LIGHT_PLL_RATE(3000000000U, 600000000U, 1, 125, 0, 5, 1),
- LIGHT_PLL_RATE(2952000000U, 590400000U, 1, 123, 0, 5, 1),
- LIGHT_PLL_RATE(2904000000U, 580800000U, 1, 121, 0, 5, 1),
- LIGHT_PLL_RATE(2856000000U, 571200000U, 1, 119, 0, 5, 1),
- LIGHT_PLL_RATE(2808000000U, 561600000U, 1, 117, 0, 5, 1),
- LIGHT_PLL_RATE(2760000000U, 552000000U, 1, 115, 0, 5, 1),
- LIGHT_PLL_RATE(2712000000U, 542400000U, 1, 113, 0, 5, 1),
- LIGHT_PLL_RATE(2664000000U, 532800000U, 1, 111, 0, 5, 1),
- LIGHT_PLL_RATE(2616000000U, 523200000U, 1, 109, 0, 5, 1),
- LIGHT_PLL_RATE(2568000000U, 513600000U, 1, 107, 0, 5, 1),
- LIGHT_PLL_RATE(2520000000U, 504000000U, 1, 105, 0, 5, 1),
- LIGHT_PLL_RATE(3000000000U, 500000000U, 1, 125, 0, 6, 1),
- LIGHT_PLL_RATE(2952000000U, 492000000U, 1, 123, 0, 6, 1),
- LIGHT_PLL_RATE(2904000000U, 484000000U, 1, 121, 0, 6, 1),
- LIGHT_PLL_RATE(2856000000U, 476000000U, 1, 119, 0, 6, 1),
- LIGHT_PLL_RATE(2808000000U, 468000000U, 1, 117, 0, 6, 1),
- LIGHT_PLL_RATE(2760000000U, 460000000U, 1, 115, 0, 6, 1),
- LIGHT_PLL_RATE(2712000000U, 452000000U, 1, 113, 0, 6, 1),
- LIGHT_PLL_RATE(2664000000U, 444000000U, 1, 111, 0, 6, 1),
- LIGHT_PLL_RATE(2616000000U, 436000000U, 1, 109, 0, 6, 1),
- LIGHT_PLL_RATE(2568000000U, 428000000U, 1, 107, 0, 6, 1),
- LIGHT_PLL_RATE(2520000000U, 420000000U, 1, 105, 0, 6, 1),
- LIGHT_PLL_RATE(2472000000U, 412000000U, 1, 103, 0, 6, 1),
- LIGHT_PLL_RATE(2400000000U, 400000000U, 1, 100, 0, 3, 2),
- LIGHT_PLL_RATE(2352000000U, 392000000U, 1, 98, 0, 3, 2),
- LIGHT_PLL_RATE(2304000000U, 384000000U, 1, 96, 0, 3, 2),
- LIGHT_PLL_RATE(2256000000U, 376000000U, 1, 94, 0, 3, 2),
- LIGHT_PLL_RATE(2208000000U, 368000000U, 1, 92, 0, 3, 2),
- LIGHT_PLL_RATE(2160000000U, 360000000U, 1, 90, 0, 3, 2),
- LIGHT_PLL_RATE(2112000000U, 352000000U, 1, 88, 0, 3, 2),
- LIGHT_PLL_RATE(2064000000U, 344000000U, 1, 86, 0, 3, 2),
- LIGHT_PLL_RATE(2016000000U, 336000000U, 1, 84, 0, 3, 2),
- LIGHT_PLL_RATE(1968000000U, 328000000U, 1, 82, 0, 3, 2),
- LIGHT_PLL_RATE(1920000000U, 320000000U, 1, 80, 0, 3, 2),
- LIGHT_PLL_RATE(1872000000U, 312000000U, 1, 78, 0, 3, 2),
- LIGHT_PLL_RATE(1824000000U, 304000000U, 1, 76, 0, 3, 2),
- LIGHT_PLL_RATE(3000000000U, 300000000U, 1, 125, 0, 5, 2),
- LIGHT_PLL_RATE(2880000000U, 288000000U, 1, 120, 0, 5, 2),
- LIGHT_PLL_RATE(2760000000U, 276000000U, 1, 115, 0, 5, 2),
- LIGHT_PLL_RATE(2640000000U, 264000000U, 1, 110, 0, 5, 2),
- LIGHT_PLL_RATE(2520000000U, 252000000U, 1, 105, 0, 5, 2),
- LIGHT_PLL_RATE(2400000000U, 240000000U, 1, 100, 0, 5, 2),
- LIGHT_PLL_RATE(2280000000U, 228000000U, 1, 95, 0, 5, 2),
- LIGHT_PLL_RATE(2160000000U, 216000000U, 1, 90, 0, 5, 2),
- LIGHT_PLL_RATE(2040000000U, 204000000U, 1, 85, 0, 5, 2),
- LIGHT_PLL_RATE(3000000000U, 200000000U, 1, 125, 0, 5, 3),
- LIGHT_PLL_RATE(2880000000U, 192000000U, 1, 120, 0, 5, 3),
- LIGHT_PLL_RATE(2760000000U, 184000000U, 1, 115, 0, 5, 3),
- LIGHT_PLL_RATE(2640000000U, 176000000U, 1, 110, 0, 5, 3),
- LIGHT_PLL_RATE(2520000000U, 168000000U, 1, 105, 0, 5, 3),
- LIGHT_PLL_RATE(2400000000U, 160000000U, 1, 100, 0, 5, 3),
- LIGHT_PLL_RATE(2280000000U, 152000000U, 1, 95, 0, 5, 3),
- LIGHT_PLL_RATE(2160000000U, 144000000U, 1, 90, 0, 5, 3),
- LIGHT_PLL_RATE(2040000000U, 136000000U, 1, 85, 0, 5, 3),
- LIGHT_PLL_RATE(1920000000U, 128000000U, 1, 80, 0, 5, 3),
- LIGHT_PLL_RATE(3000000000U, 125000000U, 1, 125, 0, 6, 4),
- LIGHT_PLL_RATE(2760000000U, 115000000U, 1, 115, 0, 6, 4),
- LIGHT_PLL_RATE(2520000000U, 105000000U, 1, 105, 0, 6, 4),
- LIGHT_PLL_RATE(2280000000U, 95000000U, 1, 95, 0, 6, 4),
- LIGHT_PLL_RATE(2040000000U, 85000000U, 1, 85, 0, 6, 4),
- LIGHT_PLL_RATE(1800000000U, 75000000U, 1, 75, 0, 6, 4),
- LIGHT_PLL_RATE(1560000000U, 65000000U, 1, 65, 0, 6, 4),
- LIGHT_PLL_RATE(1320000000U, 55000000U, 1, 55, 0, 6, 4),
- };
- static const struct light_pll_rate_table light_dpupll_tbl[] = {
- LIGHT_PLL_RATE(2376000000U, 1188000000U, 1, 99, 0, 2, 1),
- LIGHT_PLL_RATE(1980000000U, 990000000U, 2, 165, 0, 2, 1),
- LIGHT_PLL_RATE(2970000000U, 742500000U, 4, 495, 0, 4, 1),
- LIGHT_PLL_RATE(2304000000U, 1152000000U, 1, 96, 0, 2, 1),
- LIGHT_PLL_RATE(1512000000U, 504000000U, 1, 63, 0, 3, 1),
- LIGHT_PLL_RATE(1512000000U, 503500000U, 1, 63, 0, 3, 1),
- LIGHT_PLL_RATE(2898000000U, 483000000U, 4, 483, 0, 6, 1),
- LIGHT_PLL_RATE(2592000000U, 648000000U, 1, 108, 0, 4, 1),
- LIGHT_PLL_RATE(2772000000U, 924000000U, 2, 231, 0, 3, 1),
- LIGHT_PLL_RATE(2856000000U, 476000000U, 1, 119, 0, 6, 1),
- LIGHT_PLL_RATE(2130000000U, 355000000U, 4, 355, 0, 6, 1),
- LIGHT_PLL_RATE(3192000000U, 456000000U, 1, 133, 0, 7, 1),
- LIGHT_PLL_RATE(2730000000U, 390000000U, 4, 455, 0, 7, 1),
- LIGHT_PLL_RATE(1680000000U, 240000000U, 1, 70, 0, 7, 1),
- LIGHT_PLL_RATE(2832000000U, 708000000U, 1, 118, 0, 4, 1),
- LIGHT_PLL_RATE(1026000000U, 342000000U, 4, 171, 0, 3, 1),
- LIGHT_PLL_RATE(1260000000U, 630000000U, 4, 210, 0, 2, 1),
- };
- static struct light_pll_clk light_cpu_pll0div = {
- .out_type = LIGHT_PLL_DIV,
- .clk_type = LIGHT_CPU_PLL0,
- .rate_table = light_cpupll_tbl,
- .rate_count = ARRAY_SIZE(light_cpupll_tbl),
- };
- static struct light_pll_clk light_cpu_pll1div = {
- .out_type = LIGHT_PLL_DIV,
- .clk_type = LIGHT_CPU_PLL1,
- .rate_table = light_cpupll_tbl,
- .rate_count = ARRAY_SIZE(light_cpupll_tbl),
- };
- static struct light_pll_clk light_dpu0_plldiv = {
- .out_type = LIGHT_PLL_DIV,
- .clk_type = LIGHT_DPU0_PLL,
- .rate_table = light_dpupll_tbl,
- .rate_count = ARRAY_SIZE(light_dpupll_tbl),
- };
- static struct light_pll_clk light_dpu1_plldiv = {
- .out_type = LIGHT_PLL_DIV,
- .clk_type = LIGHT_DPU1_PLL,
- .rate_table = light_dpupll_tbl,
- .rate_count = ARRAY_SIZE(light_dpupll_tbl),
- };
- static int light_clocks_probe(struct platform_device *pdev)
- {
- struct device *dev = &pdev->dev;
- struct device_node *np = dev->of_node;
- void __iomem *ap_base;
- int ret;
- const bool *teesys = of_device_get_match_data(dev);
- /* Clock source */
- clks[CLK_DUMMY] = thead_clk_fixed("dummy", 0);
- clks[OSC_32K] = of_clk_get_by_name(np, "osc_32k");
- clks[OSC_24M] = of_clk_get_by_name(np, "osc_24m");
- clks[RC_24M] = of_clk_get_by_name(np, "rc_24m");
- np = dev->of_node;
- ap_base = devm_platform_ioremap_resource(pdev, 0);
- if (WARN_ON(IS_ERR(ap_base))) {
- ret = PTR_ERR(ap_base);
- goto unregister_clks;
- }
- /* Light Fullmask AP PLL clocks */
- clks[CPU_PLL0_FOUTPOSTDIV] = thead_light_pll("cpu_pll0_foutpostdiv", "osc_24m", ap_base, &light_cpu_pll0div);
- clks[CPU_PLL1_FOUTPOSTDIV] = thead_light_pll("cpu_pll1_foutpostdiv", "osc_24m", ap_base, &light_cpu_pll1div);
- clks[DPU0_PLL_FOUTPOSTDIV] = thead_light_pll("dpu0_pll_foutpostdiv", "osc_24m", ap_base, &light_dpu0_plldiv);
- clks[DPU1_PLL_FOUTPOSTDIV] = thead_light_pll("dpu1_pll_foutpostdiv", "osc_24m", ap_base, &light_dpu1_plldiv);
- /* Light Fullmask AP Fixed PLL */
- clks[GMAC_PLL_FOUTPOSTDIV] = thead_clk_fixed("gmac_pll_foutpostdiv", 1000000000);
- clks[VIDEO_PLL_FOUTPOSTDIV] = thead_clk_fixed("video_pll_foutpostdiv", 792000000);
- clks[VIDEO_PLL_FOUTVCO] = thead_clk_fixed("video_pll_foutvco", 2376000000);
- clks[TEE_PLL_FOUTPOSTDIV] = thead_clk_fixed("tee_pll_foutpostdiv", 792000000);
- clks[CLKGEN_PERI_I2S_SRC_CLK_0] = thead_clk_fixed("clkgen_peri_i2s_src_clk_0", 294912000); //from audio_pll_foutpostdiv
- clks[CLKGEN_PERI_I2S_SRC_CLK_1] = thead_clk_fixed("clkgen_peri_i2s_src_clk_1", 135475200); //from sys_pll_foutpostdiv
- clks[CLKGEN_C910_BUS_CLK_NO_ICG] = thead_clk_fixed("clkgen_c910_bus_clk_no_icg", 750000000);
- clks[AONSYS_BUS_CLK] = thead_clk_fixed("aonsys_hclk", 101606400); //from sys_pll, maybe change ?
- /* Light Fullmask AP MUX */
- clks[CPU_PLL0_BYPASS] = thead_light_clk_mux_flags("cpu_pll0_bypass", ap_base + 0x4, 30, 1, cpu_pll0_bypass_sels, ARRAY_SIZE(cpu_pll0_bypass_sels), CLK_SET_RATE_PARENT);
- clks[CPU_PLL1_BYPASS] = thead_light_clk_mux_flags("cpu_pll1_bypass", ap_base + 0x14, 30, 1, cpu_pll1_bypass_sels, ARRAY_SIZE(cpu_pll1_bypass_sels), CLK_SET_RATE_PARENT);
- clks[GMAC_PLL_BYPASS] = thead_light_clk_mux_flags("gmac_pll_bypass", ap_base + 0x24, 30, 1, gmac_pll_bypass_sels, ARRAY_SIZE(gmac_pll_bypass_sels), CLK_SET_RATE_PARENT);
- clks[VIDEO_PLL_BYPASS] = thead_light_clk_mux_flags("video_pll_bypass", ap_base + 0x34, 30, 1, video_pll_bypass_sels, ARRAY_SIZE(video_pll_bypass_sels), CLK_SET_RATE_PARENT);
- clks[TEE_PLL_BYPASS] = thead_light_clk_mux_flags("tee_pll_bypass", ap_base + 0x64, 30, 1, tee_pll_bypass_sels, ARRAY_SIZE(tee_pll_bypass_sels), CLK_SET_RATE_PARENT);
- clks[DPU0_PLL_BYPASS] = thead_light_clk_mux_flags("dpu0_pll_bypass", ap_base + 0x44, 30, 1, dpu0_pll_bypass_sels, ARRAY_SIZE(dpu0_pll_bypass_sels), CLK_SET_RATE_PARENT);
- clks[DPU1_PLL_BYPASS] = thead_light_clk_mux_flags("dpu1_pll_bypass", ap_base + 0x54, 30, 1, dpu1_pll_bypass_sels, ARRAY_SIZE(dpu1_pll_bypass_sels), CLK_SET_RATE_PARENT);
- clks[AHB2_CPUSYS_HCLK] = thead_light_clk_mux_flags("ahb2_cpusys_hclk", ap_base + 0x120, 5, 1, ahb2_cpusys_hclk_sels, ARRAY_SIZE(ahb2_cpusys_hclk_sels), CLK_SET_RATE_PARENT);
- clks[C910_CCLK_I0] = thead_light_clk_mux_flags("c910_cclk_i0", ap_base + 0x100, 1, 1, c910_cclk_i0_sels, ARRAY_SIZE(c910_cclk_i0_sels), CLK_SET_RATE_PARENT);
- clks[C910_CCLK] = thead_light_clk_mux_flags("c910_cclk", ap_base + 0x100, 0, 1, c910_cclk_sels, ARRAY_SIZE(c910_cclk_sels), CLK_SET_RATE_PARENT);
- clks[CFG_AXI_ACLK] = thead_light_clk_mux_flags("cfg_axi_aclk", ap_base + 0x138, 5, 1, cfg_axi_aclk_sels, ARRAY_SIZE(cfg_axi_aclk_sels), CLK_SET_RATE_PARENT);
- if (teesys)
- clks[TEESYS_HCLK] = thead_light_clk_mux_flags("teesys_hclk", ap_base + 0x1cc, 13, 1, teesys_hclk_sels, ARRAY_SIZE(teesys_hclk_sels), CLK_SET_RATE_PARENT); //just for teesys!!!
- clks[PERISYS_AHB_HCLK] = thead_light_clk_mux_flags("perisys_ahb_hclk", ap_base + 0x140, 5, 1, perisys_ahb_hclk_sels, ARRAY_SIZE(perisys_ahb_hclk_sels), CLK_SET_RATE_PARENT);
- clks[CLK_OUT_1] = thead_light_clk_mux_flags("clk_out_1", ap_base + 0x1b4, 4, 1, clk_out_1_sels, ARRAY_SIZE(clk_out_1_sels), CLK_SET_RATE_PARENT);
- clks[CLK_OUT_2] = thead_light_clk_mux_flags("clk_out_2", ap_base + 0x1b8, 4, 1, clk_out_2_sels, ARRAY_SIZE(clk_out_2_sels), CLK_SET_RATE_PARENT);
- clks[CLK_OUT_3] = thead_light_clk_mux_flags("clk_out_3", ap_base + 0x1bc, 4, 1, clk_out_3_sels, ARRAY_SIZE(clk_out_3_sels), CLK_SET_RATE_PARENT);
- clks[CLK_OUT_4] = thead_light_clk_mux_flags("clk_out_4", ap_base + 0x1c0, 4, 1, clk_out_4_sels, ARRAY_SIZE(clk_out_4_sels), CLK_SET_RATE_PARENT);
- clks[PERI_I2S_SRC_CLK] = thead_light_clk_mux_flags("peri_i2s_src_clk", ap_base + 0x1f0, 0, 1, peri_i2s_src_clk_sels, ARRAY_SIZE(peri_i2s_src_clk_sels), CLK_SET_RATE_PARENT);
- clks[NPU_CCLK] = thead_light_clk_mux_flags("npu_cclk", ap_base + 0x1c8, 6, 1, npu_cclk_sels, ARRAY_SIZE(npu_cclk_sels), CLK_SET_RATE_PARENT);
- clks[CFG_APB_PCLK] = thead_light_clk_mux_flags("cfg_apb_pclk", ap_base + 0x1c4, 7, 1, cfg_apb_pclk_sels, ARRAY_SIZE(cfg_apb_pclk_sels), CLK_SET_RATE_PARENT);
- clks[UART_SCLK] = thead_light_clk_mux_flags("uart_sclk", ap_base + 0x210, 0, 1, uart_sclk_sels, ARRAY_SIZE(uart_sclk_sels), CLK_SET_RATE_PARENT);
- /* Light Fullmask AP Divider */
- clks[AHB2_CPUSYS_HCLK_OUT_DIV] = thead_clk_light_divider("ahb2_cpusys_hclk_out_div", "gmac_pll_fout1ph0", ap_base + 0x120, 0, 3, 4, MUX_TYPE_DIV, 2, 7);
- clks[APB3_CPUSYS_PCLK] = thead_clk_light_divider("apb3_cpusys_pclk", "ahb2_cpusys_hclk", ap_base + 0x130, 0, 3, 3, MUX_TYPE_CDE, 1, 7);
- clks[AXI4_CPUSYS2_ACLK] = thead_clk_light_divider("axi4_cpusys2_aclk", "gmac_pll_foutpostdiv", ap_base + 0x134, 0, 3, 4, MUX_TYPE_DIV, 2, 7);
- clks[CFG_AXI_ACLK_OUT_DIV] = thead_clk_light_divider("cfg_axi_aclk_out_div", "video_pll_foutpostdiv", ap_base + 0x138, 0, 4, 4, MUX_TYPE_DIV, 2, 15);
- if (teesys) {
- clks[TEESYS_I0_HCLK] = thead_clk_light_divider("teesys_i0_hclk", "tee_pll_foutpostdiv", ap_base + 0x1cc, 0, 4, 4, MUX_TYPE_DIV, 2, 15); //just for teesys!!!
- clks[TEESYS_I1_HCLK] = thead_clk_light_divider("teesys_i1_hclk", "video_pll_foutpostdiv", ap_base + 0x1cc, 8, 4, 12, MUX_TYPE_DIV, 2, 15); //just for teesys!!!
- }
- clks[PERISYS_AHB_HCLK_OUT_DIV] = thead_clk_light_divider("perisys_ahb_hclk_out_div", "gmac_pll_fout1ph0", ap_base + 0x140, 0, 4, 4, MUX_TYPE_DIV, 2, 7);
- clks[PERISYS_APB_PCLK] = thead_clk_light_divider("perisys_apb_pclk", "perisys_ahb_hclk", ap_base + 0x150, 0, 3, 3, MUX_TYPE_CDE, 3, 7);
- clks[PERI2SYS_APB_PCLK] = thead_clk_light_divider("peri2sys_apb_pclk", "gmac_pll_fout4", ap_base + 0x150, 4, 3, 8, MUX_TYPE_DIV, 2, 7);
- clks[CLK_OUT_1_OUT_DIV] = thead_clk_light_divider("clk_out_1_out_div", "osc_24m", ap_base + 0x1b4, 0, 3, 3, MUX_TYPE_DIV, 2, 4);
- clks[CLK_OUT_2_OUT_DIV] = thead_clk_light_divider("clk_out_2_out_div", "osc_24m", ap_base + 0x1b8, 0, 3, 3, MUX_TYPE_DIV, 2, 4);
- clks[CLK_OUT_3_OUT_DIV] = thead_clk_light_divider("clk_out_3_out_div", "osc_24m", ap_base + 0x1bc, 0, 3, 3, MUX_TYPE_DIV, 2, 4);
- clks[CLK_OUT_4_OUT_DIV] = thead_clk_light_divider("clk_out_4_out_div", "osc_24m", ap_base + 0x1c0, 0, 3, 3, MUX_TYPE_DIV, 2, 4);
- clks[VOSYS_ACLK_M] = thead_clk_light_divider("vosys_aclk_m", "video_pll_foutvco", ap_base + 0x1dc, 0, 4, 4, MUX_TYPE_DIV, 3, 15);
- clks[NPU_CCLK_OUT_DIV] = thead_clk_light_divider("npu_cclk_out_div", "video_pll_foutvco", ap_base + 0x1c8, 0, 3, 3, MUX_TYPE_DIV, 3, 7);
- clks[CFG_APB_PCLK_OUT_DIV] = thead_clk_light_divider("cfg_apb_pclk_out_div", "gmac_pll_foutpostdiv", ap_base + 0x1c4, 0, 4, 4, MUX_TYPE_DIV, 4, 15);
- clks[VISYS_ACLK_M] = thead_clk_light_divider("visys_aclk_m", "video_pll_foutvco", ap_base + 0x1d0, 16, 4, 20, MUX_TYPE_DIV, 3, 15);
- clks[VISYS_AHB_HCLK] = thead_clk_light_divider("visys_ahb_hclk", "video_pll_foutvco", ap_base + 0x1d0, 0, 4, 4, MUX_TYPE_DIV, 6, 15);
- clks[VPSYS_APB_PCLK] = thead_clk_light_divider("vpsys_apb_pclk", "gmac_pll_fout1ph0", ap_base + 0x1e0, 0, 3, 4, MUX_TYPE_DIV, 2, 7);
- clks[VPSYS_AXI_ACLK] = thead_clk_light_divider("vpsys_axi_aclk", "video_pll_foutvco", ap_base + 0x1e0, 8, 4, 12, MUX_TYPE_DIV, 3, 15);
- clks[VENC_CCLK] = thead_clk_light_divider("venc_cclk", "gmac_pll_foutpostdiv", ap_base + 0x1e4, 0, 3, 4, MUX_TYPE_DIV, 2, 7);
- clks[DPU0_PLL_DIV_CLK] = thead_clk_light_divider("dpu0_pll_div_clk", "dpu0_pll_foutpostdiv", ap_base + 0x1e8, 0, 8, 8, MUX_TYPE_DIV, 2, 214);
- clks[DPU1_PLL_DIV_CLK] = thead_clk_light_divider("dpu1_pll_div_clk", "dpu1_pll_foutpostdiv", ap_base + 0x1ec, 0, 8, 8, MUX_TYPE_DIV, 2, 214);
- /* Light Fullmask PLL FOUT */
- clks[GMAC_PLL_FOUT1PH0] = thead_light_clk_fixed_factor("gmac_pll_fout1ph0", "gmac_pll_bypass", 1, 2);
- clks[GMAC_PLL_FOUT4] = thead_light_clk_fixed_factor("gmac_pll_fout4", "gmac_pll_bypass", 1, 8);
- clks[VIDEO_PLL_FOUT1PH0] = thead_light_clk_fixed_factor("video_pll_fout1ph0", "video_pll_bybass", 1, 2);
- clks[VIDEO_PLL_FOUT4] = thead_light_clk_fixed_factor("video_pll_fout4", "video_pll_bypass", 1, 8);
- clks[TEE_PLL_FOUT4] = thead_light_clk_fixed_factor("tee_pll_fout4", "tee_pll_bypass", 1, 8);
- clks[CPU_PLL0_FOUT4] = thead_light_clk_fixed_factor("cpu_pll0_fout4", "cpu_pll0_bypass", 1, 8);
- clks[CPU_PLL1_FOUT4] = thead_light_clk_fixed_factor("cpu_pll1_fout4", "cpu_pll1_bypass", 1, 8);
- clks[DPU0_PLL_FOUT4] = thead_light_clk_fixed_factor("dpu0_pll_fout4", "dpu0_pll_bypass", 1, 8);
- clks[DPU1_PLL_FOUT4] = thead_light_clk_fixed_factor("dpu1_pll_fout4", "dpu1_pll_bypass", 1, 8);
- /* Light Fullmask Fixed Factor */
- clks[C910_OSC_CLK] = thead_light_clk_fixed_factor("c910_osc_clk", "osc_24m", 1, 1);
- clks[QSPI_SSI_CLK] = thead_light_clk_fixed_factor("qspi_ssi_clk", "video_pll_foutpostdiv", 1, 1); /* Note: no mux to select, use default value */
- clks[QSPI0_SSI_CLK] = thead_light_clk_fixed_factor("qspi0_ssi_clk", "qspi_ssi_clk", 1, 1);
- clks[QSPI1_SSI_CLK] = thead_light_clk_fixed_factor("qspi1_ssi_clk", "video_pll_fout1ph0", 1, 1);
- clks[SPI_SSI_CLK] = thead_light_clk_fixed_factor("spi_ssi_clk", "video_pll_fout1ph0", 1, 1);
- clks[EMMC_SDIO_REF_CLK] = thead_light_clk_fixed_factor("emmc_sdio_ref_clk", "video_pll_foutpostdiv", 1, 1); /* Note: no mux to select, use default value */
- clks[PWM_CCLK] = thead_light_clk_fixed_factor("pwm_cclk", "osc_24m", 1, 1);
- clks[CHIP_DBG_CCLK] = thead_light_clk_fixed_factor("chip_dbg_cclk", "osc_24m", 1, 1);
- clks[GMAC_CCLK] = thead_light_clk_fixed_factor("gmac_cclk", "gmac_pll_fout1ph0", 1, 1);
- clks[GPIO0_DBCLK] = thead_light_clk_fixed_factor("gpio0_dbclk", "pad_rtc_clk", 1, 1);
- clks[GPIO1_DBCLK] = thead_light_clk_fixed_factor("gpio1_dbclk", "pad_rtc_clk", 1, 1);
- clks[GPIO2_DBCLK] = thead_light_clk_fixed_factor("gpio2_dbclk", "pad_rtc_clk", 1, 1);
- clks[GPIO3_DBCLK] = thead_light_clk_fixed_factor("gpio3_dbclk", "pad_rtc_clk", 1, 1);
- clks[CLK_100M] = thead_light_clk_fixed_factor("clk_100m", "gmac_pll_foutpostdiv", 1, 10);
- clks[I2C_IC_CLK] = thead_light_clk_fixed_factor("i2c_ic_clk", "clk_100m", 1, 2);
- clks[TIMER_CCLK] = thead_light_clk_fixed_factor("timer_cclk", "osc_24m", 1, 1);
- clks[AXI4_CPUSYS1_ACLK] = thead_light_clk_fixed_factor("axi4_cpusys1_aclk", "clkgen_c910_bus_clk_no_icg", 1, 1);
- clks[CPU_BUS_DFTCLK] = thead_light_clk_fixed_factor("cpu_bus_dftclk", "cpu_pll0_foutpostdiv", 1, 2);
- clks[CPU_PLL0_TEST_CLK] = thead_light_clk_fixed_factor("cpu_pll0_test_clk", "cpu_pll0_fout4", 1, 8);
- clks[CPU_PLL1_TEST_CLK] = thead_light_clk_fixed_factor("cpu_pll1_test_clk", "cpu_pll1_fout4", 1, 8);
- clks[DPU0_PLL_TEST_CLK] = thead_light_clk_fixed_factor("dpu0_pll_test_clk", "dpu0_pll_fout4", 1, 8);
- clks[DPU1_PLL_TEST_CLK] = thead_light_clk_fixed_factor("dpu1_pll_test_clk", "dpu1_pll_fout4", 1, 8);
- clks[GMAC_PLL_TEST_CLK] = thead_light_clk_fixed_factor("gmac_pll_test_clk", "gmac_pll_fout4", 1, 8);
- clks[VIDEO_PLL_TEST_CLK] = thead_light_clk_fixed_factor("video_pll_test_clk", "video_pll_fout4", 1, 8);
- clks[TEE_PLL_TEST_CLK] = thead_light_clk_fixed_factor("tee_pll_test_clk", "tee_pll_fout4", 1, 8);
- clks[AONSYS_BUS_CLK] = thead_light_clk_fixed_factor("aonsys_bus_clk", "aonsys_hclk", 1, 1);
- /* Light Fullmask Clock Gate */
- clks[CLKGEN_AHB2_CPUSYS_HCLK] = thead_clk_light_gate("clkgen_ahb2_cpusys_hclk", "ahb2_cpusys_hclk", ap_base + 0x120, 6);
- clks[CLKGEN_APB3_CPUSYS_HCLK] = thead_clk_light_gate("clkgen_apb3_cpusys_hclk", "ahb2_cpusys_hclk", ap_base + 0x130, 4);
- clks[CLKGEN_C910_BROM_HCLK] = thead_clk_light_gate("clkgen_c910_brom_hclk", "ahb2_cpusys_hclk", ap_base + 0x100, 4);
- clks[CLKGEN_SPINLOCK_HCLK] = thead_clk_light_gate("clkgen_spinlock_hclk", "ahb2_cpusys_hclk", ap_base + 0x208, 10);
- clks[CLKGEN_MBOX0_PCLK] = thead_clk_light_gate("clkgen_mbox0_pclk", "apb3_cpusys_pclk", ap_base + 0x208, 7);
- clks[CLKGEN_MBOX1_PCLK] = thead_clk_light_gate("clkgen_mbox1_pclk", "apb3_cpusys_pclk", ap_base + 0x208, 6);
- clks[CLKGEN_MBOX2_PCLK] = thead_clk_light_gate("clkgen_mbox2_pclk", "apb3_cpusys_pclk", ap_base + 0x208, 5);
- clks[CLKGEN_MBOX3_PCLK] = thead_clk_light_gate("clkgen_mbox3_pclk", "apb3_cpusys_pclk", ap_base + 0x208, 4);
- clks[CLKGEN_WDT0_PCLK] = thead_clk_light_gate("clkgen_wdt0_pclk", "apb3_cpusys_pclk", ap_base + 0x208, 3);
- clks[CLKGEN_WDT1_PCLK] = thead_clk_light_gate("clkgen_wdt1_pclk", "apb3_cpusys_pclk", ap_base + 0x208, 2);
- if (teesys)
- clks[CLKGEN_MISCSYS_TEE_CCLK] = thead_clk_light_gate("clkgen_miscsys_tee_cclk", "teesys_hclk", ap_base + 0x1cc, 25); //just for teesys!!!
- clks[CLKGEN_SRAM_AXI_ACLK_2] = thead_clk_light_gate("clkgen_sram_axi_aclk_2", "axi4_cpusys1_aclk", ap_base + 0x20c, 2);
- clks[CLKGEN_PERISYS_AHB_HCLK] = thead_clk_light_gate("clkgen_perisys_ahb_hclk", "perisys_ahb_hclk", ap_base + 0x140, 6);
- clks[CLKGEN_PERISYS_APB1_HCLK] = thead_clk_light_gate("clkgen_perisys_apb1_hclk", "perisys_ahb_hclk", ap_base + 0x150, 9);
- clks[CLKGEN_PERISYS_APB2_HCLK] = thead_clk_light_gate("clkgen_perisys_apb2_hclk", "perisys_ahb_hclk", ap_base + 0x150, 10);
- clks[CLKGEN_PERISYS_APB4_HCLK] = thead_clk_light_gate("clkgen_perisys_apb4_hclk", "perisys_ahb_hclk", ap_base + 0x150, 12);
- clks[CLKGEN_PADCTRL0_APSYS_PCLK] = thead_clk_light_gate("clkgen_padctrl0_apsys_pclk", "perisys_ahb_hclk", ap_base + 0x204, 22);
- clks[CLKGEN_DSMART_PCLK] = thead_clk_light_gate("clkgen_dsmart_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 23);
- clks[CLKGEN_PADCTRL1_APSYS_PCLK] = thead_clk_light_gate("clkgen_padctrl1_apsys_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 24);
- clks[CLKGEN_CLK_OUT_1_CLK] = thead_clk_light_gate("clkgen_clk_out_1_clk", "clk_out_1", ap_base + 0x1b4, 5);
- clks[CLKGEN_CLK_OUT_2_CLK] = thead_clk_light_gate("clkgen_clk_out_2_clk", "clk_out_2", ap_base + 0x1b8, 5);
- clks[CLKGEN_CLK_OUT_3_CLK] = thead_clk_light_gate("clkgen_clk_out_3_clk", "clk_out_3", ap_base + 0x1bc, 5);
- clks[CLKGEN_CLK_OUT_4_CLK] = thead_clk_light_gate("clkgen_clk_out_4_clk", "clk_out_4", ap_base + 0x1c0, 5);
- clks[CLKGEN_NPUSYS_AXI_ACLK] = thead_clk_light_gate("clkgen_npusys_axi_aclk", "npu_cclk", ap_base + 0x1c8, 5);
- clks[CLKGEN_SRAM_AXI_ACLK_0] = thead_clk_light_gate("clkgen_sram_axi_aclk_0", "npu_cclk", ap_base + 0x20c, 4);
- clks[CLKGEN_APB_CPU2CFG_HCLK] = thead_clk_light_gate("clkgen_apb_cpu2cfg_hclk", "cfg_apb_pclk", ap_base + 0x1c4, 5);
- clks[CLKGEN_SRAM_AXI_ACLK_1] = thead_clk_light_gate("clkgen_sram_axi_aclk_1", "visys_aclk_m", ap_base + 0x20c, 3);
- clks[CLKGEN_SRAM_AXI_ACLK_3] = thead_clk_light_gate("clkgen_sram_axi_aclk_3", "vpsys_axi_aclk", ap_base + 0x20c, 1);
- clks[CLKGEN_VPSYS_VENC_CCLK] = thead_clk_light_gate("clkgen_vpsys_venc_cclk", "venc_cclk", ap_base + 0x1e4, 5);
- clks[CLKGEN_EMMC_SDIO_REF_CLK] = thead_clk_light_gate("clkgen_emmc_sdio_ref_clk", "emmc_sdio_ref_clk", ap_base + 0x204, 30);
- clks[CLKGEN_X2H_CPUSYS_MHCLK] = thead_clk_light_gate_shared("clkgen_x2h_cpusys_mhclk", "ahb2_cpusys_hclk", ap_base + 0x120, 7, &share_cnt_x2h_cpusys_clk_en);
- clks[CLKGEN_X2H_CPUSYS_ACLK] = thead_clk_light_gate_shared("clkgen_x2h_cpusys_aclk", "cfg_axi_aclk", ap_base + 0x120, 7, &share_cnt_x2h_cpusys_clk_en);
- clks[CLKGEN_DMAC_CPUSYS_HCLK] = thead_clk_light_gate_shared("clkgen_dmac_cpusys_hclk", "ahb2_cpusys_hclk", ap_base + 0x208, 8, &share_cnt_dmac_cpusys_clk_en);
- clks[CLKGEN_IOPMP_DMAC_CPUSYS_PCLK] = thead_clk_light_gate_shared("clkgen_iopmp_dmac_cpusys_pclk", "apb3_cpusys_pclk", ap_base + 0x208, 8, &share_cnt_dmac_cpusys_clk_en);
- clks[CLKGEN_DMAC_CPUSYS_ACLK] = thead_clk_light_gate_shared("clkgen_dmac_cpusys_aclk", "axi4_cpusys2_aclk", ap_base + 0x208, 8, &share_cnt_dmac_cpusys_clk_en);
- clks[CLKGEN_TIMER0_PCLK] = thead_clk_light_gate_shared("clkgen_timer0_pclk", "apb3_cpusys_pclk", ap_base + 0x208, 1, &share_cnt_timer0_clk_en);
- clks[CLKGEN_TIMER0_CCLK] = thead_clk_light_gate_shared("clkgen_timer0_cclk", "timer_cclk", ap_base + 0x208, 1, &share_cnt_timer0_clk_en);
- clks[CLKGEN_TIMER1_PCLK] = thead_clk_light_gate_shared("clkgen_timer1_pclk", "apb3_cpusys_pclk", ap_base + 0x208, 0, &share_cnt_timer1_clk_en);
- clks[CLKGEN_TIMER1_CCLK] = thead_clk_light_gate_shared("clkgen_timer1_cclk", "timer_cclk", ap_base + 0x208, 0, &share_cnt_timer1_clk_en);
- clks[CLKGEN_AXI4_CPUSYS2_PCLK] = thead_clk_light_gate_shared("clkgen_axi4_cpusys2_pclk", "apb3_cpusys_pclk", ap_base + 0x134, 5, &share_cnt_axi4_cpusys2_clk_en);
- clks[CLKGEN_AXI4_CPUSYS2_ACLK] = thead_clk_light_gate_shared("clkgen_axi4_cpusys2_aclk", "axi4_cpusys2_aclk", ap_base + 0x134, 5, &share_cnt_axi4_cpusys2_clk_en);
- clks[CLKGEN_BMU_C910_PCLK] = thead_clk_light_gate_shared("clkgen_bmu_c910_pclk", "apb3_cpusys_pclk", ap_base + 0x100, 5, &share_cnt_bmu_c910_clk_en);
- clks[CLKGEN_BMU_C910_ACLK] = thead_clk_light_gate_shared("clkgen_bmu_c910_aclk", "axi4_cpusys1_aclk", ap_base + 0x100, 5, &share_cnt_bmu_c910_clk_en);
- clks[CLKGEN_IOPMP_AON_PCLK] = thead_clk_light_gate_shared("clkgen_iopmp_aon_pclk", "apb3_cpusys_pclk", ap_base + 0x134, 8, &share_cnt_aon2cpu_a2x_clk_en);
- clks[CLKGEN_AON2CPU_A2X_ACLK] = thead_clk_light_gate_shared("clkgen_aon2cpu_a2x_aclk", "axi4_cpusys2_aclk", ap_base + 0x134, 8, &share_cnt_aon2cpu_a2x_clk_en);
- clks[CLKGEN_AON2CPU_A2X_HCLK] = thead_clk_light_gate_shared("clkgen_aon2cpu_a2x_hclk", "aonsys_bus_clk", ap_base + 0x134, 8, &share_cnt_aon2cpu_a2x_clk_en);
- clks[CLKGEN_IOPMP_CHIP_DBG_PCLK] = thead_clk_light_gate_shared("clkgen_iopmp_chip_dbg_pclk", "apb3_cpusys_pclk", ap_base + 0x208, 9, &share_cnt_chip_dbg_clk_en);
- clks[CLKGEN_CHIP_DBG_ACLK] = thead_clk_light_gate_shared("clkgen_chip_dbg_aclk", "axi4_cpusys2_aclk", ap_base + 0x208, 9, &share_cnt_chip_dbg_clk_en);
- clks[CLKGEN_CHIP_DBG_CCLK] = thead_clk_light_gate_shared("clkgen_chip_dbg_cclk", "chip_dbg_cclk", ap_base + 0x208, 9, &share_cnt_chip_dbg_clk_en);
- clks[CLKGEN_X2X_CPUSYS_ACLK_M] = thead_clk_light_gate_shared("clkgen_x2x_cpusys_aclk_m", "axi4_cpusys2_aclk", ap_base + 0x134, 7, &share_cnt_x2x_cpusys_clk_en);
- clks[CLKGEN_X2X_CPUSYS_ACLK_S] = thead_clk_light_gate_shared("clkgen_x2x_cpusys_aclk_s", "axi4_cpusys1_aclk", ap_base + 0x134, 7, &share_cnt_x2x_cpusys_clk_en);
- clks[CLKGEN_CPU2PERI_X2H_ACLK] = thead_clk_light_gate_shared("clkgen_cpu2peri_x2h_aclk", "axi4_cpusys1_aclk", ap_base + 0x140, 9, &share_cnt_cpu2peri_x2h_clk_en);
- clks[CLKGEN_CPU2PERI_X2H_MHCLK] = thead_clk_light_gate_shared("clkgen_cpu2peri_x2h_mhclk", "perisys_ahb_hclk", ap_base + 0x140, 9, &share_cnt_cpu2peri_x2h_clk_en);
- clks[CLKGEN_CPU2VI_X2H_ACLK] = thead_clk_light_gate_shared("clkgen_cpu2vi_x2h_aclk", "axi4_cpusys1_aclk", ap_base + 0x1d0, 21, &share_cnt_cpu2vi_x2h_clk_en);
- clks[CLKGEN_CPU2VI_X2H_MHCLK] = thead_clk_light_gate_shared("clkgen_cpu2vi_x2h_mhclk", "visys_ahb_hclk", ap_base + 0x1d0, 21, &share_cnt_cpu2vi_x2h_clk_en);
- clks[CLKGEN_CFG2TEE_X2H_ACLK] = thead_clk_light_gate_shared("clkgen_cfg2tee_x2h_aclk", "cfg_axi_aclk", ap_base + 0x1cc, 24, &share_cnt_cfg2tee_x2h_clk_en); // just for teesys!!!
- clks[CLKGEN_CFG2TEE_X2H_MHCLK] = thead_clk_light_gate_shared("clkgen_cfg2tee_x2h_mhclk", "teesys_hclk", ap_base + 0x1cc, 24, &share_cnt_cfg2tee_x2h_clk_en); // just for teesys!!!
- clks[CLKGEN_CPU2AON_X2H_ACLK] = thead_clk_light_gate_shared("clkgen_cpu2aon_x2h_aclk", "cfg_axi_aclk", ap_base + 0x138, 8, &share_cnt_cpu2aon_x2h_clk_en);
- clks[CLKGEN_CPU2AON_X2H_MHCLK] = thead_clk_light_gate_shared("clkgen_cpu2aon_x2h_mhclk", "aonsys_bus_clk", ap_base + 0x138, 8, &share_cnt_cpu2aon_x2h_clk_en);
- clks[CLKGEN_CPU2VP_X2P_ACLK] = thead_clk_light_gate_shared("clkgen_cpu2vp_x2p_aclk", "cfg_axi_aclk", ap_base + 0x1e0, 13, &share_cnt_cpu2vp_x2p_clk_en);
- clks[CLKGEN_CPU2VP_X2P_PCLK] = thead_clk_light_gate_shared("clkgen_cpu2vp_x2p_pclk", "vpsys_apb_pclk", ap_base + 0x1e0, 13, &share_cnt_cpu2vp_x2p_clk_en);
- clks[CLKGEN_TOP_AXI4S_ACLK] = thead_clk_light_gate_shared("clkgen_top_axi4s_aclk", "cfg_axi_aclk", ap_base + 0x1c8, 4, &share_cnt_npu_core_clk_en);
- clks[CLKGEN_TOP_APB_SX_PCLK] = thead_clk_light_gate_shared("clkgen_top_apb_sx_pclk", "cfg_apb_pclk", ap_base + 0x1c8, 4, &share_cnt_npu_core_clk_en);
- clks[CLKGEN_MISC2VP_X2X_ACLK_M] = thead_clk_light_gate_shared("clkgen_misc2vp_x2x_aclk_m", "perisys_ahb_hclk", ap_base + 0x1e0, 15, &share_cnt_vpsys_axi_aclk_en);
- clks[CLKGEN_VPSYS_ACLK] = thead_clk_light_gate_shared("clkgen_vpsys_aclk", "vpsys_axi_aclk", ap_base + 0x1e0, 15, &share_cnt_vpsys_axi_aclk_en);
- clks[CLKGEN_GMAC1_HCLK] = thead_clk_light_gate_shared("clkgen_gmac1_hclk", "perisys_ahb_hclk", ap_base + 0x204, 26, &share_cnt_gmac1_clk_en);
- clks[CLKGEN_GMAC1_PCLK] = thead_clk_light_gate_shared("clkgen_gmac1_pclk", "perisys_ahb_hclk", ap_base + 0x204, 26, &share_cnt_gmac1_clk_en);
- clks[CLKGEN_GMAC1_CCLK] = thead_clk_light_gate_shared("clkgen_gmac1_cclk", "gmac_cclk", ap_base + 0x204, 26, &share_cnt_gmac1_clk_en);
- clks[CLKGEN_GMAC0_HCLK] = thead_clk_light_gate_shared("clkgen_gmac0_hclk", "perisys_ahb_hclk", ap_base + 0x204, 19, &share_cnt_gmac0_clk_en);
- clks[CLKGEN_GMAC0_PCLK] = thead_clk_light_gate_shared("clkgen_gmac0_pclk", "perisys_ahb_hclk", ap_base + 0x204, 19, &share_cnt_gmac0_clk_en);
- clks[CLKGEN_GMAC0_CCLK] = thead_clk_light_gate_shared("clkgen_gmac0_cclk", "gmac_cclk", ap_base + 0x204, 19, &share_cnt_gmac0_clk_en);
- clks[CLKGEN_PERI2PERI1_APB_HCLK] = thead_clk_light_gate_shared("clkgen_peri2peri1_apb_hclk", "perisys_ahb_hclk", ap_base + 0x150, 11, &share_cnt_perisys_apb3_hclk_en);
- clks[CLKGEN_PERI2PERI1_APB_PCLK] = thead_clk_light_gate_shared("clkgen_peri2peri1_apb_pclk", "peri2sys_apb_pclk", ap_base + 0x150, 11, &share_cnt_perisys_apb3_hclk_en);
- clks[CLKGEN_QSPI0_PCLK] = thead_clk_light_gate_shared("clkgen_qspi0_pclk", "perisys_ahb_hclk", ap_base + 0x204, 17, &share_cnt_qspi0_clk_en);
- clks[CLKGEN_QSPI0_SSI_CLK] = thead_clk_light_gate_shared("clkgen_qspi0_ssi_clk", "qspi0_ssi_clk", ap_base + 0x204, 17, &share_cnt_qspi0_clk_en);
- clks[CLKGEN_GMAC_AXI_ACLK] = thead_clk_light_gate_shared("clkgen_gmac_axi_aclk", "perisys_ahb_hclk", ap_base + 0x204, 21, &share_cnt_gmac_axi_clk_en);
- clks[CLKGEN_GMAC_AXI_PCLK] = thead_clk_light_gate_shared("clkgen_gmac_axi_pclk", "perisys_ahb_hclk", ap_base + 0x204, 21, &share_cnt_gmac_axi_clk_en);
- clks[CLKGEN_GPIO0_PCLK] = thead_clk_light_gate_shared("clkgen_gpio0_pclk", "perisys_ahb_hclk", ap_base + 0x204, 8, &share_cnt_gpio0_clk_en);
- clks[CLKGEN_GPIO0_DBCLK] = thead_clk_light_gate_shared("clkgen_gpio0_dbclk", "gpio0_dbclk", ap_base + 0x204, 8, &share_cnt_gpio0_clk_en);
- clks[CLKGEN_GPIO1_PCLK] = thead_clk_light_gate_shared("clkgen_gpio1_pclk", "perisys_ahb_hclk", ap_base + 0x204, 7, &share_cnt_gpio0_clk_en);
- clks[CLKGEN_GPIO1_DBCLK] = thead_clk_light_gate_shared("clkgen_gpio1_dbclk", "gpio1_dbclk", ap_base + 0x204, 7, &share_cnt_gpio1_clk_en);
- clks[CLKGEN_PWM_PCLK] = thead_clk_light_gate_shared("clkgen_pwm_pclk", "perisys_apb_pclk", ap_base + 0x204, 18, &share_cnt_pwm_clk_en);
- clks[CLKGEN_PWM_CCLK] = thead_clk_light_gate_shared("clkgen_pwm_cclk", "pwm_cclk", ap_base + 0x204, 18, &share_cnt_pwm_clk_en);
- clks[CLKGEN_SPI_PCLK] = thead_clk_light_gate_shared("clkgen_spi_pclk", "perisys_apb_pclk", ap_base + 0x204, 15, &share_cnt_spi_clk_en);
- clks[CLKGEN_SPI_SSI_CLK] = thead_clk_light_gate_shared("clkgen_spi_ssi_clk", "spi_ssi_clk", ap_base + 0x204, 15, &share_cnt_spi_clk_en);
- clks[CLKGEN_UART0_PCLK] = thead_clk_light_gate_shared("clkgen_uart0_pclk", "perisys_apb_pclk", ap_base + 0x204, 14, &share_cnt_uart0_clk_en);
- clks[CLKGEN_UART0_SCLK] = thead_clk_light_gate_shared("clkgen_uart0_sclk", "uart_sclk", ap_base + 0x204, 14, &share_cnt_uart0_clk_en);
- clks[CLKGEN_UART2_PCLK] = thead_clk_light_gate_shared("clkgen_uart2_pclk", "perisys_apb_pclk", ap_base + 0x204, 12, &share_cnt_uart2_clk_en);
- clks[CLKGEN_UART2_SCLK] = thead_clk_light_gate_shared("clkgen_uart2_sclk", "uart_sclk", ap_base + 0x204, 12, &share_cnt_uart2_clk_en);
- clks[CLKGEN_I2C2_PCLK] = thead_clk_light_gate_shared("clkgen_i2c2_pclk", "perisys_apb_pclk", ap_base + 0x204, 3, &share_cnt_i2c2_clk_en);
- clks[CLKGEN_I2C2_IC_CLK] = thead_clk_light_gate_shared("clkgen_i2c2_ic_clk", "i2c_ic_clk", ap_base + 0x204, 3, &share_cnt_i2c2_clk_en);
- clks[CLKGEN_I2C3_PCLK] = thead_clk_light_gate_shared("clkgen_i2c3_pclk", "perisys_apb_pclk", ap_base + 0x204, 2, &share_cnt_i2c2_clk_en);
- clks[CLKGEN_I2C3_IC_CLK] = thead_clk_light_gate_shared("clkgen_i2c3_ic_clk", "i2c_ic_clk", ap_base + 0x204, 2, &share_cnt_i2c2_clk_en);
- clks[CLKGEN_I2S_PCLK] = thead_clk_light_gate_shared("clkgen_i2s_pclk", "perisys_apb_pclk", ap_base + 0x1f0, 1, &share_cnt_peri_i2s_clk_en);
- clks[CLKGEN_I2S_SRC_CLK] = thead_clk_light_gate_shared("clkgen_i2s_src_clk", "peri_i2s_src_clk", ap_base + 0x1f0, 1, &share_cnt_peri_i2s_clk_en);
- clks[CLKGEN_QSPI1_PCLK] = thead_clk_light_gate_shared("clkgen_qspi1_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 16, &share_cnt_qspi1_clk_en);
- clks[CLKGEN_QSPI1_SSI_CLK] = thead_clk_light_gate_shared("clkgen_qspi1_ssi_clk", "qspi1_ssi_clk", ap_base + 0x204, 16, &share_cnt_qspi1_clk_en);
- clks[CLKGEN_UART1_PCLK] = thead_clk_light_gate_shared("clkgen_uart1_pclk", "per2sys_apb_pclk", ap_base + 0x204, 13, &share_cnt_uart1_clk_en);
- clks[CLKGEN_UART1_SCLK] = thead_clk_light_gate_shared("clkgen_uart1_sclk", "uart_sclk", ap_base + 0x204, 13, &share_cnt_uart1_clk_en);
- clks[CLKGEN_UART3_PCLK] = thead_clk_light_gate_shared("clkgen_uart3_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 11, &share_cnt_uart3_clk_en);
- clks[CLKGEN_UART3_SCLK] = thead_clk_light_gate_shared("clkgen_uart3_sclk", "uart_sclk", ap_base + 0x204, 11, &share_cnt_uart3_clk_en);
- clks[CLKGEN_UART4_PCLK] = thead_clk_light_gate_shared("clkgen_uart4_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 10, &share_cnt_uart4_clk_en);
- clks[CLKGEN_UART4_SCLK] = thead_clk_light_gate_shared("clkgen_uart4_sclk", "uart_sclk", ap_base + 0x204, 10, &share_cnt_uart4_clk_en);
- clks[CLKGEN_UART5_PCLK] = thead_clk_light_gate_shared("clkgen_uart5_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 9, &share_cnt_uart5_clk_en);
- clks[CLKGEN_UART5_SCLK] = thead_clk_light_gate_shared("clkgen_uart5_sclk", "uart_sclk", ap_base + 0x204, 9, &share_cnt_uart5_clk_en);
- clks[CLKGEN_I2C0_PCLK] = thead_clk_light_gate_shared("clkgen_i2c0_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 5, &share_cnt_i2c0_clk_en);
- clks[CLKGEN_I2C0_IC_CLK] = thead_clk_light_gate_shared("clkgen_i2c0_ic_clk", "i2c_ic_clk", ap_base + 0x204, 5, &share_cnt_i2c0_clk_en);
- clks[CLKGEN_I2C1_PCLK] = thead_clk_light_gate_shared("clkgen_i2c1_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 4, &share_cnt_i2c1_clk_en);
- clks[CLKGEN_I2C1_IC_CLK] = thead_clk_light_gate_shared("clkgen_i2c1_ic_clk", "i2c_ic_clk", ap_base + 0x204, 4, &share_cnt_i2c1_clk_en);
- clks[CLKGEN_I2C4_PCLK] = thead_clk_light_gate_shared("clkgen_i2c4_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 1, &share_cnt_i2c4_clk_en);
- clks[CLKGEN_I2C4_IC_CLK] = thead_clk_light_gate_shared("clkgen_i2c4_ic_clk", "i2c_ic_clk", ap_base + 0x204, 1, &share_cnt_i2c4_clk_en);
- clks[CLKGEN_I2C5_PCLK] = thead_clk_light_gate_shared("clkgen_i2c5_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 0, &share_cnt_i2c5_clk_en);
- clks[CLKGEN_I2C5_IC_CLK] = thead_clk_light_gate_shared("clkgen_i2c5_ic_clk", "i2c_ic_clk", ap_base + 0x204, 0, &share_cnt_i2c5_clk_en);
- clks[CLKGEN_GPIO2_PCLK] = thead_clk_light_gate_shared("clkgen_gpio2_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 6, &share_cnt_gpio2_clk_en);
- clks[CLKGEN_GPIO2_DBCLK] = thead_clk_light_gate_shared("clkgen_gpio2_dbclk", "gpio2_dbclk", ap_base + 0x204, 6, &share_cnt_gpio2_clk_en);
- clks[CLKGEN_GPIO3_PCLK] = thead_clk_light_gate_shared("clkgen_gpio3_pclk", "peri2sys_apb_pclk", ap_base + 0x204, 6, &share_cnt_gpio2_clk_en); //!!! gpio3 pclk is controlled by gpio2_clk_en
- clks[CLKGEN_GPIO3_DBCLK] = thead_clk_light_gate_shared("clkgen_gpio3_dbclk", "gpio3_dbclk", ap_base + 0x204, 20, &share_cnt_gpio3_clk_en);
- clks[CLKGEN_VOSYS_AXI_ACLK] = thead_clk_light_gate_shared("clkgen_vosys_axi_aclk", "vosys_aclk_m", ap_base + 0x1dc, 5, &share_cnt_vosys_axi_aclk_en);
- clks[CLKGEN_VOSYS_X2X_ACLK_S] = thead_clk_light_gate_shared("clkgen_vosys_x2x_aclk_s", "npu_cclk", ap_base + 0x1dc, 5, &share_cnt_vosys_axi_aclk_en);
- clk_data.clks = clks;
- clk_data.clk_num = ARRAY_SIZE(clks);
- ret = of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
- if (ret < 0) {
- dev_err(dev, "failed to register clks for light\n");
- goto unregister_clks;
- }
- #ifndef FPGA_EMU
- /* HW defalut */
- clk_prepare_enable(clks[CPU_PLL1_FOUTPOSTDIV]);
- udelay(1);
- clk_set_parent(clks[C910_CCLK], clks[CPU_PLL1_FOUTPOSTDIV]);
- #else
- clk_set_parent(clks[C910_CCLK_I0], clks[OSC_24M]);
- clk_set_parent(clks[C910_CCLK], clks[C910_CCLK_I0]);
- #endif
- dev_info(dev, "succeed to register light fullmask clock driver\n");
- return 0;
- unregister_clks:
- thead_unregister_clocks(clks, ARRAY_SIZE(clks));
- return ret;
- }
- const bool tee_sys_flag;
- static const struct of_device_id light_clk_of_match[] = {
- { .compatible = "thead,light-fm-ree-clk" },
- { .compatible = "thead,light-fm-tee-clk", .data = &tee_sys_flag,},
- { /* Sentinel */ },
- };
- MODULE_DEVICE_TABLE(of, light_clk_of_match);
- static struct platform_driver light_clk_driver = {
- .probe = light_clocks_probe,
- .driver = {
- .name = "light-fm-clk",
- .of_match_table = of_match_ptr(light_clk_of_match),
- },
- };
- module_platform_driver(light_clk_driver);
- MODULE_AUTHOR("wei.liu <lw312886@linux.alibaba.com>");
- MODULE_DESCRIPTION("Thead Light Fullmask clock driver");
- MODULE_LICENSE("GPL v2");
|