From 7d3a57f4d3b902d9d351ee6523eb17148eff8c43 Mon Sep 17 00:00:00 2001
From: Gauthier Provost <gauthier@kobol.io>
Date: Tue, 4 Dec 2018 14:58:32 +0800
Subject: [PATCH] Helios4: Add mdadm script and config to display error on
 Fault LED

---
 config/sources/mvebu-helios4.inc        | 31 ++++++++++++++-----
 packages/bsp/helios4/mdadm-fault-led.sh | 41 +++++++++++++++++++++++++
 2 files changed, 65 insertions(+), 7 deletions(-)
 create mode 100644 packages/bsp/helios4/mdadm-fault-led.sh

diff --git a/config/sources/mvebu-helios4.inc b/config/sources/mvebu-helios4.inc
index 743e0463b..45ef29678 100644
--- a/config/sources/mvebu-helios4.inc
+++ b/config/sources/mvebu-helios4.inc
@@ -31,20 +31,37 @@ case $BRANCH in
 esac
 
 
-# Helios4 tweak : install and configure fancontrol
+# Helios4 tweak
 family_tweaks_s()
 {
-	chroot $SDCARD /bin/bash -c "apt-get -y -qq install fancontrol >/dev/null 2>&1"
+	# install fancontrol and mdadm
+	chroot $SDCARD /bin/bash -c "apt-get -y -qq install fancontrol mdadm >/dev/null 2>&1"
+
+	### Fancontrol tweaks
+
+	# copy hwmon rules to fix device mapping
+	cp $SRC/packages/bsp/helios4/90-helios4-hwmon.rules $SDCARD/etc/udev/rules.d/
+
+	# patch fancontrol
 	patch $SDCARD/usr/sbin/fancontrol $SRC/packages/bsp/helios4/fancontrol.patch
-	cp -R $SRC/packages/bsp/helios4/90-helios4-hwmon.rules $SDCARD/etc/udev/rules.d/
+
+	# copy fancontrol config
 	case $BRANCH in
 	default)
-		cp -R $SRC/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-default.conf $SDCARD/etc/fancontrol
+		cp $SRC/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-default.conf $SDCARD/etc/fancontrol
 		;;
-
 	next)
-		cp -R $SRC/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-next.conf $SDCARD/etc/fancontrol
+		cp $SRC/packages/bsp/helios4/fancontrol_pwm-fan-mvebu-next.conf $SDCARD/etc/fancontrol
 		;;
 	esac
-}
 
+	### Mdadm tweaks
+
+	# copy mdadm-fault-led script and set right permission
+	cp $SRC/packages/bsp/helios4/mdadm-fault-led.sh $SDCARD/usr/sbin/
+	chmod a+x $SDCARD/usr/sbin/mdadm-fault-led.sh
+
+	# modify mdadm configuration
+	echo -e "\n # Trigger Fault Led script when an event is detected" >> $SDCARD/etc/mdadm/mdadm.conf
+	echo -e "PROGRAM /usr/sbin/mdadm-fault-led.sh" >> $SDCARD/etc/mdadm/mdadm.conf
+}
diff --git a/packages/bsp/helios4/mdadm-fault-led.sh b/packages/bsp/helios4/mdadm-fault-led.sh
new file mode 100644
index 000000000..29254fcab
--- /dev/null
+++ b/packages/bsp/helios4/mdadm-fault-led.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+#
+# Make Red Fault LED (LED2) reports mdadm error events.
+#
+EVENT=$1
+
+# RED Fault LED trigger
+# trigger none = LED not-blinking if LED on
+# trigger timer = LED blinking if LED on
+TRIGGER=/sys/class/leds/helios4\:red\:fault/trigger
+
+# RED Fault LED brightness
+# britghness 0 = LED off
+# britghness 1 = LED on
+BRIGHTNESS=/sys/class/leds/helios4\:red\:fault/brightness
+
+# Active component device of an array has been marked as faulty OR A newly noticed array appears to be degraded.
+if [[ $EVENT == "Fail" || $EVENT == "DegradedArray" ]]; then
+    echo none > $TRIGGER
+    echo 1 > $BRIGHTNESS
+fi
+
+# An md array started reconstruction
+if [ $EVENT == "RebuildStarted" ]; then
+    echo timer > $TRIGGER
+    echo 1 > $BRIGHTNESS
+fi
+
+# A spare component device which was being rebuilt to replace a faulty device has been successfully rebuilt and has been made active
+if [ $EVENT == "SpareActive" ]; then
+    echo none > $TRIGGER
+    echo 0 > $BRIGHTNESS
+fi
+
+# Test RED Fault LED
+if [ $EVENT == "TestMessage" ]; then
+    echo timer > $TRIGGER
+    echo 1 > $BRIGHTNESS
+    sleep 5
+    echo 0 > $BRIGHTNESS
+fi