// SPDX-License-Identifier: GPL-2.0
/*
 * r8a774e1 Clock Pulse Generator / Module Standby and Software Reset
 *
 * Copyright (C) 2020 Renesas Electronics Corp.
 *
 * Based on r8a7795-cpg-mssr.c
 *
 * Copyright (C) 2015 Glider bvba
 */

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

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

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

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

	/* External Input Clocks */
	CLK_EXTAL,
	CLK_EXTALR,

	/* Internal Core Clocks */
	CLK_MAIN,
	CLK_PLL0,
	CLK_PLL1,
	CLK_PLL2,
	CLK_PLL3,
	CLK_PLL4,
	CLK_PLL1_DIV2,
	CLK_PLL1_DIV4,
	CLK_S0,
	CLK_S1,
	CLK_S2,
	CLK_S3,
	CLK_SDSRC,
	CLK_RPCSRC,
	CLK_RINT,

	/* Module Clocks */
	MOD_CLK_BASE
};

static const struct cpg_core_clk r8a774e1_core_clks[] __initconst = {
	/* External Clock Inputs */
	DEF_INPUT("extal",      CLK_EXTAL),
	DEF_INPUT("extalr",     CLK_EXTALR),

	/* Internal Core Clocks */
	DEF_BASE(".main",       CLK_MAIN, CLK_TYPE_GEN3_MAIN, CLK_EXTAL),
	DEF_BASE(".pll0",       CLK_PLL0, CLK_TYPE_GEN3_PLL0, CLK_MAIN),
	DEF_BASE(".pll1",       CLK_PLL1, CLK_TYPE_GEN3_PLL1, CLK_MAIN),
	DEF_BASE(".pll2",       CLK_PLL2, CLK_TYPE_GEN3_PLL2, CLK_MAIN),
	DEF_BASE(".pll3",       CLK_PLL3, CLK_TYPE_GEN3_PLL3, CLK_MAIN),
	DEF_BASE(".pll4",       CLK_PLL4, CLK_TYPE_GEN3_PLL4, CLK_MAIN),

	DEF_FIXED(".pll1_div2", CLK_PLL1_DIV2,     CLK_PLL1,       2, 1),
	DEF_FIXED(".pll1_div4", CLK_PLL1_DIV4,     CLK_PLL1_DIV2,  2, 1),
	DEF_FIXED(".s0",        CLK_S0,            CLK_PLL1_DIV2,  2, 1),
	DEF_FIXED(".s1",        CLK_S1,            CLK_PLL1_DIV2,  3, 1),
	DEF_FIXED(".s2",        CLK_S2,            CLK_PLL1_DIV2,  4, 1),
	DEF_FIXED(".s3",        CLK_S3,            CLK_PLL1_DIV2,  6, 1),
	DEF_FIXED(".sdsrc",     CLK_SDSRC,         CLK_PLL1_DIV2,  2, 1),
	DEF_BASE(".rpcsrc",	CLK_RPCSRC, CLK_TYPE_GEN3_RPCSRC, CLK_PLL1),

	DEF_BASE("rpc",		R8A774E1_CLK_RPC, CLK_TYPE_GEN3_RPC,
		 CLK_RPCSRC),
	DEF_BASE("rpcd2",	R8A774E1_CLK_RPCD2, CLK_TYPE_GEN3_RPCD2,
		 R8A774E1_CLK_RPC),

	DEF_GEN3_OSC(".r",      CLK_RINT,          CLK_EXTAL,      32),

	/* Core Clock Outputs */
	DEF_GEN3_Z("z",		R8A774E1_CLK_Z,     CLK_TYPE_GEN3_Z,  CLK_PLL0, 2, 8),
	DEF_GEN3_Z("z2",	R8A774E1_CLK_Z2,    CLK_TYPE_GEN3_Z,  CLK_PLL2, 2, 0),
	DEF_FIXED("ztr",        R8A774E1_CLK_ZTR,   CLK_PLL1_DIV2,  6, 1),
	DEF_FIXED("ztrd2",      R8A774E1_CLK_ZTRD2, CLK_PLL1_DIV2, 12, 1),
	DEF_FIXED("zt",         R8A774E1_CLK_ZT,    CLK_PLL1_DIV2,  4, 1),
	DEF_FIXED("zx",         R8A774E1_CLK_ZX,    CLK_PLL1_DIV2,  2, 1),
	DEF_FIXED("s0d1",       R8A774E1_CLK_S0D1,  CLK_S0,         1, 1),
	DEF_FIXED("s0d2",       R8A774E1_CLK_S0D2,  CLK_S0,         2, 1),
	DEF_FIXED("s0d3",       R8A774E1_CLK_S0D3,  CLK_S0,         3, 1),
	DEF_FIXED("s0d4",       R8A774E1_CLK_S0D4,  CLK_S0,         4, 1),
	DEF_FIXED("s0d6",       R8A774E1_CLK_S0D6,  CLK_S0,         6, 1),
	DEF_FIXED("s0d8",       R8A774E1_CLK_S0D8,  CLK_S0,         8, 1),
	DEF_FIXED("s0d12",      R8A774E1_CLK_S0D12, CLK_S0,        12, 1),
	DEF_FIXED("s1d2",       R8A774E1_CLK_S1D2,  CLK_S1,         2, 1),
	DEF_FIXED("s1d4",       R8A774E1_CLK_S1D4,  CLK_S1,         4, 1),
	DEF_FIXED("s2d1",       R8A774E1_CLK_S2D1,  CLK_S2,         1, 1),
	DEF_FIXED("s2d2",       R8A774E1_CLK_S2D2,  CLK_S2,         2, 1),
	DEF_FIXED("s2d4",       R8A774E1_CLK_S2D4,  CLK_S2,         4, 1),
	DEF_FIXED("s3d1",       R8A774E1_CLK_S3D1,  CLK_S3,         1, 1),
	DEF_FIXED("s3d2",       R8A774E1_CLK_S3D2,  CLK_S3,         2, 1),
	DEF_FIXED("s3d4",       R8A774E1_CLK_S3D4,  CLK_S3,         4, 1),

	DEF_GEN3_SDH("sd0h",    R8A774E1_CLK_SD0H,  CLK_SDSRC,         0x074),
	DEF_GEN3_SDH("sd1h",    R8A774E1_CLK_SD1H,  CLK_SDSRC,         0x078),
	DEF_GEN3_SDH("sd2h",    R8A774E1_CLK_SD2H,  CLK_SDSRC,         0x268),
	DEF_GEN3_SDH("sd3h",    R8A774E1_CLK_SD3H,  CLK_SDSRC,         0x26c),
	DEF_GEN3_SD("sd0",      R8A774E1_CLK_SD0,   R8A774E1_CLK_SD0H, 0x074),
	DEF_GEN3_SD("sd1",      R8A774E1_CLK_SD1,   R8A774E1_CLK_SD1H, 0x078),
	DEF_GEN3_SD("sd2",      R8A774E1_CLK_SD2,   R8A774E1_CLK_SD2H, 0x268),
	DEF_GEN3_SD("sd3",      R8A774E1_CLK_SD3,   R8A774E1_CLK_SD3H, 0x26c),

	DEF_FIXED("cl",         R8A774E1_CLK_CL,    CLK_PLL1_DIV2, 48, 1),
	DEF_FIXED("cr",         R8A774E1_CLK_CR,    CLK_PLL1_DIV4,  2, 1),
	DEF_FIXED("cp",         R8A774E1_CLK_CP,    CLK_EXTAL,      2, 1),
	DEF_FIXED("cpex",       R8A774E1_CLK_CPEX,  CLK_EXTAL,      2, 1),

	DEF_DIV6P1("canfd",     R8A774E1_CLK_CANFD, CLK_PLL1_DIV4, 0x244),
	DEF_DIV6P1("csi0",      R8A774E1_CLK_CSI0,  CLK_PLL1_DIV4, 0x00c),
	DEF_DIV6P1("mso",       R8A774E1_CLK_MSO,   CLK_PLL1_DIV4, 0x014),
	DEF_DIV6P1("hdmi",      R8A774E1_CLK_HDMI,  CLK_PLL1_DIV4, 0x250),

	DEF_GEN3_OSC("osc",     R8A774E1_CLK_OSC,   CLK_EXTAL,     8),

	DEF_BASE("r",           R8A774E1_CLK_R,     CLK_TYPE_GEN3_R, CLK_RINT),
};

