5 #include <soc/meminit.h>
7 #include <fsp/soc_binding.h>
49 cfg->ScramblerSupport = 1;
50 cfg->ChannelHashMask = 0x36;
51 cfg->SliceHashMask = 0x9;
52 cfg->InterleavedMode = 2;
53 cfg->ChannelsSlicesEnable = 0;
54 cfg->MinRefRate2xEnable = 0;
55 cfg->DualRankSupportEnable = 1;
57 cfg->MemorySizeLimit = 0;
61 cfg->HighMemoryMaxValue = 0;
64 cfg->DisableFastBoot = 0;
67 cfg->DIMM0SPDAddress = 0;
68 cfg->DIMM1SPDAddress = 0;
71 cfg->Ch0_RankEnable = 0x0;
72 cfg->Ch1_RankEnable = 0x0;
73 cfg->Ch2_RankEnable = 0x0;
74 cfg->Ch3_RankEnable = 0x0;
80 cfg->Ch0_DeviceWidth = 0x1;
81 cfg->Ch1_DeviceWidth = 0x1;
82 cfg->Ch2_DeviceWidth = 0x1;
83 cfg->Ch3_DeviceWidth = 0x1;
89 cfg->Ch0_Option = 0x3;
90 cfg->Ch1_Option = 0x3;
91 cfg->Ch2_Option = 0x3;
92 cfg->Ch3_Option = 0x3;
98 cfg->Ch0_OdtConfig = odt_config;
99 cfg->Ch1_OdtConfig = odt_config;
100 cfg->Ch2_OdtConfig = odt_config;
101 cfg->Ch3_OdtConfig = odt_config;
138 if (
CONFIG(SOC_INTEL_GEMINILAKE))
185 int rank_density,
int dual_rank,
198 cfg->Ch0_DramDensity = rank_density;
199 cfg->Ch1_DramDensity = rank_density;
201 rank_mask = dual_rank ? 0x3 : 0x1;
202 cfg->Ch0_RankEnable = rank_mask;
203 cfg->Ch1_RankEnable = rank_mask;
230 int rank_density,
int dual_rank,
243 cfg->Ch2_DramDensity = rank_density;
244 cfg->Ch3_DramDensity = rank_density;
246 rank_mask = dual_rank ? 0x3 : 0x1;
247 cfg->Ch2_RankEnable = rank_mask;
248 cfg->Ch3_RankEnable = rank_mask;
275 int rank_density_gb,
int dual_rank,
278 int fsp_rank_density;
280 switch (rank_density_gb) {
282 fsp_rank_density = 0;
285 fsp_rank_density = 1;
288 fsp_rank_density = 2;
291 fsp_rank_density = 3;
294 fsp_rank_density = 4;
297 printk(
BIOS_ERR,
"Invalid LPDDR4 density: %d Gb\n", rank_density_gb);
301 switch (logical_chan) {
332 if (
sku->ch0_rank_density) {
334 sku->ch0_rank_density);
336 sku->ch0_rank_density,
341 if (
sku->ch1_rank_density) {
343 sku->ch1_rank_density);
345 sku->ch1_rank_density,
350 cfg->PeriodicRetrainingDisable =
sku->disable_periodic_retraining;
static const struct fsp_speed_profiles apl_profile
static void accumulate_channel_memory(int density, int dual_rank)
static int fsp_memory_profile(int speed)
static const struct fsp_speed_profiles glk_profile
static size_t memory_size_mib
static void set_lpddr4_defaults(FSP_M_CONFIG *cfg)
size_t memory_in_system_in_mib(void)
static void enable_logical_chan1(FSP_M_CONFIG *cfg, int rank_density, int dual_rank, const struct lpddr4_swizzle_cfg *scfg)
uint8_t fsp_memory_soc_version(void)
static void enable_logical_chan0(FSP_M_CONFIG *cfg, int rank_density, int dual_rank, const struct lpddr4_swizzle_cfg *scfg)
static const struct speed_mapping apl_mappings[]
static const struct fsp_speed_profiles * get_fsp_profile(void)
static const struct speed_mapping glk_mappings[]
void meminit_lpddr4_enable_channel(FSP_M_CONFIG *cfg, int logical_chan, int rank_density_gb, int dual_rank, const struct lpddr4_swizzle_cfg *scfg)
void meminit_lpddr4(FSP_M_CONFIG *cfg, int speed)
size_t iohole_in_mib(void)
void meminit_lpddr4_by_sku(FSP_M_CONFIG *cfg, const struct lpddr4_cfg *lpcfg, size_t sku_id)
static int validate_speed(int speed)
void * memcpy(void *dest, const void *src, size_t n)
#define printk(level,...)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
#define BIOS_WARNING
BIOS_WARNING - Bad configuration.
const struct speed_mapping * mappings
const struct lpddr4_sku * skus
const struct lpddr4_swizzle_cfg * swizzle_config
uint8_t dqs[LP4_NUM_BYTE_LANES][DQ_BITS_PER_DQS]
struct lpddr4_chan_swizzle_cfg phys[LP4_NUM_PHYS_CHANNELS]