coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
raminit.h File Reference
#include <stdint.h>
Include dependency graph for raminit.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  dll_setting
 
struct  rt_dqs_setting
 
struct  timings
 
struct  dimminfo
 
struct  rcven_timings
 
struct  sysinfo
 

Macros

#define NOP_CMD   0x2
 
#define PRECHARGE_CMD   0x4
 
#define MRS_CMD   0x6
 
#define EMRS_CMD   0x8
 
#define EMRS1_CMD   (EMRS_CMD | 0x10)
 
#define EMRS2_CMD   (EMRS_CMD | 0x20)
 
#define EMRS3_CMD   (EMRS_CMD | 0x30)
 
#define ZQCAL_CMD   0xa
 
#define CBR_CMD   0xc
 
#define NORMALOP_CMD   0xe
 
#define TOTAL_CHANNELS   2
 
#define TOTAL_DIMMS   4
 
#define TOTAL_BYTELANES   8
 
#define DIMMS_PER_CHANNEL   (TOTAL_DIMMS / TOTAL_CHANNELS)
 
#define RAW_CARD_UNPOPULATED   0xff
 
#define RAW_CARD_POPULATED   0
 
#define DIMM_IS_POPULATED(dimms, idx)   (dimms[idx].card_type != RAW_CARD_UNPOPULATED)
 
#define IF_DIMM_POPULATED(dimms, idx)   if (dimms[idx].card_type != RAW_CARD_UNPOPULATED)
 
#define ONLY_DIMMA_IS_POPULATED(dimms, ch)
 
#define ONLY_DIMMB_IS_POPULATED(dimms, ch)
 
#define BOTH_DIMMS_ARE_POPULATED(dimms, ch)
 
#define FOR_EACH_DIMM(idx)    for (idx = 0; idx < TOTAL_DIMMS; ++idx)
 
#define FOR_EACH_POPULATED_DIMM(dimms, idx)    FOR_EACH_DIMM(idx) IF_DIMM_POPULATED(dimms, idx)
 
#define FOR_EACH_DIMM_IN_CHANNEL(ch, idx)    for (idx = (ch) << 1; idx < ((ch) << 1) + DIMMS_PER_CHANNEL; ++idx)
 
#define FOR_EACH_POPULATED_DIMM_IN_CHANNEL(dimms, ch, idx)    FOR_EACH_DIMM_IN_CHANNEL(ch, idx) IF_DIMM_POPULATED(dimms, idx)
 
#define CHANNEL_IS_POPULATED(dimms, idx)
 
#define CHANNEL_IS_CARDF(dimms, idx)
 
#define IF_CHANNEL_POPULATED(dimms, idx)
 
#define FOR_EACH_CHANNEL(idx)    for (idx = 0; idx < TOTAL_CHANNELS; ++idx)
 
#define FOR_EACH_POPULATED_CHANNEL(dimms, idx)    FOR_EACH_CHANNEL(idx) IF_CHANNEL_POPULATED(dimms, idx)
 
#define RANKS_PER_CHANNEL   4
 
#define RANK_IS_POPULATED(dimms, ch, r)
 
#define IF_RANK_POPULATED(dimms, ch, r)
 
#define FOR_EACH_RANK_IN_CHANNEL(r)    for (r = 0; r < RANKS_PER_CHANNEL; ++r)
 
#define FOR_EACH_POPULATED_RANK_IN_CHANNEL(dimms, ch, r)    FOR_EACH_RANK_IN_CHANNEL(r) IF_RANK_POPULATED(dimms, ch, r)
 
#define FOR_EACH_RANK(ch, r)    FOR_EACH_CHANNEL(ch) FOR_EACH_RANK_IN_CHANNEL(r)
 
#define FOR_EACH_POPULATED_RANK(dimms, ch, r)    FOR_EACH_RANK(ch, r) IF_RANK_POPULATED(dimms, ch, r)
 