static const struct mssr_mod_clk r8a774e1_mod_clks[] __initconst = {
	DEF_MOD("fdp1-1",		 118,	R8A774E1_CLK_S0D1),
	DEF_MOD("fdp1-0",		 119,	R8A774E1_CLK_S0D1),
	DEF_MOD("tmu4",			 121,	R8A774E1_CLK_S0D6),
	DEF_MOD("tmu3",			 122,	R8A774E1_CLK_S3D2),
	DEF_MOD("tmu2",			 123,	R8A774E1_CLK_S3D2),
	DEF_MOD("tmu1",			 124,	R8A774E1_CLK_S3D2),
	DEF_MOD("tmu0",			 125,	R8A774E1_CLK_CP),
	DEF_MOD("vcplf",		 130,	R8A774E1_CLK_S2D1),
	DEF_MOD("vdpb",			 131,	R8A774E1_CLK_S2D1),
	DEF_MOD("scif5",		 202,	R8A774E1_CLK_S3D4),
	DEF_MOD("scif4",		 203,	R8A774E1_CLK_S3D4),
	DEF_MOD("scif3",		 204,	R8A774E1_CLK_S3D4),
	DEF_MOD("scif1",		 206,	R8A774E1_CLK_S3D4),
	DEF_MOD("scif0",		 207,	R8A774E1_CLK_S3D4),
	DEF_MOD("msiof3",		 208,	R8A774E1_CLK_MSO),
	DEF_MOD("msiof2",		 209,	R8A774E1_CLK_MSO),
	DEF_MOD("msiof1",		 210,	R8A774E1_CLK_MSO),
	DEF_MOD("msiof0",		 211,	R8A774E1_CLK_MSO),
	DEF_MOD("sys-dmac2",		 217,	R8A774E1_CLK_S3D1),
	DEF_MOD("sys-dmac1",		 218,	R8A774E1_CLK_S3D1),
	DEF_MOD("sys-dmac0",		 219,	R8A774E1_CLK_S0D3),
	DEF_MOD("cmt3",			 300,	R8A774E1_CLK_R),
	DEF_MOD("cmt2",			 301,	R8A774E1_CLK_R),
	DEF_MOD("cmt1",			 302,	R8A774E1_CLK_R),
	DEF_MOD("cmt0",			 303,	R8A774E1_CLK_R),
	DEF_MOD("tpu0",			 304,	R8A774E1_CLK_S3D4),
	DEF_MOD("scif2",		 310,	R8A774E1_CLK_S3D4),
	DEF_MOD("sdif3",		 311,	R8A774E1_CLK_SD3),
	DEF_MOD("sdif2",		 312,	R8A774E1_CLK_SD2),
	DEF_MOD("sdif1",		 313,	R8A774E1_CLK_SD1),
	DEF_MOD("sdif0",		 314,	R8A774E1_CLK_SD0),
	DEF_MOD("pcie1",		 318,	R8A774E1_CLK_S3D1),
	DEF_MOD("pcie0",		 319,	R8A774E1_CLK_S3D1),
	DEF_MOD("usb3-if0",		 328,	R8A774E1_CLK_S3D1),
	DEF_MOD("usb-dmac0",		 330,	R8A774E1_CLK_S3D1),
	DEF_MOD("usb-dmac1",		 331,	R8A774E1_CLK_S3D1),
	DEF_MOD("rwdt",			 402,	R8A774E1_CLK_R),
	DEF_MOD("intc-ex",		 407,	R8A774E1_CLK_CP),
	DEF_MOD("intc-ap",		 408,	R8A774E1_CLK_S0D3),
	DEF_MOD("audmac1",		 501,	R8A774E1_CLK_S1D2),
	DEF_MOD("audmac0",		 502,	R8A774E1_CLK_S1D2),
	DEF_MOD("hscif4",		 516,	R8A774E1_CLK_S3D1),
	DEF_MOD("hscif3",		 517,	R8A774E1_CLK_S3D1),
	DEF_MOD("hscif2",		 518,	R8A774E1_CLK_S3D1),
	DEF_MOD("hscif1",		 519,	R8A774E1_CLK_S3D1),
	DEF_MOD("hscif0",		 520,	R8A774E1_CLK_S3D1),
	DEF_MOD("thermal",		 522,	R8A774E1_CLK_CP),
	DEF_MOD("pwm",			 523,	R8A774E1_CLK_S0D12),
	DEF_MOD("fcpvd1",		 602,	R8A774E1_CLK_S0D2),
	DEF_MOD("fcpvd0",		 603,	R8A774E1_CLK_S0D2),
	DEF_MOD("fcpvb1",		 606,	R8A774E1_CLK_S0D1),
	DEF_MOD("fcpvb0",		 607,	R8A774E1_CLK_S0D1),
	DEF_MOD("fcpvi1",		 610,	R8A774E1_CLK_S0D1),
	DEF_MOD("fcpvi0",		 611,	R8A774E1_CLK_S0D1),
	DEF_MOD("fcpf1",		 614,	R8A774E1_CLK_S0D1),
	DEF_MOD("fcpf0",		 615,	R8A774E1_CLK_S0D1),
	DEF_MOD("fcpcs",		 619,	R8A774E1_CLK_S0D1),
	DEF_MOD("vspd1",		 622,	R8A774E1_CLK_S0D2),
	DEF_MOD("vspd0",		 623,	R8A774E1_CLK_S0D2),
	DEF_MOD("vspbc",		 624,	R8A774E1_CLK_S0D1),
	DEF_MOD("vspbd",		 626,	R8A774E1_CLK_S0D1),
	DEF_MOD("vspi1",		 630,	R8A774E1_CLK_S0D1),
	DEF_MOD("vspi0",		 631,	R8A774E1_CLK_S0D1),
	DEF_MOD("ehci1",		 702,	R8A774E1_CLK_S3D2),
	DEF_MOD("ehci0",		 703,	R8A774E1_CLK_S3D2),
	DEF_MOD("hsusb",		 704,	R8A774E1_CLK_S3D2),
	DEF_MOD("csi20",		 714,	R8A774E1_CLK_CSI0),
	DEF_MOD("csi40",		 716,	R8A774E1_CLK_CSI0),
	DEF_MOD("du3",			 721,	R8A774E1_CLK_S2D1),
	DEF_MOD("du1",			 723,	R8A774E1_CLK_S2D1),
	DEF_MOD("du0",			 724,	R8A774E1_CLK_S2D1),
	DEF_MOD("lvds",			 727,	R8A774E1_CLK_S0D4),
	DEF_MOD("hdmi0",		 729,	R8A774E1_CLK_HDMI),
	DEF_MOD("vin7",			 804,	R8A774E1_CLK_S0D2),
	DEF_MOD("vin6",			 805,	R8A774E1_CLK_S0D2),
	DEF_MOD("vin5",			 806,	R8A774E1_CLK_S0D2),
	DEF_MOD("vin4",			 807,	R8A774E1_CLK_S0D2),
	DEF_MOD("vin3",			 808,	R8A774E1_CLK_S0D2),
	DEF_MOD("vin2",			 809,	R8A774E1_CLK_S0D2),
	DEF_MOD("vin1",			 810,	R8A774E1_CLK_S0D2),
	DEF_MOD("vin0",			 811,	R8A774E1_CLK_S0D2),
	DEF_MOD("etheravb",		 812,	R8A774E1_CLK_S0D6),
	DEF_MOD("sata0",		 815,	R8A774E1_CLK_S3D2),
	DEF_MOD("gpio7",		 905,	R8A774E1_CLK_S3D4),
	DEF_MOD("gpio6",		 906,	R8A774E1_CLK_S3D4),
	DEF_MOD("gpio5",		 907,	R8A774E1_CLK_S3D4),
	DEF_MOD("gpio4",		 908,	R8A774E1_CLK_S3D4),
	DEF_MOD("gpio3",		 909,	R8A774E1_CLK_S3D4),
	DEF_MOD("gpio2",		 910,	R8A774E1_CLK_S3D4),
	DEF_MOD("gpio1",		 911,	R8A774E1_CLK_S3D4),
	DEF_MOD("gpio0",		 912,	R8A774E1_CLK_S3D4),
	DEF_MOD("can-fd",		 914,	R8A774E1_CLK_S3D2),
	DEF_MOD("can-if1",		 915,	R8A774E1_CLK_S3D4),
	DEF_MOD("can-if0",		 916,	R8A774E1_CLK_S3D4),
	DEF_MOD("rpc-if",		 917,	R8A774E1_CLK_RPCD2),
	DEF_MOD("i2c6",			 918,	R8A774E1_CLK_S0D6),
	DEF_MOD("i2c5",			 919,	R8A774E1_CLK_S0D6),
	DEF_MOD("adg",			 922,	R8A774E1_CLK_S0D1),
	DEF_MOD("iic-pmic",		 926,	R8A774E1_CLK_CP),
	DEF_MOD("i2c4",			 927,	R8A774E1_CLK_S0D6),
	DEF_MOD("i2c3",			 928,	R8A774E1_CLK_S0D6),
	DEF_MOD("i2c2",			 929,	R8A774E1_CLK_S3D2),
	DEF_MOD("i2c1",			 930,	R8A774E1_CLK_S3D2),
	DEF_MOD("i2c0",			 931,	R8A774E1_CLK_S3D2),
	DEF_MOD("ssi-all",		1005,	R8A774E1_CLK_S3D4),
	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,	R8A774E1_CLK_S3D4),
	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)),
};

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

