Nico Huber (nico.h@gmx.de) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/12814
-gerrit
commit 14bfab7162c0f1648316cd189bde530c286d3096 Author: Nico Huber nico.huber@secunet.com Date: Wed Dec 30 00:17:27 2015 +0100
nb/intel/gm45: Export low-power and (SFF) options
Make the low-power and small form factor (SFF) options overridable from romstage main. Also disable both options by default. That's ok as there aren't yet any in-tree users of the GS45 chipset. As a nice side-effect, this adds X200s support to the lenovo/x200 port.
Change-Id: I94373851262e6d424cf4885ceca7260c31bc9f61 Signed-off-by: Nico Huber nico.huber@secunet.com --- src/northbridge/intel/gm45/gm45.h | 4 +++- src/northbridge/intel/gm45/raminit.c | 13 ++++++------- 2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/northbridge/intel/gm45/gm45.h b/src/northbridge/intel/gm45/gm45.h index ded2dbf..c018321 100644 --- a/src/northbridge/intel/gm45/gm45.h +++ b/src/northbridge/intel/gm45/gm45.h @@ -130,7 +130,6 @@ typedef struct { int txt_enabled; int cores; gmch_gfx_t gfx_type; - int gs45_low_power_mode; /* low power mode of GMCH_GS45 */ int max_ddr2_mhz; int max_ddr3_mt; fsb_clock_t max_fsb; @@ -140,10 +139,13 @@ typedef struct { int enable_peg; u16 ggc;
+ /* to be filled in romstage main: */ int spd_type; timings_t selected_timings; dimminfo_t dimms[2]; u8 spd_map[4]; + int gs45_low_power_mode; /* low power mode of GMCH_GS45 */ + int sff; /* small form factor option (soldered down DIMM) */ } sysinfo_t; #define TOTAL_CHANNELS 2 #define CHANNEL_IS_POPULATED(dimms, idx) (dimms[idx].card_type != 0) diff --git a/src/northbridge/intel/gm45/raminit.c b/src/northbridge/intel/gm45/raminit.c index d4d00de..ab54abc 100644 --- a/src/northbridge/intel/gm45/raminit.c +++ b/src/northbridge/intel/gm45/raminit.c @@ -80,7 +80,6 @@ void get_gmch_info(sysinfo_t *sysinfo) sysinfo->gfx_type = gmch_gfx_types[gfx_variant][render_freq]; else sysinfo->gfx_type = GMCH_UNKNOWN; - sysinfo->gs45_low_power_mode = 0; switch (sysinfo->gfx_type) { case GMCH_GM45: printk(BIOS_SPEW, "GMCH: GM45\n"); @@ -104,8 +103,8 @@ void get_gmch_info(sysinfo_t *sysinfo) printk(BIOS_SPEW, "GMCH: GS40\n"); break; case GMCH_GS45: - printk(BIOS_SPEW, "GMCH: GS45, using low power mode by default\n"); - sysinfo->gs45_low_power_mode = 1; + printk(BIOS_SPEW, "GMCH: GS45, using %s-power mode\n", + sysinfo->gs45_low_power_mode ? "low" : "high"); break; case GMCH_PM45: printk(BIOS_SPEW, "GMCH: PM45\n"); @@ -1688,7 +1687,6 @@ void raminit(sysinfo_t *const sysinfo, const int s3resume) { const dimminfo_t *const dimms = sysinfo->dimms; const timings_t *const timings = &sysinfo->selected_timings; - const int sff = sysinfo->gfx_type == GMCH_GS45;
int ch; u8 reg8; @@ -1730,7 +1728,7 @@ void raminit(sysinfo_t *const sysinfo, const int s3resume) configure_dram_control_mode(timings, dimms);
/* Initialize RCOMP. */ - rcomp_initialization(sysinfo->stepping, sff); + rcomp_initialization(sysinfo->stepping, sysinfo->sff);
/* Power-up DRAM. */ dram_powerup(s3resume); @@ -1743,7 +1741,7 @@ void raminit(sysinfo_t *const sysinfo, const int s3resume) MCHBAR32(CxDCLKDIS_MCHBAR(ch)) |= CxDCLKDIS_ENABLE;
/* Enable On-Die Termination. */ - odt_setup(timings, sff); + odt_setup(timings, sysinfo->sff); /* Miscellaneous settings. */ misc_settings(timings, sysinfo->stepping); /* Program clock crossing registers. */ @@ -1751,7 +1749,8 @@ void raminit(sysinfo_t *const sysinfo, const int s3resume) /* Program egress VC1 timings. */ vc1_program_timings(timings->fsb_clock); /* Perform system-memory i/o initialization. */ - memory_io_init(timings->mem_clock, dimms, sysinfo->stepping, sff); + memory_io_init(timings->mem_clock, dimms, + sysinfo->stepping, sysinfo->sff);
/* Initialize memory map with dummy values of 128MB per rank with a page size of 4KB. This makes the JEDEC initialization code easier. */