做的板子上有个BT+WIFI 模块(U28), 使用内核自带的mt7663u的驱动加载后,运行 bluetoothctl 后会有异常(基本几分钟就出现)。
log:
[ 268.618689] Call trace:
[ 268.621124] atomic_dec_and_mutex_lock+0xe0/0x184
[ 268.625803] mutex_lock+0x28/0x44
[ 268.629095] tee_shm_put+0x34/0x148
[ 268.632560] tee_shm_free+0x10/0x1c
[ 268.636028] optee_aes_close+0x1c/0x44
[ 268.639753] nuvoton_aes_cra_exit+0x28/0x34
[ 268.643915] crypto_destroy_tfm+0x40/0x70
[ 268.647900] skcipher_release+0x14/0x20
[ 268.651715] alg_sock_destruct+0x24/0x3c
[ 268.655616] __sk_destruct+0x30/0xcc
[ 268.659167] sk_destruct+0x60/0x64
[ 268.662547] __sk_free+0x50/0xd8
[ 268.665754] sk_free+0x34/0x44
[ 268.668787] sock_put+0x44/0x78
[ 268.671907] af_alg_release+0x20/0x38
[ 268.675546] __sock_release+0x44/0xac
[ 268.679185] sock_close+0x18/0x28
[ 268.682480] __fput+0xec/0x21c
[ 268.685512] ____fput+0x10/0x1c
[ 268.688636] task_work_run+0x8c/0x12c
[ 268.692276] do_notify_resume+0x258/0x414
[ 268.696259] work_pending+0xc/0x668
[ 268.699735] Code: c8037c40 35ffffa3 17fffec5 f9800071 (c85ffc60)
[ 268.705794] ---[ end trace 89c9712bea5df24d ]---
[ 268.710386] Kernel panic - not syncing: Oops: Fatal exception
root@numaker-som-ma35d16a81:~# lsusb
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 0e8d:7663 MediaTek Inc.
Bus 002 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@numaker-som-ma35d16a81:~# lsmod
Module Size Used by
mt7663 2048000 0
mt7663u 20480 0
mt76_usb 28672 1 mt7663u
mt7663_usb_sdio_common 20480 1 mt7663u
mt7615_common 90112 2 mt7663_usb_sdio_common,mt7663u
btusb 53248 0
mt76 49152 4 mt7663_usb_sdio_common,mt76_usb,mt7663u,mt7615_common
btrtl 20480 1 btusb
btbcm 20480 1 btusb
btintel 24576 1 btusb
做个测试将crypto加密模块相关去掉后,运行蓝牙则一直正常。
obj-$(CONFIG_CRYPTO_DEV_NUVOTON) += nuvoton-crypto.o
obj-$(CONFIG_CRYPTO_ECDH) += nuvoton-ecc.o
obj-$(CONFIG_CRYPTO_RSA) += nuvoton-rsa.o
+++ b/drivers/crypto/Makefile
@@ -51,4 +51,4 @@ obj-$(CONFIG_CRYPTO_DEV_ARTPEC6) += axis/
obj-$(CONFIG_CRYPTO_DEV_ZYNQMP_AES) += xilinx/
obj-y += hisilicon/
obj-$(CONFIG_CRYPTO_DEV_AMLOGIC_GXL) += amlogic/
-obj-y += nuvoton/
+#obj-y += nuvoton/
defconfig:
CONFIG_RFKILL=y
CONFIG_RFKILL_LEDS=y
CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL_GPIO=y
CONFIG_MT7663=m
CONFIG_BT=y
CONFIG_BT_BREDR=y
CONFIG_BT_DEBUGFS=y
CONFIG_BT_INTEL=y
CONFIG_BT_LE=y
CONFIG_BT_HCIBFUSB=y
CONFIG_BT_INTEL=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_BCM=m
CONFIG_BT_RTL=m
CONFIG_BT_HCIBTUSB_AUTOSUSPEND is not set
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB_MTK=y
CONFIG_BT_HCIBTUSB_RTL=y
CONFIG_BT_HCIBFUSB=y
CONFIG_WLAN_VENDOR_MEDIATEK=y
CONFIG_MT76_CORE=m
CONFIG_MT76_LEDS=y
CONFIG_MT76_USB=m
CONFIG_MT7615_COMMON=m
CONFIG_MT7663_USB_SDIO_COMMON=m
CONFIG_MT7663U=m
CONFIG_WLAN_VENDOR_REALTEK=y
2024/03/08 08:52
通过修改以下驱动问题解决:
diff --git a/drivers/crypto/nuvoton/nuvoton-aes.c b/drivers/crypto/nuvoton/nuvoton-aes.c
index dc3ddf296..21daa8fa5 100644
--- a/drivers/crypto/nuvoton/nuvoton-aes.c
+++ b/drivers/crypto/nuvoton/nuvoton-aes.c
@@ -594,6 +594,10 @@ static int optee_aes_open(struct nu_aes_dev *dd)
static void optee_aes_close(struct nu_aes_dev *dd)
{
+ if((dd == NULL)||(dd->shm_pool == NULL)||(dd->octx == NULL))
+ {
+ return;
+ }
tee_shm_free(dd->shm_pool);
tee_client_close_session(dd->octx, dd->session_id);
tee_client_close_context(dd->octx);