/*
 * CPG Clock Data
 */

/*
 *   MD		EXTAL		PLL0	PLL1	PLL2	PLL3	PLL4	OSC
 * 14 13 19 17	(MHz)
 *-------------------------------------------------------------------------
 * 0  0  0  0	16.66 x 1	x180	x192	x144	x192	x144	/16
 * 0  0  0  1	16.66 x 1	x180	x192	x144	x128	x144	/16
 * 0  0  1  0	Prohibited setting
 * 0  0  1  1	16.66 x 1	x180	x192	x144	x192	x144	/16
 * 0  1  0  0	20    x 1	x150	x160	x120	x160	x120	/19
 * 0  1  0  1	20    x 1	x150	x160	x120	x106	x120	/19
 * 0  1  1  0	Prohibited setting
 * 0  1  1  1	20    x 1	x150	x160	x120	x160	x120	/19
 * 1  0  0  0	25    x 1	x120	x128	x96	x128	x96	/24
 * 1  0  0  1	25    x 1	x120	x128	x96	x84	x96	/24
 * 1  0  1  0	Prohibited setting
 * 1  0  1  1	25    x 1	x120	x128	x96	x128	x96	/24
 * 1  1  0  0	33.33 / 2	x180	x192	x144	x192	x144	/32
 * 1  1  0  1	33.33 / 2	x180	x192	x144	x128	x144	/32
 * 1  1  1  0	Prohibited setting
 * 1  1  1  1	33.33 / 2	x180	x192	x144	x192	x144	/32
 */
