// SPDX-License-Identifier: GPL-2.0
/*
 * r8a7794 Clock Pulse Generator / Module Standby and Software Reset
 *
 * Copyright (C) 2017 Glider bvba
 *
 * Based on clk-rcar-gen2.c
 *
 * Copyright (C) 2013 Ideas On Board SPRL
 */

#include <common.h>
#include <clk-uclass.h>
#include <dm.h>
#include <linux/bitops.h>

#include <dt-bindings/clock/r8a7794-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 = R8A7794_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 r8a7794_core_clks[] = {
	/* 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("adsp", R8A7794_CLK_ADSP, CLK_TYPE_GEN2_ADSP, CLK_PLL1),
	DEF_BASE("sdh",  R8A7794_CLK_SDH,  CLK_TYPE_GEN2_SDH,  CLK_PLL1),
	DEF_BASE("sd0",  R8A7794_CLK_SD0,  CLK_TYPE_GEN2_SD0,  CLK_PLL1),
	DEF_BASE("qspi", R8A7794_CLK_QSPI, CLK_TYPE_GEN2_QSPI, CLK_PLL1_DIV2),
	DEF_BASE("rcan", R8A7794_CLK_RCAN, CLK_TYPE_GEN2_RCAN, CLK_USB_EXTAL),

	DEF_FIXED("z2",     R8A7794_CLK_Z2,    CLK_PLL0,          1, 1),
	DEF_FIXED("zg",     R8A7794_CLK_ZG,    CLK_PLL1,          6, 1),
	DEF_FIXED("zx",     R8A7794_CLK_ZX,    CLK_PLL1,          3, 1),
	DEF_FIXED("zs",     R8A7794_CLK_ZS,    CLK_PLL1,          6, 1),
	DEF_FIXED("hp",     R8A7794_CLK_HP,    CLK_PLL1,         12, 1),
	DEF_FIXED("i",      R8A7794_CLK_I,     CLK_PLL1,          2, 1),
	DEF_FIXED("b",      R8A7794_CLK_B,     CLK_PLL1,         12, 1),
	DEF_FIXED("lb",     R8A7794_CLK_LB,    CLK_PLL1,         24, 1),
	DEF_FIXED("p",      R8A7794_CLK_P,     CLK_PLL1,         24, 1),
	DEF_FIXED("cl",     R8A7794_CLK_CL,    CLK_PLL1,         48, 1),
	DEF_FIXED("cp",     R8A7794_CLK_CP,    CLK_PLL1,         48, 1),
	DEF_FIXED("m2",     R8A7794_CLK_M2,    CLK_PLL1,          8, 1),
	DEF_FIXED("zb3",    R8A7794_CLK_ZB3,   CLK_PLL3,          4, 1),
	DEF_FIXED("zb3d2",  R8A7794_CLK_ZB3D2, CLK_PLL3,          8, 1),
	DEF_FIXED("ddr",    R8A7794_CLK_DDR,   CLK_PLL3,          8, 1),
	DEF_FIXED("mp",     R8A7794_CLK_MP,    CLK_PLL1_DIV2,    15, 1),
	DEF_FIXED("cpex",   R8A7794_CLK_CPEX,  CLK_EXTAL,         2, 1),
	DEF_FIXED("r",      R8A7794_CLK_R,     CLK_PLL1,      49152, 1),
	DEF_FIXED("osc",    R8A7794_CLK_OSC,   CLK_PLL1,      12288, 1),

	DEF_DIV6P1("sd2",   R8A7794_CLK_SD2,   CLK_PLL1_DIV2, 0x078),
	DEF_DIV6P1("sd3",   R8A7794_CLK_SD3,   CLK_PLL1_DIV2, 0x26c),
	DEF_DIV6P1("mmc0",  R8A7794_CLK_MMC0,  CLK_PLL1_DIV2, 0x240),
};

static const struct mssr_mod_clk r8a7794_mod_clks[] = {
	DEF_MOD("msiof0",		   0,	R8A7794_CLK_MP),
	DEF_MOD("vcp0",			 101,	R8A7794_CLK_ZS),
	DEF_MOD("vpc0",			 103,	R8A7794_CLK_ZS),
	DEF_MOD("jpu",			 106,	R8A7794_CLK_M2),
	DEF_MOD("tmu1",			 111,	R8A7794_CLK_P),
	DEF_MOD("3dg",			 112,	R8A7794_CLK_ZG),
	DEF_MOD("2d-dmac",		 115,	R8A7794_CLK_ZS),
	DEF_MOD("fdp1-0",		 119,	R8A7794_CLK_ZS),
	DEF_MOD("tmu3",			 121,	R8A7794_CLK_P),
	DEF_MOD("tmu2",			 122,	R8A7794_CLK_P),
	DEF_MOD("cmt0",			 124,	R8A7794_CLK_R),
	DEF_MOD("tmu0",			 125,	R8A7794_CLK_CP),
	DEF_MOD("vsp1du0",		 128,	R8A7794_CLK_ZS),
	DEF_MOD("vsp1-sy",		 131,	R8A7794_CLK_ZS),
	DEF_MOD("scifa2",		 202,	R8A7794_CLK_MP),
	DEF_MOD("scifa1",		 203,	R8A7794_CLK_MP),
	DEF_MOD("scifa0",		 204,	R8A7794_CLK_MP),
	DEF_MOD("msiof2",		 205,	R8A7794_CLK_MP),
	DEF_MOD("scifb0",		 206,	R8A7794_CLK_MP),
	DEF_MOD("scifb1",		 207,	R8A7794_CLK_MP),
	DEF_MOD("msiof1",		 208,	R8A7794_CLK_MP),
	DEF_MOD("scifb2",		 216,	R8A7794_CLK_MP),
	DEF_MOD("sys-dmac1",		 218,	R8A7794_CLK_ZS),
	DEF_MOD("sys-dmac0",		 219,	R8A7794_CLK_ZS),
	DEF_MOD("tpu0",			 304,	R8A7794_CLK_CP),
	DEF_MOD("sdhi3",		 311,	R8A7794_CLK_SD3),
	DEF_MOD("sdhi2",		 312,	R8A7794_CLK_SD2),
	DEF_MOD("sdhi0",		 314,	R8A7794_CLK_SD0),
	DEF_MOD("mmcif0",		 315,	R8A7794_CLK_MMC0),
	DEF_MOD("iic0",			 318,	R8A7794_CLK_HP),
	DEF_MOD("iic1",			 323,	R8A7794_CLK_HP),
	DEF_MOD("cmt1",			 329,	R8A7794_CLK_R),
	DEF_MOD("usbhs-dmac0",		 330,	R8A7794_CLK_HP),
	DEF_MOD("usbhs-dmac1",		 331,	R8A7794_CLK_HP),
	DEF_MOD("rwdt",			 402,	R8A7794_CLK_R),
	DEF_MOD("irqc",			 407,	R8A7794_CLK_CP),
	DEF_MOD("intc-sys",		 408,	R8A7794_CLK_ZS),
	DEF_MOD("audio-dmac0",		 502,	R8A7794_CLK_HP),
	DEF_MOD("adsp_mod",		 506,	R8A7794_CLK_ADSP),
	DEF_MOD("pwm",			 523,	R8A7794_CLK_P),
	DEF_MOD("usb-ehci",		 703,	R8A7794_CLK_MP),
	DEF_MOD("usbhs",		 704,	R8A7794_CLK_HP),
	DEF_MOD("hscif2",		 713,	R8A7794_CLK_ZS),
	DEF_MOD("scif5",		 714,	R8A7794_CLK_P),
	DEF_MOD("scif4",		 715,	R8A7794_CLK_P),
	DEF_MOD("hscif1",		 716,	R8A7794_CLK_ZS),
	DEF_MOD("hscif0",		 717,	R8A7794_CLK_ZS),
	DEF_MOD("scif3",		 718,	R8A7794_CLK_P),
	DEF_MOD("scif2",		 719,	R8A7794_CLK_P),
	DEF_MOD("scif1",		 720,	R8A7794_CLK_P),
	DEF_MOD("scif0",		 721,	R8A7794_CLK_P),
	DEF_MOD("du1",			 723,	R8A7794_CLK_ZX),
	DEF_MOD("du0",			 724,	R8A7794_CLK_ZX),
	DEF_MOD("ipmmu-sgx",		 800,	R8A7794_CLK_ZX),
	DEF_MOD("mlb",			 802,	R8A7794_CLK_HP),
	DEF_MOD("vin1",			 810,	R8A7794_CLK_ZG),
	DEF_MOD("vin0",			 811,	R8A7794_CLK_ZG),
	DEF_MOD("etheravb",		 812,	R8A7794_CLK_HP),
	DEF_MOD("ether",		 813,	R8A7794_CLK_P),
	DEF_MOD("gyro-adc",		 901,	R8A7794_CLK_P),
	DEF_MOD("gpio6",		 905,	R8A7794_CLK_CP),
	DEF_MOD("gpio5",		 907,	R8A7794_CLK_CP),
	DEF_MOD("gpio4",		 908,	R8A7794_CLK_CP),
	DEF_MOD("gpio3",		 909,	R8A7794_CLK_CP),
	DEF_MOD("gpio2",		 910,	R8A7794_CLK_CP),
	DEF_MOD("gpio1",		 911,	R8A7794_CLK_CP),
	DEF_MOD("gpio0",		 912,	R8A7794_CLK_CP),
	DEF_MOD("can1",			 915,	R8A7794_CLK_P),
	DEF_MOD("can0",			 916,	R8A7794_CLK_P),
	DEF_MOD("qspi_mod",		 917,	R8A7794_CLK_QSPI),
	DEF_MOD("i2c5",			 925,	R8A7794_CLK_HP),
	DEF_MOD("i2c4",			 927,	R8A7794_CLK_HP),
	DEF_MOD("i2c3",			 928,	R8A7794_CLK_HP),
	DEF_MOD("i2c2",			 929,	R8A7794_CLK_HP),
	DEF_MOD("i2c1",			 930,	R8A7794_CLK_HP),
	DEF_MOD("i2c0",			 931,	R8A7794_CLK_HP),
	DEF_MOD("ssi-all",		1005,	R8A7794_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,	R8A7794_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,	R8A7794_CLK_MP),
	DEF_MOD("scifa4",		1107,	R8A7794_CLK_MP),
	DEF_MOD("scifa5",		1108,	R8A7794_CLK_MP),
};

/*
 * 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.5c indicates VCO output (PLL0 = VCO/3)
 * *2 :	Table 7.5c 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[4] = {
	{ 1, 208,  88, 200 },
	{ 1, 156,  66, 150 },
	{ 2, 240, 102, 230 },
	{ 2, 208,  88, 200 },
};

static const struct mstp_stop_table r8a7794_mstp_table[] = {
	{ 0x00440801, 0x400000, 0x00440801, 0x0 },
	{ 0x936899DA, 0x0, 0x936899DA, 0x0 },
	{ 0x100D21FC, 0x2000, 0x100D21FC, 0x0 },
	{ 0xE084D810, 0x0, 0xE084D810, 0x0 },
	{ 0x800001C4, 0x180, 0x800001C4, 0x0 },
	{ 0x40C00044, 0x0, 0x40C00044, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0 },	/* SMSTP6 is not present on Gen2 */
	{ 0x013FE618, 0x80000, 0x013FE618, 0x0 },
	{ 0x40803C05, 0x0, 0x40803C05, 0x0 },
	{ 0xFB879FEE, 0x0, 0xFB879FEE, 0x0 },
	{ 0xFFFEFFE0, 0x0, 0xFFFEFFE0, 0x0 },
	{ 0x000001C0, 0x0, 0x000001C0, 0x0 },
};

