Hailo-10H fails to initialize on clean Raspberry Pi OS install due to legacy hailo_pci driver conflict

Hailo-10H fails to initialize on clean Raspberry Pi OS install due to legacy hailo_pci driver conflict

Environment

  • Hardware: Raspberry Pi 5 + Hailo-10H (AI HAT+ 2)

  • OS: Raspberry Pi OS (clean latest image)

  • Kernel:

Linux pi 6.12.47+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.12.47-1+rpt1 aarch64

hailo-h10-all


Problem

After a clean install and reboot, the Hailo-10H device is detected but fails to initialize. hailortcli fw-control identify returns nothing.

dmesg shows:

[    8.648896] hailo1x 0001:01:00.0: Firmware batch programming completed for stage 2
[    8.766586] hailo1x 0001:01:00.0: vDMA transfer completed, triggering boot
[   10.986721] hailo1x 0001:01:00.0: SOC Firmware Batch loaded successfully
[   10.986726] hailo1x 0001:01:00.0: Firmware loaded in 4605 ms
[   10.998831] sysfs: cannot create duplicate filename '/class/hailo_chardev'
[   10.998879]  hailo_pcie_probe+0x4c0/0x6c8 [hailo1x_pci]
[   10.998920] kobject: kobject_add_internal failed for hailo_chardev with -EEXIST, don't try to register things with the same name in the same directory.
[   10.998929] hailo1x 0001:01:00.0: Failed to create class for chrdev
[   10.998931] hailo1x 0001:01:00.0: Failed inserting board -17 to list
[   10.998946] hailo1x 0001:01:00.0: probe with driver hailo1x failed with error -17

lspci -nnk reports both kernel modules available:

pi@pi:~ $ lspci -nnk | grep -A3 Hailo
0001:01:00.0 Co-processor [0b40]: Hailo Technologies Ltd. Hailo-10H AI Processor [1e60:45c4] (rev 01)
        Subsystem: Hailo Technologies Ltd. Hailo-10H AI Processor [1e60:45c4]
        Kernel modules: hailo_pci, hailo1x_pci

The legacy hailo_pci module loads automatically and registers the
hailo_chardev class, causing the correct hailo1x_pci driver probe to fail.


Workaround

Blacklisting the legacy driver resolves the issue:

echo "blacklist hailo_pci" | sudo tee /etc/modprobe.d/hailo.conf
sudo reboot

After reboot:

pi@pi:~ $ lsmod | grep hailo
hailo1x_pci           147456  0

Device initializes correctly:

hailortcli fw-control identify
Executing on device: 0001:01:00.0
Identifying board
Control Protocol Version: 2
Firmware Version: 5.1.1 (release,app)
Logger Version: 0
Device Architecture: HAILO10H

Driver loads successfully:

[    8.580034] hailo1x 0001:01:00.0: Firmware file index 2 programmed successfully
[    8.604127] hailo1x 0001:01:00.0: Firmware file programmed successfully
[    8.604133] hailo1x 0001:01:00.0: Firmware file index 3 programmed successfully
[    8.604135] hailo1x 0001:01:00.0: Firmware batch programming completed for stage 2
[    8.721891] hailo1x 0001:01:00.0: vDMA transfer completed, triggering boot
[   11.070575] hailo1x 0001:01:00.0: SOC Firmware Batch loaded successfully
[   11.070579] hailo1x 0001:01:00.0: Firmware loaded in 4793 ms
[   11.082290] hailo1x 0001:01:00.0: Probing: Added board 1e60-45c4, /dev/hailo0

Expected behavior

Installing hailo-h10-all on a supported system should automatically load only the appropriate driver for Hailo-10 devices and not require manual blacklisting.


Notes

This occurs on a clean Raspberry Pi OS installation following official documentation, suggesting a driver autoload or packaging issue.

Hi @Dmitry_Maslov ,

Thanks for raising the issue.
We will investigate internally and come back to you ASAP here.

Thanks,

fyi, blacklisting hailo_pci does not help when installing hailo-apps:

pi@pi:~/hailo-apps $ bash scripts/check_installed_packages.sh 
=== Hailo Package Detection ===

Hailo Architecture Detection:
[OK]   Detected Hailo architecture: HAILO10H (via PCI device)

Kernel Module Check:
[OK]   hailo_pci module installed (not loaded), version: 4.20.0

HailoRT Check:
[OK]   hailort (system) version: 5.1.1

TAPPAS Core Check:
[OK]   hailo-tappas-core (system) version: 5.1.0

Python HailoRT Check:
[OK]   pip 'hailort' version: 5.1.1
[OK]   Python import 'hailo' succeeded

Python TAPPAS Check:
[OK]   pip 'hailo-tappas-core-python-binding' version: 5.1.0
[OK]   Python import 'hailo_platform' succeeded
[INFO] Module reports version: 5.1.1 (pip package version: 5.1.0)

Version Validation for hailo10h:
[ERROR] Driver version 4.20.0 is invalid for hailo10h. Expected >= 5.0.0
[OK]   HailoRT version 5.1.1 is valid for hailo10h (>= 5.0.0)

caused by (commented out part in mine, another workaround to make it work) in hailo-apps/scripts/check_installed_packages.sh

check_kernel_module() {
    local version="-1"
    local module=""
    local module_found="false"

    # Try to find hailo_pci module first
    # if lsmod | grep -q "^hailo_pci "; then
    #     module="hailo_pci"
    #     module_found="true"
    # elif modinfo hailo_pci &>/dev/null; then
    #     module="hailo_pci"
    #     module_found="true"
    # fi

    # If hailo_pci was not found, check for hailo1x_pci
    if [[ "$module_found" == "false" ]]; then
        if lsmod | grep -q "^hailo1x_pci "; then
            module="hailo1x_pci"
            module_found="true"
        elif modinfo hailo1x_pci &>/dev/null; then
            module="hailo1x_pci"
            module_found="true"
        fi
    fi
1 Like

Hi @Dmitry_Maslov Thanks for the additional information.