{
  "version": "https://jsonfeed.org/version/1",
  "title": "Ian's Digital Garden",
  "home_page_url": "https://blog.ianwwagner.com/",
  "feed_url": "https://blog.ianwwagner.com//tag-arm.json",
  "description": "",
  "items": [
    {
      "id": "https://blog.ianwwagner.com//adventures-in-freebsd-bringup-on-an-rk3588-part-2.html",
      "url": "https://blog.ianwwagner.com//adventures-in-freebsd-bringup-on-an-rk3588-part-2.html",
      "title": "Adventures in FreeBSD Bringup on an RK3588 (Part 2)",
      "content_html": "<p>Last week I started the journey of <a href=\"adventures-in-freebsd-bringup-on-an-rk3588-part-1.html\">FreeBSD bringup on an RK3588 board</a>.\nAs a quick recap, the vendor U-Boot image that came with the board was pretty old\nand didn't have support for UEFI.\nGiven that FreeBSD's existing RockPro image has an EFI image which I'd like to be able to &quot;just boot,&quot;\nI grabbed the mainline Armbian &quot;edge&quot; image for the board and was able to get\nfairly deep in the kernel process with just this.</p>\n<p>Of course, there were warnings galore, and given the near-total lack of clocks,\nit stalled during the process of probing OHCI.</p>\n<h1><a href=\"#pruning-the-ohci-node\" aria-hidden=\"true\" class=\"anchor\" id=\"pruning-the-ohci-node\"></a>Pruning the OHCI node</h1>\n<p>The next step was actually suggested by a discussion with ChatGPT; don't hate 😅\nSince the OHCI device was causing the stall,\nmaybe we could just disable it and see what the next blocker is?</p>\n<p>This turned out to be relatively straightforward.\nTo access U-Boot, you need to have pretty fast reflexes.\nThe prompt to abort automatic boot and go to the console\nis only up for a second or 2.\nAnd you have to press any key <em>besides</em> enter!</p>\n<p>First, we need to set up our own FDT table.\nFDT stands for Flat Device Tree, and U-Boot lets us manipulate this directly in memory before handing off to the OS bootloader.\nFor more details on these commands, check out the <a href=\"https://docs.u-boot.org/en/latest/usage/cmd/fdt.html\">U-Boot docs</a>.</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">=&gt; fdt move ${fdtcontroladdr} ${fdt_addr_r} 100000\n=&gt; fdt addr ${fdt_addr_r}\n</code></pre>\n<p>From our last boot log, we could see the address of failing OHCI controller.</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">ohci0: &lt;Generic OHCI Controller&gt; mem 0xfc8c0000-0xfc8fffff irq 14 on ofwbus0\n</code></pre>\n<p>To confirm that we're tweaking the right device,\nwe can use <code>fdt print</code>.\nWe should get the OHCI controller details.</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">=&gt; fdt print /usb@fc8c0000\nusb@fc8c0000 {\n        compatible = &quot;rockchip,rk3588-ohci&quot;, &quot;generic-ohci&quot;;\n        reg = &lt;0x00000000 0xfc8c0000 0x00000000 0x00040000&gt;;\n        interrupts = &lt;0x00000000 0x000000db 0x00000004 0x00000000&gt;;\n        clocks = &lt;0x00000021 0x00000190 0x00000021 0x00000191 0x00000021 0x000002c0 0x0000002a&gt;;\n        phys = &lt;0x0000002b&gt;;\n        phy-names = &quot;usb&quot;;\n        power-domains = &lt;0x00000022 0x0000001f&gt;;\n        status = &quot;okay&quot;;\n        phandle = &lt;0x00000169&gt;;\n};\n</code></pre>\n<p>Disabling this is pretty simple:</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">=&gt; fdt set /usb@fc8c0000 status &quot;disabled&quot;\n</code></pre>\n<p>And with that,\nwe're off to boot with the modified device tree like so:</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">=&gt; mmc dev 1\n=&gt; fatload mmc 1:1 ${kernel_addr_r} /EFI/BOOT/bootaa64.efi\n=&gt; bootefi ${kernel_addr_r} ${fdt_addr_r}\n</code></pre>\n<h1><a href=\"#getting-a-minimal-root-filesystem\" aria-hidden=\"true\" class=\"anchor\" id=\"getting-a-minimal-root-filesystem\"></a>Getting a Minimal Root Filesystem</h1>\n<p>This gets all the way through kernel boot!\nUnfortunately, we have no storage.\nThe SD reader is legible to U-Boot, but not to FreeBSD.\nUSB isn't working either.</p>\n<p>So, we don't have <em>any</em> storage, and of course we don't have network yet.\nBut we DO have access to the SD card during the early boot process,\nand FreeBSD's generic kernel includes the <code>md</code> driver which is capable of loading an image!</p>\n<p>First I'll describe the high-level edits we'll make to the base image.\nI'll include scripts at the end which covers the mechanical details,\nand focus on high-level explanations first.</p>\n<h2><a href=\"#configuring-etcfstab\" aria-hidden=\"true\" class=\"anchor\" id=\"configuring-etcfstab\"></a>Configuring <code>/etc/fstab</code></h2>\n<p>First, we need to edit the <code>fstab</code> file.\nThe default primary UFS partition doesn't work for our current setup yet,\nso I've replaced the root filesystem with /dev/md0.</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\"># RAM-root bring-up\n/dev/md0        /       ufs     rw              0       0\ntmpfs           /tmp    tmpfs   rw,mode=1777    0       0\n</code></pre>\n<h2><a href=\"#create-a-minimal-rescue-root-image\" aria-hidden=\"true\" class=\"anchor\" id=\"create-a-minimal-rescue-root-image\"></a>Create a Minimal Rescue Root Image</h2>\n<p>Next, we need to create a <em>minimal</em> image.\nIt has to be minimal because there's a size limit to how much we can load via this method.\nI <em>think</em> the value is ~1GiB <a href=\"https://cgit.freebsd.org/src/tree/sys/arm64/arm64/locore.S?id=355f02cddbf017706d3293f09ed6c2b5570936c1#n385\">based on this source code</a>.</p>\n<p>My first attempt ran afoul of this limit.\nAfter taking a long time (20 minutes or so?)\nof copying a ~3GiB image from the SD card into RAM,\nit just hung with no clear indication of what went wrong 🥴</p>\n<p>To solve this, I opted for a minimal root image from <code>/rescue</code>.\nI could have created a more custom minimal base image (and I probably will later),\nbut this was the easy path to get <em>something</em> up.</p>\n<p>I created an image by basically copying the contents of <code>/rescue</code> to a temp directory,\nalong with <code>/etc/fstab</code> from the CURRENT RockPro64 image.\nI also added a basic skeleton for other mount points (empty directories).\nThen I used <code>makefs</code> to turn the directory tree into a UFS2 disk image\nwhich <code>md</code> can mount later.\n(The script at the end has the details.)</p>\n<p>Then, I copied the rescue image into the original image's filesystem\nunder <code>/boot/mfsroot</code>.</p>\n<h2><a href=\"#configure-bootloaderconf\" aria-hidden=\"true\" class=\"anchor\" id=\"configure-bootloaderconf\"></a>Configure <code>/boot/loader.conf</code></h2>\n<p>Then we need to tell <code>loader.conf</code> about the image.\nThis is fairly straightforward.\nThe <code>mfsroot</code> isn't special; it's a name according to a convention\nthat's understood by the loader.\nBasically it creates an image named <code>mfsroot</code>,\nand configures the loader to boot from it,\nin single-user mode (baby steps).</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-conf\"><a-c># Bring-up: preload root filesystem into RAM\n</a-c>mfsroot_load<a-o>=</a-o>&quot;YES&quot;\nmfsroot_type<a-o>=</a-o>&quot;mfs_root&quot;\nmfsroot_name<a-o>=</a-o>&quot;/boot/mfsroot&quot;\nvfs.root.mountfrom<a-o>=</a-o>&quot;ufs:/dev/md0&quot;\nvfs.root.mountfrom.options<a-o>=</a-o>&quot;rw&quot;\n\n<a-c># Single-user mode; verbose boot\n</a-c>boot_single<a-o>=</a-o>&quot;YES&quot;\nboot_verbose<a-o>=</a-o>&quot;YES&quot;</code></pre>\n<h2><a href=\"#recap\" aria-hidden=\"true\" class=\"anchor\" id=\"recap\"></a>Recap</h2>\n<p>So, to recap where we are,\nwe've started with a FreeBSD-CURRENT image,\nderived a minimal rescue image from that,\nembedded the rescue image in <code>/boot</code>,\nand told the loader to use it as the root filesystem as <code>md</code> device.</p>\n<p>The image is loaded directly into RAM by the EFI boot process,\ncompensating for the fact that we don't have SD, USB, or NVMe working yet under FreeBSD.\nThe EFI boot process loads the kernel and root image, kicks off the kernel boot (with a modified device tree),\nand the FreeBSD kernel loads the rescue root FS.</p>\n<p><figure><img src=\"media/rk3588-rescue-first-boot.png\" alt=\"First boot viewed from a terminal emulator, ending in a root prompt\" /></figure></p>\n<h1><a href=\"#loading-a-full-base-system\" aria-hidden=\"true\" class=\"anchor\" id=\"loading-a-full-base-system\"></a>Loading a Full Base System</h1>\n<p>The rescue system is functional (it actually has 147 binaries at the time of this writing, which is not nothing!),\nbut it's a bit bare.\nFor example, there is no C compiler and no manpages.\nWe don't even have <code>uname</code> yet!</p>\n<p>You may recall that we <em>started</em> from a full SD card image, which is around 3GiB uncompressed.\nMy first thought was to just include that (recursively-ish) as another &quot;fullroot&quot; image to be loaded by <code>md</code>.\nThis runs into the 1GB limit though.\nBut, the rescue system is more featureful than you might imagine (especially if coming from another OS).\nIt includes utilities like <code>xz</code>, which will let us copy a <em>compressed</em> image to RAM during boot,\nand then expand it at our leisure once the system has booted.</p>\n<p>This turns out to be a good idea anyways, even without the 1GiB limit.\nSD cards are <em>slow</em> compared to the storage I'm used to.</p>\n<p>This took a fair bit of fiddling to get working, but you can see the process in the scripts at the end.</p>\n<h1><a href=\"#full-boot-log\" aria-hidden=\"true\" class=\"anchor\" id=\"full-boot-log\"></a>Full Boot Log</h1>\n<p>And with that, we have a full base system with a root shell!\nWe still have a lot of work left in terms of hardware support,\nand it's still single-user mode,\nbut the system is usable over the serial console.</p>\n<p>I've included the full boot log below for reference.</p>\n<details>\n<summary>Full boot log</summary>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">---&lt;&lt;BOOT&gt;&gt;---\nGDB: debug ports: uart\nGDB: current port: uart\nKDB: debugger backends: ddb gdb\nKDB: current backend: ddb\nWARNING: Cannot find freebsd,dts-version property, cannot check DTB compliance\n                   Type     Physical      Virtual   #Pages Attr\n               Reserved 00000010f000 00000010f000 00000001 WB\n     ConventionalMemory 000000200000 000000200000 00000750 WB\n               Reserved 000000950000 000000950000 00000033 WB\n     ConventionalMemory 000000983000 000000983000 0000167d WB\n       BootServicesData 000002000000 000002000000 000000dd WB\n     ConventionalMemory 0000020dd000 0000020dd000 000b9f23 WB\n             LoaderCode 0000bc000000 0000bc000000 0002c800 WB\n             LoaderData 0000e8800000 0000e8800000 00004000 WB\n    RuntimeServicesData 0000ec800000 0000ec800000 00000001 WB RUNTIME\n     ConventionalMemory 0000ec801000 0000ec801000 000001b2 WB\n             LoaderData 0000ec9b3000 0000ec9b3000 00000001 WB\n       BootServicesData 0000ec9b4000 0000ec9b4000 00000003 WB\n             LoaderCode 0000ec9b7000 0000ec9b7000 000000dd WB\n       BootServicesData 0000eca94000 0000eca94000 00000004 WB\n      ACPIReclaimMemory 0000eca98000 0000eca98000 00000103 WB\n       BootServicesData 0000ecb9b000 0000ecb9b000 00000001 WB\n    RuntimeServicesData 0000ecb9c000 0000ecb9c000 00000001 WB RUNTIME\n       BootServicesData 0000ecb9d000 0000ecb9d000 00000001 WB\n    RuntimeServicesData 0000ecb9e000 0000ecb9e000 00000021 WB RUNTIME\n       BootServicesData 0000ecbbf000 0000ecbbf000 00000002 WB\n    RuntimeServicesData 0000ecbc1000 0000ecbc1000 00000001 WB RUNTIME\n       BootServicesData 0000ecbc2000 0000ecbc2000 0000000a WB\n       BootServicesCode 0000ecbcc000 0000ecbcc000 00001333 WB\n    RuntimeServicesData 0000edeff000 0000edeff000 00000001 WB RUNTIME\n       BootServicesCode 0000edf00000 0000edf00000 00001f90 WB\n    RuntimeServicesCode 0000efe90000 0000efe90000 00000010 WB RUNTIME\n       BootServicesCode 0000efea0000 0000efea0000 00000160 WB\n       BootServicesData 000100000000 000100000000 002fc000 WB\n       BootServicesData 0003fc500000 0003fc500000 00003a00 WB\n       BootServicesData 0004f0000000 0004f0000000 00010000 WB\nPhysical memory chunk(s):\n  0x00200000 - 0x0094ffff,     7 MB (   1872 pages)\n  0x00983000 - 0xefffffff,  3830 MB ( 980605 pages)\n  0x100000000 - 0x3fbffffff, 12224 MB (3129344 pages)\n  0x3fc500000 - 0x3ffefffff,    58 MB (  14848 pages)\n  0x4f0000000 - 0x4ffffffff,   256 MB (  65536 pages)\nExcluded memory regions:\n  0x0010f000 - 0x0010ffff,     0 MB (      1 pages) NoAlloc NoDump\n  0xbc000000 - 0xe868cfff,   710 MB ( 181901 pages) NoAlloc\n  0xec800000 - 0xec800fff,     0 MB (      1 pages) NoAlloc\n  0xeca98000 - 0xecb9afff,     1 MB (    259 pages) NoAlloc\n  0xecb9c000 - 0xecb9cfff,     0 MB (      1 pages) NoAlloc\n  0xecb9e000 - 0xecbbefff,     0 MB (     33 pages) NoAlloc\n  0xecbc1000 - 0xecbc1fff,     0 MB (      1 pages) NoAlloc\n  0xedeff000 - 0xedefffff,     0 MB (      1 pages) NoAlloc\n  0xefe90000 - 0xefe9ffff,     0 MB (     16 pages) NoAlloc\n  0x100000000 - 0x100232fff,     2 MB (    563 pages) NoAlloc\nFound 8 CPUs in the device tree\nCopyright (c) 1992-2026 The FreeBSD Project.\nCopyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994\n        The Regents of the University of California. All rights reserved.\nFreeBSD is a registered trademark of The FreeBSD Foundation.\nFreeBSD 16.0-CURRENT #0 main-n289242-32878e64e687: Wed Sep 16 09:38:19 UTC 2026\n    root@releng3.nyi.freebsd.org:/usr/obj/usr/src/arm64.aarch64/sys/GENERIC arm64\nFreeBSD clang version 21.1.8 (https://github.com/llvm/llvm-project.git llvmorg-21.1.8-0-g2078da43e25a)\nWARNING: WITNESS option enabled, expect reduced performance.\nWITNESS configuration requests 2856 KiB of startup allocations with witness_count=1536, lock_order_data_count=2048, lock_order_hash_size=1021\nVT: init without driver.\nPreloaded elf kernel &quot;/boot/kernel/kernel&quot; at 0xffff00002c67a000.\nPreloaded mfs_root &quot;/boot/mfsroot&quot; at 0xffff00002c6835b0.\nPreloaded elf module &quot;/boot/kernel/umodem.ko&quot; at 0xffff00002c683600.\nPreloaded elf module &quot;/boot/kernel/ucom.ko&quot; at 0xffff00002c683e18.\nPreloaded md_image &quot;/boot/fullroot.ufs.xz&quot; at 0xffff00002c684670.\nPreloaded boot_entropy_platform &quot;efi_rng_seed&quot; at 0xffff00002c6846c8.\nPreloaded TSLOG data &quot;TSLOG&quot; at 0xffff00002c684720.\nreal memory  = 17171271680 (16375 MB)\nPhysical memory chunk(s):\n0x00000000200000 - 0x0000000094ffff, 7667712 bytes (1872 pages)\n0x00000000983000 - 0x000000bbffffff, 3144142848 bytes (767613 pages)\n0x000000e868d000 - 0x000000ec7fffff, 68628480 bytes (16755 pages)\n0x000000ec801000 - 0x000000eca97fff, 2715648 bytes (663 pages)\n0x000000ecb9b000 - 0x000000ecb9bfff, 4096 bytes (1 pages)\n0x000000ecb9d000 - 0x000000ecb9dfff, 4096 bytes (1 pages)\n0x000000ecbbf000 - 0x000000ecbc0fff, 8192 bytes (2 pages)\n0x000000ecbc2000 - 0x000000edefefff, 20172800 bytes (4925 pages)\n0x000000edf00000 - 0x000000efe8ffff, 33095680 bytes (8080 pages)\n0x000000efea0000 - 0x000000efffffff, 1441792 bytes (352 pages)\n0x00000100233000 - 0x000003e722bfff, 12465442816 bytes (3043321 pages)\n0x000003fc500000 - 0x000003ffefffff, 60817408 bytes (14848 pages)\n0x000004f0000000 - 0x000004ffffffff, 268435456 bytes (65536 pages)\navail memory = 16067567616 (15323 MB)\nStarting CPU 1 (100)\nStarting CPU 2 (200)\nStarting CPU 3 (300)\nStarting CPU 4 (400)\nStarting CPU 5 (500)\nStarting CPU 6 (600)\nStarting CPU 7 (700)\nFreeBSD/SMP: Multiprocessor System Detected: 8 CPUs\nrandom: no preloaded entropy cache\nrandom: read 2048 bytes from platform bootloader\nrandom: unblocking device.\nVIMAGE (virtualized network stack) enabled\nhostuuid: using 00000000-0000-0000-0000-000000000000\nULE: setup cpu 0\nULE: setup cpu 1\nULE: setup cpu 2\nULE: setup cpu 3\nULE: setup cpu 4\nULE: setup cpu 5\nULE: setup cpu 6\nULE: setup cpu 7\nrandom: entropy device external interface\nfirmware: 'tegra210_xusb_fw' version 0: 132608 bytes loaded at 0xffff000000c53844\nMAP ec800000 mode 2 pages 1\nMAP ecb9c000 mode 2 pages 1\nMAP ecb9e000 mode 2 pages 33\nMAP ecbc1000 mode 2 pages 1\nMAP edeff000 mode 2 pages 1\nMAP efe90000 mode 2 pages 16\nEFI runtime driver, fw spec 2.6.14\nkbd0 at kbdmux0\nmem: &lt;memory&gt;\nnull: &lt;full device, null device, zero device&gt;\nopenfirm: &lt;Open Firmware control device&gt;\nsound_global_init: snd_unit=-1 snd_vchans_enable=1 latency=2 feeder_rate_min=1 feeder_rate_max=2016000 feeder_rate_round=25\ntcp_log: tcp_log device\ncrypto: &lt;crypto core&gt;\nram0: reserving memory region:   200000-950000\nram0: reserving memory region:   983000-bc000000\nram0: reserving memory region:   e868d000-ec800000\nram0: reserving memory region:   ec801000-eca98000\nram0: reserving memory region:   ecb9b000-ecb9c000\nram0: reserving memory region:   ecb9d000-ecb9e000\nram0: reserving memory region:   ecbbf000-ecbc1000\nram0: reserving memory region:   ecbc2000-edeff000\nram0: reserving memory region:   edf00000-efe90000\nram0: reserving memory region:   efea0000-f0000000\nram0: reserving memory region:   100233000-3fc000000\nram0: reserving memory region:   3fc500000-3fff00000\nram0: reserving memory region:   4f0000000-500000000\nofwbus0: &lt;Open Firmware Device Tree&gt;\nofw_firmware0: &lt;OFW Firmware Group&gt; on ofwbus0\nclk_fixed0: &lt;Fixed clock&gt; on ofwbus0\nClock: spll, parent: none, freq: 702000000\nclk_fixed1: &lt;Fixed clock&gt; on ofwbus0\nClock: xin24m, parent: none, freq: 24000000\nclk_fixed2: &lt;Fixed clock&gt; on ofwbus0\nClock: xin32k, parent: none, freq: 32768\nregfix0: &lt;Fixed Regulator&gt; on ofwbus0\nregfix1: &lt;Fixed Regulator&gt; on ofwbus0\nregfix2: &lt;Fixed Regulator&gt; on ofwbus0\nregfix3: &lt;Fixed Regulator&gt; on ofwbus0\nregfix4: &lt;Fixed Regulator&gt; on ofwbus0\nregfix5: &lt;Fixed Regulator&gt; on ofwbus0\nregfix6: &lt;Fixed Regulator&gt; on ofwbus0\nregfix7: &lt;Fixed Regulator&gt; on ofwbus0\nregfix8: &lt;Fixed Regulator&gt; on ofwbus0\nregfix9: &lt;Fixed Regulator&gt; on ofwbus0\nsimple_mfd0: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd58a000-0xfd599fff on ofwbus0\nsimple_mfd1: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd5d0000-0xfd5d3fff on ofwbus0\nsimple_mfd2: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd5d8000-0xfd5dbfff on ofwbus0\nsimple_mfd3: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd5dc000-0xfd5dffff on ofwbus0\nsimple_mfd4: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd8d8000-0xfd8d83ff on ofwbus0\nsimple_mfd5: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd5d4000-0xfd5d7fff on ofwbus0\npsci0: &lt;ARM Power State Co-ordination Interface Driver&gt; on ofwbus0\npsci0: PSCI version 0.2 compatible\nFound SMCCC version 1.5\nsmccc0: &lt;ARM SMCCC v1.5&gt; on psci0\ncpulist0: &lt;Open Firmware CPU Group&gt; on ofwbus0\ncpu0: &lt;Open Firmware CPU&gt; on cpulist0\ncpu1: &lt;Open Firmware CPU&gt; on cpulist0\ncpu2: &lt;Open Firmware CPU&gt; on cpulist0\ncpu3: &lt;Open Firmware CPU&gt; on cpulist0\ncpu4: &lt;Open Firmware CPU&gt; on cpulist0\ncpu5: &lt;Open Firmware CPU&gt; on cpulist0\ncpu6: &lt;Open Firmware CPU&gt; on cpulist0\ncpu7: &lt;Open Firmware CPU&gt; on cpulist0\ngic0: &lt;ARM Generic Interrupt Controller v3.0&gt; mem 0xfe600000-0xfe60ffff,0xfe680000-0xfe77ffff irq 93 on ofwbus0\ngic0: using spi 424 to 480\ngic0: SPIs: 512, IDs: 65535\ngic0: Start searching for Re-Distributor\ngic0: CPU0 Re-Distributor has been found\ngic0: CPU0 Re-Distributor woke up\ngic0: CPU0 enabled CPU interface via system registers\nits0: &lt;ARM GIC Interrupt Translation Service&gt; mem 0xfe640000-0xfe65ffff on gic0\nits0: Applying RK3588 ITS errata\ngic0: using PENDBASE of 0x100250000 on cpu 0\nits1: &lt;ARM GIC Interrupt Translation Service&gt; mem 0xfe660000-0xfe67ffff on gic0\nits1: Applying RK3588 ITS errata\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\nmd0: Preloaded image &lt;/boot/mfsroot&gt; 67108864 bytes at 0xffff000001578000\nmd1: Preloaded image &lt;/boot/fullroot.ufs.xz&gt; 652353536 bytes at 0xffff0000055c7000\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\ngeneric_timer0: &lt;ARMv8 Generic Timer&gt; irq 2,3,4,5,6 on ofwbus0\ngeneric_timer0: allocated irq for 'sec-phys'\ngeneric_timer0: allocated irq for 'phys'\ngeneric_timer0: allocated irq for 'virt'\ngeneric_timer0: allocated irq for 'hyp-phys'\ngeneric_timer0: allocated irq for 'hyp-virt'\nTimecounter &quot;ARM MPCore Timecounter&quot; frequency 24000000 Hz quality 1000\nEvent timer &quot;ARM MPCore Eventtimer&quot; frequency 24000000 Hz quality 1000\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nmmio_sram0: &lt;MMIO SRAM&gt; mem 0xfd600000-0xfd6fffff on ofwbus0\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nmmio_sram1: &lt;MMIO SRAM&gt; mem 0xff001000-0xff0effff on ofwbus0\nscmi_smc0: &lt;ARM SCMI SMC Transport driver&gt; on ofw_firmware0\nscmi_smc0: smc id 82000010\nscmi_smc0: scmi_shmem_get: Can't get shmem device.\nscmi_smc0: A2P shmem dev not found.\ndevice_attach: scmi_smc0 attach returned 6\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nefirtc0: cannot read EFI realtime clock, error 78\nsmbios0: &lt;System Management BIOS&gt;\nsmbios0: Entry point: v3 (64-bit), Version: 3.7\nsmbios0: Docrev: 0, Entry Point Revision: 1\ncpufreq_dt0: &lt;Generic cpufreq driver&gt; on cpu0\ncpufreq_dt0: no clock for cpu@0\ndevice_attach: cpufreq_dt0 attach returned 6\ncpufreq_dt1: &lt;Generic cpufreq driver&gt; on cpu1\ncpufreq_dt1: no clock for cpu@100\ndevice_attach: cpufreq_dt1 attach returned 6\ncpufreq_dt2: &lt;Generic cpufreq driver&gt; on cpu2\ncpufreq_dt2: no clock for cpu@200\ndevice_attach: cpufreq_dt2 attach returned 6\ncpufreq_dt3: &lt;Generic cpufreq driver&gt; on cpu3\ncpufreq_dt3: no clock for cpu@300\ndevice_attach: cpufreq_dt3 attach returned 6\ncpufreq_dt4: &lt;Generic cpufreq driver&gt; on cpu4\ncpufreq_dt4: no clock for cpu@400\ndevice_attach: cpufreq_dt4 attach returned 6\ncpufreq_dt5: &lt;Generic cpufreq driver&gt; on cpu5\ncpufreq_dt5: no clock for cpu@500\ndevice_attach: cpufreq_dt5 attach returned 6\ncpufreq_dt6: &lt;Generic cpufreq driver&gt; on cpu6\ncpufreq_dt6: no clock for cpu@600\ndevice_attach: cpufreq_dt6 attach returned 6\ncpufreq_dt7: &lt;Generic cpufreq driver&gt; on cpu7\ncpufreq_dt7: no clock for cpu@700\ndevice_attach: cpufreq_dt7 attach returned 6\nofwbus0: &lt;l3-cache&gt; compat cache (no driver attached)\nofwbus0: &lt;display-subsystem&gt; compat rockchip,display-subsystem (no driver attached)\nscmi_smc0: &lt;ARM SCMI SMC Transport driver&gt; on ofw_firmware0\nscmi_smc0: smc id 82000010\nscmi_smc0: scmi_shmem_get: Can't get shmem device.\nscmi_smc0: A2P shmem dev not found.\ndevice_attach: scmi_smc0 attach returned 6\npcm0: &lt;simple-audio-card&gt; on ofwbus0\npmu0: &lt;Performance Monitoring Unit&gt; irq 0 on ofwbus0\npmu1: &lt;Performance Monitoring Unit&gt; irq 1 on ofwbus0\nofwbus0: &lt;gpu@fb000000&gt; mem 0xfb000000-0xfb1fffff irq 7,8,9 compat rockchip,rk3588-mali (no driver attached)\nsnps_dwc3_fdt0: Found dr_mode 'peripheral' but only 'host' supported. s=11\nofwbus0: &lt;usb@fc000000&gt; mem 0xfc000000-0xfc3fffff irq 10 compat rockchip,rk3588-dwc3 (no driver attached)\nofwbus0: &lt;usb@fc800000&gt; mem 0xfc800000-0xfc83ffff irq 11 disabled compat rockchip,rk3588-ehci (no driver attached)\nofwbus0: &lt;usb@fc840000&gt; mem 0xfc840000-0xfc87ffff irq 12 disabled compat rockchip,rk3588-ohci (no driver attached)\nehci0: &lt;Generic EHCI Controller&gt; mem 0xfc880000-0xfc8bffff irq 13 on ofwbus0\nusbus0: EHCI version 1.0\nusbus0 on ehci0\nehci0: usbpf: Attached\nofwbus0: &lt;usb@fc8c0000&gt; mem 0xfc8c0000-0xfc8fffff irq 14 disabled compat rockchip,rk3588-ohci (no driver attached)\nofwbus0: &lt;usb@fcd00000&gt; mem 0xfcd00000-0xfd0fffff irq 15 disabled compat rockchip,rk3588-dwc3 (no driver attached)\nofwbus0: &lt;iommu@fc900000&gt; mem 0xfc900000-0xfcafffff irq 16,17,18,19 compat arm,smmu-v3 (no driver attached)\nofwbus0: &lt;iommu@fcb00000&gt; mem 0xfcb00000-0xfccfffff irq 20,21,22,23 disabled compat arm,smmu-v3 (no driver attached)\nsyscon_generic_dev0: &lt;syscon&gt; mem 0xfd58c000-0xfd58cfff on ofwbus0\nsyscon_generic_dev0: Cannot allocate memory resource\ndevice_attach: syscon_generic_dev0 attach returned 6\nsyscon_generic_dev0: &lt;syscon&gt; mem 0xfd5e8000-0xfd5ebfff on ofwbus0\nsyscon_generic_dev1: &lt;syscon&gt; mem 0xfd5ec000-0xfd5effff on ofwbus0\nsyscon_generic_dev2: &lt;syscon&gt; mem 0xfd5a4000-0xfd5a5fff on ofwbus0\nsyscon_generic_dev3: &lt;syscon&gt; mem 0xfd5a6000-0xfd5a7fff on ofwbus0\nsyscon_generic_dev4: &lt;syscon&gt; mem 0xfd5a8000-0xfd5abfff on ofwbus0\nsyscon_generic_dev5: &lt;syscon&gt; mem 0xfd5ac000-0xfd5affff on ofwbus0\nsyscon_generic_dev6: &lt;syscon&gt; mem 0xfd5b0000-0xfd5b0fff on ofwbus0\nsyscon_generic_dev7: &lt;syscon&gt; mem 0xfd5b4000-0xfd5b4fff on ofwbus0\nsyscon_generic_dev8: &lt;syscon&gt; mem 0xfd5b5000-0xfd5b5fff on ofwbus0\nsyscon_generic_dev9: &lt;syscon&gt; mem 0xfd5bc000-0xfd5bc0ff on ofwbus0\nsyscon_generic_dev10: &lt;syscon&gt; mem 0xfd5c4000-0xfd5c40ff on ofwbus0\nsyscon_generic_dev11: &lt;syscon&gt; mem 0xfd5c8000-0xfd5cbfff on ofwbus0\nsimple_mfd1: &lt;usb2phy@0&gt; mem 0-0xfd5cffff,0-0x3fff irq 171 compat rockchip,rk3588-usb2phy (no driver attached)\nsimple_mfd2: &lt;usb2phy@8000&gt; mem 0-0xfd5d7fff,0-0x3fff irq 172 disabled compat rockchip,rk3588-usb2phy (no driver attached)\nsimple_mfd3: &lt;usb2phy@c000&gt; mem 0-0xfd5dbfff,0-0x3fff irq 173 compat rockchip,rk3588-usb2phy (no driver attached)\nsyscon_generic_dev12: &lt;syscon&gt; mem 0xfd5e0000-0xfd5e00ff on ofwbus0\nsyscon_generic_dev13: &lt;syscon&gt; mem 0xfd5f0000-0xfd5fffff on ofwbus0\nofwbus0: &lt;clock-controller@fd7c0000&gt; mem 0xfd7c0000-0xfd81bfff compat rockchip,rk3588-cru (no driver attached)\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\nusbus0: 480Mbps High Speed USB v2.0\ndevice_attach: rk_i2c0 attach returned 19\nofwbus0: &lt;serial@fd890000&gt; mem 0xfd890000-0xfd8900ff irq 25 disabled compat rockchip,rk3588-uart (no driver attached)\nofwbus0: &lt;pwm@fd8b0000&gt; mem 0xfd8b0000-0xfd8b000f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@fd8b0010&gt; mem 0xfd8b0010-0xfd8b001f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@fd8b0020&gt; mem 0xfd8b0020-0xfd8b002f compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@fd8b0030&gt; mem 0xfd8b0030-0xfd8b003f disabled compat rockchip,rk3588-pwm (no driver attached)\nsimple_mfd4: &lt;power-controller&gt; mem 0xfd8d8000-0xfd8d83ff compat rockchip,rk3588-power-controller (no driver attached)\nofwbus0: &lt;npu@fdab0000&gt; mem 0xfdab0000-0xfdab0fff,0xfdab1000-0xfdab1fff,0xfdab3000-0xfdab3fff irq 26 compat rockchip,rk3588-rknn-core (no driver attached)\nofwbus0: &lt;iommu@fdab9000&gt; mem 0xfdab9000-0xfdab90ff,0xfdaba000-0xfdaba0ff irq 27 compat rockchip,rk3588-iommu (no driver attached)\nofwbus0: &lt;npu@fdac0000&gt; mem 0xfdac0000-0xfdac0fff,0xfdac1000-0xfdac1fff,0xfdac3000-0xfdac3fff irq 28 compat rockchip,rk3588-rknn-core (no driver attached)\nofwbus0: &lt;iommu@fdaca000&gt; mem 0xfdaca000-0xfdaca0ff irq 29 compat rockchip,rk3588-iommu (no driver attached)\nofwbus0: &lt;npu@fdad0000&gt; mem 0xfdad0000-0xfdad0fff,0xfdad1000-0xfdad1fff,0xfdad3000-0xfdad3fff irq 30 compat rockchip,rk3588-rknn-core (no driver attached)\nofwbus0: &lt;iommu@fdada000&gt; mem 0xfdada000-0xfdada0ff irq 31 compat rockchip,rk3588-iommu (no driver attached)\nofwbus0: &lt;video-codec@fdb50000&gt; mem 0xfdb50000-0xfdb507ff irq 32 compat rockchip,rk3588-vpu121 (no driver attached)\nofwbus0: &lt;iommu@fdb50800&gt; mem 0xfdb50800-0xfdb5083f irq 33 compat rockchip,rk3588-iommu (no driver attached)\nofwbus0: &lt;rga@fdb80000&gt; mem 0xfdb80000-0xfdb8017f irq 34 compat rockchip,rk3588-rga (no driver attached)\nofwbus0: &lt;video-codec@fdba0000&gt; mem 0xfdba0000-0xfdba07ff irq 35 compat rockchip,rk3588-vepu121 (no driver attached)\nofwbus0: &lt;iommu@fdba0800&gt; mem 0xfdba0800-0xfdba083f irq 36 compat rockchip,rk3588-iommu (no driver attached)\nofwbus0: &lt;video-codec@fdba4000&gt; mem 0xfdba4000-0xfdba47ff irq 37 compat rockchip,rk3588-vepu121 (no driver attached)\nofwbus0: &lt;iommu@fdba4800&gt; mem 0xfdba4800-0xfdba483f irq 38 compat rockchip,rk3588-iommu (no driver attached)\nofwbus0: &lt;video-codec@fdba8000&gt; mem 0xfdba8000-0xfdba87ff irq 39 compat rockchip,rk3588-vepu121 (no driver attached)\nofwbus0: &lt;iommu@fdba8800&gt; mem 0xfdba8800-0xfdba883f irq 40 compat rockchip,rk3588-iommu (no driver attached)\nofwbus0: &lt;video-codec@fdbac000&gt; mem 0xfdbac000-0xfdbac7ff irq 41 compat rockchip,rk3588-vepu121 (no driver attached)\nofwbus0: &lt;iommu@fdbac800&gt; mem 0xfdbac800-0xfdbac83f irq 42 compat rockchip,rk3588-iommu (no driver attached)\nofwbus0: &lt;video-codec@fdc38000&gt; mem 0xfdc38100-0xfdc385ff,0xfdc38000-0xfdc380ff,0xfdc38600-0xfdc386ff irq 43 compat rockchip,rk3588-vdec (no driver attached)\nofwbus0: &lt;iommu@fdc38700&gt; mem 0xfdc38700-0xfdc3873f,0xfdc38740-0xfdc3877f irq 44 compat rockchip,rk3588-iommu (no driver attached)\nofwbus0: &lt;video-codec@fdc40000&gt; mem 0xfdc40100-0xfdc405ff,0xfdc40000-0xfdc400ff,0xfdc40600-0xfdc406ff irq 45 compat rockchip,rk3588-vdec (no driver attached)\nofwbus0: &lt;iommu@fdc40700&gt; mem 0xfdc40700-0xfdc4073f,0xfdc40740-0xfdc4077f irq 46 compat rockchip,rk3588-iommu (no driver attached)\nofwbus0: &lt;video-codec@fdc70000&gt; mem 0xfdc70000-0xfdc707ff irq 47 compat rockchip,rk3588-av1-vpu (no driver attached)\nofwbus0: &lt;vop@fdd90000&gt; mem 0xfdd90000-0xfdd941ff,0xfdd95000-0xfdd95fff irq 48 compat rockchip,rk3588-vop (no driver attached)\nofwbus0: &lt;iommu@fdd97e00&gt; mem 0xfdd97e00-0xfdd97eff,0xfdd97f00-0xfdd97fff irq 49 compat rockchip,rk3588-iommu (no driver attached)\nofwbus0: &lt;spdif-tx@fddb0000&gt; mem 0xfddb0000-0xfddb0fff irq 50 disabled compat rockchip,rk3588-spdif (no driver attached)\nofwbus0: &lt;i2s@fddc0000&gt; mem 0xfddc0000-0xfddc0fff irq 51 disabled compat rockchip,rk3588-i2s-tdm (no driver attached)\nofwbus0: &lt;spdif-tx@fdde0000&gt; mem 0xfdde0000-0xfdde0fff irq 52 disabled compat rockchip,rk3588-spdif (no driver attached)\nofwbus0: &lt;i2s@fddf0000&gt; mem 0xfddf0000-0xfddf0fff irq 53 compat rockchip,rk3588-i2s-tdm (no driver attached)\nofwbus0: &lt;i2s@fddfc000&gt; mem 0xfddfc000-0xfddfcfff irq 54 disabled compat rockchip,rk3588-i2s-tdm (no driver attached)\nofwbus0: &lt;dsi@fde20000&gt; mem 0xfde20000-0xfde2ffff irq 55 disabled compat rockchip,rk3588-mipi-dsi2 (no driver attached)\nofwbus0: &lt;dsi@fde30000&gt; mem 0xfde30000-0xfde3ffff irq 56 disabled compat rockchip,rk3588-mipi-dsi2 (no driver attached)\nofwbus0: &lt;dp@fde50000&gt; mem 0xfde50000-0xfde53fff irq 57 compat rockchip,rk3588-dp (no driver attached)\nofwbus0: &lt;hdmi@fde80000&gt; mem 0xfde80000-0xfde9ffff irq 58,59,60,61,62 compat rockchip,rk3588-dw-hdmi-qp (no driver attached)\nofwbus0: &lt;edp@fdec0000&gt; mem 0xfdec0000-0xfdec0fff irq 63 disabled compat rockchip,rk3588-edp (no driver attached)\nsyscon_generic_dev14: &lt;syscon&gt; mem 0xfdf35000-0xfdf3501f on ofwbus0\nsyscon_generic_dev15: &lt;syscon&gt; mem 0xfdf35200-0xfdf3521f on ofwbus0\nsyscon_generic_dev16: &lt;syscon&gt; mem 0xfdf35400-0xfdf3541f on ofwbus0\nsyscon_generic_dev17: &lt;syscon&gt; mem 0xfdf35600-0xfdf3561f on ofwbus0\nsyscon_generic_dev18: &lt;syscon&gt; mem 0xfdf36000-0xfdf3601f on ofwbus0\nsyscon_generic_dev19: &lt;syscon&gt; mem 0xfdf39000-0xfdf3901f on ofwbus0\nsyscon_generic_dev20: &lt;syscon&gt; mem 0xfdf3d800-0xfdf3d81f on ofwbus0\nsyscon_generic_dev21: &lt;syscon&gt; mem 0xfdf3e000-0xfdf3e01f on ofwbus0\nsyscon_generic_dev22: &lt;syscon&gt; mem 0xfdf3e200-0xfdf3e21f on ofwbus0\nsyscon_generic_dev23: &lt;syscon&gt; mem 0xfdf3e400-0xfdf3e41f on ofwbus0\nsyscon_generic_dev24: &lt;syscon&gt; mem 0xfdf3e600-0xfdf3e61f on ofwbus0\nsyscon_generic_dev25: &lt;syscon&gt; mem 0xfdf40000-0xfdf4001f on ofwbus0\nsyscon_generic_dev26: &lt;syscon&gt; mem 0xfdf40200-0xfdf4021f on ofwbus0\nsyscon_generic_dev27: &lt;syscon&gt; mem 0xfdf40400-0xfdf4041f on ofwbus0\nsyscon_generic_dev28: &lt;syscon&gt; mem 0xfdf40500-0xfdf4051f on ofwbus0\nsyscon_generic_dev29: &lt;syscon&gt; mem 0xfdf40600-0xfdf4061f on ofwbus0\nsyscon_generic_dev30: &lt;syscon&gt; mem 0xfdf40800-0xfdf4081f on ofwbus0\nsyscon_generic_dev31: &lt;syscon&gt; mem 0xfdf41000-0xfdf4101f on ofwbus0\nsyscon_generic_dev32: &lt;syscon&gt; mem 0xfdf41100-0xfdf4111f on ofwbus0\nsyscon_generic_dev33: &lt;syscon&gt; mem 0xfdf60000-0xfdf6001f on ofwbus0\nsyscon_generic_dev34: &lt;syscon&gt; mem 0xfdf60200-0xfdf6021f on ofwbus0\nsyscon_generic_dev35: &lt;syscon&gt; mem 0xfdf60400-0xfdf6041f on ofwbus0\nsyscon_generic_dev36: &lt;syscon&gt; mem 0xfdf61000-0xfdf6101f on ofwbus0\nsyscon_generic_dev37: &lt;syscon&gt; mem 0xfdf61200-0xfdf6121f on ofwbus0\nsyscon_generic_dev38: &lt;syscon&gt; mem 0xfdf61400-0xfdf6141f on ofwbus0\nsyscon_generic_dev39: &lt;syscon&gt; mem 0xfdf62000-0xfdf6201f on ofwbus0\nsyscon_generic_dev40: &lt;syscon&gt; mem 0xfdf63000-0xfdf6301f on ofwbus0\nsyscon_generic_dev41: &lt;syscon&gt; mem 0xfdf64000-0xfdf6401f on ofwbus0\nsyscon_generic_dev42: &lt;syscon&gt; mem 0xfdf66000-0xfdf6601f on ofwbus0\nsyscon_generic_dev43: &lt;syscon&gt; mem 0xfdf66200-0xfdf6621f on ofwbus0\nsyscon_generic_dev44: &lt;syscon&gt; mem 0xfdf66400-0xfdf6641f on ofwbus0\nsyscon_generic_dev45: &lt;syscon&gt; mem 0xfdf66600-0xfdf6661f on ofwbus0\nsyscon_generic_dev46: &lt;syscon&gt; mem 0xfdf66800-0xfdf6681f on ofwbus0\nsyscon_generic_dev47: &lt;syscon&gt; mem 0xfdf66a00-0xfdf66a1f on ofwbus0\nsyscon_generic_dev48: &lt;syscon&gt; mem 0xfdf66c00-0xfdf66c1f on ofwbus0\nsyscon_generic_dev49: &lt;syscon&gt; mem 0xfdf66e00-0xfdf66e1f on ofwbus0\nsyscon_generic_dev50: &lt;syscon&gt; mem 0xfdf67000-0xfdf6701f on ofwbus0\nsyscon_generic_dev51: &lt;syscon&gt; mem 0xfdf67200-0xfdf6721f on ofwbus0\nsyscon_generic_dev52: &lt;syscon&gt; mem 0xfdf70000-0xfdf7001f on ofwbus0\nsyscon_generic_dev53: &lt;syscon&gt; mem 0xfdf71000-0xfdf7101f on ofwbus0\nsyscon_generic_dev54: &lt;syscon&gt; mem 0xfdf72000-0xfdf7201f on ofwbus0\nsyscon_generic_dev55: &lt;syscon&gt; mem 0xfdf72200-0xfdf7221f on ofwbus0\nsyscon_generic_dev56: &lt;syscon&gt; mem 0xfdf72400-0xfdf7241f on ofwbus0\nsyscon_generic_dev57: &lt;syscon&gt; mem 0xfdf80000-0xfdf8001f on ofwbus0\nsyscon_generic_dev58: &lt;syscon&gt; mem 0xfdf81000-0xfdf8101f on ofwbus0\nsyscon_generic_dev59: &lt;syscon&gt; mem 0xfdf81200-0xfdf8121f on ofwbus0\nsyscon_generic_dev60: &lt;syscon&gt; mem 0xfdf82000-0xfdf8201f on ofwbus0\nsyscon_generic_dev61: &lt;syscon&gt; mem 0xfdf82200-0xfdf8221f on ofwbus0\nofwbus0: &lt;dfi@fe060000&gt; mem 0xfe060000-0xfe06ffff irq 64,65,66,67 compat rockchip,rk3588-dfi (no driver attached)\npcib0: &lt;RockChip RK3568 PCI-express controller&gt; mem 0xa40c00000-0xa40ffffff,0xfe180000-0xfe18ffff,0xf3000000-0xf30fffff irq 68,69,70,71,72 on ofwbus0\npcib0: Can not get reset\ndevice_attach: pcib0 attach returned 6\npcib0: &lt;RockChip RK3568 PCI-express controller&gt; mem 0xa41000000-0xa413fffff,0xfe190000-0xfe19ffff,0xf4000000-0xf40fffff irq 73,74,75,76,77 on ofwbus0\npcib0: Can not get reset\ndevice_attach: pcib0 attach returned 6\nofwbus0: &lt;ethernet@fe1c0000&gt; mem 0xfe1c0000-0xfe1cffff irq 78,79 disabled compat rockchip,rk3588-gmac (no driver attached)\nofwbus0: &lt;sata@fe210000&gt; mem 0xfe210000-0xfe210fff irq 80 disabled compat rockchip,rk3588-dwc-ahci (no driver attached)\nofwbus0: &lt;sata@fe230000&gt; mem 0xfe230000-0xfe230fff irq 81 disabled compat rockchip,rk3588-dwc-ahci (no driver attached)\nofwbus0: &lt;spi@fe2b0000&gt; mem 0xfe2b0000-0xfe2b3fff irq 82 compat rockchip,sfc (no driver attached)\nrockchip_dwmmc0: &lt;Synopsys DesignWare Mobile Storage Host Controller (RockChip)&gt; mem 0xfe2c0000-0xfe2c3fff irq 83 on ofwbus0\nrockchip_dwmmc0: No bus speed provided\nrockchip_dwmmc0: Can't get FDT property.\nrockchip_dwmmc0: Disabling HS200+ (tuning code not written)\ndevice_attach: rockchip_dwmmc0 attach returned 6\nofwbus0: &lt;mmc@fe2d0000&gt; mem 0xfe2d0000-0xfe2d3fff irq 84 disabled compat rockchip,rk3588-dw-mshc (no driver attached)\nofwbus0: &lt;mmc@fe2e0000&gt; mem 0xfe2e0000-0xfe2effff irq 85 compat rockchip,rk3588-dwcmshc (no driver attached)\nofwbus0: &lt;rng@fe378000&gt; mem 0xfe378000-0xfe3781ff irq 86 compat rockchip,rk3588-rng (no driver attached)\nofwbus0: &lt;i2s@fe470000&gt; mem 0xfe470000-0xfe470fff irq 87 compat rockchip,rk3588-i2s-tdm (no driver attached)\nofwbus0: &lt;i2s@fe480000&gt; mem 0xfe480000-0xfe480fff irq 88 disabled compat rockchip,rk3588-i2s-tdm (no driver attached)\nofwbus0: &lt;i2s@fe490000&gt; mem 0xfe490000-0xfe490fff irq 89 disabled compat rockchip,rk3588-i2s (no driver attached)\nofwbus0: &lt;i2s@fe4a0000&gt; mem 0xfe4a0000-0xfe4a0fff irq 90 disabled compat rockchip,rk3588-i2s (no driver attached)\nofwbus0: &lt;spdif-tx@fe4e0000&gt; mem 0xfe4e0000-0xfe4e0fff irq 91 disabled compat rockchip,rk3588-spdif (no driver attached)\nofwbus0: &lt;spdif-tx@fe4f0000&gt; mem 0xfe4f0000-0xfe4f0fff irq 92 disabled compat rockchip,rk3588-spdif (no driver attached)\nofwbus0: &lt;dma-controller@fea10000&gt; mem 0xfea10000-0xfea13fff irq 94,95 compat arm,pl330 (no driver attached)\nofwbus0: &lt;dma-controller@fea30000&gt; mem 0xfea30000-0xfea33fff irq 96,97 compat arm,pl330 (no driver attached)\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nofwbus0: &lt;i2c@feaa0000&gt; mem 0xfeaa0000-0xfeaa0fff irq 99 disabled compat rockchip,rk3588-i2c (no driver attached)\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nofwbus0: &lt;i2c@fead0000&gt; mem 0xfead0000-0xfead0fff irq 102 disabled compat rockchip,rk3588-i2c (no driver attached)\nofwbus0: &lt;timer@feae0000&gt; mem 0xfeae0000-0xfeae001f irq 103 compat rockchip,rk3588-timer (no driver attached)\nofwbus0: &lt;watchdog@feaf0000&gt; mem 0xfeaf0000-0xfeaf00ff irq 104 compat rockchip,rk3588-wdt (no driver attached)\nofwbus0: &lt;spi@feb00000&gt; mem 0xfeb00000-0xfeb00fff irq 105 disabled compat rockchip,rk3588-spi (no driver attached)\nofwbus0: &lt;spi@feb10000&gt; mem 0xfeb10000-0xfeb10fff irq 106 disabled compat rockchip,rk3588-spi (no driver attached)\nofwbus0: &lt;spi@feb20000&gt; mem 0xfeb20000-0xfeb20fff irq 107 compat rockchip,rk3588-spi (no driver attached)\nofwbus0: &lt;spi@feb30000&gt; mem 0xfeb30000-0xfeb30fff irq 108 disabled compat rockchip,rk3588-spi (no driver attached)\nofwbus0: &lt;serial@feb40000&gt; mem 0xfeb40000-0xfeb400ff irq 109 disabled compat rockchip,rk3588-uart (no driver attached)\nofwbus0: no default resources for rid = 0, type = 4\nofwbus0: no default resources for rid = 0, type = 4\nuart0: &lt;16750 or compatible&gt; mem 0xfeb50000-0xfeb500ff irq 110 on ofwbus0\nuart0: console (1500000,n,8,1)\nuart0: fast interrupt\nuart0: PPS capture mode: DCD\nofwbus0: &lt;serial@feb60000&gt; mem 0xfeb60000-0xfeb600ff irq 111 disabled compat rockchip,rk3588-uart (no driver attached)\nuart1: could not determine frequency\nofwbus0: no default resources for rid = 0, type = 4\nuart1: could not determine frequency\nofwbus0: no default resources for rid = 0, type = 4\nuart1: &lt;16750 or compatible&gt; mem 0xfeb70000-0xfeb700ff irq 112 on ofwbus0\nuart1: fast interrupt\nuart1: PPS capture mode: DCD\nofwbus0: &lt;serial@feb80000&gt; mem 0xfeb80000-0xfeb800ff irq 113 disabled compat rockchip,rk3588-uart (no driver attached)\nofwbus0: &lt;serial@feb90000&gt; mem 0xfeb90000-0xfeb900ff irq 114 disabled compat rockchip,rk3588-uart (no driver attached)\nofwbus0: &lt;serial@feba0000&gt; mem 0xfeba0000-0xfeba00ff irq 115 disabled compat rockchip,rk3588-uart (no driver attached)\nofwbus0: &lt;serial@febb0000&gt; mem 0xfebb0000-0xfebb00ff irq 116 disabled compat rockchip,rk3588-uart (no driver attached)\nofwbus0: &lt;serial@febc0000&gt; mem 0xfebc0000-0xfebc00ff irq 117 disabled compat rockchip,rk3588-uart (no driver attached)\nofwbus0: &lt;pwm@febd0000&gt; mem 0xfebd0000-0xfebd000f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@febd0010&gt; mem 0xfebd0010-0xfebd001f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@febd0020&gt; mem 0xfebd0020-0xfebd002f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@febd0030&gt; mem 0xfebd0030-0xfebd003f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@febe0000&gt; mem 0xfebe0000-0xfebe000f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@febe0010&gt; mem 0xfebe0010-0xfebe001f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@febe0020&gt; mem 0xfebe0020-0xfebe002f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@febe0030&gt; mem 0xfebe0030-0xfebe003f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@febf0000&gt; mem 0xfebf0000-0xfebf000f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@febf0010&gt; mem 0xfebf0010-0xfebf001f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@febf0020&gt; mem 0xfebf0020-0xfebf002f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;pwm@febf0030&gt; mem 0xfebf0030-0xfebf003f disabled compat rockchip,rk3588-pwm (no driver attached)\nofwbus0: &lt;tsadc@fec00000&gt; mem 0xfec00000-0xfec003ff irq 118 compat rockchip,rk3588-tsadc (no driver attached)\nofwbus0: &lt;adc@fec10000&gt; mem 0xfec10000-0xfec1ffff irq 119 compat rockchip,rk3588-saradc (no driver attached)\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nofwbus0: &lt;i2c@feca0000&gt; mem 0xfeca0000-0xfeca0fff irq 122 disabled compat rockchip,rk3588-i2c (no driver attached)\nofwbus0: &lt;spi@fecb0000&gt; mem 0xfecb0000-0xfecb0fff irq 123 disabled compat rockchip,rk3588-spi (no driver attached)\nofwbus0: &lt;efuse@fecc0000&gt; mem 0xfecc0000-0xfecc03ff compat rockchip,rk3588-otp (no driver attached)\nofwbus0: &lt;dma-controller@fed10000&gt; mem 0xfed10000-0xfed13fff irq 124,125 compat arm,pl330 (no driver attached)\nofwbus0: &lt;phy@fed60000&gt; mem 0xfed60000-0xfed61fff compat rockchip,rk3588-hdptx-phy (no driver attached)\nofwbus0: &lt;phy@fed80000&gt; mem 0xfed80000-0xfed8ffff compat rockchip,rk3588-usbdp-phy (no driver attached)\nofwbus0: &lt;phy@feda0000&gt; mem 0xfeda0000-0xfedaffff disabled compat rockchip,rk3588-mipi-dcphy (no driver attached)\nofwbus0: &lt;phy@fedb0000&gt; mem 0xfedb0000-0xfedbffff disabled compat rockchip,rk3588-mipi-dcphy (no driver attached)\nofwbus0: &lt;phy@fedc0000&gt; mem 0xfedc0000-0xfedc7fff disabled compat rockchip,rk3588-csi-dphy (no driver attached)\nofwbus0: &lt;phy@fedc8000&gt; mem 0xfedc8000-0xfedcffff disabled compat rockchip,rk3588-csi-dphy (no driver attached)\nofwbus0: &lt;phy@fee00000&gt; mem 0xfee00000-0xfee000ff compat rockchip,rk3588-naneng-combphy (no driver attached)\nofwbus0: &lt;phy@fee20000&gt; mem 0xfee20000-0xfee200ff compat rockchip,rk3588-naneng-combphy (no driver attached)\nofwbus0: &lt;pinctrl&gt; compat rockchip,rk3588-pinctrl (no driver attached)\nofwbus0: &lt;pinctrl&gt; compat rockchip,rk3588-pinctrl (no driver attached)\npcm1: &lt;simple-audio-card&gt; on ofwbus0\nsnps_dwc3_fdt0: &lt;Synopsys Designware DWC3&gt; mem 0xfc400000-0xfc7fffff irq 126 on ofwbus0\nsnps_dwc3_fdt0: SNPS Version: DWC3 (5533 300a)\nsnps_dwc3_fdt0: 64 bytes context size, 32-bit DMA\nsnps_dwc3_fdt0: xECP capabilities &lt;LEGACY,PROTO,PROTO&gt;\nusbus1: trying to attach\nusbus1 on snps_dwc3_fdt0\nsnps_dwc3_fdt0: usbpf: Attached\nsyscon_generic_dev62: &lt;syscon&gt; mem 0xfd5b8000-0xfd5c7fff on ofwbus0\nsyscon_generic_dev62: Cannot allocate memory resource\ndevice_attach: syscon_generic_dev62 attach returned 6\nsyscon_generic_dev62: &lt;syscon&gt; mem 0xfd5c0000-0xfd5c00ff on ofwbus0\nsyscon_generic_dev63: &lt;syscon&gt; mem 0xfd5cc000-0xfd5cffff on ofwbus0\nsimple_mfd5: &lt;usb2phy@4000&gt; mem 0-0xfd5d3fff,0-0x3fff irq 174 compat rockchip,rk3588-usb2phy (no driver attached)\nsyscon_generic_dev64: &lt;syscon&gt; mem 0xfd5e4000-0xfd5e40ff on ofwbus0\nofwbus0: &lt;spdif-tx@fddb8000&gt; mem 0xfddb8000-0xfddb8fff irq 127 disabled compat rockchip,rk3588-spdif (no driver attached)\nofwbus0: &lt;i2s@fddc8000&gt; mem 0xfddc8000-0xfddc8fff irq 128 disabled compat rockchip,rk3588-i2s-tdm (no driver attached)\nofwbus0: &lt;spdif-tx@fdde8000&gt; mem 0xfdde8000-0xfdde8fff irq 129 disabled compat rockchip,rk3588-spdif (no driver attached)\nofwbus0: &lt;i2s@fddf4000&gt; mem 0xfddf4000-0xfddf4fff irq 130 compat rockchip,rk3588-i2s-tdm (no driver attached)\nofwbus0: &lt;i2s@fddf8000&gt; mem 0xfddf8000-0xfddf8fff irq 131 disabled compat rockchip,rk3588-i2s-tdm (no driver attached)\nofwbus0: &lt;i2s@fde00000&gt; mem 0xfde00000-0xfde00fff irq 132 disabled compat rockchip,rk3588-i2s-tdm (no driver attached)\nofwbus0: &lt;dp@fde60000&gt; mem 0xfde60000-0xfde63fff irq 133 disabled compat rockchip,rk3588-dp (no driver attached)\nofwbus0: &lt;hdmi@fdea0000&gt; mem 0xfdea0000-0xfdebffff irq 134,135,136,137,138 compat rockchip,rk3588-dw-hdmi-qp (no driver attached)\nofwbus0: &lt;edp@fded0000&gt; mem 0xfded0000-0xfded0fff irq 139 disabled compat rockchip,rk3588-edp (no driver attached)\nofwbus0: &lt;hdmi_receiver@fdee0000&gt; mem 0xfdee0000-0xfdee5fff irq 140,141,142 compat rockchip,rk3588-hdmirx-ctrler (no driver attached)\npcib0: &lt;RockChip RK3568 PCI-express controller&gt; mem 0xa40000000-0xa403fffff,0xfe150000-0xfe15ffff,0xf0000000-0xf00fffff irq 143,144,145,146,147 on ofwbus0\npcib0: Can not get reset\ndevice_attach: pcib0 attach returned 6\nofwbus0: &lt;pcie-ep@fe150000&gt; mem 0xa40000000-0xa400fffff,0xa40100000-0xa401fffff,0xfe150000-0xfe15ffff,0x900000000-0x93fffffff,0xa40300000-0xa403fffff irq 148,149,150,151,152,153,154,155,15\nofwbus0: &lt;pcie@fe160000&gt; mem 0xa40400000-0xa407fffff,0xfe160000-0xfe16ffff,0xf1000000-0xf10fffff irq 157,158,159,160,161 disabled type pci compat rockchip,rk3588-pcie (no driver attached)\npcib0: &lt;RockChip RK3568 PCI-express controller&gt; mem 0xa40800000-0xa40bfffff,0xfe170000-0xfe17ffff,0xf2000000-0xf20fffff irq 162,163,164,165,166 on ofwbus0\npcib0: Can not get reset\ndevice_attach: pcib0 attach returned 6\nofwbus0: &lt;ethernet@fe1b0000&gt; mem 0xfe1b0000-0xfe1bffff irq 167,168 disabled compat rockchip,rk3588-gmac (no driver attached)\nofwbus0: &lt;sata@fe220000&gt; mem 0xfe220000-0xfe220fff irq 169 disabled compat rockchip,rk3588-dwc-ahci (no driver attached)\nofwbus0: &lt;phy@fed70000&gt; mem 0xfed70000-0xfed71fff compat rockchip,rk3588-hdptx-phy (no driver attached)\nofwbus0: &lt;phy@fed90000&gt; mem 0xfed90000-0xfed9ffff compat rockchip,rk3588-usbdp-phy (no driver attached)\nofwbus0: &lt;phy@fee10000&gt; mem 0xfee10000-0xfee100ff compat rockchip,rk3588-naneng-combphy (no driver attached)\nofwbus0: &lt;phy@fee80000&gt; mem 0xfee80000-0xfee9ffff compat rockchip,rk3588-pcie3-phy (no driver attached)\nofwbus0: &lt;opp-table-cluster0&gt; compat operating-points-v2 (no driver attached)\nofwbus0: &lt;opp-table-cluster1&gt; compat operating-points-v2 (no driver attached)\nofwbus0: &lt;opp-table-cluster2&gt; compat operating-points-v2 (no driver attached)\nofwbus0: &lt;opp-table-gpu&gt; compat operating-points-v2 (no driver attached)\nofwbus0: &lt;adc-keys&gt; compat adc-keys (no driver attached)\nsimpleamp0: &lt;Simple Amplifier&gt; on ofwbus0\nsimpleamp0: no VCC supplypcm2: &lt;simple-audio-card&gt; on ofwbus0\nofwbus0: &lt;hdmi0-con&gt; compat hdmi-connector (no driver attached)\nofwbus0: &lt;hdmi1-con&gt; compat hdmi-connector (no driver attached)\ngpioled0: &lt;GPIO LEDs&gt; on ofwbus0\ngpioled0: &lt;led-red&gt; failed to map pin\ngpioled0: &lt;led-green&gt; failed to map pin\ngpioled0: &lt;led-blue&gt; failed to map pin\nofwbus0: &lt;pwm-fan&gt; irq 170 compat pwm-fan (no driver attached)\nofwbus0: &lt;dmc&gt; compat rockchip,rk3588-dmc (no driver attached)\ncrypto: assign cryptosoft0 driver id 0, flags 0x6000000\narmv8crypto0: &lt;AES-CBC,AES-XTS,AES-GCM&gt;\ncrypto: assign armv8crypto0 driver id 1, flags 0xe000000\nEnabling LSE atomics in the kernel\nDevice configuration finished.\nprocfs registered\nTimecounters tick every 1.000 msec\nvlan: initialized, using hash tables with chaining\nlo0: bpf attached\nIPsec: Initialized Security Association Processing.\ntcp_init: net.inet.tcp.tcbhashsize auto tuned to 131072\nusbus1: 5.0Gbps Super Speed USB v3.0\nugen1.1: &lt;Synopsys XHCI root HUB&gt; at usbus1\nuhub0 on usbus1\nuhub0: &lt;Synopsys XHCI root HUB, class 9/0, rev 3.00/1.00, addr 1&gt; on usbus1\nugen0.1: &lt;Generic EHCI root HUB&gt; at usbus0\nuhub1 on usbus0\nuhub1: &lt;Generic EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1&gt; on usbus0\npcm0: no driver attached to cpu node\npcm1: no driver attached to cpu node\npcm2: no driver attached to cpu node\nCPU  0: ARM Cortex-A55 r2p0 affinity:  0  0\n                   Cache Type = &lt;64 byte CWG,64 byte ERG,64 byte D-cacheline,VIPT I-cache,64 byte I-cacheline&gt;\n Instruction Set Attributes 0 = &lt;DP,RDM,Atomic,CRC32,SHA2,SHA1,AES+PMULL&gt;\n Instruction Set Attributes 1 = &lt;RCPC-8.3,DCPoP&gt;\n Instruction Set Attributes 2 = &lt;&gt;\n         Processor Features 0 = &lt;RAS,GIC,AdvSIMD+HP,FP+HP,EL3 32,EL2 32,EL1 32,EL0 32&gt;\n         Processor Features 1 = &lt;MTE_frac,PSTATE.SSBS&gt;\n         Processor Features 2 = &lt;&gt;\n      Memory Model Features 0 = &lt;TGran4,TGran64,TGran16,SNSMem,BigEnd,16bit ASID,1TB PA&gt;\n      Memory Model Features 1 = &lt;XNX,PAN+ATS1E1,LO,HPD+TTPBHA,VH,16bit VMID,HAF+DS&gt;\n      Memory Model Features 2 = &lt;32bit CCIDX,48bit VA,IESB,UAO,CnP&gt;\n      Memory Model Features 3 = &lt;&gt;\n      Memory Model Features 4 = &lt;&gt;\n             Debug Features 0 = &lt;DoubleLock,2 CTX BKPTs,4 Watchpoints,6 Breakpoints,PMUv3p1,Debugv8p2&gt;\n             Debug Features 1 = &lt;&gt;\n         Auxiliary Features 0 = &lt;&gt;\n         Auxiliary Features 1 = &lt;&gt;\nAArch32 Instruction Set Attributes 5 = &lt;RDM,CRC32,SHA2,SHA1,AES+VMULL,SEVL&gt;\nAArch32 Media and VFP Features 0 = &lt;FPRound,FPSqrt,FPDivide,DP VFPv3+v4,SP VFPv3+v4,AdvSIMD&gt;\nAArch32 Media and VFP Features 1 = &lt;SIMDFMAC,FPHP Arith,SIMDHP Arith,SIMDSP,SIMDInt,SIMDLS,FPDNaN,FPFtZ&gt;\n L1 cache: 32KB (instruction)\n L2 cache: 128KB (unified)\n L3 cache: 4096KB (unified)\nCPU  1: ARM Cortex-A55 r2p0 affinity:  1  0\n L1 cache: 32KB (instruction)\n L2 cache: 128KB (unified)\n L3 cache: 4096KB (unified)\nCPU  2: ARM Cortex-A55 r2p0 affinity:  2  0\n L1 cache: 32KB (instruction)\n L2 cache: 128KB (unified)\n L3 cache: 4096KB (unified)\nCPU  3: ARM Cortex-A55 r2p0 affinity:  3  0\n L1 cache: 32KB (instruction)\n L2 cache: 128KB (unified)\n L3 cache: 4096KB (unified)\nCPU  4: ARM Cortex-A76 r4p0 affinity:  4  0\n                   Cache Type = &lt;IDC,64 byte CWG,64 byte ERG,64 byte D-cacheline,PIPT I-cache,64 byte I-cacheline&gt;\n         Processor Features 0 = &lt;CSV3,CSV2,RAS,GIC,AdvSIMD+HP,FP+HP,EL3,EL2,EL1,EL0 32&gt;\n L1 cache: 64KB (instruction)\n L2 cache: 512KB (unified)\n L3 cache: 4096KB (unified)\nCPU  5: ARM Cortex-A76 r4p0 affinity:  5  0\n L1 cache: 64KB (instruction)\n L2 cache: 512KB (unified)\n L3 cache: 4096KB (unified)\nCPU  6: ARM Cortex-A76 r4p0 affinity:  6  0\n L1 cache: 64KB (instruction)\n L2 cache: 512KB (unified)\n L3 cache: 4096KB (unified)\nCPU  7: ARM Cortex-A76 r4p0 affinity:  7  0\n L1 cache: 64KB (instruction)\n L2 cache: 512KB (unified)\n L3 cache: 4096KB (unified)\ngic0: using for IPIs\nRelease APs...gic0: Start searching for Re-Distributor\ngic0: Start searching for Re-Distributor\ngic0: Start searching for Re-Distributor\ngic0: Start searching for Re-Distributor\ngic0: CPU7 Re-Distributor has been found\ngic0: CPU5 Re-Distributor has been found\ngic0: Start searching for Re-Distributor\ngic0: CPU5 Re-Distributor woke up\ngic0: CPU7 Re-Distributor woke up\ngic0: Start searching for Re-Distributor\ngic0: CPU5 enabled CPU interface via system registers\ngic0: CPU7 enabled CPU interface via system registers\ngic0: CPU4 Re-Distributor has been found\ngic0: CPU6 Re-Distributor has been found\ngic0: CPU6 Re-Distributor woke up\ngic0: CPU4 Re-Distributor woke up\ngic0: using PENDBASE of 0x100280000 on cpu 7\ngic0: CPU6 enabled CPU interface via system registers\ngic0: Start searching for Re-Distributor\ngic0: CPU4 enabled CPU interface via system registers\ngic0: using PENDBASE of 0x1043f0000 on cpu 6\ngic0: CPU3 Re-Distributor has been found\ngic0: CPU1 Re-Distributor has been found\ngic0: using PENDBASE of 0x1043d0000 on cpu 4\ngic0: CPU3 Re-Distributor woke up\ngic0: using PENDBASE of 0x1043e0000 on cpu 5\ngic0: CPU1 Re-Distributor woke up\ngic0: CPU2 Re-Distributor has been found\ngic0: CPU3 enabled CPU interface via system registers\ngic0: CPU1 enabled CPU interface via system registers\ngic0: using PENDBASE of 0x1043c0000 on cpu 3\ngic0: using PENDBASE of 0x100260000 on cpu 1\ngic0: CPU2 Re-Distributor woke up\ngic0: CPU2 enabled CPU interface via system registers\ngic0: using PENDBASE of 0x100270000 on cpu 2\ndone\nEnabling CnP\nTCP_ratelimit: Is now initialized\nWARNING: WITNESS option enabled, expect reduced performance.\nTrying to mount root from ufs:/dev/md0 [rw]...\nregulator: shutting down unused regulators\nWarning: no time-of-day clock registered, system time will not be set accurately\nfailed to load CTF for kernel: 2\nfailed to load CTF for umodem.ko: 2\nfailed to load CTF for ucom.ko: 2\nDual Console: Serial Primary, Video Secondary\nstart_init: trying /sbin/init\nEnter full pathname of shell or RETURN for /rescue/sh: uhub0: 2 ports with 2 removable, self powered\nuhub1: 1 port with 1 removable, self powered\n\nCannot read termcap database;\nusing dumb terminal settings.\n#\n</code></pre>\n</details>\n<h1><a href=\"#reproducing\" aria-hidden=\"true\" class=\"anchor\" id=\"reproducing\"></a>Reproducing</h1>\n<p>In case anyone else is interested to reproduce this on a similar board,\nI've included my imaging scripts below.</p>\n<p>The first script turns an existing FreeBSD CURRENT image into one with my modifications applied\nto use the image as a root filesystem.\nThis script is designed to run on FreeBSD, since most other systems can't read the UFS2 images.\nNB: You <strong>still</strong> need to remember to interrupt the boot\nand disable the OHCI device from the U-Boot console (until that's properly supported).</p>\n<details>\n<summary>Image build script</summary>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-shell\"><a-c>#!/bin/sh</a-c>\n\n<a-f>set</a-f> <a-co>-eux</a-co>\n\n<a-c># This script takes a FreeBSD SD card image</a-c>\n<a-c># and converts it to a new image that bootstraps via RAMDISKs loaded from EFI.</a-c>\n<a-c>#</a-c>\n<a-c># Usage: patch-image-with-mini-ramdisk.sh [in_img]</a-c>\n<a-c>#</a-c>\n<a-c># Takes a FreeBSD SD card image as input and outputs $PWD/out.img</a-c>\n<a-c>#</a-c>\n<a-c># This was created out of necessity while trying to bring up an RK3588 board.</a-c>\n<a-c># The vendor and edge Armbian U-Boot are capable of SD card bootstrap,</a-c>\n<a-c># but once the FreeBSD kernel takes over, it doesn&#39;t (yet!) know how to talk to either</a-c>\n<a-c># (let alone NVMe), so we work around with a tiny rescue image as the initial root,</a-c>\n<a-c># along with a highly compressed full root FS image.</a-c>\n<a-c>#</a-c>\n<a-c># Both are loaded into RAM, the system boots with the rescue as the root,</a-c>\n<a-c># and then we decompress and mount the &quot;full&quot; image after.</a-c>\n<a-c>#</a-c>\n<a-c># Assumptions:</a-c>\n<a-c>#</a-c>\n<a-c># - The script runs as root</a-c>\n<a-c># - The kernel includes `options MD`, `device md`, and `options FFS`</a-c>\n<a-c># - The bootstrap total RAM usage is &lt; 1GiB (per https://cgit.freebsd.org/src/tree/sys/arm64/arm64/locore.S?id=355f02cddbf017706d3293f09ed6c2b5570936c1#n385)</a-c>\n\n<a-c># Copy the input image to the work image path (overwrites)</a-c>\n<a-pr>IN_IMG</a-pr>=<a-o>$</a-o><a-pr>1</a-pr>\n<a-pr>WORK_IMG</a-pr>=<a-s>&quot;</a-s><a-o>$</a-o><a-pr>PWD</a-pr><a-s>/out.img&quot;</a-s>\n<a-f>cp</a-f> <a-s>&quot;</a-s><a-o>$</a-o><a-pr>IN_IMG</a-pr><a-s>&quot;</a-s> <a-s>&quot;</a-s><a-o>$</a-o><a-pr>WORK_IMG</a-pr><a-s>&quot;</a-s>\n\n<a-c># Mount it</a-c>\n<a-pr>MD</a-pr>=<a-eb>$(</a-eb><a-f>mdconfig</a-f><a-eb> </a-eb><a-co>-a</a-co><a-eb> </a-eb><a-co>-t</a-co><a-eb> vnode </a-eb><a-co>-f</a-co><a-eb> </a-eb><a-s>&quot;</a-s><a-o>$</a-o><a-pr>WORK_IMG</a-pr><a-s>&quot;</a-s><a-eb>)</a-eb>\n<a-f>mkdir</a-f> <a-co>-p</a-co> /mnt/baseimgroot\n<a-f>mount</a-f> /dev/<a-eb>${</a-eb><a-pr>MD</a-pr><a-eb>}</a-eb>p2 /mnt/baseimgroot\n\n<a-c># Repack the root filesystem as a UFS2 root with a 20% buffer.</a-c>\n\n<a-f>makefs</a-f> \\\n    <a-co>-t</a-co> ffs \\\n    <a-co>-b</a-co> 20% \\\n    <a-co>-o</a-co> version=2,label=mfsroot \\\n    /tmp/mfsroot.ufs \\\n    /mnt/baseimgroot\n\n<a-c># Attach the new filesystem at /mnt/mfsroot</a-c>\n<a-pr>MFSMD</a-pr>=<a-eb>$(</a-eb><a-f>mdconfig</a-f><a-eb> </a-eb><a-co>-a</a-co><a-eb> </a-eb><a-co>-t</a-co><a-eb> vnode </a-eb><a-co>-f</a-co><a-eb> /tmp/mfsroot.ufs)</a-eb>\n<a-f>mkdir</a-f> <a-co>-p</a-co> /mnt/mfsroot\n<a-f>mount</a-f> /dev/<a-eb>${</a-eb><a-pr>MFSMD</a-pr><a-eb>}</a-eb> /mnt/mfsroot\n\n<a-c># Replace fstab with a minimal one specialized for what we&#39;re doing.</a-c>\n<a-f>tee</a-f> /mnt/mfsroot/etc/fstab <a-o>&gt;</a-o>/dev/null &lt;&lt;<a-s>&#39;EOF&#39;</a-s>\n<a-s># RAM-root bring-up\n/dev/md0        /       ufs     rw              0       0\ntmpfs           /tmp    tmpfs   rw,mode=1777    0       0\n</a-s>EOF\n\n<a-c># Append options to /etc/rc.conf</a-c>\n<a-f>tee</a-f> <a-co>-a</a-co> /mnt/mfsroot/etc/rc.conf <a-o>&gt;</a-o>/dev/null &lt;&lt;<a-s>&#39;EOF&#39;</a-s>\n<a-s>growfs_enable=&quot;NO&quot; \n</a-s>EOF\n\n<a-c># Unmount the mfsroot image</a-c>\n<a-f>umount</a-f> /mnt/mfsroot\n<a-f>mdconfig</a-f> <a-co>-d</a-co> <a-co>-u</a-co> <a-s>&quot;</a-s><a-eb>${</a-eb><a-pr>MFSMD</a-pr><a-eb>#md}</a-eb><a-s>&quot;</a-s>\n\n<a-c># Create a compressed mfsroot image from the &quot;real&quot; root image (will be loaded as a RAMDISK later)</a-c>\n<a-f>rm</a-f> <a-co>-f</a-co> /tmp/mfsroot.ufs.xz\n<a-f>xz</a-f> <a-co>-T0</a-co> <a-co>-3</a-co> <a-co>-k</a-co> /tmp/mfsroot.ufs\n\n<a-pr>SIZE</a-pr>=<a-eb>$(</a-eb><a-f>stat</a-f><a-eb> </a-eb><a-co>-f</a-co><a-eb> </a-eb><a-s>&#39;%z&#39;</a-s><a-eb> </a-eb><a-s>&quot;/tmp/mfsroot.ufs.xz&quot;</a-s><a-eb>)</a-eb>\n<a-pr>PADDED</a-pr>=$(( (<a-pr>SIZE</a-pr> + 4095) / 4096 * 4096 ))\n\n<a-f>truncate</a-f> <a-co>-s</a-co> <a-s>&quot;</a-s><a-o>$</a-o><a-pr>PADDED</a-pr><a-s>&quot;</a-s> <a-s>&quot;/tmp/mfsroot.ufs.xz&quot;</a-s>\n\n<a-f>cp</a-f> /tmp/mfsroot.ufs.xz /mnt/baseimgroot/boot/fullroot.ufs.xz\n\n<a-c># Append options to loader.conf</a-c>\n<a-f>tee</a-f> <a-co>-a</a-co> /mnt/baseimgroot/boot/loader.conf <a-o>&gt;</a-o>/dev/null &lt;&lt;<a-s>&#39;EOF&#39;</a-s>\n\n<a-s># Bring-up: preload root filesystem into RAM\nmfsroot_load=&quot;YES&quot;\nmfsroot_type=&quot;mfs_root&quot;\nmfsroot_name=&quot;/boot/mfsroot&quot;\nvfs.root.mountfrom=&quot;ufs:/dev/md0&quot;\nvfs.root.mountfrom.options=&quot;rw&quot;\n\n# Full root filesystem (load deterministically after the minimal root)\nmfsroot_after=&quot;load -t md_image /boot/fullroot.ufs.xz&quot;\n# fullroot_load=&quot;YES&quot;\n# fullroot_name=&quot;/boot/fullroot.ufs.xz&quot;\n# fullroot_type=&quot;md_image&quot;\n\n# Give us time to interrupt loader during bring-up\nautoboot_delay=&quot;5&quot;\n\n# Single-user mode; verbose boot\nboot_single=&quot;YES&quot;\nboot_verbose=&quot;YES&quot;\n</a-s>EOF\n\n<a-c># Create a rescue root for initial boot</a-c>\n<a-f>rm</a-f> <a-co>-rf</a-co> /tmp/rescueroot\n<a-f>mkdir</a-f> <a-co>-p</a-co> /tmp/rescueroot\n\n<a-c># Copy the rescue files and /etc from the base image to the rescue root (weird tar invocation is to preserve attributes and hard links)</a-c>\n<a-f>tar</a-f> <a-co>-C</a-co> /mnt/baseimgroot <a-co>-cf</a-co> <a-co>-</a-co> rescue etc <a-o>|</a-o> <a-f>tar</a-f> <a-co>-C</a-co> /tmp/rescueroot <a-co>-xpf</a-co> <a-co>-</a-co>\n\n<a-c># Create a minimal directory structure</a-c>\n<a-f>mkdir</a-f> <a-co>-p</a-co> \\\n    /tmp/rescueroot/bin \\\n    /tmp/rescueroot/sbin \\\n    /tmp/rescueroot/dev \\\n    /tmp/rescueroot/tmp \\\n    /tmp/rescueroot/root \\\n    /tmp/rescueroot/mnt \\\n    /tmp/rescueroot/usr \\\n    /tmp/rescueroot/var/tmp \\\n    /tmp/rescueroot/var/run\n\n<a-c># Point a few paths at the static rescue version</a-c>\n<a-f>ln</a-f> <a-co>-s</a-co> ../rescue/sh \\\n    /tmp/rescueroot/bin/sh\n<a-f>ln</a-f> <a-co>-s</a-co> ../rescue/init \\\n    /tmp/rescueroot/sbin/init\n\n<a-c># Set up the fstab for the rescue partition too</a-c>\n<a-f>tee</a-f> /tmp/rescueroot/etc/fstab <a-o>&gt;</a-o>/dev/null &lt;&lt;<a-s>&#39;EOF&#39;</a-s>\n<a-s>/dev/md0        /       ufs     rw              0       0\ntmpfs           /tmp    tmpfs   rw,mode=1777    0       0\n</a-s>EOF\n\n<a-c># Add a script to load the full root FS</a-c>\n<a-f>tee</a-f> /tmp/rescueroot/rescue/loadroot.sh <a-o>&gt;</a-o>/dev/null &lt;&lt;<a-s>&#39;EOF&#39;</a-s>\n<a-s>#!/rescue/sh\n\nset -eux\n\n# Single-user root is initially read-only...\nmount -uw /\n\n# Load the image\nmdconfig -a -t swap -s 3584m -u 2\nxzcat /dev/md1 &gt; /dev/md2\n\nmkdir -p /mnt/fullroot\nmount /dev/md2 /mnt/fullroot\nmount -t devfs devfs /mnt/fullroot/dev\nmount -t tmpfs tmpfs /mnt/fullroot/tmp\nchroot /mnt/fullroot /bin/sh\n</a-s>EOF\n\n<a-f>chmod</a-f> a+x /tmp/rescueroot/rescue/loadroot.sh\n\n<a-c># Create the mini rescue image</a-c>\n<a-f>rm</a-f> <a-co>-f</a-co> /tmp/mfsroot-rescue.ufs\n<a-f>makefs</a-f> \\\n    <a-co>-t</a-co> ffs \\\n    <a-co>-s</a-co> 32m \\\n    <a-co>-o</a-co> version=2,label=mfsroot \\\n    /tmp/mfsroot-rescue.ufs \\\n    /tmp/rescueroot\n\n<a-c># Copy it to the main image</a-c>\n<a-f>cp</a-f> /tmp/mfsroot-rescue.ufs /mnt/baseimgroot/boot/mfsroot\n\n<a-c># Unmount the finalized image</a-c>\n<a-f>sync</a-f>\n<a-f>umount</a-f> /mnt/baseimgroot\n<a-f>fsck_ufs</a-f> <a-co>-n</a-co> /dev/<a-eb>${</a-eb><a-pr>MD</a-pr><a-eb>}</a-eb>p2\n<a-f>mdconfig</a-f> <a-co>-d</a-co> <a-co>-u</a-co> <a-s>&quot;</a-s><a-eb>${</a-eb><a-pr>MD</a-pr><a-eb>#md}</a-eb><a-s>&quot;</a-s>\n\n<a-f>echo</a-f> <a-s>&quot;Final image at </a-s><a-eb>${</a-eb><a-pr>WORK_IMG</a-pr><a-eb>}</a-eb><a-s>&quot;</a-s></code></pre>\n<p>This probably has some room for improvement (e.g. I think it's technically including a bunch of data\nwhich isn't ever read), but it works.</p>\n</details>\n<p>And here is the script I use to flash the SD card.\nThis one assumes that you have downloaded an Armbian edge U-Boot image\nas described in the <a href=\"adventures-in-freebsd-bringup-on-an-rk3588-part-1.html\">previous post</a>,\nand have it in the current directory as <code>u-boot-rockchip.bin</code>.\nI am running this from my Mac, since my other FreeBSD boxes don't have SD card readers.</p>\n<details>\n<summary>Image flashing script (macOS)</summary>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-shell\"><a-c>#!/bin/sh</a-c>\n\n<a-f>set</a-f> <a-co>-eux</a-co>\n\n<a-c># This script flashes a FreeBSD SD card image.</a-c>\n<a-c># My main FreeBSD boxes don&#39;t have an SD card reader,</a-c>\n<a-c># so I am assuming macOS in this script.</a-c>\n<a-c>#</a-c>\n<a-c># Usage: flash-sd-image-macos.sh [n]</a-c>\n<a-c>#</a-c>\n<a-c># n is a drive number to be interpolated into device nodes</a-c>\n<a-c># (e.g. 4 = /dev/disk4).</a-c>\n<a-c>#</a-c>\n<a-c># Assumptions:</a-c>\n<a-c>#</a-c>\n<a-c># - The script runs as root</a-c>\n\n<a-pr>DEV_NUM</a-pr>=<a-o>$</a-o><a-pr>1</a-pr>\n\n<a-c># Precautionary unmount</a-c>\n<a-f>diskutil</a-f> unmountdisk /dev/disk<a-o>$</a-o><a-pr>DEV_NUM</a-pr>\n\n<a-c># Write the main image and sync</a-c>\n<a-f>dd</a-f> if=out.img of=/dev/rdisk<a-o>$</a-o><a-pr>DEV_NUM</a-pr> bs=1048576\n<a-f>sync</a-f>\n\n<a-c># Write the bootloader; we need to explicitly unmount again since macOS sometimes auto-remounts it -_-</a-c>\n<a-f>diskutil</a-f> unmountdisk /dev/disk<a-o>$</a-o><a-pr>DEV_NUM</a-pr>\n<a-f>dd</a-f> if=u-boot-rockchip.bin  of=/dev/rdisk<a-o>$</a-o><a-pr>DEV_NUM</a-pr> bs=32768 seek=1 conv=notrunc\n<a-f>sync</a-f>\n\n<a-f>diskutil</a-f> eject /dev/disk<a-o>$</a-o><a-pr>DEV_NUM</a-pr></code></pre>\n</details>\n<h1><a href=\"#next-steps\" aria-hidden=\"true\" class=\"anchor\" id=\"next-steps\"></a>Next Steps</h1>\n<p>Next, I need to configure my own development setup,\ninitially probably cross-compiling from another box.\nOnce I have a clear process to making source changes -&gt; compiling -&gt; flashing a new image,\nwe can start tackling the hardware support!\nAn experimental driver for the NICs already exists is the ports collection,\nand hopefully the common bits like USB aren't too much trouble.\nThe GPU will probably be the most difficult though,\nsince I'm not sure there have been any recent ARM Mali driver efforts on FreeBSD.</p>\n",
      "summary": "",
      "date_published": "2026-10-04T00:00:00-00:00",
      "image": "media/rk3588-rescue-first-boot.png",
      "authors": [
        {
          "name": "Ian Wagner",
          "url": "https://fosstodon.org/@ianthetechie",
          "avatar": "media/avi.jpeg"
        }
      ],
      "tags": [
        "FreeBSD",
        "ARM"
      ],
      "language": "en"
    },
    {
      "id": "https://blog.ianwwagner.com//adventures-in-freebsd-bringup-on-an-rk3588-part-1.html",
      "url": "https://blog.ianwwagner.com//adventures-in-freebsd-bringup-on-an-rk3588-part-1.html",
      "title": "Adventures in FreeBSD Bringup on an RK3588 (Part 1)",
      "content_html": "<p>Last month while sitting in a cafe, my friend Andrew showed me an article about a quirky new E Ink device that was launching\n(we're both huge fans of the technology).\nIt was cheap enough to be impulse purchase material,\nso I went to order it.\nAnd on the checkout page, something happened which has literally never happened to me... ever...\nI saw a &quot;you might also like&quot; style sales pitch, and the product was actually so compelling that I bought it 😱\nThe company was basically nerd sniping me.</p>\n<p>The item in question is a Rockchip 3588 (RK3588) mini PC from Seeed Studio.\nI was excited because it's rare to see an ARM-based system with a bit of oomph\nwhich isn't locked down like Fort Knox.\nI've long believed (since the early days of the iPhone)\nthat ARM systems have an extremely attractive power to watt ratio.\nAnd while platforms like Apple Silicon run circles around the competition,\nit seems like Apple is the only company that even cares in the consumer PC space these days.\nThere are a few datacenter-class chips that are starting to become widely available,\nbut the entry price isn't exactly cheap, and they are relatively difficult to obtain.</p>\n<p>Asd so I become aware of this RK3588 system.\nThe RK3588 has 8 cores (4x A76 and 4x A55).\nThe cores aren't blazing fast but they aren't slow either,\nand it's configurable with respectable amounts of DDR5.\nIt even comes with 2x 2.5GbE NICs (very handy!)\nand an NPU (maybe useful; maybe not).\nAnd you can buy it with delivery in a month for what I considered to be a fair price.</p>\n<p><a href=\"https://files.seeedstudio.com/wiki/reComputer_RK/Documents/recomputer_rk3588/RECOMPUTER_RK3588_V10_0119.pdf\">Schematics</a> included!</p>\n<p>Wait, schematics?\nYeh, so there's this other thing...\nI'd <em>really</em> prefer to run FreeBSD on it (or maybe NetBSD <a href=\"https://netbsd-cells.petermann-digital.de/\">now that they have cells</a>?).\nAnd for that, I'll probably need some schematics and other documentation.</p>\n<p>How hard can it be?\nI guess that's what we'll find out in this series.\nHere's the first post.</p>\n<h1><a href=\"#getting-some-help-from-armbian\" aria-hidden=\"true\" class=\"anchor\" id=\"getting-some-help-from-armbian\"></a>Getting some help from Armbian</h1>\n<p>The first thing I learned is that most ARM SBCs don't actually have a BIOS or UEFI or anything in firmware.\nThere's no boot menu to say &quot;why yes, I'd like the USB stick, please.&quot;\nInstead, you usually boot off of SD, eMMC, or SPI flash (I did not even know what this was to be honest).\nIf you're familiar with the idea of burning an ISO to a CDR or flashing an image to a USB stick with <code>dd</code>,\nthe process for these devices is similar.\nBut in addition to the OS, you also need a bootloader, and these are often chip- or board-specific.</p>\n<p>The Seeed studio reComputer has official Armbian support.\nSo my first idea was to pull the boot images from the Armbian distro that I'd already installed\nand write that to the relevant early sectors of the card,\non top of a FreeBSD system image designed for a similar chipset.\nThe FreeBSD project publishes official images for a few device families,\nincluding RockPro, which is a reasonable starting point.</p>\n<p>I first used the Armbian Installer to create a bootable SD card from my other computer\n(a MacBook in this case) which has an SD card reader.\nAt the time of this writing, the version was <code>v26.8.5 for reComputer RK3588 running Armbian Linux 6.1.172-vendor-seeed-rk3588</code>.\n(NB: I set up an SSH host config with <code>recomputer</code> as an alias to make things easier.)</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-shell\"><a-f>mkdir</a-f> ~/recomputer-rk3588-boot\n\n<a-f>scp</a-f> recomputer:/usr/lib/linux-u-boot-vendor-recomputer-rk3588-devkit/idbloader.img ~/recomputer-rk3588-boot/\n<a-f>scp</a-f> recomputer:/usr/lib/linux-u-boot-vendor-recomputer-rk3588-devkit/u-boot.itb ~/recomputer-rk3588-boot/\n<a-f>scp</a-f> recomputer:/boot/dtb-6.1.172-vendor-seeed-rk3588/rockchip/rk3588-recomputer-rk3588-devkit.dtb ~/recomputer-rk3588-boot/</code></pre>\n<p>The next thing I did was to prepare for the eventuality of not having a regular video connection like with the older systems I was used to.\nGiven that FreeBSD doesn't fully support the RK3588 yet, we'll need to set up a serial UART connection\nas HDMI probably won't work on the first boot.</p>\n<p>To do this, we need to figure out the baud rate.\nArmbian, which works out of the box, can help us.\nPoking around <code>/boot</code>, I found the DTB (Device Tree Blob).\nThis file describes the hardware of the system.\nWe can convert the blob back to source like this:</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-shell\"><a-f>dtc</a-f> <a-co>-I</a-co> dtb <a-co>-O</a-co> dts \\\n  /boot/dtp-6.1.172-vendor-seeed-rk3588/rockchip/rk3588-recomputer-rk3588-devkit.dtb \\\n  <a-o>&gt;</a-o> /tmp/recomputer.dts</code></pre>\n<p>I was able to discover that the UART console is on <code>fiq-debugger</code>,\nso I poked around for that block in the DTS.\nI found the line <code>rockchip,baudrate = &lt;0x16e360&gt;</code>, which translates into 1500000 in decimal.\nSo there's our baudrate.</p>\n<h1><a href=\"#getting-our-first-console\" aria-hidden=\"true\" class=\"anchor\" id=\"getting-our-first-console\"></a>Getting our first console</h1>\n<p>As mentioned above, the board firmware is barebones, so we can't take HDMI or anything for granted.\nARM SBCs like this give us GPIO headers instead.</p>\n<p>GPIO headers are just raw pins that you wire up with cables to... something you can work with.\nFor most people, that &quot;something you can work with&quot; is a USB to TTL adapter.\nIt has has USB connector on one side, maybe a jumper for voltage configuration, and 4 pins (VCC, TX, RX, and GND),\nand we can use it with tools like <code>cu</code> to get a console\n(which is incidentally WAY nicer once set up than most standard monitor setups!).</p>\n<p>I purchased a cheap adapter off Coupang.\nActually, I purchased TWO adapters, since I mistakenly ordered a 5V one the first time,\nand realized my mistake looking at the schematic (this board needs 3.3V).</p>\n<p>The 40-pin GPIO header is next to the CPU, but there are no labels.\nWhile Seeed Studio does publish full schematics, I couldn't find any indication on the top side of the board which pins were which.</p>\n<p>After a few minutes of scrutinizing for microscopic markings,\nI flipped the board over and found they had helpfully marked GND, RX, and TX pins on the underside!</p>\n<p>The cables were VERY short so it took a bit of desk tetris to get things oriented.</p>\n<p><figure><img src=\"media/usb-ttl.jpeg\" alt=\"A photo of the USB to TTL connection\" /></figure></p>\n<p>FreeBSD recognized the USB device as a serial console at <code>/dev/cuaU0</code> on my machine.\nSo now with the baud rate, we have all we need to open up the connection: <code>cu -l /dev/cuaU0 -s 1500000</code>\n(NB: you need to run this as root).</p>\n<p>Powering on the device, I got the following output from an Armbian boot. Success: we have a console!</p>\n<details>\n<summary>Armbian boot console log</summary>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">DDR b8ce94f14b cym 25/09/26-15:48.05,fwver: v1.20\nch0 ttot6\nch1 ttot6\nch2 ttot6\nch3 ttot6\nch0 ttot7\nLPDDR5, 2400MHz\nchannel[0] BW=16 Col=10 Bk=16 CS0 Row=16 CS1 Row=16 CS=2 Die BW=16 Size=4096MB\nch1 ttot7\nchannel[1] BW=16 Col=10 Bk=16 CS0 Row=16 CS1 Row=16 CS=2 Die BW=16 Size=4096MB\nch2 ttot7\nchannel[2] BW=16 Col=10 Bk=16 CS0 Row=16 CS1 Row=16 CS=2 Die BW=16 Size=4096MB\nch3 ttot7\nchannel[3] BW=16 Col=10 Bk=16 CS0 Row=16 CS1 Row=16 CS=2 Die BW=16 Size=4096MB\nManufacturer ID:0xff\nDQS rds:l0,l0\nCH0 RX Vref:27.1%, TX Vref:22.0%,21.0%\nDQ rds:h4 h4 h3 h1 h6 h4 h4 h2, l1 l0 h2 h7 h1 l0 l0 h1\n\nDQS rds:h1,l1\nCH1 RX Vref:27.5%, TX Vref:22.0%,21.0%\nDQ rds:h2 h1 h7 h5 h2 h4 h6 h4, h5 h3 h3 h3 h1 h2 h4 h1\n\nDQS rds:l0,l0\nCH2 RX Vref:27.1%, TX Vref:23.0%,23.0%\nDQ rds:h3 h1 h1 h5 h2 h7 h3 h3, h1 h3 h7 h1 h2 l0 h2 h1\n\nDQS rds:l0,l0\nCH3 RX Vref:30.1%, TX Vref:22.0%,22.0%\nDQ rds:h2 h2 h2 h2 h4 h1 h4 h1, h5 h2 h1 l0 h3 h3 h2 l0\n\nstride=0x2, ddr_config=0x6\nhash ch_mask0-1 0x20 0x40, bank_mask0-3 0x0 0x2400 0x44800 0x89000, rank_mask0 0x2000\nchange to F1: 534MHz\nch0 ttot6\nch1 ttot6\nch2 ttot6\nch3 ttot6\nchange to F2: 1320MHz\nch0 ttot8\nch1 ttot8\nch2 ttot8\nch3 ttot8\nchange to F3: 1968MHz\nch0 ttot6\nch1 ttot6\nch2 ttot6\nch3 ttot6\nchange to F0: 2400MHz\nch0 ttot7\nch1 ttot7\nch2 ttot7\nch3 ttot7\nout\nU-Boot SPL board init\nU-Boot SPL 2017.09_armbian-2017.09-S39cd-P3cf6-H5af5-V6ae2-B6a81-R448a (Sep 16 2026 - 02:12:42)\nSPL Hotkey: ctrl+`\nsfc cmd=03H(6BH-x4)\nTrying to boot from MMC2\nMMC: no card present\nmmc_init: -123, time 0\nspl: mmc init failed with error: -123\nTrying to boot from MTD2\nTrying fit image at 0x4000 sector\n## Verified-boot: 0\n## Checking atf-1 0x00040000 ... sha256(7612223b82...) + OK\n## Checking uboot 0x00200000 ... sha256(23eb671700...) + OK\n## Checking fdt 0x0035b190 ... sha256(3e1835469d...) + OK\n## Checking atf-2 0xff100000 ... sha256(70505bb764...) + OK\n## Checking atf-3 0x000f0000 ... sha256(b2af21b504...) + OK\nJumping to U-Boot(0x00200000) via ARM Trusted Firmware(0x00040000)\nTotal: 503.254/895.848 ms\n\nINFO:    Preloader serial: 2\nNOTICE:  BL31: v2.3():v2.3-868-g040d2de11:derrick.huang, fwver: v1.48\nNOTICE:  BL31: Built : 15:02:44, Dec 19 2024\nINFO:    spec: 0x1\nINFO:    code: 0x88\nINFO:    ext 32k is not valid\nINFO:    ddr: stride-en 4CH\nINFO:    GICv3 without legacy support detected.\nINFO:    ARM GICv3 driver initialized in EL3\nINFO:    valid_cpu_msk=0xff bcore0_rst = 0x0, bcore1_rst = 0x0\nINFO:    l3 cache partition cfg-0\nINFO:    system boots from cpu-hwid-0\nINFO:    bypass memory repair\nINFO:    idle_st=0x21fff, pd_st=0x11fff9, repair_st=0xfff70001\nINFO:    dfs DDR fsp_params[0].freq_mhz= 2400MHz\nINFO:    dfs DDR fsp_params[1].freq_mhz= 534MHz\nINFO:    dfs DDR fsp_params[2].freq_mhz= 1320MHz\nINFO:    dfs DDR fsp_params[3].freq_mhz= 1968MHz\nINFO:    BL31: Initialising Exception Handling Framework\nINFO:    BL31: Initializing runtime services\nWARNING: No OPTEE provided by BL2 boot loader, Booting device without OPTEE initialization. SMC`s destined for OPTEE will return SMC_UNK\nERROR:   Error initializing runtime service opteed_fast\nINFO:    BL31: Preparing for EL3 exit to normal world\nINFO:    Entry point address = 0x200000\nINFO:    SPSR = 0x3c9\nusb dr_mode not found\nusb dr_mode not found\n\n\nU-Boot 2017.09_armbian-2017.09-S39cd-P3cf6-H5af5-V6ae2-B6a81-R448a (Sep 16 2026 - 02:12:42 +0000)\n\nModel: Seeed Studio reComputer RK3588 DevKit\nMPIDR: 0x0\nPreSerial: 2, raw, 0xfeb50000\nDRAM:  16 GiB\nSysmem: init\nRelocation Offset: eda03000\nRelocation fdt: eb7f6e50 - eb7fecc0\nCR: M/C/I\nusb dr_mode not found\nusb dr_mode not found\nDM: v2\nRESC: No bootdev\nFailed to load DTB, ret=-2\nNo valid DTB, ret=-22\nFailed to get kernel dtb, ret=-22\nBooted from SPI NOR; scanning OS boot devices\nmmc@fe2c0000: 1, mmc@fe2e0000: 0\nMMC: no card present\nmmc_init: -123, time 0\npcie@fe180000: PCIe Linking... LTSSM is 0x0\npcie@fe180000: PCIe Linking... LTSSM is 0x0\npcie@fe180000: PCIe Linking... LTSSM is 0x2\npcie@fe180000: PCIe Linking... LTSSM is 0x2\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe-0 Link Fail\npcie@fe190000: PCIe Linking... LTSSM is 0x0\npcie@fe190000: PCIe Link up, LTSSM is 0x130011\npcie@fe190000: PCIE-0: Link up (Gen2-x1, Bus0)\npcie@fe150000: PCIe Linking... LTSSM is 0x1\npcie@fe150000: PCIe Linking... LTSSM is 0x210023\npcie@fe150000: PCIe Link up, LTSSM is 0x230011\npcie@fe150000: PCIE-2: Link up (Gen3-x4, Bus2)\npcie@fe170000: PCIe Linking... LTSSM is 0x0\npcie@fe170000: PCIe Link up, LTSSM is 0x130011\npcie@fe170000: PCIE-4: Link up (Gen2-x1, Bus4)\n\nDevice 0: Vendor: 0x1e0f Rev: ECFA17.3 Prod: 65PA20KEKQLP\n            Type: Hard Disk\n            Capacity: 1907729.0 MB = 1863.0 GB (3907029168 x 512)\n... is now current device\nBoot from nvme\nBootdev(scan): nvme 0\nPartType: EFI\n*** Warning - bad CRC, using default environment\n\nModel: Seeed Studio reComputer RK3588 DevKit\n[Vendor ERROR]:Invalid boot device type(0)\n## Error: Can't overwrite &quot;ethaddr&quot;\n## Error inserting &quot;ethaddr&quot; variable, errno=1\n## Error: Can't overwrite &quot;eth1addr&quot;\n## Error inserting &quot;eth1addr&quot; variable, errno=1\n[Vendor ERROR]:Invalid boot device type(0)\nrockchip_set_ethaddr: vendor_storage_write failed -19\n[Vendor ERROR]:Invalid boot device type(0)\nBooted from SPI NOR; scanning OS boot devices\nMMC: no card present\nmmc_init: -123, time 0\npcie@fe180000: PCIe Linking... LTSSM is 0x0\npcie@fe180000: PCIe Linking... LTSSM is 0x0\npcie@fe180000: PCIe Linking... LTSSM is 0x2\npcie@fe180000: PCIe Linking... LTSSM is 0x2\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe-6 Link Fail\n\nDevice 0: Vendor: 0x1e0f Rev: ECFA17.3 Prod: 65PA20KEKQLP\n            Type: Hard Disk\n            Capacity: 1907729.0 MB = 1863.0 GB (3907029168 x 512)\n... is now current device\nBoot from nvme\nBootdev(scan): nvme 0\nstarting USB...\nBus usb@fc000000: usb maximum-speed not found\nRegister 2000140 NbrPorts 2\nStarting the controller\nUSB XHCI 1.10\nBus usb@fc800000: USB EHCI 1.00\nBus usb@fc840000: USB OHCI 1.0\nBus usb@fc880000: USB EHCI 1.00\nBus usb@fc8c0000: USB OHCI 1.0\nBus usb@fc400000: usb maximum-speed not found\nRegister 2000140 NbrPorts 2\nStarting the controller\nUSB XHCI 1.10\nscanning bus usb@fc000000 for devices... 1 USB Device(s) found\nscanning bus usb@fc800000 for devices... 1 USB Device(s) found\nscanning bus usb@fc840000 for devices... 1 USB Device(s) found\nscanning bus usb@fc880000 for devices... 1 USB Device(s) found\nscanning bus usb@fc8c0000 for devices... 1 USB Device(s) found\nscanning bus usb@fc400000 for devices... cannot reset port 1!?\n1 USB Device(s) found\n       scanning usb for storage devices... 0 Storage Device(s) found\nNo usb mass storage found\nNo bootdev\ndev_desc is NULL!\nboot mode: None\nNo bootdev\nCLK: (sync kernel. arm: enter 1008000 KHz, init 1008000 KHz, kernel 0N/A)\n  b0pll 24000 KHz\n  b1pll 24000 KHz\n  lpll 24000 KHz\n  v0pll 24000 KHz\n  aupll 24000 KHz\n  cpll 1500000 KHz\n  gpll 1188000 KHz\n  npll 24000 KHz\n  ppll 1100000 KHz\n  aclk_center_root 702000 KHz\n  pclk_center_root 100000 KHz\n  hclk_center_root 396000 KHz\n  aclk_center_low_root 500000 KHz\n  aclk_top_root 750000 KHz\n  pclk_top_root 100000 KHz\n  aclk_low_top_root 396000 KHz\nNo bootdev\nNet:   No ethernet found.\nHit key to stop autoboot('CTRL+C'):  0\n\nDevice 0: unknown device\nMMC: no card present\nmmc_init: -123, time 0\npcie@fe180000: PCIe Linking... LTSSM is 0x0\npcie@fe180000: PCIe Linking... LTSSM is 0x0\npcie@fe180000: PCIe Linking... LTSSM is 0x2\npcie@fe180000: PCIe Linking... LTSSM is 0x2\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe Linking... LTSSM is 0x3\npcie@fe180000: PCIe-6 Link Fail\n\nDevice 0: Vendor: 0x1e0f Rev: ECFA17.3 Prod: 65PA20KEKQLP\n            Type: Hard Disk\n            Capacity: 1907729.0 MB = 1863.0 GB (3907029168 x 512)\n... is now current device\nCould not find misc partition\nANDROID: reboot reason: &quot;(none)&quot;\nNot AVB images, AVB skip\nandroid_image_load_by_partname: Can't find part: boot\nAndroid image load failed\nAndroid boot failed, error -1.\nScanning nvme 0:1...\nFound U-Boot script /boot/boot.scr\n8646 bytes read in 2 ms (4.1 MiB/s)\n## Executing script at 00500000\nBoot script loaded from nvme 0:1\n243 bytes read in 2 ms (118.2 KiB/s)\n300175 bytes read in 9 ms (31.8 MiB/s)\nUnknown command ':' - try 'help'\nSetting bus to 4\nI2c4 speed: 100000Hz\nDetected board: reComputer RK3588 Devkit, using DTB: rockchip/rk3588-recomputer-rk3588-devkit.dtb\nUsing fdtfile=rockchip/rk3588-recomputer-rk3588-devkit.dtb\n16437252 bytes read in 21 ms (746.5 MiB/s)\n45464064 bytes read in 52 ms (833.8 MiB/s)\n300175 bytes read in 9 ms (31.8 MiB/s)\n** File not found /boot/dtb/rockchip/overlay/seeed-rk3588-rockchip-rk3588-panthor-gpu.dtbo **\n441 bytes read in 14 ms (30.3 KiB/s)\nApplying kernel provided DT overlay rockchip-rk3588-panthor-gpu.dtbo\nTrying kaslrseed command... Info: Unknown command can be safely ignored since kaslrseed does not apply to all boards.\nUnknown command 'kaslrseed' - try 'help'\nFdt Ramdisk skip relocation\nNo misc partition\n## Loading init Ramdisk from Legacy Image at 0a200000 ...\n   Image Name:   uInitrd\n   Image Type:   AArch64 Linux RAMDisk Image (gzip compressed)\n   Data Size:    16437188 Bytes = 15.7 MiB\n   Load Address: 00000000\n   Entry Point:  00000000\n   Verifying Checksum ... OK\n## Flattened Device Tree blob at 0x08300000\n   Booting using the fdt blob at 0x08300000\n   reserving fdt memory region: addr=8300000 size=af000\n   Using Device Tree in place at 0000000008300000, end 00000000083b1fff\nJEDEC id bytes: 5e, 40, 18\nSF: Detected sfc_nor with page size 256 Bytes, erase size 4 KiB, total 16 MiB\n## reserved-memory:\n  cma: addr=10000000 size=10000000\n  ramoops@110000: addr=110000 size=e0000\nAdding bank: 0x00200000 - 0xf0000000 (size: 0xefe00000)\nAdding bank: 0x100000000 - 0x3fc000000 (size: 0x2fc000000)\nAdding bank: 0x3fc500000 - 0x3fff00000 (size: 0x03a00000)\nAdding bank: 0x4f0000000 - 0x500000000 (size: 0x10000000)\nTotal: 14284.180/14297.174 ms\n\nStarting kernel ...\n\n\nArmbian 26.8.5 Trixie ttyFIQ0\n\nrecomputer-rk3588-devkit login:\n</code></pre>\n</details>\n<h1><a href=\"#flashing-an-sd-card\" aria-hidden=\"true\" class=\"anchor\" id=\"flashing-an-sd-card\"></a>Flashing an SD card</h1>\n<p>Okay, now we can finally flash an SD card.\nThe FreeBSD images have a similar layout to the Armbian ones,\nso theoretically we can just overwrite the boot area with U-Boot\nusing a version that's already been patched for this exact board by Armbian and the vendor.\nI downloaded the latest current image,\nflashed it, and then overwrote the bootloader we lifted from Armbian.\nNB: I use <code>nushell</code> but this shuld be easy to adopt to another shell.</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-shell\"><a-c># Look at availabe disks</a-c>\n<a-f>diskutil</a-f> list\n<a-c># Find the SD card and note its disk number; for me it&#39;s disk4</a-c>\n<a-f>diskutil</a-f> unmountDisk /dev/disk4 <a-c># Probably not necessary, but just in case...</a-c>\n<a-c># rdisk devs are faster on macOS; the block size is 1 megabyte but in a portable representation</a-c>\n<a-f>sudo</a-f> dd if=FreeBSD-16.0-CURRENT-arm64-aarch64-ROCKPRO64-20260916-32878e64e687-289242.img of=/dev/rdisk4 bs=1048576\n<a-f>let</a-f> BOOT = <a-o>$</a-o><a-s>&quot;(</a-s><a-o>$</a-o><a-pr>env</a-pr><a-s>.HOME)/recomputer-rk3588-boot&quot;</a-s>\n<a-f>sudo</a-f> dd if=<a-o>$</a-o><a-s>&quot;(</a-s><a-o>$</a-o><a-pr>BOOT</a-pr><a-s>)/idbloader.img&quot;</a-s> of=/dev/rdisk4 bs=512 seek=64 conv=notrunc\n<a-f>sudo</a-f> dd if=<a-o>$</a-o><a-s>&quot;(</a-s><a-o>$</a-o><a-pr>BOOT</a-pr><a-s>)/u-boot.itb&quot;</a-s> of=/dev/rdisk4 bs=512 seek=16384 conv=notrunc\n<a-f>sync</a-f></code></pre>\n<p>Skipping the boring parts, this fails.\nIt seems like the vendor version of U-Boot (2017.09, but built on August 31, 2026... interesting...) doesn't have UEFI support.\nHowever, the newer Armbian mainline U-boot packages do!\nTo get this, we need to turn to the edge branch.\nAn internet search turned up <a href=\"https://apt-test.next.armbian.com/pool/main/l/linux-u-boot-recomputer-rk3588-devkit-edge/\">apt-test.next.armbian.com</a>,\nwhich had an <code>edge</code> variant deb package for download.\nI grabbed that and then extracted just the pieces to flash on the SD card.\nNOTE: These commands will not work exactly as it's a datestamped package.</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-shell\"><a-f>wget</a-f> https://apt-test.next.armbian.com/pool/main/l/linux-u-boot-recomputer-rk3588-devkit-edge/linux-u-boot-recomputer-rk3588-devkit-edge_26.09.23-1999_arm64.deb\n<a-f>mkdir</a-f> /tmp/recomputer-edge-uboot\n<a-f>dpkg-deb</a-f> <a-co>-x</a-co> linux-u-boot-recomputer-rk3588-devkit-edge_*.deb /tmp/recomputer-edge-uboot</code></pre>\n<p>In there, I found what I was looking for: <code>/tmp/recomputer-edge-uboot/usr/lib/linux-u-boot-edge-recomputer-rk3588-devkit/u-boot-rockchip.bin</code>.\nThis actually does the duty of both the separate images we had to line up before.\nNote how the first idbloader.img was offset by 32K (512 x 64).</p>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner language-shell\"><a-f>shell</a-f>\n<a-f>sudo</a-f> dd if=<a-o>$</a-o><a-s>&quot;(</a-s><a-o>$</a-o><a-pr>env</a-pr><a-s>.HOME)/recomputer-rk3588-boot/u-boot-rockchip.bin&quot;</a-s> of=/dev/rdisk4 bs=32768 seek=1 conv=notrunc\n<a-f>sync</a-f></code></pre>\n<p>Then it's off to boot.\nAnd this looks something much more like a first boot... ish!\nHere's the first part of the boot sequence.</p>\n<details>\n<summary>Power-on sequence</summary>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">DDR b8ce94f14b cym 25/09/26-15:48.05,fwver: v1.20\nch0 ttot6\nch1 ttot6\nch2 ttot6\nch3 ttot6\nch0 ttot7\nLPDDR5, 2400MHz\nchannel[0] BW=16 Col=10 Bk=16 CS0 Row=16 CS1 Row=16 CS=2 Die BW=16 Size=4096MB\nch1 ttot7\nchannel[1] BW=16 Col=10 Bk=16 CS0 Row=16 CS1 Row=16 CS=2 Die BW=16 Size=4096MB\nch2 ttot7\nchannel[2] BW=16 Col=10 Bk=16 CS0 Row=16 CS1 Row=16 CS=2 Die BW=16 Size=4096MB\nch3 ttot7\nchannel[3] BW=16 Col=10 Bk=16 CS0 Row=16 CS1 Row=16 CS=2 Die BW=16 Size=4096MB\nManufacturer ID:0xff\nDQS rds:l0,l0\nCH0 RX Vref:27.1%, TX Vref:22.0%,20.0%\nDQ rds:h4 h4 h3 h1 h6 h3 h4 h2, l1 l0 h2 h7 h2 l0 l0 h1\n\nDQS rds:h1,l1\nCH1 RX Vref:27.5%, TX Vref:21.0%,21.0%\nDQ rds:h2 h1 h7 h5 h2 h4 h5 h3, h5 h4 h3 h4 h1 h3 h4 l0\n\nDQS rds:l0,l0\nCH2 RX Vref:27.1%, TX Vref:24.0%,22.0%\nDQ rds:h3 h1 h1 h6 h2 h7 h3 h3, h1 h3 h7 h1 h2 l0 h2 h1\n\nDQS rds:l0,l0\nCH3 RX Vref:30.1%, TX Vref:21.0%,21.0%\nDQ rds:h1 h1 h2 h2 h4 h1 h3 h1, h4 h1 h1 l0 h3 h3 h1 l0\n\nstride=0x2, ddr_config=0x6\nhash ch_mask0-1 0x20 0x40, bank_mask0-3 0x0 0x2400 0x44800 0x89000, rank_mask0 0x2000\nchange to F1: 534MHz\nch0 ttot6\nch1 ttot6\nch2 ttot6\nch3 ttot6\nchange to F2: 1320MHz\nch0 ttot8\nch1 ttot8\nch2 ttot8\nch3 ttot8\nchange to F3: 1968MHz\nch0 ttot6\nch1 ttot6\nch2 ttot6\nch3 ttot6\nchange to F0: 2400MHz\nch0 ttot7\nch1 ttot7\nch2 ttot7\nch3 ttot7\nout\nU-Boot SPL board init\nU-Boot SPL 2017.09_armbian-2017.09-S39cd-P3cf6-H5af5-V6ae2-B6a81-R448a (Sep 16 2026 - 02:12:42)\nsfc cmd=03H(6BH-x4)\nTrying to boot from MMC2\nspl: partition error\nTrying fit image at 0x4000 sector\n## Verified-boot: 0\n## Checking atf-1 0x00040000 ... sha256(38af45e591...) + OK\n## Checking u-boot 0x00800000 ... sha256(76020c775a...) + OK\n## Checking fdt-1 0x00950150 ... sha256(dba4ede5fc...) + OK\n## Checking atf-2 0x0005f000 ... sha256(498d3d780d...) + OK\n## Checking atf-3 0xff100000 ... sha256(98ca41a3ef...) + OK\nJumping to U-Boot(0x00800000) via ARM Trusted Firmware(0x00040000)\nTotal: 677.349/1069.752 ms\n\nNOTICE:  BL31: v2.13.0(release):armbian\nNOTICE:  BL31: Built : 13:13:21, Sep 23 2026\nINFO:    GICv3 without legacy support detected.\nINFO:    ARM GICv3 driver initialized in EL3\nINFO:    Maximum SPI INTID supported: 511\nINFO:    BL31: Initializing runtime services\nINFO:    BL31: Preparing for EL3 exit to normal world\nINFO:    Entry point address = 0x800000\nINFO:    SPSR = 0x3c9\n\n\nU-Boot 2026.07_armbian-2026.07-Sece3-P1da1-He361-V493b-B6a81-R448a (Sep 23 2026 - 13:13:38 +0000)\n\nModel: Seeed Studio reComputer RK3588 Dev Kit\nSoC:   RK3588\nDRAM:  16 GiB\nPMIC:  RK806 (on=0x80, off=0x80)\nCore:  848 devices, 36 uclasses, devicetree: separate\nMMC:   mmc@fe2c0000: 1, mmc@fe2e0000: 0\nLoading Environment from SPIFlash... SF: Detected zb25vq128 with page size 256 Bytes, erase size 4 KiB, total 16 MiB\n*** Warning - bad CRC, using default environment\n\nIn:    serial@feb50000\nOut:   serial@feb50000\nErr:   serial@feb50000\nModel: Seeed Studio reComputer RK3588 Dev Kit\nSoC:   RK3588\nNet:   No ethernet found.\nHit any key to stop autoboot: 0\nScanning for bootflows in all bootdevs\nSeq  Method       State   Uclass    Part  Name                      Filename\n---  -----------  ------  --------  ----  ------------------------  ----------------\nScanning global bootmeth 'efi_mgr':\nCard did not respond to voltage select! : -110\nNo EFI variables loaded\n  0  efi_mgr      ready   (none)       0  &lt;NULL&gt;\n** Booting bootflow '&lt;NULL&gt;' with efi_mgr\nBooting: Label: mmc 1 Device path: /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,0000000000000000)/SD(1)/SD(0)\n[image_setup_libfdt] called\n[image_setup_libfdt] calling fdt_fixup_ethernet\n[fdt_fixup_ethernet] called\n[fdt_fixup_ethernet] alias #0: name='gpio0', path='/pinctrl/gpio@fd8a0000'\n[fdt_fixup_ethernet] alias #1: name='gpio1', path='/pinctrl/gpio@fec20000'\n[fdt_fixup_ethernet] alias #2: name='gpio2', path='/pinctrl/gpio@fec30000'\n[fdt_fixup_ethernet] alias #3: name='gpio3', path='/pinctrl/gpio@fec40000'\n[fdt_fixup_ethernet] alias #4: name='gpio4', path='/pinctrl/gpio@fec50000'\n[fdt_fixup_ethernet] alias #5: name='i2c0', path='/i2c@fd880000'\n[fdt_fixup_ethernet] alias #6: name='i2c1', path='/i2c@fea90000'\n[fdt_fixup_ethernet] alias #7: name='i2c2', path='/i2c@feaa0000'\n[fdt_fixup_ethernet] alias #8: name='i2c3', path='/i2c@feab0000'\n[fdt_fixup_ethernet] alias #9: name='i2c4', path='/i2c@feac0000'\n[fdt_fixup_ethernet] alias #10: name='i2c5', path='/i2c@fead0000'\n[fdt_fixup_ethernet] alias #11: name='i2c6', path='/i2c@fec80000'\n[fdt_fixup_ethernet] alias #12: name='i2c7', path='/i2c@fec90000'\n[fdt_fixup_ethernet] alias #13: name='i2c8', path='/i2c@feca0000'\n[fdt_fixup_ethernet] alias #14: name='serial0', path='/serial@fd890000'\n[fdt_fixup_ethernet] alias #15: name='serial1', path='/serial@feb40000'\n[fdt_fixup_ethernet] alias #16: name='serial2', path='/serial@feb50000'\n[fdt_fixup_ethernet] alias #17: name='serial3', path='/serial@feb60000'\n[fdt_fixup_ethernet] alias #18: name='serial4', path='/serial@feb70000'\n[fdt_fixup_ethernet] alias #19: name='serial5', path='/serial@feb80000'\n[fdt_fixup_ethernet] alias #20: name='serial6', path='/serial@feb90000'\n[fdt_fixup_ethernet] alias #21: name='serial7', path='/serial@feba0000'\n[fdt_fixup_ethernet] alias #22: name='serial8', path='/serial@febb0000'\n[fdt_fixup_ethernet] alias #23: name='serial9', path='/serial@febc0000'\n[fdt_fixup_ethernet] alias #24: name='spi0', path='/spi@feb00000'\n[fdt_fixup_ethernet] alias #25: name='spi1', path='/spi@feb10000'\n[fdt_fixup_ethernet] alias #26: name='spi2', path='/spi@feb20000'\n[fdt_fixup_ethernet] alias #27: name='spi3', path='/spi@feb30000'\n[fdt_fixup_ethernet] alias #28: name='spi4', path='/spi@fecb0000'\n[fdt_fixup_ethernet] alias #29: name='ethernet0', path='/pcie@fe190000/pcie@0,0/ethernet@0,0'\n[fdt_fixup_ethernet] env var for alias 'ethernet0' is 'ethaddr', value='c6:1e:45:d5:c3:11'\n[fdt_fixup_ethernet] Patching node '/pcie@fe190000/pcie@0,0/ethernet@0,0' (offset 41640) with MAC c6:1e:45:d5:c3:11\n[fdt_fixup_ethernet] alias #30: name='ethernet1', path='/pcie@fe170000/pcie@0,0/ethernet@0,0'\n[fdt_fixup_ethernet] env var for alias 'ethernet1' is 'eth1addr', value='c6:1e:45:d5:c3:10'\n[fdt_fixup_ethernet] Patching node '/pcie@fe170000/pcie@0,0/ethernet@0,0' (offset 133268) with MAC c6:1e:45:d5:c3:10\n[fdt_fixup_ethernet] alias #31: name='mmc0', path='/mmc@fe2e0000'\n[fdt_fixup_ethernet] alias #32: name='mmc1', path='/mmc@fe2c0000'\n[fdt_fixup_ethernet] alias #33: name='spi5', path='/spi@fe2b0000'\n[fdt_fixup_ethernet] SUMMARY: aliases found=34, attempted=2, skipped=0, patched=2\n[image_setup_libfdt] calling ft_board_setup\n</code></pre>\n</details>\n<p>After this, the console clears and we get handed off te the classic FreeBSD loader.</p>\n<details>\n<summary>EFI + kernel detection</summary>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">Consoles: EFI console\n    Reading loader env vars from /efi/freebsd/loader.env\nSetting currdev to disk0p1:\nFreeBSD/arm64 EFI loader, Revision 3.0\n(Wed Sep 16 09:23:43 UTC 2026 root@releng3.nyi.freebsd.org)\n\n   Command line arguments: loader.efi\n   Image base: 0xec9e0000\n   EFI version: 2.110\n   EFI Firmware: Das U-Boot (rev 8230.1792)\n   Console: efi,comconsole (0)\n   Load Path: /\\EFI\\BOOT\\BOOTAA64.EFI\n   Load Device: /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,0000000000000000)/SD(1)/SD(0)/HD(1,GPT,361fb9b1-b1b3-11f1-8781-0cc47ad8b808,0x8000,0x19000)\n   BootCurrent: 0000\n   BootOrder: 0000[*]\nSetting currdev to md0:\nMD not present\n   BootInfo Path: /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,0000000000000000)/SD(1)/SD(0)\nIgnoring Boot0000: Only one DP found\nTrying ESP device: /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,0000000000000000)/SD(1)/SD(0)/HD(1,GPT,361fb9b1-b1b3-11f1-8781-0cc47ad8b808,0x8000,0x19000)\nTrying: /VenHw(e61d73b9-a384-4acc-aeab-82e828f3628b,0000000000000000)/SD(1)/SD(0)\nSetting currdev to disk0:\nLoading /boot/defaults/loader.conf\nLoading /boot/defaults/loader.conf\nLoading /boot/device.hints\nLoading /boot/loader.conf\nLoading /boot/loader.conf.local\n\nLoading kernel...\n/boot/kernel/kernel text=0x318 text=0xa94cb0 text=0x300818 data=0x190120 data=0x0+0x373000 0x8+0x182748+0x8+0x150085\\\nLoading configured modules...\ncan't find '/boot/entropy'\ncan't find '/etc/hostid'\n/boot/kernel/umodem.ko text=0x20c0 text=0x1678 data=0x718+0x4 0x8+0xc78+0x8+0x913\nloading required module 'ucom'\n/boot/kernel/ucom.ko text=0x263d text=0x3258 data=0x988+0x858 0x8+0x1050+0x8+0x9e5\n\nHit [Enter] to boot immediately, or any other key for command prompt.\nBooting [/boot/kernel/kernel]...\nUsing DTB provided by EFI at 0xecb64000.\nLoading splash ok\nLoading shutdown splash ok\n</code></pre>\n</details>\n<p>And then the boot:</p>\n<details>\n<summary>Kernel boot</summary>\n<pre class=\"marmite-code\"><code class=\"marmite-code-inner\">---&lt;&lt;BOOT&gt;&gt;---\nGDB: debug ports: uart\nGDB: current port: uart\nKDB: debugger backends: ddb gdb\nKDB: current backend: ddb\nWARNING: Cannot find freebsd,dts-version property, cannot check DTB compliance\nCopyright (c) 1992-2026 The FreeBSD Project.\nCopyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994\n        The Regents of the University of California. All rights reserved.\nFreeBSD is a registered trademark of The FreeBSD Foundation.\nFreeBSD 16.0-CURRENT #0 main-n289242-32878e64e687: Wed Sep 16 09:38:19 UTC 2026\n    root@releng3.nyi.freebsd.org:/usr/obj/usr/src/arm64.aarch64/sys/GENERIC arm64\nFreeBSD clang version 21.1.8 (https://github.com/llvm/llvm-project.git llvmorg-21.1.8-0-g2078da43e25a)\nWARNING: WITNESS option enabled, expect reduced performance.\nVT: init without driver.\nreal memory  = 17171271680 (16375 MB)\navail memory = 16774291456 (15997 MB)\nStarting CPU 1 (100)\nStarting CPU 2 (200)\nStarting CPU 3 (300)\nStarting CPU 4 (400)\nStarting CPU 5 (500)\nStarting CPU 6 (600)\nStarting CPU 7 (700)\nFreeBSD/SMP: Multiprocessor System Detected: 8 CPUs\nrandom: unblocking device.\nrandom: entropy device external interface\nkbd0 at kbdmux0\nofwbus0: &lt;Open Firmware Device Tree&gt;\nofw_firmware0: &lt;OFW Firmware Group&gt; on ofwbus0\nregfix0: &lt;Fixed Regulator&gt; on ofwbus0\nregfix1: &lt;Fixed Regulator&gt; on ofwbus0\nregfix2: &lt;Fixed Regulator&gt; on ofwbus0\nregfix3: &lt;Fixed Regulator&gt; on ofwbus0\nregfix4: &lt;Fixed Regulator&gt; on ofwbus0\nregfix5: &lt;Fixed Regulator&gt; on ofwbus0\nregfix6: &lt;Fixed Regulator&gt; on ofwbus0\nregfix7: &lt;Fixed Regulator&gt; on ofwbus0\nregfix8: &lt;Fixed Regulator&gt; on ofwbus0\nregfix9: &lt;Fixed Regulator&gt; on ofwbus0\nsimple_mfd0: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd58a000-0xfd599fff on ofwbus0\nsimple_mfd1: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd5d0000-0xfd5d3fff on ofwbus0\nsimple_mfd2: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd5d8000-0xfd5dbfff on ofwbus0\nsimple_mfd3: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd5dc000-0xfd5dffff on ofwbus0\nsimple_mfd4: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd8d8000-0xfd8d83ff on ofwbus0\nsimple_mfd5: &lt;Simple MFD (Multi-Functions Device)&gt; mem 0xfd5d4000-0xfd5d7fff on ofwbus0\npsci0: &lt;ARM Power State Co-ordination Interface Driver&gt; on ofwbus0\nsmccc0: &lt;ARM SMCCC v1.5&gt; on psci0\ncpulist0: &lt;Open Firmware CPU Group&gt; on ofwbus0\ncpu0: &lt;Open Firmware CPU&gt; on cpulist0\ngic0: &lt;ARM Generic Interrupt Controller v3.0&gt; mem 0xfe600000-0xfe60ffff,0xfe680000-0xfe77ffff irq 93 on ofwbus0\nits0: &lt;ARM GIC Interrupt Translation Service&gt; mem 0xfe640000-0xfe65ffff on gic0\nits1: &lt;ARM GIC Interrupt Translation Service&gt; mem 0xfe660000-0xfe67ffff on gic0\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\ngeneric_timer0: &lt;ARMv8 Generic Timer&gt; irq 2,3,4,5,6 on ofwbus0\nTimecounter &quot;ARM MPCore Timecounter&quot; frequency 24000000 Hz quality 1000\nEvent timer &quot;ARM MPCore Eventtimer&quot; frequency 24000000 Hz quality 1000\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nmmio_sram0: &lt;MMIO SRAM&gt; mem 0xfd600000-0xfd6fffff on ofwbus0\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nmmio_sram1: &lt;MMIO SRAM&gt; mem 0xff001000-0xff0effff on ofwbus0\nscmi_smc0: &lt;ARM SCMI SMC Transport driver&gt; on ofw_firmware0\nscmi_smc0: smc id 82000010\nscmi_smc0: scmi_shmem_get: Can't get shmem device.\nscmi_smc0: A2P shmem dev not found.\ndevice_attach: scmi_smc0 attach returned 6\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfd880000-0xfd880fff irq 24 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfea90000-0xfea90fff irq 98 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeab0000-0xfeab0fff irq 100 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfeac0000-0xfeac0fff irq 101 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec80000-0xfec80fff irq 120 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nrk_i2c0: &lt;RockChip I2C&gt; mem 0xfec90000-0xfec90fff irq 121 on ofwbus0\nrk_i2c0: cannot get i2c clock\ndevice_attach: rk_i2c0 attach returned 19\nsmbios0: &lt;System Management BIOS&gt;\nsmbios0: Entry point: v3 (64-bit), Version: 3.7\ncpufreq_dt0: &lt;Generic cpufreq driver&gt; on cpu0\ncpufreq_dt0: no clock for cpu@0\ndevice_attach: cpufreq_dt0 attach returned 6\ncpufreq_dt1: &lt;Generic cpufreq driver&gt; on cpu1\ncpufreq_dt1: no clock for cpu@100\ndevice_attach: cpufreq_dt1 attach returned 6\ncpufreq_dt2: &lt;Generic cpufreq driver&gt; on cpu2\ncpufreq_dt2: no clock for cpu@200\ndevice_attach: cpufreq_dt2 attach returned 6\ncpufreq_dt3: &lt;Generic cpufreq driver&gt; on cpu3\ncpufreq_dt3: no clock for cpu@300\ndevice_attach: cpufreq_dt3 attach returned 6\ncpufreq_dt4: &lt;Generic cpufreq driver&gt; on cpu4\ncpufreq_dt4: no clock for cpu@400\ndevice_attach: cpufreq_dt4 attach returned 6\ncpufreq_dt5: &lt;Generic cpufreq driver&gt; on cpu5\ncpufreq_dt5: no clock for cpu@500\ndevice_attach: cpufreq_dt5 attach returned 6\ncpufreq_dt6: &lt;Generic cpufreq driver&gt; on cpu6\ncpufreq_dt6: no clock for cpu@600\ndevice_attach: cpufreq_dt6 attach returned 6\ncpufreq_dt7: &lt;Generic cpufreq driver&gt; on cpu7\ncpufreq_dt7: no clock for cpu@700\ndevice_attach: cpufreq_dt7 attach returned 6\nscmi_smc0: &lt;ARM SCMI SMC Transport driver&gt; on ofw_firmware0\nscmi_smc0: smc id 82000010\nscmi_smc0: scmi_shmem_get: Can't get shmem device.\nscmi_smc0: A2P shmem dev not found.\ndevice_attach: scmi_smc0 attach returned 6\npcm0: &lt;simple-audio-card&gt; on ofwbus0\npmu0: &lt;Performance Monitoring Unit&gt; irq 0 on ofwbus0\npmu1: &lt;Performance Monitoring Unit&gt; irq 1 on ofwbus0\nsnps_dwc3_fdt0: Found dr_mode 'peripheral' but only 'host' supported. s=11\nehci0: &lt;Generic EHCI Controller&gt; mem 0xfc880000-0xfc8bffff irq 13 on ofwbus0\nusbus0: EHCI version 1.0\nusbus0 on ehci0\nohci0: &lt;Generic OHCI Controller&gt; mem 0xfc8c0000-0xfc8fffff irq 14 on ofwbus0\n</code></pre>\n</details>\n<p>And that's it for the first boot!\nIt just hung there.\nUnsurprisingly, without clocks, many devices fail to come online.\nNo surprise really given the <a href=\"https://cgit.freebsd.org/src/tree/sys/conf/files.arm64?id=355f02cddbf017706d3293f09ed6c2b5570936c1&amp;h=main#n687\">current code</a>\nwhich has no entries for this chip.</p>\n<p>I'm hoping with the <a href=\"https://files.seeedstudio.com/wiki/reComputer_RK/Documents/recomputer_rk3588/RECOMPUTER_RK3588_V10_0119.pdf\">schematics</a>\nthat I'll be able to sort through this, given that many similar chips already have a modicum of support on the BSDs\nand there is already quite good Linux support.\nBut it was still pretty exciting to see the familiar FreeBSD copyright over the serial console!</p>\n<p>That's all I have time for today, but I'll be back later with more updates as I have time.\nHit me up on Mastodon if you're interested to collaborate on this.</p>\n",
      "summary": "",
      "date_published": "2026-09-26T00:00:00-00:00",
      "image": "media/usb-ttl.jpeg",
      "authors": [
        {
          "name": "Ian Wagner",
          "url": "https://fosstodon.org/@ianthetechie",
          "avatar": "media/avi.jpeg"
        }
      ],
      "tags": [
        "FreeBSD",
        "ARM"
      ],
      "language": "en"
    }
  ]
}