19 #define SNB_MIN_DCLK_133_MULT 3
20 #define SNB_MAX_DCLK_133_MULT 8
21 #define IVB_MIN_DCLK_133_MULT 3
22 #define IVB_MAX_DCLK_133_MULT 10
23 #define IVB_MIN_DCLK_100_MULT 7
24 #define IVB_MAX_DCLK_100_MULT 12
43 die(
"Unsupported CPU or base frequency.");
104 if (base_freq == 100)
114 if (base_freq == 100)
124 if (base_freq == 100)
134 if (base_freq == 100)
144 if (base_freq == 100)
154 if (base_freq == 100)
167 return is_ivybridge ? 0x0C235924 : 0x0C21410C;
169 return is_ivybridge ? 0x0C446964 : 0x0C42514C;
171 return is_ivybridge ? 0x0C6671E4 : 0x0C6369CC;
173 return is_ivybridge ? 0x0CA8C264 : 0x0CA57A4C;
175 return is_ivybridge ? 0x0CEBDB64 : 0x0CE7C34C;
177 return is_ivybridge ? 0x0D6FF5E4 : 0x0D6BEDCC;
194 return comp_ofst_1.
raw;
214 return comp_ofst_1.
raw;
257 if (!ref_100mhz_support && ctrl->
base_freq == 100) {
264 #define DEFAULT_TCK TCK_800MHZ
297 if (
CONFIG(NATIVE_RAMINIT_IGNORE_MAX_MEM_FUSES))
318 reg32 = (reg32 >> 4) & 0x7;
340 u8 ref_100mhz_support;
344 ref_100mhz_support = (reg32 >> 21) & 0x7;
345 printk(
BIOS_DEBUG,
"100MHz reference clock support: %s\n", ref_100mhz_support ?
"yes"
360 die(
"Couldn't find compatible clock / CAS settings\n");
541 "DRAM frequency is under lowest supported frequency (400 MHz). "
542 "Increasing to 400 MHz as last resort.\n");
571 while (reg1 & (1 << 31)) {
581 if (val2 >= ctrl->
FRQ) {
583 (1000 << 8) / ctrl->
tCK);
627 printram(
"FORCE RCOMP and wait 20us...");
639 fast_boot ?
"fast boot" :
"full initialization");
#define DIV_ROUND_UP(x, y)
static u32 clamp_u32(const u32 min, const u32 val, const u32 max)
#define printk(level,...)
void __noreturn die(const char *fmt,...)
#define mchbar_setbits32(addr, set)
static __always_inline void mchbar_write32(const uintptr_t offset, const uint32_t value)
static __always_inline uint32_t mchbar_read32(const uintptr_t offset)
#define mchbar_clrbits32(addr, clear)
#define printram(x,...)
Convenience macro for enabling printk with CONFIG(DEBUG_RAM_SETUP)
#define NS2MHZ_DIV256
Convenience definitions for TCK values.
static __always_inline u32 pci_read_config32(const struct device *dev, u16 reg)
static __always_inline u8 pci_read_config8(const struct device *dev, u16 reg)
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
#define IS_SANDY_CPU_D2(x)
static void program_timings(struct raminfo *info, u16 base, int channel, int slot, int rank)
void normalize_training(ramctr_timing *ctrl)
void dram_memorymap(ramctr_timing *ctrl, int me_uma_size)
int command_training(ramctr_timing *ctrl)
int aggressive_write_training(ramctr_timing *ctrl)
int aggressive_read_training(ramctr_timing *ctrl)
void dram_dimm_set_mapping(ramctr_timing *ctrl, int training)
void set_read_write_timings(ramctr_timing *ctrl)
void dram_mrscommands(ramctr_timing *ctrl)
void restore_timings(ramctr_timing *ctrl)
void dram_find_common_params(ramctr_timing *ctrl)
void prepare_training(ramctr_timing *ctrl)
void dram_xover(ramctr_timing *ctrl)
int read_mpr_training(ramctr_timing *ctrl)
void dram_dimm_mapping(ramctr_timing *ctrl)
void dram_zones(ramctr_timing *ctrl, int training)
int channel_test(ramctr_timing *ctrl)
void dram_jedecreset(ramctr_timing *ctrl)
void set_wmm_behavior(const u32 cpu)
void dram_timing_regs(ramctr_timing *ctrl)
int write_training(ramctr_timing *ctrl)
#define FOR_ALL_POPULATED_CHANNELS
int try_init_dram_ddr3(ramctr_timing *ctrl, int fast_boot, int s3resume, int me_uma_size)
static u32 get_COMP2(const ramctr_timing *ctrl)
static void dram_freq(ramctr_timing *ctrl)
static u8 get_XP(u32 FRQ, u8 base_freq)
static u32 get_COMP1(ramctr_timing *ctrl, const int channel)
static u32 get_FRQ(const ramctr_timing *ctrl)
#define IVB_MIN_DCLK_133_MULT
static u8 get_CKE(u32 FRQ, u8 base_freq)
static void dram_ioregs(ramctr_timing *ctrl)
#define IVB_MAX_DCLK_100_MULT
#define IVB_MAX_DCLK_133_MULT
static void dram_timing(ramctr_timing *ctrl)
#define IVB_MIN_DCLK_100_MULT
#define SNB_MAX_DCLK_133_MULT
static u8 get_CWL(u32 tCK)
static u8 get_XPDLL(u32 FRQ, u8 base_freq)
static u8 get_MOD(u32 FRQ, u8 base_freq)
static u8 get_WLO(u32 FRQ, u8 base_freq)
static u32 get_REFI(u32 FRQ, u8 base_freq)
static void find_cas_tck(ramctr_timing *ctrl)
static u8 get_AONPD(u32 FRQ, u8 base_freq)
static void normalize_tclk(ramctr_timing *ctrl, bool ref_100mhz_support)
#define SNB_MIN_DCLK_133_MULT
static u8 get_XSOffset(u32 FRQ, u8 base_freq)
static unsigned int get_mem_min_tck(void)
static void receive_enable_calibration(const timings_t *const timings, const dimminfo_t *const dimms)
const u8 frq_xpdll_map[2][8]
const u8 frq_xs_map[2][8]
const u8 frq_aonpd_map[2][8]
const u8 frq_xp_map[2][8]
const u32 frq_refi_map[2][8]
const u8 frq_cke_map[2][8]
const u8 frq_mod_map[2][8]
const u8 frq_wlo_map[2][8]
#define CRCOMPOFST1_ch(ch)
#define GDCRCTLRANKSUSED_ch(ch)
#define GDCRCLKRANKSUSED_ch(ch)