[BPI-R3 Mini] [SOLVED] Debian installer (upstream) stuck

Thanks to the folks here we have R3 Mini upstream support in the Linux kernel. In Debian Sid arm64 kernel config I just noticed they enabled MT7986. They also provide device-tree binaries as well. Seems like everything is in place for boot a Debian installer, right? Wrong! Unfortunately something missing or at least I’m unable to do it.

Before writing down the steps, I have to tell that OpenWRT recovery.itb image works and boots properly, as well as the images built by Frank W.'s script. So the device is fine, no issues with that.

Step #1: Donwload the binaries

wget https://d-i.debian.org/daily-images/arm64/daily/device-tree/mediatek/mt7986a-bananapi-bpi-r3-mini.dtb
wget https://d-i.debian.org/daily-images/arm64/daily/netboot/debian-installer/arm64/initrd.gz
wget https://d-i.debian.org/daily-images/arm64/daily/netboot/debian-installer/arm64/linux

cp mt7986a-bananapi-bpi-r3-mini.dtb initrd.gz linux /bootusb

Step #2: Boot into a U-boot shell (OpenWRT or default) and load the blobs

usb start
setenv kernel_addr_r 0x44000000
setenv fdt_addr_r 0x47000000
setenv ramdisk_addr_r 0x48000000
setenv bootargs earlycon=uart8250,mmio32,0x11002000 console=ttyS0,115200n8 panic=10 initrd=${ramdisk_addr_r},64M rootwait init=/init
fatload usb 0:1 ${kernel_addr_r} linux
fatload usb 0:1 ${fdt_addr_r} mt7986a-bananapi-bpi-r3-mini.dtb
fatload usb 0:1 ${ramdisk_addr_r} initrd.gz

Step #3: Boot Linux (fails)

booti ${kernel_addr_r} - ${fdt_addr_r}

## Flattened Device Tree blob at 47000000
   Booting using the fdt blob at 0x47000000
Working FDT set to 47000000
   Loading Device Tree to 00000000be7b3000, end 00000000be7bb99a ... OK
