From 5a7790e8b10d6a01fb405f1893167ddec58f5faa Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Sat, 19 Dec 2020 18:04:41 -0500 Subject: 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 --- meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc | 3 ++ .../hci-uart-helper/files/hci-uart-helper.service | 9 ++++ .../hci-uart-helper/files/hci-uart-helper.sh | 48 ++++++++++++++++++++++ .../hci-uart-helper/hci-uart-helper_1.0.bb | 30 ++++++++++++++ meta-agl-core/recipes-kernel/linux/linux/btusb.cfg | 5 --- 5 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service create mode 100644 meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh create mode 100644 meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb 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 -- cgit 1.2.3-korg