istoreos/target/linux/rockchip/rk35xx/base-files/lib/board/init.sh

301 lines
7.5 KiB
Bash
Executable File

#!/bin/sh
# based on https://github.com/6ang996/istoreos-rk356x/blob/rk356x/target/linux/rk356x/armv8/base-files/etc/init.d/rename_iface
. /lib/functions.sh
NPROCS="$(grep -c "^processor.*:" /proc/cpuinfo)"
PROC_MASK="$(( (1 << $NPROCS) - 1 ))"
PROC_MASK="$(printf %x "$PROC_MASK")"
rename_iface() {
ip link set $1 down && ip link set $1 name $2
}
get_iface_device() {
basename $(readlink /sys/class/net/$1/device)
}
set_iface_cpumask() {
local core_mask="$1"
local interface="$2"
local device="$3"
local irq
local seconds
local mq
local q
local queue_mask=$(( 0x${PROC_MASK} ^ 0x${core_mask} ))
queue_mask="$(printf %x "$queue_mask")"
local mq_mask="$4"
[[ -d "/sys/class/net/${interface}" ]] || return 1
[[ -n "${device}" && "${device}" = "${interface}-*" ]] && mq=1
[[ -z "${mq}" || "${device}" = "${interface}-0" ]] && ip link set dev "${interface}" up
[[ -z "${device}" ]] && device="$interface"
for seconds in $(seq 0 1); do
irq=$(grep -m1 " ${device}\$" /proc/interrupts | sed -n -e 's/^ *\([^ :]\+\):.*$/\1/p')
if [ -n "${irq}" ]; then
echo "${core_mask}" > /proc/irq/${irq}/smp_affinity
if [[ -z "${mq}" ]]; then
echo "${queue_mask}" > /sys/class/net/$interface/queues/rx-0/rps_cpus
echo "${queue_mask}" > /sys/class/net/$interface/queues/tx-0/xps_cpus
elif [[ "${device}" = "${interface}-0" ]]; then
[[ -n "$mq_mask" ]] || mq_mask="${queue_mask}"
for q in /sys/class/net/$interface/queues/rx-*; do
echo "$mq_mask" > "$q/rps_cpus"
done
# for q in /sys/class/net/$interface/queues/tx-*; do
# echo "$mq_mask" > "$q/xps_cpus"
# done
fi
return 0
fi
sleep 1
done
return 1
}
board_fixup_iface_name() {
local device
case $(board_name) in
friendlyelec,nanopi-r5c|\
fastrhino,r66s)
device="$(get_iface_device eth0)"
if [[ "$device" = "0001:11:00.0" ]]; then
rename_iface eth0 lan1
rename_iface eth1 eth0
rename_iface lan1 eth1
fi
;;
easepi,ars4|\
jsy,h1|\
hinlink,hnas|\
hinlink,opc-h66k)
device="$(get_iface_device eth1)"
if [[ "$device" = "0001:11:00.0" ]]; then
rename_iface eth0 lan1
rename_iface eth1 eth0
rename_iface lan1 eth1
fi
;;
lyt,t68m|\
fastrhino,r68s)
device="$(get_iface_device eth0)"
if [[ "$device" = "fe010000.ethernet" ]]; then
rename_iface eth0 wan
rename_iface eth1 eth0
rename_iface wan eth1
fi
device="$(get_iface_device eth3)"
if [[ "$device" = "0002:21:00.0" ]]; then
rename_iface eth2 lan3
rename_iface eth3 eth2
rename_iface lan3 eth3
fi
;;
firefly,rk3568-roc-pc)
device="$(get_iface_device eth0)"
if [[ "$device" = "fe010000.ethernet" ]]; then
rename_iface eth0 wan
rename_iface eth1 eth0
rename_iface wan eth1
fi
;;
friendlyelec,nanopi-r5s|friendlyelec,nanopi-r5s-c1)
device="$(get_iface_device eth2)"
# r5s lan1 is under pcie2x1
if [[ "$device" = "0000:01:00.0" ]]; then
rename_iface eth1 lan2
rename_iface eth2 eth1
rename_iface lan2 eth2
fi
;;
hinlink,opc-h68k)
device="$(get_iface_device eth1)"
if [[ "$device" = "fe010000.ethernet" ]]; then
rename_iface eth0 wan
rename_iface eth1 eth0
rename_iface wan eth1
fi
device="$(get_iface_device eth3)"
if [[ "$device" = "0001:11:00.0" ]]; then
rename_iface eth2 lan3
rename_iface eth3 eth2
rename_iface lan3 eth3
fi
;;
hinlink,opc-h69k)
device="$(get_iface_device eth2)"
if [[ "$device" = "0001:11:00.0" ]]; then
rename_iface eth1 lan2
rename_iface eth2 eth1
rename_iface lan2 eth2
fi
;;
hinlink,h88k-v3|\
friendlyelec,nanopi-r6s)
device="$(get_iface_device eth1)"
if [[ "$device" = "0004:41:00.0" ]]; then
rename_iface eth1 lan2
rename_iface eth2 eth1
rename_iface lan2 eth2
fi
;;
armsom,sige7-v1)
device="$(get_iface_device eth1)"
if [[ "$device" = "0004:41:00.0" ]]; then
rename_iface eth1 wan
rename_iface eth0 eth1
rename_iface wan eth0
fi
;;
inspur,ihec301)
device="$(get_iface_device eth1)"
if [[ "$device" = "fe1b0000.ethernet" ]]; then
rename_iface eth0 lan
rename_iface eth1 eth0
rename_iface lan eth1
fi
;;
esac
}
board_set_iface_smp_affinity() {
case $(board_name) in
inspur,ihec301|\
firefly,rk3568-roc-pc)
set_iface_cpumask 2 eth0
set_iface_cpumask 4 eth1
;;
armsom,sige1-v1|\
hinlink,opc-h69k|\
friendlyelec,nanopi-r5s|friendlyelec,nanopi-r5s-c1)
set_iface_cpumask 2 eth0
if ethtool -i eth1 | grep -Fq 'driver: r8169'; then
set_iface_cpumask 4 "eth1"
set_iface_cpumask 8 "eth2"
else
set_iface_cpumask 4 "eth1" "eth1-0" && \
set_iface_cpumask 4 "eth1" "eth1-16" && \
set_iface_cpumask 2 "eth1" "eth1-18" && \
set_iface_cpumask 8 "eth2" "eth2-0" && \
set_iface_cpumask 8 "eth2" "eth2-18" && \
set_iface_cpumask 1 "eth2" "eth2-16"
fi
;;
lyt,t68m|\
fastrhino,r68s|\
hinlink,opc-h68k)
set_iface_cpumask 1 "eth0"
set_iface_cpumask 2 "eth1"
if ethtool -i eth2 | grep -Fq 'driver: r8169'; then
set_iface_cpumask 4 "eth2"
set_iface_cpumask 8 "eth3"
else
set_iface_cpumask 4 "eth2" "eth2-0" && \
set_iface_cpumask 4 "eth2" "eth2-16" && \
set_iface_cpumask 2 "eth2" "eth2-18" && \
set_iface_cpumask 8 "eth3" "eth3-0" && \
set_iface_cpumask 8 "eth3" "eth3-18" && \
set_iface_cpumask 1 "eth3" "eth3-16"
fi
;;
jsy,h1|\
yyy,h1|\
easepi,ars4|\
friendlyelec,nanopi-r5c|\
fastrhino,r66s|\
hinlink,hnas|\
hinlink,opc-h66k)
if ethtool -i eth0 | grep -Fq 'driver: r8169'; then
set_iface_cpumask 4 "eth0"
set_iface_cpumask 8 "eth1"
else
set_iface_cpumask 2 "eth0" "eth0-0" && \
set_iface_cpumask 2 "eth0" "eth0-16" && \
set_iface_cpumask 8 "eth0" "eth0-18" && \
set_iface_cpumask 4 "eth1" "eth1-0" && \
set_iface_cpumask 4 "eth1" "eth1-18" && \
set_iface_cpumask 1 "eth1" "eth1-16"
fi
;;
armsom,sige7-v1|\
friendlyelec,nanopi-r6s|\
friendlyelec,nanopi-r6c)
set_iface_cpumask 2 eth0
if ethtool -i eth1 | grep -Fq 'driver: r8169'; then
set_iface_cpumask 4 "eth1"
set_iface_cpumask 8 "eth2"
else
set_iface_cpumask 4 "eth1" "eth1-0" f0 && \
set_iface_cpumask 4 "eth1" "eth1-16" && \
set_iface_cpumask 2 "eth1" "eth1-18" && \
set_iface_cpumask 8 "eth2" "eth2-0" f0 && \
set_iface_cpumask 8 "eth2" "eth2-18" && \
set_iface_cpumask 1 "eth2" "eth2-16"
fi
;;
hinlink,h88k-*|\
hinlink,h88k)
set_iface_cpumask 2 eth0
if ethtool -i eth1 | grep -Fq 'driver: r8169'; then
set_iface_cpumask 4 "eth1"
set_iface_cpumask 8 "eth2" && \
set_iface_cpumask 10 "eth3" && \
set_iface_cpumask 20 "eth4"
else
set_iface_cpumask 4 "eth1" "eth1-0" f0 && \
set_iface_cpumask 4 "eth1" "eth1-16" && \
set_iface_cpumask 2 "eth1" "eth1-18" && \
set_iface_cpumask 8 "eth2" "eth2-0" f0 && \
set_iface_cpumask 8 "eth2" "eth2-18" && \
set_iface_cpumask 1 "eth2" "eth2-16" && \
set_iface_cpumask 10 "eth3" "eth3-0" f0 && \
set_iface_cpumask 10 "eth3" "eth3-16" && \
set_iface_cpumask 8 "eth3" "eth3-18" && \
set_iface_cpumask 20 "eth4" "eth4-0" f0 && \
set_iface_cpumask 20 "eth4" "eth4-18" && \
set_iface_cpumask 4 "eth4" "eth4-16"
fi
;;
mangopi,m28k|\
hlink,h28k)
set_iface_cpumask 5 eth0
set_iface_cpumask b eth1
;;
ynn,nas|\
le,hes30|\
jp,tvbox|\
panther,x2|\
hsa,bh2)
set_iface_cpumask 2 "eth0"
;;
esac
}
board_wait_wifi() {
local seconds
[[ -f "/etc/uci-defaults/01-rk35xx-wifi" ]] || return 0
case $(board_name) in
hinlink,h88k-*|\
hinlink,h88k|\
hinlink,opc-h68k|\
hinlink,opc-h69k)
for seconds in $(seq 0 30); do
[[ -s /etc/config/wireless ]] && break
sleep 1
done
sleep 1
;;
esac
}
board_fixup_iface_name
board_set_iface_smp_affinity
board_wait_wifi