// SPDX-License-Identifier: GPL-2.0
/*
 * Renesas R8A7791 CPG MSSR driver
 *
 * Copyright (C) 2018 Marek Vasut <marek.vasut@gmail.com>
 *
 * Based on the following driver from Linux kernel:
 * r8a7791 Clock Pulse Generator / Module Standby and Software Reset
 *
 * Copyright (C) 2015-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/r8a7791-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 = R8A7791_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 r8a7791_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("z",    R8A7791_CLK_Z,    CLK_TYPE_GEN2_Z,    CLK_PLL0),
	DEF_BASE("adsp", R8A7791_CLK_ADSP, CLK_TYPE_GEN2_ADSP, CLK_PLL1),
	DEF_BASE("sdh",  R8A7791_CLK_SDH,  CLK_TYPE_GEN2_SDH,  CLK_PLL1),
	DEF_BASE("sd0",  R8A7791_CLK_SD0,  CLK_TYPE_GEN2_SD0,  CLK_PLL1),
	DEF_BASE("qspi", R8A7791_CLK_QSPI, CLK_TYPE_GEN2_QSPI, CLK_PLL1_DIV2),
	DEF_BASE("rcan", R8A7791_CLK_RCAN, CLK_TYPE_GEN2_RCAN, CLK_USB_EXTAL),

	DEF_FIXED("zg",     R8A7791_CLK_ZG,    CLK_PLL1,          3, 1),
	DEF_FIXED("zx",     R8A7791_CLK_ZX,    CLK_PLL1,          3, 1),
	DEF_FIXED("zs",     R8A7791_CLK_ZS,    CLK_PLL1,          6, 1),
	DEF_FIXED("hp",     R8A7791_CLK_HP,    CLK_PLL1,         12, 1),
	DEF_FIXED("i",      R8A7791_CLK_I,     CLK_PLL1,          2, 1),
	DEF_FIXED("b",      R8A7791_CLK_B,     CLK_PLL1,         12, 1),
	DEF_FIXED("lb",     R8A7791_CLK_LB,    CLK_PLL1,         24, 1),
	DEF_FIXED("p",      R8A7791_CLK_P,     CLK_PLL1,         24, 1),
	DEF_FIXED("cl",     R8A7791_CLK_CL,    CLK_PLL1,         48, 1),
	DEF_FIXED("m2",     R8A7791_CLK_M2,    CLK_PLL1,          8, 1),
	DEF_FIXED("zb3",    R8A7791_CLK_ZB3,   CLK_PLL3,          4, 1),
	DEF_FIXED("zb3d2",  R8A7791_CLK_ZB3D2, CLK_PLL3,          8, 1),
	DEF_FIXED("ddr",    R8A7791_CLK_DDR,   CLK_PLL3,          8, 1),
	DEF_FIXED("mp",     R8A7791_CLK_MP,    CLK_PLL1_DIV2,    15, 1),
	DEF_FIXED("cp",     R8A7791_CLK_CP,    CLK_EXTAL,         2, 1),
	DEF_FIXED("r",      R8A7791_CLK_R,     CLK_PLL1,      49152, 1),
	DEF_FIXED("osc",    R8A7791_CLK_OSC,   CLK_PLL1,      12288, 1),

	DEF_DIV6P1("sd2",   R8A7791_CLK_SD2,   CLK_PLL1_DIV2, 0x078),
	DEF_DIV6P1("sd3",   R8A7791_CLK_SD3,   CLK_PLL1_DIV2, 0x26c),
	DEF_DIV6P1("mmc0",  R8A7791_CLK_MMC0,  CLK_PLL1_DIV2, 0x240),
	DEF_DIV6P1("ssp",   R8A7791_CLK_SSP,   CLK_PLL1_DIV2, 0x248),
	DEF_DIV6P1("ssprs", R8A7791_CLK_SSPRS, CLK_PLL1_DIV2, 0x24c),
};

static const struct mssr_mod_clk r8a7791_mod_clks[] = {
	DEF_MOD("msiof0",		   0,	R8A7791_CLK_MP),
	DEF_MOD("vcp0",			 101,	R8A7791_CLK_ZS),
	DEF_MOD("vpc0",			 103,	R8A7791_CLK_ZS),
	DEF_MOD("jpu",			 106,	R8A7791_CLK_M2),
	DEF_MOD("ssp1",			 109,	R8A7791_CLK_ZS),
	DEF_MOD("tmu1",			 111,	R8A7791_CLK_P),
	DEF_MOD("3dg",			 112,	R8A7791_CLK_ZG),
	DEF_MOD("2d-dmac",		 115,	R8A7791_CLK_ZS),
	DEF_MOD("fdp1-1",		 118,	R8A7791_CLK_ZS),
	DEF_MOD("fdp1-0",		 119,	R8A7791_CLK_ZS),
	DEF_MOD("tmu3",			 121,	R8A7791_CLK_P),
	DEF_MOD("tmu2",			 122,	R8A7791_CLK_P),
	DEF_MOD("cmt0",			 124,	R8A7791_CLK_R),
	DEF_MOD("tmu0",			 125,	R8A7791_CLK_CP),
	DEF_MOD("vsp1du1",		 127,	R8A7791_CLK_ZS),
	DEF_MOD("vsp1du0",		 128,	R8A7791_CLK_ZS),
	DEF_MOD("vsp1-sy",		 131,	R8A7791_CLK_ZS),
	DEF_MOD("scifa2",		 202,	R8A7791_CLK_MP),
	DEF_MOD("scifa1",		 203,	R8A7791_CLK_MP),
	DEF_MOD("scifa0",		 204,	R8A7791_CLK_MP),
	DEF_MOD("msiof2",		 205,	R8A7791_CLK_MP),
	DEF_MOD("scifb0",		 206,	R8A7791_CLK_MP),
	DEF_MOD("scifb1",		 207,	R8A7791_CLK_MP),
	DEF_MOD("msiof1",		 208,	R8A7791_CLK_MP),
	DEF_MOD("scifb2",		 216,	R8A7791_CLK_MP),
	DEF_MOD("sys-dmac1",		 218,	R8A7791_CLK_ZS),
	DEF_MOD("sys-dmac0",		 219,	R8A7791_CLK_ZS),
	DEF_MOD("tpu0",			 304,	R8A7791_CLK_CP),
	DEF_MOD("sdhi3",		 311,	R8A7791_CLK_SD3),
	DEF_MOD("sdhi2",		 312,	R8A7791_CLK_SD2),
	DEF_MOD("sdhi0",		 314,	R8A7791_CLK_SD0),
	DEF_MOD("mmcif0",		 315,	R8A7791_CLK_MMC0),
	DEF_MOD("iic0",			 318,	R8A7791_CLK_HP),
	DEF_MOD("pciec",		 319,	R8A7791_CLK_MP),
	DEF_MOD("iic1",			 323,	R8A7791_CLK_HP),
	DEF_MOD("usb3.0",		 328,	R8A7791_CLK_MP),
	DEF_MOD("cmt1",			 329,	R8A7791_CLK_R),
	DEF_MOD("usbhs-dmac0",		 330,	R8A7791_CLK_HP),
	DEF_MOD("usbhs-dmac1",		 331,	R8A7791_CLK_HP),
	DEF_MOD("rwdt",			 402,	R8A7791_CLK_R),
	DEF_MOD("irqc",			 407,	R8A7791_CLK_CP),
	DEF_MOD("intc-sys",		 408,	R8A7791_CLK_ZS),
	DEF_MOD("audio-dmac1",		 501,	R8A7791_CLK_HP),
	DEF_MOD("audio-dmac0",		 502,	R8A7791_CLK_HP),
	DEF_MOD("adsp_mod",		 506,	R8A7791_CLK_ADSP),
	DEF_MOD("thermal",		 522,	CLK_EXTAL),
	DEF_MOD("pwm",			 523,	R8A7791_CLK_P),
	DEF_MOD("usb-ehci",		 703,	R8A7791_CLK_MP),
	DEF_MOD("usbhs",		 704,	R8A7791_CLK_HP),
	DEF_MOD("hscif2",		 713,	R8A7791_CLK_ZS),
	DEF_MOD("scif5",		 714,	R8A7791_CLK_P),
	DEF_MOD("scif4",		 715,	R8A7791_CLK_P),
	DEF_MOD("hscif1",		 716,	R8A7791_CLK_ZS),
	DEF_MOD("hscif0",		 717,	R8A7791_CLK_ZS),
	DEF_MOD("scif3",		 718,	R8A7791_CLK_P),
	DEF_MOD("scif2",		 719,	R8A7791_CLK_P),
	DEF_MOD("scif1",		 720,	R8A7791_CLK_P),
	DEF_MOD("scif0",		 721,	R8A7791_CLK_P),
	DEF_MOD("du1",			 723,	R8A7791_CLK_ZX),
	DEF_MOD("du0",			 724,	R8A7791_CLK_ZX),
	DEF_MOD("lvds0",		 726,	R8A7791_CLK_ZX),
	DEF_MOD("ipmmu-sgx",		 800,	R8A7791_CLK_ZX),
	DEF_MOD("mlb",			 802,	R8A7791_CLK_HP),
	DEF_MOD("vin2",			 809,	R8A7791_CLK_ZG),
	DEF_MOD("vin1",			 810,	R8A7791_CLK_ZG),
	DEF_MOD("vin0",			 811,	R8A7791_CLK_ZG),
	DEF_MOD("etheravb",		 812,	R8A7791_CLK_HP),
	DEF_MOD("ether",		 813,	R8A7791_CLK_P),
	DEF_MOD("sata1",		 814,	R8A7791_CLK_ZS),
	DEF_MOD("sata0",		 815,	R8A7791_CLK_ZS),
	DEF_MOD("gyro-adc",		 901,	R8A7791_CLK_P),
	DEF_MOD("gpio7",		 904,	R8A7791_CLK_CP),
	DEF_MOD("gpio6",		 905,	R8A7791_CLK_CP),
	DEF_MOD("gpio5",		 907,	R8A7791_CLK_CP),
	DEF_MOD("gpio4",		 908,	R8A7791_CLK_CP),
	DEF_MOD("gpio3",		 909,	R8A7791_CLK_CP),
	DEF_MOD("gpio2",		 910,	R8A7791_CLK_CP),
	DEF_MOD("gpio1",		 911,	R8A7791_CLK_CP),
	DEF_MOD("gpio0",		 912,	R8A7791_CLK_CP),
	DEF_MOD("can1",			 915,	R8A7791_CLK_P),
	DEF_MOD("can0",			 916,	R8A7791_CLK_P),
	DEF_MOD("qspi_mod",		 917,	R8A7791_CLK_QSPI),
	DEF_MOD("i2c5",			 925,	R8A7791_CLK_HP),
	DEF_MOD("iicdvfs",		 926,	R8A7791_CLK_CP),
	DEF_MOD("i2c4",			 927,	R8A7791_CLK_HP),
	DEF_MOD("i2c3",			 928,	R8A7791_CLK_HP),
	DEF_MOD("i2c2",			 929,	R8A7791_CLK_HP),
	DEF_MOD("i2c1",			 930,	R8A7791_CLK_HP),
	DEF_MOD("i2c0",			 931,	R8A7791_CLK_HP),
	DEF_MOD("ssi-all",		1005,	R8A7791_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,	R8A7791_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,	R8A7791_CLK_MP),
	DEF_MOD("scifa4",		1107,	R8A7791_CLK_MP),
	DEF_MOD("scifa5",		1108,	R8A7791_CLK_MP),
};

/*
 * 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] = {
	{ 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 const struct mstp_stop_table r8a7791_mstp_table[] = {
	{ 0x00640801, 0x400000, 0x00640801, 0x0 },
	{ 0x9B6C9B5A, 0x0, 0x9B6C9B5A, 0x0 },
	{ 0x100D21FC, 0x2000, 0x100D21FC, 0x0 },
	{ 0xF08CD810, 0x0, 0xF08CD810, 0x0 },
	{ 0x800001C4, 0x180, 0x800001C4, 0x0 },
	{ 0x44C00046, 0x0, 0x44C00046, 0x0 },
	{ 0x0, 0x0, 0x0, 0x0 },	/* SMSTP6 is not present on Gen2 */
	{ 0x05BFE618, 0x200000, 0x05BFE618, 0x0 },
	{ 0x40C0FE85, 0x0, 0x40C0FE85, 0x0 },
	{ 0xFF979FFF, 0x0, 0xFF979FFF, 0x0 },
	{ 0xFFFEFFE0, 0x0, 0xFFFEFFE0, 0x0 },
	{ 0x000001C0, 0x0, 0x000001C0, 0x0 },
};

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

static const struct cpg_mssr_info r8a7791_cpg_mssr_info = {
	.core_clk		= r8a7791_core_clks,
	.core_clk_size		= ARRAY_SIZE(r8a7791_core_clks),
	.mod_clk		= r8a7791_mod_clks,
	.mod_clk_size		= ARRAY_SIZE(r8a7791_mod_clks),
	.mstp_table		= r8a7791_mstp_table,
	.mstp_table_size	= ARRAY_SIZE(r8a7791_mstp_table),
	.reset_node		= "renesas,r8a7791-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		= r8a7791_get_pll_config,
};

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

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