/*
 * r8a7743 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/r8a7743-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 = R8A7743_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 r8a7743_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("z",    R8A7743_CLK_Z,    CLK_TYPE_GEN2_Z,	CLK_PLL0),
	DEF_BASE("lb",   R8A7743_CLK_LB,   CLK_TYPE_GEN2_LB,	CLK_PLL1),
	DEF_BASE("sdh",  R8A7743_CLK_SDH,  CLK_TYPE_GEN2_SDH,	CLK_PLL1),
	DEF_BASE("sd0",  R8A7743_CLK_SD0,  CLK_TYPE_GEN2_SD0,	CLK_PLL1),
	DEF_BASE("qspi", R8A7743_CLK_QSPI, CLK_TYPE_GEN2_QSPI,	CLK_PLL1_DIV2),
	DEF_BASE("rcan", R8A7743_CLK_RCAN, CLK_TYPE_GEN2_RCAN,	CLK_USB_EXTAL),

	DEF_FIXED("zg",    R8A7743_CLK_ZG,	CLK_PLL1,	    3, 1),
	DEF_FIXED("zx",    R8A7743_CLK_ZX,	CLK_PLL1,	    3, 1),
	DEF_FIXED("zs",    R8A7743_CLK_ZS,	CLK_PLL1,	    6, 1),
	DEF_FIXED("hp",    R8A7743_CLK_HP,	CLK_PLL1,	   12, 1),
	DEF_FIXED("b",     R8A7743_CLK_B,	CLK_PLL1,	   12, 1),
	DEF_FIXED("p",     R8A7743_CLK_P,	CLK_PLL1,	   24, 1),
	DEF_FIXED("cl",    R8A7743_CLK_CL,	CLK_PLL1,	   48, 1),
	DEF_FIXED("m2",    R8A7743_CLK_M2,	CLK_PLL1,	    8, 1),
	DEF_FIXED("zb3",   R8A7743_CLK_ZB3,	CLK_PLL3,	    4, 1),
	DEF_FIXED("zb3d2", R8A7743_CLK_ZB3D2,	CLK_PLL3,	    8, 1),
	DEF_FIXED("ddr",   R8A7743_CLK_DDR,	CLK_PLL3,	    8, 1),
	DEF_FIXED("mp",    R8A7743_CLK_MP,	CLK_PLL1_DIV2,	   15, 1),
	DEF_FIXED("cp",    R8A7743_CLK_CP,	CLK_EXTAL,	    2, 1),
	DEF_FIXED("r",     R8A7743_CLK_R,	CLK_PLL1,	49152, 1),
	DEF_FIXED("osc",   R8A7743_CLK_OSC,	CLK_PLL1,	12288, 1),

	DEF_DIV6P1("sd2",  R8A7743_CLK_SD2,	CLK_PLL1_DIV2,	0x078),
	DEF_DIV6P1("sd3",  R8A7743_CLK_SD3,	CLK_PLL1_DIV2,	0x26c),
	DEF_DIV6P1("mmc0", R8A7743_CLK_MMC0,	CLK_PLL1_DIV2,	0x240),
};

static const struct mssr_mod_clk r8a7743_mod_clks[] __initconst = {
	DEF_MOD("msiof0",		   0,	R8A7743_CLK_MP),
	DEF_MOD("vcp0",			 101,	R8A7743_CLK_ZS),
	DEF_MOD("vpc0",			 103,	R8A7743_CLK_ZS),
	DEF_MOD("tmu1",			 111,	R8A7743_CLK_P),
	DEF_MOD("3dg",			 112,	R8A7743_CLK_ZG),
	DEF_MOD("2d-dmac",		 115,	R8A7743_CLK_ZS),
	DEF_MOD("fdp1-1",		 118,	R8A7743_CLK_ZS),
	DEF_MOD("fdp1-0",		 119,	R8A7743_CLK_ZS),
	DEF_MOD("tmu3",			 121,	R8A7743_CLK_P),
	DEF_MOD("tmu2",			 122,	R8A7743_CLK_P),
	DEF_MOD("cmt0",			 124,	R8A7743_CLK_R),
	DEF_MOD("tmu0",			 125,	R8A7743_CLK_CP),
	DEF_MOD("vsp1du1",		 127,	R8A7743_CLK_ZS),
	DEF_MOD("vsp1du0",		 128,	R8A7743_CLK_ZS),
	DEF_MOD("vsp1-sy",		 131,	R8A7743_CLK_ZS),
	DEF_MOD("scifa2",		 202,	R8A7743_CLK_MP),
	DEF_MOD("scifa1",		 203,	R8A7743_CLK_MP),
	DEF_MOD("scifa0",		 204,	R8A7743_CLK_MP),
	DEF_MOD("msiof2",		 205,	R8A7743_CLK_MP),
	DEF_MOD("scifb0",		 206,	R8A7743_CLK_MP),
	DEF_MOD("scifb1",		 207,	R8A7743_CLK_MP),
	DEF_MOD("msiof1",		 208,	R8A7743_CLK_MP),
	DEF_MOD("scifb2",		 216,	R8A7743_CLK_MP),
	DEF_MOD("sys-dmac1",		 218,	R8A7743_CLK_ZS),
	DEF_MOD("sys-dmac0",		 219,	R8A7743_CLK_ZS),
	DEF_MOD("tpu0",			 304,	R8A7743_CLK_CP),
	DEF_MOD("sdhi3",		 311,	R8A7743_CLK_SD3),
	DEF_MOD("sdhi2",		 312,	R8A7743_CLK_SD2),
	DEF_MOD("sdhi0",		 314,	R8A7743_CLK_SD0),
	DEF_MOD("mmcif0",		 315,	R8A7743_CLK_MMC0),
	DEF_MOD("iic0",			 318,	R8A7743_CLK_HP),
	DEF_MOD("pciec",		 319,	R8A7743_CLK_MP),
	DEF_MOD("iic1",			 323,	R8A7743_CLK_HP),
	DEF_MOD("usb3.0",		 328,	R8A7743_CLK_MP),
	DEF_MOD("cmt1",			 329,	R8A7743_CLK_R),
	DEF_MOD("usbhs-dmac0",		 330,	R8A7743_CLK_HP),
	DEF_MOD("usbhs-dmac1",		 331,	R8A7743_CLK_HP),
	DEF_MOD("irqc",			 407,	R8A7743_CLK_CP),
	DEF_MOD("intc-sys",		 408,	R8A7743_CLK_ZS),
	DEF_MOD("audio-dmac1",		 501,	R8A7743_CLK_HP),
	DEF_MOD("audio-dmac0",		 502,	R8A7743_CLK_HP),
	DEF_MOD("thermal",		 522,	CLK_EXTAL),
	DEF_MOD("pwm",			 523,	R8A7743_CLK_P),
	DEF_MOD("usb-ehci",		 703,	R8A7743_CLK_MP),
	DEF_MOD("usbhs",		 704,	R8A7743_CLK_HP),
	DEF_MOD("hscif2",		 713,	R8A7743_CLK_ZS),
	DEF_MOD("scif5",		 714,	R8A7743_CLK_P),
	DEF_MOD("scif4",		 715,	R8A7743_CLK_P),
	DEF_MOD("hscif1",		 716,	R8A7743_CLK_ZS),
	DEF_MOD("hscif0",		 717,	R8A7743_CLK_ZS),
	DEF_MOD("scif3",		 718,	R8A7743_CLK_P),
	DEF_MOD("scif2",		 719,	R8A7743_CLK_P),
	DEF_MOD("scif1",		 720,	R8A7743_CLK_P),
	DEF_MOD("scif0",		 721,	R8A7743_CLK_P),
	DEF_MOD("du1",			 723,	R8A7743_CLK_ZX),
	DEF_MOD("du0",			 724,	R8A7743_CLK_ZX),
	DEF_MOD("lvds0",		 726,	R8A7743_CLK_ZX),
	DEF_MOD("ipmmu-sgx",		 800,	R8A7743_CLK_ZX),
	DEF_MOD("vin2",			 809,	R8A7743_CLK_ZG),
	DEF_MOD("vin1",			 810,	R8A7743_CLK_ZG),
	DEF_MOD("vin0",			 811,	R8A7743_CLK_ZG),
	DEF_MOD("etheravb",		 812,	R8A7743_CLK_HP),
	DEF_MOD("ether",		 813,	R8A7743_CLK_P),
	DEF_MOD("sata1",		 814,	R8A7743_CLK_ZS),
	DEF_MOD("sata0",		 815,	R8A7743_CLK_ZS),
	DEF_MOD("gpio7",		 904,	R8A7743_CLK_CP),
	DEF_MOD("gpio6",		 905,	R8A7743_CLK_CP),
	DEF_MOD("gpio5",		 907,	R8A7743_CLK_CP),
	DEF_MOD("gpio4",		 908,	R8A7743_CLK_CP),
	DEF_MOD("gpio3",		 909,	R8A7743_CLK_CP),
	DEF_MOD("gpio2",		 910,	R8A7743_CLK_CP),
	DEF_MOD("gpio1",		 911,	R8A7743_CLK_CP),
	DEF_MOD("gpio0",		 912,	R8A7743_CLK_CP),
	DEF_MOD("can1",			 915,	R8A7743_CLK_P),
	DEF_MOD("can0",			 916,	R8A7743_CLK_P),
	DEF_MOD("qspi_mod",		 917,	R8A7743_CLK_QSPI),
	DEF_MOD("i2c5",			 925,	R8A7743_CLK_HP),
	DEF_MOD("iicdvfs",		 926,	R8A7743_CLK_CP),
	DEF_MOD("i2c4",			 927,	R8A7743_CLK_HP),
	DEF_MOD("i2c3",			 928,	R8A7743_CLK_HP),
	DEF_MOD("i2c2",			 929,	R8A7743_CLK_HP),
	DEF_MOD("i2c1",			 930,	R8A7743_CLK_HP),
	DEF_MOD("i2c0",			 931,	R8A7743_CLK_HP),
	DEF_MOD("ssi-all",		1005,	R8A7743_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,	R8A7743_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-src9",		1022,	MOD_CLK_ID(1017)),
	DEF_MOD("scu-src8",		1023,	MOD_CLK_ID(1017)),
	DEF_MOD("scu-src7",		1024,	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("scu-src0",		1031,	MOD_CLK_ID(1017)),
	DEF_MOD("scifa3",		1106,	R8A7743_CLK_MP),
	DEF_MOD("scifa4",		1107,	R8A7743_CLK_MP),
	DEF_MOD("scifa5",		1108,	R8A7743_CLK_MP),
};

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

/*
 * CPG Clock Data
 */

/*
 *    MD	EXTAL		PLL0	PLL1	PLL3
 * 14 13 19	(MHz)		*1	*1
 *---------------------------------------------------
 * 0  0  0	15		x172/2	x208/2	x106
 * 0  0  1	15		x172/2	x208/2	x88
 * 0  1  0	20		x130/2	x156/2	x80
 * 0  1  1	20		x130/2	x156/2	x66
 * 1  0  0	26 / 2		x200/2	x240/2	x122
 * 1  0  1	26 / 2		x200/2	x240/2	x102
 * 1  1  0	30 / 2		x172/2	x208/2	x106
 * 1  1  1	30 / 2		x172/2	x208/2	x88
 *
 * *1 :	Table 7.5a indicates VCO output (PLLx = VCO/2)
 */
#define CPG_PLL_CONFIG_INDEX(md)	((((md) & BIT(14)) >> 12) | \
					 (((md) & BIT(13)) >> 12) | \
					 (((md) & BIT(19)) >> 19))

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

static int __init r8a7743_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, 2, cpg_mode);
}

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

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

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

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