#define FOR_EACH_BYTELANE(l)    for (l = 0; l < TOTAL_BYTELANES; l++)
 
#define FOR_EACH_POPULATED_CHANNEL_AND_BYTELANE(dimms, ch, l)    FOR_EACH_POPULATED_CHANNEL (dimms, ch) FOR_EACH_BYTELANE(l)
 
#define DDR3_MAX_CAS   18
 

Enumerations

enum  fsb_clock { FSB_CLOCK_800MHz = 0 , FSB_CLOCK_1066MHz = 1 , FSB_CLOCK_1333MHz = 2 }
 
enum  mem_clock {
  MEM_CLOCK_400MHz = 0 , MEM_CLOCK_533MHz = 1 , MEM_CLOCK_667MHz = 2 , MEM_CLOCK_800MHz = 3 ,
  MEM_CLOCK_1066MHz = 4 , MEM_CLOCK_1333MHz = 5
}
 
enum  ddr { DDR2 = 2 , DDR3 = 3 , DDR2 = 2 , DDR3 = 3 }
 
enum  ddrxspd { DDR2SPD = 0x8 , DDR3SPD = 0xb }
 
enum  chip_width {
  CHIP_WIDTH_x4 = 0 , CHIP_WIDTH_x8 = 1 , CHIP_WIDTH_x16 = 2 , CHIP_WIDTH_x32 = 3 ,
  CHIP_WIDTH_x4 = 0 , CHIP_WIDTH_x8 = 1 , CHIP_WIDTH_x16 = 2 , CHIP_WIDTH_x32 = 3
}
 
enum  chip_cap {
  CHIP_CAP_256M = 0 , CHIP_CAP_512M = 1 , CHIP_CAP_1G = 2 , CHIP_CAP_2G = 3 ,
  CHIP_CAP_4G = 4 , CHIP_CAP_8G = 5 , CHIP_CAP_16G = 6 , CHIP_CAP_256M = 0 ,
  CHIP_CAP_512M = 1 , CHIP_CAP_1G = 2 , CHIP_CAP_2G = 3 , CHIP_CAP_4G = 4 ,
  CHIP_CAP_8G = 5 , CHIP_CAP_16G = 6
}
 
enum  n_banks { N_BANKS_4 = 0 , N_BANKS_8 = 1 }
 
enum  ddr2_signals {
  CLKSET0 = 0 , CTRL0 , CLKSET1 , CMD ,
  CTRL1 , CTRL2 , CTRL3
}
 

Functions

void sdram_initialize (int boot_path, const u8 *spd_map)
 
void do_raminit (struct sysinfo *, int fast_boot)
 
void rcven (struct sysinfo *s)
 
u32 fsb_to_mhz (u32 speed)
 
u32 ddr_to_mhz (u32 speed)
 
u32 test_address (int channel, int rank)
 
void dqsset (u8 ch, u8 lane, const struct dll_setting *setting)
 All finer DQ and DQS DLL settings are set to the same value for each rank in a channel, while coarse is common. More...
 
void dqset (u8 ch, u8 lane, const struct dll_setting *setting)
 
void rt_set_dqs (u8 channel, u8 lane, u8 rank, struct rt_dqs_setting *dqs_setting)
 
int do_write_training (struct sysinfo *s)
 
int do_read_training (struct sysinfo *s)
 
void search_write_leveling (struct sysinfo *s)
 
void send_jedec_cmd (const struct sysinfo *s, u8 r, u8 ch, u8 cmd, u32 val)
 

Variables

const struct dll_setting default_ddr2_667_ctrl [7]
 
const struct dll_setting default_ddr2_800_ctrl [7]
 
const struct dll_setting default_ddr3_800_ctrl [2][7]
 
const struct dll_setting default_ddr3_1067_ctrl [2][7]
 
const struct dll_setting default_ddr3_1333_ctrl [2][7]
 
const struct dll_setting default_ddr2_667_dqs [TOTAL_BYTELANES]
 
