meta-agl-bsp: enable HCI UART for i.MX8MQ EVK 42/25842/4
authorScott Murray <scott.murray@konsulko.com>
Sat, 19 Dec 2020 23:04:41 +0000 (18:04 -0500)
committerScott Murray <scott.murray@konsulko.com>
Fri, 8 Jan 2021 17:21:17 +0000 (17:21 +0000)
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 <scott.murray@konsulko.com>
Change-Id: Iae3a58ccfbdb31698ae012ab7d03c9259ac83013
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/25842
Tested-by: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org>
ci-image-build: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org>
ci-image-boot-test: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org>

meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc
meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service [new file with mode: 0644]
meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh [new file with mode: 0644]
meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb [new file with mode: 0644]
meta-agl-core/recipes-kernel/linux/linux/btusb.cfg

index 5056758..bc0f768 100644 (file)
@@ -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 (file)
index 0000000..f8eda0c
--- /dev/null
@@ -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 (file)
index 0000000..e1aa31c
--- /dev/null
@@ -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 (file)
index 0000000..e497a4a
--- /dev/null
@@ -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"
index dd7c460..4a4c35a 100644 (file)
@@ -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