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