1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
246650d58SDmitry Lifshitz /*
346650d58SDmitry Lifshitz  * SPL data and initialization for CompuLab CL-SOM-AM57x board
446650d58SDmitry Lifshitz  *
546650d58SDmitry Lifshitz  * (C) Copyright 2016 CompuLab, Ltd. http://compulab.co.il/
646650d58SDmitry Lifshitz  *
746650d58SDmitry Lifshitz  * Author: Uri Mashiach <uri.mashiach@compulab.co.il>
846650d58SDmitry Lifshitz  */
946650d58SDmitry Lifshitz 
1046650d58SDmitry Lifshitz #include <asm/emif.h>
1146650d58SDmitry Lifshitz #include <asm/omap_common.h>
1246650d58SDmitry Lifshitz #include <asm/arch/sys_proto.h>
1346650d58SDmitry Lifshitz 
1446650d58SDmitry Lifshitz static const struct dmm_lisa_map_regs cl_som_am57x_lisa_regs = {
1546650d58SDmitry Lifshitz 	.dmm_lisa_map_3 = 0x80740300,
1646650d58SDmitry Lifshitz 	.is_ma_present  = 0x1
1746650d58SDmitry Lifshitz };
1846650d58SDmitry Lifshitz 
emif_get_dmm_regs(const struct dmm_lisa_map_regs ** dmm_lisa_regs)1946650d58SDmitry Lifshitz void emif_get_dmm_regs(const struct dmm_lisa_map_regs **dmm_lisa_regs)
2046650d58SDmitry Lifshitz {
21a4e0a633SUri Mashiach 	/* Disable SDRAM controller EMIF2 for single core SOC */
2246650d58SDmitry Lifshitz 	*dmm_lisa_regs = &cl_som_am57x_lisa_regs;
23a4e0a633SUri Mashiach 	if (omap_revision() == DRA722_ES1_0) {
24a4e0a633SUri Mashiach 		((struct dmm_lisa_map_regs *) *dmm_lisa_regs)->dmm_lisa_map_3 =
25a4e0a633SUri Mashiach 		  0x80640100;
26a4e0a633SUri Mashiach 	}
2746650d58SDmitry Lifshitz }
2846650d58SDmitry Lifshitz 
2946650d58SDmitry Lifshitz static const struct emif_regs cl_som_am57x_emif1_ddr3_532mhz_emif_regs = {
3046650d58SDmitry Lifshitz 	.sdram_config_init	= 0x61852332,
3146650d58SDmitry Lifshitz 	.sdram_config		= 0x61852332,
3246650d58SDmitry Lifshitz 	.sdram_config2		= 0x00000000,
3346650d58SDmitry Lifshitz 	.ref_ctrl		= 0x000040f1,
3446650d58SDmitry Lifshitz 	.ref_ctrl_final		= 0x00001040,
3546650d58SDmitry Lifshitz 	.sdram_tim1		= 0xeeef36f3,
3646650d58SDmitry Lifshitz 	.sdram_tim2		= 0x348f7fda,
3746650d58SDmitry Lifshitz 	.sdram_tim3		= 0x027f88a8,
3846650d58SDmitry Lifshitz 	.read_idle_ctrl		= 0x00050000,
3946650d58SDmitry Lifshitz 	.zq_config		= 0x1007190b,
4046650d58SDmitry Lifshitz 	.temp_alert_config	= 0x00000000,
4146650d58SDmitry Lifshitz 	.emif_ddr_phy_ctlr_1_init = 0x0034400b,
4246650d58SDmitry Lifshitz 	.emif_ddr_phy_ctlr_1	= 0x0e34400b,
4346650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_1 = 0x04040100,
4446650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_2 = 0x00740074,
4546650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_3 = 0x00780078,
4646650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_4 = 0x007c007c,
4746650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_5 = 0x007b007b,
4846650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_rmp_win	= 0x00000000,
4946650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_rmp_ctl	= 0x80000000,
5046650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_ctl	= 0x00000000,
5146650d58SDmitry Lifshitz 	.emif_rd_wr_exec_thresh	= 0x00000305
5246650d58SDmitry Lifshitz };
5346650d58SDmitry Lifshitz 
5446650d58SDmitry Lifshitz /* Ext phy ctrl regs 1-35 */
5546650d58SDmitry Lifshitz static const u32 cl_som_am57x_emif1_ddr3_ext_phy_ctrl_regs[] = {
5646650d58SDmitry Lifshitz 	0x10040100,
5746650d58SDmitry Lifshitz 	0x00740074,
5846650d58SDmitry Lifshitz 	0x00780078,
5946650d58SDmitry Lifshitz 	0x007c007c,
6046650d58SDmitry Lifshitz 	0x007b007b,
6146650d58SDmitry Lifshitz 	0x00800080,
6246650d58SDmitry Lifshitz 	0x00360036,
6346650d58SDmitry Lifshitz 	0x00340034,
6446650d58SDmitry Lifshitz 	0x00360036,
6546650d58SDmitry Lifshitz 	0x00350035,
6646650d58SDmitry Lifshitz 	0x00350035,
6746650d58SDmitry Lifshitz 
6846650d58SDmitry Lifshitz 	0x01ff01ff,
6946650d58SDmitry Lifshitz 	0x01ff01ff,
7046650d58SDmitry Lifshitz 	0x01ff01ff,
7146650d58SDmitry Lifshitz 	0x01ff01ff,
7246650d58SDmitry Lifshitz 	0x01ff01ff,
7346650d58SDmitry Lifshitz 
7446650d58SDmitry Lifshitz 	0x00430043,
7546650d58SDmitry Lifshitz 	0x003e003e,
7646650d58SDmitry Lifshitz 	0x004a004a,
7746650d58SDmitry Lifshitz 	0x00470047,
7846650d58SDmitry Lifshitz 	0x00400040,
7946650d58SDmitry Lifshitz 
8046650d58SDmitry Lifshitz 	0x00000000,
8146650d58SDmitry Lifshitz 	0x00600020,
8246650d58SDmitry Lifshitz 	0x40011080,
8346650d58SDmitry Lifshitz 	0x08102040,
8446650d58SDmitry Lifshitz 
8546650d58SDmitry Lifshitz 	0x00400040,
8646650d58SDmitry Lifshitz 	0x00400040,
8746650d58SDmitry Lifshitz 	0x00400040,
8846650d58SDmitry Lifshitz 	0x00400040,
8946650d58SDmitry Lifshitz 	0x00400040,
9046650d58SDmitry Lifshitz 	0x0,
9146650d58SDmitry Lifshitz 	0x0,
9246650d58SDmitry Lifshitz 	0x0,
9346650d58SDmitry Lifshitz 	0x0,
9446650d58SDmitry Lifshitz 	0x0
9546650d58SDmitry Lifshitz };
9646650d58SDmitry Lifshitz 
9746650d58SDmitry Lifshitz static const struct emif_regs cl_som_am57x_emif2_ddr3_532mhz_emif_regs = {
9846650d58SDmitry Lifshitz 	.sdram_config_init	= 0x61852332,
9946650d58SDmitry Lifshitz 	.sdram_config		= 0x61852332,
10046650d58SDmitry Lifshitz 	.sdram_config2		= 0x00000000,
10146650d58SDmitry Lifshitz 	.ref_ctrl		= 0x000040f1,
10246650d58SDmitry Lifshitz 	.ref_ctrl_final		= 0x00001040,
10346650d58SDmitry Lifshitz 	.sdram_tim1		= 0xeeef36f3,
10446650d58SDmitry Lifshitz 	.sdram_tim2		= 0x348f7fda,
10546650d58SDmitry Lifshitz 	.sdram_tim3		= 0x027f88a8,
10646650d58SDmitry Lifshitz 	.read_idle_ctrl		= 0x00050000,
10746650d58SDmitry Lifshitz 	.zq_config		= 0x1007190b,
10846650d58SDmitry Lifshitz 	.temp_alert_config	= 0x00000000,
10946650d58SDmitry Lifshitz 	.emif_ddr_phy_ctlr_1_init = 0x0034400b,
11046650d58SDmitry Lifshitz 	.emif_ddr_phy_ctlr_1	= 0x0e34400b,
11146650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_1 = 0x04040100,
11246650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_2 = 0x00740074,
11346650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_3 = 0x00780078,
11446650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_4 = 0x007c007c,
11546650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_5 = 0x007b007b,
11646650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_rmp_win	= 0x00000000,
11746650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_rmp_ctl	= 0x80000000,
11846650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_ctl	= 0x00000000,
11946650d58SDmitry Lifshitz 	.emif_rd_wr_exec_thresh	= 0x00000305
12046650d58SDmitry Lifshitz };
12146650d58SDmitry Lifshitz 
12246650d58SDmitry Lifshitz static const u32 cl_som_am57x_emif2_ddr3_ext_phy_ctrl_regs[] = {
12346650d58SDmitry Lifshitz 	0x10040100,
12446650d58SDmitry Lifshitz 	0x00820082,
12546650d58SDmitry Lifshitz 	0x008b008b,
12646650d58SDmitry Lifshitz 	0x00800080,
12746650d58SDmitry Lifshitz 	0x007e007e,
12846650d58SDmitry Lifshitz 	0x00800080,
12946650d58SDmitry Lifshitz 	0x00370037,
13046650d58SDmitry Lifshitz 	0x00390039,
13146650d58SDmitry Lifshitz 	0x00360036,
13246650d58SDmitry Lifshitz 	0x00370037,
13346650d58SDmitry Lifshitz 	0x00350035,
13446650d58SDmitry Lifshitz 	0x01ff01ff,
13546650d58SDmitry Lifshitz 	0x01ff01ff,
13646650d58SDmitry Lifshitz 	0x01ff01ff,
13746650d58SDmitry Lifshitz 	0x01ff01ff,
13846650d58SDmitry Lifshitz 	0x01ff01ff,
13946650d58SDmitry Lifshitz 	0x00540054,
14046650d58SDmitry Lifshitz 	0x00540054,
14146650d58SDmitry Lifshitz 	0x004e004e,
14246650d58SDmitry Lifshitz 	0x004c004c,
14346650d58SDmitry Lifshitz 	0x00400040,
14446650d58SDmitry Lifshitz 
14546650d58SDmitry Lifshitz 	0x00000000,
14646650d58SDmitry Lifshitz 	0x00600020,
14746650d58SDmitry Lifshitz 	0x40011080,
14846650d58SDmitry Lifshitz 	0x08102040,
14946650d58SDmitry Lifshitz 
15046650d58SDmitry Lifshitz 	0x00400040,
15146650d58SDmitry Lifshitz 	0x00400040,
15246650d58SDmitry Lifshitz 	0x00400040,
15346650d58SDmitry Lifshitz 	0x00400040,
15446650d58SDmitry Lifshitz 	0x00400040,
15546650d58SDmitry Lifshitz 	0x0,
15646650d58SDmitry Lifshitz 	0x0,
15746650d58SDmitry Lifshitz 	0x0,
15846650d58SDmitry Lifshitz 	0x0,
15946650d58SDmitry Lifshitz 	0x0
16046650d58SDmitry Lifshitz };
16146650d58SDmitry Lifshitz 
16246650d58SDmitry Lifshitz static struct vcores_data cl_som_am57x_volts = {
16346650d58SDmitry Lifshitz 	.mpu.value[OPP_NOM]	= VDD_MPU_DRA7_NOM,
16446650d58SDmitry Lifshitz 	.mpu.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_MPU_NOM,
16546650d58SDmitry Lifshitz 	.mpu.efuse.reg_bits     = DRA752_EFUSE_REGBITS,
16646650d58SDmitry Lifshitz 	.mpu.addr		= TPS659038_REG_ADDR_SMPS12,
16746650d58SDmitry Lifshitz 	.mpu.pmic		= &tps659038,
16846650d58SDmitry Lifshitz 
16946650d58SDmitry Lifshitz 	.eve.value[OPP_NOM]	= VDD_EVE_DRA7_NOM,
17046650d58SDmitry Lifshitz 	.eve.value[OPP_OD]	= VDD_EVE_DRA7_OD,
17146650d58SDmitry Lifshitz 	.eve.value[OPP_HIGH]	= VDD_EVE_DRA7_HIGH,
17246650d58SDmitry Lifshitz 	.eve.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_DSPEVE_NOM,
17346650d58SDmitry Lifshitz 	.eve.efuse.reg[OPP_OD]	= STD_FUSE_OPP_VMIN_DSPEVE_OD,
17446650d58SDmitry Lifshitz 	.eve.efuse.reg[OPP_HIGH]	= STD_FUSE_OPP_VMIN_DSPEVE_HIGH,
17546650d58SDmitry Lifshitz 	.eve.efuse.reg_bits	= DRA752_EFUSE_REGBITS,
17646650d58SDmitry Lifshitz 	.eve.addr		= TPS659038_REG_ADDR_SMPS45,
17746650d58SDmitry Lifshitz 	.eve.pmic		= &tps659038,
17846650d58SDmitry Lifshitz 
17946650d58SDmitry Lifshitz 	.gpu.value[OPP_NOM]	= VDD_GPU_DRA7_NOM,
18046650d58SDmitry Lifshitz 	.gpu.value[OPP_OD]	= VDD_GPU_DRA7_OD,
18146650d58SDmitry Lifshitz 	.gpu.value[OPP_HIGH]	= VDD_GPU_DRA7_HIGH,
18246650d58SDmitry Lifshitz 	.gpu.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_GPU_NOM,
18346650d58SDmitry Lifshitz 	.gpu.efuse.reg[OPP_OD]	= STD_FUSE_OPP_VMIN_GPU_OD,
18446650d58SDmitry Lifshitz 	.gpu.efuse.reg[OPP_HIGH]	= STD_FUSE_OPP_VMIN_GPU_HIGH,
18546650d58SDmitry Lifshitz 	.gpu.efuse.reg_bits	= DRA752_EFUSE_REGBITS,
18646650d58SDmitry Lifshitz 	.gpu.addr		= TPS659038_REG_ADDR_SMPS6,
18746650d58SDmitry Lifshitz 	.gpu.pmic		= &tps659038,
18846650d58SDmitry Lifshitz 
18946650d58SDmitry Lifshitz 	.core.value[OPP_NOM]	= VDD_CORE_DRA7_NOM,
19046650d58SDmitry Lifshitz 	.core.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_CORE_NOM,
19146650d58SDmitry Lifshitz 	.core.efuse.reg_bits	= DRA752_EFUSE_REGBITS,
19246650d58SDmitry Lifshitz 	.core.addr		= TPS659038_REG_ADDR_SMPS7,
19346650d58SDmitry Lifshitz 	.core.pmic		= &tps659038,
19446650d58SDmitry Lifshitz 
19546650d58SDmitry Lifshitz 	.iva.value[OPP_NOM]	= VDD_IVA_DRA7_NOM,
19646650d58SDmitry Lifshitz 	.iva.value[OPP_OD]	= VDD_IVA_DRA7_OD,
19746650d58SDmitry Lifshitz 	.iva.value[OPP_HIGH]	= VDD_IVA_DRA7_HIGH,
19846650d58SDmitry Lifshitz 	.iva.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_IVA_NOM,
19946650d58SDmitry Lifshitz 	.iva.efuse.reg[OPP_OD]	= STD_FUSE_OPP_VMIN_IVA_OD,
20046650d58SDmitry Lifshitz 	.iva.efuse.reg[OPP_HIGH]	= STD_FUSE_OPP_VMIN_IVA_HIGH,
20146650d58SDmitry Lifshitz 	.iva.efuse.reg_bits	= DRA752_EFUSE_REGBITS,
20246650d58SDmitry Lifshitz 	.iva.addr		= TPS659038_REG_ADDR_SMPS8,
20346650d58SDmitry Lifshitz 	.iva.pmic		= &tps659038,
20446650d58SDmitry Lifshitz };
20546650d58SDmitry Lifshitz 
hw_data_init(void)20646650d58SDmitry Lifshitz void hw_data_init(void)
20746650d58SDmitry Lifshitz {
20846650d58SDmitry Lifshitz 	*prcm = &dra7xx_prcm;
20946650d58SDmitry Lifshitz 	*dplls_data = &dra7xx_dplls;
21046650d58SDmitry Lifshitz 	*omap_vcores = &cl_som_am57x_volts;
21146650d58SDmitry Lifshitz 	*ctrl = &dra7xx_ctrl;
21246650d58SDmitry Lifshitz }
21346650d58SDmitry Lifshitz 
emif_get_reg_dump(u32 emif_nr,const struct emif_regs ** regs)21446650d58SDmitry Lifshitz void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs)
21546650d58SDmitry Lifshitz {
21646650d58SDmitry Lifshitz 	switch (emif_nr) {
21746650d58SDmitry Lifshitz 	case 1:
21846650d58SDmitry Lifshitz 		*regs = &cl_som_am57x_emif1_ddr3_532mhz_emif_regs;
21946650d58SDmitry Lifshitz 		break;
22046650d58SDmitry Lifshitz 	case 2:
22146650d58SDmitry Lifshitz 		*regs = &cl_som_am57x_emif2_ddr3_532mhz_emif_regs;
22246650d58SDmitry Lifshitz 		break;
22346650d58SDmitry Lifshitz 	}
22446650d58SDmitry Lifshitz }
22546650d58SDmitry Lifshitz 
emif_get_ext_phy_ctrl_const_regs(u32 emif_nr,const u32 ** regs,u32 * size)22646650d58SDmitry Lifshitz void emif_get_ext_phy_ctrl_const_regs(u32 emif_nr, const u32 **regs, u32 *size)
22746650d58SDmitry Lifshitz {
22846650d58SDmitry Lifshitz 	switch (emif_nr) {
22946650d58SDmitry Lifshitz 	case 1:
23046650d58SDmitry Lifshitz 		*regs = cl_som_am57x_emif1_ddr3_ext_phy_ctrl_regs;
23146650d58SDmitry Lifshitz 		*size = ARRAY_SIZE(cl_som_am57x_emif1_ddr3_ext_phy_ctrl_regs);
23246650d58SDmitry Lifshitz 		break;
23346650d58SDmitry Lifshitz 	case 2:
23446650d58SDmitry Lifshitz 		*regs = cl_som_am57x_emif2_ddr3_ext_phy_ctrl_regs;
23546650d58SDmitry Lifshitz 		*size = ARRAY_SIZE(cl_som_am57x_emif2_ddr3_ext_phy_ctrl_regs);
23646650d58SDmitry Lifshitz 		break;
23746650d58SDmitry Lifshitz 	}
23846650d58SDmitry Lifshitz }
239