1 /* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
3 * Copyright (C) 2018, STMicroelectronics - All Rights Reserved
6 #ifndef _RAM_STM32MP1_DDR_H
7 #define _RAM_STM32MP1_DDR_H
9 enum stm32mp1_ddr_interact_step {
17 /* DDR CTL and DDR PHY REGISTERS */
18 struct stm32mp1_ddrctl;
19 struct stm32mp1_ddrphy;
24 * @dev: pointer for the device
25 * @info: UCLASS RAM information
26 * @ctl: DDR controleur base address
28 * @phy: DDR PHY base address
29 * @rcc: rcc base address
35 struct stm32mp1_ddrctl *ctl;
36 struct stm32mp1_ddrphy *phy;
40 struct stm32mp1_ddrctrl_reg {
69 struct stm32mp1_ddrctrl_timing {
84 struct stm32mp1_ddrctrl_map {
96 struct stm32mp1_ddrctrl_perf {
116 struct stm32mp1_ddrphy_reg {
130 struct stm32mp1_ddrphy_timing {
143 struct stm32mp1_ddr_info {
145 u32 speed; /* in kHZ */
146 u32 size; /* memory size in byte = col * row * width */
149 struct stm32mp1_ddr_config {
150 struct stm32mp1_ddr_info info;
151 struct stm32mp1_ddrctrl_reg c_reg;
152 struct stm32mp1_ddrctrl_timing c_timing;
153 struct stm32mp1_ddrctrl_map c_map;
154 struct stm32mp1_ddrctrl_perf c_perf;
155 struct stm32mp1_ddrphy_reg p_reg;
156 struct stm32mp1_ddrphy_timing p_timing;
159 int stm32mp1_ddr_clk_enable(struct ddr_info *priv, u32 mem_speed);
160 void stm32mp1_ddrphy_init(struct stm32mp1_ddrphy *phy, u32 pir);
161 void stm32mp1_refresh_disable(struct stm32mp1_ddrctl *ctl);
162 void stm32mp1_refresh_restore(struct stm32mp1_ddrctl *ctl,
166 void stm32mp1_ddr_init(
167 struct ddr_info *priv,
168 const struct stm32mp1_ddr_config *config);
170 int stm32mp1_dump_reg(const struct ddr_info *priv,
173 void stm32mp1_edit_reg(const struct ddr_info *priv,
177 int stm32mp1_dump_param(const struct stm32mp1_ddr_config *config,
180 void stm32mp1_edit_param(const struct stm32mp1_ddr_config *config,
184 bool stm32mp1_ddr_interactive(
186 enum stm32mp1_ddr_interact_step step,
187 const struct stm32mp1_ddr_config *config);