coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
raminit.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef RAMINIT_H
4 #define RAMINIT_H
5 
6 #include "ironlake.h"
7 
8 #define NUM_CHANNELS 2
9 #define NUM_SLOTS 2
10 #define NUM_RANKS 2
11 
12 /* [REG_178][CHANNEL][2 * SLOT + RANK][LANE] */
13 typedef struct {
16 } timing_bounds_t[2][2][2][9];
17 
18 #define MRC_CACHE_VERSION 3
19 
20 struct ram_training {
21  /* [TM][CHANNEL][SLOT][RANK][LANE] */
22  u16 lane_timings[4][2][2][2][9];
25 
30  u16 timing_offset[2][2][2][9];
31  u16 timing2_offset[2][2][2][9];
32  u16 timing2_bounds[2][2][2][9][2];
33  u8 reg274265[2][3]; /* [CHANNEL][REGISTER] */
37 };
38 
39 struct raminfo {
40  u16 clock_speed_index; /* clock_speed (REAL, not DDR) / 133.(3) - 3 */
41  u16 fsb_frequency; /* in 1.(1)/2 MHz. */
42  u8 is_x16_module[2][2]; /* [CHANNEL][SLOT] */
43  u8 density[2][2]; /* [CHANNEL][SLOT] */
44  u8 populated_ranks[2][2][2]; /* [CHANNEL][SLOT][RANK] */
45  int rank_start[2][2][2];
52  u8 spd[2][2][151]; /* [CHANNEL][SLOT][BYTE] */
59  unsigned int total_memory_mb;
60  unsigned int interleaved_part_mb;
62 
64 
65  struct ram_training training;
67 
74 
76 };
77 
78 static inline unsigned int fsbcycle_ps(struct raminfo *info)
79 {
80  return 900000 / info->fsb_frequency;
81 }
82 
83 /* The time of DDR transfer in ps. */
84 static inline unsigned int halfcycle_ps(struct raminfo *info)
85 {
86  return 3750 / (info->clock_speed_index + 3);
87 }
88 
89 /* Frequency in 1.(1)=10/9 MHz units. */
90 static inline unsigned int frequency_11(struct raminfo *info)
91 {
92  return (info->clock_speed_index + 3) * 120;
93 }
94 
95 void chipset_init(const int s3resume);
96 /* spd_addrmap is array of 4 elements:
97  Channel 0 Slot 0
98  Channel 0 Slot 1
99  Channel 1 Slot 0
100  Channel 1 Slot 1
101  0 means "not present"
102 */
103 void raminit(const int s3resume, const u8 *spd_addrmap);
104 
105 u16 get_max_timing(struct raminfo *info, int channel);
106 void early_quickpath_init(struct raminfo *info, const u8 x2ca8);
107 void late_quickpath_init(struct raminfo *info, const int s3resume);
108 
109 #endif /* RAMINIT_H */
static struct smmstore_params_info info
Definition: ramstage.c:12
static unsigned int halfcycle_ps(struct raminfo *info)
Definition: raminit.h:84
static unsigned int frequency_11(struct raminfo *info)
Definition: raminit.h:90
u16 get_max_timing(struct raminfo *info, int channel)
Definition: raminit.c:2824
static unsigned int fsbcycle_ps(struct raminfo *info)
Definition: raminit.h:78
void raminit(const int s3resume, const u8 *spd_addrmap)
Definition: raminit.c:2919
void chipset_init(const int s3resume)
Definition: raminit.c:2860
void late_quickpath_init(struct raminfo *info, const int s3resume)
Definition: quickpath.c:592
void early_quickpath_init(struct raminfo *info, const u8 x2ca8)
Definition: quickpath.c:476
uint32_t u32
Definition: stdint.h:51
uint16_t u16
Definition: stdint.h:48
uint8_t u8
Definition: stdint.h:45
u16 timing_offset[2][2][2][9]
Definition: raminit.h:30
u8 reg178_largest
Definition: raminit.h:28
u16 reg_178
Definition: raminit.h:23
u16 reg_10b
Definition: raminit.h:24
u16 timing2_offset[2][2][2][9]
Definition: raminit.h:31
u8 reg274265[2][3]
Definition: raminit.h:33
timing_bounds_t timing_bounds[2]
Definition: raminit.h:29
u8 reg178_center
Definition: raminit.h:26
u8 reg2ca9_bit0
Definition: raminit.h:34
u8 reg178_smallest
Definition: raminit.h:27
u16 timing2_bounds[2][2][2][9][2]
Definition: raminit.h:32
u32 reg_6dc
Definition: raminit.h:35
u16 lane_timings[4][2][2][2][9]
Definition: raminit.h:22
u32 reg_6e8
Definition: raminit.h:36
u8 mode4030[2]
Definition: raminit.h:56
unsigned int interleaved_part_mb
Definition: raminit.h:60
u8 is_x16_module[2][2]
Definition: raminit.h:42
u8 some_delay_2_halfcycles_ceil
Definition: raminit.h:72
u8 populated_ranks_mask[2]
Definition: raminit.h:54
u8 silicon_revision
Definition: raminit.h:53
u8 board_lane_delay[9]
Definition: raminit.h:47
u8 density[2][2]
Definition: raminit.h:43
u16 fsb_frequency
Definition: raminit.h:41
u8 uma_enabled
Definition: raminit.h:51
u8 revision
Definition: raminit.h:49
u32 last_500_command[2]
Definition: raminit.h:66
unsigned int non_interleaved_part_mb
Definition: raminit.h:61
u8 spd[2][2][151]
Definition: raminit.h:52
u8 revision_flag_1
Definition: raminit.h:70
u8 max_slots_used_in_channel
Definition: raminit.h:55
int rank_start[2][2][2]
Definition: raminit.h:45
u16 max4048[2]
Definition: raminit.h:58
u8 use_ecc
Definition: raminit.h:48
struct ram_training training
Definition: raminit.h:65
u8 populated_ranks[2][2][2]
Definition: raminit.h:44
u8 max_supported_clock_speed_index
Definition: raminit.h:50
u16 clock_speed_index
Definition: raminit.h:40
unsigned int memory_reserved_for_heci_mb
Definition: raminit.h:63
u8 cas_latency
Definition: raminit.h:46
u16 avg4044[2]
Definition: raminit.h:57
u8 some_delay_1_cycle_floor
Definition: raminit.h:71
unsigned int total_memory_mb
Definition: raminit.h:59
u32 delay46_ps[2]
Definition: raminit.h:68
const struct ram_training * cached_training
Definition: raminit.h:75
u8 some_delay_3_ps_rounded
Definition: raminit.h:73
u32 delay54_ps[2]
Definition: raminit.h:69