1. geodelx.c: cover case of unterminated DRAM by adding a terminated
parameter to two functions. 2. geodelx.h: define DRAM_TERMINATED and DRAM_UNTERMINATED constants 3. dbe62/initram.c: move to auto PLL control, so set MANUALCONF to 0 4. all other initram.c: set up calls to cpu_reg_init with proper TERMINATED/UNTERMINATED constants. builds for dbe62. The auto PLL strapping is tested and works. Signed-off-by: Ronald G. Minnich <rminnich@gmail.com> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> git-svn-id: svn://coreboot.org/repository/coreboot-v3@699 f3766cd6-281f-0410-b1cd-43a5c92072e9
This commit is contained in:
parent
bc75f3349d
commit
96914e1655
9 changed files with 23 additions and 13 deletions
|
|
@ -313,8 +313,9 @@ static const struct delay_controls {
|
|||
*
|
||||
* @param dimm0 The SMBus address of DIMM 0 (mainboard dependent).
|
||||
* @param dimm1 The SMBus address of DIMM 1 (mainboard dependent).
|
||||
* @param terminated The bus is terminated. (mainboard dependent).
|
||||
*/
|
||||
static void set_delay_control(u8 dimm0, u8 dimm1)
|
||||
static void set_delay_control(u8 dimm0, u8 dimm1, int terminated)
|
||||
{
|
||||
u32 glspeed;
|
||||
u8 spdbyte0, spdbyte1, dimms, i;
|
||||
|
|
@ -376,7 +377,10 @@ static void set_delay_control(u8 dimm0, u8 dimm1)
|
|||
|
||||
spdbyte0 += spdbyte1;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(delay_control_table); i++) {
|
||||
if ((dimms == 1) && (terminated == DRAM_TERMINATED)) {
|
||||
msr.hi = 0xF2F100FF;
|
||||
msr.lo = 0x56960004;
|
||||
} else for (i = 0; i < ARRAY_SIZE(delay_control_table); i++) {
|
||||
if ((dimms == delay_control_table[i].dimms) &&
|
||||
(spdbyte0 <= delay_control_table[i].devices)) {
|
||||
if (glspeed < 334) {
|
||||
|
|
@ -400,8 +404,9 @@ static void set_delay_control(u8 dimm0, u8 dimm1)
|
|||
* setting in future.
|
||||
* @param dimm0 SMBus address of DIMM 0 (mainboard dependent).
|
||||
* @param dimm1 SMBus address of DIMM 1 (mainboard dependent).
|
||||
* @param terminated The bus is terminated (mainboard dependent).
|
||||
*/
|
||||
void cpu_reg_init(int debug_clock_disable, u8 dimm0, u8 dimm1)
|
||||
void cpu_reg_init(int debug_clock_disable, u8 dimm0, u8 dimm1, int terminated)
|
||||
{
|
||||
struct msr msr;
|
||||
|
||||
|
|
@ -432,7 +437,7 @@ void cpu_reg_init(int debug_clock_disable, u8 dimm0, u8 dimm1)
|
|||
wrmsr(GLIU1_PORT_ACTIVE, msr);
|
||||
|
||||
/* Set the Delay Control in GLCP. */
|
||||
set_delay_control(dimm0, dimm1);
|
||||
set_delay_control(dimm0, dimm1, terminated);
|
||||
|
||||
/* Enable RSDC. */
|
||||
msr = rdmsr(CPU_AC_SMM_CTL);
|
||||
|
|
|
|||
|
|
@ -376,6 +376,11 @@
|
|||
#define GLCP_DELAY_CONTROLS (MSR_GLCP + 0x0F)
|
||||
#define DELAY_UPPER_DISABLE_CLK135 (1 << 23)
|
||||
#define DELAY_LOWER_STATUS_MASK 0x7C0
|
||||
|
||||
/* DRAM_TERMINATED affects how the DELAY register is set. */
|
||||
#define DRAM_TERMINATED 'T'
|
||||
#define DRAM_UNTERMINATED 't'
|
||||
|
||||
#define GLCP_SYS_RSTPLL (MSR_GLCP + 0x14) /* R/W */
|
||||
#define RSTPLL_UPPER_GLMULT_SHIFT 7
|
||||
#define RSTPLL_UPPER_GLMULT_MASK 0x1F
|
||||
|
|
@ -1281,7 +1286,7 @@ static inline u16 vr_read(u16 class_index)
|
|||
u32 geode_link_speed(void);
|
||||
void geodelx_msr_init(void);
|
||||
void pll_reset(int manualconf, u32 pll_hi, u32 pll_lo);
|
||||
void cpu_reg_init(int debug_clock_disable, u8 dimm0, u8 dimm1);
|
||||
void cpu_reg_init(int debug_clock_disable, u8 dimm0, u8 dimm1, int terminated);
|
||||
void system_preinit(void);
|
||||
void msr_init(void);
|
||||
void geode_pre_payload(void);
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ int main(void)
|
|||
|
||||
pll_reset(MANUALCONF, PLLMSRHI, PLLMSRLO);
|
||||
|
||||
cpu_reg_init(0, DIMM0, DIMM1);
|
||||
cpu_reg_init(0, DIMM0, DIMM1, DRAM_TERMINATED);
|
||||
sdram_set_registers();
|
||||
sdram_set_spd_registers(DIMM0, DIMM1);
|
||||
sdram_enable(DIMM0, DIMM1);
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ int main(void)
|
|||
pll_reset(MANUALCONF, PLLMSRHI, PLLMSRLO);
|
||||
printk(BIOS_DEBUG, "done pll reset\n");
|
||||
|
||||
cpu_reg_init(0, DIMM0, DIMM1);
|
||||
cpu_reg_init(0, DIMM0, DIMM1, DRAM_UNTERMINATED);
|
||||
printk(BIOS_DEBUG, "done cpu reg init\n");
|
||||
|
||||
sdram_set_registers();
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ int main(void)
|
|||
pll_reset(MANUALCONF, PLLMSRHI, PLLMSRLO);
|
||||
printk(BIOS_DEBUG, "done pll reset\n");
|
||||
|
||||
cpu_reg_init(0, DIMM0, DIMM1);
|
||||
cpu_reg_init(0, DIMM0, DIMM1, DRAM_TERMINATED);
|
||||
printk(BIOS_DEBUG, "done cpu reg init\n");
|
||||
|
||||
sdram_set_registers();
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ int main(void)
|
|||
pll_reset(MANUALCONF, PLLMSRHI, PLLMSRLO);
|
||||
printk(BIOS_DEBUG, "done pll reset\n");
|
||||
|
||||
cpu_reg_init(0, DIMM0, DIMM1);
|
||||
cpu_reg_init(0, DIMM0, DIMM1, DRAM_UNTERMINATED);
|
||||
printk(BIOS_DEBUG, "done cpu reg init\n");
|
||||
|
||||
sdram_set_registers();
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
#include <northbridge/amd/geodelx/raminit.h>
|
||||
#include <spd.h>
|
||||
|
||||
#define MANUALCONF 1 /* Do manual strapped PLL config */
|
||||
#define MANUALCONF 0 /* Do manual strapped PLL config */
|
||||
#define PLLMSRHI 0x000003d9 /* manual settings for the PLL */
|
||||
#define PLLMSRLO 0x07de0080 /* from factory bios */
|
||||
#define DIMM0 ((u8) 0xA0)
|
||||
|
|
@ -140,7 +140,7 @@ int main(void)
|
|||
pll_reset(MANUALCONF, PLLMSRHI, PLLMSRLO);
|
||||
printk(BIOS_DEBUG, "done pll reset\n");
|
||||
|
||||
cpu_reg_init(0, DIMM0, DIMM1);
|
||||
cpu_reg_init(0, DIMM0, DIMM1, DRAM_UNTERMINATED);
|
||||
printk(BIOS_DEBUG, "done cpu reg init\n");
|
||||
|
||||
sdram_set_registers();
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ int main(void)
|
|||
pll_reset(MANUALCONF, PLLMSRHI, PLLMSRLO);
|
||||
printk(BIOS_DEBUG, "done pll reset\n");
|
||||
|
||||
cpu_reg_init(0, DIMM0, DIMM1);
|
||||
cpu_reg_init(0, DIMM0, DIMM1, DRAM_TERMINATED);
|
||||
printk(BIOS_DEBUG, "done cpu reg init\n");
|
||||
|
||||
sdram_set_registers();
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ int main(void)
|
|||
pll_reset(MANUALCONF, PLLMSRHI, PLLMSRLO);
|
||||
printk(BIOS_DEBUG, "done pll reset\n");
|
||||
|
||||
cpu_reg_init(0, DIMM0, DIMM1);
|
||||
cpu_reg_init(0, DIMM0, DIMM1, DRAM_TERMINATED);
|
||||
printk(BIOS_DEBUG, "done cpu reg init\n");
|
||||
|
||||
sdram_set_registers();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue