/*
 * 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("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("lb",    R8A7743_CLK_LB,	CLK_PLL1,	   24, 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("rwdt",			 402,	R8A7743_CLK_R),
	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(402),	/* RWDT */
	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,
};
