// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2019 Amlogic, Inc. All rights reserved.
 */

#include <common.h>
#include <command.h>
#include <asm/io.h>
#include <asm/arch/secure_apb.h>
#include <../clk-pll.h>
#include <linux/kernel.h>

#define SECURE_PLL_CLK		0x82000098
#define SECURE_CPU_CLK		0x82000099

/* PLL secure clock index */
enum sec_pll {
	SECID_SYS0_DCO_PLL = 0,
	SECID_SYS0_DCO_PLL_DIS,
	SECID_SYS0_PLL_OD,
	SECID_SYS1_DCO_PLL,
	SECID_SYS1_DCO_PLL_DIS,
	SECID_SYS1_PLL_OD,
	SECID_CPU_CLK_SEL,
	SECID_CPU_CLK_RD,
	SECID_CPU_CLK_DYN,
	SECID_A73_CLK_SEL,
	SECID_A73_CLK_RD,
	SECID_A73_CLK_DYN,
};

static const struct pll_params_table t7_sys_pll_table[] = {
	PLL_PARAMS(67, 1, 1), /*DCO=1608M OD=804MM*/
	PLL_PARAMS(133, 1, 1), /*DCO=3192M OD=1596MM*/
	{ /* sentinel */ }
};

static unsigned int t7_sys_pll_default_rate[] = {804, 1596};

struct meson_clk_pll_data t7_sys_pll = {
	.name = "sys0",
	.en = {
		.reg = ANACTRL_SYS0PLL_CTRL0,
		.shift   = 28,
		.width   = 1,
	},
	.m = {
		.reg = ANACTRL_SYS0PLL_CTRL0,
		.shift   = 0,
		.width   = 8,
	},
	.n = {
		.reg = ANACTRL_SYS0PLL_CTRL0,
		.shift   = 16,
		.width   = 5,
	},
	.od = {
		.reg = ANACTRL_SYS0PLL_CTRL0,
		.shift	 = 12,
		.width	 = 3,
	},
	.def_rate = t7_sys_pll_default_rate,
	.def_cnt = ARRAY_SIZE(t7_sys_pll_default_rate),
	.table = t7_sys_pll_table,
	.l = {
		.reg = ANACTRL_SYS0PLL_CTRL0,
		.shift   = 31,
		.width   = 1,
	},
	.rst = {
		.reg = ANACTRL_SYS0PLL_CTRL0,
		.shift   = 29,
		.width   = 1,
	},
	.smc_id = SECURE_PLL_CLK,
	.secid_disable = SECID_SYS0_DCO_PLL_DIS,
	.secid = SECID_SYS0_DCO_PLL,
	.clkmsr_id = 172,
	.clkmsr_div16_en = 1
};

struct meson_clk_pll_data t7_sys1_pll = {
	.name = "sys1",
	.en = {
		.reg = ANACTRL_SYS1PLL_CTRL0,
		.shift   = 28,
		.width   = 1,
	},
	.m = {
		.reg = ANACTRL_SYS1PLL_CTRL0,
		.shift   = 0,
		.width   = 8,
	},
	.n = {
		.reg = ANACTRL_SYS1PLL_CTRL0,
		.shift   = 16,
		.width   = 5,
	},
	.od = {
		.reg = ANACTRL_SYS1PLL_CTRL0,
		.shift	 = 12,
		.width	 = 3,
	},
	.def_rate = t7_sys_pll_default_rate,
	.def_cnt = ARRAY_SIZE(t7_sys_pll_default_rate),
	.table = t7_sys_pll_table,
	.l = {
		.reg = ANACTRL_SYS1PLL_CTRL0,
		.shift   = 31,
		.width   = 1,
	},
	.rst = {
		.reg = ANACTRL_SYS1PLL_CTRL0,
		.shift   = 29,
		.width   = 1,
	},
	.smc_id = SECURE_PLL_CLK,
	.secid_disable = SECID_SYS1_DCO_PLL_DIS,
	.secid = SECID_SYS1_DCO_PLL,
	.clkmsr_id = 6,
	.clkmsr_div16_en = 1
};

static unsigned int t7_gp0_pll_default_rate[] = {1500, 750, 1152};

