From 0bd5aa89fcf20dc5db073d925d5a08e779ae6292 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 21 Jan 2018 16:33:34 +0100 Subject: [PATCH] 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 --- .../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 00000000000..a8173b3117e --- /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 +}