Working FDT set to be7b3000

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 6.12.8-arm64 ([email protected]) (aarch64-linux-gnu-gcc-14 (Debian 14.2.0-12) 14.2.0, GNU ld (GNU Binutils for Debian) 2.43.50.20241230) #1 SMP Debian 6.12.8-1 (2025-01-02)
[    0.000000] KASLR disabled due to lack of seed
[    0.000000] Machine model: Bananapi BPI-R3 Mini
[    0.000000] earlycon: uart8250 at MMIO32 0x0000000011002000 (options '')
[    0.000000] printk: legacy bootconsole [uart8250] enabled
[    0.000000] efi: UEFI not found.
[    0.000000] OF: reserved mem: 0x0000000015194000..0x0000000015194fff (4 KiB) nomap non-reusable wo-boot@15194000
[    0.000000] OF: reserved mem: 0x00000000151e0000..0x00000000151e7fff (32 KiB) nomap non-reusable wo-ilm@151e0000
[    0.000000] OF: reserved mem: 0x00000000151e8000..0x00000000151e9fff (8 KiB) nomap non-reusable wo-dlm@151e8000
[    0.000000] OF: reserved mem: 0x00000000151f0000..0x00000000151f7fff (32 KiB) nomap non-reusable wo-ilm@151f0000
[    0.000000] OF: reserved mem: 0x00000000151f8000..0x00000000151f9fff (8 KiB) nomap non-reusable wo-dlm@151f8000
[    0.000000] OF: reserved mem: 0x0000000042ff0000..0x0000000042ffffff (64 KiB) map non-reusable ramoops@42ff0000
[    0.000000] OF: reserved mem: 0x0000000043000000..0x000000004302ffff (192 KiB) nomap non-reusable secmon@43000000
[    0.000000] OF: reserved mem: 0x000000004fc00000..0x000000004fcfffff (1024 KiB) nomap non-reusable wmcpu-reserved@4fc00000
[    0.000000] OF: reserved mem: 0x000000004fd00000..0x000000004fd3ffff (256 KiB) nomap non-reusable wo-emi@4fd00000
[    0.000000] OF: reserved mem: 0x000000004fd40000..0x000000004fd7ffff (256 KiB) nomap non-reusable wo-emi@4fd40000
[    0.000000] OF: reserved mem: 0x000000004fd80000..0x000000004ffbffff (2304 KiB) nomap non-reusable wo-data@4fd80000
[    0.000000] NUMA: Faking a node at [mem 0x0000000040000000-0x00000000bfffffff]
[    0.000000] NODE_DATA(0) allocated [mem 0xbfbe9240-0xbfbec97f]
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000040000000-0x00000000bfffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000]   Device   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000040000000-0x0000000042ffffff]
[    0.000000]   node   0: [mem 0x0000000043000000-0x000000004302ffff]
[    0.000000]   node   0: [mem 0x0000000043030000-0x000000004fbfffff]
[    0.000000]   node   0: [mem 0x000000004fc00000-0x000000004ffbffff]
[    0.000000]   node   0: [mem 0x000000004ffc0000-0x00000000bfffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x00000000bfffffff]
[    0.000000] cma: Reserved 64 MiB at 0x00000000b8600000 on node -1
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.1 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: MIGRATE_INFO_TYPE not supported.
[    0.000000] psci: SMC Calling Convention v1.4
[    0.000000] percpu: Embedded 34 pages/cpu s100952 r8192 d30120 u139264
[    0.000000] pcpu-alloc: s100952 r8192 d30120 u139264 alloc=34*4096
[    0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: detected: GIC system register CPU interface
[    0.000000] CPU features: detected: ARM erratum 845719
[    0.000000] alternatives: applying boot alternatives
[    0.000000] Kernel command line: earlycon=uart8250,mmio32,0x11002000 console=ttyS0,115200n8 debug=7 panic=10 initrd=0x48000000,64M rootwait init=/init
[    0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[    0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[    0.000000] Fallback order for Node 0: 0 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 524288
[    0.000000] Policy zone: DMA
[    0.000000] mem auto-init: stack:all(zero), heap alloc:on, heap free:off
[    0.000000] software IO TLB: SWIOTLB bounce buffer size adjusted to 2MB
[    0.000000] software IO TLB: area num 4.
[    0.000000] software IO TLB: mapped [mem 0x00000000bf45a000-0x00000000bf65a000] (2MB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] ftrace: allocating 50221 entries in 197 pages
[    0.000000] ftrace: allocated 197 pages with 4 groups
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu: 	RCU restricting CPUs from NR_CPUS=512 to nr_cpu_ids=4.
[    0.000000] 	Rude variant of Tasks RCU enabled.
[    0.000000] 	Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.000000] RCU Tasks Rude: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] RCU Tasks Trace: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] GICv3: GIC: Using split EOI/Deactivate mode
[    0.000000] GICv3: 640 SPIs implemented
[    0.000000] GICv3: 0 Extended SPIs implemented
[    0.000000] Root IRQ handler: gic_handle_irq
[    0.000000] GICv3: GICv3 features: 16 PPIs
[    0.000000] GICv3: GICD_CTRL.DS=0, SCR_EL3.FIQ=0
[    0.000000] GICv3: CPU0: found redistributor 0 region 0:0x000000000c080000
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] arch_timer: cp15 timer(s) running at 13.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x2ff89eacb, max_idle_ns: 440795202429 ns
[    0.000000] sched_clock: 56 bits at 13MHz, resolution 76ns, wraps every 4398046511101ns
[    0.008361] Console: colour dummy device 80x25
[    0.013747] Calibrating delay loop (skipped), value calculated using timer frequency.. 26.00 BogoMIPS (lpj=52000)
[    0.024067] pid_max: default: 32768 minimum: 301
[    0.030455] LSM: initializing lsm=lockdown,capability,landlock,yama,apparmor,tomoyo,bpf,ipe,ima,evm
[    0.040232] landlock: Up and running.
[    0.043908] Yama: disabled by default; enable with sysctl kernel.yama.*
[    0.050742] AppArmor: AppArmor initialized
[    0.054901] TOMOYO Linux initialized
[    0.058862] LSM support for eBPF active
[    0.063427] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.070870] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.080941] cacheinfo: Unable to detect cache hierarchy for CPU 0
[    0.111366] rcu: Hierarchical SRCU implementation.
[    0.116188] rcu: 	Max phase no-delay instances is 1000.
[    0.121629] Timer migration: 1 hierarchy levels; 8 children per group; 1 crossnode level
[    0.130852] EFI services will not be available.
[    0.139449] smp: Bringing up secondary CPUs ...
[    0.152169] Detected VIPT I-cache on CPU1
[    0.152219] GICv3: CPU1: found redistributor 1 region 0:0x000000000c0a0000
[    0.152253] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[    0.160218] Detected VIPT I-cache on CPU2
[    0.160256] GICv3: CPU2: found redistributor 2 region 0:0x000000000c0c0000
[    0.160278] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[    0.168213] Detected VIPT I-cache on CPU3
[    0.168246] GICv3: CPU3: found redistributor 3 region 0:0x000000000c0e0000
[    0.168266] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[    0.168359] smp: Brought up 1 node, 4 CPUs
[    0.224931] SMP: Total of 4 processors activated.
[    0.229654] CPU: All CPU(s) started at EL2
[    0.233780] CPU features: detected: 32-bit EL0 Support
[    0.238942] CPU features: detected: 32-bit EL1 Support
[    0.244104] CPU features: detected: CRC32 instructions
[    0.249307] alternatives: applying system-wide alternatives
[    0.269743] node 0 deferred pages initialised in 12ms
[    0.274929] Memory: 1878208K/2097152K available (15488K kernel code, 3790K rwdata, 11876K rodata, 2816K init, 939K bss, 149440K reserved, 65536K cma-reserved)
[    0.290249] devtmpfs: initialized
[    0.297551] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.307393] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)
[    0.315708] 23984 pages in range for non-PLT usage
[    0.315727] 515504 pages in range for PLT usage
[    0.321566] pinctrl core: initialized pinctrl subsystem
[    0.332285] DMI not present or invalid.
[    0.338234] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.345294] DMA: preallocated 256 KiB GFP_KERNEL pool for atomic allocations
[    0.352523] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.360502] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.368534] audit: initializing netlink subsys (disabled)
[    0.374146] audit: type=2000 audit(0.256:1): state=initialized audit_enabled=0 res=1
[    0.374930] thermal_sys: Registered thermal governor 'fair_share'
[    0.381939] thermal_sys: Registered thermal governor 'bang_bang'
[    0.388063] thermal_sys: Registered thermal governor 'step_wise'
[    0.394097] thermal_sys: Registered thermal governor 'user_space'
[    0.400133] thermal_sys: Registered thermal governor 'power_allocator'
[    0.406298] cpuidle: using governor ladder
[    0.416984] cpuidle: using governor menu
[    0.421043] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.427939] ASID allocator initialised with 65536 entries
[    0.434328] Serial: AMBA PL011 UART driver
[    0.440463] /soc/interrupt-controller@c000000: Fixed dependency cycle(s) with /soc/interrupt-controller@c000000
[    0.456406] /soc/pcie@11280000: Fixed dependency cycle(s) with /soc/pcie@11280000/interrupt-controller
[    0.473830] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
[    0.480719] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page
[    0.487036] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages
[    0.493860] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page
[    0.500162] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
[    0.506983] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page
[    0.513281] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages
[    0.520101] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
[    0.532039] ACPI: Interpreter disabled.
[    0.536410] iommu: Default domain type: Translated
[    0.541235] iommu: DMA domain TLB invalidation policy: strict mode
[    0.547929] pps_core: LinuxPPS API ver. 1 registered
[    0.552925] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
[    0.562117] PTP clock support registered
[    0.566073] EDAC MC: Ver: 3.0.0
[    0.569478] scmi_core: SCMI protocol bus registered
[    0.575433] NetLabel: Initializing
[    0.578862] NetLabel:  domain hash size = 128
[    0.583240] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO
[    0.588981] NetLabel:  unlabeled traffic allowed by default
[    0.594727] vgaarb: loaded
[    0.597716] clocksource: Switched to clocksource arch_sys_counter
[    0.607276] VFS: Disk quotas dquot_6.6.0
[    0.611325] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.618907] AppArmor: AppArmor Filesystem Enabled
[    0.623720] pnp: PnP ACPI: disabled
[    0.633222] NET: Registered PF_INET protocol family
[    0.638348] IP idents hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.681981] tcp_listen_portaddr_hash hash table entries: 1024 (order: 2, 16384 bytes, linear)
[    0.690645] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.698504] TCP established hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.706641] TCP bind hash table entries: 16384 (order: 7, 524288 bytes, linear)
[    0.714294] TCP: Hash tables configured (established 16384 bind 16384)
[    0.721223] MPTCP token hash table entries: 2048 (order: 3, 49152 bytes, linear)
[    0.728785] UDP hash table entries: 1024 (order: 3, 32768 bytes, linear)
[    0.735563] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes, linear)
[    0.742946] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.748653] NET: Registered PF_XDP protocol family
[    0.753475] PCI: CLS 0 bytes, default 64
[    0.757841] Trying to unpack rootfs image as initramfs...
[    0.761316] kvm [1]: nv: 554 coarse grained trap handlers
[    0.769141] kvm [1]: IPA Size Limit: 40 bits
[    0.775212] kvm [1]: vgic-v2@c420000
[    0.778869] kvm [1]: GIC system register CPU interface enabled
[    0.784791] kvm [1]: vgic interrupt IRQ9
[    0.788821] kvm [1]: Hyp nVHE mode initialized successfully
[    0.799404] Initialise system trusted keyrings
[    0.803956] Key type blacklist registered
[    0.808325] workingset: timestamp_bits=42 max_order=19 bucket_order=0
[    0.814971] zbud: loaded
[    0.818583] fuse: init (API version 7.41)
[    0.823414] integrity: Platform Keyring initialized
[    0.828426] integrity: Machine keyring initialized
[    0.880872] Key type asymmetric registered
[    0.885046] Asymmetric key parser 'x509' registered
[    1.382187] Initramfs unpacking failed: invalid magic at start of compressed archive
[    1.413078] Freeing initrd memory: 65536K
[    1.425604] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245)
[    1.433169] io scheduler mq-deadline registered
[    1.444019] ledtrig-cpu: registered to indicate activity on CPUs
[    1.450176] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    1.462922] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    1.471186] Serial: AMBA driver
[    1.474625] msm_serial: driver initialized
[    1.478815] SuperH (H)SCI(F) driver initialized
[    1.484937] mousedev: PS/2 mouse device common for all mice
[    1.492318] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
[    1.500724] NET: Registered PF_INET6 protocol family
[    1.513996] Segment Routing with IPv6
[    1.517755] In-situ OAM (IOAM) with IPv6
[    1.521766] mip6: Mobile IPv6
[    1.524754] NET: Registered PF_PACKET protocol family
[    1.529924] mpls_gso: MPLS GSO support
[    1.540303] registered taskstats version 1
[    1.544742] Loading compiled-in X.509 certificates
[    1.590943] Loaded X.509 cert 'Build time autogenerated kernel key: f27d3784872dbc02cc9e3ba5d621690ee8ee1314'
[    1.608241] Demotion targets for Node 0: null
[    1.613050] Key type .fscrypt registered
[    1.616997] Key type fscrypt-provisioning registered
[    1.654117] Key type encrypted registered
[    1.658172] AppArmor: AppArmor sha256 policy hashing enabled
[    1.663896] ima: No TPM chip found, activating TPM-bypass!
[    1.669410] ima: Allocated hash algorithm: sha256
[    1.674183] ima: No architecture policies found
[    1.678798] evm: Initialising EVM extended attributes:
[    1.683959] evm: security.selinux
[    1.687286] evm: security.SMACK64 (disabled)
[    1.691573] evm: security.SMACK64EXEC (disabled)
[    1.696209] evm: security.SMACK64TRANSMUTE (disabled)
[    1.701282] evm: security.SMACK64MMAP (disabled)
[    1.705919] evm: security.apparmor
[    1.709330] evm: security.ima
[    1.712307] evm: security.capability
[    1.715895] evm: HMAC attrs: 0x1
[    1.802570] clk: Disabling unused clocks
[    1.806541] PM: genpd: Disabling unused power domains
[    1.811706] Warning: unable to open an initial console.
[    1.820766] Freeing unused kernel memory: 2816K
[    1.844803] Checked W+X mappings: passed, no W+X pages found
[    1.850532] Run /init as init process
[    1.854212]   with arguments:
[    1.857187]     /init
[    1.859465]   with environment:
[    1.862619]     HOME=/
[    1.864982]     TERM=linux
[   11.918776] platform 11280000.pcie: deferred probe pending: platform: wait for supplier /soc/t-phy/pcie-phy@11c00000
[   11.929400] platform 11002000.serial: deferred probe pending: (reason unknown)