static const void *r8a7794_get_pll_config(const u32 cpg_mode)
{
	return &cpg_pll_configs[CPG_PLL_CONFIG_INDEX(cpg_mode)];
}

static const struct cpg_mssr_info r8a7794_cpg_mssr_info = {
	.core_clk		= r8a7794_core_clks,
	.core_clk_size		= ARRAY_SIZE(r8a7794_core_clks),
	.mod_clk		= r8a7794_mod_clks,
	.mod_clk_size		= ARRAY_SIZE(r8a7794_mod_clks),
	.mstp_table		= r8a7794_mstp_table,
	.mstp_table_size	= ARRAY_SIZE(r8a7794_mstp_table),
	.reset_node		= "renesas,r8a7794-rst",
	.extal_usb_node		= "usb_extal",
	.mod_clk_base		= MOD_CLK_BASE,
	.clk_extal_id		= CLK_EXTAL,
	.clk_extal_usb_id	= CLK_USB_EXTAL,
	.pll0_div		= 2,
	.get_pll_config		= r8a7794_get_pll_config,
};

static const struct udevice_id r8a7794_clk_ids[] = {
	{
		.compatible	= "renesas,r8a7794-cpg-mssr",
		.data		= (ulong)&r8a7794_cpg_mssr_info
	},
	{
		.compatible	= "renesas,r8a7793-cpg-mssr",
		.data		= (ulong)&r8a7794_cpg_mssr_info
	},
	{ }
};

U_BOOT_DRIVER(clk_r8a7794) = {
	.name		= "clk_r8a7794",
	.id		= UCLASS_CLK,
	.of_match	= r8a7794_clk_ids,
	.priv_auto_alloc_size = sizeof(struct gen2_clk_priv),
	.ops		= &gen2_clk_ops,
	.probe		= gen2_clk_probe,
	.remove		= gen2_clk_remove,
};