const struct dll_setting default_ddr2_800_dqs [TOTAL_BYTELANES]
 
const struct dll_setting default_ddr3_800_dqs [2][TOTAL_BYTELANES]
 
const struct dll_setting default_ddr3_1067_dqs [2][TOTAL_BYTELANES]
 
const struct dll_setting default_ddr3_1333_dqs [2][TOTAL_BYTELANES]
 
const struct dll_setting default_ddr2_667_dq [TOTAL_BYTELANES]
 
const struct dll_setting default_ddr2_800_dq [TOTAL_BYTELANES]
 
const struct dll_setting default_ddr3_800_dq [2][TOTAL_BYTELANES]
 
const struct dll_setting default_ddr3_1067_dq [2][TOTAL_BYTELANES]
 
const struct dll_setting default_ddr3_1333_dq [2][TOTAL_BYTELANES]
 
const u8 ddr3_emrs1_rtt_nom_config [16][4]
 
const u8 post_jedec_tab [3][4][2]
 
const u32 ddr3_c2_tab [2][3][6][2]
 
const u8 ddr3_c2_x264 [3][6]
 
const u16 ddr3_c2_x23c [3][6]
 

Macro Definition Documentation

◆ BOTH_DIMMS_ARE_POPULATED

#define BOTH_DIMMS_ARE_POPULATED (   dimms,
  ch 
)
Value:
( \
(DIMM_IS_POPULATED(dimms, (ch == 0) ? 0 : 2) && \
(DIMM_IS_POPULATED(dimms, (ch == 0) ? 1 : 3))))
static struct dramc_channel const ch[2]
#define DIMM_IS_POPULATED(dimms, idx)
Definition: raminit.h:26

Definition at line 34 of file raminit.h.

◆ CBR_CMD

#define CBR_CMD   0xc

Definition at line 16 of file raminit.h.

◆ CHANNEL_IS_CARDF

#define CHANNEL_IS_CARDF (   dimms,
  idx 
)
Value:
((dimms[idx<<1].card_type == 0xf) \
|| (dimms[(idx<<1) + 1].card_type == 0xf))

Definition at line 48 of file raminit.h.

◆ CHANNEL_IS_POPULATED

#define CHANNEL_IS_POPULATED (   dimms,
  idx 
)
Value:
((dimms[idx<<1].card_type != RAW_CARD_UNPOPULATED) \
|| (dimms[(idx<<1) + 1].card_type != RAW_CARD_UNPOPULATED))
#define RAW_CARD_UNPOPULATED
Definition: raminit.h:23

Definition at line 45 of file raminit.h.

◆ DDR3_MAX_CAS

#define DDR3_MAX_CAS   18

Definition at line 81 of file raminit.h.

◆ DIMM_IS_POPULATED

#define DIMM_IS_POPULATED (   dimms,
  idx 
)    (dimms[idx].card_type != RAW_CARD_UNPOPULATED)

Definition at line 26 of file raminit.h.

◆ DIMMS_PER_CHANNEL

#define DIMMS_PER_CHANNEL   (TOTAL_DIMMS / TOTAL_CHANNELS)

Definition at line 22 of file raminit.h.

◆ EMRS1_CMD

#define EMRS1_CMD   (EMRS_CMD | 0x10)

Definition at line 12 of file raminit.h.

◆ EMRS2_CMD

#define EMRS2_CMD   (EMRS_CMD | 0x20)

Definition at line 13 of file raminit.h.

◆ EMRS3_CMD

#define EMRS3_CMD   (EMRS_CMD | 0x30)

Definition at line 14 of file raminit.h.

◆ EMRS_CMD

#define EMRS_CMD   0x8

Definition at line 11 of file raminit.h.

◆ FOR_EACH_BYTELANE

#define FOR_EACH_BYTELANE (   l)     for (l = 0; l < TOTAL_BYTELANES; l++)

Definition at line 76 of file raminit.h.