Debugging

I tried to extract the DTB file from the OpenWRT recovery.itb. That file is larger than the one coming from Debian. The output very similar, I see some udev stuff, then hangs. I tried Frank W.'s rootfs.cpio.zst found here. Unfortunately it’s the same. I’m happy to hear and test any idea. Is it possible that the init cannot take over the console output? Thanks in advance!

1 Like

I also guess problem is missing depency for serial as you have a deferred message

Maybe you can get kernel config from their sources…

The only depency i see is infracfg and topckgen,so maybe the mt7986 specific clock drivers are missing from the defconfig.

It also looks like initrd is not used,but it looks right so far…can you try dropping the init var from bootargs?

Thanks for the ideas. After a few more failed attempt, I pivoted to QEMU to quickly experiment with ideas. Unfortunately (or not) the behavior was very similar to R3 Mini.

What I celarly missed, the conversion of the initrd.gz to u-boot format. I done this with the following command:

mkimage -A arm64 -O linux -T ramdisk -C gzip -n "netboot image" -a 0x44000000 -d initrd.gz uinitrd.gz

With that, u-boot is able to use the ramdisk as an argument for the booti command:

MT7986> booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}

## Loading init Ramdisk from Legacy Image at 48000000 ...
   Image Name:   netboot image
   Image Type:   AArch64 Linux RAMDisk Image (gzip compressed)
   Data Size:    40348103 Bytes = 38.5 MiB
   Load Address: 44000000
   Entry Point:  44000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 47000000
   Booting using the fdt blob at 0x47000000