/* set the od = 2, clkmsr can not measure 6000M */
static const struct pll_params_table t7_gp0_pll_table[] = {
	PLL_PARAMS(250, 1, 2), /* DCO = 6000M  PLL = 1500M */
	PLL_PARAMS(125, 1, 2), /* DCO = 3000M  PLL = 750M */
	PLL_PARAMS(192, 1, 2), /* DCO = 4608M  PLL = 1152M */
	{ /* sentinel */  }
};

static const struct reg_sequence t7_gp0_init_regs[] = {
	{ .reg = ANACTRL_GP0PLL_CTRL0,  .def = 0x080304fa },
	{ .reg = ANACTRL_GP0PLL_CTRL0,  .def = 0x380304fa },
	{ .reg = ANACTRL_GP0PLL_CTRL1,  .def = 0x00000000 },
	{ .reg = ANACTRL_GP0PLL_CTRL2,  .def = 0x00000000 },
	{ .reg = ANACTRL_GP0PLL_CTRL3,  .def = 0x48681c00 },
	{ .reg = ANACTRL_GP0PLL_CTRL4,  .def = 0x88770290 },
	{ .reg = ANACTRL_GP0PLL_CTRL5,  .def = 0x39272000 },
	{ .reg = ANACTRL_GP0PLL_CTRL6,  .def = 0x56540000, .delay_us = 50 },
	{ .reg = ANACTRL_GP0PLL_CTRL0,  .def = 0x180304fa, .delay_us = 50 }
};

struct meson_clk_pll_data t7_gp0_pll = {
	.name = "gp0",
	.en = {
		.reg = ANACTRL_GP0PLL_CTRL0,
		.shift   = 28,
		.width   = 1,
	},
	.m = {
		.reg = ANACTRL_GP0PLL_CTRL0,
		.shift   = 0,
		.width   = 8,
	},
	.n = {
		.reg = ANACTRL_GP0PLL_CTRL0,
		.shift   = 10,
		.width   = 5,
	},
	.od = {
		.reg = ANACTRL_GP0PLL_CTRL0,
		.shift	 = 16,
		.width	 = 3,
	},
	.def_rate = t7_gp0_pll_default_rate,
	.def_cnt = ARRAY_SIZE(t7_gp0_pll_default_rate),
	.table = t7_gp0_pll_table,
	.init_regs = t7_gp0_init_regs,
	.init_count = ARRAY_SIZE(t7_gp0_init_regs),
	.l = {
		.reg = ANACTRL_GP0PLL_CTRL0,
		.shift   = 31,
		.width   = 1,
	},
	.rst = {
		.reg = ANACTRL_GP0PLL_CTRL0,
		.shift   = 29,
		.width   = 1,
	},
	.clkmsr_id = 20,
};

static unsigned int t7_gp1_pll_default_rate[] = {1596, 804};

static const struct pll_params_table t7_gp1_pll_table[] = {
	PLL_PARAMS(133, 1, 1), /* DCO = 3192M  PLL = 1596M */
	PLL_PARAMS(67, 1, 1), /* DCO = 1608M  PLL = 804M */
	{ /* sentinel */  }
};

static const struct reg_sequence t7_gp1_init_regs[] = {
	{ .reg = ANACTRL_GP1PLL_CTRL0,  .def = 0x20011086 },
	{ .reg = ANACTRL_GP1PLL_CTRL0,  .def = 0x30011086 },
	{ .reg = ANACTRL_GP1PLL_CTRL1,  .def = 0x1420500f },
	{ .reg = ANACTRL_GP1PLL_CTRL2,  .def = 0x00023041 },
	{ .reg = ANACTRL_GP1PLL_CTRL3,  .def = 0x0, .delay_us = 20 },
	{ .reg = ANACTRL_GP1PLL_CTRL0,  .def = 0x10011086, .delay_us = 20 },
	{ .reg = ANACTRL_GP1PLL_CTRL2,  .def = 0x00023001, .delay_us = 50 },
};

