/*
 * r8a7745 Clock Pulse Generator / Module Standby and Software Reset
 *
 * Copyright (C) 2016 Cogent Embedded Inc.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published
 * by the Free Software Foundation; of the License.
 */

#include <linux/device.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/soc/renesas/rcar-rst.h>

#include <dt-bindings/clock/r8a7745-cpg-mssr.h>

#include "renesas-cpg-mssr.h"
#include "rcar-gen2-cpg.h"

enum clk_ids {
	/* Core Clock Outputs exported to DT */
	LAST_DT_CORE_CLK = R8A7745_CLK_OSC,

	/* External Input Clocks */
	CLK_EXTAL,
	CLK_USB_EXTAL,

	/* Internal Core Clocks */
	CLK_MAIN,
	CLK_PLL0,
	CLK_PLL1,
	CLK_PLL3,
	CLK_PLL1_DIV2,

	/* Module Clocks */
	MOD_CLK_BASE
};

static const struct cpg_core_clk r8a7745_core_clks[] __initconst = {
	/* External Clock Inputs */
	DEF_INPUT("extal",	CLK_EXTAL),
	DEF_INPUT("usb_extal",	CLK_USB_EXTAL),

	/* Internal Core Clocks */
	DEF_BASE(".main",	CLK_MAIN, CLK_TYPE_GEN2_MAIN, CLK_EXTAL),
	DEF_BASE(".pll0",	CLK_PLL0, CLK_TYPE_GEN2_PLL0, CLK_MAIN),
	DEF_BASE(".pll1",	CLK_PLL1, CLK_TYPE_GEN2_PLL1, CLK_MAIN),
	DEF_BASE(".pll3",	CLK_PLL3, CLK_TYPE_GEN2_PLL3, CLK_MAIN),

	DEF_FIXED(".pll1_div2",	CLK_PLL1_DIV2, CLK_PLL1, 2, 1),

	/* Core Clock Outputs */
	DEF_BASE("sdh",  R8A7745_CLK_SDH,  CLK_TYPE_GEN2_SDH,	CLK_PLL1),
	DEF_BASE("sd0",  R8A7745_CLK_SD0,  CLK_TYPE_GEN2_SD0,	CLK_PLL1),
	DEF_BASE("qspi", R8A7745_CLK_QSPI, CLK_TYPE_GEN2_QSPI,	CLK_PLL1_DIV2),
	DEF_BASE("rcan", R8A7745_CLK_RCAN, CLK_TYPE_GEN2_RCAN,	CLK_USB_EXTAL),

	DEF_FIXED("z2",    R8A7745_CLK_Z2,	CLK_PLL0,	    1, 1),
	DEF_FIXED("zg",    R8A7745_CLK_ZG,	CLK_PLL1,	    6, 1),
	DEF_FIXED("zx",    R8A7745_CLK_ZX,	CLK_PLL1,	    3, 1),
	DEF_FIXED("zs",    R8A7745_CLK_ZS,	CLK_PLL1,	    6, 1),
	DEF_FIXED("hp",    R8A7745_CLK_HP,	CLK_PLL1,	   12, 1),
	DEF_FIXED("b",     R8A7745_CLK_B,	CLK_PLL1,	   12, 1),
	DEF_FIXED("lb",    R8A7745_CLK_LB,	CLK_PLL1,	   24, 1),
	DEF_FIXED("p",     R8A7745_CLK_P,	CLK_PLL1,	   24, 1),
	DEF_FIXED("cl",    R8A7745_CLK_CL,	CLK_PLL1,	   48, 1),
	DEF_FIXED("cp",    R8A7745_CLK_CP,	CLK_PLL1,	   48, 1),
	DEF_FIXED("m2",    R8A7745_CLK_M2,	CLK_PLL1,	    8, 1),
	DEF_FIXED("zb3",   R8A7745_CLK_ZB3,	CLK_PLL3,	    4, 1),
	DEF_FIXED("zb3d2", R8A7745_CLK_ZB3D2,	CLK_PLL3,	    8, 1),
	DEF_FIXED("ddr",   R8A7745_CLK_DDR,	CLK_PLL3,	    8, 1),
	DEF_FIXED("mp",    R8A7745_CLK_MP,	CLK_PLL1_DIV2,	   15, 1),
	DEF_FIXED("cpex",  R8A7745_CLK_CPEX,	CLK_EXTAL,	    2, 1),
	DEF_FIXED("r",     R8A7745_CLK_R,	CLK_PLL1,	49152, 1),
	DEF_FIXED("osc",   R8A7745_CLK_OSC,	CLK_PLL1,	12288, 1),

	DEF_DIV6P1("sd2",  R8A7745_CLK_SD2,	CLK_PLL1_DIV2,	0x078),
	DEF_DIV6P1("sd3",  R8A7745_CLK_SD3,	CLK_PLL1_DIV2,	0x26c),
	DEF_DIV6P1("mmc0", R8A7745_CLK_MMC0,	CLK_PLL1_DIV2,	0x240),
};

