Stm32mp157c-odyssey Bluetooth: hci0: command 0x0c03 tx timeout

Hello. I’m trying to bring up Bluetooth of the AP6236 chip on the stm32mp157c-odyssey board. With no luck so far…
Does anyone has any experience in this? Any guidance/advice would be really helpful :slight_smile:
This is what I have:

dmesg | grep Bluetooth

[   16.240645] Bluetooth: Core ver 2.22
[   16.248188] Bluetooth: HCI device and connection manager initialized
[   16.254550] Bluetooth: HCI socket layer initialized
[   16.259415] Bluetooth: L2CAP socket layer initialized
[   16.264432] Bluetooth: SCO socket layer initialized
[   16.640794] Bluetooth: HCI UART driver ver 2.3
[   16.658790] Bluetooth: HCI UART protocol H4 registered
[   16.686664] Bluetooth: HCI UART protocol Broadcom registered
[   17.044683] Bluetooth: hci0: BCM: chip id 94
[   17.050674] Bluetooth: hci0: BCM: features 0x2e
[   17.078064] Bluetooth: hci0: BCM43430A1
[   17.080641] Bluetooth: hci0: BCM43430A1 (001.002.009) build 0000
[   17.208308] Bluetooth: hci0: BCM43430A1 'brcm/BCM43430A1.hcd' Patch
[   22.649202] Bluetooth: hci0: command 0x0c03 tx timeout
[   22.653035] Bluetooth: hci0: BCM: Reset failed (-110)

hciconfig -a

hci0:   Type: Primary  Bus: UART
        BD Address: 00:00:00:00:00:00  ACL MTU: 0:0  SCO MTU: 0:0
        DOWN 
        RX bytes:1159 acl:0 sco:0 events:127 errors:0
        TX bytes:30732 acl:0 sco:0 commands:128 errors:0
        Features: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        Packet type: DM1 DH1 HV1 
        Link policy: 
        Link mode: PERIPHERAL ACCEPT 

stm32mp157c-odyssey.dts

&pinctrl {
	// usart1 pin configure
	usart1_pins_s: usart1-0 {
		pins1 {
			pinmux = <STM32_PINMUX('Z', 7, AF7)>, /* USART1_TX */
				<STM32_PINMUX('Z', 5, AF7)>; /* USART1_RTS */
			bias-disable;
			drive-push-pull;
			slew-rate = <0>;
		};
		pins2 {
			pinmux = <STM32_PINMUX('Z', 6, AF7)>, /* USART1_RX */
				<STM32_PINMUX('Z', 3, AF7)>; /* USART1_CTS_NSS */
			bias-disable;
		};
	};

	usart1_idle_pins_s: usart1-idle-0 {
		pins1 {
			pinmux = <STM32_PINMUX('Z', 7, ANALOG)>, /* USART1_TX */
				<STM32_PINMUX('Z', 3, ANALOG)>; /* USART1_CTS_NSS */
		};
		pins2 {
			pinmux = <STM32_PINMUX('Z', 5, AF7)>; /* USART1_RTS */
			bias-disable;
			drive-push-pull;
			slew-rate = <0>;
		};
		pins3 {
			pinmux = <STM32_PINMUX('Z', 6, AF7)>; /* USART1_RX */
			bias-disable;
		};
	};

	usart1_sleep_pins_s: usart1-sleep-0 {
		pins {
			pinmux = <STM32_PINMUX('Z', 7, ANALOG)>, /* USART1_TX */
				<STM32_PINMUX('Z', 5, ANALOG)>, /* USART1_RTS */
				<STM32_PINMUX('Z', 6, ANALOG)>, /* USART1_RX */
				<STM32_PINMUX('Z', 3, ANALOG)>; /* USART1_CTS_NSS */
		};
	};
};

/* Bluetooth */
&usart1 {
	pinctrl-names = "default", "sleep", "idle";
	pinctrl-0 = <&usart1_pins_s>;
	pinctrl-1 = <&usart1_sleep_pins_s>;
	pinctrl-2 = <&usart1_idle_pins_s>;
	uart-has-rtscts;
	status = "okay";

	bluetooth {
		host-wakeup-gpios = <&gpioh 3 GPIO_ACTIVE_HIGH>;
		device-wakeup-gpios = <&gpioh 8 GPIO_ACTIVE_HIGH>;
		reset-gpios = <&gpioh 9 GPIO_ACTIVE_LOW>;
		compatible = "brcm,bcm43438-bt";
		max-speed = <3000000>;
		vbat-supply = <&v3v3>;
		vddio-supply = <&v3v3>;
	};
};