struct meson_clk_pll_data t7_gp1_pll = {
	.name = "gp1",
	.en = {
		.reg = ANACTRL_GP1PLL_CTRL0,
		.shift   = 28,
		.width   = 1,
	},
	.m = {
		.reg = ANACTRL_GP1PLL_CTRL0,
		.shift   = 0,
		.width   = 8,
	},
	.n = {
		.reg = ANACTRL_GP1PLL_CTRL0,
		.shift   = 16,
		.width   = 5,
	},
	.od = {
		.reg = ANACTRL_GP1PLL_CTRL0,
		.shift	 = 12,
		.width	 = 3,
	},
	.def_rate = t7_gp1_pll_default_rate,
	.def_cnt = ARRAY_SIZE(t7_gp1_pll_default_rate),
	.table = t7_gp1_pll_table,
	.init_regs = t7_gp1_init_regs,
	.init_count = ARRAY_SIZE(t7_gp1_init_regs),
	.l = {
		.reg = ANACTRL_GP1PLL_CTRL0,
		.shift   = 31,
		.width   = 1,
	},
	.rst = {
		.reg = ANACTRL_GP1PLL_CTRL0,
		.shift   = 29,
		.width   = 1,
	},
	.clkmsr_id = 21,
};

static unsigned int t7_mclk_pll_default_rate[] = {50};

static const struct reg_sequence t7_mclk_init_regs[] = {
	{ .reg = ANACTRL_MCLK_PLL_CNTL0,  .def = 0x20011064 },
	{ .reg = ANACTRL_MCLK_PLL_CNTL0,  .def = 0x30011064 },
	{ .reg = ANACTRL_MCLK_PLL_CNTL1,  .def = 0x0480500f },
	{ .reg = ANACTRL_MCLK_PLL_CNTL2,  .def = 0x00023041 },
	{ .reg = ANACTRL_MCLK_PLL_CNTL3,  .def = 0x18180000 },
	{ .reg = ANACTRL_MCLK_PLL_CNTL4,  .def = 0x00180303, .delay_us = 20 },
	{ .reg = ANACTRL_MCLK_PLL_CNTL0,  .def = 0x10011064, .delay_us = 20 },
	{ .reg = ANACTRL_MCLK_PLL_CNTL2,  .def = 0x00023001, .delay_us = 50 },
};

struct meson_clk_pll_data t7_mclk_pll = {
	.name = "mclk",
	.en = {
		.reg = ANACTRL_MCLK_PLL_CNTL0,
		.shift   = 28,
		.width   = 1,
	},
	.m = {
		.reg = ANACTRL_MCLK_PLL_CNTL0,
		.shift   = 0,
		.width   = 8,
	},
	.n = {
		.reg = ANACTRL_MCLK_PLL_CNTL0,
		.shift   = 16,
		.width   = 5,
	},
	.od = {
		.reg = ANACTRL_MCLK_PLL_CNTL0,
		.shift	 = 12,
		.width	 = 3,
	},
	.def_rate = t7_mclk_pll_default_rate,
	.def_cnt = ARRAY_SIZE(t7_mclk_pll_default_rate),
	.init_regs = t7_mclk_init_regs,
	.init_count = ARRAY_SIZE(t7_mclk_init_regs),
	.l = {
		.reg = ANACTRL_MCLK_PLL_CNTL0,
		.shift   = 31,
		.width   = 1,
	},
	.rst = {
		.reg = ANACTRL_MCLK_PLL_CNTL0,
		.shift   = 29,
		.width   = 1,
	},
	.clkmsr_id = 171,
};

static unsigned int t7_pcie_default_rate[] = {100};

static const struct reg_sequence t7_pcie_init_regs[] = {
	{ .reg = ANACTRL_PCIEPLL_CTRL0,	.def = 0x200c04c8 },
	{ .reg = ANACTRL_PCIEPLL_CTRL0,	.def = 0x300c04c8 },
	{ .reg = ANACTRL_PCIEPLL_CTRL1,	.def = 0x30000000 },
	{ .reg = ANACTRL_PCIEPLL_CTRL2,	.def = 0x00001100 },
	{ .reg = ANACTRL_PCIEPLL_CTRL3,	.def = 0x10058e00 },
	{ .reg = ANACTRL_PCIEPLL_CTRL4,	.def = 0x000100c0 },
	{ .reg = ANACTRL_PCIEPLL_CTRL5,	.def = 0x68000040 },
	{ .reg = ANACTRL_PCIEPLL_CTRL5,	.def = 0x68000060, .delay_us = 20 },
	{ .reg = ANACTRL_PCIEPLL_CTRL4,	.def = 0x008100c0, .delay_us = 10 },
	{ .reg = ANACTRL_PCIEPLL_CTRL0,	.def = 0x340c04c8 },
	{ .reg = ANACTRL_PCIEPLL_CTRL0,	.def = 0x140c04c8, .delay_us = 10 },
	{ .reg = ANACTRL_PCIEPLL_CTRL2,	.def = 0x00001000 }
};