static const struct mssr_mod_clk r8a7745_mod_clks[] __initconst = {
	DEF_MOD("msiof0",		   0,	R8A7745_CLK_MP),
	DEF_MOD("vcp0",			 101,	R8A7745_CLK_ZS),
	DEF_MOD("vpc0",			 103,	R8A7745_CLK_ZS),
	DEF_MOD("tmu1",			 111,	R8A7745_CLK_P),
	DEF_MOD("3dg",			 112,	R8A7745_CLK_ZG),
	DEF_MOD("2d-dmac",		 115,	R8A7745_CLK_ZS),
	DEF_MOD("fdp1-0",		 119,	R8A7745_CLK_ZS),
	DEF_MOD("tmu3",			 121,	R8A7745_CLK_P),
	DEF_MOD("tmu2",			 122,	R8A7745_CLK_P),
	DEF_MOD("cmt0",			 124,	R8A7745_CLK_R),
	DEF_MOD("tmu0",			 125,	R8A7745_CLK_CP),
	DEF_MOD("vsp1du0",		 128,	R8A7745_CLK_ZS),
	DEF_MOD("vsp1-sy",		 131,	R8A7745_CLK_ZS),
	DEF_MOD("scifa2",		 202,	R8A7745_CLK_MP),
	DEF_MOD("scifa1",		 203,	R8A7745_CLK_MP),
	DEF_MOD("scifa0",		 204,	R8A7745_CLK_MP),
	DEF_MOD("msiof2",		 205,	R8A7745_CLK_MP),
	DEF_MOD("scifb0",		 206,	R8A7745_CLK_MP),
	DEF_MOD("scifb1",		 207,	R8A7745_CLK_MP),
	DEF_MOD("msiof1",		 208,	R8A7745_CLK_MP),
	DEF_MOD("scifb2",		 216,	R8A7745_CLK_MP),
	DEF_MOD("sys-dmac1",		 218,	R8A7745_CLK_ZS),
	DEF_MOD("sys-dmac0",		 219,	R8A7745_CLK_ZS),
	DEF_MOD("tpu0",			 304,	R8A7745_CLK_CP),
	DEF_MOD("sdhi3",		 311,	R8A7745_CLK_SD3),
	DEF_MOD("sdhi2",		 312,	R8A7745_CLK_SD2),
	DEF_MOD("sdhi0",		 314,	R8A7745_CLK_SD0),
	DEF_MOD("mmcif0",		 315,	R8A7745_CLK_MMC0),
	DEF_MOD("iic0",			 318,	R8A7745_CLK_HP),
	DEF_MOD("iic1",			 323,	R8A7745_CLK_HP),
	DEF_MOD("cmt1",			 329,	R8A7745_CLK_R),
	DEF_MOD("usbhs-dmac0",		 330,	R8A7745_CLK_HP),
	DEF_MOD("usbhs-dmac1",		 331,	R8A7745_CLK_HP),
	DEF_MOD("rwdt",			 402,	R8A7745_CLK_R),
	DEF_MOD("irqc",			 407,	R8A7745_CLK_CP),
	DEF_MOD("intc-sys",		 408,	R8A7745_CLK_ZS),
	DEF_MOD("audio-dmac0",		 502,	R8A7745_CLK_HP),
	DEF_MOD("pwm",			 523,	R8A7745_CLK_P),
	DEF_MOD("usb-ehci",		 703,	R8A7745_CLK_MP),
	DEF_MOD("usbhs",		 704,	R8A7745_CLK_HP),
	DEF_MOD("hscif2",		 713,	R8A7745_CLK_ZS),
	DEF_MOD("scif5",		 714,	R8A7745_CLK_P),
	DEF_MOD("scif4",		 715,	R8A7745_CLK_P),
	DEF_MOD("hscif1",		 716,	R8A7745_CLK_ZS),
	DEF_MOD("hscif0",		 717,	R8A7745_CLK_ZS),
	DEF_MOD("scif3",		 718,	R8A7745_CLK_P),
	DEF_MOD("scif2",		 719,	R8A7745_CLK_P),
	DEF_MOD("scif1",		 720,	R8A7745_CLK_P),
	DEF_MOD("scif0",		 721,	R8A7745_CLK_P),
	DEF_MOD("du1",			 723,	R8A7745_CLK_ZX),
	DEF_MOD("du0",			 724,	R8A7745_CLK_ZX),
	DEF_MOD("ipmmu-sgx",		 800,	R8A7745_CLK_ZX),
	DEF_MOD("vin1",			 810,	R8A7745_CLK_ZG),
	DEF_MOD("vin0",			 811,	R8A7745_CLK_ZG),
	DEF_MOD("etheravb",		 812,	R8A7745_CLK_HP),
	DEF_MOD("ether",		 813,	R8A7745_CLK_P),
	DEF_MOD("gpio6",		 905,	R8A7745_CLK_CP),
	DEF_MOD("gpio5",		 907,	R8A7745_CLK_CP),
	DEF_MOD("gpio4",		 908,	R8A7745_CLK_CP),
	DEF_MOD("gpio3",		 909,	R8A7745_CLK_CP),
	DEF_MOD("gpio2",		 910,	R8A7745_CLK_CP),
	DEF_MOD("gpio1",		 911,	R8A7745_CLK_CP),
	DEF_MOD("gpio0",		 912,	R8A7745_CLK_CP),
	DEF_MOD("can1",			 915,	R8A7745_CLK_P),
	DEF_MOD("can0",			 916,	R8A7745_CLK_P),
	DEF_MOD("qspi_mod",		 917,	R8A7745_CLK_QSPI),
	DEF_MOD("i2c5",			 925,	R8A7745_CLK_HP),
	DEF_MOD("i2c4",			 927,	R8A7745_CLK_HP),
	DEF_MOD("i2c3",			 928,	R8A7745_CLK_HP),
	DEF_MOD("i2c2",			 929,	R8A7745_CLK_HP),
	DEF_MOD("i2c1",			 930,	R8A7745_CLK_HP),
	DEF_MOD("i2c0",			 931,	R8A7745_CLK_HP),
	DEF_MOD("ssi-all",		1005,	R8A7745_CLK_P),
	DEF_MOD("ssi9",			1006,	MOD_CLK_ID(1005)),
	DEF_MOD("ssi8",			1007,	MOD_CLK_ID(1005)),
	DEF_MOD("ssi7",			1008,	MOD_CLK_ID(1005)),
	DEF_MOD("ssi6",			1009,	MOD_CLK_ID(1005)),
	DEF_MOD("ssi5",			1010,	MOD_CLK_ID(1005)),
	DEF_MOD("ssi4",			1011,	MOD_CLK_ID(1005)),
	DEF_MOD("ssi3",			1012,	MOD_CLK_ID(1005)),
	DEF_MOD("ssi2",			1013,	MOD_CLK_ID(1005)),
	DEF_MOD("ssi1",			1014,	MOD_CLK_ID(1005)),
	DEF_MOD("ssi0",			1015,	MOD_CLK_ID(1005)),
	DEF_MOD("scu-all",		1017,	R8A7745_CLK_P),
	DEF_MOD("scu-dvc1",		1018,	MOD_CLK_ID(1017)),
	DEF_MOD("scu-dvc0",		1019,	MOD_CLK_ID(1017)),
	DEF_MOD("scu-ctu1-mix1",	1020,	MOD_CLK_ID(1017)),
	DEF_MOD("scu-ctu0-mix0",	1021,	MOD_CLK_ID(1017)),
	DEF_MOD("scu-src6",		1025,	MOD_CLK_ID(1017)),
	DEF_MOD("scu-src5",		1026,	MOD_CLK_ID(1017)),
	DEF_MOD("scu-src4",		1027,	MOD_CLK_ID(1017)),
	DEF_MOD("scu-src3",		1028,	MOD_CLK_ID(1017)),
	DEF_MOD("scu-src2",		1029,	MOD_CLK_ID(1017)),
	DEF_MOD("scu-src1",		1030,	MOD_CLK_ID(1017)),
	DEF_MOD("scifa3",		1106,	R8A7745_CLK_MP),
	DEF_MOD("scifa4",		1107,	R8A7745_CLK_MP),
	DEF_MOD("scifa5",		1108,	R8A7745_CLK_MP),
};