Working FDT set to 47000000
   Loading Ramdisk to bc13f000, end be7b99c7 ... OK
   Loading Device Tree to 00000000bc136000, end 00000000bc13e99a ... OK
Working FDT set to bc136000

Starting kernel ...

Unfortunately this similar to my first attempt:

...
[    1.779414] Warning: unable to open an initial console.
[    1.788534] Freeing unused kernel memory: 2816K
[    1.812645] Checked W+X mappings: passed, no W+X pages found
[    1.818365] Run /init as init process
[   11.919639] platform 11280000.pcie: deferred probe pending: platform: wait for supplier /soc/t-phy/pcie-phy@11c00000
[   11.930243] platform 11002000.serial: deferred probe pending: (reason unknown)

Leaving the init= part has the following effect:

...
[    1.247771] Waiting for root device ...
[    1.251904] /dev/root: Can't open blockdev
[    1.256048] VFS: Cannot open root device "" or unknown-block(0,0): error -6
[    1.263072] Please append a correct "root=" boot option; here are the available partitions:
[    1.271470] List of all bdev filesystems:
[    1.275495]  fuseblk
[    1.275498] 
[    1.279176] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    1.287480] CPU: 1 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.12.8-arm64 #1  Debian 6.12.8-1

Also tried with root=/dev/ram0 found in old forum threads, no luck, very similar result as the previous attempts…

You do not need any conversion of initrd to uboot format. Initrd is loaded by uboot and only used by kernel which needs options for it (e.g. compression formats).

But the kernel you use seems to miss any depency for serial (your ttyS0) so you loose serial output after earlycon ends and kernel uses the devicetree and own driver. I guess infracfg driver is missing. Idk if debian uses a specific config for this board or the full arm64 defconfig or something else.

This option is missing in arm64 defconfig.

For the init it’s strange…i use this (have a root var in bootargs,but it’s unused)

Good hint, thank you! I think I found the relevant PR from the Debian linux repo: bananapi-r3-support commit

From that here is the tip of the arm64/config in the tree.

