3 #ifndef __X4X_RAMINIT_H__
4 #define __X4X_RAMINIT_H__
9 #define PRECHARGE_CMD 0x4
12 #define EMRS1_CMD (EMRS_CMD | 0x10)
13 #define EMRS2_CMD (EMRS_CMD | 0x20)
14 #define EMRS3_CMD (EMRS_CMD | 0x30)
17 #define NORMALOP_CMD 0xe
19 #define TOTAL_CHANNELS 2
21 #define TOTAL_BYTELANES 8
22 #define DIMMS_PER_CHANNEL (TOTAL_DIMMS / TOTAL_CHANNELS)
23 #define RAW_CARD_UNPOPULATED 0xff
24 #define RAW_CARD_POPULATED 0
26 #define DIMM_IS_POPULATED(dimms, idx) (dimms[idx].card_type != RAW_CARD_UNPOPULATED)
27 #define IF_DIMM_POPULATED(dimms, idx) if (dimms[idx].card_type != RAW_CARD_UNPOPULATED)
28 #define ONLY_DIMMA_IS_POPULATED(dimms, ch) ( \
29 (DIMM_IS_POPULATED(dimms, (ch == 0) ? 0 : 2) && \
30 !DIMM_IS_POPULATED(dimms, (ch == 0) ? 1 : 3)))
31 #define ONLY_DIMMB_IS_POPULATED(dimms, ch) ( \
32 (DIMM_IS_POPULATED(dimms, (ch == 0) ? 1 : 3) && \
33 !DIMM_IS_POPULATED(dimms, (ch == 0) ? 0 : 2)))
34 #define BOTH_DIMMS_ARE_POPULATED(dimms, ch) ( \
35 (DIMM_IS_POPULATED(dimms, (ch == 0) ? 0 : 2) && \
36 (DIMM_IS_POPULATED(dimms, (ch == 0) ? 1 : 3))))
37 #define FOR_EACH_DIMM(idx) \
38 for (idx = 0; idx < TOTAL_DIMMS; ++idx)
39 #define FOR_EACH_POPULATED_DIMM(dimms, idx) \
40 FOR_EACH_DIMM(idx) IF_DIMM_POPULATED(dimms, idx)
41 #define FOR_EACH_DIMM_IN_CHANNEL(ch, idx) \
42 for (idx = (ch) << 1; idx < ((ch) << 1) + DIMMS_PER_CHANNEL; ++idx)
43 #define FOR_EACH_POPULATED_DIMM_IN_CHANNEL(dimms, ch, idx) \
44 FOR_EACH_DIMM_IN_CHANNEL(ch, idx) IF_DIMM_POPULATED(dimms, idx)
45 #define CHANNEL_IS_POPULATED(dimms, idx) \
46 ((dimms[idx<<1].card_type != RAW_CARD_UNPOPULATED) \
47 || (dimms[(idx<<1) + 1].card_type != RAW_CARD_UNPOPULATED))
48 #define CHANNEL_IS_CARDF(dimms, idx) \
49 ((dimms[idx<<1].card_type == 0xf) \
50 || (dimms[(idx<<1) + 1].card_type == 0xf))
51 #define IF_CHANNEL_POPULATED(dimms, idx) \
52 if ((dimms[idx<<1].card_type != RAW_CARD_UNPOPULATED) \
53 || (dimms[(idx<<1) + 1].card_type != RAW_CARD_UNPOPULATED))
54 #define FOR_EACH_CHANNEL(idx) \
55 for (idx = 0; idx < TOTAL_CHANNELS; ++idx)
56 #define FOR_EACH_POPULATED_CHANNEL(dimms, idx) \
57 FOR_EACH_CHANNEL(idx) IF_CHANNEL_POPULATED(dimms, idx)
59 #define RANKS_PER_CHANNEL 4
60 #define RANK_IS_POPULATED(dimms, ch, r) \
61 (((dimms[ch<<1].card_type != RAW_CARD_UNPOPULATED) && ((r) < dimms[ch<<1].ranks)) || \
62 ((dimms[(ch<<1) + 1].card_type != RAW_CARD_UNPOPULATED) && ((r) >= 2) && ((r) < (dimms[(ch<<1) + 1].ranks + 2))))
63 #define IF_RANK_POPULATED(dimms, ch, r) \
64 if (((dimms[ch<<1].card_type != RAW_CARD_UNPOPULATED) \
65 && ((r) < dimms[ch<<1].ranks)) \
66 || ((dimms[(ch<<1) + 1].card_type != RAW_CARD_UNPOPULATED) \
67 && ((r) >= 2) && ((r) < (dimms[(ch<<1) + 1].ranks + 2))))
68 #define FOR_EACH_RANK_IN_CHANNEL(r) \
69 for (r = 0; r < RANKS_PER_CHANNEL; ++r)
70 #define FOR_EACH_POPULATED_RANK_IN_CHANNEL(dimms, ch, r) \
71 FOR_EACH_RANK_IN_CHANNEL(r) IF_RANK_POPULATED(dimms, ch, r)
72 #define FOR_EACH_RANK(ch, r) \
73 FOR_EACH_CHANNEL(ch) FOR_EACH_RANK_IN_CHANNEL(r)
74 #define FOR_EACH_POPULATED_RANK(dimms, ch, r) \
75 FOR_EACH_RANK(ch, r) IF_RANK_POPULATED(dimms, ch, r)
76 #define FOR_EACH_BYTELANE(l) \
77 for (l = 0; l < TOTAL_BYTELANES; l++)
78 #define FOR_EACH_POPULATED_CHANNEL_AND_BYTELANE(dimms, ch, l) \
79 FOR_EACH_POPULATED_CHANNEL (dimms, ch) FOR_EACH_BYTELANE(l)
81 #define DDR3_MAX_CAS 18
void sdram_initialize(void)
static struct dramc_channel const ch[2]
u8 medium[TOTAL_BYTELANES]
u8 coarse_offset[TOTAL_BYTELANES]
struct rt_dqs_setting rt_dqs[TOTAL_CHANNELS][TOTAL_BYTELANES]
struct dll_setting dqs_settings[TOTAL_CHANNELS][TOTAL_BYTELANES]
struct dll_setting dq_settings[TOTAL_CHANNELS][TOTAL_BYTELANES]
struct rcven_timings rcven_t[TOTAL_CHANNELS]
struct timings selected_timings
#define s(param, src_bits, pmcreg, dst_bits)
void dqset(u8 ch, u8 lane, const struct dll_setting *setting)
u32 fsb_to_mhz(u32 speed)
const u16 ddr3_c2_x23c[3][6]
const u8 post_jedec_tab[3][4][2]
void search_write_leveling(struct sysinfo *s)
void rt_set_dqs(u8 channel, u8 lane, u8 rank, struct rt_dqs_setting *dqs_setting)
int do_read_training(struct sysinfo *s)
const u32 ddr3_c2_tab[2][3][6][2]
const struct dll_setting default_ddr3_1067_dq[2][TOTAL_BYTELANES]
const u8 ddr3_emrs1_rtt_nom_config[16][4]
u32 ddr_to_mhz(u32 speed)
const struct dll_setting default_ddr3_800_dq[2][TOTAL_BYTELANES]
const struct dll_setting default_ddr2_800_dq[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_800_ctrl[7]
const struct dll_setting default_ddr3_1333_ctrl[2][7]
void send_jedec_cmd(const struct sysinfo *s, u8 r, u8 ch, u8 cmd, u32 val)
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,...
const struct dll_setting default_ddr2_800_dqs[TOTAL_BYTELANES]
const struct dll_setting default_ddr2_667_dq[TOTAL_BYTELANES]
const struct dll_setting default_ddr3_800_dqs[2][TOTAL_BYTELANES]
int do_write_training(struct sysinfo *s)
const u8 ddr3_c2_x264[3][6]
const struct dll_setting default_ddr2_667_dqs[TOTAL_BYTELANES]
u32 test_address(int channel, int rank)
const struct dll_setting default_ddr3_1067_ctrl[2][7]
const struct dll_setting default_ddr3_1333_dq[2][TOTAL_BYTELANES]
const struct dll_setting default_ddr3_800_ctrl[2][7]
void rcven(struct sysinfo *s)
void do_raminit(struct sysinfo *, int fast_boot)
const struct dll_setting default_ddr2_667_ctrl[7]