#define CPG_PLL_CONFIG_INDEX(md)	((((md) & BIT(14)) >> 11) | \
					 (((md) & BIT(13)) >> 11) | \
					 (((md) & BIT(19)) >> 18) | \
					 (((md) & BIT(17)) >> 17))

static const struct rcar_gen3_cpg_pll_config cpg_pll_configs[16] __initconst = {
	/* EXTAL div	PLL1 mult/div	PLL3 mult/div	OSC prediv */
	{ 1,		192,	1,	192,	1,	16,	},
	{ 1,		192,	1,	128,	1,	16,	},
	{ 0, /* Prohibited setting */				},
	{ 1,		192,	1,	192,	1,	16,	},
	{ 1,		160,	1,	160,	1,	19,	},
	{ 1,		160,	1,	106,	1,	19,	},
	{ 0, /* Prohibited setting */				},
	{ 1,		160,	1,	160,	1,	19,	},
	{ 1,		128,	1,	128,	1,	24,	},
	{ 1,		128,	1,	84,	1,	24,	},
	{ 0, /* Prohibited setting */				},
	{ 1,		128,	1,	128,	1,	24,	},
	{ 2,		192,	1,	192,	1,	32,	},
	{ 2,		192,	1,	128,	1,	32,	},
	{ 0, /* Prohibited setting */				},
	{ 2,		192,	1,	192,	1,	32,	},
};

static int __init r8a774e1_cpg_mssr_init(struct device *dev)
{
	const struct rcar_gen3_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)];
	if (!cpg_pll_config->extal_div) {
		dev_err(dev, "Prohibited setting (cpg_mode=0x%x)\n", cpg_mode);
		return -EINVAL;
	}

	return rcar_gen3_cpg_init(cpg_pll_config, CLK_EXTALR, cpg_mode);
}

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

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

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

	/* Callbacks */
	.init = r8a774e1_cpg_mssr_init,
	.cpg_clk_register = rcar_gen3_cpg_clk_register,
};
