mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-05-08 18:41:22 +00:00
refactor(st-ddr): create generic services
Disabling AXI port, enabling host interface and both enabling/disabling software self-refresh services are already present inside the driver source code. Factorize by gathering them as services inside the generic part, and adapt driver to call these new functions. Add services to manage quasi-dynamic registers. DDRCTRL contains quasi-dynamic registers, which are dynamic only under some conditions defined by the user guide (with 4 groups). In our driver, out of reset state, only groups 3 and 4 are updated. Group 4 needs only sw_done/sw_done_ack sequence, already available. Group 3 sequence include more conditions, that are gathered in specific services. stm32mp_ddr_disable_host_interface() has been added to do this. Add dedicated generic service to toggle rfshctl3.refresh_update_level and wait for completion. Manage AXI ports and HIF when updating QD3 registers. Quasi-dynamic group 3 (QD3) registers are updated when DDR is not completely initialized, i.e. when AXI ports are not enabled and possibly when host interface (HIF) is not enabled too. In that case, a specific mechanism is necessary to restore the same conditions as before accessing QD3 registers. Static functions have been added to get AXI ports and HIF states and are used to determine the needed conditions to set/unset. Signed-off-by: Nicolas Le Bayon <nicolas.le.bayon@st.com> Change-Id: I880f88b1cb6fc76199ad9ea33e9d63a5c469aed4
This commit is contained in:
parent
1483b3c3d2
commit
d596023bff
4 changed files with 209 additions and 8 deletions
|
@ -506,8 +506,7 @@ static void stm32mp1_ddr3_dll_off(struct stm32mp_ddr_priv *priv)
|
|||
#endif
|
||||
|
||||
/* 12. Exit the self-refresh state by setting PWRCTL.selfref_sw = 0. */
|
||||
mmio_clrbits_32((uintptr_t)&priv->ctl->pwrctl,
|
||||
DDRCTRL_PWRCTL_SELFREF_SW);
|
||||
stm32mp_ddr_sw_selfref_exit(priv->ctl);
|
||||
stm32mp1_wait_operating_mode(priv, DDRCTRL_STAT_OPERATING_MODE_NORMAL);
|
||||
|
||||
/*
|
||||
|
@ -522,10 +521,7 @@ static void stm32mp1_ddr3_dll_off(struct stm32mp_ddr_priv *priv)
|
|||
*/
|
||||
|
||||
/* 15. Write DBG1.dis_hif = 0 to re-enable reads and writes. */
|
||||
mmio_clrbits_32((uintptr_t)&priv->ctl->dbg1, DDRCTRL_DBG1_DIS_HIF);
|
||||
VERBOSE("[0x%lx] dbg1 = 0x%x\n",
|
||||
(uintptr_t)&priv->ctl->dbg1,
|
||||
mmio_read_32((uintptr_t)&priv->ctl->dbg1));
|
||||
stm32mp_ddr_enable_host_interface(priv->ctl);
|
||||
}
|
||||
|
||||
static void stm32mp1_refresh_disable(struct stm32mp_ddrctl *ctl)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue