18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2014-2015 Freescale Semiconductor, Inc. 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include <dt-bindings/clock/imx7d-clock.h> 78c2ecf20Sopenharmony_ci#include <linux/bits.h> 88c2ecf20Sopenharmony_ci#include <linux/clk.h> 98c2ecf20Sopenharmony_ci#include <linux/clkdev.h> 108c2ecf20Sopenharmony_ci#include <linux/clk-provider.h> 118c2ecf20Sopenharmony_ci#include <linux/err.h> 128c2ecf20Sopenharmony_ci#include <linux/init.h> 138c2ecf20Sopenharmony_ci#include <linux/io.h> 148c2ecf20Sopenharmony_ci#include <linux/of.h> 158c2ecf20Sopenharmony_ci#include <linux/of_address.h> 168c2ecf20Sopenharmony_ci#include <linux/of_irq.h> 178c2ecf20Sopenharmony_ci#include <linux/types.h> 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#include "clk.h" 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_cistatic u32 share_count_sai1; 228c2ecf20Sopenharmony_cistatic u32 share_count_sai2; 238c2ecf20Sopenharmony_cistatic u32 share_count_sai3; 248c2ecf20Sopenharmony_cistatic u32 share_count_nand; 258c2ecf20Sopenharmony_cistatic u32 share_count_enet1; 268c2ecf20Sopenharmony_cistatic u32 share_count_enet2; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistatic const struct clk_div_table test_div_table[] = { 298c2ecf20Sopenharmony_ci { .val = 3, .div = 1, }, 308c2ecf20Sopenharmony_ci { .val = 2, .div = 1, }, 318c2ecf20Sopenharmony_ci { .val = 1, .div = 2, }, 328c2ecf20Sopenharmony_ci { .val = 0, .div = 4, }, 338c2ecf20Sopenharmony_ci { } 348c2ecf20Sopenharmony_ci}; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_cistatic const struct clk_div_table post_div_table[] = { 378c2ecf20Sopenharmony_ci { .val = 3, .div = 4, }, 388c2ecf20Sopenharmony_ci { .val = 2, .div = 1, }, 398c2ecf20Sopenharmony_ci { .val = 1, .div = 2, }, 408c2ecf20Sopenharmony_ci { .val = 0, .div = 1, }, 418c2ecf20Sopenharmony_ci { } 428c2ecf20Sopenharmony_ci}; 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_cistatic const char *arm_a7_sel[] = { "osc", "pll_arm_main_clk", 458c2ecf20Sopenharmony_ci "pll_enet_500m_clk", "pll_dram_main_clk", 468c2ecf20Sopenharmony_ci "pll_sys_main_clk", "pll_sys_pfd0_392m_clk", "pll_audio_post_div", 478c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_cistatic const char *arm_m4_sel[] = { "osc", "pll_sys_main_240m_clk", 508c2ecf20Sopenharmony_ci "pll_enet_250m_clk", "pll_sys_pfd2_270m_clk", 518c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_audio_post_div", "pll_video_post_div", 528c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_cistatic const char *axi_sel[] = { "osc", "pll_sys_pfd1_332m_clk", 558c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_enet_250m_clk", "pll_sys_pfd5_clk", 568c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_video_post_div", "pll_sys_pfd7_clk", }; 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_cistatic const char *disp_axi_sel[] = { "osc", "pll_sys_pfd1_332m_clk", 598c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_enet_250m_clk", "pll_sys_pfd6_clk", 608c2ecf20Sopenharmony_ci "pll_sys_pfd7_clk", "pll_audio_post_div", "pll_video_post_div", }; 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_cistatic const char *enet_axi_sel[] = { "osc", "pll_sys_pfd2_270m_clk", 638c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_enet_250m_clk", 648c2ecf20Sopenharmony_ci "pll_sys_main_240m_clk", "pll_audio_post_div", "pll_video_post_div", 658c2ecf20Sopenharmony_ci "pll_sys_pfd4_clk", }; 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_cistatic const char *nand_usdhc_bus_sel[] = { "osc", "pll_sys_pfd2_270m_clk", 688c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_sys_main_240m_clk", 698c2ecf20Sopenharmony_ci "pll_sys_pfd2_135m_clk", "pll_sys_pfd6_clk", "pll_enet_250m_clk", 708c2ecf20Sopenharmony_ci "pll_audio_post_div", }; 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_cistatic const char *ahb_channel_sel[] = { "osc", "pll_sys_pfd2_270m_clk", 738c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_sys_pfd0_392m_clk", 748c2ecf20Sopenharmony_ci "pll_enet_250m_clk", "pll_usb_main_clk", "pll_audio_post_div", 758c2ecf20Sopenharmony_ci "pll_video_post_div", }; 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_cistatic const char *dram_phym_sel[] = { "pll_dram_main_clk", 788c2ecf20Sopenharmony_ci "dram_phym_alt_clk", }; 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_cistatic const char *dram_sel[] = { "pll_dram_main_clk", 818c2ecf20Sopenharmony_ci "dram_alt_root_clk", }; 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_cistatic const char *dram_phym_alt_sel[] = { "osc", "pll_dram_533m_clk", 848c2ecf20Sopenharmony_ci "pll_sys_main_clk", "pll_enet_500m_clk", 858c2ecf20Sopenharmony_ci "pll_usb_main_clk", "pll_sys_pfd7_clk", "pll_audio_post_div", 868c2ecf20Sopenharmony_ci "pll_video_post_div", }; 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_cistatic const char *dram_alt_sel[] = { "osc", "pll_dram_533m_clk", 898c2ecf20Sopenharmony_ci "pll_sys_main_clk", "pll_enet_500m_clk", 908c2ecf20Sopenharmony_ci "pll_enet_250m_clk", "pll_sys_pfd0_392m_clk", 918c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_sys_pfd2_270m_clk", }; 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_cistatic const char *usb_hsic_sel[] = { "osc", "pll_sys_main_clk", 948c2ecf20Sopenharmony_ci "pll_usb_main_clk", "pll_sys_pfd3_clk", "pll_sys_pfd4_clk", 958c2ecf20Sopenharmony_ci "pll_sys_pfd5_clk", "pll_sys_pfd6_clk", "pll_sys_pfd7_clk", }; 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_cistatic const char *pcie_ctrl_sel[] = { "osc", "pll_enet_250m_clk", 988c2ecf20Sopenharmony_ci "pll_sys_main_240m_clk", "pll_sys_pfd2_270m_clk", 998c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_enet_500m_clk", 1008c2ecf20Sopenharmony_ci "pll_sys_pfd1_332m_clk", "pll_sys_pfd6_clk", }; 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_cistatic const char *pcie_phy_sel[] = { "osc", "pll_enet_100m_clk", 1038c2ecf20Sopenharmony_ci "pll_enet_500m_clk", "ext_clk_1", "ext_clk_2", "ext_clk_3", 1048c2ecf20Sopenharmony_ci "ext_clk_4", "pll_sys_pfd0_392m_clk", }; 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_cistatic const char *epdc_pixel_sel[] = { "osc", "pll_sys_pfd1_332m_clk", 1078c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_sys_main_clk", "pll_sys_pfd5_clk", 1088c2ecf20Sopenharmony_ci "pll_sys_pfd6_clk", "pll_sys_pfd7_clk", "pll_video_post_div", }; 1098c2ecf20Sopenharmony_ci 1108c2ecf20Sopenharmony_cistatic const char *lcdif_pixel_sel[] = { "osc", "pll_sys_pfd5_clk", 1118c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "ext_clk_3", "pll_sys_pfd4_clk", 1128c2ecf20Sopenharmony_ci "pll_sys_pfd2_270m_clk", "pll_video_post_div", 1138c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_cistatic const char *mipi_dsi_sel[] = { "osc", "pll_sys_pfd5_clk", 1168c2ecf20Sopenharmony_ci "pll_sys_pfd3_clk", "pll_sys_main_clk", "pll_sys_pfd0_196m_clk", 1178c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_video_post_div", "pll_audio_post_div", }; 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_cistatic const char *mipi_csi_sel[] = { "osc", "pll_sys_pfd4_clk", 1208c2ecf20Sopenharmony_ci "pll_sys_pfd3_clk", "pll_sys_main_clk", "pll_sys_pfd0_196m_clk", 1218c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_video_post_div", "pll_audio_post_div", }; 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_cistatic const char *mipi_dphy_sel[] = { "osc", "pll_sys_main_120m_clk", 1248c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_sys_pfd5_clk", "ref_1m_clk", "ext_clk_2", 1258c2ecf20Sopenharmony_ci "pll_video_post_div", "ext_clk_3", }; 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_cistatic const char *sai1_sel[] = { "osc", "pll_sys_pfd2_135m_clk", 1288c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_dram_533m_clk", "pll_video_post_div", 1298c2ecf20Sopenharmony_ci "pll_sys_pfd4_clk", "pll_enet_125m_clk", "ext_clk_2", }; 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_cistatic const char *sai2_sel[] = { "osc", "pll_sys_pfd2_135m_clk", 1328c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_dram_533m_clk", "pll_video_post_div", 1338c2ecf20Sopenharmony_ci "pll_sys_pfd4_clk", "pll_enet_125m_clk", "ext_clk_2", }; 1348c2ecf20Sopenharmony_ci 1358c2ecf20Sopenharmony_cistatic const char *sai3_sel[] = { "osc", "pll_sys_pfd2_135m_clk", 1368c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_dram_533m_clk", "pll_video_post_div", 1378c2ecf20Sopenharmony_ci "pll_sys_pfd4_clk", "pll_enet_125m_clk", "ext_clk_3", }; 1388c2ecf20Sopenharmony_ci 1398c2ecf20Sopenharmony_cistatic const char *spdif_sel[] = { "osc", "pll_sys_pfd2_135m_clk", 1408c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_dram_533m_clk", "pll_video_post_div", 1418c2ecf20Sopenharmony_ci "pll_sys_pfd4_clk", "pll_enet_125m_clk", "ext_3_clk", }; 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_cistatic const char *enet1_ref_sel[] = { "osc", "pll_enet_125m_clk", 1448c2ecf20Sopenharmony_ci "pll_enet_50m_clk", "pll_enet_25m_clk", 1458c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_audio_post_div", "pll_video_post_div", 1468c2ecf20Sopenharmony_ci "ext_clk_4", }; 1478c2ecf20Sopenharmony_ci 1488c2ecf20Sopenharmony_cistatic const char *enet1_time_sel[] = { "osc", "pll_enet_100m_clk", 1498c2ecf20Sopenharmony_ci "pll_audio_post_div", "ext_clk_1", "ext_clk_2", "ext_clk_3", 1508c2ecf20Sopenharmony_ci "ext_clk_4", "pll_video_post_div", }; 1518c2ecf20Sopenharmony_ci 1528c2ecf20Sopenharmony_cistatic const char *enet2_ref_sel[] = { "osc", "pll_enet_125m_clk", 1538c2ecf20Sopenharmony_ci "pll_enet_50m_clk", "pll_enet_25m_clk", 1548c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_audio_post_div", "pll_video_post_div", 1558c2ecf20Sopenharmony_ci "ext_clk_4", }; 1568c2ecf20Sopenharmony_ci 1578c2ecf20Sopenharmony_cistatic const char *enet2_time_sel[] = { "osc", "pll_enet_100m_clk", 1588c2ecf20Sopenharmony_ci "pll_audio_post_div", "ext_clk_1", "ext_clk_2", "ext_clk_3", 1598c2ecf20Sopenharmony_ci "ext_clk_4", "pll_video_post_div", }; 1608c2ecf20Sopenharmony_ci 1618c2ecf20Sopenharmony_cistatic const char *enet_phy_ref_sel[] = { "osc", "pll_enet_25m_clk", 1628c2ecf20Sopenharmony_ci "pll_enet_50m_clk", "pll_enet_125m_clk", 1638c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_audio_post_div", "pll_video_post_div", 1648c2ecf20Sopenharmony_ci "pll_sys_pfd3_clk", }; 1658c2ecf20Sopenharmony_ci 1668c2ecf20Sopenharmony_cistatic const char *eim_sel[] = { "osc", "pll_sys_pfd2_135m_clk", 1678c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_dram_533m_clk", 1688c2ecf20Sopenharmony_ci "pll_sys_pfd2_270m_clk", "pll_sys_pfd3_clk", "pll_enet_125m_clk", 1698c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 1708c2ecf20Sopenharmony_ci 1718c2ecf20Sopenharmony_cistatic const char *nand_sel[] = { "osc", "pll_sys_main_clk", 1728c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_sys_pfd0_392m_clk", "pll_sys_pfd3_clk", 1738c2ecf20Sopenharmony_ci "pll_enet_500m_clk", "pll_enet_250m_clk", 1748c2ecf20Sopenharmony_ci "pll_video_post_div", }; 1758c2ecf20Sopenharmony_ci 1768c2ecf20Sopenharmony_cistatic const char *qspi_sel[] = { "osc", "pll_sys_pfd4_clk", 1778c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_enet_500m_clk", "pll_sys_pfd3_clk", 1788c2ecf20Sopenharmony_ci "pll_sys_pfd2_270m_clk", "pll_sys_pfd6_clk", "pll_sys_pfd7_clk", }; 1798c2ecf20Sopenharmony_ci 1808c2ecf20Sopenharmony_cistatic const char *usdhc1_sel[] = { "osc", "pll_sys_pfd0_392m_clk", 1818c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_enet_500m_clk", "pll_sys_pfd4_clk", 1828c2ecf20Sopenharmony_ci "pll_sys_pfd2_270m_clk", "pll_sys_pfd6_clk", "pll_sys_pfd7_clk", }; 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_cistatic const char *usdhc2_sel[] = { "osc", "pll_sys_pfd0_392m_clk", 1858c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_enet_500m_clk", "pll_sys_pfd4_clk", 1868c2ecf20Sopenharmony_ci "pll_sys_pfd2_270m_clk", "pll_sys_pfd6_clk", "pll_sys_pfd7_clk", }; 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_cistatic const char *usdhc3_sel[] = { "osc", "pll_sys_pfd0_392m_clk", 1898c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_enet_500m_clk", "pll_sys_pfd4_clk", 1908c2ecf20Sopenharmony_ci "pll_sys_pfd2_270m_clk", "pll_sys_pfd6_clk", "pll_sys_pfd7_clk", }; 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_cistatic const char *can1_sel[] = { "osc", "pll_sys_main_120m_clk", 1938c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_sys_main_clk", 1948c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_usb_main_clk", "ext_clk_1", 1958c2ecf20Sopenharmony_ci "ext_clk_4", }; 1968c2ecf20Sopenharmony_ci 1978c2ecf20Sopenharmony_cistatic const char *can2_sel[] = { "osc", "pll_sys_main_120m_clk", 1988c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_sys_main_clk", 1998c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_usb_main_clk", "ext_clk_1", 2008c2ecf20Sopenharmony_ci "ext_clk_3", }; 2018c2ecf20Sopenharmony_ci 2028c2ecf20Sopenharmony_cistatic const char *i2c1_sel[] = { "osc", "pll_sys_main_120m_clk", 2038c2ecf20Sopenharmony_ci "pll_enet_50m_clk", "pll_dram_533m_clk", 2048c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_video_post_div", "pll_usb_main_clk", 2058c2ecf20Sopenharmony_ci "pll_sys_pfd2_135m_clk", }; 2068c2ecf20Sopenharmony_ci 2078c2ecf20Sopenharmony_cistatic const char *i2c2_sel[] = { "osc", "pll_sys_main_120m_clk", 2088c2ecf20Sopenharmony_ci "pll_enet_50m_clk", "pll_dram_533m_clk", 2098c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_video_post_div", "pll_usb_main_clk", 2108c2ecf20Sopenharmony_ci "pll_sys_pfd2_135m_clk", }; 2118c2ecf20Sopenharmony_ci 2128c2ecf20Sopenharmony_cistatic const char *i2c3_sel[] = { "osc", "pll_sys_main_120m_clk", 2138c2ecf20Sopenharmony_ci "pll_enet_50m_clk", "pll_dram_533m_clk", 2148c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_video_post_div", "pll_usb_main_clk", 2158c2ecf20Sopenharmony_ci "pll_sys_pfd2_135m_clk", }; 2168c2ecf20Sopenharmony_ci 2178c2ecf20Sopenharmony_cistatic const char *i2c4_sel[] = { "osc", "pll_sys_main_120m_clk", 2188c2ecf20Sopenharmony_ci "pll_enet_50m_clk", "pll_dram_533m_clk", 2198c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_video_post_div", "pll_usb_main_clk", 2208c2ecf20Sopenharmony_ci "pll_sys_pfd2_135m_clk", }; 2218c2ecf20Sopenharmony_ci 2228c2ecf20Sopenharmony_cistatic const char *uart1_sel[] = { "osc", "pll_sys_main_240m_clk", 2238c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_enet_100m_clk", 2248c2ecf20Sopenharmony_ci "pll_sys_main_clk", "ext_clk_2", "ext_clk_4", 2258c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 2268c2ecf20Sopenharmony_ci 2278c2ecf20Sopenharmony_cistatic const char *uart2_sel[] = { "osc", "pll_sys_main_240m_clk", 2288c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_enet_100m_clk", 2298c2ecf20Sopenharmony_ci "pll_sys_main_clk", "ext_clk_2", "ext_clk_3", 2308c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 2318c2ecf20Sopenharmony_ci 2328c2ecf20Sopenharmony_cistatic const char *uart3_sel[] = { "osc", "pll_sys_main_240m_clk", 2338c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_enet_100m_clk", 2348c2ecf20Sopenharmony_ci "pll_sys_main_clk", "ext_clk_2", "ext_clk_4", 2358c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 2368c2ecf20Sopenharmony_ci 2378c2ecf20Sopenharmony_cistatic const char *uart4_sel[] = { "osc", "pll_sys_main_240m_clk", 2388c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_enet_100m_clk", 2398c2ecf20Sopenharmony_ci "pll_sys_main_clk", "ext_clk_2", "ext_clk_3", 2408c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 2418c2ecf20Sopenharmony_ci 2428c2ecf20Sopenharmony_cistatic const char *uart5_sel[] = { "osc", "pll_sys_main_240m_clk", 2438c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_enet_100m_clk", 2448c2ecf20Sopenharmony_ci "pll_sys_main_clk", "ext_clk_2", "ext_clk_4", 2458c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 2468c2ecf20Sopenharmony_ci 2478c2ecf20Sopenharmony_cistatic const char *uart6_sel[] = { "osc", "pll_sys_main_240m_clk", 2488c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_enet_100m_clk", 2498c2ecf20Sopenharmony_ci "pll_sys_main_clk", "ext_clk_2", "ext_clk_3", 2508c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 2518c2ecf20Sopenharmony_ci 2528c2ecf20Sopenharmony_cistatic const char *uart7_sel[] = { "osc", "pll_sys_main_240m_clk", 2538c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_enet_100m_clk", 2548c2ecf20Sopenharmony_ci "pll_sys_main_clk", "ext_clk_2", "ext_clk_4", 2558c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 2568c2ecf20Sopenharmony_ci 2578c2ecf20Sopenharmony_cistatic const char *ecspi1_sel[] = { "osc", "pll_sys_main_240m_clk", 2588c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_sys_main_120m_clk", 2598c2ecf20Sopenharmony_ci "pll_sys_main_clk", "pll_sys_pfd4_clk", "pll_enet_250m_clk", 2608c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 2618c2ecf20Sopenharmony_ci 2628c2ecf20Sopenharmony_cistatic const char *ecspi2_sel[] = { "osc", "pll_sys_main_240m_clk", 2638c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_sys_main_120m_clk", 2648c2ecf20Sopenharmony_ci "pll_sys_main_clk", "pll_sys_pfd4_clk", "pll_enet_250m_clk", 2658c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_cistatic const char *ecspi3_sel[] = { "osc", "pll_sys_main_240m_clk", 2688c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_sys_main_120m_clk", 2698c2ecf20Sopenharmony_ci "pll_sys_main_clk", "pll_sys_pfd4_clk", "pll_enet_250m_clk", 2708c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 2718c2ecf20Sopenharmony_ci 2728c2ecf20Sopenharmony_cistatic const char *ecspi4_sel[] = { "osc", "pll_sys_main_240m_clk", 2738c2ecf20Sopenharmony_ci "pll_enet_40m_clk", "pll_sys_main_120m_clk", 2748c2ecf20Sopenharmony_ci "pll_sys_main_clk", "pll_sys_pfd4_clk", "pll_enet_250m_clk", 2758c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 2768c2ecf20Sopenharmony_ci 2778c2ecf20Sopenharmony_cistatic const char *pwm1_sel[] = { "osc", "pll_enet_100m_clk", 2788c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_enet_40m_clk", "pll_audio_post_div", 2798c2ecf20Sopenharmony_ci "ext_clk_1", "ref_1m_clk", "pll_video_post_div", }; 2808c2ecf20Sopenharmony_ci 2818c2ecf20Sopenharmony_cistatic const char *pwm2_sel[] = { "osc", "pll_enet_100m_clk", 2828c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_enet_40m_clk", "pll_audio_post_div", 2838c2ecf20Sopenharmony_ci "ext_clk_1", "ref_1m_clk", "pll_video_post_div", }; 2848c2ecf20Sopenharmony_ci 2858c2ecf20Sopenharmony_cistatic const char *pwm3_sel[] = { "osc", "pll_enet_100m_clk", 2868c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_enet_40m_clk", "pll_audio_post_div", 2878c2ecf20Sopenharmony_ci "ext_clk_2", "ref_1m_clk", "pll_video_post_div", }; 2888c2ecf20Sopenharmony_ci 2898c2ecf20Sopenharmony_cistatic const char *pwm4_sel[] = { "osc", "pll_enet_100m_clk", 2908c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_enet_40m_clk", "pll_audio_post_div", 2918c2ecf20Sopenharmony_ci "ext_clk_2", "ref_1m_clk", "pll_video_post_div", }; 2928c2ecf20Sopenharmony_ci 2938c2ecf20Sopenharmony_cistatic const char *flextimer1_sel[] = { "osc", "pll_enet_100m_clk", 2948c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_enet_40m_clk", "pll_audio_post_div", 2958c2ecf20Sopenharmony_ci "ext_clk_3", "ref_1m_clk", "pll_video_post_div", }; 2968c2ecf20Sopenharmony_ci 2978c2ecf20Sopenharmony_cistatic const char *flextimer2_sel[] = { "osc", "pll_enet_100m_clk", 2988c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_enet_40m_clk", "pll_audio_post_div", 2998c2ecf20Sopenharmony_ci "ext_clk_3", "ref_1m_clk", "pll_video_post_div", }; 3008c2ecf20Sopenharmony_ci 3018c2ecf20Sopenharmony_cistatic const char *sim1_sel[] = { "osc", "pll_sys_pfd2_135m_clk", 3028c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_dram_533m_clk", 3038c2ecf20Sopenharmony_ci "pll_usb_main_clk", "pll_audio_post_div", "pll_enet_125m_clk", 3048c2ecf20Sopenharmony_ci "pll_sys_pfd7_clk", }; 3058c2ecf20Sopenharmony_ci 3068c2ecf20Sopenharmony_cistatic const char *sim2_sel[] = { "osc", "pll_sys_pfd2_135m_clk", 3078c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_dram_533m_clk", 3088c2ecf20Sopenharmony_ci "pll_usb_main_clk", "pll_video_post_div", "pll_enet_125m_clk", 3098c2ecf20Sopenharmony_ci "pll_sys_pfd7_clk", }; 3108c2ecf20Sopenharmony_ci 3118c2ecf20Sopenharmony_cistatic const char *gpt1_sel[] = { "osc", "pll_enet_100m_clk", 3128c2ecf20Sopenharmony_ci "pll_sys_pfd0_392m_clk", "pll_enet_40m_clk", "pll_video_post_div", 3138c2ecf20Sopenharmony_ci "ref_1m_clk", "pll_audio_post_div", "ext_clk_1", }; 3148c2ecf20Sopenharmony_ci 3158c2ecf20Sopenharmony_cistatic const char *gpt2_sel[] = { "osc", "pll_enet_100m_clk", 3168c2ecf20Sopenharmony_ci "pll_sys_pfd0_392m_clk", "pll_enet_40m_clk", "pll_video_post_div", 3178c2ecf20Sopenharmony_ci "ref_1m_clk", "pll_audio_post_div", "ext_clk_2", }; 3188c2ecf20Sopenharmony_ci 3198c2ecf20Sopenharmony_cistatic const char *gpt3_sel[] = { "osc", "pll_enet_100m_clk", 3208c2ecf20Sopenharmony_ci "pll_sys_pfd0_392m_clk", "pll_enet_40m_clk", "pll_video_post_div", 3218c2ecf20Sopenharmony_ci "ref_1m_clk", "pll_audio_post_div", "ext_clk_3", }; 3228c2ecf20Sopenharmony_ci 3238c2ecf20Sopenharmony_cistatic const char *gpt4_sel[] = { "osc", "pll_enet_100m_clk", 3248c2ecf20Sopenharmony_ci "pll_sys_pfd0_392m_clk", "pll_enet_40m_clk", "pll_video_post_div", 3258c2ecf20Sopenharmony_ci "ref_1m_clk", "pll_audio_post_div", "ext_clk_4", }; 3268c2ecf20Sopenharmony_ci 3278c2ecf20Sopenharmony_cistatic const char *trace_sel[] = { "osc", "pll_sys_pfd2_135m_clk", 3288c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_dram_533m_clk", 3298c2ecf20Sopenharmony_ci "pll_enet_125m_clk", "pll_usb_main_clk", "ext_clk_2", 3308c2ecf20Sopenharmony_ci "ext_clk_3", }; 3318c2ecf20Sopenharmony_ci 3328c2ecf20Sopenharmony_cistatic const char *wdog_sel[] = { "osc", "pll_sys_pfd2_135m_clk", 3338c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_dram_533m_clk", 3348c2ecf20Sopenharmony_ci "pll_enet_125m_clk", "pll_usb_main_clk", "ref_1m_clk", 3358c2ecf20Sopenharmony_ci "pll_sys_pfd1_166m_clk", }; 3368c2ecf20Sopenharmony_ci 3378c2ecf20Sopenharmony_cistatic const char *csi_mclk_sel[] = { "osc", "pll_sys_pfd2_135m_clk", 3388c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_dram_533m_clk", 3398c2ecf20Sopenharmony_ci "pll_enet_125m_clk", "pll_audio_post_div", "pll_video_post_div", 3408c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 3418c2ecf20Sopenharmony_ci 3428c2ecf20Sopenharmony_cistatic const char *audio_mclk_sel[] = { "osc", "pll_sys_pfd2_135m_clk", 3438c2ecf20Sopenharmony_ci "pll_sys_main_120m_clk", "pll_dram_533m_clk", 3448c2ecf20Sopenharmony_ci "pll_enet_125m_clk", "pll_audio_post_div", "pll_video_post_div", 3458c2ecf20Sopenharmony_ci "pll_usb_main_clk", }; 3468c2ecf20Sopenharmony_ci 3478c2ecf20Sopenharmony_cistatic const char *wrclk_sel[] = { "osc", "pll_enet_40m_clk", 3488c2ecf20Sopenharmony_ci "pll_dram_533m_clk", "pll_usb_main_clk", 3498c2ecf20Sopenharmony_ci "pll_sys_main_240m_clk", "pll_sys_pfd2_270m_clk", 3508c2ecf20Sopenharmony_ci "pll_enet_500m_clk", "pll_sys_pfd7_clk", }; 3518c2ecf20Sopenharmony_ci 3528c2ecf20Sopenharmony_cistatic const char *clko1_sel[] = { "osc", "pll_sys_main_clk", 3538c2ecf20Sopenharmony_ci "pll_sys_main_240m_clk", "pll_sys_pfd0_196m_clk", "pll_sys_pfd3_clk", 3548c2ecf20Sopenharmony_ci "pll_enet_500m_clk", "pll_dram_533m_clk", "ref_1m_clk", }; 3558c2ecf20Sopenharmony_ci 3568c2ecf20Sopenharmony_cistatic const char *clko2_sel[] = { "osc", "pll_sys_main_240m_clk", 3578c2ecf20Sopenharmony_ci "pll_sys_pfd0_392m_clk", "pll_sys_pfd1_166m_clk", "pll_sys_pfd4_clk", 3588c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_video_post_div", "ckil", }; 3598c2ecf20Sopenharmony_ci 3608c2ecf20Sopenharmony_cistatic const char *lvds1_sel[] = { "pll_arm_main_clk", 3618c2ecf20Sopenharmony_ci "pll_sys_main_clk", "pll_sys_pfd0_392m_clk", "pll_sys_pfd1_332m_clk", 3628c2ecf20Sopenharmony_ci "pll_sys_pfd2_270m_clk", "pll_sys_pfd3_clk", "pll_sys_pfd4_clk", 3638c2ecf20Sopenharmony_ci "pll_sys_pfd5_clk", "pll_sys_pfd6_clk", "pll_sys_pfd7_clk", 3648c2ecf20Sopenharmony_ci "pll_audio_post_div", "pll_video_post_div", "pll_enet_500m_clk", 3658c2ecf20Sopenharmony_ci "pll_enet_250m_clk", "pll_enet_125m_clk", "pll_enet_100m_clk", 3668c2ecf20Sopenharmony_ci "pll_enet_50m_clk", "pll_enet_40m_clk", "pll_enet_25m_clk", 3678c2ecf20Sopenharmony_ci "pll_dram_main_clk", }; 3688c2ecf20Sopenharmony_ci 3698c2ecf20Sopenharmony_cistatic const char *pll_bypass_src_sel[] = { "osc", "dummy", }; 3708c2ecf20Sopenharmony_cistatic const char *pll_arm_bypass_sel[] = { "pll_arm_main", "pll_arm_main_src", }; 3718c2ecf20Sopenharmony_cistatic const char *pll_dram_bypass_sel[] = { "pll_dram_main", "pll_dram_main_src", }; 3728c2ecf20Sopenharmony_cistatic const char *pll_sys_bypass_sel[] = { "pll_sys_main", "pll_sys_main_src", }; 3738c2ecf20Sopenharmony_cistatic const char *pll_enet_bypass_sel[] = { "pll_enet_main", "pll_enet_main_src", }; 3748c2ecf20Sopenharmony_cistatic const char *pll_audio_bypass_sel[] = { "pll_audio_main", "pll_audio_main_src", }; 3758c2ecf20Sopenharmony_cistatic const char *pll_video_bypass_sel[] = { "pll_video_main", "pll_video_main_src", }; 3768c2ecf20Sopenharmony_ci 3778c2ecf20Sopenharmony_cistatic struct clk_hw **hws; 3788c2ecf20Sopenharmony_cistatic struct clk_hw_onecell_data *clk_hw_data; 3798c2ecf20Sopenharmony_ci 3808c2ecf20Sopenharmony_cistatic void __init imx7d_clocks_init(struct device_node *ccm_node) 3818c2ecf20Sopenharmony_ci{ 3828c2ecf20Sopenharmony_ci struct device_node *np; 3838c2ecf20Sopenharmony_ci void __iomem *base; 3848c2ecf20Sopenharmony_ci 3858c2ecf20Sopenharmony_ci clk_hw_data = kzalloc(struct_size(clk_hw_data, hws, 3868c2ecf20Sopenharmony_ci IMX7D_CLK_END), GFP_KERNEL); 3878c2ecf20Sopenharmony_ci if (WARN_ON(!clk_hw_data)) 3888c2ecf20Sopenharmony_ci return; 3898c2ecf20Sopenharmony_ci 3908c2ecf20Sopenharmony_ci clk_hw_data->num = IMX7D_CLK_END; 3918c2ecf20Sopenharmony_ci hws = clk_hw_data->hws; 3928c2ecf20Sopenharmony_ci 3938c2ecf20Sopenharmony_ci hws[IMX7D_CLK_DUMMY] = imx_clk_hw_fixed("dummy", 0); 3948c2ecf20Sopenharmony_ci hws[IMX7D_OSC_24M_CLK] = imx_obtain_fixed_clk_hw(ccm_node, "osc"); 3958c2ecf20Sopenharmony_ci hws[IMX7D_CKIL] = imx_obtain_fixed_clk_hw(ccm_node, "ckil"); 3968c2ecf20Sopenharmony_ci 3978c2ecf20Sopenharmony_ci np = of_find_compatible_node(NULL, NULL, "fsl,imx7d-anatop"); 3988c2ecf20Sopenharmony_ci base = of_iomap(np, 0); 3998c2ecf20Sopenharmony_ci WARN_ON(!base); 4008c2ecf20Sopenharmony_ci of_node_put(np); 4018c2ecf20Sopenharmony_ci 4028c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ARM_MAIN_SRC] = imx_clk_hw_mux("pll_arm_main_src", base + 0x60, 14, 2, pll_bypass_src_sel, ARRAY_SIZE(pll_bypass_src_sel)); 4038c2ecf20Sopenharmony_ci hws[IMX7D_PLL_DRAM_MAIN_SRC] = imx_clk_hw_mux("pll_dram_main_src", base + 0x70, 14, 2, pll_bypass_src_sel, ARRAY_SIZE(pll_bypass_src_sel)); 4048c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_MAIN_SRC] = imx_clk_hw_mux("pll_sys_main_src", base + 0xb0, 14, 2, pll_bypass_src_sel, ARRAY_SIZE(pll_bypass_src_sel)); 4058c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_SRC] = imx_clk_hw_mux("pll_enet_main_src", base + 0xe0, 14, 2, pll_bypass_src_sel, ARRAY_SIZE(pll_bypass_src_sel)); 4068c2ecf20Sopenharmony_ci hws[IMX7D_PLL_AUDIO_MAIN_SRC] = imx_clk_hw_mux("pll_audio_main_src", base + 0xf0, 14, 2, pll_bypass_src_sel, ARRAY_SIZE(pll_bypass_src_sel)); 4078c2ecf20Sopenharmony_ci hws[IMX7D_PLL_VIDEO_MAIN_SRC] = imx_clk_hw_mux("pll_video_main_src", base + 0x130, 14, 2, pll_bypass_src_sel, ARRAY_SIZE(pll_bypass_src_sel)); 4088c2ecf20Sopenharmony_ci 4098c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ARM_MAIN] = imx_clk_hw_pllv3(IMX_PLLV3_SYS, "pll_arm_main", "osc", base + 0x60, 0x7f); 4108c2ecf20Sopenharmony_ci hws[IMX7D_PLL_DRAM_MAIN] = imx_clk_hw_pllv3(IMX_PLLV3_DDR_IMX7, "pll_dram_main", "osc", base + 0x70, 0x7f); 4118c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_MAIN] = imx_clk_hw_pllv3(IMX_PLLV3_GENERIC, "pll_sys_main", "osc", base + 0xb0, 0x1); 4128c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN] = imx_clk_hw_pllv3(IMX_PLLV3_ENET_IMX7, "pll_enet_main", "osc", base + 0xe0, 0x0); 4138c2ecf20Sopenharmony_ci hws[IMX7D_PLL_AUDIO_MAIN] = imx_clk_hw_pllv3(IMX_PLLV3_AV_IMX7, "pll_audio_main", "osc", base + 0xf0, 0x7f); 4148c2ecf20Sopenharmony_ci hws[IMX7D_PLL_VIDEO_MAIN] = imx_clk_hw_pllv3(IMX_PLLV3_AV_IMX7, "pll_video_main", "osc", base + 0x130, 0x7f); 4158c2ecf20Sopenharmony_ci 4168c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ARM_MAIN_BYPASS] = imx_clk_hw_mux_flags("pll_arm_main_bypass", base + 0x60, 16, 1, pll_arm_bypass_sel, ARRAY_SIZE(pll_arm_bypass_sel), CLK_SET_RATE_PARENT); 4178c2ecf20Sopenharmony_ci hws[IMX7D_PLL_DRAM_MAIN_BYPASS] = imx_clk_hw_mux_flags("pll_dram_main_bypass", base + 0x70, 16, 1, pll_dram_bypass_sel, ARRAY_SIZE(pll_dram_bypass_sel), CLK_SET_RATE_PARENT); 4188c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_MAIN_BYPASS] = imx_clk_hw_mux_flags("pll_sys_main_bypass", base + 0xb0, 16, 1, pll_sys_bypass_sel, ARRAY_SIZE(pll_sys_bypass_sel), CLK_SET_RATE_PARENT); 4198c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_BYPASS] = imx_clk_hw_mux_flags("pll_enet_main_bypass", base + 0xe0, 16, 1, pll_enet_bypass_sel, ARRAY_SIZE(pll_enet_bypass_sel), CLK_SET_RATE_PARENT); 4208c2ecf20Sopenharmony_ci hws[IMX7D_PLL_AUDIO_MAIN_BYPASS] = imx_clk_hw_mux_flags("pll_audio_main_bypass", base + 0xf0, 16, 1, pll_audio_bypass_sel, ARRAY_SIZE(pll_audio_bypass_sel), CLK_SET_RATE_PARENT); 4218c2ecf20Sopenharmony_ci hws[IMX7D_PLL_VIDEO_MAIN_BYPASS] = imx_clk_hw_mux_flags("pll_video_main_bypass", base + 0x130, 16, 1, pll_video_bypass_sel, ARRAY_SIZE(pll_video_bypass_sel), CLK_SET_RATE_PARENT); 4228c2ecf20Sopenharmony_ci 4238c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ARM_MAIN_CLK] = imx_clk_hw_gate("pll_arm_main_clk", "pll_arm_main_bypass", base + 0x60, 13); 4248c2ecf20Sopenharmony_ci hws[IMX7D_PLL_DRAM_MAIN_CLK] = imx_clk_hw_gate("pll_dram_main_clk", "pll_dram_test_div", base + 0x70, 13); 4258c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_MAIN_CLK] = imx_clk_hw_gate("pll_sys_main_clk", "pll_sys_main_bypass", base + 0xb0, 13); 4268c2ecf20Sopenharmony_ci hws[IMX7D_PLL_AUDIO_MAIN_CLK] = imx_clk_hw_gate("pll_audio_main_clk", "pll_audio_main_bypass", base + 0xf0, 13); 4278c2ecf20Sopenharmony_ci hws[IMX7D_PLL_VIDEO_MAIN_CLK] = imx_clk_hw_gate("pll_video_main_clk", "pll_video_main_bypass", base + 0x130, 13); 4288c2ecf20Sopenharmony_ci 4298c2ecf20Sopenharmony_ci hws[IMX7D_PLL_DRAM_TEST_DIV] = clk_hw_register_divider_table(NULL, "pll_dram_test_div", "pll_dram_main_bypass", 4308c2ecf20Sopenharmony_ci CLK_SET_RATE_PARENT | CLK_SET_RATE_GATE, base + 0x70, 21, 2, 0, test_div_table, &imx_ccm_lock); 4318c2ecf20Sopenharmony_ci hws[IMX7D_PLL_AUDIO_TEST_DIV] = clk_hw_register_divider_table(NULL, "pll_audio_test_div", "pll_audio_main_clk", 4328c2ecf20Sopenharmony_ci CLK_SET_RATE_PARENT | CLK_SET_RATE_GATE, base + 0xf0, 19, 2, 0, test_div_table, &imx_ccm_lock); 4338c2ecf20Sopenharmony_ci hws[IMX7D_PLL_AUDIO_POST_DIV] = clk_hw_register_divider_table(NULL, "pll_audio_post_div", "pll_audio_test_div", 4348c2ecf20Sopenharmony_ci CLK_SET_RATE_PARENT | CLK_SET_RATE_GATE, base + 0xf0, 22, 2, 0, post_div_table, &imx_ccm_lock); 4358c2ecf20Sopenharmony_ci hws[IMX7D_PLL_VIDEO_TEST_DIV] = clk_hw_register_divider_table(NULL, "pll_video_test_div", "pll_video_main_clk", 4368c2ecf20Sopenharmony_ci CLK_SET_RATE_PARENT | CLK_SET_RATE_GATE, base + 0x130, 19, 2, 0, test_div_table, &imx_ccm_lock); 4378c2ecf20Sopenharmony_ci hws[IMX7D_PLL_VIDEO_POST_DIV] = clk_hw_register_divider_table(NULL, "pll_video_post_div", "pll_video_test_div", 4388c2ecf20Sopenharmony_ci CLK_SET_RATE_PARENT | CLK_SET_RATE_GATE, base + 0x130, 22, 2, 0, post_div_table, &imx_ccm_lock); 4398c2ecf20Sopenharmony_ci 4408c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD0_392M_CLK] = imx_clk_hw_pfd("pll_sys_pfd0_392m_clk", "pll_sys_main_clk", base + 0xc0, 0); 4418c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD1_332M_CLK] = imx_clk_hw_pfd("pll_sys_pfd1_332m_clk", "pll_sys_main_clk", base + 0xc0, 1); 4428c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD2_270M_CLK] = imx_clk_hw_pfd("pll_sys_pfd2_270m_clk", "pll_sys_main_clk", base + 0xc0, 2); 4438c2ecf20Sopenharmony_ci 4448c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD3_CLK] = imx_clk_hw_pfd("pll_sys_pfd3_clk", "pll_sys_main_clk", base + 0xc0, 3); 4458c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD4_CLK] = imx_clk_hw_pfd("pll_sys_pfd4_clk", "pll_sys_main_clk", base + 0xd0, 0); 4468c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD5_CLK] = imx_clk_hw_pfd("pll_sys_pfd5_clk", "pll_sys_main_clk", base + 0xd0, 1); 4478c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD6_CLK] = imx_clk_hw_pfd("pll_sys_pfd6_clk", "pll_sys_main_clk", base + 0xd0, 2); 4488c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD7_CLK] = imx_clk_hw_pfd("pll_sys_pfd7_clk", "pll_sys_main_clk", base + 0xd0, 3); 4498c2ecf20Sopenharmony_ci 4508c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_MAIN_480M] = imx_clk_hw_fixed_factor("pll_sys_main_480m", "pll_sys_main_clk", 1, 1); 4518c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_MAIN_240M] = imx_clk_hw_fixed_factor("pll_sys_main_240m", "pll_sys_main_clk", 1, 2); 4528c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_MAIN_120M] = imx_clk_hw_fixed_factor("pll_sys_main_120m", "pll_sys_main_clk", 1, 4); 4538c2ecf20Sopenharmony_ci hws[IMX7D_PLL_DRAM_MAIN_533M] = imx_clk_hw_fixed_factor("pll_dram_533m", "pll_dram_main_clk", 1, 2); 4548c2ecf20Sopenharmony_ci 4558c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_MAIN_480M_CLK] = imx_clk_hw_gate_dis_flags("pll_sys_main_480m_clk", "pll_sys_main_480m", base + 0xb0, 4, CLK_IS_CRITICAL); 4568c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_MAIN_240M_CLK] = imx_clk_hw_gate_dis("pll_sys_main_240m_clk", "pll_sys_main_240m", base + 0xb0, 5); 4578c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_MAIN_120M_CLK] = imx_clk_hw_gate_dis("pll_sys_main_120m_clk", "pll_sys_main_120m", base + 0xb0, 6); 4588c2ecf20Sopenharmony_ci hws[IMX7D_PLL_DRAM_MAIN_533M_CLK] = imx_clk_hw_gate("pll_dram_533m_clk", "pll_dram_533m", base + 0x70, 12); 4598c2ecf20Sopenharmony_ci 4608c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD0_196M] = imx_clk_hw_fixed_factor("pll_sys_pfd0_196m", "pll_sys_pfd0_392m_clk", 1, 2); 4618c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD1_166M] = imx_clk_hw_fixed_factor("pll_sys_pfd1_166m", "pll_sys_pfd1_332m_clk", 1, 2); 4628c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD2_135M] = imx_clk_hw_fixed_factor("pll_sys_pfd2_135m", "pll_sys_pfd2_270m_clk", 1, 2); 4638c2ecf20Sopenharmony_ci 4648c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD0_196M_CLK] = imx_clk_hw_gate_dis("pll_sys_pfd0_196m_clk", "pll_sys_pfd0_196m", base + 0xb0, 26); 4658c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD1_166M_CLK] = imx_clk_hw_gate_dis("pll_sys_pfd1_166m_clk", "pll_sys_pfd1_166m", base + 0xb0, 27); 4668c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_PFD2_135M_CLK] = imx_clk_hw_gate_dis("pll_sys_pfd2_135m_clk", "pll_sys_pfd2_135m", base + 0xb0, 28); 4678c2ecf20Sopenharmony_ci 4688c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_CLK] = imx_clk_hw_fixed_factor("pll_enet_main_clk", "pll_enet_main_bypass", 1, 1); 4698c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_500M] = imx_clk_hw_fixed_factor("pll_enet_500m", "pll_enet_main_clk", 1, 2); 4708c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_250M] = imx_clk_hw_fixed_factor("pll_enet_250m", "pll_enet_main_clk", 1, 4); 4718c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_125M] = imx_clk_hw_fixed_factor("pll_enet_125m", "pll_enet_main_clk", 1, 8); 4728c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_100M] = imx_clk_hw_fixed_factor("pll_enet_100m", "pll_enet_main_clk", 1, 10); 4738c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_50M] = imx_clk_hw_fixed_factor("pll_enet_50m", "pll_enet_main_clk", 1, 20); 4748c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_40M] = imx_clk_hw_fixed_factor("pll_enet_40m", "pll_enet_main_clk", 1, 25); 4758c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_25M] = imx_clk_hw_fixed_factor("pll_enet_25m", "pll_enet_main_clk", 1, 40); 4768c2ecf20Sopenharmony_ci 4778c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_500M_CLK] = imx_clk_hw_gate("pll_enet_500m_clk", "pll_enet_500m", base + 0xe0, 12); 4788c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_250M_CLK] = imx_clk_hw_gate("pll_enet_250m_clk", "pll_enet_250m", base + 0xe0, 11); 4798c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_125M_CLK] = imx_clk_hw_gate("pll_enet_125m_clk", "pll_enet_125m", base + 0xe0, 10); 4808c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_100M_CLK] = imx_clk_hw_gate("pll_enet_100m_clk", "pll_enet_100m", base + 0xe0, 9); 4818c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_50M_CLK] = imx_clk_hw_gate("pll_enet_50m_clk", "pll_enet_50m", base + 0xe0, 8); 4828c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_40M_CLK] = imx_clk_hw_gate("pll_enet_40m_clk", "pll_enet_40m", base + 0xe0, 7); 4838c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ENET_MAIN_25M_CLK] = imx_clk_hw_gate("pll_enet_25m_clk", "pll_enet_25m", base + 0xe0, 6); 4848c2ecf20Sopenharmony_ci 4858c2ecf20Sopenharmony_ci hws[IMX7D_LVDS1_OUT_SEL] = imx_clk_hw_mux("lvds1_sel", base + 0x170, 0, 5, lvds1_sel, ARRAY_SIZE(lvds1_sel)); 4868c2ecf20Sopenharmony_ci hws[IMX7D_LVDS1_OUT_CLK] = imx_clk_hw_gate_exclusive("lvds1_out", "lvds1_sel", base + 0x170, 5, BIT(6)); 4878c2ecf20Sopenharmony_ci 4888c2ecf20Sopenharmony_ci np = ccm_node; 4898c2ecf20Sopenharmony_ci base = of_iomap(np, 0); 4908c2ecf20Sopenharmony_ci WARN_ON(!base); 4918c2ecf20Sopenharmony_ci 4928c2ecf20Sopenharmony_ci hws[IMX7D_ARM_A7_ROOT_SRC] = imx_clk_hw_mux2("arm_a7_src", base + 0x8000, 24, 3, arm_a7_sel, ARRAY_SIZE(arm_a7_sel)); 4938c2ecf20Sopenharmony_ci hws[IMX7D_ARM_M4_ROOT_SRC] = imx_clk_hw_mux2("arm_m4_src", base + 0x8080, 24, 3, arm_m4_sel, ARRAY_SIZE(arm_m4_sel)); 4948c2ecf20Sopenharmony_ci hws[IMX7D_MAIN_AXI_ROOT_SRC] = imx_clk_hw_mux2("axi_src", base + 0x8800, 24, 3, axi_sel, ARRAY_SIZE(axi_sel)); 4958c2ecf20Sopenharmony_ci hws[IMX7D_DISP_AXI_ROOT_SRC] = imx_clk_hw_mux2("disp_axi_src", base + 0x8880, 24, 3, disp_axi_sel, ARRAY_SIZE(disp_axi_sel)); 4968c2ecf20Sopenharmony_ci hws[IMX7D_AHB_CHANNEL_ROOT_SRC] = imx_clk_hw_mux2("ahb_src", base + 0x9000, 24, 3, ahb_channel_sel, ARRAY_SIZE(ahb_channel_sel)); 4978c2ecf20Sopenharmony_ci 4988c2ecf20Sopenharmony_ci hws[IMX7D_ENET_AXI_ROOT_SRC] = imx_clk_hw_mux2_flags("enet_axi_src", base + 0x8900, 24, 3, enet_axi_sel, ARRAY_SIZE(enet_axi_sel), CLK_SET_PARENT_GATE); 4998c2ecf20Sopenharmony_ci hws[IMX7D_NAND_USDHC_BUS_ROOT_SRC] = imx_clk_hw_mux2_flags("nand_usdhc_src", base + 0x8980, 24, 3, nand_usdhc_bus_sel, ARRAY_SIZE(nand_usdhc_bus_sel), CLK_SET_PARENT_GATE); 5008c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_PHYM_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_phym_src", base + 0x9800, 24, 1, dram_phym_sel, ARRAY_SIZE(dram_phym_sel), CLK_SET_PARENT_GATE); 5018c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_src", base + 0x9880, 24, 1, dram_sel, ARRAY_SIZE(dram_sel), CLK_SET_PARENT_GATE); 5028c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_PHYM_ALT_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_phym_alt_src", base + 0xa000, 24, 3, dram_phym_alt_sel, ARRAY_SIZE(dram_phym_alt_sel), CLK_SET_PARENT_GATE); 5038c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_ALT_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_alt_src", base + 0xa080, 24, 3, dram_alt_sel, ARRAY_SIZE(dram_alt_sel), CLK_SET_PARENT_GATE); 5048c2ecf20Sopenharmony_ci hws[IMX7D_USB_HSIC_ROOT_SRC] = imx_clk_hw_mux2_flags("usb_hsic_src", base + 0xa100, 24, 3, usb_hsic_sel, ARRAY_SIZE(usb_hsic_sel), CLK_SET_PARENT_GATE); 5058c2ecf20Sopenharmony_ci hws[IMX7D_PCIE_CTRL_ROOT_SRC] = imx_clk_hw_mux2_flags("pcie_ctrl_src", base + 0xa180, 24, 3, pcie_ctrl_sel, ARRAY_SIZE(pcie_ctrl_sel), CLK_SET_PARENT_GATE); 5068c2ecf20Sopenharmony_ci hws[IMX7D_PCIE_PHY_ROOT_SRC] = imx_clk_hw_mux2_flags("pcie_phy_src", base + 0xa200, 24, 3, pcie_phy_sel, ARRAY_SIZE(pcie_phy_sel), CLK_SET_PARENT_GATE); 5078c2ecf20Sopenharmony_ci hws[IMX7D_EPDC_PIXEL_ROOT_SRC] = imx_clk_hw_mux2_flags("epdc_pixel_src", base + 0xa280, 24, 3, epdc_pixel_sel, ARRAY_SIZE(epdc_pixel_sel), CLK_SET_PARENT_GATE); 5088c2ecf20Sopenharmony_ci hws[IMX7D_LCDIF_PIXEL_ROOT_SRC] = imx_clk_hw_mux2_flags("lcdif_pixel_src", base + 0xa300, 24, 3, lcdif_pixel_sel, ARRAY_SIZE(lcdif_pixel_sel), CLK_SET_PARENT_GATE); 5098c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_DSI_ROOT_SRC] = imx_clk_hw_mux2_flags("mipi_dsi_src", base + 0xa380, 24, 3, mipi_dsi_sel, ARRAY_SIZE(mipi_dsi_sel), CLK_SET_PARENT_GATE); 5108c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_CSI_ROOT_SRC] = imx_clk_hw_mux2_flags("mipi_csi_src", base + 0xa400, 24, 3, mipi_csi_sel, ARRAY_SIZE(mipi_csi_sel), CLK_SET_PARENT_GATE); 5118c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_DPHY_ROOT_SRC] = imx_clk_hw_mux2_flags("mipi_dphy_src", base + 0xa480, 24, 3, mipi_dphy_sel, ARRAY_SIZE(mipi_dphy_sel), CLK_SET_PARENT_GATE); 5128c2ecf20Sopenharmony_ci hws[IMX7D_SAI1_ROOT_SRC] = imx_clk_hw_mux2_flags("sai1_src", base + 0xa500, 24, 3, sai1_sel, ARRAY_SIZE(sai1_sel), CLK_SET_PARENT_GATE); 5138c2ecf20Sopenharmony_ci hws[IMX7D_SAI2_ROOT_SRC] = imx_clk_hw_mux2_flags("sai2_src", base + 0xa580, 24, 3, sai2_sel, ARRAY_SIZE(sai2_sel), CLK_SET_PARENT_GATE); 5148c2ecf20Sopenharmony_ci hws[IMX7D_SAI3_ROOT_SRC] = imx_clk_hw_mux2_flags("sai3_src", base + 0xa600, 24, 3, sai3_sel, ARRAY_SIZE(sai3_sel), CLK_SET_PARENT_GATE); 5158c2ecf20Sopenharmony_ci hws[IMX7D_SPDIF_ROOT_SRC] = imx_clk_hw_mux2_flags("spdif_src", base + 0xa680, 24, 3, spdif_sel, ARRAY_SIZE(spdif_sel), CLK_SET_PARENT_GATE); 5168c2ecf20Sopenharmony_ci hws[IMX7D_ENET1_REF_ROOT_SRC] = imx_clk_hw_mux2_flags("enet1_ref_src", base + 0xa700, 24, 3, enet1_ref_sel, ARRAY_SIZE(enet1_ref_sel), CLK_SET_PARENT_GATE); 5178c2ecf20Sopenharmony_ci hws[IMX7D_ENET1_TIME_ROOT_SRC] = imx_clk_hw_mux2_flags("enet1_time_src", base + 0xa780, 24, 3, enet1_time_sel, ARRAY_SIZE(enet1_time_sel), CLK_SET_PARENT_GATE); 5188c2ecf20Sopenharmony_ci hws[IMX7D_ENET2_REF_ROOT_SRC] = imx_clk_hw_mux2_flags("enet2_ref_src", base + 0xa800, 24, 3, enet2_ref_sel, ARRAY_SIZE(enet2_ref_sel), CLK_SET_PARENT_GATE); 5198c2ecf20Sopenharmony_ci hws[IMX7D_ENET2_TIME_ROOT_SRC] = imx_clk_hw_mux2_flags("enet2_time_src", base + 0xa880, 24, 3, enet2_time_sel, ARRAY_SIZE(enet2_time_sel), CLK_SET_PARENT_GATE); 5208c2ecf20Sopenharmony_ci hws[IMX7D_ENET_PHY_REF_ROOT_SRC] = imx_clk_hw_mux2_flags("enet_phy_ref_src", base + 0xa900, 24, 3, enet_phy_ref_sel, ARRAY_SIZE(enet_phy_ref_sel), CLK_SET_PARENT_GATE); 5218c2ecf20Sopenharmony_ci hws[IMX7D_EIM_ROOT_SRC] = imx_clk_hw_mux2_flags("eim_src", base + 0xa980, 24, 3, eim_sel, ARRAY_SIZE(eim_sel), CLK_SET_PARENT_GATE); 5228c2ecf20Sopenharmony_ci hws[IMX7D_NAND_ROOT_SRC] = imx_clk_hw_mux2_flags("nand_src", base + 0xaa00, 24, 3, nand_sel, ARRAY_SIZE(nand_sel), CLK_SET_PARENT_GATE); 5238c2ecf20Sopenharmony_ci hws[IMX7D_QSPI_ROOT_SRC] = imx_clk_hw_mux2_flags("qspi_src", base + 0xaa80, 24, 3, qspi_sel, ARRAY_SIZE(qspi_sel), CLK_SET_PARENT_GATE); 5248c2ecf20Sopenharmony_ci hws[IMX7D_USDHC1_ROOT_SRC] = imx_clk_hw_mux2_flags("usdhc1_src", base + 0xab00, 24, 3, usdhc1_sel, ARRAY_SIZE(usdhc1_sel), CLK_SET_PARENT_GATE); 5258c2ecf20Sopenharmony_ci hws[IMX7D_USDHC2_ROOT_SRC] = imx_clk_hw_mux2_flags("usdhc2_src", base + 0xab80, 24, 3, usdhc2_sel, ARRAY_SIZE(usdhc2_sel), CLK_SET_PARENT_GATE); 5268c2ecf20Sopenharmony_ci hws[IMX7D_USDHC3_ROOT_SRC] = imx_clk_hw_mux2_flags("usdhc3_src", base + 0xac00, 24, 3, usdhc3_sel, ARRAY_SIZE(usdhc3_sel), CLK_SET_PARENT_GATE); 5278c2ecf20Sopenharmony_ci hws[IMX7D_CAN1_ROOT_SRC] = imx_clk_hw_mux2_flags("can1_src", base + 0xac80, 24, 3, can1_sel, ARRAY_SIZE(can1_sel), CLK_SET_PARENT_GATE); 5288c2ecf20Sopenharmony_ci hws[IMX7D_CAN2_ROOT_SRC] = imx_clk_hw_mux2_flags("can2_src", base + 0xad00, 24, 3, can2_sel, ARRAY_SIZE(can2_sel), CLK_SET_PARENT_GATE); 5298c2ecf20Sopenharmony_ci hws[IMX7D_I2C1_ROOT_SRC] = imx_clk_hw_mux2_flags("i2c1_src", base + 0xad80, 24, 3, i2c1_sel, ARRAY_SIZE(i2c1_sel), CLK_SET_PARENT_GATE); 5308c2ecf20Sopenharmony_ci hws[IMX7D_I2C2_ROOT_SRC] = imx_clk_hw_mux2_flags("i2c2_src", base + 0xae00, 24, 3, i2c2_sel, ARRAY_SIZE(i2c2_sel), CLK_SET_PARENT_GATE); 5318c2ecf20Sopenharmony_ci hws[IMX7D_I2C3_ROOT_SRC] = imx_clk_hw_mux2_flags("i2c3_src", base + 0xae80, 24, 3, i2c3_sel, ARRAY_SIZE(i2c3_sel), CLK_SET_PARENT_GATE); 5328c2ecf20Sopenharmony_ci hws[IMX7D_I2C4_ROOT_SRC] = imx_clk_hw_mux2_flags("i2c4_src", base + 0xaf00, 24, 3, i2c4_sel, ARRAY_SIZE(i2c4_sel), CLK_SET_PARENT_GATE); 5338c2ecf20Sopenharmony_ci hws[IMX7D_UART1_ROOT_SRC] = imx_clk_hw_mux2_flags("uart1_src", base + 0xaf80, 24, 3, uart1_sel, ARRAY_SIZE(uart1_sel), CLK_SET_PARENT_GATE); 5348c2ecf20Sopenharmony_ci hws[IMX7D_UART2_ROOT_SRC] = imx_clk_hw_mux2_flags("uart2_src", base + 0xb000, 24, 3, uart2_sel, ARRAY_SIZE(uart2_sel), CLK_SET_PARENT_GATE); 5358c2ecf20Sopenharmony_ci hws[IMX7D_UART3_ROOT_SRC] = imx_clk_hw_mux2_flags("uart3_src", base + 0xb080, 24, 3, uart3_sel, ARRAY_SIZE(uart3_sel), CLK_SET_PARENT_GATE); 5368c2ecf20Sopenharmony_ci hws[IMX7D_UART4_ROOT_SRC] = imx_clk_hw_mux2_flags("uart4_src", base + 0xb100, 24, 3, uart4_sel, ARRAY_SIZE(uart4_sel), CLK_SET_PARENT_GATE); 5378c2ecf20Sopenharmony_ci hws[IMX7D_UART5_ROOT_SRC] = imx_clk_hw_mux2_flags("uart5_src", base + 0xb180, 24, 3, uart5_sel, ARRAY_SIZE(uart5_sel), CLK_SET_PARENT_GATE); 5388c2ecf20Sopenharmony_ci hws[IMX7D_UART6_ROOT_SRC] = imx_clk_hw_mux2_flags("uart6_src", base + 0xb200, 24, 3, uart6_sel, ARRAY_SIZE(uart6_sel), CLK_SET_PARENT_GATE); 5398c2ecf20Sopenharmony_ci hws[IMX7D_UART7_ROOT_SRC] = imx_clk_hw_mux2_flags("uart7_src", base + 0xb280, 24, 3, uart7_sel, ARRAY_SIZE(uart7_sel), CLK_SET_PARENT_GATE); 5408c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI1_ROOT_SRC] = imx_clk_hw_mux2_flags("ecspi1_src", base + 0xb300, 24, 3, ecspi1_sel, ARRAY_SIZE(ecspi1_sel), CLK_SET_PARENT_GATE); 5418c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI2_ROOT_SRC] = imx_clk_hw_mux2_flags("ecspi2_src", base + 0xb380, 24, 3, ecspi2_sel, ARRAY_SIZE(ecspi2_sel), CLK_SET_PARENT_GATE); 5428c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI3_ROOT_SRC] = imx_clk_hw_mux2_flags("ecspi3_src", base + 0xb400, 24, 3, ecspi3_sel, ARRAY_SIZE(ecspi3_sel), CLK_SET_PARENT_GATE); 5438c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI4_ROOT_SRC] = imx_clk_hw_mux2_flags("ecspi4_src", base + 0xb480, 24, 3, ecspi4_sel, ARRAY_SIZE(ecspi4_sel), CLK_SET_PARENT_GATE); 5448c2ecf20Sopenharmony_ci hws[IMX7D_PWM1_ROOT_SRC] = imx_clk_hw_mux2_flags("pwm1_src", base + 0xb500, 24, 3, pwm1_sel, ARRAY_SIZE(pwm1_sel), CLK_SET_PARENT_GATE); 5458c2ecf20Sopenharmony_ci hws[IMX7D_PWM2_ROOT_SRC] = imx_clk_hw_mux2_flags("pwm2_src", base + 0xb580, 24, 3, pwm2_sel, ARRAY_SIZE(pwm2_sel), CLK_SET_PARENT_GATE); 5468c2ecf20Sopenharmony_ci hws[IMX7D_PWM3_ROOT_SRC] = imx_clk_hw_mux2_flags("pwm3_src", base + 0xb600, 24, 3, pwm3_sel, ARRAY_SIZE(pwm3_sel), CLK_SET_PARENT_GATE); 5478c2ecf20Sopenharmony_ci hws[IMX7D_PWM4_ROOT_SRC] = imx_clk_hw_mux2_flags("pwm4_src", base + 0xb680, 24, 3, pwm4_sel, ARRAY_SIZE(pwm4_sel), CLK_SET_PARENT_GATE); 5488c2ecf20Sopenharmony_ci hws[IMX7D_FLEXTIMER1_ROOT_SRC] = imx_clk_hw_mux2_flags("flextimer1_src", base + 0xb700, 24, 3, flextimer1_sel, ARRAY_SIZE(flextimer1_sel), CLK_SET_PARENT_GATE); 5498c2ecf20Sopenharmony_ci hws[IMX7D_FLEXTIMER2_ROOT_SRC] = imx_clk_hw_mux2_flags("flextimer2_src", base + 0xb780, 24, 3, flextimer2_sel, ARRAY_SIZE(flextimer2_sel), CLK_SET_PARENT_GATE); 5508c2ecf20Sopenharmony_ci hws[IMX7D_SIM1_ROOT_SRC] = imx_clk_hw_mux2_flags("sim1_src", base + 0xb800, 24, 3, sim1_sel, ARRAY_SIZE(sim1_sel), CLK_SET_PARENT_GATE); 5518c2ecf20Sopenharmony_ci hws[IMX7D_SIM2_ROOT_SRC] = imx_clk_hw_mux2_flags("sim2_src", base + 0xb880, 24, 3, sim2_sel, ARRAY_SIZE(sim2_sel), CLK_SET_PARENT_GATE); 5528c2ecf20Sopenharmony_ci hws[IMX7D_GPT1_ROOT_SRC] = imx_clk_hw_mux2_flags("gpt1_src", base + 0xb900, 24, 3, gpt1_sel, ARRAY_SIZE(gpt1_sel), CLK_SET_PARENT_GATE); 5538c2ecf20Sopenharmony_ci hws[IMX7D_GPT2_ROOT_SRC] = imx_clk_hw_mux2_flags("gpt2_src", base + 0xb980, 24, 3, gpt2_sel, ARRAY_SIZE(gpt2_sel), CLK_SET_PARENT_GATE); 5548c2ecf20Sopenharmony_ci hws[IMX7D_GPT3_ROOT_SRC] = imx_clk_hw_mux2_flags("gpt3_src", base + 0xba00, 24, 3, gpt3_sel, ARRAY_SIZE(gpt3_sel), CLK_SET_PARENT_GATE); 5558c2ecf20Sopenharmony_ci hws[IMX7D_GPT4_ROOT_SRC] = imx_clk_hw_mux2_flags("gpt4_src", base + 0xba80, 24, 3, gpt4_sel, ARRAY_SIZE(gpt4_sel), CLK_SET_PARENT_GATE); 5568c2ecf20Sopenharmony_ci hws[IMX7D_TRACE_ROOT_SRC] = imx_clk_hw_mux2_flags("trace_src", base + 0xbb00, 24, 3, trace_sel, ARRAY_SIZE(trace_sel), CLK_SET_PARENT_GATE); 5578c2ecf20Sopenharmony_ci hws[IMX7D_WDOG_ROOT_SRC] = imx_clk_hw_mux2_flags("wdog_src", base + 0xbb80, 24, 3, wdog_sel, ARRAY_SIZE(wdog_sel), CLK_SET_PARENT_GATE); 5588c2ecf20Sopenharmony_ci hws[IMX7D_CSI_MCLK_ROOT_SRC] = imx_clk_hw_mux2_flags("csi_mclk_src", base + 0xbc00, 24, 3, csi_mclk_sel, ARRAY_SIZE(csi_mclk_sel), CLK_SET_PARENT_GATE); 5598c2ecf20Sopenharmony_ci hws[IMX7D_AUDIO_MCLK_ROOT_SRC] = imx_clk_hw_mux2_flags("audio_mclk_src", base + 0xbc80, 24, 3, audio_mclk_sel, ARRAY_SIZE(audio_mclk_sel), CLK_SET_PARENT_GATE); 5608c2ecf20Sopenharmony_ci hws[IMX7D_WRCLK_ROOT_SRC] = imx_clk_hw_mux2_flags("wrclk_src", base + 0xbd00, 24, 3, wrclk_sel, ARRAY_SIZE(wrclk_sel), CLK_SET_PARENT_GATE); 5618c2ecf20Sopenharmony_ci hws[IMX7D_CLKO1_ROOT_SRC] = imx_clk_hw_mux2_flags("clko1_src", base + 0xbd80, 24, 3, clko1_sel, ARRAY_SIZE(clko1_sel), CLK_SET_PARENT_GATE); 5628c2ecf20Sopenharmony_ci hws[IMX7D_CLKO2_ROOT_SRC] = imx_clk_hw_mux2_flags("clko2_src", base + 0xbe00, 24, 3, clko2_sel, ARRAY_SIZE(clko2_sel), CLK_SET_PARENT_GATE); 5638c2ecf20Sopenharmony_ci 5648c2ecf20Sopenharmony_ci hws[IMX7D_ARM_A7_ROOT_CG] = imx_clk_hw_gate3("arm_a7_cg", "arm_a7_src", base + 0x8000, 28); 5658c2ecf20Sopenharmony_ci hws[IMX7D_ARM_M4_ROOT_CG] = imx_clk_hw_gate3("arm_m4_cg", "arm_m4_src", base + 0x8080, 28); 5668c2ecf20Sopenharmony_ci hws[IMX7D_MAIN_AXI_ROOT_CG] = imx_clk_hw_gate3("axi_cg", "axi_src", base + 0x8800, 28); 5678c2ecf20Sopenharmony_ci hws[IMX7D_DISP_AXI_ROOT_CG] = imx_clk_hw_gate3("disp_axi_cg", "disp_axi_src", base + 0x8880, 28); 5688c2ecf20Sopenharmony_ci hws[IMX7D_ENET_AXI_ROOT_CG] = imx_clk_hw_gate3("enet_axi_cg", "enet_axi_src", base + 0x8900, 28); 5698c2ecf20Sopenharmony_ci hws[IMX7D_NAND_USDHC_BUS_ROOT_CG] = imx_clk_hw_gate3("nand_usdhc_cg", "nand_usdhc_src", base + 0x8980, 28); 5708c2ecf20Sopenharmony_ci hws[IMX7D_AHB_CHANNEL_ROOT_CG] = imx_clk_hw_gate3("ahb_cg", "ahb_src", base + 0x9000, 28); 5718c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_PHYM_ROOT_CG] = imx_clk_hw_gate3("dram_phym_cg", "dram_phym_src", base + 0x9800, 28); 5728c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_ROOT_CG] = imx_clk_hw_gate3("dram_cg", "dram_src", base + 0x9880, 28); 5738c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_PHYM_ALT_ROOT_CG] = imx_clk_hw_gate3("dram_phym_alt_cg", "dram_phym_alt_src", base + 0xa000, 28); 5748c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_ALT_ROOT_CG] = imx_clk_hw_gate3("dram_alt_cg", "dram_alt_src", base + 0xa080, 28); 5758c2ecf20Sopenharmony_ci hws[IMX7D_USB_HSIC_ROOT_CG] = imx_clk_hw_gate3("usb_hsic_cg", "usb_hsic_src", base + 0xa100, 28); 5768c2ecf20Sopenharmony_ci hws[IMX7D_PCIE_CTRL_ROOT_CG] = imx_clk_hw_gate3("pcie_ctrl_cg", "pcie_ctrl_src", base + 0xa180, 28); 5778c2ecf20Sopenharmony_ci hws[IMX7D_PCIE_PHY_ROOT_CG] = imx_clk_hw_gate3("pcie_phy_cg", "pcie_phy_src", base + 0xa200, 28); 5788c2ecf20Sopenharmony_ci hws[IMX7D_EPDC_PIXEL_ROOT_CG] = imx_clk_hw_gate3("epdc_pixel_cg", "epdc_pixel_src", base + 0xa280, 28); 5798c2ecf20Sopenharmony_ci hws[IMX7D_LCDIF_PIXEL_ROOT_CG] = imx_clk_hw_gate3("lcdif_pixel_cg", "lcdif_pixel_src", base + 0xa300, 28); 5808c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_DSI_ROOT_CG] = imx_clk_hw_gate3("mipi_dsi_cg", "mipi_dsi_src", base + 0xa380, 28); 5818c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_CSI_ROOT_CG] = imx_clk_hw_gate3("mipi_csi_cg", "mipi_csi_src", base + 0xa400, 28); 5828c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_DPHY_ROOT_CG] = imx_clk_hw_gate3("mipi_dphy_cg", "mipi_dphy_src", base + 0xa480, 28); 5838c2ecf20Sopenharmony_ci hws[IMX7D_SAI1_ROOT_CG] = imx_clk_hw_gate3("sai1_cg", "sai1_src", base + 0xa500, 28); 5848c2ecf20Sopenharmony_ci hws[IMX7D_SAI2_ROOT_CG] = imx_clk_hw_gate3("sai2_cg", "sai2_src", base + 0xa580, 28); 5858c2ecf20Sopenharmony_ci hws[IMX7D_SAI3_ROOT_CG] = imx_clk_hw_gate3("sai3_cg", "sai3_src", base + 0xa600, 28); 5868c2ecf20Sopenharmony_ci hws[IMX7D_SPDIF_ROOT_CG] = imx_clk_hw_gate3("spdif_cg", "spdif_src", base + 0xa680, 28); 5878c2ecf20Sopenharmony_ci hws[IMX7D_ENET1_REF_ROOT_CG] = imx_clk_hw_gate3("enet1_ref_cg", "enet1_ref_src", base + 0xa700, 28); 5888c2ecf20Sopenharmony_ci hws[IMX7D_ENET1_TIME_ROOT_CG] = imx_clk_hw_gate3("enet1_time_cg", "enet1_time_src", base + 0xa780, 28); 5898c2ecf20Sopenharmony_ci hws[IMX7D_ENET2_REF_ROOT_CG] = imx_clk_hw_gate3("enet2_ref_cg", "enet2_ref_src", base + 0xa800, 28); 5908c2ecf20Sopenharmony_ci hws[IMX7D_ENET2_TIME_ROOT_CG] = imx_clk_hw_gate3("enet2_time_cg", "enet2_time_src", base + 0xa880, 28); 5918c2ecf20Sopenharmony_ci hws[IMX7D_ENET_PHY_REF_ROOT_CG] = imx_clk_hw_gate3("enet_phy_ref_cg", "enet_phy_ref_src", base + 0xa900, 28); 5928c2ecf20Sopenharmony_ci hws[IMX7D_EIM_ROOT_CG] = imx_clk_hw_gate3("eim_cg", "eim_src", base + 0xa980, 28); 5938c2ecf20Sopenharmony_ci hws[IMX7D_NAND_ROOT_CG] = imx_clk_hw_gate3("nand_cg", "nand_src", base + 0xaa00, 28); 5948c2ecf20Sopenharmony_ci hws[IMX7D_QSPI_ROOT_CG] = imx_clk_hw_gate3("qspi_cg", "qspi_src", base + 0xaa80, 28); 5958c2ecf20Sopenharmony_ci hws[IMX7D_USDHC1_ROOT_CG] = imx_clk_hw_gate3("usdhc1_cg", "usdhc1_src", base + 0xab00, 28); 5968c2ecf20Sopenharmony_ci hws[IMX7D_USDHC2_ROOT_CG] = imx_clk_hw_gate3("usdhc2_cg", "usdhc2_src", base + 0xab80, 28); 5978c2ecf20Sopenharmony_ci hws[IMX7D_USDHC3_ROOT_CG] = imx_clk_hw_gate3("usdhc3_cg", "usdhc3_src", base + 0xac00, 28); 5988c2ecf20Sopenharmony_ci hws[IMX7D_CAN1_ROOT_CG] = imx_clk_hw_gate3("can1_cg", "can1_src", base + 0xac80, 28); 5998c2ecf20Sopenharmony_ci hws[IMX7D_CAN2_ROOT_CG] = imx_clk_hw_gate3("can2_cg", "can2_src", base + 0xad00, 28); 6008c2ecf20Sopenharmony_ci hws[IMX7D_I2C1_ROOT_CG] = imx_clk_hw_gate3("i2c1_cg", "i2c1_src", base + 0xad80, 28); 6018c2ecf20Sopenharmony_ci hws[IMX7D_I2C2_ROOT_CG] = imx_clk_hw_gate3("i2c2_cg", "i2c2_src", base + 0xae00, 28); 6028c2ecf20Sopenharmony_ci hws[IMX7D_I2C3_ROOT_CG] = imx_clk_hw_gate3("i2c3_cg", "i2c3_src", base + 0xae80, 28); 6038c2ecf20Sopenharmony_ci hws[IMX7D_I2C4_ROOT_CG] = imx_clk_hw_gate3("i2c4_cg", "i2c4_src", base + 0xaf00, 28); 6048c2ecf20Sopenharmony_ci hws[IMX7D_UART1_ROOT_CG] = imx_clk_hw_gate3("uart1_cg", "uart1_src", base + 0xaf80, 28); 6058c2ecf20Sopenharmony_ci hws[IMX7D_UART2_ROOT_CG] = imx_clk_hw_gate3("uart2_cg", "uart2_src", base + 0xb000, 28); 6068c2ecf20Sopenharmony_ci hws[IMX7D_UART3_ROOT_CG] = imx_clk_hw_gate3("uart3_cg", "uart3_src", base + 0xb080, 28); 6078c2ecf20Sopenharmony_ci hws[IMX7D_UART4_ROOT_CG] = imx_clk_hw_gate3("uart4_cg", "uart4_src", base + 0xb100, 28); 6088c2ecf20Sopenharmony_ci hws[IMX7D_UART5_ROOT_CG] = imx_clk_hw_gate3("uart5_cg", "uart5_src", base + 0xb180, 28); 6098c2ecf20Sopenharmony_ci hws[IMX7D_UART6_ROOT_CG] = imx_clk_hw_gate3("uart6_cg", "uart6_src", base + 0xb200, 28); 6108c2ecf20Sopenharmony_ci hws[IMX7D_UART7_ROOT_CG] = imx_clk_hw_gate3("uart7_cg", "uart7_src", base + 0xb280, 28); 6118c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI1_ROOT_CG] = imx_clk_hw_gate3("ecspi1_cg", "ecspi1_src", base + 0xb300, 28); 6128c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI2_ROOT_CG] = imx_clk_hw_gate3("ecspi2_cg", "ecspi2_src", base + 0xb380, 28); 6138c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI3_ROOT_CG] = imx_clk_hw_gate3("ecspi3_cg", "ecspi3_src", base + 0xb400, 28); 6148c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI4_ROOT_CG] = imx_clk_hw_gate3("ecspi4_cg", "ecspi4_src", base + 0xb480, 28); 6158c2ecf20Sopenharmony_ci hws[IMX7D_PWM1_ROOT_CG] = imx_clk_hw_gate3("pwm1_cg", "pwm1_src", base + 0xb500, 28); 6168c2ecf20Sopenharmony_ci hws[IMX7D_PWM2_ROOT_CG] = imx_clk_hw_gate3("pwm2_cg", "pwm2_src", base + 0xb580, 28); 6178c2ecf20Sopenharmony_ci hws[IMX7D_PWM3_ROOT_CG] = imx_clk_hw_gate3("pwm3_cg", "pwm3_src", base + 0xb600, 28); 6188c2ecf20Sopenharmony_ci hws[IMX7D_PWM4_ROOT_CG] = imx_clk_hw_gate3("pwm4_cg", "pwm4_src", base + 0xb680, 28); 6198c2ecf20Sopenharmony_ci hws[IMX7D_FLEXTIMER1_ROOT_CG] = imx_clk_hw_gate3("flextimer1_cg", "flextimer1_src", base + 0xb700, 28); 6208c2ecf20Sopenharmony_ci hws[IMX7D_FLEXTIMER2_ROOT_CG] = imx_clk_hw_gate3("flextimer2_cg", "flextimer2_src", base + 0xb780, 28); 6218c2ecf20Sopenharmony_ci hws[IMX7D_SIM1_ROOT_CG] = imx_clk_hw_gate3("sim1_cg", "sim1_src", base + 0xb800, 28); 6228c2ecf20Sopenharmony_ci hws[IMX7D_SIM2_ROOT_CG] = imx_clk_hw_gate3("sim2_cg", "sim2_src", base + 0xb880, 28); 6238c2ecf20Sopenharmony_ci hws[IMX7D_GPT1_ROOT_CG] = imx_clk_hw_gate3("gpt1_cg", "gpt1_src", base + 0xb900, 28); 6248c2ecf20Sopenharmony_ci hws[IMX7D_GPT2_ROOT_CG] = imx_clk_hw_gate3("gpt2_cg", "gpt2_src", base + 0xb980, 28); 6258c2ecf20Sopenharmony_ci hws[IMX7D_GPT3_ROOT_CG] = imx_clk_hw_gate3("gpt3_cg", "gpt3_src", base + 0xbA00, 28); 6268c2ecf20Sopenharmony_ci hws[IMX7D_GPT4_ROOT_CG] = imx_clk_hw_gate3("gpt4_cg", "gpt4_src", base + 0xbA80, 28); 6278c2ecf20Sopenharmony_ci hws[IMX7D_TRACE_ROOT_CG] = imx_clk_hw_gate3("trace_cg", "trace_src", base + 0xbb00, 28); 6288c2ecf20Sopenharmony_ci hws[IMX7D_WDOG_ROOT_CG] = imx_clk_hw_gate3("wdog_cg", "wdog_src", base + 0xbb80, 28); 6298c2ecf20Sopenharmony_ci hws[IMX7D_CSI_MCLK_ROOT_CG] = imx_clk_hw_gate3("csi_mclk_cg", "csi_mclk_src", base + 0xbc00, 28); 6308c2ecf20Sopenharmony_ci hws[IMX7D_AUDIO_MCLK_ROOT_CG] = imx_clk_hw_gate3("audio_mclk_cg", "audio_mclk_src", base + 0xbc80, 28); 6318c2ecf20Sopenharmony_ci hws[IMX7D_WRCLK_ROOT_CG] = imx_clk_hw_gate3("wrclk_cg", "wrclk_src", base + 0xbd00, 28); 6328c2ecf20Sopenharmony_ci hws[IMX7D_CLKO1_ROOT_CG] = imx_clk_hw_gate3("clko1_cg", "clko1_src", base + 0xbd80, 28); 6338c2ecf20Sopenharmony_ci hws[IMX7D_CLKO2_ROOT_CG] = imx_clk_hw_gate3("clko2_cg", "clko2_src", base + 0xbe00, 28); 6348c2ecf20Sopenharmony_ci 6358c2ecf20Sopenharmony_ci hws[IMX7D_MAIN_AXI_ROOT_PRE_DIV] = imx_clk_hw_divider2("axi_pre_div", "axi_cg", base + 0x8800, 16, 3); 6368c2ecf20Sopenharmony_ci hws[IMX7D_DISP_AXI_ROOT_PRE_DIV] = imx_clk_hw_divider2("disp_axi_pre_div", "disp_axi_cg", base + 0x8880, 16, 3); 6378c2ecf20Sopenharmony_ci hws[IMX7D_ENET_AXI_ROOT_PRE_DIV] = imx_clk_hw_divider2("enet_axi_pre_div", "enet_axi_cg", base + 0x8900, 16, 3); 6388c2ecf20Sopenharmony_ci hws[IMX7D_NAND_USDHC_BUS_ROOT_PRE_DIV] = imx_clk_hw_divider2("nand_usdhc_pre_div", "nand_usdhc_cg", base + 0x8980, 16, 3); 6398c2ecf20Sopenharmony_ci hws[IMX7D_AHB_CHANNEL_ROOT_PRE_DIV] = imx_clk_hw_divider2("ahb_pre_div", "ahb_cg", base + 0x9000, 16, 3); 6408c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_PHYM_ALT_ROOT_PRE_DIV] = imx_clk_hw_divider2("dram_phym_alt_pre_div", "dram_phym_alt_cg", base + 0xa000, 16, 3); 6418c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_ALT_ROOT_PRE_DIV] = imx_clk_hw_divider2("dram_alt_pre_div", "dram_alt_cg", base + 0xa080, 16, 3); 6428c2ecf20Sopenharmony_ci hws[IMX7D_USB_HSIC_ROOT_PRE_DIV] = imx_clk_hw_divider2("usb_hsic_pre_div", "usb_hsic_cg", base + 0xa100, 16, 3); 6438c2ecf20Sopenharmony_ci hws[IMX7D_PCIE_CTRL_ROOT_PRE_DIV] = imx_clk_hw_divider2("pcie_ctrl_pre_div", "pcie_ctrl_cg", base + 0xa180, 16, 3); 6448c2ecf20Sopenharmony_ci hws[IMX7D_PCIE_PHY_ROOT_PRE_DIV] = imx_clk_hw_divider2("pcie_phy_pre_div", "pcie_phy_cg", base + 0xa200, 16, 3); 6458c2ecf20Sopenharmony_ci hws[IMX7D_EPDC_PIXEL_ROOT_PRE_DIV] = imx_clk_hw_divider2("epdc_pixel_pre_div", "epdc_pixel_cg", base + 0xa280, 16, 3); 6468c2ecf20Sopenharmony_ci hws[IMX7D_LCDIF_PIXEL_ROOT_PRE_DIV] = imx_clk_hw_divider2("lcdif_pixel_pre_div", "lcdif_pixel_cg", base + 0xa300, 16, 3); 6478c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_DSI_ROOT_PRE_DIV] = imx_clk_hw_divider2("mipi_dsi_pre_div", "mipi_dsi_cg", base + 0xa380, 16, 3); 6488c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_CSI_ROOT_PRE_DIV] = imx_clk_hw_divider2("mipi_csi_pre_div", "mipi_csi_cg", base + 0xa400, 16, 3); 6498c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_DPHY_ROOT_PRE_DIV] = imx_clk_hw_divider2("mipi_dphy_pre_div", "mipi_dphy_cg", base + 0xa480, 16, 3); 6508c2ecf20Sopenharmony_ci hws[IMX7D_SAI1_ROOT_PRE_DIV] = imx_clk_hw_divider2("sai1_pre_div", "sai1_cg", base + 0xa500, 16, 3); 6518c2ecf20Sopenharmony_ci hws[IMX7D_SAI2_ROOT_PRE_DIV] = imx_clk_hw_divider2("sai2_pre_div", "sai2_cg", base + 0xa580, 16, 3); 6528c2ecf20Sopenharmony_ci hws[IMX7D_SAI3_ROOT_PRE_DIV] = imx_clk_hw_divider2("sai3_pre_div", "sai3_cg", base + 0xa600, 16, 3); 6538c2ecf20Sopenharmony_ci hws[IMX7D_SPDIF_ROOT_PRE_DIV] = imx_clk_hw_divider2("spdif_pre_div", "spdif_cg", base + 0xa680, 16, 3); 6548c2ecf20Sopenharmony_ci hws[IMX7D_ENET1_REF_ROOT_PRE_DIV] = imx_clk_hw_divider2("enet1_ref_pre_div", "enet1_ref_cg", base + 0xa700, 16, 3); 6558c2ecf20Sopenharmony_ci hws[IMX7D_ENET1_TIME_ROOT_PRE_DIV] = imx_clk_hw_divider2("enet1_time_pre_div", "enet1_time_cg", base + 0xa780, 16, 3); 6568c2ecf20Sopenharmony_ci hws[IMX7D_ENET2_REF_ROOT_PRE_DIV] = imx_clk_hw_divider2("enet2_ref_pre_div", "enet2_ref_cg", base + 0xa800, 16, 3); 6578c2ecf20Sopenharmony_ci hws[IMX7D_ENET2_TIME_ROOT_PRE_DIV] = imx_clk_hw_divider2("enet2_time_pre_div", "enet2_time_cg", base + 0xa880, 16, 3); 6588c2ecf20Sopenharmony_ci hws[IMX7D_ENET_PHY_REF_ROOT_PRE_DIV] = imx_clk_hw_divider2("enet_phy_ref_pre_div", "enet_phy_ref_cg", base + 0xa900, 16, 3); 6598c2ecf20Sopenharmony_ci hws[IMX7D_EIM_ROOT_PRE_DIV] = imx_clk_hw_divider2("eim_pre_div", "eim_cg", base + 0xa980, 16, 3); 6608c2ecf20Sopenharmony_ci hws[IMX7D_NAND_ROOT_PRE_DIV] = imx_clk_hw_divider2("nand_pre_div", "nand_cg", base + 0xaa00, 16, 3); 6618c2ecf20Sopenharmony_ci hws[IMX7D_QSPI_ROOT_PRE_DIV] = imx_clk_hw_divider2("qspi_pre_div", "qspi_cg", base + 0xaa80, 16, 3); 6628c2ecf20Sopenharmony_ci hws[IMX7D_USDHC1_ROOT_PRE_DIV] = imx_clk_hw_divider2("usdhc1_pre_div", "usdhc1_cg", base + 0xab00, 16, 3); 6638c2ecf20Sopenharmony_ci hws[IMX7D_USDHC2_ROOT_PRE_DIV] = imx_clk_hw_divider2("usdhc2_pre_div", "usdhc2_cg", base + 0xab80, 16, 3); 6648c2ecf20Sopenharmony_ci hws[IMX7D_USDHC3_ROOT_PRE_DIV] = imx_clk_hw_divider2("usdhc3_pre_div", "usdhc3_cg", base + 0xac00, 16, 3); 6658c2ecf20Sopenharmony_ci hws[IMX7D_CAN1_ROOT_PRE_DIV] = imx_clk_hw_divider2("can1_pre_div", "can1_cg", base + 0xac80, 16, 3); 6668c2ecf20Sopenharmony_ci hws[IMX7D_CAN2_ROOT_PRE_DIV] = imx_clk_hw_divider2("can2_pre_div", "can2_cg", base + 0xad00, 16, 3); 6678c2ecf20Sopenharmony_ci hws[IMX7D_I2C1_ROOT_PRE_DIV] = imx_clk_hw_divider2("i2c1_pre_div", "i2c1_cg", base + 0xad80, 16, 3); 6688c2ecf20Sopenharmony_ci hws[IMX7D_I2C2_ROOT_PRE_DIV] = imx_clk_hw_divider2("i2c2_pre_div", "i2c2_cg", base + 0xae00, 16, 3); 6698c2ecf20Sopenharmony_ci hws[IMX7D_I2C3_ROOT_PRE_DIV] = imx_clk_hw_divider2("i2c3_pre_div", "i2c3_cg", base + 0xae80, 16, 3); 6708c2ecf20Sopenharmony_ci hws[IMX7D_I2C4_ROOT_PRE_DIV] = imx_clk_hw_divider2("i2c4_pre_div", "i2c4_cg", base + 0xaf00, 16, 3); 6718c2ecf20Sopenharmony_ci hws[IMX7D_UART1_ROOT_PRE_DIV] = imx_clk_hw_divider2("uart1_pre_div", "uart1_cg", base + 0xaf80, 16, 3); 6728c2ecf20Sopenharmony_ci hws[IMX7D_UART2_ROOT_PRE_DIV] = imx_clk_hw_divider2("uart2_pre_div", "uart2_cg", base + 0xb000, 16, 3); 6738c2ecf20Sopenharmony_ci hws[IMX7D_UART3_ROOT_PRE_DIV] = imx_clk_hw_divider2("uart3_pre_div", "uart3_cg", base + 0xb080, 16, 3); 6748c2ecf20Sopenharmony_ci hws[IMX7D_UART4_ROOT_PRE_DIV] = imx_clk_hw_divider2("uart4_pre_div", "uart4_cg", base + 0xb100, 16, 3); 6758c2ecf20Sopenharmony_ci hws[IMX7D_UART5_ROOT_PRE_DIV] = imx_clk_hw_divider2("uart5_pre_div", "uart5_cg", base + 0xb180, 16, 3); 6768c2ecf20Sopenharmony_ci hws[IMX7D_UART6_ROOT_PRE_DIV] = imx_clk_hw_divider2("uart6_pre_div", "uart6_cg", base + 0xb200, 16, 3); 6778c2ecf20Sopenharmony_ci hws[IMX7D_UART7_ROOT_PRE_DIV] = imx_clk_hw_divider2("uart7_pre_div", "uart7_cg", base + 0xb280, 16, 3); 6788c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI1_ROOT_PRE_DIV] = imx_clk_hw_divider2("ecspi1_pre_div", "ecspi1_cg", base + 0xb300, 16, 3); 6798c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI2_ROOT_PRE_DIV] = imx_clk_hw_divider2("ecspi2_pre_div", "ecspi2_cg", base + 0xb380, 16, 3); 6808c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI3_ROOT_PRE_DIV] = imx_clk_hw_divider2("ecspi3_pre_div", "ecspi3_cg", base + 0xb400, 16, 3); 6818c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI4_ROOT_PRE_DIV] = imx_clk_hw_divider2("ecspi4_pre_div", "ecspi4_cg", base + 0xb480, 16, 3); 6828c2ecf20Sopenharmony_ci hws[IMX7D_PWM1_ROOT_PRE_DIV] = imx_clk_hw_divider2("pwm1_pre_div", "pwm1_cg", base + 0xb500, 16, 3); 6838c2ecf20Sopenharmony_ci hws[IMX7D_PWM2_ROOT_PRE_DIV] = imx_clk_hw_divider2("pwm2_pre_div", "pwm2_cg", base + 0xb580, 16, 3); 6848c2ecf20Sopenharmony_ci hws[IMX7D_PWM3_ROOT_PRE_DIV] = imx_clk_hw_divider2("pwm3_pre_div", "pwm3_cg", base + 0xb600, 16, 3); 6858c2ecf20Sopenharmony_ci hws[IMX7D_PWM4_ROOT_PRE_DIV] = imx_clk_hw_divider2("pwm4_pre_div", "pwm4_cg", base + 0xb680, 16, 3); 6868c2ecf20Sopenharmony_ci hws[IMX7D_FLEXTIMER1_ROOT_PRE_DIV] = imx_clk_hw_divider2("flextimer1_pre_div", "flextimer1_cg", base + 0xb700, 16, 3); 6878c2ecf20Sopenharmony_ci hws[IMX7D_FLEXTIMER2_ROOT_PRE_DIV] = imx_clk_hw_divider2("flextimer2_pre_div", "flextimer2_cg", base + 0xb780, 16, 3); 6888c2ecf20Sopenharmony_ci hws[IMX7D_SIM1_ROOT_PRE_DIV] = imx_clk_hw_divider2("sim1_pre_div", "sim1_cg", base + 0xb800, 16, 3); 6898c2ecf20Sopenharmony_ci hws[IMX7D_SIM2_ROOT_PRE_DIV] = imx_clk_hw_divider2("sim2_pre_div", "sim2_cg", base + 0xb880, 16, 3); 6908c2ecf20Sopenharmony_ci hws[IMX7D_GPT1_ROOT_PRE_DIV] = imx_clk_hw_divider2("gpt1_pre_div", "gpt1_cg", base + 0xb900, 16, 3); 6918c2ecf20Sopenharmony_ci hws[IMX7D_GPT2_ROOT_PRE_DIV] = imx_clk_hw_divider2("gpt2_pre_div", "gpt2_cg", base + 0xb980, 16, 3); 6928c2ecf20Sopenharmony_ci hws[IMX7D_GPT3_ROOT_PRE_DIV] = imx_clk_hw_divider2("gpt3_pre_div", "gpt3_cg", base + 0xba00, 16, 3); 6938c2ecf20Sopenharmony_ci hws[IMX7D_GPT4_ROOT_PRE_DIV] = imx_clk_hw_divider2("gpt4_pre_div", "gpt4_cg", base + 0xba80, 16, 3); 6948c2ecf20Sopenharmony_ci hws[IMX7D_TRACE_ROOT_PRE_DIV] = imx_clk_hw_divider2("trace_pre_div", "trace_cg", base + 0xbb00, 16, 3); 6958c2ecf20Sopenharmony_ci hws[IMX7D_WDOG_ROOT_PRE_DIV] = imx_clk_hw_divider2("wdog_pre_div", "wdog_cg", base + 0xbb80, 16, 3); 6968c2ecf20Sopenharmony_ci hws[IMX7D_CSI_MCLK_ROOT_PRE_DIV] = imx_clk_hw_divider2("csi_mclk_pre_div", "csi_mclk_cg", base + 0xbc00, 16, 3); 6978c2ecf20Sopenharmony_ci hws[IMX7D_AUDIO_MCLK_ROOT_PRE_DIV] = imx_clk_hw_divider2("audio_mclk_pre_div", "audio_mclk_cg", base + 0xbc80, 16, 3); 6988c2ecf20Sopenharmony_ci hws[IMX7D_WRCLK_ROOT_PRE_DIV] = imx_clk_hw_divider2("wrclk_pre_div", "wrclk_cg", base + 0xbd00, 16, 3); 6998c2ecf20Sopenharmony_ci hws[IMX7D_CLKO1_ROOT_PRE_DIV] = imx_clk_hw_divider2("clko1_pre_div", "clko1_cg", base + 0xbd80, 16, 3); 7008c2ecf20Sopenharmony_ci hws[IMX7D_CLKO2_ROOT_PRE_DIV] = imx_clk_hw_divider2("clko2_pre_div", "clko2_cg", base + 0xbe00, 16, 3); 7018c2ecf20Sopenharmony_ci 7028c2ecf20Sopenharmony_ci hws[IMX7D_ARM_A7_ROOT_DIV] = imx_clk_hw_divider2("arm_a7_div", "arm_a7_cg", base + 0x8000, 0, 3); 7038c2ecf20Sopenharmony_ci hws[IMX7D_ARM_M4_ROOT_DIV] = imx_clk_hw_divider2("arm_m4_div", "arm_m4_cg", base + 0x8080, 0, 3); 7048c2ecf20Sopenharmony_ci hws[IMX7D_MAIN_AXI_ROOT_DIV] = imx_clk_hw_divider2("axi_post_div", "axi_pre_div", base + 0x8800, 0, 6); 7058c2ecf20Sopenharmony_ci hws[IMX7D_DISP_AXI_ROOT_DIV] = imx_clk_hw_divider2("disp_axi_post_div", "disp_axi_pre_div", base + 0x8880, 0, 6); 7068c2ecf20Sopenharmony_ci hws[IMX7D_ENET_AXI_ROOT_DIV] = imx_clk_hw_divider2("enet_axi_post_div", "enet_axi_pre_div", base + 0x8900, 0, 6); 7078c2ecf20Sopenharmony_ci hws[IMX7D_NAND_USDHC_BUS_ROOT_CLK] = imx_clk_hw_divider2("nand_usdhc_root_clk", "nand_usdhc_pre_div", base + 0x8980, 0, 6); 7088c2ecf20Sopenharmony_ci hws[IMX7D_AHB_CHANNEL_ROOT_DIV] = imx_clk_hw_divider2("ahb_root_clk", "ahb_pre_div", base + 0x9000, 0, 6); 7098c2ecf20Sopenharmony_ci hws[IMX7D_IPG_ROOT_CLK] = imx_clk_hw_divider_flags("ipg_root_clk", "ahb_root_clk", base + 0x9080, 0, 2, CLK_IS_CRITICAL | CLK_OPS_PARENT_ENABLE | CLK_SET_RATE_PARENT); 7108c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_ROOT_DIV] = imx_clk_hw_divider2("dram_post_div", "dram_cg", base + 0x9880, 0, 3); 7118c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_PHYM_ALT_ROOT_DIV] = imx_clk_hw_divider2("dram_phym_alt_post_div", "dram_phym_alt_pre_div", base + 0xa000, 0, 3); 7128c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_ALT_ROOT_DIV] = imx_clk_hw_divider2("dram_alt_post_div", "dram_alt_pre_div", base + 0xa080, 0, 3); 7138c2ecf20Sopenharmony_ci hws[IMX7D_USB_HSIC_ROOT_DIV] = imx_clk_hw_divider2("usb_hsic_post_div", "usb_hsic_pre_div", base + 0xa100, 0, 6); 7148c2ecf20Sopenharmony_ci hws[IMX7D_PCIE_CTRL_ROOT_DIV] = imx_clk_hw_divider2("pcie_ctrl_post_div", "pcie_ctrl_pre_div", base + 0xa180, 0, 6); 7158c2ecf20Sopenharmony_ci hws[IMX7D_PCIE_PHY_ROOT_DIV] = imx_clk_hw_divider2("pcie_phy_post_div", "pcie_phy_pre_div", base + 0xa200, 0, 6); 7168c2ecf20Sopenharmony_ci hws[IMX7D_EPDC_PIXEL_ROOT_DIV] = imx_clk_hw_divider2("epdc_pixel_post_div", "epdc_pixel_pre_div", base + 0xa280, 0, 6); 7178c2ecf20Sopenharmony_ci hws[IMX7D_LCDIF_PIXEL_ROOT_DIV] = imx_clk_hw_divider2("lcdif_pixel_post_div", "lcdif_pixel_pre_div", base + 0xa300, 0, 6); 7188c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_DSI_ROOT_DIV] = imx_clk_hw_divider2("mipi_dsi_post_div", "mipi_dsi_pre_div", base + 0xa380, 0, 6); 7198c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_CSI_ROOT_DIV] = imx_clk_hw_divider2("mipi_csi_post_div", "mipi_csi_pre_div", base + 0xa400, 0, 6); 7208c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_DPHY_ROOT_DIV] = imx_clk_hw_divider2("mipi_dphy_post_div", "mipi_dphy_pre_div", base + 0xa480, 0, 6); 7218c2ecf20Sopenharmony_ci hws[IMX7D_SAI1_ROOT_DIV] = imx_clk_hw_divider2("sai1_post_div", "sai1_pre_div", base + 0xa500, 0, 6); 7228c2ecf20Sopenharmony_ci hws[IMX7D_SAI2_ROOT_DIV] = imx_clk_hw_divider2("sai2_post_div", "sai2_pre_div", base + 0xa580, 0, 6); 7238c2ecf20Sopenharmony_ci hws[IMX7D_SAI3_ROOT_DIV] = imx_clk_hw_divider2("sai3_post_div", "sai3_pre_div", base + 0xa600, 0, 6); 7248c2ecf20Sopenharmony_ci hws[IMX7D_SPDIF_ROOT_DIV] = imx_clk_hw_divider2("spdif_post_div", "spdif_pre_div", base + 0xa680, 0, 6); 7258c2ecf20Sopenharmony_ci hws[IMX7D_ENET1_REF_ROOT_DIV] = imx_clk_hw_divider2("enet1_ref_post_div", "enet1_ref_pre_div", base + 0xa700, 0, 6); 7268c2ecf20Sopenharmony_ci hws[IMX7D_ENET1_TIME_ROOT_DIV] = imx_clk_hw_divider2("enet1_time_post_div", "enet1_time_pre_div", base + 0xa780, 0, 6); 7278c2ecf20Sopenharmony_ci hws[IMX7D_ENET2_REF_ROOT_DIV] = imx_clk_hw_divider2("enet2_ref_post_div", "enet2_ref_pre_div", base + 0xa800, 0, 6); 7288c2ecf20Sopenharmony_ci hws[IMX7D_ENET2_TIME_ROOT_DIV] = imx_clk_hw_divider2("enet2_time_post_div", "enet2_time_pre_div", base + 0xa880, 0, 6); 7298c2ecf20Sopenharmony_ci hws[IMX7D_ENET_PHY_REF_ROOT_CLK] = imx_clk_hw_divider2("enet_phy_ref_root_clk", "enet_phy_ref_pre_div", base + 0xa900, 0, 6); 7308c2ecf20Sopenharmony_ci hws[IMX7D_EIM_ROOT_DIV] = imx_clk_hw_divider2("eim_post_div", "eim_pre_div", base + 0xa980, 0, 6); 7318c2ecf20Sopenharmony_ci hws[IMX7D_NAND_ROOT_CLK] = imx_clk_hw_divider2("nand_root_clk", "nand_pre_div", base + 0xaa00, 0, 6); 7328c2ecf20Sopenharmony_ci hws[IMX7D_QSPI_ROOT_DIV] = imx_clk_hw_divider2("qspi_post_div", "qspi_pre_div", base + 0xaa80, 0, 6); 7338c2ecf20Sopenharmony_ci hws[IMX7D_USDHC1_ROOT_DIV] = imx_clk_hw_divider2("usdhc1_post_div", "usdhc1_pre_div", base + 0xab00, 0, 6); 7348c2ecf20Sopenharmony_ci hws[IMX7D_USDHC2_ROOT_DIV] = imx_clk_hw_divider2("usdhc2_post_div", "usdhc2_pre_div", base + 0xab80, 0, 6); 7358c2ecf20Sopenharmony_ci hws[IMX7D_USDHC3_ROOT_DIV] = imx_clk_hw_divider2("usdhc3_post_div", "usdhc3_pre_div", base + 0xac00, 0, 6); 7368c2ecf20Sopenharmony_ci hws[IMX7D_CAN1_ROOT_DIV] = imx_clk_hw_divider2("can1_post_div", "can1_pre_div", base + 0xac80, 0, 6); 7378c2ecf20Sopenharmony_ci hws[IMX7D_CAN2_ROOT_DIV] = imx_clk_hw_divider2("can2_post_div", "can2_pre_div", base + 0xad00, 0, 6); 7388c2ecf20Sopenharmony_ci hws[IMX7D_I2C1_ROOT_DIV] = imx_clk_hw_divider2("i2c1_post_div", "i2c1_pre_div", base + 0xad80, 0, 6); 7398c2ecf20Sopenharmony_ci hws[IMX7D_I2C2_ROOT_DIV] = imx_clk_hw_divider2("i2c2_post_div", "i2c2_pre_div", base + 0xae00, 0, 6); 7408c2ecf20Sopenharmony_ci hws[IMX7D_I2C3_ROOT_DIV] = imx_clk_hw_divider2("i2c3_post_div", "i2c3_pre_div", base + 0xae80, 0, 6); 7418c2ecf20Sopenharmony_ci hws[IMX7D_I2C4_ROOT_DIV] = imx_clk_hw_divider2("i2c4_post_div", "i2c4_pre_div", base + 0xaf00, 0, 6); 7428c2ecf20Sopenharmony_ci hws[IMX7D_UART1_ROOT_DIV] = imx_clk_hw_divider2("uart1_post_div", "uart1_pre_div", base + 0xaf80, 0, 6); 7438c2ecf20Sopenharmony_ci hws[IMX7D_UART2_ROOT_DIV] = imx_clk_hw_divider2("uart2_post_div", "uart2_pre_div", base + 0xb000, 0, 6); 7448c2ecf20Sopenharmony_ci hws[IMX7D_UART3_ROOT_DIV] = imx_clk_hw_divider2("uart3_post_div", "uart3_pre_div", base + 0xb080, 0, 6); 7458c2ecf20Sopenharmony_ci hws[IMX7D_UART4_ROOT_DIV] = imx_clk_hw_divider2("uart4_post_div", "uart4_pre_div", base + 0xb100, 0, 6); 7468c2ecf20Sopenharmony_ci hws[IMX7D_UART5_ROOT_DIV] = imx_clk_hw_divider2("uart5_post_div", "uart5_pre_div", base + 0xb180, 0, 6); 7478c2ecf20Sopenharmony_ci hws[IMX7D_UART6_ROOT_DIV] = imx_clk_hw_divider2("uart6_post_div", "uart6_pre_div", base + 0xb200, 0, 6); 7488c2ecf20Sopenharmony_ci hws[IMX7D_UART7_ROOT_DIV] = imx_clk_hw_divider2("uart7_post_div", "uart7_pre_div", base + 0xb280, 0, 6); 7498c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI1_ROOT_DIV] = imx_clk_hw_divider2("ecspi1_post_div", "ecspi1_pre_div", base + 0xb300, 0, 6); 7508c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI2_ROOT_DIV] = imx_clk_hw_divider2("ecspi2_post_div", "ecspi2_pre_div", base + 0xb380, 0, 6); 7518c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI3_ROOT_DIV] = imx_clk_hw_divider2("ecspi3_post_div", "ecspi3_pre_div", base + 0xb400, 0, 6); 7528c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI4_ROOT_DIV] = imx_clk_hw_divider2("ecspi4_post_div", "ecspi4_pre_div", base + 0xb480, 0, 6); 7538c2ecf20Sopenharmony_ci hws[IMX7D_PWM1_ROOT_DIV] = imx_clk_hw_divider2("pwm1_post_div", "pwm1_pre_div", base + 0xb500, 0, 6); 7548c2ecf20Sopenharmony_ci hws[IMX7D_PWM2_ROOT_DIV] = imx_clk_hw_divider2("pwm2_post_div", "pwm2_pre_div", base + 0xb580, 0, 6); 7558c2ecf20Sopenharmony_ci hws[IMX7D_PWM3_ROOT_DIV] = imx_clk_hw_divider2("pwm3_post_div", "pwm3_pre_div", base + 0xb600, 0, 6); 7568c2ecf20Sopenharmony_ci hws[IMX7D_PWM4_ROOT_DIV] = imx_clk_hw_divider2("pwm4_post_div", "pwm4_pre_div", base + 0xb680, 0, 6); 7578c2ecf20Sopenharmony_ci hws[IMX7D_FLEXTIMER1_ROOT_DIV] = imx_clk_hw_divider2("flextimer1_post_div", "flextimer1_pre_div", base + 0xb700, 0, 6); 7588c2ecf20Sopenharmony_ci hws[IMX7D_FLEXTIMER2_ROOT_DIV] = imx_clk_hw_divider2("flextimer2_post_div", "flextimer2_pre_div", base + 0xb780, 0, 6); 7598c2ecf20Sopenharmony_ci hws[IMX7D_SIM1_ROOT_DIV] = imx_clk_hw_divider2("sim1_post_div", "sim1_pre_div", base + 0xb800, 0, 6); 7608c2ecf20Sopenharmony_ci hws[IMX7D_SIM2_ROOT_DIV] = imx_clk_hw_divider2("sim2_post_div", "sim2_pre_div", base + 0xb880, 0, 6); 7618c2ecf20Sopenharmony_ci hws[IMX7D_GPT1_ROOT_DIV] = imx_clk_hw_divider2("gpt1_post_div", "gpt1_pre_div", base + 0xb900, 0, 6); 7628c2ecf20Sopenharmony_ci hws[IMX7D_GPT2_ROOT_DIV] = imx_clk_hw_divider2("gpt2_post_div", "gpt2_pre_div", base + 0xb980, 0, 6); 7638c2ecf20Sopenharmony_ci hws[IMX7D_GPT3_ROOT_DIV] = imx_clk_hw_divider2("gpt3_post_div", "gpt3_pre_div", base + 0xba00, 0, 6); 7648c2ecf20Sopenharmony_ci hws[IMX7D_GPT4_ROOT_DIV] = imx_clk_hw_divider2("gpt4_post_div", "gpt4_pre_div", base + 0xba80, 0, 6); 7658c2ecf20Sopenharmony_ci hws[IMX7D_TRACE_ROOT_DIV] = imx_clk_hw_divider2("trace_post_div", "trace_pre_div", base + 0xbb00, 0, 6); 7668c2ecf20Sopenharmony_ci hws[IMX7D_WDOG_ROOT_DIV] = imx_clk_hw_divider2("wdog_post_div", "wdog_pre_div", base + 0xbb80, 0, 6); 7678c2ecf20Sopenharmony_ci hws[IMX7D_CSI_MCLK_ROOT_DIV] = imx_clk_hw_divider2("csi_mclk_post_div", "csi_mclk_pre_div", base + 0xbc00, 0, 6); 7688c2ecf20Sopenharmony_ci hws[IMX7D_AUDIO_MCLK_ROOT_DIV] = imx_clk_hw_divider2("audio_mclk_post_div", "audio_mclk_pre_div", base + 0xbc80, 0, 6); 7698c2ecf20Sopenharmony_ci hws[IMX7D_WRCLK_ROOT_DIV] = imx_clk_hw_divider2("wrclk_post_div", "wrclk_pre_div", base + 0xbd00, 0, 6); 7708c2ecf20Sopenharmony_ci hws[IMX7D_CLKO1_ROOT_DIV] = imx_clk_hw_divider2("clko1_post_div", "clko1_pre_div", base + 0xbd80, 0, 6); 7718c2ecf20Sopenharmony_ci hws[IMX7D_CLKO2_ROOT_DIV] = imx_clk_hw_divider2("clko2_post_div", "clko2_pre_div", base + 0xbe00, 0, 6); 7728c2ecf20Sopenharmony_ci 7738c2ecf20Sopenharmony_ci hws[IMX7D_ARM_A7_ROOT_CLK] = imx_clk_hw_gate2_flags("arm_a7_root_clk", "arm_a7_div", base + 0x4000, 0, CLK_OPS_PARENT_ENABLE); 7748c2ecf20Sopenharmony_ci hws[IMX7D_ARM_M4_ROOT_CLK] = imx_clk_hw_gate4("arm_m4_root_clk", "arm_m4_div", base + 0x4010, 0); 7758c2ecf20Sopenharmony_ci hws[IMX7D_MAIN_AXI_ROOT_CLK] = imx_clk_hw_gate2_flags("main_axi_root_clk", "axi_post_div", base + 0x4040, 0, CLK_IS_CRITICAL | CLK_OPS_PARENT_ENABLE); 7768c2ecf20Sopenharmony_ci hws[IMX7D_DISP_AXI_ROOT_CLK] = imx_clk_hw_gate4("disp_axi_root_clk", "disp_axi_post_div", base + 0x4050, 0); 7778c2ecf20Sopenharmony_ci hws[IMX7D_ENET_AXI_ROOT_CLK] = imx_clk_hw_gate4("enet_axi_root_clk", "enet_axi_post_div", base + 0x4060, 0); 7788c2ecf20Sopenharmony_ci hws[IMX7D_OCRAM_CLK] = imx_clk_hw_gate4("ocram_clk", "main_axi_root_clk", base + 0x4110, 0); 7798c2ecf20Sopenharmony_ci hws[IMX7D_OCRAM_S_CLK] = imx_clk_hw_gate4("ocram_s_clk", "ahb_root_clk", base + 0x4120, 0); 7808c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_ROOT_CLK] = imx_clk_hw_gate2_flags("dram_root_clk", "dram_post_div", base + 0x4130, 0, CLK_IS_CRITICAL | CLK_OPS_PARENT_ENABLE); 7818c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_PHYM_ROOT_CLK] = imx_clk_hw_gate2_flags("dram_phym_root_clk", "dram_phym_cg", base + 0x4130, 0, CLK_IS_CRITICAL | CLK_OPS_PARENT_ENABLE); 7828c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_PHYM_ALT_ROOT_CLK] = imx_clk_hw_gate2_flags("dram_phym_alt_root_clk", "dram_phym_alt_post_div", base + 0x4130, 0, CLK_IS_CRITICAL | CLK_OPS_PARENT_ENABLE); 7838c2ecf20Sopenharmony_ci hws[IMX7D_DRAM_ALT_ROOT_CLK] = imx_clk_hw_gate2_flags("dram_alt_root_clk", "dram_alt_post_div", base + 0x4130, 0, CLK_IS_CRITICAL | CLK_OPS_PARENT_ENABLE); 7848c2ecf20Sopenharmony_ci hws[IMX7D_OCOTP_CLK] = imx_clk_hw_gate4("ocotp_clk", "ipg_root_clk", base + 0x4230, 0); 7858c2ecf20Sopenharmony_ci hws[IMX7D_SNVS_CLK] = imx_clk_hw_gate4("snvs_clk", "ipg_root_clk", base + 0x4250, 0); 7868c2ecf20Sopenharmony_ci hws[IMX7D_MU_ROOT_CLK] = imx_clk_hw_gate4("mu_root_clk", "ipg_root_clk", base + 0x4270, 0); 7878c2ecf20Sopenharmony_ci hws[IMX7D_CAAM_CLK] = imx_clk_hw_gate4("caam_clk", "ipg_root_clk", base + 0x4240, 0); 7888c2ecf20Sopenharmony_ci hws[IMX7D_USB_HSIC_ROOT_CLK] = imx_clk_hw_gate4("usb_hsic_root_clk", "usb_hsic_post_div", base + 0x4690, 0); 7898c2ecf20Sopenharmony_ci hws[IMX7D_SDMA_CORE_CLK] = imx_clk_hw_gate4("sdma_root_clk", "ahb_root_clk", base + 0x4480, 0); 7908c2ecf20Sopenharmony_ci hws[IMX7D_PCIE_CTRL_ROOT_CLK] = imx_clk_hw_gate4("pcie_ctrl_root_clk", "pcie_ctrl_post_div", base + 0x4600, 0); 7918c2ecf20Sopenharmony_ci hws[IMX7D_PCIE_PHY_ROOT_CLK] = imx_clk_hw_gate4("pcie_phy_root_clk", "pcie_phy_post_div", base + 0x4600, 0); 7928c2ecf20Sopenharmony_ci hws[IMX7D_EPDC_PIXEL_ROOT_CLK] = imx_clk_hw_gate4("epdc_pixel_root_clk", "epdc_pixel_post_div", base + 0x44a0, 0); 7938c2ecf20Sopenharmony_ci hws[IMX7D_LCDIF_PIXEL_ROOT_CLK] = imx_clk_hw_gate4("lcdif_pixel_root_clk", "lcdif_pixel_post_div", base + 0x44b0, 0); 7948c2ecf20Sopenharmony_ci hws[IMX7D_PXP_CLK] = imx_clk_hw_gate4("pxp_clk", "main_axi_root_clk", base + 0x44c0, 0); 7958c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_DSI_ROOT_CLK] = imx_clk_hw_gate4("mipi_dsi_root_clk", "mipi_dsi_post_div", base + 0x4650, 0); 7968c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_CSI_ROOT_CLK] = imx_clk_hw_gate4("mipi_csi_root_clk", "mipi_csi_post_div", base + 0x4640, 0); 7978c2ecf20Sopenharmony_ci hws[IMX7D_MIPI_DPHY_ROOT_CLK] = imx_clk_hw_gate4("mipi_dphy_root_clk", "mipi_dphy_post_div", base + 0x4660, 0); 7988c2ecf20Sopenharmony_ci hws[IMX7D_ENET1_IPG_ROOT_CLK] = imx_clk_hw_gate2_shared2("enet1_ipg_root_clk", "enet_axi_post_div", base + 0x4700, 0, &share_count_enet1); 7998c2ecf20Sopenharmony_ci hws[IMX7D_ENET1_TIME_ROOT_CLK] = imx_clk_hw_gate2_shared2("enet1_time_root_clk", "enet1_time_post_div", base + 0x4700, 0, &share_count_enet1); 8008c2ecf20Sopenharmony_ci hws[IMX7D_ENET2_IPG_ROOT_CLK] = imx_clk_hw_gate2_shared2("enet2_ipg_root_clk", "enet_axi_post_div", base + 0x4710, 0, &share_count_enet2); 8018c2ecf20Sopenharmony_ci hws[IMX7D_ENET2_TIME_ROOT_CLK] = imx_clk_hw_gate2_shared2("enet2_time_root_clk", "enet2_time_post_div", base + 0x4710, 0, &share_count_enet2); 8028c2ecf20Sopenharmony_ci hws[IMX7D_SAI1_ROOT_CLK] = imx_clk_hw_gate2_shared2("sai1_root_clk", "sai1_post_div", base + 0x48c0, 0, &share_count_sai1); 8038c2ecf20Sopenharmony_ci hws[IMX7D_SAI1_IPG_CLK] = imx_clk_hw_gate2_shared2("sai1_ipg_clk", "ipg_root_clk", base + 0x48c0, 0, &share_count_sai1); 8048c2ecf20Sopenharmony_ci hws[IMX7D_SAI2_ROOT_CLK] = imx_clk_hw_gate2_shared2("sai2_root_clk", "sai2_post_div", base + 0x48d0, 0, &share_count_sai2); 8058c2ecf20Sopenharmony_ci hws[IMX7D_SAI2_IPG_CLK] = imx_clk_hw_gate2_shared2("sai2_ipg_clk", "ipg_root_clk", base + 0x48d0, 0, &share_count_sai2); 8068c2ecf20Sopenharmony_ci hws[IMX7D_SAI3_ROOT_CLK] = imx_clk_hw_gate2_shared2("sai3_root_clk", "sai3_post_div", base + 0x48e0, 0, &share_count_sai3); 8078c2ecf20Sopenharmony_ci hws[IMX7D_SAI3_IPG_CLK] = imx_clk_hw_gate2_shared2("sai3_ipg_clk", "ipg_root_clk", base + 0x48e0, 0, &share_count_sai3); 8088c2ecf20Sopenharmony_ci hws[IMX7D_SPDIF_ROOT_CLK] = imx_clk_hw_gate4("spdif_root_clk", "spdif_post_div", base + 0x44d0, 0); 8098c2ecf20Sopenharmony_ci hws[IMX7D_EIM_ROOT_CLK] = imx_clk_hw_gate4("eim_root_clk", "eim_post_div", base + 0x4160, 0); 8108c2ecf20Sopenharmony_ci hws[IMX7D_NAND_RAWNAND_CLK] = imx_clk_hw_gate2_shared2("nand_rawnand_clk", "nand_root_clk", base + 0x4140, 0, &share_count_nand); 8118c2ecf20Sopenharmony_ci hws[IMX7D_NAND_USDHC_BUS_RAWNAND_CLK] = imx_clk_hw_gate2_shared2("nand_usdhc_rawnand_clk", "nand_usdhc_root_clk", base + 0x4140, 0, &share_count_nand); 8128c2ecf20Sopenharmony_ci hws[IMX7D_QSPI_ROOT_CLK] = imx_clk_hw_gate4("qspi_root_clk", "qspi_post_div", base + 0x4150, 0); 8138c2ecf20Sopenharmony_ci hws[IMX7D_USDHC1_ROOT_CLK] = imx_clk_hw_gate4("usdhc1_root_clk", "usdhc1_post_div", base + 0x46c0, 0); 8148c2ecf20Sopenharmony_ci hws[IMX7D_USDHC2_ROOT_CLK] = imx_clk_hw_gate4("usdhc2_root_clk", "usdhc2_post_div", base + 0x46d0, 0); 8158c2ecf20Sopenharmony_ci hws[IMX7D_USDHC3_ROOT_CLK] = imx_clk_hw_gate4("usdhc3_root_clk", "usdhc3_post_div", base + 0x46e0, 0); 8168c2ecf20Sopenharmony_ci hws[IMX7D_CAN1_ROOT_CLK] = imx_clk_hw_gate4("can1_root_clk", "can1_post_div", base + 0x4740, 0); 8178c2ecf20Sopenharmony_ci hws[IMX7D_CAN2_ROOT_CLK] = imx_clk_hw_gate4("can2_root_clk", "can2_post_div", base + 0x4750, 0); 8188c2ecf20Sopenharmony_ci hws[IMX7D_I2C1_ROOT_CLK] = imx_clk_hw_gate4("i2c1_root_clk", "i2c1_post_div", base + 0x4880, 0); 8198c2ecf20Sopenharmony_ci hws[IMX7D_I2C2_ROOT_CLK] = imx_clk_hw_gate4("i2c2_root_clk", "i2c2_post_div", base + 0x4890, 0); 8208c2ecf20Sopenharmony_ci hws[IMX7D_I2C3_ROOT_CLK] = imx_clk_hw_gate4("i2c3_root_clk", "i2c3_post_div", base + 0x48a0, 0); 8218c2ecf20Sopenharmony_ci hws[IMX7D_I2C4_ROOT_CLK] = imx_clk_hw_gate4("i2c4_root_clk", "i2c4_post_div", base + 0x48b0, 0); 8228c2ecf20Sopenharmony_ci hws[IMX7D_UART1_ROOT_CLK] = imx_clk_hw_gate4("uart1_root_clk", "uart1_post_div", base + 0x4940, 0); 8238c2ecf20Sopenharmony_ci hws[IMX7D_UART2_ROOT_CLK] = imx_clk_hw_gate4("uart2_root_clk", "uart2_post_div", base + 0x4950, 0); 8248c2ecf20Sopenharmony_ci hws[IMX7D_UART3_ROOT_CLK] = imx_clk_hw_gate4("uart3_root_clk", "uart3_post_div", base + 0x4960, 0); 8258c2ecf20Sopenharmony_ci hws[IMX7D_UART4_ROOT_CLK] = imx_clk_hw_gate4("uart4_root_clk", "uart4_post_div", base + 0x4970, 0); 8268c2ecf20Sopenharmony_ci hws[IMX7D_UART5_ROOT_CLK] = imx_clk_hw_gate4("uart5_root_clk", "uart5_post_div", base + 0x4980, 0); 8278c2ecf20Sopenharmony_ci hws[IMX7D_UART6_ROOT_CLK] = imx_clk_hw_gate4("uart6_root_clk", "uart6_post_div", base + 0x4990, 0); 8288c2ecf20Sopenharmony_ci hws[IMX7D_UART7_ROOT_CLK] = imx_clk_hw_gate4("uart7_root_clk", "uart7_post_div", base + 0x49a0, 0); 8298c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI1_ROOT_CLK] = imx_clk_hw_gate4("ecspi1_root_clk", "ecspi1_post_div", base + 0x4780, 0); 8308c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI2_ROOT_CLK] = imx_clk_hw_gate4("ecspi2_root_clk", "ecspi2_post_div", base + 0x4790, 0); 8318c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI3_ROOT_CLK] = imx_clk_hw_gate4("ecspi3_root_clk", "ecspi3_post_div", base + 0x47a0, 0); 8328c2ecf20Sopenharmony_ci hws[IMX7D_ECSPI4_ROOT_CLK] = imx_clk_hw_gate4("ecspi4_root_clk", "ecspi4_post_div", base + 0x47b0, 0); 8338c2ecf20Sopenharmony_ci hws[IMX7D_PWM1_ROOT_CLK] = imx_clk_hw_gate4("pwm1_root_clk", "pwm1_post_div", base + 0x4840, 0); 8348c2ecf20Sopenharmony_ci hws[IMX7D_PWM2_ROOT_CLK] = imx_clk_hw_gate4("pwm2_root_clk", "pwm2_post_div", base + 0x4850, 0); 8358c2ecf20Sopenharmony_ci hws[IMX7D_PWM3_ROOT_CLK] = imx_clk_hw_gate4("pwm3_root_clk", "pwm3_post_div", base + 0x4860, 0); 8368c2ecf20Sopenharmony_ci hws[IMX7D_PWM4_ROOT_CLK] = imx_clk_hw_gate4("pwm4_root_clk", "pwm4_post_div", base + 0x4870, 0); 8378c2ecf20Sopenharmony_ci hws[IMX7D_FLEXTIMER1_ROOT_CLK] = imx_clk_hw_gate4("flextimer1_root_clk", "flextimer1_post_div", base + 0x4800, 0); 8388c2ecf20Sopenharmony_ci hws[IMX7D_FLEXTIMER2_ROOT_CLK] = imx_clk_hw_gate4("flextimer2_root_clk", "flextimer2_post_div", base + 0x4810, 0); 8398c2ecf20Sopenharmony_ci hws[IMX7D_SIM1_ROOT_CLK] = imx_clk_hw_gate4("sim1_root_clk", "sim1_post_div", base + 0x4900, 0); 8408c2ecf20Sopenharmony_ci hws[IMX7D_SIM2_ROOT_CLK] = imx_clk_hw_gate4("sim2_root_clk", "sim2_post_div", base + 0x4910, 0); 8418c2ecf20Sopenharmony_ci hws[IMX7D_GPT1_ROOT_CLK] = imx_clk_hw_gate4("gpt1_root_clk", "gpt1_post_div", base + 0x47c0, 0); 8428c2ecf20Sopenharmony_ci hws[IMX7D_GPT2_ROOT_CLK] = imx_clk_hw_gate4("gpt2_root_clk", "gpt2_post_div", base + 0x47d0, 0); 8438c2ecf20Sopenharmony_ci hws[IMX7D_GPT3_ROOT_CLK] = imx_clk_hw_gate4("gpt3_root_clk", "gpt3_post_div", base + 0x47e0, 0); 8448c2ecf20Sopenharmony_ci hws[IMX7D_GPT4_ROOT_CLK] = imx_clk_hw_gate4("gpt4_root_clk", "gpt4_post_div", base + 0x47f0, 0); 8458c2ecf20Sopenharmony_ci hws[IMX7D_TRACE_ROOT_CLK] = imx_clk_hw_gate4("trace_root_clk", "trace_post_div", base + 0x4300, 0); 8468c2ecf20Sopenharmony_ci hws[IMX7D_WDOG1_ROOT_CLK] = imx_clk_hw_gate4("wdog1_root_clk", "wdog_post_div", base + 0x49c0, 0); 8478c2ecf20Sopenharmony_ci hws[IMX7D_WDOG2_ROOT_CLK] = imx_clk_hw_gate4("wdog2_root_clk", "wdog_post_div", base + 0x49d0, 0); 8488c2ecf20Sopenharmony_ci hws[IMX7D_WDOG3_ROOT_CLK] = imx_clk_hw_gate4("wdog3_root_clk", "wdog_post_div", base + 0x49e0, 0); 8498c2ecf20Sopenharmony_ci hws[IMX7D_WDOG4_ROOT_CLK] = imx_clk_hw_gate4("wdog4_root_clk", "wdog_post_div", base + 0x49f0, 0); 8508c2ecf20Sopenharmony_ci hws[IMX7D_KPP_ROOT_CLK] = imx_clk_hw_gate4("kpp_root_clk", "ipg_root_clk", base + 0x4aa0, 0); 8518c2ecf20Sopenharmony_ci hws[IMX7D_CSI_MCLK_ROOT_CLK] = imx_clk_hw_gate4("csi_mclk_root_clk", "csi_mclk_post_div", base + 0x4490, 0); 8528c2ecf20Sopenharmony_ci hws[IMX7D_WRCLK_ROOT_CLK] = imx_clk_hw_gate4("wrclk_root_clk", "wrclk_post_div", base + 0x47a0, 0); 8538c2ecf20Sopenharmony_ci hws[IMX7D_USB_CTRL_CLK] = imx_clk_hw_gate4("usb_ctrl_clk", "ahb_root_clk", base + 0x4680, 0); 8548c2ecf20Sopenharmony_ci hws[IMX7D_USB_PHY1_CLK] = imx_clk_hw_gate4("usb_phy1_clk", "pll_usb1_main_clk", base + 0x46a0, 0); 8558c2ecf20Sopenharmony_ci hws[IMX7D_USB_PHY2_CLK] = imx_clk_hw_gate4("usb_phy2_clk", "pll_usb_main_clk", base + 0x46b0, 0); 8568c2ecf20Sopenharmony_ci hws[IMX7D_ADC_ROOT_CLK] = imx_clk_hw_gate4("adc_root_clk", "ipg_root_clk", base + 0x4200, 0); 8578c2ecf20Sopenharmony_ci 8588c2ecf20Sopenharmony_ci hws[IMX7D_GPT_3M_CLK] = imx_clk_hw_fixed_factor("gpt_3m", "osc", 1, 8); 8598c2ecf20Sopenharmony_ci 8608c2ecf20Sopenharmony_ci hws[IMX7D_CLK_ARM] = imx_clk_hw_cpu("arm", "arm_a7_root_clk", 8618c2ecf20Sopenharmony_ci hws[IMX7D_ARM_A7_ROOT_CLK]->clk, 8628c2ecf20Sopenharmony_ci hws[IMX7D_ARM_A7_ROOT_SRC]->clk, 8638c2ecf20Sopenharmony_ci hws[IMX7D_PLL_ARM_MAIN_CLK]->clk, 8648c2ecf20Sopenharmony_ci hws[IMX7D_PLL_SYS_MAIN_CLK]->clk); 8658c2ecf20Sopenharmony_ci 8668c2ecf20Sopenharmony_ci imx_check_clk_hws(hws, IMX7D_CLK_END); 8678c2ecf20Sopenharmony_ci 8688c2ecf20Sopenharmony_ci of_clk_add_hw_provider(np, of_clk_hw_onecell_get, clk_hw_data); 8698c2ecf20Sopenharmony_ci 8708c2ecf20Sopenharmony_ci clk_set_parent(hws[IMX7D_PLL_ARM_MAIN_BYPASS]->clk, hws[IMX7D_PLL_ARM_MAIN]->clk); 8718c2ecf20Sopenharmony_ci clk_set_parent(hws[IMX7D_PLL_DRAM_MAIN_BYPASS]->clk, hws[IMX7D_PLL_DRAM_MAIN]->clk); 8728c2ecf20Sopenharmony_ci clk_set_parent(hws[IMX7D_PLL_SYS_MAIN_BYPASS]->clk, hws[IMX7D_PLL_SYS_MAIN]->clk); 8738c2ecf20Sopenharmony_ci clk_set_parent(hws[IMX7D_PLL_ENET_MAIN_BYPASS]->clk, hws[IMX7D_PLL_ENET_MAIN]->clk); 8748c2ecf20Sopenharmony_ci clk_set_parent(hws[IMX7D_PLL_AUDIO_MAIN_BYPASS]->clk, hws[IMX7D_PLL_AUDIO_MAIN]->clk); 8758c2ecf20Sopenharmony_ci clk_set_parent(hws[IMX7D_PLL_VIDEO_MAIN_BYPASS]->clk, hws[IMX7D_PLL_VIDEO_MAIN]->clk); 8768c2ecf20Sopenharmony_ci 8778c2ecf20Sopenharmony_ci clk_set_parent(hws[IMX7D_MIPI_CSI_ROOT_SRC]->clk, hws[IMX7D_PLL_SYS_PFD3_CLK]->clk); 8788c2ecf20Sopenharmony_ci 8798c2ecf20Sopenharmony_ci /* use old gpt clk setting, gpt1 root clk must be twice as gpt counter freq */ 8808c2ecf20Sopenharmony_ci clk_set_parent(hws[IMX7D_GPT1_ROOT_SRC]->clk, hws[IMX7D_OSC_24M_CLK]->clk); 8818c2ecf20Sopenharmony_ci 8828c2ecf20Sopenharmony_ci /* Set clock rate for USBPHY, the USB_PLL at CCM is from USBOTG2 */ 8838c2ecf20Sopenharmony_ci hws[IMX7D_USB1_MAIN_480M_CLK] = imx_clk_hw_fixed_factor("pll_usb1_main_clk", "osc", 20, 1); 8848c2ecf20Sopenharmony_ci hws[IMX7D_USB_MAIN_480M_CLK] = imx_clk_hw_fixed_factor("pll_usb_main_clk", "osc", 20, 1); 8858c2ecf20Sopenharmony_ci 8868c2ecf20Sopenharmony_ci imx_register_uart_clocks(7); 8878c2ecf20Sopenharmony_ci 8888c2ecf20Sopenharmony_ci} 8898c2ecf20Sopenharmony_ciCLK_OF_DECLARE(imx7d, "fsl,imx7d-ccm", imx7d_clocks_init); 890