From 23c969f954d8f37c069185cd0dc6e868bc4ade2f Mon Sep 17 00:00:00 2001 From: Gonzalo Ruiz Date: Mon, 20 Apr 2026 17:28:41 +0200 Subject: [PATCH] firmware-murata-infineon: generalize autocountry service Make this service generic so it can be reused on every device containing a Murata+Infineon chip. In some platforms Worldwide pseudo-country could be 'XZ', in others it could be 'WW'. Cover both of them. In the meantime, improve the service to ensure the wifi device is available by waiting for udev device discovery to settle, retrying until the wireless interface responds to wl, and restarting the oneshot unit on failure. https://onedigi.atlassian.net/browse/DEL-9798 Signed-off-by: Gonzalo Ruiz --- .../firmware-murata-infineon.bb | 22 +++++------ .../{cyw4373-autocountry => autocountry} | 37 +++++++++++++++++-- .../autocountry.service | 13 +++++++ .../cyw4373-autocountry.service | 10 ----- 4 files changed, 58 insertions(+), 24 deletions(-) rename meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/{cyw4373-autocountry => autocountry} (53%) create mode 100644 meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/autocountry.service delete mode 100644 meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyw4373-autocountry.service diff --git a/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon.bb b/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon.bb index 09720143d..a26f61c7e 100644 --- a/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon.bb +++ b/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon.bb @@ -12,8 +12,8 @@ SRC_URI = " \ git://github.com/murata-wireless/cyw-bt-patch;protocol=http;branch=master;destsuffix=cyw-bt-patch;name=cyw-bt-patch \ git://github.com/murata-wireless/cyw-fmac-utils-imx32;protocol=http;branch=master;destsuffix=cyw-fmac-utils-imx32;name=cyw-fmac-utils-imx32 \ git://github.com/murata-wireless/cyw-fmac-utils-imx64;protocol=http;branch=master;destsuffix=cyw-fmac-utils-imx64;name=cyw-fmac-utils-imx64 \ - file://cyw4373-autocountry \ - file://cyw4373-autocountry.service \ + file://autocountry \ + file://autocountry.service \ " SRC_URI:append:ccmp1 = " \ @@ -57,14 +57,14 @@ do_install () { if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then # Install systemd unit files install -d ${D}${systemd_unitdir}/system/ - install -m 0644 ${WORKDIR}/cyw4373-autocountry.service ${D}${systemd_unitdir}/system/cyw4373-autocountry.service + install -m 0644 ${WORKDIR}/autocountry.service ${D}${systemd_unitdir}/system/autocountry.service fi install -d ${D}${sysconfdir}/init.d/ # Install autocountry service - install -m 0755 ${WORKDIR}/cyw4373-autocountry ${D}${sysconfdir}/cyw4373-autocountry - ln -sf /etc/cyw4373-autocountry ${D}${sysconfdir}/init.d/cyw4373-autocountry + install -m 0755 ${WORKDIR}/autocountry ${D}${sysconfdir}/autocountry + ln -sf /etc/autocountry ${D}${sysconfdir}/init.d/autocountry # Install WLAN client utility binary based on 32-bit/64-bit arch if [ ${TARGET_ARCH} = "aarch64" ]; then @@ -151,10 +151,10 @@ do_install:append:ccimx95 () { inherit update-rc.d systemd INITSCRIPT_PACKAGES += "${PN}-autocountry" -INITSCRIPT_NAME:${PN}-autocountry = "cyw4373-autocountry" +INITSCRIPT_NAME:${PN}-autocountry = "autocountry" INITSCRIPT_PARAMS:${PN}-autocountry = "start 19 2 3 4 5 . stop 21 0 1 6 ." -SYSTEMD_SERVICE:${PN}-autocountry = "cyw4373-autocountry.service" +SYSTEMD_SERVICE:${PN}-autocountry = "autocountry.service" SYSTEMD_PACKAGES = "${PN}-autocountry" PACKAGES =+ " \ @@ -171,16 +171,16 @@ FILES:${PN}-mfgtest = " \ " FILES:${PN}-autocountry = " \ - ${sysconfdir}/cyw4373-autocountry \ - ${sysconfdir}/init.d/cyw4373-autocountry \ - ${systemd_unitdir}/system/cyw4373-autocountry.service \ + ${sysconfdir}/autocountry \ + ${sysconfdir}/init.d/autocountry \ + ${systemd_unitdir}/system/autocountry.service \ " FILES:${PN}:append:ccmp2 = " \ ${sbindir}/mbt \ " -RDEPENDS:${PN}:append:ccmp1 = " ${PN}-autocountry" +RDEPENDS:${PN}:append = " ${PN}-autocountry" RDEPENDS:${PN}-autocountry:append = " ${PN}-mfgtest" INSANE_SKIP:${PN} += "build-deps" diff --git a/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyw4373-autocountry b/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/autocountry similarity index 53% rename from meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyw4373-autocountry rename to meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/autocountry index 1ea470a13..8e0baf582 100644 --- a/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyw4373-autocountry +++ b/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/autocountry @@ -1,7 +1,7 @@ #!/bin/sh #=============================================================================== # -# Copyright (C) 2024 by Digi International Inc. +# Copyright (C) 2024-2026, Digi International Inc. # All rights reserved. # # This program is free software; you can redistribute it and/or modify it @@ -9,7 +9,7 @@ # the Free Software Foundation. # # -# !Description: Enable Wireless autocountry feature (802.11d) +# !Description: Enable Infineon Wireless autocountry feature (802.11d) # #=============================================================================== @@ -23,9 +23,30 @@ log() { fi } +wait_for_wifi() { + timeout="${1:-30}" + count=0 + + while [ "${count}" -lt "${timeout}" ]; do + if wl country list >/dev/null 2>&1; then + return 0 + fi + + sleep 1 + count=$((count + 1)) + done + + return 1 +} + # Only for Wireless variants if [ -d "/proc/device-tree/wireless" ]; then - # Check if WorldWide regulatory domain is available + if ! wait_for_wifi 30; then + log warning "Wireless device not ready after waiting 30 seconds" + exit 1 + fi + + # Check if 'XZ' WorldWide regulatory domain is available if wl country list | grep -qs ^XZ; then # Select WorldWide Country Code as driver operational region wl country XZ/0 agg @@ -35,4 +56,14 @@ if [ -d "/proc/device-tree/wireless" ]; then wl autocountry 1 log info "Set WorldWide regulatory domain" fi + # Check if 'WW' WorldWide regulatory domain is available + if wl country list | grep -qs ^WW; then + # Select WorldWide Country Code as driver operational region + wl country WW/0 agg + # Select WorldWide Country Code for use with Auto Contry Discovery + wl autocountry_default WW + # Enable 802.11d + wl autocountry 1 + log info "Set WorldWide regulatory domain" + fi fi diff --git a/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/autocountry.service b/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/autocountry.service new file mode 100644 index 000000000..84665aba3 --- /dev/null +++ b/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/autocountry.service @@ -0,0 +1,13 @@ +[Unit] +Description=Infineon autocountry (802.11d) +Wants=systemd-udev-settle.service +After=systemd-udev-settle.service network.target suspend.target + +[Service] +Type=oneshot +ExecStart=/etc/autocountry +Restart=on-failure +RestartSec=5s + +[Install] +WantedBy=multi-user.target suspend.target diff --git a/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyw4373-autocountry.service b/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyw4373-autocountry.service deleted file mode 100644 index eeda03d77..000000000 --- a/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyw4373-autocountry.service +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=CYW4373 autocountry (802.11d) -After=network.target suspend.target - -[Service] -Type=oneshot -ExecStart=/etc/cyw4373-autocountry - -[Install] -WantedBy=multi-user.target suspend.target