static const unsigned int r8a7745_crit_mod_clks[] __initconst = {
	MOD_CLK_ID(402),	/* RWDT */
	MOD_CLK_ID(408),	/* INTC-SYS (GIC) */
};

/*
 * CPG Clock Data
 */

/*
 *    MD	EXTAL		PLL0	PLL1	PLL3
 * 14 13 19	(MHz)		*1	*2
 *---------------------------------------------------
 * 0  0  1	15		x200/3	x208/2	x88
 * 0  1  1	20		x150/3	x156/2	x66
 * 1  0  1	26 / 2		x230/3	x240/2	x102
 * 1  1  1	30 / 2		x200/3	x208/2	x88
 *
 * *1 :	Table 7.5b indicates VCO output (PLL0 = VCO/3)
 * *2 :	Table 7.5b indicates VCO output (PLL1 = VCO/2)
 */
#define CPG_PLL_CONFIG_INDEX(md)	((((md) & BIT(14)) >> 13) | \
					 (((md) & BIT(13)) >> 13))

static const struct rcar_gen2_cpg_pll_config cpg_pll_configs[8] __initconst = {
	/* EXTAL div	PLL1 mult	PLL3 mult	PLL0 mult */
	{ 1,		208,		88,		200	},
	{ 1,		156,		66,		150	},
	{ 2,		240,		102,		230	},
	{ 2,		208,		88,		200	},
};