struct meson_clk_pll_data t7_pcie_pll = {
	.name = "pcie",
	.en = {
		.reg = ANACTRL_PCIEPLL_CTRL0,
		.shift   = 28,
		.width   = 1,
	},
	.def_rate = t7_pcie_default_rate,
	.def_cnt = ARRAY_SIZE(t7_pcie_default_rate),
	.init_regs = t7_pcie_init_regs,
	.init_count = ARRAY_SIZE(t7_pcie_init_regs),
	.l = {
		.reg = ANACTRL_PCIEPLL_CTRL0,
		.shift   = 31,
		.width   = 1,
	},
	.rst = {
		.reg = ANACTRL_PCIEPLL_CTRL0,
		.shift   = 29,
		.width   = 1,
	},
	.clkmsr_id = 16,
};

static unsigned int t7_hifi_pll_default_rate[] = {1500, 750};

/* set the od = 2, clkmsr can not measure 6000M */
static const struct pll_params_table t7_hifi_pll_table[] = {
	PLL_PARAMS(250, 1, 2), /* DCO = 6000M  PLL = 1500M */
	PLL_PARAMS(125, 1, 2), /* DCO = 3000M  PLL = 750M */
	{ /* sentinel */  }
};

static const struct reg_sequence t7_hifi_init_regs[] = {
	{ .reg = ANACTRL_HIFIPLL_CTRL0,	.def = 0x080304fa },
	{ .reg = ANACTRL_HIFIPLL_CTRL0,	.def = 0x380304fa },
	//{ .reg = ANACTRL_HIFIPLL_CTRL1,	.def = 0x00010e56 },
	{ .reg = ANACTRL_HIFIPLL_CTRL2,	.def = 0x00000000 },
	{ .reg = ANACTRL_HIFIPLL_CTRL3,	.def = 0x6a285c00 },
	{ .reg = ANACTRL_HIFIPLL_CTRL4,	.def = 0x65771290 },
	{ .reg = ANACTRL_HIFIPLL_CTRL5,	.def = 0x39272000 },
	{ .reg = ANACTRL_HIFIPLL_CTRL6,	.def = 0x56540000, .delay_us = 50 },
	{ .reg = ANACTRL_HIFIPLL_CTRL0,	.def = 0X180304fa, .delay_us = 50 },
};

struct meson_clk_pll_data t7_hifi_pll = {
	.name = "hifi",
	.en = {
		.reg = ANACTRL_HIFIPLL_CTRL0,
		.shift   = 28,
		.width   = 1,
	},
	.m = {
		.reg = ANACTRL_HIFIPLL_CTRL0,
		.shift   = 0,
		.width   = 8,
	},
	.n = {
		.reg = ANACTRL_HIFIPLL_CTRL0,
		.shift   = 10,
		.width   = 5,
	},
	.frac = {
		.reg = ANACTRL_HIFIPLL_CTRL0,
		.shift	 = 0,
		.width	 = 19,
	},
	.od = {
		.reg = ANACTRL_HIFIPLL_CTRL0,
		.shift	 = 16,
		.width	 = 5,
	},
	.def_rate = t7_hifi_pll_default_rate,
	.def_cnt = ARRAY_SIZE(t7_hifi_pll_default_rate),
	.table = t7_hifi_pll_table,
	.init_regs = t7_hifi_init_regs,
	.init_count = ARRAY_SIZE(t7_hifi_init_regs),
	.l = {
		.reg = ANACTRL_HIFIPLL_CTRL0,
		.shift   = 31,
		.width   = 1,
	},
	.rst = {
		.reg = ANACTRL_HIFIPLL_CTRL0,
		.shift   = 29,
		.width   = 1,
	},
	.clkmsr_id = 19,
};

