diff --git a/patch/kernel/sunxi-next/OrangePI-16-h3-0d0c1ff54f2f61282d6f1e66e2f27eb3a4f31595.patch.disabled b/patch/kernel/sunxi-next/OrangePI-16-h3-0d0c1ff54f2f61282d6f1e66e2f27eb3a4f31595.patch.disabled deleted file mode 100644 index 81c387fe0..000000000 --- a/patch/kernel/sunxi-next/OrangePI-16-h3-0d0c1ff54f2f61282d6f1e66e2f27eb3a4f31595.patch.disabled +++ /dev/null @@ -1,73 +0,0 @@ -From 0d0c1ff54f2f61282d6f1e66e2f27eb3a4f31595 Mon Sep 17 00:00:00 2001 -From: Siarhei Siamashka -Date: Wed, 23 Dec 2015 11:49:42 +0200 -Subject: [PATCH] ARM: sun8i: Add SMP support for the Allwinner H3 - -The H3 is a quad Cortex-A7. Add the logic to use the IPs used to -control the CPU configuration and the CPU power so that we can -bring up secondary CPUs at boot. - -CPUCFG in H3 is similar to CPUCFG in A31, but not exactly the -same. H3 PRCM is not documented at all. The SMP code in the -Allwinner SDK is guarded by the same ifdefs for A31 and H3, so -at least bringing up secondary CPU cores is likely compatible -between these two SoC variants. - -Signed-off-by: Siarhei Siamashka ---- - arch/arm/boot/dts/sun8i-h3.dtsi | 11 +++++++++++ - arch/arm/mach-sunxi/platsmp.c | 6 ++++++ - 2 files changed, 17 insertions(+) - -diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi -index 0faa38a..d23ed84 100644 ---- a/arch/arm/boot/dts/sun8i-h3.dtsi -+++ b/arch/arm/boot/dts/sun8i-h3.dtsi -@@ -51,6 +51,7 @@ - cpus { - #address-cells = <1>; - #size-cells = <0>; -+ enable-method = "allwinner,sun6i-a31"; - - cpu@0 { - compatible = "arm,cortex-a7"; -@@ -591,5 +592,15 @@ - interrupts = , - ; - }; -+ -+ prcm@01f01400 { -+ compatible = "allwinner,sun8i-h3-prcm"; -+ reg = <0x01f01400 0x200>; -+ }; -+ -+ cpucfg@01f01c00 { -+ compatible = "allwinner,sun8i-h3-cpuconfig"; -+ reg = <0x01f01c00 0x300>; -+ }; - }; - }; -diff --git a/arch/arm/mach-sunxi/platsmp.c b/arch/arm/mach-sunxi/platsmp.c -index e8483ec7..8ca4064 100644 ---- a/arch/arm/mach-sunxi/platsmp.c -+++ b/arch/arm/mach-sunxi/platsmp.c -@@ -44,6 +44,9 @@ static void __init sun6i_smp_prepare_cpus(unsigned int max_cpus) - struct device_node *node; - - node = of_find_compatible_node(NULL, NULL, "allwinner,sun6i-a31-prcm"); -+ if (!node) -+ node = of_find_compatible_node(NULL, NULL, -+ "allwinner,sun8i-h3-prcm"); - if (!node) { - pr_err("Missing A31 PRCM node in the device tree\n"); - return; -@@ -57,6 +60,9 @@ static void __init sun6i_smp_prepare_cpus(unsigned int max_cpus) - - node = of_find_compatible_node(NULL, NULL, - "allwinner,sun6i-a31-cpuconfig"); -+ if (!node) -+ node = of_find_compatible_node(NULL, NULL, -+ "allwinner,sun8i-h3-cpuconfig"); - if (!node) { - pr_err("Missing A31 CPU config node in the device tree\n"); - return; diff --git a/scripts/armhwinfo b/scripts/armhwinfo index c85fea361..8eb7c5709 100644 --- a/scripts/armhwinfo +++ b/scripts/armhwinfo @@ -1,231 +1,279 @@ -#! /bin/bash +#!/bin/bash ### BEGIN INIT INFO # Provides: armhwinfo # Required-Start: # Required-Stop: glibc # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 -# Short-Description: Get some info about hardware for some ARM single board computers and set some basic things +# Short-Description: Armbian gathering informations about hardware ### END INIT INFO -# Immediately exit if not called from init system at startup -if [ "X$1" != "Xstart" ]; then - exit 1 -fi - export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -create_motd_warning() { +collect_informations() { + TMPFILE=$(mktemp /tmp/${0##*/}.XXXXXX) + trap "rm \"${TMPFILE}\" ; exit 0" 0 1 2 3 15 + dmesg >"${TMPFILE}" + SERVER_IP=$(hostname -I) + CORES=$(grep -c ^processor /proc/cpuinfo) + MEMTOTAL=$(( $(awk -F" " '/^MemTotal/ {print $2}' /sys/block/$i/queue/scheduler; + echo -e "[\e[0;32m ok \x1B[0m] Setting cfg I/O scheduler for $i" + + # solid state drives + elif [ "$ROTATE" = 0 ]; then echo noop >/sys/block/$i/queue/scheduler; + echo -e "[\e[0;32m ok \x1B[0m] Setting noop I/O scheduler for $i" + fi + done +} # set_io_scheduler + +do_initialisation() { + # parse /etc/armbian-boards.conf and adjust everything + : +} # do_initialisation + +detect_board() { + if [ "$ARCH" = "armv7l" ]; then + if [ $HARDWARE = "ODROID-XU3" ]; then + ID="Odroid XU4" + fi + if [ $HARDWARE = "Marvell" ]; then + ID="Clearfog" + fi + if [ $HARDWARE = "gs705a" ]; then + ID="Guitar" + fi + if [ $HARDWARE = "sun4i" ] || [ $HARDWARE = "Allwinner" ]; then + ID="Cubieboard" + fi + if [ $HARDWARE = "sun7i" ] || [ $HARDWARE = "Allwinner" ]; then + # redistribute irq to dedicated core + if [ "$INTERUPT" != "" ] && [ "$CORES" -gt 1 ]; then + echo 2 >/proc/irq/$(awk -F":" '/eth0/ {print $1}' /sys/class/leds/green_led/trigger + echo 200 >/sys/class/leds/green_led/delay_off + echo 200 >/sys/class/leds/green_led/delay_on + [ -f "/root/.not_logged_in_yet" ] && BlinkTime=30 || BlinkTime=3 + (sleep ${BlinkTime} && echo none >/sys/class/leds/green_led/trigger) & + fi + + # redistribute USB irqs to dedicated cores + echo 2 >/proc/irq/$(awk -F":" "/${USB1}/ {print \$1}" /proc/irq/$(awk -F":" "/${USB2}/ {print \$1}" /dev/null # OPi One + if [ "$TERMINUS" != "" ]; then + # Ethernet irqs on cpu3 + echo 8 >/proc/irq/$(awk -F":" "/${GbE}/ {print \$1}" /proc/irq/$(awk -F":" "/${WiFi}/ {print \$1}" /proc/irq/$(awk -F":" "/${USB3}/ {print \$1}" /proc/irq/$(awk -F":" "/${GbE}/ {print \$1}" >${Log} + else + echo "$(date) $HARDWARE $ARCH $KERNELID $MACHINE $ID" >>${Log} + chmod 755 ${Log} + fi + echo "${VERSION}" >>${Log} + echo -e "\n### dmesg:\n" >>${Log} + cat "${TMPFILE}" >>${Log} + echo -e "\n### lsusb:" >>${Log} + lsusb -v 2>/dev/null >>${Log} + echo -e "\n### lscpu:\n" >>${Log} + lscpu >>${Log} + echo -e "\n### cpuinfo:\n" >>${Log} + cat /proc/cpuinfo >>${Log} + echo -e "\n### meminfo:\n" >>${Log} + cat /proc/meminfo >>${Log} + echo -e "\n### interrupts:\n" >>${Log} + cat /proc/interrupts >>${Log} + echo -e "\n### ifconfig:\n" >>${Log} + ifconfig >>${Log} + echo -e "\n### df:\n" >>${Log} + df -h >>${Log} + # TODO: logrotate is missing +} # log_hardware_info + +show_motd_warning() { cat > /etc/update-motd.d/90-warning <"${TMPFILE}" -SERVER_IP=$(hostname -I) -CORES=$(grep -c ^processor /proc/cpuinfo) -MEMTOTAL=$(( $(awk -F" " '/^MemTotal/ {print $2}' /var/run/machine.id + log_hardware_info -for i in $( lsblk -idn -o NAME ); do - read ROTATE /sys/block/$i/queue/scheduler; - echo -e "[\e[0;32m ok \x1B[0m] Setting cfg I/O scheduler for $i" - - # solid state drives - elif [ "$ROTATE" = 0 ]; then echo noop > /sys/block/$i/queue/scheduler; - echo -e "[\e[0;32m ok \x1B[0m] Setting noop I/O scheduler for $i" - fi -done - -if [ "$ARCH" = "armv7l" ]; then - if [ $HARDWARE = "ODROID-XU3" ]; then - ID="Odroid XU4" - fi - if [ $HARDWARE = "Marvell" ]; then - ID="Clearfog" - fi - if [ $HARDWARE = "gs705a" ]; then - ID="Guitar" - fi - if [ $HARDWARE = "sun4i" ] || [ $HARDWARE = "Allwinner" ]; then - ID="Cubieboard" - fi - if [ $HARDWARE = "sun7i" ] || [ $HARDWARE = "Allwinner" ]; then - # redistribute irq to dedicated core - if [ "$INTERUPT" != "" ] && [ "$CORES" -gt 1 ]; then - echo 2 >/proc/irq/$(awk -F":" '/eth0/ {print $1}' /sys/class/leds/green_led/trigger - echo 200 >/sys/class/leds/green_led/delay_off - echo 200 >/sys/class/leds/green_led/delay_on - [ -f "/root/.not_logged_in_yet" ] && BlinkTime=30 || BlinkTime=3 - (sleep ${BlinkTime} && echo none >/sys/class/leds/green_led/trigger) & + # crash detection, enable verbose logging and disable it at clean shutdown + echo "$(date "+%s") $HARDWARE $ARCH $KERNELID $MACHINE $ID $VERSION" >/boot/.verbose + sync + ;; + query) + # armbianmonitor mode -- only interested in hardware info + collect_informations >/dev/null + detect_board >/dev/null + export HARDWARE ARCH KERNELID MACHINE ID VERSION + ;; + *stop*) + # remove /boot/.verbose only if /boot/.force-verbose doesn't exist. + # If our users demand verbose messages they get them + if [ -f /boot/.verbose ! -a -f /boot/.force-verbose ]; then + rm /boot/.verbose fi - - # redistribute USB irqs to dedicated cores - echo 2 >/proc/irq/$(awk -F":" "/${USB1}/ {print \$1}" /proc/irq/$(awk -F":" "/${USB2}/ {print \$1}" /dev/null # OPi One - if [ "$TERMINUS" != "" ]; then - # Ethernet irqs on cpu3 - echo 8 >/proc/irq/$(awk -F":" "/${GbE}/ {print \$1}" /proc/irq/$(awk -F":" "/${WiFi}/ {print \$1}" /proc/irq/$(awk -F":" "/${USB3}/ {print \$1}" /proc/irq/$(awk -F":" "/${GbE}/ {print \$1}" /var/run/machine.id -export HARDWARE DISTROID DISTROCODE ARCH KERNELID MACHINE ID - -if [ -f /var/log/armhwinfo.log ]; then - echo -e "\n\n\n$(date) $HARDWARE $DISTROID $DISTROCODE $ARCH $KERNELID $MACHINE $ID" >>/var/log/armhwinfo.log -else - echo "$(date) $HARDWARE $DISTROID $DISTROCODE $ARCH $KERNELID $MACHINE $ID" >>/var/log/armhwinfo.log - chmod 755 /var/log/armhwinfo.log -fi -cat /proc/version >>/var/log/armhwinfo.log -echo -e "\n### dmesg:\n" >>/var/log/armhwinfo.log -cat "${TMPFILE}" >>/var/log/armhwinfo.log -echo -e "\n### lsusb:" >>/var/log/armhwinfo.log -lsusb -v >>/var/log/armhwinfo.log -echo -e "\n### lscpu:\n" >>/var/log/armhwinfo.log -lscpu >>/var/log/armhwinfo.log -echo -e "\n### cpuinfo:\n" >>/var/log/armhwinfo.log -cat /proc/cpuinfo >>/var/log/armhwinfo.log -echo -e "\n### meminfo:\n" >>/var/log/armhwinfo.log -cat /proc/meminfo >>/var/log/armhwinfo.log -echo -e "\n### interrupts:\n" >>/var/log/armhwinfo.log -cat /proc/interrupts >>/var/log/armhwinfo.log -echo -e "\n### ifconfig:\n" >>/var/log/armhwinfo.log -ifconfig >>/var/log/armhwinfo.log -echo -e "\n### df:\n" >>/var/log/armhwinfo.log -df -h >>/var/log/armhwinfo.log + ;; +esac