18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Marvell EBU SoC common clock handling 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2012 Marvell 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Gregory CLEMENT <gregory.clement@free-electrons.com> 88c2ecf20Sopenharmony_ci * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> 98c2ecf20Sopenharmony_ci * Andrew Lunn <andrew@lunn.ch> 108c2ecf20Sopenharmony_ci * 118c2ecf20Sopenharmony_ci */ 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#ifndef __CLK_MVEBU_COMMON_H_ 148c2ecf20Sopenharmony_ci#define __CLK_MVEBU_COMMON_H_ 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#include <linux/kernel.h> 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ciextern spinlock_t ctrl_gating_lock; 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cistruct device_node; 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistruct coreclk_ratio { 238c2ecf20Sopenharmony_ci int id; 248c2ecf20Sopenharmony_ci const char *name; 258c2ecf20Sopenharmony_ci}; 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cistruct coreclk_soc_desc { 288c2ecf20Sopenharmony_ci u32 (*get_tclk_freq)(void __iomem *sar); 298c2ecf20Sopenharmony_ci u32 (*get_cpu_freq)(void __iomem *sar); 308c2ecf20Sopenharmony_ci void (*get_clk_ratio)(void __iomem *sar, int id, int *mult, int *div); 318c2ecf20Sopenharmony_ci u32 (*get_refclk_freq)(void __iomem *sar); 328c2ecf20Sopenharmony_ci bool (*is_sscg_enabled)(void __iomem *sar); 338c2ecf20Sopenharmony_ci u32 (*fix_sscg_deviation)(u32 system_clk); 348c2ecf20Sopenharmony_ci const struct coreclk_ratio *ratios; 358c2ecf20Sopenharmony_ci int num_ratios; 368c2ecf20Sopenharmony_ci}; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistruct clk_gating_soc_desc { 398c2ecf20Sopenharmony_ci const char *name; 408c2ecf20Sopenharmony_ci const char *parent; 418c2ecf20Sopenharmony_ci int bit_idx; 428c2ecf20Sopenharmony_ci unsigned long flags; 438c2ecf20Sopenharmony_ci}; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_civoid __init mvebu_coreclk_setup(struct device_node *np, 468c2ecf20Sopenharmony_ci const struct coreclk_soc_desc *desc); 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_civoid __init mvebu_clk_gating_setup(struct device_node *np, 498c2ecf20Sopenharmony_ci const struct clk_gating_soc_desc *desc); 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci/* 528c2ecf20Sopenharmony_ci * This function is shared among the Kirkwood, Armada 370, Armada XP 538c2ecf20Sopenharmony_ci * and Armada 375 SoC 548c2ecf20Sopenharmony_ci */ 558c2ecf20Sopenharmony_ciu32 kirkwood_fix_sscg_deviation(u32 system_clk); 568c2ecf20Sopenharmony_ci#endif 57