static unsigned int t7_mpll_default_rate[] = {166};
static const struct reg_sequence t7_mpll0_init_regs[] = {
	{ .reg = ANACTRL_MPLL_CTRL0,	.def = 0x00000543 },
	{ .reg = ANACTRL_MPLL_CTRL2,	.def = 0x40000033 },
};

struct meson_clk_mpll_data t7_mpll0 = {
	.name = "mpll0",
	.sdm = {
		.reg = ANACTRL_MPLL_CTRL1,
		.shift   = 0,
		.width   = 14,
	},
	.sdm_en = {
		.reg = ANACTRL_MPLL_CTRL1,
		.shift   = 30,
		.width   = 1,
	},
	.n2 = {
		.reg = ANACTRL_MPLL_CTRL1,
		.shift   = 20,
		.width   = 9,
	},
	.ssen = {
		.reg = ANACTRL_MPLL_CTRL1,
		.shift   = 29,
		.width   = 1,
	},
	.en = {
		.reg = ANACTRL_MPLL_CTRL1,
		.shift   = 31,
		.width   = 1,
	},
	.init_regs = t7_mpll0_init_regs,
	.init_count = ARRAY_SIZE(t7_mpll0_init_regs),
	.def_rate = t7_mpll_default_rate,
	.def_cnt = ARRAY_SIZE(t7_mpll_default_rate),
	.clkmsr_id = 11
};

static const struct reg_sequence t7_mpll1_init_regs[] = {
	{ .reg = ANACTRL_MPLL_CTRL0,	.def = 0x00000543 },
	{ .reg = ANACTRL_MPLL_CTRL4,	.def = 0x40000033 },
};

struct meson_clk_mpll_data t7_mpll1 = {
	.name = "mpll1",
	.sdm = {
		.reg = ANACTRL_MPLL_CTRL3,
		.shift   = 0,
		.width   = 14,
	},
	.sdm_en = {
		.reg = ANACTRL_MPLL_CTRL3,
		.shift   = 30,
		.width   = 1,
	},
	.n2 = {
		.reg = ANACTRL_MPLL_CTRL3,
		.shift   = 20,
		.width   = 9,
	},
	.ssen = {
		.reg = ANACTRL_MPLL_CTRL3,
		.shift   = 29,
		.width   = 1,
	},
	.en = {
		.reg = ANACTRL_MPLL_CTRL3,
		.shift   = 31,
		.width   = 1,
	},
	.init_regs = t7_mpll1_init_regs,
	.init_count = ARRAY_SIZE(t7_mpll1_init_regs),
	.def_rate = t7_mpll_default_rate,
	.def_cnt = ARRAY_SIZE(t7_mpll_default_rate),
	.clkmsr_id = 12
};

static const struct reg_sequence t7_mpll2_init_regs[] = {
	{ .reg = ANACTRL_MPLL_CTRL0,	.def = 0x00000543 },
	{ .reg = ANACTRL_MPLL_CTRL6,	.def = 0x40000033 },
};

struct meson_clk_mpll_data t7_mpll2 = {
	.name = "mpll2",
	.sdm = {
		.reg = ANACTRL_MPLL_CTRL5,
		.shift   = 0,
		.width   = 14,
	},
	.sdm_en = {
		.reg = ANACTRL_MPLL_CTRL5,
		.shift   = 30,
		.width   = 1,
	},
	.n2 = {
		.reg = ANACTRL_MPLL_CTRL5,
		.shift   = 20,
		.width   = 9,
	},
	.ssen = {
		.reg = ANACTRL_MPLL_CTRL5,
		.shift   = 29,
		.width   = 1,
	},
	.en = {
		.reg = ANACTRL_MPLL_CTRL5,
		.shift   = 31,
		.width   = 1,
	},
	.init_regs = t7_mpll2_init_regs,
	.init_count = ARRAY_SIZE(t7_mpll2_init_regs),
	.def_rate = t7_mpll_default_rate,
	.def_cnt = ARRAY_SIZE(t7_mpll_default_rate),
	.clkmsr_id = 13
};