◆ FOR_EACH_CHANNEL

#define FOR_EACH_CHANNEL (   idx)     for (idx = 0; idx < TOTAL_CHANNELS; ++idx)

Definition at line 54 of file raminit.h.

◆ FOR_EACH_DIMM

#define FOR_EACH_DIMM (   idx)     for (idx = 0; idx < TOTAL_DIMMS; ++idx)

Definition at line 37 of file raminit.h.

◆ FOR_EACH_DIMM_IN_CHANNEL

#define FOR_EACH_DIMM_IN_CHANNEL (   ch,
  idx 
)     for (idx = (ch) << 1; idx < ((ch) << 1) + DIMMS_PER_CHANNEL; ++idx)

Definition at line 41 of file raminit.h.

◆ FOR_EACH_POPULATED_CHANNEL

#define FOR_EACH_POPULATED_CHANNEL (   dimms,
  idx 
)     FOR_EACH_CHANNEL(idx) IF_CHANNEL_POPULATED(dimms, idx)

Definition at line 56 of file raminit.h.

◆ FOR_EACH_POPULATED_CHANNEL_AND_BYTELANE

#define FOR_EACH_POPULATED_CHANNEL_AND_BYTELANE (   dimms,
  ch,
 
)     FOR_EACH_POPULATED_CHANNEL (dimms, ch) FOR_EACH_BYTELANE(l)

Definition at line 78 of file raminit.h.

◆ FOR_EACH_POPULATED_DIMM

#define FOR_EACH_POPULATED_DIMM (   dimms,
  idx 
)     FOR_EACH_DIMM(idx) IF_DIMM_POPULATED(dimms, idx)

Definition at line 39 of file raminit.h.

◆ FOR_EACH_POPULATED_DIMM_IN_CHANNEL

#define FOR_EACH_POPULATED_DIMM_IN_CHANNEL (   dimms,
  ch,
  idx 
)     FOR_EACH_DIMM_IN_CHANNEL(ch, idx) IF_DIMM_POPULATED(dimms, idx)

Definition at line 43 of file raminit.h.

◆ FOR_EACH_POPULATED_RANK

#define FOR_EACH_POPULATED_RANK (   dimms,
  ch,
 
)     FOR_EACH_RANK(ch, r) IF_RANK_POPULATED(dimms, ch, r)

Definition at line 74 of file raminit.h.

◆ FOR_EACH_POPULATED_RANK_IN_CHANNEL

#define FOR_EACH_POPULATED_RANK_IN_CHANNEL (   dimms,
  ch,
 
)     FOR_EACH_RANK_IN_CHANNEL(r) IF_RANK_POPULATED(dimms, ch, r)

Definition at line 70 of file raminit.h.

◆ FOR_EACH_RANK

#define FOR_EACH_RANK (   ch,
 
)     FOR_EACH_CHANNEL(ch) FOR_EACH_RANK_IN_CHANNEL(r)

Definition at line 72 of file raminit.h.

◆ FOR_EACH_RANK_IN_CHANNEL

#define FOR_EACH_RANK_IN_CHANNEL (   r)     for (r = 0; r < RANKS_PER_CHANNEL; ++r)

Definition at line 68 of file raminit.h.

◆ IF_CHANNEL_POPULATED

#define IF_CHANNEL_POPULATED (   dimms,
  idx 
)
Value:
if ((dimms[idx<<1].card_type != RAW_CARD_UNPOPULATED) \
|| (dimms[(idx<<1) + 1].card_type != RAW_CARD_UNPOPULATED))

Definition at line 51 of file raminit.h.

◆ IF_DIMM_POPULATED

#define IF_DIMM_POPULATED (   dimms,
  idx 
)    if (dimms[idx].card_type != RAW_CARD_UNPOPULATED)

Definition at line 27 of file raminit.h.

◆ IF_RANK_POPULATED

