123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /*
- * Copyright 2019-2023 NXP
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #ifndef DRAM_H
- #define DRAM_H
- #include <assert.h>
- #include <arch_helpers.h>
- #include <lib/utils_def.h>
- #include <ddrc.h>
- #include <platform_def.h>
- #define DDRC_LPDDR4 BIT(5)
- #define DDRC_DDR4 BIT(4)
- #define DDRC_DDR3L BIT(0)
- #define DDR_TYPE_MASK U(0x3f)
- #define ACTIVE_RANK_MASK U(0x3)
- #define DDRC_ACTIVE_ONE_RANK U(0x1)
- #define DDRC_ACTIVE_TWO_RANK U(0x2)
- #define MR12 U(12)
- #define MR14 U(14)
- #define MAX_FSP_NUM U(3)
- /* reg & config param */
- struct dram_cfg_param {
- unsigned int reg;
- unsigned int val;
- };
- struct dram_timing_info {
- /* umctl2 config */
- struct dram_cfg_param *ddrc_cfg;
- unsigned int ddrc_cfg_num;
- /* ddrphy config */
- struct dram_cfg_param *ddrphy_cfg;
- unsigned int ddrphy_cfg_num;
- /* ddr fsp train info */
- struct dram_fsp_msg *fsp_msg;
- unsigned int fsp_msg_num;
- /* ddr phy trained CSR */
- struct dram_cfg_param *ddrphy_trained_csr;
- unsigned int ddrphy_trained_csr_num;
- /* ddr phy PIE */
- struct dram_cfg_param *ddrphy_pie;
- unsigned int ddrphy_pie_num;
- /* initialized fsp table */
- unsigned int fsp_table[4];
- };
- struct dram_info {
- int dram_type;
- unsigned int num_rank;
- uint32_t num_fsp;
- int current_fsp;
- int boot_fsp;
- bool bypass_mode;
- struct dram_timing_info *timing_info;
- /* mr, emr, emr2, emr3, mr11, mr12, mr22, mr14 */
- uint32_t mr_table[3][8];
- /* used for workaround for rank to rank issue */
- uint32_t rank_setting[3][3];
- };
- extern struct dram_info dram_info;
- void dram_umctl2_init(struct dram_timing_info *timing);
- void dram_phy_init(struct dram_timing_info *timing);
- /* dram retention */
- #if IMX_DRAM_RETENTION
- void dram_info_init(unsigned long dram_timing_base);
- void dram_enter_retention(void);
- void dram_exit_retention(void);
- #else
- static inline void dram_info_init(unsigned long dram_timing_base) {}
- static inline void dram_enter_retention(void) {}
- static inline void dram_exit_retention(void) {}
- #endif
- void dram_clock_switch(unsigned int target_drate, bool bypass_mode);
- /* dram frequency change */
- void lpddr4_swffc(struct dram_info *info, unsigned int init_fsp, unsigned int fsp_index);
- void ddr4_swffc(struct dram_info *dram_info, unsigned int pstate);
- #endif /* DRAM_H */
|