static const struct reg_sequence t7_mpll3_init_regs[] = {
	{ .reg = ANACTRL_MPLL_CTRL0,	.def = 0x00000543 },
	{ .reg = ANACTRL_MPLL_CTRL8,	.def = 0x40000033 },
};

struct meson_clk_mpll_data t7_mpll3 = {
	.name = "mpll3",
	.sdm = {
		.reg = ANACTRL_MPLL_CTRL7,
		.shift   = 0,
		.width   = 14,
	},
	.sdm_en = {
		.reg = ANACTRL_MPLL_CTRL7,
		.shift   = 30,
		.width   = 1,
	},
	.n2 = {
		.reg = ANACTRL_MPLL_CTRL7,
		.shift   = 20,
		.width   = 9,
	},
	.ssen = {
		.reg = ANACTRL_MPLL_CTRL7,
		.shift   = 29,
		.width   = 1,
	},
	.en = {
		.reg = ANACTRL_MPLL_CTRL7,
		.shift   = 31,
		.width   = 1,
	},
	.init_regs = t7_mpll3_init_regs,
	.init_count = ARRAY_SIZE(t7_mpll3_init_regs),
	.def_rate = t7_mpll_default_rate,
	.def_cnt = ARRAY_SIZE(t7_mpll_default_rate),
	.clkmsr_id = 14
};

void meson_sys_pll_test(struct meson_clk_pll_data *pll, unsigned int cpu_dyn)
{
	struct arm_smccc_res res;

	/* set fixed clk to 1G, Switch to fixed clk first */
	arm_smccc_smc(SECURE_CPU_CLK, cpu_dyn,
	1, 0, 0, 0, 0, 0, &res);

	meson_switch_cpu_clk(SECURE_CPU_CLK, SECID_A73_CLK_SEL, 0);

	/* set sys pll rate */
	meson_secure_pll_test(&t7_sys_pll);

	/* Switch back to sys pll */
	meson_switch_cpu_clk(SECURE_CPU_CLK, SECID_A73_CLK_SEL, 1);
}

void meson_plls_test(void)
{
	/* test sys0 pll */
	meson_sys_pll_test(&t7_sys_pll, SECID_A73_CLK_DYN);
	//meson_secure_pll_test(&t7_sys1_pll, SECID_CPU_CLK_DYN);

	/* non secure pll */
	meson_pll_test(&t7_gp0_pll);
	meson_pll_test_one(&t7_pcie_pll);
	meson_pll_test(&t7_hifi_pll);
	meson_pll_test(&t7_gp1_pll);
	meson_pll_test_one(&t7_mclk_pll);
	/* mpll */
	meson_mpll_test(&t7_mpll0);
	meson_mpll_test(&t7_mpll1);
	meson_mpll_test(&t7_mpll2);
	meson_mpll_test(&t7_mpll3);

	return;
}

struct meson_clk_pll_data *t7_pll_list[] = {
	&t7_sys_pll,
	&t7_sys1_pll,
	&t7_gp0_pll,
	&t7_hifi_pll,
	&t7_gp1_pll,
};

struct meson_clk_mpll_data *t7_mpll_list[] = {
	&t7_mpll0,
	&t7_mpll1,
	&t7_mpll2,
	&t7_mpll3
};

int pll_test(int argc, char * const argv[])
{
	if (0 == strcmp("all", argv[1]))
		meson_plls_test();
	else if (0 == strcmp("sys0", argv[1])) {
		meson_sys_pll_test(&t7_sys_pll, SECID_A73_CLK_DYN);
	}
	else if (0 == strcmp("sys1", argv[1])) {
		meson_sys_pll_test(&t7_sys1_pll, SECID_CPU_CLK_DYN);
	}
	else if (0 == strcmp("pcie", argv[1])) {
		meson_pll_test_one(&t7_pcie_pll);
	}
	else if (0 == strcmp("mclk", argv[1])) {
		meson_pll_test_one(&t7_mclk_pll);
	}
	else {
		one_pll_test(t7_pll_list, ARRAY_SIZE(t7_pll_list),
		t7_mpll_list, ARRAY_SIZE(t7_mpll_list), argv[1]);
	}

	return 0;
}
