diff --git a/src/config/Options.lb b/src/config/Options.lb index 7b22ea8692..9ba5f32edd 100644 --- a/src/config/Options.lb +++ b/src/config/Options.lb @@ -861,6 +861,11 @@ end # Misc device options ############################################### +define HAVE_FANCTL + default 0 + export used + comment "Include board specific FAN control initialization" +end define CONFIG_TSC_X86RDTSC_CALIBRATE_WITH_TIMER2 default 0 export used diff --git a/src/mainboard/gigabyte/m57sli/Config.lb b/src/mainboard/gigabyte/m57sli/Config.lb index 5f34c9eeb5..127ce0309b 100644 --- a/src/mainboard/gigabyte/m57sli/Config.lb +++ b/src/mainboard/gigabyte/m57sli/Config.lb @@ -206,6 +206,10 @@ else end end +if HAVE_FANCTL + object fanctl.o +end + ## ## Setup RAM ## diff --git a/src/mainboard/gigabyte/m57sli/Options.lb b/src/mainboard/gigabyte/m57sli/Options.lb index 149bbde94c..88d311bf24 100644 --- a/src/mainboard/gigabyte/m57sli/Options.lb +++ b/src/mainboard/gigabyte/m57sli/Options.lb @@ -115,6 +115,7 @@ uses WAIT_BEFORE_CPUS_INIT uses CONFIG_USE_PRINTK_IN_CAR +uses HAVE_FANCTL ### ### Build options ### @@ -139,6 +140,11 @@ default FAILOVER_SIZE=0x01000 #more 1M for pgtbl default CONFIG_LB_MEM_TOPK=2048 +## +## Set-up automatic fan control +## +default HAVE_FANCTL=1 + ## ## Build code for the fallback boot ## diff --git a/src/mainboard/gigabyte/m57sli/fanctl.c b/src/mainboard/gigabyte/m57sli/fanctl.c new file mode 100644 index 0000000000..8b74014dbd --- /dev/null +++ b/src/mainboard/gigabyte/m57sli/fanctl.c @@ -0,0 +1,57 @@ +#include + +static void write_index(uint16_t port_base, uint8_t reg, uint8_t value) +{ + outb(reg, port_base); + outb(value, port_base + 1); +} + +static const struct { + uint8_t index, value; +} sequence[]= { + /* Set FAN_CTL control register (0x14) polarity to high, and + activate fans 1, 2 and 3. */ + { 0x14, 0x87}, + /* set the correct sensor types 1,2 thermistor; 3 diode */ + { 0x51, 0x1c}, + /* set the 'zero' voltage for diode type sensor */ + { 0x5c, 0x80}, +// { 0x56, 0xe5}, +// { 0x57, 0xe5}, + { 0x59, 0xe5}, + { 0x5c, 0x00}, + /* fan1 (controlled by temp3) control parameters */ + /* fan off limit */ + { 0x60, 0xff}, + /* fan start limit */ + { 0x61, 0x14}, + /* ???? */ +// { 0x62, 0x00}, + /* start PWM */ + { 0x63, 0x27}, + /* smooth and slope PWM */ + { 0x64, 0x90}, + /* direct-down and interval */ + { 0x65, 0x03}, + /* fan1 auto controlled by temp3 */ + { 0x15, 0x82}, + /* fan2 soft controlled, max speed */ + { 0x16, 0x7f}, + /* fan3 soft controlled, 75% speed */ + { 0x17, 0x60}, + /* all fans enable, fan1 ctl smart */ + { 0x13, 0x71} +}; + +#define ARRAYSIZE(x) sizeof x/sizeof *x + +/* + * Called from superio.c + */ +void init_ec(uint16_t base) +{ + int i; + for (i=0; i