This repository is the hardware, firmware, and reverse-engineering wiki for the Miyoo Flip (my355, Rockchip RK3566). It is not the manual for one Linux distribution. A different operating system should still be able to use the hardware facts.
How statements are classified: Documentation model.
| Role | Where |
|---|---|
| Active implementation | Zlyme — status page |
| Historical implementation | Miyoo Flip ROCKNIX fork — Zetarancio/distribution, archived — status page |
| External upstream reference | ROCKNIX/distribution |
Archiving the fork does not retire its measurements. The last wiki stamp of that flip branch is d249b09bd9 (2026-09-02), RK3566 kernel Linux 7.0.2. Provenance for the upper-port OHCI clock, RTL8733BU patches, and related fixes stays on the historical page.
This main branch is the wiki, reference dumps, and small helper tools. Legacy local build scripts live on branch buildroot.
Write a Zlyme card and boot stock once so the included installer can repair this unit's preloader. No card then boots stock. A bootable card in the right-hand slot boots that OS. The standalone helpers are preloader tools. The 2026-10-08 measurements of those helpers are on that page. They are not extra install steps. The /pinctrl repair, provenance, and the older manual app are SD multiboot.
Observed on that repaired preloader: stock, the archived ROCKNIX fork, SpruceOS, and apommel's MinUI base. Zlyme was observed the same way on 2026-10-07 from a development card. Official firmware updates do not rewrite the preloader. Method by apommel.
Physical MASKROM plus xrock is the last resort: Flashing.
| Component | Detail |
|---|---|
| SoC | Rockchip RK3566 (quad Cortex-A55 @ 1.8 GHz) |
| GPU | Mali-G52 2EE (Bifrost) |
| RAM | LPDDR4 |
| Storage | SPI NAND 128 MB + 2x MicroSD |
| Display | LMY35120-20p (marking 2503x). Confirmed: 640×480 MIPI DSI, 2-lane, RGB888 video mode (stock DTS). Presumed: FT8006M COG — details |
| WiFi/BT | RTL8733BU (USB) |
| Audio | RK817 codec + speaker amplifier |
| PMIC | RK817 (main) + VDD_CPU (RK8600 @ 0x40; see I2C0 note below) |
| Battery | Miyoo 755060, 3.7 V nominal, 3000 mAh, 11.1 Wh (typical pack marking) |
| UART | ttyS2 @ 1,500,000 baud (3.3V) |
| USB | Two USB-C: upper (top) = host; lower (bottom) = charge + gadget. Board DTS — USB |
VDD_CPU / I2C0: Retail units populate RK8600 @ 0x40 only. TCS4525 @ 0x1c was removed from the board DTS (1f129e89df on the archived ROCKNIX fork) after Miyoo officially confirmed there is no second CPU-regulator hardware variant. 2025 stock DTS still lists both addresses for BSP comparison — not evidence of two production SKUs.
| Topic | Front page | Subpages |
|---|---|---|
| Implementations | implementations/ — Zlyme, archived ROCKNIX, stock | Zlyme, ROCKNIX fork, Stock |
| Input | hardware/input.md — UART stick, GPIO, hall, rumble | — |
| Boot and flash | boot-and-flash.md — specs, boot chain | Preloader tools, SD multiboot, Flashing, Erase the preloader |
| RK3566 reference | rk3566-reference.md — SoC overview | Datasheet, TRM 1, TRM 2, Unused pins |
| Stock firmware | stock-firmware-and-findings.md — dumps, overview | BSP/DDR findings, SPI/boot chain |
| Drivers and DTS | drivers-and-dts.md — DTS evolution, drivers | Board DTS, Drivers, DTS porting, Display, WiFi power-off, Suspend |
| Power-off / RK817 drain | miyoo-flip-power-off-investigation.md | Long-form investigation; kernel patch 0007 (SYS_CAN_SD) |
| Troubleshooting | troubleshooting.md | — |
| Serial | serial.md | — |
Reference boot logs in logs/: logs/boot_log_ROCKNIX.txt (mainline; DMC after resume, power-down reaches reboot: Power down); logs/boot_log_STOCK_INCLUDE_SLEEP_POWEROFF_AND_DEBUG.txt (stock with DDR/sleep debug); logs/boot_log_STOCK_INCLUDE_SLEEP_POWEROFF.txt (stock, sleep/poweroff).
Note: logs/boot_log_ROCKNIX.txt is a historical capture from the archived ROCKNIX fork. It is proof of a working mainline boot (DMC after resume, power-down), not a live log of Zlyme.
What the hardware does on mainline, and where it was demonstrated. “Demonstrated” means observed on the archived ROCKNIX fork unless the note says stock, Zlyme (with a revision), or a hardware fact. A fork observation does not mean Zlyme ships that configuration. Zlyme status: implementations/zlyme.md.
| Subsystem | On mainline | Notes |
|---|---|---|
| Boot (U-Boot + kernel) | Demonstrated | SPI NAND or SD. Archived fork: mainline 7.0.2 at stamp d249b09bd9 (older captures used 6.18+). |
| Display (DSI panel) | Demonstrated | 640×480. Panel controller identity is presumed — Display. |
| Backlight | Demonstrated | PWM4 |
| Audio (RK817) | Demonstrated | Codec works. PipeWire idle 60s and 099-audio_prime were archived ROCKNIX policy (79453c8, 32fa5f3). |
| WiFi (RTL8733BU) | Demonstrated | USB combo. Enable GPIO is separate from the radio driver — WiFi/BT power-off. Driver patches 001–006 are the archived fork’s tree. |
| Bluetooth | Demonstrated | Same combo chip. Agent loop and sleep power sequencing below are archived-fork userspace/driver history (86de663, 47fb725). |
| USB (upper / top) | Hardware fact | Host: usb_host0_ehci + usb_host0_ohci, PHY usb2phy1_otg, VBUS vcc5v0_host. OHCI needs the PHY 480 MHz clock or suspend hangs. Proven on the archived fork (54d8b02). |
| USB (lower / bottom) | Hardware fact | Charge + gadget (usb_host0_xhci, dr_mode = "otg"). No VBUS for a bus-powered device. |
| GPU (Mali-G52) | Demonstrated | mali_kbase + libmali, 200–800 MHz, on the archived fork |
| Storage | Demonstrated | SPI NAND MTD, both SD slots. Slots share vqmmc. |
| HDMI | Demonstrated when the DTS node is enabled | Video and audio |
| DMC (DDR devfreq) | Demonstrated out of tree | V2 SIP mechanism. The archived fork carried it as patch 1012. Zlyme zlyme44 (337ccbce) ships it as the external module rk3568_dmc.ko — Zlyme. BSP and DDR |
| VPU / RGA | Demonstrated | hantro-vpu, rockchip-rga |
| IEP | Not on mainline | BSP-only (MPP) |
| Suspend | Standard and deep suspend demonstrated | Deep suspend is a separate BL31 mode and was left off on the archived fork. Zlyme zlyme44 (337ccbce) enables it with vdd_logic off in mem suspend; hardware acceptance ran on Zlyme b709719a — Zlyme. Suspend |
| Input | Hardware fact | GPIO buttons, UART1 stick, PWM5 rumble, hall on GPIO0_PC6. Input |
Findings that made mainline work on this device (details in the wiki).
-
VSEL register hang: The BSP DTS uses
rockchip,suspend-voltage-selectorbut mainlinefan53555readsfcs,suspend-voltage-selector. Wrong name causes VDD_CPU to drop and the board to hang immediately after "FAN53555 Detected!" on kernels 6.4+. -
DSI panel init in command mode: The stock driver sends init commands via a DT property. On mainline, commands must be sent during
prepare()(command mode), notenable()(video mode), or they collide with the video stream on the shared FIFO. -
PMIC dependency cycles:
vcc9-supply = <&dcdc_boost>and some sleep pinctrl arrangements create circular dependencies thatfw_devlinkcannot resolve. The working arrangement uses<&vccsys>and a simpler RK817 pinctrl. Deep sleep still depends on a BL31ARMOFF_LOGOFFconfiguration; the archived ROCKNIX fork carried that as an rk8xx/suspend patch set and then left it disabled. Zlyme zlyme44 (337ccbce) enables that configuration. -
DDR on mainline: The BSP DMC uses Rockchip V2 SIP (shared memory + MCU/IRQ). An out-of-tree DMC devfreq driver implements that protocol. The archived ROCKNIX fork carried it as patch 1012 on Linux 7.0.2 (older captures used 6.18+). Zlyme zlyme44 (
337ccbce) ships the same mechanism as an external module on Linux 7.0.2. See BSP and DDR findings and SPI and boot chain. -
Suspend: Standard suspend was demonstrated on the archived ROCKNIX fork. Deep sleep (rk3568-suspend +
vdd_logicoff) stayed deferred there (.testing-disabled,CONFIG_RK3568_SUSPEND_MODEoff) pending an EmulationStation fix. Zlyme zlyme44 (337ccbce) enables deep sleep withvdd_logicoff in mem suspend; its hardware acceptance ran on Zlymeb709719a— Zlyme. See Suspend and vdd_logic. -
WiFi/BT full poweroff: The 8733bu driver only does software rfkill; it does not control the power-enable GPIO. Full hardware poweroff of the combo requires a separate driver that controls the enable GPIO and integrates with rfkill. See WiFi/BT power-off.
-
Boot chain: TF-A runtime firmware is BL31. OP-TEE is BL32, not BL31. The stock SPI FIT at
0x300000contains BL31 (atf-1throughatf-6), an OP-TEE segment labeled BL32, U-Boot, and an FDT. This repository does not record a boot that failed because OP-TEE was omitted, so that layout is the proven configuration rather than a demonstrated requirement that every U-Boot FIT include a separate OP-TEE image. Working SD boots described here also carried ATF and OP-TEE, except Zlyme: its card FIT carries BL31 v1.44 and U-Boot with no OP-TEE. Zlyme zlyme44 (337ccbce) boots that way, and the same BL31-only layout resumed from deep suspend in Zlyme’s hardware acceptance onb709719a(observed in Zlyme; no serial capture is kept in this wiki). See Boot and flash and SPI and boot chain. -
Full power-off / off-state drain: The ~8 mA battery drain while “off” was traced to RK817 SYS_CAN_SD (charger block stays active). The archived ROCKNIX fork cleared that bit in
rk817_battery_init()as kernel patch 0007 (BSP parity). The bit is battery-backed: a true POR leaves it set (0xe6 = 0xc5); neither stock SPL nor that fork’s U-Boot clears it, so a warm reboot still shows0x40from the previous kernel. See Power-off investigation, Troubleshooting, and 560a99c. Earlier guidance to omitsystem-power-controllerto “fix drain” is obsolete once 0007 is applied. DTS pinctrl on that fork followed upstream-stylepmic_pins(a482d5c). -
Fuel-gauge internal resistance: Mainline
rk817_charger.cnever readsfactory-internal-resistance-micro-ohms. -
2025 stock alignment: PMIC suspend/resume, battery OCV (descending table), shared SD
vqmmc, DMC devfreq tuning, and DSI/panel init were refined against newer stock on the archived fork. See Stock firmware and findings and Board DTS / PMIC / DDR. Commit history: archivedflip. -
USB ports: Two USB-C, named upper (top) and lower (bottom). Upper is host (
usb_host0_ehci+usb_host0_ohci,usb2phy1_otg, VBUSvcc5v0_host). Disablingusb2phy1_otgas unused is what first broke host. The OHCI companion is required for full-speed devices, andrk356x-base.dtsiomits the PHY clock it needs (480 MHz / stock"utmi"); enabling the controller without that clock hung suspend in firmware. The archived fork’s node that includes the clock is 54d8b02. Lower is charge/gadget onusb_host0_xhciand cannot raise VBUS. Board DTS — USB. -
Power-off vs Wi-Fi panic: A board that “comes back on” after
poweroffwithON_SOURCE = 0x02was a warm reboot (8733bu cfg80211 BSS double-free), not a charger event.ON_SOURCE = 0x80is a genuine power-off. Patches 003/004 stop the panic. The restored multiboot preloader does not change off-state drain. Power-off investigation — 2026-08-27. -
VDD_CPU / I2C0: Retail hardware is RK8600 only. TCS4525 was dropped from the board DTS after Miyoo’s official confirmation there is no alternate CPU-regulator SKU (1f129e89df on the archived fork). Board DTS — I2C0.
docs/ Documentation wiki (maintained)
miyoo355_fw_20250527/ Official May 2025 card-flash unpack (DTS, rootfs; raw `miyoo355_fw.img` not kept in git — see docs/stock-firmware-and-findings.md)
spi_20241119160817/ Unpacked 2024 SPI dump (DTS, rootfs, joystick study used to improve the rocknix driver) — see docs/stock-firmware-and-findings.md
bl31_v1.44_stock_disasm/ BL31 v1.44 disassembly + ELF (stock rkbin snapshot) — see docs/stock-firmware-and-findings.md
bl31_v1.45_rocknix_disasm/ BL31 v1.45 disassembly + ELF (ROCKNIX rk3566)
bl31_v1.44_vs_v1.45_diff.patch Diff of disassembly exports (v1.44 vs v1.45)
logs/ Boot logs + PMIC/debugfs dumps (reference)
test-scripts/ `miyoo-flip-power-dump.sh` — optional on-device capture
preloader-stock-rocknix/ Two SD-card apps: apommel-multiboot (repair the preloader → multiboot, and restore it) and PreloaderEraser (historical erase tool; erasing does not guarantee USB MASKROM when another loader can boot) — see docs/boot-and-flash/sd-multiboot-apommel.md
Wiki: The docs/ tree is the device wiki and is maintained.
Boot logs: Under logs/ — historical mainline and stock captures. They are not a Zlyme runtime log.
Active OS: Zlyme. The archived ROCKNIX fork remains at Zetarancio/distribution as evidence. Legacy local build scripts live on branch buildroot. Flashing steps are in docs/boot-and-flash/flashing.md.
For the maintained Miyoo Flip OS, use Zlyme. Zlyme stable releases publish zlyme.img, a raw SD-card image. zlyme44 is the first stable release. The current published release is zlyme44.2 (2026-10-11).
- Write
zlyme.imgwith the Zlyme Installer (download it from its Releases page) or a raw-image writer. Either way the whole card is erased. - Put it in the right-hand slot.
- On an unprepared Flip, boot stock once and let the included
miyoo355_fw.imgfinish. - Boot Zlyme.
- Later updates are Settings → Update.
Standalone and advanced preloader jobs are Preloader tools. Do not erase the preloader as part of this install.
Details: Where to get images and Zlyme’s install guide.
Historical ROCKNIX card images from the archived fork are described in Where to get images. Those Actions artifacts are not a maintained download channel.
For legacy local build scripts, see branch buildroot.
For flashing and SD boot on this wiki, see Boot and flash.
Datasheets & TRM (Rockchip)
| Document | URL |
|---|---|
| RK3566 Datasheet V1.2 | FriendlyElec wiki |
| RK3568 TRM Part 1 | Radxa |
| RK3568 TRM Part 2 | Radxa |
steward-fu’s Miyoo Flip pages
| Topic | URL |
|---|---|
| UART | miyoo_flip_uart.htm |
| Specs | miyoo_flip_spec.htm |
| Pin mapping | miyoo_flip_pin.htm |
| MTD | miyoo_flip_mtd.htm |
- Release (many useful files): steward-fu/website — miyoo-flip — toolchain, U-Boot, xrock, SPI dumps, firmware, etc.
Related projects
- Zetarancio/zlyme — active Miyoo Flip OS for this project
- Zetarancio/distribution — archived Miyoo Flip ROCKNIX fork (historical evidence)
- ROCKNIX — official upstream, external reference
- GammaOS Core
Other reference
Documentation and scripts: GNU GPL v2. DTS/patches follow kernel GPL v2. Third-party components have their own licenses.
Thanks to apommel for baseos-my355 — the discovery that Miyoo's fdtgrep run left /pinctrl empty in the SPL device tree, the nine properties that repair it, and a write-up clear enough to reproduce and verify independently. SD multiboot on this device exists because of that work, and it keeps stock intact precisely because it repairs the vendor's own preloader instead of replacing it.
Thanks to steward-fu for the Miyoo Flip resource site and assets; beebono, sydarn, and the community behind SpruceOS for their work and support. This project wouldn’t be where it is without them.