static int __init r8a7745_cpg_mssr_init(struct device *dev)
{
	const struct rcar_gen2_cpg_pll_config *cpg_pll_config;
	u32 cpg_mode;
	int error;

	error = rcar_rst_read_mode_pins(&cpg_mode);
	if (error)
		return error;

	cpg_pll_config = &cpg_pll_configs[CPG_PLL_CONFIG_INDEX(cpg_mode)];

	return rcar_gen2_cpg_init(cpg_pll_config, 3, cpg_mode);
}

const struct cpg_mssr_info r8a7745_cpg_mssr_info __initconst = {
	/* Core Clocks */
	.core_clks = r8a7745_core_clks,
	.num_core_clks = ARRAY_SIZE(r8a7745_core_clks),
	.last_dt_core_clk = LAST_DT_CORE_CLK,
	.num_total_core_clks = MOD_CLK_BASE,

	/* Module Clocks */
	.mod_clks = r8a7745_mod_clks,
	.num_mod_clks = ARRAY_SIZE(r8a7745_mod_clks),
	.num_hw_mod_clks = 12 * 32,

	/* Critical Module Clocks */
	.crit_mod_clks = r8a7745_crit_mod_clks,
	.num_crit_mod_clks = ARRAY_SIZE(r8a7745_crit_mod_clks),

	/* Callbacks */
	.init = r8a7745_cpg_mssr_init,
	.cpg_clk_register = rcar_gen2_cpg_clk_register,
};