Apparently CONFIG_MTK_INFRACFG=y config option is there, here is the git blame for the commit wich added it.

I quickly loaded the latest initrd.gz with QEMU EFI (not u-boot), it loads, I get a busybox recover shell, but unfortunately there is no /proc/config.gz or other source of buildconfig. So I cannot tell for sure if this is the actual config they build from, but CONFIG_IKCONFIG_PROC missing so at least this match.

But apparently the clock drivers built as modules:

CONFIG_COMMON_CLK_MT7986=m
CONFIG_COMMON_CLK_MT7986_ETHSYS=m

This could be a problem, right? Unless the init properly uncompressed and mounted…

yes, clocks are needed before rootfs is mounted, possibly these are baked into initrd, but if this kernel is installed to emmc it will need clocks to access storage, so module is wrong

That was the issue! Now works well with CONFIG_COMMON_CLK_MT7986=y. Thank you for the help in this investigation!

For the record, here are the final commands:

usb start
setenv kernel_addr_r 0x40000000
setenv ramdisk_addr_r 0x44000000
setenv fdt_addr_r 0x48000000
setenv bootargs earlycon=uart8250,mmio32,0x11002000 console=ttyS0,115200n8 rootwait initrd=${ramdisk_addr_r},64M
fatload usb 0:1 ${kernel_addr_r} linux-custom
fatload usb 0:1 ${fdt_addr_r} mt7986a-bananapi-bpi-r3-mini.dtb
fatload usb 0:1 ${ramdisk_addr_r} initrd.gz
booti ${kernel_addr_r} - ${fdt_addr_r}

Where linux-custom is a kernel built from the debian-linux sources, using their arm64 defconfig with that small change above. I think I will file open a ticket or do a PR for the upstream. Unfortunately I dont have all the boards to test, only the R3-Mini, is there anything go wrong if all CLK_MT* defaulted to yes?

:+1:

not tested yet, but basicly it should only matter in size of kernel binary as driver is bound to compatible strings in devicetree…so you select the drivers there. But clock, pinctrl and some others are needed very early to get system up

more interesting would be how installer itself works…does it create an own partitiontable and overrides bootchain you have already on your card? or only install rootfs and kernel?

more interesting would be how installer itself works…does it create an own partitiontable and overrides bootchain you have already on your card? or only install rootfs and kernel?

My plan to install debian only to the NVMe. Hopefully it wont touches the NAND/eMMC, so I can keep stock fw on NAND and your version on eMMC including your u-boot. Since your u-boot support NVMe I would like to chainload the kernel from there. This setup would not require flash-kernel utility, maybe not even post-update hooks.

FYI: pull-request sent to debian mainline, bug tracked here: https://bugs.debian.org/1094195

1 Like

Have you tried this after fixing stock kernel?

Not yet, hopefully at the weekend. I update my kernel frequently (Debian Sid) so my original plan to wait until the PR make it to the stock kernel. But I think that takes longer than I expected for such a simple modification.

The upstream maintainer want to make sure if this is not just an initrd issue. If only modules missing, they can be included to the initrd and does not increase the size of the kernel.

However so far I cannot boot the kernel with modified initrd.gz. Basically I unpacked the initrd.gz, put the version-correct .ko.xz modules into the unpacked folder and repack it. I copied the while drivers/clk to the modules folder.