#define IF_RANK_POPULATED (   dimms,
  ch,
 
)
Value:
if (((dimms[ch<<1].card_type != RAW_CARD_UNPOPULATED) \
&& ((r) < dimms[ch<<1].ranks)) \
|| ((dimms[(ch<<1) + 1].card_type != RAW_CARD_UNPOPULATED) \
&& ((r) >= 2) && ((r) < (dimms[(ch<<1) + 1].ranks + 2))))

Definition at line 63 of file raminit.h.

◆ MRS_CMD

#define MRS_CMD   0x6

Definition at line 10 of file raminit.h.

◆ NOP_CMD

#define NOP_CMD   0x2

Definition at line 8 of file raminit.h.

◆ NORMALOP_CMD

#define NORMALOP_CMD   0xe

Definition at line 17 of file raminit.h.

◆ ONLY_DIMMA_IS_POPULATED

#define ONLY_DIMMA_IS_POPULATED (   dimms,
  ch 
)
Value:
( \
(DIMM_IS_POPULATED(dimms, (ch == 0) ? 0 : 2) && \
!DIMM_IS_POPULATED(dimms, (ch == 0) ? 1 : 3)))

Definition at line 28 of file raminit.h.

◆ ONLY_DIMMB_IS_POPULATED

#define ONLY_DIMMB_IS_POPULATED (   dimms,
  ch 
)
Value:
( \
(DIMM_IS_POPULATED(dimms, (ch == 0) ? 1 : 3) && \
!DIMM_IS_POPULATED(dimms, (ch == 0) ? 0 : 2)))

Definition at line 31 of file raminit.h.

◆ PRECHARGE_CMD

#define PRECHARGE_CMD   0x4

Definition at line 9 of file raminit.h.

◆ RANK_IS_POPULATED

#define RANK_IS_POPULATED (   dimms,
  ch,
 
)
Value:
(((dimms[ch<<1].card_type != RAW_CARD_UNPOPULATED) && ((r) < dimms[ch<<1].ranks)) || \
((dimms[(ch<<1) + 1].card_type != RAW_CARD_UNPOPULATED) && ((r) >= 2) && ((r) < (dimms[(ch<<1) + 1].ranks + 2))))

Definition at line 60 of file raminit.h.

◆ RANKS_PER_CHANNEL

#define RANKS_PER_CHANNEL   4

Definition at line 59 of file raminit.h.

◆ RAW_CARD_POPULATED

#define RAW_CARD_POPULATED   0

Definition at line 24 of file raminit.h.

◆ RAW_CARD_UNPOPULATED

#define RAW_CARD_UNPOPULATED   0xff

Definition at line 23 of file raminit.h.

◆ TOTAL_BYTELANES

#define TOTAL_BYTELANES   8

Definition at line 21 of file raminit.h.

◆ TOTAL_CHANNELS

#define TOTAL_CHANNELS   2

Definition at line 19 of file raminit.h.

◆ TOTAL_DIMMS

#define TOTAL_DIMMS   4

Definition at line 20 of file raminit.h.

◆ ZQCAL_CMD

#define ZQCAL_CMD   0xa

Definition at line 15 of file raminit.h.

Enumeration Type Documentation

◆ chip_cap

enum chip_cap
Enumerator
CHIP_CAP_256M 
CHIP_CAP_512M 
CHIP_CAP_1G 
CHIP_CAP_2G 
CHIP_CAP_4G 
CHIP_CAP_8G 
CHIP_CAP_16G 
CHIP_CAP_256M 
CHIP_CAP_512M 
CHIP_CAP_1G 
CHIP_CAP_2G 
CHIP_CAP_4G 
CHIP_CAP_8G 
CHIP_CAP_16G 

Definition at line 115 of file raminit.h.

◆ chip_width

enum chip_width
Enumerator
CHIP_WIDTH_x4 
CHIP_WIDTH_x8 
CHIP_WIDTH_x16 
CHIP_WIDTH_x32 
CHIP_WIDTH_x4 
CHIP_WIDTH_x8 
CHIP_WIDTH_x16 
CHIP_WIDTH_x32 

