Re: Raspberry Pi 3B: Failed to create device link with soc:firmware:gpio

From: Stefan Wahren
Date: Thu Dec 12 2024 - 08:16:19 EST


Am 12.12.24 um 11:13 schrieb Martin Wetterwald:
Hello Saravana and Florian,

Back in 2023, you discussed about an issue concerning the Raspberry Pi 4, that
you fixed in commit 1a5ecc73b2bfeffe036212d4a6bfacee053ab0a1:
https://lore.kernel.org/lkml/03b70a8a-0591-f28b-a567-9d2f736f17e5@xxxxxxxxx/
https://lore.kernel.org/all/20230302023509.319903-1-saravanak@xxxxxxxxxx/

Today, I notice I see the same issue, but it's with the Raspberry Pi 3B (V1.2).
I'm using the upstream kernel 6.12.3, with the upstream DTB.

You can find my kernel miniconfig (basis being allnoconfig) here:
https://gist.github.com/mwetterw/299bb1317fccf9e68125cb0f5da7384c
What happens if you replace your custom config with arm64/defconfig?
Does the issue still occurs?

During boot, I see following messages:
Bluetooth: HCI UART driver ver 2.3
Bluetooth: HCI UART protocol H4 registered
Bluetooth: HCI UART protocol Broadcom registered
bcm2835-mbox 3f00b880.mailbox: mailbox enabled
3f201000.serial: ttyAMA0 at MMIO 0x3f201000 (irq = 99, base_baud = 0) is a PL011 rev2
raspberrypi-firmware soc:firmware: Attached to firmware from 2024-09-13T16:00:14
uart-pl011 3f201000.serial: Failed to create device link (0x180) with soc:firmware:gpio
Here is an extract of the relevant FDT nodes.
Because my setup involves first the proprietary GPU firmware, then the U-Boot
bootloader before finally launching the kernel, I used following command in
order to make sure I see the same FDT as Linux:

ssh rpi 'cat /sys/firmware/fdt' | fdtdump -
firmware {
compatible = "raspberrypi,bcm2835-firmware", "simple-mfd";
mboxes = <0x0000001b>;
phandle = <0x0000001c>;
clocks {
compatible = "raspberrypi,firmware-clocks";
#clock-cells = <0x00000001>;
phandle = <0x00000015>;
};
gpio {
compatible = "raspberrypi,firmware-gpio";
gpio-controller;
#gpio-cells = <0x00000002>;
gpio-line-names = "BT_ON", "WL_ON", "STATUS_LED", "LAN_RUN", "HDMI_HPD_N", "CAM_GPIO0", "CAM_GPIO1", "PWR_LOW_N";
status = "okay";
phandle = <0x0000000a>;
};
};
serial@7e201000 {
compatible = "arm,pl011", "arm,primecell";
reg = <0x7e201000 0x00000200>;
interrupts = <0x00000002 0x00000019>;
clocks = <0x00000007 0x00000013 0x00000007 0x00000014>;
clock-names = "uartclk", "apb_pclk";
arm,primecell-periphid = <0x00241011>;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <0x00000008 0x00000009>;
phandle = <0x00000048>;
bluetooth {
compatible = "brcm,bcm43438-bt";
max-speed = <0x001e8480>;
shutdown-gpios = <0x0000000a 0x00000000 0x00000000>;
phandle = <0x00000049>;
};
};
If I understand correctly, the serial dev bus, together with
CONFIG_BT_HCI_UART, CONFIG_BT_HCI_UART_BCM, and if associated to the correct
DTB nodes describing the bluetooth chip, should allow the kernel to handle the
serial Bluetooth HCI himself, without the userspace needing to launch user
space tools like hciattach or btattach?

Is the log

uart-pl011 3f201000.serial: Failed to create device link (0x180) with soc:firmware:gpio
a hint to the reason why the kernel doesn't automatically handle my Bluetooth
HCI over serial?

How to solve this log error, and how to let the kernel handle the HCI himself?
Am I missing kernel configuration flags?

Thanks!
Martin