diff --git a/config/boards/nanopineo3.wip b/config/boards/nanopineo3.conf similarity index 86% rename from config/boards/nanopineo3.wip rename to config/boards/nanopineo3.conf index 5089a04fde..fdaa716123 100644 --- a/config/boards/nanopineo3.wip +++ b/config/boards/nanopineo3.conf @@ -8,4 +8,4 @@ MODULES="g_serial" MODULES_BLACKLIST="rockchipdrm analogix_dp dw_mipi_dsi dw_hdmi gpu_sched lima" SERIALCON="ttyS2:1500000,ttyGS0" BUILD_DESKTOP="no" -BOOT_FDT_FILE="rockchip/rk3328-nanopi-r2-rev00.dtb" +BOOT_FDT_FILE="rockchip/rk3328-nanopi-neo3-rev02.dtb" diff --git a/packages/bsp/common/etc/update-motd.d/30-armbian-sysinfo b/packages/bsp/common/etc/update-motd.d/30-armbian-sysinfo index cb69ad764b..b8d9c9c89e 100755 --- a/packages/bsp/common/etc/update-motd.d/30-armbian-sysinfo +++ b/packages/bsp/common/etc/update-motd.d/30-armbian-sysinfo @@ -17,7 +17,8 @@ MOTD_DISABLE="" STORAGE=/dev/sda1 SHOW_IP_PATTERN="^bond.*|^[ewr].*|^br.*|^lt.*|^umts.*|^lan.*" -CPU_TEMP_LIMIT=45 +CPU_TEMP_LIMIT=60 +HDD_TEMP_LIMIT=60 AMB_TEMP_LIMIT=40 [[ -f /etc/default/armbian-motd ]] && . /etc/default/armbian-motd @@ -123,13 +124,6 @@ function ambienttemp() { fi } # ambienttemp -#function get_ip_addresses() { -# # return up to 2 IPv4 address(es) comma separated -# hostname -I | tr " " "\n" | \ -# grep -E "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$" | \ -# tail -n2 | sed ':a;N;$!ba;s/\n/,/g' -#} # get_ip_addresses - function get_ip_addresses() { local ips=() for f in /sys/class/net/*; do @@ -155,9 +149,15 @@ function storage_info() { if [[ -n "${StorageInfo}" && ${RootInfo} != *$STORAGE* ]]; then storage_usage=$(awk '/\// {print $(NF-1)}' <<<${StorageInfo} | sed 's/%//g') storage_total=$(awk '/\// {print $(NF-4)}' <<<${StorageInfo}) + if [[ -n "$(command -v smartctl)" ]]; then + DISK="${STORAGE::-1}" + storage_temp+=$(sudo smartctl -A $DISK 2> /dev/null | grep -i temperature | awk '{print $(NF-2)}') + fi fi } # storage_info + + # query various systems and send some stuff to the background for overall faster execution. # Works only with ambienttemp and batteryinfo since A20 is slow enough :) amb_temp=$(ambienttemp &) @@ -165,7 +165,7 @@ ip_address=$(get_ip_addresses &) batteryinfo storage_info getboardtemp -critical_load=$(( 1 + $(grep -c processor /proc/cpuinfo) / 2 )) +critical_load=80 # get uptime, logged in users and load in one take UPTIME=$(LC_ALL=C uptime) @@ -175,33 +175,54 @@ users=${UPT2//*','} users=${users//' '} time=${UPT2%','*} time=${time//','} +time=$(echo $time | xargs) load=${UPTIME#*'load average: '} load=${load//','} +load=$(echo $load | cut -d" " -f1) +[[ $load == 0.0* ]] && load=0.10 +cpucount=$(grep -c processor /proc/cpuinfo) + +load=$(awk '{printf("%.0f",($1/$2) * 100)}' <<< "$load $cpucount") # memory and swap mem_info=$(LC_ALL=C free -w 2>/dev/null | grep "^Mem" || LC_ALL=C free | grep "^Mem") memory_usage=$(awk '{printf("%.0f",(($2-($4+$6+$7))/$2) * 100)}' <<<${mem_info}) -memory_total=$(awk '{printf("%d",$2/1024)}' <<<${mem_info}) +mem_info=$(echo $mem_info | awk '{print $2}') +memory_total=$(( mem_info / 1024 )) swap_info=$(LC_ALL=C free -m | grep "^Swap") swap_usage=$( (awk '/Swap/ { printf("%3.0f", $3/$2*100) }' <<<${swap_info} 2>/dev/null || echo 0) | tr -c -d '[:digit:]') swap_total=$(awk '{print $(2)}' <<<${swap_info}) # display info -display "System load" "${load%% *}" "${critical_load}" "0" "" "${load#* }" +display "System load" "${load%% *}" "${critical_load}" "0" "%" "" + printf "Up time: \x1B[92m%s\x1B[0m\t\t" "$time" display "Local users" "${users##* }" "3" "2" "" echo "" # fixed newline -display "Memory usage" "$memory_usage" "70" "0" " %" " of ${memory_total}MB" -display "Zram usage" "$swap_usage" "75" "0" " %" " of $swap_total""Mb" +if [[ ${memory_total} -gt 1000 ]]; then + memory_total=$(awk '{printf("%.2f",$1/1024)}' <<<${memory_total})"G" +else + memory_total+="M" +fi + +if [[ ${swap_total} -gt 500 ]]; then + swap_total=$(awk '{printf("%.2f",$1/1024)}' <<<${swap_total})"G" +else + swap_total+="M" +fi + +display "Memory usage" "$memory_usage" "70" "0" "%" " of ${memory_total}" +display "Zram usage" "$swap_usage" "75" "0" "%" " of ${swap_total}" printf "IP: " printf "\x1B[92m%s\x1B[0m" "$ip_address" echo "" # fixed newline a=0;b=0;c=0 -display "CPU temp" "$board_temp" $CPU_TEMP_LIMIT "0" "°C" "" ; a=$? -display "Ambient temp" "$amb_temp" $AMB_TEMP_LIMIT "0" "°C" "" ; b=$? +display "CPU temp" "$board_temp" $CPU_TEMP_LIMIT "0" "°C" "" +display "Ambient temp" "$amb_temp" $AMB_TEMP_LIMIT "0" "°C" "" ; a=$? (( ($a+$b) >0 )) && echo "" # new line only if some value is displayed display "Usage of /" "$root_usage" "90" "1" "%" " of $root_total" display "storage/" "$storage_usage" "90" "1" "%" " of $storage_total" +display "storage temp" "$storage_temp" $HDD_TEMP_LIMIT "0" "°C" "" ; a=$? display "Battery" "$battery_percent" "20" "1" "%" "$status_battery_text" echo "" echo "" diff --git a/packages/bsp/common/usr/lib/armbian/armbian-zram-config b/packages/bsp/common/usr/lib/armbian/armbian-zram-config index de76352fb1..58c97462dc 100755 --- a/packages/bsp/common/usr/lib/armbian/armbian-zram-config +++ b/packages/bsp/common/usr/lib/armbian/armbian-zram-config @@ -40,7 +40,8 @@ activate_zram_swap() { # Expose 50% of real memory as swap space by default zram_percent=${ZRAM_PERCENTAGE:=50} mem_info=$(LC_ALL=C free -w 2>/dev/null | grep "^Mem" || LC_ALL=C free | grep "^Mem") - memory_total=$(awk '{printf("%d",$2*1024)}' <<<${mem_info}) + mem_info=$(echo $mem_info | awk '{print $2}') + memory_total=$(( mem_info * 1024 )) mem_per_zram_device=$(( ${memory_total} / ${zram_devices} * ${zram_percent} / 100 )) # Limit memory available to zram to 50% by default diff --git a/patch/kernel/rockchip64-current/add-board-xxx-nanopi-Neo3-with-enabled-I2S-and-spdif.patch b/patch/kernel/rockchip64-current/add-board-xxx-nanopi-Neo3-with-enabled-I2S-and-spdif.patch new file mode 100644 index 0000000000..43e6adacf3 --- /dev/null +++ b/patch/kernel/rockchip64-current/add-board-xxx-nanopi-Neo3-with-enabled-I2S-and-spdif.patch @@ -0,0 +1,228 @@ +From 3d8e4be5ff1783dffc6cad7d69f06366e0eb5d6c Mon Sep 17 00:00:00 2001 +From: Igor Pecovnik +Date: Mon, 7 Sep 2020 21:21:55 +0200 +Subject: [PATCH] Add Nanopi Neo3 with enabled I2S and spdif + +Signed-off-by: Igor Pecovnik +--- + arch/arm64/boot/dts/rockchip/Makefile | 1 + + .../dts/rockchip/rk3328-nanopi-neo3-rev02.dts | 195 ++++++++++++++++++ + 2 files changed, 196 insertions(+) + create mode 100644 arch/arm64/boot/dts/rockchip/rk3328-nanopi-neo3-rev02.dts + +diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile +index f769eb1d1..b8e6e86e0 100644 +--- a/arch/arm64/boot/dts/rockchip/Makefile ++++ b/arch/arm64/boot/dts/rockchip/Makefile +@@ -8,6 +8,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-a1.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-evb.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-nanopi-r2-rev00.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-nanopi-r2-rev20.dtb ++dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-nanopi-neo3-rev02.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-rock-pi-e.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-rock64.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3328-roc-cc.dtb +diff --git a/arch/arm64/boot/dts/rockchip/rk3328-nanopi-neo3-rev02.dts b/arch/arm64/boot/dts/rockchip/rk3328-nanopi-neo3-rev02.dts +new file mode 100644 +index 000000000..bf0a625fe +--- /dev/null ++++ b/arch/arm64/boot/dts/rockchip/rk3328-nanopi-neo3-rev02.dts +@@ -0,0 +1,195 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2019 FriendlyElec Computer Tech. Co., Ltd. ++ * (http://www.friendlyarm.com) ++ */ ++ ++/dts-v1/; ++#include ++#include "rk3328-nanopi-r2-common.dtsi" ++ ++/ { ++ model = "FriendlyElec NanoPi NEO3"; ++ compatible = "friendlyelec,nanopi-neo3", "rockchip,rk3328"; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ autorepeat; ++ ++ pinctrl-names = "default"; ++ pinctrl-0 = <&gpio_key1>; ++ ++ button@0 { ++ gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_LOW>; ++ label = "reset"; ++ linux,code = ; ++ linux,input-type = <1>; ++ gpio-key,wakeup = <1>; ++ debounce-interval = <100>; ++ }; ++ }; ++ ++ i2s-sound { ++ compatible = "simple-audio-card"; ++ simple-audio-card,format = "i2s"; ++ simple-audio-card,mclk-fs = <256>; ++ simple-audio-card,name = "I2S Out"; ++ status = "okay"; ++ ++ simple-audio-card,cpu { ++ sound-dai = <&i2s1>; ++ }; ++ ++ simple-audio-card,codec { ++ sound-dai = <&pcm5102>; ++ }; ++ }; ++ ++ pcm5102: pcm510x { ++ #sound-dai-cells = <0>; ++ compatible = "ti,pcm5102a"; ++ pcm510x,format = "i2s"; ++ }; ++ ++ sound-spdif { ++ compatible = "simple-audio-card"; ++ simple-audio-card,name = "SPDIF"; ++ simple-audio-card,cpu { ++ sound-dai = <&spdif>; ++ }; ++ simple-audio-card,codec { ++ sound-dai = <&spdif_out>; ++ }; ++ }; ++ ++ spdif_out: spdif-out { ++ compatible = "linux,spdif-dit"; ++ #sound-dai-cells = <0>; ++ }; ++ ++ vcc_rtl8153: vcc-rtl8153-regulator { ++ compatible = "regulator-fixed"; ++ gpio = <&gpio2 RK_PC6 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&usb30_en_drv>; ++ regulator-always-on; ++ regulator-name = "vcc_rtl8153"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ off-on-delay-us = <5000>; ++ enable-active-high; ++ }; ++}; ++ ++&mach { ++ hwrev = <2>; ++ model = "NanoPi NEO3"; ++}; ++ ++&i2s1 { ++ rockchip,playback-channels = <2>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2s1_mclk ++ &i2s1_sclk ++ &i2s1_lrcktx ++ &i2s1_lrckrx ++ &i2s1_sdo ++ &i2s1_sdi>; ++ status = "okay"; ++}; ++ ++&spdif { ++ status = "okay"; ++ pinctrl-0 = <&spdifm0_tx>; ++}; ++ ++&emmc { ++ status = "disabled"; ++}; ++ ++&i2c0 { ++ status = "okay"; ++}; ++ ++&leds { ++ status = "okay"; ++ ++}; ++ ++&leds_gpio { ++ rockchip,pins = ++ <0 RK_PA2 RK_FUNC_GPIO &pcfg_pull_none>; ++}; ++ ++&pwm2 { ++ pinctrl-names = "default", "sleep"; ++ pinctrl-1 = <&pwm2_sleep_pin>; ++ status = "okay"; ++}; ++ ++&rk805 { ++ interrupt-parent = <&gpio1>; ++ interrupts = ; ++}; ++ ++&vccio_sd { ++ status = "okay"; ++}; ++ ++&io_domains { ++ vccio3-supply = <&vccio_sd>; ++}; ++ ++&sdmmc { ++ vqmmc-supply = <&vccio_sd>; ++ max-frequency = <150000000>; ++ sd-uhs-sdr50; ++ sd-uhs-sdr104; ++ status = "okay"; ++}; ++ ++&sdmmc_ext { ++ status = "disabled"; ++}; ++ ++&sdio_pwrseq { ++ status = "disabled"; ++}; ++ ++&pinctrl { ++ pmic { ++ pmic_int_l: pmic-int-l { ++ rockchip,pins = <1 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>; ++ }; ++ }; ++ ++ pwm { ++ pwm2_sleep_pin: pwm2-sleep-pin { ++ rockchip,pins = <2 RK_PA6 RK_FUNC_GPIO &pcfg_output_low>; ++ }; ++ }; ++ ++ rockchip-key { ++ gpio_key1: gpio-key1 { ++ rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ usb { ++ otg_vbus_drv: otg-vbus-drv { ++ rockchip,pins = <1 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ usb30_en_drv: usb30-en-drv { ++ rockchip,pins = <2 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++}; ++ ++&uart1{ ++ status = "okay"; ++ pinctl-0 = <&uart1_xfer>; ++}; ++ +-- +Created with Armbian build tools https://github.com/armbian/build +