summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2018-01-21 16:33:34 +0100
committerHauke Mehrtens <hauke@hauke-m.de>2018-02-13 22:30:59 +0100
commit0bd5aa89fcf20dc5db073d925d5a08e779ae6292 (patch)
treebf3ef5c9cce89e22c43a566613860bd8d66fe5a9
parent4ccad922293a729369712026f647f85266322851 (diff)
downloadopenwrt-0bd5aa89fcf20dc5db073d925d5a08e779ae6292.tar.gz
openwrt-0bd5aa89fcf20dc5db073d925d5a08e779ae6292.tar.bz2
openwrt-0bd5aa89fcf20dc5db073d925d5a08e779ae6292.zip
mvebu: Migrate uci config to new PCIe path
The name of the PCIe controller node in device tree changed between kernel 4.9 and kernel 4.14. Migrate the configuration when an update from kernel 4.9 to 4.14 or back is done to the new name to make the existing wifi configuration compatible with the new names. This replaces the "pcie-controller" part with "pcie" on all nodes if the file exists in sys fs. This is not done in the uci-defualts, because they are getting executed to late in the boot process. The kernel module gets loaded before the uci-defaults scripts are executed. When the mwlwifi driver gets loaded it will trigger an event via hotplug to detect new devices and as the paths are not in the uci configuration they will be added again. When the migration is done before the script will detect that they are already there. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
-rw-r--r--target/linux/mvebu/base-files/etc/hotplug.d/ieee80211/00-wifi-config-migrate41
1 files changed, 41 insertions, 0 deletions
diff --git a/target/linux/mvebu/base-files/etc/hotplug.d/ieee80211/00-wifi-config-migrate b/target/linux/mvebu/base-files/etc/hotplug.d/ieee80211/00-wifi-config-migrate
new file mode 100644
index 0000000000..a8173b3117
--- /dev/null
+++ b/target/linux/mvebu/base-files/etc/hotplug.d/ieee80211/00-wifi-config-migrate
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+# The pcie-controller device was renamed to pcie in Linux kernel 4.14
+# commit 28fbb9c539e2 ("ARM: dts: marvell: fix PCI bus dtc warnings").
+# This script migrates the path in the UCI configuration from the old
+# name to the new name and also back, when am upgrade or downgrade is
+# done. It checks if the name exists before changing the configuration.
+# This has to be done before the 10-wifi-detect script from mac80211 is
+# executed because this would add the devices again under the new path
+# name.
+
+. /lib/functions.sh
+
+PATH_CHANGED=0
+
+rename_wifi_path() {
+ local path_old=$(uci get wireless.${1}.path)
+ local path_new=$(echo ${path_old} | sed "${2}")
+
+ if [ -e "/sys/devices/platform/${path_new}" ] && [ ${path_old} != ${path_new} ]
+ then
+ uci set wireless.${1}.path=${path_new}
+ PATH_CHANGED=1
+ fi
+}
+
+rename_wifi_path_list() {
+ # migration from kernel 4.9 to 4.14
+ rename_wifi_path $1 "s/soc:pcie-controller/soc:pcie/"
+ # migration from kernel 4.14 to 4.9
+ rename_wifi_path $1 "s/soc:pcie/soc:pcie-controller/"
+}
+
+[ "${ACTION}" = "add" ] && {
+ [ ! -e /etc/config/wireless ] && return
+
+ config_load wireless
+ config_foreach rename_wifi_path_list wifi-device
+
+ [ "$PATH_CHANGED" = "1" ] && uci commit wireless
+}