1*52e6676eSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 21a34275dSTony Lindgren 31a34275dSTony Lindgren #include <linux/kernel.h> 41a34275dSTony Lindgren #include <linux/list.h> 51a34275dSTony Lindgren #include <linux/clk-provider.h> 61a34275dSTony Lindgren #include <linux/clk/ti.h> 750ef5089STero Kristo #include <dt-bindings/clock/dm816.h> 81a34275dSTony Lindgren 9a5aa8a60STero Kristo #include "clock.h" 10a5aa8a60STero Kristo 1150ef5089STero Kristo static const struct omap_clkctrl_reg_data dm816_default_clkctrl_regs[] __initconst = { 1250ef5089STero Kristo { DM816_USB_OTG_HS_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk6_ck" }, 1350ef5089STero Kristo { 0 }, 1450ef5089STero Kristo }; 1550ef5089STero Kristo 1650ef5089STero Kristo static const struct omap_clkctrl_reg_data dm816_alwon_clkctrl_regs[] __initconst = { 1750ef5089STero Kristo { DM816_UART1_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk10_ck" }, 1850ef5089STero Kristo { DM816_UART2_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk10_ck" }, 1950ef5089STero Kristo { DM816_UART3_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk10_ck" }, 2050ef5089STero Kristo { DM816_GPIO1_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk6_ck" }, 2150ef5089STero Kristo { DM816_GPIO2_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk6_ck" }, 2250ef5089STero Kristo { DM816_I2C1_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk10_ck" }, 2350ef5089STero Kristo { DM816_I2C2_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk10_ck" }, 2450ef5089STero Kristo { DM816_TIMER1_CLKCTRL, NULL, CLKF_SW_SUP, "timer1_fck" }, 2550ef5089STero Kristo { DM816_TIMER2_CLKCTRL, NULL, CLKF_SW_SUP, "timer2_fck" }, 2650ef5089STero Kristo { DM816_TIMER3_CLKCTRL, NULL, CLKF_SW_SUP, "timer3_fck" }, 2750ef5089STero Kristo { DM816_TIMER4_CLKCTRL, NULL, CLKF_SW_SUP, "timer4_fck" }, 2850ef5089STero Kristo { DM816_TIMER5_CLKCTRL, NULL, CLKF_SW_SUP, "timer5_fck" }, 2950ef5089STero Kristo { DM816_TIMER6_CLKCTRL, NULL, CLKF_SW_SUP, "timer6_fck" }, 3050ef5089STero Kristo { DM816_TIMER7_CLKCTRL, NULL, CLKF_SW_SUP, "timer7_fck" }, 3150ef5089STero Kristo { DM816_WD_TIMER_CLKCTRL, NULL, CLKF_SW_SUP | CLKF_NO_IDLEST, "sysclk18_ck" }, 3250ef5089STero Kristo { DM816_MCSPI1_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk10_ck" }, 3350ef5089STero Kristo { DM816_MAILBOX_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk6_ck" }, 3450ef5089STero Kristo { DM816_SPINBOX_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk6_ck" }, 3550ef5089STero Kristo { DM816_MMC1_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk10_ck" }, 3650ef5089STero Kristo { DM816_GPMC_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk6_ck" }, 3750ef5089STero Kristo { DM816_DAVINCI_MDIO_CLKCTRL, NULL, CLKF_SW_SUP | CLKF_NO_IDLEST, "sysclk24_ck" }, 3850ef5089STero Kristo { DM816_EMAC1_CLKCTRL, NULL, CLKF_SW_SUP | CLKF_NO_IDLEST, "sysclk24_ck" }, 3950ef5089STero Kristo { DM816_MPU_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk2_ck" }, 4050ef5089STero Kristo { DM816_RTC_CLKCTRL, NULL, CLKF_SW_SUP | CLKF_NO_IDLEST, "sysclk18_ck" }, 4150ef5089STero Kristo { DM816_TPCC_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk4_ck" }, 4250ef5089STero Kristo { DM816_TPTC0_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk4_ck" }, 4350ef5089STero Kristo { DM816_TPTC1_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk4_ck" }, 4450ef5089STero Kristo { DM816_TPTC2_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk4_ck" }, 4550ef5089STero Kristo { DM816_TPTC3_CLKCTRL, NULL, CLKF_SW_SUP, "sysclk4_ck" }, 4650ef5089STero Kristo { 0 }, 4750ef5089STero Kristo }; 4850ef5089STero Kristo 4950ef5089STero Kristo const struct omap_clkctrl_data dm816_clkctrl_data[] __initconst = { 5050ef5089STero Kristo { 0x48180500, dm816_default_clkctrl_regs }, 5150ef5089STero Kristo { 0x48181400, dm816_alwon_clkctrl_regs }, 5250ef5089STero Kristo { 0 }, 5350ef5089STero Kristo }; 5450ef5089STero Kristo 551a34275dSTony Lindgren static struct ti_dt_clk dm816x_clks[] = { 561a34275dSTony Lindgren DT_CLK(NULL, "sys_clkin", "sys_clkin_ck"), 571a34275dSTony Lindgren DT_CLK(NULL, "timer_sys_ck", "sys_clkin_ck"), 583a5b1dc4SNeil Armstrong DT_CLK(NULL, "timer_32k_ck", "sysclk18_ck"), 593a5b1dc4SNeil Armstrong DT_CLK(NULL, "timer_ext_ck", "tclkin_ck"), 601a34275dSTony Lindgren { .node_name = NULL }, 611a34275dSTony Lindgren }; 621a34275dSTony Lindgren 631a34275dSTony Lindgren static const char *enable_init_clks[] = { 641a34275dSTony Lindgren "ddr_pll_clk1", 651a34275dSTony Lindgren "ddr_pll_clk2", 661a34275dSTony Lindgren "ddr_pll_clk3", 6716aed29dSTony Lindgren "sysclk6_ck", 681a34275dSTony Lindgren }; 691a34275dSTony Lindgren 709cf705deSTony Lindgren int __init dm816x_dt_clk_init(void) 711a34275dSTony Lindgren { 721a34275dSTony Lindgren ti_dt_clocks_register(dm816x_clks); 731a34275dSTony Lindgren omap2_clk_disable_autoidle_all(); 74d935864aSTero Kristo ti_clk_add_aliases(); 751a34275dSTony Lindgren omap2_clk_enable_init_clocks(enable_init_clks, 761a34275dSTony Lindgren ARRAY_SIZE(enable_init_clks)); 771a34275dSTony Lindgren 781a34275dSTony Lindgren return 0; 791a34275dSTony Lindgren } 80