<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pine64.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Acj</id>
	<title>PINE64 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pine64.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Acj"/>
	<link rel="alternate" type="text/html" href="https://wiki.pine64.org/wiki/Special:Contributions/Acj"/>
	<updated>2026-04-20T22:49:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=QuartzPro64_Development&amp;diff=14648</id>
		<title>QuartzPro64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=QuartzPro64_Development&amp;diff=14648"/>
		<updated>2022-11-10T22:50:46Z</updated>

		<summary type="html">&lt;p&gt;Acj: Adding link to preorder request form&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Quartzpro64_whole_board_top_resized.jpeg|250px|thumb|right|The QuartzPro64 development board]]&lt;br /&gt;
[[File:BoardBackSide.jpg|100px|thumb|right|Board back side]]&lt;br /&gt;
&lt;br /&gt;
A '''QuartzPro64 Development''' Wiki page before a '''QuartzPro64''' Wiki page? It's more likely than you think!&lt;br /&gt;
&lt;br /&gt;
This page will be used for both documenting the current development efforts and the board in general, as we don't know yet how a generally available QuartzPro64 will look like so documenting the dev board is probably best left to the development page.&lt;br /&gt;
&lt;br /&gt;
= Obtaining a Development Board =&lt;br /&gt;
&lt;br /&gt;
Request/Register: [https://preorder.pine64.org/#/quartzpro64 https://preorder.pine64.org/#/quartzpro64]&lt;br /&gt;
&lt;br /&gt;
= Upstreaming Status =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable plainrowheaders&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Function&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;2&amp;quot; | Status&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Component&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Video Output&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs porting&lt;br /&gt;
| &amp;lt;code&amp;gt;VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
| Collabora said they'll work on this. The video output IP on the RK3588 should mostly be the same as the one on the RK356x, but the chip specific stuff will need to be integrated into the vop2 driver.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Video Input&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs porting&lt;br /&gt;
| &amp;lt;code&amp;gt;rk_hdmirx&amp;lt;/code&amp;gt;&lt;br /&gt;
| Huge 3600 line driver, but generally seems to be in good condition&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| Collabora said they'll work on this. New architecture, reportedly needs many changes to the kernel component of Panfrost.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;4&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot; rowspan=&amp;quot;4&amp;quot;|GStreamer only, no ffmpeg&amp;lt;sup&amp;gt;[https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=2898]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;hantro&amp;lt;/code&amp;gt; using &amp;lt;code&amp;gt;v4l2-requests&amp;lt;/code&amp;gt;&lt;br /&gt;
| VDPU121 handling 1080p60 H.263/MPEG-4, MPEG-1 and MPEG-2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &amp;lt;code&amp;gt;rkvdec2&amp;lt;/code&amp;gt; using &amp;lt;code&amp;gt;v4l2-requests&amp;lt;/code&amp;gt;&lt;br /&gt;
| Nobody is known to be working on this for now. VDPU346 handling 8K60 H.265, H.264, VP9 and AVS&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &amp;lt;code&amp;gt;rkdjpeg&amp;lt;/code&amp;gt; using &amp;lt;code&amp;gt;v4l2-requests&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[User:CounterPillow]] is doing a little work on this. VDPU720 handling JPEG&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; using &amp;lt;code&amp;gt;v4l2-requests&amp;lt;/code&amp;gt;&lt;br /&gt;
| Collabora said they'll work on this. VDPU981 handling 4K60 AV1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Encode &lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| style=&amp;quot;text-align:center; background:LightYellow;&amp;quot;|GStreamer only&lt;br /&gt;
| JPEG on VEPU121&lt;br /&gt;
| Driver already exists, only minor changes needed.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;|?&lt;br /&gt;
| H.264 on VEPU580&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;|?&lt;br /&gt;
| H.265 on VEPU580&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | Audio &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review&amp;lt;sup&amp;gt;[https://patchwork.kernel.org/project/linux-rockchip/list/?series=688661]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;es8388&amp;lt;/code&amp;gt; CODEC&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | CRU&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review&amp;lt;sup&amp;gt;[https://patchwork.kernel.org/project/linux-rockchip/list/?series=686346]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;clk-rk3588&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | MMC&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;sdhci-of-dwcmshc&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bbbd8872825310b14bc6e04250d2cb5edcd55edb]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | pinctrl&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;pinctrl-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fdc33eba11c5919199f3d13dc53571cc7bf19d7d]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | GPIO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-gpio&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc165ba48aaf7d792e99d0c7e4b12e9625bc73e3]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rk3x-i2c&amp;lt;/code&amp;gt;&lt;br /&gt;
| Should be the same as RK3399, just needs devicetree work&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | SPI&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-spi&amp;lt;/code&amp;gt;&lt;br /&gt;
| Should be the same as previous SoCs, just needs devicetree work&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | PMU&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review&amp;lt;sup&amp;gt;[https://patchwork.kernel.org/project/linux-rockchip/list/?series=687286]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rk806&amp;lt;/code&amp;gt;&lt;br /&gt;
| Talks over SPI&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Regulators&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs porting&lt;br /&gt;
| &amp;lt;code&amp;gt;rk860&amp;lt;/code&amp;gt;&lt;br /&gt;
| Talks over I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | GMAC&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;dwmac-rk&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2f2b60a0ec2826e5a2b2a1ddf68994a868dccbc1]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Domains&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-pm-domain&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6541b424ce1dda616d3946e839f015c984df7a99]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | CAN&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs porting&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip_canfd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Not broken out on the QuartzPro64, so we probably won't be the ones porting it&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | SPDIF TX&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|May need porting&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-spdif&amp;lt;/code&amp;gt;&lt;br /&gt;
| Genuinely just needs the compatible string added, I think, otherwise we're all good. Not broken out on QuartzPro64 dev board&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | SPDIF RX&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs porting&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-spdifrx&amp;lt;/code&amp;gt;&lt;br /&gt;
| Not broken out on QuartzPro64 dev board&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | PCIe&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|May need porting&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-dw-pcie&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream driver and upstream are quite different, look into how much work actually needs doing. Seems to be the same controller as rk3568 so maybe none?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | NPU&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs porting/writing&lt;br /&gt;
| style=&amp;quot;text-align:center;&amp;quot;|?&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rknpu&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | USB 2.0&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|?&lt;br /&gt;
| &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | USB 3.0&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|?&lt;br /&gt;
| &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | SATA&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;ahci-dwc&amp;lt;/code&amp;gt;&lt;br /&gt;
| Just needs the compatible added to the bindings&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Thermal&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review&amp;lt;sup&amp;gt;[https://patchwork.kernel.org/project/linux-rockchip/list/?series=687619]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-thermal&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
[[File:Quartzpro64_soc_and_ram_resized.jpeg|200px|thumb|right|The SoC and RAM packages]]&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* RK3588 SoC&lt;br /&gt;
* 16 GB SK hynix DRAM&lt;br /&gt;
&lt;br /&gt;
== Cooler ==&lt;br /&gt;
&lt;br /&gt;
The board comes with two cooler mounts, a 4-hole mount that appears to be spaced 55x55mm apart, and the ~60mm diagonal &amp;quot;northbridge heatsink&amp;quot; mount the ROCKPro64 and Quartz64 Model A uses.&lt;br /&gt;
&lt;br /&gt;
RK3588 is slightly (&amp;lt;1mm?) taller than the DRAM chips, use a thick enough thermal pad instead of thermal compound.&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
&lt;br /&gt;
Plug in the USB-C port labelled &amp;quot;&amp;lt;tt&amp;gt;DEBUG PORT&amp;lt;/tt&amp;gt;&amp;quot; on the board to another computer with a USB-A-to-C cable. It will show up as a FT232 USB Serial adapter. Baud rate is as usual 1.5 mbauds or 1500000.&lt;br /&gt;
&lt;br /&gt;
Using &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt;, you should see something like the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[24784.535804] usb 5-3: new full-speed USB device number 3 using xhci_hcd&lt;br /&gt;
[24784.710714] usb 5-3: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00&lt;br /&gt;
[24784.710723] usb 5-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
[24784.710725] usb 5-3: Product: FT232R USB UART&lt;br /&gt;
[24784.710727] usb 5-3: Manufacturer: FTDI&lt;br /&gt;
[24784.710728] usb 5-3: SerialNumber: A10LLO86&lt;br /&gt;
[24784.723858] usbcore: registered new interface driver usbserial_generic&lt;br /&gt;
[24784.723865] usbserial: USB Serial support registered for generic&lt;br /&gt;
[24784.725286] usbcore: registered new interface driver ftdi_sio&lt;br /&gt;
[24784.725295] usbserial: USB Serial support registered for FTDI USB Serial Device&lt;br /&gt;
[24784.725348] ftdi_sio 5-3:1.0: FTDI USB Serial Device converter detected&lt;br /&gt;
[24784.725368] usb 5-3: Detected FT232RL&lt;br /&gt;
[24784.731685] usb 5-3: FTDI USB Serial Device converter now attached to ttyUSB0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you can get console output with, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
screen /dev/ttyUSB0 1500000&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mounting Holes ==&lt;br /&gt;
&lt;br /&gt;
Can't be bothered to take a precise measurement of all the holes right now, just use [https://www.ebay.com/sch/i.html?kw=pc%20standoff%20kit some PC standoffs] and have the board sit on your desk, it's a dev board after all.&lt;br /&gt;
&lt;br /&gt;
See the PCB layout PDF files, linked in the [https://wiki.pine64.org/wiki/QuartzPro64_Development#Documentation Documentation] section.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
[[File:Quartzpro64_emmc_resized.jpeg|200px|thumb|right|The eMMC on the dev board]]&lt;br /&gt;
&lt;br /&gt;
* Soldered on 64 GB FORESEE eMMC chip, it comes pre-flashed with some Android (you'll even get a brief bit of HDMI output)&lt;br /&gt;
* microSD card slot&lt;br /&gt;
* 2x SATA 3.0 (molex power connector for it not populated, but easy to remedy)&lt;br /&gt;
&lt;br /&gt;
== Power ==&lt;br /&gt;
&lt;br /&gt;
[[File:Power_and_switch.jpg|100px|thumb|right|Power switch &amp;amp; barrel connector]]&lt;br /&gt;
&lt;br /&gt;
You can provide power to the board via the 12V barrel connector, it's 5.5mm OD/2.1mm ID barrel 'coaxial' type &amp;quot;M&amp;quot; centre-positive, the ROCKPro64 5A power supply from the PINE64 store will work. (TODO: add alternative ways).&lt;br /&gt;
&lt;br /&gt;
There is a hardware flip switch to power up / down the board.&lt;br /&gt;
&lt;br /&gt;
== PMU ==&lt;br /&gt;
&lt;br /&gt;
[[File:Quartzpro64_pmu.jpeg|100px|thumb|right|The PMU]]&lt;br /&gt;
&lt;br /&gt;
2x RK806-2, not RK808 compatible. It's a dual PMU configuration where one PMU is a subordinate of the other.&lt;br /&gt;
&lt;br /&gt;
Verify this once we have access to SDK sources.&lt;br /&gt;
&lt;br /&gt;
[https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-misc.git/commit/?id=18650ce6630a3f066680e3affab33a11b9f3d14d This may be it], TODO: test it &amp;amp; report.&lt;br /&gt;
&lt;br /&gt;
== Ethernet ==&lt;br /&gt;
&lt;br /&gt;
The RGMII ethernet port (near the SDCARD socket) is working if you use neg2led's linux-quartz64 repo.&lt;br /&gt;
&lt;br /&gt;
The other port (near the sound jack) is hooked to the SoC via PCIe and is currently not working.&lt;br /&gt;
&lt;br /&gt;
= Boot=&lt;br /&gt;
&lt;br /&gt;
The board can boot from the following interfaces:&lt;br /&gt;
* SPI&lt;br /&gt;
* eMMC&lt;br /&gt;
* SD/MMC&lt;br /&gt;
&lt;br /&gt;
TODO: in which priority / order are those boot options tried ?&lt;br /&gt;
&lt;br /&gt;
TODO: Add brickability informations&lt;br /&gt;
&lt;br /&gt;
= Immediate TODOs =&lt;br /&gt;
&lt;br /&gt;
== Enable cpufreq Stuff ==&lt;br /&gt;
&lt;br /&gt;
Current neggles kernel has the CPU at 1.2 GHz, apparently sre has patches to enable cpufreq?&lt;br /&gt;
&lt;br /&gt;
== Add RK3588 Support To VOP2 ==&lt;br /&gt;
&lt;br /&gt;
VOP2 IP on the RK3588 is very similar to the one on the RK356x, but it still needs platform specific code added.&lt;br /&gt;
&lt;br /&gt;
= Ways To Do Things =&lt;br /&gt;
&lt;br /&gt;
== Using rkdeveloptool ==&lt;br /&gt;
&lt;br /&gt;
Use the [https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool PINE64 fork of rkdeveloptool].&lt;br /&gt;
&lt;br /&gt;
Connect a USB-C cable to the &amp;quot;DEBUG PORT&amp;quot; USB-C port, and a second to the &amp;quot;DOWNLOAD&amp;quot; USB-C port. '''Cable direction for the latter matters, so if it doesn't show up after entering download mode, try rotating the USB-C connector to the other side!'''&lt;br /&gt;
&lt;br /&gt;
Interrupt the boot by mashing Ctrl+C very quickly on the serial comms, then type &amp;lt;code&amp;gt;download&amp;lt;/code&amp;gt; to enter rockusb download mode.&lt;br /&gt;
&lt;br /&gt;
 $ rkdeveloptool list&lt;br /&gt;
&lt;br /&gt;
should now show you the device somewhat like this:&lt;br /&gt;
&lt;br /&gt;
 '''$ rkdeveloptool list'''&lt;br /&gt;
 DevNo=1 Vid=0x2207,Pid=0x350b,LocationID=204    Loader&lt;br /&gt;
&lt;br /&gt;
{{Template:note|'''Note:''' If you receive an error about being unable to create the comms object in the following steps, make sure you have the udev rules installed with [https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool/-/merge_requests/19 CounterPillow's RK3588 device id patch], install them to &amp;lt;code&amp;gt;/etc/udev/rules.d/&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;udevadm control --reload&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Now, we can e.g. show the partitions on the eMMC:&lt;br /&gt;
&lt;br /&gt;
 '''$ rkdeveloptool list-partitions'''&lt;br /&gt;
 #   LBA start (sectors)  LBA end (sectors)  Size (bytes)       Name                &lt;br /&gt;
 00                 8192              16383       4194304       security&lt;br /&gt;
 01                16384              24575       4194304       uboot&lt;br /&gt;
 02                24576              32767       4194304       trust&lt;br /&gt;
 03                32768              40959       4194304       misc&lt;br /&gt;
 04                40960              49151       4194304       dtbo&lt;br /&gt;
 05                49152              51199       1048576       vbmeta&lt;br /&gt;
 06                51200             133119      41943040       boot&lt;br /&gt;
 07               133120             329727     100663296       recovery&lt;br /&gt;
 08               329728            1116159     402653184       backup&lt;br /&gt;
 09              1116160            1902591     402653184       cache&lt;br /&gt;
 10              1902592            1935359      16777216       metadata&lt;br /&gt;
 11              1935360            1937407       1048576       baseparameter&lt;br /&gt;
 12              1937408            8310783    3263168512       super&lt;br /&gt;
 13              8310784          120831935   57610829824       userdata&lt;br /&gt;
&lt;br /&gt;
You can now use &amp;lt;code&amp;gt;rkdeveloptool write-partition partitionname yourfile&amp;lt;/code&amp;gt; to overwrite one of the eMMC partitions.&lt;br /&gt;
&lt;br /&gt;
== U-Boot + Kernel On SD, RootFS On eMMC ==&lt;br /&gt;
&lt;br /&gt;
This is the setup [[User:CounterPillow]] currently uses. In short, you'll need a vendor U-Boot on your SD card, with a boot partition on it that contains your &amp;lt;tt&amp;gt;extlinux.conf&amp;lt;/tt&amp;gt;, device tree and kernel.&lt;br /&gt;
&lt;br /&gt;
=== Setting Up The SD Card ===&lt;br /&gt;
&lt;br /&gt;
Assuming your SD card is &amp;lt;tt&amp;gt;/dev/sdX&amp;lt;/tt&amp;gt;, partition as e.g. follows:&lt;br /&gt;
&lt;br /&gt;
 # parted -s /dev/sdX mklabel gpt&lt;br /&gt;
 # parted -s /dev/sdX mkpart loader 64s 8MiB&lt;br /&gt;
 # parted -s /dev/sdX mkpart uboot 8MiB 16MiB&lt;br /&gt;
 # parted -s /dev/sdX mkpart env 16MiB 32MiB&lt;br /&gt;
 # parted -s /dev/sdX mkpart efi fat32 32MiB 544MiB    # increase size as you wish&lt;br /&gt;
 # parted -s /dev/sdX set 4 boot on&lt;br /&gt;
&lt;br /&gt;
Flash SPL and u-boot:&lt;br /&gt;
 # dd if=rk3588_spl_loader_v1.06.109.bin of=/dev/sdX1&lt;br /&gt;
 # dd if=uboot.img of=/dev/sdX2&lt;br /&gt;
&lt;br /&gt;
Then make the filesystem:&lt;br /&gt;
 # mkfs.vfat -n &amp;quot;efi&amp;quot; /dev/sdX4&lt;br /&gt;
&lt;br /&gt;
Mount it to e.g. &amp;lt;tt&amp;gt;/mnt/sdcardboot&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 # mount /dev/sda4 /mnt/sdcardboot&lt;br /&gt;
&lt;br /&gt;
Put the following in &amp;lt;tt&amp;gt;/mnt/sdcardboot/extlinux/extlinux.conf&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 default l0&lt;br /&gt;
 menu title QuartzPro64 Boot Menu&lt;br /&gt;
 prompt 0&lt;br /&gt;
 timeout 50&lt;br /&gt;
 &lt;br /&gt;
 label l0&lt;br /&gt;
 menu label Boot Jank Kernel SDMMC&lt;br /&gt;
 linux /jank&lt;br /&gt;
 fdt /dtbs/rockchip/rk3588-evb1-v10.dtb&lt;br /&gt;
 append earlycon=uart8250,mmio32,0xfeb50000 console=ttyS2,1500000n8 root=/dev/mmcblk0p14 rw rootwait&lt;br /&gt;
&lt;br /&gt;
Copy your kernel to &amp;lt;tt&amp;gt;/mnt/sdcardboot/jank&amp;lt;/tt&amp;gt; and your DTB to &amp;lt;tt&amp;gt;/mnt/sdcardboot/dtbs/rockchip/rk3588-evb1-v10.dtb&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Unmount it, we're done with the SD card.&lt;br /&gt;
&lt;br /&gt;
=== Creating The Root File System ===&lt;br /&gt;
&lt;br /&gt;
First, allocate a file the size of your desired root partition (larger sizes will take longer to transfer, don't make the same mistakes as CounterPillow did), here we choose 16G:&lt;br /&gt;
 $ fallocate -l 16G rootpart.bin&lt;br /&gt;
&lt;br /&gt;
then, make the filesystem on it. CounterPillow went for ext4 because nobody has ever been fired for using ext4:&lt;br /&gt;
 $ mkfs.ext4 rootpart.bin&lt;br /&gt;
&lt;br /&gt;
Cool, now mount it:&lt;br /&gt;
 # mount rootpart.bin /mnt/emmc-root&lt;br /&gt;
&lt;br /&gt;
Now we'll download the Arch Linux ARM generic rootfs tarball and go to town:&lt;br /&gt;
 $ wget -N http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz{,.sig}&lt;br /&gt;
 $ curl 'https://keyserver.ubuntu.com/pks/lookup?op=get&amp;amp;search=0x68b3537f39a313b3e574d06777193f152bdbe6a6' | gpg --import=-    # in case you're lacking the key&lt;br /&gt;
 $ gpg --verify ArchLinuxARM-aarch64-latest.tar.gz.sig    # don't you dare skip this&lt;br /&gt;
 # bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C /mnt/emmc-root    # notice that this is run as root&lt;br /&gt;
&lt;br /&gt;
Then we just need to edit fstab. Get the UUID (not PARTUUID) from lsblk:&lt;br /&gt;
 $ lsblk -o NAME,SIZE,MOUNTPOINTS,UUID&lt;br /&gt;
&lt;br /&gt;
and put it in &amp;lt;tt&amp;gt;/mnt/emmc-root/etc/fstab&amp;lt;/tt&amp;gt; as follows:&lt;br /&gt;
 UUID=''root-uuid-here''  /       ext4    defaults        0       1&lt;br /&gt;
&lt;br /&gt;
Unmount &amp;lt;tt&amp;gt;/mnt/emmc-root&amp;lt;/tt&amp;gt;, we're done with it.&lt;br /&gt;
&lt;br /&gt;
=== Flashing The Root File System With RockUSB ===&lt;br /&gt;
&lt;br /&gt;
{{Template:warning|This '''will''' destroy whatever data is on that userdata partition. But you're here to run Linux, not Android, right?}}&lt;br /&gt;
&lt;br /&gt;
Plug one USB-C cable into the debug UART port, the other into the download port. Yes you will need two USB-C cables (or A-to-C cables) for this, get over it.&lt;br /&gt;
&lt;br /&gt;
Plug in your board, reset it while hammering Ctrl+c on the debug UART until you get into a u-boot command line. Now enter the &amp;lt;code&amp;gt;download&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
If your device doesn't show up in &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rkdeveloptool list&amp;lt;/code&amp;gt; command, pull out the download USB-C plug, rotate it axially by 180 Euler degrees, and plug it back in.&lt;br /&gt;
&lt;br /&gt;
Next, flash the partition. Depending on the size of it, this can take over an hour:&lt;br /&gt;
 $ rkdeveloptool write-partition userdata rootpart.bin&lt;br /&gt;
&lt;br /&gt;
=== Booting ===&lt;br /&gt;
&lt;br /&gt;
Unplug the download USB-C cable once done.&lt;br /&gt;
&lt;br /&gt;
Put the SD card in the board. Reset it. You can now boot and your rootfs on eMMC will be mounted and contains an ALARM userland.&lt;br /&gt;
&lt;br /&gt;
To update kernels or the device tree, just shut down the board, take out the SD card, write a new kernel or dtb to it, and plug it back in. No more need for rkdeveloptool, yay.&lt;br /&gt;
&lt;br /&gt;
== Using neg2led's kernel branch ==&lt;br /&gt;
&lt;br /&gt;
If you use the linux-quartz64 branch from neg2led's kernel fork (see Resources for a link). The uSD card reader is working and you can use a partition on it for the root FS. This will eliminate the need to use rkdeveloptool.&lt;br /&gt;
&lt;br /&gt;
Create the additionnal partition:&lt;br /&gt;
&lt;br /&gt;
 # parted -s /dev/sdX mkpart root ext4 544MiB 4GiB&lt;br /&gt;
&lt;br /&gt;
Mount it:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/sda4 /mnt/sdcardroot&lt;br /&gt;
&lt;br /&gt;
Extract the ALARM rootfs tarball in there:&lt;br /&gt;
&lt;br /&gt;
 # bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C /mnt/sdcardroot    # notice that this is run as root&lt;br /&gt;
&lt;br /&gt;
Find the right device your SD card will be (by booting neg2led's kernel once and looking at the boot log). Then modify &amp;quot;root=&amp;quot; from extlinux/extlinux.conf, for example:&lt;br /&gt;
&lt;br /&gt;
 root=/dev/mmcblk1p5&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
* [http://lists.infradead.org/pipermail/linux-rockchip/ The linux-rockchip mailing list archives]&lt;br /&gt;
* [https://patchwork.kernel.org/project/linux-rockchip/list/ linux-rockchip patchwork]&lt;br /&gt;
* [https://github.com/neg2led/linux-quartz64 neg2led's mainline kernel repository with patches picked from the mailing list]&lt;br /&gt;
* [https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-misc.git/log/?h=rk3588 Sebastian Reichel's rk3588 branch]&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
&lt;br /&gt;
* The quartz64 and quartz-dev channels on the PINE64 chats (bridged IRC, Matrix, Discord and Telegram)&lt;br /&gt;
* [https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool PINE64 rkdeveloptool fork]&lt;br /&gt;
* [https://github.com/CounterPillow/uboot-qp64 CounterPillow's uboot-qp64 repository], used with [https://github.com/rockchip-linux/rkbin/ the official rkbin repository]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
The various documents relating to the chips and board haven't been publicly released yet, but if you do have a QuartzPro64 board [[User:CounterPillow]] will happily provide the documentation for you if you ask him in the PINE64 chats. We have the following:&lt;br /&gt;
* RK3588 TRM Part 1 and Part 2&lt;br /&gt;
* RK860 datasheet including register descriptions&lt;br /&gt;
* RK806 datasheet including register descriptions&lt;br /&gt;
* RK3588 hardware design guide, machine translated to English from Chinese, and the original Chinese copy&lt;br /&gt;
* [https://devzone.pine64.org/uploads/d392f228-d53b-11ec-9ab8-fe0395c0c83d/9fee695f-39a4-4858-a58a-c91b86d4fa2c/QuartzPro64-DevBoard-Schematic-V1.0_20220216.pdf QuartzPro64 schematics]&lt;br /&gt;
* [https://devzone.pine64.org/uploads/d392f228-d53b-11ec-9ab8-fe0395c0c83d/cf368836-966e-4c3c-9e0d-04a82a705d45/QuartzPro64-DevBoard-PCB-V1.0_20220216_topplace.pdf QuartzPro64 PCB top layout]&lt;br /&gt;
* [https://devzone.pine64.org/uploads/d392f228-d53b-11ec-9ab8-fe0395c0c83d/ec260213-d4f7-4c61-ad1f-40ee7b7b7a35/QuartzPro64-DevBoard-PCB-V1.0_20220216_bottomplace.pdf QuartzPro64 PCB bottom layout]&lt;br /&gt;
&lt;br /&gt;
[[Category:Rockchip RK3588]]&lt;/div&gt;</summary>
		<author><name>Acj</name></author>
	</entry>
</feed>