1*79629b1aSNicolas Le Bayon /* 2*79629b1aSNicolas Le Bayon * Copyright (C) 2021-2024, STMicroelectronics - All Rights Reserved 3*79629b1aSNicolas Le Bayon * 4*79629b1aSNicolas Le Bayon * SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause 5*79629b1aSNicolas Le Bayon */ 6*79629b1aSNicolas Le Bayon 7*79629b1aSNicolas Le Bayon #ifndef STM32MP2_DDR_H 8*79629b1aSNicolas Le Bayon #define STM32MP2_DDR_H 9*79629b1aSNicolas Le Bayon 10*79629b1aSNicolas Le Bayon #include <stdbool.h> 11*79629b1aSNicolas Le Bayon 12*79629b1aSNicolas Le Bayon #include <ddrphy_phyinit_struct.h> 13*79629b1aSNicolas Le Bayon 14*79629b1aSNicolas Le Bayon #include <drivers/st/stm32mp_ddr.h> 15*79629b1aSNicolas Le Bayon 16*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_reg { 17*79629b1aSNicolas Le Bayon uint32_t mstr; 18*79629b1aSNicolas Le Bayon uint32_t mrctrl0; 19*79629b1aSNicolas Le Bayon uint32_t mrctrl1; 20*79629b1aSNicolas Le Bayon uint32_t mrctrl2; 21*79629b1aSNicolas Le Bayon uint32_t derateen; 22*79629b1aSNicolas Le Bayon uint32_t derateint; 23*79629b1aSNicolas Le Bayon uint32_t deratectl; 24*79629b1aSNicolas Le Bayon uint32_t pwrctl; 25*79629b1aSNicolas Le Bayon uint32_t pwrtmg; 26*79629b1aSNicolas Le Bayon uint32_t hwlpctl; 27*79629b1aSNicolas Le Bayon uint32_t rfshctl0; 28*79629b1aSNicolas Le Bayon uint32_t rfshctl1; 29*79629b1aSNicolas Le Bayon uint32_t rfshctl3; 30*79629b1aSNicolas Le Bayon uint32_t crcparctl0; 31*79629b1aSNicolas Le Bayon uint32_t crcparctl1; 32*79629b1aSNicolas Le Bayon uint32_t init0; 33*79629b1aSNicolas Le Bayon uint32_t init1; 34*79629b1aSNicolas Le Bayon uint32_t init2; 35*79629b1aSNicolas Le Bayon uint32_t init3; 36*79629b1aSNicolas Le Bayon uint32_t init4; 37*79629b1aSNicolas Le Bayon uint32_t init5; 38*79629b1aSNicolas Le Bayon uint32_t init6; 39*79629b1aSNicolas Le Bayon uint32_t init7; 40*79629b1aSNicolas Le Bayon uint32_t dimmctl; 41*79629b1aSNicolas Le Bayon uint32_t rankctl; 42*79629b1aSNicolas Le Bayon uint32_t rankctl1; 43*79629b1aSNicolas Le Bayon uint32_t zqctl0; 44*79629b1aSNicolas Le Bayon uint32_t zqctl1; 45*79629b1aSNicolas Le Bayon uint32_t zqctl2; 46*79629b1aSNicolas Le Bayon uint32_t dfitmg0; 47*79629b1aSNicolas Le Bayon uint32_t dfitmg1; 48*79629b1aSNicolas Le Bayon uint32_t dfilpcfg0; 49*79629b1aSNicolas Le Bayon uint32_t dfilpcfg1; 50*79629b1aSNicolas Le Bayon uint32_t dfiupd0; 51*79629b1aSNicolas Le Bayon uint32_t dfiupd1; 52*79629b1aSNicolas Le Bayon uint32_t dfiupd2; 53*79629b1aSNicolas Le Bayon uint32_t dfimisc; 54*79629b1aSNicolas Le Bayon uint32_t dfitmg2; 55*79629b1aSNicolas Le Bayon uint32_t dfitmg3; 56*79629b1aSNicolas Le Bayon uint32_t dbictl; 57*79629b1aSNicolas Le Bayon uint32_t dfiphymstr; 58*79629b1aSNicolas Le Bayon uint32_t dbg0; 59*79629b1aSNicolas Le Bayon uint32_t dbg1; 60*79629b1aSNicolas Le Bayon uint32_t dbgcmd; 61*79629b1aSNicolas Le Bayon uint32_t swctl; 62*79629b1aSNicolas Le Bayon uint32_t swctlstatic; 63*79629b1aSNicolas Le Bayon uint32_t poisoncfg; 64*79629b1aSNicolas Le Bayon uint32_t pccfg; 65*79629b1aSNicolas Le Bayon }; 66*79629b1aSNicolas Le Bayon 67*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_timing { 68*79629b1aSNicolas Le Bayon uint32_t rfshtmg; 69*79629b1aSNicolas Le Bayon uint32_t rfshtmg1; 70*79629b1aSNicolas Le Bayon uint32_t dramtmg0; 71*79629b1aSNicolas Le Bayon uint32_t dramtmg1; 72*79629b1aSNicolas Le Bayon uint32_t dramtmg2; 73*79629b1aSNicolas Le Bayon uint32_t dramtmg3; 74*79629b1aSNicolas Le Bayon uint32_t dramtmg4; 75*79629b1aSNicolas Le Bayon uint32_t dramtmg5; 76*79629b1aSNicolas Le Bayon uint32_t dramtmg6; 77*79629b1aSNicolas Le Bayon uint32_t dramtmg7; 78*79629b1aSNicolas Le Bayon uint32_t dramtmg8; 79*79629b1aSNicolas Le Bayon uint32_t dramtmg9; 80*79629b1aSNicolas Le Bayon uint32_t dramtmg10; 81*79629b1aSNicolas Le Bayon uint32_t dramtmg11; 82*79629b1aSNicolas Le Bayon uint32_t dramtmg12; 83*79629b1aSNicolas Le Bayon uint32_t dramtmg13; 84*79629b1aSNicolas Le Bayon uint32_t dramtmg14; 85*79629b1aSNicolas Le Bayon uint32_t dramtmg15; 86*79629b1aSNicolas Le Bayon uint32_t odtcfg; 87*79629b1aSNicolas Le Bayon uint32_t odtmap; 88*79629b1aSNicolas Le Bayon }; 89*79629b1aSNicolas Le Bayon 90*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_map { 91*79629b1aSNicolas Le Bayon uint32_t addrmap0; 92*79629b1aSNicolas Le Bayon uint32_t addrmap1; 93*79629b1aSNicolas Le Bayon uint32_t addrmap2; 94*79629b1aSNicolas Le Bayon uint32_t addrmap3; 95*79629b1aSNicolas Le Bayon uint32_t addrmap4; 96*79629b1aSNicolas Le Bayon uint32_t addrmap5; 97*79629b1aSNicolas Le Bayon uint32_t addrmap6; 98*79629b1aSNicolas Le Bayon uint32_t addrmap7; 99*79629b1aSNicolas Le Bayon uint32_t addrmap8; 100*79629b1aSNicolas Le Bayon uint32_t addrmap9; 101*79629b1aSNicolas Le Bayon uint32_t addrmap10; 102*79629b1aSNicolas Le Bayon uint32_t addrmap11; 103*79629b1aSNicolas Le Bayon }; 104*79629b1aSNicolas Le Bayon 105*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_perf { 106*79629b1aSNicolas Le Bayon uint32_t sched; 107*79629b1aSNicolas Le Bayon uint32_t sched1; 108*79629b1aSNicolas Le Bayon uint32_t perfhpr1; 109*79629b1aSNicolas Le Bayon uint32_t perflpr1; 110*79629b1aSNicolas Le Bayon uint32_t perfwr1; 111*79629b1aSNicolas Le Bayon uint32_t sched3; 112*79629b1aSNicolas Le Bayon uint32_t sched4; 113*79629b1aSNicolas Le Bayon uint32_t pcfgr_0; 114*79629b1aSNicolas Le Bayon uint32_t pcfgw_0; 115*79629b1aSNicolas Le Bayon uint32_t pctrl_0; 116*79629b1aSNicolas Le Bayon uint32_t pcfgqos0_0; 117*79629b1aSNicolas Le Bayon uint32_t pcfgqos1_0; 118*79629b1aSNicolas Le Bayon uint32_t pcfgwqos0_0; 119*79629b1aSNicolas Le Bayon uint32_t pcfgwqos1_0; 120*79629b1aSNicolas Le Bayon #if STM32MP_DDR_DUAL_AXI_PORT 121*79629b1aSNicolas Le Bayon uint32_t pcfgr_1; 122*79629b1aSNicolas Le Bayon uint32_t pcfgw_1; 123*79629b1aSNicolas Le Bayon uint32_t pctrl_1; 124*79629b1aSNicolas Le Bayon uint32_t pcfgqos0_1; 125*79629b1aSNicolas Le Bayon uint32_t pcfgqos1_1; 126*79629b1aSNicolas Le Bayon uint32_t pcfgwqos0_1; 127*79629b1aSNicolas Le Bayon uint32_t pcfgwqos1_1; 128*79629b1aSNicolas Le Bayon #endif /* STM32MP_DDR_DUAL_AXI_PORT */ 129*79629b1aSNicolas Le Bayon }; 130*79629b1aSNicolas Le Bayon 131*79629b1aSNicolas Le Bayon struct stm32mp_ddr_config { 132*79629b1aSNicolas Le Bayon struct stm32mp_ddr_info info; 133*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_reg c_reg; 134*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_timing c_timing; 135*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_map c_map; 136*79629b1aSNicolas Le Bayon struct stm32mp2_ddrctrl_perf c_perf; 137*79629b1aSNicolas Le Bayon bool self_refresh; 138*79629b1aSNicolas Le Bayon uint32_t zdata; 139*79629b1aSNicolas Le Bayon struct user_input_basic uib; 140*79629b1aSNicolas Le Bayon struct user_input_advanced uia; 141*79629b1aSNicolas Le Bayon struct user_input_mode_register uim; 142*79629b1aSNicolas Le Bayon struct user_input_swizzle uis; 143*79629b1aSNicolas Le Bayon }; 144*79629b1aSNicolas Le Bayon 145*79629b1aSNicolas Le Bayon void stm32mp2_ddr_init(struct stm32mp_ddr_priv *priv, struct stm32mp_ddr_config *config); 146*79629b1aSNicolas Le Bayon 147*79629b1aSNicolas Le Bayon #endif /* STM32MP2_DDR_H */ 148