summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2020-12-19 18:04:41 -0500
committerScott Murray <scott.murray@konsulko.com>2021-01-08 17:21:17 +0000
commit5a7790e8b10d6a01fb405f1893167ddec58f5faa (patch)
treebdd98716ddcd98e3789dd98505309616d399114b
parent77a103b9ba7eec908c2df65fada5a1b978a12fd9 (diff)
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 <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>
-rw-r--r--meta-agl-bsp/conf/include/agl_imx8mqevk-common.inc3
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.service9
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/files/hci-uart-helper.sh48
-rw-r--r--meta-agl-bsp/meta-freescale-layer/recipes-connectivity/hci-uart-helper/hci-uart-helper_1.0.bb30
-rw-r--r--meta-agl-core/recipes-kernel/linux/linux/btusb.cfg5
5 files changed, 90 insertions, 5 deletions
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