Definition at line 108 of file raminit.h.

◆ ddr

enum ddr
Enumerator
DDR2 
DDR3 
DDR2 
DDR3 

Definition at line 98 of file raminit.h.

◆ ddr2_signals

Enumerator
CLKSET0 
CTRL0 
CLKSET1 
CMD 
CTRL1 
CTRL2 
CTRL3 

Definition at line 202 of file raminit.h.

◆ ddrxspd

enum ddrxspd
Enumerator
DDR2SPD 
DDR3SPD 

Definition at line 103 of file raminit.h.

◆ fsb_clock

enum fsb_clock
Enumerator
FSB_CLOCK_800MHz 
FSB_CLOCK_1066MHz 
FSB_CLOCK_1333MHz 

Definition at line 83 of file raminit.h.

◆ mem_clock

enum mem_clock
Enumerator
MEM_CLOCK_400MHz 
MEM_CLOCK_533MHz 
MEM_CLOCK_667MHz 
MEM_CLOCK_800MHz 
MEM_CLOCK_1066MHz 
MEM_CLOCK_1333MHz 

Definition at line 89 of file raminit.h.

◆ n_banks

enum n_banks
Enumerator
N_BANKS_4 
N_BANKS_8 

Definition at line 139 of file raminit.h.

Function Documentation

◆ ddr_to_mhz()

u32 ddr_to_mhz ( u32  speed)

Definition at line 26 of file raminit_ddr23.c.

References ARRAY_SIZE, die(), and mhz.

Referenced by print_selected_timings(), and program_timings().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ do_raminit()

◆ do_read_training()

◆ do_write_training()

int do_write_training ( struct sysinfo s)

Definition at line 253 of file dq_dqs.c.

References BIOS_CRIT, BIOS_DEBUG, BIOS_ERR, BIOS_WARNING, CB_ERR, CB_SUCCESS, CONSISTENCY, dqset(), FAILING, find_dq_limit(), FOR_EACH_BYTELANE, FOR_EACH_POPULATED_CHANNEL, increment_dq_dqs(), memcpy(), memset(), print_dll_setting(), printk, RAM_DEBUG, s, SUCCEEDING, and TOTAL_BYTELANES.

Referenced by do_raminit().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dqset()

void dqset ( u8  ch,
u8  lane,
const struct dll_setting setting 
)

Definition at line 351 of file raminit_ddr23.c.

References ch, dll_setting::clk_delay, dll_setting::coarse, dll_setting::db_en, dll_setting::db_sel, mchbar_clrsetbits32(), dll_setting::pi, dll_setting::tap, and write_txdll_tap_pi().

Referenced by do_write_training(), find_dq_limit(), search_write_leveling(), and set_all_dq_dqs_dll_settings().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dqsset()

void dqsset ( u8  ch,
u8  lane,
const struct dll_setting setting 
)

All finer DQ and DQS DLL settings are set to the same value for each rank in a channel, while coarse is common.

Definition at line 332 of file raminit_ddr23.c.

References ch, dll_setting::clk_delay, dll_setting::coarse, dll_setting::db_en, dll_setting::db_sel, mchbar_clrsetbits32(), dll_setting::pi, dll_setting::tap, and write_txdll_tap_pi().

Referenced by set_all_dq_dqs_dll_settings().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fsb_to_mhz()

u32 fsb_to_mhz ( u32  speed)

Definition at line 21 of file raminit_ddr23.c.

Referenced by print_selected_timings(), and program_timings().

Here is the caller graph for this function:

◆ rcven()

◆ rt_set_dqs()

void rt_set_dqs ( u8  channel,
u8  lane,
u8  rank,
struct rt_dqs_setting dqs_setting 
)

Definition at line 369 of file raminit_ddr23.c.