With that, the kernel log looks like the following:

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 6.12.8-arm64 ([email protected]) (aarch64-linux-gnu-gcc-14 (Debian 14.2.0-12) 14.2.0, GNU ld (GNU Binutils for Debian) 2.43.50.20241230) #1 SMP Debian 6.12.8-1 (2025-01-02)
[    0.000000] KASLR disabled due to lack of seed
[    0.000000] Machine model: Bananapi BPI-R3 Mini
[    0.000000] earlycon: uart8250 at MMIO32 0x0000000011002000 (options '')
[    0.000000] printk: legacy bootconsole [uart8250] enabled
[    0.000000] efi: UEFI not found.
[    0.000000] OF: reserved mem: 0x0000000015194000..0x0000000015194fff (4 KiB) nomap non-reusable wo-boot@15194000
[    0.000000] OF: reserved mem: 0x00000000151e0000..0x00000000151e7fff (32 KiB) nomap non-reusable wo-ilm@151e0000
[    0.000000] OF: reserved mem: 0x00000000151e8000..0x00000000151e9fff (8 KiB) nomap non-reusable wo-dlm@151e8000
[    0.000000] OF: reserved mem: 0x00000000151f0000..0x00000000151f7fff (32 KiB) nomap non-reusable wo-ilm@151f0000
[    0.000000] OF: reserved mem: 0x00000000151f8000..0x00000000151f9fff (8 KiB) nomap non-reusable wo-dlm@151f8000
[    0.000000] OF: reserved mem: 0x0000000042ff0000..0x0000000042ffffff (64 KiB) map non-reusable ramoops@42ff0000
[    0.000000] OF: reserved mem: 0x0000000043000000..0x000000004302ffff (192 KiB) nomap non-reusable secmon@43000000
[    0.000000] OF: reserved mem: 0x000000004fc00000..0x000000004fcfffff (1024 KiB) nomap non-reusable wmcpu-reserved@4fc00000
[    0.000000] OF: reserved mem: 0x000000004fd00000..0x000000004fd3ffff (256 KiB) nomap non-reusable wo-emi@4fd00000
[    0.000000] OF: reserved mem: 0x000000004fd40000..0x000000004fd7ffff (256 KiB) nomap non-reusable wo-emi@4fd40000
[    0.000000] OF: reserved mem: 0x000000004fd80000..0x000000004ffbffff (2304 KiB) nomap non-reusable wo-data@4fd80000
[    0.000000] NUMA: Faking a node at [mem 0x0000000040000000-0x00000000bfffffff]
[    0.000000] NODE_DATA(0) allocated [mem 0xbfbe9240-0xbfbec97f]
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000040000000-0x00000000bfffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000]   Device   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000040000000-0x0000000042ffffff]
[    0.000000]   node   0: [mem 0x0000000043000000-0x000000004302ffff]
[    0.000000]   node   0: [mem 0x0000000043030000-0x000000004fbfffff]
[    0.000000]   node   0: [mem 0x000000004fc00000-0x000000004ffbffff]
[    0.000000]   node   0: [mem 0x000000004ffc0000-0x00000000bfffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x00000000bfffffff]
[    0.000000] cma: Reserved 64 MiB at 0x00000000b8600000 on node -1
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.1 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: MIGRATE_INFO_TYPE not supported.
[    0.000000] psci: SMC Calling Convention v1.4
[    0.000000] percpu: Embedded 34 pages/cpu s100952 r8192 d30120 u139264
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: detected: GIC system register CPU interface
[    0.000000] CPU features: detected: ARM erratum 845719
[    0.000000] alternatives: applying boot alternatives
[    0.000000] Kernel command line: earlycon=uart8250,mmio32,0x11002000 console=ttyS0,115200n8 rootwait initrd=0x44000000,64M
[    0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[    0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[    0.000000] Fallback order for Node 0: 0 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 524288
[    0.000000] Policy zone: DMA
[    0.000000] mem auto-init: stack:all(zero), heap alloc:on, heap free:off
[    0.000000] software IO TLB: SWIOTLB bounce buffer size adjusted to 2MB
[    0.000000] software IO TLB: area num 4.
[    0.000000] software IO TLB: mapped [mem 0x00000000bf45a000-0x00000000bf65a000] (2MB)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] ftrace: allocating 50221 entries in 197 pages
[    0.000000] ftrace: allocated 197 pages with 4 groups
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu: 	RCU restricting CPUs from NR_CPUS=512 to nr_cpu_ids=4.
[    0.000000] 	Rude variant of Tasks RCU enabled.
[    0.000000] 	Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.000000] RCU Tasks Rude: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] RCU Tasks Trace: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] GICv3: GIC: Using split EOI/Deactivate mode
[    0.000000] GICv3: 640 SPIs implemented
[    0.000000] GICv3: 0 Extended SPIs implemented
[    0.000000] Root IRQ handler: gic_handle_irq
[    0.000000] GICv3: GICv3 features: 16 PPIs
[    0.000000] GICv3: GICD_CTRL.DS=0, SCR_EL3.FIQ=0
[    0.000000] GICv3: CPU0: found redistributor 0 region 0:0x000000000c080000
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] arch_timer: cp15 timer(s) running at 13.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x2ff89eacb, max_idle_ns: 440795202429 ns
[    0.000000] sched_clock: 56 bits at 13MHz, resolution 76ns, wraps every 4398046511101ns
[    0.008365] Console: colour dummy device 80x25
[    0.013749] Calibrating delay loop (skipped), value calculated using timer frequency.. 26.00 BogoMIPS (lpj=52000)
[    0.024070] pid_max: default: 32768 minimum: 301
[    0.030449] LSM: initializing lsm=lockdown,capability,landlock,yama,apparmor,tomoyo,bpf,ipe,ima,evm
[    0.040228] landlock: Up and running.
[    0.043904] Yama: disabled by default; enable with sysctl kernel.yama.*
[    0.050739] AppArmor: AppArmor initialized
[    0.054898] TOMOYO Linux initialized
[    0.058854] LSM support for eBPF active
[    0.063420] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.070862] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.080937] cacheinfo: Unable to detect cache hierarchy for CPU 0
[    0.099338] rcu: Hierarchical SRCU implementation.
[    0.104160] rcu: 	Max phase no-delay instances is 1000.
[    0.109596] Timer migration: 1 hierarchy levels; 8 children per group; 1 crossnode level
[    0.118843] EFI services will not be available.
[    0.127436] smp: Bringing up secondary CPUs ...
[    0.136289] Detected VIPT I-cache on CPU1
[    0.136339] GICv3: CPU1: found redistributor 1 region 0:0x000000000c0a0000
[    0.136374] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[    0.140249] Detected VIPT I-cache on CPU2
[    0.140280] GICv3: CPU2: found redistributor 2 region 0:0x000000000c0c0000
[    0.140301] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[    0.148196] Detected VIPT I-cache on CPU3
[    0.148229] GICv3: CPU3: found redistributor 3 region 0:0x000000000c0e0000
[    0.148246] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[    0.148345] smp: Brought up 1 node, 4 CPUs
[    0.204913] SMP: Total of 4 processors activated.
[    0.209637] CPU: All CPU(s) started at EL2
[    0.213763] CPU features: detected: 32-bit EL0 Support
[    0.218923] CPU features: detected: 32-bit EL1 Support
[    0.224085] CPU features: detected: CRC32 instructions
[    0.229291] alternatives: applying system-wide alternatives
[    0.251266] node 0 deferred pages initialised in 16ms
[    0.256409] Memory: 1878360K/2097152K available (15488K kernel code, 3790K rwdata, 11876K rodata, 2816K init, 939K bss, 149440K reserved, 65536K cma-reserved)
[    0.271719] devtmpfs: initialized
[    0.278977] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.288823] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)
[    0.297139] 23984 pages in range for non-PLT usage
[    0.297159] 515504 pages in range for PLT usage
[    0.303004] pinctrl core: initialized pinctrl subsystem
[    0.313748] DMI not present or invalid.
[    0.319703] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.326714] DMA: preallocated 256 KiB GFP_KERNEL pool for atomic allocations
[    0.333925] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.341890] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.349912] audit: initializing netlink subsys (disabled)
[    0.355518] audit: type=2000 audit(0.240:1): state=initialized audit_enabled=0 res=1
[    0.356310] thermal_sys: Registered thermal governor 'fair_share'
[    0.363311] thermal_sys: Registered thermal governor 'bang_bang'
[    0.369436] thermal_sys: Registered thermal governor 'step_wise'
[    0.375470] thermal_sys: Registered thermal governor 'user_space'
[    0.381505] thermal_sys: Registered thermal governor 'power_allocator'
[    0.387673] cpuidle: using governor ladder
[    0.398359] cpuidle: using governor menu
[    0.402402] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.409296] ASID allocator initialised with 65536 entries
[    0.415678] Serial: AMBA PL011 UART driver
[    0.421808] /soc/interrupt-controller@c000000: Fixed dependency cycle(s) with /soc/interrupt-controller@c000000
[    0.438506] /soc/pcie@11280000: Fixed dependency cycle(s) with /soc/pcie@11280000/interrupt-controller
[    0.455514] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
[    0.462407] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page
[    0.468721] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages
[    0.475546] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page
[    0.481848] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
[    0.488668] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page
[    0.494965] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages
[    0.501786] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
[    0.513948] ACPI: Interpreter disabled.
[    0.518327] iommu: Default domain type: Translated
[    0.523152] iommu: DMA domain TLB invalidation policy: strict mode
[    0.529845] pps_core: LinuxPPS API ver. 1 registered
[    0.534841] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
[    0.544036] PTP clock support registered
[    0.547990] EDAC MC: Ver: 3.0.0
[    0.551395] scmi_core: SCMI protocol bus registered
[    0.557362] NetLabel: Initializing
[    0.560794] NetLabel:  domain hash size = 128
[    0.565169] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO
[    0.570910] NetLabel:  unlabeled traffic allowed by default
[    0.576653] vgaarb: loaded
[    0.579647] clocksource: Switched to clocksource arch_sys_counter
[    0.587539] VFS: Disk quotas dquot_6.6.0
[    0.591632] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.599263] AppArmor: AppArmor Filesystem Enabled
[    0.604089] pnp: PnP ACPI: disabled
[    0.613447] NET: Registered PF_INET protocol family
[    0.618572] IP idents hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.662166] tcp_listen_portaddr_hash hash table entries: 1024 (order: 2, 16384 bytes, linear)
[    0.670843] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.678704] TCP established hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.686834] TCP bind hash table entries: 16384 (order: 7, 524288 bytes, linear)
[    0.694488] TCP: Hash tables configured (established 16384 bind 16384)
[    0.701411] MPTCP token hash table entries: 2048 (order: 3, 49152 bytes, linear)
[    0.708974] UDP hash table entries: 1024 (order: 3, 32768 bytes, linear)
[    0.715753] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes, linear)
[    0.723134] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.728841] NET: Registered PF_XDP protocol family
[    0.733663] PCI: CLS 0 bytes, default 64
[    0.737937] Trying to unpack rootfs image as initramfs...
[    0.751516] kvm [1]: nv: 554 coarse grained trap handlers
[    0.757379] kvm [1]: IPA Size Limit: 40 bits
[    0.763479] kvm [1]: vgic-v2@c420000
[    0.767172] kvm [1]: GIC system register CPU interface enabled
[    0.773094] kvm [1]: vgic interrupt IRQ9
[    0.777110] kvm [1]: Hyp nVHE mode initialized successfully
[    0.784678] Initialise system trusted keyrings
[    0.789261] Key type blacklist registered
[    0.793677] workingset: timestamp_bits=42 max_order=19 bucket_order=0
[    0.800282] zbud: loaded
[    0.803910] fuse: init (API version 7.41)
[    0.808732] integrity: Platform Keyring initialized
[    0.813752] integrity: Machine keyring initialized
[    0.866090] Key type asymmetric registered
[    0.870247] Asymmetric key parser 'x509' registered
[    1.412074] Initramfs unpacking failed: invalid magic at start of compressed archive
[    1.443760] Freeing initrd memory: 65536K
[    1.456852] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245)
[    1.464421] io scheduler mq-deadline registered
[    1.475384] ledtrig-cpu: registered to indicate activity on CPUs
[    1.481613] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
[    1.494104] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    1.502292] Serial: AMBA driver
[    1.505734] msm_serial: driver initialized
[    1.509922] SuperH (H)SCI(F) driver initialized
[    1.516159] mousedev: PS/2 mouse device common for all mice
[    1.523588] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
[    1.532102] NET: Registered PF_INET6 protocol family
[    1.545455] Segment Routing with IPv6
[    1.549219] In-situ OAM (IOAM) with IPv6
[    1.553220] mip6: Mobile IPv6
[    1.556213] NET: Registered PF_PACKET protocol family
[    1.561392] mpls_gso: MPLS GSO support
[    1.571771] registered taskstats version 1
[    1.576166] Loading compiled-in X.509 certificates
[    1.622340] Loaded X.509 cert 'Build time autogenerated kernel key: f27d3784872dbc02cc9e3ba5d621690ee8ee1314'
[    1.639624] Demotion targets for Node 0: null
[    1.644446] Key type .fscrypt registered
[    1.648395] Key type fscrypt-provisioning registered
[    1.685515] Key type encrypted registered
[    1.689573] AppArmor: AppArmor sha256 policy hashing enabled
[    1.695306] ima: No TPM chip found, activating TPM-bypass!
[    1.700822] ima: Allocated hash algorithm: sha256
[    1.705581] ima: No architecture policies found
[    1.710203] evm: Initialising EVM extended attributes:
[    1.715366] evm: security.selinux
[    1.718693] evm: security.SMACK64 (disabled)
[    1.722980] evm: security.SMACK64EXEC (disabled)
[    1.727616] evm: security.SMACK64TRANSMUTE (disabled)
[    1.732689] evm: security.SMACK64MMAP (disabled)
[    1.737327] evm: security.apparmor
[    1.740741] evm: security.ima
[    1.743718] evm: security.capability
[    1.747302] evm: HMAC attrs: 0x1
[    1.836343] clk: Disabling unused clocks
[    1.840312] PM: genpd: Disabling unused power domains
[    1.849255] Freeing unused kernel memory: 2816K
[    1.873403] Checked W+X mappings: passed, no W+X pages found
[    1.879156] Run /init as init process
[    2.115433] input: gpio-keys as /devices/platform/gpio-keys/input/input0
[    2.149036] mtk-wdt 1001c000.watchdog: Watchdog enabled (timeout=31 sec, nowayout=0)
[    2.230685] usbcore: registered new interface driver usbfs
[    2.240915] usbcore: registered new interface driver hub
[    2.248185] usbcore: registered new device driver usb
[    2.259451] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    2.367369] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    2.375703] Loaded X.509 cert '[email protected]: 577e021cb980e0e820821ba7b54b4961b8b4fadf'
[    2.384365] Loaded X.509 cert '[email protected]: 3abbc6ec146e09d1b6016ab9d6cf71dd233f0328'
[    2.393709] Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    2.399817] Loaded X.509 cert 'wens: 61c038651aabdcf94bd0ac7ff06c7248db18c600'
[   12.694908] mtk_rng 1020f000.rng: no clock for device: -517
[   12.703879] mt798x-wmac 18000000.wifi: mcu clock not found
[   12.709498] mt798x-wmac 18000000.wifi: ap2conn clock not found
[   12.997427] mt798x-wmac 18000000.wifi: firmware: failed to load mediatek/mt7986_rom_patch.bin (-2)
[   13.006497] mt798x-wmac 18000000.wifi: firmware: failed to load mediatek/mt7986_rom_patch.bin (-2)
[   13.015522] mt798x-wmac 18000000.wifi: Direct firmware load for mediatek/mt7986_rom_patch.bin failed with error -2
[   13.026221] mt798x-wmac 18000000.wifi: probe with driver mt798x-wmac failed with error -2
[   13.034637] platform 11002000.serial: deferred probe pending: (reason unknown)
[   13.041905] platform 11280000.pcie: deferred probe pending: platform: wait for supplier /soc/t-phy/pcie-phy@11c00000
[   13.052484] platform 1100a000.spi: deferred probe pending: mtk-spi: failed to get parent-clk
[   13.060967] platform 1020f000.rng: deferred probe pending: (reason unknown)
[   13.067963] platform 11200000.usb: deferred probe pending: platform: wait for supplier /soc/t-phy@11e10000/usb-phy@1000
[   13.078804] platform 15100000.ethernet: deferred probe pending: (reason unknown)
[   31.891698] usb_vbus: disabling

Then it hangs forever… Do you have any idea, why using the clock drivers as moules not enough but using them as builtin makes it work? Thanks for the help in advance, here is the debian gitlab discussion, feel free to join, but if you dont want to bother with the registration I’m happy to relay you ideas.

Possibly clocks are not working as module,always use them builtin as they are needed for core-system. If they care about size maybe only adding core clocks and keep ethsys as module.

I see, thanks. Looking into the mediatek clock driver commits I noticed Daniel also sent some fixes. I hope he dont mind if I ping him @dangowrt for confirmation if these clock drivers cannot be used as a module, or they should work as modules but something wrong with the drivers.