coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
raminit_receive_enable_calibration.c File Reference
#include <stdint.h>
#include <device/mmio.h>
#include <console/console.h>
#include "gm45.h"
Include dependency graph for raminit_receive_enable_calibration.c:

Go to the source code of this file.

Data Structures

struct  rec_timing_t
 

Macros

#define CxRECy_MCHBAR(x, y)   (0x14a0 + ((x) * 0x0100) + ((3 - (y)) * 4))
 
#define CxRECy_SHIFT_L   0
 
#define CxRECy_MASK_L   (3 << CxRECy_SHIFT_L)
 
#define CxRECy_SHIFT_H   16
 
#define CxRECy_MASK_H   (3 << CxRECy_SHIFT_H)
 
#define CxRECy_T_SHIFT   28
 
#define CxRECy_T_MASK   (0xf << CxRECy_T_SHIFT)
 
#define CxRECy_T(t)   (((t) << CxRECy_T_SHIFT) & CxRECy_T_MASK)
 
#define CxRECy_P_SHIFT   24
 
#define CxRECy_P_MASK   (0x7 << CxRECy_P_SHIFT)
 
#define CxRECy_P(p)   (((p) << CxRECy_P_SHIFT) & CxRECy_P_MASK)
 
#define CxRECy_PH_SHIFT   22
 
#define CxRECy_PH_MASK   (0x3 << CxRECy_PH_SHIFT)
 
#define CxRECy_PH(p)   (((p) << CxRECy_PH_SHIFT) & CxRECy_PH_MASK)
 
#define CxRECy_PM_SHIFT   20
 
#define CxRECy_PM_MASK   (0x3 << CxRECy_PM_SHIFT)
 
#define CxRECy_PM(p)   (((p) << CxRECy_PM_SHIFT) & CxRECy_PM_MASK)
 
#define CxRECy_TIMING_MASK
 
#define CxDRT3_C_SHIFT   7
 
#define CxDRT3_C_MASK   (0xf << CxDRT3_C_SHIFT)
 
#define CxDRT3_C(c)   (((c) << CxDRT3_C_SHIFT) & CxDRT3_C_MASK)
 
#define PH_BOUND   4
 
#define PH_STEP   2
 
#define PM_BOUND   3
 
#define C_BOUND   16
 

Functions

static void normalize_rec_timing (rec_timing_t *const timing)
 
static void rec_full_backstep (rec_timing_t *const timing)
 
static void rec_half_backstep (rec_timing_t *const timing)
 
static void rec_quarter_step (rec_timing_t *const timing)
 
static void rec_quarter_backstep (rec_timing_t *const timing)
 
static void rec_smallest_step (rec_timing_t *const timing)
 
static void program_timing (int channel, int group, rec_timing_t timings[][4])
 
static int read_dqs_level (const int channel, const int lane)
 
static void find_dqs_low (const int channel, const int group, rec_timing_t timings[][4], const char lane_map[][2])
 
static void find_dqs_high (const int channel, const int group, rec_timing_t timings[][4], const char lane_map[][2])
 
static void find_dqs_edge_lowhigh (const int channel, const int group, rec_timing_t timings[][4], const char lane_map[][2])
 
static void find_preamble (const int channel, const int group, rec_timing_t timings[][4], const char lane_map[][2])
 
static void receive_enable_calibration (const timings_t *const timings, const dimminfo_t *const dimms)
 
void raminit_receive_enable_calibration (const timings_t *const timings, const dimminfo_t *const dimms)
 

Variables

static const char bytelane_map [2][4][2]
 

Macro Definition Documentation

◆ C_BOUND

#define C_BOUND   16

Definition at line 40 of file raminit_receive_enable_calibration.c.

◆ CxDRT3_C

#define CxDRT3_C (   c)    (((c) << CxDRT3_C_SHIFT) & CxDRT3_C_MASK)

Definition at line 30 of file raminit_receive_enable_calibration.c.

◆ CxDRT3_C_MASK

#define CxDRT3_C_MASK   (0xf << CxDRT3_C_SHIFT)

Definition at line 29 of file raminit_receive_enable_calibration.c.

◆ CxDRT3_C_SHIFT

#define CxDRT3_C_SHIFT   7

Definition at line 28 of file raminit_receive_enable_calibration.c.

◆ CxRECy_MASK_H