References mchbar_read16(), mchbar_write16(), rt_dqs_setting::pi, printk, RAM_SPEW, and rt_dqs_setting::tap.

Referenced by do_read_training(), rt_find_dqs_limit(), and set_all_dq_dqs_dll_settings().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sdram_initialize()

void sdram_initialize ( int  boot_path,
const u8 spd_map 
)
Parameters
boot_path0 = normal, 1 = reset, 2 = resume from s3
spd_addressespointer to a list of SPD addresses
boot_path0 = normal, 1 = reset, 2 = resume from s3

Definition at line 2682 of file raminit.c.

References BIOS_DEBUG, sys_info::boot_path, sysinfo::boot_path, BOOT_PATH_NORMAL, BOOT_PATH_RESET, BOOT_PATH_RESUME, BOOT_PATH_WARM_RESET, C0CKECTRL, C0DMC, C0IOBUFACTCTL, C0REFRCTRL2, C0RSTCTL, C1DMC, CB_SUCCESS, cbmem_recovery(), checkreset_ddr2(), COMPCTRL1, CONFIG, CPCTL, decode_spd_select_timings(), do_raminit(), enable_hpet(), find_dimm_config(), find_fsb_speed(), full_reset(), GCFC, GEN_PMCON_2, HIT4, HOST_BRIDGE, IGD_DEV, sysinfo::max_fsb, mchbar_clrsetbits8(), mchbar_read8(), mchbar_setbits16, mchbar_setbits32, mchbar_setbits8, mchinfo_ddr2(), memcpy(), memset(), mrc_cache_current_mmap_leak(), mrc_cache_stash_data(), MRC_CACHE_VERSION, MRC_TRAINING_DATA, pci_and_config8(), PCI_DEV, pci_or_config8(), pci_read_config8(), pci_write_config16(), pci_write_config8(), print_selected_timings(), printk, PRINTK_DEBUG, s, sysinfo::s3resume, sdram_checkreset(), sdram_clk_crossing(), sdram_clkmode(), sdram_detect_errors(), sdram_detect_ram_speed(), sdram_detect_smallest_params(), sdram_disable_fast_dispatch(), sdram_dlltiming(), sdram_dradrb(), sdram_enable_memory_clocks(), sdram_enable_rcomp(), sdram_enable_system_memory_io(), sdram_enhancedmode(), sdram_get_dram_configuration(), sdram_init_complete(), sdram_initialize_system_memory_io(), sdram_jedec_enable(), sdram_jedecinit(), sdram_misc(), sdram_mmap(), sdram_mmap_regs(), sdram_new_trd(), sdram_odt(), sdram_on_die_termination(), sdram_periodic_rcomp(), sdram_post_jedec_initialization(), sdram_power_management(), sdram_powersettings(), sdram_pre_jedec_initialization(), sdram_program_clock_crossing(), sdram_program_graphics_frequency(), sdram_program_memory_frequency(), sdram_program_pll_settings(), sdram_program_receive_enable(), sdram_program_row_boundaries(), sdram_programddr(), sdram_programdqdqs(), sdram_rcomp(), sdram_rcompupdate(), sdram_rcven(), sdram_read_spds(), sdram_set_bank_architecture(), sdram_set_channel_mode(), sdram_set_row_attributes(), sdram_set_timing_and_control(), sdram_setup_processor_side(), sdram_thermal_management(), sdram_timings(), sdram_zqcl(), sys_info::spd_addresses, sysinfo::spd_map, system_reset(), timestamp_add_now(), TS_INITRAM_END, TS_INITRAM_START, and verify_spds().

Here is the call graph for this function:

◆ search_write_leveling()

◆ send_jedec_cmd()

void send_jedec_cmd ( const struct sysinfo s,
u8  r,
u8  ch,
u8  cmd,
u32  val 
)

Definition at line 1264 of file raminit_ddr23.c.

References addr, ch, DDR3, mchbar_clrsetbits8(), mirror_shift_bit(), NORMALOP_CMD, read32p(), s, test_address(), udelay(), and val.

