<p>Arthur Heymans has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/28714">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mb/asrock/g41m-vs3-r2: Allow to set the fixed duty cycle from rtc nvram<br><br>By default the SuperIO is strapped to set the fan duty cycle of the CPU fan to a<br>100%, which can be quite loud. This change makes it configurable.<br><br>This duty cycle will remain fixed afterwards but with w83627ehf linux module +<br>the fancontrol tool you can gain fine grained control. No proper fan control can<br>be implemented with the SuperIO's modes of operation as it seems that none of<br>the temps are correlated with the CPU temp (even in vendor BIOS). Newer ACPI<br>revisions might make this possible to implement this without the fancontrol<br>daemon.<br><br>This also fixes sensors 2 to thermistor mode (not the default diode mode).<br><br>Change-Id: Ifb5bbb578182e88f4f7ba4e0e47404241b1a1962<br>Signed-off-by: Arthur Heymans <arthur@aheymans.xyz><br>---<br>M src/mainboard/asrock/g41c-gs/Makefile.inc<br>M src/mainboard/asrock/g41c-gs/cmos.layout<br>A src/mainboard/asrock/g41c-gs/variants/g41m-vs3-r2/Makefile.inc<br>A src/mainboard/asrock/g41c-gs/variants/g41m-vs3-r2/mainboard.c<br>4 files changed, 95 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/14/28714/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/mainboard/asrock/g41c-gs/Makefile.inc b/src/mainboard/asrock/g41c-gs/Makefile.inc</span><br><span>index 82e72fb..cc9edb1 100644</span><br><span>--- a/src/mainboard/asrock/g41c-gs/Makefile.inc</span><br><span>+++ b/src/mainboard/asrock/g41c-gs/Makefile.inc</span><br><span>@@ -1,4 +1,6 @@</span><br><span> ramstage-y += cstates.c</span><br><span> romstage-y += variants/$(VARIANT_DIR)/gpio.c</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+subdirs-y += variants/$(VARIANT_DIR)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-mainboard.ads</span><br><span>diff --git a/src/mainboard/asrock/g41c-gs/cmos.layout b/src/mainboard/asrock/g41c-gs/cmos.layout</span><br><span>index 57c30ae..c64913a 100644</span><br><span>--- a/src/mainboard/asrock/g41c-gs/cmos.layout</span><br><span>+++ b/src/mainboard/asrock/g41c-gs/cmos.layout</span><br><span>@@ -61,9 +61,13 @@</span><br><span> </span><br><span> # coreboot config options: northbridge</span><br><span> 432         4        e      11        gfx_uma_size</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# coreboot config options: superio</span><br><span style="color: hsl(120, 100%, 40%);">+436         2        e      10        fan_duty_cycle</span><br><span> #435        549       r       0        unused</span><br><span> </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # coreboot config options: check sums</span><br><span> 984         16       h       0        check_sum</span><br><span> </span><br><span>@@ -91,6 +95,10 @@</span><br><span> 7     0     Disable</span><br><span> 7     1     Enable</span><br><span> 7     2     Keep</span><br><span style="color: hsl(120, 100%, 40%);">+10    0     100</span><br><span style="color: hsl(120, 100%, 40%);">+10    1     75</span><br><span style="color: hsl(120, 100%, 40%);">+10    2     50</span><br><span style="color: hsl(120, 100%, 40%);">+10    3     25</span><br><span> 11    6     64M</span><br><span> 11    7     128M</span><br><span> 11    8     256M</span><br><span>diff --git a/src/mainboard/asrock/g41c-gs/variants/g41m-vs3-r2/Makefile.inc b/src/mainboard/asrock/g41c-gs/variants/g41m-vs3-r2/Makefile.inc</span><br><span>new file mode 100644</span><br><span>index 0000000..faf4971</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/asrock/g41c-gs/variants/g41m-vs3-r2/Makefile.inc</span><br><span>@@ -0,0 +1 @@</span><br><span style="color: hsl(120, 100%, 40%);">+ramstage-y += mainboard.c</span><br><span>\ No newline at end of file</span><br><span>diff --git a/src/mainboard/asrock/g41c-gs/variants/g41m-vs3-r2/mainboard.c b/src/mainboard/asrock/g41c-gs/variants/g41m-vs3-r2/mainboard.c</span><br><span>new file mode 100644</span><br><span>index 0000000..87bbc38</span><br><span>--- /dev/null</span><br><span>+++ b/src/mainboard/asrock/g41c-gs/variants/g41m-vs3-r2/mainboard.c</span><br><span>@@ -0,0 +1,84 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright (C) 2007-2009 coresystems GmbH</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; version 2 of the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <types.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <device/device.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <pc80/mc146818rtc.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <arch/io.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Hardware Monitor */</span><br><span style="color: hsl(120, 100%, 40%);">+/* Must match devicetree */</span><br><span style="color: hsl(120, 100%, 40%);">+static u16 hwm_base = 0x290;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void hwm_write(u8 reg, u8 value)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    outb(reg, hwm_base + 0x05);</span><br><span style="color: hsl(120, 100%, 40%);">+   outb(value, hwm_base + 0x06);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void hwm_bank(u8 bank)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  hwm_write(0x4e, bank);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum duty_cycles {</span><br><span style="color: hsl(120, 100%, 40%);">+       DUTY_CYCLE_100 = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+   DUTY_CYCLE_75 = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+    DUTY_CYCLE_50 = 2,</span><br><span style="color: hsl(120, 100%, 40%);">+    DUTY_CYCLE_25 = 3,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void hwm_setup(struct device *dev)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        enum duty_cycles duty_cycle = DUTY_CYCLE_75;</span><br><span style="color: hsl(120, 100%, 40%);">+  get_option(&duty_cycle, "fan_duty_cycle");</span><br><span style="color: hsl(120, 100%, 40%);">+      hwm_bank(0);</span><br><span style="color: hsl(120, 100%, 40%);">+  u8 reg;</span><br><span style="color: hsl(120, 100%, 40%);">+       switch (duty_cycle){</span><br><span style="color: hsl(120, 100%, 40%);">+  case DUTY_CYCLE_100:</span><br><span style="color: hsl(120, 100%, 40%);">+          reg = 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+      case DUTY_CYCLE_75:</span><br><span style="color: hsl(120, 100%, 40%);">+           reg = 0xff * 3 / 4;</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case DUTY_CYCLE_50:</span><br><span style="color: hsl(120, 100%, 40%);">+           reg = 0xff / 2;</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case DUTY_CYCLE_25:</span><br><span style="color: hsl(120, 100%, 40%);">+           reg = 0xff / 4;</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     hwm_write(0x03, reg); /* CPU FAN PWM duty cycle*/</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Default: both fans in manual mode, CPU fan PWM, Case fan DC */</span><br><span style="color: hsl(120, 100%, 40%);">+     hwm_write(0x04, 0x01);</span><br><span style="color: hsl(120, 100%, 40%);">+        hwm_bank(0x80);</span><br><span style="color: hsl(120, 100%, 40%);">+       hwm_write(0x5d, 0xa1); /* All Sensors Thermistor, not diode */</span><br><span style="color: hsl(120, 100%, 40%);">+        hwm_write(0x5e, 0x00);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* mainboard_enable is executed as first thing after */</span><br><span style="color: hsl(120, 100%, 40%);">+/* enumerate_buses(). */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void mainboard_enable(struct device *dev)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       dev->ops->init = hwm_setup;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct chip_operations mainboard_ops = {</span><br><span style="color: hsl(120, 100%, 40%);">+      CHIP_NAME("MAINBOARD")</span><br><span style="color: hsl(120, 100%, 40%);">+      .enable_dev = mainboard_enable,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/28714">change 28714</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/28714"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ifb5bbb578182e88f4f7ba4e0e47404241b1a1962 </div>
<div style="display:none"> Gerrit-Change-Number: 28714 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Arthur Heymans <arthur@aheymans.xyz> </div>