#define CxRECy_MASK_H   (3 << CxRECy_SHIFT_H)

Definition at line 12 of file raminit_receive_enable_calibration.c.

◆ CxRECy_MASK_L

#define CxRECy_MASK_L   (3 << CxRECy_SHIFT_L)

Definition at line 10 of file raminit_receive_enable_calibration.c.

◆ CxRECy_MCHBAR

#define CxRECy_MCHBAR (   x,
  y 
)    (0x14a0 + ((x) * 0x0100) + ((3 - (y)) * 4))

Definition at line 8 of file raminit_receive_enable_calibration.c.

◆ CxRECy_P

#define CxRECy_P (   p)    (((p) << CxRECy_P_SHIFT) & CxRECy_P_MASK)

Definition at line 18 of file raminit_receive_enable_calibration.c.

◆ CxRECy_P_MASK

#define CxRECy_P_MASK   (0x7 << CxRECy_P_SHIFT)

Definition at line 17 of file raminit_receive_enable_calibration.c.

◆ CxRECy_P_SHIFT

#define CxRECy_P_SHIFT   24

Definition at line 16 of file raminit_receive_enable_calibration.c.

◆ CxRECy_PH

#define CxRECy_PH (   p)    (((p) << CxRECy_PH_SHIFT) & CxRECy_PH_MASK)

Definition at line 21 of file raminit_receive_enable_calibration.c.

◆ CxRECy_PH_MASK

#define CxRECy_PH_MASK   (0x3 << CxRECy_PH_SHIFT)

Definition at line 20 of file raminit_receive_enable_calibration.c.

◆ CxRECy_PH_SHIFT

#define CxRECy_PH_SHIFT   22

Definition at line 19 of file raminit_receive_enable_calibration.c.

◆ CxRECy_PM

#define CxRECy_PM (   p)    (((p) << CxRECy_PM_SHIFT) & CxRECy_PM_MASK)

Definition at line 24 of file raminit_receive_enable_calibration.c.

◆ CxRECy_PM_MASK

#define CxRECy_PM_MASK   (0x3 << CxRECy_PM_SHIFT)

Definition at line 23 of file raminit_receive_enable_calibration.c.

◆ CxRECy_PM_SHIFT

#define CxRECy_PM_SHIFT   20

Definition at line 22 of file raminit_receive_enable_calibration.c.

◆ CxRECy_SHIFT_H

#define CxRECy_SHIFT_H   16

Definition at line 11 of file raminit_receive_enable_calibration.c.

◆ CxRECy_SHIFT_L

#define CxRECy_SHIFT_L   0

Definition at line 9 of file raminit_receive_enable_calibration.c.

◆ CxRECy_T

#define CxRECy_T (   t)    (((t) << CxRECy_T_SHIFT) & CxRECy_T_MASK)

Definition at line 15 of file raminit_receive_enable_calibration.c.

◆ CxRECy_T_MASK

#define CxRECy_T_MASK   (0xf << CxRECy_T_SHIFT)

Definition at line 14 of file raminit_receive_enable_calibration.c.

◆ CxRECy_T_SHIFT

#define CxRECy_T_SHIFT   28

Definition at line 13 of file raminit_receive_enable_calibration.c.

◆ CxRECy_TIMING_MASK

#define CxRECy_TIMING_MASK
Value:
CxRECy_PH_MASK | CxRECy_PM_MASK)

Definition at line 25 of file raminit_receive_enable_calibration.c.

◆ PH_BOUND

#define PH_BOUND   4

Definition at line 37 of file raminit_receive_enable_calibration.c.

◆ PH_STEP

#define PH_STEP   2

Definition at line 38 of file raminit_receive_enable_calibration.c.

◆ PM_BOUND

#define PM_BOUND   3

Definition at line 39 of file raminit_receive_enable_calibration.c.

Function Documentation

◆ find_dqs_edge_lowhigh()

static void find_dqs_edge_lowhigh ( const int  channel,
const int  group,
rec_timing_t  timings[][4],
const char  lane_map[][2] 
)
static

Definition at line 157 of file raminit_receive_enable_calibration.c.

References find_dqs_high(), program_timing(), read_dqs_level(), rec_quarter_backstep(), and rec_smallest_step().

Referenced by receive_enable_calibration().

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

◆ find_dqs_high()

static void find_dqs_high ( const int  channel,
const int  group,
rec_timing_t  timings[][4],
const char  lane_map[][2] 
)
static

