summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/northbridge/intel/gm45/raminit_read_write_training.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/northbridge/intel/gm45/raminit_read_write_training.c b/src/northbridge/intel/gm45/raminit_read_write_training.c
index 65e16a3b5f..5149c2b11d 100644
--- a/src/northbridge/intel/gm45/raminit_read_write_training.c
+++ b/src/northbridge/intel/gm45/raminit_read_write_training.c
@@ -56,6 +56,14 @@ typedef struct {
int t;
int p;
} read_timing_t;
+static void print_read_timing(const int msg_lvl, const char *const msg,
+ const int lane, const int channel,
+ const read_timing_t *const timing)
+{
+ printk(msg_lvl, "%s for byte lane %d on channel %d: %d.%d\n",
+ msg, lane, channel, timing->t, timing->p);
+}
+
static int normalize_read_timing(read_timing_t *const timing)
{
while (timing->p >= READ_TIMING_P_BOUND) {
@@ -183,6 +191,7 @@ static void read_training_per_lane(const int channel, const int lane,
lower.p = 0;
if (read_training_find_lower(channel, lane, addresses, &lower) < 0)
die("Read training failure: lower bound.\n");
+ print_read_timing(BIOS_SPEW, "Lower bound", lane, channel, &lower);
/*** Search upper bound. ***/
@@ -192,6 +201,7 @@ static void read_training_per_lane(const int channel, const int lane,
if (read_training_find_upper(channel, lane, addresses, &upper) < 0)
/* Overflow on upper edge is not fatal. */
printk(BIOS_WARNING, "Read training failure: upper bound.\n");
+ print_read_timing(BIOS_SPEW, "Upper bound", lane, channel, &upper);
/*** Calculate and program mean value. ***/
@@ -202,8 +212,7 @@ static void read_training_per_lane(const int channel, const int lane,
lower.t = mean_p >> READ_TIMING_P_SHIFT;
lower.p = mean_p & (READ_TIMING_P_BOUND - 1);
program_read_timing(channel, lane, &lower);
- printk(BIOS_DEBUG, "Final timings for byte lane %d on channel %d: "
- "%d.%d\n", lane, channel, lower.t, lower.p);
+ print_read_timing(BIOS_DEBUG, "Final timings", lane, channel, &lower);
}
static void perform_read_training(const dimminfo_t *const dimms)
{
@@ -342,6 +351,14 @@ typedef struct {
const int t_bound;
int p;
} write_timing_t;
+static void print_write_timing(const int msg_lvl, const char *const msg,
+ const int group, const int channel,
+ const write_timing_t *const timing)
+{
+ printk(msg_lvl, "%s for group %d on channel %d: %d.%d.%d\n",
+ msg, group, channel, timing->f, timing->t, timing->p);
+}
+
static int normalize_write_timing(write_timing_t *const timing)
{
while (timing->p >= WRITE_TIMING_P_BOUND) {
@@ -518,6 +535,7 @@ static void write_training_per_group(const int ch, const int group,
if (write_training_find_lower(ch, group, addresses,
masks, memclk1067, &lower) < 0)
die("Write training failure: lower bound.\n");
+ print_write_timing(BIOS_SPEW, "Lower bound", group, ch, &lower);
/*** Search upper bound. ***/
@@ -529,6 +547,7 @@ static void write_training_per_group(const int ch, const int group,
if (write_training_find_upper(ch, group, addresses,
masks, memclk1067, &upper) < 0)
printk(BIOS_WARNING, "Write training failure: upper bound.\n");
+ print_write_timing(BIOS_SPEW, "Upper bound", group, ch, &upper);
/*** Calculate and program mean value. ***/
@@ -542,10 +561,7 @@ static void write_training_per_group(const int ch, const int group,
lower.t = (mean_p >> WRITE_TIMING_P_SHIFT) % lower.t_bound;
lower.p = mean_p & (WRITE_TIMING_P_BOUND - 1);
program_write_timing(ch, group, &lower, memclk1067);
-
- printk(BIOS_DEBUG, "Final timings for group %d"
- " on channel %d: %d.%d.%d\n",
- group, ch, lower.f, lower.t, lower.p);
+ print_write_timing(BIOS_DEBUG, "Final timings", group, ch, &lower);
}
static void perform_write_training(const int memclk1067,
const dimminfo_t *const dimms)