#include <linux/clk-provider.h>
#include <linux/device.h>
#include <linux/sys_soc.h>
#include "renesas-cpg-mssr.h"
#include "rcar-gen2-cpg.h"
#define CPG_FRQCRB 0x0004
#define CPG_FRQCRB_KICK BIT(31)
#define CPG_SDCKCR 0x0074
#define CPG_PLL0CR 0x00d8
#define CPG_PLL0CR_STC_SHIFT 24
#define CPG_PLL0CR_STC_MASK (0x7f << CPG_PLL0CR_STC_SHIFT)
#define CPG_FRQCRC 0x00e0
#define CPG_FRQCRC_ZFC_SHIFT 8
#define CPG_FRQCRC_ZFC_MASK (0x1f << CPG_FRQCRC_ZFC_SHIFT)
#define CPG_ADSPCKCR 0x025c
#define CPG_RCANCKCR 0x0270
static spinlock_t cpg_lock;
#define to_z_clk(_hw) container_of(_hw, struct cpg_z_clk, hw)
static unsigned long cpg_z_clk_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
struct cpg_z_clk *zclk = to_z_clk(hw);
val = (readl(zclk->reg) & CPG_FRQCRC_ZFC_MASK) >> CPG_FRQCRC_ZFC_SHIFT;
return div_u64((u64)parent_rate * mult, 32);