Definition at line 147 of file raminit_receive_enable_calibration.c.

References program_timing(), read_dqs_level(), and rec_quarter_step().

Referenced by find_dqs_edge_lowhigh().

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

◆ find_dqs_low()

static void find_dqs_low ( const int  channel,
const int  group,
rec_timing_t  timings[][4],
const char  lane_map[][2] 
)
static

Definition at line 137 of file raminit_receive_enable_calibration.c.

References program_timing(), read_dqs_level(), and rec_quarter_step().

Referenced by receive_enable_calibration().

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

◆ find_preamble()

static void find_preamble ( const int  channel,
const int  group,
rec_timing_t  timings[][4],
const char  lane_map[][2] 
)
static

Definition at line 177 of file raminit_receive_enable_calibration.c.

References program_timing(), read_dqs_level(), and rec_full_backstep().

Referenced by receive_enable_calibration().

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

◆ normalize_rec_timing()

static void normalize_rec_timing ( rec_timing_t *const  timing)
static

Definition at line 50 of file raminit_receive_enable_calibration.c.

References rec_timing_t::c, C_BOUND, die(), rec_timing_t::p, rec_timing_t::p_bound, rec_timing_t::ph, PH_BOUND, PH_STEP, rec_timing_t::t, and rec_timing_t::t_bound.

Referenced by program_timing(), and receive_enable_calibration().

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

◆ program_timing()

static void program_timing ( int  channel,
int  group,
rec_timing_t  timings[][4] 
)
static

◆ raminit_receive_enable_calibration()

void raminit_receive_enable_calibration ( const timings_t *const  timings,
const dimminfo_t *const  dimms 
)

◆ read_dqs_level()

static int read_dqs_level ( const int  channel,
const int  lane 
)
static

Definition at line 124 of file raminit_receive_enable_calibration.c.

References mchbar_clrbits32, mchbar_read32(), mchbar_setbits32, raminit_get_rank_addr(), and read32().

Referenced by find_dqs_edge_lowhigh(), find_dqs_high(), find_dqs_low(), and find_preamble().

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

◆ rec_full_backstep()

static void rec_full_backstep ( rec_timing_t *const  timing)
static

Definition at line 81 of file raminit_receive_enable_calibration.c.

References rec_timing_t::c.

Referenced by find_preamble().

Here is the caller graph for this function:

◆ rec_half_backstep()

static void rec_half_backstep ( rec_timing_t *const  timing)
static

Definition at line 85 of file raminit_receive_enable_calibration.c.

References rec_timing_t::ph, and PH_STEP.

Referenced by receive_enable_calibration().

Here is the caller graph for this function:

◆ rec_quarter_backstep()

static void rec_quarter_backstep ( rec_timing_t *const  timing)
static

Definition at line 94 of file raminit_receive_enable_calibration.c.

References rec_timing_t::p, rec_timing_t::p_bound, rec_timing_t::t, and rec_timing_t::t_bound.

Referenced by find_dqs_edge_lowhigh().

Here is the caller graph for this function:

◆ rec_quarter_step()

static void rec_quarter_step ( rec_timing_t *const  timing)
static

Definition at line 89 of file raminit_receive_enable_calibration.c.

References rec_timing_t::p, rec_timing_t::p_bound, rec_timing_t::t, and rec_timing_t::t_bound.

Referenced by find_dqs_high(), find_dqs_low(), and receive_enable_calibration().

Here is the caller graph for this function:

◆ rec_smallest_step()

static void rec_smallest_step ( rec_timing_t *const  timing)
static

Definition at line 99 of file raminit_receive_enable_calibration.c.

References rec_timing_t::p.

Referenced by find_dqs_edge_lowhigh().

Here is the caller graph for this function:

◆ receive_enable_calibration()

static void receive_enable_calibration ( const timings_t *const  timings,
const dimminfo_t *const  dimms 
)
static

Variable Documentation

◆ bytelane_map

const char bytelane_map[2][4][2]
static
Initial value:
= {
{ { 0, 1 }, { 2, 3 }, { 4, 5 }, { 6, 7 } },
{ { 0, 2 }, { 1, 3 }, { 4, 6 }, { 5, 7 } },
}

Definition at line 32 of file raminit_receive_enable_calibration.c.

Referenced by raminit_receive_enable_calibration().