From: Scott Murray Date: Sat, 19 Dec 2020 23:04:41 +0000 (-0500) Subject: meta-agl-bsp: enable HCI UART for i.MX8MQ EVK X-Git-Tag: 10.92.0~16 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=5a7790e8b10d6a01fb405f1893167ddec58f5faa;p=AGL%2Fmeta-agl.git meta-agl-bsp: enable HCI UART for i.MX8MQ EVK Changes: - Remove explicit "not set" options in btusb.cfg kernel configuration fragment to avoid over-riding BSP configuration. - Add helper script and systemd unit to detect HCI UART device on i.MX8MQ EVK and EVKB and run hciattach as necessary. While logic has been added for the QCA6174 on the i.MX8MQ EVK, note that it has not been tested due to lack of hardware availability to test. Bug-AGL: SPEC-3545, SPEC-3681 Signed-off-by: Scott Murray Change-Id: Iae3a58ccfbdb31698ae012ab7d03c9259ac83013 Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/25842 Tested-by: Jenkins Job builder account ci-image-build: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account --- diff --git a/meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc b/meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc index 50567583c..bc0f76810 100644 --- a/meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc +++ b/meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc @@ -7,6 +7,9 @@ IMX_DEFAULT_KERNEL_imx8mqevk = "linux-fslc-imx" # For EVKB wifi support MACHINE_FEATURES_append = " bcm4356" +# Add helper to drive setting up HCI UART device +MACHINE_EXTRA_RRECOMMENDS_append = " hci-uart-helper" + # Disable meta-freescale package architecure mangling, as it causes # issues with AGL's explicit setting of DEFAULTTUNE. INHERIT_remove = "fsl-dynamic-packagearch" diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service new file mode 100644 index 000000000..f8eda0cba --- /dev/null +++ b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service @@ -0,0 +1,9 @@ +[Unit] +Description=Bluetooth HCI UART support +Requires=dev-ttymxc2.device +After=dev-ttymxc2.device +Before=bluetooth.service + +[Service] +Type=forking +ExecStart=/usr/sbin/hci-uart-helper.sh diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh new file mode 100644 index 000000000..e1aa31c06 --- /dev/null +++ b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# +# Script to attach HCI UART devices on i.MX8MQ EVK/EVKB +# +# NOTE: +# For the most part errors are ignored and the script returns +# 0/success so BlueZ will still be started if the script is somehow +# run on a board without the expected hardware. However, if the +# various probing succeeds and hciattach is run, the script returns +# the resulting exit code if hciattach fails. + +COMPAT=/sys/firmware/devicetree/base/compatible +HCITTY=/dev/ttymxc2 +PCIDEV=/sys/bus/pci/devices/0000:01:00.0 + +if [ ! \( -f "$COMPAT" -a -c "$HCITTY" \) ]; then + exit 0 +fi + +found=false +for c in `cat $COMPAT | tr '\0' ' '`; do + echo "c = $c" + if echo $c | grep -q '^fsl,imx8mq-evk$'; then + found=true + break + fi +done +if ! $found; then + echo "i.MX8MQ EVK not found!" + exit 0 +fi + +if [ -f "$PCIDEV/vendor" -a -f "$PCIDEV/device" ]; then + vendor=`cat $PCIDEV/vendor` + device=`cat $PCIDEV/device` +fi + +rc=0 +if [ "$vendor" = "0x14e4" -a "$device" = "0x43ec" ]; then + # Broadcom 5436 on EVKB + hciattach $HCITTY bcm43xx + rc=$? +elif [ "$vendor" = "0x168c" -a "$device" = "0x003e" ]; then + # Qualcomm (nee Atheros) 6174 on EVK + hciattach $HCITTY qualcomm + rc=$? +fi +exit $rc diff --git a/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb new file mode 100644 index 000000000..e497a4a21 --- /dev/null +++ b/meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb @@ -0,0 +1,30 @@ +SUMMARY = "Helper for enabling UART connected HCI Bluetooth devices" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" + +inherit systemd allarch + +SRC_URI = "file://hci-uart-helper.service \ + file://hci-uart-helper.sh \ +" + +COMPATIBLE_MACHINE = "imx8mqevk" + +do_configure[noexec] = "1" +do_compile[noexec] = "1" + +do_install() { + # Install helper script + install -d ${D}${sbindir} + install -m 0755 ${WORKDIR}/hci-uart-helper.sh ${D}${sbindir}/ + + # Install systemd unit + install -d ${D}${systemd_system_unitdir}/ + install -m 0644 ${WORKDIR}/hci-uart-helper.service ${D}${systemd_system_unitdir}/ + install -d ${D}${systemd_system_unitdir}/bluetooth.service.wants + ln -s ../hci-uart-helper.service ${D}${systemd_system_unitdir}/bluetooth.service.wants/ +} + +FILES_${PN} += "${systemd_system_unitdir}" + +RDEPENDS_${PN} += "bluez5" diff --git a/meta-agl-core/recipes-kernel/linux/linux/btusb.cfg b/meta-agl-core/recipes-kernel/linux/linux/btusb.cfg index dd7c460bb..4a4c35a05 100644 --- a/meta-agl-core/recipes-kernel/linux/linux/btusb.cfg +++ b/meta-agl-core/recipes-kernel/linux/linux/btusb.cfg @@ -21,13 +21,8 @@ CONFIG_BT_RTL=m CONFIG_BT_HCIBTUSB=m CONFIG_BT_HCIBTUSB_BCM=y CONFIG_BT_HCIBTUSB_RTL=y -# CONFIG_BT_HCIBTSDIO is not set -# CONFIG_BT_HCIUART is not set CONFIG_BT_HCIBCM203X=m CONFIG_BT_HCIBFUSB=m -# CONFIG_BT_HCIVHCI is not set -# CONFIG_BT_MRVL is not set -# CONFIG_BT_ATH3K is not set CONFIG_CRYPTO_ECB=m CONFIG_CRYPTO_CMAC=m