- adapt levels similar to vendor (never spins down, spins up to about half duty)
- use fan-recommended frequency
- introduce proper regulator vcc5v0_fan, drive it instead of vcc5v0_sys
- pull the tacho pin up so RPM values are not garbage
- `1001-fdt_fixup_ethernet-add-logs.patch` is already in v2026.07's root, just drop
- move dt/u-boot-dt/defconfig (as-is)
- drop ramboot/471/472 bins as it's handled by `EXT=rkusboot` now
- fancy: LwIP, mbedTLS, wget
- `.dts` is copy from rockchip64-7.2
- `recomputer-rk3588_defconfig` is similar to other rk3588 boards, except:
- enable all/most SPI Flash drivers
- enable FUSB302 driver
- `-u-boot.dtsi` just pulls in the generic dtsi + sfc/flash0 bootph
- stores environment in SPI at offset 0xc00000 size 0x20000
- fw_printenv/fw_setenv userspace vs SPI environment
- preboot flashes R/G/B LED (tri-color user LED)
- use mainline AT-F for mainline builds (so HDMI-RX works with mainline kernel)
- keep rkbin blob for vendor builds (although vendor is using rk u-boot for now)
- DeviceTree will be submitted to LKML separately
- identical across v7.1 and v7.2
- board file:
- make way for `edge` by sprinkling "only for vendor" shortcircuits in strategic places
- use a case/esac to gate `aic8800` extension, extra packages, and `recomputer-rk35xx-common.inc` sourcing
- series:
- `dt-bindings: arm: rockchip: Add Seeed Studio reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add USB host to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add USB Type-C to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add DisplayPort to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add PCIe Ethernet to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add M.2 slots to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add HDMI to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add HDMI input to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add analog audio to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add mini PCIe slot to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add 40-pin header to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add cooling fan to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: Add NPU to Seeed reComputer RK3588 Dev Kit`
- `arm64: dts: rockchip: describe PCIe RTL8125 Ethernet on reComputer RK3588`
- `arm64: dts: rockchip: Name the GPIO lines on Seeed reComputer RK3588`
- the way dtc code ends up in pypi is very strange / non-obvious
- there is an upstream fix at git.kernel.org/pub/scm/utils/dtc/dtc.git/commit?id=5008d1d6a356b8d0a78060da2e1021507d529cff
- but that is not yet in Rob Herring's pypi adaptation at devicetree-org/pylibfdt
- I've a fork with the upstream sync at https://github.com/rpardini/devicetree-pylibfdt/tree/sync-with-upstream-26.08
- `linux-genio-edge.config`: rewritten for v7.2, no changes
- `CONFIG_CEC_MEDIATEK_V2` is gone, CEC now under `CONFIG_DRM_MEDIATEK_HDMI`
- not real CEC support though (only some HPD bits)
- drop nio-12l's 'extra' DT, replaced by patches for the normal one below
- patches (in archive/genio-7.2):
- fix UFS lanes (otherwise no UFS at all)
- fix redudant i2c2 drive-strength
- add i2c3 (exposed on 40-pin header)
- add LEDs
- fix for ASoC audio (HDMI)
- `SEEED_USB_GADGET_ENABLE`
- `SEEED_MORSE_ENABLE`
- `SEEED_AIC_BLUEZ_ENABLE`
- `SEEED_MORSE_ENABLE`
- `SEEED_AUTOMOUNT_ENABLE`
- those all default to `SEEED_DEFAULT_ENABLE`, which defaults to `yes`
- use mainline u-boot for both vendor and mainline BRANCH'es
- as the vendor u-boot really doesn't work
- vendor u-boot won't bringup `ppll` clock unless NVMe is present
- make fancy u-boot, with flashing leds in preboot, lwip, mbedtls, etc
- fix family to rk35xx as it's not a 3588
- drop `ROCKCHIP_MASKROM_IMAGE` and `u-boot-rockchip-usb471.bin` et al as that
is now handled by EXT=rkusboot
- set SRC_CMDLINE for use with extlinux/EXT=u-boot-menu
- use newer blobs
- `PUSH_TO_REPO=<url>`: set the full git URL to push to
- `PUSH_TO_GITHUB=<org>/<repo>`: shorthand for pushing to GitHub; sets `PUSH_TO_REPO`
- note: be kind to GitHub, and use forks of torvalds/linux and u-boot/u-boot so GH has a decent base tree
- still, kernel pushes are huge, mostly due to the all-wifi-drivers commit that's always first and always slightly different
- note: when pushing to GitHub, keep in mind the pushed branch contains a GHA workflow, which will only run if you have GHA enabled on the repo
- examples (adapt to your username/forks):
- `./compile.sh BOARD=nanopct6 BRANCH=edge rewrite-kernel-patches PUSH_TO_GITHUB=rpardini/linux`
- `./compile.sh BOARD=rock-5b BRANCH=legacy rewrite-uboot-patches PUSH_TO_GITHUB=rpardini/armbian-patched-u-boot`
- `.dts` is copy from rockchip64-7.1
- except for pwm-related stuff, which is not even in mainline Linux, much less u-boot
- `recomputer-rk3576_defconfig` is similar to other rk3576 boards, except:
- enable all/most SPI Flash drivers
- disable UFS support
- enable PCA953X driver (so LEDs/USB can be GPIO'ed via the extender)
- enable FUSB302 driver
- `-u-boot.dtsi` just pulls in the generic dtsi + sfc0/flash0 bootph
- v2026.07 top-level patch to add support for `Zbit ZB25LQ128` flash chip
- stores environment in SPI at offset 0xc00000 size 0x20000
- fw_printenv/fw_setenv userspace vs SPI environment
- preboot flashes R/G/B LED (tri-color user LED)
- use updated DDR/BL31 rkbin blobs for mainline u-boot
- DeviceTree will be submitted to LKML separately
- this one already includes pwm-v4 fan (which is not upstream yet)
- most everything works, except WiFi/BT (AIC8800)
- tested: NVMe, SDcard, HDMI, USB2/USB3, USB-C (host-mode), GMAC0/1, i2c3, LEDs, analog audio
- upstream:
- `arm64: dts: rockchip: Add cooling fan to Seeed reComputer RK3576 Dev Kit`
- `arm64: dts: rockchip: Add analog audio to Seeed reComputer RK3576 Dev Kit`
- `arm64: dts: rockchip: Add HDMI to Seeed reComputer RK3576 Dev Kit`
- `arm64: dts: rockchip: Add PCIe to Seeed reComputer RK3576 Dev Kit`
- `arm64: dts: rockchip: Add USB Type-C to Seeed reComputer RK3576 Dev Kit`
- `arm64: dts: rockchip: Add USB host to Seeed reComputer RK3576 Dev Kit`
- `arm64: dts: rockchip: Add Seeed reComputer RK3576 Dev Kit`
- `dt-bindings: arm: rockchip: Add Seeed Studio reComputer RK3576 Dev Kit`
- identical across v7.1 and v7.2
- board file:
- make way for `edge` by sprinkling "only for vendor" shortcircuits in strategic places
- use a case/esac to gate `aic8800` extension, extra packages, and `recomputer-rk35xx-common.inc` sourcing
- > (Claude vs CodeRabbit, plus I asked for the rename after being confused)
- Type-C1 is the board's dedicated power-input port: its fusb302
negotiates USB-PD to feed the VCC12V~20V_DCIN rail, which is the root
of the board's power tree (vcc5v0_sys and everything below derive from
it). The connector was described more like a general dual-role port
than a power input, which let PD negotiation reach states this rail
cannot support.
- Force the port to a pure sink. Previously power-role was "dual" with
try-power-role = "sink", which allowed the fusb302 to present Rp and
source 5V out vbus5v0_typec1 -- wrong for a port that only ever draws
power in. A hard power-role = "sink" removes that path and makes
try-power-role redundant.
- Constrain the sink PDOs to voltages the DC-input rail can actually use.
VCC12V~20V_DCIN only supports 12V and above, but the variable and PPS
sink PDOs advertised acceptance from 5V, so a source could legitimately
settle on a 5V/9V contract that never brings the rail up to spec. Drop
the PPS APDO and raise the variable PDO minimum to 12V. The mandatory
vSafe5V fixed PDO stays, as a sink must always advertise it, and the
per-PDO currents are raised (3A fixed, 5A variable) to reflect the
board's real input capability rather than the placeholder 1A.
- Finally, declare pd-revision (PD Rev 2.0 Ver 1.2) to match the fusb302,
instead of relying on tcpm defaults.
- The kernel-side fusb302 remains status = "fail" (the >5s late-PD
hard-reset workaround), so these values take effect in the u-boot
tcpm+fusb302 stack that shares this DT and renegotiates early.
- arm64: dts: rockchip: Mixtile Blade 3: rename Type-C nodes by role
- The board's two fusb302 Type-C ports were labelled usbc0/usbc1, which
is hard to reason about: the numbers convey nothing about function, and
confusingly the power-input port is "1" while the data port is "0".
Rename the labels by role instead:
- usbc0 (USB3 data/host port, PD off) -> usbc_host
- usbc1 (USB-C power-input port, keeps PD) -> usbc_pwr
- and carry the same scheme through the connector, endpoint and pinctrl
labels (usbc_host_con/hs/ss/sbu/int, usbc_pwr_con/hs/ss/sbu/int). No
functional change; the physical Type-C0/Type-C1 numbering is retained
in the comments so the schematic mapping is preserved. The
vbus5v0_typec0/1 regulators keep their names, as those describe the
per-port 5V VBUS source rail and follow the common rk3588 convention.
- edge: u-boot: switch to mainline ATF (for working HDMI-RX)
- update DT from FUSB302+etc enabled one from rk64-7.1
- this still uses the rock-5b board.c file for FUSB302 fail -> ok fixup
- fix for working UMS (using the data-usb-c port)
- fixes for building bleedingedge (also with mainline uboot)
- re-enable edge BRANCH for this board, it's half decent now
- Describe RTL8125 function nodes (under a switch) for stable-MAC
- Implement 2x FUSB302, one for powering (same scheme as rock-5b), one for data
- This (together with u-boot work to follow) allows the board to be used with a
PD power supply without a bootloop; use a good supply & short cable
- HDMI, VOP, HDMI audio, et al
- HDMI-RX, with det, HDMI-RX audio in
- miniPCIe 2.0 slot power enable
- USB, NPU(Rocket)
- Describe RTL8125 function nodes (under a switch) for stable-MAC
- Implement 2x FUSB302, one for powering (same scheme as rock-5b), one for data
- This (together with u-boot work to follow) allows the board to be used with a
PD power supply without a bootloop; use a good supply & short cable
- HDMI, VOP, HDMI audio, et al
- HDMI-RX, with det, HDMI-RX audio in
- miniPCIe 2.0 slot power enable
- USB, NPU(Rocket)
> this one missed the bleedingedge bus in 07a7f4182e
- this gives us temperature monitoring for Realtek PHYs, which get
_real hot_ and sometimes are what's driving some boards to be warm
instead of the SoC.
```
~# sensors r8169_0_100:00-mdio-0
r8169_0_100:00-mdio-0
Adapter: MDIO adapter
temp1: +66.0°C (high = +120.0°C)
```
- builds rkusbboot from RadxaNaoki/rkusbboot
- looks for `u-boot-rockchip-usb471.bin` and `u-boot-rockchip-usb472.bin` in u-boot directory
- thus, requires recent mainline u-boot
- runs on `run_after_build` -- so `BOARD=x BRANCH=y uboot EXT=rkusbboot` works
- automatically enables `CONFIG_ROCKCHIP_MASKROM_IMAGE` in u-boot config, or bombs if it can't
- doesn't really "flash" anything -- everything in in RAM
- serial/u-boot console can then be used to flash image via eg UMS or network
- convert patches to hooks that do the patching/configuring
- one for boot order
- one for OTG ("the USB-A closest to the edge is the OTG port")
- enable lwip, btrfs, etc
- before this, ask extension would stage a userpatch during post_family_config,
if it was not in CONFIG_DEFS_ONLY mode
- this would cause hashing to differ between matrix-prepare and actual build
- matrix patches hash wouldn't have the patch
- actual-build patches hash would
- this caused infinite rebuilding of the kernel in CI
- previous commit introduced a new hook made for this purpose
- implement it here -- unconditionally, as it only ever run in actual build
- also implement a cleanup (in post_family_config) so any leftovers are
removed and won't affect further
- remove claims that userpatches are gitignored (they aren't) and that they
don't survive across builds (they do, unless handled as explained above)
- immediately after `kernel_drivers_create_patches`
- immediately before actually applying kernel sources
- this helps boards/families/extensions that need to stage out-of-tree
patches into eg userpatches, without impacting the patches hash
- the hook itself is hashed, so changes to it do impact the hooks hash
- uses the new hook `check_uboot_produced_binary_file`
- runs dumpimage and greps for magic string `Data Size: 0 Bytes`
- if found, exits with error
- this is to clearly catch build-host related issue in #8227
- this is called for each produced binary during u-boot build, before
they're actually packaged
- each call passes binfile and base_binfile to indicate the binary
- add new hook to hashed hooks for u-boot artifact
- this gives us temperature monitoring for Realtek PHYs, which get
_real hot_ and sometimes are what's driving some boards to be warm
instead of the SoC.
```
~# sensors r8169_0_100:00-mdio-0
r8169_0_100:00-mdio-0
Adapter: MDIO adapter
temp1: +66.0°C (high = +120.0°C)
```
- there's trouble ref ufs rework from Nicolas Frattaroli in collabora's tree
- which might or not be related to some BL32-not-really-there problem in Armbian
The kernel load failed on NIO-12L with:
Loading kernel image to 0x40000000...
** Reading file would overwrite reserved memory **
Failed to load '/boot/Image'
then booted garbage at 0x40000000 ("Bad Linux ARM64 Image magic!"),
because the script didn't check the load return code.
Root cause is a layout thinko. The script reserved kernel_addr_r at
0x40000000 with a comment claiming a 100 MB window (0x40000000-0x46400000),
but the board's first reserved region, low RAM 0x43200000-0x43DFFFFF, sits
*inside* that claimed window. Only the first 50 MB is actually contiguous:
0x43200000 - 0x40000000 = 0x3200000 = 52,428,800 bytes = 50 MB
The kernel Image is 54,565,376 bytes (~52.04 MB), so loading it at
0x40000000 would end at 0x43409A00 -- ~2.04 MB into the reserved region.
U-Boot's LMB check refuses the write, the (previously unchecked) load
fails, and booti runs whatever stale data is at 0x40000000.
Move kernel_addr_r above the hole to 0x44000000 (2 MB aligned, just past
the region's end at 0x43DFFFFF). That gives a contiguous window up to the
next reserved region at 0x54600000:
0x54600000 - 0x44000000 = 0x10600000 = 262 MB
The 52 MB kernel now lands at 0x44000000-0x47409A00 with ~210 MB of
headroom, clear of fdt (0x56000000) and ramdisk (0x64000000), which were
already placed above the holes.
Also guard the kernel/initramfs/dtb loads with if/else+exit so a refused
load aborts loudly instead of silently falling through to booti on an
unwritten address.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- from https://github.com/t2linux/linux-t2-patches/commit/b806ec3
- "Revert to applesmc" as it seems new SMC patches are borked
- `7001-drm-i915-fbdev-Discard-BIOS-framebuffers-exceeding-h`: keep attribution
- drop APFS_FS as we're not carrying those patches
Real 'docker history' showed native-toolchain=334MB poles.
- rustc/cargo pull libstd-rust-dev; move them to a new 'rust' group ordered
*after* native-toolchain (so shared gcc/build-essential stay there).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Real 'docker history' showed lopsided layers: cross-other 562MB, cross-arm
422MB, emulation 496MB, while compression was 5.5MB. Rebalance:
- split cross compilers per family: cross-amd64 / cross-arm64 / cross-armhf /
cross-other (riscv/loong/or1k) -> even ~200-280MB band
- split the heavy 'qemu' (qemu-user-static) out of 'emulation'; move tiny
binfmt-support/arch-test and the compression tools into 'core'
- dedupe packages in the generator (qemu-utils was listed 4x, etc.)
clang (libclang-dev, 633MB) and qemu (~490MB) are single packages and remain
unavoidable floors.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Assign each extension's host deps to a logical group (fs-tools, emulation,
clang, cross-arm/-other, build-tools, native-toolchain) so they land in the
matching Docker layer. Unprefixed deps (e.g. openssh-client) stay in 'core'.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Instead of a single huge 'apt-get install' RUN (one giant image layer),
group host_dependencies by their 'group::' prefix and emit one RUN per
group, ordered heaviest/most-stable first. Produces multiple layers that
Docker can pull and cache in parallel. apt update is its own layer.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Restructure the built-in dependency list into per-group blocks (native-toolchain,
build-tools, imaging, fs-tools, compression, emulation, python, cross-arm,
cross-other, clang, core) so the Docker image can be split into multiple layers.
Unprefixed entries fall into 'core'.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Introduces HOSTDEP_GROUP_DELIMITER/HOSTDEP_DEFAULT_GROUP and strips the
optional "group::package" prefix before dpkg matching / apt install.
Prep for Docker layer grouping.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Convert all in-tree add_host_dependencies__* hooks from space-separated
string appends to proper bash array appends, matching the new
EXTRA_BUILD_DEPS array contract.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The add_host_dependencies hook filled a space-separated string that was
word-split into host_dependencies[]. Make EXTRA_BUILD_DEPS a real array
and merge it with a quoted expansion instead, dropping the SC2206 hack.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- new iteration (amounts to the same), which I will submit to LKML
- includes dt-binding and many other boards than just T6
- thanks to all who submitted lspci!
- for stable MAC addresses, that match across u-boot and kernel
- new iteration (amounts to the same), which I will submit to LKML
- includes dt-binding and many other boards than just T6
- thanks to all who submitted lspci!
- Fixes: 6a1cfbc613
- this unifies board config; vendor branch only gets a different DTB name
and bluetooth stuff extra on top of edge
- drop usage of shared vendor/mekotronics config fragments