[LEDE-DEV] [PATCH v3 06/10] mvebu: Migrate uci config to new PCIe path

Hauke Mehrtens hauke at hauke-m.de
Sun Feb 11 14:46:14 PST 2018


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 at hauke-m.de>
---
 .../etc/hotplug.d/ieee80211/00-wifi-config-migrate | 41 ++++++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 target/linux/mvebu/base-files/etc/hotplug.d/ieee80211/00-wifi-config-migrate

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
+}
-- 
2.11.0




More information about the Lede-dev mailing list