From 22429e62cb58db52f770f555f8d55bd5fcd24cc1 Mon Sep 17 00:00:00 2001 From: Arturo Buzarra Date: Tue, 19 Mar 2024 18:18:26 +0100 Subject: [PATCH] meta-digi-arm: add support for Worldwide regulatory domains - For Qualcomm QCA65x4 platforms: Add support to create the 'World' board data file for the QCA65x4 Wi-Fi chip to operate on World regulatory domain. Kernel wireless driver already supports selecting the correct file based on the configured Regulatory Domain via Kernel command line argument 'wlan.regdmn', which allows the following parameters: * "US", for U.S.A. (default) * "World", for worldwide - For Murata type2AE platforms: Add World CLM blob file for the wireless interface and JRL hcd file for the Bluetooth interface. Also add the autocountry ininitialization script and systemd service. World CLM blob file: - cyfmac4373-sdio_World.clm_blob (1abe7f3fa86d4123b0586cbbf0ec91ac) Kernel wireless and bluetooth drivers already support selecting the correct files based on the configured Regulatory Domain via Kernel command line arguments 'brcmfmac.regdmn' and 'btbcm.regdmn' respectively, which allow the following parameters: 'brcmfmac.regdmn': * "US", for U.S.A. (default) * "World", for worldwide 'btbcm.regdmn': * "FCC.CE", for U.S.A., Europe and the rest of the world (default) * "JRL", for Japan https://onedigi.atlassian.net/browse/DEL-8905 Co-authored-by: Gonzalo Ruiz Signed-off-by: Arturo Buzarra --- meta-digi-arm/conf/machine/ccmp13-dvk.conf | 2 +- meta-digi-arm/conf/machine/ccmp15-dvk.conf | 2 +- .../firmware-murata-infineon.bb | 40 +++++++++++++++++- .../cyfmac4373-sdio_World.clm_blob | Bin 0 -> 2020 bytes .../cyw4373-autocountry | 38 +++++++++++++++++ .../cyw4373-autocountry.service | 10 +++++ .../firmware-qualcomm/firmware-qualcomm.bb | 4 ++ 7 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyfmac4373-sdio_World.clm_blob create mode 100644 meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyw4373-autocountry create mode 100644 meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyw4373-autocountry.service diff --git a/meta-digi-arm/conf/machine/ccmp13-dvk.conf b/meta-digi-arm/conf/machine/ccmp13-dvk.conf index 7564a34d4..d448cba91 100644 --- a/meta-digi-arm/conf/machine/ccmp13-dvk.conf +++ b/meta-digi-arm/conf/machine/ccmp13-dvk.conf @@ -59,7 +59,7 @@ MACHINE_FEATURES += "wifi" # ========================================================================= # Firmware # ========================================================================= -MACHINE_FIRMWARE:append = " firmware-murata-infineon firmware-murata-infineon-mfgtest" +MACHINE_FIRMWARE:append = " firmware-murata-infineon" MACHINE_EXTRA_RRECOMMENDS += " \ ${MACHINE_FIRMWARE} \ diff --git a/meta-digi-arm/conf/machine/ccmp15-dvk.conf b/meta-digi-arm/conf/machine/ccmp15-dvk.conf index 9d4e5fd72..56f0a57ee 100644 --- a/meta-digi-arm/conf/machine/ccmp15-dvk.conf +++ b/meta-digi-arm/conf/machine/ccmp15-dvk.conf @@ -67,7 +67,7 @@ MACHINE_FEATURES += "gpu" # ========================================================================= # Firmware # ========================================================================= -MACHINE_FIRMWARE:append = " firmware-murata-infineon firmware-murata-infineon-mfgtest" +MACHINE_FIRMWARE:append = " firmware-murata-infineon" MACHINE_EXTRA_RRECOMMENDS += " \ ${MACHINE_FIRMWARE} \ 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 4377c33f2..ac9f11d92 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 @@ -1,4 +1,4 @@ -# Copyright (C) 2022,2024 Digi International Inc. +# Copyright (C) 2022-2024 Digi International Inc. SUMMARY = "Murata Infineon firmware binaries" SECTION = "base" @@ -12,6 +12,9 @@ SRC_URI = " \ 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://cyfmac4373-sdio_US.clm_blob \ + file://cyfmac4373-sdio_World.clm_blob \ + file://cyw4373-autocountry \ + file://cyw4373-autocountry.service \ " SRCREV_cyw-fmac-fw="db8deb03b8d24e5069ac4581d1c35b767012e926" @@ -35,11 +38,13 @@ do_install () { # Install Bluetooth patch *.HCD file # For Murata 2AE (LBEE5PK2AE-564) install -m 444 ${S}/cyw-bt-patch/BCM4373A0_001.001.025.0103.0155.FCC.CE.2AE.hcd ${D}${base_libdir}/firmware/brcm/BCM4373A0_FCC.CE.hcd + install -m 444 ${S}/cyw-bt-patch/BCM4373A0_001.001.025.0103.0156.JRL.2AE.hcd ${D}${base_libdir}/firmware/brcm/BCM4373A0_JRL.hcd # Install WLAN firmware file (*.bin) and Regulatory binary file (*.clm_blob) # For Murata 2AE (LBEE5PK2AE-564) install -m 444 ${S}/cyw-fmac-fw/cyfmac4373-sdio.2AE.bin ${D}${base_libdir}/firmware/cypress/cyfmac4373-sdio.bin install -m 444 cyfmac4373-sdio_US.clm_blob ${D}${base_libdir}/firmware/cypress/cyfmac4373-sdio_US.clm_blob + install -m 444 cyfmac4373-sdio_World.clm_blob ${D}${base_libdir}/firmware/cypress/cyfmac4373-sdio_World.clm_blob # Install NVRAM files (*.txt) # For Murata 2AE (LBEE5PK2AE-564) @@ -51,9 +56,31 @@ do_install () { else install -m 755 ${S}/cyw-fmac-utils-imx32/wl ${D}${sbindir} fi + + 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 + fi + + install -d ${D}${sysconfdir}/init.d/ + install -m 0755 ${WORKDIR}/cyw4373-autocountry ${D}${sysconfdir}/cyw4373-autocountry + ln -sf /etc/cyw4373-autocountry ${D}${sysconfdir}/init.d/cyw4373-autocountry } -PACKAGES =+ "${PN}-mfgtest" +inherit update-rc.d systemd + +INITSCRIPT_PACKAGES += "${PN}-autocountry" +INITSCRIPT_NAME:${PN}-autocountry = "cyw4373-autocountry" +INITSCRIPT_PARAMS:${PN}-autocountry = "start 19 2 3 4 5 . stop 21 0 1 6 ." + +SYSTEMD_PACKAGES = "${PN}-autocountry" +SYSTEMD_SERVICE:${PN}-autocountry = "cyw4373-autocountry.service" + +PACKAGES =+ " \ + ${PN}-mfgtest \ + ${PN}-autocountry \ +" FILES:${PN} = " \ ${base_libdir}/firmware \ @@ -63,6 +90,15 @@ FILES:${PN}-mfgtest = " \ ${sbindir} \ " +FILES:${PN}-autocountry = " \ + ${sysconfdir}/cyw4373-autocountry \ + ${sysconfdir}/init.d/cyw4373-autocountry \ + ${systemd_unitdir}/system/cyw4373-autocountry.service \ +" + +RDEPENDS:${PN}:append = " ${PN}-autocountry" +RDEPENDS:${PN}-autocountry:append = " ${PN}-mfgtest" + INSANE_SKIP:${PN} += "build-deps" INSANE_SKIP:${PN} += "file-rdeps" diff --git a/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyfmac4373-sdio_World.clm_blob b/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyfmac4373-sdio_World.clm_blob new file mode 100644 index 0000000000000000000000000000000000000000..4aef50d59ca8692cbba8f332a019ddf7bb15b012 GIT binary patch literal 2020 zcma)6O=x3P6h8O9pS&h%nx^eEooQo|K0^sMlVmba4Z|Zp?d!BAozk?!Ojj;K?UZR9 zw200^5K1XElq@V2Dip!2Mwo?LSFT*nN)%iSxD^C9x)9=b-@8exj5vqfeD9p|o$sA@ z-o39-cFLX74f zyz?MatJ@j^V;~T~>o-j^YnIGCvt_o;&P;aZR-shb zE3`_bX0y51Y&F|kds~P5hx@Jl_I{_;YPZ{+lP^y?olZWRFU)51v-w;+d$X8(vzWIi zolbA3AE%GfXXz)!;`a9T(c`0|GuRVv@BN^7_!E#*mzmgUmV)*VzPl5i6b7Az3 zipH_M86%x*8e=+F;c%boMhCoH5FT>q2)`Gcu}iWlPK(ml#yDsijj%!Hem{Q2b-Ebd zJ_?^b2_x4t(d!||H-MjFnI*N^R!=(OoAL-Nssll4Vm;T0J_q+NTnBOe8Ze9e8z9eM zy^ZJWu6&~10}9&$J_ASChgd(0reMEG{1&+uIEJW)P8jP)=)R174_+MnXFvn^1$4G# zVHSF$Sl*jeSyvqo#KvP&rpeWcpIIZ!nqo4 zWW_jhl1yh^1@+O8$rVvODoPdJS0BzQPAh9x~aGyU)JHT*dglk@LMQB0?p1CSFwdlkjy+ zgsc&=rYLEWPc3q?46;I$940@v7$pOwV>aXrlRZY(6>_eUGf7sQoFw`5jQd^4_{k1Z zCPa1^Re45vKk1kPS);D3B4h`oCU-U6Y=o93$fs10^^qMQzfvKxbSfJESB`mJYU$bw z`Wfu?!}2QW7%)}Bq8}&Wwq&65qAG5N<}Hsr/dev/null 2>/dev/null; then + systemd-cat -p "${1}" -t "${SCRIPTNAME}" printf "%s" "${2}" + else + logger -p "${1}" -t "${SCRIPTNAME}" "${2}" + fi +} + +# Only for Wireless variants +if [ -d "/proc/device-tree/wireless" ]; then + # Check if 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 + # Select WorldWide Country Code for use with Auto Contry Discovery + wl autocountry_default XZ + # 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/cyw4373-autocountry.service b/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyw4373-autocountry.service new file mode 100644 index 000000000..eeda03d77 --- /dev/null +++ b/meta-digi-arm/recipes-bsp/firmware-murata-infineon/firmware-murata-infineon/cyw4373-autocountry.service @@ -0,0 +1,10 @@ +[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 diff --git a/meta-digi-arm/recipes-bsp/firmware-qualcomm/firmware-qualcomm.bb b/meta-digi-arm/recipes-bsp/firmware-qualcomm/firmware-qualcomm.bb index fc3437f36..2737a910c 100644 --- a/meta-digi-arm/recipes-bsp/firmware-qualcomm/firmware-qualcomm.bb +++ b/meta-digi-arm/recipes-bsp/firmware-qualcomm/firmware-qualcomm.bb @@ -132,6 +132,10 @@ do_install() { length="$(expr $(stat -L -c %s ${D}${base_libdir}/firmware/qca/nvm_tlv_3.2.bin) - 4)" /bin/echo -ne "\x$(printf '%02x' $(expr $length % 256))" | dd of=${D}${base_libdir}/firmware/qca/nvm_tlv_3.2.bin bs=1 seek=1 count=1 conv=notrunc,fsync /bin/echo -ne "\x$(printf '%02x' $(expr $length / 256))" | dd of=${D}${base_libdir}/firmware/qca/nvm_tlv_3.2.bin bs=1 seek=2 count=1 conv=notrunc,fsync + + # Create World BDF file + cp ${D}${WIFI_FW_PATH}/bdwlan30_US.bin ${D}${WIFI_FW_PATH}/bdwlan30_World.bin + /bin/echo -ne "\x60\x00" | dd of="${D}${WIFI_FW_PATH}/bdwlan30_World.bin" bs=1 seek=12 count=2 conv=notrunc,fsync } QCA_MODEL ?= "qca6564"