Post
Topic
Board Hardware
Re: KnC die #0 disabled
by
dzindra
on 02/11/2013, 16:57:05 UTC
Does anyone know what exactly this firmware does?

It seems to get mixed results.

I am only getting 460 on my Jupiter. I am tempted to try this firmware.

tl;dr: this patch lowers some voltage on controller board from 1.95V to 1.45V and tries to restart failed dies in 20 sec intervals.

Long story:
Running diff on images
Code:
diff -rq kncminer-0.98/ramdisk kncminer-0.98.1\(beta\)/ramdisk 2> /dev/null
results in
Code:
Files kncminer-0.98/ramdisk/etc/init.d/initc.sh and kncminer-0.98.1(beta)/ramdisk/etc/init.d/initc.sh differ
Files kncminer-0.98/ramdisk/etc/rcS.d/S36initc.sh and kncminer-0.98.1(beta)/ramdisk/etc/rcS.d/S36initc.sh differ
Files kncminer-0.98/ramdisk/etc/shadow and kncminer-0.98.1(beta)/ramdisk/etc/shadow differ
Files kncminer-0.98/ramdisk/sbin/monitordcdc and kncminer-0.98.1(beta)/ramdisk/sbin/monitordcdc differ
Files kncminer-0.98/ramdisk/usr/sbin/lighttpd and kncminer-0.98.1(beta)/ramdisk/usr/sbin/lighttpd differ
Files kncminer-0.98/ramdisk/var/cache/ldconfig/aux-cache and kncminer-0.98.1(beta)/ramdisk/var/cache/ldconfig/aux-cache differ
Files kncminer-0.98/ramdisk/var/lib/opkg/info/initc-bin.control and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/info/initc-bin.control differ
Files kncminer-0.98/ramdisk/var/lib/opkg/info/initscripts.control and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/info/initscripts.control differ
Files kncminer-0.98/ramdisk/var/lib/opkg/info/lighttpd-module-access.control and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/info/lighttpd-module-access.control differ
Files kncminer-0.98/ramdisk/var/lib/opkg/info/lighttpd-module-accesslog.control and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/info/lighttpd-module-accesslog.control differ
Files kncminer-0.98/ramdisk/var/lib/opkg/info/lighttpd-module-auth.control and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/info/lighttpd-module-auth.control differ
Files kncminer-0.98/ramdisk/var/lib/opkg/info/lighttpd-module-cgi.control and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/info/lighttpd-module-cgi.control differ
Files kncminer-0.98/ramdisk/var/lib/opkg/info/lighttpd-module-dirlisting.control and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/info/lighttpd-module-dirlisting.control differ
Files kncminer-0.98/ramdisk/var/lib/opkg/info/lighttpd-module-expire.control and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/info/lighttpd-module-expire.control differ
Files kncminer-0.98/ramdisk/var/lib/opkg/info/lighttpd-module-indexfile.control and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/info/lighttpd-module-indexfile.control differ
Files kncminer-0.98/ramdisk/var/lib/opkg/info/lighttpd-module-staticfile.control and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/info/lighttpd-module-staticfile.control differ
Files kncminer-0.98/ramdisk/var/lib/opkg/info/lighttpd.control and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/info/lighttpd.control differ
Files kncminer-0.98/ramdisk/var/lib/opkg/status and kncminer-0.98.1(beta)/ramdisk/var/lib/opkg/status differ
Files kncminer-0.98/ramdisk/www/pages/firmware_upgrade.html and kncminer-0.98.1(beta)/ramdisk/www/pages/firmware_upgrade.html differ

We are actually interested in /etc/init.d/initc.sh and /sbin/monitordcdc as other files are just some new versions or changed timestamps.

In initc.sh few lines were added at the end of file. First four lines sets DCDC1 voltage adjustment in controller board voltage controller to 1.450 V (value for 0.98 on my Mercury is 1.950 V). The rest sets GO flag in Slew rate register in order to apply voltage change. I am not sure what exactly is powered by this voltage.
Code:
v=56
i2cset -y 1 0x24 0xb 0x73
i2cset -y 1 0x24 0xe $v
i2cset -y 1 0x24 0xb 0x73
i2cset -y 1 0x24 0xe $v

i2cset -y 1 0x24 0xb 0x6c
i2cset -y 1 0x24 0x11 0x86
i2cset -y 1 0x24 0xb 0x6c
i2cset -y 1 0x24 0x11 0x86


Monitordcdc has more changes: Interval for checking VRMs that ouput zero current in monitordcdc was decreased from 15 minutes to 20 seconds (15 checks in 1minute vs 5 checks in 4secs). When VRM has more than 3 failures(=zero current output) in this 20 sec interval the die powered by this VRM is restarted (this was not present in 0.98). I am not sure why die 0 is restarted only when other dies have failed too (maybe die 0 is somehow connected to other dies?).

Code:
# restart die
if [ "$failed0" = "1" ] ; then
if [ "$failed_non0" = "1" ] ; then
i2cset -y 2 0x2$channel 0xe5 0
fi
fi
if [ "$failed1" = "1" ] ; then
i2cset -y 2 0x2$channel 0xe5 1
fi
if [ "$failed2" = "1" ] ; then
i2cset -y 2 0x2$channel 0xe5 2
fi
if [ "$failed3" = "1" ] ; then
i2cset -y 2 0x2$channel 0xe5 3
fi


Dies 1-3 are also restarted in the beginning of the script.

Code:
# Give them a kick!
i2cset -y 2 0x2$channel 0xe5 1 >/dev/null 2>&1
i2cset -y 2 0x2$channel 0xe5 2 >/dev/null 2>&1
i2cset -y 2 0x2$channel 0xe5 3 >/dev/null 2>&1