Referenced by jedec_ddr2(), jedec_ddr3(), search_write_leveling(), and set_rank_write_level().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ test_address()

u32 test_address ( int  channel,
int  rank 
)

Definition at line 1245 of file raminit_ddr23.c.

References ASSERT, and MiB.

Referenced by do_raminit(), do_read_training(), increment_to_dqs_edge(), rcven(), send_jedec_cmd(), test_dq_aligned(), and test_dqs_aligned().

Here is the caller graph for this function:

Variable Documentation

◆ ddr3_c2_tab

const u32 ddr3_c2_tab[2][3][6][2]
extern

Definition at line 311 of file raminit_tables.c.

Referenced by power_settings().

◆ ddr3_c2_x23c

const u16 ddr3_c2_x23c[3][6]
extern

Definition at line 376 of file raminit_tables.c.

Referenced by power_settings().

◆ ddr3_c2_x264

const u8 ddr3_c2_x264[3][6]
extern

Definition at line 355 of file raminit_tables.c.

Referenced by power_settings().

◆ ddr3_emrs1_rtt_nom_config

const u8 ddr3_emrs1_rtt_nom_config[16][4]
extern

Definition at line 274 of file raminit_tables.c.

Referenced by jedec_ddr3(), and set_rank_write_level().

◆ default_ddr2_667_ctrl

const struct dll_setting default_ddr2_667_ctrl[7]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by program_dll().

◆ default_ddr2_667_dq

const struct dll_setting default_ddr2_667_dq[TOTAL_BYTELANES]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by select_default_dq_dqs_settings().

◆ default_ddr2_667_dqs

const struct dll_setting default_ddr2_667_dqs[TOTAL_BYTELANES]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by select_default_dq_dqs_settings().

◆ default_ddr2_800_ctrl

const struct dll_setting default_ddr2_800_ctrl[7]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by program_dll().

◆ default_ddr2_800_dq

const struct dll_setting default_ddr2_800_dq[TOTAL_BYTELANES]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by select_default_dq_dqs_settings().

◆ default_ddr2_800_dqs

const struct dll_setting default_ddr2_800_dqs[TOTAL_BYTELANES]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by select_default_dq_dqs_settings().

◆ default_ddr3_1067_ctrl

const struct dll_setting default_ddr3_1067_ctrl[2][7]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by program_dll().

◆ default_ddr3_1067_dq

const struct dll_setting default_ddr3_1067_dq[2][TOTAL_BYTELANES]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by select_default_dq_dqs_settings().

◆ default_ddr3_1067_dqs

const struct dll_setting default_ddr3_1067_dqs[2][TOTAL_BYTELANES]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by select_default_dq_dqs_settings().

◆ default_ddr3_1333_ctrl

const struct dll_setting default_ddr3_1333_ctrl[2][7]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by program_dll().

◆ default_ddr3_1333_dq

const struct dll_setting default_ddr3_1333_dq[2][TOTAL_BYTELANES]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by select_default_dq_dqs_settings().

◆ default_ddr3_1333_dqs

const struct dll_setting default_ddr3_1333_dqs[2][TOTAL_BYTELANES]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by select_default_dq_dqs_settings().

◆ default_ddr3_800_ctrl

const struct dll_setting default_ddr3_800_ctrl[2][7]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by program_dll().

◆ default_ddr3_800_dq

const struct dll_setting default_ddr3_800_dq[2][TOTAL_BYTELANES]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by select_default_dq_dqs_settings().

◆ default_ddr3_800_dqs

const struct dll_setting default_ddr3_800_dqs[2][TOTAL_BYTELANES]
extern

Definition at line 1 of file raminit_tables.c.

Referenced by select_default_dq_dqs_settings().

◆ post_jedec_tab

const u8 post_jedec_tab[3][4][2]
extern

Definition at line 293 of file raminit_tables.c.

Referenced by do_raminit().