1*46650d58SDmitry Lifshitz /* 2*46650d58SDmitry Lifshitz * SPL data and initialization for CompuLab CL-SOM-AM57x board 3*46650d58SDmitry Lifshitz * 4*46650d58SDmitry Lifshitz * (C) Copyright 2016 CompuLab, Ltd. http://compulab.co.il/ 5*46650d58SDmitry Lifshitz * 6*46650d58SDmitry Lifshitz * Author: Uri Mashiach <uri.mashiach@compulab.co.il> 7*46650d58SDmitry Lifshitz * 8*46650d58SDmitry Lifshitz * SPDX-License-Identifier: GPL-2.0+ 9*46650d58SDmitry Lifshitz */ 10*46650d58SDmitry Lifshitz 11*46650d58SDmitry Lifshitz #include <asm/emif.h> 12*46650d58SDmitry Lifshitz #include <asm/omap_common.h> 13*46650d58SDmitry Lifshitz #include <asm/arch/sys_proto.h> 14*46650d58SDmitry Lifshitz 15*46650d58SDmitry Lifshitz static const struct dmm_lisa_map_regs cl_som_am57x_lisa_regs = { 16*46650d58SDmitry Lifshitz .dmm_lisa_map_3 = 0x80740300, 17*46650d58SDmitry Lifshitz .is_ma_present = 0x1 18*46650d58SDmitry Lifshitz }; 19*46650d58SDmitry Lifshitz 20*46650d58SDmitry Lifshitz void emif_get_dmm_regs(const struct dmm_lisa_map_regs **dmm_lisa_regs) 21*46650d58SDmitry Lifshitz { 22*46650d58SDmitry Lifshitz *dmm_lisa_regs = &cl_som_am57x_lisa_regs; 23*46650d58SDmitry Lifshitz } 24*46650d58SDmitry Lifshitz 25*46650d58SDmitry Lifshitz static const struct emif_regs cl_som_am57x_emif1_ddr3_532mhz_emif_regs = { 26*46650d58SDmitry Lifshitz .sdram_config_init = 0x61852332, 27*46650d58SDmitry Lifshitz .sdram_config = 0x61852332, 28*46650d58SDmitry Lifshitz .sdram_config2 = 0x00000000, 29*46650d58SDmitry Lifshitz .ref_ctrl = 0x000040f1, 30*46650d58SDmitry Lifshitz .ref_ctrl_final = 0x00001040, 31*46650d58SDmitry Lifshitz .sdram_tim1 = 0xeeef36f3, 32*46650d58SDmitry Lifshitz .sdram_tim2 = 0x348f7fda, 33*46650d58SDmitry Lifshitz .sdram_tim3 = 0x027f88a8, 34*46650d58SDmitry Lifshitz .read_idle_ctrl = 0x00050000, 35*46650d58SDmitry Lifshitz .zq_config = 0x1007190b, 36*46650d58SDmitry Lifshitz .temp_alert_config = 0x00000000, 37*46650d58SDmitry Lifshitz .emif_ddr_phy_ctlr_1_init = 0x0034400b, 38*46650d58SDmitry Lifshitz .emif_ddr_phy_ctlr_1 = 0x0e34400b, 39*46650d58SDmitry Lifshitz .emif_ddr_ext_phy_ctrl_1 = 0x04040100, 40*46650d58SDmitry Lifshitz .emif_ddr_ext_phy_ctrl_2 = 0x00740074, 41*46650d58SDmitry Lifshitz .emif_ddr_ext_phy_ctrl_3 = 0x00780078, 42*46650d58SDmitry Lifshitz .emif_ddr_ext_phy_ctrl_4 = 0x007c007c, 43*46650d58SDmitry Lifshitz .emif_ddr_ext_phy_ctrl_5 = 0x007b007b, 44*46650d58SDmitry Lifshitz .emif_rd_wr_lvl_rmp_win = 0x00000000, 45*46650d58SDmitry Lifshitz .emif_rd_wr_lvl_rmp_ctl = 0x80000000, 46*46650d58SDmitry Lifshitz .emif_rd_wr_lvl_ctl = 0x00000000, 47*46650d58SDmitry Lifshitz .emif_rd_wr_exec_thresh = 0x00000305 48*46650d58SDmitry Lifshitz }; 49*46650d58SDmitry Lifshitz 50*46650d58SDmitry Lifshitz /* Ext phy ctrl regs 1-35 */ 51*46650d58SDmitry Lifshitz static const u32 cl_som_am57x_emif1_ddr3_ext_phy_ctrl_regs[] = { 52*46650d58SDmitry Lifshitz 0x10040100, 53*46650d58SDmitry Lifshitz 0x00740074, 54*46650d58SDmitry Lifshitz 0x00780078, 55*46650d58SDmitry Lifshitz 0x007c007c, 56*46650d58SDmitry Lifshitz 0x007b007b, 57*46650d58SDmitry Lifshitz 0x00800080, 58*46650d58SDmitry Lifshitz 0x00360036, 59*46650d58SDmitry Lifshitz 0x00340034, 60*46650d58SDmitry Lifshitz 0x00360036, 61*46650d58SDmitry Lifshitz 0x00350035, 62*46650d58SDmitry Lifshitz 0x00350035, 63*46650d58SDmitry Lifshitz 64*46650d58SDmitry Lifshitz 0x01ff01ff, 65*46650d58SDmitry Lifshitz 0x01ff01ff, 66*46650d58SDmitry Lifshitz 0x01ff01ff, 67*46650d58SDmitry Lifshitz 0x01ff01ff, 68*46650d58SDmitry Lifshitz 0x01ff01ff, 69*46650d58SDmitry Lifshitz 70*46650d58SDmitry Lifshitz 0x00430043, 71*46650d58SDmitry Lifshitz 0x003e003e, 72*46650d58SDmitry Lifshitz 0x004a004a, 73*46650d58SDmitry Lifshitz 0x00470047, 74*46650d58SDmitry Lifshitz 0x00400040, 75*46650d58SDmitry Lifshitz 76*46650d58SDmitry Lifshitz 0x00000000, 77*46650d58SDmitry Lifshitz 0x00600020, 78*46650d58SDmitry Lifshitz 0x40011080, 79*46650d58SDmitry Lifshitz 0x08102040, 80*46650d58SDmitry Lifshitz 81*46650d58SDmitry Lifshitz 0x00400040, 82*46650d58SDmitry Lifshitz 0x00400040, 83*46650d58SDmitry Lifshitz 0x00400040, 84*46650d58SDmitry Lifshitz 0x00400040, 85*46650d58SDmitry Lifshitz 0x00400040, 86*46650d58SDmitry Lifshitz 0x0, 87*46650d58SDmitry Lifshitz 0x0, 88*46650d58SDmitry Lifshitz 0x0, 89*46650d58SDmitry Lifshitz 0x0, 90*46650d58SDmitry Lifshitz 0x0 91*46650d58SDmitry Lifshitz }; 92*46650d58SDmitry Lifshitz 93*46650d58SDmitry Lifshitz static const struct emif_regs cl_som_am57x_emif2_ddr3_532mhz_emif_regs = { 94*46650d58SDmitry Lifshitz .sdram_config_init = 0x61852332, 95*46650d58SDmitry Lifshitz .sdram_config = 0x61852332, 96*46650d58SDmitry Lifshitz .sdram_config2 = 0x00000000, 97*46650d58SDmitry Lifshitz .ref_ctrl = 0x000040f1, 98*46650d58SDmitry Lifshitz .ref_ctrl_final = 0x00001040, 99*46650d58SDmitry Lifshitz .sdram_tim1 = 0xeeef36f3, 100*46650d58SDmitry Lifshitz .sdram_tim2 = 0x348f7fda, 101*46650d58SDmitry Lifshitz .sdram_tim3 = 0x027f88a8, 102*46650d58SDmitry Lifshitz .read_idle_ctrl = 0x00050000, 103*46650d58SDmitry Lifshitz .zq_config = 0x1007190b, 104*46650d58SDmitry Lifshitz .temp_alert_config = 0x00000000, 105*46650d58SDmitry Lifshitz .emif_ddr_phy_ctlr_1_init = 0x0034400b, 106*46650d58SDmitry Lifshitz .emif_ddr_phy_ctlr_1 = 0x0e34400b, 107*46650d58SDmitry Lifshitz .emif_ddr_ext_phy_ctrl_1 = 0x04040100, 108*46650d58SDmitry Lifshitz .emif_ddr_ext_phy_ctrl_2 = 0x00740074, 109*46650d58SDmitry Lifshitz .emif_ddr_ext_phy_ctrl_3 = 0x00780078, 110*46650d58SDmitry Lifshitz .emif_ddr_ext_phy_ctrl_4 = 0x007c007c, 111*46650d58SDmitry Lifshitz .emif_ddr_ext_phy_ctrl_5 = 0x007b007b, 112*46650d58SDmitry Lifshitz .emif_rd_wr_lvl_rmp_win = 0x00000000, 113*46650d58SDmitry Lifshitz .emif_rd_wr_lvl_rmp_ctl = 0x80000000, 114*46650d58SDmitry Lifshitz .emif_rd_wr_lvl_ctl = 0x00000000, 115*46650d58SDmitry Lifshitz .emif_rd_wr_exec_thresh = 0x00000305 116*46650d58SDmitry Lifshitz }; 117*46650d58SDmitry Lifshitz 118*46650d58SDmitry Lifshitz static const u32 cl_som_am57x_emif2_ddr3_ext_phy_ctrl_regs[] = { 119*46650d58SDmitry Lifshitz 0x10040100, 120*46650d58SDmitry Lifshitz 0x00820082, 121*46650d58SDmitry Lifshitz 0x008b008b, 122*46650d58SDmitry Lifshitz 0x00800080, 123*46650d58SDmitry Lifshitz 0x007e007e, 124*46650d58SDmitry Lifshitz 0x00800080, 125*46650d58SDmitry Lifshitz 0x00370037, 126*46650d58SDmitry Lifshitz 0x00390039, 127*46650d58SDmitry Lifshitz 0x00360036, 128*46650d58SDmitry Lifshitz 0x00370037, 129*46650d58SDmitry Lifshitz 0x00350035, 130*46650d58SDmitry Lifshitz 0x01ff01ff, 131*46650d58SDmitry Lifshitz 0x01ff01ff, 132*46650d58SDmitry Lifshitz 0x01ff01ff, 133*46650d58SDmitry Lifshitz 0x01ff01ff, 134*46650d58SDmitry Lifshitz 0x01ff01ff, 135*46650d58SDmitry Lifshitz 0x00540054, 136*46650d58SDmitry Lifshitz 0x00540054, 137*46650d58SDmitry Lifshitz 0x004e004e, 138*46650d58SDmitry Lifshitz 0x004c004c, 139*46650d58SDmitry Lifshitz 0x00400040, 140*46650d58SDmitry Lifshitz 141*46650d58SDmitry Lifshitz 0x00000000, 142*46650d58SDmitry Lifshitz 0x00600020, 143*46650d58SDmitry Lifshitz 0x40011080, 144*46650d58SDmitry Lifshitz 0x08102040, 145*46650d58SDmitry Lifshitz 146*46650d58SDmitry Lifshitz 0x00400040, 147*46650d58SDmitry Lifshitz 0x00400040, 148*46650d58SDmitry Lifshitz 0x00400040, 149*46650d58SDmitry Lifshitz 0x00400040, 150*46650d58SDmitry Lifshitz 0x00400040, 151*46650d58SDmitry Lifshitz 0x0, 152*46650d58SDmitry Lifshitz 0x0, 153*46650d58SDmitry Lifshitz 0x0, 154*46650d58SDmitry Lifshitz 0x0, 155*46650d58SDmitry Lifshitz 0x0 156*46650d58SDmitry Lifshitz }; 157*46650d58SDmitry Lifshitz 158*46650d58SDmitry Lifshitz static struct vcores_data cl_som_am57x_volts = { 159*46650d58SDmitry Lifshitz .mpu.value[OPP_NOM] = VDD_MPU_DRA7_NOM, 160*46650d58SDmitry Lifshitz .mpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_MPU_NOM, 161*46650d58SDmitry Lifshitz .mpu.efuse.reg_bits = DRA752_EFUSE_REGBITS, 162*46650d58SDmitry Lifshitz .mpu.addr = TPS659038_REG_ADDR_SMPS12, 163*46650d58SDmitry Lifshitz .mpu.pmic = &tps659038, 164*46650d58SDmitry Lifshitz 165*46650d58SDmitry Lifshitz .eve.value[OPP_NOM] = VDD_EVE_DRA7_NOM, 166*46650d58SDmitry Lifshitz .eve.value[OPP_OD] = VDD_EVE_DRA7_OD, 167*46650d58SDmitry Lifshitz .eve.value[OPP_HIGH] = VDD_EVE_DRA7_HIGH, 168*46650d58SDmitry Lifshitz .eve.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_DSPEVE_NOM, 169*46650d58SDmitry Lifshitz .eve.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_DSPEVE_OD, 170*46650d58SDmitry Lifshitz .eve.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_DSPEVE_HIGH, 171*46650d58SDmitry Lifshitz .eve.efuse.reg_bits = DRA752_EFUSE_REGBITS, 172*46650d58SDmitry Lifshitz .eve.addr = TPS659038_REG_ADDR_SMPS45, 173*46650d58SDmitry Lifshitz .eve.pmic = &tps659038, 174*46650d58SDmitry Lifshitz 175*46650d58SDmitry Lifshitz .gpu.value[OPP_NOM] = VDD_GPU_DRA7_NOM, 176*46650d58SDmitry Lifshitz .gpu.value[OPP_OD] = VDD_GPU_DRA7_OD, 177*46650d58SDmitry Lifshitz .gpu.value[OPP_HIGH] = VDD_GPU_DRA7_HIGH, 178*46650d58SDmitry Lifshitz .gpu.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_GPU_NOM, 179*46650d58SDmitry Lifshitz .gpu.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_GPU_OD, 180*46650d58SDmitry Lifshitz .gpu.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_GPU_HIGH, 181*46650d58SDmitry Lifshitz .gpu.efuse.reg_bits = DRA752_EFUSE_REGBITS, 182*46650d58SDmitry Lifshitz .gpu.addr = TPS659038_REG_ADDR_SMPS6, 183*46650d58SDmitry Lifshitz .gpu.pmic = &tps659038, 184*46650d58SDmitry Lifshitz 185*46650d58SDmitry Lifshitz .core.value[OPP_NOM] = VDD_CORE_DRA7_NOM, 186*46650d58SDmitry Lifshitz .core.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_CORE_NOM, 187*46650d58SDmitry Lifshitz .core.efuse.reg_bits = DRA752_EFUSE_REGBITS, 188*46650d58SDmitry Lifshitz .core.addr = TPS659038_REG_ADDR_SMPS7, 189*46650d58SDmitry Lifshitz .core.pmic = &tps659038, 190*46650d58SDmitry Lifshitz 191*46650d58SDmitry Lifshitz .iva.value[OPP_NOM] = VDD_IVA_DRA7_NOM, 192*46650d58SDmitry Lifshitz .iva.value[OPP_OD] = VDD_IVA_DRA7_OD, 193*46650d58SDmitry Lifshitz .iva.value[OPP_HIGH] = VDD_IVA_DRA7_HIGH, 194*46650d58SDmitry Lifshitz .iva.efuse.reg[OPP_NOM] = STD_FUSE_OPP_VMIN_IVA_NOM, 195*46650d58SDmitry Lifshitz .iva.efuse.reg[OPP_OD] = STD_FUSE_OPP_VMIN_IVA_OD, 196*46650d58SDmitry Lifshitz .iva.efuse.reg[OPP_HIGH] = STD_FUSE_OPP_VMIN_IVA_HIGH, 197*46650d58SDmitry Lifshitz .iva.efuse.reg_bits = DRA752_EFUSE_REGBITS, 198*46650d58SDmitry Lifshitz .iva.addr = TPS659038_REG_ADDR_SMPS8, 199*46650d58SDmitry Lifshitz .iva.pmic = &tps659038, 200*46650d58SDmitry Lifshitz }; 201*46650d58SDmitry Lifshitz 202*46650d58SDmitry Lifshitz void hw_data_init(void) 203*46650d58SDmitry Lifshitz { 204*46650d58SDmitry Lifshitz *prcm = &dra7xx_prcm; 205*46650d58SDmitry Lifshitz *dplls_data = &dra7xx_dplls; 206*46650d58SDmitry Lifshitz *omap_vcores = &cl_som_am57x_volts; 207*46650d58SDmitry Lifshitz *ctrl = &dra7xx_ctrl; 208*46650d58SDmitry Lifshitz } 209*46650d58SDmitry Lifshitz 210*46650d58SDmitry Lifshitz void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs) 211*46650d58SDmitry Lifshitz { 212*46650d58SDmitry Lifshitz switch (emif_nr) { 213*46650d58SDmitry Lifshitz case 1: 214*46650d58SDmitry Lifshitz *regs = &cl_som_am57x_emif1_ddr3_532mhz_emif_regs; 215*46650d58SDmitry Lifshitz break; 216*46650d58SDmitry Lifshitz case 2: 217*46650d58SDmitry Lifshitz *regs = &cl_som_am57x_emif2_ddr3_532mhz_emif_regs; 218*46650d58SDmitry Lifshitz break; 219*46650d58SDmitry Lifshitz } 220*46650d58SDmitry Lifshitz } 221*46650d58SDmitry Lifshitz 222*46650d58SDmitry Lifshitz void emif_get_ext_phy_ctrl_const_regs(u32 emif_nr, const u32 **regs, u32 *size) 223*46650d58SDmitry Lifshitz { 224*46650d58SDmitry Lifshitz switch (emif_nr) { 225*46650d58SDmitry Lifshitz case 1: 226*46650d58SDmitry Lifshitz *regs = cl_som_am57x_emif1_ddr3_ext_phy_ctrl_regs; 227*46650d58SDmitry Lifshitz *size = ARRAY_SIZE(cl_som_am57x_emif1_ddr3_ext_phy_ctrl_regs); 228*46650d58SDmitry Lifshitz break; 229*46650d58SDmitry Lifshitz case 2: 230*46650d58SDmitry Lifshitz *regs = cl_som_am57x_emif2_ddr3_ext_phy_ctrl_regs; 231*46650d58SDmitry Lifshitz *size = ARRAY_SIZE(cl_som_am57x_emif2_ddr3_ext_phy_ctrl_regs); 232*46650d58SDmitry Lifshitz break; 233*46650d58SDmitry Lifshitz } 234*46650d58SDmitry Lifshitz } 235