Backport the generic DRM HDMI CEC helpers (drm_hdmi_cec_helper and
drm_hdmi_cec_notifier_helper) along with the drm_connector CEC state,
drm_bridge CEC callbacks, and drm_bridge_connector glue that the
adapter registration path requires. Propagate the HDMI physical
address to the CEC adapter from the HDMI state helper hotplug path.
Implement the CEC adapter in dw-hdmi-qp: register definitions, IRQ
handling, transmit and receive paths, logical address programming,
and enable/disable. Pass the named "cec" IRQ and the HDMI reference
clock rate down from dw_hdmi_qp-rockchip so the timer base is
initialised from the actual reference clock.
Enable CONFIG_DRM_DW_HDMI_QP_CEC in tart_defconfig.
Panthor (Mali-G610 driver) requests mali_csffw.bin at ~1.2s, before /vendor
mounts at ~2.4s. With FW_LOADER_USER_HELPER intentionally disabled, the
firmware request fails instantly and probe fails. Embed the 276KB blob
directly in the kernel Image so firmware is always available at probe time.
Also disable CONFIG_DRM_PANFROST (Midgard/Bifrost driver) — it will never
bind a Valhall G610 GPU and is dead weight alongside panthor.
Copyright (C) 2026 Brendan Szymanski <hello@bscubed.dev>
This device has no module-loading infrastructure, so =m configs are
silently absent at runtime. Missing SOCK_DIAG made every
InetDiagMessage.destroyLiveTcpSockets() call in system_server block
~6s on netlink timeouts (114 times in one 9-minute boot, watchdog-level
main-thread stalls, Settings ANRs, stale IP/status UI). Missing
AF_VSOCK made traced crash-loop every 5s (vsock://-1:2010
EAFNOSUPPORT), tripping updatable_crashing flag resets.
CONFIG_CFG80211_DEFAULT_PS=n: mt7921u with powersave on goes deaf
after association - EAPOL 2/4 is sent, msg 3 never heard, AP deauths
with reason 15 (4-way handshake timeout) - and idle RTT spikes to
100ms+, delaying inbound connections. Always-powered TV box, so
default powersave off is the right trade.
Hypervisor-only vsock transports (VMware/virtio) stay off.
cfg80211 requests regulatory.db once at ~1.3s — before /vendor mounts at
~2.5s — and caches the failure forever (regdb = ERR_PTR in
net/wireless/reg.c), leaving the kernel stuck in the world regulatory
domain: every 5GHz channel PASSIVE-SCAN, TX capped at 20dBm, and no way
to apply the US country code hint from the framework. On a network whose
AP sits on a DFS channel (ch 144 here) the adapter may never actively
probe, causing intermittent scan misses and multi-minute connects. No
runtime recovery is possible without root (NL80211_CMD_RELOAD_REGDB).
Similarly, an mt7921u adapter present at power-on requests its firmware
pre-/vendor, fails, and wastes ~31s in an MCU retry loop ('Failed to get
patch semaphore') before wireless_reprobe.sh can rebind it post-mount.
Embedded firmware is checked before any filesystem path, so both load
deterministically at first probe regardless of partition mount order.
Files live under firmware/ (CONFIG_EXTRA_FIRMWARE_DIR is srctree-relative);
firmware/.gitignore un-ignores them from the root *.bin exclusion. Adds
~890KB to the Image. Other USB adapters still use the reprobe fallback.
The RTL8125BG 2.5GbE controller on the Orange Pi 5 Ultra uses the
r8169 driver. It was configured as a loadable module (=m), but this
device has no module-loading infrastructure (no modules.load, no
vendor_dlkm), so the module was never shipped and Ethernet was dead
on arrival.
Build the driver into the kernel so it probes at boot.
The driver works without its optional PHY firmware at reduced
functionality; the firmware (rtl_nic/rtl8125b-2.fw etc.) is still
shipped in /vendor/firmware/rtl_nic/ for when the post-fs reprobe
path can load it later.
- Add rockchip_wlan Kconfig include to drivers/net/wireless/Kconfig
(the Makefile already has the build rule under CONFIG_WL_ROCKCHIP)
- Set CONFIG_WL_ROCKCHIP=y in tart_defconfig to enable bcmdhd build
The regulator vcc5v0_otg is always on and is on when the kernel boots. THe vin-supply of the regulator is vcc5v0_usb but vcc5v0_usb is connected to vcc5v0_sys, which is always
on boot(refer to documentation). Hence, this regulator should be on at boot and adding these lines, made the USB 3.0 port work for Orange pi 5 pro, which was missing from the beginning.
This node is connected to the m.2 slot found in orange pi 5 pro and certain pins are connected to the gpio, like PCIE20x1_1_PERSTn_M1, PCIE20x1_1_CLKREQn_M1 and PCIE20x1_1_WAKEn_M1.
In absence of these gpio definitions, would cause nvme to be recognised but if it went to sleep, there is no way for them to be waken up. Hence, Adding this resolved the issue -
[ 35.812749] Bluetooth: hci0: BCM: features 0x0f
[ 35.814580] Bluetooth: hci0: BCM4345C5 Ampak_CL1 UART 37.4 MHz BT 5.0 [Version: Version: 0039.0089]
[ 35.815374] Bluetooth: hci0: BCM4345C5 (003.006.006) build 0089
[ 45.335521] platform bridge: deferred probe pending: (reason unknown)
[ 66.658318] nvme nvme0: controller is down; will reset: CSTS=0xffffffff, PCI_STATUS read failed (134)
[ 66.659131] nvme nvme0: Does your device have a faulty power saving mode enabled?
[ 66.659784] nvme nvme0: Try "nvme_core.default_ps_max_latency_us=0 pcie_aspm=off pcie_port_pm=off" and report a bug
[ 69.009422] nvme0n1: I/O Cmd(0x2) @ LBA 7385088, 32 blocks, I/O Error (sct 0x3 / sc 0x71)
[ 69.010143] I/O error, dev nvme0n1, sector 7385088 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
[ 69.047131] nvme 0003:31:00.0: Unable to change power state from D3cold to D0, device inaccessible
[ 69.099121] nvme nvme0: Disabling device after reset failure: -19
[ 69.123144] Buffer I/O error on dev nvme0n1p4, logical block 0, async page read
[ 69.123817] init: [libfs_mgr] Can't read '/dev/block/by-name/metadata' superblock: I/O error
[ 69.124672] EXT4-fs (nvme0n1p4): unable to read superblock
[ 69.125197] init: [libfs_mgr] __mount(source=/dev/block/by-name/metadata,target=/metadata,type=ext4)=-1: I/O error
[ 69.126120] init: DSU not detected, proceeding with normal boot
[ 69.126684] Buffer I/O error on dev nvme0n1p2, logical block 0, async page read
[ 69.127342] init: [libfs_mgr] Can't read '/dev/block/by-name/system' superblock: I/O error
[ 69.128100] EXT4-fs (nvme0n1p2): unable to read superblock
[ 69.128596] init: [libfs_mgr] __mount(source=/dev/block/by-name/system,target=/system,type=ext4)=-1: I/O error
[ 69.129465] init: Failed to mount /system: I/O error [ 69.129932] init: Failed to mount required partitions early ...
[ 69.130669] init: InitFatalReboot: signal 6
[ 69.135720] init: #00 pc 00000000003cf510 /init (unwindstack::AndroidLocalUnwinder::InternalUnwind(std::__1::optional<int>, unwindstack::AndroidUnwinderData&)+116) (BuildId: 2a2f03a3b9ebbb40bcce7295bfedf748)
[ 69.137346] init: #01 pc 00000000003c96f4 /init (android::init::InitFatalReboot(int)+204) (BuildId: 2a2f03a3b9ebbb40bcce7295bfedf748)
[ 69.198289] kvm: exiting hardware virtualization
[ 69.198796] reboot: Restarting system with command 'bootloader'
Due to a mistake, Kernel sets the PCI port to Endpoint mode and wouldn't detect nvme drives. With this correction, removes the PCI endpoint config and replaces it with HOST mode only config.
Intial tests are working, detecting the NVME drive but for some NVME drives due to APST and PCIe ASPM/port PM, would not be detected or cause issues.
with dp to hdmi converter bridge present. By enabling this, we can use the 2nd hdmi as a secondary display for AOSP(or even primary if first hdmi port is not used).
These modifications are from Detlev Casanova from collabora, who is currently developing HW stateless video decoders drivers for rk3588 and rk3576 SoC's . Using his patch for linux and ffmpeg using v4l2 requests and my patches for ffmpeg_codec2, I was able to get 4k@25 fps - 8-bit, running( HEVC and h.264) but still yet to optimise it and need to add hw decoders for vp9, av1, vp8 etc. NOTE - This is a testing build and might cause kernel panics.