<?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=Diederik</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=Diederik"/>
	<link rel="alternate" type="text/html" href="https://wiki.pine64.org/wiki/Special:Contributions/Diederik"/>
	<updated>2026-04-18T13:25:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Pro/IMX258_Camera_Debugging&amp;diff=21638</id>
		<title>PinePhone Pro/IMX258 Camera Debugging</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Pro/IMX258_Camera_Debugging&amp;diff=21638"/>
		<updated>2024-11-10T15:01:32Z</updated>

		<summary type="html">&lt;p&gt;Diederik: /* Initial status */ Add note about DeviceTree *binding* which tells the DT description is lacking those voltage supply entries&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Under construction}}&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone Pro's rear camera is a Sony IMX258. The camera driver is present upstream, and at least [https://gitlab.manjaro.org/manjaro-arm/packages/core/linux-pinephonepro Manjaro's kernel] (downstream of Megi's) enables the driver. The camera does not seem to work; this page catalogs work on figuring out why.&lt;br /&gt;
&lt;br /&gt;
== Initial status ==&lt;br /&gt;
&lt;br /&gt;
What do we see in dmesg?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
imx258 1-001a: supply vana not found, using dummy regulator&lt;br /&gt;
imx258 1-001a: supply vdig not found, using dummy regulator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This tells us the kernel loads the driver, which is something.&lt;br /&gt;
&lt;br /&gt;
Are these errors bad/fatal? Inspecting the [https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/media/i2c/imx258.c?h=linux-6.6.y source] shows us that these supplies are defined in the &amp;lt;code&amp;gt;imx258_supply_names&amp;lt;/code&amp;gt; array, and &amp;lt;code&amp;gt;imx258_probe&amp;lt;/code&amp;gt; calls &amp;lt;code&amp;gt;devm_regulator_bulk_get&amp;lt;/code&amp;gt; to set them up.&lt;br /&gt;
&amp;lt;code&amp;gt;imx258_probe&amp;lt;/code&amp;gt; checks the return code from &amp;lt;code&amp;gt;devm_regulator_bulk_get&amp;lt;/code&amp;gt;, emitting a fatal &amp;quot;Failed to get supplies&amp;quot; message if the return code is negative (indicating failure). Since we don't see this message (or any others from the driver), it looks like it loads successfully!&lt;br /&gt;
&lt;br /&gt;
==== Note ====&lt;br /&gt;
The DeviceTree description of the Sony IMX258 Image Sensor should conform to its [https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml DeviceTree binding].&amp;lt;br /&amp;gt;&lt;br /&gt;
What those error messages tell you is that the &amp;lt;code&amp;gt;vana&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;vdig&amp;lt;/code&amp;gt; supplies have NOT been defined in the DeviceTree description. The best thing to do would be to add those.&lt;br /&gt;
&lt;br /&gt;
=== How can we test the camera? ===&lt;br /&gt;
&lt;br /&gt;
==== Megapixels ====&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com/postmarketOS/megapixels Megapixels] requires a per-device file to configure cameras. This one isn't complete (most of its numbers are complete nonsense), but it should let us see what happens when Megapixels tries to access the camera:&lt;br /&gt;
&amp;lt;code&amp;gt;pine64,pinephone-pro.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[device]&lt;br /&gt;
make=PINE64&lt;br /&gt;
model=PinePhone Pro&lt;br /&gt;
&lt;br /&gt;
[rear]&lt;br /&gt;
driver=imx258&lt;br /&gt;
media-driver=rkisp1&lt;br /&gt;
capture-width=4208&lt;br /&gt;
capture-height=3118&lt;br /&gt;
capture-rate=60&lt;br /&gt;
capture-fmt=GRBG10P&lt;br /&gt;
preview-width=1280&lt;br /&gt;
preview-height=960&lt;br /&gt;
preview-rate=60&lt;br /&gt;
#preview-fmt=BGGR8&lt;br /&gt;
capture-fmt=GRBG10P&lt;br /&gt;
rotate=90&lt;br /&gt;
mirrored=true&lt;br /&gt;
focallength=2.6&lt;br /&gt;
cropfactor=12.7&lt;br /&gt;
fnumber=2.8&lt;br /&gt;
flash-display=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This segfaulted Megapixels for me. After patching some trivial segfaults, I get fatal GTK4 issues and other tangential problems. Let's try something else.&lt;br /&gt;
&lt;br /&gt;
==== Manually setting up a camera pipeline ====&lt;br /&gt;
&lt;br /&gt;
We can roughly follow [https://www.kernel.org/doc/html/latest/admin-guide/media/rkisp1.html this guide]. Doing so gives us the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-r&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'imx258 1-001a':0 -&amp;gt; 'rkisp1_isp':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'rkisp1_isp':2 -&amp;gt; 'rkisp1_resizer_selfpath':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;rkisp1_isp&amp;quot;:0 [fmt:SGRBG10_1X10/1048x780]'&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=1048,height=780,&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;rkisp1_resizer_selfpath&amp;quot;:0 [fmt:SGRBG10_1X10/1048x780 crop:(0,0)/1048x780]'&lt;br /&gt;
&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=800,height=600,pixelformat=422P&amp;quot;&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;--stream-mmap&amp;quot; &amp;quot;--stream-count&amp;quot; &amp;quot;1&amp;quot; &amp;quot;--verbose&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Careful readers will note that this is setting the camera up with a low resolution compared to what the sensor can do. For some reason I can't get the rkisp1 node to configure its sink pad with the maximum resolution of the sensor (4208x3118). Instead, it sets itself to 4032x3024. This mismatch is forbidden and causes v4l2 to give us EPIPE when we try to enable the stream. Using the lower resolution gets us further--the last command (which attempts to save a single frame of video) gives output like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
VIDIOC_QUERYCAP: ok&lt;br /&gt;
		VIDIOC_REQBUFS returned 0 (Success)&lt;br /&gt;
		VIDIOC_QUERYBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QUERYBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QUERYBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QUERYBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_STREAMON returned 0 (Success)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But then it just hangs there indefinitely.&lt;br /&gt;
&lt;br /&gt;
Running under strace, we see the program stuck in an ioctl:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ioctl(3, VIDIOC_DQBUF, {type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://www.kernel.org/doc/html/v6.6/userspace-api/media/v4l/vidioc-qbuf.html VIDIOC_DQBUF] corresponds to dequeuing a buffer once it has been filled with an image by the v4l2 device. Apparently, the device never gives us back a captured frame.&lt;br /&gt;
&lt;br /&gt;
=== Now what? ===&lt;br /&gt;
&lt;br /&gt;
==== Does i2c work at all? ====&lt;br /&gt;
&lt;br /&gt;
The camera driver uses i2c; we can see the camera [https://github.com/megous/linux/blob/c5af9f4f874a66b65c73c450b79f6a86b1b46332/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts#L890-L914 in the .dts] to determine that it's on i2c bus 1, address 0x1a.&lt;br /&gt;
&lt;br /&gt;
The imx258 is controlled over i2c, and sends image data over MIPI. The first step is to see if the i2c control is working.&lt;br /&gt;
&lt;br /&gt;
Looking back at the driver, it seems we should see errors in dmesg if i2c communication fails. The driver checks the chip id in its probe function, which uses i2c, so we can conclude that i2c gets set up properly initially. Does it keep working?&lt;br /&gt;
&lt;br /&gt;
==== Does i2c keep working? (FTrace) ====&lt;br /&gt;
&lt;br /&gt;
We can see if other functions that use i2c produce errors--for example, when we run our &amp;lt;code&amp;gt;&amp;quot;v4l2-ctl&amp;quot; ... &amp;quot;--stream-mmap&amp;quot;&amp;lt;/code&amp;gt; command, we expect that &amp;lt;code&amp;gt;imx258_start_streaming&amp;lt;/code&amp;gt; will get called, and this function also writes a load of registers over i2c.&lt;br /&gt;
&lt;br /&gt;
Build and install a kernel with CONFIG_FTRACE (not hard, but outside the scope of this write-up) and enable function graph tracing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo su&lt;br /&gt;
# cd /sys/kernel/debug/tracing&lt;br /&gt;
# echo function_graph &amp;gt; current_tracer&lt;br /&gt;
# cat available_filter_functions | grep -E 'rkisp|imx258|v4l2' | awk '{print $1}' &amp;gt; set_graph_function&lt;br /&gt;
# echo 'vm_map_pages,__iommu_map,iommu_map_sg_atomic,rk_iommu_map,__alloc_pages,dma_alloc_attrs,dma_mmap_attrs,__vm_map_pages,vb2_mmap,clk_e,able,schedule_timeout,clk_disable,regmap_write,schedule,__i2c_tra,sfer,i2c_tra,sfer_buffer_flags,dma_free_attrs' | tr , '\n' &amp;gt; set_graph_notrace&lt;br /&gt;
# tee trace_pipe &amp;gt; ~/function-trace.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, in another terminal session, run the &amp;lt;code&amp;gt;&amp;quot;v4l2-ctl&amp;quot; ... &amp;quot;--stream-mmap&amp;quot;&amp;lt;/code&amp;gt; command again. We end up with a bunch (but hopefully not *too* much) of output in our first terminal and the &amp;lt;code&amp;gt;~/function-trace.log&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
A quick grep shows that &amp;lt;code&amp;gt;imx258_start_streaming&amp;lt;/code&amp;gt; is indeed called, so '''i2c is working properly'''.&lt;br /&gt;
&lt;br /&gt;
=== If i2c works, what doesn't? ===&lt;br /&gt;
&lt;br /&gt;
Our program that asks for a video frame is still hung! We ask the camera to start streaming frames, it presumably does, but the v4l2 stack never tells us a frame has finished. Doing some digging in the v4l2 stack (and the rkisp1 driver), we find out that rkisp1 is notified about frame status via interrupts. We figure this out by manually backtracking through the code to see when &amp;lt;code&amp;gt;vb2_buffer_done&amp;lt;/code&amp;gt;, the function in the vb2 API to call when a frame is finished, would be called. In the rkisp1 code, &amp;lt;code&amp;gt;vb2_buffer_done&amp;lt;/code&amp;gt; is only called from &amp;lt;code&amp;gt;rkisp1_handle_buffer&amp;lt;/code&amp;gt; which is only called from &amp;lt;code&amp;gt;rkisp1_capture_isr&amp;lt;/code&amp;gt;, which (for the PPP's rk3399 SoC) is only called from &amp;lt;code&amp;gt;rkisp1_isr&amp;lt;/code&amp;gt;, which is an interrupt handler. We know that it's an interrupt handler from the name (&amp;lt;code&amp;gt;_isr&amp;lt;/code&amp;gt;), but also because it gets passed (indirectly) to &amp;lt;code&amp;gt;devm_request_irq&amp;lt;/code&amp;gt; by way of being the &amp;lt;code&amp;gt;.isr&amp;lt;/code&amp;gt; field of &amp;lt;code&amp;gt;rk3399_isp_isrs&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Perhaps the hardware is never actually emitting the interrupt that signals a frame being finished. Indeed, grepping our FTrace log shows that &amp;lt;code&amp;gt;rkisp1_isr&amp;lt;/code&amp;gt; is never called. A quick look at &amp;lt;code&amp;gt;/proc/interrupts&amp;lt;/code&amp;gt; shows that '''the only interrupt associated with the isp has never triggered''' (0 count on every CPU):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# head -n1 /proc/interrupts; grep isp /proc/interrupts&lt;br /&gt;
           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       &lt;br /&gt;
 57:          0          0          0          0          0          0     GICv3  75 Level     ff914000.iommu, rkisp1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;rkisp1&amp;lt;/code&amp;gt; debugfs info ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;rkisp1&amp;lt;/code&amp;gt; driver keeps some [https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h?h=linux-6.6.y#n418 error/debug counters] in debugfs, which can be viewed at &amp;lt;code&amp;gt;/sys/kernel/debug/ff910000.isp0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sadly, the only one of these that comes up nonzero is &amp;lt;code&amp;gt;sp_stop_timeout&amp;lt;/code&amp;gt; (&amp;quot;upon stream stop, the capture waits 1 second for the isr to stop the stream. This param is incremented in case of timeout&amp;quot;). I observe it to increment once per time I terminate the &amp;lt;code&amp;gt;&amp;quot;v4l2-ctl&amp;quot; ... &amp;quot;--stream-mmap&amp;quot;&amp;lt;/code&amp;gt; command. This tells us what we already know: interrupts are not firing, but it also tells us that we aren't hitting any other errors that rkisp1 knows about.&lt;br /&gt;
&lt;br /&gt;
== Next steps ==&lt;br /&gt;
&lt;br /&gt;
Where do we go from here? I don't know--something may be wrong with the way the .dts specifies interrupts, some kind of firmware/GIC (the rk3399's interrupt controller) configuration issue, or something else. It would be good to try to determine:&lt;br /&gt;
&lt;br /&gt;
* Whether the MIPI lines actually show traffic, if someone has a logic analyzer and a dissected PPP.&lt;br /&gt;
* Whether the DMA of frames to memory actually happens, regardless of (lack of) emission of the interrupt that tells us when said DMA finishes a frame.&lt;br /&gt;
* Whether the regulator messages we see during boot are actually significant. I don't know enough about the Linux regulator framework to say whether these being not-found means power is not correctly supplied, or if Linux just isn't being properly informed of the power supply requirements for precise tracking/power-saving when the camera is off.&lt;br /&gt;
&lt;br /&gt;
== Megi saves the day ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[I] &amp;lt;megi&amp;gt; you might be interested in this https://megous.com/dl/tmp/0ae6ba03a17a3d53.png&lt;br /&gt;
[I] &amp;lt;megi&amp;gt; https://megous.com/git/linux/tag/?h=orange-pi-5.18-20220521-1759&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Turns out, the .dts had the wrong ISP connected to the sensor! This is fixed in [https://github.com/megous/linux/commit/9afd884f8b36121fb6097e77b6d35fe46ab48ad9 this commit], which is included in kernel version 5.18 or newer.&lt;br /&gt;
&lt;br /&gt;
With a sufficiently new kernel, the following should produce an image (&amp;lt;code&amp;gt;frame.jpg&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-r&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;imx258 1-001a&amp;quot;:0 [fmt:SGRBG10_1X10/1048x780]'&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'imx258 1-001a':0 -&amp;gt; 'rkisp1_isp':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'rkisp1_isp':2 -&amp;gt; 'rkisp1_resizer_selfpath':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;rkisp1_isp&amp;quot;:0 [fmt:SGRBG10_1X10/1048x780 crop:(0,0)/1048x780]'&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;rkisp1_isp&amp;quot;:2 [fmt:YUYV8_2X8/1048x780 crop:(0,0)/1048x780]'&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=1048,height=780,&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;rkisp1_resizer_selfpath&amp;quot;:0 [fmt:YUYV8_2X8/1048x780 crop:(0,0)/1048x780]'&lt;br /&gt;
&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=1048,height=780,pixelformat=422P&amp;quot;&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;--stream-mmap&amp;quot; &amp;quot;--stream-count&amp;quot; &amp;quot;1&amp;quot; &amp;quot;--stream-to=frame.raw&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ffmpeg -y -s:v 1048x780 -pix_fmt yuv422p -i frame.raw frame.jpg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, you can take a photo from the front camera with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-r&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; &amp;quot;'m00_f_ov8858 1-0036':0 [fmt:SBGGR10_1X10/1632x1224]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'m00_f_ov8858 1-0036':0 -&amp;gt; 'rkisp1_isp':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'rkisp1_isp':2 -&amp;gt; 'rkisp1_resizer_selfpath':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; &amp;quot;'rkisp1_isp':0 [fmt:SBGGR10_1X10/1632x1224 crop:(0,0)/1632x1224]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; &amp;quot;'rkisp1_isp':2 [fmt:YUYV8_2X8/1632x1224 crop:(0,0)/1632x1224]&amp;quot;&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=1632,height=1224,&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; &amp;quot;'rkisp1_resizer_selfpath':0 [fmt:YUYV8_2X8/1632x1224 crop:(0,0)/1632x1224]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; &amp;quot;'rkisp1_resizer_selfpath':1 [fmt:YUYV8_2X8/1632x1224]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=1632,height=1224,pixelformat=422P&amp;quot;&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;--stream-mmap&amp;quot; &amp;quot;--stream-count&amp;quot; &amp;quot;1&amp;quot; &amp;quot;--stream-to=frame.raw&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ffmpeg -y -s:v 1632x1224 -pix_fmt yuv422p -i frame.raw frame.jpg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some cases, the isp exposes 2 devices nodes, and the nodes have separate topologies with a different sensor attached to each. In this situation, you may need to reference the isp using the correct device node for the commands to work.&lt;br /&gt;
&lt;br /&gt;
=== Newer (6.x) kernels ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;rkisp1&amp;lt;/code&amp;gt; driver has changed significantly in more recent kernel versions, and the V4L2 node topology varies, often breaking the example commands shown here.  &lt;br /&gt;
&lt;br /&gt;
In particular, newly introduced CSI and resizer subdevices mean that a configuration similar to the following is required to make a 4208x3120 capture from the imx258 camera when running [https://codeberg.org/megi/linux/archive/orange-pi-6.9-20240512-2332.tar.gz Megi's 6.9 kernel]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
media-ctl -d 1 -r&lt;br /&gt;
media-ctl -d 1 -l &amp;quot;'imx258 1-001a':0 -&amp;gt; 'rkisp1_csi':0 [1]&amp;quot;&lt;br /&gt;
media-ctl -d 1 -l &amp;quot;'rkisp1_csi':1 -&amp;gt; 'rkisp1_isp':0 [1]&amp;quot;&lt;br /&gt;
media-ctl -d 1 -l &amp;quot;'rkisp1_isp':2 -&amp;gt; 'rkisp1_resizer_selfpath':0 [0]&amp;quot;&lt;br /&gt;
media-ctl -d 1 -l &amp;quot;'rkisp1_isp':2 -&amp;gt; 'rkisp1_resizer_mainpath':0 [1]&amp;quot;&lt;br /&gt;
media-ctl -d 1 --set-v4l2 '&amp;quot;imx258 1-001a&amp;quot;:0 [fmt:SRGGB10_1X10/4208x3120]'&lt;br /&gt;
media-ctl -d 1 --set-v4l2 '&amp;quot;rkisp1_isp&amp;quot;:0 [fmt:SRGGB10_1X10/4208x3120 crop: (0,0)/4208x3120]'&lt;br /&gt;
media-ctl -d 1 --set-v4l2 '&amp;quot;rkisp1_isp&amp;quot;:2 [fmt:YUYV8_2X8/4208x3120 crop: (0,0)/4208x3120]'&lt;br /&gt;
media-ctl -d 1 --set-v4l2 '&amp;quot;rkisp1_resizer_mainpath&amp;quot;:0 [fmt:YUYV8_2X8/4208x3120 crop: (0,0)/4208x3120]'&lt;br /&gt;
media-ctl -d 1 --set-v4l2 '&amp;quot;rkisp1_resizer_mainpath&amp;quot;:1 [fmt:YUYV8_2X8/4208x3120]'&lt;br /&gt;
v4l2-ctl -d 5 -v width=4208,height=3120,pixelformat=422P&lt;br /&gt;
v4l2-ctl -d 5 --stream-mmap --stream-count 1 --stream-to=/tmp/frame.raw&lt;br /&gt;
ffmpeg -y -s:v 4208x3120 -pix_fmt yuv422p -i /tmp/frame.raw /tmp/frame.jpeg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What's left? ===&lt;br /&gt;
&lt;br /&gt;
* libcamera and megapixels still don't work. Megapixels appears to need support for debayering YUYV, and both appear to be configuring the rkisp1 pipeline wrong.&lt;br /&gt;
* The images captured are pretty green and seem to have two pixels of garbage at their bottom edge. rkisp1 supports auto white-balance (AWB) using the params/stats pads, and libcamera has some smarts that may hook these up properly. In the meantime, raw images can be postprocessed to improve white balance and exposure.&lt;br /&gt;
&lt;br /&gt;
== Useful links == &lt;br /&gt;
&lt;br /&gt;
* [https://files.pine64.org/doc/PinePhonePro/PinephonePro-Schematic-V1.0-20211127.pdf Pinephone Pro Schematic]&lt;br /&gt;
* [https://blog.krybot.com/a?ID=01650-cea27a80-a1ab-4da1-9cb5-3945be91e3e1 Background on the GIC]&lt;br /&gt;
* [https://elinux.org/images/9/94/ISP-presentation.pdf Background on the rkisp1 ISP]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PinePhone Pro]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Pro/IMX258_Camera_Debugging&amp;diff=21637</id>
		<title>PinePhone Pro/IMX258 Camera Debugging</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Pro/IMX258_Camera_Debugging&amp;diff=21637"/>
		<updated>2024-11-10T14:42:45Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Update various links to (current) latest upstream LTS kernel (6.6)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Under construction}}&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
The Pinephone Pro's rear camera is a Sony IMX258. The camera driver is present upstream, and at least [https://gitlab.manjaro.org/manjaro-arm/packages/core/linux-pinephonepro Manjaro's kernel] (downstream of Megi's) enables the driver. The camera does not seem to work; this page catalogs work on figuring out why.&lt;br /&gt;
&lt;br /&gt;
== Initial status ==&lt;br /&gt;
&lt;br /&gt;
What do we see in dmesg?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
imx258 1-001a: supply vana not found, using dummy regulator&lt;br /&gt;
imx258 1-001a: supply vdig not found, using dummy regulator&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This tells us the kernel loads the driver, which is something.&lt;br /&gt;
&lt;br /&gt;
Are these errors bad/fatal? Inspecting the [https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/media/i2c/imx258.c?h=linux-6.6.y source] shows us that these supplies are defined in the &amp;lt;code&amp;gt;imx258_supply_names&amp;lt;/code&amp;gt; array, and &amp;lt;code&amp;gt;imx258_probe&amp;lt;/code&amp;gt; calls &amp;lt;code&amp;gt;devm_regulator_bulk_get&amp;lt;/code&amp;gt; to set them up.&lt;br /&gt;
&amp;lt;code&amp;gt;imx258_probe&amp;lt;/code&amp;gt; checks the return code from &amp;lt;code&amp;gt;devm_regulator_bulk_get&amp;lt;/code&amp;gt;, emitting a fatal &amp;quot;Failed to get supplies&amp;quot; message if the return code is negative (indicating failure). Since we don't see this message (or any others from the driver), it looks like it loads successfully!&lt;br /&gt;
&lt;br /&gt;
=== How can we test the camera? ===&lt;br /&gt;
&lt;br /&gt;
==== Megapixels ====&lt;br /&gt;
&lt;br /&gt;
[https://gitlab.com/postmarketOS/megapixels Megapixels] requires a per-device file to configure cameras. This one isn't complete (most of its numbers are complete nonsense), but it should let us see what happens when Megapixels tries to access the camera:&lt;br /&gt;
&amp;lt;code&amp;gt;pine64,pinephone-pro.ini&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[device]&lt;br /&gt;
make=PINE64&lt;br /&gt;
model=PinePhone Pro&lt;br /&gt;
&lt;br /&gt;
[rear]&lt;br /&gt;
driver=imx258&lt;br /&gt;
media-driver=rkisp1&lt;br /&gt;
capture-width=4208&lt;br /&gt;
capture-height=3118&lt;br /&gt;
capture-rate=60&lt;br /&gt;
capture-fmt=GRBG10P&lt;br /&gt;
preview-width=1280&lt;br /&gt;
preview-height=960&lt;br /&gt;
preview-rate=60&lt;br /&gt;
#preview-fmt=BGGR8&lt;br /&gt;
capture-fmt=GRBG10P&lt;br /&gt;
rotate=90&lt;br /&gt;
mirrored=true&lt;br /&gt;
focallength=2.6&lt;br /&gt;
cropfactor=12.7&lt;br /&gt;
fnumber=2.8&lt;br /&gt;
flash-display=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This segfaulted Megapixels for me. After patching some trivial segfaults, I get fatal GTK4 issues and other tangential problems. Let's try something else.&lt;br /&gt;
&lt;br /&gt;
==== Manually setting up a camera pipeline ====&lt;br /&gt;
&lt;br /&gt;
We can roughly follow [https://www.kernel.org/doc/html/latest/admin-guide/media/rkisp1.html this guide]. Doing so gives us the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-r&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'imx258 1-001a':0 -&amp;gt; 'rkisp1_isp':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'rkisp1_isp':2 -&amp;gt; 'rkisp1_resizer_selfpath':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;rkisp1_isp&amp;quot;:0 [fmt:SGRBG10_1X10/1048x780]'&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=1048,height=780,&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;rkisp1_resizer_selfpath&amp;quot;:0 [fmt:SGRBG10_1X10/1048x780 crop:(0,0)/1048x780]'&lt;br /&gt;
&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=800,height=600,pixelformat=422P&amp;quot;&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;--stream-mmap&amp;quot; &amp;quot;--stream-count&amp;quot; &amp;quot;1&amp;quot; &amp;quot;--verbose&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Careful readers will note that this is setting the camera up with a low resolution compared to what the sensor can do. For some reason I can't get the rkisp1 node to configure its sink pad with the maximum resolution of the sensor (4208x3118). Instead, it sets itself to 4032x3024. This mismatch is forbidden and causes v4l2 to give us EPIPE when we try to enable the stream. Using the lower resolution gets us further--the last command (which attempts to save a single frame of video) gives output like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
VIDIOC_QUERYCAP: ok&lt;br /&gt;
		VIDIOC_REQBUFS returned 0 (Success)&lt;br /&gt;
		VIDIOC_QUERYBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QUERYBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QUERYBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QUERYBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_QBUF returned 0 (Success)&lt;br /&gt;
		VIDIOC_STREAMON returned 0 (Success)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But then it just hangs there indefinitely.&lt;br /&gt;
&lt;br /&gt;
Running under strace, we see the program stuck in an ioctl:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ioctl(3, VIDIOC_DQBUF, {type=V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[https://www.kernel.org/doc/html/v6.6/userspace-api/media/v4l/vidioc-qbuf.html VIDIOC_DQBUF] corresponds to dequeuing a buffer once it has been filled with an image by the v4l2 device. Apparently, the device never gives us back a captured frame.&lt;br /&gt;
&lt;br /&gt;
=== Now what? ===&lt;br /&gt;
&lt;br /&gt;
==== Does i2c work at all? ====&lt;br /&gt;
&lt;br /&gt;
The camera driver uses i2c; we can see the camera [https://github.com/megous/linux/blob/c5af9f4f874a66b65c73c450b79f6a86b1b46332/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts#L890-L914 in the .dts] to determine that it's on i2c bus 1, address 0x1a.&lt;br /&gt;
&lt;br /&gt;
The imx258 is controlled over i2c, and sends image data over MIPI. The first step is to see if the i2c control is working.&lt;br /&gt;
&lt;br /&gt;
Looking back at the driver, it seems we should see errors in dmesg if i2c communication fails. The driver checks the chip id in its probe function, which uses i2c, so we can conclude that i2c gets set up properly initially. Does it keep working?&lt;br /&gt;
&lt;br /&gt;
==== Does i2c keep working? (FTrace) ====&lt;br /&gt;
&lt;br /&gt;
We can see if other functions that use i2c produce errors--for example, when we run our &amp;lt;code&amp;gt;&amp;quot;v4l2-ctl&amp;quot; ... &amp;quot;--stream-mmap&amp;quot;&amp;lt;/code&amp;gt; command, we expect that &amp;lt;code&amp;gt;imx258_start_streaming&amp;lt;/code&amp;gt; will get called, and this function also writes a load of registers over i2c.&lt;br /&gt;
&lt;br /&gt;
Build and install a kernel with CONFIG_FTRACE (not hard, but outside the scope of this write-up) and enable function graph tracing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo su&lt;br /&gt;
# cd /sys/kernel/debug/tracing&lt;br /&gt;
# echo function_graph &amp;gt; current_tracer&lt;br /&gt;
# cat available_filter_functions | grep -E 'rkisp|imx258|v4l2' | awk '{print $1}' &amp;gt; set_graph_function&lt;br /&gt;
# echo 'vm_map_pages,__iommu_map,iommu_map_sg_atomic,rk_iommu_map,__alloc_pages,dma_alloc_attrs,dma_mmap_attrs,__vm_map_pages,vb2_mmap,clk_e,able,schedule_timeout,clk_disable,regmap_write,schedule,__i2c_tra,sfer,i2c_tra,sfer_buffer_flags,dma_free_attrs' | tr , '\n' &amp;gt; set_graph_notrace&lt;br /&gt;
# tee trace_pipe &amp;gt; ~/function-trace.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, in another terminal session, run the &amp;lt;code&amp;gt;&amp;quot;v4l2-ctl&amp;quot; ... &amp;quot;--stream-mmap&amp;quot;&amp;lt;/code&amp;gt; command again. We end up with a bunch (but hopefully not *too* much) of output in our first terminal and the &amp;lt;code&amp;gt;~/function-trace.log&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
A quick grep shows that &amp;lt;code&amp;gt;imx258_start_streaming&amp;lt;/code&amp;gt; is indeed called, so '''i2c is working properly'''.&lt;br /&gt;
&lt;br /&gt;
=== If i2c works, what doesn't? ===&lt;br /&gt;
&lt;br /&gt;
Our program that asks for a video frame is still hung! We ask the camera to start streaming frames, it presumably does, but the v4l2 stack never tells us a frame has finished. Doing some digging in the v4l2 stack (and the rkisp1 driver), we find out that rkisp1 is notified about frame status via interrupts. We figure this out by manually backtracking through the code to see when &amp;lt;code&amp;gt;vb2_buffer_done&amp;lt;/code&amp;gt;, the function in the vb2 API to call when a frame is finished, would be called. In the rkisp1 code, &amp;lt;code&amp;gt;vb2_buffer_done&amp;lt;/code&amp;gt; is only called from &amp;lt;code&amp;gt;rkisp1_handle_buffer&amp;lt;/code&amp;gt; which is only called from &amp;lt;code&amp;gt;rkisp1_capture_isr&amp;lt;/code&amp;gt;, which (for the PPP's rk3399 SoC) is only called from &amp;lt;code&amp;gt;rkisp1_isr&amp;lt;/code&amp;gt;, which is an interrupt handler. We know that it's an interrupt handler from the name (&amp;lt;code&amp;gt;_isr&amp;lt;/code&amp;gt;), but also because it gets passed (indirectly) to &amp;lt;code&amp;gt;devm_request_irq&amp;lt;/code&amp;gt; by way of being the &amp;lt;code&amp;gt;.isr&amp;lt;/code&amp;gt; field of &amp;lt;code&amp;gt;rk3399_isp_isrs&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Perhaps the hardware is never actually emitting the interrupt that signals a frame being finished. Indeed, grepping our FTrace log shows that &amp;lt;code&amp;gt;rkisp1_isr&amp;lt;/code&amp;gt; is never called. A quick look at &amp;lt;code&amp;gt;/proc/interrupts&amp;lt;/code&amp;gt; shows that '''the only interrupt associated with the isp has never triggered''' (0 count on every CPU):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# head -n1 /proc/interrupts; grep isp /proc/interrupts&lt;br /&gt;
           CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       &lt;br /&gt;
 57:          0          0          0          0          0          0     GICv3  75 Level     ff914000.iommu, rkisp1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;rkisp1&amp;lt;/code&amp;gt; debugfs info ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;rkisp1&amp;lt;/code&amp;gt; driver keeps some [https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/media/platform/rockchip/rkisp1/rkisp1-common.h?h=linux-6.6.y#n418 error/debug counters] in debugfs, which can be viewed at &amp;lt;code&amp;gt;/sys/kernel/debug/ff910000.isp0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Sadly, the only one of these that comes up nonzero is &amp;lt;code&amp;gt;sp_stop_timeout&amp;lt;/code&amp;gt; (&amp;quot;upon stream stop, the capture waits 1 second for the isr to stop the stream. This param is incremented in case of timeout&amp;quot;). I observe it to increment once per time I terminate the &amp;lt;code&amp;gt;&amp;quot;v4l2-ctl&amp;quot; ... &amp;quot;--stream-mmap&amp;quot;&amp;lt;/code&amp;gt; command. This tells us what we already know: interrupts are not firing, but it also tells us that we aren't hitting any other errors that rkisp1 knows about.&lt;br /&gt;
&lt;br /&gt;
== Next steps ==&lt;br /&gt;
&lt;br /&gt;
Where do we go from here? I don't know--something may be wrong with the way the .dts specifies interrupts, some kind of firmware/GIC (the rk3399's interrupt controller) configuration issue, or something else. It would be good to try to determine:&lt;br /&gt;
&lt;br /&gt;
* Whether the MIPI lines actually show traffic, if someone has a logic analyzer and a dissected PPP.&lt;br /&gt;
* Whether the DMA of frames to memory actually happens, regardless of (lack of) emission of the interrupt that tells us when said DMA finishes a frame.&lt;br /&gt;
* Whether the regulator messages we see during boot are actually significant. I don't know enough about the Linux regulator framework to say whether these being not-found means power is not correctly supplied, or if Linux just isn't being properly informed of the power supply requirements for precise tracking/power-saving when the camera is off.&lt;br /&gt;
&lt;br /&gt;
== Megi saves the day ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[I] &amp;lt;megi&amp;gt; you might be interested in this https://megous.com/dl/tmp/0ae6ba03a17a3d53.png&lt;br /&gt;
[I] &amp;lt;megi&amp;gt; https://megous.com/git/linux/tag/?h=orange-pi-5.18-20220521-1759&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Turns out, the .dts had the wrong ISP connected to the sensor! This is fixed in [https://github.com/megous/linux/commit/9afd884f8b36121fb6097e77b6d35fe46ab48ad9 this commit], which is included in kernel version 5.18 or newer.&lt;br /&gt;
&lt;br /&gt;
With a sufficiently new kernel, the following should produce an image (&amp;lt;code&amp;gt;frame.jpg&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-r&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;imx258 1-001a&amp;quot;:0 [fmt:SGRBG10_1X10/1048x780]'&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'imx258 1-001a':0 -&amp;gt; 'rkisp1_isp':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'rkisp1_isp':2 -&amp;gt; 'rkisp1_resizer_selfpath':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;rkisp1_isp&amp;quot;:0 [fmt:SGRBG10_1X10/1048x780 crop:(0,0)/1048x780]'&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;rkisp1_isp&amp;quot;:2 [fmt:YUYV8_2X8/1048x780 crop:(0,0)/1048x780]'&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=1048,height=780,&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; '&amp;quot;rkisp1_resizer_selfpath&amp;quot;:0 [fmt:YUYV8_2X8/1048x780 crop:(0,0)/1048x780]'&lt;br /&gt;
&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=1048,height=780,pixelformat=422P&amp;quot;&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;--stream-mmap&amp;quot; &amp;quot;--stream-count&amp;quot; &amp;quot;1&amp;quot; &amp;quot;--stream-to=frame.raw&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ffmpeg -y -s:v 1048x780 -pix_fmt yuv422p -i frame.raw frame.jpg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, you can take a photo from the front camera with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-r&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; &amp;quot;'m00_f_ov8858 1-0036':0 [fmt:SBGGR10_1X10/1632x1224]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'m00_f_ov8858 1-0036':0 -&amp;gt; 'rkisp1_isp':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-l&amp;quot; &amp;quot;'rkisp1_isp':2 -&amp;gt; 'rkisp1_resizer_selfpath':0 [1]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; &amp;quot;'rkisp1_isp':0 [fmt:SBGGR10_1X10/1632x1224 crop:(0,0)/1632x1224]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; &amp;quot;'rkisp1_isp':2 [fmt:YUYV8_2X8/1632x1224 crop:(0,0)/1632x1224]&amp;quot;&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=1632,height=1224,&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; &amp;quot;'rkisp1_resizer_selfpath':0 [fmt:YUYV8_2X8/1632x1224 crop:(0,0)/1632x1224]&amp;quot;&lt;br /&gt;
&amp;quot;media-ctl&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;--set-v4l2&amp;quot; &amp;quot;'rkisp1_resizer_selfpath':1 [fmt:YUYV8_2X8/1632x1224]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;-v&amp;quot; &amp;quot;width=1632,height=1224,pixelformat=422P&amp;quot;&lt;br /&gt;
&amp;quot;v4l2-ctl&amp;quot; &amp;quot;-z&amp;quot; &amp;quot;platform:rkisp1&amp;quot; &amp;quot;-d&amp;quot; &amp;quot;rkisp1_selfpath&amp;quot; &amp;quot;--stream-mmap&amp;quot; &amp;quot;--stream-count&amp;quot; &amp;quot;1&amp;quot; &amp;quot;--stream-to=frame.raw&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ffmpeg -y -s:v 1632x1224 -pix_fmt yuv422p -i frame.raw frame.jpg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some cases, the isp exposes 2 devices nodes, and the nodes have separate topologies with a different sensor attached to each. In this situation, you may need to reference the isp using the correct device node for the commands to work.&lt;br /&gt;
&lt;br /&gt;
=== Newer (6.x) kernels ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;rkisp1&amp;lt;/code&amp;gt; driver has changed significantly in more recent kernel versions, and the V4L2 node topology varies, often breaking the example commands shown here.  &lt;br /&gt;
&lt;br /&gt;
In particular, newly introduced CSI and resizer subdevices mean that a configuration similar to the following is required to make a 4208x3120 capture from the imx258 camera when running [https://codeberg.org/megi/linux/archive/orange-pi-6.9-20240512-2332.tar.gz Megi's 6.9 kernel]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
media-ctl -d 1 -r&lt;br /&gt;
media-ctl -d 1 -l &amp;quot;'imx258 1-001a':0 -&amp;gt; 'rkisp1_csi':0 [1]&amp;quot;&lt;br /&gt;
media-ctl -d 1 -l &amp;quot;'rkisp1_csi':1 -&amp;gt; 'rkisp1_isp':0 [1]&amp;quot;&lt;br /&gt;
media-ctl -d 1 -l &amp;quot;'rkisp1_isp':2 -&amp;gt; 'rkisp1_resizer_selfpath':0 [0]&amp;quot;&lt;br /&gt;
media-ctl -d 1 -l &amp;quot;'rkisp1_isp':2 -&amp;gt; 'rkisp1_resizer_mainpath':0 [1]&amp;quot;&lt;br /&gt;
media-ctl -d 1 --set-v4l2 '&amp;quot;imx258 1-001a&amp;quot;:0 [fmt:SRGGB10_1X10/4208x3120]'&lt;br /&gt;
media-ctl -d 1 --set-v4l2 '&amp;quot;rkisp1_isp&amp;quot;:0 [fmt:SRGGB10_1X10/4208x3120 crop: (0,0)/4208x3120]'&lt;br /&gt;
media-ctl -d 1 --set-v4l2 '&amp;quot;rkisp1_isp&amp;quot;:2 [fmt:YUYV8_2X8/4208x3120 crop: (0,0)/4208x3120]'&lt;br /&gt;
media-ctl -d 1 --set-v4l2 '&amp;quot;rkisp1_resizer_mainpath&amp;quot;:0 [fmt:YUYV8_2X8/4208x3120 crop: (0,0)/4208x3120]'&lt;br /&gt;
media-ctl -d 1 --set-v4l2 '&amp;quot;rkisp1_resizer_mainpath&amp;quot;:1 [fmt:YUYV8_2X8/4208x3120]'&lt;br /&gt;
v4l2-ctl -d 5 -v width=4208,height=3120,pixelformat=422P&lt;br /&gt;
v4l2-ctl -d 5 --stream-mmap --stream-count 1 --stream-to=/tmp/frame.raw&lt;br /&gt;
ffmpeg -y -s:v 4208x3120 -pix_fmt yuv422p -i /tmp/frame.raw /tmp/frame.jpeg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== What's left? ===&lt;br /&gt;
&lt;br /&gt;
* libcamera and megapixels still don't work. Megapixels appears to need support for debayering YUYV, and both appear to be configuring the rkisp1 pipeline wrong.&lt;br /&gt;
* The images captured are pretty green and seem to have two pixels of garbage at their bottom edge. rkisp1 supports auto white-balance (AWB) using the params/stats pads, and libcamera has some smarts that may hook these up properly. In the meantime, raw images can be postprocessed to improve white balance and exposure.&lt;br /&gt;
&lt;br /&gt;
== Useful links == &lt;br /&gt;
&lt;br /&gt;
* [https://files.pine64.org/doc/PinePhonePro/PinephonePro-Schematic-V1.0-20211127.pdf Pinephone Pro Schematic]&lt;br /&gt;
* [https://blog.krybot.com/a?ID=01650-cea27a80-a1ab-4da1-9cb5-3945be91e3e1 Background on the GIC]&lt;br /&gt;
* [https://elinux.org/images/9/94/ISP-presentation.pdf Background on the rkisp1 ISP]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PinePhone Pro]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=ROCKPro64_Software_Releases&amp;diff=21155</id>
		<title>ROCKPro64 Software Releases</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=ROCKPro64_Software_Releases&amp;diff=21155"/>
		<updated>2023-11-28T12:45:30Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Debian: Recommend Bookworm as that's the current Stable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of all available releases and tools for the [[ROCKPro64]] in alphabetical order.&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
=== AOSC ===&lt;br /&gt;
[[File:aosc.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''AOSC OS''' is a general purpose Linux distribution that strives to simplify user experience and improve free and open source software for day-to-day productivity. Originally AnthonOS (an OpenSUSE derivative built with SUSE Studio), then remade as a Debian derivative with customized KDE 4 UI and CJK support. To learn more about AOSC, please visit the official [https://aosc.io/ AOSC website]&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* https://aosc.io/downloads/ (supports the microSD card and eMMC, 8GB or more)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Default user&lt;br /&gt;
| &amp;lt;code&amp;gt;aosc/anthon&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Armbian ===&lt;br /&gt;
[[File:armbian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Armbian''' is a Linux distribution designed for ARM boards. They are usually Debian or Ubuntu flavored. To find out more about Armbian and available options please visit their [https://www.armbian.com/rockpro64/ site]. If you are booting from a Micro SD card, then both Linux kernel versions will work. If you are trying to boot from an eMMC module then the 4.4.y will work, but the newer 5.10.y will not.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* https://dl.armbian.com/rockpro64/archive/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Batocera Linux ===&lt;br /&gt;
[[File:batocera.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Batocera Linux''' is an open-source and completely free retro-gaming distribution that can be copied to a USB stick or an SD card with the aim of turning any computer/nano computer into a gaming console during a game or permanently. Visit the project's website here (https://batocera.org/). You can follow the ongoing discussion about batocera.linux on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=7084)&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* https://batocera.org/download&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Debian ===&lt;br /&gt;
[[File:Debian-logo.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Debian''' is an operating system and a distribution of free software. See the forum thread [https://forum.pine64.org/showthread.php?tid=9744 here].&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/ Debian 11 Bullseye]&lt;br /&gt;
* [https://deb.debian.org/debian/dists/bookworm/main/installer-arm64/current/images/netboot/SD-card-images/ Debian 12 Bookworm] (recommended)&lt;br /&gt;
* [https://d-i.debian.org/daily-images/arm64/ Daily netboot images]&lt;br /&gt;
&lt;br /&gt;
Instructions:&lt;br /&gt;
* Download: &amp;lt;code&amp;gt;firmware.rockpro64-rk3399.img.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
* Download: &amp;lt;code&amp;gt;partition.img.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
* Create the disk image:&lt;br /&gt;
** For Linux: &amp;lt;code&amp;gt;zcat firmware.rockpro64-rk3399.img.gz partition.img.gz &amp;gt; complete_image.img&amp;lt;/code&amp;gt;&lt;br /&gt;
** For Mac: &amp;lt;code&amp;gt;gzcat firmware.rockpro64-rk3399.img.gz partition.img.gz &amp;gt; complete_image.img&amp;lt;/code&amp;gt;&lt;br /&gt;
* Write the image to your boot device:&lt;br /&gt;
** For Linux: &amp;lt;code&amp;gt;dd if=complete_image.img of=your_chosen_boot_device bs=4M&amp;lt;/code&amp;gt;&lt;br /&gt;
** For Mac: see [[Getting started]]&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* An Ethernet connection is required for the above installer&lt;br /&gt;
* Remember to leave some space before your first partition for u-boot! You can do this by creating a 32M size unused partition at the start of the device.&lt;br /&gt;
* See the [[ROCKPro64#No_Video_or_GPU_Acceleration_on_Debian|troubleshooting section]] if you encounter issues with GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== DietPi ===&lt;br /&gt;
[[File:dietpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''DietPi''' is a lightweight, yet easy to setup and feature-rich Linux distribution, based on Debian. To find out more about DietPi, please visit the [https://dietpi.com/docs/ official documentation]. Discuss the ROCKPro64 build on the [https://forum.pine64.org/showthread.php?tid=12532 PINE64 forum thread].&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://dietpi.com/downloads/images/DietPi_ROCKPro64-ARMv8-Bookworm.img.xz Direct download from dietpi.com]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Root user&lt;br /&gt;
| &amp;lt;code&amp;gt;root/dietpie&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== LibreELEC ===&lt;br /&gt;
[[File:libreelec.jpg|right|100px]]&lt;br /&gt;
'''LibreELEC''' is a lightweight 'Just enough OS' Linux distribution purpose-built for Kodi on current and popular mediacentre hardware.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://libreelec.tv/downloads/rockchip/ Official LibreELEC build image] (look for PINE64 RockPro64-LibreELEC-RK3399.arm-x.x.x-rockpro64.img.gz, supports microSD card and the eMMC module of 8GB or more.)&lt;br /&gt;
&lt;br /&gt;
{{Info|Unzip and flash the image to a microSD card or eMMC module, for example using ''dd''.}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Manjaro ARM ===&lt;br /&gt;
[[File:Manjaro-logo.svg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Manjaro''' is a user-friendly Linux distribution based on the independently developed Arch operating system. To learn more about Manjaro please visit [https://forum.manjaro.org/c/arm/releases/102 Manjaro forum].&lt;br /&gt;
&lt;br /&gt;
Download: &lt;br /&gt;
* [https://github.com/manjaro-arm/rockpro64-images/releases from Github]&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* Decompress the image (&amp;lt;tt&amp;gt;unxz&amp;lt;/tt&amp;gt;) before flashing, or decompress on the fly while flashing (&amp;lt;tt&amp;gt;xzcat&amp;lt;/tt&amp;gt; in a root shell, Etcher, ...)&lt;br /&gt;
* A display and keyboard will be required for first boot.&lt;br /&gt;
* Initial setup includes: keyboard layout, locale, username, user password, and root password.&lt;br /&gt;
* The installer will expand the root partition to use the remaining space on the storage device you've flashed.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Nems Linux ===&lt;br /&gt;
[[File:nems.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''NEMS''' stands for ''Nagios Enterprise Monitoring Server'' and it is a modern pre-configured, customized and ready-to-deploy Nagios Core image designed to run on low-cost micro computers. To find out more about NEMS on the PINE64 and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7306 PINE64 forum thread].&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://nemslinux.com/download/nagios-for-pine64.php Download page] with torrent seed or direct download.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Default user&lt;br /&gt;
| &amp;lt;code&amp;gt;nemsadmin/nemsadmin&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== NixOS ===&lt;br /&gt;
[[File:NixOS.webp|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''NixOS''' is a Linux distribution built on top of the Nix package manager using declarative configuration to allow reliable system upgrades. More information can be found on the [https://nixos.wiki/wiki/NixOS_on_ARM/PINE64_ROCKPro64 NixOS wiki].&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://github.com/AshyIsMe/nixos-installer-rockpro64 nixos-installer-rockpro64]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== OpenMediaVault ===&lt;br /&gt;
[[File:omv.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''OpenMediaVault''' is the next generation network attached storage (NAS) solution, [https://www.openmediavault.org/ click this link to OMV main page] to learn more. Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6308 here]&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
{{Outdated release}}&lt;br /&gt;
* Stretch 32bit (armhf): [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rockpro64-0.8.3-1141-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
* Stretch 64bit (aarch64): [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rockpro64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* You need to enable root login in OMV WebGUI&lt;br /&gt;
* [http://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! TTY and SSH, except OMV&lt;br /&gt;
| &amp;lt;code&amp;gt;rock64/rock64&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! WebGUI Login&lt;br /&gt;
| &amp;lt;code&amp;gt;admin/openmediavault&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! TTY and SSH&lt;br /&gt;
| &amp;lt;code&amp;gt;root/openmediavault&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== OpenWrt ===&lt;br /&gt;
[[File:Openwrt logo square.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''OpenWrt''' ​is a highly extensible ​GNU/​Linux ​distribution for embedded devices ​(typically wireless routers). Unlike many other distributions for these routers, OpenWrt ​is built from the ground up to be a full-featured, easily modifiable operating system for your router. In practice, this means that you can have all the features you need with none of the bloat, powered by a Linux kernel ​that's more recent than most other distributions.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* https://openwrt.org/toh/pine64/rockpro64_v2.1&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== postmarketOS ===&lt;br /&gt;
[[File:PostmarketOS_logo.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
postmarketOS extends [https://www.alpinelinux.org/ Alpine Linux] to run on smartphones and other devices.&lt;br /&gt;
At the time of writing, the only user interface provided through prebuilt images for the ROCKPro64 is [https://plasma-bigscreen.org/ Plasma Bigscreen].&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* https://postmarketos.org/download/&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Default user&lt;br /&gt;
| &amp;lt;code&amp;gt;user/147147&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== R-Cade ===&lt;br /&gt;
[[File:RCadeLogo.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
Retro Center's '''R-Cade''', the 4K Media Center Arcade. [https://www.retro-center.com/about-r-cade/ RCade] Features 100+ retro-gaming systems, a lightweight web browser, and full 4K UHD media playback.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://github.com/retro-center/rcade_releases/releases Direct download from Retro Center's GitHub] (USB, microSD and eMMC boot)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Recalbox ===&lt;br /&gt;
[[File:RB.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Recalbox''' allows you to re-play a variety of videogame consoles and platforms in your living room, with ease! Visit the project's website here (https://www.recalbox.com/). You can follow the ongoing discussion about Recalbox on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=7194)&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
{{Template:Outdated release}}&lt;br /&gt;
* [https://github.com/mrfixit2001/recalbox_rockpro64/releases download] release from mrfixit2001 github.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Retro Arena ===&lt;br /&gt;
[[File:retroarena.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Retro Arena''' community build for microSD and eMMC boot. This is a BETA and therefore is not update-able nor supported, however bugs or issues are appreciated to be identified and shared via the issues tab on our GitHub so that we can address them in the future. The Roshambo Case support is baked in with one major caveat due to kernel limitation: You can power the unit off by the POWER switch and the RESET button works 100% however to power the unit on you will need to manually plug/unplug the power cord. This limitation will not be present in future releases. You can follow the ongoing discussion about Retro Arena on the [https://forum.pine64.org/showthread.php?tid=7555 forum]&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
{{Outdated release}}&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/odroidretroarena/TheRA-RP64-BETA-0.8-FINAL.img.gz Direct download from pine64.org]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== SkiffOS ===&lt;br /&gt;
[[File:SkiffOS-Icon-1.png|right|100px]]&lt;br /&gt;
Minimal cross-compiled OS optimized for hosting distributions in Docker containers. Provides the reliability of firmware with the ease-of-use of package managers. Uses the [http://buildroot.org Buildroot] cross-compilation tool for support for all Pine64 boards.&lt;br /&gt;
&lt;br /&gt;
Use configuration packages to configure the distribution:&lt;br /&gt;
* core/gentoo: Gentoo optimized for Rockpro64&lt;br /&gt;
* core/nixos: NixOS arm64&lt;br /&gt;
&lt;br /&gt;
You can also configure the skiff core yaml file to configure multiple distributions to run in parallel.&lt;br /&gt;
&lt;br /&gt;
The boot-up OS can be upgraded independently from the containers.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* The repository and instructions can be found [https://github.com/skiffos/SkiffOS/tree/master/configs/pine64 here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Slackware ===&lt;br /&gt;
[[File:slackware.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Slackware''' is the world's oldest actively developed Linux distribution, providing a modern user land (applications) and Linux Kernel, within a more classic Unix Operating System environment.&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [https://docs.slackware.com/slackwarearm:inst Installation instructions].&lt;br /&gt;
* [https://www.youtube.com/watch?v=uXAL9jz-yaA&amp;amp;list=PL1XOSJnvang3VLmqke2QbRitKtOD6Rm3t Installation video guide]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== slarm64 ===&lt;br /&gt;
&lt;br /&gt;
'''slarm64''' is an unofficial aarch64 / riscv64 Slackware Linux port. You can follow the ongoing discussion about slarm64 on the RockPro64 on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=6823) or this forum thread for more general slarm64 information: https://www.linuxquestions.org/questions/slackware-arm-108/slarm64-aarch64-unofficial-slackware-4175613287/.&lt;br /&gt;
&lt;br /&gt;
Downloads:&lt;br /&gt;
* [http://dl.fail.pp.ua/slackware/images/rockpro64/ download] (supports microSD card, look for slarm64-current-aarch64-xfce-rockpro64-x.xx.x-build-xxxxxxxx.img.zst)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Root user&lt;br /&gt;
| &amp;lt;code&amp;gt;root/password&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Flashing the distribution to the eMMC:&lt;br /&gt;
* Flash the image to micro SD, power up the board with micro SD and login&lt;br /&gt;
* Copy the image file to micro SD by using SFTP. The image file must have the ''.img'' file extension.&lt;br /&gt;
* After finish copy the file, power off the board and add eMMC module to the board&lt;br /&gt;
* Boot the board, run below command for flashing to eMMC module&lt;br /&gt;
* Run &amp;lt;code&amp;gt;dd if=[image file] of=/dev/mmcblkX bs=10M&amp;lt;/code&amp;gt; (example: ''sudo dd if=slack-current-aarch64-xfce_29Sep18-4.4.162-rockpro64-build-20181126.img of=/dev/mmcblkX bs=10M'')&lt;br /&gt;
* then edit these two files in eMMC module:&lt;br /&gt;
** &amp;lt;code&amp;gt;mount /dev/mmcblk1p1 /media&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;echo &amp;quot;rootdev=/dev/mmcblk1p1&amp;quot; &amp;gt;&amp;gt; /media/boot/uEnv.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;sed -i 's:mmcblk0p1:mmcblk1p1:' /media/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* After that, power off the board and remove the microSD card. Then boot with only the eMMC module.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Twister OS ===&lt;br /&gt;
[[File:Twister_OS.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Twister OS''' brings a desktop computing experience for SBCs, right out-of-the-box. Including themes, applications, tools, and optimizations to get the most out of your SBC. For more information on Twister OS, please visit the [https://twisteros.com/ official site]. You can follow the ongoing discussion about Twister OS on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=12192).&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://twisteros.com/twisterarmbian.html Twister OS Armbian-Reforged XFCE Desktop image] (2.8GB, supports the microSD card and eMMC modules with 16GB and more)&lt;br /&gt;
&lt;br /&gt;
{{Info|After flashing image with Etcher, edit /boot/armbianEnv.txt, replace the dtb name with rk3399-rockpro64.dtb.}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Default user&lt;br /&gt;
| &amp;lt;code&amp;gt;pi/raspberry&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Void Linux ===&lt;br /&gt;
'''Void Linux''' is a general purpose operating system, based on the monolithic Linux kernel. The official guide can be found at [https://docs.voidlinux.org/installation/guides/arm-devices/index.html Guide]. At this time there are no RockPro64 images available.&lt;br /&gt;
&lt;br /&gt;
The following creates a bootable image from an existing Void Linux installation:&lt;br /&gt;
* &amp;lt;code&amp;gt;xbps-insall -Syu&amp;lt;/code&amp;gt; to update the xbps installation of the installation&lt;br /&gt;
* create ROCKPro64 image with the ''void-mklive'' software (from github.com):&lt;br /&gt;
** create a rootfs via ''mkrootfs.sh'': &amp;lt;code&amp;gt;sh mkrootfs.sh -o void-aarch64-muls-ROOTFS-yyyymmdd.tar.xz&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;sh mkplatformfs.sh rockpro64 void-aarch64-muls-ROOTFS-yyyymmdd.tar.xz&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;sh mkimage.sh -s 7GiB void-rockpro64-PLATFORMFS-yyyymmdd.tar.xz&amp;lt;/code&amp;gt;&lt;br /&gt;
* write image to sdcard or eMMC: &amp;lt;code&amp;gt;dd if='''IMAGE-FILENAME''' of='''DEVICENAME''' bs=2M&amp;lt;/code&amp;gt;&lt;br /&gt;
* If ''mkplatformfs.sh'' errors with ''ROCKPro64 not supported'', install ''xbps-src'' from https://github.com/void-linux/void-packages and build the ROCKPro64 package.&lt;br /&gt;
* Tip:  write a new U-Boot to the image if you see on the serial console the boot-up stalls:&lt;br /&gt;
** get the two U-Boot files from [https://pkgs.org/download/u-boot-rockpro64 pkgs.org], the aarch64 files:&lt;br /&gt;
** &amp;lt;code&amp;gt;dd if=idbloader.img of=DEVICENAME seek=64&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;dd if=u-boot.itb of=DEVICENAME seek=16384&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Default user&lt;br /&gt;
| &amp;lt;code&amp;gt;voidlinux/voidlinux&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== BSD Images ==&lt;br /&gt;
=== FreeBSD ===&lt;br /&gt;
[[File:Freebsd_Logo.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''FreeBSD''' is an operating system used to power modern servers, desktops, and embedded platforms. The [https://wiki.freebsd.org/arm/RockChip#RockPro64 RockChip FreeBSD page] has instructions for installing FreeBSD. Version 13.0 and greater include prebuilt images.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* Images for various FreeBSD releases can be found [https://www.freebsd.org/where/ here]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! SSH user (enabled by default)&lt;br /&gt;
| &amp;lt;code&amp;gt;freebsd/freebsd&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Root user&lt;br /&gt;
| &amp;lt;code&amp;gt;root/root&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* The wiki has instructions on [https://wiki.freebsd.org/arm/RockChip#Fan_Control_on_RockPro64 enabling the PWM cooling fan].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== NetBSD ===&lt;br /&gt;
[[File:netbsd.png|right|100px]]&lt;br /&gt;
'''NetBSD''' is a free, fast, secure, and highly portable Unix-like Open Source operating system. To learn more about NetBSD please visit [https://www.netbsd.org/ NetBSD main page] &lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://armbsd.org/ download] latest release build from NetBSD by select 64bit - RockPro64 (size: 339 MB)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Root user and SSH login&lt;br /&gt;
| &amp;lt;code&amp;gt;root/[none]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* Instructions concerning enabling SSH can be found [https://www.netbsd.org/docs/guide/en/chap-boot.html#chap-boot-ssh here] or the bootable image from armbsd.org can have the MSDOS partition modified to setup SSH using [https://man.netbsd.org/creds_msdos.8 this] method.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== OpenBSD ===&lt;br /&gt;
[[File:Puffy_mascot_openbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''OpenBSD''' is a security-focused, free and open-source, Unix-like operating system based on the Berkeley Software Distribution. Official instruction to get OpenBSD on ROCKPro64 is [https://www.openbsd.org/arm64.html here], and blogs on installation [https://github.com/jasperla/openbsd-rockpro64 is here] and [https://bsandro.tech/posts/openbsd-7.1-on-pine64-rockpro64/ here]. Forum discussion is [https://forum.pine64.org/forumdisplay.php?fid=109 here].&lt;br /&gt;
&lt;br /&gt;
== Chromium OS ==&lt;br /&gt;
[[File:chromium.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
The '''Chromium OS''' community build image for microSD card and eMMC module, version beta (R76). To learn more please visit the [https://forum.pine64.org/showthread.php?tid=7659 forum].&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
{{Outdated release}}&lt;br /&gt;
* https://github.com/ayufan-rock64/chromiumos-build/releases/&lt;br /&gt;
&lt;br /&gt;
{{Info|Flash the image to a microSD card or an eMMC module, for example using ''dd''.}}&lt;br /&gt;
&lt;br /&gt;
== Android  ==&lt;br /&gt;
[[File:Android_logo_2019_(stacked).svg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0.0 ===&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20200804]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* Supports new RockPro64 AP6256 Wifi/BT module&lt;br /&gt;
* Support Sony IMX214 camera module and works on both MiPi-CSI ports &lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* DD image for 8GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200804_stock_android_9.0_emmcboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 7287fd0846616354615c8d3eff6a2a92&lt;br /&gt;
*** File Size: 602MB&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200804_stock_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 78352bbf21198d062af8bab2217ee691&lt;br /&gt;
*** File Size: 611MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200804_stock_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): c5c8dce419478f75f85f893ee4808dbd&lt;br /&gt;
*** File Size: 624MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200804_stock_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): aab1cf4d30c4d16e6ce2672f3ecae935&lt;br /&gt;
*** File Size: 666MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20200804]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20200708_stock_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): 9ac830527814521e15b009fa2503c9e3&lt;br /&gt;
** File Size: 589MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20200708]&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* Supports new RockPro64 AP6256 Wifi/BT module&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* DD image for 8GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200708_stock_android_9.0_emmcboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): ef5f5a890a9270734e0adee21f006837&lt;br /&gt;
*** File Size: 597MB&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200708_stock_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 179bd684a468f800a86f7c658a543bef&lt;br /&gt;
*** File Size: 606MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200708_stock_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): d930b757c4427be07b83c37a9c8494a1&lt;br /&gt;
*** File Size: 630MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200708_stock_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 09a970d68a10bdb3d6495d55860940e6&lt;br /&gt;
*** File Size: 660MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20200708]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20200708_stock_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): 6d060ddd47ebcfd5cfcdbf90ec042c97&lt;br /&gt;
** File Size: 589MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20190427]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* Please ignore &amp;quot;internal problem with your device&amp;quot; popup message if appear on Android boot-up page.&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190417_stock_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 3BA4C72D81BCFC4C21B3B5D2BCB4F9F7&lt;br /&gt;
*** File Size: 609MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190417_stock_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 4965CCF50A8F06CEB2E4A6828A21F31C&lt;br /&gt;
*** File Size: 627MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190417_stock_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 748EC28FE5D5395D33E858C913D744BF&lt;br /&gt;
*** File Size: 663MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [microSD Boot] [20190506]'''&lt;br /&gt;
* DD image to microSD card and boot. &lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* Please ignore &amp;quot;internal problem with your device&amp;quot; popup message if appear on Android boot-up page.&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* DD image for 8GB microSD card&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190506_stock_android_9.0_sdboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): E1C551E8106E178841E1C3F71432194A&lt;br /&gt;
*** File Size: 599MB&lt;br /&gt;
* DD image for 16GB microSD card&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190506_stock_android_9.0_sdboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 73592FDD5A2F52F08020F16AD99E8C8C&lt;br /&gt;
*** File Size: 609MB&lt;br /&gt;
* DD image for 32GB microSD card&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190506_stock_android_9.0_sdboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 74DE0FE528F210E4DD483B411A71904B&lt;br /&gt;
*** File Size: 627MB&lt;br /&gt;
* DD image for 64GB microSD card&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190506_stock_android_9.0_sdboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): D7626BD50443A88AEB9254C88C575284&lt;br /&gt;
*** File Size: 663MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20190427]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20190417_stock_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): 046BA4A07933120809FBE1B9577B7341&lt;br /&gt;
** File Size: 592MB&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1.0 ===&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20180828]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20180828_stock_android_8.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 9AEE21BC1B9DE886DCB0E64FA123988A&lt;br /&gt;
** File Size: 414MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [microSD Boot] [20181212]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20181212_stock_android_8.1_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 5A6BB7FCD7B3F77FCEE99CE462AE7405&lt;br /&gt;
** File Size: 616MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20180828]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20180828_stock_android_8.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 4DACFE927BB09EE9C56B5232A7F624EE&lt;br /&gt;
** File Size: 415MB&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 ===&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20180809]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20180809_stock_android_7.1_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 00F194017557017C2588724686E90CEA&lt;br /&gt;
** File Size: 498MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20180809]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20180809_stock_android_7.1_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 197A9905B48441D8655E7542F4643FE9&lt;br /&gt;
** File Size: 483MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [microSD Boot] [20180920]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20180920_stock_android_7.1_sdboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): CE39642A379B357BB3E4BC80ACA2E0CE&lt;br /&gt;
** File Size: 765MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20180518]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20180518_stock_android_7.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 33622034ACDBC31A7D7BB01ED634E29B&lt;br /&gt;
** File Size: 345MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20180518]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20180518_stock_android_7.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 90C1991DADAE13ADC94E927F171F8920&lt;br /&gt;
** File Size: 342MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for install from SDcard to eMMC [microSD Boot] [20180921]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20180921_stock_android_7.1_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): c6900e82a1d6ef397dcac241f76f43c9&lt;br /&gt;
** File Size: 350MB&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Android SDK ===&lt;br /&gt;
'''Android P SDK [v9.0]'''&lt;br /&gt;
* [http://files.pine64.org/SDK/ROCKPro64/ROCKPro64_SDK_android9.0.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 3CEBEEFD1A873BEEEC149148A785D92E&lt;br /&gt;
** File Size: 125.16GB&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Slash TV OS ===&lt;br /&gt;
Android 7 based system including Play Store, working only from SD card (does not boot when installed on eMMC)&lt;br /&gt;
* https://drive.google.com/drive/folders/1K5YhWaB7Xstuv2HCo1HkpglCEm9x-RIM&lt;br /&gt;
&lt;br /&gt;
== Development resources ==&lt;br /&gt;
&lt;br /&gt;
The Ayufan github page&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases github.com/ayufan-rock64/linux-build/]&lt;br /&gt;
&lt;br /&gt;
Below are the LPDDR4 driver for RK3399&lt;br /&gt;
&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/driver/rk3399_loader_v1.10.112_support_1CS.bin rk3399_loader_v1.10.112_support_1CS.bin, this is 800Mhz version used in Android Build]&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/driver/rk3399_ddr_666MHz_v1.11.bin rk3399_ddr_666MHz_v1.11.bin, this is alpha version]&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/driver/rk3399_ddr_933MHz_v1.11.bin rk3399_ddr_933MHz_v1.11.bin, this is alpha version]&lt;br /&gt;
&lt;br /&gt;
ROCKPro64 related files&lt;br /&gt;
&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/driver/kernel_rockpro64.tar.gz ROCKPro64 Kernel file]&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/driver/trust.img trust.img]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous tools ==&lt;br /&gt;
&lt;br /&gt;
* [http://files.pine64.org/doc/rock64/tools/DriverAssitant_v4.5.zip Windows ADB driver package]&lt;br /&gt;
* [[ROCK64 MAC Address]]&lt;br /&gt;
* [http://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]&lt;br /&gt;
* [http://files.pine64.org/doc/rock64/tools/SD_Firmware_Tool._v1.46.zip Tools to burn Android build into a bootable microSD card]&lt;br /&gt;
* [http://files.pine64.org/doc/rock64/tools/AndroidTool_Release_v2.38.zip Tools that allows developer flash image into eMMC's Loader/Parameter/Misc/Kernal/Boot/Recovery/System/Backup partition]&lt;br /&gt;
&lt;br /&gt;
[[Category:ROCKPro64]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=20543</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=20543"/>
		<updated>2023-08-22T15:02:52Z</updated>

		<summary type="html">&lt;p&gt;Diederik: /* Upstreaming Status */ RGA is mainlined in 6.5, but there are some 'issues'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the current status of software support for the [[Quartz64]] single-board computer, and provides links to resources to help prospective contributors get started. Information is kept current on a best-effort basis as various patches get accepted into the kernel.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&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;
! scope=&amp;quot;col&amp;quot; | Applies To&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Output&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;rockchipdrm/VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
As of 5.19-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/604be85547ce4d61b89292d2f9a78c721b778c16]&amp;lt;/sup&amp;gt;, Also featured in Phoronix Article&amp;lt;sup&amp;gt;[https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Rockchip-VOP2-Linux-5.19]&amp;lt;/sup&amp;gt;, 4k@30 support and other improvements in 6.4-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/83b61f817f43ed67572d1e241c9f552e0a8bfff4]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&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-edpphy-naneng&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/phy/rockchip/phy-rockchip-naneng-edp.c] and [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/commit/d7ad116fb30d11d110aeb880754cf27f34c45c40#7e8e2ef87e479c54539dc519c0b92d6b31727f8d_671_681] Coordinate any porting with Rockchip first&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;dw-mipi-dsi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/e18d9b093006d8abd53e1ce13c0d5a8d0fcd5f64]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot; rowspan=&amp;quot;3&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 1080p MPEG-2, VP8 and H.264. Mainline as of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5f6bfab6da6531238e899fdf29efd6d0185adc3e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&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;
| VDPU346 handling 4K H.265, H.264 and VP9&lt;br /&gt;
|&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;
| VDPU720 handling JPEG, [[User:CounterPillow]] is working on this&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;5&amp;quot; | [[Mainline Hardware Encoding|Video Encode]] &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;text-align:center; background:LightYellow;&amp;quot;|GStreamer only&lt;br /&gt;
| JPEG on VEPU121&lt;br /&gt;
| Hantro-based. Mainline as of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/6f1ae821a6c4aa9d5b8f437b27ec86fb569219fd]&amp;lt;/sup&amp;gt;&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.264 on VEPU121&lt;br /&gt;
| Hantro-based&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;
| VP8 on VEPU121&lt;br /&gt;
| Hantro-based&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.264 on VEPU540&lt;br /&gt;
| rkvenc-based&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 VEPU540&lt;br /&gt;
| rkvenc-based&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Audio &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-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/43b058698f723e3c2087af7069c0da082a3ecbe1]&amp;lt;/sup&amp;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;rockchip-spdif&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/dac825b6a6bdca41347e25f07354ad94fdc97445]&amp;lt;/sup&amp;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;rk817-codec&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
| Quartz64 Model A/B&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Bootloader&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://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TF-A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Merged&lt;br /&gt;
| &amp;lt;code&amp;gt;U-Boot&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[#Mainline_U-Boot_Work|See below]]. Quartz64 and SOQuartz as of v2023.10-rc2&amp;lt;sup&amp;gt;[https://source.denx.de/u-boot/u-boot/-/commit/4e619e8d4fd68095bc665a78f2651d8e478a4534]&amp;lt;/sup&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In progress&amp;lt;sup&amp;gt;[https://github.com/jaredmcneill/quartz64_uefi]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Tianocore EDK II&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;4&amp;quot; | Device Tree&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/b33a22a1e7c4248608e533fc4fa524258b3fae84]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A&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;
| Quartz64 Model B&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c37415f55bdadffe5b4c0e7981e9fc7e8b96beea]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model B&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;
| SOQuartz&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c466828fb3ba8cb7f5c3bf28766da9b70bf9745e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| SOQuartz&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;
| PineNote&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d449121e5e8addcee654250cec298c887ecafb32]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| PineNote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot;| Gigabit Ethernet&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;rk3566-gmac&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/3bb3d6b1c1957e88bfc5e77a4557f7e6ba761fe3]&amp;lt;/sup&amp;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;yt8511-phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/48e8c6f1612b3d2dccaea2285231def830cc5b8e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | IOMMU&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-iommu&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c55356c534aa651ccc3053ef2d5d8d810adacf5f]&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;gpio-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/936ee2675eee1faca0dcdfa79165c7990422e0fc]&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;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Thermal Regulation&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-thermal&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/4b14c055a6f644cbeb1156ba24647e92fe51ec69]&amp;lt;/sup&amp;gt;&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;pcie-dw-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0e898eb8df4e34c7b129452444eb7cef68a11f43]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Management&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-domains&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/1782c87b44a0b1a527f01a6a184677c58ccbf9c7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Voltage Control&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;rk3568-pmu-io-voltage-domain&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/28b05a64e47cbceebb8a5f3f643033148d5c06c3]&amp;lt;/sup&amp;gt;&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;spi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d74d99229f4d48f42d674f7a8a1137179efd67ac]&amp;lt;/sup&amp;gt;. Necessary device tree changes [https://patchwork.kernel.org/project/linux-rockchip/list/?series=586691 in review].&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Battery&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;rk817-charger&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/drivers/power/supply/rk817_charger.c?id=11cb8da0189b417392e2334ae967b0ba1f0d1be8]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A, Pinenote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Microphone&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-saradc&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7786da3b5ae167c17f35e22ba35e06006338c2f6]&amp;lt;/sup&amp;gt;. Headphone jack mic seems to connect to &amp;lt;code&amp;gt;SARADC_VIN2_HP_HOOK&amp;lt;/code&amp;gt;, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-usb2phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.17&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/phy/rockchip?h=v5.17-rc1&amp;amp;id=42b559727a45d79c811f493515eb9b7e56016421]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | e-Ink&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review (RFC)&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/20220413221916.50995-1-samuel@sholland.org/T/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| A DRM driver is available [https://github.com/smaeul/linux/commits/rk35/ebc-drm-v5 here]; also see [[RK3566 EBC Reverse-Engineering]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Combo PHY&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;naneng-combphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7160820d742a16313f7802e33c2956c19548e488]&amp;lt;/sup&amp;gt;. Still requires DTS changes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | RGA&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline; Could be improved&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rga&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.5[https://git.kernel.org/linus/0c3391f8bb06b744df521651534cd99e3d77e0a8]&amp;lt;/sup&amp;gt;. Note that there's still a '4GB' problem and it's implementations has room for improvements (to put it midly  &amp;lt;sup&amp;gt;[https://lore.kernel.org/all/20230522102953.GB23678@pengutronix.de/]&amp;lt;/sup&amp;gt; and &amp;lt;sup&amp;gt;[https://lore.kernel.org/all/b404dc20-c460-ac3f-6659-8be7a7d32bfe@arm.com/]&amp;lt;/sup&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Fan Controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &amp;lt;code&amp;gt;gp7101&amp;lt;/code&amp;gt;&lt;br /&gt;
| Someone should write a pwm driver for it so we can then use pwm-fan&lt;br /&gt;
| SOQuartz Blade&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | CSI Camera&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;rkisp&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/isp]&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;rockchip-inno-csidphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/29c99fb085ad53e6d5504d1f8d32e6673b9b3a2c]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | NPU&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &lt;br /&gt;
| Downstream version is a closed source SDK and [https://github.com/dieselnutjob/kernel-rk3566/tree/linux-4.19.210/drivers/rknpu open source kernel module rknpu]. Major undertaking to reimplement this as Linux does not (yet) appear to have a generic architecture for neural accelerators.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Crypto&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-crypto&amp;lt;/code&amp;gt; v2&lt;br /&gt;
| Downstream driver [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/crypto/rockchip] doesn't include a rk3568 compatible either, but the TRM shows that it seemingly matches.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | TRNG&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=699813&amp;amp;archive=both]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rng&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | Wi-Fi&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;bes2600&amp;lt;/code&amp;gt;&lt;br /&gt;
| A downstream driver is available but it makes use of some custom Rockchip interfaces and is designed for older kernels, plans are being made to port it to DKMS.&lt;br /&gt;
| PineTab 2&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Quartz64 Model B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current Status ==&lt;br /&gt;
&lt;br /&gt;
The following sections give an overview over the current status of different parts of the board. Some parts are waiting on a driver to be written or ported, others only need various adjustments.&lt;br /&gt;
&lt;br /&gt;
According to pgwipeout, I/O device performance is within expected ranges now.&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
&lt;br /&gt;
* eMMC&lt;br /&gt;
* SDMMC0 (SD cards)&lt;br /&gt;
* GMAC (Gigabit Ethernet)&lt;br /&gt;
* USB 2.0&lt;br /&gt;
* SATA 2&lt;br /&gt;
* SATA 3&lt;br /&gt;
* UART&lt;br /&gt;
** UART 0 (Pi-bus)&lt;br /&gt;
** UART 1 (Bluetooth)&lt;br /&gt;
** UART 2 (Pi-bus, debug)&lt;br /&gt;
* Video Decode&lt;br /&gt;
** VP8&lt;br /&gt;
** H.264&lt;br /&gt;
* Video Encode&lt;br /&gt;
** JPEG (it's pretty bad)&lt;br /&gt;
* Battery&lt;br /&gt;
* GPU&lt;br /&gt;
* Audio&lt;br /&gt;
** Analog audio works&lt;br /&gt;
** SPDIF works&lt;br /&gt;
** HDMI works&lt;br /&gt;
* SPI &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
* I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
&lt;br /&gt;
=== Partially Working ===&lt;br /&gt;
&lt;br /&gt;
* PCI-Express Controller &amp;amp;mdash; everything but devices that need cache coherency (e.g. dGPUs) should work&lt;br /&gt;
** [[User:CounterPillow]] noticed some weirdness with NVMe devices disconnecting during heavy write operations, likely down due to power draw on one of the rails as the same sustained bandwidth could be achieved with a different PCIe device with no issue.&lt;br /&gt;
* SDMMC1 (Wi-Fi) &amp;amp;mdash; AP6256 working, BL602 needs some work to make it flash firmware&lt;br /&gt;
* [https://developer.arm.com/architectures/system-architectures/system-components/arm-generic-interrupt-controller GIC] &amp;amp;mdash; needs errata published by Rockchip to get upstream to add device-specific workarounds&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/CAMdYzYrQ5f-mv_VmTq_CRf9tR=j3mwRpKHNLmPFgCF9whsGFRw@mail.gmail.com/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Confirmed Broken ===&lt;br /&gt;
&lt;br /&gt;
* USB 3.0 (applies to Model A only) &amp;amp;mdash; only works with very short cables and depends on the device. This is due to a hardware design issue relating to the coupling capacitors needed for SATA, which shares the same lines as USB 3.0.&lt;br /&gt;
** Hardware design changes have been suggested to engineers, it's in their hands now.&lt;br /&gt;
* RGA &amp;amp;mdash; only works with memory &amp;amp;le; 4 GiB, because Rockchip didn't make the address registers larger. Oopsie.&lt;br /&gt;
&lt;br /&gt;
=== Needs Testing ===&lt;br /&gt;
&lt;br /&gt;
* E-Paper&lt;br /&gt;
* Microphone Input&lt;br /&gt;
* CSI &amp;amp;mdash; needs CIF driver&lt;br /&gt;
* eDP &amp;amp;mdash; needs PHY driver and controller driver&lt;br /&gt;
* DSI&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== ebc-dev Reverse Engineering and Development ===&lt;br /&gt;
&lt;br /&gt;
The [https://gitlab.com/pine64-org/quartz-bsp/linux-next/-/tree/rk356x-ebc-dev driver for the eInk panel] needs to both be reverse engineered and then rewritten as C. In its current form, it is mostly an assembly dump produced by gcc with debug symbols. See [[RK3566 EBC Reverse-Engineering]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Investigate MCU ===&lt;br /&gt;
&lt;br /&gt;
The RK3566 comes with an integrated RISC-V microcontroller (MCU). It communicates with the A55 host through the Mailbox system driven by the rockchip-mailbox driver. Since this MCU would be quite useful for things such as low power standby mode, investigating how it can be turned on and have firmware flashed to it should greatly enhance the power saving features of the PineNote.&lt;br /&gt;
&lt;br /&gt;
I (liamur) [https://github.com/liamhays/rk3566-mcu did some investigation] into the MCU and found that it is disabled by TF-A on suspend, and doesn't reside in a low-power part of the RK3566 anyway. It does however have access to most of the chip and could be used as (for example) a real-time coprocessor.&lt;br /&gt;
&lt;br /&gt;
=== Mainline U-Boot Work ===&lt;br /&gt;
&lt;br /&gt;
We currently use the &amp;quot;downstream&amp;quot; Rockchip U-Boot, which is based on an old version of U-Boot and contains vendor specific patches that have not undergone the same level of code review as they'd have done had they been submitted upstream.&lt;br /&gt;
&lt;br /&gt;
While the lack of ATF sources means that using mainline U-Boot would still require the use of Rockchip provided binaries for the firmware, even with Rockchip blobs, a more modern version of U-Boot will be much nicer to use.&lt;br /&gt;
&lt;br /&gt;
Mainline U-Boot contains good enough support for the RK3566 SoC used on the Quartz64 as of v2023.07 and have support for Quartz64 and SOQuartz as of v2023.10-rc2. Drivers for [https://patchwork.ozlabs.org/cover/1817577/ ethernet GMAC] and [https://patchwork.ozlabs.org/patch/1817295/ Motorcomm PHY] have been submitted for review.&lt;br /&gt;
&lt;br /&gt;
==== Things that could be done ====&lt;br /&gt;
&lt;br /&gt;
This list is non-exhaustive as we don't exactly know how much is missing&lt;br /&gt;
&lt;br /&gt;
* Port a basic VOP2 driver to get a framebuffer from u-boot&lt;br /&gt;
&lt;br /&gt;
==== List of Useful Resources for this Task ====&lt;br /&gt;
* Downstream Rockchip U-Boot repository with Quartz64 specific patches: https://gitlab.com/pgwipeout/u-boot-rockchip/-/tree/quartz64&lt;br /&gt;
* Mainline Rockchip custodian U-Boot repository: https://source.denx.de/u-boot/custodians/u-boot-rockchip&lt;br /&gt;
* U-Boot Mailing List: https://lists.denx.de/listinfo/u-boot&lt;br /&gt;
&lt;br /&gt;
=== eDP Driver Porting ===&lt;br /&gt;
&lt;br /&gt;
The eDP PHY driver and controller driver needs to be ported, brought into shape and submitted with proper commit attribution to the Rockchip authors.&lt;br /&gt;
&lt;br /&gt;
[[User:CounterPillow]] has experimentally ported stuff, but it's currently not working.&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel Config Options ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_I2S_TDM&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog and HDMI audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog audio on the Model A&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_STMMAC_ETH&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DWMAC_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet PHY for Model A, set this one to Y, m won't work out of the box if the generic PHY driver is y and binds first. Alternatively tell users in board-specific setup instructions to force including the &amp;lt;code&amp;gt;motorcomm&amp;lt;/code&amp;gt; module in initramfs if you set it to m.&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REALTEK_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet PHY for Model B&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_SDHCI_OF_DWCMSHC&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PCIE_ROCKCHIP_DW_HOST&amp;lt;/code&amp;gt;&lt;br /&gt;
** PCIe&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** PHY for PCIe/SATA/USB3&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DRM_PANFROST&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPU&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_SPDIF&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPDIF audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_DW_HDMI&amp;lt;/code&amp;gt;&lt;br /&gt;
** HDMI PHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI DSI DPHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
** Video output&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ARCH_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_USB2&amp;lt;/code&amp;gt;&lt;br /&gt;
** USB 2&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_RTC_DRV_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MFD_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Various things relating to the RK817 chip&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CHARGER_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** RK817 charger&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REGULATOR_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Voltage regulators&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PM_DOMAINS&amp;lt;/code&amp;gt;&lt;br /&gt;
** Power management domains&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_GPIO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PINCTRL_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO and general SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PWM_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** PWM support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IOMMU&amp;lt;/code&amp;gt;&lt;br /&gt;
** IOMMU support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_MBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
** Mailbox support (for communication with MCU)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_SARADC&amp;lt;/code&amp;gt;&lt;br /&gt;
** Analog-to-digital conversion support, for e.g. microphones&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_THERMAL&amp;lt;/code&amp;gt;&lt;br /&gt;
** Temperature sensor and thermal throttling support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SPI_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPI support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_VIDEO_HANTRO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Hardware video decoder support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IODOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support so your I/O pins have the right voltage&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Common clock support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI CSI DPHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_I2C_RK3X&amp;lt;/code&amp;gt;&lt;br /&gt;
** I2C support&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* pgwipeout's kernel tree&lt;br /&gt;
** https://gitlab.com/pgwipeout/linux-next/-/tree/quartz64-v5.15-rc1&lt;br /&gt;
* BSP based development effort for SPL/U-Boot and Linux&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp&lt;br /&gt;
* Image CI pipeline aimed at developers&lt;br /&gt;
** https://gitlab.com/pgwipeout/quartz64_ci/&lt;br /&gt;
* Rockchip U-Boot&lt;br /&gt;
** https://github.com/rockchip-linux/u-boot&lt;br /&gt;
* Downstream rockchip-linux kernel tree&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux&lt;br /&gt;
* Tianocore EDK II port for UEFI on Quartz64&lt;br /&gt;
** https://github.com/jaredmcneill/quartz64_uefi&lt;br /&gt;
* Mainline U-Boot Port by pgwipeout&lt;br /&gt;
** https://gitlab.com/pgwipeout/u-boot-quartz64&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* Rockchip-SoC Patchwork Page&lt;br /&gt;
** https://patchwork.kernel.org/project/linux-rockchip/list/&lt;br /&gt;
* Rockchip Kernel Mailing List Archive&lt;br /&gt;
** https://lore.kernel.org/linux-rockchip/&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Boot Order ====&lt;br /&gt;
The RK3566 boot ROM will search for a valid ID BLOCK in the following order on the support boot media:&lt;br /&gt;
&lt;br /&gt;
* SPI NOR flash&lt;br /&gt;
* SPI NAND flash&lt;br /&gt;
* eMMC&lt;br /&gt;
* SD-Card&lt;br /&gt;
&lt;br /&gt;
... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip&lt;br /&gt;
flash/boot tools.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader Flashing ====&lt;br /&gt;
&lt;br /&gt;
As per pgwipeout's [https://gitlab.com/pine64-org/quartz-bsp/u-boot/-/commit/12d102b86813378af08b086f3b9c13ed8010754c commit message]:&lt;br /&gt;
* Make a partition named &amp;lt;code&amp;gt;uboot&amp;lt;/code&amp;gt; as partition number 1 at 8 MiB to 16 MiB&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=idblock.bin of=/dev/''&amp;lt;mmc/sd&amp;gt;'' seek=64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=uboot.img of=/dev/''&amp;lt;mmc/sd&amp;gt;''1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== BSP Image Layout ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]][[Category:Rockchip RK3566]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=20540</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=20540"/>
		<updated>2023-08-17T23:04:43Z</updated>

		<summary type="html">&lt;p&gt;Diederik: /* Upstreaming Status */ TRNG patch is now archived&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the current status of software support for the [[Quartz64]] single-board computer, and provides links to resources to help prospective contributors get started. Information is kept current on a best-effort basis as various patches get accepted into the kernel.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&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;
! scope=&amp;quot;col&amp;quot; | Applies To&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Output&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;rockchipdrm/VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
As of 5.19-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/604be85547ce4d61b89292d2f9a78c721b778c16]&amp;lt;/sup&amp;gt;, Also featured in Phoronix Article&amp;lt;sup&amp;gt;[https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Rockchip-VOP2-Linux-5.19]&amp;lt;/sup&amp;gt;, 4k@30 support and other improvements in 6.4-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/83b61f817f43ed67572d1e241c9f552e0a8bfff4]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&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-edpphy-naneng&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/phy/rockchip/phy-rockchip-naneng-edp.c] and [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/commit/d7ad116fb30d11d110aeb880754cf27f34c45c40#7e8e2ef87e479c54539dc519c0b92d6b31727f8d_671_681] Coordinate any porting with Rockchip first&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;dw-mipi-dsi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/e18d9b093006d8abd53e1ce13c0d5a8d0fcd5f64]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot; rowspan=&amp;quot;3&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 1080p MPEG-2, VP8 and H.264. Mainline as of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5f6bfab6da6531238e899fdf29efd6d0185adc3e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&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;
| VDPU346 handling 4K H.265, H.264 and VP9&lt;br /&gt;
|&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;
| VDPU720 handling JPEG, [[User:CounterPillow]] is working on this&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;5&amp;quot; | [[Mainline Hardware Encoding|Video Encode]] &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;text-align:center; background:LightYellow;&amp;quot;|GStreamer only&lt;br /&gt;
| JPEG on VEPU121&lt;br /&gt;
| Hantro-based. Mainline as of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/6f1ae821a6c4aa9d5b8f437b27ec86fb569219fd]&amp;lt;/sup&amp;gt;&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.264 on VEPU121&lt;br /&gt;
| Hantro-based&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;
| VP8 on VEPU121&lt;br /&gt;
| Hantro-based&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.264 on VEPU540&lt;br /&gt;
| rkvenc-based&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 VEPU540&lt;br /&gt;
| rkvenc-based&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Audio &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-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/43b058698f723e3c2087af7069c0da082a3ecbe1]&amp;lt;/sup&amp;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;rockchip-spdif&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/dac825b6a6bdca41347e25f07354ad94fdc97445]&amp;lt;/sup&amp;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;rk817-codec&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
| Quartz64 Model A/B&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Bootloader&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://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TF-A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Merged&lt;br /&gt;
| &amp;lt;code&amp;gt;U-Boot&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[#Mainline_U-Boot_Work|See below]]. Quartz64 and SOQuartz as of v2023.10-rc2&amp;lt;sup&amp;gt;[https://source.denx.de/u-boot/u-boot/-/commit/4e619e8d4fd68095bc665a78f2651d8e478a4534]&amp;lt;/sup&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In progress&amp;lt;sup&amp;gt;[https://github.com/jaredmcneill/quartz64_uefi]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Tianocore EDK II&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;4&amp;quot; | Device Tree&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/b33a22a1e7c4248608e533fc4fa524258b3fae84]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A&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;
| Quartz64 Model B&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c37415f55bdadffe5b4c0e7981e9fc7e8b96beea]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model B&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;
| SOQuartz&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c466828fb3ba8cb7f5c3bf28766da9b70bf9745e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| SOQuartz&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;
| PineNote&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d449121e5e8addcee654250cec298c887ecafb32]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| PineNote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot;| Gigabit Ethernet&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;rk3566-gmac&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/3bb3d6b1c1957e88bfc5e77a4557f7e6ba761fe3]&amp;lt;/sup&amp;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;yt8511-phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/48e8c6f1612b3d2dccaea2285231def830cc5b8e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | IOMMU&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-iommu&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c55356c534aa651ccc3053ef2d5d8d810adacf5f]&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;gpio-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/936ee2675eee1faca0dcdfa79165c7990422e0fc]&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;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Thermal Regulation&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-thermal&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/4b14c055a6f644cbeb1156ba24647e92fe51ec69]&amp;lt;/sup&amp;gt;&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;pcie-dw-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0e898eb8df4e34c7b129452444eb7cef68a11f43]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Management&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-domains&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/1782c87b44a0b1a527f01a6a184677c58ccbf9c7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Voltage Control&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;rk3568-pmu-io-voltage-domain&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/28b05a64e47cbceebb8a5f3f643033148d5c06c3]&amp;lt;/sup&amp;gt;&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;spi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d74d99229f4d48f42d674f7a8a1137179efd67ac]&amp;lt;/sup&amp;gt;. Necessary device tree changes [https://patchwork.kernel.org/project/linux-rockchip/list/?series=586691 in review].&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Battery&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;rk817-charger&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/drivers/power/supply/rk817_charger.c?id=11cb8da0189b417392e2334ae967b0ba1f0d1be8]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A, Pinenote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Microphone&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-saradc&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7786da3b5ae167c17f35e22ba35e06006338c2f6]&amp;lt;/sup&amp;gt;. Headphone jack mic seems to connect to &amp;lt;code&amp;gt;SARADC_VIN2_HP_HOOK&amp;lt;/code&amp;gt;, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-usb2phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.17&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/phy/rockchip?h=v5.17-rc1&amp;amp;id=42b559727a45d79c811f493515eb9b7e56016421]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | e-Ink&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review (RFC)&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/20220413221916.50995-1-samuel@sholland.org/T/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| A DRM driver is available [https://github.com/smaeul/linux/commits/rk35/ebc-drm-v5 here]; also see [[RK3566 EBC Reverse-Engineering]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Combo PHY&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;naneng-combphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7160820d742a16313f7802e33c2956c19548e488]&amp;lt;/sup&amp;gt;. Still requires DTS changes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | RGA&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs fixing&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rga&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[User:CounterPillow]] experimentally enabled it&amp;lt;sup&amp;gt;[https://gist.github.com/CounterPillow/6bea809f15ada7ddd3a3d7a4994fdc4e]&amp;lt;/sup&amp;gt; in the device tree and ran gstreamer's v4l2convert through it to test, resulting in a completely garbled output.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Fan Controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &amp;lt;code&amp;gt;gp7101&amp;lt;/code&amp;gt;&lt;br /&gt;
| Someone should write a pwm driver for it so we can then use pwm-fan&lt;br /&gt;
| SOQuartz Blade&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | CSI Camera&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;rkisp&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/isp]&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;rockchip-inno-csidphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/29c99fb085ad53e6d5504d1f8d32e6673b9b3a2c]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | NPU&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &lt;br /&gt;
| Downstream version is a closed source SDK and [https://github.com/dieselnutjob/kernel-rk3566/tree/linux-4.19.210/drivers/rknpu open source kernel module rknpu]. Major undertaking to reimplement this as Linux does not (yet) appear to have a generic architecture for neural accelerators.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Crypto&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-crypto&amp;lt;/code&amp;gt; v2&lt;br /&gt;
| Downstream driver [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/crypto/rockchip] doesn't include a rk3568 compatible either, but the TRM shows that it seemingly matches.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | TRNG&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=699813&amp;amp;archive=both]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rng&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | Wi-Fi&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;bes2600&amp;lt;/code&amp;gt;&lt;br /&gt;
| A downstream driver is available but it makes use of some custom Rockchip interfaces and is designed for older kernels, plans are being made to port it to DKMS.&lt;br /&gt;
| PineTab 2&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Quartz64 Model B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current Status ==&lt;br /&gt;
&lt;br /&gt;
The following sections give an overview over the current status of different parts of the board. Some parts are waiting on a driver to be written or ported, others only need various adjustments.&lt;br /&gt;
&lt;br /&gt;
According to pgwipeout, I/O device performance is within expected ranges now.&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
&lt;br /&gt;
* eMMC&lt;br /&gt;
* SDMMC0 (SD cards)&lt;br /&gt;
* GMAC (Gigabit Ethernet)&lt;br /&gt;
* USB 2.0&lt;br /&gt;
* SATA 2&lt;br /&gt;
* SATA 3&lt;br /&gt;
* UART&lt;br /&gt;
** UART 0 (Pi-bus)&lt;br /&gt;
** UART 1 (Bluetooth)&lt;br /&gt;
** UART 2 (Pi-bus, debug)&lt;br /&gt;
* Video Decode&lt;br /&gt;
** VP8&lt;br /&gt;
** H.264&lt;br /&gt;
* Video Encode&lt;br /&gt;
** JPEG (it's pretty bad)&lt;br /&gt;
* Battery&lt;br /&gt;
* GPU&lt;br /&gt;
* Audio&lt;br /&gt;
** Analog audio works&lt;br /&gt;
** SPDIF works&lt;br /&gt;
** HDMI works&lt;br /&gt;
* SPI &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
* I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
&lt;br /&gt;
=== Partially Working ===&lt;br /&gt;
&lt;br /&gt;
* PCI-Express Controller &amp;amp;mdash; everything but devices that need cache coherency (e.g. dGPUs) should work&lt;br /&gt;
** [[User:CounterPillow]] noticed some weirdness with NVMe devices disconnecting during heavy write operations, likely down due to power draw on one of the rails as the same sustained bandwidth could be achieved with a different PCIe device with no issue.&lt;br /&gt;
* SDMMC1 (Wi-Fi) &amp;amp;mdash; AP6256 working, BL602 needs some work to make it flash firmware&lt;br /&gt;
* [https://developer.arm.com/architectures/system-architectures/system-components/arm-generic-interrupt-controller GIC] &amp;amp;mdash; needs errata published by Rockchip to get upstream to add device-specific workarounds&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/CAMdYzYrQ5f-mv_VmTq_CRf9tR=j3mwRpKHNLmPFgCF9whsGFRw@mail.gmail.com/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Confirmed Broken ===&lt;br /&gt;
&lt;br /&gt;
* USB 3.0 (applies to Model A only) &amp;amp;mdash; only works with very short cables and depends on the device. This is due to a hardware design issue relating to the coupling capacitors needed for SATA, which shares the same lines as USB 3.0.&lt;br /&gt;
** Hardware design changes have been suggested to engineers, it's in their hands now.&lt;br /&gt;
* RGA &amp;amp;mdash; only works with memory &amp;amp;le; 4 GiB, because Rockchip didn't make the address registers larger. Oopsie.&lt;br /&gt;
&lt;br /&gt;
=== Needs Testing ===&lt;br /&gt;
&lt;br /&gt;
* E-Paper&lt;br /&gt;
* Microphone Input&lt;br /&gt;
* CSI &amp;amp;mdash; needs CIF driver&lt;br /&gt;
* eDP &amp;amp;mdash; needs PHY driver and controller driver&lt;br /&gt;
* DSI&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== ebc-dev Reverse Engineering and Development ===&lt;br /&gt;
&lt;br /&gt;
The [https://gitlab.com/pine64-org/quartz-bsp/linux-next/-/tree/rk356x-ebc-dev driver for the eInk panel] needs to both be reverse engineered and then rewritten as C. In its current form, it is mostly an assembly dump produced by gcc with debug symbols. See [[RK3566 EBC Reverse-Engineering]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Investigate MCU ===&lt;br /&gt;
&lt;br /&gt;
The RK3566 comes with an integrated RISC-V microcontroller (MCU). It communicates with the A55 host through the Mailbox system driven by the rockchip-mailbox driver. Since this MCU would be quite useful for things such as low power standby mode, investigating how it can be turned on and have firmware flashed to it should greatly enhance the power saving features of the PineNote.&lt;br /&gt;
&lt;br /&gt;
I (liamur) [https://github.com/liamhays/rk3566-mcu did some investigation] into the MCU and found that it is disabled by TF-A on suspend, and doesn't reside in a low-power part of the RK3566 anyway. It does however have access to most of the chip and could be used as (for example) a real-time coprocessor.&lt;br /&gt;
&lt;br /&gt;
=== Mainline U-Boot Work ===&lt;br /&gt;
&lt;br /&gt;
We currently use the &amp;quot;downstream&amp;quot; Rockchip U-Boot, which is based on an old version of U-Boot and contains vendor specific patches that have not undergone the same level of code review as they'd have done had they been submitted upstream.&lt;br /&gt;
&lt;br /&gt;
While the lack of ATF sources means that using mainline U-Boot would still require the use of Rockchip provided binaries for the firmware, even with Rockchip blobs, a more modern version of U-Boot will be much nicer to use.&lt;br /&gt;
&lt;br /&gt;
Mainline U-Boot contains good enough support for the RK3566 SoC used on the Quartz64 as of v2023.07 and have support for Quartz64 and SOQuartz as of v2023.10-rc2. Drivers for [https://patchwork.ozlabs.org/cover/1817577/ ethernet GMAC] and [https://patchwork.ozlabs.org/patch/1817295/ Motorcomm PHY] have been submitted for review.&lt;br /&gt;
&lt;br /&gt;
==== Things that could be done ====&lt;br /&gt;
&lt;br /&gt;
This list is non-exhaustive as we don't exactly know how much is missing&lt;br /&gt;
&lt;br /&gt;
* Port a basic VOP2 driver to get a framebuffer from u-boot&lt;br /&gt;
&lt;br /&gt;
==== List of Useful Resources for this Task ====&lt;br /&gt;
* Downstream Rockchip U-Boot repository with Quartz64 specific patches: https://gitlab.com/pgwipeout/u-boot-rockchip/-/tree/quartz64&lt;br /&gt;
* Mainline Rockchip custodian U-Boot repository: https://source.denx.de/u-boot/custodians/u-boot-rockchip&lt;br /&gt;
* U-Boot Mailing List: https://lists.denx.de/listinfo/u-boot&lt;br /&gt;
&lt;br /&gt;
=== eDP Driver Porting ===&lt;br /&gt;
&lt;br /&gt;
The eDP PHY driver and controller driver needs to be ported, brought into shape and submitted with proper commit attribution to the Rockchip authors.&lt;br /&gt;
&lt;br /&gt;
[[User:CounterPillow]] has experimentally ported stuff, but it's currently not working.&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel Config Options ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_I2S_TDM&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog and HDMI audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog audio on the Model A&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_STMMAC_ETH&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DWMAC_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet PHY for Model A, set this one to Y, m won't work out of the box if the generic PHY driver is y and binds first. Alternatively tell users in board-specific setup instructions to force including the &amp;lt;code&amp;gt;motorcomm&amp;lt;/code&amp;gt; module in initramfs if you set it to m.&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REALTEK_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet PHY for Model B&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_SDHCI_OF_DWCMSHC&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PCIE_ROCKCHIP_DW_HOST&amp;lt;/code&amp;gt;&lt;br /&gt;
** PCIe&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** PHY for PCIe/SATA/USB3&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DRM_PANFROST&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPU&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_SPDIF&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPDIF audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_DW_HDMI&amp;lt;/code&amp;gt;&lt;br /&gt;
** HDMI PHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI DSI DPHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
** Video output&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ARCH_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_USB2&amp;lt;/code&amp;gt;&lt;br /&gt;
** USB 2&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_RTC_DRV_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MFD_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Various things relating to the RK817 chip&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CHARGER_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** RK817 charger&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REGULATOR_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Voltage regulators&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PM_DOMAINS&amp;lt;/code&amp;gt;&lt;br /&gt;
** Power management domains&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_GPIO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PINCTRL_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO and general SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PWM_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** PWM support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IOMMU&amp;lt;/code&amp;gt;&lt;br /&gt;
** IOMMU support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_MBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
** Mailbox support (for communication with MCU)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_SARADC&amp;lt;/code&amp;gt;&lt;br /&gt;
** Analog-to-digital conversion support, for e.g. microphones&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_THERMAL&amp;lt;/code&amp;gt;&lt;br /&gt;
** Temperature sensor and thermal throttling support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SPI_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPI support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_VIDEO_HANTRO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Hardware video decoder support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IODOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support so your I/O pins have the right voltage&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Common clock support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI CSI DPHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_I2C_RK3X&amp;lt;/code&amp;gt;&lt;br /&gt;
** I2C support&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* pgwipeout's kernel tree&lt;br /&gt;
** https://gitlab.com/pgwipeout/linux-next/-/tree/quartz64-v5.15-rc1&lt;br /&gt;
* BSP based development effort for SPL/U-Boot and Linux&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp&lt;br /&gt;
* Image CI pipeline aimed at developers&lt;br /&gt;
** https://gitlab.com/pgwipeout/quartz64_ci/&lt;br /&gt;
* Rockchip U-Boot&lt;br /&gt;
** https://github.com/rockchip-linux/u-boot&lt;br /&gt;
* Downstream rockchip-linux kernel tree&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux&lt;br /&gt;
* Tianocore EDK II port for UEFI on Quartz64&lt;br /&gt;
** https://github.com/jaredmcneill/quartz64_uefi&lt;br /&gt;
* Mainline U-Boot Port by pgwipeout&lt;br /&gt;
** https://gitlab.com/pgwipeout/u-boot-quartz64&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* Rockchip-SoC Patchwork Page&lt;br /&gt;
** https://patchwork.kernel.org/project/linux-rockchip/list/&lt;br /&gt;
* Rockchip Kernel Mailing List Archive&lt;br /&gt;
** https://lore.kernel.org/linux-rockchip/&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Boot Order ====&lt;br /&gt;
The RK3566 boot ROM will search for a valid ID BLOCK in the following order on the support boot media:&lt;br /&gt;
&lt;br /&gt;
* SPI NOR flash&lt;br /&gt;
* SPI NAND flash&lt;br /&gt;
* eMMC&lt;br /&gt;
* SD-Card&lt;br /&gt;
&lt;br /&gt;
... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip&lt;br /&gt;
flash/boot tools.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader Flashing ====&lt;br /&gt;
&lt;br /&gt;
As per pgwipeout's [https://gitlab.com/pine64-org/quartz-bsp/u-boot/-/commit/12d102b86813378af08b086f3b9c13ed8010754c commit message]:&lt;br /&gt;
* Make a partition named &amp;lt;code&amp;gt;uboot&amp;lt;/code&amp;gt; as partition number 1 at 8 MiB to 16 MiB&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=idblock.bin of=/dev/''&amp;lt;mmc/sd&amp;gt;'' seek=64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=uboot.img of=/dev/''&amp;lt;mmc/sd&amp;gt;''1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== BSP Image Layout ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]][[Category:Rockchip RK3566]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=20539</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=20539"/>
		<updated>2023-08-17T22:46:52Z</updated>

		<summary type="html">&lt;p&gt;Diederik: /* Upstreaming Status */ 4k@30 and other improvements since 6.4-rc1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the current status of software support for the [[Quartz64]] single-board computer, and provides links to resources to help prospective contributors get started. Information is kept current on a best-effort basis as various patches get accepted into the kernel.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&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;
! scope=&amp;quot;col&amp;quot; | Applies To&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Output&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;rockchipdrm/VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
As of 5.19-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/604be85547ce4d61b89292d2f9a78c721b778c16]&amp;lt;/sup&amp;gt;, Also featured in Phoronix Article&amp;lt;sup&amp;gt;[https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Rockchip-VOP2-Linux-5.19]&amp;lt;/sup&amp;gt;, 4k@30 support and other improvements in 6.4-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/83b61f817f43ed67572d1e241c9f552e0a8bfff4]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&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-edpphy-naneng&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/phy/rockchip/phy-rockchip-naneng-edp.c] and [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/commit/d7ad116fb30d11d110aeb880754cf27f34c45c40#7e8e2ef87e479c54539dc519c0b92d6b31727f8d_671_681] Coordinate any porting with Rockchip first&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;dw-mipi-dsi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/e18d9b093006d8abd53e1ce13c0d5a8d0fcd5f64]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot; rowspan=&amp;quot;3&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 1080p MPEG-2, VP8 and H.264. Mainline as of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5f6bfab6da6531238e899fdf29efd6d0185adc3e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&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;
| VDPU346 handling 4K H.265, H.264 and VP9&lt;br /&gt;
|&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;
| VDPU720 handling JPEG, [[User:CounterPillow]] is working on this&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;5&amp;quot; | [[Mainline Hardware Encoding|Video Encode]] &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;text-align:center; background:LightYellow;&amp;quot;|GStreamer only&lt;br /&gt;
| JPEG on VEPU121&lt;br /&gt;
| Hantro-based. Mainline as of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/6f1ae821a6c4aa9d5b8f437b27ec86fb569219fd]&amp;lt;/sup&amp;gt;&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.264 on VEPU121&lt;br /&gt;
| Hantro-based&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;
| VP8 on VEPU121&lt;br /&gt;
| Hantro-based&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.264 on VEPU540&lt;br /&gt;
| rkvenc-based&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 VEPU540&lt;br /&gt;
| rkvenc-based&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Audio &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-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/43b058698f723e3c2087af7069c0da082a3ecbe1]&amp;lt;/sup&amp;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;rockchip-spdif&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/dac825b6a6bdca41347e25f07354ad94fdc97445]&amp;lt;/sup&amp;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;rk817-codec&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
| Quartz64 Model A/B&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Bootloader&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://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TF-A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Merged&lt;br /&gt;
| &amp;lt;code&amp;gt;U-Boot&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[#Mainline_U-Boot_Work|See below]]. Quartz64 and SOQuartz as of v2023.10-rc2&amp;lt;sup&amp;gt;[https://source.denx.de/u-boot/u-boot/-/commit/4e619e8d4fd68095bc665a78f2651d8e478a4534]&amp;lt;/sup&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In progress&amp;lt;sup&amp;gt;[https://github.com/jaredmcneill/quartz64_uefi]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Tianocore EDK II&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;4&amp;quot; | Device Tree&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/b33a22a1e7c4248608e533fc4fa524258b3fae84]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A&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;
| Quartz64 Model B&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c37415f55bdadffe5b4c0e7981e9fc7e8b96beea]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model B&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;
| SOQuartz&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c466828fb3ba8cb7f5c3bf28766da9b70bf9745e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| SOQuartz&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;
| PineNote&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d449121e5e8addcee654250cec298c887ecafb32]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| PineNote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot;| Gigabit Ethernet&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;rk3566-gmac&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/3bb3d6b1c1957e88bfc5e77a4557f7e6ba761fe3]&amp;lt;/sup&amp;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;yt8511-phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/48e8c6f1612b3d2dccaea2285231def830cc5b8e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | IOMMU&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-iommu&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c55356c534aa651ccc3053ef2d5d8d810adacf5f]&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;gpio-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/936ee2675eee1faca0dcdfa79165c7990422e0fc]&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;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Thermal Regulation&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-thermal&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/4b14c055a6f644cbeb1156ba24647e92fe51ec69]&amp;lt;/sup&amp;gt;&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;pcie-dw-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0e898eb8df4e34c7b129452444eb7cef68a11f43]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Management&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-domains&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/1782c87b44a0b1a527f01a6a184677c58ccbf9c7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Voltage Control&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;rk3568-pmu-io-voltage-domain&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/28b05a64e47cbceebb8a5f3f643033148d5c06c3]&amp;lt;/sup&amp;gt;&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;spi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d74d99229f4d48f42d674f7a8a1137179efd67ac]&amp;lt;/sup&amp;gt;. Necessary device tree changes [https://patchwork.kernel.org/project/linux-rockchip/list/?series=586691 in review].&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Battery&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;rk817-charger&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/drivers/power/supply/rk817_charger.c?id=11cb8da0189b417392e2334ae967b0ba1f0d1be8]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A, Pinenote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Microphone&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-saradc&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7786da3b5ae167c17f35e22ba35e06006338c2f6]&amp;lt;/sup&amp;gt;. Headphone jack mic seems to connect to &amp;lt;code&amp;gt;SARADC_VIN2_HP_HOOK&amp;lt;/code&amp;gt;, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-usb2phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.17&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/phy/rockchip?h=v5.17-rc1&amp;amp;id=42b559727a45d79c811f493515eb9b7e56016421]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | e-Ink&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review (RFC)&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/20220413221916.50995-1-samuel@sholland.org/T/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| A DRM driver is available [https://github.com/smaeul/linux/commits/rk35/ebc-drm-v5 here]; also see [[RK3566 EBC Reverse-Engineering]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Combo PHY&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;naneng-combphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7160820d742a16313f7802e33c2956c19548e488]&amp;lt;/sup&amp;gt;. Still requires DTS changes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | RGA&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs fixing&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rga&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[User:CounterPillow]] experimentally enabled it&amp;lt;sup&amp;gt;[https://gist.github.com/CounterPillow/6bea809f15ada7ddd3a3d7a4994fdc4e]&amp;lt;/sup&amp;gt; in the device tree and ran gstreamer's v4l2convert through it to test, resulting in a completely garbled output.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Fan Controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &amp;lt;code&amp;gt;gp7101&amp;lt;/code&amp;gt;&lt;br /&gt;
| Someone should write a pwm driver for it so we can then use pwm-fan&lt;br /&gt;
| SOQuartz Blade&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | CSI Camera&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;rkisp&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/isp]&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;rockchip-inno-csidphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/29c99fb085ad53e6d5504d1f8d32e6673b9b3a2c]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | NPU&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &lt;br /&gt;
| Downstream version is a closed source SDK and [https://github.com/dieselnutjob/kernel-rk3566/tree/linux-4.19.210/drivers/rknpu open source kernel module rknpu]. Major undertaking to reimplement this as Linux does not (yet) appear to have a generic architecture for neural accelerators.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Crypto&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-crypto&amp;lt;/code&amp;gt; v2&lt;br /&gt;
| Downstream driver [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/crypto/rockchip] doesn't include a rk3568 compatible either, but the TRM shows that it seemingly matches.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | TRNG&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=699813]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rng&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | Wi-Fi&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;bes2600&amp;lt;/code&amp;gt;&lt;br /&gt;
| A downstream driver is available but it makes use of some custom Rockchip interfaces and is designed for older kernels, plans are being made to port it to DKMS.&lt;br /&gt;
| PineTab 2&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Quartz64 Model B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current Status ==&lt;br /&gt;
&lt;br /&gt;
The following sections give an overview over the current status of different parts of the board. Some parts are waiting on a driver to be written or ported, others only need various adjustments.&lt;br /&gt;
&lt;br /&gt;
According to pgwipeout, I/O device performance is within expected ranges now.&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
&lt;br /&gt;
* eMMC&lt;br /&gt;
* SDMMC0 (SD cards)&lt;br /&gt;
* GMAC (Gigabit Ethernet)&lt;br /&gt;
* USB 2.0&lt;br /&gt;
* SATA 2&lt;br /&gt;
* SATA 3&lt;br /&gt;
* UART&lt;br /&gt;
** UART 0 (Pi-bus)&lt;br /&gt;
** UART 1 (Bluetooth)&lt;br /&gt;
** UART 2 (Pi-bus, debug)&lt;br /&gt;
* Video Decode&lt;br /&gt;
** VP8&lt;br /&gt;
** H.264&lt;br /&gt;
* Video Encode&lt;br /&gt;
** JPEG (it's pretty bad)&lt;br /&gt;
* Battery&lt;br /&gt;
* GPU&lt;br /&gt;
* Audio&lt;br /&gt;
** Analog audio works&lt;br /&gt;
** SPDIF works&lt;br /&gt;
** HDMI works&lt;br /&gt;
* SPI &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
* I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
&lt;br /&gt;
=== Partially Working ===&lt;br /&gt;
&lt;br /&gt;
* PCI-Express Controller &amp;amp;mdash; everything but devices that need cache coherency (e.g. dGPUs) should work&lt;br /&gt;
** [[User:CounterPillow]] noticed some weirdness with NVMe devices disconnecting during heavy write operations, likely down due to power draw on one of the rails as the same sustained bandwidth could be achieved with a different PCIe device with no issue.&lt;br /&gt;
* SDMMC1 (Wi-Fi) &amp;amp;mdash; AP6256 working, BL602 needs some work to make it flash firmware&lt;br /&gt;
* [https://developer.arm.com/architectures/system-architectures/system-components/arm-generic-interrupt-controller GIC] &amp;amp;mdash; needs errata published by Rockchip to get upstream to add device-specific workarounds&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/CAMdYzYrQ5f-mv_VmTq_CRf9tR=j3mwRpKHNLmPFgCF9whsGFRw@mail.gmail.com/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Confirmed Broken ===&lt;br /&gt;
&lt;br /&gt;
* USB 3.0 (applies to Model A only) &amp;amp;mdash; only works with very short cables and depends on the device. This is due to a hardware design issue relating to the coupling capacitors needed for SATA, which shares the same lines as USB 3.0.&lt;br /&gt;
** Hardware design changes have been suggested to engineers, it's in their hands now.&lt;br /&gt;
* RGA &amp;amp;mdash; only works with memory &amp;amp;le; 4 GiB, because Rockchip didn't make the address registers larger. Oopsie.&lt;br /&gt;
&lt;br /&gt;
=== Needs Testing ===&lt;br /&gt;
&lt;br /&gt;
* E-Paper&lt;br /&gt;
* Microphone Input&lt;br /&gt;
* CSI &amp;amp;mdash; needs CIF driver&lt;br /&gt;
* eDP &amp;amp;mdash; needs PHY driver and controller driver&lt;br /&gt;
* DSI&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== ebc-dev Reverse Engineering and Development ===&lt;br /&gt;
&lt;br /&gt;
The [https://gitlab.com/pine64-org/quartz-bsp/linux-next/-/tree/rk356x-ebc-dev driver for the eInk panel] needs to both be reverse engineered and then rewritten as C. In its current form, it is mostly an assembly dump produced by gcc with debug symbols. See [[RK3566 EBC Reverse-Engineering]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Investigate MCU ===&lt;br /&gt;
&lt;br /&gt;
The RK3566 comes with an integrated RISC-V microcontroller (MCU). It communicates with the A55 host through the Mailbox system driven by the rockchip-mailbox driver. Since this MCU would be quite useful for things such as low power standby mode, investigating how it can be turned on and have firmware flashed to it should greatly enhance the power saving features of the PineNote.&lt;br /&gt;
&lt;br /&gt;
I (liamur) [https://github.com/liamhays/rk3566-mcu did some investigation] into the MCU and found that it is disabled by TF-A on suspend, and doesn't reside in a low-power part of the RK3566 anyway. It does however have access to most of the chip and could be used as (for example) a real-time coprocessor.&lt;br /&gt;
&lt;br /&gt;
=== Mainline U-Boot Work ===&lt;br /&gt;
&lt;br /&gt;
We currently use the &amp;quot;downstream&amp;quot; Rockchip U-Boot, which is based on an old version of U-Boot and contains vendor specific patches that have not undergone the same level of code review as they'd have done had they been submitted upstream.&lt;br /&gt;
&lt;br /&gt;
While the lack of ATF sources means that using mainline U-Boot would still require the use of Rockchip provided binaries for the firmware, even with Rockchip blobs, a more modern version of U-Boot will be much nicer to use.&lt;br /&gt;
&lt;br /&gt;
Mainline U-Boot contains good enough support for the RK3566 SoC used on the Quartz64 as of v2023.07 and have support for Quartz64 and SOQuartz as of v2023.10-rc2. Drivers for [https://patchwork.ozlabs.org/cover/1817577/ ethernet GMAC] and [https://patchwork.ozlabs.org/patch/1817295/ Motorcomm PHY] have been submitted for review.&lt;br /&gt;
&lt;br /&gt;
==== Things that could be done ====&lt;br /&gt;
&lt;br /&gt;
This list is non-exhaustive as we don't exactly know how much is missing&lt;br /&gt;
&lt;br /&gt;
* Port a basic VOP2 driver to get a framebuffer from u-boot&lt;br /&gt;
&lt;br /&gt;
==== List of Useful Resources for this Task ====&lt;br /&gt;
* Downstream Rockchip U-Boot repository with Quartz64 specific patches: https://gitlab.com/pgwipeout/u-boot-rockchip/-/tree/quartz64&lt;br /&gt;
* Mainline Rockchip custodian U-Boot repository: https://source.denx.de/u-boot/custodians/u-boot-rockchip&lt;br /&gt;
* U-Boot Mailing List: https://lists.denx.de/listinfo/u-boot&lt;br /&gt;
&lt;br /&gt;
=== eDP Driver Porting ===&lt;br /&gt;
&lt;br /&gt;
The eDP PHY driver and controller driver needs to be ported, brought into shape and submitted with proper commit attribution to the Rockchip authors.&lt;br /&gt;
&lt;br /&gt;
[[User:CounterPillow]] has experimentally ported stuff, but it's currently not working.&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel Config Options ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_I2S_TDM&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog and HDMI audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog audio on the Model A&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_STMMAC_ETH&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DWMAC_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet PHY for Model A, set this one to Y, m won't work out of the box if the generic PHY driver is y and binds first. Alternatively tell users in board-specific setup instructions to force including the &amp;lt;code&amp;gt;motorcomm&amp;lt;/code&amp;gt; module in initramfs if you set it to m.&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REALTEK_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet PHY for Model B&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_SDHCI_OF_DWCMSHC&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PCIE_ROCKCHIP_DW_HOST&amp;lt;/code&amp;gt;&lt;br /&gt;
** PCIe&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** PHY for PCIe/SATA/USB3&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DRM_PANFROST&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPU&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_SPDIF&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPDIF audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_DW_HDMI&amp;lt;/code&amp;gt;&lt;br /&gt;
** HDMI PHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI DSI DPHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
** Video output&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ARCH_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_USB2&amp;lt;/code&amp;gt;&lt;br /&gt;
** USB 2&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_RTC_DRV_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MFD_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Various things relating to the RK817 chip&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CHARGER_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** RK817 charger&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REGULATOR_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Voltage regulators&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PM_DOMAINS&amp;lt;/code&amp;gt;&lt;br /&gt;
** Power management domains&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_GPIO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PINCTRL_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO and general SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PWM_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** PWM support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IOMMU&amp;lt;/code&amp;gt;&lt;br /&gt;
** IOMMU support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_MBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
** Mailbox support (for communication with MCU)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_SARADC&amp;lt;/code&amp;gt;&lt;br /&gt;
** Analog-to-digital conversion support, for e.g. microphones&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_THERMAL&amp;lt;/code&amp;gt;&lt;br /&gt;
** Temperature sensor and thermal throttling support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SPI_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPI support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_VIDEO_HANTRO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Hardware video decoder support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IODOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support so your I/O pins have the right voltage&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Common clock support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI CSI DPHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_I2C_RK3X&amp;lt;/code&amp;gt;&lt;br /&gt;
** I2C support&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* pgwipeout's kernel tree&lt;br /&gt;
** https://gitlab.com/pgwipeout/linux-next/-/tree/quartz64-v5.15-rc1&lt;br /&gt;
* BSP based development effort for SPL/U-Boot and Linux&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp&lt;br /&gt;
* Image CI pipeline aimed at developers&lt;br /&gt;
** https://gitlab.com/pgwipeout/quartz64_ci/&lt;br /&gt;
* Rockchip U-Boot&lt;br /&gt;
** https://github.com/rockchip-linux/u-boot&lt;br /&gt;
* Downstream rockchip-linux kernel tree&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux&lt;br /&gt;
* Tianocore EDK II port for UEFI on Quartz64&lt;br /&gt;
** https://github.com/jaredmcneill/quartz64_uefi&lt;br /&gt;
* Mainline U-Boot Port by pgwipeout&lt;br /&gt;
** https://gitlab.com/pgwipeout/u-boot-quartz64&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* Rockchip-SoC Patchwork Page&lt;br /&gt;
** https://patchwork.kernel.org/project/linux-rockchip/list/&lt;br /&gt;
* Rockchip Kernel Mailing List Archive&lt;br /&gt;
** https://lore.kernel.org/linux-rockchip/&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Boot Order ====&lt;br /&gt;
The RK3566 boot ROM will search for a valid ID BLOCK in the following order on the support boot media:&lt;br /&gt;
&lt;br /&gt;
* SPI NOR flash&lt;br /&gt;
* SPI NAND flash&lt;br /&gt;
* eMMC&lt;br /&gt;
* SD-Card&lt;br /&gt;
&lt;br /&gt;
... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip&lt;br /&gt;
flash/boot tools.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader Flashing ====&lt;br /&gt;
&lt;br /&gt;
As per pgwipeout's [https://gitlab.com/pine64-org/quartz-bsp/u-boot/-/commit/12d102b86813378af08b086f3b9c13ed8010754c commit message]:&lt;br /&gt;
* Make a partition named &amp;lt;code&amp;gt;uboot&amp;lt;/code&amp;gt; as partition number 1 at 8 MiB to 16 MiB&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=idblock.bin of=/dev/''&amp;lt;mmc/sd&amp;gt;'' seek=64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=uboot.img of=/dev/''&amp;lt;mmc/sd&amp;gt;''1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== BSP Image Layout ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]][[Category:Rockchip RK3566]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=20538</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=20538"/>
		<updated>2023-08-17T22:43:21Z</updated>

		<summary type="html">&lt;p&gt;Diederik: /* Partially Working */ No longer consider Video Output buggy or Partially working&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the current status of software support for the [[Quartz64]] single-board computer, and provides links to resources to help prospective contributors get started. Information is kept current on a best-effort basis as various patches get accepted into the kernel.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&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;
! scope=&amp;quot;col&amp;quot; | Applies To&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Output&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;rockchipdrm/VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
As of 5.19-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/604be85547ce4d61b89292d2f9a78c721b778c16]&amp;lt;/sup&amp;gt;, Also featured in Phoronix Article&amp;lt;sup&amp;gt;[https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Rockchip-VOP2-Linux-5.19]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&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-edpphy-naneng&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/phy/rockchip/phy-rockchip-naneng-edp.c] and [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/commit/d7ad116fb30d11d110aeb880754cf27f34c45c40#7e8e2ef87e479c54539dc519c0b92d6b31727f8d_671_681] Coordinate any porting with Rockchip first&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;dw-mipi-dsi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/e18d9b093006d8abd53e1ce13c0d5a8d0fcd5f64]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot; rowspan=&amp;quot;3&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 1080p MPEG-2, VP8 and H.264. Mainline as of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5f6bfab6da6531238e899fdf29efd6d0185adc3e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&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;
| VDPU346 handling 4K H.265, H.264 and VP9&lt;br /&gt;
|&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;
| VDPU720 handling JPEG, [[User:CounterPillow]] is working on this&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;5&amp;quot; | [[Mainline Hardware Encoding|Video Encode]] &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;text-align:center; background:LightYellow;&amp;quot;|GStreamer only&lt;br /&gt;
| JPEG on VEPU121&lt;br /&gt;
| Hantro-based. Mainline as of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/6f1ae821a6c4aa9d5b8f437b27ec86fb569219fd]&amp;lt;/sup&amp;gt;&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.264 on VEPU121&lt;br /&gt;
| Hantro-based&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;
| VP8 on VEPU121&lt;br /&gt;
| Hantro-based&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.264 on VEPU540&lt;br /&gt;
| rkvenc-based&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 VEPU540&lt;br /&gt;
| rkvenc-based&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Audio &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-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/43b058698f723e3c2087af7069c0da082a3ecbe1]&amp;lt;/sup&amp;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;rockchip-spdif&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/dac825b6a6bdca41347e25f07354ad94fdc97445]&amp;lt;/sup&amp;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;rk817-codec&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
| Quartz64 Model A/B&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Bootloader&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://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TF-A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Merged&lt;br /&gt;
| &amp;lt;code&amp;gt;U-Boot&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[#Mainline_U-Boot_Work|See below]]. Quartz64 and SOQuartz as of v2023.10-rc2&amp;lt;sup&amp;gt;[https://source.denx.de/u-boot/u-boot/-/commit/4e619e8d4fd68095bc665a78f2651d8e478a4534]&amp;lt;/sup&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In progress&amp;lt;sup&amp;gt;[https://github.com/jaredmcneill/quartz64_uefi]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Tianocore EDK II&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;4&amp;quot; | Device Tree&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/b33a22a1e7c4248608e533fc4fa524258b3fae84]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A&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;
| Quartz64 Model B&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c37415f55bdadffe5b4c0e7981e9fc7e8b96beea]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model B&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;
| SOQuartz&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c466828fb3ba8cb7f5c3bf28766da9b70bf9745e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| SOQuartz&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;
| PineNote&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d449121e5e8addcee654250cec298c887ecafb32]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| PineNote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot;| Gigabit Ethernet&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;rk3566-gmac&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/3bb3d6b1c1957e88bfc5e77a4557f7e6ba761fe3]&amp;lt;/sup&amp;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;yt8511-phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/48e8c6f1612b3d2dccaea2285231def830cc5b8e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | IOMMU&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-iommu&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c55356c534aa651ccc3053ef2d5d8d810adacf5f]&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;gpio-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/936ee2675eee1faca0dcdfa79165c7990422e0fc]&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;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Thermal Regulation&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-thermal&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/4b14c055a6f644cbeb1156ba24647e92fe51ec69]&amp;lt;/sup&amp;gt;&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;pcie-dw-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0e898eb8df4e34c7b129452444eb7cef68a11f43]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Management&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-domains&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/1782c87b44a0b1a527f01a6a184677c58ccbf9c7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Voltage Control&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;rk3568-pmu-io-voltage-domain&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/28b05a64e47cbceebb8a5f3f643033148d5c06c3]&amp;lt;/sup&amp;gt;&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;spi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d74d99229f4d48f42d674f7a8a1137179efd67ac]&amp;lt;/sup&amp;gt;. Necessary device tree changes [https://patchwork.kernel.org/project/linux-rockchip/list/?series=586691 in review].&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Battery&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;rk817-charger&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/drivers/power/supply/rk817_charger.c?id=11cb8da0189b417392e2334ae967b0ba1f0d1be8]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A, Pinenote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Microphone&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-saradc&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7786da3b5ae167c17f35e22ba35e06006338c2f6]&amp;lt;/sup&amp;gt;. Headphone jack mic seems to connect to &amp;lt;code&amp;gt;SARADC_VIN2_HP_HOOK&amp;lt;/code&amp;gt;, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-usb2phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.17&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/phy/rockchip?h=v5.17-rc1&amp;amp;id=42b559727a45d79c811f493515eb9b7e56016421]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | e-Ink&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review (RFC)&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/20220413221916.50995-1-samuel@sholland.org/T/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| A DRM driver is available [https://github.com/smaeul/linux/commits/rk35/ebc-drm-v5 here]; also see [[RK3566 EBC Reverse-Engineering]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Combo PHY&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;naneng-combphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7160820d742a16313f7802e33c2956c19548e488]&amp;lt;/sup&amp;gt;. Still requires DTS changes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | RGA&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs fixing&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rga&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[User:CounterPillow]] experimentally enabled it&amp;lt;sup&amp;gt;[https://gist.github.com/CounterPillow/6bea809f15ada7ddd3a3d7a4994fdc4e]&amp;lt;/sup&amp;gt; in the device tree and ran gstreamer's v4l2convert through it to test, resulting in a completely garbled output.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Fan Controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &amp;lt;code&amp;gt;gp7101&amp;lt;/code&amp;gt;&lt;br /&gt;
| Someone should write a pwm driver for it so we can then use pwm-fan&lt;br /&gt;
| SOQuartz Blade&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | CSI Camera&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;rkisp&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/isp]&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;rockchip-inno-csidphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/29c99fb085ad53e6d5504d1f8d32e6673b9b3a2c]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | NPU&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &lt;br /&gt;
| Downstream version is a closed source SDK and [https://github.com/dieselnutjob/kernel-rk3566/tree/linux-4.19.210/drivers/rknpu open source kernel module rknpu]. Major undertaking to reimplement this as Linux does not (yet) appear to have a generic architecture for neural accelerators.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Crypto&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-crypto&amp;lt;/code&amp;gt; v2&lt;br /&gt;
| Downstream driver [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/crypto/rockchip] doesn't include a rk3568 compatible either, but the TRM shows that it seemingly matches.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | TRNG&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=699813]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rng&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | Wi-Fi&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;bes2600&amp;lt;/code&amp;gt;&lt;br /&gt;
| A downstream driver is available but it makes use of some custom Rockchip interfaces and is designed for older kernels, plans are being made to port it to DKMS.&lt;br /&gt;
| PineTab 2&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
| Quartz64 Model B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current Status ==&lt;br /&gt;
&lt;br /&gt;
The following sections give an overview over the current status of different parts of the board. Some parts are waiting on a driver to be written or ported, others only need various adjustments.&lt;br /&gt;
&lt;br /&gt;
According to pgwipeout, I/O device performance is within expected ranges now.&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
&lt;br /&gt;
* eMMC&lt;br /&gt;
* SDMMC0 (SD cards)&lt;br /&gt;
* GMAC (Gigabit Ethernet)&lt;br /&gt;
* USB 2.0&lt;br /&gt;
* SATA 2&lt;br /&gt;
* SATA 3&lt;br /&gt;
* UART&lt;br /&gt;
** UART 0 (Pi-bus)&lt;br /&gt;
** UART 1 (Bluetooth)&lt;br /&gt;
** UART 2 (Pi-bus, debug)&lt;br /&gt;
* Video Decode&lt;br /&gt;
** VP8&lt;br /&gt;
** H.264&lt;br /&gt;
* Video Encode&lt;br /&gt;
** JPEG (it's pretty bad)&lt;br /&gt;
* Battery&lt;br /&gt;
* GPU&lt;br /&gt;
* Audio&lt;br /&gt;
** Analog audio works&lt;br /&gt;
** SPDIF works&lt;br /&gt;
** HDMI works&lt;br /&gt;
* SPI &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
* I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
&lt;br /&gt;
=== Partially Working ===&lt;br /&gt;
&lt;br /&gt;
* PCI-Express Controller &amp;amp;mdash; everything but devices that need cache coherency (e.g. dGPUs) should work&lt;br /&gt;
** [[User:CounterPillow]] noticed some weirdness with NVMe devices disconnecting during heavy write operations, likely down due to power draw on one of the rails as the same sustained bandwidth could be achieved with a different PCIe device with no issue.&lt;br /&gt;
* SDMMC1 (Wi-Fi) &amp;amp;mdash; AP6256 working, BL602 needs some work to make it flash firmware&lt;br /&gt;
* [https://developer.arm.com/architectures/system-architectures/system-components/arm-generic-interrupt-controller GIC] &amp;amp;mdash; needs errata published by Rockchip to get upstream to add device-specific workarounds&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/CAMdYzYrQ5f-mv_VmTq_CRf9tR=j3mwRpKHNLmPFgCF9whsGFRw@mail.gmail.com/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Confirmed Broken ===&lt;br /&gt;
&lt;br /&gt;
* USB 3.0 (applies to Model A only) &amp;amp;mdash; only works with very short cables and depends on the device. This is due to a hardware design issue relating to the coupling capacitors needed for SATA, which shares the same lines as USB 3.0.&lt;br /&gt;
** Hardware design changes have been suggested to engineers, it's in their hands now.&lt;br /&gt;
* RGA &amp;amp;mdash; only works with memory &amp;amp;le; 4 GiB, because Rockchip didn't make the address registers larger. Oopsie.&lt;br /&gt;
&lt;br /&gt;
=== Needs Testing ===&lt;br /&gt;
&lt;br /&gt;
* E-Paper&lt;br /&gt;
* Microphone Input&lt;br /&gt;
* CSI &amp;amp;mdash; needs CIF driver&lt;br /&gt;
* eDP &amp;amp;mdash; needs PHY driver and controller driver&lt;br /&gt;
* DSI&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== ebc-dev Reverse Engineering and Development ===&lt;br /&gt;
&lt;br /&gt;
The [https://gitlab.com/pine64-org/quartz-bsp/linux-next/-/tree/rk356x-ebc-dev driver for the eInk panel] needs to both be reverse engineered and then rewritten as C. In its current form, it is mostly an assembly dump produced by gcc with debug symbols. See [[RK3566 EBC Reverse-Engineering]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Investigate MCU ===&lt;br /&gt;
&lt;br /&gt;
The RK3566 comes with an integrated RISC-V microcontroller (MCU). It communicates with the A55 host through the Mailbox system driven by the rockchip-mailbox driver. Since this MCU would be quite useful for things such as low power standby mode, investigating how it can be turned on and have firmware flashed to it should greatly enhance the power saving features of the PineNote.&lt;br /&gt;
&lt;br /&gt;
I (liamur) [https://github.com/liamhays/rk3566-mcu did some investigation] into the MCU and found that it is disabled by TF-A on suspend, and doesn't reside in a low-power part of the RK3566 anyway. It does however have access to most of the chip and could be used as (for example) a real-time coprocessor.&lt;br /&gt;
&lt;br /&gt;
=== Mainline U-Boot Work ===&lt;br /&gt;
&lt;br /&gt;
We currently use the &amp;quot;downstream&amp;quot; Rockchip U-Boot, which is based on an old version of U-Boot and contains vendor specific patches that have not undergone the same level of code review as they'd have done had they been submitted upstream.&lt;br /&gt;
&lt;br /&gt;
While the lack of ATF sources means that using mainline U-Boot would still require the use of Rockchip provided binaries for the firmware, even with Rockchip blobs, a more modern version of U-Boot will be much nicer to use.&lt;br /&gt;
&lt;br /&gt;
Mainline U-Boot contains good enough support for the RK3566 SoC used on the Quartz64 as of v2023.07 and have support for Quartz64 and SOQuartz as of v2023.10-rc2. Drivers for [https://patchwork.ozlabs.org/cover/1817577/ ethernet GMAC] and [https://patchwork.ozlabs.org/patch/1817295/ Motorcomm PHY] have been submitted for review.&lt;br /&gt;
&lt;br /&gt;
==== Things that could be done ====&lt;br /&gt;
&lt;br /&gt;
This list is non-exhaustive as we don't exactly know how much is missing&lt;br /&gt;
&lt;br /&gt;
* Port a basic VOP2 driver to get a framebuffer from u-boot&lt;br /&gt;
&lt;br /&gt;
==== List of Useful Resources for this Task ====&lt;br /&gt;
* Downstream Rockchip U-Boot repository with Quartz64 specific patches: https://gitlab.com/pgwipeout/u-boot-rockchip/-/tree/quartz64&lt;br /&gt;
* Mainline Rockchip custodian U-Boot repository: https://source.denx.de/u-boot/custodians/u-boot-rockchip&lt;br /&gt;
* U-Boot Mailing List: https://lists.denx.de/listinfo/u-boot&lt;br /&gt;
&lt;br /&gt;
=== eDP Driver Porting ===&lt;br /&gt;
&lt;br /&gt;
The eDP PHY driver and controller driver needs to be ported, brought into shape and submitted with proper commit attribution to the Rockchip authors.&lt;br /&gt;
&lt;br /&gt;
[[User:CounterPillow]] has experimentally ported stuff, but it's currently not working.&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel Config Options ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_I2S_TDM&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog and HDMI audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog audio on the Model A&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_STMMAC_ETH&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DWMAC_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet PHY for Model A, set this one to Y, m won't work out of the box if the generic PHY driver is y and binds first. Alternatively tell users in board-specific setup instructions to force including the &amp;lt;code&amp;gt;motorcomm&amp;lt;/code&amp;gt; module in initramfs if you set it to m.&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REALTEK_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet PHY for Model B&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_SDHCI_OF_DWCMSHC&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PCIE_ROCKCHIP_DW_HOST&amp;lt;/code&amp;gt;&lt;br /&gt;
** PCIe&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** PHY for PCIe/SATA/USB3&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DRM_PANFROST&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPU&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_SPDIF&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPDIF audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_DW_HDMI&amp;lt;/code&amp;gt;&lt;br /&gt;
** HDMI PHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI DSI DPHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
** Video output&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ARCH_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_USB2&amp;lt;/code&amp;gt;&lt;br /&gt;
** USB 2&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_RTC_DRV_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MFD_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Various things relating to the RK817 chip&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CHARGER_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** RK817 charger&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REGULATOR_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Voltage regulators&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PM_DOMAINS&amp;lt;/code&amp;gt;&lt;br /&gt;
** Power management domains&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_GPIO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PINCTRL_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO and general SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PWM_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** PWM support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IOMMU&amp;lt;/code&amp;gt;&lt;br /&gt;
** IOMMU support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_MBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
** Mailbox support (for communication with MCU)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_SARADC&amp;lt;/code&amp;gt;&lt;br /&gt;
** Analog-to-digital conversion support, for e.g. microphones&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_THERMAL&amp;lt;/code&amp;gt;&lt;br /&gt;
** Temperature sensor and thermal throttling support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SPI_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPI support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_VIDEO_HANTRO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Hardware video decoder support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IODOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support so your I/O pins have the right voltage&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Common clock support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI CSI DPHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_I2C_RK3X&amp;lt;/code&amp;gt;&lt;br /&gt;
** I2C support&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* pgwipeout's kernel tree&lt;br /&gt;
** https://gitlab.com/pgwipeout/linux-next/-/tree/quartz64-v5.15-rc1&lt;br /&gt;
* BSP based development effort for SPL/U-Boot and Linux&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp&lt;br /&gt;
* Image CI pipeline aimed at developers&lt;br /&gt;
** https://gitlab.com/pgwipeout/quartz64_ci/&lt;br /&gt;
* Rockchip U-Boot&lt;br /&gt;
** https://github.com/rockchip-linux/u-boot&lt;br /&gt;
* Downstream rockchip-linux kernel tree&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux&lt;br /&gt;
* Tianocore EDK II port for UEFI on Quartz64&lt;br /&gt;
** https://github.com/jaredmcneill/quartz64_uefi&lt;br /&gt;
* Mainline U-Boot Port by pgwipeout&lt;br /&gt;
** https://gitlab.com/pgwipeout/u-boot-quartz64&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* Rockchip-SoC Patchwork Page&lt;br /&gt;
** https://patchwork.kernel.org/project/linux-rockchip/list/&lt;br /&gt;
* Rockchip Kernel Mailing List Archive&lt;br /&gt;
** https://lore.kernel.org/linux-rockchip/&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Boot Order ====&lt;br /&gt;
The RK3566 boot ROM will search for a valid ID BLOCK in the following order on the support boot media:&lt;br /&gt;
&lt;br /&gt;
* SPI NOR flash&lt;br /&gt;
* SPI NAND flash&lt;br /&gt;
* eMMC&lt;br /&gt;
* SD-Card&lt;br /&gt;
&lt;br /&gt;
... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip&lt;br /&gt;
flash/boot tools.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader Flashing ====&lt;br /&gt;
&lt;br /&gt;
As per pgwipeout's [https://gitlab.com/pine64-org/quartz-bsp/u-boot/-/commit/12d102b86813378af08b086f3b9c13ed8010754c commit message]:&lt;br /&gt;
* Make a partition named &amp;lt;code&amp;gt;uboot&amp;lt;/code&amp;gt; as partition number 1 at 8 MiB to 16 MiB&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=idblock.bin of=/dev/''&amp;lt;mmc/sd&amp;gt;'' seek=64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=uboot.img of=/dev/''&amp;lt;mmc/sd&amp;gt;''1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== BSP Image Layout ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]][[Category:Rockchip RK3566]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineTab2&amp;diff=20168</id>
		<title>PineTab2</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineTab2&amp;diff=20168"/>
		<updated>2023-08-01T14:34:10Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Fix USB tether with Android and Selecting a USB WiFi adapter link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:PineTab2 Front.jpg|250px|thumb|right|The PineTab2 with the detachable keyboard attached]]&lt;br /&gt;
&lt;br /&gt;
The '''PineTab2''' is PINE64's successor to the original [[PineTab]] Linux tablet computer, featuring a faster processor and better availability. The tablet is available in two configurations, 4GB of RAM and 64GB of internal storage or 8GB of RAM and 128GB of internal storage. The tablet ships with a detachable keyboard that doubles as a protective cover.&lt;br /&gt;
&lt;br /&gt;
The tablet is designed around the Rockchip RK3566 processor, which features 4 energy-efficient Cortex-A55 64-bit ARM cores and enjoys good mainline Linux support. A similarly packaged RISC-V tablet is the [[PineTab-V]].&lt;br /&gt;
&lt;br /&gt;
Pre-orders started on the 13th of April 2023, with pricing starting at USD 159 for the 4GB/64GB version and USD 209 for the 8GB/128GB version. The PineTab2 began shipping on June 2, 2023.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
The PineTab2 box contains two smaller boxes.&lt;br /&gt;
&lt;br /&gt;
The first box includes:&lt;br /&gt;
&lt;br /&gt;
* the PineTab2, &lt;br /&gt;
* a short user guide, &lt;br /&gt;
* a power cable and &lt;br /&gt;
* the UART adapter. Note that the UART adapter is in the same package as the power cable in a second compartment and can be a bit hidden. &lt;br /&gt;
&lt;br /&gt;
The second box has the keyboard in it.&lt;br /&gt;
&lt;br /&gt;
=== First start ===&lt;br /&gt;
&lt;br /&gt;
The PineTab2 can be started by pressing and holding the power button for two seconds. The device is initialized at the first boot and will power-cycle while the partition table is populated.&lt;br /&gt;
&lt;br /&gt;
{{Info|If the initialization process is interrupted it might lead to a corrupted operating system installation. In that case reinstall the operating system as explained below.}}&lt;br /&gt;
&lt;br /&gt;
The PineTab2 ships with ''DanctNix Arch Linux'' and comes with a pre-set user and the default password &amp;lt;code&amp;gt;123456&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Default user&lt;br /&gt;
| &amp;lt;code&amp;gt;alarm / 123456&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can create a new user and set your own password after the initial boot. To do so, go to ''system settings'' -&amp;gt; ''users'' and create a new profile using your preferred name and password.&lt;br /&gt;
&lt;br /&gt;
=== Keyboard cover ===&lt;br /&gt;
&lt;br /&gt;
When connecting the keyboard to the Pinetab2 ensure that the camera and the golden pogo pin connectors are correctly aligned. &lt;br /&gt;
The external keyboard has 5 connection pins (the golden pins). four are standard USB connectors and one is used to detect that the keyboard is connected.&lt;br /&gt;
&lt;br /&gt;
The backlight can be changed with the key combination ''Pinekey + Ctrl (right)''.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
All operating systems for the PineTab2 are delivered by community developers and partner projects. Aside from the operating system that comes pre-installed on your device, you can install and run any other operating system available for the PineTab2. Most, if not all operating systems for the PineTab2 are open and free, such as Linux and BSD.&lt;br /&gt;
&lt;br /&gt;
Since most software issues will be release-specific, please see the [[PineTab2 Releases]] page for additional software related instructions, tips, and tricks.&lt;br /&gt;
&lt;br /&gt;
=== Releases ===&lt;br /&gt;
&lt;br /&gt;
The PineTab2 ships with ''Danctnix Arch Linux ARM''. The factory image can be found here:&lt;br /&gt;
&lt;br /&gt;
* https://echo.danctnix.org:7269/danctnix-factory-image-20230527.img.xz (1.5 GB)&lt;br /&gt;
&lt;br /&gt;
{{Info|The factory image is flashed to a microSD card and it will overwrite the eMMC installation after booting.}}&lt;br /&gt;
&lt;br /&gt;
There are currently no stable releases. All releases for the PineTab2 will be listed under [[PineTab2 Releases]] as they're released. Your contributions are wanted!&lt;br /&gt;
&lt;br /&gt;
=== Installation instructions ===&lt;br /&gt;
&lt;br /&gt;
The PineTab2 is capable of running different operating systems from the internal flash memory (eMMC) and from microSD card.&lt;br /&gt;
&lt;br /&gt;
'''Preparing the microSD card'''&lt;br /&gt;
&lt;br /&gt;
To write an operating system to the microSD card (typically called &amp;quot;flashing&amp;quot; in the community), you need to first download a compatible image from the [[#Releases|releases]] section.&lt;br /&gt;
&lt;br /&gt;
Next you need to decompress the downloaded image. The images are typically compressed in an archive format such as ''xz'' to reduce the download size. If you are using a graphical tool such as ''balenaEtcher'' or ''Gnome Disks'' it will handle the decompression of the image in the flashing step automatically.&lt;br /&gt;
&lt;br /&gt;
Further you need to flash the image to the microSD card. This can be done using various tools, for example ''balenaEtcher'' (recommended for new users), ''Gnome Disks'' or command-line tools such as ''cp'' and ''dd''. Insert the microSD card in a microSD card reader connected to your computer and then choose a tool of your liking.&lt;br /&gt;
&lt;br /&gt;
Graphical applications:&lt;br /&gt;
&lt;br /&gt;
* '''balenaEtcher''' (Microsoft Windows, macOS, Linux): Click on ''Flash from file'' and select the image. Then select the microSD card target device and click on ''Flash!''.&lt;br /&gt;
&lt;br /&gt;
* '''Gnome Disks''' (Linux): Select the microSD card target device on the left side in the ''Disks'' list. Then select the three dot menu on the top right and click on ''Restore Disk Image...''. Select the image, verify the correct device is selected and then click on ''Start Restoring...''.&lt;br /&gt;
&lt;br /&gt;
Command-line tools:&lt;br /&gt;
&lt;br /&gt;
* '''cp''': &amp;lt;code&amp;gt;sudo cp '''IMAGE.img''' /dev/'''[DEVICE]'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''dd''': &amp;lt;code&amp;gt;sudo dd if='''IMAGE.img''' of=/dev/'''[DEVICE]''' bs=1M status=progress conv=fsync&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Info|Make sure to replace '''IMAGE.img''' and '''[DEVICE]''' with the filename of the image (double check if it is decompressed and has the file extension ''.img'') and the device name. You can use the command &amp;lt;code&amp;gt;lsblk&amp;lt;/code&amp;gt; to find the device name. Make sure to flash to the whole device instead of partition 1 and that you're NOT selecting ''/dev/sda1'' or ''/dev/mmcblk0p1'' as target. Be very careful to select the correct device, as the tools can overwrite your data when the wrong device is selected.}}&lt;br /&gt;
&lt;br /&gt;
Then insert the microSD card into the PineTab2. &lt;br /&gt;
&lt;br /&gt;
[[File:PineTab2 USB UARTv2.jpg|thumb|right|400px|Using the USB UART adapter can be required in some cases as explained in the info box about the boot order. The adapter is shipped with the PineTab2 in the box which is also containing the charging cable. The switch to disable the eMMC and SPI is located on the top right of the image.]]&lt;br /&gt;
&lt;br /&gt;
{{Hint|'''Note regarding the boot order:''' The SPI and the internal memory (eMMC) have a higher boot priority than the microSD card. The pre-installed bootloader on the internal memory (eMMC) tries to boot from the microSD card first. '''In some cases''' it can be required to bypass the bootloader, for example if the bootloader is corrupted or was overwritten by a bootloader with varying settings.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To force the device to boot from the microSD card, the eMMC and the SPI can be disabled by using the debug UART adapter shipped with the device in the box also containing the charging cable. Set the ''SD BOOT MASKROM'' switch on the adapter to the position ''ON'' and plug it into the USB/PD charging port. Then power on the tablet and '''unplug the debug board or set the switch to the position ''OFF'' again''' when the factory image is started, otherwise the factory image won't find the eMMC.}}&lt;br /&gt;
&lt;br /&gt;
Power on the device with the microSD card inserted (and optionally with the USB UART adapter inserted and the bypass switch set to ''ON'' depending on the software situation, see the info box above). It should now boot the new operating system from the microSD card.&lt;br /&gt;
&lt;br /&gt;
'''Something is not working?''' Please join the [[Main_Page#Chat_Platforms|PineTab channel in the community chat]], the community is always happy to help. In the section [[#Connecting the UART adapter]] you can find information about how to connect the USB UART adapter and how to retrieve the boot logs if the device is not booting properly even after the above procudere.&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
&lt;br /&gt;
[[File:RK3566_icon.png|right]]&lt;br /&gt;
[[File:Pinetab2-side.jpeg|400px|right]]&lt;br /&gt;
* '''SoC:''' Rockchip RK3566&lt;br /&gt;
* '''CPU:''' 4x ARM Cortex-A55 @ 1.8 GHz&lt;br /&gt;
** 32KB L1 Instruction Cache and 32KB L1 Data Cache per core&lt;br /&gt;
** 512KB unified system L3 cache&lt;br /&gt;
** ARMv8 Cryptography Extensions&lt;br /&gt;
* '''GPU:''' Mali-G52 MP2 @ 800 MHz&lt;br /&gt;
** Supported by the open source 'Panfrost' driver in Linux and Mesa&lt;br /&gt;
** Supports OpenGL 3.1 and OpenGL ES 3.1 with many newer extensions&lt;br /&gt;
* '''NPU:''' 0.8 TOPS Neural Processing Unit&lt;br /&gt;
* '''RAM:''' 4GB or 8GB LPDDR4&lt;br /&gt;
* '''Storage:'''&lt;br /&gt;
** 64GB or 128GB internal eMMC ([https://www.szyuda88.com/product-77313-276594.html SiliconGo SGM8 100C-S36BCG]; eMMC 5.1, up o 400MB/s)&lt;br /&gt;
** 1x MicroSD slot&lt;br /&gt;
* '''Display:''' 10.1&amp;quot; IPS LCD Resolution 1280x800&lt;br /&gt;
* '''Cameras:'''&lt;br /&gt;
** Front: 2Mpx, chipset: Galaxycore GC02M2&lt;br /&gt;
** Rear: 5Mpx, chipset: Omnivision OV5648&lt;br /&gt;
* '''Battery:''' 6000 mAh (22.2Wh)&lt;br /&gt;
* '''Buttons:''' Power, volume up, volume down&lt;br /&gt;
* '''Network:'''&lt;br /&gt;
** Wi-Fi : BES2600&lt;br /&gt;
** Bluetooth : BES2600&lt;br /&gt;
* '''I/O:'''&lt;br /&gt;
** 1x USB-C 3.0 (top, host mode only; power output up to 680mA)&lt;br /&gt;
** 1x USB-C 2.0 + PD (bottom, device mode by default; power input)&lt;br /&gt;
** 1x MicroHDMI&lt;br /&gt;
** 1x 4 pole 3.5mm audio jack (microphone right) and headphone detection&lt;br /&gt;
** 2x speakers + microphone (microphone left)&lt;br /&gt;
** 1x 5 pin (USB 2.0; &amp;lt;=680mA) Pogo connector for keyboard&lt;br /&gt;
** (PCIe on PCB as a flat flex ribbon connector, no room for M.2 NVMe drives in case)&lt;br /&gt;
* '''Sensors:'''&lt;br /&gt;
** Accelerometer: Silan SC7A20&lt;br /&gt;
** Ambient Light &amp;amp; Proximity Sensor&lt;br /&gt;
* '''Multimedia:'''&lt;br /&gt;
** rkdjpeg: 1080p120 JPEG decode&lt;br /&gt;
*** no driver in mainline yet&lt;br /&gt;
** hantro: JPEG/VP8/H.264 encode, 1080p MPEG-2/H.263/VP8/H.264 AVC decode&lt;br /&gt;
*** mainline driver does not yet support all codecs/functions&lt;br /&gt;
*** see [[Mainline Hardware Decoding]] and [[Mainline Hardware Encoding]]&lt;br /&gt;
** rkvdec2: 4K H.264 AVC Main10 L5.1/H.265 HEVC Main10 L5.1/VP9 Profile 0 and 2 L5.1 decode&lt;br /&gt;
*** no driver in mainline yet&lt;br /&gt;
** rkvenc2: 4K H.264 AVC/H.265 HEVC encode&lt;br /&gt;
*** no driver in mainline yet&lt;br /&gt;
* '''Build:''' Metal and Plastic&lt;br /&gt;
* '''Dimensions:''' 242x161x9mm&lt;br /&gt;
* '''Weight:''' 538g&lt;br /&gt;
* '''Misc:'''&lt;br /&gt;
** Protective cover with keyboard&lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
&lt;br /&gt;
{{SeeMainArticle|Quartz64 Development}}&lt;br /&gt;
&lt;br /&gt;
Linux mainline is already quite far along for the device, as the SoC is the same as is used in the Quartz64 line of devices. Some minor pinetab2-specific adjustments can be found [https://github.com/TuxThePenguin0/linux/tree/device/pine64-pinetab2_stable here] Check the main article for the big picture; PineTab2 specific issues are listed here.&lt;br /&gt;
&lt;br /&gt;
=== Known Issues ===&lt;br /&gt;
&lt;br /&gt;
* The display panel driver is in PineTab2's kernel fork, and needs to be submitted to upstream.&lt;br /&gt;
* The [https://gitlab.com/TuxThePenguin0/bes2600 BES2600 Wi-Fi driver] needs major cleanup and bugfixing (at the moment it often causes system crashes). This is a priority, but for now, you can [[PineTab2_FAQ#Performing_USB_Tethering_with_an_Android_Phone|USB tether a phone]] or [[PineTab2_FAQ#Selecting_a_USB_WIFI_Adapter|use a supported WI-FI dongle]].&lt;br /&gt;
* The BES2600 Bluetooth driver needs to be implemented.&lt;br /&gt;
* The Camera drivers needs to be ported ([https://github.com/rockchip-linux/kernel/blob/develop-4.19/drivers/media/i2c/gc02m2.c gc02m2], [https://elixir.bootlin.com/linux/latest/source/drivers/media/i2c/ov5648.c ov5648]), Rockchip CSI/ISP driver needs to be extended to handle 2 lanes.&lt;br /&gt;
* Suspend does not currently work reliably due to a driver issue. It is therefore disabled in the factory image. Caveat Emptor if you chose to unmask the feature prior to it being fixed.&lt;br /&gt;
&lt;br /&gt;
=== Connecting the UART adapter ===&lt;br /&gt;
&lt;br /&gt;
The USB-C UART adapter can be connected to the PineTab2 to debug boot issues at the early boot:&lt;br /&gt;
&lt;br /&gt;
* Plug the adapter face-up in the USB-C port furthest away from the power button. If all the lights are lit, you have the wrong port: only the green light should be lit when you first plug it in.&lt;br /&gt;
* Plug USB-C cable into the port on the adapter marked &amp;quot;DEBUG&amp;quot;&lt;br /&gt;
* Open a terminal window&lt;br /&gt;
* Install ''minicom'' or ''screen'' via your distribution's package manager, if you don't have it installed already&lt;br /&gt;
* Connect via minicom using &amp;lt;code&amp;gt;sudo minicom -D /dev/ttyUSB0 -b 1500000&amp;lt;/code&amp;gt; or via screen using &amp;lt;code&amp;gt;sudo screen /dev/ttyUSB0 1500000&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ubuntu-based distro users may encounter the error, &amp;quot;cannot open /dev/ttyUSB0: No such file or directory&amp;quot;.  If this occurs, check the output of &amp;lt;code&amp;gt;sudo dmesg --follow&amp;lt;/code&amp;gt; and unplug/replug the USB to look for any errors.  If you see an error like, &amp;quot;usb 1-1: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1&amp;quot;, then the brltty service is likely conflicting with this device.  Brltty provides access to blind users who use a braille display: if you do not need this service, try disabling it using these commands:&lt;br /&gt;
*** &amp;lt;code&amp;gt; sudo systemctl stop brltty-udev.service&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt; sudo systemctl mask brltty-udev.service&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt; sudo systemctl stop brltty.service&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt; sudo systemctl mask brltty.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Board information, schematics and certifications ==&lt;br /&gt;
&lt;br /&gt;
[[File:PPineTab2-pcb.jpg|thumb|right|PineTab2 Board]]&lt;br /&gt;
&lt;br /&gt;
PineTab2 mainboard schematic:&lt;br /&gt;
&lt;br /&gt;
* [https://files.pine64.org/doc/PineTab/PineTab2_V2_schematic-20230417.pdf PineTab2 mainboard Released Schematic-20230417 ver 2.0]&lt;br /&gt;
&lt;br /&gt;
PineTab2 certifications:&lt;br /&gt;
* [https://files.pine64.org/doc/cert/Pinetab2%20FCC-SDOC%20Certificate-LCSA040323223E.pdf PineTab2 FCC Certificate]&lt;br /&gt;
* [https://files.pine64.org/doc/cert/Pinetab2%20CE%20RED%20Certificate-LCSA040323224E.pdf PineTab2 CE RED Certificate]&lt;br /&gt;
* [https://files.pine64.org/doc/cert/PineTab2%20CE%20EMC%20Certificate-LCSA040323225E.pdf PineTab2 CE EMC Certificate]&lt;br /&gt;
* [https://files.pine64.org/doc/cert/PineTab2%20ROHS%20Report-LCSA040323221R.pdf PineTab2 ROHS Test Report]&lt;br /&gt;
* [https://files.pine64.org/doc/cert/PineTab2%20Keyboard%20CE%20EMC%20Certificate-LCSA062623001E.pdf PineTab2/PineTab-V Detached Keyboard CE EMMC Certificate]&lt;br /&gt;
&lt;br /&gt;
PineTab2 disassembly guide:&lt;br /&gt;
* [[file:PineTab2_display_panel_disassembly_guide.pdf]]&lt;br /&gt;
* Note: this is a very delicate operation esp. around the corners of the screen. Several (even experienced) users ended up damaging the screen.&lt;br /&gt;
&lt;br /&gt;
== Datasheets for Components and Peripherals ==&lt;br /&gt;
&lt;br /&gt;
Rockchip RK3566 SoC information:&lt;br /&gt;
&lt;br /&gt;
* [https://files.pine64.org/doc/quartz64/Rockchip%20RK3566%20Datasheet%20V1.0-20201210.pdf Rockchip RK3566 ver 1.0 datasheet]&lt;br /&gt;
* [https://opensource.rock-chips.com/images/2/26/Rockchip_RK3568_TRM_Part1_V1.3-20220930P.PDF Rockchip RK3566 and RK3568 TRM (Technical Reference Manual)]&lt;br /&gt;
&lt;br /&gt;
== Tutorials and Frequently Asked Questions ==&lt;br /&gt;
Please see the [[PineTab2 FAQ]] page for tutorials and frequently asked questions.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.pine64.org/2022/12/15/december-update-merry-christmas-and-happy-new-pinetab/ December 2022 Community Update]&lt;br /&gt;
* [https://www.pine64.org/2023/03/01/february-update-things-are-taking-shape/ February 2023 Community Update]&lt;br /&gt;
&lt;br /&gt;
[[Category:Rockchip RK3566]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development/Building_Kernel&amp;diff=18396</id>
		<title>PineNote Development/Building Kernel</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development/Building_Kernel&amp;diff=18396"/>
		<updated>2023-03-03T21:58:34Z</updated>

		<summary type="html">&lt;p&gt;Diederik: /* Available Kernel Repositories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains information on how to build a linux kernel for the [https://wiki.pine64.org/wiki/PineNote PineNote].&lt;br /&gt;
&lt;br /&gt;
= Available Kernel Repositories =&lt;br /&gt;
&lt;br /&gt;
The following (incomplete?) PineNote-specific kernel repositories are available:&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/linux/ (based mainly on the repository from smaeul, with additional patches pulled in from other sources, Debian packages available)&lt;br /&gt;
* https://gitlab.com/pgwipeout/linux-next/&lt;br /&gt;
* https://github.com/smaeul/linux/tree/rk35/pinenote-next&lt;br /&gt;
&lt;br /&gt;
= Building the kernel =&lt;br /&gt;
&lt;br /&gt;
{{Info|These following instructions need to be cleaned up and updated, and OS-specific information and tweaks should be moved elsewhere}}&lt;br /&gt;
&lt;br /&gt;
After following [https://github.com/DorianRudolph/pinenotes#starter-guide Dorian's directions] to get Arch installed you've seen someone [https://github.com/m-weigand/mw_pinenote_misc/blob/main/videos/20220808_bw_dither_mode_picture_doom_video_small.mp4 playing DOOM]  and you want to learn how to get the features that enable that kind of performance. To get your PN running this smoothly, we'll need to build our own kernel. There are two kernel efforts underway right now:&lt;br /&gt;
&lt;br /&gt;
# pgwipeout: https://gitlab.com/pgwipeout/linux-next&lt;br /&gt;
# smaeul: https://github.com/smaeul/linux/tree/rk35/pinenote-next&lt;br /&gt;
&lt;br /&gt;
We'll be using smaeul's kernel + some additional patches provided by DorianRudolph, pgwipeout, Maximilian Weigand, occam_razor, and hrdl. Thanks so much to them, and all the other users who have worked on piecing together drivers, twiddling configs, answering questions, and sharing their work in other ways. Brava!&lt;br /&gt;
&lt;br /&gt;
Perhaps the main component of the kernel is the DRM driver. You can read more about the driver by reading [https://lore.kernel.org/linux-rockchip/20220413221916.50995-1-samuel@sholland.org/T/ Smaeul's RFC].&lt;br /&gt;
&lt;br /&gt;
=== A small warning ===&lt;br /&gt;
&lt;br /&gt;
This guide is completely based off of the scripts provided by Maximilian. We'll be cloning and running them, but he owns them and he -- or others -- might change them. It's smart to have a look at what's going on, check when this page was last updated vs when his scripts were last updated, etc. Be nimble!&lt;br /&gt;
&lt;br /&gt;
Additionally, as Maximilian warns [https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches here], these changes are all experimental and may damage your panel. &lt;br /&gt;
&lt;br /&gt;
{{info|If anyone reading this has recommended reading for how we can understand what may damage our panels (IE is the risk in fast updates? The types of updates? something more complicated?), please add it here!}}&lt;br /&gt;
&lt;br /&gt;
== What you should have already done ==&lt;br /&gt;
&lt;br /&gt;
It is assumed you've already got an operating system installed on your Pinenote other than the stock Android. Doing this isn't trivial, but it is well understood - you will be following the footsteps of many others. Dorian Rudolph made a guide for doing this, available [https://github.com/DorianRudolph/pinenotes#starter-guide here].&lt;br /&gt;
&lt;br /&gt;
== What do you need to know? ==&lt;br /&gt;
&lt;br /&gt;
If you followed Dorian's guide to get here and felt semi-comfortable, you'll be fine. This is no more complicated than that. If you are intimidated, that's okay! I'll still encourage you to try :) you will learn a lot, just be patient and don't put any data on your PineNote that you wouldn't be okay losing. If you run into trouble, ask for help in the [https://discord.com/invite/pine64 Discord]/[https://matrix.to/#/#pinenote:matrix.org Matrix]. Please try to solve problems on your own first, and then ask for help -- if nobody replies, please be patient and ask again soon.&lt;br /&gt;
&lt;br /&gt;
== Steps to build ==&lt;br /&gt;
&lt;br /&gt;
1. Clone Maximilian's scripts:&lt;br /&gt;
&lt;br /&gt;
 $ git clone https://github.com/m-weigand/mw_pinenote_misc.git&lt;br /&gt;
&lt;br /&gt;
2. Make a separate directory for patching the kernel. Then run Maximilian's ''clone_and_prepare_git.sh''. This will clone smaeul's kernel and a number of patches. Read the script to see which patches it is using. Feel free to open the patches too -- it's helpful to get a slim idea of what's going on, if only looking at the commit messages in them:&lt;br /&gt;
&lt;br /&gt;
 $ cd ../&lt;br /&gt;
 $ sh mw_pinenote_misc/custom_kernel/clone_and_prepare_git.sh&lt;br /&gt;
&lt;br /&gt;
3. Compile the kernel:&lt;br /&gt;
&lt;br /&gt;
 $ sh ./mw_pinenote_misc/custom_kernel/compile.sh&lt;br /&gt;
&lt;br /&gt;
4. Next we want to perform the work captured in '''install_to_pn.sh''', but the work may vary slightly from person to person. As long as you put them somewhere and configure your '''extlinux.conf''' to point at it, things will be okay. Looking at '''install_to_pn.sh''', we can see that there are three pieces to installing the kernel: the kernel image (called ''Image''), the device tree (''rk3566-pinenote-v1.2.dtb''), and the modules. All of these files have been compiled and placed into the '''linux/pack''' folder. The easiest way to send these over is by using ''scp'' or ''rsync'' - read the script and decide how you would like to get your files in the correct location. You may need to install ''rsync'' on your PineNote if it doesn't already have it.&lt;br /&gt;
&lt;br /&gt;
5. DTB was installed like this: &amp;lt;code&amp;gt;$ scp rk3566-pinenote-v1.2.dtb root@pinenote:/boot/dtbs/rockchip/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. After installing the DTB as above, the file '''/boot/extlinux/extlinux.conf''' may be updated to point to this new file&lt;br /&gt;
&lt;br /&gt;
7. (Perhaps not necessary?) The last step is to generate a new initrd image (see [https://en.wikipedia.org/wiki/Initial_ramdisk Wikipedia] for an explanation about initial ramdisk). This is done on the PineNote itself. Send Maximilian's installation script over and run it. Then place the generated image (from the last step of the shell script) into your boot partition and update '''extlinux.conf''' if needed to point at this new file.  &lt;br /&gt;
&lt;br /&gt;
 $ scp initrd/gen_uboot_image.sh root@pinenote:/root # Do this part on local to put script on PN&lt;br /&gt;
 $ ssh root@pinenote # Or use UART, the dongle + picocom, and change to root&lt;br /&gt;
 $ cd /root&lt;br /&gt;
 $ ./gen_uboot_image.sh&lt;br /&gt;
 $ mv initrd.img /boot/initrd.img&lt;br /&gt;
 $ vim /boot/extlinux/extlinux.conf # Update this to reference this new initrd image&lt;br /&gt;
&lt;br /&gt;
8. At this point your kernel is in place! However, there are a few more steps you may need to complete to ensure the display and networking continue to work:&lt;br /&gt;
* For display, you may need to change '''/lib/firmware/waveform.bin''' to '''/lib/firmware/rockchip/ebc.wbf''' (TODO: is this a difference between PG and smaeul's kernel or a patch?)&lt;br /&gt;
* For networking, you may need to change '''/lib/firmware/pinenote.bin''' to '''/lib/firmware/pinenote-v1.2.bin'''&lt;br /&gt;
&lt;br /&gt;
9. This part technically isn't kernel specific, but we need to install a patched version of Mesa. If you are running an Arch based system, you're in luck! occam_razor provides prebuilt patched packages (say that 5 times fast) [https://github.com/0cc4m/pinenote-misc/releases here]. Simply extract these files, send them to PN, and install them using the package manager. You can also patch it yourself by looking at Maximilian's [https://github.com/m-weigand/mw_pinenote_misc/blob/main/compile_mesa.sh compile_mesa.sh]. &lt;br /&gt;
&lt;br /&gt;
{{Info|If you frequently update your system with ''pacman -Syu'', you will end up updating these packages and losing the patches. Add this line to your &amp;lt;code&amp;gt;/etc/pacman.conf&amp;lt;/code&amp;gt; to prevent them from being updated: &amp;lt;pre&amp;gt;IgnorePkg = libva-mesa-driver mesa mesa-debug mesa-vdpau opencl-mesa vulkan-mesa-layers vulkan-broadcom vulkan-panfrost vulkan-radeon vulkan-swrast&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
10. To ensure the GPU stays on, we need to use Maximilian's [https://github.com/m-weigand/mw_pinenote_misc/blob/main/systemd/mweigand_eglinfo.service mweigand_eglinfo.service]. The ''Readme.md'' in that same directory has instructions for how to install this, but basically we need to copy it to '''/etc/systemd/system/''', run &amp;lt;code&amp;gt;sudo systemctl daemon-reload&amp;lt;/code&amp;gt; to make sure systemd knows it exists, then execute &amp;lt;code&amp;gt;sudo systemctl enable mweigand_eglinfo.service&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Next steps =&lt;br /&gt;
== Configuring the driver ==&lt;br /&gt;
The driver has several options that can improve performance. These can be read about [https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#new-features-as-of-2022august08 here].  &amp;lt;code&amp;gt;rockchip_ebc.bw_mode=1 rockchip_ebc.default_waveform=1 rockchip_ebc.refresh_threshold=30 rockchip_ebc.auto_refresh=1&amp;lt;/code&amp;gt; may be used to make the image lower quality, but much faster to update. The auto_refresh setting is also essential to clear ghosting which will otherwise accrue on screen. The ''APPEND'' line in the '''extlinux.conf''' might be added to make sure they are applied on boot.&lt;br /&gt;
&lt;br /&gt;
== Fixing suspend ==&lt;br /&gt;
If you're using a logind system, edit your '''/etc/systemd/logind.conf''' config. More information on what to do [https://wiki.archlinux.org/title/Power_management#ACPI_event in Arch's documentation].&lt;br /&gt;
&lt;br /&gt;
== Configuring your apps ==&lt;br /&gt;
See [https://wiki.pine64.org/wiki/PineNote_Development/Apps this page].&lt;br /&gt;
&lt;br /&gt;
== Booting Linux instead of Android ==&lt;br /&gt;
[[PineNote Development/Booting Linux]]&lt;br /&gt;
&lt;br /&gt;
== Fixing Bluetooth ==&lt;br /&gt;
See [[PineNote Development/Software Tweaks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineNote]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=QuartzPro64_Development&amp;diff=18249</id>
		<title>QuartzPro64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=QuartzPro64_Development&amp;diff=18249"/>
		<updated>2023-02-25T23:40:53Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Update link to v4 of &amp;quot;AV1 stateless decoder for RK3588&amp;quot; patch series&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:LightYellow; text-align:center;&amp;quot;|In review&amp;lt;sup&amp;gt;[https://patchwork.kernel.org/project/linux-rockchip/list/?series=721724]&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;
| Collabora is working 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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c619bd4268ff9895760dab303b4eb15ed3d0f7e9]&amp;lt;/sup&amp;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 (8 cores: 4x A76@2.4GHz + 4x A55@1.8GHz)&lt;br /&gt;
* Mali G610MC4 GPU (4x Valhalla cores)&lt;br /&gt;
* 16 GB LPDDR4X (SK hynix)&lt;br /&gt;
* 64 GB eMMC (soldered)&lt;br /&gt;
* 1x USB-C (with video-alt mode)&lt;br /&gt;
* 1x USB-C (FTDI debug UART)&lt;br /&gt;
* 1x USB 3.0&lt;br /&gt;
* 2x USB 2.0&lt;br /&gt;
* 1x HDMI in&lt;br /&gt;
* 2x HDMI out&lt;br /&gt;
* 1x PCIe 3.0 slot (open-ended)&lt;br /&gt;
* 1x SD / TF card slot&lt;br /&gt;
* 2x SATA ports&lt;br /&gt;
* 2x Gigabit ethernet&lt;br /&gt;
* 1x WiFi &amp;amp; BT Module&lt;br /&gt;
* 2x SMA Antenna&lt;br /&gt;
* 2x MIPI DPHY&lt;br /&gt;
* 1x MIPI D/C PHY&lt;br /&gt;
* 1x MIPI CSI&lt;br /&gt;
* 1x Fan header&lt;br /&gt;
* 1x RTC battery socket&lt;br /&gt;
* 1x MIC (soldered)&lt;br /&gt;
* 1x audio output 3.5mm jack&lt;br /&gt;
* Power in via DC 12V&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 QP64 board to another computer with a USB-A-to-C cable.&lt;br /&gt;
&lt;br /&gt;
It will show up as a FT232 USB Serial adapter in &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ lsusb&lt;br /&gt;
[...]&lt;br /&gt;
Bus 005 Device 027: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Baud rate is 1.5 mbauds or 1500000.&lt;br /&gt;
&lt;br /&gt;
Ensure you have the driver module loaded:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# modprobe ftdi_sio&lt;br /&gt;
# lsmod | grep ftdi_sio&lt;br /&gt;
ftdi_sio               61440  0&lt;br /&gt;
usbserial              53248  1 ftdi_sio&lt;br /&gt;
usbcore               290816  7 ftdi_sio,usbserial,xhci_hcd,usbhid,usbkbd,usbmouse,xhci_pci&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the above is not working, check the required driver is supported by your kernel, using one of the following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ zgrep FTDI_SIO /proc/config.gz&lt;br /&gt;
CONFIG_USB_SERIAL_FTDI_SIO=m&lt;br /&gt;
$ grep FTDI_SIO &amp;quot;/boot/config-$(uname -r)&amp;quot;&lt;br /&gt;
CONFIG_USB_SERIAL_FTDI_SIO=m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the &amp;lt;code&amp;gt;dmesg&amp;lt;/code&amp;gt; command, 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 from the QP64 with, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
screen /dev/ttyUSB0 1500000&lt;br /&gt;
&amp;lt;/pre&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 reported working (on the matrix channel) with latest neggles kernel.&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 unbricking informations (for example: can the SPI be rewritten with rkdeveloptool)&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? (see below, in [[QuartzPro64_Development#Kernel|Resources]])&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 neggles / 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 (SRE) 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]] [[Category:QuartzPro64]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=ROCKPro64_Software_Releases&amp;diff=17185</id>
		<title>ROCKPro64 Software Releases</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=ROCKPro64_Software_Releases&amp;diff=17185"/>
		<updated>2023-02-19T14:34:32Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Fix LibreELEC download link (and fix LE capitalization)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of all available releases and tools for the [[ROCKPro64]] in alphabetical order.&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
=== AOSC ===&lt;br /&gt;
[[File:aosc.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''AOSC OS''' is a general purpose Linux distribution that strives to simplify user experience and improve free and open source software for day-to-day productivity. Originally AnthonOS (an OpenSUSE derivative built with SUSE Studio), then remade as a Debian derivative with customized KDE 4 UI and CJK support. To learn more about AOSC, please visit the official [https://aosc.io/ AOSC website]&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* https://aosc.io/downloads/ (supports the microSD card and eMMC, 8GB or more)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Default user&lt;br /&gt;
| &amp;lt;code&amp;gt;aosc/anthon&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Armbian ===&lt;br /&gt;
[[File:armbian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Armbian''' is a Linux distribution designed for ARM boards. They are usually Debian or Ubuntu flavored. To find out more about Armbian and available options please visit their [https://www.armbian.com/rockpro64/ site]. If you are booting from a Micro SD card, then both Linux kernel versions will work. If you are trying to boot from an eMMC module then the 4.4.y will work, but the newer 5.10.y will not.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* https://dl.armbian.com/rockpro64/archive/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Batocera Linux ===&lt;br /&gt;
[[File:batocera.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Batocera Linux''' is an open-source and completely free retro-gaming distribution that can be copied to a USB stick or an SD card with the aim of turning any computer/nano computer into a gaming console during a game or permanently. Visit the project's website here (https://batocera.org/). You can follow the ongoing discussion about batocera.linux on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=7084)&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* https://batocera.org/download&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Debian ===&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Debian''' is an operating system and a distribution of free software. See the forum thread [https://forum.pine64.org/showthread.php?tid=9744 here].&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/ Debian 11 Bullseye] (recommended)&lt;br /&gt;
* [https://deb.debian.org/debian/dists/bookworm/main/installer-arm64/current/images/netboot/SD-card-images/ Debian 12 Bookworm]&lt;br /&gt;
* [https://d-i.debian.org/daily-images/arm64/ Daily netboot images]&lt;br /&gt;
&lt;br /&gt;
Instructions:&lt;br /&gt;
* Download: &amp;lt;code&amp;gt;firmware.rockpro64-rk3399.img.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
* Download: &amp;lt;code&amp;gt;partition.img.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
* Create the disk image:&lt;br /&gt;
** For Linux: &amp;lt;code&amp;gt;zcat firmware.rockpro64-rk3399.img.gz partition.img.gz &amp;gt; complete_image.img&amp;lt;/code&amp;gt;&lt;br /&gt;
** For Mac: &amp;lt;code&amp;gt;gzcat firmware.rockpro64-rk3399.img.gz partition.img.gz &amp;gt; complete_image.img&amp;lt;/code&amp;gt;&lt;br /&gt;
* Write the image to your boot device:&lt;br /&gt;
** For Linux: &amp;lt;code&amp;gt;dd if=complete_image.img of=your_chosen_boot_device bs=4M&amp;lt;/code&amp;gt;&lt;br /&gt;
** For Mac: see [[Getting started]]&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* An Ethernet connection is required for the above installer&lt;br /&gt;
* See the [[ROCKPro64#No_Video_or_GPU_Acceleration_on_Debian|troubleshooting section]] if you encounter issues with GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== DietPi ===&lt;br /&gt;
[[File:dietpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''DietPi''' is a lightweight, yet easy to setup and feature-rich Linux distribution, based on Debian. To find out more about DietPi, please visit the [https://dietpi.com/docs/ official documentation]. Discuss the ROCKPro64 build on the [https://forum.pine64.org/showthread.php?tid=12532 PINE64 forum thread].&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://dietpi.com/downloads/images/DietPi_ROCKPro64-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Root user&lt;br /&gt;
| &amp;lt;code&amp;gt;root/dietpie&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== LibreELEC ===&lt;br /&gt;
[[File:libreelec.jpg|right|100px]]&lt;br /&gt;
'''LibreELEC''' is a lightweight 'Just enough OS' Linux distribution purpose-built for Kodi on current and popular mediacentre hardware.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://libreelec.tv/downloads/rockchip/ Official LibreELEC build image] (look for PINE64 RockPro64-LibreELEC-RK3399.arm-x.x.x-rockpro64.img.gz, supports microSD card and the eMMC module of 8GB or more.)&lt;br /&gt;
&lt;br /&gt;
{{Info|Unzip and flash the image to a microSD card or eMMC module, for example using ''dd''.}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Manjaro ARM ===&lt;br /&gt;
[[File:Manjaro.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Manjaro''' is a user-friendly Linux distribution based on the independently developed Arch operating system. To learn more about Manjaro please visit [https://forum.manjaro.org/c/arm/releases/102 Manjaro forum].&lt;br /&gt;
&lt;br /&gt;
Download: &lt;br /&gt;
* [https://github.com/manjaro-arm/rockpro64-images/releases from Github]&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* Decompress the image (&amp;lt;tt&amp;gt;unxz&amp;lt;/tt&amp;gt;) before flashing, or decompress on the fly while flashing (&amp;lt;tt&amp;gt;xzcat&amp;lt;/tt&amp;gt; in a root shell, Etcher, ...)&lt;br /&gt;
* A display and keyboard will be required for first boot.&lt;br /&gt;
* Initial setup includes: keyboard layout, locale, username, user password, and root password.&lt;br /&gt;
* The installer will expand the root partition to use the remaining space on the storage device you've flashed.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Nems Linux ===&lt;br /&gt;
[[File:nems.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''NEMS''' stands for ''Nagios Enterprise Monitoring Server'' and it is a modern pre-configured, customized and ready-to-deploy Nagios Core image designed to run on low-cost micro computers. To find out more about NEMS on the PINE64 and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7306 PINE64 forum thread].&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://nemslinux.com/download/nagios-for-pine64.php Download page] with torrent seed or direct download.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Default user&lt;br /&gt;
| &amp;lt;code&amp;gt;nemsadmin/nemsadmin&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== NixOS ===&lt;br /&gt;
[[File:NixOS.webp|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''NixOS''' is a Linux distribution built on top of the Nix package manager using declarative configuration to allow reliable system upgrades. More information can be found on the [https://nixos.wiki/wiki/NixOS_on_ARM/PINE64_ROCKPro64 NixOS wiki].&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://github.com/AshyIsMe/nixos-installer-rockpro64 nixos-installer-rockpro64]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== OpenMediaVault ===&lt;br /&gt;
[[File:omv.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''OpenMediaVault''' is the next generation network attached storage (NAS) solution, [https://www.openmediavault.org/ click this link to OMV main page] to learn more. Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6308 here]&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
{{Outdated release}}&lt;br /&gt;
* Stretch 32bit (armhf): [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rockpro64-0.8.3-1141-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
* Stretch 64bit (aarch64): [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rockpro64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* You need to enable root login in OMV WebGUI&lt;br /&gt;
* [http://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! TTY and SSH, except OMV&lt;br /&gt;
| &amp;lt;code&amp;gt;rock64/rock64&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! WebGUI Login&lt;br /&gt;
| &amp;lt;code&amp;gt;admin/openmediavault&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! TTY and SSH&lt;br /&gt;
| &amp;lt;code&amp;gt;root/openmediavault&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== OpenWrt ===&lt;br /&gt;
[[File:OpenWrt.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''OpenWrt''' ​is a highly extensible ​GNU/​Linux ​distribution for embedded devices ​(typically wireless routers). Unlike many other distributions for these routers, OpenWrt ​is built from the ground up to be a full-featured, easily modifiable operating system for your router. In practice, this means that you can have all the features you need with none of the bloat, powered by a Linux kernel ​that's more recent than most other distributions.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* https://openwrt.org/toh/pine64/rockpro64_v2.1&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== R-Cade ===&lt;br /&gt;
[[File:RCadeLogo.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
Retro Center's '''R-Cade''', the 4K Media Center Arcade. [https://www.retro-center.com/about-r-cade/ RCade] Features 100+ retro-gaming systems, a lightweight web browser, and full 4K UHD media playback.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://github.com/retro-center/rcade_releases/releases Direct download from Retro Center's GitHub] (USB, microSD and eMMC boot)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Recalbox ===&lt;br /&gt;
[[File:RB.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Recalbox''' allows you to re-play a variety of videogame consoles and platforms in your living room, with ease! Visit the project's website here (https://www.recalbox.com/). You can follow the ongoing discussion about Recalbox on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=7194)&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
{{Template:Outdated release}}&lt;br /&gt;
* [https://github.com/mrfixit2001/recalbox_rockpro64/releases download] release from mrfixit2001 github.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Retro Arena ===&lt;br /&gt;
[[File:retroarena.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Retro Arena''' community build for microSD and eMMC boot. This is a BETA and therefore is not update-able nor supported, however bugs or issues are appreciated to be identified and shared via the issues tab on our GitHub so that we can address them in the future. The Roshambo Case support is baked in with one major caveat due to kernel limitation: You can power the unit off by the POWER switch and the RESET button works 100% however to power the unit on you will need to manually plug/unplug the power cord. This limitation will not be present in future releases. You can follow the ongoing discussion about Retro Arena on the [https://forum.pine64.org/showthread.php?tid=7555 forum]&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
{{Outdated release}}&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/odroidretroarena/TheRA-RP64-BETA-0.8-FINAL.img.gz Direct download from pine64.org]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== SkiffOS ===&lt;br /&gt;
[[File:SkiffOS-Icon-1.png|right|100px]]&lt;br /&gt;
Minimal cross-compiled OS optimized for hosting distributions in Docker containers. Provides the reliability of firmware with the ease-of-use of package managers. Uses the [http://buildroot.org Buildroot] cross-compilation tool for support for all Pine64 boards.&lt;br /&gt;
&lt;br /&gt;
Use configuration packages to configure the distribution:&lt;br /&gt;
* core/gentoo: Gentoo optimized for Rockpro64&lt;br /&gt;
* core/nixos: NixOS arm64&lt;br /&gt;
&lt;br /&gt;
You can also configure the skiff core yaml file to configure multiple distributions to run in parallel.&lt;br /&gt;
&lt;br /&gt;
The boot-up OS can be upgraded independently from the containers.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* The repository and instructions can be found [https://github.com/skiffos/SkiffOS/tree/master/configs/pine64 here].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Slackware ===&lt;br /&gt;
[[File:slackware.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Slackware''' is the world's oldest actively developed Linux distribution, providing a modern user land (applications) and Linux Kernel, within a more classic Unix Operating System environment.&lt;br /&gt;
&lt;br /&gt;
Resources:&lt;br /&gt;
* [https://docs.slackware.com/slackwarearm:inst Installation instructions].&lt;br /&gt;
* [https://www.youtube.com/watch?v=uXAL9jz-yaA&amp;amp;list=PL1XOSJnvang3VLmqke2QbRitKtOD6Rm3t Installation video guide]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== slarm64 ===&lt;br /&gt;
&lt;br /&gt;
'''slarm64''' is an unofficial aarch64 / riscv64 Slackware Linux port. You can follow the ongoing discussion about slarm64 on the RockPro64 on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=6823) or this forum thread for more general slarm64 information: https://www.linuxquestions.org/questions/slackware-arm-108/slarm64-aarch64-unofficial-slackware-4175613287/.&lt;br /&gt;
&lt;br /&gt;
Downloads:&lt;br /&gt;
* [http://dl.fail.pp.ua/slackware/images/rockpro64/ download] (supports microSD card, look for slarm64-current-aarch64-xfce-rockpro64-x.xx.x-build-xxxxxxxx.img.zst)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Root user&lt;br /&gt;
| &amp;lt;code&amp;gt;root/password&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Flashing the distribution to the eMMC:&lt;br /&gt;
* Flash the image to micro SD, power up the board with micro SD and login&lt;br /&gt;
* Copy the image file to micro SD by using SFTP. The image file must have the ''.img'' file extension.&lt;br /&gt;
* After finish copy the file, power off the board and add eMMC module to the board&lt;br /&gt;
* Boot the board, run below command for flashing to eMMC module&lt;br /&gt;
* Run &amp;lt;code&amp;gt;dd if=[image file] of=/dev/mmcblkX bs=10M&amp;lt;/code&amp;gt; (example: ''sudo dd if=slack-current-aarch64-xfce_29Sep18-4.4.162-rockpro64-build-20181126.img of=/dev/mmcblkX bs=10M'')&lt;br /&gt;
* then edit these two files in eMMC module:&lt;br /&gt;
** &amp;lt;code&amp;gt;mount /dev/mmcblk1p1 /media&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;echo &amp;quot;rootdev=/dev/mmcblk1p1&amp;quot; &amp;gt;&amp;gt; /media/boot/uEnv.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;sed -i 's:mmcblk0p1:mmcblk1p1:' /media/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
* After that, power off the board and remove the microSD card. Then boot with only the eMMC module.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Twister OS ===&lt;br /&gt;
[[File:Twister_OS.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Twister OS''' brings a desktop computing experience for SBCs, right out-of-the-box. Including themes, applications, tools, and optimizations to get the most out of your SBC. For more information on Twister OS, please visit the [https://twisteros.com/ official site]. You can follow the ongoing discussion about Twister OS on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=12192).&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://twisteros.com/twisterarmbian.html Twister OS Armbian-Reforged XFCE Desktop image] (2.8GB, supports the microSD card and eMMC modules with 16GB and more)&lt;br /&gt;
&lt;br /&gt;
{{Info|After flashing image with Etcher, edit /boot/armbianEnv.txt, replace the dtb name with rk3399-rockpro64.dtb.}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Default user&lt;br /&gt;
| &amp;lt;code&amp;gt;pi/raspberry&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Void Linux ===&lt;br /&gt;
'''Void Linux''' is a general purpose operating system, based on the monolithic Linux kernel. The official guide can be found at [https://docs.voidlinux.org/installation/guides/arm-devices/index.html Guide]. At this time there are no RockPro64 images available.&lt;br /&gt;
&lt;br /&gt;
The following creates a bootable image from an existing Void Linux installation:&lt;br /&gt;
* &amp;lt;code&amp;gt;xbps-insall -Syu&amp;lt;/code&amp;gt; to update the xbps installation of the installation&lt;br /&gt;
* create ROCKPro64 image with the ''void-mklive'' software (from github.com):&lt;br /&gt;
** create a rootfs via ''mkrootfs.sh'': &amp;lt;code&amp;gt;sh mkrootfs.sh -o void-aarch64-muls-ROOTFS-yyyymmdd.tar.xz&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;sh mkplatformfs.sh rockpro64 void-aarch64-muls-ROOTFS-yyyymmdd.tar.xz&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;sh mkimage.sh -s 7GiB void-rockpro64-PLATFORMFS-yyyymmdd.tar.xz&amp;lt;/code&amp;gt;&lt;br /&gt;
* write image to sdcard or eMMC: &amp;lt;code&amp;gt;dd if='''IMAGE-FILENAME''' of='''DEVICENAME''' bs=2M&amp;lt;/code&amp;gt;&lt;br /&gt;
* If ''mkplatformfs.sh'' errors with ''ROCKPro64 not supported'', install ''xbps-src'' from https://github.com/void-linux/void-packages and build the ROCKPro64 package.&lt;br /&gt;
* Tip:  write a new U-Boot to the image if you see on the serial console the boot-up stalls:&lt;br /&gt;
** get the two U-Boot files from [https://pkgs.org/download/u-boot-rockpro64 pkgs.org], the aarch64 files:&lt;br /&gt;
** &amp;lt;code&amp;gt;dd if=idbloader.img of=DEVICENAME seek=64&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;dd if=u-boot.itb of=DEVICENAME seek=16384&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Default user&lt;br /&gt;
| &amp;lt;code&amp;gt;voidlinux/voidlinux&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== BSD Images ==&lt;br /&gt;
=== FreeBSD ===&lt;br /&gt;
[[File:Freebsd_Logo.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''FreeBSD''' is an operating system used to power modern servers, desktops, and embedded platforms. The [https://wiki.freebsd.org/arm/RockChip#RockPro64 RockChip FreeBSD page] has instructions for installing FreeBSD. Version 13.0 and greater include prebuilt images.&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* Images for various FreeBSD releases can be found [https://www.freebsd.org/where/ here]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! SSH user (enabled by default)&lt;br /&gt;
| &amp;lt;code&amp;gt;freebsd/freebsd&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! Root user&lt;br /&gt;
| &amp;lt;code&amp;gt;root/root&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* The wiki has instructions on [https://wiki.freebsd.org/arm/RockChip#Fan_Control_on_RockPro64 enabling the PWM cooling fan].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== NetBSD ===&lt;br /&gt;
[[File:netbsd.png|right|100px]]&lt;br /&gt;
'''NetBSD''' is a free, fast, secure, and highly portable Unix-like Open Source operating system. To learn more about NetBSD please visit [https://www.netbsd.org/ NetBSD main page] &lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
* [https://armbsd.org/ download] latest release build from NetBSD by select 64bit - RockPro64 (size: 339 MB)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #a7d7f9;&amp;quot;| Default credentials&lt;br /&gt;
|-&lt;br /&gt;
! Root user and SSH login&lt;br /&gt;
| &amp;lt;code&amp;gt;root/[none]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* Instructions concerning enabling SSH can be found [https://www.netbsd.org/docs/guide/en/chap-boot.html#chap-boot-ssh here] or the bootable image from armbsd.org can have the MSDOS partition modified to setup SSH using [https://man.netbsd.org/creds_msdos.8 this] method.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== OpenBSD ===&lt;br /&gt;
[[File:Puffy_mascot_openbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''OpenBSD''' is a security-focused, free and open-source, Unix-like operating system based on the Berkeley Software Distribution. Official instruction to get OpenBSD on ROCKPro64 is [https://www.openbsd.org/arm64.html here], and blogs on installation [https://github.com/jasperla/openbsd-rockpro64 is here] and [https://bsandro.tech/posts/openbsd-7.1-on-pine64-rockpro64/ here]. Forum discussion is [https://forum.pine64.org/forumdisplay.php?fid=109 here].&lt;br /&gt;
&lt;br /&gt;
== Chromium OS ==&lt;br /&gt;
[[File:chromium.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
The '''Chromium OS''' community build image for microSD card and eMMC module, version beta (R76). To learn more please visit the [https://forum.pine64.org/showthread.php?tid=7659 forum].&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
{{Outdated release}}&lt;br /&gt;
* https://github.com/ayufan-rock64/chromiumos-build/releases/&lt;br /&gt;
&lt;br /&gt;
{{Info|Flash the image to a microSD card or an eMMC module, for example using ''dd''.}}&lt;br /&gt;
&lt;br /&gt;
== Android  ==&lt;br /&gt;
=== Android 9.0.0 ===&lt;br /&gt;
[[File:android_9.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20200804]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* Supports new RockPro64 AP6256 Wifi/BT module&lt;br /&gt;
* Support Sony IMX214 camera module and works on both MiPi-CSI ports &lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* DD image for 8GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200804_stock_android_9.0_emmcboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 7287fd0846616354615c8d3eff6a2a92&lt;br /&gt;
*** File Size: 602MB&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200804_stock_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 78352bbf21198d062af8bab2217ee691&lt;br /&gt;
*** File Size: 611MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200804_stock_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): c5c8dce419478f75f85f893ee4808dbd&lt;br /&gt;
*** File Size: 624MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200804_stock_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): aab1cf4d30c4d16e6ce2672f3ecae935&lt;br /&gt;
*** File Size: 666MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20200804]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20200708_stock_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): 9ac830527814521e15b009fa2503c9e3&lt;br /&gt;
** File Size: 589MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20200708]&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* Supports new RockPro64 AP6256 Wifi/BT module&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* DD image for 8GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200708_stock_android_9.0_emmcboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): ef5f5a890a9270734e0adee21f006837&lt;br /&gt;
*** File Size: 597MB&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200708_stock_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 179bd684a468f800a86f7c658a543bef&lt;br /&gt;
*** File Size: 606MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200708_stock_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): d930b757c4427be07b83c37a9c8494a1&lt;br /&gt;
*** File Size: 630MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20200708_stock_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 09a970d68a10bdb3d6495d55860940e6&lt;br /&gt;
*** File Size: 660MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20200708]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20200708_stock_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): 6d060ddd47ebcfd5cfcdbf90ec042c97&lt;br /&gt;
** File Size: 589MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20190427]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* Please ignore &amp;quot;internal problem with your device&amp;quot; popup message if appear on Android boot-up page.&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190417_stock_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 3BA4C72D81BCFC4C21B3B5D2BCB4F9F7&lt;br /&gt;
*** File Size: 609MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190417_stock_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 4965CCF50A8F06CEB2E4A6828A21F31C&lt;br /&gt;
*** File Size: 627MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190417_stock_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 748EC28FE5D5395D33E858C913D744BF&lt;br /&gt;
*** File Size: 663MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [microSD Boot] [20190506]'''&lt;br /&gt;
* DD image to microSD card and boot. &lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* Please ignore &amp;quot;internal problem with your device&amp;quot; popup message if appear on Android boot-up page.&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* DD image for 8GB microSD card&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190506_stock_android_9.0_sdboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): E1C551E8106E178841E1C3F71432194A&lt;br /&gt;
*** File Size: 599MB&lt;br /&gt;
* DD image for 16GB microSD card&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190506_stock_android_9.0_sdboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 73592FDD5A2F52F08020F16AD99E8C8C&lt;br /&gt;
*** File Size: 609MB&lt;br /&gt;
* DD image for 32GB microSD card&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190506_stock_android_9.0_sdboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 74DE0FE528F210E4DD483B411A71904B&lt;br /&gt;
*** File Size: 627MB&lt;br /&gt;
* DD image for 64GB microSD card&lt;br /&gt;
** [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20190506_stock_android_9.0_sdboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): D7626BD50443A88AEB9254C88C575284&lt;br /&gt;
*** File Size: 663MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20190427]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20190417_stock_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): 046BA4A07933120809FBE1B9577B7341&lt;br /&gt;
** File Size: 592MB&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1.0 ===&lt;br /&gt;
[[File:android_8.png|right|100px]]&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20180828]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20180828_stock_android_8.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 9AEE21BC1B9DE886DCB0E64FA123988A&lt;br /&gt;
** File Size: 414MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [microSD Boot] [20181212]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20181212_stock_android_8.1_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 5A6BB7FCD7B3F77FCEE99CE462AE7405&lt;br /&gt;
** File Size: 616MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20180828]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20180828_stock_android_8.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 4DACFE927BB09EE9C56B5232A7F624EE&lt;br /&gt;
** File Size: 415MB&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 ===&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20180809]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20180809_stock_android_7.1_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 00F194017557017C2588724686E90CEA&lt;br /&gt;
** File Size: 498MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20180809]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20180809_stock_android_7.1_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 197A9905B48441D8655E7542F4643FE9&lt;br /&gt;
** File Size: 483MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [microSD Boot] [20180920]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20180920_stock_android_7.1_sdboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): CE39642A379B357BB3E4BC80ACA2E0CE&lt;br /&gt;
** File Size: 765MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for DD method [eMMC Boot] [20180518]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_dd_20180518_stock_android_7.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 33622034ACDBC31A7D7BB01ED634E29B&lt;br /&gt;
** File Size: 345MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for RK Flash tool [eMMC Boot] [20180518]'''&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at USB type-C connector, needs USB type A to type C cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20180518_stock_android_7.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 90C1991DADAE13ADC94E927F171F8920&lt;br /&gt;
** File Size: 342MB&lt;br /&gt;
&lt;br /&gt;
'''Stock for install from SDcard to eMMC [microSD Boot] [20180921]'''&lt;br /&gt;
* Use 'dd' to write the image to the eMMC module using the USB-to-eMMC adapter module and boot. Using [https://www.balena.io/etcher/ Etcher] or another specialized SD writing tool is preferred.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This build supports PINE64 7&amp;quot; LCD panel with tablet UI (not Android TV)&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/android/ROCKPro64_20180921_stock_android_7.1_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): c6900e82a1d6ef397dcac241f76f43c9&lt;br /&gt;
** File Size: 350MB&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Android SDK ===&lt;br /&gt;
'''Android P SDK [v9.0]'''&lt;br /&gt;
* [http://files.pine64.org/SDK/ROCKPro64/ROCKPro64_SDK_android9.0.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 3CEBEEFD1A873BEEEC149148A785D92E&lt;br /&gt;
** File Size: 125.16GB&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Slash TV OS ===&lt;br /&gt;
Android 7 based system including Play Store, working only from SD card (does not boot when installed on eMMC)&lt;br /&gt;
* https://drive.google.com/drive/folders/1K5YhWaB7Xstuv2HCo1HkpglCEm9x-RIM&lt;br /&gt;
&lt;br /&gt;
== Development resources ==&lt;br /&gt;
&lt;br /&gt;
The Ayufan github page&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases github.com/ayufan-rock64/linux-build/]&lt;br /&gt;
&lt;br /&gt;
Below are the LPDDR4 driver for RK3399&lt;br /&gt;
&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/driver/rk3399_loader_v1.10.112_support_1CS.bin rk3399_loader_v1.10.112_support_1CS.bin, this is 800Mhz version used in Android Build]&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/driver/rk3399_ddr_666MHz_v1.11.bin rk3399_ddr_666MHz_v1.11.bin, this is alpha version]&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/driver/rk3399_ddr_933MHz_v1.11.bin rk3399_ddr_933MHz_v1.11.bin, this is alpha version]&lt;br /&gt;
&lt;br /&gt;
ROCKPro64 related files&lt;br /&gt;
&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/driver/kernel_rockpro64.tar.gz ROCKPro64 Kernel file]&lt;br /&gt;
* [http://files.pine64.org/os/ROCKPro64/driver/trust.img trust.img]&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous tools ==&lt;br /&gt;
&lt;br /&gt;
* [http://files.pine64.org/doc/rock64/tools/DriverAssitant_v4.5.zip Windows ADB driver package]&lt;br /&gt;
* [[ROCK64 MAC Address]]&lt;br /&gt;
* [http://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]&lt;br /&gt;
* [http://files.pine64.org/doc/rock64/tools/SD_Firmware_Tool._v1.46.zip Tools to burn Android build into a bootable microSD card]&lt;br /&gt;
* [http://files.pine64.org/doc/rock64/tools/AndroidTool_Release_v2.38.zip Tools that allows developer flash image into eMMC's Loader/Parameter/Misc/Kernal/Boot/Recovery/System/Backup partition]&lt;br /&gt;
&lt;br /&gt;
[[Category:ROCKPro64]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64&amp;diff=16547</id>
		<title>Quartz64</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64&amp;diff=16547"/>
		<updated>2023-02-15T16:17:20Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Mention that bluetooth fix is included in 6.1-rc7&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Quartz64modelb.png|400px|thumb|right|The Quartz64 Model B]]&lt;br /&gt;
&lt;br /&gt;
The '''Quartz64''' is the most recent Single Board Computer offering from PINE64, with Model A initially released in June of 2021 and Model B in May of 2022. It is powered by a Rockchip RK3566 Quad-Core ARM Cortex A55 64-Bit Processor with a MALI G-52 GPU.&lt;br /&gt;
&lt;br /&gt;
Key features include a PCIe x4 open ended slot (model A) or m.2 (model B) using one Gen2 lane electrically, and the use of LPDDR4 RAM.&lt;br /&gt;
&lt;br /&gt;
The Quartz64 has three LPDDR4 system memory options: 2GB, 4GB or 8GB. For booting, there is an eMMC module socket (supporting up to 128GB) and microSD slot, as well as a footprint to solder on an SPI flash chip. The board is equipped with HDMI, 1x USB 3.0 type A Host, 3x USB 2.0 Host, Gigabit Ethernet, SATA (model A), GPIO Bus, MiPi DSI interface, e-ink interface (model A), eDP interface (model A), touch Panel interface (model A), MiPi CSI interface, as well as many other device interfaces such as UART, SPI, I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C, for makers to integrate with sensors and other peripherals. Many different Operating Systems (OS) are freely available from the open source community, such as Linux (Ubuntu, Debian, Arch), BSD, and Android.&lt;br /&gt;
&lt;br /&gt;
== Software releases ==&lt;br /&gt;
&lt;br /&gt;
Under [[Quartz64 Software Releases]] you will find a complete list of currently supported operating system images, which work with the Quartz64, as well as other related software.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
=== Flashing the device ===&lt;br /&gt;
&lt;br /&gt;
Natively the board only supports booting from the eMMC or microSD card, see [[#Boot order|boot order]]. There doesn't seem to be a way to boot from USB devices or SATA yet.&lt;br /&gt;
&lt;br /&gt;
The board can be booted by flashing your favorite operating system to a microSD card using another device and to insert the microSD card into the Quartz64, see the article [[Getting started]]. Flashing the eMMC is possible by booting an operating system from the microSD card and to overwrite the eMMC from within the booted operating system.&lt;br /&gt;
&lt;br /&gt;
=== Boot order ===&lt;br /&gt;
&lt;br /&gt;
The hardware boot order of the Quartz64 is:&lt;br /&gt;
&lt;br /&gt;
# SPI NOR flash&lt;br /&gt;
# SPI NAND flash&lt;br /&gt;
# eMMC&lt;br /&gt;
# microSD card&lt;br /&gt;
&lt;br /&gt;
== SoC and Memory Specifications ==&lt;br /&gt;
* Based on [https://www.rock-chips.com/a/en/products/RK35_Series/2021/0113/1274.html Rockchip RK3566]&lt;br /&gt;
[[File:RK3566_icon.png|right]]&lt;br /&gt;
&lt;br /&gt;
=== CPU Architecture ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/processors/cortex-a/cortex-a55 Quad-core ARM Cortex-A55@1.8GHz]&lt;br /&gt;
* AArch32 for full backwards compatibility with ARMv7&lt;br /&gt;
* ARM Neon Advanced SIMD (single instruction, multiple data) support for accelerated media and signal processing computation&lt;br /&gt;
* Includes VFP hardware to support single and double-precision operations&lt;br /&gt;
* ARMv8 Cryptography Extensions&lt;br /&gt;
* Integrated 32KB L1 instruction cache and 32KB L1 data cache per core&lt;br /&gt;
* 512KB unified system L3 cache&lt;br /&gt;
* [https://developer.arm.com/ip-products/security-ip/trustzone TrustZone] technology support&lt;br /&gt;
* [https://www.cnx-software.com/2020/12/01/rockchip-rk3568-processor-to-power-edge-computing-and-nvr-applications 22nm process, believed to be FD-SOI]&lt;br /&gt;
&lt;br /&gt;
=== GPU (Graphics Processing Unit) Capabilities ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/graphics-and-multimedia/mali-gpus/mali-g52-gpu Mali-G52 2EE Bifrost GPU@800MHz]&lt;br /&gt;
* 4x Multi-Sampling Anti-Aliasing (MSAA) with minimal performance drop &lt;br /&gt;
* 128KB L2 Cache configurations&lt;br /&gt;
* Supports OpenGL ES 1.1, 2.0, and 3.2&lt;br /&gt;
* Supports Vulkan 1.0 and 1.1&lt;br /&gt;
* Supports OpenCL 2.0 Full Profile&lt;br /&gt;
* Supports 1600 Mpix/s fill rate when at 800MHz clock frequency&lt;br /&gt;
* Supports 38.4 GLOP/s when at 800MHz clock frequency   &lt;br /&gt;
&lt;br /&gt;
=== NPU (Neural Processing Unit) Capabilities ===&lt;br /&gt;
* Neural network acceleration engine with processing performance of up to 0.8 TOPS&lt;br /&gt;
* Supports integer 8 and integer 16 convolution operations&lt;br /&gt;
* Supports the following deep learning frameworks: TensorFlow, TF-lite, Pytorch, Caffe, ONNX, MXNet, Keras, Darknet&lt;br /&gt;
&lt;br /&gt;
=== System Memory ===&lt;br /&gt;
* RAM Memory Variants: 2GB (SOQuartz only), 4GB, 8GB LPDDR4.&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
* 10/100/1000Mbps Ethernet&lt;br /&gt;
* WiFi 802.11 b/g/n/ac with Bluetooth 5.0 (optional on model A, built in on model B)&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
* microSD - bootable, supports SDHC and SDXC, storage up to 2TB&lt;br /&gt;
* USB&lt;br /&gt;
** Model A: 2 USB 2.0 host ports, 1 USB 2.0 OTG port, 1 USB 3.0 host port&lt;br /&gt;
** Model B: 1 USB 2.0 host port, 1 USB 2.0 OTG port, 1 USB 3.0 host port&lt;br /&gt;
* one native SATA 3.0 6Gb/s Port (only on model A, shared with USB 3.0 host port)&lt;br /&gt;
* optional eMMC module from 8GB up to 128GB&lt;br /&gt;
* 64 Mbit (8 MByte) SPI flash (Model B only), part number '''25Q64DWZPIG''' in the schematic&lt;br /&gt;
&lt;br /&gt;
==== eMMC Speeds ====&lt;br /&gt;
&lt;br /&gt;
On a 64 GB eMMC module:&lt;br /&gt;
&lt;br /&gt;
  $ sudo hdparm -tT /dev/mmcblk1 &lt;br /&gt;
  &lt;br /&gt;
  /dev/mmcblk1:&lt;br /&gt;
   Timing cached reads:   2368 MB in  2.00 seconds = 1184.46 MB/sec&lt;br /&gt;
   Timing buffered disk reads: 452 MB in  3.01 seconds = 149.98 MB/sec&lt;br /&gt;
&lt;br /&gt;
=== Expansion Ports ===&lt;br /&gt;
* HDMI&lt;br /&gt;
* eDP - 4 lanes of 2.7Gbps, up to 2560x1600@60Hz (only on model A)&lt;br /&gt;
* DSI - Display Serial Interface, 4 lanes MiPi, up to 1440P on model A, 2 lanes MiPi, up to 1080p on model B &lt;br /&gt;
* CSI - CMOS Camera Interface, 4 lanes MiPi up to 8 mega pixel on model A, 2 lanes MiPi up to 5 mega pixel on model B &lt;br /&gt;
* TP - Touch Panel Port, SPI with interrupt on model A&lt;br /&gt;
* RTC - Real Time Clock Battery Connector&lt;br /&gt;
* VBAT - Lithium Battery Connector with temperature sensor input on model A&lt;br /&gt;
* Wifi/BT Module Header - SDIO 3.0 and UART on model A, build in Wifi/BT Module on model B&lt;br /&gt;
* 2x20 pins &amp;quot;Pi2&amp;quot; GPIO Header on model B, 2x10 pins GPO header on model A&lt;br /&gt;
* PCIe x4 open ended slot on model A, m.2 slot on model B, one Gen2 lane due to SoC constraints&lt;br /&gt;
** On Model A, the slot provides 10W of power for the 3.3V supply and however much power your 12V input power supply provides on the 12V supply&lt;br /&gt;
&lt;br /&gt;
The PCIe implementation on the RK3566 is much more compatible with a wide range of devices compared to the one on the RK3399 used on the ROCKPro64. This means a lot more devices should work (excluding dGPUs due to a lack of cache snooping ability).&lt;br /&gt;
&lt;br /&gt;
==== Combo PHYs ====&lt;br /&gt;
&lt;br /&gt;
[[File:rk3566 phy.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Several of the I/O options on the RK3566 used in the Quartz64 are using the same I/O lines, meaning that they cannot be used at the same time. The above diagram illustrates how they are connected.&lt;br /&gt;
&lt;br /&gt;
In particular, USB 3.0 and the SATA connector on the board are mutually exclusive, and the PCI-e 2.0 lane can be reconfigured into a second SATA port, though an adapter cable needs to be fashioned for this to be useful.&lt;br /&gt;
&lt;br /&gt;
=== GPIO Pins (Quartz64 Model A) ===&lt;br /&gt;
&lt;br /&gt;
Attention! GPIOs are 3.3V!&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; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| 3.3 V&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 2&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| I2C3_SDA_M0 &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a,b&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 4&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| I2C3_SCL_M0 &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a,b&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 5&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 6&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| CPU_REFCLK_OUT&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 7&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 8&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_TX_M0_DEBUG&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 9&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 10&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_RX_M0_DEBUG&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_MOSI_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 11&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 12&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART0_TX &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_MISO_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 13&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 14&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART0_RX &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_CLK_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 15&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 16&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_CS0_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 17&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 18&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| SPDIF_OUT &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;c&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 19&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 20&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 3.3V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Notes====&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;can be a PWM pin&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;pulled high to 3.3V through 2.2kOhm resistor&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;low-pass filtered with cutoff of 220 MHz&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source: Page 28 of [https://wiki.pine64.org/images/3/31/Quartz64_model-A_schematic_v1.0_20201215.pdf the board schematics].&lt;br /&gt;
&lt;br /&gt;
=== GPIO Pins (Quartz64 Model B) ===&lt;br /&gt;
&lt;br /&gt;
Attention! GPIOs are 3.3V!&lt;br /&gt;
&lt;br /&gt;
Interesting alternate pin configurations are listed in [brackets].&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; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| 3.3 V&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:yellow; color:black; font-weight:bold;&amp;quot;| 1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:red; color:gold; font-weight:bold;&amp;quot;| 2&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[I2C3_SDA_M0]'' GPIO1_A0_3V3 &lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:red; color:gold; font-weight:bold;&amp;quot;| 4&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[I2C3_SCL_M0]'' GPIO1_A1_3V3 &lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 5&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 6&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_C4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 7&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 8&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_TX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 9&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 10&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_RX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[SPI1_CS0_M1]'' GPIO3_A1_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 11&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 12&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A3_3V3 ''[I2S3_SCLK_M0]''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[I2S3_MCLK_M0]'' GPIO3_A2_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 13&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 14&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_B0_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 15&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 16&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_B1_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| 3.3V&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:yellow; color:black; font-weight:bold;&amp;quot;| 17&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 18&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_B2_3V3 &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO4_C3_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 19&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 20&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO4_C5_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 21&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 22&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_C1_3V3 ''[SPI1_MOSI_M1]''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO4_C2_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 23&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 24&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO4_C6_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 25&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 26&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO4_D1_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| I2C4_SDA_M0&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:blue; color:gold; font-weight:bold;&amp;quot;| 27&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:blue; color:gold; font-weight:bold;&amp;quot;| 28&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| I2C4_SCL_M0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_B3_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 29&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 30&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_B4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 31&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 32&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_C2_3V3 ''[SPI1_MISO_M1]''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[SPI1_CLK_M1]'' GPIO3_C3_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 33&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 34&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[I2S3_LRCK_M0]'' GPIO3_A4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 35&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 36&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A7_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[SPDIF_TX_M0]'' GPIO1_A4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 37&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 38&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A6_3V3 ''[I2S3_SDI_M0]''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 39&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 40&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A5_3V3 ''[I2S3_SDO_M0]''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Source: Page 24 of [https://files.pine64.org/doc/quartz64/Quartz64_model-B_Schematic-V1.3_20220124.pdf the board schematics].&lt;br /&gt;
&lt;br /&gt;
== Quartz64 Board Information, Schematics, and Certifications ==&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;A&amp;quot; ===&lt;br /&gt;
* Model &amp;quot;A&amp;quot; Baseboard Dimensions: 133mm x 80mm x 19mm&lt;br /&gt;
* Input Power: DC 12V @ 3A 5.5mmOD/2.1mmID center-positive Barrel DC Jack connector&lt;br /&gt;
&lt;br /&gt;
* Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic and PCB Board Resource:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-A_schematic_v2.0_20210427.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic ver 2.0 20210427 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-A_V2.0_connector_placement.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC PCB Connector placement PDF file]&lt;br /&gt;
&lt;br /&gt;
* Certifications:&lt;br /&gt;
** Disclaimer: Please note that PINE64 SBC is not a &amp;quot;final&amp;quot; product and in general certification is not necessary. However, PINE64 still submit the SBC for FCC and CE certification and obtain the certificates to proof that SBC board is capable on passing the testing. Please note a final commercial product needs to performs its owns testing and obtains its owns certificates.&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Quartz64%20Model-A%20CE%20certification-S21051101701001.pdf Quartz64 model-A CE Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Quartz64%20Model-A%20FCC%20certification-S21051101702001.pdf Quartz64 model-A FCC Certificate]&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;B&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* Model &amp;quot;B&amp;quot; Baseboard Dimensions: 85mm x 56mm x 18.8mm&lt;br /&gt;
* Input Power: DC 5V @ 3A 3.5mmOD/1.35mmID center-positive Barrel DC Jack connector&lt;br /&gt;
&lt;br /&gt;
* Quartz64 Model &amp;quot;B&amp;quot; SBC Schematic and PCB Board Resource:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-B_Schematic-V1.3_20220124.pdf Quartz64 Model &amp;quot;B&amp;quot; SBC Schematic ver 1.3 20220124 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-B_PCB_Components_Placement-V1.2_20211014.pdf Quartz64 Model &amp;quot;B&amp;quot; SBC PCB Connector placement PDF file]&lt;br /&gt;
* Please note that v1.2 and V1.3 schematic and component placement are identical, just some component value changed.&lt;br /&gt;
&lt;br /&gt;
* Note: Model B uses a Molex PicoBlade compatible connector for the RTC battery. The Pine64 Backup Battery Holders come with a JST PH type connector. To use the Pine64 RTC Backup Battery Holder, the connector on the battery holder will need to be modified with a PicoBlade type connector.&lt;br /&gt;
&lt;br /&gt;
== Datasheets for Components and Peripherals ==&lt;br /&gt;
* Rockchip RK3566 SoC information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Rockchip%20RK3566%20Datasheet%20V1.0-20201210.pdf Rockchip RK3566 ver 1.0 datasheet, already got release permission from Rockchip]&lt;br /&gt;
** [https://opensource.rock-chips.com/images/2/26/Rockchip_RK3568_TRM_Part1_V1.3-20220930P.PDF Rockchip RK3566 and RK3568 TRM (Technical Reference Manual)]&lt;br /&gt;
* Rockchip PMU (Power Management Unit) Information:&lt;br /&gt;
** [https://www.rockchip.fr/RK817%20datasheet%20V1.01.pdf Rockchip RK817 ver 1.01 datasheet for Quartz64 model A]&lt;br /&gt;
** [https://www.rockchip.fr/RK809%20datasheet%20V1.01.pdf Rockchip RK809 ver 1.01 datasheet for Quartz64 model B and SOQuartz]&lt;br /&gt;
* LPDDR4 (200 Balls) SDRAM:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rockpro64/SM512M32Z01MD2BNP(200BALL).pdf Micron LPDDR4 Mobile LPDDR4 Datasheet]&lt;br /&gt;
* eMMC information:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/PINE64_eMMC_Module_20170719.pdf PINE64 eMMC module schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/usb%20emmc%20module%20adapter%20v2.pdf PINE64 USB adapter for eMMC module V2 schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/USB%20adapter%20for%20eMMC%20module%20PCB.tar PINE64 USB adapter for eMMC module PCB in JPEG]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/E-00517%20FORESEE_eMMC_NCEMAM8B-16G%20SPEC.pdf 16GB Foresee eMMC Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/SDINADF4-16-128GB-H%20data%20sheet%20v1.13.pdf 32GB/64GB/128GB SanDisk eMMC Datasheet]&lt;br /&gt;
* SPI NOR Flash information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/w25q128jv%20spi%20revc%2011162016.pdf WinBond 128Mb SPI Flash Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GD25Q128C-Rev2.5.pdf GigaDevice 128Mb SPI Flash Datasheet]&lt;br /&gt;
* E-ink Panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Eink%20P-511-754-V3_ES103TC1%20Specification%20V3.0(Signed)-20190702.pdf Eink 10.3&amp;quot; 1872x1404 ES103TC1 Flex Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Eink%20P-511-828-V1_ED103TC2%20Formal%20Spec%20V1.0_20190514.pdf Eink 10.3&amp;quot; 1872x1404 ES103TC1 Glass Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/PineNote/TI%20PMU-TPS651851.pdf TPS65185x PMIC for E-Ink Enabled Electronic Paper Display Datasheet]&lt;br /&gt;
* LCD Touch Screen Panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/FY07024DI26A30-D_feiyang_LCD_panel.pdf 7.0&amp;quot; 1200x600 TFT-LCD Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/HK70DR2459-PG-V01.pdf Touch Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GT911%20Capacitive%20Touch%20Controller%20Datasheet.pdf GOODiX GT911 5-Point Capacitive Touch Controller Datasheet]&lt;br /&gt;
* Ethernet PHY information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/rtl8211e(g)-vb(vl)-cg_datasheet_1.6.pdf Realtek RTL8211 10/100/1000M Ethernet Transceiver]&lt;br /&gt;
* WiFi/BT module info:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rockpro64/AW-CM256SM_DS_DF_V1.9_STD.pdf Azurewave CM256SM 11AC WiFi + Bluetooth5.0 Datasheet]&lt;br /&gt;
* IR LED:&lt;br /&gt;
** [https://media.digikey.com/pdf/Data%20Sheets/Everlight%20PDFs/IRM-36xx_Series.pdf IRM-3638 Datasheet]&lt;br /&gt;
* Enclosure information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/playbox_enclosure_20160426.stp Playbox Enclosure 3D file]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/ABS_enclosure_20160426.stp ABS Enclosure 3D file]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/pine64%20Die%20Cast%20casing-final.jpg Outdoor Aluminum Cast Dust-proof IP67 Enclosure Drawing]&lt;br /&gt;
** [https://www.printables.com/model/269572-pine-quartz-64-a-full-case 3D Printable Enclosure for Model A]&lt;br /&gt;
** [https://www.printables.com/model/269575-pine-quartz-64-a-open-frame Open Frame for Model A]&lt;br /&gt;
* Connector information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/ePH.pdf 2.0mm PH Type connector specification use in Lithium Battery (VBAT) port (Model A)]&lt;br /&gt;
** [https://www.molex.com/pdm_docs/sd/533980271_sd.pdf 1.25mm Picoblade Type connector specification used in RTC Battery port (Model B)]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/0.5FPC%20Front%20Open%20Connector%20H=1.5.pdf 0.5mm Pitch cover type FPC connector specification use in DSI port, TP port and CSI port]&lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
&lt;br /&gt;
{{SeeMainArticle|Quartz64 Development}}&lt;br /&gt;
&lt;br /&gt;
Information and resources of the ongoing development effort for the Quartz64 can be found on the [[Quartz64 Development]] page, where the current status of various board functions can be found, and whether they have landed in upstream.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.com/pine64-org/quartz-bsp Quartz64 BSP Gitlab Page]&lt;br /&gt;
&lt;br /&gt;
== Enclosures ==&lt;br /&gt;
&lt;br /&gt;
Note: Please expand this section with more cases known to work.&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;A&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
All enclosures that fit the ROCKPro64 should fit the Quartz64 Model &amp;quot;A&amp;quot;, as the I/O has been laid out the same on purpose.&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Model A&amp;quot; Acrylic Open Enclosure]] - but see the troubleshooting section below.&lt;br /&gt;
* [[Quartz64 Premium Aluminium Case|RockPro64 Premium Aluminium Case]]&lt;br /&gt;
* [[ROCKPro64#3D printable ITX mounting brackets]] (Not an enclosure but allows to mount the board in an ATX/ITX case)&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;B&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Model B&amp;quot; Acrylic Open Enclosure]]&lt;br /&gt;
* the ROCK64 aluminium enclosure '''does not''' work, as the DC input jack is placed differently&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Stability/Boot Issues With Missing Battery Shunt ===&lt;br /&gt;
&lt;br /&gt;
If there is no battery plugged into the board, the jumper labelled &amp;quot;ON/OFF_BATT&amp;quot; must be in place. If this is set wrong, stability issues such as failures to boot will occur.&lt;br /&gt;
&lt;br /&gt;
=== No Ethernet Connectivity ===&lt;br /&gt;
&lt;br /&gt;
Make sure the kernel is built with &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt; set to &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;. Building it as a module (&amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;) and then relying on module auto-loading is unlikely to work, because if the generic PHY driver is built in it will bind to the PHY first, unless you include the motorcomm module in your initramfs.&lt;br /&gt;
&lt;br /&gt;
Note: Starting with [https://salsa.debian.org/kernel-team/linux/-/merge_requests/551 Debian's &amp;lt;code&amp;gt;6.1~rc3-1~exp1&amp;lt;/code&amp;gt; kernel] the module is included, but set to &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; and I (Diederik) have verified that it gets included in the initramfs and '''works''' on Model-A and Model-B with the [[Quartz64#Plebian]] images.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Model A&amp;quot; Acrylic Case Doesn't Fit ===&lt;br /&gt;
&lt;br /&gt;
The Quartz64 does not really fit onto the bottom plate of the [[&amp;quot;Model A&amp;quot; Acrylic Open Enclosure]]. This is because the &amp;quot;Mic&amp;quot; connector at the bottom of the board interferes with one of the posts. A workaround is to find out which post that is (you have a 50% chance of guessing it right, accounting for rotating the board) and then filing away the corner of the post pointing inwards by a few millimetres.&lt;br /&gt;
&lt;br /&gt;
[[File:Quartz64-audio-jack-spacer-issue.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
An alternate solution may be to place plastic spacers with a smaller outer diameter in between the acrylic bottom plate posts and the SBC board.&lt;br /&gt;
&lt;br /&gt;
=== No GPU Acceleration with Debian &amp;quot;Bullseye&amp;quot; Userland ===&lt;br /&gt;
&lt;br /&gt;
Debian Bullseye ships a Mesa version that is too old to contain the required patches for the RK356x SoC's GPU. You can (at your own risk) [https://wiki.debian.org/DebianTesting use the current Debian Testing version ], called &amp;quot;Bookworm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Wireless Connectivity Doesn't Work ===&lt;br /&gt;
&lt;br /&gt;
ROCKPro64 wireless module may have CYW43455 or CYW43456 chips on board (not sure if this is the same for Quartz64 model B). Both chips are supported by &amp;lt;code&amp;gt;brcmfmac&amp;lt;/code&amp;gt; wi-fi driver and &amp;lt;code&amp;gt;btbcm&amp;lt;/code&amp;gt; bluetooth driver. &lt;br /&gt;
&lt;br /&gt;
For CYW43455 drivers attempt to load &amp;lt;code&amp;gt;/lib/firmware/brcm/brcmfmac43455-sdio.bin&amp;lt;/code&amp;gt; for wi-fi and &amp;lt;code&amp;gt;/lib/firmware/brcm/BCM4345C0.hcd&amp;lt;/code&amp;gt; for bluetooth. Corresponding firmware files for CYW43456 are &amp;lt;code&amp;gt;/lib/firmware/brcm/brcmfmac43456-sdio.bin&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/lib/firmware/brcm/BCM4345C5.hcd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On Manjaro firmware files for both bluetooth and wi-fi on CYW43456 on are provided by &amp;lt;code&amp;gt;ap6256-firmware&amp;lt;/code&amp;gt; package (&amp;lt;code&amp;gt;pacman -S ap6256-firmware&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
However for CYW43455 wi-fi firmware is in the &amp;lt;code&amp;gt;linux-firmware&amp;lt;/code&amp;gt; package and bluetooth is in the &amp;lt;code&amp;gt;firmware-raspberrypi&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;pacman -S linux-firmware firmware-raspberrypi&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;linux-firmware&amp;lt;/code&amp;gt; package is missing device specific symlinks for quartz64-a. To create them execute:&lt;br /&gt;
 # ln -s brcmfmac43455-sdio.bin /lib/firmware/brcm/brcmfmac43455-sdio.pine64,quartz64-a.bin&lt;br /&gt;
 # ln -s brcmfmac43455-sdio.AW-CM256SM.txt /lib/firmware/brcm/brcmfmac43455-sdio.pine64,quartz64-a.txt &lt;br /&gt;
&lt;br /&gt;
As of 2022-10-19 device tree in mainline kernel for Quartz64 model A has wrong configuration for the bluetooth driver. [https://patchwork.kernel.org/project/linux-rockchip/patch/20220926125350.64783-1-leo@nabam.net/ Patch] is submitted to the LKML and accepted and included upstream in 6.1-rc7. It's possible to modify dtb file provided by the current kernel using device tree compiler to enable bluetooth or perform &amp;lt;code&amp;gt;make dtbs&amp;lt;/code&amp;gt; in the patched kernel tree to get updated dtb file (&amp;lt;code&amp;gt;arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dtb&amp;lt;/code&amp;gt;). Issue manifests itself with following errors in `dmesg`:&lt;br /&gt;
&lt;br /&gt;
  command 0x0c03 tx timeout&lt;br /&gt;
  Bluetooth: hci0: BCM: Reset failed (-110)&lt;br /&gt;
&lt;br /&gt;
== How-To ==&lt;br /&gt;
&lt;br /&gt;
=== Connect Debug UART ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to get debug output is to connect a 3.3V 1.5mbaud capable UART adapter to the board.&lt;br /&gt;
&lt;br /&gt;
To connect it, connect the ground lead to pin 6, and the RX/TX leads to pins 8 and 10 (consider swapping them if you get no output, things are often mislabelled). These pins are &amp;quot;UART2&amp;quot; in the above GPIO table.&lt;br /&gt;
&lt;br /&gt;
Open a serial terminal at 1500000 bauds, e.g.&lt;br /&gt;
&lt;br /&gt;
 $ picocom -b 1500000 /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
=== Disable Heartbeat LED (Linux) ===&lt;br /&gt;
&lt;br /&gt;
The flashing LED is called the &amp;quot;heartbeat LED&amp;quot;, it blinks in a heart rhythm like fashion once the kernel is running. To disable it, you can run&lt;br /&gt;
&lt;br /&gt;
 # echo none &amp;gt; /sys/class/leds/user-led/trigger&lt;br /&gt;
&lt;br /&gt;
On model A LED device is called &amp;quot;diy-led&amp;quot;, not &amp;quot;user-led&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
On a system with systemd, you can do this as soon as the system is ready to be logged in with a systemd unit like this:&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Turn off heartbeat LED&lt;br /&gt;
 Wants=multi-user.target&lt;br /&gt;
 After=multi-user.target&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=simple&lt;br /&gt;
 ExecStart=sh -c 'echo none &amp;gt; /sys/class/leds/user-led/trigger'&lt;br /&gt;
&lt;br /&gt;
Place it in ''/etc/systemd/system/user-led.service'', and run&lt;br /&gt;
&lt;br /&gt;
 # systemctl daemon-reload&lt;br /&gt;
 # systemctl enable user-led.service&lt;br /&gt;
&lt;br /&gt;
Upon rebooting, you will now notice that the heartbeat LED will blink during boot-up, but stops blinking as soon as the multi-user target is reached (i.e. the user can log in).&lt;br /&gt;
&lt;br /&gt;
=== SATA on model A ===&lt;br /&gt;
&lt;br /&gt;
On model A USB 3.0 and SATA ports are using the same I/O line and can't be used simultaneously. By default USB 3.0 is enabled in linux device tree and SATA is disabled. FDT modifications are required to turn SATA on. &lt;br /&gt;
&lt;br /&gt;
Following script is tested on Manjaro but should work on the other distributions with minimal changes. Device tree compiler package usually provides fdtput command (on Manjaro run: &amp;lt;code&amp;gt; pacman -S dtc&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
 # cp /boot/dtbs/rockchip/rk3566-quartz64-a.dtb /boot/dtbs/rockchip/rk3566-quartz64-a-sata.dtb&lt;br /&gt;
 # fdtput -t s -v /boot/dtbs/rockchip/rk3566-quartz64-a-sata.dtb /usb@fd000000 status disabled&lt;br /&gt;
 # fdtput -t s -v /boot/dtbs/rockchip/rk3566-quartz64-a-sata.dtb /sata@fc400000 status okay&lt;br /&gt;
 # sed -i 's#^FDT /dtbs/rockchip/rk3566-quartz64-a.dtb$#FDT /dtbs/rockchip/rk3566-quartz64-a-sata.dtb#' /boot/extlinux/extlinux.conf&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
== Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
=== Do I Need A Fan/What Heatsink Do I Need? ===&lt;br /&gt;
&lt;br /&gt;
You don't need a fan. The [https://pine64.com/product/rockpro64-20mm-mid-profile-heatsink/ 20mm medium heatsink for Model A is plenty enough]. For Model B, the [https://pine64.com/product/small-fan-type-heatsink/ fan type heatsink] will do fine.&lt;br /&gt;
&lt;br /&gt;
=== Can This Run A Minecraft Server? ===&lt;br /&gt;
&lt;br /&gt;
Yes! Sort of. Testing on an 8GB Model A with PaperMC, [[User:CounterPillow]] was able to out-row world generation in a boat with just one player online, but aside from the slow world gen (which can be pre-generated) the server handled things like TNT explosions and mobs fine. It'll probably do okay with 1-3 players.&lt;br /&gt;
&lt;br /&gt;
=== Do I Need The 5A Power Supply For Model A? ===&lt;br /&gt;
&lt;br /&gt;
You only need the 5A power supply for Model A if you plan on connecting hard disk drives to the 12V header on the board.&lt;br /&gt;
&lt;br /&gt;
=== How Much Power Does It Consume? ===&lt;br /&gt;
&lt;br /&gt;
For Model B, it's &amp;lt;2W in idle (powertop tunables not set), and &amp;lt;5W under full CPU load (&amp;lt;code&amp;gt;stress-ng -c4&amp;lt;/code&amp;gt;). Model A will be similar as it's the same SoC.&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=16346</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=16346"/>
		<updated>2023-02-05T14:06:32Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Mention non-free-firmware archive area for firmware in Bookworm and later releases&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general mainline Linux development information for the [[PineNote]].&lt;br /&gt;
&lt;br /&gt;
== Mainline development ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote. It also aims at listing repositories of work in progress. While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) is expected, only modules relevant to the PineNote hardware should be listed here.&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; | Module&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| Suspend mode driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-sip&amp;lt;/code&amp;gt;&lt;br /&gt;
| The rockchip-sip driver is not mainlineable; it is only needed &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48 (via a hack)]&amp;lt;/sup&amp;gt; for suspend/resume to work when downstream TF-A is used. Suspend on upstream TF-A ([https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952 status]) should work without any special drivers.&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
| https://github.com/smaeul/linux/commit/46e87f1f9c7dd22af26d99f60eb83d2cace43cb5&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| [https://lore.kernel.org/all/20220413221916.50995-1-samuel@sholland.org/ RFC PATCH 00/16 drm/rockchip: Rockchip EBC (&amp;quot;E-Book Controller&amp;quot;) display driver]&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
| driver developed here: &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/tree/rk35/tps65185]&amp;lt;/sup&amp;gt;, small tweaks to resume behavior added on top here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/tps65185]&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&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;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&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;st-accel-i2c&amp;lt;/code&amp;gt; (silan,sc7a20)&lt;br /&gt;
| As of 5.18-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c7a43b089826b17e46419d93c00c0d2f4b26735f]&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
| WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/rk356x-rga]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
Note that the rga2e in the rk3566 only works for RAM &amp;lt;= 4 G!).&lt;br /&gt;
Simple demo program found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/rga-v4l2-demo]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18 &amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt; this got added to the &amp;lt;code&amp;gt;.dtsi&amp;lt;/code&amp;gt; file, but it's status is disabled. Enabling the &amp;lt;code&amp;gt;gpu&amp;lt;/code&amp;gt; node upstream needs to wait till &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt; is upstreamed.&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mainlining notes ===&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== Pages discussing the development efforts ==&lt;br /&gt;
&lt;br /&gt;
The software releases can be found here in the future: &lt;br /&gt;
&lt;br /&gt;
* [[PineNote Software Releases]]&lt;br /&gt;
&lt;br /&gt;
The following pages discuss the development efforts for the PineNote:&lt;br /&gt;
&lt;br /&gt;
* [[PineNote Development]]&lt;br /&gt;
* [[PineNote Development/Flashing]]&lt;br /&gt;
* [[PineNote Development/Booting Linux]]&lt;br /&gt;
* [[PineNote Development/Building Kernel]]&lt;br /&gt;
* [[PineNote Development/TODOs]]&lt;br /&gt;
&lt;br /&gt;
For tweaks and tricks see:&lt;br /&gt;
* [[PineNote Development/Software Tweaks]]&lt;br /&gt;
&lt;br /&gt;
For app development see:&lt;br /&gt;
* [[PineNote Development/Apps]]&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
The '''extlinux.conf''' should have the following contents:&lt;br /&gt;
&lt;br /&gt;
 timeout 10&lt;br /&gt;
 default MAINLINE&lt;br /&gt;
 menu title boot prev kernel&lt;br /&gt;
 &lt;br /&gt;
 label MAINLINE&lt;br /&gt;
   kernel /vmlinuz&lt;br /&gt;
   fdt /rk3566-pinenote.dtb&lt;br /&gt;
   initrd /initramfs&lt;br /&gt;
   append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&lt;br /&gt;
At the U-Boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
 sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section; in Bookworm and later it's in the non-free-firmware section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt). The content of the upstream .txt is different than the Android configuration, but is supposed to work.&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the ''firmware-brcm80211*.deb'' and ''brcmfmac43455-sdio.txt'' file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the ''bluez-firmware'':&lt;br /&gt;
&lt;br /&gt;
 sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in ''/sys'' to alter the refresh mode&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
     Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
     MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
     MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
     Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
     Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
     MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
     Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
=== Notes Written by Some Developers ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
=== Alternative to patching of mesa ===&lt;br /&gt;
&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&lt;br /&gt;
&lt;br /&gt;
* replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
* preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Video of Factory Android OS ===&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (&amp;quot;adb&amp;quot;) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running &amp;lt;code&amp;gt;adb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:PineNote]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development/TODOs&amp;diff=16262</id>
		<title>PineNote Development/TODOs</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development/TODOs&amp;diff=16262"/>
		<updated>2023-02-05T00:37:28Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Fix link to possible audio fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Kernel/driver TODOs =&lt;br /&gt;
These exist, but they haven't been written down yet.&lt;br /&gt;
&lt;br /&gt;
= Userspace TODOs=&lt;br /&gt;
The TODOs in this space are organized around what functionality they enable. A table of the important functions that a user may want in the PineNote and a status are listed below:&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; | Functionality&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Approaches (apps)&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Level of support (subjective)&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Supports&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Does not yet support&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Reading Documents&lt;br /&gt;
| &amp;lt;code&amp;gt;[https://github.com/koreader/koreader Koreader]&amp;lt;/code&amp;gt;&lt;br /&gt;
! style=&amp;quot;background:LightGreen; text-align:center;&amp;quot; | Great&lt;br /&gt;
| Fully featured ebook reader; Supports many filetypes;&lt;br /&gt;
| Handwritten notes&lt;br /&gt;
| Large user base on many devices; codebase has a somewhat of a reputation for being messy&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[https://github.com/xournalpp/xournalpp Xournalpp]&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:LightGreen; text-align:center;&amp;quot; | Good&lt;br /&gt;
| Reading/writing PDFs and other files; &lt;br /&gt;
| No definition support (long-press for definition)&lt;br /&gt;
| Billed more as a note-taking app than a document reading app&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Themes ==&lt;br /&gt;
A lot of getting the PineNote to work nicely will be theming things appropriately. Please list themes for various components here:&lt;br /&gt;
=== GNOME ===&lt;br /&gt;
Untested: https://github.com/fujimo-t/gnome-shell-theme-e-ink&lt;br /&gt;
&lt;br /&gt;
=== GTK ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== GNOME Configurations ==&lt;br /&gt;
See [https://wiki.pine64.org/wiki/PineNote_Development/Apps#Gnome here].&lt;br /&gt;
== Sway Configurations ==&lt;br /&gt;
See [https://wiki.pine64.org/wiki/PineNote_Development/Apps#Sway here].&lt;br /&gt;
&lt;br /&gt;
= Documentation TODOs =&lt;br /&gt;
&lt;br /&gt;
* Pin Mesa Packages so they don't update when we upgrade other packages&lt;br /&gt;
** Add the information near step 5 [https://wiki.pine64.org/wiki/PineNote_Development/Building_Kernel#Steps_to_build here].&lt;br /&gt;
* Control the backlight&lt;br /&gt;
* Building alacritty correctly&lt;br /&gt;
* Force a screen refresh?&lt;br /&gt;
** See conversation here: https://matrix.to/#/!QtTzSRYMuozjbOQkzJ:matrix.org/$tfumBpnP2UPouNpaeFrggR40ZkrD_pHAtJdQmQvzL-o?via=matrix.org&amp;amp;via=kde.org&amp;amp;via=tchncs.de&lt;br /&gt;
&lt;br /&gt;
== Status table draft ==&lt;br /&gt;
&lt;br /&gt;
This table is a draft for the wiki development page:&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; | Functionality&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;min-width: 260px;&amp;quot;  | Component&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width: 120px;&amp;quot; | Status (Android from factory)&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width: 120px;&amp;quot; | Status (Linux)&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
! | Bootloader&lt;br /&gt;
| &amp;lt;code&amp;gt;Bootloader&amp;lt;/code&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:LightGreen; text-align:center;&amp;quot; | Android only&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot; | WIP for Linux&lt;br /&gt;
| Booting into linux requires a patched U-Boot. [https://wiki.pine64.org/wiki/PineNote_Development/Booting_Linux Instructions here.]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;4&amp;quot; | Operating System&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;Stability&amp;lt;/code&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot; | WIP&lt;br /&gt;
| Users have successfully booted Arch, Manjaro, and Debian. Debian has most support right now.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Suspend&amp;lt;/code&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightGreen; text-align:center;&amp;quot; | Works&lt;br /&gt;
| [https://gitlab.com/hrdl/pinenote-shared/-/blob/main/patches/linux/0001-Rudimentary-attempt-to-keep-PMIC-usable-after-suspen.patch This kernel patch] adds suspend support. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Updates&amp;lt;/code&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot; | WIP&lt;br /&gt;
| GPU libs (mesa) and mutter rely on patched packages. These should not be updated via the package manager at the moment, make sure to exclude them.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;Code&amp;gt;Networking&amp;lt;/code&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightGreen; text-align:center;&amp;quot; | Works&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;5&amp;quot;| Components&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;E-Paper Display&amp;lt;/code&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:lightyellow; text-align:center;&amp;quot; | WIP&lt;br /&gt;
| Mostly functional. There is some ghosting and work remains, but the device and screen are usable.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Touch&amp;lt;/code&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightGreen; text-align:center;&amp;quot; | Works&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Bluetooth&amp;lt;/code&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightGreen; text-align:center;&amp;quot; | Works, audio stutters&lt;br /&gt;
| [https://wiki.pine64.org/wiki/PineNote_Development/Building_Kernel#Fixing_Bluetooth Switching the driver] provides stable connections for keyboards, but audio still stutters. Trying to fix this [https://wiki.pine64.org/wiki/PineNote_Development/Software_Tweaks#Preliminary_fix_for_stuttering_bluetooth_audio here].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Sensors&amp;lt;/code&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightBlue; text-align:center;&amp;quot; | Unsure&lt;br /&gt;
| Light sensors? Rotational sensors?&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Buttons&amp;lt;/code&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightGreen; text-align:center;&amp;quot; | Works&lt;br /&gt;
| Power button works.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! | Accessory compatibility, spare parts&lt;br /&gt;
&lt;br /&gt;
| &amp;lt;code&amp;gt;Spare parts&amp;lt;/code&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:lightcoral; text-align:center;&amp;quot; | Not available yet&lt;br /&gt;
| Spare parts currently not available yet in the store.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:PineNote]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15527</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15527"/>
		<updated>2023-01-14T14:07:45Z</updated>

		<summary type="html">&lt;p&gt;Diederik: point st-accel-i2c upstream link to actual commit of the driver&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general mainline Linux development information for the [[PineNote]].&lt;br /&gt;
&lt;br /&gt;
== Mainline development ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote. It also aims at listing repositories of work in progress. While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) is expected, only modules relevant to the PineNote hardware should be listed here.&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; | Module&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| Suspend mode driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-sip&amp;lt;/code&amp;gt;&lt;br /&gt;
| The rockchip-sip driver is not mainlineable; it is only needed &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48 (via a hack)]&amp;lt;/sup&amp;gt; for suspend/resume to work when downstream TF-A is used. Suspend on upstream TF-A ([https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952 status]) should work without any special drivers.&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
| https://github.com/smaeul/linux/commit/46e87f1f9c7dd22af26d99f60eb83d2cace43cb5&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| [https://lore.kernel.org/all/20220413221916.50995-1-samuel@sholland.org/ RFC PATCH 00/16 drm/rockchip: Rockchip EBC (&amp;quot;E-Book Controller&amp;quot;) display driver]&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
| driver developed here: &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/tree/rk35/tps65185]&amp;lt;/sup&amp;gt;, small tweaks to resume behavior added on top here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/tps65185]&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&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;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&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;st-accel-i2c&amp;lt;/code&amp;gt; (silan,sc7a20)&lt;br /&gt;
| As of 5.18-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c7a43b089826b17e46419d93c00c0d2f4b26735f]&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
| WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/rk356x-rga]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
Note that the rga2e in the rk3566 only works for RAM &amp;lt;= 4 G!).&lt;br /&gt;
Simple demo program found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/rga-v4l2-demo]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18 &amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt; this got added to the &amp;lt;code&amp;gt;.dtsi&amp;lt;/code&amp;gt; file, but it's status is disabled. Enabling the &amp;lt;code&amp;gt;gpu&amp;lt;/code&amp;gt; node upstream needs to wait till &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt; is upstreamed.&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mainlining notes ===&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== Pages discussing the development efforts ==&lt;br /&gt;
&lt;br /&gt;
The software releases can be found here in the future: &lt;br /&gt;
&lt;br /&gt;
* [[PineNote Software Releases]]&lt;br /&gt;
&lt;br /&gt;
The following pages discuss the development efforts for the PineNote:&lt;br /&gt;
&lt;br /&gt;
* [[PineNote Development]]&lt;br /&gt;
* [[PineNote Development/Flashing]]&lt;br /&gt;
* [[PineNote Development/Booting Linux]]&lt;br /&gt;
* [[PineNote Development/Building Kernel]]&lt;br /&gt;
* [[PineNote Development/TODOs]]&lt;br /&gt;
&lt;br /&gt;
For tweaks and tricks see:&lt;br /&gt;
* [[PineNote Development/Software Tweaks]]&lt;br /&gt;
&lt;br /&gt;
For app development see:&lt;br /&gt;
* [[PineNote Development/Apps]]&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
The '''extlinux.conf''' should have the following contents:&lt;br /&gt;
&lt;br /&gt;
 timeout 10&lt;br /&gt;
 default MAINLINE&lt;br /&gt;
 menu title boot prev kernel&lt;br /&gt;
 &lt;br /&gt;
 label MAINLINE&lt;br /&gt;
   kernel /vmlinuz&lt;br /&gt;
   fdt /rk3566-pinenote.dtb&lt;br /&gt;
   initrd /initramfs&lt;br /&gt;
   append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&lt;br /&gt;
At the U-Boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
 sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt). The content of the upstream .txt is different than the Android configuration, but is supposed to work.&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the ''firmware-brcm80211*.deb'' and ''brcmfmac43455-sdio.txt'' file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the ''bluez-firmware'':&lt;br /&gt;
&lt;br /&gt;
 sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in ''/sys'' to alter the refresh mode&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
     Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
     MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
     MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
     Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
     Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
     MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
     Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
=== Notes Written by Some Developers ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
=== Alternative to patching of mesa ===&lt;br /&gt;
&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&lt;br /&gt;
&lt;br /&gt;
* replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
* preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Video of Factory Android OS ===&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (&amp;quot;adb&amp;quot;) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running &amp;lt;code&amp;gt;adb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:PineNote]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15525</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15525"/>
		<updated>2023-01-14T11:48:35Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Add reason why 'gpu' node in dts(i) hasn't been enabled upstream yet.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general mainline Linux development information for the [[PineNote]].&lt;br /&gt;
&lt;br /&gt;
== Mainline development ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote. It also aims at listing repositories of work in progress. While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) is expected, only modules relevant to the PineNote hardware should be listed here.&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; | Module&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| Suspend mode driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-sip&amp;lt;/code&amp;gt;&lt;br /&gt;
| The rockchip-sip driver is not mainlineable; it is only needed &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48 (via a hack)]&amp;lt;/sup&amp;gt; for suspend/resume to work when downstream TF-A is used. Suspend on upstream TF-A ([https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952 status]) should work without any special drivers.&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
| https://github.com/smaeul/linux/commit/46e87f1f9c7dd22af26d99f60eb83d2cace43cb5&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| [https://lore.kernel.org/all/20220413221916.50995-1-samuel@sholland.org/ RFC PATCH 00/16 drm/rockchip: Rockchip EBC (&amp;quot;E-Book Controller&amp;quot;) display driver]&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
| driver developed here: &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/tree/rk35/tps65185]&amp;lt;/sup&amp;gt;, small tweaks to resume behavior added on top here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/tps65185]&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&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;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&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;st-accel-i2c&amp;lt;/code&amp;gt; (silan,sc7a20)&lt;br /&gt;
| As of 5.18-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc6ce5ac2c998d7e869d7289736e0097ce7d2ad1]&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
| WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/rk356x-rga]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
Note that the rga2e in the rk3566 only works for RAM &amp;lt;= 4 G!).&lt;br /&gt;
Simple demo program found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/rga-v4l2-demo]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18 &amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt; this got added to the &amp;lt;code&amp;gt;.dtsi&amp;lt;/code&amp;gt; file, but it's status is disabled. Enabling the &amp;lt;code&amp;gt;gpu&amp;lt;/code&amp;gt; node upstream needs to wait till &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt; is upstreamed.&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mainlining notes ===&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== Pages discussing the development efforts ==&lt;br /&gt;
&lt;br /&gt;
The software releases can be found here in the future: &lt;br /&gt;
&lt;br /&gt;
* [[PineNote Software Releases]]&lt;br /&gt;
&lt;br /&gt;
The following pages discuss the development efforts for the PineNote:&lt;br /&gt;
&lt;br /&gt;
* [[PineNote Development]]&lt;br /&gt;
* [[PineNote Development/Flashing]]&lt;br /&gt;
* [[PineNote Development/Booting Linux]]&lt;br /&gt;
* [[PineNote Development/Building Kernel]]&lt;br /&gt;
* [[PineNote Development/TODOs]]&lt;br /&gt;
&lt;br /&gt;
For tweaks and tricks see:&lt;br /&gt;
* [[PineNote Development/Software Tweaks]]&lt;br /&gt;
&lt;br /&gt;
For app development see:&lt;br /&gt;
* [[PineNote Development/Apps]]&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
The '''extlinux.conf''' should have the following contents:&lt;br /&gt;
&lt;br /&gt;
 timeout 10&lt;br /&gt;
 default MAINLINE&lt;br /&gt;
 menu title boot prev kernel&lt;br /&gt;
 &lt;br /&gt;
 label MAINLINE&lt;br /&gt;
   kernel /vmlinuz&lt;br /&gt;
   fdt /rk3566-pinenote.dtb&lt;br /&gt;
   initrd /initramfs&lt;br /&gt;
   append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&lt;br /&gt;
At the U-Boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
 sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt). The content of the upstream .txt is different than the Android configuration, but is supposed to work.&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the ''firmware-brcm80211*.deb'' and ''brcmfmac43455-sdio.txt'' file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the ''bluez-firmware'':&lt;br /&gt;
&lt;br /&gt;
 sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in ''/sys'' to alter the refresh mode&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
     Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
     MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
     MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
     Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
     Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
     MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
     Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
=== Notes Written by Some Developers ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
=== Alternative to patching of mesa ===&lt;br /&gt;
&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&lt;br /&gt;
&lt;br /&gt;
* replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
* preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Video of Factory Android OS ===&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (&amp;quot;adb&amp;quot;) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running &amp;lt;code&amp;gt;adb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:PineNote]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15504</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15504"/>
		<updated>2023-01-13T22:17:46Z</updated>

		<summary type="html">&lt;p&gt;Diederik: add missing 'when' word&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general mainline Linux development information for the [[PineNote]].&lt;br /&gt;
&lt;br /&gt;
== Mainline development ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote. It also aims at listing repositories of work in progress. While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) is expected, only modules relevant to the PineNote hardware should be listed here.&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; | Module&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| Suspend mode driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-sip&amp;lt;/code&amp;gt;&lt;br /&gt;
| The rockchip-sip driver is not mainlineable; it is only needed &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48 (via a hack)]&amp;lt;/sup&amp;gt; for suspend/resume to work when downstream TF-A is used. Suspend on upstream TF-A ([https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952 status]) should work without any special drivers.&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
| https://github.com/smaeul/linux/commit/46e87f1f9c7dd22af26d99f60eb83d2cace43cb5&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| [https://lore.kernel.org/all/20220413221916.50995-1-samuel@sholland.org/ RFC PATCH 00/16 drm/rockchip: Rockchip EBC (&amp;quot;E-Book Controller&amp;quot;) display driver]&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
| driver developed here: &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/tree/rk35/tps65185]&amp;lt;/sup&amp;gt;, small tweaks to resume behavior added on top here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/tps65185]&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&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;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&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;st-accel-i2c&amp;lt;/code&amp;gt; (silan,sc7a20)&lt;br /&gt;
| As of 5.18-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc6ce5ac2c998d7e869d7289736e0097ce7d2ad1]&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
| WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/rk356x-rga]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
Note that the rga2e in the rk3566 only works for RAM &amp;lt;= 4 G!).&lt;br /&gt;
Simple demo program found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/rga-v4l2-demo]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18 &amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt; this got added to the &amp;lt;code&amp;gt;.dtsi&amp;lt;/code&amp;gt; file, but it's status is disabled. The &amp;lt;code&amp;gt;gpu&amp;lt;/code&amp;gt; node getting enabled in the &amp;lt;code&amp;gt;.dts&amp;lt;/code&amp;gt; for PineNote wasn't seen yet.&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mainlining notes ===&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== Pages discussing the development efforts ==&lt;br /&gt;
&lt;br /&gt;
The software releases can be found here in the future: &lt;br /&gt;
&lt;br /&gt;
* [[PineNote Software Releases]]&lt;br /&gt;
&lt;br /&gt;
The following pages discuss the development efforts for the PineNote:&lt;br /&gt;
&lt;br /&gt;
* [[PineNote Development]]&lt;br /&gt;
* [[PineNote Development/Flashing]]&lt;br /&gt;
* [[PineNote Development/Booting Linux]]&lt;br /&gt;
* [[PineNote Development/Building Kernel]]&lt;br /&gt;
* [[PineNote Development/TODOs]]&lt;br /&gt;
&lt;br /&gt;
For tweaks and tricks see:&lt;br /&gt;
* [[PineNote Development/Software Tweaks]]&lt;br /&gt;
&lt;br /&gt;
For app development see:&lt;br /&gt;
* [[PineNote Development/Apps]]&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
The '''extlinux.conf''' should have the following contents:&lt;br /&gt;
&lt;br /&gt;
 timeout 10&lt;br /&gt;
 default MAINLINE&lt;br /&gt;
 menu title boot prev kernel&lt;br /&gt;
 &lt;br /&gt;
 label MAINLINE&lt;br /&gt;
   kernel /vmlinuz&lt;br /&gt;
   fdt /rk3566-pinenote.dtb&lt;br /&gt;
   initrd /initramfs&lt;br /&gt;
   append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&lt;br /&gt;
At the U-Boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
 sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt). The content of the upstream .txt is different than the Android configuration, but is supposed to work.&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the ''firmware-brcm80211*.deb'' and ''brcmfmac43455-sdio.txt'' file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the ''bluez-firmware'':&lt;br /&gt;
&lt;br /&gt;
 sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in ''/sys'' to alter the refresh mode&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
 Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
     Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
     MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
     MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
     Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
 Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
     Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
     MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
     Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
 EndSection&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
=== Notes Written by Some Developers ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
=== Alternative to patching of mesa ===&lt;br /&gt;
&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&lt;br /&gt;
&lt;br /&gt;
* replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
* preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Video of Factory Android OS ===&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (&amp;quot;adb&amp;quot;) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running &amp;lt;code&amp;gt;adb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:PineNote]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15465</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15465"/>
		<updated>2023-01-13T15:09:07Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Copy link to upstreaming status for TF-A from Q64 dev page into rockchip-set notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general mainline Linux development information for the [[PineNote]].&lt;br /&gt;
&lt;br /&gt;
== Mainline development ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote. It also aims at listing repositories of work in progress. While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) is expected, only modules relevant to the PineNote hardware should be listed here.&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; | Module&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| Suspend mode driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-sip&amp;lt;/code&amp;gt;&lt;br /&gt;
| The rockchip-sip driver is not mainlineable; it is only needed (via a hack &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48]&amp;lt;/sup&amp;gt;) for suspend/resume to work because we are using downstream TF-A. Suspend on upstream TF-A ([https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952 status]) should Just Work without any special drivers&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
| https://github.com/smaeul/linux/commit/46e87f1f9c7dd22af26d99f60eb83d2cace43cb5&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| [https://lore.kernel.org/all/20220413221916.50995-1-samuel@sholland.org/ RFC PATCH 00/16 drm/rockchip: Rockchip EBC (&amp;quot;E-Book Controller&amp;quot;) display driver]&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
| driver developed here: &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/tree/rk35/tps65185]&amp;lt;/sup&amp;gt;, small tweaks to resume behavior added on top here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/tps65185]&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&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;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&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;st-accel-i2c&amp;lt;/code&amp;gt; (silan,sc7a20)&lt;br /&gt;
| As of 5.18-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc6ce5ac2c998d7e869d7289736e0097ce7d2ad1]&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
| WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/rk356x-rga]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
Note that the rga2e in the rk3566 only works for RAM &amp;lt;= 4 G!).&lt;br /&gt;
Simple demo program found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/rga-v4l2-demo]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18 &amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt; this got added to the &amp;lt;code&amp;gt;.dtsi&amp;lt;/code&amp;gt; file, but it's status is disabled. The &amp;lt;code&amp;gt;gpu&amp;lt;/code&amp;gt; node getting enabled in the &amp;lt;code&amp;gt;.dts&amp;lt;/code&amp;gt; for PineNote wasn't seen yet.&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mainlining notes ===&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== Pages discussing the development efforts ==&lt;br /&gt;
&lt;br /&gt;
The software releases can be found here in the future: &lt;br /&gt;
&lt;br /&gt;
* [[PineNote Software Releases]]&lt;br /&gt;
&lt;br /&gt;
The following pages discuss the development efforts for the PineNote:&lt;br /&gt;
&lt;br /&gt;
* [[PineNote Development]]&lt;br /&gt;
* [[PineNote Development/Flashing]]&lt;br /&gt;
* [[PineNote Development/Booting Linux]]&lt;br /&gt;
* [[PineNote Development/Building Kernel]]&lt;br /&gt;
* [[PineNote Development/TODOs]]&lt;br /&gt;
&lt;br /&gt;
For tweaks and tricks see:&lt;br /&gt;
* [[PineNote Development/Software Tweaks]]&lt;br /&gt;
&lt;br /&gt;
For app development see:&lt;br /&gt;
* [[PineNote Development/Apps]]&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; should have the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
timeout 10&lt;br /&gt;
default MAINLINE&lt;br /&gt;
menu title boot prev kernel&lt;br /&gt;
&lt;br /&gt;
label MAINLINE&lt;br /&gt;
  kernel /vmlinuz&lt;br /&gt;
  fdt /rk3566-pinenote.dtb&lt;br /&gt;
  initrd /initramfs&lt;br /&gt;
  append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the u-boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt)&lt;br /&gt;
&lt;br /&gt;
''The content of the upstream .txt is different than the Android configuration, but is supposed to work.''&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the firmware-brcm80211*.deb and brcmfmac43455-sdio.txt file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the bluez-firmware &lt;br /&gt;
  sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in /sys to alter the refresh mode&lt;br /&gt;
&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
    MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
    MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
    Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
    MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
    Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
=== Notes Written by Some Developers ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
=== Alternative to patching of mesa ===&lt;br /&gt;
&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&lt;br /&gt;
&lt;br /&gt;
* replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
* preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Video of Factory Android OS ===&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (&amp;quot;adb&amp;quot;) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running &amp;lt;code&amp;gt;adb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:PineNote]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15455</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15455"/>
		<updated>2023-01-13T14:56:15Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Add more context on non-mainlineable status of rockchip-sip driver&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general mainline Linux development information for the [[PineNote]].&lt;br /&gt;
&lt;br /&gt;
== Mainline development ==&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote. It also aims at listing repositories of work in progress. While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) is expected, only modules relevant to the PineNote hardware should be listed here.&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; | Module&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| Suspend mode driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-sip&amp;lt;/code&amp;gt;&lt;br /&gt;
| The rockchip-sip driver is not mainlineable; it is only needed (via a hack &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48]&amp;lt;/sup&amp;gt;) for suspend/resume to work because we are using downstream TF-A. Suspend on upstream TF-A should Just Work without any special drivers&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
| https://github.com/smaeul/linux/commit/46e87f1f9c7dd22af26d99f60eb83d2cace43cb5&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| [https://lore.kernel.org/all/20220413221916.50995-1-samuel@sholland.org/ RFC PATCH 00/16 drm/rockchip: Rockchip EBC (&amp;quot;E-Book Controller&amp;quot;) display driver]&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
| driver developed here: &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/tree/rk35/tps65185]&amp;lt;/sup&amp;gt;, small tweaks to resume behavior added on top here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/tps65185]&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&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;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&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;st-accel-i2c&amp;lt;/code&amp;gt; (silan,sc7a20)&lt;br /&gt;
| As of 5.18-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc6ce5ac2c998d7e869d7289736e0097ce7d2ad1]&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
| WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/rk356x-rga]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
Note that the rga2e in the rk3566 only works for RAM &amp;lt;= 4 G!).&lt;br /&gt;
Simple demo program found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/rga-v4l2-demo]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18 &amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt; this got added to the &amp;lt;code&amp;gt;.dtsi&amp;lt;/code&amp;gt; file, but it's status is disabled. The &amp;lt;code&amp;gt;gpu&amp;lt;/code&amp;gt; node getting enabled in the &amp;lt;code&amp;gt;.dts&amp;lt;/code&amp;gt; for PineNote wasn't seen yet.&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mainlining notes ===&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== Pages discussing the development efforts ==&lt;br /&gt;
&lt;br /&gt;
The software releases can be found here in the future: &lt;br /&gt;
&lt;br /&gt;
* [[PineNote Software Releases]]&lt;br /&gt;
&lt;br /&gt;
The following pages discuss the development efforts for the PineNote:&lt;br /&gt;
&lt;br /&gt;
* [[PineNote Development]]&lt;br /&gt;
* [[PineNote Development/Flashing]]&lt;br /&gt;
* [[PineNote Development/Booting Linux]]&lt;br /&gt;
* [[PineNote Development/Building Kernel]]&lt;br /&gt;
* [[PineNote Development/TODOs]]&lt;br /&gt;
&lt;br /&gt;
For tweaks and tricks see:&lt;br /&gt;
* [[PineNote Development/Software Tweaks]]&lt;br /&gt;
&lt;br /&gt;
For app development see:&lt;br /&gt;
* [[PineNote Development/Apps]]&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; should have the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
timeout 10&lt;br /&gt;
default MAINLINE&lt;br /&gt;
menu title boot prev kernel&lt;br /&gt;
&lt;br /&gt;
label MAINLINE&lt;br /&gt;
  kernel /vmlinuz&lt;br /&gt;
  fdt /rk3566-pinenote.dtb&lt;br /&gt;
  initrd /initramfs&lt;br /&gt;
  append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the u-boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt)&lt;br /&gt;
&lt;br /&gt;
''The content of the upstream .txt is different than the Android configuration, but is supposed to work.''&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the firmware-brcm80211*.deb and brcmfmac43455-sdio.txt file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the bluez-firmware &lt;br /&gt;
  sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in /sys to alter the refresh mode&lt;br /&gt;
&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
    MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
    MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
    Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
    MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
    Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
=== Notes Written by Some Developers ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
=== Alternative to patching of mesa ===&lt;br /&gt;
&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&lt;br /&gt;
&lt;br /&gt;
* replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
* preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Video of Factory Android OS ===&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (&amp;quot;adb&amp;quot;) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running &amp;lt;code&amp;gt;adb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:PineNote]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15369</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15369"/>
		<updated>2023-01-12T19:58:52Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Moved items from 'Development work' into the table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general development information for the [[PineNote]].&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
== Kernel modules / mainlining status ==&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote.&lt;br /&gt;
It also aims at listing repositories of work in progress.&lt;br /&gt;
While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) &lt;br /&gt;
is expected, only modules relevant to the PineNote hardware should be listed here.&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;
| Suspend mode driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-sip&amp;lt;/code&amp;gt;&lt;br /&gt;
| The rockchip-sip driver required for suspend/resume is currently only hacked-in &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
| https://github.com/smaeul/linux/commit/46e87f1f9c7dd22af26d99f60eb83d2cace43cb5&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| [https://lore.kernel.org/all/20220413221916.50995-1-samuel@sholland.org/ RFC PATCH 00/16 drm/rockchip: Rockchip EBC (&amp;quot;E-Book Controller&amp;quot;) display driver]&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
| driver developed here: &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/tree/rk35/tps65185]&amp;lt;/sup&amp;gt;, small tweaks to resume behavior added on top here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/tps65185]&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&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;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&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;st-accel-i2c&amp;lt;/code&amp;gt; (silan,sc7a20)&lt;br /&gt;
| As of 5.18-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc6ce5ac2c998d7e869d7289736e0097ce7d2ad1]&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
| WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/rk356x-rga]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
Note that the rga2e in the rk3566 only works for RAM &amp;lt;= 4 G!).&lt;br /&gt;
Simple demo program found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/rga-v4l2-demo]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18 &amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt; this got added to the &amp;lt;code&amp;gt;.dtsi&amp;lt;/code&amp;gt; file, but it's status is disabled.&lt;br /&gt;
I haven't seen the &amp;lt;code&amp;gt;gpu&amp;lt;/code&amp;gt; node getting enabled in the &amp;lt;code&amp;gt;.dts&amp;lt;/code&amp;gt; for PineNote (yet)?&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Mainline development =&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This section is wrongly placed, please put it in the corresponding page}}&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; should have the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
timeout 10&lt;br /&gt;
default MAINLINE&lt;br /&gt;
menu title boot prev kernel&lt;br /&gt;
&lt;br /&gt;
label MAINLINE&lt;br /&gt;
  kernel /vmlinuz&lt;br /&gt;
  fdt /rk3566-pinenote.dtb&lt;br /&gt;
  initrd /initramfs&lt;br /&gt;
  append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the u-boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt)&lt;br /&gt;
&lt;br /&gt;
''The content of the upstream .txt is different than the Android configuration, but is supposed to work.''&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the firmware-brcm80211*.deb and brcmfmac43455-sdio.txt file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the bluez-firmware &lt;br /&gt;
  sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in /sys to alter the refresh mode&lt;br /&gt;
&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
    MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
    MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
    Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
    MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
    Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= More Information = &lt;br /&gt;
== Notes Written by Some Developers ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
== Alternative to patching of mesa ==&lt;br /&gt;
&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&lt;br /&gt;
&lt;br /&gt;
* replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
* preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Video of Factory Android OS ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (`adb`) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running `adb`.&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=15360</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=15360"/>
		<updated>2023-01-12T19:49:41Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Update link to v2 of TRNG patch submission&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the current status of software support for the [[Quartz64]] single-board computer, and provides links to resources to help prospective contributors get started. Information is kept current on a best-effort basis as various patches get accepted into the kernel.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&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;
! scope=&amp;quot;col&amp;quot; | Applies To&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Output&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;rockchipdrm/VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
As of 5.19-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/604be85547ce4d61b89292d2f9a78c721b778c16]&amp;lt;/sup&amp;gt;, Also featured in Phoronix Article&amp;lt;sup&amp;gt;[https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Rockchip-VOP2-Linux-5.19]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&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-edpphy-naneng&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/phy/rockchip/phy-rockchip-naneng-edp.c] and [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/commit/d7ad116fb30d11d110aeb880754cf27f34c45c40#7e8e2ef87e479c54539dc519c0b92d6b31727f8d_671_681] Coordinate any porting with Rockchip first&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;dw-mipi-dsi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/e18d9b093006d8abd53e1ce13c0d5a8d0fcd5f64]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot; rowspan=&amp;quot;3&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 1080p H.263, MPEG-1, MPEG-2, VP8 and H.264. Mainline as of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5f6bfab6da6531238e899fdf29efd6d0185adc3e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&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;
| VDPU346 handling 4K H.265, H.264 and VP9&lt;br /&gt;
|&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;
| VDPU720 handling JPEG, [[User:CounterPillow]] is working on this&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;5&amp;quot; | [[Mainline Hardware Encoding|Video Encode]] &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;text-align:center; background:LightYellow;&amp;quot;|GStreamer only&lt;br /&gt;
| JPEG on VEPU121&lt;br /&gt;
| Hantro-based. Mainline as of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/6f1ae821a6c4aa9d5b8f437b27ec86fb569219fd]&amp;lt;/sup&amp;gt;&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.264 on VEPU121&lt;br /&gt;
| Hantro-based&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;
| VP8 on VEPU121&lt;br /&gt;
| Hantro-based&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.264 on VEPU540&lt;br /&gt;
| rkvenc-based&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 VEPU540&lt;br /&gt;
| rkvenc-based&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Audio &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-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/43b058698f723e3c2087af7069c0da082a3ecbe1]&amp;lt;/sup&amp;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;rockchip-spdif&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/dac825b6a6bdca41347e25f07354ad94fdc97445]&amp;lt;/sup&amp;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;rk817-codec&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
| Quartz64 Model A/B&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Bootloader&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://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TF-A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In progress&lt;br /&gt;
| &amp;lt;code&amp;gt;U-Boot&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Quartz64_Development#Mainline_U-Boot_Work|See below]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In progress&amp;lt;sup&amp;gt;[https://github.com/jaredmcneill/quartz64_uefi]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Tianocore EDK II&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;4&amp;quot; | Device Tree&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/b33a22a1e7c4248608e533fc4fa524258b3fae84]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A&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;
| Quartz64 Model B&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c37415f55bdadffe5b4c0e7981e9fc7e8b96beea]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model B&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;
| SOQuartz&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c466828fb3ba8cb7f5c3bf28766da9b70bf9745e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| SOQuartz&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;
| PineNote&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d449121e5e8addcee654250cec298c887ecafb32]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| PineNote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot;| Gigabit Ethernet&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;rk3566-gmac&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/3bb3d6b1c1957e88bfc5e77a4557f7e6ba761fe3]&amp;lt;/sup&amp;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;yt8511-phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/48e8c6f1612b3d2dccaea2285231def830cc5b8e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | IOMMU&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-iommu&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c55356c534aa651ccc3053ef2d5d8d810adacf5f]&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;gpio-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/936ee2675eee1faca0dcdfa79165c7990422e0fc]&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;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Thermal Regulation&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-thermal&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/4b14c055a6f644cbeb1156ba24647e92fe51ec69]&amp;lt;/sup&amp;gt;&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;pcie-dw-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0e898eb8df4e34c7b129452444eb7cef68a11f43]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Management&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-domains&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/1782c87b44a0b1a527f01a6a184677c58ccbf9c7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Voltage Control&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;rk3568-pmu-io-voltage-domain&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/28b05a64e47cbceebb8a5f3f643033148d5c06c3]&amp;lt;/sup&amp;gt;&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;spi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d74d99229f4d48f42d674f7a8a1137179efd67ac]&amp;lt;/sup&amp;gt;. Necessary device tree changes [https://patchwork.kernel.org/project/linux-rockchip/list/?series=586691 in review].&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Battery&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;rk817-charger&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/drivers/power/supply/rk817_charger.c?id=11cb8da0189b417392e2334ae967b0ba1f0d1be8]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A, Pinenote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Microphone&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-saradc&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7786da3b5ae167c17f35e22ba35e06006338c2f6]&amp;lt;/sup&amp;gt;. Headphone jack mic seems to connect to &amp;lt;code&amp;gt;SARADC_VIN2_HP_HOOK&amp;lt;/code&amp;gt;, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-usb2phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.17&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/phy/rockchip?h=v5.17-rc1&amp;amp;id=42b559727a45d79c811f493515eb9b7e56016421]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | e-Ink&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review (RFC)&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/20220413221916.50995-1-samuel@sholland.org/T/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| A DRM driver is available [https://github.com/smaeul/linux/commits/rk35/ebc-drm-v5 here]; also see [[RK3566 EBC Reverse-Engineering]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Combo PHY&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;naneng-combphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7160820d742a16313f7802e33c2956c19548e488]&amp;lt;/sup&amp;gt;. Still requires DTS changes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | RGA&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs fixing&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rga&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[User:CounterPillow]] experimentally enabled it&amp;lt;sup&amp;gt;[https://gist.github.com/CounterPillow/6bea809f15ada7ddd3a3d7a4994fdc4e]&amp;lt;/sup&amp;gt; in the device tree and ran gstreamer's v4l2convert through it to test, resulting in a completely garbled output.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Fan Controller&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;emc2301&amp;lt;/code&amp;gt;&lt;br /&gt;
| Previous attempts at mainlining: [http://lkml.iu.edu/hypermail/linux/kernel/1306.1/02473.html] and [https://lore.kernel.org/all/20200928104326.40386-1-biwen.li@oss.nxp.com/]. Latest iteration: [https://gitlab.traverse.com.au/ls1088firmware/traverse-sensors/-/commit/1cdec49171ebafcf32b347e7701224144de8620b]&lt;br /&gt;
| SOQuartz Blade&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | CSI Camera&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;rkisp&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/isp]&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;rockchip-inno-csidphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/29c99fb085ad53e6d5504d1f8d32e6673b9b3a2c]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | NPU&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &lt;br /&gt;
| Downstream version is a closed source SDK. Major undertaking to reimplement this as Linux does not (yet) appear to have a generic architecture for neural accelerators.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Crypto&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-crypto&amp;lt;/code&amp;gt; v2&lt;br /&gt;
| Downstream driver [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/crypto/rockchip] doesn't include a rk3568 compatible either, but the TRM shows that it seemingly matches.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | TRNG&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=699813]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rng&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current Status ==&lt;br /&gt;
&lt;br /&gt;
The following sections give an overview over the current status of different parts of the board. Some parts are waiting on a driver to be written or ported, others only need various adjustments.&lt;br /&gt;
&lt;br /&gt;
According to pgwipeout, I/O device performance is within expected ranges now.&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
&lt;br /&gt;
* eMMC&lt;br /&gt;
* SDMMC0 (SD cards)&lt;br /&gt;
* GMAC (Gigabit Ethernet)&lt;br /&gt;
* USB 2.0&lt;br /&gt;
* SATA 2&lt;br /&gt;
* SATA 3&lt;br /&gt;
* UART&lt;br /&gt;
** UART 0 (Pi-bus)&lt;br /&gt;
** UART 1 (Bluetooth)&lt;br /&gt;
** UART 2 (Pi-bus, debug)&lt;br /&gt;
* Video Decode&lt;br /&gt;
** VP8&lt;br /&gt;
** H.264&lt;br /&gt;
* Video Encode&lt;br /&gt;
** JPEG (it's pretty bad)&lt;br /&gt;
* Battery&lt;br /&gt;
* GPU&lt;br /&gt;
* Audio&lt;br /&gt;
** Analog audio works&lt;br /&gt;
** SPDIF works&lt;br /&gt;
** HDMI works&lt;br /&gt;
* SPI &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
* I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
&lt;br /&gt;
=== Partially Working ===&lt;br /&gt;
&lt;br /&gt;
* PCI-Express Controller &amp;amp;mdash; everything but devices that need cache coherency (e.g. dGPUs) should work&lt;br /&gt;
** [[User:CounterPillow]] noticed some weirdness with NVMe devices disconnecting during heavy write operations, likely down due to power draw on one of the rails as the same sustained bandwidth could be achieved with a different PCIe device with no issue.&lt;br /&gt;
* SDMMC1 (Wi-Fi) &amp;amp;mdash; AP6256 working, BL602 needs some work to make it flash firmware&lt;br /&gt;
* [https://developer.arm.com/architectures/system-architectures/system-components/arm-generic-interrupt-controller GIC] &amp;amp;mdash; needs errata published by Rockchip to get upstream to add device-specific workarounds&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/CAMdYzYrQ5f-mv_VmTq_CRf9tR=j3mwRpKHNLmPFgCF9whsGFRw@mail.gmail.com/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Video Output &amp;amp;mdash; only at 1920x1080p60 and nothing else, very buggy and rough around more than just the edges&lt;br /&gt;
&lt;br /&gt;
=== Confirmed Broken ===&lt;br /&gt;
&lt;br /&gt;
* USB 3.0 (applies to Model A only) &amp;amp;mdash; only works with very short cables and depends on the device. This is due to a hardware design issue relating to the coupling capacitors needed for SATA, which shares the same lines as USB 3.0.&lt;br /&gt;
** Hardware design changes have been suggested to engineers, it's in their hands now.&lt;br /&gt;
* RGA &amp;amp;mdash; only works with memory &amp;amp;le; 4 GiB, because Rockchip didn't make the address registers larger. Oopsie.&lt;br /&gt;
&lt;br /&gt;
=== Needs Testing ===&lt;br /&gt;
&lt;br /&gt;
* E-Paper&lt;br /&gt;
* Microphone Input&lt;br /&gt;
* CSI &amp;amp;mdash; needs CIF driver&lt;br /&gt;
* eDP &amp;amp;mdash; needs PHY driver and controller driver&lt;br /&gt;
* DSI&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== ebc-dev Reverse Engineering and Development ===&lt;br /&gt;
&lt;br /&gt;
The [https://gitlab.com/pine64-org/quartz-bsp/linux-next/-/tree/rk356x-ebc-dev driver for the eInk panel] needs to both be reverse engineered and then rewritten as C. In its current form, it is mostly an assembly dump produced by gcc with debug symbols. See [[RK3566 EBC Reverse-Engineering]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Investigate MCU ===&lt;br /&gt;
&lt;br /&gt;
The RK3566 comes with an integrated RISC-V microcontroller (MCU). It communicates with the A55 host through the Mailbox system driven by the rockchip-mailbox driver. Since this MCU would be quite useful for things such as low power standby mode, investigating how it can be turned on and have firmware flashed to it should greatly enhance the power saving features of the PineNote.&lt;br /&gt;
&lt;br /&gt;
=== Mainline U-Boot Work ===&lt;br /&gt;
&lt;br /&gt;
Currently, mainline U-Boot does not have support for the RK3566 SoC used on the Quartz64. That's why we currently use the &amp;quot;downstream&amp;quot; Rockchip U-Boot, which is based on an old version of U-Boot and contains vendor specific patches that have not undergone the same level of code review as they'd have done had they been submitted upstream.&lt;br /&gt;
&lt;br /&gt;
While the lack of ATF sources means that using mainline U-Boot would still require the use of Rockchip provided binaries for the firmware, the mainline U-Boot works needs to be done eventually anyway, and even with Rockchip blobs, a more modern version of U-Boot will be much nicer to use.&lt;br /&gt;
&lt;br /&gt;
Someone needs to get on the task of investigating what minimally needs to be ported to get the board booting with mainline U-Boot, port those changes, and submit them for review.&lt;br /&gt;
&lt;br /&gt;
==== Things that need to be done ====&lt;br /&gt;
&lt;br /&gt;
This list is non-exhaustive as we don't exactly know how much is missing&lt;br /&gt;
&lt;br /&gt;
* Do the &amp;lt;code&amp;gt;rk3568.dtsi&amp;lt;/code&amp;gt; refactoring into &amp;lt;code&amp;gt;rk356x.dtsi&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;rk3568.dtsi&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;rk3566.dtsi&amp;lt;/code&amp;gt; that the kernel did, probably just port the kernel dtsi files for this&lt;br /&gt;
* Bring the kernel's Quartz64 DTS into the tree&lt;br /&gt;
* Write a &amp;lt;code&amp;gt;quartz64-rk3566_defconfig&amp;lt;/code&amp;gt; based on &amp;lt;code&amp;gt;evb-rk3568_defconfig&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stretch Goals:&lt;br /&gt;
&lt;br /&gt;
* Port the Naneng Combo PHY driver to u-boot so we can SATA, USB 3 and PCIe boot&lt;br /&gt;
* Look into SPI&lt;br /&gt;
* Port the Motorcomm PHY driver to u-boot for networking?&lt;br /&gt;
* Port a basic VOP2 driver to get a framebuffer from u-boot&lt;br /&gt;
&lt;br /&gt;
==== List of Useful Resources for this Task ====&lt;br /&gt;
* Downstream Rockchip U-Boot repository with Quartz64 specific patches: https://gitlab.com/pgwipeout/u-boot-rockchip/-/tree/quartz64&lt;br /&gt;
* Mainline Rockchip custodian U-Boot repository: https://source.denx.de/u-boot/custodians/u-boot-rockchip&lt;br /&gt;
* U-Boot Mailing List: https://lists.denx.de/listinfo/u-boot&lt;br /&gt;
&lt;br /&gt;
=== eDP Driver Porting ===&lt;br /&gt;
&lt;br /&gt;
The eDP PHY driver and controller driver needs to be ported, brought into shape and submitted with proper commit attribution to the Rockchip authors.&lt;br /&gt;
&lt;br /&gt;
[[User:CounterPillow]] has experimentally ported stuff, but it's currently not working.&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel Config Options ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_I2S_TDM&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog and HDMI audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog audio on the Model A&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_STMMAC_ETH&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DWMAC_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet, set this one to Y, m won't work out of the box if the generic PHY driver is y and binds first. Alternatively tell users in board-specific setup instructions to force including the &amp;lt;code&amp;gt;motorcomm&amp;lt;/code&amp;gt; module in initramfs if you set it to m.&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_SDHCI_OF_DWCMSHC&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PCIE_ROCKCHIP_DW_HOST&amp;lt;/code&amp;gt;&lt;br /&gt;
** PCIe&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** PHY for PCIe/SATA/USB3&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DRM_PANFROST&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPU&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_SPDIF&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPDIF audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_DW_HDMI&amp;lt;/code&amp;gt;&lt;br /&gt;
** HDMI PHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI DSI DPHY (note: requires in-review patches linked in status table)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
** Video output&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ARCH_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_USB2&amp;lt;/code&amp;gt;&lt;br /&gt;
** USB 2&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_RTC_DRV_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MFD_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Various things relating to the RK817 chip&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CHARGER_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** RK817 charger (note: requires in-review patches linked in status table)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REGULATOR_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Voltage regulators&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PM_DOMAINS&amp;lt;/code&amp;gt;&lt;br /&gt;
** Power management domains&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_GPIO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PINCTRL_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO and general SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PWM_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** PWM support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IOMMU&amp;lt;/code&amp;gt;&lt;br /&gt;
** IOMMU support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_MBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
** Mailbox support (for communication with MCU)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_SARADC&amp;lt;/code&amp;gt;&lt;br /&gt;
** Analog-to-digital conversion support, for e.g. microphones&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_THERMAL&amp;lt;/code&amp;gt;&lt;br /&gt;
** Temperature sensor and thermal throttling support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SPI_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPI support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_VIDEO_HANTRO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Hardware video decoder support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IODOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support so your I/O pins have the right voltage&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Common clock support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI CSI DPHY&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* pgwipeout's kernel tree&lt;br /&gt;
** https://gitlab.com/pgwipeout/linux-next/-/tree/quartz64-v5.15-rc1&lt;br /&gt;
* BSP based development effort for SPL/U-Boot and Linux&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp&lt;br /&gt;
* Image CI pipeline aimed at developers&lt;br /&gt;
** https://gitlab.com/pgwipeout/quartz64_ci/&lt;br /&gt;
* Rockchip U-Boot&lt;br /&gt;
** https://github.com/rockchip-linux/u-boot&lt;br /&gt;
* Downstream rockchip-linux kernel tree&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux&lt;br /&gt;
* Tianocore EDK II port for UEFI on Quartz64&lt;br /&gt;
** https://github.com/jaredmcneill/quartz64_uefi&lt;br /&gt;
* Mainline U-Boot Port by pgwipeout&lt;br /&gt;
** https://gitlab.com/pgwipeout/u-boot-quartz64&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* Rockchip-SoC Patchwork Page&lt;br /&gt;
** https://patchwork.kernel.org/project/linux-rockchip/list/&lt;br /&gt;
* Rockchip Kernel Mailing List Archive&lt;br /&gt;
** https://lore.kernel.org/linux-rockchip/&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Boot Order ====&lt;br /&gt;
The RK3566 boot ROM will search for a valid ID BLOCK in the following order on the support boot media:&lt;br /&gt;
&lt;br /&gt;
* SPI NOR flash&lt;br /&gt;
* SPI NAND flash&lt;br /&gt;
* SD-Card&lt;br /&gt;
* eMMC&lt;br /&gt;
&lt;br /&gt;
... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip&lt;br /&gt;
flash/boot tools.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader Flashing ====&lt;br /&gt;
&lt;br /&gt;
As per pgwipeout's [https://gitlab.com/pine64-org/quartz-bsp/u-boot/-/commit/12d102b86813378af08b086f3b9c13ed8010754c commit message]:&lt;br /&gt;
* Make a partition named &amp;lt;code&amp;gt;uboot&amp;lt;/code&amp;gt; as partition number 1 at 8 MiB to 16 MiB&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=idblock.bin of=/dev/''&amp;lt;mmc/sd&amp;gt;'' seek=64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=uboot.img of=/dev/''&amp;lt;mmc/sd&amp;gt;''1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== BSP Image Layout ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]][[Category:Rockchip RK3566]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15355</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15355"/>
		<updated>2023-01-12T19:42:54Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Add link to rockchip-ebc's RFC [PATCH 00/16] drm/rockchip: Rockchip EBC (&amp;quot;E-Book Controller&amp;quot;) display driver&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general development information for the [[PineNote]].&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
== Kernel modules / mainlining status ==&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote.&lt;br /&gt;
It also aims at listing repositories of work in progress.&lt;br /&gt;
While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) &lt;br /&gt;
is expected, only modules relevant to the PineNote hardware should be listed here.&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;
| Suspend mode driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-sip&amp;lt;/code&amp;gt;&lt;br /&gt;
| https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
| https://github.com/smaeul/linux/commit/46e87f1f9c7dd22af26d99f60eb83d2cace43cb5&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| [https://lore.kernel.org/all/20220413221916.50995-1-samuel@sholland.org/ RFC PATCH 00/16 drm/rockchip: Rockchip EBC (&amp;quot;E-Book Controller&amp;quot;) display driver]&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&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;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&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;st-accel-i2c&amp;lt;/code&amp;gt; (silan,sc7a20)&lt;br /&gt;
| As of 5.18-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc6ce5ac2c998d7e869d7289736e0097ce7d2ad1]&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18 &amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt; this got added to the &amp;lt;code&amp;gt;.dtsi&amp;lt;/code&amp;gt; file, but it's status is disabled.&lt;br /&gt;
I haven't seen the &amp;lt;code&amp;gt;gpu&amp;lt;/code&amp;gt; node getting enabled in the &amp;lt;code&amp;gt;.dts&amp;lt;/code&amp;gt; for PineNote (yet)?&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Development work ==&lt;br /&gt;
&lt;br /&gt;
* tps65185: driver developed here: &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/tree/rk35/tps65185]&amp;lt;/sup&amp;gt;, small tweaks to resume behavior added on top here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/tps65185] &lt;br /&gt;
* RGA: WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/rk356x-rga]&amp;lt;/sup&amp;gt;. Note that the rga2e in the rk3566 only works for RAM &amp;lt;= 4 G!). Simple demo program found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/rga-v4l2-demo]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* The rockchip-sip driver required for suspend/resume is currently only hacked-in &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mainline development =&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This section is wrongly placed, please put it in the corresponding page}}&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; should have the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
timeout 10&lt;br /&gt;
default MAINLINE&lt;br /&gt;
menu title boot prev kernel&lt;br /&gt;
&lt;br /&gt;
label MAINLINE&lt;br /&gt;
  kernel /vmlinuz&lt;br /&gt;
  fdt /rk3566-pinenote.dtb&lt;br /&gt;
  initrd /initramfs&lt;br /&gt;
  append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the u-boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt)&lt;br /&gt;
&lt;br /&gt;
''The content of the upstream .txt is different than the Android configuration, but is supposed to work.''&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the firmware-brcm80211*.deb and brcmfmac43455-sdio.txt file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the bluez-firmware &lt;br /&gt;
  sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in /sys to alter the refresh mode&lt;br /&gt;
&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
    MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
    MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
    Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
    MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
    Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= More Information = &lt;br /&gt;
== Notes Written by Some Developers ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
== Alternative to patching of mesa ==&lt;br /&gt;
&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&lt;br /&gt;
&lt;br /&gt;
* replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
* preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Video of Factory Android OS ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (`adb`) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running `adb`.&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15348</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15348"/>
		<updated>2023-01-12T19:36:37Z</updated>

		<summary type="html">&lt;p&gt;Diederik: add links to rockchip-sip and ws8100-pen drivers commits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general development information for the [[PineNote]].&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
== Kernel modules / mainlining status ==&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote.&lt;br /&gt;
It also aims at listing repositories of work in progress.&lt;br /&gt;
While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) &lt;br /&gt;
is expected, only modules relevant to the PineNote hardware should be listed here.&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;
| Suspend mode driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-sip&amp;lt;/code&amp;gt;&lt;br /&gt;
| https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
| https://github.com/smaeul/linux/commit/46e87f1f9c7dd22af26d99f60eb83d2cace43cb5&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip_ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&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;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&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;st-accel-i2c&amp;lt;/code&amp;gt; (silan,sc7a20)&lt;br /&gt;
| As of 5.18-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc6ce5ac2c998d7e869d7289736e0097ce7d2ad1]&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18 &amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt; this got added to the &amp;lt;code&amp;gt;.dtsi&amp;lt;/code&amp;gt; file, but it's status is disabled.&lt;br /&gt;
I haven't seen the &amp;lt;code&amp;gt;gpu&amp;lt;/code&amp;gt; node getting enabled in the &amp;lt;code&amp;gt;.dts&amp;lt;/code&amp;gt; for PineNote (yet)?&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Development work ==&lt;br /&gt;
&lt;br /&gt;
* tps65185: driver developed here: &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/tree/rk35/tps65185]&amp;lt;/sup&amp;gt;, small tweaks to resume behavior added on top here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/tps65185] &lt;br /&gt;
* RGA: WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/rk356x-rga]&amp;lt;/sup&amp;gt;. Note that the rga2e in the rk3566 only works for RAM &amp;lt;= 4 G!). Simple demo program found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/rga-v4l2-demo]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* The rockchip-sip driver required for suspend/resume is currently only hacked-in &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mainline development =&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This section is wrongly placed, please put it in the corresponding page}}&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; should have the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
timeout 10&lt;br /&gt;
default MAINLINE&lt;br /&gt;
menu title boot prev kernel&lt;br /&gt;
&lt;br /&gt;
label MAINLINE&lt;br /&gt;
  kernel /vmlinuz&lt;br /&gt;
  fdt /rk3566-pinenote.dtb&lt;br /&gt;
  initrd /initramfs&lt;br /&gt;
  append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the u-boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt)&lt;br /&gt;
&lt;br /&gt;
''The content of the upstream .txt is different than the Android configuration, but is supposed to work.''&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the firmware-brcm80211*.deb and brcmfmac43455-sdio.txt file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the bluez-firmware &lt;br /&gt;
  sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in /sys to alter the refresh mode&lt;br /&gt;
&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
    MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
    MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
    Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
    MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
    Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= More Information = &lt;br /&gt;
== High-level developer new to embedded linux? ==&lt;br /&gt;
Here are some resources I have found helpful in learning to develop on embedded linux devices:&lt;br /&gt;
* Great youtube series introducing you to the kernel and lower-level components of Linux: https://www.youtube.com/watch?v=WiZ05pnHZqM&lt;br /&gt;
* https://embetronicx.com/&lt;br /&gt;
* https://bootlin.com/training/&lt;br /&gt;
* https://www.nand2tetris.org&lt;br /&gt;
&lt;br /&gt;
== Notes Written by Some Developers ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
== Alternative to patching of mesa ==&lt;br /&gt;
&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&lt;br /&gt;
&lt;br /&gt;
* replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
* preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building the most recent kernel ==&lt;br /&gt;
See [[PineNote Development/Building Kernel]].&lt;br /&gt;
&lt;br /&gt;
== Video of Factory Android OS ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (`adb`) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running `adb`.&lt;br /&gt;
&lt;br /&gt;
== Emulator for Developing/Testing Pinenote Apps ==&lt;br /&gt;
https://github.com/michaelshiel/picom-epaper&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15312</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15312"/>
		<updated>2023-01-12T15:41:46Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Fix rockchip-ebc.patch link ('_' -&amp;gt; '-')&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general development information for the [[PineNote]]. If you are new and down to try a new installation process, the easiest way to get linux is likely to [https://wiki.pine64.org/wiki/PineNote_Development/Installing_Debian install Debian] -- NOTE THAT THIS INSTALLATION PROCESS IS VERY NEW. While many people have been using the kernel that will be installed safely at this point, the instructions for installing Debian via rootfs are very new. Take backups!&lt;br /&gt;
&lt;br /&gt;
The more stable recommended approach is described below:&lt;br /&gt;
&lt;br /&gt;
Start with [https://github.com/DorianRudolph/pinenotes Dorian's guide] which will guide you through getting Arch installed. For instructions on building the latest kernel, see [[PineNote Development/Building Kernel]]. For helpful configurations, see [[PineNote Development/Apps]]. For ways to pitch in, see [[PineNote Development/TODOs]]. To boot Linux by default instead of Android, see [[PineNote Development/Booting Linux]]. [https://www.youtube.com/watch?v=ZCLyJfbzbrU Here is a video] of a user running Manjaro and some apps on their PineNote on 9/10/2022.&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
== Kernel modules / mainlining status ==&lt;br /&gt;
&lt;br /&gt;
WORK IN PROGRESS !&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote.&lt;br /&gt;
It also aims at listing repositories of work in progress.&lt;br /&gt;
While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) &lt;br /&gt;
is expected, only modules relevant to the PineNote hardware should be listed here.&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;
| Suspend mode driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
|&amp;lt;code&amp;gt;rockchip-sip&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip_ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&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;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&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;st-accel-i2c&amp;lt;/code&amp;gt; (silan,sc7a20)&lt;br /&gt;
| As of 5.18-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc6ce5ac2c998d7e869d7289736e0097ce7d2ad1]&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18 &amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt; this got added to the &amp;lt;code&amp;gt;.dtsi&amp;lt;/code&amp;gt; file, but it's status is disabled.&lt;br /&gt;
I haven't seen the &amp;lt;code&amp;gt;gpu&amp;lt;/code&amp;gt; node getting enabled in the &amp;lt;code&amp;gt;.dts&amp;lt;/code&amp;gt; for PineNote (yet)?&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Development work ====&lt;br /&gt;
&lt;br /&gt;
* tps65185: driver developed here: &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/tree/rk35/tps65185]&amp;lt;/sup&amp;gt;, small tweaks to resume behaviour added on top here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/tps65185] &lt;br /&gt;
* RGA: WIP patches for activation on the Pinenote/dithering/Y4-conversion can be found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/linux/commits/mw/rk35/rk356x-rga]&amp;lt;/sup&amp;gt;. Note that the rga2e in the rk3566 only works for RAM &amp;lt;= 4 G!). Simple demo program found here: &amp;lt;sup&amp;gt;[https://github.com/m-weigand/rga-v4l2-demo]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* The rockchip-sip driver required for suspend/resume is currently only hacked-in &amp;lt;sup&amp;gt;[https://github.com/smaeul/linux/commit/72127ca2806623a9de52cc1de39b06a38a22fe48]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= More Information = &lt;br /&gt;
== High-level developer new to embedded linux? ==&lt;br /&gt;
Here are some resources I have found helpful in learning to develop on embedded linux devices:&lt;br /&gt;
* Great youtube series introducing you to the kernel and lower-level components of Linux: https://www.youtube.com/watch?v=WiZ05pnHZqM&lt;br /&gt;
* https://embetronicx.com/&lt;br /&gt;
* https://bootlin.com/training/&lt;br /&gt;
* https://www.nand2tetris.org&lt;br /&gt;
&lt;br /&gt;
== Notes Written by Some Developers ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip-ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
== Alternative to patching of mesa ==&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&amp;lt;br&amp;gt;&lt;br /&gt;
- replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
- preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building the most recent kernel ==&lt;br /&gt;
See [https://wiki.pine64.org/wiki/PineNote_Development/Building_Kernel here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Video of Factory Android OS ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (`adb`) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running `adb`.&lt;br /&gt;
&lt;br /&gt;
== Emulator for Developing/Testing Pinenote Apps ==&lt;br /&gt;
https://github.com/michaelshiel/picom-epaper&lt;br /&gt;
&lt;br /&gt;
= Flashing Software =&lt;br /&gt;
Currently, the only ways to flash software are from the factory Android installation (UART shell, adb, or fastboot) or by using rkdeveloptool.&lt;br /&gt;
&lt;br /&gt;
== Backup of the content of the internal MMC before you mess anything up ==&lt;br /&gt;
Especially the '''waveform''' partition contains data '''unique''' to your PineNote and is a prime candidate for backup.&lt;br /&gt;
&lt;br /&gt;
But other partitions like uboot (need for any operation of the device) or the un-partitioned space at the beginning containing the GPT partition table (and presumably the VCOM setting for the e-ink display and maybe device mac addresses) contains data you may wish to backup.&lt;br /&gt;
&lt;br /&gt;
Depending of your personal level of data hoarder you may want to backup more than this or even just everything (the large userdata partition is supposed to be able to be repopulated as empty space by Android)&lt;br /&gt;
&lt;br /&gt;
In any case it is easier to restore/extract data from a backup than not having one if you need one.&lt;br /&gt;
&lt;br /&gt;
=== Manually using rkdeveloptool ===&lt;br /&gt;
Dorian has some nice [https://github.com/DorianRudolph/pinenotes notes regarding the PineNote]&lt;br /&gt;
&lt;br /&gt;
Don't forget to install a patched uboot for reading beyond 32MB and to respect the 2GB limit/bug of the current rkdeveloptool as per his notes&lt;br /&gt;
&lt;br /&gt;
=== Automated backup using a script and rkdeveloptool ===&lt;br /&gt;
[https://github.com/talpadk/pinenote-backup pinenote-backup] is a python script for detecting the partitions and automating the backup of partitions or the whole disk&lt;br /&gt;
&lt;br /&gt;
I also requires a patched u-boot but automatically handles the 2GB limit by splitting up larger reads into smaller ones&lt;br /&gt;
&lt;br /&gt;
=== Using the factory Android installation ===&lt;br /&gt;
For any one knowing how and with which caveats: Write ME&lt;br /&gt;
&lt;br /&gt;
=== Using a user installed Linux ===&lt;br /&gt;
A Linux installed to the cache partition should be able to easily backup everything over WiFi or to a USB stick/disk using dd&lt;br /&gt;
&lt;br /&gt;
However the user would need to backup the cache partition themself (if they want that).&lt;br /&gt;
&lt;br /&gt;
And more importantly they would only be getting the backup ''after'' they started playing with the content of the MMC.&lt;br /&gt;
&lt;br /&gt;
== Side-by-side setup ==&lt;br /&gt;
&lt;br /&gt;
It is possible to set up a partition for mainline development without disturbing the factory Android installation. This allows updating a mainline kernel, DTB, and initramfs over Wi-Fi until WiFi or USB OTG is working in mainline Linux.&lt;br /&gt;
&lt;br /&gt;
=== Without Repartitioning ===&lt;br /&gt;
&lt;br /&gt;
The recommended partition for this is &amp;lt;tt&amp;gt;mmcblk0p11&amp;lt;/tt&amp;gt; aka &amp;lt;tt&amp;gt;/cache&amp;lt;/tt&amp;gt;. It is large and already formatted as &amp;lt;tt&amp;gt;ext4&amp;lt;/tt&amp;gt;, so it is readable from U-Boot. Here are some general steps:&lt;br /&gt;
&lt;br /&gt;
# From the UART or adb shell, set up your chroot in &amp;lt;tt&amp;gt;/cache&amp;lt;/tt&amp;gt;. I used the Alpine Linux rootfs tarball.&lt;br /&gt;
# Copy in your kernel and DTB, using for example &amp;lt;tt&amp;gt;scp&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;wget&amp;lt;/tt&amp;gt; inside the chroot.&lt;br /&gt;
# Finally, create and boot an &amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; as described below.&lt;br /&gt;
&lt;br /&gt;
=== With Repartitioning ===&lt;br /&gt;
&lt;br /&gt;
It is possible to shrink the &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt; partition, and create a new partition at the end for use with mainline Linux. This provides much more space than &amp;lt;tt&amp;gt;cache&amp;lt;/tt&amp;gt;. However, because &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt; is formatted with &amp;lt;tt&amp;gt;f2fs&amp;lt;/tt&amp;gt;, and that filesystem cannot be shrunk, resizing the partition requires wiping &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# Back up any necessary files from userdata&lt;br /&gt;
# Boot to a mainline kernel from &amp;lt;tt&amp;gt;mmcblk0p11&amp;lt;/tt&amp;gt;, either using that partition as rootfs (see above), or using an initramfs with repartitioning tools&lt;br /&gt;
# Modify the partition table with your favorite tool, e.g. &amp;lt;tt&amp;gt;fdisk&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;gdisk&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;parted&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Reboot into &amp;lt;tt&amp;gt;fastboot&amp;lt;/tt&amp;gt; and wipe &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# Reboot into Android, where you can now chroot in and install your favorite distribution to the new partition.&lt;br /&gt;
&lt;br /&gt;
== Using rkdeveloptool ==&lt;br /&gt;
&lt;br /&gt;
rkdeveloptool is a command line utility built on libusb.&lt;br /&gt;
&lt;br /&gt;
=== Downloading and Building rkdeveloptool ===&lt;br /&gt;
&lt;br /&gt;
PINE64 develops [https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool its own updated fork of rkdeveloptool on GitLab].&lt;br /&gt;
&lt;br /&gt;
You will need to have libusb 1.0, its development headers and scdoc installed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool.git&lt;br /&gt;
cd rkdeveloptool&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets up all the build files. You can then compile with &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; inside the build directory.&lt;br /&gt;
&lt;br /&gt;
After you're done, you'll likely also need to install the udev rules, or else your user won't have permission to access the USB devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp 99-rk-rockusb.rules /etc/udev/rules.d/&lt;br /&gt;
sudo udevadm control --reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copying the udev rules is also performed automatically when you &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Building Downstream U-Boot ===&lt;br /&gt;
&lt;br /&gt;
While in maskrom mode, we need to have a u-boot to download onto the device for any of the other commands to work. To build you'll also need to install device-tree-compiler.&lt;br /&gt;
&lt;br /&gt;
You also need to install Python and pyelftools.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Note that rkbin is a &amp;amp;gt;5GB download!&amp;lt;/b&amp;gt; This will take some time to clone and process the deltas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone -b quartz64 https://gitlab.com/pgwipeout/u-boot-rockchip.git&lt;br /&gt;
git clone -b rkbin https://github.com/JeffyCN/rockchip_mirrors.git rkbin&lt;br /&gt;
cd u-boot-rockchip&lt;br /&gt;
# If using Arch Linux, export CROSS_COMPILE=aarch64-linux-gnu-&lt;br /&gt;
export CROSS_COMPILE=aarch64-none-linux-gnu-&lt;br /&gt;
make rk3566-quartz64_defconfig&lt;br /&gt;
./make.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
In the version I cloned (current as of 2022-01-02), I had to make a change to one line to get a clean compilation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/lib/avb/libavb/avb_slot_verify.c b/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
index 123701fc3b..64a1ce6450 100644&lt;br /&gt;
--- a/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
+++ b/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
@@ -296,7 +296,7 @@ static AvbSlotVerifyResult load_and_verify_hash_partition(&lt;br /&gt;
   bool image_preloaded = false;&lt;br /&gt;
   uint8_t* digest;&lt;br /&gt;
   size_t digest_len;&lt;br /&gt;
-  const char* found;&lt;br /&gt;
+  const char* found = NULL;&lt;br /&gt;
   uint64_t image_size;&lt;br /&gt;
   size_t expected_digest_len = 0;&lt;br /&gt;
   uint8_t expected_digest_buf[AVB_SHA512_DIGEST_SIZE];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For systems where the global python executable points to python2, compilation fails with an error related to pyelftools not being installed (even if it is). To fix this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/make.sh b/make.sh&lt;br /&gt;
index 2bba05b4e4..cfe5b0afd5 100755&lt;br /&gt;
--- a/make.sh&lt;br /&gt;
+++ b/make.sh&lt;br /&gt;
@@ -758,7 +758,7 @@ function pack_fit_image()&lt;br /&gt;
        fi&lt;br /&gt;
 &lt;br /&gt;
        if [ &amp;quot;${ARM64_TRUSTZONE}&amp;quot; == &amp;quot;y&amp;quot; ]; then&lt;br /&gt;
-               if ! python -c &amp;quot;import elftools&amp;quot; ; then&lt;br /&gt;
+               if ! python3 -c &amp;quot;import elftools&amp;quot; ; then&lt;br /&gt;
                        echo &amp;quot;ERROR: No python 'pyelftools', please: pip install pyelftools&amp;quot;&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Entering Maskrom/Rockusb Mode ===&lt;br /&gt;
&lt;br /&gt;
There are three ways to get into Maskrom/Rockusb mode:&lt;br /&gt;
&lt;br /&gt;
====  The easy way ====&lt;br /&gt;
&lt;br /&gt;
# Flip the device around so that the display faces down&lt;br /&gt;
# Lay the pen on the right side, with its tip pointing towards the speaker grill, and its magnet pointing towards the upper right corner of the label on the back (or place the magnetic cap from the pen on the spot marked on the back).&lt;br /&gt;
# Turn the device on and wait for it to show up in &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt;. It should now be in Loader mode, according to &amp;lt;code&amp;gt;rkdeveloptool list-devices&amp;lt;/code&amp;gt; (note that &amp;quot;Loader&amp;quot; here indicates U-Boot's Rockusb; separately, booting with an erased eMMC displays &amp;quot;Maskrom&amp;quot; [not &amp;quot;Loader&amp;quot;] from the RK3566).&lt;br /&gt;
# Unplug the device and plug it back in. It should now be in Rockusb mode.&lt;br /&gt;
&lt;br /&gt;
This can be a bit fiddly to get right, and may need a few tries.&lt;br /&gt;
&lt;br /&gt;
==== The u-boot way ====&lt;br /&gt;
# Interrupt the u-boot startup using ctrl-c (while attached using an UART dongle)&lt;br /&gt;
# While in u-boot use the command &amp;quot;rockusb 0 mmc 0&amp;quot; to start rockusb mode.&lt;br /&gt;
&lt;br /&gt;
One benefit from this is, that if you have an UART dongle that allows to simultaneous having an UART and USB connection, there is no need to plug and unplug cables and flipping the PineNote around and placing magnets.  &lt;br /&gt;
&lt;br /&gt;
This is especially helpful when changing back and forth between u-boot and rockusb, for instance when trying to develop u-boot.&lt;br /&gt;
&lt;br /&gt;
==== Shorting test points ====&lt;br /&gt;
&lt;br /&gt;
If the bootloader is broken/corrupted, you cannot get to Maskrom without opening up the device (it can be opened using spudger and a bit of patience).&lt;br /&gt;
&lt;br /&gt;
Once inside, short TP1301 (GND) and TP1302 (eMMC_D0/FLASH_D0) with a small tweezers, this is how it looks on board view (credit to Caleb):&lt;br /&gt;
&lt;br /&gt;
[[File:PineNote_Maskrom_TP.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Then plug the device to the computer and if you see the device with VID=2207/PID=350a then it should be in Maskrom mode, you can verify by typing &amp;lt;code&amp;gt;rkdeveloptool list-devices&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Jan 07 15:04:13 melttower kernel: usb 1-14: New USB device found, idVendor=2207, idProduct=350a, bcdDevice= 1.00&lt;br /&gt;
Jan 07 15:04:13 melttower kernel: usb 1-14: New USB device strings: Mfr=0, Product=0, SerialNumber=0&lt;br /&gt;
&lt;br /&gt;
$ rkdeveloptool list-devices&lt;br /&gt;
DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=10e    Maskrom&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If nothing shows up, you can try to hold down the power button for 5 seconds and then try again.&lt;br /&gt;
&lt;br /&gt;
=== Running rkdeveloptool ===&lt;br /&gt;
&lt;br /&gt;
First, you'll want to make sure the device you've connected is in maskrom mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should output something like &amp;lt;code&amp;gt;DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=202    Maskrom&amp;lt;/code&amp;gt;. If it doesn't, see [[PineNote Development#Entering Maskrom Mode]].&lt;br /&gt;
&lt;br /&gt;
You can now download u-boot onto it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool boot ../u-boot-rockchip/rk356x_spl_loader_v1.08.111.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should output &amp;lt;code&amp;gt;Downloading bootloader succeeded.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We can now verify that this worked using e.g. the &amp;quot;read flash info&amp;quot; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool read-flash-info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TODO:''' finish this section&lt;br /&gt;
&lt;br /&gt;
=== Creating a mainline boot image ===&lt;br /&gt;
&lt;br /&gt;
You can create a filesystem image that replaces the Android boot or recovery partition by doing roughly the following:&lt;br /&gt;
&lt;br /&gt;
# Erase boot and dtbo with rkdeveloptool or fastboot (back them up first!!!)&lt;br /&gt;
# Create an ext2 partition image and mount it (fallocate, mkfs.ext2)&lt;br /&gt;
# Build your mainline kernel&lt;br /&gt;
# Copy the kernel, dtb and an initramfs to the root of the mounted image (use any old postmarketOS initramfs)&lt;br /&gt;
# Create a file in the root of the mounted image called &amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; as described below&lt;br /&gt;
# Unmount the image and then use rkdeveloptool to flash it to the &amp;quot;recovery&amp;quot; partition on the pinenote (it's about the right size until we get around to replacing the partition layout).&lt;br /&gt;
&lt;br /&gt;
== Using fastboot ==&lt;br /&gt;
&lt;br /&gt;
Follow the steps for &amp;quot;Creating a mainline boot.img&amp;quot;, but instead of flashing it with rkdeveloptool, use fastboot. You can enter fastboot in either of two ways:&lt;br /&gt;
&lt;br /&gt;
# Use &amp;quot;reboot bootloader&amp;quot; from adb or a UART console.&lt;br /&gt;
# Get a U-Boot prompt and run &amp;lt;code&amp;gt;fastboot usb 0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Mainline development =&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; should have the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
timeout 10&lt;br /&gt;
default MAINLINE&lt;br /&gt;
menu title boot prev kernel&lt;br /&gt;
&lt;br /&gt;
label MAINLINE&lt;br /&gt;
  kernel /vmlinuz&lt;br /&gt;
  fdt /rk3566-pinenote.dtb&lt;br /&gt;
  initrd /initramfs&lt;br /&gt;
  append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the u-boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt)&lt;br /&gt;
&lt;br /&gt;
''The content of the upstream .txt is different than the Android configuration, but is supposed to work.''&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the firmware-brcm80211*.deb and brcmfmac43455-sdio.txt file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the bluez-firmware &lt;br /&gt;
  sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in /sys to alter the refresh mode&lt;br /&gt;
&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
    MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
    MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
    Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
    MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
    Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64&amp;diff=15308</id>
		<title>Quartz64</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64&amp;diff=15308"/>
		<updated>2023-01-11T18:19:40Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Link to Plebian images as that uses the Debian kernel and that works. No need to compile one yourself.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Quartz64modelb.png|400px|thumb|right|The Quartz64 Model B]]&lt;br /&gt;
&lt;br /&gt;
The '''Quartz64''' is the most recent Single Board Computer offering from PINE64, with Model A initially released in June of 2021 and Model B in May of 2022. It is powered by a Rockchip RK3566 Quad-Core ARM Cortex A55 64-Bit Processor with a MALI G-52 GPU.&lt;br /&gt;
&lt;br /&gt;
Key features include a PCIe x4 open ended slot (model A) or m.2 (model B) using one Gen2 lane electrically, and the use of LPDDR4 RAM.&lt;br /&gt;
&lt;br /&gt;
The Quartz64 has three LPDDR4 system memory options: 2GB, 4GB or 8GB. For booting, there is an eMMC module socket (supporting up to 128GB) and microSD slot, as well as a footprint to solder on an SPI flash chip. The board is equipped with HDMI, 1x USB 3.0 type A Host, 3x USB 2.0 Host, Gigabit Ethernet, SATA (model A), GPIO Bus, MiPi DSI interface, e-ink interface (model A), eDP interface (model A), touch Panel interface (model A), MiPi CSI interface, as well as many other device interfaces such as UART, SPI, I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C, for makers to integrate with sensors and other peripherals. Many different Operating Systems (OS) are freely available from the open source community, such as Linux (Ubuntu, Debian, Arch), BSD, and Android.&lt;br /&gt;
&lt;br /&gt;
== Software releases ==&lt;br /&gt;
&lt;br /&gt;
{{warning|You are strongly encouraged to procure a 3.3V UART serial adapter capable of running at 1.5 mbauds, such as [https://pine64.com/product/serial-console-woodpecker-edition/ the woodpecker] if you want to use a Quartz64, as some images' u-boot may have no video output on this chip.}}&lt;br /&gt;
{{note|'''Note:''' OS images are provided by the community, not by PINE64. Most community projects currently aim at getting mainline Linux running on the board, not some vendor provided kernel that will never be receiving updates. A mainline-first approach allows for the boards to continue receiving important updates, such as security updates, for years to come, as well as have higher quality code in the kernel as it underwent independent review, but does mean that not all aspects of the hardware work right out of the gate.}}&lt;br /&gt;
&lt;br /&gt;
=== Armbian ===&lt;br /&gt;
[[File:armbian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
Armbian is a base operating system platform for single board computers&lt;br /&gt;
&lt;br /&gt;
* Lightweight Debian or Ubuntu based Linux distribution specialised for ARM development boards&lt;br /&gt;
* Each system is compiled, assembled and optimised by [https://github.com/armbian/build Armbian Build Tools]&lt;br /&gt;
* It has powerful build and software development tools to make custom builds&lt;br /&gt;
&lt;br /&gt;
Download [https://github.com/armbian/build/releases/ latest, as fresh as possible, upon code change, images]&lt;br /&gt;
&lt;br /&gt;
Support on Armbian forums https://forum.armbian.com/forum/96-upcoming-hardware-wip/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manjaro ARM ===&lt;br /&gt;
[[File:Manjaro.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
Manjaro ARM is a user friendly rolling release distribution, based on Arch Linux ARM.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/manjaro-arm/quartz64-a-images/releases Images for Model A on GitHub]&lt;br /&gt;
* [https://github.com/manjaro-arm/quartz64-b-images/releases Images for Model B on GitHub]&lt;br /&gt;
&lt;br /&gt;
Most of the hardware support is already available in the mainline kernel. If some devices doesn't work it is possible to swap to the linux-quartz64 kernel &amp;lt;code&amp;gt;pacman -S linux-quartz64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Following desktop options available:&lt;br /&gt;
* Gnome&lt;br /&gt;
* KDE Plasma&lt;br /&gt;
* Mate&lt;br /&gt;
* Sway&lt;br /&gt;
* XFCE&lt;br /&gt;
as well as minimal image without desktop.&lt;br /&gt;
&lt;br /&gt;
=== pgwipeout's Quartz64 CI ===&lt;br /&gt;
&lt;br /&gt;
pgwipeout provides continuously rebuilt set of images for Quartz64 devices which includes a Debian installer and a buildroot rescue environment. It is aimed at advanced users who generally know their way around a Linux system, and as a baseline for whether something is working or not. Works on both SD cards and eMMC, uses pgwipeout's patched kernel. Kernels aren't auto-updated on the installed system, so the user manually has to do this by mounting the actual correct boot partition.&lt;br /&gt;
&lt;br /&gt;
'''Download:''' https://gitlab.com/pgwipeout/quartz64_ci/-/pipelines (Click the three dots on the right, download the merge-job archive.)&lt;br /&gt;
&lt;br /&gt;
For Quartz64 Model A, flash &amp;lt;tt&amp;gt;rk3566-quartz64-a.dtb.img.xz&amp;lt;/tt&amp;gt;. On Linux, you can for example do this as follows, assuming your target device is &amp;lt;tt&amp;gt;/dev/sdX&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 sudo -i; xzcat /path/to/rk3566-quartz64-a.dtb.img.xz &amp;gt; /dev/sdX&lt;br /&gt;
&lt;br /&gt;
For Quartz64 Model B, use &amp;lt;tt&amp;gt;rk3566-quartz64-b.dtb.img.xz&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
For line by line instructions to boot Quartz64 CI on a microSD card and use it to install Debian onto an eMMC follow these instructions https://wiki.pine64.org/wiki/Installing_Debian_on_the_Quartz64&lt;br /&gt;
&lt;br /&gt;
=== DietPi ===&lt;br /&gt;
&amp;lt;div style=float:right&amp;gt;[[File:dietpi.png|center|100px]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* DietPi is a '''lightweight''', yet '''easy to setup''' and '''feature-rich''' Linux distribution, based on '''Debian'''.&lt;br /&gt;
* To find out more about DietPi, please visit the [https://dietpi.com/docs/ official documentation].&lt;br /&gt;
* Discuss the Quartz64 build(s) on the [https://forum.pine64.org/showthread.php?tid=17601 PINE64 forum thread].&lt;br /&gt;
* DD image (for 4 GiB or above micro SD card or eMMC)&lt;br /&gt;
** Quartz64 Model A: [https://dietpi.com/downloads/images/DietPi_Quartz64A-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
** Quartz64 Model B: [https://dietpi.com/downloads/images/DietPi_Quartz64B-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
** SOQuartz: [https://dietpi.com/downloads/images/DietPi_SOQuartz-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: '''root'''&lt;br /&gt;
** Password: '''dietpi'''&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ARM (Unofficial) ===&lt;br /&gt;
&lt;br /&gt;
See [[Installing Arch Linux ARM On The Quartz64]] for detailed instructions.&lt;br /&gt;
&lt;br /&gt;
=== Tianocore EDK II port by jmcneill ===&lt;br /&gt;
&lt;br /&gt;
This (as of 2021-12-30) is a work in progress to enable UEFI enabled systems, and is able to bring up SD, eMMC, USB, PCIe with SATA and NVMe, HDMI, thermal sensors, TRNG, as well as general Cortex A-55 features.  Known to work with NetBSD -current, and the ESXi Arm fling version 1.8.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/jaredmcneill/quartz64_uefi jmcneill's Quartz64 UEFI Github]&lt;br /&gt;
&lt;br /&gt;
The sdcard image should be written to an microSD card and installed.  Currently, using this card also for the OS may be problematic.&lt;br /&gt;
&lt;br /&gt;
=== NetBSD ===&lt;br /&gt;
&lt;br /&gt;
NetBSD relies upon the UEFI support in Tianocore.  Before NetBSD 10 is released, the latest version of NetBSD-current should be used:&lt;br /&gt;
&lt;br /&gt;
* [http://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/ NetBSD daily builds top level] from inside here, navigate to a date, and inside the images/ subdirectory are installable images. Use the one called &amp;quot;NetBSD-&amp;lt;version&amp;gt;-evbarm-aarch64-install.img.gz&amp;quot;.  This image can be written to a supported device, such as the eMMC interface, any USB storage device, NVMe, and PCIe AHCI SATA are all supported with builds after 2022-01-15.&lt;br /&gt;
&lt;br /&gt;
* Currently this can not be shared with the EDK2 port, ie, microSD for EDK2 and some other media for NetBSD.&lt;br /&gt;
&lt;br /&gt;
=== Plebian ===&lt;br /&gt;
&lt;br /&gt;
Plebian stands for '''P'''INE64 '''L'''ive D'''ebian''' and aims to be a fairly vanilla live Debian image for Quartz64 and SOQuartz devices, based on Debian Bookworm.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/Plebian-Linux/quartz64-images/releases Download Release Images]&lt;br /&gt;
* [https://github.com/Plebian-Linux/quartz64-images/blob/main/RUNNING.md Read The Instructions]&lt;br /&gt;
&lt;br /&gt;
To flash, run (replace &amp;lt;tt&amp;gt;/dev/sdX&amp;lt;/tt&amp;gt; with your target block device):&lt;br /&gt;
&lt;br /&gt;
 $ xzcat imagename.img.xz | sudo dd of=/dev/sdX bs=4M oflag=dsync status=progress&lt;br /&gt;
&lt;br /&gt;
Some quick notes:&lt;br /&gt;
&lt;br /&gt;
* You will be asked to change your password on first login (for what the default login is, read the instructions!)&lt;br /&gt;
* Root file system is grown to take up the entire space of your boot device&lt;br /&gt;
* NetworkManager is used instead of Debian's interfaces config to be more flexible with what adapters are plugged in and working&lt;br /&gt;
* An sshd is started on port 22 with freshly generated keys&lt;br /&gt;
&lt;br /&gt;
== SoC and Memory Specifications ==&lt;br /&gt;
* Based on [https://www.rock-chips.com/a/en/products/RK35_Series/2021/0113/1274.html Rockchip RK3566]&lt;br /&gt;
[[File:RK3566_icon.png|right]]&lt;br /&gt;
&lt;br /&gt;
=== CPU Architecture ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/processors/cortex-a/cortex-a55 Quad-core ARM Cortex-A55@1.8GHz]&lt;br /&gt;
* AArch32 for full backwards compatibility with ARMv7&lt;br /&gt;
* ARM Neon Advanced SIMD (single instruction, multiple data) support for accelerated media and signal processing computation&lt;br /&gt;
* Includes VFP hardware to support single and double-precision operations&lt;br /&gt;
* ARMv8 Cryptography Extensions&lt;br /&gt;
* Integrated 32KB L1 instruction cache and 32KB L1 data cache per core&lt;br /&gt;
* 512KB unified system L3 cache&lt;br /&gt;
* [https://developer.arm.com/ip-products/security-ip/trustzone TrustZone] technology support&lt;br /&gt;
* [https://www.cnx-software.com/2020/12/01/rockchip-rk3568-processor-to-power-edge-computing-and-nvr-applications 22nm process, believed to be FD-SOI]&lt;br /&gt;
&lt;br /&gt;
=== GPU (Graphics Processing Unit) Capabilities ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/graphics-and-multimedia/mali-gpus/mali-g52-gpu Mali-G52 2EE Bifrost GPU@800MHz]&lt;br /&gt;
* 4x Multi-Sampling Anti-Aliasing (MSAA) with minimal performance drop &lt;br /&gt;
* 128KB L2 Cache configurations&lt;br /&gt;
* Supports OpenGL ES 1.1, 2.0, and 3.2&lt;br /&gt;
* Supports Vulkan 1.0 and 1.1&lt;br /&gt;
* Supports OpenCL 2.0 Full Profile&lt;br /&gt;
* Supports 1600 Mpix/s fill rate when at 800MHz clock frequency&lt;br /&gt;
* Supports 38.4 GLOP/s when at 800MHz clock frequency   &lt;br /&gt;
&lt;br /&gt;
=== NPU (Neural Processing Unit) Capabilities ===&lt;br /&gt;
* Neural network acceleration engine with processing performance of up to 0.8 TOPS&lt;br /&gt;
* Supports integer 8 and integer 16 convolution operations&lt;br /&gt;
* Supports the following deep learning frameworks: TensorFlow, TF-lite, Pytorch, Caffe, ONNX, MXNet, Keras, Darknet&lt;br /&gt;
&lt;br /&gt;
=== System Memory ===&lt;br /&gt;
* RAM Memory Variants: 2GB (SOQuartz only), 4GB, 8GB LPDDR4.&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
* 10/100/1000Mbps Ethernet&lt;br /&gt;
* WiFi 802.11 b/g/n/ac with Bluetooth 5.0 (optional on model A, built in on model B)&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
* microSD - bootable, supports SDHC and SDXC, storage up to 2TB&lt;br /&gt;
* USB&lt;br /&gt;
** Model A: 2 USB 2.0 host ports, 1 USB 2.0 OTG port, 1 USB 3.0 host port&lt;br /&gt;
** Model B: 1 USB 2.0 host port, 1 USB 2.0 OTG port, 1 USB 3.0 host port&lt;br /&gt;
* one native SATA 3.0 6Gb/s Port (only on model A, shared with USB 3.0 host port)&lt;br /&gt;
* optional eMMC module from 8GB up to 128GB&lt;br /&gt;
* 64 Mbit (8 MByte) SPI flash (Model B only), part number &amp;lt;tt&amp;gt;25Q64DWZPIG&amp;lt;/tt&amp;gt; in the schematic&lt;br /&gt;
&lt;br /&gt;
==== eMMC Speeds ====&lt;br /&gt;
&lt;br /&gt;
On a 64 GB eMMC module:&lt;br /&gt;
&lt;br /&gt;
  $ sudo hdparm -tT /dev/mmcblk1 &lt;br /&gt;
  &lt;br /&gt;
  /dev/mmcblk1:&lt;br /&gt;
   Timing cached reads:   2368 MB in  2.00 seconds = 1184.46 MB/sec&lt;br /&gt;
   Timing buffered disk reads: 452 MB in  3.01 seconds = 149.98 MB/sec&lt;br /&gt;
&lt;br /&gt;
=== Expansion Ports ===&lt;br /&gt;
* HDMI&lt;br /&gt;
* eDP - 4 lanes of 2.7Gbps, up to 2560x1600@60Hz (only on model A)&lt;br /&gt;
* DSI - Display Serial Interface, 4 lanes MiPi, up to 1440P on model A, 2 lanes MiPi, up to 1080p on model B &lt;br /&gt;
* CSI - CMOS Camera Interface, 4 lanes MiPi up to 8 mega pixel on model A, 2 lanes MiPi up to 5 mega pixel on model B &lt;br /&gt;
* TP - Touch Panel Port, SPI with interrupt on model A&lt;br /&gt;
* RTC - Real Time Clock Battery Connector&lt;br /&gt;
* VBAT - Lithium Battery Connector with temperature sensor input on model A&lt;br /&gt;
* Wifi/BT Module Header - SDIO 3.0 and UART on model A, build in Wifi/BT Module on model B&lt;br /&gt;
* 2x20 pins &amp;quot;Pi2&amp;quot; GPIO Header on model B, 2x10 pins GPO header on model A&lt;br /&gt;
* PCIe x4 open ended slot on model A, m.2 slot on model B, one Gen2 lane due to SoC constraints&lt;br /&gt;
** On Model A, the slot provides 10W of power for the 3.3V supply and however much power your 12V input power supply provides on the 12V supply&lt;br /&gt;
&lt;br /&gt;
The PCIe implementation on the RK3566 is much more compatible with a wide range of devices compared to the one on the RK3399 used on the ROCKPro64. This means a lot more devices should work (excluding dGPUs due to a lack of cache snooping ability).&lt;br /&gt;
&lt;br /&gt;
==== Combo PHYs ====&lt;br /&gt;
&lt;br /&gt;
[[File:rk3566 phy.png]]&lt;br /&gt;
&lt;br /&gt;
Several of the I/O options on the RK3566 used in the Quartz64 are using the same I/O lines, meaning that they cannot be used at the same time. The above diagram illustrates how they are connected.&lt;br /&gt;
&lt;br /&gt;
In particular, USB 3.0 and the SATA connector on the board are mutually exclusive, and the PCI-e 2.0 lane can be reconfigured into a second SATA port, though an adapter cable needs to be fashioned for this to be useful.&lt;br /&gt;
&lt;br /&gt;
=== GPIO Pins (Quartz64 Model A) ===&lt;br /&gt;
&lt;br /&gt;
Attention! GPIOs are 3.3V!&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; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| 3.3 V&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 2&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| I2C3_SDA_M0 &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a,b&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 4&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| I2C3_SCL_M0 &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a,b&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 5&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 6&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| CPU_REFCLK_OUT&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 7&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 8&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_TX_M0_DEBUG&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 9&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 10&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_RX_M0_DEBUG&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_MOSI_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 11&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 12&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART0_TX &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_MISO_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 13&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 14&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART0_RX &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_CLK_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 15&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 16&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_CS0_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 17&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 18&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| SPDIF_OUT &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;c&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 19&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 20&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 3.3V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Notes====&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;can be a PWM pin&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;pulled high to 3.3V through 2.2kOhm resistor&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;low-pass filtered with cutoff of 220 MHz&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source: Page 28 of [https://wiki.pine64.org/images/3/31/Quartz64_model-A_schematic_v1.0_20201215.pdf the board schematics].&lt;br /&gt;
&lt;br /&gt;
=== GPIO Pins (Quartz64 Model B) ===&lt;br /&gt;
&lt;br /&gt;
Attention! GPIOs are 3.3V!&lt;br /&gt;
&lt;br /&gt;
Interesting alternate pin configurations are listed in [brackets].&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; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| 3.3 V&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:yellow; color:black; font-weight:bold;&amp;quot;| 1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:red; color:gold; font-weight:bold;&amp;quot;| 2&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[I2C3_SDA_M0]'' GPIO1_A0_3V3 &lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:red; color:gold; font-weight:bold;&amp;quot;| 4&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[I2C3_SCL_M0]'' GPIO1_A1_3V3 &lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 5&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 6&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_C4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 7&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 8&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_TX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 9&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 10&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_RX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[SPI1_CS0_M1]'' GPIO3_A1_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 11&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 12&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A3_3V3 ''[I2S3_SCLK_M0]''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[I2S3_MCLK_M0]'' GPIO3_A2_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 13&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 14&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_B0_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 15&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 16&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_B1_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| 3.3V&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:yellow; color:black; font-weight:bold;&amp;quot;| 17&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 18&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_B2_3V3 &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO4_C3_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 19&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 20&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO4_C5_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 21&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 22&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_C1_3V3 ''[SPI1_MOSI_M1]''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO4_C2_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 23&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 24&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO4_C6_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 25&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 26&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO4_D1_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| I2C4_SDA_M0&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:blue; color:gold; font-weight:bold;&amp;quot;| 27&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:blue; color:gold; font-weight:bold;&amp;quot;| 28&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| I2C4_SCL_M0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_B3_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 29&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 30&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_B4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 31&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 32&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_C2_3V3 ''[SPI1_MISO_M1]''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[SPI1_CLK_M1]'' GPIO3_C3_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 33&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 34&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[I2S3_LRCK_M0]'' GPIO3_A4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 35&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 36&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A7_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[SPDIF_TX_M0]'' GPIO1_A4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 37&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 38&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A6_3V3 ''[I2S3_SDI_M0]''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 39&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 40&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A5_3V3 ''[I2S3_SDO_M0]''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Source: Page 24 of [https://files.pine64.org/doc/quartz64/Quartz64_model-B_Schematic-V1.3_20220124.pdf the board schematics].&lt;br /&gt;
&lt;br /&gt;
== Quartz64 Board Information, Schematics, and Certifications ==&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;A&amp;quot; ===&lt;br /&gt;
* Model &amp;quot;A&amp;quot; Baseboard Dimensions: 133mm x 80mm x 19mm&lt;br /&gt;
* Input Power: DC 12V @ 3A 5.5mmOD/2.1mmID center-positive Barrel DC Jack connector&lt;br /&gt;
&lt;br /&gt;
* Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic and PCB Board Resource:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-A_schematic_v2.0_20210427.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic ver 2.0 20210427 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-A_V2.0_connector_placement.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC PCB Connector placement PDF file]&lt;br /&gt;
&lt;br /&gt;
* Certifications:&lt;br /&gt;
** Disclaimer: Please note that PINE64 SBC is not a &amp;quot;final&amp;quot; product and in general certification is not necessary. However, PINE64 still submit the SBC for FCC and CE certification and obtain the certificates to proof that SBC board is capable on passing the testing. Please note a final commercial product needs to performs its owns testing and obtains its owns certificates.&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Quartz64%20Model-A%20CE%20certification-S21051101701001.pdf Quartz64 model-A CE Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Quartz64%20Model-A%20FCC%20certification-S21051101702001.pdf Quartz64 model-A FCC Certificate]&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;B&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* Model &amp;quot;B&amp;quot; Baseboard Dimensions: 85mm x 56mm x 18.8mm&lt;br /&gt;
* Input Power: DC 5V @ 3A 3.5mmOD/1.35mmID center-positive Barrel DC Jack connector&lt;br /&gt;
&lt;br /&gt;
* Quartz64 Model &amp;quot;B&amp;quot; SBC Schematic and PCB Board Resource:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-B_Schematic-V1.3_20220124.pdf Quartz64 Model &amp;quot;B&amp;quot; SBC Schematic ver 1.3 20220124 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-B_PCB_Components_Placement-V1.2_20211014.pdf Quartz64 Model &amp;quot;B&amp;quot; SBC PCB Connector placement PDF file]&lt;br /&gt;
* Please note that v1.2 and V1.3 schematic and component placement are identical, just some component value changed.&lt;br /&gt;
&lt;br /&gt;
* Note: Model B uses a Molex PicoBlade compatible connector for the RTC battery. The Pine64 Backup Battery Holders come with a JST PH type connector. To use the Pine64 RTC Backup Battery Holder, the connector on the battery holder will need to be modified with a PicoBlade type connector.&lt;br /&gt;
&lt;br /&gt;
== Datasheets for Components and Peripherals ==&lt;br /&gt;
* Rockchip RK3566 SoC information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Rockchip%20RK3566%20Datasheet%20V1.0-20201210.pdf Rockchip RK3566 ver 1.0 datasheet, already got release permission from Rockchip]&lt;br /&gt;
** [https://opensource.rock-chips.com/images/2/26/Rockchip_RK3568_TRM_Part1_V1.3-20220930P.PDF Rockchip RK3566 and RK3568 TRM (Technical Reference Manual)]&lt;br /&gt;
* Rockchip PMU (Power Management Unit) Information:&lt;br /&gt;
** [https://www.rockchip.fr/RK817%20datasheet%20V1.01.pdf Rockchip RK817 ver 1.01 datasheet for Quartz64 model A]&lt;br /&gt;
** [https://www.rockchip.fr/RK809%20datasheet%20V1.01.pdf Rockchip RK809 ver 1.01 datasheet for Quartz64 model B and SOQuartz]&lt;br /&gt;
* LPDDR4 (200 Balls) SDRAM:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rockpro64/SM512M32Z01MD2BNP(200BALL).pdf Micron LPDDR4 Mobile LPDDR4 Datasheet]&lt;br /&gt;
* eMMC information:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/PINE64_eMMC_Module_20170719.pdf PINE64 eMMC module schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/usb%20emmc%20module%20adapter%20v2.pdf PINE64 USB adapter for eMMC module V2 schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/USB%20adapter%20for%20eMMC%20module%20PCB.tar PINE64 USB adapter for eMMC module PCB in JPEG]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/E-00517%20FORESEE_eMMC_NCEMAM8B-16G%20SPEC.pdf 16GB Foresee eMMC Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/SDINADF4-16-128GB-H%20data%20sheet%20v1.13.pdf 32GB/64GB/128GB SanDisk eMMC Datasheet]&lt;br /&gt;
* SPI NOR Flash information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/w25q128jv%20spi%20revc%2011162016.pdf WinBond 128Mb SPI Flash Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GD25Q128C-Rev2.5.pdf GigaDevice 128Mb SPI Flash Datasheet]&lt;br /&gt;
* E-ink Panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Eink%20P-511-754-V3_ES103TC1%20Specification%20V3.0(Signed)-20190702.pdf Eink 10.3&amp;quot; 1872x1404 ES103TC1 Flex Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Eink%20P-511-828-V1_ED103TC2%20Formal%20Spec%20V1.0_20190514.pdf Eink 10.3&amp;quot; 1872x1404 ES103TC1 Glass Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/PineNote/TI%20PMU-TPS651851.pdf TPS65185x PMIC for E-Ink Enabled Electronic Paper Display Datasheet]&lt;br /&gt;
* LCD Touch Screen Panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/FY07024DI26A30-D_feiyang_LCD_panel.pdf 7.0&amp;quot; 1200x600 TFT-LCD Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/HK70DR2459-PG-V01.pdf Touch Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GT911%20Capacitive%20Touch%20Controller%20Datasheet.pdf GOODiX GT911 5-Point Capacitive Touch Controller Datasheet]&lt;br /&gt;
* Ethernet PHY information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/rtl8211e(g)-vb(vl)-cg_datasheet_1.6.pdf Realtek RTL8211 10/100/1000M Ethernet Transceiver]&lt;br /&gt;
* WiFi/BT module info:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rockpro64/AW-CM256SM_DS_DF_V1.9_STD.pdf Azurewave CM256SM 11AC WiFi + Bluetooth5.0 Datasheet]&lt;br /&gt;
* IR LED:&lt;br /&gt;
** [https://media.digikey.com/pdf/Data%20Sheets/Everlight%20PDFs/IRM-36xx_Series.pdf IRM-3638 Datasheet]&lt;br /&gt;
* Enclosure information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/playbox_enclosure_20160426.stp Playbox Enclosure 3D file]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/ABS_enclosure_20160426.stp ABS Enclosure 3D file]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/pine64%20Die%20Cast%20casing-final.jpg Outdoor Aluminum Cast Dust-proof IP67 Enclosure Drawing]&lt;br /&gt;
** [https://www.printables.com/model/269572-pine-quartz-64-a-full-case 3D Printable Enclosure for Model A]&lt;br /&gt;
** [https://www.printables.com/model/269575-pine-quartz-64-a-open-frame Open Frame for Model A]&lt;br /&gt;
* Connector information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/ePH.pdf 2.0mm PH Type connector specification use in Lithium Battery (VBAT) port (Model A)]&lt;br /&gt;
** [https://www.molex.com/pdm_docs/sd/533980271_sd.pdf 1.25mm Picoblade Type connector specification used in RTC Battery port (Model B)]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/0.5FPC%20Front%20Open%20Connector%20H=1.5.pdf 0.5mm Pitch cover type FPC connector specification use in DSI port, TP port and CSI port]&lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
&lt;br /&gt;
{{SeeMainArticle|Quartz64 Development}}&lt;br /&gt;
&lt;br /&gt;
Information and resources of the ongoing development effort for the Quartz64 can be found on the [[Quartz64 Development]] page, where the current status of various board functions can be found, and whether they have landed in upstream.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.com/pine64-org/quartz-bsp Quartz64 BSP Gitlab Page]&lt;br /&gt;
&lt;br /&gt;
== BSP Linux SDK ==&lt;br /&gt;
&lt;br /&gt;
=== BSP Linux SDK ver 4.19 for Quartz64 model A SBC  ===&lt;br /&gt;
* [http://files.pine64.org/SDK/Quartz64/QUARTZ64-model-A_BSP%20Linux.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 24554419aec29700add97167a3a4c9ed&lt;br /&gt;
** File Size: 32.67.00GB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Android SDK ==&lt;br /&gt;
&lt;br /&gt;
=== Android 11 SDK for Quartz64 model A SBC  ===&lt;br /&gt;
* [http://files.pine64.org/SDK/Quartz64/QUARTZ64_SDK_android11.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 77c2ff57ea3372fb04da7fb49e17d12b&lt;br /&gt;
** File Size: 79.00GB&lt;br /&gt;
** Just the boot blobs (&amp;lt;1MB): [[File:Rk35-blobs.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Android 11 Production Test Build for Quartz64 model A SBC ===&lt;br /&gt;
&lt;br /&gt;
==== Android 11 Stock Image [eMMC Boot] using DD method [20210604] ====&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* This is test build that used during product testing&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 8GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/Quartz64/android/Quartz64_model-A_dd_20210604_stock_android11_emmcboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): e4365753e584d9fce1b8f10f095eede6&lt;br /&gt;
*** File Size: 819MB&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/Quartz64/android/Quartz64_model-A_dd_20210604_stock_android11_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 491c5f7744b0ca0b74ae76e607051836&lt;br /&gt;
*** File Size: 1.10GB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/Quartz64/android/Quartz64_model-A_dd_20210604_stock_android11_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 47a6f0cdac8bad06cb920743849a8894&lt;br /&gt;
*** File Size: 846MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/Quartz64/android/Quartz64_model-A_dd_20210604_stock_android11_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 4e2fed6f5db0d55afdc8a142fc0c4fe1&lt;br /&gt;
*** File Size: 884MB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Android 11 Production Test Build for Quartz64 model A SBC [eMMC Boot] using ROCKChip tools method [20210604] ====&lt;br /&gt;
* Please unzip first and then using [https://files.pine64.org/os/Quartz64//android/RKDevTool_Release_v2.84.zip Rockchip Android tool ver 2.84] to flash in&lt;br /&gt;
* For Windows OS environment, please install the [https://files.pine64.org/os/Quartz64/android/DriverAssitant_v5.1.1.zip DriverAssistant v5.11] driver first &lt;br /&gt;
* This is test build that used during product testing&lt;br /&gt;
* The OTG port located at top USB 2.0 port on top of USB 3.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
** [https://files.pine64.org/os/Quartz64/android/Quartz64_model-A_20210604_stock_android11_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 800f867fdd0d1b2bd7822c156b6067e3&lt;br /&gt;
*** File Size: 812MB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Android 11 eink SDK for Quartz64 model A SBC  ===&lt;br /&gt;
* The is the Android SDK build for 10.3&amp;quot; eink panel on Quartz64 model A SBC. &lt;br /&gt;
* [http://files.pine64.org/SDK/Quartz64/QUARTZ64-model-A_eink.android11_SDK.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 293a550584298de4fb95ceae18103672&lt;br /&gt;
** File Size: 72.88GB&lt;br /&gt;
** Just the boot blobs (&amp;lt;1MB): [[File:Rk35-blobs.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enclosures ==&lt;br /&gt;
&lt;br /&gt;
(Please expand this section with more cases known to work.)&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;A&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
All enclosures that fit the ROCKPro64 should fit the Quartz64 Model &amp;quot;A&amp;quot;, as the I/O has been laid out the same on purpose.&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Model A&amp;quot; Acrylic Open Enclosure]] - but see the troubleshooting section below.&lt;br /&gt;
* [[ROCKPro64 ABS Enclosure]]&lt;br /&gt;
* [[Quartz64PremiumAluminiumCase|RockPro64 Premium Aluminium Case]]&lt;br /&gt;
* [[ROCKPro64#3D_printable_ITX_mounting_brackets]] (Not an enclosure but allows to mount the board in an ATX/ITX case)&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;B&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Model B&amp;quot; Acrylic Open Enclosure]]&lt;br /&gt;
* the ROCK64 aluminium enclosure '''does not''' work, as the DC input jack is placed differently&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Stability/Boot Issues With Missing Battery Shunt ===&lt;br /&gt;
&lt;br /&gt;
If there is no battery plugged into the board, the jumper labelled &amp;quot;ON/OFF_BATT&amp;quot; must be in place. If this is set wrong, stability issues such as failures to boot will occur.&lt;br /&gt;
&lt;br /&gt;
=== No Ethernet Connectivity ===&lt;br /&gt;
&lt;br /&gt;
Make sure the kernel is built with &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt; set to &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;. Building it as a module (&amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;) and then relying on module auto-loading is unlikely to work, because if the generic PHY driver is built in it will bind to the PHY first, unless you include the motorcomm module in your initramfs.&lt;br /&gt;
&lt;br /&gt;
Note: Starting with [https://salsa.debian.org/kernel-team/linux/-/merge_requests/551 Debian's &amp;lt;code&amp;gt;6.1~rc3-1~exp1&amp;lt;/code&amp;gt; kernel] the module is included, but set to &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; and I (Diederik) have verified that it gets included in the initramfs and '''works''' on Model-A and Model-B with the [[Quartz64#Plebian]] images.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Model A&amp;quot; Acrylic Case Doesn't Fit ===&lt;br /&gt;
&lt;br /&gt;
The Quartz64 does not really fit onto the bottom plate of the [[&amp;quot;Model A&amp;quot; Acrylic Open Enclosure]]. This is because the &amp;quot;Mic&amp;quot; connector at the bottom of the board interferes with one of the posts. A workaround is to find out which post that is (you have a 50% chance of guessing it right, accounting for rotating the board) and then filing away the corner of the post pointing inwards by a few millimetres.&lt;br /&gt;
&lt;br /&gt;
[[File:Quartz64-audio-jack-spacer-issue.jpg]]&lt;br /&gt;
&lt;br /&gt;
An alternate solution may be to place plastic spacers with a smaller outer diameter in between the acrylic bottom plate posts and the SBC board.&lt;br /&gt;
&lt;br /&gt;
=== No GPU Acceleration with Debian &amp;quot;Bullseye&amp;quot; Userland ===&lt;br /&gt;
&lt;br /&gt;
Debian Bullseye ships a Mesa version that is too old to contain the required patches for the RK356x SoC's GPU. You can (at your own risk) [https://wiki.debian.org/DebianTesting use the current Debian Testing version ], called &amp;quot;Bookworm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Wireless Connectivity Doesn't Work ===&lt;br /&gt;
&lt;br /&gt;
ROCKPro64 wireless module may have CYW43455 or CYW43456 chips on board (not sure if this is the same for Quartz64 model B). Both chips are supported by &amp;lt;code&amp;gt;brcmfmac&amp;lt;/code&amp;gt; wi-fi driver and &amp;lt;code&amp;gt;btbcm&amp;lt;/code&amp;gt; bluetooth driver. &lt;br /&gt;
&lt;br /&gt;
For CYW43455 drivers attempt to load &amp;lt;code&amp;gt;/lib/firmware/brcm/brcmfmac43455-sdio.bin&amp;lt;/code&amp;gt; for wi-fi and &amp;lt;code&amp;gt;/lib/firmware/brcm/BCM4345C0.hcd&amp;lt;/code&amp;gt; for bluetooth. Corresponding firmware files for CYW43456 are &amp;lt;code&amp;gt;/lib/firmware/brcm/brcmfmac43456-sdio.bin&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/lib/firmware/brcm/BCM4345C5.hcd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On Manjaro firmware files for both bluetooth and wi-fi on CYW43456 on are provided by &amp;lt;code&amp;gt;ap6256-firmware&amp;lt;/code&amp;gt; package (&amp;lt;code&amp;gt;pacman -S ap6256-firmware&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
However for CYW43455 wi-fi firmware is in the &amp;lt;code&amp;gt;linux-firmware&amp;lt;/code&amp;gt; package and bluetooth is in the &amp;lt;code&amp;gt;firmware-raspberrypi&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;pacman -S linux-firmware firmware-raspberrypi&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;linux-firmware&amp;lt;/code&amp;gt; package is missing device specific symlinks for quartz64-a. To create them execute:&lt;br /&gt;
 # ln -s brcmfmac43455-sdio.bin /lib/firmware/brcm/brcmfmac43455-sdio.pine64,quartz64-a.bin&lt;br /&gt;
 # ln -s brcmfmac43455-sdio.AW-CM256SM.txt /lib/firmware/brcm/brcmfmac43455-sdio.pine64,quartz64-a.txt &lt;br /&gt;
&lt;br /&gt;
As of 2022-10-19 device tree in mainline kernel for Quartz64 model A has wrong configuration for the bluetooth driver. [https://patchwork.kernel.org/project/linux-rockchip/patch/20220926125350.64783-1-leo@nabam.net/ Patch] is submitted to the LKML. It's possible to modify dtb file provided by the current kernel using device tree compiler to enable bluetooth or perform &amp;lt;code&amp;gt;make dtbs&amp;lt;/code&amp;gt; in the patched kernel tree to get updated dtb file (&amp;lt;code&amp;gt;arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dtb&amp;lt;/code&amp;gt;). Issue manifests itself with following errors in `dmesg`:&lt;br /&gt;
&lt;br /&gt;
  command 0x0c03 tx timeout&lt;br /&gt;
  Bluetooth: hci0: BCM: Reset failed (-110)&lt;br /&gt;
&lt;br /&gt;
== How-To ==&lt;br /&gt;
&lt;br /&gt;
=== Connect Debug UART ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to get debug output is to connect a 3.3V 1.5mbaud capable UART adapter to the board.&lt;br /&gt;
&lt;br /&gt;
To connect it, connect the ground lead to pin 6, and the RX/TX leads to pins 8 and 10 (consider swapping them if you get no output, things are often mislabelled). These pins are &amp;quot;UART2&amp;quot; in the above GPIO table.&lt;br /&gt;
&lt;br /&gt;
Open a serial terminal at 1500000 bauds, e.g.&lt;br /&gt;
&lt;br /&gt;
 $ picocom -b 1500000 /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
=== Disable Heartbeat LED (Linux) ===&lt;br /&gt;
&lt;br /&gt;
The flashing LED is called the &amp;quot;heartbeat LED&amp;quot;, it blinks in a heart rhythm like fashion once the kernel is running. To disable it, you can run&lt;br /&gt;
&lt;br /&gt;
 # echo none &amp;gt; /sys/class/leds/user-led/trigger&lt;br /&gt;
&lt;br /&gt;
On model A LED device is called &amp;quot;diy-led&amp;quot;, not &amp;quot;user-led&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
On a system with systemd, you can do this as soon as the system is ready to be logged in with a systemd unit like this:&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Turn off heartbeat LED&lt;br /&gt;
 Wants=multi-user.target&lt;br /&gt;
 After=multi-user.target&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=simple&lt;br /&gt;
 ExecStart=sh -c 'echo none &amp;gt; /sys/class/leds/user-led/trigger'&lt;br /&gt;
&lt;br /&gt;
Place it in &amp;lt;tt&amp;gt;/etc/systemd/system/user-led.service&amp;lt;/tt&amp;gt;, and run&lt;br /&gt;
&lt;br /&gt;
 # systemctl daemon-reload&lt;br /&gt;
 # systemctl enable user-led.service&lt;br /&gt;
&lt;br /&gt;
Upon rebooting, you will now notice that the heartbeat LED will blink during boot-up, but stops blinking as soon as the multi-user target is reached (i.e. the user can log in).&lt;br /&gt;
&lt;br /&gt;
=== SATA on model A ===&lt;br /&gt;
&lt;br /&gt;
On model A USB 3.0 and SATA ports are using the same I/O line and can't be used simultaneously. By default USB 3.0 is enabled in linux device tree and SATA is disabled. FDT modifications are required to turn SATA on. &lt;br /&gt;
&lt;br /&gt;
Following script is tested on Monjaro but should work on the other distros with minimal changes. Device tree compiler package usually provides fdtput command (on Manjaro run: &amp;lt;code&amp;gt; pacman -S dtc&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
 # cp /boot/dtbs/rockchip/rk3566-quartz64-a.dtb /boot/dtbs/rockchip/rk3566-quartz64-a-sata.dtb&lt;br /&gt;
 # fdtput -t s -v /boot/dtbs/rockchip/rk3566-quartz64-a-sata.dtb /usb@fd000000 status disabled&lt;br /&gt;
 # fdtput -t s -v /boot/dtbs/rockchip/rk3566-quartz64-a-sata.dtb /sata@fc400000 status okay&lt;br /&gt;
 # sed -i 's#^FDT /dtbs/rockchip/rk3566-quartz64-a.dtb$#FDT /dtbs/rockchip/rk3566-quartz64-a-sata.dtb#' /boot/extlinux/extlinux.conf&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
== Frequently Asked Questions ==&lt;br /&gt;
&lt;br /&gt;
=== Do I Need A Fan/What Heatsink Do I Need? ===&lt;br /&gt;
&lt;br /&gt;
You don't need a fan. The [https://pine64.com/product/rockpro64-20mm-mid-profile-heatsink/ 20mm medium heatsink for Model A is plenty enough]. For Model B, the [https://pine64.com/product/small-fan-type-heatsink/ fan type heatsink] will do fine.&lt;br /&gt;
&lt;br /&gt;
=== Can This Run A Minecraft Server? ===&lt;br /&gt;
&lt;br /&gt;
Yes! Sort of. Testing on an 8GB Model A with PaperMC, [[User:CounterPillow]] was able to out-row world generation in a boat with just one player online, but aside from the slow world gen (which can be pre-generated) the server handled things like TNT explosions and mobs fine. It'll probably do okay with 1-3 players.&lt;br /&gt;
&lt;br /&gt;
=== Do I Need The 5A Power Supply For Model A? ===&lt;br /&gt;
&lt;br /&gt;
You only need the 5A power supply for Model A if you plan on connecting hard disk drives to the 12V header on the board.&lt;br /&gt;
&lt;br /&gt;
=== How Much Power Does It Consume? ===&lt;br /&gt;
&lt;br /&gt;
For Model B, it's &amp;lt;2W in idle (powertop tunables not set), and &amp;lt;5W under full CPU load (&amp;lt;tt&amp;gt;stress-ng -c4&amp;lt;/tt&amp;gt;). Model A will be similar as it's the same SoC.&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=15307</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=15307"/>
		<updated>2023-01-11T17:59:36Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Apart from u-boot, Plebian (https://wiki.pine64.org/wiki/Quartz64#Plebian) is built entirely from Debian, so remove the OS_Images section from the TODO&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the current status of software support for the [[Quartz64]] single-board computer, and provides links to resources to help prospective contributors get started. Information is kept current on a best-effort basis as various patches get accepted into the kernel.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&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;
! scope=&amp;quot;col&amp;quot; | Applies To&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Output&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;rockchipdrm/VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
As of 5.19-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/604be85547ce4d61b89292d2f9a78c721b778c16]&amp;lt;/sup&amp;gt;, Also featured in Phoronix Article&amp;lt;sup&amp;gt;[https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Rockchip-VOP2-Linux-5.19]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&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-edpphy-naneng&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/phy/rockchip/phy-rockchip-naneng-edp.c] and [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/commit/d7ad116fb30d11d110aeb880754cf27f34c45c40#7e8e2ef87e479c54539dc519c0b92d6b31727f8d_671_681] Coordinate any porting with Rockchip first&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;dw-mipi-dsi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/e18d9b093006d8abd53e1ce13c0d5a8d0fcd5f64]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot; rowspan=&amp;quot;3&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 1080p H.263, MPEG-1, MPEG-2, VP8 and H.264. Mainline as of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5f6bfab6da6531238e899fdf29efd6d0185adc3e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&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;
| VDPU346 handling 4K H.265, H.264 and VP9&lt;br /&gt;
|&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;
| VDPU720 handling JPEG, [[User:CounterPillow]] is working on this&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;5&amp;quot; | [[Mainline Hardware Encoding|Video Encode]] &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;text-align:center; background:LightYellow;&amp;quot;|GStreamer only&lt;br /&gt;
| JPEG on VEPU121&lt;br /&gt;
| Hantro-based. Mainline as of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/6f1ae821a6c4aa9d5b8f437b27ec86fb569219fd]&amp;lt;/sup&amp;gt;&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.264 on VEPU121&lt;br /&gt;
| Hantro-based&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;
| VP8 on VEPU121&lt;br /&gt;
| Hantro-based&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.264 on VEPU540&lt;br /&gt;
| rkvenc-based&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 VEPU540&lt;br /&gt;
| rkvenc-based&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Audio &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-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/43b058698f723e3c2087af7069c0da082a3ecbe1]&amp;lt;/sup&amp;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;rockchip-spdif&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/dac825b6a6bdca41347e25f07354ad94fdc97445]&amp;lt;/sup&amp;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;rk817-codec&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
| Quartz64 Model A/B&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Bootloader&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://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TF-A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In progress&lt;br /&gt;
| &amp;lt;code&amp;gt;U-Boot&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Quartz64_Development#Mainline_U-Boot_Work|See below]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In progress&amp;lt;sup&amp;gt;[https://github.com/jaredmcneill/quartz64_uefi]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Tianocore EDK II&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;4&amp;quot; | Device Tree&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/b33a22a1e7c4248608e533fc4fa524258b3fae84]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A&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;
| Quartz64 Model B&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c37415f55bdadffe5b4c0e7981e9fc7e8b96beea]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model B&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;
| SOQuartz&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c466828fb3ba8cb7f5c3bf28766da9b70bf9745e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| SOQuartz&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;
| PineNote&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d449121e5e8addcee654250cec298c887ecafb32]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| PineNote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot;| Gigabit Ethernet&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;rk3566-gmac&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/3bb3d6b1c1957e88bfc5e77a4557f7e6ba761fe3]&amp;lt;/sup&amp;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;yt8511-phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/48e8c6f1612b3d2dccaea2285231def830cc5b8e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | IOMMU&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-iommu&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c55356c534aa651ccc3053ef2d5d8d810adacf5f]&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;gpio-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/936ee2675eee1faca0dcdfa79165c7990422e0fc]&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;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Thermal Regulation&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-thermal&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/4b14c055a6f644cbeb1156ba24647e92fe51ec69]&amp;lt;/sup&amp;gt;&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;pcie-dw-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0e898eb8df4e34c7b129452444eb7cef68a11f43]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Management&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-domains&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/1782c87b44a0b1a527f01a6a184677c58ccbf9c7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Voltage Control&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;rk3568-pmu-io-voltage-domain&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/28b05a64e47cbceebb8a5f3f643033148d5c06c3]&amp;lt;/sup&amp;gt;&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;spi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d74d99229f4d48f42d674f7a8a1137179efd67ac]&amp;lt;/sup&amp;gt;. Necessary device tree changes [https://patchwork.kernel.org/project/linux-rockchip/list/?series=586691 in review].&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Battery&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;rk817-charger&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/drivers/power/supply/rk817_charger.c?id=11cb8da0189b417392e2334ae967b0ba1f0d1be8]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A, Pinenote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Microphone&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-saradc&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7786da3b5ae167c17f35e22ba35e06006338c2f6]&amp;lt;/sup&amp;gt;. Headphone jack mic seems to connect to &amp;lt;code&amp;gt;SARADC_VIN2_HP_HOOK&amp;lt;/code&amp;gt;, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-usb2phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.17&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/phy/rockchip?h=v5.17-rc1&amp;amp;id=42b559727a45d79c811f493515eb9b7e56016421]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | e-Ink&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review (RFC)&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/20220413221916.50995-1-samuel@sholland.org/T/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| A DRM driver is available [https://github.com/smaeul/linux/commits/rk35/ebc-drm-v5 here]; also see [[RK3566 EBC Reverse-Engineering]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Combo PHY&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;naneng-combphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7160820d742a16313f7802e33c2956c19548e488]&amp;lt;/sup&amp;gt;. Still requires DTS changes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | RGA&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs fixing&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rga&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[User:CounterPillow]] experimentally enabled it&amp;lt;sup&amp;gt;[https://gist.github.com/CounterPillow/6bea809f15ada7ddd3a3d7a4994fdc4e]&amp;lt;/sup&amp;gt; in the device tree and ran gstreamer's v4l2convert through it to test, resulting in a completely garbled output.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Fan Controller&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;emc2301&amp;lt;/code&amp;gt;&lt;br /&gt;
| Previous attempts at mainlining: [http://lkml.iu.edu/hypermail/linux/kernel/1306.1/02473.html] and [https://lore.kernel.org/all/20200928104326.40386-1-biwen.li@oss.nxp.com/]. Latest iteration: [https://gitlab.traverse.com.au/ls1088firmware/traverse-sensors/-/commit/1cdec49171ebafcf32b347e7701224144de8620b]&lt;br /&gt;
| SOQuartz Blade&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | CSI Camera&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;rkisp&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/isp]&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;rockchip-inno-csidphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/29c99fb085ad53e6d5504d1f8d32e6673b9b3a2c]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | NPU&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &lt;br /&gt;
| Downstream version is a closed source SDK. Major undertaking to reimplement this as Linux does not (yet) appear to have a generic architecture for neural accelerators.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Crypto&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-crypto&amp;lt;/code&amp;gt; v2&lt;br /&gt;
| Downstream driver [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/crypto/rockchip] doesn't include a rk3568 compatible either, but the TRM shows that it seemingly matches.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | TRNG&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=694733&amp;amp;archive=both]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rng&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current Status ==&lt;br /&gt;
&lt;br /&gt;
The following sections give an overview over the current status of different parts of the board. Some parts are waiting on a driver to be written or ported, others only need various adjustments.&lt;br /&gt;
&lt;br /&gt;
According to pgwipeout, I/O device performance is within expected ranges now.&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
&lt;br /&gt;
* eMMC&lt;br /&gt;
* SDMMC0 (SD cards)&lt;br /&gt;
* GMAC (Gigabit Ethernet)&lt;br /&gt;
* USB 2.0&lt;br /&gt;
* SATA 2&lt;br /&gt;
* SATA 3&lt;br /&gt;
* UART&lt;br /&gt;
** UART 0 (Pi-bus)&lt;br /&gt;
** UART 1 (Bluetooth)&lt;br /&gt;
** UART 2 (Pi-bus, debug)&lt;br /&gt;
* Video Decode&lt;br /&gt;
** VP8&lt;br /&gt;
** H.264&lt;br /&gt;
* Video Encode&lt;br /&gt;
** JPEG (it's pretty bad)&lt;br /&gt;
* Battery&lt;br /&gt;
* GPU&lt;br /&gt;
* Audio&lt;br /&gt;
** Analog audio works&lt;br /&gt;
** SPDIF works&lt;br /&gt;
** HDMI works&lt;br /&gt;
* SPI &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
* I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
&lt;br /&gt;
=== Partially Working ===&lt;br /&gt;
&lt;br /&gt;
* PCI-Express Controller &amp;amp;mdash; everything but devices that need cache coherency (e.g. dGPUs) should work&lt;br /&gt;
** [[User:CounterPillow]] noticed some weirdness with NVMe devices disconnecting during heavy write operations, likely down due to power draw on one of the rails as the same sustained bandwidth could be achieved with a different PCIe device with no issue.&lt;br /&gt;
* SDMMC1 (Wi-Fi) &amp;amp;mdash; AP6256 working, BL602 needs some work to make it flash firmware&lt;br /&gt;
* [https://developer.arm.com/architectures/system-architectures/system-components/arm-generic-interrupt-controller GIC] &amp;amp;mdash; needs errata published by Rockchip to get upstream to add device-specific workarounds&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/CAMdYzYrQ5f-mv_VmTq_CRf9tR=j3mwRpKHNLmPFgCF9whsGFRw@mail.gmail.com/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Video Output &amp;amp;mdash; only at 1920x1080p60 and nothing else, very buggy and rough around more than just the edges&lt;br /&gt;
&lt;br /&gt;
=== Confirmed Broken ===&lt;br /&gt;
&lt;br /&gt;
* USB 3.0 (applies to Model A only) &amp;amp;mdash; only works with very short cables and depends on the device. This is due to a hardware design issue relating to the coupling capacitors needed for SATA, which shares the same lines as USB 3.0.&lt;br /&gt;
** Hardware design changes have been suggested to engineers, it's in their hands now.&lt;br /&gt;
* RGA &amp;amp;mdash; only works with memory &amp;amp;le; 4 GiB, because Rockchip didn't make the address registers larger. Oopsie.&lt;br /&gt;
&lt;br /&gt;
=== Needs Testing ===&lt;br /&gt;
&lt;br /&gt;
* E-Paper&lt;br /&gt;
* Microphone Input&lt;br /&gt;
* CSI &amp;amp;mdash; needs CIF driver&lt;br /&gt;
* eDP &amp;amp;mdash; needs PHY driver and controller driver&lt;br /&gt;
* DSI&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== ebc-dev Reverse Engineering and Development ===&lt;br /&gt;
&lt;br /&gt;
The [https://gitlab.com/pine64-org/quartz-bsp/linux-next/-/tree/rk356x-ebc-dev driver for the eInk panel] needs to both be reverse engineered and then rewritten as C. In its current form, it is mostly an assembly dump produced by gcc with debug symbols. See [[RK3566 EBC Reverse-Engineering]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Investigate MCU ===&lt;br /&gt;
&lt;br /&gt;
The RK3566 comes with an integrated RISC-V microcontroller (MCU). It communicates with the A55 host through the Mailbox system driven by the rockchip-mailbox driver. Since this MCU would be quite useful for things such as low power standby mode, investigating how it can be turned on and have firmware flashed to it should greatly enhance the power saving features of the PineNote.&lt;br /&gt;
&lt;br /&gt;
=== Mainline U-Boot Work ===&lt;br /&gt;
&lt;br /&gt;
Currently, mainline U-Boot does not have support for the RK3566 SoC used on the Quartz64. That's why we currently use the &amp;quot;downstream&amp;quot; Rockchip U-Boot, which is based on an old version of U-Boot and contains vendor specific patches that have not undergone the same level of code review as they'd have done had they been submitted upstream.&lt;br /&gt;
&lt;br /&gt;
While the lack of ATF sources means that using mainline U-Boot would still require the use of Rockchip provided binaries for the firmware, the mainline U-Boot works needs to be done eventually anyway, and even with Rockchip blobs, a more modern version of U-Boot will be much nicer to use.&lt;br /&gt;
&lt;br /&gt;
Someone needs to get on the task of investigating what minimally needs to be ported to get the board booting with mainline U-Boot, port those changes, and submit them for review.&lt;br /&gt;
&lt;br /&gt;
==== Things that need to be done ====&lt;br /&gt;
&lt;br /&gt;
This list is non-exhaustive as we don't exactly know how much is missing&lt;br /&gt;
&lt;br /&gt;
* Do the &amp;lt;code&amp;gt;rk3568.dtsi&amp;lt;/code&amp;gt; refactoring into &amp;lt;code&amp;gt;rk356x.dtsi&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;rk3568.dtsi&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;rk3566.dtsi&amp;lt;/code&amp;gt; that the kernel did, probably just port the kernel dtsi files for this&lt;br /&gt;
* Bring the kernel's Quartz64 DTS into the tree&lt;br /&gt;
* Write a &amp;lt;code&amp;gt;quartz64-rk3566_defconfig&amp;lt;/code&amp;gt; based on &amp;lt;code&amp;gt;evb-rk3568_defconfig&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stretch Goals:&lt;br /&gt;
&lt;br /&gt;
* Port the Naneng Combo PHY driver to u-boot so we can SATA, USB 3 and PCIe boot&lt;br /&gt;
* Look into SPI&lt;br /&gt;
* Port the Motorcomm PHY driver to u-boot for networking?&lt;br /&gt;
* Port a basic VOP2 driver to get a framebuffer from u-boot&lt;br /&gt;
&lt;br /&gt;
==== List of Useful Resources for this Task ====&lt;br /&gt;
* Downstream Rockchip U-Boot repository with Quartz64 specific patches: https://gitlab.com/pgwipeout/u-boot-rockchip/-/tree/quartz64&lt;br /&gt;
* Mainline Rockchip custodian U-Boot repository: https://source.denx.de/u-boot/custodians/u-boot-rockchip&lt;br /&gt;
* U-Boot Mailing List: https://lists.denx.de/listinfo/u-boot&lt;br /&gt;
&lt;br /&gt;
=== eDP Driver Porting ===&lt;br /&gt;
&lt;br /&gt;
The eDP PHY driver and controller driver needs to be ported, brought into shape and submitted with proper commit attribution to the Rockchip authors.&lt;br /&gt;
&lt;br /&gt;
[[User:CounterPillow]] has experimentally ported stuff, but it's currently not working.&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel Config Options ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_I2S_TDM&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog and HDMI audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog audio on the Model A&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_STMMAC_ETH&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DWMAC_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet, set this one to Y, m won't work out of the box if the generic PHY driver is y and binds first. Alternatively tell users in board-specific setup instructions to force including the &amp;lt;code&amp;gt;motorcomm&amp;lt;/code&amp;gt; module in initramfs if you set it to m.&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_SDHCI_OF_DWCMSHC&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PCIE_ROCKCHIP_DW_HOST&amp;lt;/code&amp;gt;&lt;br /&gt;
** PCIe&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** PHY for PCIe/SATA/USB3&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DRM_PANFROST&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPU&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_SPDIF&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPDIF audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_DW_HDMI&amp;lt;/code&amp;gt;&lt;br /&gt;
** HDMI PHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI DSI DPHY (note: requires in-review patches linked in status table)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
** Video output&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ARCH_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_USB2&amp;lt;/code&amp;gt;&lt;br /&gt;
** USB 2&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_RTC_DRV_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MFD_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Various things relating to the RK817 chip&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CHARGER_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** RK817 charger (note: requires in-review patches linked in status table)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REGULATOR_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Voltage regulators&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PM_DOMAINS&amp;lt;/code&amp;gt;&lt;br /&gt;
** Power management domains&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_GPIO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PINCTRL_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO and general SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PWM_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** PWM support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IOMMU&amp;lt;/code&amp;gt;&lt;br /&gt;
** IOMMU support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_MBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
** Mailbox support (for communication with MCU)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_SARADC&amp;lt;/code&amp;gt;&lt;br /&gt;
** Analog-to-digital conversion support, for e.g. microphones&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_THERMAL&amp;lt;/code&amp;gt;&lt;br /&gt;
** Temperature sensor and thermal throttling support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SPI_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPI support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_VIDEO_HANTRO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Hardware video decoder support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IODOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support so your I/O pins have the right voltage&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Common clock support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI CSI DPHY&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* pgwipeout's kernel tree&lt;br /&gt;
** https://gitlab.com/pgwipeout/linux-next/-/tree/quartz64-v5.15-rc1&lt;br /&gt;
* BSP based development effort for SPL/U-Boot and Linux&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp&lt;br /&gt;
* Image CI pipeline aimed at developers&lt;br /&gt;
** https://gitlab.com/pgwipeout/quartz64_ci/&lt;br /&gt;
* Rockchip U-Boot&lt;br /&gt;
** https://github.com/rockchip-linux/u-boot&lt;br /&gt;
* Downstream rockchip-linux kernel tree&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux&lt;br /&gt;
* Tianocore EDK II port for UEFI on Quartz64&lt;br /&gt;
** https://github.com/jaredmcneill/quartz64_uefi&lt;br /&gt;
* Mainline U-Boot Port by pgwipeout&lt;br /&gt;
** https://gitlab.com/pgwipeout/u-boot-quartz64&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* Rockchip-SoC Patchwork Page&lt;br /&gt;
** https://patchwork.kernel.org/project/linux-rockchip/list/&lt;br /&gt;
* Rockchip Kernel Mailing List Archive&lt;br /&gt;
** https://lore.kernel.org/linux-rockchip/&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Boot Order ====&lt;br /&gt;
The RK3566 boot ROM will search for a valid ID BLOCK in the following order on the support boot media:&lt;br /&gt;
&lt;br /&gt;
* SPI NOR flash&lt;br /&gt;
* SPI NAND flash&lt;br /&gt;
* SD-Card&lt;br /&gt;
* eMMC&lt;br /&gt;
&lt;br /&gt;
... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip&lt;br /&gt;
flash/boot tools.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader Flashing ====&lt;br /&gt;
&lt;br /&gt;
As per pgwipeout's [https://gitlab.com/pine64-org/quartz-bsp/u-boot/-/commit/12d102b86813378af08b086f3b9c13ed8010754c commit message]:&lt;br /&gt;
* Make a partition named &amp;lt;code&amp;gt;uboot&amp;lt;/code&amp;gt; as partition number 1 at 8 MiB to 16 MiB&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=idblock.bin of=/dev/''&amp;lt;mmc/sd&amp;gt;'' seek=64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=uboot.img of=/dev/''&amp;lt;mmc/sd&amp;gt;''1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== BSP Image Layout ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]][[Category:Rockchip RK3566]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote&amp;diff=15302</id>
		<title>PineNote</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote&amp;diff=15302"/>
		<updated>2023-01-11T08:22:15Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Add link to PineNote development page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:PineNote-1.jpg|400px|thumb|right|The PineNote]]&lt;br /&gt;
&lt;br /&gt;
The PineNote is the first hybrid notepad computer device combination of notebook, tablet and e-reader using an e-ink panel. It is derived from the Quartz64 model A SBC and powered by a Rockchip RK3566 quad-core ARM Cortex A55 64-bit processor with a MALI G-52 GPU.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== State of the software ===&lt;br /&gt;
&lt;br /&gt;
The PineNote is based on the in 2021 released Rockchip RK3566 SoC. The upstreaming status of the SoC functionality can be found on the [[Quartz64 Development#Upstreaming Status|Quartz64 development]] wiki page of the Quartz64 single-board computer using the same SoC. In the [[PineNote_Development#Kernel_modules_/_mainlining_status|PineNote development]] wiki page you'll find the items specific for the PineNote.&lt;br /&gt;
&lt;br /&gt;
The early adopter's batch of the PineNote is aimed solely at early adopters - more specifically, the units are solely intended to find their way into the hands of users with extensive Linux experience. If you’re looking to buy a PineNote in the first batch, you must expect to write software for it, not to write notes on it. The software shipping from the factory for the first batch will not be suitable for taking notes, reading e-books, or writing your dissertation. It may not even boot to a graphical environment.&lt;br /&gt;
&lt;br /&gt;
An early version of a GNOME-based Debian image is available for [[PineNote_Development/Installing_Debian|testing]], but should not be expected to meet general-user readiness.&lt;br /&gt;
&lt;br /&gt;
=== Help and support ===&lt;br /&gt;
&lt;br /&gt;
Still have any questions regarding software, shipping, or ordering after reading this wiki? Please don't hesitate to contact the community in the bridged community channels for detailed answers or simply to chat with friendly people in the community! See [[Main Page#Community and Support]]. &lt;br /&gt;
&lt;br /&gt;
Please keep in mind that PINE64 is not like a regular company (see the [https://www.pine64.org/philosophy/ PINE64 philosophy]) and that support resources are limited - the best way to get support quickly is to ask in the community chat! Please only contact the PINE64 support directly if questions couldn't be solved via the community chat or this wiki.&lt;br /&gt;
&lt;br /&gt;
== Specification ==&lt;br /&gt;
[[File:PineNote_Pen_function.jpg|300px|right]]&lt;br /&gt;
[[File:PineNote_Cover-1.jpg|300px|right]]&lt;br /&gt;
&lt;br /&gt;
=== General Information  ===&lt;br /&gt;
* Dimensions: 191.1x232.5x7.4mm&lt;br /&gt;
* Weight: 438g&lt;br /&gt;
&lt;br /&gt;
=== Core  ===&lt;br /&gt;
* CPU: RK3566 1.8GHz 64-bit quad-core A55&lt;br /&gt;
* GPU: MALI G52 2EE&lt;br /&gt;
* System memory: 4GB LPDDR4&lt;br /&gt;
* Flash: 128GB eMMC&lt;br /&gt;
&lt;br /&gt;
=== E-ink Display ===&lt;br /&gt;
* Size: 10.3&amp;quot;&lt;br /&gt;
* Resolution: 1404x1872&lt;br /&gt;
* DPI: 227&lt;br /&gt;
* Grayscale: 16&lt;br /&gt;
* Front Light: 36 level cold and warm &lt;br /&gt;
* Capacitive multi-touch panel&lt;br /&gt;
* EMR pen digitizer&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
* WiFi: 2.4/5GHz 802.11a/b/g/n/ac&lt;br /&gt;
* Bluetooth: 5.0&lt;br /&gt;
&lt;br /&gt;
=== Audio ===&lt;br /&gt;
* Built in stereo speakers&lt;br /&gt;
* 4 x DMIC microphone&lt;br /&gt;
&lt;br /&gt;
=== Sensor ===&lt;br /&gt;
* G-Sensor for portrait and landscape sensing&lt;br /&gt;
&lt;br /&gt;
=== Power ===&lt;br /&gt;
* 4000mAH LiPo battery&lt;br /&gt;
* DC 5V @ 3A USB-C connector&lt;br /&gt;
&lt;br /&gt;
=== Accessories ===&lt;br /&gt;
* Optional EMR pen with magnetic attachment (included in the first production batch)&lt;br /&gt;
* Optional Cover (included in the first production batch)&lt;br /&gt;
&lt;br /&gt;
== Software releases ==&lt;br /&gt;
* Not yet available&lt;br /&gt;
&lt;br /&gt;
== SoC and Memory Specifications ==&lt;br /&gt;
* Based on [https://www.rock-chips.com/a/en/products/RK35_Series/2021/0113/1274.html Rockchip RK3566]&lt;br /&gt;
[[File:RK3566_icon.png|right]]&lt;br /&gt;
&lt;br /&gt;
=== CPU Architecture ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/processors/cortex-a/cortex-a55 Quad-core ARM Cortex-A55@1.8GHz]&lt;br /&gt;
* AArch32 for full backwards compatibility with ARMv7&lt;br /&gt;
* ARM Neon Advanced SIMD (single instruction, multiple data) support for accelerated media and signal processing computation&lt;br /&gt;
* Includes VFP hardware to support single and double-precision operations&lt;br /&gt;
* ARMv8 Cryptography Extensions&lt;br /&gt;
* Integrated 32KB L1 instruction cache and 32KB L1 data cache per core&lt;br /&gt;
* 512KB unified system L3 cache&lt;br /&gt;
* [https://developer.arm.com/ip-products/security-ip/trustzone TrustZone] technology support&lt;br /&gt;
* [https://www.cnx-software.com/2020/12/01/rockchip-rk3568-processor-to-power-edge-computing-and-nvr-applications 22nm process, believed to be FD-SOI]&lt;br /&gt;
&lt;br /&gt;
=== GPU (Graphics Processing Unit) Capabilities ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/graphics-and-multimedia/mali-gpus/mali-g52-gpu Mali-G52 2EE Bifrost GPU@800MHz]&lt;br /&gt;
* 4x Multi-Sampling Anti-Aliasing (MSAA) with minimal performance drop &lt;br /&gt;
* 128KB L2 Cache configurations&lt;br /&gt;
* Supports OpenGL ES 1.1, 2.0, and 3.2&lt;br /&gt;
* Supports Vulkan 1.0 and 1.1&lt;br /&gt;
* Supports OpenCL 2.0 Full Profile&lt;br /&gt;
* Supports 1600 Mpix/s fill rate when at 800MHz clock frequency&lt;br /&gt;
* Supports 38.4 GLOP/s when at 800MHz clock frequency   &lt;br /&gt;
&lt;br /&gt;
=== NPU (Neural Processing Unit) Capabilities ===&lt;br /&gt;
* Neural network acceleration engine with processing performance of up to 0.8 TOPS&lt;br /&gt;
* Supports integer 8 and integer 16 convolution operations&lt;br /&gt;
* Supports the following deep learning frameworks: TensorFlow, TF-lite, Pytorch, Caffe, ONNX, MXNet, Keras, Darknet&lt;br /&gt;
&lt;br /&gt;
=== System Memory ===&lt;br /&gt;
* RAM Memory : 4GB LPDDR4.&lt;br /&gt;
* Flash Memory: 128GB eMMC&lt;br /&gt;
&lt;br /&gt;
== PineNote Information, Schematics, and Certifications ==&lt;br /&gt;
* PineNote Developer kit version&lt;br /&gt;
* The v1.2 is the PineNote production schematic. &lt;br /&gt;
** [https://files.pine64.org/doc/PineNote/PINENOTE_MAIN-V1R2%20-%20Schematic-20210824.pdf PineNote Mainboard Schematic ver 1.2 20210824 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/PineNote/PINENOTE_USB-C-Board-V1.0-sch.pdf PineNote USB-C Daughter Board Schematic ver 1.0 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/PineNote/PineNote_USB-C_Console_UART_breakout_board_schematic_v1.0_20210903.pdf PineNote USB-C Console UART Breakout Board Schematic ver 1.0 PDF file]&lt;br /&gt;
* The v1.1 is early release schematic just for reference only and used by developers who received the prototype. &lt;br /&gt;
** [https://files.pine64.org/doc/PineNote/PINENOTE_MAIN-V1R1%20-%20Schematic-20210726.pdf PineNote early released Schematic ver 1.1 20210726 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/PineNote/PINENOTE_MAIN-V1R1-REF-TOP-20210726.pdf PineNote early released ver 1.1 20210726 PCB Connector placement PDF file]&lt;br /&gt;
&lt;br /&gt;
* Certifications:&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PineNote%20FCC15C%20Certificate%20DTS-TC561262.pdf PineNote FCC-15C Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PineNote%20FCC15E%20Certificate%20NII-TC973072.pdf PineNote FCC-15E Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PineNote%20CE%20RED%20Certicate%20ET-21090682EC.pdf PineNote CE RED Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/PineNote%20RoHS%20Certificate%20ET-210900082C.pdf PineNote ROHS Certificate]&lt;br /&gt;
&lt;br /&gt;
== Datasheets for Components and Peripherals ==&lt;br /&gt;
* Rockchip RK3566 SoC information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Rockchip%20RK3566%20Datasheet%20V1.0-20201210.pdf Rockchip RK3566 ver 1.0 datasheet, already got release permission from Rockchip]&lt;br /&gt;
* Rockchip RK817 PMU (Power Management Unit) Information:&lt;br /&gt;
** [https://www.rockchip.fr/RK817%20datasheet%20V1.01.pdf Rockchip RK817 ver 1.01 datasheet]&lt;br /&gt;
* LPDDR4 (200 Balls) SDRAM:&lt;br /&gt;
** ---&lt;br /&gt;
* eMMC information:&lt;br /&gt;
** [https://en.biwin.com.cn/product/detail/6 Biwin 128GB eMMC model: BWCTASC41P128G]  &lt;br /&gt;
* E-ink Panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Eink%20P-511-828-V1_ED103TC2%20Formal%20Spec%20V1.0_20190514.pdf E-Ink 10.3&amp;quot; 1872x1404 ED103TC2 Glass Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/PineNote/TI%20PMU-TPS651851.pdf TPS65185x PMIC for E-Ink Enabled Electronic Paper Display Datasheet]&lt;br /&gt;
* Touch Screen information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/PineNote/CYTMA448_Summary_RevC_5-26-16.pdf Cypress CYTMA448 multi-Point Capacitive Touch Controller Datasheet]&lt;br /&gt;
** Wacom Pen Digitizer Unit Model: SUDE-10S15MI-01X for 10.3&amp;quot; Display Module&lt;br /&gt;
* WiFi/BT module info:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rockpro64/AW-CM256SM_DS_DF_V1.9_STD.pdf Azurewave CM256SM 11AC WiFi + Bluetooth5.0 Datasheet]]&lt;br /&gt;
* G Sensor info:&lt;br /&gt;
** [http://www.silan.com.cn/en/product/details/47.html#app01 Silan SC7A20 3-Axis MEMS Accelerometer]&lt;br /&gt;
* Audio Amplifier information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/PineNote/Awinic%20AW87318%20Class-K%20Audio%20Amp%20Datasheet.pdf Awinic AW87318 Class-K Audio Amp Datasheet]&lt;br /&gt;
&lt;br /&gt;
== Development Efforts ==&lt;br /&gt;
&lt;br /&gt;
* [[PineNote Development]] for general information regarding how to flash the device and other development information.&lt;br /&gt;
&lt;br /&gt;
=== Software ===&lt;br /&gt;
&lt;br /&gt;
* [[Quartz64 Development]] for the mainlining status of various functions on the Rockchip RK3566 SoC.&lt;br /&gt;
* [[RK3566 EBC Reverse-Engineering]] for the EBC (eInk Panel) driver.&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
&lt;br /&gt;
This section includes discussions and their results regarding hardware changes to the PineNote.&lt;br /&gt;
&lt;br /&gt;
The following topics have resolved:&lt;br /&gt;
&lt;br /&gt;
* [[PineNote/Hardware_Changes/Closed_Case_UART]]&lt;br /&gt;
* '''Could the USB-C port support USB 3.1 5Gbps?''' Yes and no. The RK3566 only has a host-mode 5Gbps controller, meaning it can only negotiate such a high data rate with a device such as a flash drive. When the RK3566 is acting as a device, it only supports 480Mbps transfer rates. The hardware required to switch between these modes would raise the PineNote's price unreasonably. Therefore, the USB-C port will remain at USB 2.0 speeds for Host and Device mode.&lt;br /&gt;
* '''Could the USB-C port output DisplayPort?''' Yes and no. The hardware required to support such a feature would raise the PineNote's price unreasonably. Therefore, DisplayPort output will not be possible through the USB-C port.&lt;br /&gt;
* '''Where is the microSD card slot?''' The case design of the PineNote is fixed, making physical changes like adding a microSD card slot would raise the cost unreasonably.&lt;br /&gt;
* '''How will I install software to the PineNote?''' This is a hardware and software question. If the software on your PineNote is completely broken and cannot boot to a recoverable state, a Hall (magnet) sensor was fitted to the PineTab motherboard as U9009. This sensor is attached to SARADC_VIN0_KEY/RECOVERY on the RK3566. With the device powered off, and screen face down, holding a magnet over U9009 and plugging in a USB-C cable causes the device to boot into [http://opensource.rock-chips.com/wiki_Rockusb &amp;quot;rockusb&amp;quot;] flash mode. With proper flashing software and drivers, it should be possible to load a new operating system using rockusb if the system is soft-bricked. Of course, software vendors will need to be more careful with flashing firmware and providing useful &amp;quot;recovery&amp;quot; options on this device due to this process's relative difficulty to other PINE64 devices.&lt;br /&gt;
&lt;br /&gt;
==== Unresolved ====&lt;br /&gt;
&lt;br /&gt;
The following concerns have been brought up as open, unanswered topics:&lt;br /&gt;
&lt;br /&gt;
* Does [https://en.wikipedia.org/wiki/USB-C#Audio_Adapter_Accessory_Mode_2|USB-C Audio Adapter Accessory Mode] work? It appears that the Headphone output of the audio codec was routed to the USB-C audio+USB switch, but it's unclear whether CC lines are hooked up correctly for detection of such a device. The PineNote hardware team will be testing this functionality soon (as of August 19, 2021). Note that Audio Accessory mode is detectable by reading the I2C registers of the WUSB3801Q. So connecting ASEL to a GPIO would be enough to get this working if it is not working already.&lt;br /&gt;
* Why is the Headphone output of the audio codec routed to the speakers? HPL_OUT is routed from the RK817 PMIC and audio codec to U9010 (the USB-C switch) and U6 (the audio amplifier). SPK_OUT is unused. It seems like SPK_OUT should be routed to U6 and HPL_OUT to U9010.&lt;br /&gt;
* Nitpick: The cold white charging LED bleeds through the gap between the rear case and the device's face. It does not bleed onto the screen, but it is jarring in low-light conditions or when the screen is amber. Could be resolved in software by turning off the charge LED when the screen is on.&lt;br /&gt;
* Is there any way to indicate when the device is in rockusb mode, such as connecting a certain magic pin to the power LED?&lt;br /&gt;
* The modem/4G connector (J6010) has its I2C and UART pins unconnected. Could those be connected to the SoC?&lt;br /&gt;
&lt;br /&gt;
==== USB-C Debug Accesory Mode (DAM)/UART Dongle====&lt;br /&gt;
The USB UART dongle delivered with the PineNote allows you to have access to a serial port without having to open up the device. The factory firmware runs at a baud rate of 1500000bps, 8 data bits 1 stop bit, no parity and no flow control. The USB-C male end should go into the PineNote and the female end can be connected with a standard USB-C cable to your computer.&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
PineNote development documentation is a little lacking. Unless you are relatively plugged in with the chat, it's difficult to know what is going on. There is an effort to amend that that lives here: [[PineNote Documentation]].&lt;br /&gt;
&lt;br /&gt;
== BSP Linux SDK ==&lt;br /&gt;
&lt;br /&gt;
=== BSP Linux SDK ver 4.19 for PineNote and Quart64 model A SBC  ===&lt;br /&gt;
* [http://files.pine64.org/SDK/Quartz64/QUARTZ64-model-A_BSP%20Linux.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** [https://tmp.mwfc.info/pinenote/QUARTZ64-model-A_BSP%20Linux.tar.gz mirror by mwfc]&lt;br /&gt;
** MD5 (TAR-GZip file): 24554419aec29700add97167a3a4c9ed&lt;br /&gt;
** File Size: 32.67.00GB&lt;br /&gt;
&lt;br /&gt;
== Android SDK ==&lt;br /&gt;
&lt;br /&gt;
=== Android 11 eink SDK for PineNote and Quart64 model A SBC  ===&lt;br /&gt;
* This is the Android SDK build for 10.3&amp;quot; eink panel on Quartz64 model A SBC. &lt;br /&gt;
* [http://files.pine64.org/SDK/Quartz64/QUARTZ64-model-A_eink.android11_SDK.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** [https://tmp.mwfc.info/pinenote/QUARTZ64-model-A_eink.android11_SDK.tar.gz mirror by mwfc]&lt;br /&gt;
** MD5 (TAR-GZip file): 293a550584298de4fb95ceae18103672&lt;br /&gt;
** File Size: 72.88GB&lt;br /&gt;
** Just the boot blobs (&amp;lt;1MB): [[File:Rk35-blobs.tar.gz]]&lt;br /&gt;
* View [[Android SDK for RK3566]] for more information how to compile an image for the PineNote using this SDK&lt;br /&gt;
&lt;br /&gt;
== Torrent ==&lt;br /&gt;
There is a [https://cdn.discordapp.com/attachments/870707390998282292/907726420204208148/pinenote.torrent torrent] with the files (100GB)&lt;br /&gt;
&lt;br /&gt;
== Hardware troubleshooting guide ==&lt;br /&gt;
At present, nothing is available.&lt;br /&gt;
&lt;br /&gt;
[[Category:PineNote]] [[Category:Rockchip RK3566]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15301</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15301"/>
		<updated>2023-01-11T08:09:45Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Updated status for panfrost wrt PineNote as I think it's not yet enabled *for* PineNote&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general development information for the [[PineNote]]. If you are new and down to try a new installation process, the easiest way to get linux is likely to [https://wiki.pine64.org/wiki/PineNote_Development/Installing_Debian install Debian] -- NOTE THAT THIS INSTALLATION PROCESS IS VERY NEW. While many people have been using the kernel that will be installed safely at this point, the instructions for installing Debian via rootfs are very new. Take backups!&lt;br /&gt;
&lt;br /&gt;
The more stable recommended approach is described below:&lt;br /&gt;
&lt;br /&gt;
Start with [https://github.com/DorianRudolph/pinenotes Dorian's guide] which will guide you through getting Arch installed. For instructions on building the latest kernel, see [[PineNote Development/Building Kernel]]. For helpful configurations, see [[PineNote Development/Apps]]. For ways to pitch in, see [[PineNote Development/TODOs]]. To boot Linux by default instead of Android, see [[PineNote Development/Booting Linux]]. [https://www.youtube.com/watch?v=ZCLyJfbzbrU Here is a video] of a user running Manjaro and some apps on their PineNote on 9/10/2022.&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
== Kernel modules / mainlining status ==&lt;br /&gt;
&lt;br /&gt;
WORK IN PROGRESS !&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote.&lt;br /&gt;
It also aims at listing repositories of work in progress.&lt;br /&gt;
While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) &lt;br /&gt;
is expected, only modules relevant to the PineNote hardware should be listed here.&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;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip_ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;st-accel-i2c&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18 &amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt; this got added to the &amp;lt;code&amp;gt;.dtsi&amp;lt;/code&amp;gt; file, but it's status is disabled.&lt;br /&gt;
I haven't seen the &amp;lt;code&amp;gt;gpu&amp;lt;/code&amp;gt; node getting enabled in the &amp;lt;code&amp;gt;.dts&amp;lt;/code&amp;gt; for PineNote (yet)?&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= More Information = &lt;br /&gt;
== High-level developer new to embedded linux? ==&lt;br /&gt;
Here are some resources I have found helpful in learning to develop on embedded linux devices:&lt;br /&gt;
* Great youtube series introducing you to the kernel and lower-level components of Linux: https://www.youtube.com/watch?v=WiZ05pnHZqM&lt;br /&gt;
* https://embetronicx.com/&lt;br /&gt;
* https://bootlin.com/training/&lt;br /&gt;
* https://www.nand2tetris.org&lt;br /&gt;
&lt;br /&gt;
== Notes Written by Some Developers ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip_ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
== Alternative to patching of mesa ==&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&amp;lt;br&amp;gt;&lt;br /&gt;
- replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
- preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building the most recent kernel ==&lt;br /&gt;
See [https://wiki.pine64.org/wiki/PineNote_Development/Building_Kernel here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Video of Factory Android OS ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (`adb`) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running `adb`.&lt;br /&gt;
&lt;br /&gt;
== Emulator for Developing/Testing Pinenote Apps ==&lt;br /&gt;
https://github.com/michaelshiel/picom-epaper&lt;br /&gt;
&lt;br /&gt;
= Flashing Software =&lt;br /&gt;
Currently, the only ways to flash software are from the factory Android installation (UART shell, adb, or fastboot) or by using rkdeveloptool.&lt;br /&gt;
&lt;br /&gt;
== Backup of the content of the internal MMC before you mess anything up ==&lt;br /&gt;
Especially the '''waveform''' partition contains data '''unique''' to your PineNote and is a prime candidate for backup.&lt;br /&gt;
&lt;br /&gt;
But other partitions like uboot (need for any operation of the device) or the un-partitioned space at the beginning containing the GPT partition table (and presumably the VCOM setting for the e-ink display and maybe device mac addresses) contains data you may wish to backup.&lt;br /&gt;
&lt;br /&gt;
Depending of your personal level of data hoarder you may want to backup more than this or even just everything (the large userdata partition is supposed to be able to be repopulated as empty space by Android)&lt;br /&gt;
&lt;br /&gt;
In any case it is easier to restore/extract data from a backup than not having one if you need one.&lt;br /&gt;
&lt;br /&gt;
=== Manually using rkdeveloptool ===&lt;br /&gt;
Dorian has some nice [https://github.com/DorianRudolph/pinenotes notes regarding the PineNote]&lt;br /&gt;
&lt;br /&gt;
Don't forget to install a patched uboot for reading beyond 32MB and to respect the 2GB limit/bug of the current rkdeveloptool as per his notes&lt;br /&gt;
&lt;br /&gt;
=== Automated backup using a script and rkdeveloptool ===&lt;br /&gt;
[https://github.com/talpadk/pinenote-backup pinenote-backup] is a python script for detecting the partitions and automating the backup of partitions or the whole disk&lt;br /&gt;
&lt;br /&gt;
I also requires a patched u-boot but automatically handles the 2GB limit by splitting up larger reads into smaller ones&lt;br /&gt;
&lt;br /&gt;
=== Using the factory Android installation ===&lt;br /&gt;
For any one knowing how and with which caveats: Write ME&lt;br /&gt;
&lt;br /&gt;
=== Using a user installed Linux ===&lt;br /&gt;
A Linux installed to the cache partition should be able to easily backup everything over WiFi or to a USB stick/disk using dd&lt;br /&gt;
&lt;br /&gt;
However the user would need to backup the cache partition themself (if they want that).&lt;br /&gt;
&lt;br /&gt;
And more importantly they would only be getting the backup ''after'' they started playing with the content of the MMC.&lt;br /&gt;
&lt;br /&gt;
== Side-by-side setup ==&lt;br /&gt;
&lt;br /&gt;
It is possible to set up a partition for mainline development without disturbing the factory Android installation. This allows updating a mainline kernel, DTB, and initramfs over Wi-Fi until WiFi or USB OTG is working in mainline Linux.&lt;br /&gt;
&lt;br /&gt;
=== Without Repartitioning ===&lt;br /&gt;
&lt;br /&gt;
The recommended partition for this is &amp;lt;tt&amp;gt;mmcblk0p11&amp;lt;/tt&amp;gt; aka &amp;lt;tt&amp;gt;/cache&amp;lt;/tt&amp;gt;. It is large and already formatted as &amp;lt;tt&amp;gt;ext4&amp;lt;/tt&amp;gt;, so it is readable from U-Boot. Here are some general steps:&lt;br /&gt;
&lt;br /&gt;
# From the UART or adb shell, set up your chroot in &amp;lt;tt&amp;gt;/cache&amp;lt;/tt&amp;gt;. I used the Alpine Linux rootfs tarball.&lt;br /&gt;
# Copy in your kernel and DTB, using for example &amp;lt;tt&amp;gt;scp&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;wget&amp;lt;/tt&amp;gt; inside the chroot.&lt;br /&gt;
# Finally, create and boot an &amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; as described below.&lt;br /&gt;
&lt;br /&gt;
=== With Repartitioning ===&lt;br /&gt;
&lt;br /&gt;
It is possible to shrink the &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt; partition, and create a new partition at the end for use with mainline Linux. This provides much more space than &amp;lt;tt&amp;gt;cache&amp;lt;/tt&amp;gt;. However, because &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt; is formatted with &amp;lt;tt&amp;gt;f2fs&amp;lt;/tt&amp;gt;, and that filesystem cannot be shrunk, resizing the partition requires wiping &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# Back up any necessary files from userdata&lt;br /&gt;
# Boot to a mainline kernel from &amp;lt;tt&amp;gt;mmcblk0p11&amp;lt;/tt&amp;gt;, either using that partition as rootfs (see above), or using an initramfs with repartitioning tools&lt;br /&gt;
# Modify the partition table with your favorite tool, e.g. &amp;lt;tt&amp;gt;fdisk&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;gdisk&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;parted&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Reboot into &amp;lt;tt&amp;gt;fastboot&amp;lt;/tt&amp;gt; and wipe &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# Reboot into Android, where you can now chroot in and install your favorite distribution to the new partition.&lt;br /&gt;
&lt;br /&gt;
== Using rkdeveloptool ==&lt;br /&gt;
&lt;br /&gt;
rkdeveloptool is a command line utility built on libusb.&lt;br /&gt;
&lt;br /&gt;
=== Downloading and Building rkdeveloptool ===&lt;br /&gt;
&lt;br /&gt;
PINE64 develops [https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool its own updated fork of rkdeveloptool on GitLab].&lt;br /&gt;
&lt;br /&gt;
You will need to have libusb 1.0, its development headers and scdoc installed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool.git&lt;br /&gt;
cd rkdeveloptool&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets up all the build files. You can then compile with &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; inside the build directory.&lt;br /&gt;
&lt;br /&gt;
After you're done, you'll likely also need to install the udev rules, or else your user won't have permission to access the USB devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp 99-rk-rockusb.rules /etc/udev/rules.d/&lt;br /&gt;
sudo udevadm control --reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copying the udev rules is also performed automatically when you &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Building Downstream U-Boot ===&lt;br /&gt;
&lt;br /&gt;
While in maskrom mode, we need to have a u-boot to download onto the device for any of the other commands to work. To build you'll also need to install device-tree-compiler.&lt;br /&gt;
&lt;br /&gt;
You also need to install Python and pyelftools.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Note that rkbin is a &amp;amp;gt;5GB download!&amp;lt;/b&amp;gt; This will take some time to clone and process the deltas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone -b quartz64 https://gitlab.com/pgwipeout/u-boot-rockchip.git&lt;br /&gt;
git clone -b rkbin https://github.com/JeffyCN/rockchip_mirrors.git rkbin&lt;br /&gt;
cd u-boot-rockchip&lt;br /&gt;
# If using Arch Linux, export CROSS_COMPILE=aarch64-linux-gnu-&lt;br /&gt;
export CROSS_COMPILE=aarch64-none-linux-gnu-&lt;br /&gt;
make rk3566-quartz64_defconfig&lt;br /&gt;
./make.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
In the version I cloned (current as of 2022-01-02), I had to make a change to one line to get a clean compilation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/lib/avb/libavb/avb_slot_verify.c b/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
index 123701fc3b..64a1ce6450 100644&lt;br /&gt;
--- a/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
+++ b/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
@@ -296,7 +296,7 @@ static AvbSlotVerifyResult load_and_verify_hash_partition(&lt;br /&gt;
   bool image_preloaded = false;&lt;br /&gt;
   uint8_t* digest;&lt;br /&gt;
   size_t digest_len;&lt;br /&gt;
-  const char* found;&lt;br /&gt;
+  const char* found = NULL;&lt;br /&gt;
   uint64_t image_size;&lt;br /&gt;
   size_t expected_digest_len = 0;&lt;br /&gt;
   uint8_t expected_digest_buf[AVB_SHA512_DIGEST_SIZE];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For systems where the global python executable points to python2, compilation fails with an error related to pyelftools not being installed (even if it is). To fix this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/make.sh b/make.sh&lt;br /&gt;
index 2bba05b4e4..cfe5b0afd5 100755&lt;br /&gt;
--- a/make.sh&lt;br /&gt;
+++ b/make.sh&lt;br /&gt;
@@ -758,7 +758,7 @@ function pack_fit_image()&lt;br /&gt;
        fi&lt;br /&gt;
 &lt;br /&gt;
        if [ &amp;quot;${ARM64_TRUSTZONE}&amp;quot; == &amp;quot;y&amp;quot; ]; then&lt;br /&gt;
-               if ! python -c &amp;quot;import elftools&amp;quot; ; then&lt;br /&gt;
+               if ! python3 -c &amp;quot;import elftools&amp;quot; ; then&lt;br /&gt;
                        echo &amp;quot;ERROR: No python 'pyelftools', please: pip install pyelftools&amp;quot;&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Entering Maskrom/Rockusb Mode ===&lt;br /&gt;
&lt;br /&gt;
There are three ways to get into Maskrom/Rockusb mode:&lt;br /&gt;
&lt;br /&gt;
====  The easy way ====&lt;br /&gt;
&lt;br /&gt;
# Flip the device around so that the display faces down&lt;br /&gt;
# Lay the pen on the right side, with its tip pointing towards the speaker grill, and its magnet pointing towards the upper right corner of the label on the back (or place the magnetic cap from the pen on the spot marked on the back).&lt;br /&gt;
# Turn the device on and wait for it to show up in &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt;. It should now be in Loader mode, according to &amp;lt;code&amp;gt;rkdeveloptool list-devices&amp;lt;/code&amp;gt; (note that &amp;quot;Loader&amp;quot; here indicates U-Boot's Rockusb; separately, booting with an erased eMMC displays &amp;quot;Maskrom&amp;quot; [not &amp;quot;Loader&amp;quot;] from the RK3566).&lt;br /&gt;
# Unplug the device and plug it back in. It should now be in Rockusb mode.&lt;br /&gt;
&lt;br /&gt;
This can be a bit fiddly to get right, and may need a few tries.&lt;br /&gt;
&lt;br /&gt;
==== The u-boot way ====&lt;br /&gt;
# Interrupt the u-boot startup using ctrl-c (while attached using an UART dongle)&lt;br /&gt;
# While in u-boot use the command &amp;quot;rockusb 0 mmc 0&amp;quot; to start rockusb mode.&lt;br /&gt;
&lt;br /&gt;
One benefit from this is, that if you have an UART dongle that allows to simultaneous having an UART and USB connection, there is no need to plug and unplug cables and flipping the PineNote around and placing magnets.  &lt;br /&gt;
&lt;br /&gt;
This is especially helpful when changing back and forth between u-boot and rockusb, for instance when trying to develop u-boot.&lt;br /&gt;
&lt;br /&gt;
==== Shorting test points ====&lt;br /&gt;
&lt;br /&gt;
If the bootloader is broken/corrupted, you cannot get to Maskrom without opening up the device (it can be opened using spudger and a bit of patience).&lt;br /&gt;
&lt;br /&gt;
Once inside, short TP1301 (GND) and TP1302 (eMMC_D0/FLASH_D0) with a small tweezers, this is how it looks on board view (credit to Caleb):&lt;br /&gt;
&lt;br /&gt;
[[File:PineNote_Maskrom_TP.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Then plug the device to the computer and if you see the device with VID=2207/PID=350a then it should be in Maskrom mode, you can verify by typing &amp;lt;code&amp;gt;rkdeveloptool list-devices&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Jan 07 15:04:13 melttower kernel: usb 1-14: New USB device found, idVendor=2207, idProduct=350a, bcdDevice= 1.00&lt;br /&gt;
Jan 07 15:04:13 melttower kernel: usb 1-14: New USB device strings: Mfr=0, Product=0, SerialNumber=0&lt;br /&gt;
&lt;br /&gt;
$ rkdeveloptool list-devices&lt;br /&gt;
DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=10e    Maskrom&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If nothing shows up, you can try to hold down the power button for 5 seconds and then try again.&lt;br /&gt;
&lt;br /&gt;
=== Running rkdeveloptool ===&lt;br /&gt;
&lt;br /&gt;
First, you'll want to make sure the device you've connected is in maskrom mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should output something like &amp;lt;code&amp;gt;DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=202    Maskrom&amp;lt;/code&amp;gt;. If it doesn't, see [[PineNote Development#Entering Maskrom Mode]].&lt;br /&gt;
&lt;br /&gt;
You can now download u-boot onto it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool boot ../u-boot-rockchip/rk356x_spl_loader_v1.08.111.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should output &amp;lt;code&amp;gt;Downloading bootloader succeeded.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We can now verify that this worked using e.g. the &amp;quot;read flash info&amp;quot; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool read-flash-info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TODO:''' finish this section&lt;br /&gt;
&lt;br /&gt;
=== Creating a mainline boot image ===&lt;br /&gt;
&lt;br /&gt;
You can create a filesystem image that replaces the Android boot or recovery partition by doing roughly the following:&lt;br /&gt;
&lt;br /&gt;
# Erase boot and dtbo with rkdeveloptool or fastboot (back them up first!!!)&lt;br /&gt;
# Create an ext2 partition image and mount it (fallocate, mkfs.ext2)&lt;br /&gt;
# Build your mainline kernel&lt;br /&gt;
# Copy the kernel, dtb and an initramfs to the root of the mounted image (use any old postmarketOS initramfs)&lt;br /&gt;
# Create a file in the root of the mounted image called &amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; as described below&lt;br /&gt;
# Unmount the image and then use rkdeveloptool to flash it to the &amp;quot;recovery&amp;quot; partition on the pinenote (it's about the right size until we get around to replacing the partition layout).&lt;br /&gt;
&lt;br /&gt;
== Using fastboot ==&lt;br /&gt;
&lt;br /&gt;
Follow the steps for &amp;quot;Creating a mainline boot.img&amp;quot;, but instead of flashing it with rkdeveloptool, use fastboot. You can enter fastboot in either of two ways:&lt;br /&gt;
&lt;br /&gt;
# Use &amp;quot;reboot bootloader&amp;quot; from adb or a UART console.&lt;br /&gt;
# Get a U-Boot prompt and run &amp;lt;code&amp;gt;fastboot usb 0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Mainline development =&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; should have the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
timeout 10&lt;br /&gt;
default MAINLINE&lt;br /&gt;
menu title boot prev kernel&lt;br /&gt;
&lt;br /&gt;
label MAINLINE&lt;br /&gt;
  kernel /vmlinuz&lt;br /&gt;
  fdt /rk3566-pinenote.dtb&lt;br /&gt;
  initrd /initramfs&lt;br /&gt;
  append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the u-boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt)&lt;br /&gt;
&lt;br /&gt;
''The content of the upstream .txt is different than the Android configuration, but is supposed to work.''&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the firmware-brcm80211*.deb and brcmfmac43455-sdio.txt file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the bluez-firmware &lt;br /&gt;
  sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in /sys to alter the refresh mode&lt;br /&gt;
&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
    MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
    MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
    Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
    MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
    Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=15297</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=15297"/>
		<updated>2023-01-10T15:54:51Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Shorten URLs to commits in Linus Torvalds repo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the current status of software support for the [[Quartz64]] single-board computer, and provides links to resources to help prospective contributors get started. Information is kept current on a best-effort basis as various patches get accepted into the kernel.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&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;
! scope=&amp;quot;col&amp;quot; | Applies To&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Output&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;rockchipdrm/VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
As of 5.19-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/604be85547ce4d61b89292d2f9a78c721b778c16]&amp;lt;/sup&amp;gt;, Also featured in Phoronix Article&amp;lt;sup&amp;gt;[https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Rockchip-VOP2-Linux-5.19]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&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-edpphy-naneng&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/phy/rockchip/phy-rockchip-naneng-edp.c] and [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/commit/d7ad116fb30d11d110aeb880754cf27f34c45c40#7e8e2ef87e479c54539dc519c0b92d6b31727f8d_671_681] Coordinate any porting with Rockchip first&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;dw-mipi-dsi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/e18d9b093006d8abd53e1ce13c0d5a8d0fcd5f64]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot; rowspan=&amp;quot;3&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 1080p H.263, MPEG-1, MPEG-2, VP8 and H.264. Mainline as of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5f6bfab6da6531238e899fdf29efd6d0185adc3e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&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;
| VDPU346 handling 4K H.265, H.264 and VP9&lt;br /&gt;
|&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;
| VDPU720 handling JPEG, [[User:CounterPillow]] is working on this&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;5&amp;quot; | [[Mainline Hardware Encoding|Video Encode]] &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;text-align:center; background:LightYellow;&amp;quot;|GStreamer only&lt;br /&gt;
| JPEG on VEPU121&lt;br /&gt;
| Hantro-based. Mainline as of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/6f1ae821a6c4aa9d5b8f437b27ec86fb569219fd]&amp;lt;/sup&amp;gt;&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.264 on VEPU121&lt;br /&gt;
| Hantro-based&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;
| VP8 on VEPU121&lt;br /&gt;
| Hantro-based&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.264 on VEPU540&lt;br /&gt;
| rkvenc-based&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 VEPU540&lt;br /&gt;
| rkvenc-based&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Audio &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-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/43b058698f723e3c2087af7069c0da082a3ecbe1]&amp;lt;/sup&amp;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;rockchip-spdif&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/dac825b6a6bdca41347e25f07354ad94fdc97445]&amp;lt;/sup&amp;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;rk817-codec&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
| Quartz64 Model A/B&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Bootloader&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://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;TF-A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In progress&lt;br /&gt;
| &amp;lt;code&amp;gt;U-Boot&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[Quartz64_Development#Mainline_U-Boot_Work|See below]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In progress&amp;lt;sup&amp;gt;[https://github.com/jaredmcneill/quartz64_uefi]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;Tianocore EDK II&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;4&amp;quot; | Device Tree&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/b33a22a1e7c4248608e533fc4fa524258b3fae84]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A&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;
| Quartz64 Model B&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c37415f55bdadffe5b4c0e7981e9fc7e8b96beea]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model B&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;
| SOQuartz&lt;br /&gt;
| As of 5.19&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c466828fb3ba8cb7f5c3bf28766da9b70bf9745e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| SOQuartz&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;
| PineNote&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d449121e5e8addcee654250cec298c887ecafb32]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| PineNote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot;| Gigabit Ethernet&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;rk3566-gmac&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/3bb3d6b1c1957e88bfc5e77a4557f7e6ba761fe3]&amp;lt;/sup&amp;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;yt8511-phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/48e8c6f1612b3d2dccaea2285231def830cc5b8e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | IOMMU&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-iommu&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/c55356c534aa651ccc3053ef2d5d8d810adacf5f]&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;gpio-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/936ee2675eee1faca0dcdfa79165c7990422e0fc]&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;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Thermal Regulation&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-thermal&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/4b14c055a6f644cbeb1156ba24647e92fe51ec69]&amp;lt;/sup&amp;gt;&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;pcie-dw-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/0e898eb8df4e34c7b129452444eb7cef68a11f43]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Management&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-domains&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/1782c87b44a0b1a527f01a6a184677c58ccbf9c7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Voltage Control&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;rk3568-pmu-io-voltage-domain&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/28b05a64e47cbceebb8a5f3f643033148d5c06c3]&amp;lt;/sup&amp;gt;&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;spi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/d74d99229f4d48f42d674f7a8a1137179efd67ac]&amp;lt;/sup&amp;gt;. Necessary device tree changes [https://patchwork.kernel.org/project/linux-rockchip/list/?series=586691 in review].&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Battery&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;rk817-charger&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/drivers/power/supply/rk817_charger.c?id=11cb8da0189b417392e2334ae967b0ba1f0d1be8]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A, Pinenote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Microphone&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-saradc&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7786da3b5ae167c17f35e22ba35e06006338c2f6]&amp;lt;/sup&amp;gt;. Headphone jack mic seems to connect to &amp;lt;code&amp;gt;SARADC_VIN2_HP_HOOK&amp;lt;/code&amp;gt;, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-usb2phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.17&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/phy/rockchip?h=v5.17-rc1&amp;amp;id=42b559727a45d79c811f493515eb9b7e56016421]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | e-Ink&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review (RFC)&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/20220413221916.50995-1-samuel@sholland.org/T/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| A DRM driver is available [https://github.com/smaeul/linux/commits/rk35/ebc-drm-v5 here]; also see [[RK3566 EBC Reverse-Engineering]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Combo PHY&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;naneng-combphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/7160820d742a16313f7802e33c2956c19548e488]&amp;lt;/sup&amp;gt;. Still requires DTS changes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | RGA&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs fixing&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rga&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[User:CounterPillow]] experimentally enabled it&amp;lt;sup&amp;gt;[https://gist.github.com/CounterPillow/6bea809f15ada7ddd3a3d7a4994fdc4e]&amp;lt;/sup&amp;gt; in the device tree and ran gstreamer's v4l2convert through it to test, resulting in a completely garbled output.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Fan Controller&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;emc2301&amp;lt;/code&amp;gt;&lt;br /&gt;
| Previous attempts at mainlining: [http://lkml.iu.edu/hypermail/linux/kernel/1306.1/02473.html] and [https://lore.kernel.org/all/20200928104326.40386-1-biwen.li@oss.nxp.com/]. Latest iteration: [https://gitlab.traverse.com.au/ls1088firmware/traverse-sensors/-/commit/1cdec49171ebafcf32b347e7701224144de8620b]&lt;br /&gt;
| SOQuartz Blade&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | CSI Camera&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;rkisp&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/isp]&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;rockchip-inno-csidphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/29c99fb085ad53e6d5504d1f8d32e6673b9b3a2c]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | NPU&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs writing&lt;br /&gt;
| &lt;br /&gt;
| Downstream version is a closed source SDK. Major undertaking to reimplement this as Linux does not (yet) appear to have a generic architecture for neural accelerators.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Crypto&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-crypto&amp;lt;/code&amp;gt; v2&lt;br /&gt;
| Downstream driver [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/crypto/rockchip] doesn't include a rk3568 compatible either, but the TRM shows that it seemingly matches.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | TRNG&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=694733&amp;amp;archive=both]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rng&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current Status ==&lt;br /&gt;
&lt;br /&gt;
The following sections give an overview over the current status of different parts of the board. Some parts are waiting on a driver to be written or ported, others only need various adjustments.&lt;br /&gt;
&lt;br /&gt;
According to pgwipeout, I/O device performance is within expected ranges now.&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
&lt;br /&gt;
* eMMC&lt;br /&gt;
* SDMMC0 (SD cards)&lt;br /&gt;
* GMAC (Gigabit Ethernet)&lt;br /&gt;
* USB 2.0&lt;br /&gt;
* SATA 2&lt;br /&gt;
* SATA 3&lt;br /&gt;
* UART&lt;br /&gt;
** UART 0 (Pi-bus)&lt;br /&gt;
** UART 1 (Bluetooth)&lt;br /&gt;
** UART 2 (Pi-bus, debug)&lt;br /&gt;
* Video Decode&lt;br /&gt;
** VP8&lt;br /&gt;
** H.264&lt;br /&gt;
* Video Encode&lt;br /&gt;
** JPEG (it's pretty bad)&lt;br /&gt;
* Battery&lt;br /&gt;
* GPU&lt;br /&gt;
* Audio&lt;br /&gt;
** Analog audio works&lt;br /&gt;
** SPDIF works&lt;br /&gt;
** HDMI works&lt;br /&gt;
* SPI &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
* I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
&lt;br /&gt;
=== Partially Working ===&lt;br /&gt;
&lt;br /&gt;
* PCI-Express Controller &amp;amp;mdash; everything but devices that need cache coherency (e.g. dGPUs) should work&lt;br /&gt;
** [[User:CounterPillow]] noticed some weirdness with NVMe devices disconnecting during heavy write operations, likely down due to power draw on one of the rails as the same sustained bandwidth could be achieved with a different PCIe device with no issue.&lt;br /&gt;
* SDMMC1 (Wi-Fi) &amp;amp;mdash; AP6256 working, BL602 needs some work to make it flash firmware&lt;br /&gt;
* [https://developer.arm.com/architectures/system-architectures/system-components/arm-generic-interrupt-controller GIC] &amp;amp;mdash; needs errata published by Rockchip to get upstream to add device-specific workarounds&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/CAMdYzYrQ5f-mv_VmTq_CRf9tR=j3mwRpKHNLmPFgCF9whsGFRw@mail.gmail.com/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Video Output &amp;amp;mdash; only at 1920x1080p60 and nothing else, very buggy and rough around more than just the edges&lt;br /&gt;
&lt;br /&gt;
=== Confirmed Broken ===&lt;br /&gt;
&lt;br /&gt;
* USB 3.0 (applies to Model A only) &amp;amp;mdash; only works with very short cables and depends on the device. This is due to a hardware design issue relating to the coupling capacitors needed for SATA, which shares the same lines as USB 3.0.&lt;br /&gt;
** Hardware design changes have been suggested to engineers, it's in their hands now.&lt;br /&gt;
* RGA &amp;amp;mdash; only works with memory &amp;amp;le; 4 GiB, because Rockchip didn't make the address registers larger. Oopsie.&lt;br /&gt;
&lt;br /&gt;
=== Needs Testing ===&lt;br /&gt;
&lt;br /&gt;
* E-Paper&lt;br /&gt;
* Microphone Input&lt;br /&gt;
* CSI &amp;amp;mdash; needs CIF driver&lt;br /&gt;
* eDP &amp;amp;mdash; needs PHY driver and controller driver&lt;br /&gt;
* DSI&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== ebc-dev Reverse Engineering and Development ===&lt;br /&gt;
&lt;br /&gt;
The [https://gitlab.com/pine64-org/quartz-bsp/linux-next/-/tree/rk356x-ebc-dev driver for the eInk panel] needs to both be reverse engineered and then rewritten as C. In its current form, it is mostly an assembly dump produced by gcc with debug symbols. See [[RK3566 EBC Reverse-Engineering]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Investigate MCU ===&lt;br /&gt;
&lt;br /&gt;
The RK3566 comes with an integrated RISC-V microcontroller (MCU). It communicates with the A55 host through the Mailbox system driven by the rockchip-mailbox driver. Since this MCU would be quite useful for things such as low power standby mode, investigating how it can be turned on and have firmware flashed to it should greatly enhance the power saving features of the PineNote.&lt;br /&gt;
&lt;br /&gt;
=== Mainline U-Boot Work ===&lt;br /&gt;
&lt;br /&gt;
Currently, mainline U-Boot does not have support for the RK3566 SoC used on the Quartz64. That's why we currently use the &amp;quot;downstream&amp;quot; Rockchip U-Boot, which is based on an old version of U-Boot and contains vendor specific patches that have not undergone the same level of code review as they'd have done had they been submitted upstream.&lt;br /&gt;
&lt;br /&gt;
While the lack of ATF sources means that using mainline U-Boot would still require the use of Rockchip provided binaries for the firmware, the mainline U-Boot works needs to be done eventually anyway, and even with Rockchip blobs, a more modern version of U-Boot will be much nicer to use.&lt;br /&gt;
&lt;br /&gt;
Someone needs to get on the task of investigating what minimally needs to be ported to get the board booting with mainline U-Boot, port those changes, and submit them for review.&lt;br /&gt;
&lt;br /&gt;
==== Things that need to be done ====&lt;br /&gt;
&lt;br /&gt;
This list is non-exhaustive as we don't exactly know how much is missing&lt;br /&gt;
&lt;br /&gt;
* Do the &amp;lt;code&amp;gt;rk3568.dtsi&amp;lt;/code&amp;gt; refactoring into &amp;lt;code&amp;gt;rk356x.dtsi&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;rk3568.dtsi&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;rk3566.dtsi&amp;lt;/code&amp;gt; that the kernel did, probably just port the kernel dtsi files for this&lt;br /&gt;
* Bring the kernel's Quartz64 DTS into the tree&lt;br /&gt;
* Write a &amp;lt;code&amp;gt;quartz64-rk3566_defconfig&amp;lt;/code&amp;gt; based on &amp;lt;code&amp;gt;evb-rk3568_defconfig&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stretch Goals:&lt;br /&gt;
&lt;br /&gt;
* Port the Naneng Combo PHY driver to u-boot so we can SATA, USB 3 and PCIe boot&lt;br /&gt;
* Look into SPI&lt;br /&gt;
* Port the Motorcomm PHY driver to u-boot for networking?&lt;br /&gt;
* Port a basic VOP2 driver to get a framebuffer from u-boot&lt;br /&gt;
&lt;br /&gt;
==== List of Useful Resources for this Task ====&lt;br /&gt;
* Downstream Rockchip U-Boot repository with Quartz64 specific patches: https://gitlab.com/pgwipeout/u-boot-rockchip/-/tree/quartz64&lt;br /&gt;
* Mainline Rockchip custodian U-Boot repository: https://source.denx.de/u-boot/custodians/u-boot-rockchip&lt;br /&gt;
* U-Boot Mailing List: https://lists.denx.de/listinfo/u-boot&lt;br /&gt;
&lt;br /&gt;
=== eDP Driver Porting ===&lt;br /&gt;
&lt;br /&gt;
The eDP PHY driver and controller driver needs to be ported, brought into shape and submitted with proper commit attribution to the Rockchip authors.&lt;br /&gt;
&lt;br /&gt;
[[User:CounterPillow]] has experimentally ported stuff, but it's currently not working.&lt;br /&gt;
&lt;br /&gt;
=== OS Images ===&lt;br /&gt;
&lt;br /&gt;
We need a '''Debian-based''' OS image with a packaged '''mainline kernel''' that's updated through a repository for SOQuartz and Quartz64 Model B. Other distribution userlands are welcome as well, but a lot of users are looking for Debian or Ubuntu. Do keep in mind that it'll probably have to be Bookworm due to the mesa GPU support stuff.&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel Config Options ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_I2S_TDM&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog and HDMI audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog audio on the Model A&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_STMMAC_ETH&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DWMAC_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet, set this one to Y, m won't work out of the box if the generic PHY driver is y and binds first. Alternatively tell users in board-specific setup instructions to force including the &amp;lt;code&amp;gt;motorcomm&amp;lt;/code&amp;gt; module in initramfs if you set it to m.&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_SDHCI_OF_DWCMSHC&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PCIE_ROCKCHIP_DW_HOST&amp;lt;/code&amp;gt;&lt;br /&gt;
** PCIe&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** PHY for PCIe/SATA/USB3&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DRM_PANFROST&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPU&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_SPDIF&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPDIF audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_DW_HDMI&amp;lt;/code&amp;gt;&lt;br /&gt;
** HDMI PHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI DSI DPHY (note: requires in-review patches linked in status table)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
** Video output&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ARCH_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_USB2&amp;lt;/code&amp;gt;&lt;br /&gt;
** USB 2&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_RTC_DRV_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MFD_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Various things relating to the RK817 chip&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_CHARGER_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** RK817 charger (note: requires in-review patches linked in status table)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REGULATOR_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Voltage regulators&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PM_DOMAINS&amp;lt;/code&amp;gt;&lt;br /&gt;
** Power management domains&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_GPIO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PINCTRL_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO and general SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PWM_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** PWM support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IOMMU&amp;lt;/code&amp;gt;&lt;br /&gt;
** IOMMU support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_MBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
** Mailbox support (for communication with MCU)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_SARADC&amp;lt;/code&amp;gt;&lt;br /&gt;
** Analog-to-digital conversion support, for e.g. microphones&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_THERMAL&amp;lt;/code&amp;gt;&lt;br /&gt;
** Temperature sensor and thermal throttling support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SPI_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPI support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_VIDEO_HANTRO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Hardware video decoder support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IODOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support so your I/O pins have the right voltage&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Common clock support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** MIPI CSI DPHY&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* pgwipeout's kernel tree&lt;br /&gt;
** https://gitlab.com/pgwipeout/linux-next/-/tree/quartz64-v5.15-rc1&lt;br /&gt;
* BSP based development effort for SPL/U-Boot and Linux&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp&lt;br /&gt;
* Image CI pipeline aimed at developers&lt;br /&gt;
** https://gitlab.com/pgwipeout/quartz64_ci/&lt;br /&gt;
* Rockchip U-Boot&lt;br /&gt;
** https://github.com/rockchip-linux/u-boot&lt;br /&gt;
* Downstream rockchip-linux kernel tree&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux&lt;br /&gt;
* Tianocore EDK II port for UEFI on Quartz64&lt;br /&gt;
** https://github.com/jaredmcneill/quartz64_uefi&lt;br /&gt;
* Mainline U-Boot Port by pgwipeout&lt;br /&gt;
** https://gitlab.com/pgwipeout/u-boot-quartz64&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* Rockchip-SoC Patchwork Page&lt;br /&gt;
** https://patchwork.kernel.org/project/linux-rockchip/list/&lt;br /&gt;
* Rockchip Kernel Mailing List Archive&lt;br /&gt;
** https://lore.kernel.org/linux-rockchip/&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Boot Order ====&lt;br /&gt;
The RK3566 boot ROM will search for a valid ID BLOCK in the following order on the support boot media:&lt;br /&gt;
&lt;br /&gt;
* SPI NOR flash&lt;br /&gt;
* SPI NAND flash&lt;br /&gt;
* SD-Card&lt;br /&gt;
* eMMC&lt;br /&gt;
&lt;br /&gt;
... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip&lt;br /&gt;
flash/boot tools.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader Flashing ====&lt;br /&gt;
&lt;br /&gt;
As per pgwipeout's [https://gitlab.com/pine64-org/quartz-bsp/u-boot/-/commit/12d102b86813378af08b086f3b9c13ed8010754c commit message]:&lt;br /&gt;
* Make a partition named &amp;lt;code&amp;gt;uboot&amp;lt;/code&amp;gt; as partition number 1 at 8 MiB to 16 MiB&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=idblock.bin of=/dev/''&amp;lt;mmc/sd&amp;gt;'' seek=64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=uboot.img of=/dev/''&amp;lt;mmc/sd&amp;gt;''1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== BSP Image Layout ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]][[Category:Rockchip RK3566]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15296</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15296"/>
		<updated>2023-01-10T15:44:07Z</updated>

		<summary type="html">&lt;p&gt;Diederik: minor formatting fixes, mostly 'code' tag around component name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general development information for the [[PineNote]]. If you are new and down to try a new installation process, the easiest way to get linux is likely to [https://wiki.pine64.org/wiki/PineNote_Development/Installing_Debian install Debian] -- NOTE THAT THIS INSTALLATION PROCESS IS VERY NEW. While many people have been using the kernel that will be installed safely at this point, the instructions for installing Debian via rootfs are very new. Take backups!&lt;br /&gt;
&lt;br /&gt;
The more stable recommended approach is described below:&lt;br /&gt;
&lt;br /&gt;
Start with [https://github.com/DorianRudolph/pinenotes Dorian's guide] which will guide you through getting Arch installed. For instructions on building the latest kernel, see [[PineNote Development/Building Kernel]]. For helpful configurations, see [[PineNote Development/Apps]]. For ways to pitch in, see [[PineNote Development/TODOs]]. To boot Linux by default instead of Android, see [[PineNote Development/Booting Linux]]. [https://www.youtube.com/watch?v=ZCLyJfbzbrU Here is a video] of a user running Manjaro and some apps on their PineNote on 9/10/2022.&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
== Kernel modules / mainlining status ==&lt;br /&gt;
&lt;br /&gt;
WORK IN PROGRESS !&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote.&lt;br /&gt;
It also aims at listing repositories of work in progress.&lt;br /&gt;
While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) &lt;br /&gt;
is expected, only modules relevant to the PineNote hardware should be listed here.&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;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip_ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;lm3630a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;st-accel-i2c&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= More Information = &lt;br /&gt;
== High-level developer new to embedded linux? ==&lt;br /&gt;
Here are some resources I have found helpful in learning to develop on embedded linux devices:&lt;br /&gt;
* Great youtube series introducing you to the kernel and lower-level components of Linux: https://www.youtube.com/watch?v=WiZ05pnHZqM&lt;br /&gt;
* https://embetronicx.com/&lt;br /&gt;
* https://bootlin.com/training/&lt;br /&gt;
* https://www.nand2tetris.org&lt;br /&gt;
&lt;br /&gt;
== Notes Written by Some Developers ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip_ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
== Alternative to patching of mesa ==&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&amp;lt;br&amp;gt;&lt;br /&gt;
- replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
- preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building the most recent kernel ==&lt;br /&gt;
See [https://wiki.pine64.org/wiki/PineNote_Development/Building_Kernel here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Video of Factory Android OS ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (`adb`) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running `adb`.&lt;br /&gt;
&lt;br /&gt;
== Emulator for Developing/Testing Pinenote Apps ==&lt;br /&gt;
https://github.com/michaelshiel/picom-epaper&lt;br /&gt;
&lt;br /&gt;
= Flashing Software =&lt;br /&gt;
Currently, the only ways to flash software are from the factory Android installation (UART shell, adb, or fastboot) or by using rkdeveloptool.&lt;br /&gt;
&lt;br /&gt;
== Backup of the content of the internal MMC before you mess anything up ==&lt;br /&gt;
Especially the '''waveform''' partition contains data '''unique''' to your PineNote and is a prime candidate for backup.&lt;br /&gt;
&lt;br /&gt;
But other partitions like uboot (need for any operation of the device) or the un-partitioned space at the beginning containing the GPT partition table (and presumably the VCOM setting for the e-ink display and maybe device mac addresses) contains data you may wish to backup.&lt;br /&gt;
&lt;br /&gt;
Depending of your personal level of data hoarder you may want to backup more than this or even just everything (the large userdata partition is supposed to be able to be repopulated as empty space by Android)&lt;br /&gt;
&lt;br /&gt;
In any case it is easier to restore/extract data from a backup than not having one if you need one.&lt;br /&gt;
&lt;br /&gt;
=== Manually using rkdeveloptool ===&lt;br /&gt;
Dorian has some nice [https://github.com/DorianRudolph/pinenotes notes regarding the PineNote]&lt;br /&gt;
&lt;br /&gt;
Don't forget to install a patched uboot for reading beyond 32MB and to respect the 2GB limit/bug of the current rkdeveloptool as per his notes&lt;br /&gt;
&lt;br /&gt;
=== Automated backup using a script and rkdeveloptool ===&lt;br /&gt;
[https://github.com/talpadk/pinenote-backup pinenote-backup] is a python script for detecting the partitions and automating the backup of partitions or the whole disk&lt;br /&gt;
&lt;br /&gt;
I also requires a patched u-boot but automatically handles the 2GB limit by splitting up larger reads into smaller ones&lt;br /&gt;
&lt;br /&gt;
=== Using the factory Android installation ===&lt;br /&gt;
For any one knowing how and with which caveats: Write ME&lt;br /&gt;
&lt;br /&gt;
=== Using a user installed Linux ===&lt;br /&gt;
A Linux installed to the cache partition should be able to easily backup everything over WiFi or to a USB stick/disk using dd&lt;br /&gt;
&lt;br /&gt;
However the user would need to backup the cache partition themself (if they want that).&lt;br /&gt;
&lt;br /&gt;
And more importantly they would only be getting the backup ''after'' they started playing with the content of the MMC.&lt;br /&gt;
&lt;br /&gt;
== Side-by-side setup ==&lt;br /&gt;
&lt;br /&gt;
It is possible to set up a partition for mainline development without disturbing the factory Android installation. This allows updating a mainline kernel, DTB, and initramfs over Wi-Fi until WiFi or USB OTG is working in mainline Linux.&lt;br /&gt;
&lt;br /&gt;
=== Without Repartitioning ===&lt;br /&gt;
&lt;br /&gt;
The recommended partition for this is &amp;lt;tt&amp;gt;mmcblk0p11&amp;lt;/tt&amp;gt; aka &amp;lt;tt&amp;gt;/cache&amp;lt;/tt&amp;gt;. It is large and already formatted as &amp;lt;tt&amp;gt;ext4&amp;lt;/tt&amp;gt;, so it is readable from U-Boot. Here are some general steps:&lt;br /&gt;
&lt;br /&gt;
# From the UART or adb shell, set up your chroot in &amp;lt;tt&amp;gt;/cache&amp;lt;/tt&amp;gt;. I used the Alpine Linux rootfs tarball.&lt;br /&gt;
# Copy in your kernel and DTB, using for example &amp;lt;tt&amp;gt;scp&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;wget&amp;lt;/tt&amp;gt; inside the chroot.&lt;br /&gt;
# Finally, create and boot an &amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; as described below.&lt;br /&gt;
&lt;br /&gt;
=== With Repartitioning ===&lt;br /&gt;
&lt;br /&gt;
It is possible to shrink the &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt; partition, and create a new partition at the end for use with mainline Linux. This provides much more space than &amp;lt;tt&amp;gt;cache&amp;lt;/tt&amp;gt;. However, because &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt; is formatted with &amp;lt;tt&amp;gt;f2fs&amp;lt;/tt&amp;gt;, and that filesystem cannot be shrunk, resizing the partition requires wiping &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# Back up any necessary files from userdata&lt;br /&gt;
# Boot to a mainline kernel from &amp;lt;tt&amp;gt;mmcblk0p11&amp;lt;/tt&amp;gt;, either using that partition as rootfs (see above), or using an initramfs with repartitioning tools&lt;br /&gt;
# Modify the partition table with your favorite tool, e.g. &amp;lt;tt&amp;gt;fdisk&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;gdisk&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;parted&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Reboot into &amp;lt;tt&amp;gt;fastboot&amp;lt;/tt&amp;gt; and wipe &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# Reboot into Android, where you can now chroot in and install your favorite distribution to the new partition.&lt;br /&gt;
&lt;br /&gt;
== Using rkdeveloptool ==&lt;br /&gt;
&lt;br /&gt;
rkdeveloptool is a command line utility built on libusb.&lt;br /&gt;
&lt;br /&gt;
=== Downloading and Building rkdeveloptool ===&lt;br /&gt;
&lt;br /&gt;
PINE64 develops [https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool its own updated fork of rkdeveloptool on GitLab].&lt;br /&gt;
&lt;br /&gt;
You will need to have libusb 1.0, its development headers and scdoc installed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool.git&lt;br /&gt;
cd rkdeveloptool&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets up all the build files. You can then compile with &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; inside the build directory.&lt;br /&gt;
&lt;br /&gt;
After you're done, you'll likely also need to install the udev rules, or else your user won't have permission to access the USB devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp 99-rk-rockusb.rules /etc/udev/rules.d/&lt;br /&gt;
sudo udevadm control --reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copying the udev rules is also performed automatically when you &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Building Downstream U-Boot ===&lt;br /&gt;
&lt;br /&gt;
While in maskrom mode, we need to have a u-boot to download onto the device for any of the other commands to work. To build you'll also need to install device-tree-compiler.&lt;br /&gt;
&lt;br /&gt;
You also need to install Python and pyelftools.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Note that rkbin is a &amp;amp;gt;5GB download!&amp;lt;/b&amp;gt; This will take some time to clone and process the deltas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone -b quartz64 https://gitlab.com/pgwipeout/u-boot-rockchip.git&lt;br /&gt;
git clone -b rkbin https://github.com/JeffyCN/rockchip_mirrors.git rkbin&lt;br /&gt;
cd u-boot-rockchip&lt;br /&gt;
# If using Arch Linux, export CROSS_COMPILE=aarch64-linux-gnu-&lt;br /&gt;
export CROSS_COMPILE=aarch64-none-linux-gnu-&lt;br /&gt;
make rk3566-quartz64_defconfig&lt;br /&gt;
./make.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
In the version I cloned (current as of 2022-01-02), I had to make a change to one line to get a clean compilation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/lib/avb/libavb/avb_slot_verify.c b/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
index 123701fc3b..64a1ce6450 100644&lt;br /&gt;
--- a/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
+++ b/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
@@ -296,7 +296,7 @@ static AvbSlotVerifyResult load_and_verify_hash_partition(&lt;br /&gt;
   bool image_preloaded = false;&lt;br /&gt;
   uint8_t* digest;&lt;br /&gt;
   size_t digest_len;&lt;br /&gt;
-  const char* found;&lt;br /&gt;
+  const char* found = NULL;&lt;br /&gt;
   uint64_t image_size;&lt;br /&gt;
   size_t expected_digest_len = 0;&lt;br /&gt;
   uint8_t expected_digest_buf[AVB_SHA512_DIGEST_SIZE];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For systems where the global python executable points to python2, compilation fails with an error related to pyelftools not being installed (even if it is). To fix this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/make.sh b/make.sh&lt;br /&gt;
index 2bba05b4e4..cfe5b0afd5 100755&lt;br /&gt;
--- a/make.sh&lt;br /&gt;
+++ b/make.sh&lt;br /&gt;
@@ -758,7 +758,7 @@ function pack_fit_image()&lt;br /&gt;
        fi&lt;br /&gt;
 &lt;br /&gt;
        if [ &amp;quot;${ARM64_TRUSTZONE}&amp;quot; == &amp;quot;y&amp;quot; ]; then&lt;br /&gt;
-               if ! python -c &amp;quot;import elftools&amp;quot; ; then&lt;br /&gt;
+               if ! python3 -c &amp;quot;import elftools&amp;quot; ; then&lt;br /&gt;
                        echo &amp;quot;ERROR: No python 'pyelftools', please: pip install pyelftools&amp;quot;&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Entering Maskrom/Rockusb Mode ===&lt;br /&gt;
&lt;br /&gt;
There are three ways to get into Maskrom/Rockusb mode:&lt;br /&gt;
&lt;br /&gt;
====  The easy way ====&lt;br /&gt;
&lt;br /&gt;
# Flip the device around so that the display faces down&lt;br /&gt;
# Lay the pen on the right side, with its tip pointing towards the speaker grill, and its magnet pointing towards the upper right corner of the label on the back (or place the magnetic cap from the pen on the spot marked on the back).&lt;br /&gt;
# Turn the device on and wait for it to show up in &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt;. It should now be in Loader mode, according to &amp;lt;code&amp;gt;rkdeveloptool list-devices&amp;lt;/code&amp;gt; (note that &amp;quot;Loader&amp;quot; here indicates U-Boot's Rockusb; separately, booting with an erased eMMC displays &amp;quot;Maskrom&amp;quot; [not &amp;quot;Loader&amp;quot;] from the RK3566).&lt;br /&gt;
# Unplug the device and plug it back in. It should now be in Rockusb mode.&lt;br /&gt;
&lt;br /&gt;
This can be a bit fiddly to get right, and may need a few tries.&lt;br /&gt;
&lt;br /&gt;
==== The u-boot way ====&lt;br /&gt;
# Interrupt the u-boot startup using ctrl-c (while attached using an UART dongle)&lt;br /&gt;
# While in u-boot use the command &amp;quot;rockusb 0 mmc 0&amp;quot; to start rockusb mode.&lt;br /&gt;
&lt;br /&gt;
One benefit from this is, that if you have an UART dongle that allows to simultaneous having an UART and USB connection, there is no need to plug and unplug cables and flipping the PineNote around and placing magnets.  &lt;br /&gt;
&lt;br /&gt;
This is especially helpful when changing back and forth between u-boot and rockusb, for instance when trying to develop u-boot.&lt;br /&gt;
&lt;br /&gt;
==== Shorting test points ====&lt;br /&gt;
&lt;br /&gt;
If the bootloader is broken/corrupted, you cannot get to Maskrom without opening up the device (it can be opened using spudger and a bit of patience).&lt;br /&gt;
&lt;br /&gt;
Once inside, short TP1301 (GND) and TP1302 (eMMC_D0/FLASH_D0) with a small tweezers, this is how it looks on board view (credit to Caleb):&lt;br /&gt;
&lt;br /&gt;
[[File:PineNote_Maskrom_TP.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Then plug the device to the computer and if you see the device with VID=2207/PID=350a then it should be in Maskrom mode, you can verify by typing &amp;lt;code&amp;gt;rkdeveloptool list-devices&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Jan 07 15:04:13 melttower kernel: usb 1-14: New USB device found, idVendor=2207, idProduct=350a, bcdDevice= 1.00&lt;br /&gt;
Jan 07 15:04:13 melttower kernel: usb 1-14: New USB device strings: Mfr=0, Product=0, SerialNumber=0&lt;br /&gt;
&lt;br /&gt;
$ rkdeveloptool list-devices&lt;br /&gt;
DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=10e    Maskrom&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If nothing shows up, you can try to hold down the power button for 5 seconds and then try again.&lt;br /&gt;
&lt;br /&gt;
=== Running rkdeveloptool ===&lt;br /&gt;
&lt;br /&gt;
First, you'll want to make sure the device you've connected is in maskrom mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should output something like &amp;lt;code&amp;gt;DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=202    Maskrom&amp;lt;/code&amp;gt;. If it doesn't, see [[PineNote Development#Entering Maskrom Mode]].&lt;br /&gt;
&lt;br /&gt;
You can now download u-boot onto it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool boot ../u-boot-rockchip/rk356x_spl_loader_v1.08.111.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should output &amp;lt;code&amp;gt;Downloading bootloader succeeded.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We can now verify that this worked using e.g. the &amp;quot;read flash info&amp;quot; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool read-flash-info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TODO:''' finish this section&lt;br /&gt;
&lt;br /&gt;
=== Creating a mainline boot image ===&lt;br /&gt;
&lt;br /&gt;
You can create a filesystem image that replaces the Android boot or recovery partition by doing roughly the following:&lt;br /&gt;
&lt;br /&gt;
# Erase boot and dtbo with rkdeveloptool or fastboot (back them up first!!!)&lt;br /&gt;
# Create an ext2 partition image and mount it (fallocate, mkfs.ext2)&lt;br /&gt;
# Build your mainline kernel&lt;br /&gt;
# Copy the kernel, dtb and an initramfs to the root of the mounted image (use any old postmarketOS initramfs)&lt;br /&gt;
# Create a file in the root of the mounted image called &amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; as described below&lt;br /&gt;
# Unmount the image and then use rkdeveloptool to flash it to the &amp;quot;recovery&amp;quot; partition on the pinenote (it's about the right size until we get around to replacing the partition layout).&lt;br /&gt;
&lt;br /&gt;
== Using fastboot ==&lt;br /&gt;
&lt;br /&gt;
Follow the steps for &amp;quot;Creating a mainline boot.img&amp;quot;, but instead of flashing it with rkdeveloptool, use fastboot. You can enter fastboot in either of two ways:&lt;br /&gt;
&lt;br /&gt;
# Use &amp;quot;reboot bootloader&amp;quot; from adb or a UART console.&lt;br /&gt;
# Get a U-Boot prompt and run &amp;lt;code&amp;gt;fastboot usb 0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Mainline development =&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; should have the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
timeout 10&lt;br /&gt;
default MAINLINE&lt;br /&gt;
menu title boot prev kernel&lt;br /&gt;
&lt;br /&gt;
label MAINLINE&lt;br /&gt;
  kernel /vmlinuz&lt;br /&gt;
  fdt /rk3566-pinenote.dtb&lt;br /&gt;
  initrd /initramfs&lt;br /&gt;
  append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the u-boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt)&lt;br /&gt;
&lt;br /&gt;
''The content of the upstream .txt is different than the Android configuration, but is supposed to work.''&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the firmware-brcm80211*.deb and brcmfmac43455-sdio.txt file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the bluez-firmware &lt;br /&gt;
  sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in /sys to alter the refresh mode&lt;br /&gt;
&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
    MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
    MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
    Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
    MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
    Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15295</id>
		<title>PineNote Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PineNote_Development&amp;diff=15295"/>
		<updated>2023-01-10T15:41:04Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Make formatting in line with Quartz development table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article seeks to provide general development information for the [[PineNote]]. If you are new and down to try a new installation process, the easiest way to get linux is likely to [https://wiki.pine64.org/wiki/PineNote_Development/Installing_Debian install Debian] -- NOTE THAT THIS INSTALLATION PROCESS IS VERY NEW. While many people have been using the kernel that will be installed safely at this point, the instructions for installing Debian via rootfs are very new. Take backups!&lt;br /&gt;
&lt;br /&gt;
The more stable recommended approach is described below:&lt;br /&gt;
&lt;br /&gt;
Start with [https://github.com/DorianRudolph/pinenotes Dorian's guide] which will guide you through getting Arch installed. For instructions on building the latest kernel, see [[PineNote Development/Building Kernel]]. For helpful configurations, see [[PineNote Development/Apps]]. For ways to pitch in, see [[PineNote Development/TODOs]]. To boot Linux by default instead of Android, see [[PineNote Development/Booting Linux]]. [https://www.youtube.com/watch?v=ZCLyJfbzbrU Here is a video] of a user running Manjaro and some apps on their PineNote on 9/10/2022.&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
== Kernel modules / mainlining status ==&lt;br /&gt;
&lt;br /&gt;
WORK IN PROGRESS !&lt;br /&gt;
&lt;br /&gt;
The following table aims to provide a list of kernel modules required for running the PineNote.&lt;br /&gt;
It also aims at listing repositories of work in progress.&lt;br /&gt;
While some overlap with the Quartz64 module list ([[Quartz64_Development#Upstreaming_Status]]) &lt;br /&gt;
is expected, only modules relevant to the PineNote hardware should be listed here.&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;
| Touchscreen&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;cyttsp5&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 6.2-rc1&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/5b0c03e24a061f9c9e8b28fa157b80990c559a37]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Digitizer&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;i2c_hid_of&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Pen BLE Buttons&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;ws8100-pen&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| EBC Display controller&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip_ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| EBC PMic&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
|&amp;lt;code&amp;gt;tps65185&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| LED backlight driver&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| lm3630a&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;st-accel-i2c&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Rastergraphics unit RGA2e&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|tbd&lt;br /&gt;
| &amp;lt;code&amp;gt;rga&amp;lt;/code&amp;gt; (v4l2 mem2mem driver)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Mali GPU&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Wifi/BT&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;brcmfmac&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= More Information = &lt;br /&gt;
== High-level developer new to embedded linux? ==&lt;br /&gt;
Here are some resources I have found helpful in learning to develop on embedded linux devices:&lt;br /&gt;
* Great youtube series introducing you to the kernel and lower-level components of Linux: https://www.youtube.com/watch?v=WiZ05pnHZqM&lt;br /&gt;
* https://embetronicx.com/&lt;br /&gt;
* https://bootlin.com/training/&lt;br /&gt;
* https://www.nand2tetris.org&lt;br /&gt;
&lt;br /&gt;
== Notes Written by Some Developers ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/m-weigand/mw_pinenote_misc (Not super legible &amp;quot;notes&amp;quot;, but very helpful repo with patches, videos, etc)&lt;br /&gt;
** specifically see this section for helpful install/configure scripts: https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches#compiling. &lt;br /&gt;
* https://github.com/0cc4m/pinenote-misc&lt;br /&gt;
** patch for enabling gpu: https://github.com/0cc4m/pinenote-misc/blob/main/mesa-archlinux-arm/mesa/rockchip_ebc.patch&lt;br /&gt;
** prebuilt pkg's: https://github.com/0cc4m/pinenote-misc/releases&lt;br /&gt;
* https://pwarren.id.au/pinenote/build_notes.txt&lt;br /&gt;
* https://github.com/DorianRudolph/pinenotes&lt;br /&gt;
* https://github.com/tpwrules/nixos-pinenote&lt;br /&gt;
&lt;br /&gt;
== Alternative to patching of mesa ==&lt;br /&gt;
Mesa needs to be patched to add the driver entry point. The alternative to this, is the renaming of the ebc driver to an existing mesa driver entry point. A good existing name can be &amp;quot;repaper&amp;quot;. To change the driver name, edit in the kernel tree the following files:&amp;lt;br&amp;gt;&lt;br /&gt;
- replace &amp;quot;rockchip-ebc&amp;quot; with &amp;quot;repaper&amp;quot; in the two places in the file: drivers/gpu/drm/rockchip/rockchip_ebc.c &amp;lt;br&amp;gt;&lt;br /&gt;
- preventive, replace &amp;quot;repaper&amp;quot; with &amp;quot;repaper-disabled&amp;quot; in the two places in the file: drivers/gpu/drm/tiny/repaper.c &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building the most recent kernel ==&lt;br /&gt;
See [https://wiki.pine64.org/wiki/PineNote_Development/Building_Kernel here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Video of Factory Android OS ==&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=DWuTGgQHw98 PineNote Developer Edition w/Tech Demo Android OS (Video Only)]&lt;br /&gt;
&lt;br /&gt;
Informal walkthrough of the factory Android installation on the PineNote Developer Edition, recorded by a community member (Apr 2022). This is useful to look back at the original OS after erasing it from your device, or to get some additional detail before your device arrives.&lt;br /&gt;
&lt;br /&gt;
The video also includes a chapter at the end showing [https://www.youtube.com/watch?v=DWuTGgQHw98&amp;amp;t=802s how to enable Android Debug Bridge (`adb`) over USB]. Once enabled, keep the device powered and connect a USB cable directly to the PineNote (i.e. no UART breakout) to a computer running `adb`.&lt;br /&gt;
&lt;br /&gt;
== Emulator for Developing/Testing Pinenote Apps ==&lt;br /&gt;
https://github.com/michaelshiel/picom-epaper&lt;br /&gt;
&lt;br /&gt;
= Flashing Software =&lt;br /&gt;
Currently, the only ways to flash software are from the factory Android installation (UART shell, adb, or fastboot) or by using rkdeveloptool.&lt;br /&gt;
&lt;br /&gt;
== Backup of the content of the internal MMC before you mess anything up ==&lt;br /&gt;
Especially the '''waveform''' partition contains data '''unique''' to your PineNote and is a prime candidate for backup.&lt;br /&gt;
&lt;br /&gt;
But other partitions like uboot (need for any operation of the device) or the un-partitioned space at the beginning containing the GPT partition table (and presumably the VCOM setting for the e-ink display and maybe device mac addresses) contains data you may wish to backup.&lt;br /&gt;
&lt;br /&gt;
Depending of your personal level of data hoarder you may want to backup more than this or even just everything (the large userdata partition is supposed to be able to be repopulated as empty space by Android)&lt;br /&gt;
&lt;br /&gt;
In any case it is easier to restore/extract data from a backup than not having one if you need one.&lt;br /&gt;
&lt;br /&gt;
=== Manually using rkdeveloptool ===&lt;br /&gt;
Dorian has some nice [https://github.com/DorianRudolph/pinenotes notes regarding the PineNote]&lt;br /&gt;
&lt;br /&gt;
Don't forget to install a patched uboot for reading beyond 32MB and to respect the 2GB limit/bug of the current rkdeveloptool as per his notes&lt;br /&gt;
&lt;br /&gt;
=== Automated backup using a script and rkdeveloptool ===&lt;br /&gt;
[https://github.com/talpadk/pinenote-backup pinenote-backup] is a python script for detecting the partitions and automating the backup of partitions or the whole disk&lt;br /&gt;
&lt;br /&gt;
I also requires a patched u-boot but automatically handles the 2GB limit by splitting up larger reads into smaller ones&lt;br /&gt;
&lt;br /&gt;
=== Using the factory Android installation ===&lt;br /&gt;
For any one knowing how and with which caveats: Write ME&lt;br /&gt;
&lt;br /&gt;
=== Using a user installed Linux ===&lt;br /&gt;
A Linux installed to the cache partition should be able to easily backup everything over WiFi or to a USB stick/disk using dd&lt;br /&gt;
&lt;br /&gt;
However the user would need to backup the cache partition themself (if they want that).&lt;br /&gt;
&lt;br /&gt;
And more importantly they would only be getting the backup ''after'' they started playing with the content of the MMC.&lt;br /&gt;
&lt;br /&gt;
== Side-by-side setup ==&lt;br /&gt;
&lt;br /&gt;
It is possible to set up a partition for mainline development without disturbing the factory Android installation. This allows updating a mainline kernel, DTB, and initramfs over Wi-Fi until WiFi or USB OTG is working in mainline Linux.&lt;br /&gt;
&lt;br /&gt;
=== Without Repartitioning ===&lt;br /&gt;
&lt;br /&gt;
The recommended partition for this is &amp;lt;tt&amp;gt;mmcblk0p11&amp;lt;/tt&amp;gt; aka &amp;lt;tt&amp;gt;/cache&amp;lt;/tt&amp;gt;. It is large and already formatted as &amp;lt;tt&amp;gt;ext4&amp;lt;/tt&amp;gt;, so it is readable from U-Boot. Here are some general steps:&lt;br /&gt;
&lt;br /&gt;
# From the UART or adb shell, set up your chroot in &amp;lt;tt&amp;gt;/cache&amp;lt;/tt&amp;gt;. I used the Alpine Linux rootfs tarball.&lt;br /&gt;
# Copy in your kernel and DTB, using for example &amp;lt;tt&amp;gt;scp&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;wget&amp;lt;/tt&amp;gt; inside the chroot.&lt;br /&gt;
# Finally, create and boot an &amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; as described below.&lt;br /&gt;
&lt;br /&gt;
=== With Repartitioning ===&lt;br /&gt;
&lt;br /&gt;
It is possible to shrink the &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt; partition, and create a new partition at the end for use with mainline Linux. This provides much more space than &amp;lt;tt&amp;gt;cache&amp;lt;/tt&amp;gt;. However, because &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt; is formatted with &amp;lt;tt&amp;gt;f2fs&amp;lt;/tt&amp;gt;, and that filesystem cannot be shrunk, resizing the partition requires wiping &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# Back up any necessary files from userdata&lt;br /&gt;
# Boot to a mainline kernel from &amp;lt;tt&amp;gt;mmcblk0p11&amp;lt;/tt&amp;gt;, either using that partition as rootfs (see above), or using an initramfs with repartitioning tools&lt;br /&gt;
# Modify the partition table with your favorite tool, e.g. &amp;lt;tt&amp;gt;fdisk&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;gdisk&amp;lt;/tt&amp;gt;, or &amp;lt;tt&amp;gt;parted&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Reboot into &amp;lt;tt&amp;gt;fastboot&amp;lt;/tt&amp;gt; and wipe &amp;lt;tt&amp;gt;userdata&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# Reboot into Android, where you can now chroot in and install your favorite distribution to the new partition.&lt;br /&gt;
&lt;br /&gt;
== Using rkdeveloptool ==&lt;br /&gt;
&lt;br /&gt;
rkdeveloptool is a command line utility built on libusb.&lt;br /&gt;
&lt;br /&gt;
=== Downloading and Building rkdeveloptool ===&lt;br /&gt;
&lt;br /&gt;
PINE64 develops [https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool its own updated fork of rkdeveloptool on GitLab].&lt;br /&gt;
&lt;br /&gt;
You will need to have libusb 1.0, its development headers and scdoc installed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://gitlab.com/pine64-org/quartz-bsp/rkdeveloptool.git&lt;br /&gt;
cd rkdeveloptool&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets up all the build files. You can then compile with &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; inside the build directory.&lt;br /&gt;
&lt;br /&gt;
After you're done, you'll likely also need to install the udev rules, or else your user won't have permission to access the USB devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp 99-rk-rockusb.rules /etc/udev/rules.d/&lt;br /&gt;
sudo udevadm control --reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copying the udev rules is also performed automatically when you &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Building Downstream U-Boot ===&lt;br /&gt;
&lt;br /&gt;
While in maskrom mode, we need to have a u-boot to download onto the device for any of the other commands to work. To build you'll also need to install device-tree-compiler.&lt;br /&gt;
&lt;br /&gt;
You also need to install Python and pyelftools.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Note that rkbin is a &amp;amp;gt;5GB download!&amp;lt;/b&amp;gt; This will take some time to clone and process the deltas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone -b quartz64 https://gitlab.com/pgwipeout/u-boot-rockchip.git&lt;br /&gt;
git clone -b rkbin https://github.com/JeffyCN/rockchip_mirrors.git rkbin&lt;br /&gt;
cd u-boot-rockchip&lt;br /&gt;
# If using Arch Linux, export CROSS_COMPILE=aarch64-linux-gnu-&lt;br /&gt;
export CROSS_COMPILE=aarch64-none-linux-gnu-&lt;br /&gt;
make rk3566-quartz64_defconfig&lt;br /&gt;
./make.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
In the version I cloned (current as of 2022-01-02), I had to make a change to one line to get a clean compilation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/lib/avb/libavb/avb_slot_verify.c b/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
index 123701fc3b..64a1ce6450 100644&lt;br /&gt;
--- a/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
+++ b/lib/avb/libavb/avb_slot_verify.c&lt;br /&gt;
@@ -296,7 +296,7 @@ static AvbSlotVerifyResult load_and_verify_hash_partition(&lt;br /&gt;
   bool image_preloaded = false;&lt;br /&gt;
   uint8_t* digest;&lt;br /&gt;
   size_t digest_len;&lt;br /&gt;
-  const char* found;&lt;br /&gt;
+  const char* found = NULL;&lt;br /&gt;
   uint64_t image_size;&lt;br /&gt;
   size_t expected_digest_len = 0;&lt;br /&gt;
   uint8_t expected_digest_buf[AVB_SHA512_DIGEST_SIZE];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For systems where the global python executable points to python2, compilation fails with an error related to pyelftools not being installed (even if it is). To fix this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff --git a/make.sh b/make.sh&lt;br /&gt;
index 2bba05b4e4..cfe5b0afd5 100755&lt;br /&gt;
--- a/make.sh&lt;br /&gt;
+++ b/make.sh&lt;br /&gt;
@@ -758,7 +758,7 @@ function pack_fit_image()&lt;br /&gt;
        fi&lt;br /&gt;
 &lt;br /&gt;
        if [ &amp;quot;${ARM64_TRUSTZONE}&amp;quot; == &amp;quot;y&amp;quot; ]; then&lt;br /&gt;
-               if ! python -c &amp;quot;import elftools&amp;quot; ; then&lt;br /&gt;
+               if ! python3 -c &amp;quot;import elftools&amp;quot; ; then&lt;br /&gt;
                        echo &amp;quot;ERROR: No python 'pyelftools', please: pip install pyelftools&amp;quot;&lt;br /&gt;
                        exit 1&lt;br /&gt;
                fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Entering Maskrom/Rockusb Mode ===&lt;br /&gt;
&lt;br /&gt;
There are three ways to get into Maskrom/Rockusb mode:&lt;br /&gt;
&lt;br /&gt;
====  The easy way ====&lt;br /&gt;
&lt;br /&gt;
# Flip the device around so that the display faces down&lt;br /&gt;
# Lay the pen on the right side, with its tip pointing towards the speaker grill, and its magnet pointing towards the upper right corner of the label on the back (or place the magnetic cap from the pen on the spot marked on the back).&lt;br /&gt;
# Turn the device on and wait for it to show up in &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt;. It should now be in Loader mode, according to &amp;lt;code&amp;gt;rkdeveloptool list-devices&amp;lt;/code&amp;gt; (note that &amp;quot;Loader&amp;quot; here indicates U-Boot's Rockusb; separately, booting with an erased eMMC displays &amp;quot;Maskrom&amp;quot; [not &amp;quot;Loader&amp;quot;] from the RK3566).&lt;br /&gt;
# Unplug the device and plug it back in. It should now be in Rockusb mode.&lt;br /&gt;
&lt;br /&gt;
This can be a bit fiddly to get right, and may need a few tries.&lt;br /&gt;
&lt;br /&gt;
==== The u-boot way ====&lt;br /&gt;
# Interrupt the u-boot startup using ctrl-c (while attached using an UART dongle)&lt;br /&gt;
# While in u-boot use the command &amp;quot;rockusb 0 mmc 0&amp;quot; to start rockusb mode.&lt;br /&gt;
&lt;br /&gt;
One benefit from this is, that if you have an UART dongle that allows to simultaneous having an UART and USB connection, there is no need to plug and unplug cables and flipping the PineNote around and placing magnets.  &lt;br /&gt;
&lt;br /&gt;
This is especially helpful when changing back and forth between u-boot and rockusb, for instance when trying to develop u-boot.&lt;br /&gt;
&lt;br /&gt;
==== Shorting test points ====&lt;br /&gt;
&lt;br /&gt;
If the bootloader is broken/corrupted, you cannot get to Maskrom without opening up the device (it can be opened using spudger and a bit of patience).&lt;br /&gt;
&lt;br /&gt;
Once inside, short TP1301 (GND) and TP1302 (eMMC_D0/FLASH_D0) with a small tweezers, this is how it looks on board view (credit to Caleb):&lt;br /&gt;
&lt;br /&gt;
[[File:PineNote_Maskrom_TP.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Then plug the device to the computer and if you see the device with VID=2207/PID=350a then it should be in Maskrom mode, you can verify by typing &amp;lt;code&amp;gt;rkdeveloptool list-devices&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Jan 07 15:04:13 melttower kernel: usb 1-14: New USB device found, idVendor=2207, idProduct=350a, bcdDevice= 1.00&lt;br /&gt;
Jan 07 15:04:13 melttower kernel: usb 1-14: New USB device strings: Mfr=0, Product=0, SerialNumber=0&lt;br /&gt;
&lt;br /&gt;
$ rkdeveloptool list-devices&lt;br /&gt;
DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=10e    Maskrom&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If nothing shows up, you can try to hold down the power button for 5 seconds and then try again.&lt;br /&gt;
&lt;br /&gt;
=== Running rkdeveloptool ===&lt;br /&gt;
&lt;br /&gt;
First, you'll want to make sure the device you've connected is in maskrom mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It should output something like &amp;lt;code&amp;gt;DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=202    Maskrom&amp;lt;/code&amp;gt;. If it doesn't, see [[PineNote Development#Entering Maskrom Mode]].&lt;br /&gt;
&lt;br /&gt;
You can now download u-boot onto it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool boot ../u-boot-rockchip/rk356x_spl_loader_v1.08.111.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should output &amp;lt;code&amp;gt;Downloading bootloader succeeded.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We can now verify that this worked using e.g. the &amp;quot;read flash info&amp;quot; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./rkdeveloptool read-flash-info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''TODO:''' finish this section&lt;br /&gt;
&lt;br /&gt;
=== Creating a mainline boot image ===&lt;br /&gt;
&lt;br /&gt;
You can create a filesystem image that replaces the Android boot or recovery partition by doing roughly the following:&lt;br /&gt;
&lt;br /&gt;
# Erase boot and dtbo with rkdeveloptool or fastboot (back them up first!!!)&lt;br /&gt;
# Create an ext2 partition image and mount it (fallocate, mkfs.ext2)&lt;br /&gt;
# Build your mainline kernel&lt;br /&gt;
# Copy the kernel, dtb and an initramfs to the root of the mounted image (use any old postmarketOS initramfs)&lt;br /&gt;
# Create a file in the root of the mounted image called &amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; as described below&lt;br /&gt;
# Unmount the image and then use rkdeveloptool to flash it to the &amp;quot;recovery&amp;quot; partition on the pinenote (it's about the right size until we get around to replacing the partition layout).&lt;br /&gt;
&lt;br /&gt;
== Using fastboot ==&lt;br /&gt;
&lt;br /&gt;
Follow the steps for &amp;quot;Creating a mainline boot.img&amp;quot;, but instead of flashing it with rkdeveloptool, use fastboot. You can enter fastboot in either of two ways:&lt;br /&gt;
&lt;br /&gt;
# Use &amp;quot;reboot bootloader&amp;quot; from adb or a UART console.&lt;br /&gt;
# Get a U-Boot prompt and run &amp;lt;code&amp;gt;fastboot usb 0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Mainline development =&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
Some work happening here: https://gitlab.com/calebccff/linux, the idea is to import the parts of the eink/ebc drivers which are open source and use the downstream u-boot framebuffer driver as a reference to create a basic framebuffer driver.&lt;br /&gt;
&lt;br /&gt;
Currently mainline struggles to boot due to weird issues while probing fixed regulators (?). It also fails to detect eMMC.&lt;br /&gt;
&lt;br /&gt;
Further work is being done here: https://github.com/smaeul/linux/commits/rk356x-ebc-dev. This has a complete device tree, with working eMMC. Pen input also works out of the box. Wi-Fi and BT work with firmware copied from the factory Android image.&lt;br /&gt;
&lt;br /&gt;
== How to boot mainline ==&lt;br /&gt;
&lt;br /&gt;
UART is currently REQUIRED for this to work! We depend on u-boot falling back to console. Once we have a prebuilt u-boot which will use extlinux by default, UART won't be needed anymore.&lt;br /&gt;
&lt;br /&gt;
You can compile a u-boot that uses extlinux by default by following the instructions [https://github.com/JoshuaMulliken/pinenote_uboot/blob/aa9ecbd3d3e716f163f5a900824630f24e9f04ba/README.md#changing-default-boot-order here].&lt;br /&gt;
&lt;br /&gt;
=== Getting to a U-Boot prompt ===&lt;br /&gt;
&lt;br /&gt;
You can get to a U-Boot prompt by:&lt;br /&gt;
&lt;br /&gt;
# Holding Ctrl-C while the display panel initializes.&lt;br /&gt;
# Wiping the &amp;quot;boot&amp;quot; partition.&lt;br /&gt;
&lt;br /&gt;
=== Using sysboot ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;extlinux.conf&amp;lt;/code&amp;gt; should have the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
timeout 10&lt;br /&gt;
default MAINLINE&lt;br /&gt;
menu title boot prev kernel&lt;br /&gt;
&lt;br /&gt;
label MAINLINE&lt;br /&gt;
  kernel /vmlinuz&lt;br /&gt;
  fdt /rk3566-pinenote.dtb&lt;br /&gt;
  initrd /initramfs&lt;br /&gt;
  append earlycon console=tty0 console=ttyS2,1500000n8 fw_devlink=off PMOS_NO_OUTPUT_REDIRECT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the u-boot console, run the following command to boot your mainline kernel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sysboot ${devtype} ${devnum}:9 any ${scriptaddr} extlinux.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Booting with individual commands ===&lt;br /&gt;
&lt;br /&gt;
Booting with individual commands can be useful when you need to temporarily add some kernel command line arguments. Use these or similar commands at the U-Boot shell:&lt;br /&gt;
&lt;br /&gt;
 load mmc 0:b ${kernel_addr_r} boot/Image&lt;br /&gt;
 load mmc 0:b ${fdt_addr_r} boot/rk3566-pinenote.dtb&lt;br /&gt;
 setenv bootargs ignore_loglevel root=/dev/mmcblk0p11 rootwait init=/bin/bash&lt;br /&gt;
 booti ${kernel_addr_r} - ${fdt_addr_r}&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Firmware for WiFi &amp;amp; Bluetooth and Waveform data ===&lt;br /&gt;
&lt;br /&gt;
==== Using Maximilian's Debian image  ====&lt;br /&gt;
If the Android partition (super) and waveform partition (waveform) is left intact the image extracts the WiFi, BT driver and waveform from the partitions on first run.&lt;br /&gt;
&lt;br /&gt;
For instance if you repartitions the userdata partition and installs the image there.&lt;br /&gt;
&lt;br /&gt;
==== Getting it from the Android install manually ====&lt;br /&gt;
Copy WiFi/BT firmware from Android:&lt;br /&gt;
 mkdir -p /cache/lib/firmware/brcm&lt;br /&gt;
 cp /vendor/etc/firmware/fw_bcm43455c0_ag_cy.bin /cache/lib/firmware/brcm/brcmfmac43455-sdio.bin&lt;br /&gt;
 cp /vendor/etc/firmware/nvram_ap6255_cy.txt /cache/lib/firmware/brcm/brcmfmac43455-sdio.txt&lt;br /&gt;
 cp /cache/lib/firmware/BCM4345C0.hcd /cache/lib/firmware/brcm/BCM4345C0.hcd&lt;br /&gt;
&lt;br /&gt;
Copy waveform partition (via previously dumped file):&lt;br /&gt;
 adb root&lt;br /&gt;
 adb push waveform.img /cache/lib/firmware/waveform.bin&lt;br /&gt;
&lt;br /&gt;
Or via dd within Linux:&lt;br /&gt;
 dd if=/dev/mmcblk0p3 of=/lib/firmware/waveform.bin bs=1k count=2048&lt;br /&gt;
&lt;br /&gt;
==== Getting the Wifi and Bluetooth driver blobs from &amp;quot;other&amp;quot; sources ====&lt;br /&gt;
===== WiFi =====&lt;br /&gt;
The WiFi firmware .bin blob can be obtained by installing the Debian package firmware-brcm80211 (in the non-free section)&lt;br /&gt;
&lt;br /&gt;
The WiFi brcmfmac43455-sdio.txt file can according to Eugen be sourced from https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/brcm/brcmfmac43455-sdio.AW-CM256SM.txt needs a renaming when copying it to /lib/firmware/brcm/brcmfmac43455-sdio.txt)&lt;br /&gt;
&lt;br /&gt;
''The content of the upstream .txt is different than the Android configuration, but is supposed to work.''&lt;br /&gt;
&lt;br /&gt;
As you don't have WiFi yet you need to get the firmware-brcm80211*.deb and brcmfmac43455-sdio.txt file on the PineNote by other means, for instance using an USB stick&lt;br /&gt;
&lt;br /&gt;
===== Bluetooth =====&lt;br /&gt;
&lt;br /&gt;
Once you have WiFi working you can get BCM4345C0.hcd by installing the bluez-firmware &lt;br /&gt;
  sudo apt install bluez-firmware&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuring the E-ink refresh mode ===&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/rockchip_ebc/patches contains information on how/where to write in /sys to alter the refresh mode&lt;br /&gt;
&lt;br /&gt;
https://github.com/m-weigand/mw_pinenote_misc/tree/main/gnome_extension contains the gnome extension used in Maximilian image &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Touchscreen and Pen In X.org ===&lt;br /&gt;
&lt;br /&gt;
By default the pen config is flipped 180° (which makes it unusable) and the touchscreen doesn't work. Placing the following config in &amp;lt;code&amp;gt;/etc/X11/xorg.conf.d/50-touchscreen.conf&amp;lt;/code&amp;gt; will fix both problems:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;evdev touchscreen&amp;quot;&lt;br /&gt;
    MatchProduct &amp;quot;tt21000&amp;quot;&lt;br /&gt;
    MatchIsTouchscreen &amp;quot;on&amp;quot;&lt;br /&gt;
    Driver        &amp;quot;evdev&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
Section &amp;quot;InputClass&amp;quot;&lt;br /&gt;
    Identifier    &amp;quot;RotateTouch&amp;quot;&lt;br /&gt;
    MatchProduct    &amp;quot;w9013&amp;quot;&lt;br /&gt;
    Option    &amp;quot;TransformationMatrix&amp;quot; &amp;quot;-1 0 1 0 -1 1 0 0 1&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64&amp;diff=14708</id>
		<title>Quartz64</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64&amp;diff=14708"/>
		<updated>2022-11-18T09:53:38Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Ethernet works OOTB on Model-A with Debian's kernel using 'm'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Quartz64modelb.png|400px|thumb|right|The Quartz64 Model B]]&lt;br /&gt;
&lt;br /&gt;
The '''Quartz64''' is the most recent Single Board Computer offering from PINE64, with Model A initially released in June of 2021 and Model B in May of 2022. It is powered by a Rockchip RK3566 Quad-Core ARM Cortex A55 64-Bit Processor with a MALI G-52 GPU.&lt;br /&gt;
&lt;br /&gt;
Key features include a PCIe x4 open ended slot (model A) or m.2 (model B) using one Gen2 lane electrically, and the use of LPDDR4 RAM.&lt;br /&gt;
&lt;br /&gt;
The Quartz64 has three LPDDR4 system memory options: 2GB, 4GB or 8GB. For booting, there is an eMMC module socket (supporting up to 128GB) and microSD slot, as well as a footprint to solder on an SPI flash chip. The board is equipped with HDMI, 1x USB 3.0 type A Host, 3x USB 2.0 Host, Gigabit Ethernet, SATA (model A), GPIO Bus, MiPi DSI interface, e-ink interface (model A), eDP interface (model A), touch Panel interface (model A), MiPi CSI interface, as well as many other device interfaces such as UART, SPI, I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C, for makers to integrate with sensors and other peripherals. Many different Operating Systems (OS) are freely available from the open source community, such as Linux (Ubuntu, Debian, Arch), BSD, and Android.&lt;br /&gt;
&lt;br /&gt;
== Software releases ==&lt;br /&gt;
&lt;br /&gt;
{{warning|You are strongly encouraged to procure a 3.3V UART serial adapter capable of running at 1.5 mbauds, such as [https://pine64.com/product/serial-console-woodpecker-edition/ the woodpecker] if you want to use a Quartz64, as some images' u-boot may have no video output on this chip.}}&lt;br /&gt;
{{note|'''Note:''' OS images are provided by the community, not by PINE64. Most community projects currently aim at getting mainline Linux running on the board, not some vendor provided kernel that will never be receiving updates. A mainline-first approach allows for the boards to continue receiving important updates, such as security updates, for years to come, as well as have higher quality code in the kernel as it underwent independent review, but does mean that not all aspects of the hardware work right out of the gate.}}&lt;br /&gt;
&lt;br /&gt;
=== Armbian ===&lt;br /&gt;
[[File:armbian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
Armbian is a base operating system platform for single board computers&lt;br /&gt;
&lt;br /&gt;
* Lightweight Debian or Ubuntu based Linux distribution specialised for ARM development boards&lt;br /&gt;
* Each system is compiled, assembled and optimised by [https://github.com/armbian/build Armbian Build Tools]&lt;br /&gt;
* It has powerful build and software development tools to make custom builds&lt;br /&gt;
&lt;br /&gt;
Download [https://github.com/armbian/build/releases/ latest, as fresh as possible, upon code change, images]&lt;br /&gt;
&lt;br /&gt;
Support on Armbian forums https://forum.armbian.com/forum/96-upcoming-hardware-wip/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Manjaro ARM ===&lt;br /&gt;
[[File:Manjaro.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
Manjaro ARM is a user friendly rolling release distribution, based on Arch Linux ARM.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/manjaro-arm/quartz64-a-images/releases Images for Model A on GitHub]&lt;br /&gt;
* [https://github.com/manjaro-arm/quartz64-b-images/releases Images for Model B on GitHub]&lt;br /&gt;
&lt;br /&gt;
Most of the hardware support is already available in the mainline kernel. If some devices doesn't work it is possible to swap to the linux-quartz64 kernel &amp;lt;code&amp;gt;pacman -S linux-quartz64&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Following desktop options available:&lt;br /&gt;
* Gnome&lt;br /&gt;
* KDE Plasma&lt;br /&gt;
* Mate&lt;br /&gt;
* Sway&lt;br /&gt;
* XFCE&lt;br /&gt;
as well as minimal image without desktop.&lt;br /&gt;
&lt;br /&gt;
=== pgwipeout's Quartz64 CI ===&lt;br /&gt;
&lt;br /&gt;
pgwipeout provides continuously rebuilt set of images for Quartz64 devices which includes a Debian installer and a buildroot rescue environment. It is aimed at advanced users who generally know their way around a Linux system, and as a baseline for whether something is working or not. Works on both SD cards and eMMC, uses pgwipeout's patched kernel. Kernels aren't auto-updated on the installed system, so the user manually has to do this by mounting the actual correct boot partition.&lt;br /&gt;
&lt;br /&gt;
'''Download:''' https://gitlab.com/pgwipeout/quartz64_ci/-/pipelines (Click the three dots on the right, download the merge-job archive.)&lt;br /&gt;
&lt;br /&gt;
For Quartz64 Model A, flash &amp;lt;tt&amp;gt;rk3566-quartz64-a.dtb.img.xz&amp;lt;/tt&amp;gt;. On Linux, you can for example do this as follows, assuming your target device is &amp;lt;tt&amp;gt;/dev/sdX&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 sudo -i; xzcat /path/to/rk3566-quartz64-a.dtb.img.xz &amp;gt; /dev/sdX&lt;br /&gt;
&lt;br /&gt;
For Quartz64 Model B, use &amp;lt;tt&amp;gt;rk3566-quartz64-b.dtb.img.xz&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
For line by line instructions to boot Quartz64 CI on a microSD card and use it to install Debian onto an eMMC follow these instructions https://wiki.pine64.org/wiki/Installing_Debian_on_the_Quartz64&lt;br /&gt;
&lt;br /&gt;
=== DietPi ===&lt;br /&gt;
&amp;lt;div style=float:right&amp;gt;[[File:dietpi.png|center|100px]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* DietPi is a '''lightweight''', yet '''easy to setup''' and '''feature-rich''' Linux distribution, based on '''Debian'''.&lt;br /&gt;
* To find out more about DietPi, please visit the [https://dietpi.com/docs/ official documentation].&lt;br /&gt;
* Discuss the Quartz64 build(s) on the [https://forum.pine64.org/showthread.php?tid=17601 PINE64 forum thread].&lt;br /&gt;
* DD image (for 4 GiB or above micro SD card or eMMC)&lt;br /&gt;
** Quartz64 Model A: [https://dietpi.com/downloads/images/DietPi_Quartz64A-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
** Quartz64 Model B: [https://dietpi.com/downloads/images/DietPi_Quartz64B-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
** SOQuartz: [https://dietpi.com/downloads/images/DietPi_SOQuartz-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: '''root'''&lt;br /&gt;
** Password: '''dietpi'''&lt;br /&gt;
&lt;br /&gt;
=== Arch Linux ARM (Unofficial) ===&lt;br /&gt;
&lt;br /&gt;
See [[Installing Arch Linux ARM On The Quartz64]] for detailed instructions.&lt;br /&gt;
&lt;br /&gt;
=== Tianocore EDK II port by jmcneill ===&lt;br /&gt;
&lt;br /&gt;
This (as of 2021-12-30) is a work in progress to enable UEFI enabled systems, and is able to bring up SD, eMMC, USB, PCIe with SATA and NVMe, HDMI, thermal sensors, TRNG, as well as general Cortex A-55 features.  Known to work with NetBSD -current, and the ESXi Arm fling version 1.8.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/jaredmcneill/quartz64_uefi jmcneill's Quartz64 UEFI Github]&lt;br /&gt;
&lt;br /&gt;
The sdcard image should be written to an microSD card and installed.  Currently, using this card also for the OS may be problematic.&lt;br /&gt;
&lt;br /&gt;
=== NetBSD ===&lt;br /&gt;
&lt;br /&gt;
NetBSD relies upon the UEFI support in Tianocore.  Before NetBSD 10 is released, the latest version of NetBSD-current should be used:&lt;br /&gt;
&lt;br /&gt;
* [http://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/ NetBSD daily builds top level] from inside here, navigate to a date, and inside the images/ subdirectory are installable images. Use the one called &amp;quot;NetBSD-&amp;lt;version&amp;gt;-evbarm-aarch64-install.img.gz&amp;quot;.  This image can be written to a supported device, such as the eMMC interface, any USB storage device, NVMe, and PCIe AHCI SATA are all supported with builds after 2022-01-15.&lt;br /&gt;
&lt;br /&gt;
* Currently this can not be shared with the EDK2 port, ie, microSD for EDK2 and some other media for NetBSD.&lt;br /&gt;
&lt;br /&gt;
== SoC and Memory Specifications ==&lt;br /&gt;
* Based on [https://www.rock-chips.com/a/en/products/RK35_Series/2021/0113/1274.html Rockchip RK3566]&lt;br /&gt;
[[File:RK3566_icon.png|right]]&lt;br /&gt;
&lt;br /&gt;
=== CPU Architecture ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/processors/cortex-a/cortex-a55 Quad-core ARM Cortex-A55@1.8GHz]&lt;br /&gt;
* AArch32 for full backwards compatibility with ARMv7&lt;br /&gt;
* ARM Neon Advanced SIMD (single instruction, multiple data) support for accelerated media and signal processing computation&lt;br /&gt;
* Includes VFP hardware to support single and double-precision operations&lt;br /&gt;
* ARMv8 Cryptography Extensions&lt;br /&gt;
* Integrated 32KB L1 instruction cache and 32KB L1 data cache per core&lt;br /&gt;
* 512KB unified system L3 cache&lt;br /&gt;
* [https://developer.arm.com/ip-products/security-ip/trustzone TrustZone] technology support&lt;br /&gt;
* [https://www.cnx-software.com/2020/12/01/rockchip-rk3568-processor-to-power-edge-computing-and-nvr-applications 22nm process, believed to be FD-SOI]&lt;br /&gt;
&lt;br /&gt;
=== GPU (Graphics Processing Unit) Capabilities ===&lt;br /&gt;
* [https://developer.arm.com/ip-products/graphics-and-multimedia/mali-gpus/mali-g52-gpu Mali-G52 2EE Bifrost GPU@800MHz]&lt;br /&gt;
* 4x Multi-Sampling Anti-Aliasing (MSAA) with minimal performance drop &lt;br /&gt;
* 128KB L2 Cache configurations&lt;br /&gt;
* Supports OpenGL ES 1.1, 2.0, and 3.2&lt;br /&gt;
* Supports Vulkan 1.0 and 1.1&lt;br /&gt;
* Supports OpenCL 2.0 Full Profile&lt;br /&gt;
* Supports 1600 Mpix/s fill rate when at 800MHz clock frequency&lt;br /&gt;
* Supports 38.4 GLOP/s when at 800MHz clock frequency   &lt;br /&gt;
&lt;br /&gt;
=== NPU (Neural Processing Unit) Capabilities ===&lt;br /&gt;
* Neural network acceleration engine with processing performance of up to 0.8 TOPS&lt;br /&gt;
* Supports integer 8 and integer 16 convolution operations&lt;br /&gt;
* Supports the following deep learning frameworks: TensorFlow, TF-lite, Pytorch, Caffe, ONNX, MXNet, Keras, Darknet&lt;br /&gt;
&lt;br /&gt;
=== System Memory ===&lt;br /&gt;
* RAM Memory Variants: 2GB (SOQuartz only), 4GB, 8GB LPDDR4.&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
* 10/100/1000Mbps Ethernet&lt;br /&gt;
* WiFi 802.11 b/g/n/ac with Bluetooth 5.0 (optional on model A, built in on model B)&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
* microSD - bootable, supports SDHC and SDXC, storage up to 2TB&lt;br /&gt;
* USB&lt;br /&gt;
** Model A: 2 USB 2.0 host ports, 1 USB 2.0 OTG port, 1 USB 3.0 host port&lt;br /&gt;
** Model B: 1 USB 2.0 host port, 1 USB 2.0 OTG port, 1 USB 3.0 host port&lt;br /&gt;
* one native SATA 3.0 6Gb/s Port (only on model A, shared with USB 3.0 host port)&lt;br /&gt;
* optional eMMC module from 8GB up to 128GB&lt;br /&gt;
* 64 Mbit (8 MByte) SPI flash (Model B only), part number &amp;lt;tt&amp;gt;25Q64DWZPIG&amp;lt;/tt&amp;gt; in the schematic&lt;br /&gt;
&lt;br /&gt;
==== eMMC Speeds ====&lt;br /&gt;
&lt;br /&gt;
On a 64 GB eMMC module:&lt;br /&gt;
&lt;br /&gt;
  $ sudo hdparm -tT /dev/mmcblk1 &lt;br /&gt;
  &lt;br /&gt;
  /dev/mmcblk1:&lt;br /&gt;
   Timing cached reads:   2368 MB in  2.00 seconds = 1184.46 MB/sec&lt;br /&gt;
   Timing buffered disk reads: 452 MB in  3.01 seconds = 149.98 MB/sec&lt;br /&gt;
&lt;br /&gt;
=== Expansion Ports ===&lt;br /&gt;
* HDMI&lt;br /&gt;
* eDP - 4 lanes of 2.7Gbps, up to 2560x1600@60Hz (only on model A)&lt;br /&gt;
* DSI - Display Serial Interface, 4 lanes MiPi, up to 1440P on model A, 2 lanes MiPi, up to 1080p on model B &lt;br /&gt;
* CSI - CMOS Camera Interface, 4 lanes MiPi up to 8 mega pixel on model A, 2 lanes MiPi up to 5 mega pixel on model B &lt;br /&gt;
* TP - Touch Panel Port, SPI with interrupt on model A&lt;br /&gt;
* RTC - Real Time Clock Battery Connector&lt;br /&gt;
* VBAT - Lithium Battery Connector with temperature sensor input on model A&lt;br /&gt;
* Wifi/BT Module Header - SDIO 3.0 and UART on model A, build in Wifi/BT Module on model B&lt;br /&gt;
* 2x20 pins &amp;quot;Pi2&amp;quot; GPIO Header on model B, 2x10 pins GPO header on model A&lt;br /&gt;
* PCIe x4 open ended slot on model A, m.2 slot on model B, one Gen2 lane due to SoC constraints&lt;br /&gt;
** On Model A, the slot provides 10W of power for the 3.3V supply and however much power your 12V input power supply provides on the 12V supply&lt;br /&gt;
&lt;br /&gt;
The PCIe implementation on the RK3566 is much more compatible with a wide range of devices compared to the one on the RK3399 used on the ROCKPro64. This means a lot more devices should work (excluding dGPUs due to a lack of cache snooping ability).&lt;br /&gt;
&lt;br /&gt;
==== Combo PHYs ====&lt;br /&gt;
&lt;br /&gt;
[[File:rk3566 phy.png]]&lt;br /&gt;
&lt;br /&gt;
Several of the I/O options on the RK3566 used in the Quartz64 are using the same I/O lines, meaning that they cannot be used at the same time. The above diagram illustrates how they are connected.&lt;br /&gt;
&lt;br /&gt;
In particular, USB 3.0 and the SATA connector on the board are mutually exclusive, and the PCI-e 2.0 lane can be reconfigured into a second SATA port, though an adapter cable needs to be fashioned for this to be useful.&lt;br /&gt;
&lt;br /&gt;
=== GPIO Pins (Quartz64 Model A) ===&lt;br /&gt;
&lt;br /&gt;
Attention! GPIOs are 3.3V!&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; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| 3.3 V&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 2&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| I2C3_SDA_M0 &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a,b&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 4&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| I2C3_SCL_M0 &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a,b&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 5&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 6&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| CPU_REFCLK_OUT&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 7&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 8&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_TX_M0_DEBUG&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 9&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 10&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_RX_M0_DEBUG&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_MOSI_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 11&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 12&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART0_TX &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_MISO_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 13&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 14&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART0_RX &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;a&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_CLK_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 15&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 16&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| SPI1_CS0_M1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 17&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 18&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| SPDIF_OUT &amp;lt;sup style=&amp;quot;font-style:italic;color:green&amp;quot;&amp;gt;c&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 19&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 20&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 3.3V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Notes====&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;can be a PWM pin&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;pulled high to 3.3V through 2.2kOhm resistor&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;low-pass filtered with cutoff of 220 MHz&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Source: Page 28 of [https://wiki.pine64.org/images/3/31/Quartz64_model-A_schematic_v1.0_20201215.pdf the board schematics].&lt;br /&gt;
&lt;br /&gt;
=== GPIO Pins (Quartz64 Model B) ===&lt;br /&gt;
&lt;br /&gt;
Attention! GPIOs are 3.3V!&lt;br /&gt;
&lt;br /&gt;
Interesting alternate pin configurations are listed in [brackets].&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; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Pin no.&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:20em;&amp;quot; | Assigned To&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| 3.3 V&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:yellow; color:black; font-weight:bold;&amp;quot;| 1&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:red; color:gold; font-weight:bold;&amp;quot;| 2&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[I2C3_SDA_M0]'' GPIO1_A0_3V3 &lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:red; color:gold; font-weight:bold;&amp;quot;| 4&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| 5 V&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[I2C3_SCL_M0]'' GPIO1_A1_3V3 &lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 5&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 6&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_C4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 7&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 8&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_TX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 9&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 10&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| UART2_RX&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[SPI1_CS0_M1]'' GPIO3_A1_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 11&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 12&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A3_3V3 &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_A2_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 13&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 14&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_B0_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 15&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 16&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_B1_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| 3.3V&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:yellow; color:black; font-weight:bold;&amp;quot;| 17&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 18&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_B2_3V3 &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO4_C3_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 19&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 20&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO4_C5_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 21&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 22&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_C1_3V3 ''[SPI1_MOSI_M1]''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO4_C2_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 23&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 24&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO4_C6_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 25&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 26&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO4_D1_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| I2C4_SDA_M0&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:blue; color:gold; font-weight:bold;&amp;quot;| 27&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:blue; color:gold; font-weight:bold;&amp;quot;| 28&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| I2C4_SCL_M0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_B3_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 29&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 30&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_B4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 31&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 32&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_C2_3V3 ''[SPI1_MISO_M1]''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[SPI1_CLK_M1]'' GPIO3_C3_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 33&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 34&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GPIO3_A4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 35&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 36&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A7_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| ''[SPDIF_TX_M0]'' GPIO1_A4_3V3&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 37&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 38&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A6_3V3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:right;&amp;quot;| GND&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:black; color:gold; font-weight:bold;&amp;quot;| 39&lt;br /&gt;
| style=&amp;quot;text-align:center; background-color:green; color:gold; font-weight:bold;&amp;quot;| 40&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot;| GPIO3_A5_3V3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Source: Page 24 of [https://files.pine64.org/doc/quartz64/Quartz64_model-B_Schematic-V1.3_20220124.pdf the board schematics].&lt;br /&gt;
&lt;br /&gt;
== Quartz64 Board Information, Schematics, and Certifications ==&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;A&amp;quot; ===&lt;br /&gt;
* Model &amp;quot;A&amp;quot; Baseboard Dimensions: 133mm x 80mm x 19mm&lt;br /&gt;
* Input Power: DC 12V @ 3A 5.5mmOD/2.1mmID center-positive Barrel DC Jack connector&lt;br /&gt;
&lt;br /&gt;
* Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic and PCB Board Resource:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-A_schematic_v2.0_20210427.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC Schematic ver 2.0 20210427 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-A_V2.0_connector_placement.pdf Quartz64 Model &amp;quot;A&amp;quot; SBC PCB Connector placement PDF file]&lt;br /&gt;
&lt;br /&gt;
* Certifications:&lt;br /&gt;
** Disclaimer: Please note that PINE64 SBC is not a &amp;quot;final&amp;quot; product and in general certification is not necessary. However, PINE64 still submit the SBC for FCC and CE certification and obtain the certificates to proof that SBC board is capable on passing the testing. Please note a final commercial product needs to performs its owns testing and obtains its owns certificates.&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Quartz64%20Model-A%20CE%20certification-S21051101701001.pdf Quartz64 model-A CE Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/Quartz64%20Model-A%20FCC%20certification-S21051101702001.pdf Quartz64 model-A FCC Certificate]&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;B&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* Model &amp;quot;B&amp;quot; Baseboard Dimensions: 85mm x 56mm x 18.8mm&lt;br /&gt;
* Input Power: DC 5V @ 3A 3.5mmOD/1.35mmID center-positive Barrel DC Jack connector&lt;br /&gt;
&lt;br /&gt;
* Quartz64 Model &amp;quot;B&amp;quot; SBC Schematic and PCB Board Resource:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-B_Schematic-V1.3_20220124.pdf Quartz64 Model &amp;quot;B&amp;quot; SBC Schematic ver 1.3 20220124 PDF file]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Quartz64_model-B_PCB_Components_Placement-V1.2_20211014.pdf Quartz64 Model &amp;quot;B&amp;quot; SBC PCB Connector placement PDF file]&lt;br /&gt;
* Please note that v1.2 and V1.3 schematic and component placement are identical, just some component value changed.&lt;br /&gt;
&lt;br /&gt;
* Note: Model B uses a Molex PicoBlade compatible connector for the RTC battery. The Pine64 Backup Battery Holders come with a JST PH type connector. To use the Pine64 RTC Backup Battery Holder, the connector on the battery holder will need to be modified with a PicoBlade type connector.&lt;br /&gt;
&lt;br /&gt;
== Datasheets for Components and Peripherals ==&lt;br /&gt;
* Rockchip RK3566 SoC information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Rockchip%20RK3566%20Datasheet%20V1.0-20201210.pdf Rockchip RK3566 ver 1.0 datasheet, already got release permission from Rockchip]&lt;br /&gt;
** [https://opensource.rock-chips.com/images/2/26/Rockchip_RK3568_TRM_Part1_V1.3-20220930P.PDF Rockchip RK3566 and RK3568 TRM (Technical Reference Manual)]&lt;br /&gt;
* Rockchip PMU (Power Management Unit) Information:&lt;br /&gt;
** [https://www.rockchip.fr/RK817%20datasheet%20V1.01.pdf Rockchip RK817 ver 1.01 datasheet for Quartz64 model A]&lt;br /&gt;
** [https://www.rockchip.fr/RK809%20datasheet%20V1.01.pdf Rockchip RK809 ver 1.01 datasheet for Quartz64 model B and SOQuartz]&lt;br /&gt;
* LPDDR4 (200 Balls) SDRAM:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rockpro64/SM512M32Z01MD2BNP(200BALL).pdf Micron LPDDR4 Mobile LPDDR4 Datasheet]&lt;br /&gt;
* eMMC information:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/PINE64_eMMC_Module_20170719.pdf PINE64 eMMC module schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/usb%20emmc%20module%20adapter%20v2.pdf PINE64 USB adapter for eMMC module V2 schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/USB%20adapter%20for%20eMMC%20module%20PCB.tar PINE64 USB adapter for eMMC module PCB in JPEG]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/E-00517%20FORESEE_eMMC_NCEMAM8B-16G%20SPEC.pdf 16GB Foresee eMMC Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/SDINADF4-16-128GB-H%20data%20sheet%20v1.13.pdf 32GB/64GB/128GB SanDisk eMMC Datasheet]&lt;br /&gt;
* SPI NOR Flash information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/w25q128jv%20spi%20revc%2011162016.pdf WinBond 128Mb SPI Flash Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GD25Q128C-Rev2.5.pdf GigaDevice 128Mb SPI Flash Datasheet]&lt;br /&gt;
* E-ink Panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Eink%20P-511-754-V3_ES103TC1%20Specification%20V3.0(Signed)-20190702.pdf Eink 10.3&amp;quot; 1872x1404 ES103TC1 Flex Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/quartz64/Eink%20P-511-828-V1_ED103TC2%20Formal%20Spec%20V1.0_20190514.pdf Eink 10.3&amp;quot; 1872x1404 ES103TC1 Glass Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/PineNote/TI%20PMU-TPS651851.pdf TPS65185x PMIC for E-Ink Enabled Electronic Paper Display Datasheet]&lt;br /&gt;
* LCD Touch Screen Panel information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/FY07024DI26A30-D_feiyang_LCD_panel.pdf 7.0&amp;quot; 1200x600 TFT-LCD Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/HK70DR2459-PG-V01.pdf Touch Panel Specification]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GT911%20Capacitive%20Touch%20Controller%20Datasheet.pdf GOODiX GT911 5-Point Capacitive Touch Controller Datasheet]&lt;br /&gt;
* Ethernet PHY information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/rtl8211e(g)-vb(vl)-cg_datasheet_1.6.pdf Realtek RTL8211 10/100/1000M Ethernet Transceiver]&lt;br /&gt;
* WiFi/BT module info:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rockpro64/AW-CM256SM_DS_DF_V1.9_STD.pdf Azurewave CM256SM 11AC WiFi + Bluetooth5.0 Datasheet]&lt;br /&gt;
* IR LED:&lt;br /&gt;
** [https://media.digikey.com/pdf/Data%20Sheets/Everlight%20PDFs/IRM-36xx_Series.pdf IRM-3638 Datasheet]&lt;br /&gt;
* Enclosure information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/playbox_enclosure_20160426.stp Playbox Enclosure 3D file]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/ABS_enclosure_20160426.stp ABS Enclosure 3D file]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/pine64%20Die%20Cast%20casing-final.jpg Outdoor Aluminum Cast Dust-proof IP67 Enclosure Drawing]&lt;br /&gt;
** [https://www.printables.com/model/269572-pine-quartz-64-a-full-case 3D Printable Enclosure for Model A]&lt;br /&gt;
** [https://www.printables.com/model/269575-pine-quartz-64-a-open-frame Open Frame for Model A]&lt;br /&gt;
* Connector information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/ePH.pdf 2.0mm PH Type connector specification use in Lithium Battery (VBAT) port (Model A)]&lt;br /&gt;
** [https://www.molex.com/pdm_docs/sd/533980271_sd.pdf 1.25mm Picoblade Type connector specification used in RTC Battery port (Model B)]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/0.5FPC%20Front%20Open%20Connector%20H=1.5.pdf 0.5mm Pitch cover type FPC connector specification use in DSI port, TP port and CSI port]&lt;br /&gt;
&lt;br /&gt;
== Development efforts ==&lt;br /&gt;
&lt;br /&gt;
{{SeeMainArticle|Quartz64 Development}}&lt;br /&gt;
&lt;br /&gt;
Information and resources of the ongoing development effort for the Quartz64 can be found on the [[Quartz64 Development]] page, where the current status of various board functions can be found, and whether they have landed in upstream.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.com/pine64-org/quartz-bsp Quartz64 BSP Gitlab Page]&lt;br /&gt;
&lt;br /&gt;
== BSP Linux SDK ==&lt;br /&gt;
&lt;br /&gt;
=== BSP Linux SDK ver 4.19 for Quartz64 model A SBC  ===&lt;br /&gt;
* [http://files.pine64.org/SDK/Quartz64/QUARTZ64-model-A_BSP%20Linux.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 24554419aec29700add97167a3a4c9ed&lt;br /&gt;
** File Size: 32.67.00GB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Android SDK ==&lt;br /&gt;
&lt;br /&gt;
=== Android 11 SDK for Quartz64 model A SBC  ===&lt;br /&gt;
* [http://files.pine64.org/SDK/Quartz64/QUARTZ64_SDK_android11.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 77c2ff57ea3372fb04da7fb49e17d12b&lt;br /&gt;
** File Size: 79.00GB&lt;br /&gt;
** Just the boot blobs (&amp;lt;1MB): [[File:Rk35-blobs.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Android 11 Production Test Build for Quartz64 model A SBC ===&lt;br /&gt;
&lt;br /&gt;
==== Android 11 Stock Image [eMMC Boot] using DD method [20210604] ====&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* This is test build that used during product testing&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 8GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/Quartz64/android/Quartz64_model-A_dd_20210604_stock_android11_emmcboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): e4365753e584d9fce1b8f10f095eede6&lt;br /&gt;
*** File Size: 819MB&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/Quartz64/android/Quartz64_model-A_dd_20210604_stock_android11_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 491c5f7744b0ca0b74ae76e607051836&lt;br /&gt;
*** File Size: 1.10GB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/Quartz64/android/Quartz64_model-A_dd_20210604_stock_android11_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 47a6f0cdac8bad06cb920743849a8894&lt;br /&gt;
*** File Size: 846MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/Quartz64/android/Quartz64_model-A_dd_20210604_stock_android11_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 4e2fed6f5db0d55afdc8a142fc0c4fe1&lt;br /&gt;
*** File Size: 884MB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Android 11 Production Test Build for Quartz64 model A SBC [eMMC Boot] using ROCKChip tools method [20210604] ====&lt;br /&gt;
* Please unzip first and then using [https://files.pine64.org/os/Quartz64//android/RKDevTool_Release_v2.84.zip Rockchip Android tool ver 2.84] to flash in&lt;br /&gt;
* For Windows OS environment, please install the [https://files.pine64.org/os/Quartz64/android/DriverAssitant_v5.1.1.zip DriverAssistant v5.11] driver first &lt;br /&gt;
* This is test build that used during product testing&lt;br /&gt;
* The OTG port located at top USB 2.0 port on top of USB 3.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
** [https://files.pine64.org/os/Quartz64/android/Quartz64_model-A_20210604_stock_android11_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 800f867fdd0d1b2bd7822c156b6067e3&lt;br /&gt;
*** File Size: 812MB&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Android 11 eink SDK for Quartz64 model A SBC  ===&lt;br /&gt;
* The is the Android SDK build for 10.3&amp;quot; eink panel on Quartz64 model A SBC. &lt;br /&gt;
* [http://files.pine64.org/SDK/Quartz64/QUARTZ64-model-A_eink.android11_SDK.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 293a550584298de4fb95ceae18103672&lt;br /&gt;
** File Size: 72.88GB&lt;br /&gt;
** Just the boot blobs (&amp;lt;1MB): [[File:Rk35-blobs.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enclosures ==&lt;br /&gt;
&lt;br /&gt;
(Please expand this section with more cases known to work.)&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;A&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
All enclosures that fit the ROCKPro64 should fit the Quartz64 Model &amp;quot;A&amp;quot;, as the I/O has been laid out the same on purpose.&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Model A&amp;quot; Acrylic Open Enclosure]] - but see the troubleshooting section below.&lt;br /&gt;
* [[ROCKPro64 ABS Enclosure]]&lt;br /&gt;
* [[Quartz64PremiumAluminiumCase|RockPro64 Premium Aluminium Case]]&lt;br /&gt;
* [[ROCKPro64#3D_printable_ITX_mounting_brackets]] (Not an enclosure but allows to mount the board in an ATX/ITX case)&lt;br /&gt;
&lt;br /&gt;
=== Model &amp;quot;B&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Model B&amp;quot; Acrylic Open Enclosure]]&lt;br /&gt;
* the ROCK64 aluminium enclosure '''does not''' work, as the DC input jack is placed differently&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Stability/Boot Issues With Missing Battery Shunt ===&lt;br /&gt;
&lt;br /&gt;
If there is no battery plugged into the board, the jumper labelled &amp;quot;ON/OFF_BATT&amp;quot; must be in place. If this is set wrong, stability issues such as failures to boot will occur.&lt;br /&gt;
&lt;br /&gt;
=== No Ethernet Connectivity ===&lt;br /&gt;
&lt;br /&gt;
Make sure the kernel is built with &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt; set to &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;. Building it as a module (&amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;) and then relying on module auto-loading is unlikely to work, because if the generic PHY driver is built in it will bind to the PHY first, unless you include the motorcomm module in your initramfs.&lt;br /&gt;
&lt;br /&gt;
Note: Starting with [https://salsa.debian.org/kernel-team/linux/-/merge_requests/551 Debian's &amp;lt;code&amp;gt;6.1~rc3-1~exp1&amp;lt;/code&amp;gt; kernel] the module is included, but set to &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; and I (Diederik) have verified that it gets included in the initramfs and '''works''' on Model-A using [https://github.com/Plebian-Linux/quartz64-images CounterPillows quartz64-images]. Both with the kernel included (compiled during image creation with [https://github.com/Plebian-Linux/quartz64-images/commit/2ecbd46778d2d7e8fbb22fd86d39a781ce9aebc1#diff-b79606fb3afea5bd1609ed40b622142f1c98125abcfe89a76a661b0e8e343910 Debian's kernel config]) as with a kernel I compiled myself using tooling the Debian kernel team uses too.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Model A&amp;quot; Acrylic Case Doesn't Fit ===&lt;br /&gt;
&lt;br /&gt;
The Quartz64 does not really fit onto the bottom plate of the [[&amp;quot;Model A&amp;quot; Acrylic Open Enclosure]]. This is because the &amp;quot;Mic&amp;quot; connector at the bottom of the board interferes with one of the posts. A workaround is to find out which post that is (you have a 50% chance of guessing it right, accounting for rotating the board) and then filing away the corner of the post pointing inwards by a few millimetres.&lt;br /&gt;
&lt;br /&gt;
[[File:Quartz64-audio-jack-spacer-issue.jpg]]&lt;br /&gt;
&lt;br /&gt;
An alternate solution may be to place plastic spacers with a smaller outer diameter in between the acrylic bottom plate posts and the SBC board.&lt;br /&gt;
&lt;br /&gt;
=== No GPU Acceleration with Debian &amp;quot;Bullseye&amp;quot; Userland ===&lt;br /&gt;
&lt;br /&gt;
Debian Bullseye ships a Mesa version that is too old to contain the required patches for the RK356x SoC's GPU. You can (at your own risk) [https://wiki.debian.org/DebianTesting use the current Debian Testing version ], called &amp;quot;Bookworm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Wireless Connectivity Doesn't Work ===&lt;br /&gt;
&lt;br /&gt;
ROCKPro64 wireless module may have CYW43455 or CYW43456 chips on board (not sure if this is the same for Quartz64 model B). Both chips are supported by &amp;lt;code&amp;gt;brcmfmac&amp;lt;/code&amp;gt; wi-fi driver and &amp;lt;code&amp;gt;btbcm&amp;lt;/code&amp;gt; bluetooth driver. &lt;br /&gt;
&lt;br /&gt;
For CYW43455 drivers attempt to load &amp;lt;code&amp;gt;/lib/firmware/brcm/brcmfmac43455-sdio.bin&amp;lt;/code&amp;gt; for wi-fi and &amp;lt;code&amp;gt;/lib/firmware/brcm/BCM4345C0.hcd&amp;lt;/code&amp;gt; for bluetooth. Corresponding firmware files for CYW43456 are &amp;lt;code&amp;gt;/lib/firmware/brcm/brcmfmac43456-sdio.bin&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/lib/firmware/brcm/BCM4345C5.hcd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On Manjaro firmware files for both bluetooth and wi-fi on CYW43456 on are provided by &amp;lt;code&amp;gt;ap6256-firmware&amp;lt;/code&amp;gt; package (&amp;lt;code&amp;gt;pacman -S ap6256-firmware&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
However for CYW43455 wi-fi firmware is in the &amp;lt;code&amp;gt;linux-firmware&amp;lt;/code&amp;gt; package and bluetooth is in the &amp;lt;code&amp;gt;firmware-raspberrypi&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;pacman -S linux-firmware firmware-raspberrypi&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;linux-firmware&amp;lt;/code&amp;gt; package is missing device specific symlinks for quartz64-a. To create them execute:&lt;br /&gt;
 # ln -s brcmfmac43455-sdio.bin /lib/firmware/brcm/brcmfmac43455-sdio.pine64,quartz64-a.bin&lt;br /&gt;
 # ln -s brcmfmac43455-sdio.AW-CM256SM.txt /lib/firmware/brcm/brcmfmac43455-sdio.pine64,quartz64-a.txt &lt;br /&gt;
&lt;br /&gt;
As of 2022-10-19 device tree in mainline kernel for Quartz64 model A has wrong configuration for the bluetooth driver. [https://patchwork.kernel.org/project/linux-rockchip/patch/20220926125350.64783-1-leo@nabam.net/ Patch] is submitted to the LKML. It's possible to modify dtb file provided by the current kernel using device tree compiler to enable bluetooth or perform &amp;lt;code&amp;gt;make dtbs&amp;lt;/code&amp;gt; in the patched kernel tree to get updated dtb file (&amp;lt;code&amp;gt;arch/arm64/boot/dts/rockchip/rk3566-quartz64-a.dtb&amp;lt;/code&amp;gt;). Issue manifests itself with following errors in `dmesg`:&lt;br /&gt;
&lt;br /&gt;
  command 0x0c03 tx timeout&lt;br /&gt;
  Bluetooth: hci0: BCM: Reset failed (-110)&lt;br /&gt;
&lt;br /&gt;
== How-To ==&lt;br /&gt;
&lt;br /&gt;
=== Connect Debug UART ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to get debug output is to connect a 3.3V 1.5mbaud capable UART adapter to the board.&lt;br /&gt;
&lt;br /&gt;
To connect it, connect the ground lead to pin 6, and the RX/TX leads to pins 8 and 10 (consider swapping them if you get no output, things are often mislabelled). These pins are &amp;quot;UART2&amp;quot; in the above GPIO table.&lt;br /&gt;
&lt;br /&gt;
Open a serial terminal at 1500000 bauds, e.g.&lt;br /&gt;
&lt;br /&gt;
 $ picocom -b 1500000 /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
=== Disable Heartbeat LED (Linux) ===&lt;br /&gt;
&lt;br /&gt;
The flashing LED is called the &amp;quot;heartbeat LED&amp;quot;, it blinks in a heart rhythm like fashion once the kernel is running. To disable it, you can run&lt;br /&gt;
&lt;br /&gt;
 # echo none &amp;gt; /sys/class/leds/user-led/trigger&lt;br /&gt;
&lt;br /&gt;
On model A LED device is called &amp;quot;diy-led&amp;quot;, not &amp;quot;user-led&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
On a system with systemd, you can do this as soon as the system is ready to be logged in with a systemd unit like this:&lt;br /&gt;
&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Turn off heartbeat LED&lt;br /&gt;
 Wants=multi-user.target&lt;br /&gt;
 After=multi-user.target&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=simple&lt;br /&gt;
 ExecStart=sh -c 'echo none &amp;gt; /sys/class/leds/user-led/trigger'&lt;br /&gt;
&lt;br /&gt;
Place it in &amp;lt;tt&amp;gt;/etc/systemd/system/user-led.service&amp;lt;/tt&amp;gt;, and run&lt;br /&gt;
&lt;br /&gt;
 # systemctl daemon-reload&lt;br /&gt;
 # systemctl enable user-led.service&lt;br /&gt;
&lt;br /&gt;
Upon rebooting, you will now notice that the heartbeat LED will blink during boot-up, but stops blinking as soon as the multi-user target is reached (i.e. the user can log in).&lt;br /&gt;
&lt;br /&gt;
=== SATA on model A ===&lt;br /&gt;
&lt;br /&gt;
On model A USB 3.0 and SATA ports are using the same I/O line and can't be used simultaneously. By default USB 3.0 is enabled in linux device tree and SATA is disabled. FDT modifications are required to turn SATA on. &lt;br /&gt;
&lt;br /&gt;
Following script is tested on Monjaro but should work on the other distros with minimal changes. Device tree compiler package usually provides fdtput command (on Manjaro run: &amp;lt;code&amp;gt; pacman -S dtc&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
 # cp /boot/dtbs/rockchip/rk3566-quartz64-a.dtb /boot/dtbs/rockchip/rk3566-quartz64-a-sata.dtb&lt;br /&gt;
 # fdtput -t s -v /boot/dtbs/rockchip/rk3566-quartz64-a-sata.dtb /usb@fd000000 status disabled&lt;br /&gt;
 # fdtput -t s -v /boot/dtbs/rockchip/rk3566-quartz64-a-sata.dtb /sata@fc400000 status okay&lt;br /&gt;
 # sed -i 's#^FDT /dtbs/rockchip/rk3566-quartz64-a.dtb$#FDT /dtbs/rockchip/rk3566-quartz64-a-sata.dtb#' /boot/extlinux/extlinux.conf&lt;br /&gt;
 # systemctl reboot&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=ROCK64_Software_Releases&amp;diff=13113</id>
		<title>ROCK64 Software Releases</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=ROCK64_Software_Releases&amp;diff=13113"/>
		<updated>2022-05-22T22:20:54Z</updated>

		<summary type="html">&lt;p&gt;Diederik: capitalize the 'l' in LibreELEC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of all available releases for the [[ROCK64]], as well as links to other resources.&lt;br /&gt;
&lt;br /&gt;
= Linux Image Releases =&lt;br /&gt;
&lt;br /&gt;
== Armbian==&lt;br /&gt;
[[File:armbian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Version 5.88 onward support Rock64-v3 board&lt;br /&gt;
* To find out more about Armbian and available options please visit their [https://www.armbian.com/rock64/ site]&lt;br /&gt;
* Armbian pack as 7zip, please unzip first before dd.&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Focal XFCE Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Mainline kernel build&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Focal XFCE Desktop download site]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Bionic XFCE Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Mainline kernel build&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Bionic XFCE DEsktop download site]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: 1234&lt;br /&gt;
&lt;br /&gt;
=== Armbian Debian Buster for Server and Light Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Armbian provides a mainline kernel build images for Debian Buster&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Debian Buster download site]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Focal for Server and Light Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Armbian provides a mainline kernel build images for Ubuntu Focal&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Focal download site]&lt;br /&gt;
&lt;br /&gt;
== AOSC ==&lt;br /&gt;
[[File:aosc.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* To learn more about AOSC, please visit the official [https://aosc.io/ AOSC website]&lt;br /&gt;
* AOSC using LZ4 compression algorithm, please visit the [https://github.com/lz4/lz4 LZ4 github site] for utility&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
* Login with&lt;br /&gt;
** username: aosc&lt;br /&gt;
** password: anthon&lt;br /&gt;
=== AOSC KDE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/kde/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC GNOME Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/gnome/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC MATE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/mate/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC Cinnamon Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/cinnamon/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC XFCE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/xfce/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC LXDE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/lxde/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Manjaro ARM ==&lt;br /&gt;
[[File:Manjaro.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
Manjaro editions for Rock64 are available directly from Manjaro.&lt;br /&gt;
&lt;br /&gt;
[https://manjaro.org/download/#rock64 Manjaro Rock64 Download Page]&lt;br /&gt;
&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* To learn more about Manjaro please visit [https://forum.manjaro.org/tags/manjaroarm Manjaro Forum] &lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
&lt;br /&gt;
== Ubuntu 18.04 Bionic by ayufan ==&lt;br /&gt;
[[File:penguin.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases ayufan ROCK64 Linux Build GitHub]&lt;br /&gt;
* Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock64&lt;br /&gt;
** password: rock64&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic LXDE Desktop (armhf) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-lxde-rock64-0.9.14-1159-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic minimal 64bit (arm64) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-minimal-rock64-0.9.14-1159-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic minimal 32bit (armhf) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-minimal-rock64-0.9.14-1159-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic containers (DockerCE &amp;amp; Kubernetes) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-containers-rock64-0.9.14-1159-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
== Slackware==&lt;br /&gt;
[[File:slackware.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Slackware is a very old, interesting, convenient and easy distribution.&lt;br /&gt;
* Visit the project's website here (https://fail.pp.ua)&lt;br /&gt;
* You can follow the ongoing discussion about Slackware on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=5868)&lt;br /&gt;
* This Slackware build using ZST compression algorithm, please visit the [https://github.com/facebook/zstd ZST github site] for utility&lt;br /&gt;
&lt;br /&gt;
=== Slackware Aarch64 XFCE Community Build Image [microSD Boot] ===&lt;br /&gt;
* System with a graphical shell&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [http://dl.fail.pp.ua/slackware/images/rock64/ Direct download from http://dl.fail.pp.ua and look for slarm64-current-aarch64-xfce-rock64-x.xx.x-build-xxxxxxxx.img.zst]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username : root&lt;br /&gt;
** Password : password&lt;br /&gt;
&lt;br /&gt;
=== Slackware Aarch64 Miniroot Community Build Image [microSD Boot] ===&lt;br /&gt;
* System without a graphical shell&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [http://dl.fail.pp.ua/slackware/images/rock64/ Direct download from http://dl.fail.pp.ua and look for slarm64-current-aarch64-base-rock64-x.xx.x-build-xxxxxxxx.img.zst]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username : root&lt;br /&gt;
** Password : password&lt;br /&gt;
&lt;br /&gt;
* To run the OS on eMMC&lt;br /&gt;
**Flash the image to micro SD, power up the board with micro SD and login&lt;br /&gt;
**Copy the image file to micro SD by using SFTP. The image file must be in .img. ''note : root user are not allow transfer file to micro SD.''&lt;br /&gt;
**After finish copy the file, power off the board and add eMMC module to the board&lt;br /&gt;
**Bootup the board, run below command for flashing to eMMC module&lt;br /&gt;
***&amp;gt;&amp;gt;dd if=[image file] of=/dev/mmcblk1 bs=10M&lt;br /&gt;
****''example : dd if=slack-current-aarch64-xfce_08May18-4.4.126-rock64-build-20180508.img of=/dev/mmcblk1 bs=10M''&lt;br /&gt;
***then edit 2 files in eMMC module:&lt;br /&gt;
***&amp;gt;&amp;gt; mount /dev/mmcblk1p1 /media&lt;br /&gt;
***&amp;gt;&amp;gt; echo &amp;quot;rootdev=/dev/mmcblk1p1&amp;quot; &amp;gt;&amp;gt; /media/boot/uEnv.txt&lt;br /&gt;
***&amp;gt;&amp;gt; sed -i 's:mmcblk0p1:mmcblk1p1:' /media/etc/fstab&lt;br /&gt;
**After done, power off board and remove micro SD. Then bootup with only eMMC module.&lt;br /&gt;
&lt;br /&gt;
== DietPi ==&lt;br /&gt;
[[File:dietpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* DietPi is a '''lightweight''', yet '''easy to setup''' and '''feature-rich''' Linux distribution, based on '''Debian'''.&lt;br /&gt;
* To find out more about DietPi, please visit the [https://dietpi.com/docs/ official documentation].&lt;br /&gt;
* Discuss the ROCK64 build on the [https://forum.pine64.org/showthread.php?tid=12514 PINE64 forum thread].&lt;br /&gt;
* DD image (for 4 GiB micro SD card or eMMC and above)&lt;br /&gt;
** [https://dietpi.com/downloads/images/DietPi_ROCK64-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: '''root'''&lt;br /&gt;
** Password: '''dietpi'''&lt;br /&gt;
&lt;br /&gt;
== LibreELEC (KODI) ==&lt;br /&gt;
[[File:libreelec.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Official LibreELEC KODI Build Image [microSD / eMMC boot] ===&lt;br /&gt;
&lt;br /&gt;
* Unzip and DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
** [https://libreelec.tv/downloads/rockchip/ Direct download from LibreElec site and look for PINE64 LibreELEC-RK3328.arm-x.x.x-rock64.img.gz]&lt;br /&gt;
&lt;br /&gt;
=== Daily Build images (for testing) [microSD / eMMC boot] ===&lt;br /&gt;
&lt;br /&gt;
* Unzip and DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
** [https://test.libreelec.tv/ Direct download from LibreElec site and put 'rock64' in the search box]&lt;br /&gt;
&lt;br /&gt;
== Volumio 2 Digital Audio Player ==&lt;br /&gt;
[[File:volumio.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Volumio is a linux-based headless DAP (digital audio player), which connects to your home stereo system or your DAC&lt;br /&gt;
* Visit the project's website [https://community.volumio.org/t/volumio-2-on-rock64/8192 here]&lt;br /&gt;
* You can follow the ongoing discussion about Volumio on the [https://forum.pine64.org/showthread.php?tid=5322 PINE64 forum]&lt;br /&gt;
&lt;br /&gt;
=== Volumio Digital Audio Player Community Build Image [microSD Boot] [2.528-2019-01-12] ===&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://updates.volumio.org/rock64/volumio/2.861/volumio-2.861-2020-12-22-rock64.img.zip Direct download from volumio.org]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: volumio&lt;br /&gt;
** Password: volumio&lt;br /&gt;
* '''Volumio is controlled using a Web-GUI which can be accessed via a web browser using the boards IP or volumio.local/'''&lt;br /&gt;
&lt;br /&gt;
== Lakka ==&lt;br /&gt;
[[File:lakka.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Lakka Community Build Image [microSD / eMMC Boot] ===&lt;br /&gt;
* [https://www.lakka.tv/ Lakka] The open source game console; a lightweight Linux distribution that transforms the Rock64 into a full blown retrogaming console&lt;br /&gt;
* Visit [https://forum.pine64.org/showthread.php?tid=5354 PINE64 forum] for more information about the Lakka release&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://le.builds.lakka.tv/legacy-2.3/Rockchip.ROCK64.arm/ Direct download from Lakka] &lt;br /&gt;
* [[Lakka|Lakka Basic Setup]]&lt;br /&gt;
&lt;br /&gt;
== Debian ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Debian Installer - Bullseye ===&lt;br /&gt;
* Go to Debian Bullseye's [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/ official d-i concatenateable images] directory&lt;br /&gt;
* Download firmware.rock64-rk3328.img.gz and partition.img.gz&lt;br /&gt;
* Combine the 2 parts into 1 image file: &amp;lt;code&amp;gt;zcat firmware.rock64-rk3328.img.gz partition.img.gz &amp;gt; debian-installer-bullseye-rock64-rk3328.img&amp;lt;/code&amp;gt;* &lt;br /&gt;
* Write the created .img file to microSD card or eMMC Module with &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plug the microSD/eMMC card in the Rock64 and connect a serial console and boot up to start the Debian Installer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;) (for non-Linux systems, consult [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/README.concatenateable_images README.concatenateable_images])&lt;br /&gt;
&lt;br /&gt;
=== Debian Installer - Daily Build (for Bookworm+) ===&lt;br /&gt;
* Go to Debian's daily build [https://d-i.debian.org/daily-images/arm64/daily/netboot/SD-card-images/ official d-i concatenateable images] directory&lt;br /&gt;
* Download firmware.rock64-rk3328.img.gz and partition.img.gz&lt;br /&gt;
* Combine the 2 parts into 1 image file: &amp;lt;code&amp;gt;zcat firmware.rock64-rk3328.img.gz partition.img.gz &amp;gt; debian-installer-daily-build-rock64-rk3328.img&amp;lt;/code&amp;gt;* &lt;br /&gt;
* Write the created .img file to microSD card or eMMC Module with &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plug the microSD/eMMC card in the Rock64 and boot up to start the Debian Installer. It should work with both a [https://bugs.debian.org/1009014 normal display and a serial console]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;) (for non-Linux systems, consult [https://d-i.debian.org/daily-images/arm64/daily/netboot/SD-card-images/README.concatenateable_images README.concatenateable_images])&lt;br /&gt;
&lt;br /&gt;
== Debian by ayufan ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Debian Stretch Minimal 64bit (arm64) OS Image [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-minimal-rock64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 212MB&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock64&lt;br /&gt;
** password: rock64&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309&amp;amp;pid=39314#pid39314 here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debian by mrfixit2001 ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Minimal Debian [microSD / eMMC Boot] ===&lt;br /&gt;
** DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://github.com/mrfixit2001/debian_builds/releases Direct download from mrfixit2001's github]&lt;br /&gt;
** Version 190514 onward support Rock64-v3 board&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock&lt;br /&gt;
** password: rock&lt;br /&gt;
&lt;br /&gt;
== OpenMediaVault ==&lt;br /&gt;
[[File:omv.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Jessie OpenMediaVault Community Build Image [microSD to eMMC] [0.5.15-136] by ayufan ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page]&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper. After boot, it will prompt for confirmation 'Y' to start writing the new image to the eMMC. Then follow the instructions on the screen&lt;br /&gt;
'''* There's a bug with eMMC in the &amp;quot;Stable&amp;quot; version of openmediavault linked from the wiki page. In order to use eMMC, please you need to be on the latest (pre-release) version which is linked here https://github.com/ayufan-rock64/linux-build/releases'''&lt;br /&gt;
*&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/omv/jessie-openmediavault-rock64-0.5.15-136-armhf_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 7E423EF9146EA15403E7D1B4EA30594A&lt;br /&gt;
** File Size: 487MB&lt;br /&gt;
** Credentials (console/ssh, except OMV): rock64/rock64&lt;br /&gt;
** Credentials (OMV for Web): admin/openmediavault&lt;br /&gt;
** Credentials (OMV for console): root/openmediavault&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
&lt;br /&gt;
=== Stretch OpenMediaVault OS Image 32bit (armhf) [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page to learn more]&lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github] ''(pay attention to the release tag. Don't accidentaly choose a pre-release build)''&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rock64-0.8.3-1141-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 391MB&lt;br /&gt;
* WebGUI Login:&lt;br /&gt;
** username: admin&lt;br /&gt;
** password: openmediavault&lt;br /&gt;
* SSH/ Console Login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: openmediavault &lt;br /&gt;
*** '''NB! You need to enable root login in OMV WebGUI'''&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
&lt;br /&gt;
=== Stretch OpenMediaVault OS Image 64bit (arm64) [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page to learn more]&lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github] ''(pay attention to the release tag. Don't accidentaly choose a pre-release build)''&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rockpro64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 340MB&lt;br /&gt;
* WebGUI Login:&lt;br /&gt;
** username: admin&lt;br /&gt;
** password: openmediavault&lt;br /&gt;
* SSH/ Console Login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: openmediavault &lt;br /&gt;
*** '''NB! You need to enable root login in OMV WebGUI'''&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
&lt;br /&gt;
== NextCloudPi==&lt;br /&gt;
[[File:nextcloudpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== NextCloudPi Community Build Image [microSD / eMMC Boot] [03-10-19] ===&lt;br /&gt;
* NextCloudPi comes not only with NextCloud preinstalled, but also with management tools for backups, SSL certificates, SAMBA, enhanced security and more.&lt;br /&gt;
* Visit the project's [https://nextcloudpi.com website]&lt;br /&gt;
* You can follow the ongoing discussion about NextCloudPi on the [https://forum.pine64.org/showthread.php?tid=6047 PINE64 forum]&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/nextcloudplus/NextCloudPi_Rock64_03-10-19.img.xz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZ file): 1432c8b8082696f38770004b3cb5ac1e&lt;br /&gt;
*** File Size: 310MB&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: 1234&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Recalbox ==&lt;br /&gt;
[[File:RB.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Recalbox Community Build Image [microSD / eMMC boot] ===&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* Recalbox allows you to re-play a variety of videogame consoles and platforms in your living room, with ease! &lt;br /&gt;
* To find out more about Recalbox and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7111 PINE64 forum thread]&lt;br /&gt;
*Visit the project's [https://www.recalbox.com/ website]&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://github.com/mrfixit2001/recalbox_rock64/releases Direct download latest release build from mrfixit2001 github]&lt;br /&gt;
&lt;br /&gt;
== Cent OS [No Longer Maintained] ==&lt;br /&gt;
[[File:Centos.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== CentOS-7 Community Build Image [microSD Boot] ===&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* Centos-7.4.1708 with kernel from Armbian-5.69 (minimum build)&lt;br /&gt;
** DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://github.com/Project31/centos-pine64/releases/download/v7.4.1708-v5.59/centos7-rock64.img.xz Project31 download mirrors]&lt;br /&gt;
* To find out more on installation process, please visit their [https://project31.github.io/pine64/ Project31 site]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: centos&lt;br /&gt;
&lt;br /&gt;
== NEMS Linux ==&lt;br /&gt;
[[File:nems.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
https://files.pine64.org/sw/pine64_installer/json/nems.jpg&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* NEMS stands for &amp;quot;Nagios Enterprise Monitoring Server&amp;quot; and it is a modern pre-configured, customized and ready-to-deploy Nagios Core image designed to run on low-cost micro computers.&lt;br /&gt;
* To find out more about NEMS on the PINE64 and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7306 PINE64 forum thread]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: nemsadmin&lt;br /&gt;
** Password: nemsadmin&lt;br /&gt;
* [https://docs.nemslinux.com/installation  Installation Guide]&lt;br /&gt;
* To find out more on NEM Linux, please visit their [https://nemslinux.com/ site]&lt;br /&gt;
&lt;br /&gt;
=== NEMS Linux [microSD / eMMC boot] [v1.5 - build 2] ===&lt;br /&gt;
* DD image (for 16GB microSD card and above)&lt;br /&gt;
** [https://nemslinux.com/download/nagios-for-pine64.php Download torrent seed from NEMS Linux]&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/nems/NEMS_v1.5-Rock64-Build2.zip Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZ file): 6e2088922c5d197db8b8ba3057120389&lt;br /&gt;
*** File Size: 1.30GB&lt;br /&gt;
&lt;br /&gt;
== Fedora  [No Longer Maintained] ==&lt;br /&gt;
[[File:fedora1.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Fedora Minimal Community Build Image [microSD boot] [Preliminary Build] ===&lt;br /&gt;
* [https://github.com/fire219/rock64-fedora/releases/ Follow up on Fire219 github]&lt;br /&gt;
&lt;br /&gt;
= BSD Image Releases =&lt;br /&gt;
&lt;br /&gt;
==NetBSD==&lt;br /&gt;
[[File:netbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* To learn more about NetBSD please visit [https://www.netbsd.org/ NetBSD main page] &lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://www.invisible.ca/arm/ Direct download latest release build from NetBSD by select ROCK64]&lt;br /&gt;
** size: 280MB&lt;br /&gt;
* Console and SSH default login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: [none]&lt;br /&gt;
* Instructions concerning enabling SSH can be found [https://www.netbsd.org/docs/guide/en/chap-boot.html#chap-boot-ssh here]&lt;br /&gt;
&lt;br /&gt;
==OpenBSD==&lt;br /&gt;
[[File:Puffy_mascot_openbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* You can install OpenBSD on your Rock64 by following [https://github.com/krjdev/rock64_openbsd these instructions]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FreeBSD==&lt;br /&gt;
&amp;lt;div style=float:right&amp;gt;[[File:Freebsd_Logo.png|right|100px]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The [https://wiki.freebsd.org/arm/RockChip#Rock64 RockChip FreeBSD page] has instructions for installing FreeBSD.&lt;br /&gt;
&lt;br /&gt;
* Images for various FreeBSD releases can be found [https://www.freebsd.org/where/ here]&lt;br /&gt;
* Version 13.0 and greater include prebuilt images. Find the link in the SD Card Images section and download the ROCK64 image.&lt;br /&gt;
* SSH is enable by default and can be accessed with the following account:&lt;br /&gt;
:: username: freebsd&lt;br /&gt;
:: password: freebsd&lt;br /&gt;
* The root account credentials are:&lt;br /&gt;
:: username: root&lt;br /&gt;
:: password: root&lt;br /&gt;
&lt;br /&gt;
= Android Image Releases =&lt;br /&gt;
&lt;br /&gt;
== Android TV 9.x eMMC (No Google Play) ==&lt;br /&gt;
[[File:android_9.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''* For install Playstore on Android 9.0, please follows [https://forum.pine64.org/showthread.php?tid=8655 this forum thread]'''&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Image [eMMC Boot] using DD method [20190617] ===&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): D985808B4CA912201372DC2F5F322AE9&lt;br /&gt;
*** File Size: 560MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 5D65A44F78BD08B4584413C8BEEAAF05&lt;br /&gt;
*** File Size: 579MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): B34D1C119386CBA1658E5F0FB9E4413D&lt;br /&gt;
*** File Size: 615MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Image [eMMC Boot] using ROCKChip tools method [20190617] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Android TV build version&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_20190617_stock_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 9B717263E7749A732C8B5C7D7D59C5C6&lt;br /&gt;
*** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [eMMC Boot] using DD method [20190618] ===&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): DBB5B3D46B77A33BC9F09173C9788E6E&lt;br /&gt;
*** File Size: 561MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 5F3B97EA72B3227082500B3FB1FAB44A&lt;br /&gt;
*** File Size: 579MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 6833B124ABA3AC2269A6B4F51EFD1109&lt;br /&gt;
*** File Size: 615MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [eMMC Boot] using ROCKChip tools method [20190618] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* [https://wiki.pine64.org/index.php/NOOB#Flashing_to_eMMC_using_Rockchip_Tools_.28Rock64_Only.29 Guide to flashing eMMC using Rockchip Tools]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/ROCK64_20190618_stock_rooted_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): FC5F80C3A939AD0F8DCE5B85F22D20A1&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
== Android 9.x (No Google Play) ==&lt;br /&gt;
[[File:android_9.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [microSD Boot] using DD method [20190621] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* DD image for 8GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): A250B72CD6AAB24B8156DE08EB15530C&lt;br /&gt;
*** File Size: 546MB&lt;br /&gt;
* DD image for 16GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 09A6BACD71159853D5E4C6C21C883B0F&lt;br /&gt;
*** File Size: 556MB&lt;br /&gt;
* DD image for 32GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): C68DC5D96F1C546B96EC690CE7BFE910&lt;br /&gt;
*** File Size: 574MB&lt;br /&gt;
* DD image for 64GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 4EFC87B4CEE4C7655618DCA95EF7DD0D&lt;br /&gt;
*** File Size: 707MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [microSD Boot] using ROCKChip SDDisk tools method [20190621] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/SDDiskTool_v1.57.zip Rockchip SDDisk Tool ver 1.57]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/ROCK64_20190621_stock_rooted_android_9.0_sdboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): EE00D309745F842213E21B2F1E20C510&lt;br /&gt;
** File Size: 539MB&lt;br /&gt;
&lt;br /&gt;
== Android 8.x TV eMMC (preinstalled Google Play Store) ==&lt;br /&gt;
[[File:android_8.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [eMMC Boot] using DD method [20180606] ===&lt;br /&gt;
* DD image to eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20180606_stock_android_8.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): C05846B89A6483DA911CEA604627524F&lt;br /&gt;
** File Size: 561MB&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [eMMC Boot] using ROCKChip tools method [20180606] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port&lt;br /&gt;
* [https://wiki.pine64.org/index.php/NOOB#Flashing_to_eMMC_using_Rockchip_Tools_.28Rock64_Only.29 Guide to flashing eMMC using Rockchip Tools]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_android8.1_emmc_boot_v1.1.zip Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 9738F060D2F62A83637797363D2B38C9&lt;br /&gt;
** File Size: 752MB&lt;br /&gt;
&lt;br /&gt;
== Android 8.x TV ==&lt;br /&gt;
[[File:android_8.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [microSD Boot] [20180623] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20180623_stock_android_8.1_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 85372A568C114ADE7CD9632CEBA193E9&lt;br /&gt;
** File Size: 575MB&lt;br /&gt;
&lt;br /&gt;
== Android 7.x eMMC ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [microSD to eMMC] [Rooted] [20171204] ===&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper, then it will start writing the new image to the eMMC. Please allow around 1 minute of boot up time before UI is presented via HDMI&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 43443467DFCAEDE767556843EB4D6707&lt;br /&gt;
** File Size: 558MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [eMMC Boot] [Rooted] [20171204] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 7C831F9E6B4311A3B3D4743FBBB628D0&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
== Android 7.x ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [microSD Boot] [Rooted] [20171204] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 56520ED3DB6E587DA140AD314A055EB2&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
== Android TV 7.x eMMC ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [microSD to eMMC] [v0.3.4-r86] by ayufan ===&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper. After boot, it will prompt for confirmation 'Y' to start writing the new image to the eMMC. Then follow the instructions on the screen&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/tag/0.3.4 Release notes on ayufan Android 7.1 github]&lt;br /&gt;
* Please allow 5 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/android-7.1-rock-64-rock64_atv-v0.3.4-r86-raw_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 6FD1FA4BE87EC2D4E0862F66541BC6F0&lt;br /&gt;
** File Size: 716MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [eMMC] by ayufan ===&lt;br /&gt;
* For eMMC flash-all image, please unzip first and then use Android tool to flash in&lt;br /&gt;
** [https://github.com/ayufan-rock64/android-7.1/releases/latest Direct download latest release build from ayufan github and look for android-7.1-rock-64-rock64_atv-x.x.x-xx-update.zip]&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
== Android TV 7.x ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [microSD Boot] by ayufan ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/latest Direct download latest release build from ayufan github and look for android-7.1-rock-64-rock64_atv-x.x.x-xx-raw.img.gz]&lt;br /&gt;
&lt;br /&gt;
= Android SDK =&lt;br /&gt;
&lt;br /&gt;
=== Android P SDK [v9.0] ===&lt;br /&gt;
* [https://files.pine64.org//SDK/ROCK64/ROCK64_SDK_android9.0.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 1EAC08942E238293E3AF11C7890DF307&lt;br /&gt;
** File Size: 104.34GB&lt;br /&gt;
&lt;br /&gt;
[[Category:Rock64]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=QuartzPro64_Development&amp;diff=12998</id>
		<title>QuartzPro64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=QuartzPro64_Development&amp;diff=12998"/>
		<updated>2022-05-05T01:54:10Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Update 'Basic RK3588 Support' links on patchwork to v2 (from v1)&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;
&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;
= 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;
| 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 (once it's merged)&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;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review&amp;lt;sup&amp;gt;[https://lore.kernel.org/all/20220211202728.6146-1-alyssa.rosenzweig@collabora.com/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| Initial support in Mesa as of 22.2&amp;lt;sup&amp;gt;[https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16035]&amp;lt;/sup&amp;gt;, changes specific to this SoC may be needed to both kernel and Mesa.&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;
| 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;
| 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;
| 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. Very unfinished GStreamer implementation, doesn't allow for e.g. controlling the quality.&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; | Audio &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-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
| Should be exactly the same as RK356x (according to the TRM), just needs compatible string copypasted over probably&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=638462]&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; | SD/MMC&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=638462]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;sdhci-of-dwcmshc&amp;lt;/code&amp;gt;&lt;br /&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:LightYellow; text-align:center;&amp;quot;|linux-next&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=fdc33eba11c5919199f3d13dc53571cc7bf19d7d]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;pinctrl-rockchip&amp;lt;/code&amp;gt;&lt;br /&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:LightYellow; text-align:center;&amp;quot;|In review&amp;lt;sup&amp;gt;[https://patchwork.kernel.org/project/linux-rockchip/list/?series=638462]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-gpio&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, it will show up as a FT232 USB Serial adapter. Baud rate is as usual 1.5mbauds or 1500000.&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;
== 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;
&lt;br /&gt;
&lt;br /&gt;
&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;
RK806-2, probably RK808 compatible?&lt;br /&gt;
&lt;br /&gt;
Verify this once we have access to SDK sources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Resources =&lt;br /&gt;
&lt;br /&gt;
* [https://patchwork.kernel.org/project/linux-rockchip/list/ linux-rockchip patchwork]&lt;br /&gt;
&lt;br /&gt;
[[Category:Rockchip RK3588]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=ROCK64_Software_Releases&amp;diff=12977</id>
		<title>ROCK64 Software Releases</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=ROCK64_Software_Releases&amp;diff=12977"/>
		<updated>2022-05-02T21:16:44Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Convert URL into clickable link; change 'as' -&amp;gt; 'and'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of all available releases for the [[ROCK64]], as well as links to other resources.&lt;br /&gt;
&lt;br /&gt;
= Linux Image Releases =&lt;br /&gt;
&lt;br /&gt;
== Armbian==&lt;br /&gt;
[[File:armbian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Version 5.88 onward support Rock64-v3 board&lt;br /&gt;
* To find out more about Armbian and available options please visit their [https://www.armbian.com/rock64/ site]&lt;br /&gt;
* Armbian pack as 7zip, please unzip first before dd.&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Focal XFCE Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Mainline kernel build&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Focal XFCE Desktop download site]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Bionic XFCE Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Mainline kernel build&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Bionic XFCE DEsktop download site]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: 1234&lt;br /&gt;
&lt;br /&gt;
=== Armbian Debian Buster for Server and Light Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Armbian provides a mainline kernel build images for Debian Buster&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Debian Buster download site]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Focal for Server and Light Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Armbian provides a mainline kernel build images for Ubuntu Focal&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Focal download site]&lt;br /&gt;
&lt;br /&gt;
== AOSC ==&lt;br /&gt;
[[File:aosc.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* To learn more about AOSC, please visit the official [https://aosc.io/ AOSC website]&lt;br /&gt;
* AOSC using LZ4 compression algorithm, please visit the [https://github.com/lz4/lz4 LZ4 github site] for utility&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
* Login with&lt;br /&gt;
** username: aosc&lt;br /&gt;
** password: anthon&lt;br /&gt;
=== AOSC KDE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/kde/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC GNOME Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/gnome/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC MATE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/mate/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC Cinnamon Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/cinnamon/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC XFCE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/xfce/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC LXDE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/lxde/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Manjaro ARM ==&lt;br /&gt;
[[File:Manjaro.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
Manjaro editions for Rock64 are available directly from Manjaro.&lt;br /&gt;
&lt;br /&gt;
[https://manjaro.org/download/#rock64 Manjaro Rock64 Download Page]&lt;br /&gt;
&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* To learn more about Manjaro please visit [https://forum.manjaro.org/tags/manjaroarm Manjaro Forum] &lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
&lt;br /&gt;
== Ubuntu 18.04 Bionic by ayufan ==&lt;br /&gt;
[[File:penguin.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases ayufan ROCK64 Linux Build GitHub]&lt;br /&gt;
* Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock64&lt;br /&gt;
** password: rock64&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic LXDE Desktop (armhf) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-lxde-rock64-0.9.14-1159-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic minimal 64bit (arm64) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-minimal-rock64-0.9.14-1159-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic minimal 32bit (armhf) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-minimal-rock64-0.9.14-1159-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic containers (DockerCE &amp;amp; Kubernetes) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-containers-rock64-0.9.14-1159-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
== Slackware==&lt;br /&gt;
[[File:slackware.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Slackware is a very old, interesting, convenient and easy distribution.&lt;br /&gt;
* Visit the project's website here (https://fail.pp.ua)&lt;br /&gt;
* You can follow the ongoing discussion about Slackware on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=5868)&lt;br /&gt;
* This Slackware build using ZST compression algorithm, please visit the [https://github.com/facebook/zstd ZST github site] for utility&lt;br /&gt;
&lt;br /&gt;
=== Slackware Aarch64 XFCE Community Build Image [microSD Boot] ===&lt;br /&gt;
* System with a graphical shell&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [http://dl.fail.pp.ua/slackware/images/rock64/ Direct download from http://dl.fail.pp.ua and look for slarm64-current-aarch64-xfce-rock64-x.xx.x-build-xxxxxxxx.img.zst]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username : root&lt;br /&gt;
** Password : password&lt;br /&gt;
&lt;br /&gt;
=== Slackware Aarch64 Miniroot Community Build Image [microSD Boot] ===&lt;br /&gt;
* System without a graphical shell&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [http://dl.fail.pp.ua/slackware/images/rock64/ Direct download from http://dl.fail.pp.ua and look for slarm64-current-aarch64-base-rock64-x.xx.x-build-xxxxxxxx.img.zst]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username : root&lt;br /&gt;
** Password : password&lt;br /&gt;
&lt;br /&gt;
* To run the OS on eMMC&lt;br /&gt;
**Flash the image to micro SD, power up the board with micro SD and login&lt;br /&gt;
**Copy the image file to micro SD by using SFTP. The image file must be in .img. ''note : root user are not allow transfer file to micro SD.''&lt;br /&gt;
**After finish copy the file, power off the board and add eMMC module to the board&lt;br /&gt;
**Bootup the board, run below command for flashing to eMMC module&lt;br /&gt;
***&amp;gt;&amp;gt;dd if=[image file] of=/dev/mmcblk1 bs=10M&lt;br /&gt;
****''example : dd if=slack-current-aarch64-xfce_08May18-4.4.126-rock64-build-20180508.img of=/dev/mmcblk1 bs=10M''&lt;br /&gt;
***then edit 2 files in eMMC module:&lt;br /&gt;
***&amp;gt;&amp;gt; mount /dev/mmcblk1p1 /media&lt;br /&gt;
***&amp;gt;&amp;gt; echo &amp;quot;rootdev=/dev/mmcblk1p1&amp;quot; &amp;gt;&amp;gt; /media/boot/uEnv.txt&lt;br /&gt;
***&amp;gt;&amp;gt; sed -i 's:mmcblk0p1:mmcblk1p1:' /media/etc/fstab&lt;br /&gt;
**After done, power off board and remove micro SD. Then bootup with only eMMC module.&lt;br /&gt;
&lt;br /&gt;
== DietPi ==&lt;br /&gt;
[[File:dietpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* DietPi is a '''lightweight''', yet '''easy to setup''' and '''feature-rich''' Linux distribution, based on '''Debian'''.&lt;br /&gt;
* To find out more about DietPi, please visit the [https://dietpi.com/docs/ official documentation].&lt;br /&gt;
* Discuss the ROCK64 build on the [https://forum.pine64.org/showthread.php?tid=12514 PINE64 forum thread].&lt;br /&gt;
* DD image (for 4 GiB micro SD card or eMMC and above)&lt;br /&gt;
** [https://dietpi.com/downloads/images/DietPi_ROCK64-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: '''root'''&lt;br /&gt;
** Password: '''dietpi'''&lt;br /&gt;
&lt;br /&gt;
== LibreELEC (KODI) ==&lt;br /&gt;
[[File:libreelec.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Official LibreElEC KODI Build Image [microSD / eMMC boot] ===&lt;br /&gt;
&lt;br /&gt;
* Unzip and DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
** [https://libreelec.tv/downloads/rockchip/ Direct download from LibreElec site and look for PINE64 LibreELEC-RK3328.arm-x.x.x-rock64.img.gz]&lt;br /&gt;
&lt;br /&gt;
=== Daily Build images (for testing) [microSD / eMMC boot] ===&lt;br /&gt;
&lt;br /&gt;
* Unzip and DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
** [https://test.libreelec.tv/ Direct download from LibreElec site and put 'rock64' in the search box]&lt;br /&gt;
&lt;br /&gt;
== Volumio 2 Digital Audio Player ==&lt;br /&gt;
[[File:volumio.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Volumio is a linux-based headless DAP (digital audio player), which connects to your home stereo system or your DAC&lt;br /&gt;
* Visit the project's website [https://community.volumio.org/t/volumio-2-on-rock64/8192 here]&lt;br /&gt;
* You can follow the ongoing discussion about Volumio on the [https://forum.pine64.org/showthread.php?tid=5322 PINE64 forum]&lt;br /&gt;
&lt;br /&gt;
=== Volumio Digital Audio Player Community Build Image [microSD Boot] [2.528-2019-01-12] ===&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://updates.volumio.org/rock64/volumio/2.861/volumio-2.861-2020-12-22-rock64.img.zip Direct download from volumio.org]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: volumio&lt;br /&gt;
** Password: volumio&lt;br /&gt;
* '''Volumio is controlled using a Web-GUI which can be accessed via a web browser using the boards IP or volumio.local/'''&lt;br /&gt;
&lt;br /&gt;
== Lakka ==&lt;br /&gt;
[[File:lakka.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Lakka Community Build Image [microSD / eMMC Boot] ===&lt;br /&gt;
* [https://www.lakka.tv/ Lakka] The open source game console; a lightweight Linux distribution that transforms the Rock64 into a full blown retrogaming console&lt;br /&gt;
* Visit [https://forum.pine64.org/showthread.php?tid=5354 PINE64 forum] for more information about the Lakka release&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://le.builds.lakka.tv/legacy-2.3/Rockchip.ROCK64.arm/ Direct download from Lakka] &lt;br /&gt;
* [[Lakka|Lakka Basic Setup]]&lt;br /&gt;
&lt;br /&gt;
== Debian ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Debian Installer - Bullseye ===&lt;br /&gt;
* Go to Debian Bullseye's [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/ official d-i concatenateable images] directory&lt;br /&gt;
* Download firmware.rock64-rk3328.img.gz and partition.img.gz&lt;br /&gt;
* Combine the 2 parts into 1 image file: &amp;lt;code&amp;gt;zcat firmware.rock64-rk3328.img.gz partition.img.gz &amp;gt; debian-installer-bullseye-rock64-rk3328.img&amp;lt;/code&amp;gt;* &lt;br /&gt;
* Write the created .img file to microSD card or eMMC Module with &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plug the microSD/eMMC card in the Rock64 and connect a serial console and boot up to start the Debian Installer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;) (for non-Linux systems, consult [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/README.concatenateable_images README.concatenateable_images])&lt;br /&gt;
&lt;br /&gt;
=== Debian Installer - Daily Build (for Bookworm+) ===&lt;br /&gt;
* Go to Debian's daily build [https://d-i.debian.org/daily-images/arm64/daily/netboot/SD-card-images/ official d-i concatenateable images] directory&lt;br /&gt;
* Download firmware.rock64-rk3328.img.gz and partition.img.gz&lt;br /&gt;
* Combine the 2 parts into 1 image file: &amp;lt;code&amp;gt;zcat firmware.rock64-rk3328.img.gz partition.img.gz &amp;gt; debian-installer-daily-build-rock64-rk3328.img&amp;lt;/code&amp;gt;* &lt;br /&gt;
* Write the created .img file to microSD card or eMMC Module with &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plug the microSD/eMMC card in the Rock64 and boot up to start the Debian Installer. It should work with both a [https://bugs.debian.org/1009014 normal display and a serial console]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;) (for non-Linux systems, consult [https://d-i.debian.org/daily-images/arm64/daily/netboot/SD-card-images/README.concatenateable_images README.concatenateable_images])&lt;br /&gt;
&lt;br /&gt;
== Debian by ayufan ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Debian Stretch Minimal 64bit (arm64) OS Image [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-minimal-rock64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 212MB&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock64&lt;br /&gt;
** password: rock64&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309&amp;amp;pid=39314#pid39314 here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debian by mrfixit2001 ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Minimal Debian [microSD / eMMC Boot] ===&lt;br /&gt;
** DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://github.com/mrfixit2001/debian_builds/releases Direct download from mrfixit2001's github]&lt;br /&gt;
** Version 190514 onward support Rock64-v3 board&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock&lt;br /&gt;
** password: rock&lt;br /&gt;
&lt;br /&gt;
== OpenMediaVault ==&lt;br /&gt;
[[File:omv.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Jessie OpenMediaVault Community Build Image [microSD to eMMC] [0.5.15-136] by ayufan ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page]&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper. After boot, it will prompt for confirmation 'Y' to start writing the new image to the eMMC. Then follow the instructions on the screen&lt;br /&gt;
'''* There's a bug with eMMC in the &amp;quot;Stable&amp;quot; version of openmediavault linked from the wiki page. In order to use eMMC, please you need to be on the latest (pre-release) version which is linked here https://github.com/ayufan-rock64/linux-build/releases'''&lt;br /&gt;
*&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/omv/jessie-openmediavault-rock64-0.5.15-136-armhf_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 7E423EF9146EA15403E7D1B4EA30594A&lt;br /&gt;
** File Size: 487MB&lt;br /&gt;
** Credentials (console/ssh, except OMV): rock64/rock64&lt;br /&gt;
** Credentials (OMV for Web): admin/openmediavault&lt;br /&gt;
** Credentials (OMV for console): root/openmediavault&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
&lt;br /&gt;
=== Stretch OpenMediaVault OS Image 32bit (armhf) [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page to learn more]&lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github] ''(pay attention to the release tag. Don't accidentaly choose a pre-release build)''&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rock64-0.8.3-1141-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 391MB&lt;br /&gt;
* WebGUI Login:&lt;br /&gt;
** username: admin&lt;br /&gt;
** password: openmediavault&lt;br /&gt;
* SSH/ Console Login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: openmediavault &lt;br /&gt;
*** '''NB! You need to enable root login in OMV WebGUI'''&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
&lt;br /&gt;
=== Stretch OpenMediaVault OS Image 64bit (arm64) [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page to learn more]&lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github] ''(pay attention to the release tag. Don't accidentaly choose a pre-release build)''&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rockpro64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 340MB&lt;br /&gt;
* WebGUI Login:&lt;br /&gt;
** username: admin&lt;br /&gt;
** password: openmediavault&lt;br /&gt;
* SSH/ Console Login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: openmediavault &lt;br /&gt;
*** '''NB! You need to enable root login in OMV WebGUI'''&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
&lt;br /&gt;
== NextCloudPi==&lt;br /&gt;
[[File:nextcloudpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== NextCloudPi Community Build Image [microSD / eMMC Boot] [03-10-19] ===&lt;br /&gt;
* NextCloudPi comes not only with NextCloud preinstalled, but also with management tools for backups, SSL certificates, SAMBA, enhanced security and more.&lt;br /&gt;
* Visit the project's [https://nextcloudpi.com website]&lt;br /&gt;
* You can follow the ongoing discussion about NextCloudPi on the [https://forum.pine64.org/showthread.php?tid=6047 PINE64 forum]&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/nextcloudplus/NextCloudPi_Rock64_03-10-19.img.xz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZ file): 1432c8b8082696f38770004b3cb5ac1e&lt;br /&gt;
*** File Size: 310MB&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: 1234&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Recalbox ==&lt;br /&gt;
[[File:RB.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Recalbox Community Build Image [microSD / eMMC boot] ===&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* Recalbox allows you to re-play a variety of videogame consoles and platforms in your living room, with ease! &lt;br /&gt;
* To find out more about Recalbox and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7111 PINE64 forum thread]&lt;br /&gt;
*Visit the project's [https://www.recalbox.com/ website]&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://github.com/mrfixit2001/recalbox_rock64/releases Direct download latest release build from mrfixit2001 github]&lt;br /&gt;
&lt;br /&gt;
== Cent OS [No Longer Maintained] ==&lt;br /&gt;
[[File:Centos.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== CentOS-7 Community Build Image [microSD Boot] ===&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* Centos-7.4.1708 with kernel from Armbian-5.69 (minimum build)&lt;br /&gt;
** DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://github.com/Project31/centos-pine64/releases/download/v7.4.1708-v5.59/centos7-rock64.img.xz Project31 download mirrors]&lt;br /&gt;
* To find out more on installation process, please visit their [https://project31.github.io/pine64/ Project31 site]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: centos&lt;br /&gt;
&lt;br /&gt;
== NEMS Linux ==&lt;br /&gt;
[[File:nems.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
https://files.pine64.org/sw/pine64_installer/json/nems.jpg&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* NEMS stands for &amp;quot;Nagios Enterprise Monitoring Server&amp;quot; and it is a modern pre-configured, customized and ready-to-deploy Nagios Core image designed to run on low-cost micro computers.&lt;br /&gt;
* To find out more about NEMS on the PINE64 and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7306 PINE64 forum thread]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: nemsadmin&lt;br /&gt;
** Password: nemsadmin&lt;br /&gt;
* [https://docs.nemslinux.com/installation  Installation Guide]&lt;br /&gt;
* To find out more on NEM Linux, please visit their [https://nemslinux.com/ site]&lt;br /&gt;
&lt;br /&gt;
=== NEMS Linux [microSD / eMMC boot] [v1.5 - build 2] ===&lt;br /&gt;
* DD image (for 16GB microSD card and above)&lt;br /&gt;
** [https://nemslinux.com/download/nagios-for-pine64.php Download torrent seed from NEMS Linux]&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/nems/NEMS_v1.5-Rock64-Build2.zip Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZ file): 6e2088922c5d197db8b8ba3057120389&lt;br /&gt;
*** File Size: 1.30GB&lt;br /&gt;
&lt;br /&gt;
== Fedora  [No Longer Maintained] ==&lt;br /&gt;
[[File:fedora1.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Fedora Minimal Community Build Image [microSD boot] [Preliminary Build] ===&lt;br /&gt;
* [https://github.com/fire219/rock64-fedora/releases/ Follow up on Fire219 github]&lt;br /&gt;
&lt;br /&gt;
= BSD Image Releases =&lt;br /&gt;
&lt;br /&gt;
==NetBSD==&lt;br /&gt;
[[File:netbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* To learn more about NetBSD please visit [https://www.netbsd.org/ NetBSD main page] &lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://www.invisible.ca/arm/ Direct download latest release build from NetBSD by select ROCK64]&lt;br /&gt;
** size: 280MB&lt;br /&gt;
* Console and SSH default login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: [none]&lt;br /&gt;
* Instructions concerning enabling SSH can be found [https://www.netbsd.org/docs/guide/en/chap-boot.html#chap-boot-ssh here]&lt;br /&gt;
&lt;br /&gt;
==OpenBSD==&lt;br /&gt;
[[File:Puffy_mascot_openbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* You can install OpenBSD on your Rock64 by following [https://github.com/krjdev/rock64_openbsd these instructions]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FreeBSD==&lt;br /&gt;
&amp;lt;div style=float:right&amp;gt;[[File:Freebsd_Logo.png|right|100px]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The [https://wiki.freebsd.org/arm/RockChip#Rock64 RockChip FreeBSD page] has instructions for installing FreeBSD.&lt;br /&gt;
&lt;br /&gt;
* Images for various FreeBSD releases can be found [https://www.freebsd.org/where/ here]&lt;br /&gt;
* Version 13.0 and greater include prebuilt images. Find the link in the SD Card Images section and download the ROCK64 image.&lt;br /&gt;
* SSH is enable by default and can be accessed with the following account:&lt;br /&gt;
:: username: freebsd&lt;br /&gt;
:: password: freebsd&lt;br /&gt;
* The root account credentials are:&lt;br /&gt;
:: username: root&lt;br /&gt;
:: password: root&lt;br /&gt;
&lt;br /&gt;
= Android Image Releases =&lt;br /&gt;
&lt;br /&gt;
== Android TV 9.x eMMC (No Google Play) ==&lt;br /&gt;
[[File:android_9.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''* For install Playstore on Android 9.0, please follows [https://forum.pine64.org/showthread.php?tid=8655 this forum thread]'''&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Image [eMMC Boot] using DD method [20190617] ===&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): D985808B4CA912201372DC2F5F322AE9&lt;br /&gt;
*** File Size: 560MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 5D65A44F78BD08B4584413C8BEEAAF05&lt;br /&gt;
*** File Size: 579MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): B34D1C119386CBA1658E5F0FB9E4413D&lt;br /&gt;
*** File Size: 615MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Image [eMMC Boot] using ROCKChip tools method [20190617] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Android TV build version&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_20190617_stock_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 9B717263E7749A732C8B5C7D7D59C5C6&lt;br /&gt;
*** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [eMMC Boot] using DD method [20190618] ===&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): DBB5B3D46B77A33BC9F09173C9788E6E&lt;br /&gt;
*** File Size: 561MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 5F3B97EA72B3227082500B3FB1FAB44A&lt;br /&gt;
*** File Size: 579MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 6833B124ABA3AC2269A6B4F51EFD1109&lt;br /&gt;
*** File Size: 615MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [eMMC Boot] using ROCKChip tools method [20190618] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* [https://wiki.pine64.org/index.php/NOOB#Flashing_to_eMMC_using_Rockchip_Tools_.28Rock64_Only.29 Guide to flashing eMMC using Rockchip Tools]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/ROCK64_20190618_stock_rooted_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): FC5F80C3A939AD0F8DCE5B85F22D20A1&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
== Android 9.x (No Google Play) ==&lt;br /&gt;
[[File:android_9.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [microSD Boot] using DD method [20190621] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* DD image for 8GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): A250B72CD6AAB24B8156DE08EB15530C&lt;br /&gt;
*** File Size: 546MB&lt;br /&gt;
* DD image for 16GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 09A6BACD71159853D5E4C6C21C883B0F&lt;br /&gt;
*** File Size: 556MB&lt;br /&gt;
* DD image for 32GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): C68DC5D96F1C546B96EC690CE7BFE910&lt;br /&gt;
*** File Size: 574MB&lt;br /&gt;
* DD image for 64GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 4EFC87B4CEE4C7655618DCA95EF7DD0D&lt;br /&gt;
*** File Size: 707MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [microSD Boot] using ROCKChip SDDisk tools method [20190621] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/SDDiskTool_v1.57.zip Rockchip SDDisk Tool ver 1.57]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/ROCK64_20190621_stock_rooted_android_9.0_sdboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): EE00D309745F842213E21B2F1E20C510&lt;br /&gt;
** File Size: 539MB&lt;br /&gt;
&lt;br /&gt;
== Android 8.x TV eMMC (preinstalled Google Play Store) ==&lt;br /&gt;
[[File:android_8.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [eMMC Boot] using DD method [20180606] ===&lt;br /&gt;
* DD image to eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20180606_stock_android_8.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): C05846B89A6483DA911CEA604627524F&lt;br /&gt;
** File Size: 561MB&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [eMMC Boot] using ROCKChip tools method [20180606] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port&lt;br /&gt;
* [https://wiki.pine64.org/index.php/NOOB#Flashing_to_eMMC_using_Rockchip_Tools_.28Rock64_Only.29 Guide to flashing eMMC using Rockchip Tools]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_android8.1_emmc_boot_v1.1.zip Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 9738F060D2F62A83637797363D2B38C9&lt;br /&gt;
** File Size: 752MB&lt;br /&gt;
&lt;br /&gt;
== Android 8.x TV ==&lt;br /&gt;
[[File:android_8.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [microSD Boot] [20180623] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20180623_stock_android_8.1_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 85372A568C114ADE7CD9632CEBA193E9&lt;br /&gt;
** File Size: 575MB&lt;br /&gt;
&lt;br /&gt;
== Android 7.x eMMC ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [microSD to eMMC] [Rooted] [20171204] ===&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper, then it will start writing the new image to the eMMC. Please allow around 1 minute of boot up time before UI is presented via HDMI&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 43443467DFCAEDE767556843EB4D6707&lt;br /&gt;
** File Size: 558MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [eMMC Boot] [Rooted] [20171204] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 7C831F9E6B4311A3B3D4743FBBB628D0&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
== Android 7.x ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [microSD Boot] [Rooted] [20171204] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 56520ED3DB6E587DA140AD314A055EB2&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
== Android TV 7.x eMMC ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [microSD to eMMC] [v0.3.4-r86] by ayufan ===&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper. After boot, it will prompt for confirmation 'Y' to start writing the new image to the eMMC. Then follow the instructions on the screen&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/tag/0.3.4 Release notes on ayufan Android 7.1 github]&lt;br /&gt;
* Please allow 5 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/android-7.1-rock-64-rock64_atv-v0.3.4-r86-raw_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 6FD1FA4BE87EC2D4E0862F66541BC6F0&lt;br /&gt;
** File Size: 716MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [eMMC] by ayufan ===&lt;br /&gt;
* For eMMC flash-all image, please unzip first and then use Android tool to flash in&lt;br /&gt;
** [https://github.com/ayufan-rock64/android-7.1/releases/latest Direct download latest release build from ayufan github and look for android-7.1-rock-64-rock64_atv-x.x.x-xx-update.zip]&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
== Android TV 7.x ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [microSD Boot] by ayufan ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/latest Direct download latest release build from ayufan github and look for android-7.1-rock-64-rock64_atv-x.x.x-xx-raw.img.gz]&lt;br /&gt;
&lt;br /&gt;
= Android SDK =&lt;br /&gt;
&lt;br /&gt;
=== Android P SDK [v9.0] ===&lt;br /&gt;
* [https://files.pine64.org//SDK/ROCK64/ROCK64_SDK_android9.0.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 1EAC08942E238293E3AF11C7890DF307&lt;br /&gt;
** File Size: 104.34GB&lt;br /&gt;
&lt;br /&gt;
[[Category:Rock64]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Talk:ROCK64_Software_Releases&amp;diff=12958</id>
		<title>Talk:ROCK64 Software Releases</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Talk:ROCK64_Software_Releases&amp;diff=12958"/>
		<updated>2022-04-28T22:11:27Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Start discussion on the sequence of OS images, which seems random and inconsistent with the Rock64 page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm not sure how this 'Discussion' thing (should) work, but the sequence of the OS images seems rather random and is also not consistent with the 'Rock64' page itself.&lt;br /&gt;
Should that be fixed? And if so, how?&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=ROCK64&amp;diff=12957</id>
		<title>ROCK64</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=ROCK64&amp;diff=12957"/>
		<updated>2022-04-28T22:05:04Z</updated>

		<summary type="html">&lt;p&gt;Diederik: /* Quick Links to the Source of OS Images Build */ Replace outdated LibreELEC links with the official one&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rock64.jpg|400px|thumb|right|The ROCK64]]&lt;br /&gt;
&lt;br /&gt;
The '''ROCK64''' is a credit-card size 4K60P HDR Media Board Computer powered by Rockchip RK3328 Quad-Core ARM Cortex A53 64-Bit Processor and supports up to 4GB 1866MHz LPDDR3 memory. It provides an eMMC module socket, MicroSD Card slot, Pi-2 Bus, Pi-P5+ Bus, USB 3.0, and many other peripheral interfaces for makers to integrate with sensors and other devices. &lt;br /&gt;
&lt;br /&gt;
It supports many different open source operating systems, such as Android, Debian, and Yocto.&lt;br /&gt;
&lt;br /&gt;
== Software releases ==&lt;br /&gt;
* OS build Installation Guide and tools:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/tools/SD_Firmware_Tool._v1.46.zip Tools to burn Android build into a bootable microSD card]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/tools/AndroidTool_Release_v2.38.zip Tools that allows developer flash image into eMMC's Loader/Parameter/Misc/Kernal/Boot/Recovery/System/Backup partition]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/tools/DriverAssitant_v4.5.zip Windows ADB driver package]&lt;br /&gt;
** [[ROCK64 MAC Address]]&lt;br /&gt;
&lt;br /&gt;
Under [[ROCK64 Software Releases]] you will find a complete list of currently supported operating system images, which work with the ROCK64, as well as other related software. &lt;br /&gt;
&lt;br /&gt;
The list includes OS images and descriptions of:&lt;br /&gt;
&lt;br /&gt;
* [[ROCK64_Software_Releases#Armbian|Armbian (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#AOSC|AOSC (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Manjaro ARM|Manjaro ARM (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Ubuntu 18.04 Bionic by ayufan|Ubuntu 18.04 Bionic by ayufan (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Slackware|Slackware (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#DietPi|DietPi (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#LibreELEC.28KODI.29|LibreElec for KODI (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Volumio 2 Digital Audio Player|Volumio 2 Digital Audio Player (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Debian|Debian Installer images (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Debian_by_ayufan|Debian by ayufan (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Debian_by_mrfixit2001|Debian by mrfixit2001 (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#OpenMediaVault|OpenMediaVault 64bit (microSD / eMMC boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#NextCloudPi|NextCloudPi (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Recalbox|Recalbox (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#NetBSD|NetBSD (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_9.x_eMMC|Android 9.x (eMMC)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_8.x_eMMC|Android 8.x (eMMC)]] / [[ROCK64_Software_Releases#Android_8.x|Android 8.x (microSD Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_7.x_eMMC|Android 7.x (eMMC)]] / [[ROCK64_Software_Releases#Android_7.x|Android 7.x (microSD Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_TV_7.x_eMMC|Android TV 7.x (eMMC)]] / [[ROCK64_Software_Releases#Android_TV_7.x|Android TV 7.x (microSD Boot)]]&lt;br /&gt;
&lt;br /&gt;
=== Quick Links to the Source of OS Images Build ===&lt;br /&gt;
&lt;br /&gt;
Some OS images are still in '''beta or nightly build''' which are only fit for testing purposes. These should usually be avoided for normal usage, since they are '''used at your own risk'''.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/latest/ ayufan Linux]&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/latest/ ayufan Android 7.1]&lt;br /&gt;
* [https://github.com/LibreELEC/LibreELEC.tv LibreELEC (KODI)]&lt;br /&gt;
* [https://github.com/fire219/rock64-fedora/releases/latest/ Fire219 Fedora]&lt;br /&gt;
* [https://nightly.builds.lakka.tv/by_devices/RK3328.aarch64/ Lakka] | [https://github.com/rtissera/RetroPie-Setup/releases/latest/ RetroPie-Setup]&lt;br /&gt;
* [https://dl.armbian.com/rock64/ Armbian]&lt;br /&gt;
* [https://github.com/m01/rock64-arch-linux-build/releases/latest Arch Linux]&lt;br /&gt;
* [https://ownyourbits.com/downloads/ NextCloudPi]&lt;br /&gt;
* [https://dl.fail.pp.ua/slackware/images/rock64/ Slackware]&lt;br /&gt;
* [https://salsa.debian.org/installer-team/debian-installer/ Debian Installer]&lt;br /&gt;
&lt;br /&gt;
=== State of Software Support for the Hardware ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Requirement&lt;br /&gt;
! GNU/Linux&lt;br /&gt;
! Android/Linux&lt;br /&gt;
! Kodi/Linux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 2160p 30Hz 8bit h264/h265/vp8&lt;br /&gt;
| partial? [https://forum.pine64.org/showthread.php?tid=4861&amp;amp;pid=32474#pid32474 1]&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| UI using GPU&lt;br /&gt;
| no&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Youtube&lt;br /&gt;
| no&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| vp9 / mpeg4 / mpeg2 / 10bit HDR / YCbCr&lt;br /&gt;
| no&lt;br /&gt;
| yes?&lt;br /&gt;
| yes&lt;br /&gt;
&lt;br /&gt;
|}&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchipdrm&amp;lt;/code&amp;gt;&lt;br /&gt;
| With mpv, you'll need to specify something like &amp;lt;code&amp;gt;mpv --gpu-context=drm --drm-connector=1.HDMI-A-1&amp;lt;/code&amp;gt; to get it to play back on a VT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;lima&amp;lt;/code&amp;gt;&lt;br /&gt;
| Very recent version recommended for the best experience. Has weird glitches on HDMI output in weston.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Staging&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Broken/Not in ffmpeg&lt;br /&gt;
| &amp;lt;code&amp;gt;hantro_vpu&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rockchip_vdec&amp;lt;/code&amp;gt;, using &amp;lt;code&amp;gt;v4l2-requests&amp;lt;/code&amp;gt;&lt;br /&gt;
| [https://lore.kernel.org/linux-media/49b1-608d4d00-2b-62afdf80@101971638/ Soon to be moved out of staging], ffmpeg patch set [https://patchwork.ffmpeg.org/project/ffmpeg/patch/20201209202513.27449-3-jonas@kwiboo.se/ seemingly abandoned], does not work on newer kernels. [https://github.com/Kwiboo/FFmpeg/commits/v4l2-request-hwaccel-master-stable Git branch with commits]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Audio &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;snd_soc_rockchip_*&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Button&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;rk805_pwrkey&amp;lt;/code&amp;gt;&lt;br /&gt;
| If your PWR switch does nothing unless held, this may need to be loaded manually with &amp;lt;code&amp;gt;modprobe&amp;lt;/code&amp;gt; or by putting it in &amp;lt;code&amp;gt;/etc/modules-load.d/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Analog 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;rockchip_drm_tve&amp;lt;/code&amp;gt;&lt;br /&gt;
| Definitely needs some cleanup before it'd be ready for mainline, and needs some dt bindings written.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SoC and Memory Specification ==&lt;br /&gt;
* Based on [https://www.rock-chips.com/a/en/products/RK33_Series/2017/0118/829.html Rockchip RK3328]&lt;br /&gt;
[[File:Rockchip_RK3328.png|right]]&lt;br /&gt;
&lt;br /&gt;
=== CPU Architecture ===&lt;br /&gt;
* [https://www.arm.com/products/processors/cortex-a/cortex-a53-processor.php Quad-core Cortex-A53 up to 1.5GHz CPU]&lt;br /&gt;
* Full implementation of the ARM architecture v8-A instruction set&lt;br /&gt;
* ARM Neon Advanced SIMD (single instruction, multiple data) support for accelerated media and signal processing computation&lt;br /&gt;
* ARMv8 Cryptography Extensions&lt;br /&gt;
* In-order pipeline with symmetric dual-issue of most instructions&lt;br /&gt;
* Unified system L2 cache&lt;br /&gt;
* Includes VFP v3 hardware to support single and double-precision operations&lt;br /&gt;
* Integrated 32KB L1 instruction cache, 32KB 4-way set associative L1 data cache&lt;br /&gt;
* TrustZone technology support&lt;br /&gt;
* Full CoreSight debug solution&lt;br /&gt;
* One separate power domain for CPU core system to support internal power switch, and to externally turn on/off based on different application scenario&lt;br /&gt;
* PD_A53: Cortex-A53 + Neon + FPU + L1 I/D Cache of core 2/3&lt;br /&gt;
* One isolated voltage domain to support DVFS&lt;br /&gt;
&lt;br /&gt;
==== Frequencies &amp;amp; Voltages ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Frequency&lt;br /&gt;
! Voltage&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 408 MHz&lt;br /&gt;
| 0.950 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 600 MHz&lt;br /&gt;
| 0.950 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 816 MHz&lt;br /&gt;
| 1.000 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1008 MHz&lt;br /&gt;
| 1.100 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1200 MHz&lt;br /&gt;
| 1.225 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1296 MHz&lt;br /&gt;
| 1.300 V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Power Draw ====&lt;br /&gt;
&lt;br /&gt;
These numbers for power draw have been measured through an USB power monitor (FNB38) while running the &amp;lt;code&amp;gt;stress&amp;lt;/code&amp;gt; utility, whereby &amp;quot;cpu&amp;quot; stands for &amp;lt;code&amp;gt;stress --cpu 4&amp;lt;/code&amp;gt; and &amp;quot;vm&amp;quot; stands for &amp;lt;code&amp;gt;stress --vm 4&amp;lt;/code&amp;gt;. The former spins on the CPU, the latter stresses the memory. Real workloads are usually a mix of both. The tests were ran through ssh, with nothing besides power and ethernet plugged into the ROCK64&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that under real world usage, many other factors come into play. Having a display connected, running a graphical session, I/O and most importantly the connected USB peripherals can add a lot.&lt;br /&gt;
&lt;br /&gt;
Helpful refresher on the formula for power (W) on DC: power = current &amp;amp;times; voltage, because the power factor is 1. The ROCK64 runs on 5V, so use that to calculate current if you need to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Frequency&lt;br /&gt;
! Power cpu&lt;br /&gt;
! Power vm&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1296 MHz&lt;br /&gt;
| 2.64 W&lt;br /&gt;
| 2.95 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1200 MHz&lt;br /&gt;
| 2.32 W&lt;br /&gt;
| 2.69 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1008 MHz&lt;br /&gt;
| 1.90 W&lt;br /&gt;
| 2.31 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 816 MHz&lt;br /&gt;
| 1.62 W&lt;br /&gt;
| 2.05 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 600 MHz&lt;br /&gt;
| 1.45 W&lt;br /&gt;
| 1.85 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 408 MHz&lt;br /&gt;
| 1.33 W&lt;br /&gt;
| 1.72 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| Idle (no load)&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| 1.10 W&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It appears a good upper bound for a headless setup is in the neighbourhood of 3 W, or the energy contained in 0.025 bananas per hour.&lt;br /&gt;
&lt;br /&gt;
=== GPU Architecture ===&lt;br /&gt;
* [https://www.arm.com/products/multimedia/mali-gpu/ultra-low-power/mali-450.php ARM Mali-450MP2 Dual-core GPU]&lt;br /&gt;
* OpenGL ES 1.1 and 2.0, OpenVG1.1&lt;br /&gt;
&lt;br /&gt;
=== System Memory ===&lt;br /&gt;
* LPDDR3 RAM Memory Variants: 1GB, 2GB and 4GB.&lt;br /&gt;
&lt;br /&gt;
== Board Features ==&lt;br /&gt;
[[File:ROCK64_sideimg.jpg|400px|thumb|right|The ROCK64 and a size comparison]]&lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
* Digital Video output up to 4K@60Hz&lt;br /&gt;
* 4K HDR @ 60fps&lt;br /&gt;
* H.264/AVC Base/Main/High/High10 profile @ level 5.1; up to 4Kx2K @ 60fps&lt;br /&gt;
* H.265/HEVC Main/Main10 profile @ level 5.1 High-tier; up to 4Kx2K @ 60fps&lt;br /&gt;
* VP9, up to 4Kx2K @ 60fps&lt;br /&gt;
* MPEG-1, ISO/IEC 11172-2, up to 1080P @ 60fps&lt;br /&gt;
* MPEG-2, ISO/IEC 13818-2, SP@ML, MP@HL, up to 1080P @ 60fps&lt;br /&gt;
* MPEG-4, ISO/IEC 14496-2, SP@L0-3, ASP@L0-5, up to 1080P @ 60fps&lt;br /&gt;
* VC-1, SP@ML, MP@HL, AP@L0-3, up to 1080P @ 60fps&lt;br /&gt;
* MVC is supported based on H.264 or H.265, up to 1080P @ 60fps&lt;br /&gt;
&lt;br /&gt;
=== Audio ===&lt;br /&gt;
* 3.5mm A/V Jack (Composite Video Output and RCA Stereo support using conversion cable)&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
* 10/100/1000Mbps Ethernet&lt;br /&gt;
* WiFi 802.11 b/g/n with Bluetooth 4.0 (optional USB dongle)&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
* microSD - bootable, supports SDHC and SDXC and storage up to 256GB&lt;br /&gt;
* eMMC - bootable (optional eMMC Module)&lt;br /&gt;
* 128Mbit (16MB) on-board SPI flash memory (empty by default) - bootable? Usually accessible as a [http://linux-mtd.infradead.org/doc/general.html Linux MTD] device at &amp;lt;code&amp;gt;/dev/mtd0&amp;lt;/code&amp;gt;&lt;br /&gt;
* 1 USB3.0 Dedicated Host port&lt;br /&gt;
* 2 USB2.0 Dedicated Host port (top one is USB-OTG)&lt;br /&gt;
&lt;br /&gt;
=== Expansion Ports ===&lt;br /&gt;
All GPIO pins, including UART, operate at 3.3V. (See VCCIO5 in the schematics.)&lt;br /&gt;
&lt;br /&gt;
* 2x20 pins &amp;quot;Pi2&amp;quot; GPIO Header&lt;br /&gt;
* 2x11 pins &amp;quot;Pi P5+&amp;quot; GPIO Header (with 2nd 10/100Mbps Ethernet pins)&lt;br /&gt;
&lt;br /&gt;
== ROCK64 Board Information, Schematics and Certifications ==&lt;br /&gt;
* Board Dimensions: 85mm x 56mm x 18.8mm&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/rock64%20board%20dimension.pdf ROCK64 board dimension drawing]&lt;br /&gt;
* Input Power: +5V @3A with 3.5mm/1.35mm Type H Barrel type DC connector (@2A will work if there is no heavy load on the USB 3.0 port)&lt;br /&gt;
* ROCK64 ver 3.0 SBC related info&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/Rock64%20Ver%203%20change%20notice.pdf ROCK64 SBC v3.0 Change Notice]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_Schematic_v3.0_20181105.pdf ROCK64 Schematic v3.0 (Production Release)]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_comp_ref_top_v3.0_20181105.pdf ROCK64 Component Reference location v3.0 (top layer)]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_comp_ref_bottom_v3.0_20181105.pdf ROCK64 Component Reference location v3.0 (bottom layer)]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_V3_Pi-2_and_Pi-P5+_Bus.pdf ROCK64 SBC v3.0 Pi-2 and Pi-P5+ Bus GPIO Assignment]&lt;br /&gt;
* [https://files.pine64.org/doc/rock64/R64V3%20RTC%20Batt%20connector.png ROCK64 Rev3 SBC RTC Battery Connector polarity]&lt;br /&gt;
* ROCK64 ver 2.0 SBC related info&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_Schematic_v2.0_20171019.pdf ROCK64 Schematic v2.0 (Production Release)] &lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_Pi-2%20_and_Pi_P5+_Bus.pdf ROCK64 SBC v2.0 Pi-2 and Pi-P5+ Bus GPIO Assignment]&lt;br /&gt;
* [https://github.com/Leapo/Rock64-R64.GPIO Github on ROCK64 GPIO library, thanks to Leapo]&lt;br /&gt;
* [http://synfare.com/599N105E/hwdocs/rock64/index.html Good documentation about ROCK64 GPIO pins article]&lt;br /&gt;
* [https://files.pine64.org/doc/rock64/ROCK64_ES9023_Audio_100Mbps_Ethernet_Board.pdf ROCK64 Audio DAC with 10/100Mbps Ethernet POT Board Schematic]&lt;br /&gt;
* ROCK64 3-D autodesk drawing, thanks and courtesy of TeaPack&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761e818b9e1b31b54545?viewState=NoIgbgDAdAjCA0IAsSDMAzAnAQwCaoFoYBjAdhgICNTVcCA2S9AJgIFMJTsAOGTU3LmLYQAXSA ROCK64 board 2D drawing @courtesy of TeaPack]&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761e6078b748ecd478e1?viewState=NoIgbgDAdAjCA0IDeAdEAXAngBwKZoC40ARXAZwEsBzAOzXjQEMyzd1C0AmAEwGYZOAI0G4AtAA4ArABZeo6eIiNRggJwxuomAHYAxoOm6YMaQDZOvNAF8QAXSA ROCK64 board 3D drawing @courtesy of TeaPack]&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761e45a87155aecc813f?viewState=NoIgbgDAdAjCA0IDeAdEAXAngBwKZoC40ARXAZwEsBzAOzXjQEMyzd1C0BWAYwgGYYAEyEBaQQDYARoJEAWfjMmzckkQCYAHCs5LZAMxi41aAL4gAukA ROCK64 Audio DAC with 10/100Mbps Ethernet POT board 3D drawing @courtesy of TeaPack]&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761ee09b497ae3f2f72e?viewState=NoIgbgDAdAjCA0IBmSYEMAcBmAbBgtACwBGhMRATMeQKYYYX5ICcAJhjYWjDBGgKwgAukA ROCK64 board with Audio DAC POT board 3D drawing @courtesy of TeaPack]&lt;br /&gt;
* ROCK64 Certifications:&lt;br /&gt;
** Disclaimer: Please note that PINE64 SBC is not a &amp;quot;final&amp;quot; product and in general certification is not necessary. However, PINE64 still submits the SBC for FCC, CE, and ROHS certifications and obtain the certificates to prove that the SBC board can pass the testing. Please note, a final commercial product needs to perform its own testing and obtain its own certificate.&lt;br /&gt;
** [https://files.pine64.org/doc/cert/ROCK64%20FCC%20certification%20VOC20171129.pdf ROCK64 FCC Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/ROCK64%20CE%20certification%20VOC20171129.pdf ROCK64 CE Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/ROCK64%20ROHS%20certification%20VOC20170927.pdf ROCK64 RoHS Certificate]&lt;br /&gt;
&lt;br /&gt;
== Datasheets for Components and Peripherals ==&lt;br /&gt;
* Rockchip RK3328 SoC information:&lt;br /&gt;
** [https://www.rock-chips.com/a/en/products/RK33_Series/2017/0118/829.html Rockchip RK3328 SoC Brief]&lt;br /&gt;
** [https://rockchip.fr/RK3328%20datasheet%20V1.2.pdf Rockchip RK3328 Datasheet V1.2]&lt;br /&gt;
** [https://opensource.rock-chips.com/images/9/97/Rockchip_RK3328TRM_V1.1-Part1-20170321.pdf Rockchip RK3328 Technical Reference Manual part 1]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/Rockchip_RK805_Datasheet_V1.1%C2%A020160921.pdf Rockchip RK805 Datasheet V1.1]&lt;br /&gt;
* LPDDR3 (178 Balls) SDRAM:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/H9CCNNNCLTMLAR(Rev1.2).pdf Hynix LPDDR3 Datasheet V1.2]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/K4E8E324EB-EGCF000_DRAM_178F_11x11.5_Ver.1.00.00.pdf Samsung LPDDR3 Datasheet V1.00.00]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/SPECTEK_178B_32GB_V91M_MOBILE_LPDDR3.pdf Spectek LPDDR3 Datasheet]&lt;br /&gt;
* eMMC information:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/PINE64_eMMC_Module_20170719.pdf PINE64 eMMC module schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/usb%20emmc%20module%20adapter%20v2.pdf PINE64 USB adapter for eMMC module V2 schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/USB%20adapter%20for%20eMMC%20module%20PCB.tar PINE64 USB adapter for eMMC module PCB in JPEG]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/E-00517%20FORESEE_eMMC_NCEMAM8B-16G%20SPEC.pdf 16GB Foresee eMMC Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/SDINADF4-16-128GB-H%20data%20sheet%20v1.13.pdf 32Gb/64GB/128GB SanDisk eMMC Datasheet]&lt;br /&gt;
* SPI NOR Flash information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/w25q128jv%20spi%20revc%2011162016.pdf WinBond 128Mb SPI Flash Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GD25Q128C-Rev2.5.pdf GigaDevice 128Mb SPI Flash Datasheet]&lt;br /&gt;
* Ethernet related info:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rock64/RTL8211F-CG-Realtek.pdf Realtek RTL8211F 10/100/1000M Ethernet Transceiver Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/DGKYD111B096GWA1D.pdf 10/100Mbps MegJack on Audio DAC POT board Datasheet]&lt;br /&gt;
* Peripheral related info:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/PDS-16002%20JMS578%20Datasheet%20(Rev.%201.01).pdf JMicron JMS578 to SATA  Datasheet]&lt;br /&gt;
* Enclosure information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/ROCK64%20Aluminum%20Waterproof%20Die%20Cast%20Casing.pdf Outdoor Aluminum Cast Dust-proof IP67 Enclosure Drawing]&lt;br /&gt;
* Remote control button mapping&lt;br /&gt;
** [https://files.pine64.org/doc/Pine%20A64%20Schematic/remote-wit-logo.jpg Official Remote Control for the PINE A64 Button Mapping]&lt;br /&gt;
&lt;br /&gt;
== Enclosures ==&lt;br /&gt;
&lt;br /&gt;
[[File:Rock64-Al-Case1-1.jpg|thumb|100px]]&lt;br /&gt;
&lt;br /&gt;
The ROCK64 fits in three officially sold cases.&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Model B&amp;quot; Acrylic Open Enclosure]], [https://pine64.com/product/model-b-acrylic-open-enclosure/ Store]&lt;br /&gt;
* [[&amp;quot;Model B&amp;quot; Aluminum Waterproof Enclosure]], [https://pine64.com/product/model-b-aluminum-waterproof-enclosure/ Store]&lt;br /&gt;
* [[ROCK64 Premium Aluminum Casing]], [https://pine64.com/product/model-b-premium-aluminum-casing/?v=0446c16e2e66 Store]&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== HDMI output disconnects as soon as it connects ===&lt;br /&gt;
&lt;br /&gt;
Some older monitors seemingly can get into a weird state wherein the ROCK64 is unable to establish a proper connection with them. [[User:CounterPillow]] has seen this happen on an iiyama ProLite G2773HS connected over HDMI, and an Acer P225HQL connected over an HDMI to DVI adapter. The symptoms usually are that you see the monitor briefly turn on its backlight without displaying a picture, but then immediately either shutting off again or showing a &amp;quot;No Signal&amp;quot; message.&lt;br /&gt;
&lt;br /&gt;
The solution is to completely power down your ROCK64, also removing its power source. Then plug in the monitor, and start up the ROCK64 afterwards. You should now be getting a picture again.&lt;br /&gt;
&lt;br /&gt;
=== Power button doesn't do anything on a short press (Linux) ===&lt;br /&gt;
&lt;br /&gt;
Make sure the &amp;lt;code&amp;gt;rk805_pwrkey&amp;lt;/code&amp;gt; module is loaded, e.g. with &amp;lt;code&amp;gt;lsmod | grep rk805_pwrkey&amp;lt;/code&amp;gt;. If it doesn't show up, do a &amp;lt;code&amp;gt;modprobe rk805_pwrkey&amp;lt;/code&amp;gt; as root. To make this persistent, create a &amp;lt;code&amp;gt;99-rk805_pwrkey.conf&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;/etc/modules-load.d/&amp;lt;/code&amp;gt; with the content &amp;lt;code&amp;gt;rk805_pwrkey&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it still doesn't work, make sure your init system is actually listening to the button press. With systemd, check &amp;lt;code&amp;gt;/etc/systemd/logind.conf&amp;lt;/code&amp;gt; and make sure it's either all commented out (uses defaults) or contains something like &amp;lt;code&amp;gt;HandlePowerKey=poweroff&amp;lt;/code&amp;gt;. You can change the short press action by setting &amp;lt;code&amp;gt;HandlePowerKey&amp;lt;/code&amp;gt; to one of &amp;quot;ignore&amp;quot;, &amp;quot;poweroff&amp;quot;, &amp;quot;reboot&amp;quot;, &amp;quot;halt&amp;quot;, &amp;quot;kexec&amp;quot;, &amp;quot;suspend&amp;quot;, &amp;quot;hibernate&amp;quot;, &amp;quot;hybrid-sleep&amp;quot;, &amp;quot;suspend-then-hibernate&amp;quot;, or &amp;quot;lock&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Other Resources ==&lt;br /&gt;
* [https://forum.pine64.org/forumdisplay.php?fid=85 ROCK64 Forum]&lt;br /&gt;
* IRC Server: irc.pine64.org Channel: ROCK64&lt;br /&gt;
* [https://github.com/rock64-linux ROCK64 Linux GitHub Repo]&lt;br /&gt;
* [https://github.com/ayufan-rock64 ROCK64 ayufan GitHub Repo]&lt;br /&gt;
* [https://github.com/rockchip-linux Rockchip Linux GitHub Repo]&lt;br /&gt;
* [https://github.com/JamesLinEngineer/RKMC Rockchip Android RKMC (Forked from Kodi 16.1)]&lt;br /&gt;
* [https://opensource.rock-chips.com/ Rockchip Open Source Wiki]&lt;br /&gt;
* [https://wiki.pine64.org/index.php/Rock64_Guides ROCK64 Guides]&lt;br /&gt;
* [https://www.armbian.com/rock64 Armbian's ROCK64 Page]&lt;br /&gt;
&lt;br /&gt;
[[Category:Rock64]] [[Category:Rockchip RK3328]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=ROCK64_Software_Releases&amp;diff=12956</id>
		<title>ROCK64 Software Releases</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=ROCK64_Software_Releases&amp;diff=12956"/>
		<updated>2022-04-28T22:02:24Z</updated>

		<summary type="html">&lt;p&gt;Diederik: /* LibreELEC(KODI) */ Fix DL link and minor spelling/spacing issues. Also add daily build info/link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of all available releases for the [[ROCK64]], as well as links to other resources.&lt;br /&gt;
&lt;br /&gt;
= Linux Image Releases =&lt;br /&gt;
&lt;br /&gt;
== Armbian==&lt;br /&gt;
[[File:armbian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Version 5.88 onward support Rock64-v3 board&lt;br /&gt;
* To find out more about Armbian and available options please visit their [https://www.armbian.com/rock64/ site]&lt;br /&gt;
* Armbian pack as 7zip, please unzip first before dd.&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Focal XFCE Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Mainline kernel build&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Focal XFCE Desktop download site]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Bionic XFCE Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Mainline kernel build&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Bionic XFCE DEsktop download site]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: 1234&lt;br /&gt;
&lt;br /&gt;
=== Armbian Debian Buster for Server and Light Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Armbian provides a mainline kernel build images for Debian Buster&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Debian Buster download site]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Focal for Server and Light Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Armbian provides a mainline kernel build images for Ubuntu Focal&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Focal download site]&lt;br /&gt;
&lt;br /&gt;
== AOSC ==&lt;br /&gt;
[[File:aosc.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* To learn more about AOSC, please visit the official [https://aosc.io/ AOSC website]&lt;br /&gt;
* AOSC using LZ4 compression algorithm, please visit the [https://github.com/lz4/lz4 LZ4 github site] for utility&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
* Login with&lt;br /&gt;
** username: aosc&lt;br /&gt;
** password: anthon&lt;br /&gt;
=== AOSC KDE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/kde/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC GNOME Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/gnome/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC MATE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/mate/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC Cinnamon Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/cinnamon/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC XFCE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/xfce/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC LXDE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/lxde/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Manjaro ARM ==&lt;br /&gt;
[[File:Manjaro.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
Manjaro editions for Rock64 are available directly from Manjaro.&lt;br /&gt;
&lt;br /&gt;
[https://manjaro.org/download/#rock64 Manjaro Rock64 Download Page]&lt;br /&gt;
&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* To learn more about Manjaro please visit [https://forum.manjaro.org/tags/manjaroarm Manjaro Forum] &lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
&lt;br /&gt;
== Ubuntu 18.04 Bionic by ayufan ==&lt;br /&gt;
[[File:penguin.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases ayufan ROCK64 Linux Build GitHub]&lt;br /&gt;
* Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock64&lt;br /&gt;
** password: rock64&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic LXDE Desktop (armhf) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-lxde-rock64-0.9.14-1159-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic minimal 64bit (arm64) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-minimal-rock64-0.9.14-1159-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic minimal 32bit (armhf) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-minimal-rock64-0.9.14-1159-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic containers (DockerCE &amp;amp; Kubernetes) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-containers-rock64-0.9.14-1159-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
== Slackware==&lt;br /&gt;
[[File:slackware.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Slackware is a very old, interesting, convenient and easy distribution.&lt;br /&gt;
* Visit the project's website here (https://fail.pp.ua)&lt;br /&gt;
* You can follow the ongoing discussion about Slackware on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=5868)&lt;br /&gt;
* This Slackware build using ZST compression algorithm, please visit the [https://github.com/facebook/zstd ZST github site] for utility&lt;br /&gt;
&lt;br /&gt;
=== Slackware Aarch64 XFCE Community Build Image [microSD Boot] ===&lt;br /&gt;
* System with a graphical shell&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [http://dl.fail.pp.ua/slackware/images/rock64/ Direct download from http://dl.fail.pp.ua and look for slarm64-current-aarch64-xfce-rock64-x.xx.x-build-xxxxxxxx.img.zst]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username : root&lt;br /&gt;
** Password : password&lt;br /&gt;
&lt;br /&gt;
=== Slackware Aarch64 Miniroot Community Build Image [microSD Boot] ===&lt;br /&gt;
* System without a graphical shell&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [http://dl.fail.pp.ua/slackware/images/rock64/ Direct download from http://dl.fail.pp.ua and look for slarm64-current-aarch64-base-rock64-x.xx.x-build-xxxxxxxx.img.zst]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username : root&lt;br /&gt;
** Password : password&lt;br /&gt;
&lt;br /&gt;
* To run the OS on eMMC&lt;br /&gt;
**Flash the image to micro SD, power up the board with micro SD and login&lt;br /&gt;
**Copy the image file to micro SD by using SFTP. The image file must be in .img. ''note : root user are not allow transfer file to micro SD.''&lt;br /&gt;
**After finish copy the file, power off the board and add eMMC module to the board&lt;br /&gt;
**Bootup the board, run below command for flashing to eMMC module&lt;br /&gt;
***&amp;gt;&amp;gt;dd if=[image file] of=/dev/mmcblk1 bs=10M&lt;br /&gt;
****''example : dd if=slack-current-aarch64-xfce_08May18-4.4.126-rock64-build-20180508.img of=/dev/mmcblk1 bs=10M''&lt;br /&gt;
***then edit 2 files in eMMC module:&lt;br /&gt;
***&amp;gt;&amp;gt; mount /dev/mmcblk1p1 /media&lt;br /&gt;
***&amp;gt;&amp;gt; echo &amp;quot;rootdev=/dev/mmcblk1p1&amp;quot; &amp;gt;&amp;gt; /media/boot/uEnv.txt&lt;br /&gt;
***&amp;gt;&amp;gt; sed -i 's:mmcblk0p1:mmcblk1p1:' /media/etc/fstab&lt;br /&gt;
**After done, power off board and remove micro SD. Then bootup with only eMMC module.&lt;br /&gt;
&lt;br /&gt;
== DietPi ==&lt;br /&gt;
[[File:dietpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* DietPi is a '''lightweight''', yet '''easy to setup''' and '''feature-rich''' Linux distribution, based on '''Debian'''.&lt;br /&gt;
* To find out more about DietPi, please visit the [https://dietpi.com/docs/ official documentation].&lt;br /&gt;
* Discuss the ROCK64 build on the [https://forum.pine64.org/showthread.php?tid=12514 PINE64 forum thread].&lt;br /&gt;
* DD image (for 4 GiB micro SD card or eMMC and above)&lt;br /&gt;
** [https://dietpi.com/downloads/images/DietPi_ROCK64-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: '''root'''&lt;br /&gt;
** Password: '''dietpi'''&lt;br /&gt;
&lt;br /&gt;
== LibreELEC (KODI) ==&lt;br /&gt;
[[File:libreelec.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Official LibreElEC KODI Build Image [microSD / eMMC boot] ===&lt;br /&gt;
&lt;br /&gt;
* Unzip and DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
** [https://libreelec.tv/downloads/rockchip/ Direct download from LibreElec site and look for PINE64 LibreELEC-RK3328.arm-x.x.x-rock64.img.gz]&lt;br /&gt;
&lt;br /&gt;
=== Daily Build images (for testing) [microSD / eMMC boot] ===&lt;br /&gt;
&lt;br /&gt;
* Unzip and DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
** [https://test.libreelec.tv/ Direct download from LibreElec site and put 'rock64' in the search box]&lt;br /&gt;
&lt;br /&gt;
== Volumio 2 Digital Audio Player ==&lt;br /&gt;
[[File:volumio.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Volumio is a linux-based headless DAP (digital audio player), which connects to your home stereo system or your DAC&lt;br /&gt;
* Visit the project's website [https://community.volumio.org/t/volumio-2-on-rock64/8192 here]&lt;br /&gt;
* You can follow the ongoing discussion about Volumio on the [https://forum.pine64.org/showthread.php?tid=5322 PINE64 forum]&lt;br /&gt;
&lt;br /&gt;
=== Volumio Digital Audio Player Community Build Image [microSD Boot] [2.528-2019-01-12] ===&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://updates.volumio.org/rock64/volumio/2.861/volumio-2.861-2020-12-22-rock64.img.zip Direct download from volumio.org]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: volumio&lt;br /&gt;
** Password: volumio&lt;br /&gt;
* '''Volumio is controlled using a Web-GUI which can be accessed via a web browser using the boards IP or volumio.local/'''&lt;br /&gt;
&lt;br /&gt;
== Lakka ==&lt;br /&gt;
[[File:lakka.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Lakka Community Build Image [microSD / eMMC Boot] ===&lt;br /&gt;
* [https://www.lakka.tv/ Lakka] The open source game console; a lightweight Linux distribution that transforms the Rock64 into a full blown retrogaming console&lt;br /&gt;
* Visit [https://forum.pine64.org/showthread.php?tid=5354 PINE64 forum] for more information about the Lakka release&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://le.builds.lakka.tv/legacy-2.3/Rockchip.ROCK64.arm/ Direct download from Lakka] &lt;br /&gt;
* [[Lakka|Lakka Basic Setup]]&lt;br /&gt;
&lt;br /&gt;
== Debian ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Debian Installer - Bullseye ===&lt;br /&gt;
* Go to Debian Bullseye's [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/ official d-i concatenateable images] directory&lt;br /&gt;
* Download firmware.rock64-rk3328.img.gz and partition.img.gz&lt;br /&gt;
* Combine the 2 parts into 1 image file: &amp;lt;code&amp;gt;zcat firmware.rock64-rk3328.img.gz partition.img.gz &amp;gt; debian-installer-bullseye-rock64-rk3328.img&amp;lt;/code&amp;gt;* &lt;br /&gt;
* Write the created .img file to microSD card or eMMC Module with &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plug the microSD/eMMC card in the Rock64 and connect a serial console and boot up to start the Debian Installer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;) (for non-Linux systems, consult [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/README.concatenateable_images README.concatenateable_images])&lt;br /&gt;
&lt;br /&gt;
=== Debian Installer - Daily Build (for Bookworm+) ===&lt;br /&gt;
* Go to Debian's daily build [https://d-i.debian.org/daily-images/arm64/daily/netboot/SD-card-images/ official d-i concatenateable images] directory&lt;br /&gt;
* Download firmware.rock64-rk3328.img.gz and partition.img.gz&lt;br /&gt;
* Combine the 2 parts into 1 image file: &amp;lt;code&amp;gt;zcat firmware.rock64-rk3328.img.gz partition.img.gz &amp;gt; debian-installer-daily-build-rock64-rk3328.img&amp;lt;/code&amp;gt;* &lt;br /&gt;
* Write the created .img file to microSD card or eMMC Module with &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plug the microSD/eMMC card in the Rock64 and boot up to start the Debian Installer. It should work with both a [bugs.debian.org/1009014 normal display as a serial console]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;) (for non-Linux systems, consult [https://d-i.debian.org/daily-images/arm64/daily/netboot/SD-card-images/README.concatenateable_images README.concatenateable_images])&lt;br /&gt;
&lt;br /&gt;
== Debian by ayufan ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Debian Stretch Minimal 64bit (arm64) OS Image [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-minimal-rock64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 212MB&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock64&lt;br /&gt;
** password: rock64&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309&amp;amp;pid=39314#pid39314 here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debian by mrfixit2001 ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Minimal Debian [microSD / eMMC Boot] ===&lt;br /&gt;
** DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://github.com/mrfixit2001/debian_builds/releases Direct download from mrfixit2001's github]&lt;br /&gt;
** Version 190514 onward support Rock64-v3 board&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock&lt;br /&gt;
** password: rock&lt;br /&gt;
&lt;br /&gt;
== OpenMediaVault ==&lt;br /&gt;
[[File:omv.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Jessie OpenMediaVault Community Build Image [microSD to eMMC] [0.5.15-136] by ayufan ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page]&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper. After boot, it will prompt for confirmation 'Y' to start writing the new image to the eMMC. Then follow the instructions on the screen&lt;br /&gt;
'''* There's a bug with eMMC in the &amp;quot;Stable&amp;quot; version of openmediavault linked from the wiki page. In order to use eMMC, please you need to be on the latest (pre-release) version which is linked here https://github.com/ayufan-rock64/linux-build/releases'''&lt;br /&gt;
*&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/omv/jessie-openmediavault-rock64-0.5.15-136-armhf_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 7E423EF9146EA15403E7D1B4EA30594A&lt;br /&gt;
** File Size: 487MB&lt;br /&gt;
** Credentials (console/ssh, except OMV): rock64/rock64&lt;br /&gt;
** Credentials (OMV for Web): admin/openmediavault&lt;br /&gt;
** Credentials (OMV for console): root/openmediavault&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
&lt;br /&gt;
=== Stretch OpenMediaVault OS Image 32bit (armhf) [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page to learn more]&lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github] ''(pay attention to the release tag. Don't accidentaly choose a pre-release build)''&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rock64-0.8.3-1141-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 391MB&lt;br /&gt;
* WebGUI Login:&lt;br /&gt;
** username: admin&lt;br /&gt;
** password: openmediavault&lt;br /&gt;
* SSH/ Console Login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: openmediavault &lt;br /&gt;
*** '''NB! You need to enable root login in OMV WebGUI'''&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
&lt;br /&gt;
=== Stretch OpenMediaVault OS Image 64bit (arm64) [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page to learn more]&lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github] ''(pay attention to the release tag. Don't accidentaly choose a pre-release build)''&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rockpro64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 340MB&lt;br /&gt;
* WebGUI Login:&lt;br /&gt;
** username: admin&lt;br /&gt;
** password: openmediavault&lt;br /&gt;
* SSH/ Console Login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: openmediavault &lt;br /&gt;
*** '''NB! You need to enable root login in OMV WebGUI'''&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
&lt;br /&gt;
== NextCloudPi==&lt;br /&gt;
[[File:nextcloudpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== NextCloudPi Community Build Image [microSD / eMMC Boot] [03-10-19] ===&lt;br /&gt;
* NextCloudPi comes not only with NextCloud preinstalled, but also with management tools for backups, SSL certificates, SAMBA, enhanced security and more.&lt;br /&gt;
* Visit the project's [https://nextcloudpi.com website]&lt;br /&gt;
* You can follow the ongoing discussion about NextCloudPi on the [https://forum.pine64.org/showthread.php?tid=6047 PINE64 forum]&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/nextcloudplus/NextCloudPi_Rock64_03-10-19.img.xz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZ file): 1432c8b8082696f38770004b3cb5ac1e&lt;br /&gt;
*** File Size: 310MB&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: 1234&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Recalbox ==&lt;br /&gt;
[[File:RB.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Recalbox Community Build Image [microSD / eMMC boot] ===&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* Recalbox allows you to re-play a variety of videogame consoles and platforms in your living room, with ease! &lt;br /&gt;
* To find out more about Recalbox and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7111 PINE64 forum thread]&lt;br /&gt;
*Visit the project's [https://www.recalbox.com/ website]&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://github.com/mrfixit2001/recalbox_rock64/releases Direct download latest release build from mrfixit2001 github]&lt;br /&gt;
&lt;br /&gt;
== Cent OS [No Longer Maintained] ==&lt;br /&gt;
[[File:Centos.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== CentOS-7 Community Build Image [microSD Boot] ===&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* Centos-7.4.1708 with kernel from Armbian-5.69 (minimum build)&lt;br /&gt;
** DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://github.com/Project31/centos-pine64/releases/download/v7.4.1708-v5.59/centos7-rock64.img.xz Project31 download mirrors]&lt;br /&gt;
* To find out more on installation process, please visit their [https://project31.github.io/pine64/ Project31 site]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: centos&lt;br /&gt;
&lt;br /&gt;
== NEMS Linux ==&lt;br /&gt;
[[File:nems.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
https://files.pine64.org/sw/pine64_installer/json/nems.jpg&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* NEMS stands for &amp;quot;Nagios Enterprise Monitoring Server&amp;quot; and it is a modern pre-configured, customized and ready-to-deploy Nagios Core image designed to run on low-cost micro computers.&lt;br /&gt;
* To find out more about NEMS on the PINE64 and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7306 PINE64 forum thread]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: nemsadmin&lt;br /&gt;
** Password: nemsadmin&lt;br /&gt;
* [https://docs.nemslinux.com/installation  Installation Guide]&lt;br /&gt;
* To find out more on NEM Linux, please visit their [https://nemslinux.com/ site]&lt;br /&gt;
&lt;br /&gt;
=== NEMS Linux [microSD / eMMC boot] [v1.5 - build 2] ===&lt;br /&gt;
* DD image (for 16GB microSD card and above)&lt;br /&gt;
** [https://nemslinux.com/download/nagios-for-pine64.php Download torrent seed from NEMS Linux]&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/nems/NEMS_v1.5-Rock64-Build2.zip Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZ file): 6e2088922c5d197db8b8ba3057120389&lt;br /&gt;
*** File Size: 1.30GB&lt;br /&gt;
&lt;br /&gt;
== Fedora  [No Longer Maintained] ==&lt;br /&gt;
[[File:fedora1.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Fedora Minimal Community Build Image [microSD boot] [Preliminary Build] ===&lt;br /&gt;
* [https://github.com/fire219/rock64-fedora/releases/ Follow up on Fire219 github]&lt;br /&gt;
&lt;br /&gt;
= BSD Image Releases =&lt;br /&gt;
&lt;br /&gt;
==NetBSD==&lt;br /&gt;
[[File:netbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* To learn more about NetBSD please visit [https://www.netbsd.org/ NetBSD main page] &lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://www.invisible.ca/arm/ Direct download latest release build from NetBSD by select ROCK64]&lt;br /&gt;
** size: 280MB&lt;br /&gt;
* Console and SSH default login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: [none]&lt;br /&gt;
* Instructions concerning enabling SSH can be found [https://www.netbsd.org/docs/guide/en/chap-boot.html#chap-boot-ssh here]&lt;br /&gt;
&lt;br /&gt;
==OpenBSD==&lt;br /&gt;
[[File:Puffy_mascot_openbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* You can install OpenBSD on your Rock64 by following [https://github.com/krjdev/rock64_openbsd these instructions]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FreeBSD==&lt;br /&gt;
&amp;lt;div style=float:right&amp;gt;[[File:Freebsd_Logo.png|right|100px]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The [https://wiki.freebsd.org/arm/RockChip#Rock64 RockChip FreeBSD page] has instructions for installing FreeBSD.&lt;br /&gt;
&lt;br /&gt;
* Images for various FreeBSD releases can be found [https://www.freebsd.org/where/ here]&lt;br /&gt;
* Version 13.0 and greater include prebuilt images. Find the link in the SD Card Images section and download the ROCK64 image.&lt;br /&gt;
* SSH is enable by default and can be accessed with the following account:&lt;br /&gt;
:: username: freebsd&lt;br /&gt;
:: password: freebsd&lt;br /&gt;
* The root account credentials are:&lt;br /&gt;
:: username: root&lt;br /&gt;
:: password: root&lt;br /&gt;
&lt;br /&gt;
= Android Image Releases =&lt;br /&gt;
&lt;br /&gt;
== Android TV 9.x eMMC (No Google Play) ==&lt;br /&gt;
[[File:android_9.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''* For install Playstore on Android 9.0, please follows [https://forum.pine64.org/showthread.php?tid=8655 this forum thread]'''&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Image [eMMC Boot] using DD method [20190617] ===&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): D985808B4CA912201372DC2F5F322AE9&lt;br /&gt;
*** File Size: 560MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 5D65A44F78BD08B4584413C8BEEAAF05&lt;br /&gt;
*** File Size: 579MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): B34D1C119386CBA1658E5F0FB9E4413D&lt;br /&gt;
*** File Size: 615MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Image [eMMC Boot] using ROCKChip tools method [20190617] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Android TV build version&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_20190617_stock_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 9B717263E7749A732C8B5C7D7D59C5C6&lt;br /&gt;
*** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [eMMC Boot] using DD method [20190618] ===&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): DBB5B3D46B77A33BC9F09173C9788E6E&lt;br /&gt;
*** File Size: 561MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 5F3B97EA72B3227082500B3FB1FAB44A&lt;br /&gt;
*** File Size: 579MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 6833B124ABA3AC2269A6B4F51EFD1109&lt;br /&gt;
*** File Size: 615MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [eMMC Boot] using ROCKChip tools method [20190618] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* [https://wiki.pine64.org/index.php/NOOB#Flashing_to_eMMC_using_Rockchip_Tools_.28Rock64_Only.29 Guide to flashing eMMC using Rockchip Tools]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/ROCK64_20190618_stock_rooted_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): FC5F80C3A939AD0F8DCE5B85F22D20A1&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
== Android 9.x (No Google Play) ==&lt;br /&gt;
[[File:android_9.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [microSD Boot] using DD method [20190621] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* DD image for 8GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): A250B72CD6AAB24B8156DE08EB15530C&lt;br /&gt;
*** File Size: 546MB&lt;br /&gt;
* DD image for 16GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 09A6BACD71159853D5E4C6C21C883B0F&lt;br /&gt;
*** File Size: 556MB&lt;br /&gt;
* DD image for 32GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): C68DC5D96F1C546B96EC690CE7BFE910&lt;br /&gt;
*** File Size: 574MB&lt;br /&gt;
* DD image for 64GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 4EFC87B4CEE4C7655618DCA95EF7DD0D&lt;br /&gt;
*** File Size: 707MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [microSD Boot] using ROCKChip SDDisk tools method [20190621] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/SDDiskTool_v1.57.zip Rockchip SDDisk Tool ver 1.57]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/ROCK64_20190621_stock_rooted_android_9.0_sdboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): EE00D309745F842213E21B2F1E20C510&lt;br /&gt;
** File Size: 539MB&lt;br /&gt;
&lt;br /&gt;
== Android 8.x TV eMMC (preinstalled Google Play Store) ==&lt;br /&gt;
[[File:android_8.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [eMMC Boot] using DD method [20180606] ===&lt;br /&gt;
* DD image to eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20180606_stock_android_8.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): C05846B89A6483DA911CEA604627524F&lt;br /&gt;
** File Size: 561MB&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [eMMC Boot] using ROCKChip tools method [20180606] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port&lt;br /&gt;
* [https://wiki.pine64.org/index.php/NOOB#Flashing_to_eMMC_using_Rockchip_Tools_.28Rock64_Only.29 Guide to flashing eMMC using Rockchip Tools]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_android8.1_emmc_boot_v1.1.zip Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 9738F060D2F62A83637797363D2B38C9&lt;br /&gt;
** File Size: 752MB&lt;br /&gt;
&lt;br /&gt;
== Android 8.x TV ==&lt;br /&gt;
[[File:android_8.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [microSD Boot] [20180623] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20180623_stock_android_8.1_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 85372A568C114ADE7CD9632CEBA193E9&lt;br /&gt;
** File Size: 575MB&lt;br /&gt;
&lt;br /&gt;
== Android 7.x eMMC ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [microSD to eMMC] [Rooted] [20171204] ===&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper, then it will start writing the new image to the eMMC. Please allow around 1 minute of boot up time before UI is presented via HDMI&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 43443467DFCAEDE767556843EB4D6707&lt;br /&gt;
** File Size: 558MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [eMMC Boot] [Rooted] [20171204] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 7C831F9E6B4311A3B3D4743FBBB628D0&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
== Android 7.x ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [microSD Boot] [Rooted] [20171204] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 56520ED3DB6E587DA140AD314A055EB2&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
== Android TV 7.x eMMC ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [microSD to eMMC] [v0.3.4-r86] by ayufan ===&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper. After boot, it will prompt for confirmation 'Y' to start writing the new image to the eMMC. Then follow the instructions on the screen&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/tag/0.3.4 Release notes on ayufan Android 7.1 github]&lt;br /&gt;
* Please allow 5 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/android-7.1-rock-64-rock64_atv-v0.3.4-r86-raw_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 6FD1FA4BE87EC2D4E0862F66541BC6F0&lt;br /&gt;
** File Size: 716MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [eMMC] by ayufan ===&lt;br /&gt;
* For eMMC flash-all image, please unzip first and then use Android tool to flash in&lt;br /&gt;
** [https://github.com/ayufan-rock64/android-7.1/releases/latest Direct download latest release build from ayufan github and look for android-7.1-rock-64-rock64_atv-x.x.x-xx-update.zip]&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
== Android TV 7.x ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [microSD Boot] by ayufan ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/latest Direct download latest release build from ayufan github and look for android-7.1-rock-64-rock64_atv-x.x.x-xx-raw.img.gz]&lt;br /&gt;
&lt;br /&gt;
= Android SDK =&lt;br /&gt;
&lt;br /&gt;
=== Android P SDK [v9.0] ===&lt;br /&gt;
* [https://files.pine64.org//SDK/ROCK64/ROCK64_SDK_android9.0.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 1EAC08942E238293E3AF11C7890DF307&lt;br /&gt;
** File Size: 104.34GB&lt;br /&gt;
&lt;br /&gt;
[[Category:Rock64]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=ROCK64&amp;diff=12955</id>
		<title>ROCK64</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=ROCK64&amp;diff=12955"/>
		<updated>2022-04-28T21:53:56Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Add source for Debian Installer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rock64.jpg|400px|thumb|right|The ROCK64]]&lt;br /&gt;
&lt;br /&gt;
The '''ROCK64''' is a credit-card size 4K60P HDR Media Board Computer powered by Rockchip RK3328 Quad-Core ARM Cortex A53 64-Bit Processor and supports up to 4GB 1866MHz LPDDR3 memory. It provides an eMMC module socket, MicroSD Card slot, Pi-2 Bus, Pi-P5+ Bus, USB 3.0, and many other peripheral interfaces for makers to integrate with sensors and other devices. &lt;br /&gt;
&lt;br /&gt;
It supports many different open source operating systems, such as Android, Debian, and Yocto.&lt;br /&gt;
&lt;br /&gt;
== Software releases ==&lt;br /&gt;
* OS build Installation Guide and tools:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/tools/SD_Firmware_Tool._v1.46.zip Tools to burn Android build into a bootable microSD card]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/tools/AndroidTool_Release_v2.38.zip Tools that allows developer flash image into eMMC's Loader/Parameter/Misc/Kernal/Boot/Recovery/System/Backup partition]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/tools/DriverAssitant_v4.5.zip Windows ADB driver package]&lt;br /&gt;
** [[ROCK64 MAC Address]]&lt;br /&gt;
&lt;br /&gt;
Under [[ROCK64 Software Releases]] you will find a complete list of currently supported operating system images, which work with the ROCK64, as well as other related software. &lt;br /&gt;
&lt;br /&gt;
The list includes OS images and descriptions of:&lt;br /&gt;
&lt;br /&gt;
* [[ROCK64_Software_Releases#Armbian|Armbian (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#AOSC|AOSC (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Manjaro ARM|Manjaro ARM (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Ubuntu 18.04 Bionic by ayufan|Ubuntu 18.04 Bionic by ayufan (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Slackware|Slackware (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#DietPi|DietPi (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#LibreELEC.28KODI.29|LibreElec for KODI (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Volumio 2 Digital Audio Player|Volumio 2 Digital Audio Player (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Debian|Debian Installer images (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Debian_by_ayufan|Debian by ayufan (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Debian_by_mrfixit2001|Debian by mrfixit2001 (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#OpenMediaVault|OpenMediaVault 64bit (microSD / eMMC boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#NextCloudPi|NextCloudPi (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Recalbox|Recalbox (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#NetBSD|NetBSD (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_9.x_eMMC|Android 9.x (eMMC)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_8.x_eMMC|Android 8.x (eMMC)]] / [[ROCK64_Software_Releases#Android_8.x|Android 8.x (microSD Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_7.x_eMMC|Android 7.x (eMMC)]] / [[ROCK64_Software_Releases#Android_7.x|Android 7.x (microSD Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_TV_7.x_eMMC|Android TV 7.x (eMMC)]] / [[ROCK64_Software_Releases#Android_TV_7.x|Android TV 7.x (microSD Boot)]]&lt;br /&gt;
&lt;br /&gt;
=== Quick Links to the Source of OS Images Build ===&lt;br /&gt;
&lt;br /&gt;
Some OS images are still in '''beta or nightly build''' which are only fit for testing purposes. These should usually be avoided for normal usage, since they are '''used at your own risk'''.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/latest/ ayufan Linux]&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/latest/ ayufan Android 7.1]&lt;br /&gt;
* [https://github.com/Raybuntu/LibreELEC.tv/releases/latest/ Raybuntu LibreElec KODI] | [https://github.com/Kwiboo/LibreELEC.tv/releases/latest/ Kwiboo LibreElec KODI]&lt;br /&gt;
* [https://github.com/fire219/rock64-fedora/releases/latest/ Fire219 Fedora]&lt;br /&gt;
* [https://nightly.builds.lakka.tv/by_devices/RK3328.aarch64/ Lakka] | [https://github.com/rtissera/RetroPie-Setup/releases/latest/ RetroPie-Setup]&lt;br /&gt;
* [https://dl.armbian.com/rock64/ Armbian]&lt;br /&gt;
* [https://github.com/m01/rock64-arch-linux-build/releases/latest Arch Linux]&lt;br /&gt;
* [https://ownyourbits.com/downloads/ NextCloudPi]&lt;br /&gt;
* [https://dl.fail.pp.ua/slackware/images/rock64/ Slackware]&lt;br /&gt;
* [https://salsa.debian.org/installer-team/debian-installer/ Debian Installer]&lt;br /&gt;
&lt;br /&gt;
=== State of Software Support for the Hardware ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Requirement&lt;br /&gt;
! GNU/Linux&lt;br /&gt;
! Android/Linux&lt;br /&gt;
! Kodi/Linux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 2160p 30Hz 8bit h264/h265/vp8&lt;br /&gt;
| partial? [https://forum.pine64.org/showthread.php?tid=4861&amp;amp;pid=32474#pid32474 1]&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| UI using GPU&lt;br /&gt;
| no&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Youtube&lt;br /&gt;
| no&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| vp9 / mpeg4 / mpeg2 / 10bit HDR / YCbCr&lt;br /&gt;
| no&lt;br /&gt;
| yes?&lt;br /&gt;
| yes&lt;br /&gt;
&lt;br /&gt;
|}&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchipdrm&amp;lt;/code&amp;gt;&lt;br /&gt;
| With mpv, you'll need to specify something like &amp;lt;code&amp;gt;mpv --gpu-context=drm --drm-connector=1.HDMI-A-1&amp;lt;/code&amp;gt; to get it to play back on a VT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;lima&amp;lt;/code&amp;gt;&lt;br /&gt;
| Very recent version recommended for the best experience. Has weird glitches on HDMI output in weston.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Staging&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Broken/Not in ffmpeg&lt;br /&gt;
| &amp;lt;code&amp;gt;hantro_vpu&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rockchip_vdec&amp;lt;/code&amp;gt;, using &amp;lt;code&amp;gt;v4l2-requests&amp;lt;/code&amp;gt;&lt;br /&gt;
| [https://lore.kernel.org/linux-media/49b1-608d4d00-2b-62afdf80@101971638/ Soon to be moved out of staging], ffmpeg patch set [https://patchwork.ffmpeg.org/project/ffmpeg/patch/20201209202513.27449-3-jonas@kwiboo.se/ seemingly abandoned], does not work on newer kernels. [https://github.com/Kwiboo/FFmpeg/commits/v4l2-request-hwaccel-master-stable Git branch with commits]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Audio &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;snd_soc_rockchip_*&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Button&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;rk805_pwrkey&amp;lt;/code&amp;gt;&lt;br /&gt;
| If your PWR switch does nothing unless held, this may need to be loaded manually with &amp;lt;code&amp;gt;modprobe&amp;lt;/code&amp;gt; or by putting it in &amp;lt;code&amp;gt;/etc/modules-load.d/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Analog 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;rockchip_drm_tve&amp;lt;/code&amp;gt;&lt;br /&gt;
| Definitely needs some cleanup before it'd be ready for mainline, and needs some dt bindings written.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SoC and Memory Specification ==&lt;br /&gt;
* Based on [https://www.rock-chips.com/a/en/products/RK33_Series/2017/0118/829.html Rockchip RK3328]&lt;br /&gt;
[[File:Rockchip_RK3328.png|right]]&lt;br /&gt;
&lt;br /&gt;
=== CPU Architecture ===&lt;br /&gt;
* [https://www.arm.com/products/processors/cortex-a/cortex-a53-processor.php Quad-core Cortex-A53 up to 1.5GHz CPU]&lt;br /&gt;
* Full implementation of the ARM architecture v8-A instruction set&lt;br /&gt;
* ARM Neon Advanced SIMD (single instruction, multiple data) support for accelerated media and signal processing computation&lt;br /&gt;
* ARMv8 Cryptography Extensions&lt;br /&gt;
* In-order pipeline with symmetric dual-issue of most instructions&lt;br /&gt;
* Unified system L2 cache&lt;br /&gt;
* Includes VFP v3 hardware to support single and double-precision operations&lt;br /&gt;
* Integrated 32KB L1 instruction cache, 32KB 4-way set associative L1 data cache&lt;br /&gt;
* TrustZone technology support&lt;br /&gt;
* Full CoreSight debug solution&lt;br /&gt;
* One separate power domain for CPU core system to support internal power switch, and to externally turn on/off based on different application scenario&lt;br /&gt;
* PD_A53: Cortex-A53 + Neon + FPU + L1 I/D Cache of core 2/3&lt;br /&gt;
* One isolated voltage domain to support DVFS&lt;br /&gt;
&lt;br /&gt;
==== Frequencies &amp;amp; Voltages ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Frequency&lt;br /&gt;
! Voltage&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 408 MHz&lt;br /&gt;
| 0.950 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 600 MHz&lt;br /&gt;
| 0.950 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 816 MHz&lt;br /&gt;
| 1.000 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1008 MHz&lt;br /&gt;
| 1.100 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1200 MHz&lt;br /&gt;
| 1.225 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1296 MHz&lt;br /&gt;
| 1.300 V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Power Draw ====&lt;br /&gt;
&lt;br /&gt;
These numbers for power draw have been measured through an USB power monitor (FNB38) while running the &amp;lt;code&amp;gt;stress&amp;lt;/code&amp;gt; utility, whereby &amp;quot;cpu&amp;quot; stands for &amp;lt;code&amp;gt;stress --cpu 4&amp;lt;/code&amp;gt; and &amp;quot;vm&amp;quot; stands for &amp;lt;code&amp;gt;stress --vm 4&amp;lt;/code&amp;gt;. The former spins on the CPU, the latter stresses the memory. Real workloads are usually a mix of both. The tests were ran through ssh, with nothing besides power and ethernet plugged into the ROCK64&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that under real world usage, many other factors come into play. Having a display connected, running a graphical session, I/O and most importantly the connected USB peripherals can add a lot.&lt;br /&gt;
&lt;br /&gt;
Helpful refresher on the formula for power (W) on DC: power = current &amp;amp;times; voltage, because the power factor is 1. The ROCK64 runs on 5V, so use that to calculate current if you need to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Frequency&lt;br /&gt;
! Power cpu&lt;br /&gt;
! Power vm&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1296 MHz&lt;br /&gt;
| 2.64 W&lt;br /&gt;
| 2.95 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1200 MHz&lt;br /&gt;
| 2.32 W&lt;br /&gt;
| 2.69 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1008 MHz&lt;br /&gt;
| 1.90 W&lt;br /&gt;
| 2.31 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 816 MHz&lt;br /&gt;
| 1.62 W&lt;br /&gt;
| 2.05 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 600 MHz&lt;br /&gt;
| 1.45 W&lt;br /&gt;
| 1.85 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 408 MHz&lt;br /&gt;
| 1.33 W&lt;br /&gt;
| 1.72 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| Idle (no load)&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| 1.10 W&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It appears a good upper bound for a headless setup is in the neighbourhood of 3 W, or the energy contained in 0.025 bananas per hour.&lt;br /&gt;
&lt;br /&gt;
=== GPU Architecture ===&lt;br /&gt;
* [https://www.arm.com/products/multimedia/mali-gpu/ultra-low-power/mali-450.php ARM Mali-450MP2 Dual-core GPU]&lt;br /&gt;
* OpenGL ES 1.1 and 2.0, OpenVG1.1&lt;br /&gt;
&lt;br /&gt;
=== System Memory ===&lt;br /&gt;
* LPDDR3 RAM Memory Variants: 1GB, 2GB and 4GB.&lt;br /&gt;
&lt;br /&gt;
== Board Features ==&lt;br /&gt;
[[File:ROCK64_sideimg.jpg|400px|thumb|right|The ROCK64 and a size comparison]]&lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
* Digital Video output up to 4K@60Hz&lt;br /&gt;
* 4K HDR @ 60fps&lt;br /&gt;
* H.264/AVC Base/Main/High/High10 profile @ level 5.1; up to 4Kx2K @ 60fps&lt;br /&gt;
* H.265/HEVC Main/Main10 profile @ level 5.1 High-tier; up to 4Kx2K @ 60fps&lt;br /&gt;
* VP9, up to 4Kx2K @ 60fps&lt;br /&gt;
* MPEG-1, ISO/IEC 11172-2, up to 1080P @ 60fps&lt;br /&gt;
* MPEG-2, ISO/IEC 13818-2, SP@ML, MP@HL, up to 1080P @ 60fps&lt;br /&gt;
* MPEG-4, ISO/IEC 14496-2, SP@L0-3, ASP@L0-5, up to 1080P @ 60fps&lt;br /&gt;
* VC-1, SP@ML, MP@HL, AP@L0-3, up to 1080P @ 60fps&lt;br /&gt;
* MVC is supported based on H.264 or H.265, up to 1080P @ 60fps&lt;br /&gt;
&lt;br /&gt;
=== Audio ===&lt;br /&gt;
* 3.5mm A/V Jack (Composite Video Output and RCA Stereo support using conversion cable)&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
* 10/100/1000Mbps Ethernet&lt;br /&gt;
* WiFi 802.11 b/g/n with Bluetooth 4.0 (optional USB dongle)&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
* microSD - bootable, supports SDHC and SDXC and storage up to 256GB&lt;br /&gt;
* eMMC - bootable (optional eMMC Module)&lt;br /&gt;
* 128Mbit (16MB) on-board SPI flash memory (empty by default) - bootable? Usually accessible as a [http://linux-mtd.infradead.org/doc/general.html Linux MTD] device at &amp;lt;code&amp;gt;/dev/mtd0&amp;lt;/code&amp;gt;&lt;br /&gt;
* 1 USB3.0 Dedicated Host port&lt;br /&gt;
* 2 USB2.0 Dedicated Host port (top one is USB-OTG)&lt;br /&gt;
&lt;br /&gt;
=== Expansion Ports ===&lt;br /&gt;
All GPIO pins, including UART, operate at 3.3V. (See VCCIO5 in the schematics.)&lt;br /&gt;
&lt;br /&gt;
* 2x20 pins &amp;quot;Pi2&amp;quot; GPIO Header&lt;br /&gt;
* 2x11 pins &amp;quot;Pi P5+&amp;quot; GPIO Header (with 2nd 10/100Mbps Ethernet pins)&lt;br /&gt;
&lt;br /&gt;
== ROCK64 Board Information, Schematics and Certifications ==&lt;br /&gt;
* Board Dimensions: 85mm x 56mm x 18.8mm&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/rock64%20board%20dimension.pdf ROCK64 board dimension drawing]&lt;br /&gt;
* Input Power: +5V @3A with 3.5mm/1.35mm Type H Barrel type DC connector (@2A will work if there is no heavy load on the USB 3.0 port)&lt;br /&gt;
* ROCK64 ver 3.0 SBC related info&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/Rock64%20Ver%203%20change%20notice.pdf ROCK64 SBC v3.0 Change Notice]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_Schematic_v3.0_20181105.pdf ROCK64 Schematic v3.0 (Production Release)]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_comp_ref_top_v3.0_20181105.pdf ROCK64 Component Reference location v3.0 (top layer)]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_comp_ref_bottom_v3.0_20181105.pdf ROCK64 Component Reference location v3.0 (bottom layer)]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_V3_Pi-2_and_Pi-P5+_Bus.pdf ROCK64 SBC v3.0 Pi-2 and Pi-P5+ Bus GPIO Assignment]&lt;br /&gt;
* [https://files.pine64.org/doc/rock64/R64V3%20RTC%20Batt%20connector.png ROCK64 Rev3 SBC RTC Battery Connector polarity]&lt;br /&gt;
* ROCK64 ver 2.0 SBC related info&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_Schematic_v2.0_20171019.pdf ROCK64 Schematic v2.0 (Production Release)] &lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_Pi-2%20_and_Pi_P5+_Bus.pdf ROCK64 SBC v2.0 Pi-2 and Pi-P5+ Bus GPIO Assignment]&lt;br /&gt;
* [https://github.com/Leapo/Rock64-R64.GPIO Github on ROCK64 GPIO library, thanks to Leapo]&lt;br /&gt;
* [http://synfare.com/599N105E/hwdocs/rock64/index.html Good documentation about ROCK64 GPIO pins article]&lt;br /&gt;
* [https://files.pine64.org/doc/rock64/ROCK64_ES9023_Audio_100Mbps_Ethernet_Board.pdf ROCK64 Audio DAC with 10/100Mbps Ethernet POT Board Schematic]&lt;br /&gt;
* ROCK64 3-D autodesk drawing, thanks and courtesy of TeaPack&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761e818b9e1b31b54545?viewState=NoIgbgDAdAjCA0IAsSDMAzAnAQwCaoFoYBjAdhgICNTVcCA2S9AJgIFMJTsAOGTU3LmLYQAXSA ROCK64 board 2D drawing @courtesy of TeaPack]&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761e6078b748ecd478e1?viewState=NoIgbgDAdAjCA0IDeAdEAXAngBwKZoC40ARXAZwEsBzAOzXjQEMyzd1C0AmAEwGYZOAI0G4AtAA4ArABZeo6eIiNRggJwxuomAHYAxoOm6YMaQDZOvNAF8QAXSA ROCK64 board 3D drawing @courtesy of TeaPack]&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761e45a87155aecc813f?viewState=NoIgbgDAdAjCA0IDeAdEAXAngBwKZoC40ARXAZwEsBzAOzXjQEMyzd1C0BWAYwgGYYAEyEBaQQDYARoJEAWfjMmzckkQCYAHCs5LZAMxi41aAL4gAukA ROCK64 Audio DAC with 10/100Mbps Ethernet POT board 3D drawing @courtesy of TeaPack]&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761ee09b497ae3f2f72e?viewState=NoIgbgDAdAjCA0IBmSYEMAcBmAbBgtACwBGhMRATMeQKYYYX5ICcAJhjYWjDBGgKwgAukA ROCK64 board with Audio DAC POT board 3D drawing @courtesy of TeaPack]&lt;br /&gt;
* ROCK64 Certifications:&lt;br /&gt;
** Disclaimer: Please note that PINE64 SBC is not a &amp;quot;final&amp;quot; product and in general certification is not necessary. However, PINE64 still submits the SBC for FCC, CE, and ROHS certifications and obtain the certificates to prove that the SBC board can pass the testing. Please note, a final commercial product needs to perform its own testing and obtain its own certificate.&lt;br /&gt;
** [https://files.pine64.org/doc/cert/ROCK64%20FCC%20certification%20VOC20171129.pdf ROCK64 FCC Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/ROCK64%20CE%20certification%20VOC20171129.pdf ROCK64 CE Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/ROCK64%20ROHS%20certification%20VOC20170927.pdf ROCK64 RoHS Certificate]&lt;br /&gt;
&lt;br /&gt;
== Datasheets for Components and Peripherals ==&lt;br /&gt;
* Rockchip RK3328 SoC information:&lt;br /&gt;
** [https://www.rock-chips.com/a/en/products/RK33_Series/2017/0118/829.html Rockchip RK3328 SoC Brief]&lt;br /&gt;
** [https://rockchip.fr/RK3328%20datasheet%20V1.2.pdf Rockchip RK3328 Datasheet V1.2]&lt;br /&gt;
** [https://opensource.rock-chips.com/images/9/97/Rockchip_RK3328TRM_V1.1-Part1-20170321.pdf Rockchip RK3328 Technical Reference Manual part 1]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/Rockchip_RK805_Datasheet_V1.1%C2%A020160921.pdf Rockchip RK805 Datasheet V1.1]&lt;br /&gt;
* LPDDR3 (178 Balls) SDRAM:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/H9CCNNNCLTMLAR(Rev1.2).pdf Hynix LPDDR3 Datasheet V1.2]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/K4E8E324EB-EGCF000_DRAM_178F_11x11.5_Ver.1.00.00.pdf Samsung LPDDR3 Datasheet V1.00.00]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/SPECTEK_178B_32GB_V91M_MOBILE_LPDDR3.pdf Spectek LPDDR3 Datasheet]&lt;br /&gt;
* eMMC information:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/PINE64_eMMC_Module_20170719.pdf PINE64 eMMC module schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/usb%20emmc%20module%20adapter%20v2.pdf PINE64 USB adapter for eMMC module V2 schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/USB%20adapter%20for%20eMMC%20module%20PCB.tar PINE64 USB adapter for eMMC module PCB in JPEG]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/E-00517%20FORESEE_eMMC_NCEMAM8B-16G%20SPEC.pdf 16GB Foresee eMMC Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/SDINADF4-16-128GB-H%20data%20sheet%20v1.13.pdf 32Gb/64GB/128GB SanDisk eMMC Datasheet]&lt;br /&gt;
* SPI NOR Flash information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/w25q128jv%20spi%20revc%2011162016.pdf WinBond 128Mb SPI Flash Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GD25Q128C-Rev2.5.pdf GigaDevice 128Mb SPI Flash Datasheet]&lt;br /&gt;
* Ethernet related info:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rock64/RTL8211F-CG-Realtek.pdf Realtek RTL8211F 10/100/1000M Ethernet Transceiver Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/DGKYD111B096GWA1D.pdf 10/100Mbps MegJack on Audio DAC POT board Datasheet]&lt;br /&gt;
* Peripheral related info:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/PDS-16002%20JMS578%20Datasheet%20(Rev.%201.01).pdf JMicron JMS578 to SATA  Datasheet]&lt;br /&gt;
* Enclosure information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/ROCK64%20Aluminum%20Waterproof%20Die%20Cast%20Casing.pdf Outdoor Aluminum Cast Dust-proof IP67 Enclosure Drawing]&lt;br /&gt;
* Remote control button mapping&lt;br /&gt;
** [https://files.pine64.org/doc/Pine%20A64%20Schematic/remote-wit-logo.jpg Official Remote Control for the PINE A64 Button Mapping]&lt;br /&gt;
&lt;br /&gt;
== Enclosures ==&lt;br /&gt;
&lt;br /&gt;
[[File:Rock64-Al-Case1-1.jpg|thumb|100px]]&lt;br /&gt;
&lt;br /&gt;
The ROCK64 fits in three officially sold cases.&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Model B&amp;quot; Acrylic Open Enclosure]], [https://pine64.com/product/model-b-acrylic-open-enclosure/ Store]&lt;br /&gt;
* [[&amp;quot;Model B&amp;quot; Aluminum Waterproof Enclosure]], [https://pine64.com/product/model-b-aluminum-waterproof-enclosure/ Store]&lt;br /&gt;
* [[ROCK64 Premium Aluminum Casing]], [https://pine64.com/product/model-b-premium-aluminum-casing/?v=0446c16e2e66 Store]&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== HDMI output disconnects as soon as it connects ===&lt;br /&gt;
&lt;br /&gt;
Some older monitors seemingly can get into a weird state wherein the ROCK64 is unable to establish a proper connection with them. [[User:CounterPillow]] has seen this happen on an iiyama ProLite G2773HS connected over HDMI, and an Acer P225HQL connected over an HDMI to DVI adapter. The symptoms usually are that you see the monitor briefly turn on its backlight without displaying a picture, but then immediately either shutting off again or showing a &amp;quot;No Signal&amp;quot; message.&lt;br /&gt;
&lt;br /&gt;
The solution is to completely power down your ROCK64, also removing its power source. Then plug in the monitor, and start up the ROCK64 afterwards. You should now be getting a picture again.&lt;br /&gt;
&lt;br /&gt;
=== Power button doesn't do anything on a short press (Linux) ===&lt;br /&gt;
&lt;br /&gt;
Make sure the &amp;lt;code&amp;gt;rk805_pwrkey&amp;lt;/code&amp;gt; module is loaded, e.g. with &amp;lt;code&amp;gt;lsmod | grep rk805_pwrkey&amp;lt;/code&amp;gt;. If it doesn't show up, do a &amp;lt;code&amp;gt;modprobe rk805_pwrkey&amp;lt;/code&amp;gt; as root. To make this persistent, create a &amp;lt;code&amp;gt;99-rk805_pwrkey.conf&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;/etc/modules-load.d/&amp;lt;/code&amp;gt; with the content &amp;lt;code&amp;gt;rk805_pwrkey&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it still doesn't work, make sure your init system is actually listening to the button press. With systemd, check &amp;lt;code&amp;gt;/etc/systemd/logind.conf&amp;lt;/code&amp;gt; and make sure it's either all commented out (uses defaults) or contains something like &amp;lt;code&amp;gt;HandlePowerKey=poweroff&amp;lt;/code&amp;gt;. You can change the short press action by setting &amp;lt;code&amp;gt;HandlePowerKey&amp;lt;/code&amp;gt; to one of &amp;quot;ignore&amp;quot;, &amp;quot;poweroff&amp;quot;, &amp;quot;reboot&amp;quot;, &amp;quot;halt&amp;quot;, &amp;quot;kexec&amp;quot;, &amp;quot;suspend&amp;quot;, &amp;quot;hibernate&amp;quot;, &amp;quot;hybrid-sleep&amp;quot;, &amp;quot;suspend-then-hibernate&amp;quot;, or &amp;quot;lock&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Other Resources ==&lt;br /&gt;
* [https://forum.pine64.org/forumdisplay.php?fid=85 ROCK64 Forum]&lt;br /&gt;
* IRC Server: irc.pine64.org Channel: ROCK64&lt;br /&gt;
* [https://github.com/rock64-linux ROCK64 Linux GitHub Repo]&lt;br /&gt;
* [https://github.com/ayufan-rock64 ROCK64 ayufan GitHub Repo]&lt;br /&gt;
* [https://github.com/rockchip-linux Rockchip Linux GitHub Repo]&lt;br /&gt;
* [https://github.com/JamesLinEngineer/RKMC Rockchip Android RKMC (Forked from Kodi 16.1)]&lt;br /&gt;
* [https://opensource.rock-chips.com/ Rockchip Open Source Wiki]&lt;br /&gt;
* [https://wiki.pine64.org/index.php/Rock64_Guides ROCK64 Guides]&lt;br /&gt;
* [https://www.armbian.com/rock64 Armbian's ROCK64 Page]&lt;br /&gt;
&lt;br /&gt;
[[Category:Rock64]] [[Category:Rockchip RK3328]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=ROCK64&amp;diff=12954</id>
		<title>ROCK64</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=ROCK64&amp;diff=12954"/>
		<updated>2022-04-28T21:47:35Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Fix 'debian by ayufan' link and add link to official Debian Installer images&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Rock64.jpg|400px|thumb|right|The ROCK64]]&lt;br /&gt;
&lt;br /&gt;
The '''ROCK64''' is a credit-card size 4K60P HDR Media Board Computer powered by Rockchip RK3328 Quad-Core ARM Cortex A53 64-Bit Processor and supports up to 4GB 1866MHz LPDDR3 memory. It provides an eMMC module socket, MicroSD Card slot, Pi-2 Bus, Pi-P5+ Bus, USB 3.0, and many other peripheral interfaces for makers to integrate with sensors and other devices. &lt;br /&gt;
&lt;br /&gt;
It supports many different open source operating systems, such as Android, Debian, and Yocto.&lt;br /&gt;
&lt;br /&gt;
== Software releases ==&lt;br /&gt;
* OS build Installation Guide and tools:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/tools/SD_Firmware_Tool._v1.46.zip Tools to burn Android build into a bootable microSD card]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/tools/AndroidTool_Release_v2.38.zip Tools that allows developer flash image into eMMC's Loader/Parameter/Misc/Kernal/Boot/Recovery/System/Backup partition]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/tools/DriverAssitant_v4.5.zip Windows ADB driver package]&lt;br /&gt;
** [[ROCK64 MAC Address]]&lt;br /&gt;
&lt;br /&gt;
Under [[ROCK64 Software Releases]] you will find a complete list of currently supported operating system images, which work with the ROCK64, as well as other related software. &lt;br /&gt;
&lt;br /&gt;
The list includes OS images and descriptions of:&lt;br /&gt;
&lt;br /&gt;
* [[ROCK64_Software_Releases#Armbian|Armbian (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#AOSC|AOSC (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Manjaro ARM|Manjaro ARM (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Ubuntu 18.04 Bionic by ayufan|Ubuntu 18.04 Bionic by ayufan (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Slackware|Slackware (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#DietPi|DietPi (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#LibreELEC.28KODI.29|LibreElec for KODI (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Volumio 2 Digital Audio Player|Volumio 2 Digital Audio Player (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Debian|Debian Installer images (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Debian_by_ayufan|Debian by ayufan (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Debian_by_mrfixit2001|Debian by mrfixit2001 (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#OpenMediaVault|OpenMediaVault 64bit (microSD / eMMC boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#NextCloudPi|NextCloudPi (microSD / eMMC Boot)]] &lt;br /&gt;
* [[ROCK64_Software_Releases#Recalbox|Recalbox (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#NetBSD|NetBSD (microSD / eMMC Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_9.x_eMMC|Android 9.x (eMMC)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_8.x_eMMC|Android 8.x (eMMC)]] / [[ROCK64_Software_Releases#Android_8.x|Android 8.x (microSD Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_7.x_eMMC|Android 7.x (eMMC)]] / [[ROCK64_Software_Releases#Android_7.x|Android 7.x (microSD Boot)]]&lt;br /&gt;
* [[ROCK64_Software_Releases#Android_TV_7.x_eMMC|Android TV 7.x (eMMC)]] / [[ROCK64_Software_Releases#Android_TV_7.x|Android TV 7.x (microSD Boot)]]&lt;br /&gt;
&lt;br /&gt;
=== Quick Links to the Source of OS Images Build ===&lt;br /&gt;
&lt;br /&gt;
Some OS images are still in '''beta or nightly build''' which are only fit for testing purposes. These should usually be avoided for normal usage, since they are '''used at your own risk'''.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/latest/ ayufan Linux]&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/latest/ ayufan Android 7.1]&lt;br /&gt;
* [https://github.com/Raybuntu/LibreELEC.tv/releases/latest/ Raybuntu LibreElec KODI] | [https://github.com/Kwiboo/LibreELEC.tv/releases/latest/ Kwiboo LibreElec KODI]&lt;br /&gt;
* [https://github.com/fire219/rock64-fedora/releases/latest/ Fire219 Fedora]&lt;br /&gt;
* [https://nightly.builds.lakka.tv/by_devices/RK3328.aarch64/ Lakka] | [https://github.com/rtissera/RetroPie-Setup/releases/latest/ RetroPie-Setup]&lt;br /&gt;
* [https://dl.armbian.com/rock64/ Armbian]&lt;br /&gt;
* [https://github.com/m01/rock64-arch-linux-build/releases/latest Arch Linux]&lt;br /&gt;
* [https://ownyourbits.com/downloads/ NextCloudPi]&lt;br /&gt;
* [https://dl.fail.pp.ua/slackware/images/rock64/ Slackware]&lt;br /&gt;
&lt;br /&gt;
=== State of Software Support for the Hardware ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Requirement&lt;br /&gt;
! GNU/Linux&lt;br /&gt;
! Android/Linux&lt;br /&gt;
! Kodi/Linux&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 2160p 30Hz 8bit h264/h265/vp8&lt;br /&gt;
| partial? [https://forum.pine64.org/showthread.php?tid=4861&amp;amp;pid=32474#pid32474 1]&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| UI using GPU&lt;br /&gt;
| no&lt;br /&gt;
| yes&lt;br /&gt;
| yes&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Youtube&lt;br /&gt;
| no&lt;br /&gt;
| yes&lt;br /&gt;
| no&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| vp9 / mpeg4 / mpeg2 / 10bit HDR / YCbCr&lt;br /&gt;
| no&lt;br /&gt;
| yes?&lt;br /&gt;
| yes&lt;br /&gt;
&lt;br /&gt;
|}&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchipdrm&amp;lt;/code&amp;gt;&lt;br /&gt;
| With mpv, you'll need to specify something like &amp;lt;code&amp;gt;mpv --gpu-context=drm --drm-connector=1.HDMI-A-1&amp;lt;/code&amp;gt; to get it to play back on a VT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;lima&amp;lt;/code&amp;gt;&lt;br /&gt;
| Very recent version recommended for the best experience. Has weird glitches on HDMI output in weston.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Staging&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Broken/Not in ffmpeg&lt;br /&gt;
| &amp;lt;code&amp;gt;hantro_vpu&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rockchip_vdec&amp;lt;/code&amp;gt;, using &amp;lt;code&amp;gt;v4l2-requests&amp;lt;/code&amp;gt;&lt;br /&gt;
| [https://lore.kernel.org/linux-media/49b1-608d4d00-2b-62afdf80@101971638/ Soon to be moved out of staging], ffmpeg patch set [https://patchwork.ffmpeg.org/project/ffmpeg/patch/20201209202513.27449-3-jonas@kwiboo.se/ seemingly abandoned], does not work on newer kernels. [https://github.com/Kwiboo/FFmpeg/commits/v4l2-request-hwaccel-master-stable Git branch with commits]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Audio &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;snd_soc_rockchip_*&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Button&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;rk805_pwrkey&amp;lt;/code&amp;gt;&lt;br /&gt;
| If your PWR switch does nothing unless held, this may need to be loaded manually with &amp;lt;code&amp;gt;modprobe&amp;lt;/code&amp;gt; or by putting it in &amp;lt;code&amp;gt;/etc/modules-load.d/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Analog 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;rockchip_drm_tve&amp;lt;/code&amp;gt;&lt;br /&gt;
| Definitely needs some cleanup before it'd be ready for mainline, and needs some dt bindings written.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SoC and Memory Specification ==&lt;br /&gt;
* Based on [https://www.rock-chips.com/a/en/products/RK33_Series/2017/0118/829.html Rockchip RK3328]&lt;br /&gt;
[[File:Rockchip_RK3328.png|right]]&lt;br /&gt;
&lt;br /&gt;
=== CPU Architecture ===&lt;br /&gt;
* [https://www.arm.com/products/processors/cortex-a/cortex-a53-processor.php Quad-core Cortex-A53 up to 1.5GHz CPU]&lt;br /&gt;
* Full implementation of the ARM architecture v8-A instruction set&lt;br /&gt;
* ARM Neon Advanced SIMD (single instruction, multiple data) support for accelerated media and signal processing computation&lt;br /&gt;
* ARMv8 Cryptography Extensions&lt;br /&gt;
* In-order pipeline with symmetric dual-issue of most instructions&lt;br /&gt;
* Unified system L2 cache&lt;br /&gt;
* Includes VFP v3 hardware to support single and double-precision operations&lt;br /&gt;
* Integrated 32KB L1 instruction cache, 32KB 4-way set associative L1 data cache&lt;br /&gt;
* TrustZone technology support&lt;br /&gt;
* Full CoreSight debug solution&lt;br /&gt;
* One separate power domain for CPU core system to support internal power switch, and to externally turn on/off based on different application scenario&lt;br /&gt;
* PD_A53: Cortex-A53 + Neon + FPU + L1 I/D Cache of core 2/3&lt;br /&gt;
* One isolated voltage domain to support DVFS&lt;br /&gt;
&lt;br /&gt;
==== Frequencies &amp;amp; Voltages ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Frequency&lt;br /&gt;
! Voltage&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 408 MHz&lt;br /&gt;
| 0.950 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 600 MHz&lt;br /&gt;
| 0.950 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 816 MHz&lt;br /&gt;
| 1.000 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1008 MHz&lt;br /&gt;
| 1.100 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1200 MHz&lt;br /&gt;
| 1.225 V&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1296 MHz&lt;br /&gt;
| 1.300 V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Power Draw ====&lt;br /&gt;
&lt;br /&gt;
These numbers for power draw have been measured through an USB power monitor (FNB38) while running the &amp;lt;code&amp;gt;stress&amp;lt;/code&amp;gt; utility, whereby &amp;quot;cpu&amp;quot; stands for &amp;lt;code&amp;gt;stress --cpu 4&amp;lt;/code&amp;gt; and &amp;quot;vm&amp;quot; stands for &amp;lt;code&amp;gt;stress --vm 4&amp;lt;/code&amp;gt;. The former spins on the CPU, the latter stresses the memory. Real workloads are usually a mix of both. The tests were ran through ssh, with nothing besides power and ethernet plugged into the ROCK64&lt;br /&gt;
&lt;br /&gt;
Please keep in mind that under real world usage, many other factors come into play. Having a display connected, running a graphical session, I/O and most importantly the connected USB peripherals can add a lot.&lt;br /&gt;
&lt;br /&gt;
Helpful refresher on the formula for power (W) on DC: power = current &amp;amp;times; voltage, because the power factor is 1. The ROCK64 runs on 5V, so use that to calculate current if you need to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Frequency&lt;br /&gt;
! Power cpu&lt;br /&gt;
! Power vm&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1296 MHz&lt;br /&gt;
| 2.64 W&lt;br /&gt;
| 2.95 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1200 MHz&lt;br /&gt;
| 2.32 W&lt;br /&gt;
| 2.69 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 1008 MHz&lt;br /&gt;
| 1.90 W&lt;br /&gt;
| 2.31 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 816 MHz&lt;br /&gt;
| 1.62 W&lt;br /&gt;
| 2.05 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 600 MHz&lt;br /&gt;
| 1.45 W&lt;br /&gt;
| 1.85 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| 408 MHz&lt;br /&gt;
| 1.33 W&lt;br /&gt;
| 1.72 W&lt;br /&gt;
|- style=&amp;quot;text-align:right;&amp;quot;&lt;br /&gt;
| Idle (no load)&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;| 1.10 W&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It appears a good upper bound for a headless setup is in the neighbourhood of 3 W, or the energy contained in 0.025 bananas per hour.&lt;br /&gt;
&lt;br /&gt;
=== GPU Architecture ===&lt;br /&gt;
* [https://www.arm.com/products/multimedia/mali-gpu/ultra-low-power/mali-450.php ARM Mali-450MP2 Dual-core GPU]&lt;br /&gt;
* OpenGL ES 1.1 and 2.0, OpenVG1.1&lt;br /&gt;
&lt;br /&gt;
=== System Memory ===&lt;br /&gt;
* LPDDR3 RAM Memory Variants: 1GB, 2GB and 4GB.&lt;br /&gt;
&lt;br /&gt;
== Board Features ==&lt;br /&gt;
[[File:ROCK64_sideimg.jpg|400px|thumb|right|The ROCK64 and a size comparison]]&lt;br /&gt;
&lt;br /&gt;
=== Video ===&lt;br /&gt;
* Digital Video output up to 4K@60Hz&lt;br /&gt;
* 4K HDR @ 60fps&lt;br /&gt;
* H.264/AVC Base/Main/High/High10 profile @ level 5.1; up to 4Kx2K @ 60fps&lt;br /&gt;
* H.265/HEVC Main/Main10 profile @ level 5.1 High-tier; up to 4Kx2K @ 60fps&lt;br /&gt;
* VP9, up to 4Kx2K @ 60fps&lt;br /&gt;
* MPEG-1, ISO/IEC 11172-2, up to 1080P @ 60fps&lt;br /&gt;
* MPEG-2, ISO/IEC 13818-2, SP@ML, MP@HL, up to 1080P @ 60fps&lt;br /&gt;
* MPEG-4, ISO/IEC 14496-2, SP@L0-3, ASP@L0-5, up to 1080P @ 60fps&lt;br /&gt;
* VC-1, SP@ML, MP@HL, AP@L0-3, up to 1080P @ 60fps&lt;br /&gt;
* MVC is supported based on H.264 or H.265, up to 1080P @ 60fps&lt;br /&gt;
&lt;br /&gt;
=== Audio ===&lt;br /&gt;
* 3.5mm A/V Jack (Composite Video Output and RCA Stereo support using conversion cable)&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
* 10/100/1000Mbps Ethernet&lt;br /&gt;
* WiFi 802.11 b/g/n with Bluetooth 4.0 (optional USB dongle)&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
* microSD - bootable, supports SDHC and SDXC and storage up to 256GB&lt;br /&gt;
* eMMC - bootable (optional eMMC Module)&lt;br /&gt;
* 128Mbit (16MB) on-board SPI flash memory (empty by default) - bootable? Usually accessible as a [http://linux-mtd.infradead.org/doc/general.html Linux MTD] device at &amp;lt;code&amp;gt;/dev/mtd0&amp;lt;/code&amp;gt;&lt;br /&gt;
* 1 USB3.0 Dedicated Host port&lt;br /&gt;
* 2 USB2.0 Dedicated Host port (top one is USB-OTG)&lt;br /&gt;
&lt;br /&gt;
=== Expansion Ports ===&lt;br /&gt;
All GPIO pins, including UART, operate at 3.3V. (See VCCIO5 in the schematics.)&lt;br /&gt;
&lt;br /&gt;
* 2x20 pins &amp;quot;Pi2&amp;quot; GPIO Header&lt;br /&gt;
* 2x11 pins &amp;quot;Pi P5+&amp;quot; GPIO Header (with 2nd 10/100Mbps Ethernet pins)&lt;br /&gt;
&lt;br /&gt;
== ROCK64 Board Information, Schematics and Certifications ==&lt;br /&gt;
* Board Dimensions: 85mm x 56mm x 18.8mm&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/rock64%20board%20dimension.pdf ROCK64 board dimension drawing]&lt;br /&gt;
* Input Power: +5V @3A with 3.5mm/1.35mm Type H Barrel type DC connector (@2A will work if there is no heavy load on the USB 3.0 port)&lt;br /&gt;
* ROCK64 ver 3.0 SBC related info&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/Rock64%20Ver%203%20change%20notice.pdf ROCK64 SBC v3.0 Change Notice]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_Schematic_v3.0_20181105.pdf ROCK64 Schematic v3.0 (Production Release)]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_comp_ref_top_v3.0_20181105.pdf ROCK64 Component Reference location v3.0 (top layer)]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_comp_ref_bottom_v3.0_20181105.pdf ROCK64 Component Reference location v3.0 (bottom layer)]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_V3_Pi-2_and_Pi-P5+_Bus.pdf ROCK64 SBC v3.0 Pi-2 and Pi-P5+ Bus GPIO Assignment]&lt;br /&gt;
* [https://files.pine64.org/doc/rock64/R64V3%20RTC%20Batt%20connector.png ROCK64 Rev3 SBC RTC Battery Connector polarity]&lt;br /&gt;
* ROCK64 ver 2.0 SBC related info&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_Schematic_v2.0_20171019.pdf ROCK64 Schematic v2.0 (Production Release)] &lt;br /&gt;
** [https://files.pine64.org/doc/rock64/ROCK64_Pi-2%20_and_Pi_P5+_Bus.pdf ROCK64 SBC v2.0 Pi-2 and Pi-P5+ Bus GPIO Assignment]&lt;br /&gt;
* [https://github.com/Leapo/Rock64-R64.GPIO Github on ROCK64 GPIO library, thanks to Leapo]&lt;br /&gt;
* [http://synfare.com/599N105E/hwdocs/rock64/index.html Good documentation about ROCK64 GPIO pins article]&lt;br /&gt;
* [https://files.pine64.org/doc/rock64/ROCK64_ES9023_Audio_100Mbps_Ethernet_Board.pdf ROCK64 Audio DAC with 10/100Mbps Ethernet POT Board Schematic]&lt;br /&gt;
* ROCK64 3-D autodesk drawing, thanks and courtesy of TeaPack&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761e818b9e1b31b54545?viewState=NoIgbgDAdAjCA0IAsSDMAzAnAQwCaoFoYBjAdhgICNTVcCA2S9AJgIFMJTsAOGTU3LmLYQAXSA ROCK64 board 2D drawing @courtesy of TeaPack]&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761e6078b748ecd478e1?viewState=NoIgbgDAdAjCA0IDeAdEAXAngBwKZoC40ARXAZwEsBzAOzXjQEMyzd1C0AmAEwGYZOAI0G4AtAA4ArABZeo6eIiNRggJwxuomAHYAxoOm6YMaQDZOvNAF8QAXSA ROCK64 board 3D drawing @courtesy of TeaPack]&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761e45a87155aecc813f?viewState=NoIgbgDAdAjCA0IDeAdEAXAngBwKZoC40ARXAZwEsBzAOzXjQEMyzd1C0BWAYwgGYYAEyEBaQQDYARoJEAWfjMmzckkQCYAHCs5LZAMxi41aAL4gAukA ROCK64 Audio DAC with 10/100Mbps Ethernet POT board 3D drawing @courtesy of TeaPack]&lt;br /&gt;
** [https://myhub.autodesk360.com/ue2b2f72e/g/shares/SH7f1edQT22b515c761ee09b497ae3f2f72e?viewState=NoIgbgDAdAjCA0IBmSYEMAcBmAbBgtACwBGhMRATMeQKYYYX5ICcAJhjYWjDBGgKwgAukA ROCK64 board with Audio DAC POT board 3D drawing @courtesy of TeaPack]&lt;br /&gt;
* ROCK64 Certifications:&lt;br /&gt;
** Disclaimer: Please note that PINE64 SBC is not a &amp;quot;final&amp;quot; product and in general certification is not necessary. However, PINE64 still submits the SBC for FCC, CE, and ROHS certifications and obtain the certificates to prove that the SBC board can pass the testing. Please note, a final commercial product needs to perform its own testing and obtain its own certificate.&lt;br /&gt;
** [https://files.pine64.org/doc/cert/ROCK64%20FCC%20certification%20VOC20171129.pdf ROCK64 FCC Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/ROCK64%20CE%20certification%20VOC20171129.pdf ROCK64 CE Certificate]&lt;br /&gt;
** [https://files.pine64.org/doc/cert/ROCK64%20ROHS%20certification%20VOC20170927.pdf ROCK64 RoHS Certificate]&lt;br /&gt;
&lt;br /&gt;
== Datasheets for Components and Peripherals ==&lt;br /&gt;
* Rockchip RK3328 SoC information:&lt;br /&gt;
** [https://www.rock-chips.com/a/en/products/RK33_Series/2017/0118/829.html Rockchip RK3328 SoC Brief]&lt;br /&gt;
** [https://rockchip.fr/RK3328%20datasheet%20V1.2.pdf Rockchip RK3328 Datasheet V1.2]&lt;br /&gt;
** [https://opensource.rock-chips.com/images/9/97/Rockchip_RK3328TRM_V1.1-Part1-20170321.pdf Rockchip RK3328 Technical Reference Manual part 1]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/Rockchip_RK805_Datasheet_V1.1%C2%A020160921.pdf Rockchip RK805 Datasheet V1.1]&lt;br /&gt;
* LPDDR3 (178 Balls) SDRAM:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/H9CCNNNCLTMLAR(Rev1.2).pdf Hynix LPDDR3 Datasheet V1.2]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/K4E8E324EB-EGCF000_DRAM_178F_11x11.5_Ver.1.00.00.pdf Samsung LPDDR3 Datasheet V1.00.00]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/SPECTEK_178B_32GB_V91M_MOBILE_LPDDR3.pdf Spectek LPDDR3 Datasheet]&lt;br /&gt;
* eMMC information:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/PINE64_eMMC_Module_20170719.pdf PINE64 eMMC module schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/usb%20emmc%20module%20adapter%20v2.pdf PINE64 USB adapter for eMMC module V2 schematic]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/USB%20adapter%20for%20eMMC%20module%20PCB.tar PINE64 USB adapter for eMMC module PCB in JPEG]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/E-00517%20FORESEE_eMMC_NCEMAM8B-16G%20SPEC.pdf 16GB Foresee eMMC Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/SDINADF4-16-128GB-H%20data%20sheet%20v1.13.pdf 32Gb/64GB/128GB SanDisk eMMC Datasheet]&lt;br /&gt;
* SPI NOR Flash information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/w25q128jv%20spi%20revc%2011162016.pdf WinBond 128Mb SPI Flash Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/pine64/GD25Q128C-Rev2.5.pdf GigaDevice 128Mb SPI Flash Datasheet]&lt;br /&gt;
* Ethernet related info:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/rock64/RTL8211F-CG-Realtek.pdf Realtek RTL8211F 10/100/1000M Ethernet Transceiver Datasheet]&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/DGKYD111B096GWA1D.pdf 10/100Mbps MegJack on Audio DAC POT board Datasheet]&lt;br /&gt;
* Peripheral related info:&lt;br /&gt;
** [https://files.pine64.org/doc/rock64/PDS-16002%20JMS578%20Datasheet%20(Rev.%201.01).pdf JMicron JMS578 to SATA  Datasheet]&lt;br /&gt;
* Enclosure information:&lt;br /&gt;
** [https://files.pine64.org/doc/datasheet/case/ROCK64%20Aluminum%20Waterproof%20Die%20Cast%20Casing.pdf Outdoor Aluminum Cast Dust-proof IP67 Enclosure Drawing]&lt;br /&gt;
* Remote control button mapping&lt;br /&gt;
** [https://files.pine64.org/doc/Pine%20A64%20Schematic/remote-wit-logo.jpg Official Remote Control for the PINE A64 Button Mapping]&lt;br /&gt;
&lt;br /&gt;
== Enclosures ==&lt;br /&gt;
&lt;br /&gt;
[[File:Rock64-Al-Case1-1.jpg|thumb|100px]]&lt;br /&gt;
&lt;br /&gt;
The ROCK64 fits in three officially sold cases.&lt;br /&gt;
&lt;br /&gt;
* [[&amp;quot;Model B&amp;quot; Acrylic Open Enclosure]], [https://pine64.com/product/model-b-acrylic-open-enclosure/ Store]&lt;br /&gt;
* [[&amp;quot;Model B&amp;quot; Aluminum Waterproof Enclosure]], [https://pine64.com/product/model-b-aluminum-waterproof-enclosure/ Store]&lt;br /&gt;
* [[ROCK64 Premium Aluminum Casing]], [https://pine64.com/product/model-b-premium-aluminum-casing/?v=0446c16e2e66 Store]&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== HDMI output disconnects as soon as it connects ===&lt;br /&gt;
&lt;br /&gt;
Some older monitors seemingly can get into a weird state wherein the ROCK64 is unable to establish a proper connection with them. [[User:CounterPillow]] has seen this happen on an iiyama ProLite G2773HS connected over HDMI, and an Acer P225HQL connected over an HDMI to DVI adapter. The symptoms usually are that you see the monitor briefly turn on its backlight without displaying a picture, but then immediately either shutting off again or showing a &amp;quot;No Signal&amp;quot; message.&lt;br /&gt;
&lt;br /&gt;
The solution is to completely power down your ROCK64, also removing its power source. Then plug in the monitor, and start up the ROCK64 afterwards. You should now be getting a picture again.&lt;br /&gt;
&lt;br /&gt;
=== Power button doesn't do anything on a short press (Linux) ===&lt;br /&gt;
&lt;br /&gt;
Make sure the &amp;lt;code&amp;gt;rk805_pwrkey&amp;lt;/code&amp;gt; module is loaded, e.g. with &amp;lt;code&amp;gt;lsmod | grep rk805_pwrkey&amp;lt;/code&amp;gt;. If it doesn't show up, do a &amp;lt;code&amp;gt;modprobe rk805_pwrkey&amp;lt;/code&amp;gt; as root. To make this persistent, create a &amp;lt;code&amp;gt;99-rk805_pwrkey.conf&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;/etc/modules-load.d/&amp;lt;/code&amp;gt; with the content &amp;lt;code&amp;gt;rk805_pwrkey&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it still doesn't work, make sure your init system is actually listening to the button press. With systemd, check &amp;lt;code&amp;gt;/etc/systemd/logind.conf&amp;lt;/code&amp;gt; and make sure it's either all commented out (uses defaults) or contains something like &amp;lt;code&amp;gt;HandlePowerKey=poweroff&amp;lt;/code&amp;gt;. You can change the short press action by setting &amp;lt;code&amp;gt;HandlePowerKey&amp;lt;/code&amp;gt; to one of &amp;quot;ignore&amp;quot;, &amp;quot;poweroff&amp;quot;, &amp;quot;reboot&amp;quot;, &amp;quot;halt&amp;quot;, &amp;quot;kexec&amp;quot;, &amp;quot;suspend&amp;quot;, &amp;quot;hibernate&amp;quot;, &amp;quot;hybrid-sleep&amp;quot;, &amp;quot;suspend-then-hibernate&amp;quot;, or &amp;quot;lock&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Other Resources ==&lt;br /&gt;
* [https://forum.pine64.org/forumdisplay.php?fid=85 ROCK64 Forum]&lt;br /&gt;
* IRC Server: irc.pine64.org Channel: ROCK64&lt;br /&gt;
* [https://github.com/rock64-linux ROCK64 Linux GitHub Repo]&lt;br /&gt;
* [https://github.com/ayufan-rock64 ROCK64 ayufan GitHub Repo]&lt;br /&gt;
* [https://github.com/rockchip-linux Rockchip Linux GitHub Repo]&lt;br /&gt;
* [https://github.com/JamesLinEngineer/RKMC Rockchip Android RKMC (Forked from Kodi 16.1)]&lt;br /&gt;
* [https://opensource.rock-chips.com/ Rockchip Open Source Wiki]&lt;br /&gt;
* [https://wiki.pine64.org/index.php/Rock64_Guides ROCK64 Guides]&lt;br /&gt;
* [https://www.armbian.com/rock64 Armbian's ROCK64 Page]&lt;br /&gt;
&lt;br /&gt;
[[Category:Rock64]] [[Category:Rockchip RK3328]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=ROCK64_Software_Releases&amp;diff=12953</id>
		<title>ROCK64 Software Releases</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=ROCK64_Software_Releases&amp;diff=12953"/>
		<updated>2022-04-28T21:38:20Z</updated>

		<summary type="html">&lt;p&gt;Diederik: spelling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of all available releases for the [[ROCK64]], as well as links to other resources.&lt;br /&gt;
&lt;br /&gt;
= Linux Image Releases =&lt;br /&gt;
&lt;br /&gt;
== Armbian==&lt;br /&gt;
[[File:armbian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Version 5.88 onward support Rock64-v3 board&lt;br /&gt;
* To find out more about Armbian and available options please visit their [https://www.armbian.com/rock64/ site]&lt;br /&gt;
* Armbian pack as 7zip, please unzip first before dd.&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Focal XFCE Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Mainline kernel build&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Focal XFCE Desktop download site]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Bionic XFCE Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Mainline kernel build&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Bionic XFCE DEsktop download site]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: 1234&lt;br /&gt;
&lt;br /&gt;
=== Armbian Debian Buster for Server and Light Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Armbian provides a mainline kernel build images for Debian Buster&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Debian Buster download site]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Focal for Server and Light Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Armbian provides a mainline kernel build images for Ubuntu Focal&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Focal download site]&lt;br /&gt;
&lt;br /&gt;
== AOSC ==&lt;br /&gt;
[[File:aosc.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* To learn more about AOSC, please visit the official [https://aosc.io/ AOSC website]&lt;br /&gt;
* AOSC using LZ4 compression algorithm, please visit the [https://github.com/lz4/lz4 LZ4 github site] for utility&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
* Login with&lt;br /&gt;
** username: aosc&lt;br /&gt;
** password: anthon&lt;br /&gt;
=== AOSC KDE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/kde/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC GNOME Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/gnome/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC MATE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/mate/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC Cinnamon Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/cinnamon/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC XFCE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/xfce/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC LXDE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/lxde/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Manjaro ARM ==&lt;br /&gt;
[[File:Manjaro.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
Manjaro editions for Rock64 are available directly from Manjaro.&lt;br /&gt;
&lt;br /&gt;
[https://manjaro.org/download/#rock64 Manjaro Rock64 Download Page]&lt;br /&gt;
&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* To learn more about Manjaro please visit [https://forum.manjaro.org/tags/manjaroarm Manjaro Forum] &lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
&lt;br /&gt;
== Ubuntu 18.04 Bionic by ayufan ==&lt;br /&gt;
[[File:penguin.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases ayufan ROCK64 Linux Build GitHub]&lt;br /&gt;
* Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock64&lt;br /&gt;
** password: rock64&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic LXDE Desktop (armhf) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-lxde-rock64-0.9.14-1159-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic minimal 64bit (arm64) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-minimal-rock64-0.9.14-1159-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic minimal 32bit (armhf) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-minimal-rock64-0.9.14-1159-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic containers (DockerCE &amp;amp; Kubernetes) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-containers-rock64-0.9.14-1159-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
== Slackware==&lt;br /&gt;
[[File:slackware.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Slackware is a very old, interesting, convenient and easy distribution.&lt;br /&gt;
* Visit the project's website here (https://fail.pp.ua)&lt;br /&gt;
* You can follow the ongoing discussion about Slackware on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=5868)&lt;br /&gt;
* This Slackware build using ZST compression algorithm, please visit the [https://github.com/facebook/zstd ZST github site] for utility&lt;br /&gt;
&lt;br /&gt;
=== Slackware Aarch64 XFCE Community Build Image [microSD Boot] ===&lt;br /&gt;
* System with a graphical shell&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [http://dl.fail.pp.ua/slackware/images/rock64/ Direct download from http://dl.fail.pp.ua and look for slarm64-current-aarch64-xfce-rock64-x.xx.x-build-xxxxxxxx.img.zst]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username : root&lt;br /&gt;
** Password : password&lt;br /&gt;
&lt;br /&gt;
=== Slackware Aarch64 Miniroot Community Build Image [microSD Boot] ===&lt;br /&gt;
* System without a graphical shell&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [http://dl.fail.pp.ua/slackware/images/rock64/ Direct download from http://dl.fail.pp.ua and look for slarm64-current-aarch64-base-rock64-x.xx.x-build-xxxxxxxx.img.zst]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username : root&lt;br /&gt;
** Password : password&lt;br /&gt;
&lt;br /&gt;
* To run the OS on eMMC&lt;br /&gt;
**Flash the image to micro SD, power up the board with micro SD and login&lt;br /&gt;
**Copy the image file to micro SD by using SFTP. The image file must be in .img. ''note : root user are not allow transfer file to micro SD.''&lt;br /&gt;
**After finish copy the file, power off the board and add eMMC module to the board&lt;br /&gt;
**Bootup the board, run below command for flashing to eMMC module&lt;br /&gt;
***&amp;gt;&amp;gt;dd if=[image file] of=/dev/mmcblk1 bs=10M&lt;br /&gt;
****''example : dd if=slack-current-aarch64-xfce_08May18-4.4.126-rock64-build-20180508.img of=/dev/mmcblk1 bs=10M''&lt;br /&gt;
***then edit 2 files in eMMC module:&lt;br /&gt;
***&amp;gt;&amp;gt; mount /dev/mmcblk1p1 /media&lt;br /&gt;
***&amp;gt;&amp;gt; echo &amp;quot;rootdev=/dev/mmcblk1p1&amp;quot; &amp;gt;&amp;gt; /media/boot/uEnv.txt&lt;br /&gt;
***&amp;gt;&amp;gt; sed -i 's:mmcblk0p1:mmcblk1p1:' /media/etc/fstab&lt;br /&gt;
**After done, power off board and remove micro SD. Then bootup with only eMMC module.&lt;br /&gt;
&lt;br /&gt;
== DietPi ==&lt;br /&gt;
[[File:dietpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* DietPi is a '''lightweight''', yet '''easy to setup''' and '''feature-rich''' Linux distribution, based on '''Debian'''.&lt;br /&gt;
* To find out more about DietPi, please visit the [https://dietpi.com/docs/ official documentation].&lt;br /&gt;
* Discuss the ROCK64 build on the [https://forum.pine64.org/showthread.php?tid=12514 PINE64 forum thread].&lt;br /&gt;
* DD image (for 4 GiB micro SD card or eMMC and above)&lt;br /&gt;
** [https://dietpi.com/downloads/images/DietPi_ROCK64-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: '''root'''&lt;br /&gt;
** Password: '''dietpi'''&lt;br /&gt;
&lt;br /&gt;
== LibreELEC(KODI) ==&lt;br /&gt;
[[File:libreelec.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Official LibreElec KODI Build Image [microSD / eMMC boot] ===&lt;br /&gt;
&lt;br /&gt;
* Unzip and DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
** [https://libreelec.tv/downloads_new/rockchip/ Direct download from LibreElec site and look for PINE64 ROCK64-LibreELEC-RK3328.arm-x.x.x-rock64.img.gz]&lt;br /&gt;
&lt;br /&gt;
== Volumio 2 Digital Audio Player ==&lt;br /&gt;
[[File:volumio.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Volumio is a linux-based headless DAP (digital audio player), which connects to your home stereo system or your DAC&lt;br /&gt;
* Visit the project's website [https://community.volumio.org/t/volumio-2-on-rock64/8192 here]&lt;br /&gt;
* You can follow the ongoing discussion about Volumio on the [https://forum.pine64.org/showthread.php?tid=5322 PINE64 forum]&lt;br /&gt;
&lt;br /&gt;
=== Volumio Digital Audio Player Community Build Image [microSD Boot] [2.528-2019-01-12] ===&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://updates.volumio.org/rock64/volumio/2.861/volumio-2.861-2020-12-22-rock64.img.zip Direct download from volumio.org]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: volumio&lt;br /&gt;
** Password: volumio&lt;br /&gt;
* '''Volumio is controlled using a Web-GUI which can be accessed via a web browser using the boards IP or volumio.local/'''&lt;br /&gt;
&lt;br /&gt;
== Lakka ==&lt;br /&gt;
[[File:lakka.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Lakka Community Build Image [microSD / eMMC Boot] ===&lt;br /&gt;
* [https://www.lakka.tv/ Lakka] The open source game console; a lightweight Linux distribution that transforms the Rock64 into a full blown retrogaming console&lt;br /&gt;
* Visit [https://forum.pine64.org/showthread.php?tid=5354 PINE64 forum] for more information about the Lakka release&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://le.builds.lakka.tv/legacy-2.3/Rockchip.ROCK64.arm/ Direct download from Lakka] &lt;br /&gt;
* [[Lakka|Lakka Basic Setup]]&lt;br /&gt;
&lt;br /&gt;
== Debian ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Debian Installer - Bullseye ===&lt;br /&gt;
* Go to Debian Bullseye's [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/ official d-i concatenateable images] directory&lt;br /&gt;
* Download firmware.rock64-rk3328.img.gz and partition.img.gz&lt;br /&gt;
* Combine the 2 parts into 1 image file: &amp;lt;code&amp;gt;zcat firmware.rock64-rk3328.img.gz partition.img.gz &amp;gt; debian-installer-bullseye-rock64-rk3328.img&amp;lt;/code&amp;gt;* &lt;br /&gt;
* Write the created .img file to microSD card or eMMC Module with &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plug the microSD/eMMC card in the Rock64 and connect a serial console and boot up to start the Debian Installer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;) (for non-Linux systems, consult [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/README.concatenateable_images README.concatenateable_images])&lt;br /&gt;
&lt;br /&gt;
=== Debian Installer - Daily Build (for Bookworm+) ===&lt;br /&gt;
* Go to Debian's daily build [https://d-i.debian.org/daily-images/arm64/daily/netboot/SD-card-images/ official d-i concatenateable images] directory&lt;br /&gt;
* Download firmware.rock64-rk3328.img.gz and partition.img.gz&lt;br /&gt;
* Combine the 2 parts into 1 image file: &amp;lt;code&amp;gt;zcat firmware.rock64-rk3328.img.gz partition.img.gz &amp;gt; debian-installer-daily-build-rock64-rk3328.img&amp;lt;/code&amp;gt;* &lt;br /&gt;
* Write the created .img file to microSD card or eMMC Module with &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plug the microSD/eMMC card in the Rock64 and boot up to start the Debian Installer. It should work with both a [bugs.debian.org/1009014 normal display as a serial console]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;) (for non-Linux systems, consult [https://d-i.debian.org/daily-images/arm64/daily/netboot/SD-card-images/README.concatenateable_images README.concatenateable_images])&lt;br /&gt;
&lt;br /&gt;
== Debian by ayufan ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Debian Stretch Minimal 64bit (arm64) OS Image [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-minimal-rock64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 212MB&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock64&lt;br /&gt;
** password: rock64&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309&amp;amp;pid=39314#pid39314 here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debian by mrfixit2001 ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Minimal Debian [microSD / eMMC Boot] ===&lt;br /&gt;
** DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://github.com/mrfixit2001/debian_builds/releases Direct download from mrfixit2001's github]&lt;br /&gt;
** Version 190514 onward support Rock64-v3 board&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock&lt;br /&gt;
** password: rock&lt;br /&gt;
&lt;br /&gt;
== OpenMediaVault ==&lt;br /&gt;
[[File:omv.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Jessie OpenMediaVault Community Build Image [microSD to eMMC] [0.5.15-136] by ayufan ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page]&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper. After boot, it will prompt for confirmation 'Y' to start writing the new image to the eMMC. Then follow the instructions on the screen&lt;br /&gt;
'''* There's a bug with eMMC in the &amp;quot;Stable&amp;quot; version of openmediavault linked from the wiki page. In order to use eMMC, please you need to be on the latest (pre-release) version which is linked here https://github.com/ayufan-rock64/linux-build/releases'''&lt;br /&gt;
*&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/omv/jessie-openmediavault-rock64-0.5.15-136-armhf_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 7E423EF9146EA15403E7D1B4EA30594A&lt;br /&gt;
** File Size: 487MB&lt;br /&gt;
** Credentials (console/ssh, except OMV): rock64/rock64&lt;br /&gt;
** Credentials (OMV for Web): admin/openmediavault&lt;br /&gt;
** Credentials (OMV for console): root/openmediavault&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
&lt;br /&gt;
=== Stretch OpenMediaVault OS Image 32bit (armhf) [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page to learn more]&lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github] ''(pay attention to the release tag. Don't accidentaly choose a pre-release build)''&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rock64-0.8.3-1141-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 391MB&lt;br /&gt;
* WebGUI Login:&lt;br /&gt;
** username: admin&lt;br /&gt;
** password: openmediavault&lt;br /&gt;
* SSH/ Console Login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: openmediavault &lt;br /&gt;
*** '''NB! You need to enable root login in OMV WebGUI'''&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
&lt;br /&gt;
=== Stretch OpenMediaVault OS Image 64bit (arm64) [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page to learn more]&lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github] ''(pay attention to the release tag. Don't accidentaly choose a pre-release build)''&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rockpro64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 340MB&lt;br /&gt;
* WebGUI Login:&lt;br /&gt;
** username: admin&lt;br /&gt;
** password: openmediavault&lt;br /&gt;
* SSH/ Console Login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: openmediavault &lt;br /&gt;
*** '''NB! You need to enable root login in OMV WebGUI'''&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
&lt;br /&gt;
== NextCloudPi==&lt;br /&gt;
[[File:nextcloudpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== NextCloudPi Community Build Image [microSD / eMMC Boot] [03-10-19] ===&lt;br /&gt;
* NextCloudPi comes not only with NextCloud preinstalled, but also with management tools for backups, SSL certificates, SAMBA, enhanced security and more.&lt;br /&gt;
* Visit the project's [https://nextcloudpi.com website]&lt;br /&gt;
* You can follow the ongoing discussion about NextCloudPi on the [https://forum.pine64.org/showthread.php?tid=6047 PINE64 forum]&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/nextcloudplus/NextCloudPi_Rock64_03-10-19.img.xz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZ file): 1432c8b8082696f38770004b3cb5ac1e&lt;br /&gt;
*** File Size: 310MB&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: 1234&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Recalbox ==&lt;br /&gt;
[[File:RB.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Recalbox Community Build Image [microSD / eMMC boot] ===&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* Recalbox allows you to re-play a variety of videogame consoles and platforms in your living room, with ease! &lt;br /&gt;
* To find out more about Recalbox and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7111 PINE64 forum thread]&lt;br /&gt;
*Visit the project's [https://www.recalbox.com/ website]&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://github.com/mrfixit2001/recalbox_rock64/releases Direct download latest release build from mrfixit2001 github]&lt;br /&gt;
&lt;br /&gt;
== Cent OS [No Longer Maintained] ==&lt;br /&gt;
[[File:Centos.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== CentOS-7 Community Build Image [microSD Boot] ===&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* Centos-7.4.1708 with kernel from Armbian-5.69 (minimum build)&lt;br /&gt;
** DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://github.com/Project31/centos-pine64/releases/download/v7.4.1708-v5.59/centos7-rock64.img.xz Project31 download mirrors]&lt;br /&gt;
* To find out more on installation process, please visit their [https://project31.github.io/pine64/ Project31 site]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: centos&lt;br /&gt;
&lt;br /&gt;
== NEMS Linux ==&lt;br /&gt;
[[File:nems.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
https://files.pine64.org/sw/pine64_installer/json/nems.jpg&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* NEMS stands for &amp;quot;Nagios Enterprise Monitoring Server&amp;quot; and it is a modern pre-configured, customized and ready-to-deploy Nagios Core image designed to run on low-cost micro computers.&lt;br /&gt;
* To find out more about NEMS on the PINE64 and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7306 PINE64 forum thread]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: nemsadmin&lt;br /&gt;
** Password: nemsadmin&lt;br /&gt;
* [https://docs.nemslinux.com/installation  Installation Guide]&lt;br /&gt;
* To find out more on NEM Linux, please visit their [https://nemslinux.com/ site]&lt;br /&gt;
&lt;br /&gt;
=== NEMS Linux [microSD / eMMC boot] [v1.5 - build 2] ===&lt;br /&gt;
* DD image (for 16GB microSD card and above)&lt;br /&gt;
** [https://nemslinux.com/download/nagios-for-pine64.php Download torrent seed from NEMS Linux]&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/nems/NEMS_v1.5-Rock64-Build2.zip Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZ file): 6e2088922c5d197db8b8ba3057120389&lt;br /&gt;
*** File Size: 1.30GB&lt;br /&gt;
&lt;br /&gt;
== Fedora  [No Longer Maintained] ==&lt;br /&gt;
[[File:fedora1.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Fedora Minimal Community Build Image [microSD boot] [Preliminary Build] ===&lt;br /&gt;
* [https://github.com/fire219/rock64-fedora/releases/ Follow up on Fire219 github]&lt;br /&gt;
&lt;br /&gt;
= BSD Image Releases =&lt;br /&gt;
&lt;br /&gt;
==NetBSD==&lt;br /&gt;
[[File:netbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* To learn more about NetBSD please visit [https://www.netbsd.org/ NetBSD main page] &lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://www.invisible.ca/arm/ Direct download latest release build from NetBSD by select ROCK64]&lt;br /&gt;
** size: 280MB&lt;br /&gt;
* Console and SSH default login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: [none]&lt;br /&gt;
* Instructions concerning enabling SSH can be found [https://www.netbsd.org/docs/guide/en/chap-boot.html#chap-boot-ssh here]&lt;br /&gt;
&lt;br /&gt;
==OpenBSD==&lt;br /&gt;
[[File:Puffy_mascot_openbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* You can install OpenBSD on your Rock64 by following [https://github.com/krjdev/rock64_openbsd these instructions]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FreeBSD==&lt;br /&gt;
&amp;lt;div style=float:right&amp;gt;[[File:Freebsd_Logo.png|right|100px]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The [https://wiki.freebsd.org/arm/RockChip#Rock64 RockChip FreeBSD page] has instructions for installing FreeBSD.&lt;br /&gt;
&lt;br /&gt;
* Images for various FreeBSD releases can be found [https://www.freebsd.org/where/ here]&lt;br /&gt;
* Version 13.0 and greater include prebuilt images. Find the link in the SD Card Images section and download the ROCK64 image.&lt;br /&gt;
* SSH is enable by default and can be accessed with the following account:&lt;br /&gt;
:: username: freebsd&lt;br /&gt;
:: password: freebsd&lt;br /&gt;
* The root account credentials are:&lt;br /&gt;
:: username: root&lt;br /&gt;
:: password: root&lt;br /&gt;
&lt;br /&gt;
= Android Image Releases =&lt;br /&gt;
&lt;br /&gt;
== Android TV 9.x eMMC (No Google Play) ==&lt;br /&gt;
[[File:android_9.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''* For install Playstore on Android 9.0, please follows [https://forum.pine64.org/showthread.php?tid=8655 this forum thread]'''&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Image [eMMC Boot] using DD method [20190617] ===&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): D985808B4CA912201372DC2F5F322AE9&lt;br /&gt;
*** File Size: 560MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 5D65A44F78BD08B4584413C8BEEAAF05&lt;br /&gt;
*** File Size: 579MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): B34D1C119386CBA1658E5F0FB9E4413D&lt;br /&gt;
*** File Size: 615MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Image [eMMC Boot] using ROCKChip tools method [20190617] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Android TV build version&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_20190617_stock_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 9B717263E7749A732C8B5C7D7D59C5C6&lt;br /&gt;
*** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [eMMC Boot] using DD method [20190618] ===&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): DBB5B3D46B77A33BC9F09173C9788E6E&lt;br /&gt;
*** File Size: 561MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 5F3B97EA72B3227082500B3FB1FAB44A&lt;br /&gt;
*** File Size: 579MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 6833B124ABA3AC2269A6B4F51EFD1109&lt;br /&gt;
*** File Size: 615MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [eMMC Boot] using ROCKChip tools method [20190618] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* [https://wiki.pine64.org/index.php/NOOB#Flashing_to_eMMC_using_Rockchip_Tools_.28Rock64_Only.29 Guide to flashing eMMC using Rockchip Tools]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/ROCK64_20190618_stock_rooted_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): FC5F80C3A939AD0F8DCE5B85F22D20A1&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
== Android 9.x (No Google Play) ==&lt;br /&gt;
[[File:android_9.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [microSD Boot] using DD method [20190621] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* DD image for 8GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): A250B72CD6AAB24B8156DE08EB15530C&lt;br /&gt;
*** File Size: 546MB&lt;br /&gt;
* DD image for 16GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 09A6BACD71159853D5E4C6C21C883B0F&lt;br /&gt;
*** File Size: 556MB&lt;br /&gt;
* DD image for 32GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): C68DC5D96F1C546B96EC690CE7BFE910&lt;br /&gt;
*** File Size: 574MB&lt;br /&gt;
* DD image for 64GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 4EFC87B4CEE4C7655618DCA95EF7DD0D&lt;br /&gt;
*** File Size: 707MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [microSD Boot] using ROCKChip SDDisk tools method [20190621] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/SDDiskTool_v1.57.zip Rockchip SDDisk Tool ver 1.57]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/ROCK64_20190621_stock_rooted_android_9.0_sdboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): EE00D309745F842213E21B2F1E20C510&lt;br /&gt;
** File Size: 539MB&lt;br /&gt;
&lt;br /&gt;
== Android 8.x TV eMMC (preinstalled Google Play Store) ==&lt;br /&gt;
[[File:android_8.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [eMMC Boot] using DD method [20180606] ===&lt;br /&gt;
* DD image to eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20180606_stock_android_8.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): C05846B89A6483DA911CEA604627524F&lt;br /&gt;
** File Size: 561MB&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [eMMC Boot] using ROCKChip tools method [20180606] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port&lt;br /&gt;
* [https://wiki.pine64.org/index.php/NOOB#Flashing_to_eMMC_using_Rockchip_Tools_.28Rock64_Only.29 Guide to flashing eMMC using Rockchip Tools]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_android8.1_emmc_boot_v1.1.zip Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 9738F060D2F62A83637797363D2B38C9&lt;br /&gt;
** File Size: 752MB&lt;br /&gt;
&lt;br /&gt;
== Android 8.x TV ==&lt;br /&gt;
[[File:android_8.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [microSD Boot] [20180623] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20180623_stock_android_8.1_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 85372A568C114ADE7CD9632CEBA193E9&lt;br /&gt;
** File Size: 575MB&lt;br /&gt;
&lt;br /&gt;
== Android 7.x eMMC ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [microSD to eMMC] [Rooted] [20171204] ===&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper, then it will start writing the new image to the eMMC. Please allow around 1 minute of boot up time before UI is presented via HDMI&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 43443467DFCAEDE767556843EB4D6707&lt;br /&gt;
** File Size: 558MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [eMMC Boot] [Rooted] [20171204] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 7C831F9E6B4311A3B3D4743FBBB628D0&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
== Android 7.x ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [microSD Boot] [Rooted] [20171204] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 56520ED3DB6E587DA140AD314A055EB2&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
== Android TV 7.x eMMC ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [microSD to eMMC] [v0.3.4-r86] by ayufan ===&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper. After boot, it will prompt for confirmation 'Y' to start writing the new image to the eMMC. Then follow the instructions on the screen&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/tag/0.3.4 Release notes on ayufan Android 7.1 github]&lt;br /&gt;
* Please allow 5 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/android-7.1-rock-64-rock64_atv-v0.3.4-r86-raw_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 6FD1FA4BE87EC2D4E0862F66541BC6F0&lt;br /&gt;
** File Size: 716MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [eMMC] by ayufan ===&lt;br /&gt;
* For eMMC flash-all image, please unzip first and then use Android tool to flash in&lt;br /&gt;
** [https://github.com/ayufan-rock64/android-7.1/releases/latest Direct download latest release build from ayufan github and look for android-7.1-rock-64-rock64_atv-x.x.x-xx-update.zip]&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
== Android TV 7.x ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [microSD Boot] by ayufan ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/latest Direct download latest release build from ayufan github and look for android-7.1-rock-64-rock64_atv-x.x.x-xx-raw.img.gz]&lt;br /&gt;
&lt;br /&gt;
= Android SDK =&lt;br /&gt;
&lt;br /&gt;
=== Android P SDK [v9.0] ===&lt;br /&gt;
* [https://files.pine64.org//SDK/ROCK64/ROCK64_SDK_android9.0.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 1EAC08942E238293E3AF11C7890DF307&lt;br /&gt;
** File Size: 104.34GB&lt;br /&gt;
&lt;br /&gt;
[[Category:Rock64]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=ROCK64_Software_Releases&amp;diff=12952</id>
		<title>ROCK64 Software Releases</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=ROCK64_Software_Releases&amp;diff=12952"/>
		<updated>2022-04-28T21:36:51Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Add info and links to the official Debian Installer images&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains a list of all available releases for the [[ROCK64]], as well as links to other resources.&lt;br /&gt;
&lt;br /&gt;
= Linux Image Releases =&lt;br /&gt;
&lt;br /&gt;
== Armbian==&lt;br /&gt;
[[File:armbian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Version 5.88 onward support Rock64-v3 board&lt;br /&gt;
* To find out more about Armbian and available options please visit their [https://www.armbian.com/rock64/ site]&lt;br /&gt;
* Armbian pack as 7zip, please unzip first before dd.&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Focal XFCE Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Mainline kernel build&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Focal XFCE Desktop download site]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Bionic XFCE Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Mainline kernel build&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Bionic XFCE DEsktop download site]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: 1234&lt;br /&gt;
&lt;br /&gt;
=== Armbian Debian Buster for Server and Light Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Armbian provides a mainline kernel build images for Debian Buster&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Debian Buster download site]&lt;br /&gt;
&lt;br /&gt;
=== Armbian Ubuntu Focal for Server and Light Desktop [microSD / eMMC Boot]  ===&lt;br /&gt;
* Armbian provides a mainline kernel build images for Ubuntu Focal&lt;br /&gt;
* DD image (for 8GB microSD card or eMMC Module and above)&lt;br /&gt;
** [https://armbian.tnahosting.net/archive/rock64/archive/ Armbian's ROCK64 Ubuntu Focal download site]&lt;br /&gt;
&lt;br /&gt;
== AOSC ==&lt;br /&gt;
[[File:aosc.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* To learn more about AOSC, please visit the official [https://aosc.io/ AOSC website]&lt;br /&gt;
* AOSC using LZ4 compression algorithm, please visit the [https://github.com/lz4/lz4 LZ4 github site] for utility&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
* Login with&lt;br /&gt;
** username: aosc&lt;br /&gt;
** password: anthon&lt;br /&gt;
=== AOSC KDE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/kde/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC GNOME Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/gnome/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC MATE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/mate/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC Cinnamon Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/cinnamon/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC XFCE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/xfce/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
=== AOSC LXDE Community Build Image [microSD and eMMC Boot] ===&lt;br /&gt;
* [https://releases.aosc.io/os-arm64/rockchip64/lxde/rock64/ Direct download from AOSC]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Manjaro ARM ==&lt;br /&gt;
[[File:Manjaro.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
Manjaro editions for Rock64 are available directly from Manjaro.&lt;br /&gt;
&lt;br /&gt;
[https://manjaro.org/download/#rock64 Manjaro Rock64 Download Page]&lt;br /&gt;
&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* To learn more about Manjaro please visit [https://forum.manjaro.org/tags/manjaroarm Manjaro Forum] &lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
&lt;br /&gt;
== Ubuntu 18.04 Bionic by ayufan ==&lt;br /&gt;
[[File:penguin.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases ayufan ROCK64 Linux Build GitHub]&lt;br /&gt;
* Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock64&lt;br /&gt;
** password: rock64&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic LXDE Desktop (armhf) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-lxde-rock64-0.9.14-1159-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic minimal 64bit (arm64) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-minimal-rock64-0.9.14-1159-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic minimal 32bit (armhf) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-minimal-rock64-0.9.14-1159-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 18.04 Bionic containers (DockerCE &amp;amp; Kubernetes) Image [microSD / eMMC Boot] [0.9.14] ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/download/0.9.14/bionic-containers-rock64-0.9.14-1159-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
&lt;br /&gt;
== Slackware==&lt;br /&gt;
[[File:slackware.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Slackware is a very old, interesting, convenient and easy distribution.&lt;br /&gt;
* Visit the project's website here (https://fail.pp.ua)&lt;br /&gt;
* You can follow the ongoing discussion about Slackware on the PINE64 forum (https://forum.pine64.org/showthread.php?tid=5868)&lt;br /&gt;
* This Slackware build using ZST compression algorithm, please visit the [https://github.com/facebook/zstd ZST github site] for utility&lt;br /&gt;
&lt;br /&gt;
=== Slackware Aarch64 XFCE Community Build Image [microSD Boot] ===&lt;br /&gt;
* System with a graphical shell&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [http://dl.fail.pp.ua/slackware/images/rock64/ Direct download from http://dl.fail.pp.ua and look for slarm64-current-aarch64-xfce-rock64-x.xx.x-build-xxxxxxxx.img.zst]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username : root&lt;br /&gt;
** Password : password&lt;br /&gt;
&lt;br /&gt;
=== Slackware Aarch64 Miniroot Community Build Image [microSD Boot] ===&lt;br /&gt;
* System without a graphical shell&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [http://dl.fail.pp.ua/slackware/images/rock64/ Direct download from http://dl.fail.pp.ua and look for slarm64-current-aarch64-base-rock64-x.xx.x-build-xxxxxxxx.img.zst]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username : root&lt;br /&gt;
** Password : password&lt;br /&gt;
&lt;br /&gt;
* To run the OS on eMMC&lt;br /&gt;
**Flash the image to micro SD, power up the board with micro SD and login&lt;br /&gt;
**Copy the image file to micro SD by using SFTP. The image file must be in .img. ''note : root user are not allow transfer file to micro SD.''&lt;br /&gt;
**After finish copy the file, power off the board and add eMMC module to the board&lt;br /&gt;
**Bootup the board, run below command for flashing to eMMC module&lt;br /&gt;
***&amp;gt;&amp;gt;dd if=[image file] of=/dev/mmcblk1 bs=10M&lt;br /&gt;
****''example : dd if=slack-current-aarch64-xfce_08May18-4.4.126-rock64-build-20180508.img of=/dev/mmcblk1 bs=10M''&lt;br /&gt;
***then edit 2 files in eMMC module:&lt;br /&gt;
***&amp;gt;&amp;gt; mount /dev/mmcblk1p1 /media&lt;br /&gt;
***&amp;gt;&amp;gt; echo &amp;quot;rootdev=/dev/mmcblk1p1&amp;quot; &amp;gt;&amp;gt; /media/boot/uEnv.txt&lt;br /&gt;
***&amp;gt;&amp;gt; sed -i 's:mmcblk0p1:mmcblk1p1:' /media/etc/fstab&lt;br /&gt;
**After done, power off board and remove micro SD. Then bootup with only eMMC module.&lt;br /&gt;
&lt;br /&gt;
== DietPi ==&lt;br /&gt;
[[File:dietpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* DietPi is a '''lightweight''', yet '''easy to setup''' and '''feature-rich''' Linux distribution, based on '''Debian'''.&lt;br /&gt;
* To find out more about DietPi, please visit the [https://dietpi.com/docs/ official documentation].&lt;br /&gt;
* Discuss the ROCK64 build on the [https://forum.pine64.org/showthread.php?tid=12514 PINE64 forum thread].&lt;br /&gt;
* DD image (for 4 GiB micro SD card or eMMC and above)&lt;br /&gt;
** [https://dietpi.com/downloads/images/DietPi_ROCK64-ARMv8-Bullseye.7z Direct download from dietpi.com]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: '''root'''&lt;br /&gt;
** Password: '''dietpi'''&lt;br /&gt;
&lt;br /&gt;
== LibreELEC(KODI) ==&lt;br /&gt;
[[File:libreelec.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Official LibreElec KODI Build Image [microSD / eMMC boot] ===&lt;br /&gt;
&lt;br /&gt;
* Unzip and DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* 8GB microSD card or eMMC module and above&lt;br /&gt;
** [https://libreelec.tv/downloads_new/rockchip/ Direct download from LibreElec site and look for PINE64 ROCK64-LibreELEC-RK3328.arm-x.x.x-rock64.img.gz]&lt;br /&gt;
&lt;br /&gt;
== Volumio 2 Digital Audio Player ==&lt;br /&gt;
[[File:volumio.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* Volumio is a linux-based headless DAP (digital audio player), which connects to your home stereo system or your DAC&lt;br /&gt;
* Visit the project's website [https://community.volumio.org/t/volumio-2-on-rock64/8192 here]&lt;br /&gt;
* You can follow the ongoing discussion about Volumio on the [https://forum.pine64.org/showthread.php?tid=5322 PINE64 forum]&lt;br /&gt;
&lt;br /&gt;
=== Volumio Digital Audio Player Community Build Image [microSD Boot] [2.528-2019-01-12] ===&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://updates.volumio.org/rock64/volumio/2.861/volumio-2.861-2020-12-22-rock64.img.zip Direct download from volumio.org]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: volumio&lt;br /&gt;
** Password: volumio&lt;br /&gt;
* '''Volumio is controlled using a Web-GUI which can be accessed via a web browser using the boards IP or volumio.local/'''&lt;br /&gt;
&lt;br /&gt;
== Lakka ==&lt;br /&gt;
[[File:lakka.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Lakka Community Build Image [microSD / eMMC Boot] ===&lt;br /&gt;
* [https://www.lakka.tv/ Lakka] The open source game console; a lightweight Linux distribution that transforms the Rock64 into a full blown retrogaming console&lt;br /&gt;
* Visit [https://forum.pine64.org/showthread.php?tid=5354 PINE64 forum] for more information about the Lakka release&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://le.builds.lakka.tv/legacy-2.3/Rockchip.ROCK64.arm/ Direct download from Lakka] &lt;br /&gt;
* [[Lakka|Lakka Basic Setup]]&lt;br /&gt;
&lt;br /&gt;
== Debian ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Debian Installer - Bullseye ===&lt;br /&gt;
* Go to Debian Bullseye's [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/ official d-i concatenateable images] directory&lt;br /&gt;
* Download firmware.rock64-rk3328.img.gz and partition.img.gz&lt;br /&gt;
* Combine the 2 parts into 1 image file: &amp;lt;code&amp;gt;zcat firmware.rock64-rk3328.img.gz partition.img.gz &amp;gt; debian-installer-bullseye-rock64-rk3328.img&amp;lt;/code&amp;gt;* &lt;br /&gt;
* Write the created .img file to microSD card or eMMC Module with &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plug the microSD/eMMC card in the Rock64 and connect a serial console and boot up to start the Debian Installer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;) (for non-Linux systems, consult [https://deb.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/netboot/SD-card-images/README.concatenateable_images README.concatenateable_images])&lt;br /&gt;
&lt;br /&gt;
=== Debian Installer - Daily Build (for Bookworm+) ===&lt;br /&gt;
* Go to Debian daily build [https://d-i.debian.org/daily-images/arm64/daily/netboot/SD-card-images/ official d-i concatenateable images] directory&lt;br /&gt;
* Download firmware.rock64-rk3328.img.gz and partition.img.gz&lt;br /&gt;
* Combine the 2 parts into 1 image file: &amp;lt;code&amp;gt;zcat firmware.rock64-rk3328.img.gz partition.img.gz &amp;gt; debian-installer-daily-build-rock64-rk3328.img&amp;lt;/code&amp;gt;* &lt;br /&gt;
* Write the created .img file to microSD card or eMMC Module with &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;&lt;br /&gt;
* Plug the microSD/eMMC card in the Rock64 and boot up to start the Debian Installer. It should work with both a [bugs.debian.org/1009014 normal display as a serial console]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;) (for non-Linux systems, consult [https://d-i.debian.org/daily-images/arm64/daily/netboot/SD-card-images/README.concatenateable_images README.concatenateable_images])&lt;br /&gt;
&lt;br /&gt;
== Debian by ayufan ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Debian Stretch Minimal 64bit (arm64) OS Image [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-minimal-rock64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 212MB&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock64&lt;br /&gt;
** password: rock64&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309&amp;amp;pid=39314#pid39314 here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debian by mrfixit2001 ==&lt;br /&gt;
[[File:debian.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Minimal Debian [microSD / eMMC Boot] ===&lt;br /&gt;
** DD image to microSD card or eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://github.com/mrfixit2001/debian_builds/releases Direct download from mrfixit2001's github]&lt;br /&gt;
** Version 190514 onward support Rock64-v3 board&lt;br /&gt;
* Login with&lt;br /&gt;
** username: rock&lt;br /&gt;
** password: rock&lt;br /&gt;
&lt;br /&gt;
== OpenMediaVault ==&lt;br /&gt;
[[File:omv.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Jessie OpenMediaVault Community Build Image [microSD to eMMC] [0.5.15-136] by ayufan ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page]&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper. After boot, it will prompt for confirmation 'Y' to start writing the new image to the eMMC. Then follow the instructions on the screen&lt;br /&gt;
'''* There's a bug with eMMC in the &amp;quot;Stable&amp;quot; version of openmediavault linked from the wiki page. In order to use eMMC, please you need to be on the latest (pre-release) version which is linked here https://github.com/ayufan-rock64/linux-build/releases'''&lt;br /&gt;
*&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/omv/jessie-openmediavault-rock64-0.5.15-136-armhf_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 7E423EF9146EA15403E7D1B4EA30594A&lt;br /&gt;
** File Size: 487MB&lt;br /&gt;
** Credentials (console/ssh, except OMV): rock64/rock64&lt;br /&gt;
** Credentials (OMV for Web): admin/openmediavault&lt;br /&gt;
** Credentials (OMV for console): root/openmediavault&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
&lt;br /&gt;
=== Stretch OpenMediaVault OS Image 32bit (armhf) [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page to learn more]&lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github] ''(pay attention to the release tag. Don't accidentaly choose a pre-release build)''&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rock64-0.8.3-1141-armhf.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 391MB&lt;br /&gt;
* WebGUI Login:&lt;br /&gt;
** username: admin&lt;br /&gt;
** password: openmediavault&lt;br /&gt;
* SSH/ Console Login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: openmediavault &lt;br /&gt;
*** '''NB! You need to enable root login in OMV WebGUI'''&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
&lt;br /&gt;
=== Stretch OpenMediaVault OS Image 64bit (arm64) [microSD / eMMC Boot] [0.8.3] ===&lt;br /&gt;
* [https://www.openmediavault.org/ openmediavault is the next generation network attached storage (NAS) solution, click link to OMV main page to learn more]&lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* [https://github.com/ayufan-rock64/linux-build/releases/ Release notes on ayufan Linux github] ''(pay attention to the release tag. Don't accidentaly choose a pre-release build)''&lt;br /&gt;
** [https://github.com/ayufan-rock64/linux-build/releases/download/0.8.3/stretch-openmediavault-rockpro64-0.8.3-1141-arm64.img.xz Direct download from ayufan's github]&lt;br /&gt;
** size: 340MB&lt;br /&gt;
* WebGUI Login:&lt;br /&gt;
** username: admin&lt;br /&gt;
** password: openmediavault&lt;br /&gt;
* SSH/ Console Login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: openmediavault &lt;br /&gt;
*** '''NB! You need to enable root login in OMV WebGUI'''&lt;br /&gt;
* [[OpenMediaVault|OpenMediaVault Basic Setup]]&lt;br /&gt;
* [https://omv-extras.org/joomla/index.php/omv-plugins-3/3-stable OpenMediaVault Plugins]&lt;br /&gt;
*Forum thread concerning this release can be found [https://forum.pine64.org/showthread.php?tid=6309 here]&lt;br /&gt;
&lt;br /&gt;
== NextCloudPi==&lt;br /&gt;
[[File:nextcloudpi.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== NextCloudPi Community Build Image [microSD / eMMC Boot] [03-10-19] ===&lt;br /&gt;
* NextCloudPi comes not only with NextCloud preinstalled, but also with management tools for backups, SSL certificates, SAMBA, enhanced security and more.&lt;br /&gt;
* Visit the project's [https://nextcloudpi.com website]&lt;br /&gt;
* You can follow the ongoing discussion about NextCloudPi on the [https://forum.pine64.org/showthread.php?tid=6047 PINE64 forum]&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/nextcloudplus/NextCloudPi_Rock64_03-10-19.img.xz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZ file): 1432c8b8082696f38770004b3cb5ac1e&lt;br /&gt;
*** File Size: 310MB&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: 1234&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Recalbox ==&lt;br /&gt;
[[File:RB.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Recalbox Community Build Image [microSD / eMMC boot] ===&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* Recalbox allows you to re-play a variety of videogame consoles and platforms in your living room, with ease! &lt;br /&gt;
* To find out more about Recalbox and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7111 PINE64 forum thread]&lt;br /&gt;
*Visit the project's [https://www.recalbox.com/ website]&lt;br /&gt;
* DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://github.com/mrfixit2001/recalbox_rock64/releases Direct download latest release build from mrfixit2001 github]&lt;br /&gt;
&lt;br /&gt;
== Cent OS [No Longer Maintained] ==&lt;br /&gt;
[[File:Centos.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== CentOS-7 Community Build Image [microSD Boot] ===&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* Centos-7.4.1708 with kernel from Armbian-5.69 (minimum build)&lt;br /&gt;
** DD image (for 8GB microSD card and above)&lt;br /&gt;
** [https://github.com/Project31/centos-pine64/releases/download/v7.4.1708-v5.59/centos7-rock64.img.xz Project31 download mirrors]&lt;br /&gt;
* To find out more on installation process, please visit their [https://project31.github.io/pine64/ Project31 site]&lt;br /&gt;
* Login with&lt;br /&gt;
** username: root&lt;br /&gt;
** password: centos&lt;br /&gt;
&lt;br /&gt;
== NEMS Linux ==&lt;br /&gt;
[[File:nems.jpg|right|100px]]&lt;br /&gt;
&lt;br /&gt;
https://files.pine64.org/sw/pine64_installer/json/nems.jpg&lt;br /&gt;
* '''Only support ROCK64 ver2 SBC'''&lt;br /&gt;
* NEMS stands for &amp;quot;Nagios Enterprise Monitoring Server&amp;quot; and it is a modern pre-configured, customized and ready-to-deploy Nagios Core image designed to run on low-cost micro computers.&lt;br /&gt;
* To find out more about NEMS on the PINE64 and available tweaks to the installation please visit the [https://forum.pine64.org/showthread.php?tid=7306 PINE64 forum thread]&lt;br /&gt;
* Login with&lt;br /&gt;
** Username: nemsadmin&lt;br /&gt;
** Password: nemsadmin&lt;br /&gt;
* [https://docs.nemslinux.com/installation  Installation Guide]&lt;br /&gt;
* To find out more on NEM Linux, please visit their [https://nemslinux.com/ site]&lt;br /&gt;
&lt;br /&gt;
=== NEMS Linux [microSD / eMMC boot] [v1.5 - build 2] ===&lt;br /&gt;
* DD image (for 16GB microSD card and above)&lt;br /&gt;
** [https://nemslinux.com/download/nagios-for-pine64.php Download torrent seed from NEMS Linux]&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/nems/NEMS_v1.5-Rock64-Build2.zip Direct download from pine64.org]&lt;br /&gt;
*** MD5 (XZ file): 6e2088922c5d197db8b8ba3057120389&lt;br /&gt;
*** File Size: 1.30GB&lt;br /&gt;
&lt;br /&gt;
== Fedora  [No Longer Maintained] ==&lt;br /&gt;
[[File:fedora1.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Fedora Minimal Community Build Image [microSD boot] [Preliminary Build] ===&lt;br /&gt;
* [https://github.com/fire219/rock64-fedora/releases/ Follow up on Fire219 github]&lt;br /&gt;
&lt;br /&gt;
= BSD Image Releases =&lt;br /&gt;
&lt;br /&gt;
==NetBSD==&lt;br /&gt;
[[File:netbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* To learn more about NetBSD please visit [https://www.netbsd.org/ NetBSD main page] &lt;br /&gt;
* DD image to microSD card or eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** [https://www.invisible.ca/arm/ Direct download latest release build from NetBSD by select ROCK64]&lt;br /&gt;
** size: 280MB&lt;br /&gt;
* Console and SSH default login:&lt;br /&gt;
** username: root&lt;br /&gt;
** password: [none]&lt;br /&gt;
* Instructions concerning enabling SSH can be found [https://www.netbsd.org/docs/guide/en/chap-boot.html#chap-boot-ssh here]&lt;br /&gt;
&lt;br /&gt;
==OpenBSD==&lt;br /&gt;
[[File:Puffy_mascot_openbsd.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
* You can install OpenBSD on your Rock64 by following [https://github.com/krjdev/rock64_openbsd these instructions]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FreeBSD==&lt;br /&gt;
&amp;lt;div style=float:right&amp;gt;[[File:Freebsd_Logo.png|right|100px]]&amp;lt;/div&amp;gt;&lt;br /&gt;
The [https://wiki.freebsd.org/arm/RockChip#Rock64 RockChip FreeBSD page] has instructions for installing FreeBSD.&lt;br /&gt;
&lt;br /&gt;
* Images for various FreeBSD releases can be found [https://www.freebsd.org/where/ here]&lt;br /&gt;
* Version 13.0 and greater include prebuilt images. Find the link in the SD Card Images section and download the ROCK64 image.&lt;br /&gt;
* SSH is enable by default and can be accessed with the following account:&lt;br /&gt;
:: username: freebsd&lt;br /&gt;
:: password: freebsd&lt;br /&gt;
* The root account credentials are:&lt;br /&gt;
:: username: root&lt;br /&gt;
:: password: root&lt;br /&gt;
&lt;br /&gt;
= Android Image Releases =&lt;br /&gt;
&lt;br /&gt;
== Android TV 9.x eMMC (No Google Play) ==&lt;br /&gt;
[[File:android_9.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
'''* For install Playstore on Android 9.0, please follows [https://forum.pine64.org/showthread.php?tid=8655 this forum thread]'''&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Image [eMMC Boot] using DD method [20190617] ===&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): D985808B4CA912201372DC2F5F322AE9&lt;br /&gt;
*** File Size: 560MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 5D65A44F78BD08B4584413C8BEEAAF05&lt;br /&gt;
*** File Size: 579MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190617_stock_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): B34D1C119386CBA1658E5F0FB9E4413D&lt;br /&gt;
*** File Size: 615MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Image [eMMC Boot] using ROCKChip tools method [20190617] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Android TV build version&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_20190617_stock_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 9B717263E7749A732C8B5C7D7D59C5C6&lt;br /&gt;
*** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [eMMC Boot] using DD method [20190618] ===&lt;br /&gt;
* DD image to eMMC module using USB adapter for eMMC module and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* DD image for 16GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): DBB5B3D46B77A33BC9F09173C9788E6E&lt;br /&gt;
*** File Size: 561MB&lt;br /&gt;
* DD image for 32GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 5F3B97EA72B3227082500B3FB1FAB44A&lt;br /&gt;
*** File Size: 579MB&lt;br /&gt;
* DD image for 64GB eMMC module&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190618_stock_rooted_android_9.0_emmcboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 6833B124ABA3AC2269A6B4F51EFD1109&lt;br /&gt;
*** File Size: 615MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [eMMC Boot] using ROCKChip tools method [20190618] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port, needs USB type A to type A cable.&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* [https://wiki.pine64.org/index.php/NOOB#Flashing_to_eMMC_using_Rockchip_Tools_.28Rock64_Only.29 Guide to flashing eMMC using Rockchip Tools]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/ROCK64_20190618_stock_rooted_android_9.0_emmcboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): FC5F80C3A939AD0F8DCE5B85F22D20A1&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
== Android 9.x (No Google Play) ==&lt;br /&gt;
[[File:android_9.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [microSD Boot] using DD method [20190621] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher] or [https://github.com/pine64dev/PINE64-Installer/blob/master/README.md#download PINE64 Installer]&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* DD image for 8GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-8GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): A250B72CD6AAB24B8156DE08EB15530C&lt;br /&gt;
*** File Size: 546MB&lt;br /&gt;
* DD image for 16GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-16GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 09A6BACD71159853D5E4C6C21C883B0F&lt;br /&gt;
*** File Size: 556MB&lt;br /&gt;
* DD image for 32GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-32GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): C68DC5D96F1C546B96EC690CE7BFE910&lt;br /&gt;
*** File Size: 574MB&lt;br /&gt;
* DD image for 64GB microSD card&lt;br /&gt;
** [https://files.pine64.org/os/ROCK64/android/ROCK64_dd_20190621_stock_rooted_android_9.0_sdboot-64GB.img.gz Direct download from pine64.org]&lt;br /&gt;
*** MD5 (GZip file): 4EFC87B4CEE4C7655618DCA95EF7DD0D&lt;br /&gt;
*** File Size: 707MB&lt;br /&gt;
&lt;br /&gt;
=== Android 9.0 Stock Rooted Image [microSD Boot] using ROCKChip SDDisk tools method [20190621] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* Please allow 3-5 minutes boot up time on first time for initialization&lt;br /&gt;
* This is Rooted Android TV build version&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/SDDiskTool_v1.57.zip Rockchip SDDisk Tool ver 1.57]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/ROCK64_20190621_stock_rooted_android_9.0_sdboot.img.gz Direct download from pine64.org]&lt;br /&gt;
** MD5 (GZip file): EE00D309745F842213E21B2F1E20C510&lt;br /&gt;
** File Size: 539MB&lt;br /&gt;
&lt;br /&gt;
== Android 8.x TV eMMC (preinstalled Google Play Store) ==&lt;br /&gt;
[[File:android_8.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [eMMC Boot] using DD method [20180606] ===&lt;br /&gt;
* DD image to eMMC module. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20180606_stock_android_8.1_emmcboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): C05846B89A6483DA911CEA604627524F&lt;br /&gt;
** File Size: 561MB&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [eMMC Boot] using ROCKChip tools method [20180606] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* The OTG port located at top USB 2.0 port&lt;br /&gt;
* [https://wiki.pine64.org/index.php/NOOB#Flashing_to_eMMC_using_Rockchip_Tools_.28Rock64_Only.29 Guide to flashing eMMC using Rockchip Tools]&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_android8.1_emmc_boot_v1.1.zip Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 9738F060D2F62A83637797363D2B38C9&lt;br /&gt;
** File Size: 752MB&lt;br /&gt;
&lt;br /&gt;
== Android 8.x TV ==&lt;br /&gt;
[[File:android_8.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 8.1. Stock Image [microSD Boot] [20180623] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20180623_stock_android_8.1_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 85372A568C114ADE7CD9632CEBA193E9&lt;br /&gt;
** File Size: 575MB&lt;br /&gt;
&lt;br /&gt;
== Android 7.x eMMC ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [microSD to eMMC] [Rooted] [20171204] ===&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper, then it will start writing the new image to the eMMC. Please allow around 1 minute of boot up time before UI is presented via HDMI&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 43443467DFCAEDE767556843EB4D6707&lt;br /&gt;
** File Size: 558MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [eMMC Boot] [Rooted] [20171204] ===&lt;br /&gt;
* Please unzip first and then using Android tool to flash in&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 7C831F9E6B4311A3B3D4743FBBB628D0&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
== Android 7.x ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android 7.1.2 Stock Image [microSD Boot] [Rooted] [20171204] ===&lt;br /&gt;
* DD image to microSD card and boot. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
* Please allow 10-15 minutes boot up time on first time for initialization&lt;br /&gt;
* USB 3.0 patches&lt;br /&gt;
* Enable Real Time Clock support for Popcorn Hour Transformer&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/rock64_20171204_stock_android_7.1.2_rooted_sdboot.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 56520ED3DB6E587DA140AD314A055EB2&lt;br /&gt;
** File Size: 544MB&lt;br /&gt;
&lt;br /&gt;
== Android TV 7.x eMMC ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [microSD to eMMC] [v0.3.4-r86] by ayufan ===&lt;br /&gt;
* DD image to microSD card. Highly recommend using [https://etcher.io/ Etcher]&lt;br /&gt;
** Shorting the eMMC PIN with a jumper as shown on the 1st image of [https://files.pine64.org/doc/rock64/guide/ROCK64_Installing_Android_To_eMMC.pdf Guide to install stock Android build to eMMC module]. After power ON the box for 2-3 second, quickly remove the jumper. After boot, it will prompt for confirmation 'Y' to start writing the new image to the eMMC. Then follow the instructions on the screen&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/tag/0.3.4 Release notes on ayufan Android 7.1 github]&lt;br /&gt;
* Please allow 5 minutes boot up time on first time for initialization&lt;br /&gt;
* [https://files.pine64.org/os/ROCK64/android/android-7.1-rock-64-rock64_atv-v0.3.4-r86-raw_sd2emmc.img.xz Direct download from pine64.org]&lt;br /&gt;
** MD5 (XZ file): 6FD1FA4BE87EC2D4E0862F66541BC6F0&lt;br /&gt;
** File Size: 716MB&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [eMMC] by ayufan ===&lt;br /&gt;
* For eMMC flash-all image, please unzip first and then use Android tool to flash in&lt;br /&gt;
** [https://github.com/ayufan-rock64/android-7.1/releases/latest Direct download latest release build from ayufan github and look for android-7.1-rock-64-rock64_atv-x.x.x-xx-update.zip]&lt;br /&gt;
* See [[ROCK64 MAC Address]] on how to set the MAC address.&lt;br /&gt;
&lt;br /&gt;
== Android TV 7.x ==&lt;br /&gt;
[[File:android_7.png|right|100px]]&lt;br /&gt;
&lt;br /&gt;
=== Android TV 7.1 Community Build Image [microSD Boot] by ayufan ===&lt;br /&gt;
* [https://github.com/ayufan-rock64/android-7.1/releases/latest Direct download latest release build from ayufan github and look for android-7.1-rock-64-rock64_atv-x.x.x-xx-raw.img.gz]&lt;br /&gt;
&lt;br /&gt;
= Android SDK =&lt;br /&gt;
&lt;br /&gt;
=== Android P SDK [v9.0] ===&lt;br /&gt;
* [https://files.pine64.org//SDK/ROCK64/ROCK64_SDK_android9.0.tar.gz Direct Download from pine64.org]&lt;br /&gt;
** MD5 (TAR-GZip file): 1EAC08942E238293E3AF11C7890DF307&lt;br /&gt;
** File Size: 104.34GB&lt;br /&gt;
&lt;br /&gt;
[[Category:Rock64]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=12873</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=12873"/>
		<updated>2022-04-22T12:44:18Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Upstreaming Status: update VOP2 to version 11&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the current status of software support for the [[Quartz64]] single-board computer, and provides links to resources to help prospective contributors get started. Information is kept current on a best-effort basis as various patches get accepted into the kernel.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&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;
! scope=&amp;quot;col&amp;quot; | Applies To&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Video Output&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=634531]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchipdrm/VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&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-edpphy-naneng&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/phy/rockchip/phy-rockchip-naneng-edp.c] and [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/commit/d7ad116fb30d11d110aeb880754cf27f34c45c40#7e8e2ef87e479c54539dc519c0b92d6b31727f8d_671_681] Coordinate any porting with Rockchip first&lt;br /&gt;
|&lt;br /&gt;
|-&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;dw-mipi-dsi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/gpu/drm/rockchip/dw-mipi-dsi.c]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=810028668c6d9da25664195d6b906c98a8169f72]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Staging&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Not in 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-vpu&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rkvdec&amp;lt;/code&amp;gt;, using &amp;lt;code&amp;gt;v4l2-requests&amp;lt;/code&amp;gt;&lt;br /&gt;
| Necessary device tree changes for the Hantro VPU [https://patchwork.kernel.org/project/linux-rockchip/patch/20210719225806.26680-1-ezequiel@collabora.com/ in review]. rkvdec hardware has been updated compared to rk3399 and may require driver changes.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Audio &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-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=43b058698f723e3c2087af7069c0da082a3ecbe1]&amp;lt;/sup&amp;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;rockchip-spdif&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dac825b6a6bdca41347e25f07354ad94fdc97445]&amp;lt;/sup&amp;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;rk817-codec&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
| Quartz64 Model A/B&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | u-boot&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Waiting on ATF sources&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;4&amp;quot; | Device Tree&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b33a22a1e7c4248608e533fc4fa524258b3fae84]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs submitting&lt;br /&gt;
| Quartz64 Model B&lt;br /&gt;
|&lt;br /&gt;
| Quartz64 Model B&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs submitting&lt;br /&gt;
| SOQuartz&lt;br /&gt;
|&lt;br /&gt;
| SOQuartz&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;
| PineNote&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d449121e5e8addcee654250cec298c887ecafb32]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| PineNote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot;| Gigabit Ethernet&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;rk3566-gmac&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3bb3d6b1c1957e88bfc5e77a4557f7e6ba761fe3]&amp;lt;/sup&amp;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;yt8511-phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=48e8c6f1612b3d2dccaea2285231def830cc5b8e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | IOMMU&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-iommu&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c55356c534aa651ccc3053ef2d5d8d810adacf5f]&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;gpio-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=936ee2675eee1faca0dcdfa79165c7990422e0fc]&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;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Thermal Regulation&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-thermal&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4b14c055a6f644cbeb1156ba24647e92fe51ec69]&amp;lt;/sup&amp;gt;&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;pcie-dw-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0e898eb8df4e34c7b129452444eb7cef68a11f43]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Management&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-domains&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1782c87b44a0b1a527f01a6a184677c58ccbf9c7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Voltage Control&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;rk3568-pmu-io-voltage-domain&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=28b05a64e47cbceebb8a5f3f643033148d5c06c3]&amp;lt;/sup&amp;gt;&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;spi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d74d99229f4d48f42d674f7a8a1137179efd67ac]&amp;lt;/sup&amp;gt;. Necessary device tree changes [https://patchwork.kernel.org/project/linux-rockchip/list/?series=586691 in review].&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Battery&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=630567&amp;amp;archive=both]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rk817-charger&amp;lt;/code&amp;gt;&lt;br /&gt;
| In the BSP tree this is handled by [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/power/supply/rk817_battery.c rk817_battery.c] and [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/power/supply/rk817_charger.c rk817_charger.c].&lt;br /&gt;
| Quartz64 Model A, Pinenote&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Microphone&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-saradc&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7786da3b5ae167c17f35e22ba35e06006338c2f6]&amp;lt;/sup&amp;gt;. Headphone jack mic seems to connect to &amp;lt;code&amp;gt;SARADC_VIN2_HP_HOOK&amp;lt;/code&amp;gt;, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-usb2phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.17&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/phy/rockchip?h=v5.17-rc1&amp;amp;id=42b559727a45d79c811f493515eb9b7e56016421]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | e-Ink&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|In review (RFC)&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/20220413221916.50995-1-samuel@sholland.org/T/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| A DRM driver is available [https://github.com/smaeul/linux/commits/rk35/ebc-drm-v5 here]; also see [[RK3566 EBC Reverse-Engineering]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Combo PHY&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;naneng-combphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7160820d742a16313f7802e33c2956c19548e488]&amp;lt;/sup&amp;gt;. Still requires DTS changes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | RGA&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs fixing&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rga&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[User:CounterPillow]] experimentally enabled it&amp;lt;sup&amp;gt;[https://gist.github.com/CounterPillow/6bea809f15ada7ddd3a3d7a4994fdc4e]&amp;lt;/sup&amp;gt; in the device tree and ran gstreamer's v4l2convert through it to test, resulting in a completely garbled output.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Fan Controller&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;emc2301&amp;lt;/code&amp;gt;&lt;br /&gt;
| Previous attempts at mainlining: [http://lkml.iu.edu/hypermail/linux/kernel/1306.1/02473.html] and [https://lore.kernel.org/all/20200928104326.40386-1-biwen.li@oss.nxp.com/]. Latest iteration: [https://gitlab.traverse.com.au/ls1088firmware/traverse-sensors/-/commit/1cdec49171ebafcf32b347e7701224144de8620b]&lt;br /&gt;
| SOQuartz Blade&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | CIF (CSI Camera)&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;video_rkcif&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/cif]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current Status ==&lt;br /&gt;
&lt;br /&gt;
The following sections give an overview over the current status of different parts of the board. Some parts are waiting on a driver to be written or ported, others only need various adjustments.&lt;br /&gt;
&lt;br /&gt;
According to pgwipeout, I/O device performance is within expected ranges now.&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
&lt;br /&gt;
* eMMC&lt;br /&gt;
* SDMMC0 (SD cards)&lt;br /&gt;
* GMAC (Gigabit Ethernet)&lt;br /&gt;
* USB 2.0&lt;br /&gt;
* SATA 2&lt;br /&gt;
* SATA 3&lt;br /&gt;
* UART&lt;br /&gt;
** UART 0 (Pi-bus)&lt;br /&gt;
** UART 1 (Bluetooth)&lt;br /&gt;
** UART 2 (Pi-bus, debug)&lt;br /&gt;
* Video Decode&lt;br /&gt;
** VP8&lt;br /&gt;
* Battery&lt;br /&gt;
* GPU&lt;br /&gt;
* Audio&lt;br /&gt;
** Analog audio works&lt;br /&gt;
** SPDIF works&lt;br /&gt;
** HDMI works&lt;br /&gt;
* SPI &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
* I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
&lt;br /&gt;
=== Partially Working ===&lt;br /&gt;
&lt;br /&gt;
* PCI-Express Controller &amp;amp;mdash; everything but devices that need cache coherency (e.g. dGPUs) should work&lt;br /&gt;
** [[User:CounterPillow]] noticed some weirdness with NVMe devices disconnecting during heavy write operations, likely down due to power draw on one of the rails as the same sustained bandwidth could be achieved with a different PCIe device with no issue.&lt;br /&gt;
* SDMMC1 (Wi-Fi) &amp;amp;mdash; AP6256 working, BL602 needs some work to make it flash firmware&lt;br /&gt;
* [https://developer.arm.com/architectures/system-architectures/system-components/arm-generic-interrupt-controller GIC] &amp;amp;mdash; needs errata published by Rockchip to get upstream to add device-specific workarounds&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/CAMdYzYrQ5f-mv_VmTq_CRf9tR=j3mwRpKHNLmPFgCF9whsGFRw@mail.gmail.com/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Video Output &amp;amp;mdash; only at 1920x1080p60 and nothing else, very buggy and rough around more than just the edges&lt;br /&gt;
&lt;br /&gt;
=== Confirmed Broken ===&lt;br /&gt;
&lt;br /&gt;
* USB 3.0 &amp;amp;mdash; only works with very short cables and depends on the device. This is due to a hardware design issue relating to the coupling capacitors needed for SATA, which shares the same lines as USB 3.0.&lt;br /&gt;
** Hardware design changes have been suggested to engineers, it's in their hands now.&lt;br /&gt;
* Module autoloading for the Ethernet PHY. The Motorcomm PHY does not have a vendor ID written into the appropriate hardware block, so there is no canonical way to identify the device.&lt;br /&gt;
&lt;br /&gt;
=== Needs Testing ===&lt;br /&gt;
&lt;br /&gt;
* E-Paper &amp;amp;mdash; needs EBC driver&lt;br /&gt;
* Microphone Input&lt;br /&gt;
* CSI &amp;amp;mdash; needs CIF driver&lt;br /&gt;
* eDP &amp;amp;mdash; needs PHY driver and controller driver&lt;br /&gt;
* DSI &amp;amp;mdash; needs driver&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== ebc-dev Reverse Engineering and Development ===&lt;br /&gt;
&lt;br /&gt;
The [https://gitlab.com/pine64-org/quartz-bsp/linux-next/-/tree/rk356x-ebc-dev driver for the eInk panel] needs to both be reverse engineered and then rewritten as C. In its current form, it is mostly an assembly dump produced by gcc with debug symbols. See [[RK3566 EBC Reverse-Engineering]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Investigate MCU ===&lt;br /&gt;
&lt;br /&gt;
The RK3566 comes with an integrated RISC-V microcontroller (MCU). It communicates with the A55 host through the Mailbox system driven by the rockchip-mailbox driver. Since this MCU would be quite useful for things such as low power standby mode, investigating how it can be turned on and have firmware flashed to it should greatly enhance the power saving features of the PineNote.&lt;br /&gt;
&lt;br /&gt;
=== Mainline U-Boot Work ===&lt;br /&gt;
&lt;br /&gt;
Currently, mainline U-Boot does not have support for the RK3566 SoC used on the Quartz64. That's why we currently use the &amp;quot;downstream&amp;quot; Rockchip U-Boot, which is based on an old version of U-Boot and contains vendor specific patches that have not undergone the same level of code review as they'd have done had they been submitted upstream.&lt;br /&gt;
&lt;br /&gt;
While the lack of ATF sources means that using mainline U-Boot would still require the use of Rockchip provided binaries for the firmware, the mainline U-Boot works needs to be done eventually anyway, and even with Rockchip blobs, a more modern version of U-Boot will be much nicer to use.&lt;br /&gt;
&lt;br /&gt;
Someone needs to get on the task of investigating what minimally needs to be ported to get the board booting with mainline U-Boot, port those changes, and submit them for review.&lt;br /&gt;
&lt;br /&gt;
==== Things that need to be done ====&lt;br /&gt;
&lt;br /&gt;
This list is non-exhaustive as we don't exactly know how much is missing&lt;br /&gt;
&lt;br /&gt;
* Do the &amp;lt;code&amp;gt;rk3568.dtsi&amp;lt;/code&amp;gt; refactoring into &amp;lt;code&amp;gt;rk356x.dtsi&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;rk3568.dtsi&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;rk3566.dtsi&amp;lt;/code&amp;gt; that the kernel did, probably just port the kernel dtsi files for this&lt;br /&gt;
* Bring the kernel's Quartz64 DTS into the tree&lt;br /&gt;
* Write a &amp;lt;code&amp;gt;quartz64-rk3566_defconfig&amp;lt;/code&amp;gt; based on &amp;lt;code&amp;gt;evb-rk3568_defconfig&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stretch Goals:&lt;br /&gt;
&lt;br /&gt;
* Port the Naneng Combo PHY driver to u-boot so we can SATA, USB 3 and PCIe boot&lt;br /&gt;
* Look into SPI&lt;br /&gt;
* Port the Motorcomm PHY driver to u-boot for networking?&lt;br /&gt;
* Port a basic VOP2 driver to get a framebuffer from u-boot&lt;br /&gt;
&lt;br /&gt;
==== List of Useful Resources for this Task ====&lt;br /&gt;
* Downstream Rockchip U-Boot repository with Quartz64 specific patches: https://gitlab.com/pgwipeout/u-boot-rockchip/-/tree/quartz64&lt;br /&gt;
* Mainline Rockchip custodian U-Boot repository: https://source.denx.de/u-boot/custodians/u-boot-rockchip&lt;br /&gt;
* U-Boot Mailing List: https://lists.denx.de/listinfo/u-boot&lt;br /&gt;
&lt;br /&gt;
=== eDP Driver Porting ===&lt;br /&gt;
&lt;br /&gt;
The eDP PHY driver and controller driver needs to be ported, brought into shape and submitted with proper commit attribution to the Rockchip authors.&lt;br /&gt;
&lt;br /&gt;
[[User:CounterPillow]] has experimentally ported stuff, but it's currently not working.&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel Config Options ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_I2S_TDM&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog and (in the future) HDMI audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog audio on the Model A&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_STMMAC_ETH&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DWMAC_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet, set this one to Y, m won't work out of the box as module autoloading does not work for this specific PHY (the vendor ID is zeroed out), alternatively tell users in board-specific setup instructions to force loading the &amp;lt;code&amp;gt;motorcomm&amp;lt;/code&amp;gt; module if you set it to m.&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_SDHCI_OF_DWCMSHC&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PCIE_ROCKCHIP_DW_HOST&amp;lt;/code&amp;gt;&lt;br /&gt;
** PCIe&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** PHY for PCIe/SATA/USB3, not yet upstream&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DRM_PANFROST&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPU&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_SPDIF&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPDIF audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_DW_HDMI&amp;lt;/code&amp;gt;&lt;br /&gt;
** HDMI PHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
** Video output, not yet upstream&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ARCH_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_USB2&amp;lt;/code&amp;gt;&lt;br /&gt;
** USB 2&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_RTC_DRV_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MFD_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Various things relating to the RK817 chip&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REGULATOR_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Voltage regulators&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PM_DOMAINS&amp;lt;/code&amp;gt;&lt;br /&gt;
** Power management domains&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_GPIO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PINCTRL_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO and general SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PWM_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** PWM support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IOMMU&amp;lt;/code&amp;gt;&lt;br /&gt;
** IOMMU support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_MBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
** Mailbox support (for communication with MCU)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_SARADC&amp;lt;/code&amp;gt;&lt;br /&gt;
** Analog-to-digital conversion support, for e.g. microphones&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_THERMAL&amp;lt;/code&amp;gt;&lt;br /&gt;
** Temperature sensor and thermal throttling support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SPI_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPI support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_VIDEO_HANTRO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Hardware video decoder support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IODOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support so your I/O pins have the right voltage&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Common clock support&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* pgwipeout's kernel tree&lt;br /&gt;
** https://gitlab.com/pgwipeout/linux-next/-/tree/quartz64-v5.15-rc1&lt;br /&gt;
* BSP based development effort for SPL/U-Boot and Linux&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp&lt;br /&gt;
* Image CI pipeline aimed at developers&lt;br /&gt;
** https://gitlab.com/pgwipeout/quartz64_ci/&lt;br /&gt;
* Rockchip U-Boot&lt;br /&gt;
** https://github.com/rockchip-linux/u-boot&lt;br /&gt;
* Downstream rockchip-linux kernel tree&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux&lt;br /&gt;
* Tianocore EDK II port for UEFI on Quartz64&lt;br /&gt;
** https://github.com/jaredmcneill/quartz64_uefi&lt;br /&gt;
* Mainline U-Boot Port by pgwipeout&lt;br /&gt;
** https://gitlab.com/pgwipeout/u-boot-quartz64&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* Rockchip-SoC Patchwork Page&lt;br /&gt;
** https://patchwork.kernel.org/project/linux-rockchip/list/&lt;br /&gt;
* Rockchip Kernel Mailing List Archive&lt;br /&gt;
** https://lore.kernel.org/linux-rockchip/&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Boot Order ====&lt;br /&gt;
The RK3566 boot ROM will search for a valid ID BLOCK in the following order on the support boot media:&lt;br /&gt;
&lt;br /&gt;
* SPI NOR flash&lt;br /&gt;
* SPI NAND flash&lt;br /&gt;
* SD-Card&lt;br /&gt;
* eMMC&lt;br /&gt;
&lt;br /&gt;
... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip&lt;br /&gt;
flash/boot tools.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader Flashing ====&lt;br /&gt;
&lt;br /&gt;
As per pgwipeout's [https://gitlab.com/pine64-org/quartz-bsp/u-boot/-/commit/12d102b86813378af08b086f3b9c13ed8010754c commit message]:&lt;br /&gt;
* Make a partition named &amp;lt;code&amp;gt;uboot&amp;lt;/code&amp;gt; as partition number 1 at 8 MiB to 16 MiB&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=idblock.bin of=/dev/''&amp;lt;mmc/sd&amp;gt;'' seek=64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=uboot.img of=/dev/''&amp;lt;mmc/sd&amp;gt;''1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== BSP Image Layout ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]][[Category:Rockchip RK3566]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=12707</id>
		<title>Quartz64 Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Development&amp;diff=12707"/>
		<updated>2022-03-28T19:11:03Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Update VOP2 patch series link to v9&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the current status of software support for the [[Quartz64]] single-board computer, and provides links to resources to help prospective contributors get started. Information is kept current on a best-effort basis as various patches get accepted into the kernel.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&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;
! scope=&amp;quot;col&amp;quot; | Applies To&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot; | Video Output&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=626925]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchipdrm/VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&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-edpphy-naneng&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/phy/rockchip/phy-rockchip-naneng-edp.c] Coordinate any porting with Rockchip first&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | 3D Acceleration &lt;br /&gt;
| 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=612521]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Upstream Mesa&lt;br /&gt;
| &amp;lt;code&amp;gt;panfrost&amp;lt;/code&amp;gt;&lt;br /&gt;
| GPU is basically already supported in mainline but needs some device tree changes for this particular SoC&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Video Decode &lt;br /&gt;
| style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux Staging&lt;br /&gt;
| style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Not in 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-vpu&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rkvdec&amp;lt;/code&amp;gt;, using &amp;lt;code&amp;gt;v4l2-requests&amp;lt;/code&amp;gt;&lt;br /&gt;
| Necessary device tree changes for the Hantro VPU [https://patchwork.kernel.org/project/linux-rockchip/patch/20210719225806.26680-1-ezequiel@collabora.com/ in review]. rkvdec hardware has been updated compared to rk3399 and may require driver changes.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;3&amp;quot; | Audio &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-i2s-tdm&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=43b058698f723e3c2087af7069c0da082a3ecbe1]&amp;lt;/sup&amp;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;rockchip-spdif&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dac825b6a6bdca41347e25f07354ad94fdc97445]&amp;lt;/sup&amp;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;rk817-codec&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]&amp;lt;/sup&amp;gt;.&lt;br /&gt;
| Quartz64 Model A/B&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | u-boot&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Waiting on ATF sources&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;4&amp;quot; | Device Tree&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;  style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
| As of 5.16&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b33a22a1e7c4248608e533fc4fa524258b3fae84]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs submitting&lt;br /&gt;
| Quartz64 Model B&lt;br /&gt;
|&lt;br /&gt;
| Quartz64 Model B&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs submitting&lt;br /&gt;
| SOQuartz&lt;br /&gt;
|&lt;br /&gt;
| SOQuartz&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:PaleGreen; text-align:center;&amp;quot;|Linux Rockchip Tree&lt;br /&gt;
| PineNote&lt;br /&gt;
| Will be in Mainline in 5.18&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git/commit/?id=d449121e5e8addcee654250cec298c887ecafb32]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;2&amp;quot;| Gigabit Ethernet&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;rk3566-gmac&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3bb3d6b1c1957e88bfc5e77a4557f7e6ba761fe3]&amp;lt;/sup&amp;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;yt8511-phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=48e8c6f1612b3d2dccaea2285231def830cc5b8e]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | IOMMU&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-iommu&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c55356c534aa651ccc3053ef2d5d8d810adacf5f]&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;gpio-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=936ee2675eee1faca0dcdfa79165c7990422e0fc]&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;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Thermal Regulation&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-thermal&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4b14c055a6f644cbeb1156ba24647e92fe51ec69]&amp;lt;/sup&amp;gt;&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;pcie-dw-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0e898eb8df4e34c7b129452444eb7cef68a11f43]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Power Management&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-domains&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1782c87b44a0b1a527f01a6a184677c58ccbf9c7]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Voltage Control&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;rk3568-pmu-io-voltage-domain&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=28b05a64e47cbceebb8a5f3f643033148d5c06c3]&amp;lt;/sup&amp;gt;&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;spi-rockchip&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.14&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d74d99229f4d48f42d674f7a8a1137179efd67ac]&amp;lt;/sup&amp;gt;. Necessary device tree changes [https://patchwork.kernel.org/project/linux-rockchip/list/?series=586691 in review].&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Battery&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=536233&amp;amp;archive=both]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;rk817-charger&amp;lt;/code&amp;gt;&lt;br /&gt;
| In the BSP tree this is handled by [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/power/supply/rk817_battery.c rk817_battery.c] and [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/power/supply/rk817_charger.c rk817_charger.c].&lt;br /&gt;
| Quartz64 Model A&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Microphone&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-saradc&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.15&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7786da3b5ae167c17f35e22ba35e06006338c2f6]&amp;lt;/sup&amp;gt;. Headphone jack mic seems to connect to &amp;lt;code&amp;gt;SARADC_VIN2_HP_HOOK&amp;lt;/code&amp;gt;, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work&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:PaleGreen; text-align:center;&amp;quot;|Linux Mainline&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-usb2phy&amp;lt;/code&amp;gt;&lt;br /&gt;
| As of 5.17&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/phy/rockchip?h=v5.17-rc1&amp;amp;id=42b559727a45d79c811f493515eb9b7e56016421]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | e-Ink&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs submitting&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-ebc&amp;lt;/code&amp;gt;&lt;br /&gt;
| A DRM driver is available [https://github.com/smaeul/linux/commits/rk35/ebc here]; also see [[RK3566 EBC Reverse-Engineering]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Combo PHY&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:LightYellow; text-align:center;&amp;quot;|Linux-Next&amp;lt;sup&amp;gt;[https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/drivers/phy/rockchip?h=next-20220310&amp;amp;id=7160820d742a16313f7802e33c2956c19548e488]&amp;lt;/sup&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;naneng-combphy&amp;lt;/code&amp;gt;&lt;br /&gt;
| Still requires DTS changes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | RGA&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Needs fixing&lt;br /&gt;
| &amp;lt;code&amp;gt;rockchip-rga&amp;lt;/code&amp;gt;&lt;br /&gt;
| [[User:CounterPillow]] experimentally enabled it&amp;lt;sup&amp;gt;[https://gist.github.com/CounterPillow/6bea809f15ada7ddd3a3d7a4994fdc4e]&amp;lt;/sup&amp;gt; in the device tree and ran gstreamer's v4l2convert through it to test, resulting in a completely garbled output.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Fan Controller&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;emc2301&amp;lt;/code&amp;gt;&lt;br /&gt;
| Previous attempts at mainlining: [http://lkml.iu.edu/hypermail/linux/kernel/1306.1/02473.html] and [https://lore.kernel.org/all/20200928104326.40386-1-biwen.li@oss.nxp.com/]. Latest iteration: [https://gitlab.traverse.com.au/ls1088firmware/traverse-sensors/-/commit/1cdec49171ebafcf32b347e7701224144de8620b]&lt;br /&gt;
| SOQuartz Blade&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | CIF (CSI Camera)&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;video_rkcif&amp;lt;/code&amp;gt;&lt;br /&gt;
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/cif]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current Status ==&lt;br /&gt;
&lt;br /&gt;
The following sections give an overview over the current status of different parts of the board. Some parts are waiting on a driver to be written or ported, others only need various adjustments.&lt;br /&gt;
&lt;br /&gt;
According to pgwipeout, I/O device performance is within expected ranges now.&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
&lt;br /&gt;
* eMMC&lt;br /&gt;
* SDMMC0 (SD cards)&lt;br /&gt;
* GMAC (Gigabit Ethernet)&lt;br /&gt;
* USB 2.0&lt;br /&gt;
* SATA 2&lt;br /&gt;
* SATA 3&lt;br /&gt;
* UART&lt;br /&gt;
** UART 0 (Pi-bus)&lt;br /&gt;
** UART 1 (Bluetooth)&lt;br /&gt;
** UART 2 (Pi-bus, debug)&lt;br /&gt;
* Video Decode&lt;br /&gt;
** VP8&lt;br /&gt;
* Battery&lt;br /&gt;
* GPU&lt;br /&gt;
* Audio&lt;br /&gt;
** Analog audio works&lt;br /&gt;
** SPDIF works&lt;br /&gt;
** HDMI works&lt;br /&gt;
* SPI &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
* I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &amp;amp;mdash; works, user needs to modify device tree to add devices&lt;br /&gt;
&lt;br /&gt;
=== Partially Working ===&lt;br /&gt;
&lt;br /&gt;
* PCI-Express Controller &amp;amp;mdash; everything but devices that need cache coherency (e.g. dGPUs) should work&lt;br /&gt;
** [[User:CounterPillow]] noticed some weirdness with NVMe devices disconnecting during heavy write operations, likely down due to power draw on one of the rails as the same sustained bandwidth could be achieved with a different PCIe device with no issue.&lt;br /&gt;
* SDMMC1 (Wi-Fi) &amp;amp;mdash; AP6256 working, BL602 needs some work to make it flash firmware&lt;br /&gt;
* [https://developer.arm.com/architectures/system-architectures/system-components/arm-generic-interrupt-controller GIC] &amp;amp;mdash; needs errata published by Rockchip to get upstream to add device-specific workarounds&amp;lt;sup&amp;gt;[https://lore.kernel.org/linux-rockchip/CAMdYzYrQ5f-mv_VmTq_CRf9tR=j3mwRpKHNLmPFgCF9whsGFRw@mail.gmail.com/]&amp;lt;/sup&amp;gt;&lt;br /&gt;
* Video Output &amp;amp;mdash; only at 1920x1080p60 and nothing else, very buggy and rough around more than just the edges&lt;br /&gt;
&lt;br /&gt;
=== Confirmed Broken ===&lt;br /&gt;
&lt;br /&gt;
* USB 3.0 &amp;amp;mdash; only works with very short cables and depends on the device. This is due to a hardware design issue relating to the coupling capacitors needed for SATA, which shares the same lines as USB 3.0.&lt;br /&gt;
** Hardware design changes have been suggested to engineers, it's in their hands now.&lt;br /&gt;
* Module autoloading for the Ethernet PHY. The Motorcomm PHY does not have a vendor ID written into the appropriate hardware block, so there is no canonical way to identify the device.&lt;br /&gt;
&lt;br /&gt;
=== Needs Testing ===&lt;br /&gt;
&lt;br /&gt;
* E-Paper &amp;amp;mdash; needs EBC driver&lt;br /&gt;
* Microphone Input&lt;br /&gt;
* CSI &amp;amp;mdash; needs CIF driver&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
=== ebc-dev Reverse Engineering and Development ===&lt;br /&gt;
&lt;br /&gt;
The [https://gitlab.com/pine64-org/quartz-bsp/linux-next/-/tree/rk356x-ebc-dev driver for the eInk panel] needs to both be reverse engineered and then rewritten as C. In its current form, it is mostly an assembly dump produced by gcc with debug symbols. See [[RK3566 EBC Reverse-Engineering]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Investigate MCU ===&lt;br /&gt;
&lt;br /&gt;
The RK3566 comes with an integrated RISC-V microcontroller (MCU). It communicates with the A55 host through the Mailbox system driven by the rockchip-mailbox driver. Since this MCU would be quite useful for things such as low power standby mode, investigating how it can be turned on and have firmware flashed to it should greatly enhance the power saving features of the PineNote.&lt;br /&gt;
&lt;br /&gt;
=== Mainline U-Boot Work ===&lt;br /&gt;
&lt;br /&gt;
Currently, mainline U-Boot does not have support for the RK3566 SoC used on the Quartz64. That's why we currently use the &amp;quot;downstream&amp;quot; Rockchip U-Boot, which is based on an old version of U-Boot and contains vendor specific patches that have not undergone the same level of code review as they'd have done had they been submitted upstream.&lt;br /&gt;
&lt;br /&gt;
While the lack of ATF sources means that using mainline U-Boot would still require the use of Rockchip provided binaries for the firmware, the mainline U-Boot works needs to be done eventually anyway, and even with Rockchip blobs, a more modern version of U-Boot will be much nicer to use.&lt;br /&gt;
&lt;br /&gt;
Someone needs to get on the task of investigating what minimally needs to be ported to get the board booting with mainline U-Boot, port those changes, and submit them for review.&lt;br /&gt;
&lt;br /&gt;
==== Things that need to be done ====&lt;br /&gt;
&lt;br /&gt;
This list is non-exhaustive as we don't exactly know how much is missing&lt;br /&gt;
&lt;br /&gt;
* Do the &amp;lt;code&amp;gt;rk3568.dtsi&amp;lt;/code&amp;gt; refactoring into &amp;lt;code&amp;gt;rk356x.dtsi&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;rk3568.dtsi&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;rk3566.dtsi&amp;lt;/code&amp;gt; that the kernel did, probably just port the kernel dtsi files for this&lt;br /&gt;
* Bring the kernel's Quartz64 DTS into the tree&lt;br /&gt;
* Write a &amp;lt;code&amp;gt;quartz64-rk3566_defconfig&amp;lt;/code&amp;gt; based on &amp;lt;code&amp;gt;evb-rk3568_defconfig&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stretch Goals:&lt;br /&gt;
&lt;br /&gt;
* Port the Naneng Combo PHY driver to u-boot so we can SATA, USB 3 and PCIe boot&lt;br /&gt;
* Look into SPI&lt;br /&gt;
* Port the Motorcomm PHY driver to u-boot for networking?&lt;br /&gt;
* Port a basic VOP2 driver to get a framebuffer from u-boot&lt;br /&gt;
&lt;br /&gt;
==== List of Useful Resources for this Task ====&lt;br /&gt;
* Downstream Rockchip U-Boot repository with Quartz64 specific patches: https://gitlab.com/pgwipeout/u-boot-rockchip/-/tree/quartz64&lt;br /&gt;
* Mainline Rockchip custodian U-Boot repository: https://source.denx.de/u-boot/custodians/u-boot-rockchip&lt;br /&gt;
* U-Boot Mailing List: https://lists.denx.de/listinfo/u-boot&lt;br /&gt;
&lt;br /&gt;
== Linux Kernel Config Options ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_I2S_TDM&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog and (in the future) HDMI audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_RK817&amp;lt;/code&amp;gt;&lt;br /&gt;
** for Analog audio on the Model A&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_STMMAC_ETH&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DWMAC_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MOTORCOMM_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** Ethernet, set this one to Y, m won't work out of the box as module autoloading does not work for this specific PHY (the vendor ID is zeroed out), alternatively tell users in board-specific setup instructions to force loading the &amp;lt;code&amp;gt;motorcomm&amp;lt;/code&amp;gt; module if you set it to m.&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MMC_DW_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** MMC/SD&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PCIE_ROCKCHIP_DW_HOST&amp;lt;/code&amp;gt;&lt;br /&gt;
** PCIe&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** PHY for PCIe/SATA/USB3, not yet upstream&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_DRM_PANFROST&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPU&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SND_SOC_ROCKCHIP_SPDIF&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPDIF audio&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_DW_HDMI&amp;lt;/code&amp;gt;&lt;br /&gt;
** HDMI PHY&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_VOP2&amp;lt;/code&amp;gt;&lt;br /&gt;
** Video output, not yet upstream&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ARCH_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PHY&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PHY_ROCKCHIP_INNO_USB2&amp;lt;/code&amp;gt;&lt;br /&gt;
** USB 2&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_RTC_DRV_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Real-time Clock&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_MFD_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Various things relating to the RK817 chip&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_REGULATOR_RK808&amp;lt;/code&amp;gt;&lt;br /&gt;
** Voltage regulators&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_PM_DOMAINS&amp;lt;/code&amp;gt;&lt;br /&gt;
** Power management domains&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_GPIO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PINCTRL_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** GPIO and general SoC support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_PWM_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** PWM support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IOMMU&amp;lt;/code&amp;gt;&lt;br /&gt;
** IOMMU support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_MBOX&amp;lt;/code&amp;gt;&lt;br /&gt;
** Mailbox support (for communication with MCU)&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_SARADC&amp;lt;/code&amp;gt;&lt;br /&gt;
** Analog-to-digital conversion support, for e.g. microphones&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_THERMAL&amp;lt;/code&amp;gt;&lt;br /&gt;
** Temperature sensor and thermal throttling support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_SPI_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** SPI support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_VIDEO_HANTRO_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Hardware video decoder support&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_ROCKCHIP_IODOMAIN&amp;lt;/code&amp;gt;&lt;br /&gt;
** General SoC support so your I/O pins have the right voltage&lt;br /&gt;
* &amp;lt;code&amp;gt;CONFIG_COMMON_CLK_ROCKCHIP&amp;lt;/code&amp;gt;&lt;br /&gt;
** Common clock support&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
=== Repositories ===&lt;br /&gt;
&lt;br /&gt;
* pgwipeout's kernel tree&lt;br /&gt;
** https://gitlab.com/pgwipeout/linux-next/-/tree/quartz64-v5.15-rc1&lt;br /&gt;
* BSP based development effort for SPL/U-Boot and Linux&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp&lt;br /&gt;
* Image CI pipeline aimed at developers&lt;br /&gt;
** https://gitlab.com/pgwipeout/quartz64_ci/&lt;br /&gt;
* Rockchip U-Boot&lt;br /&gt;
** https://github.com/rockchip-linux/u-boot&lt;br /&gt;
* Downstream rockchip-linux kernel tree&lt;br /&gt;
** https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux&lt;br /&gt;
* Tianocore EDK II port for UEFI on Quartz64&lt;br /&gt;
** https://github.com/jaredmcneill/quartz64_uefi&lt;br /&gt;
* Mainline U-Boot Port by pgwipeout&lt;br /&gt;
** https://gitlab.com/pgwipeout/u-boot-quartz64&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* Rockchip-SoC Patchwork Page&lt;br /&gt;
** https://patchwork.kernel.org/project/linux-rockchip/list/&lt;br /&gt;
* Rockchip Kernel Mailing List Archive&lt;br /&gt;
** https://lore.kernel.org/linux-rockchip/&lt;br /&gt;
&lt;br /&gt;
== Board/SoC Documentation ==&lt;br /&gt;
=== Booting ===&lt;br /&gt;
==== Boot Order ====&lt;br /&gt;
The RK3566 boot ROM will search for a valid ID BLOCK in the following order on the support boot media:&lt;br /&gt;
&lt;br /&gt;
* SPI NOR flash&lt;br /&gt;
* SPI NAND flash&lt;br /&gt;
* SD-Card&lt;br /&gt;
* eMMC&lt;br /&gt;
&lt;br /&gt;
... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip&lt;br /&gt;
flash/boot tools.&lt;br /&gt;
&lt;br /&gt;
==== Bootloader Flashing ====&lt;br /&gt;
&lt;br /&gt;
As per pgwipeout's [https://gitlab.com/pine64-org/quartz-bsp/u-boot/-/commit/12d102b86813378af08b086f3b9c13ed8010754c commit message]:&lt;br /&gt;
* Make a partition named &amp;lt;code&amp;gt;uboot&amp;lt;/code&amp;gt; as partition number 1 at 8 MiB to 16 MiB&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=idblock.bin of=/dev/''&amp;lt;mmc/sd&amp;gt;'' seek=64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;dd if=uboot.img of=/dev/''&amp;lt;mmc/sd&amp;gt;''1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== BSP Image Layout ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Quartz64]][[Category:Rockchip RK3566]]&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=Quartz64_Installing_Arch_Linux_ARM&amp;diff=11980</id>
		<title>Quartz64 Installing Arch Linux ARM</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=Quartz64_Installing_Arch_Linux_ARM&amp;diff=11980"/>
		<updated>2021-12-09T10:30:43Z</updated>

		<summary type="html">&lt;p&gt;Diederik: Using 'unit X' is only needed when you don't specify a unit, so add a unit to the only one which hadn't and remove 'unit X'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{note|This page is a work in progress. If you are not familiar with user-mode QEMU, wait for the 5.16 kernel release. Right now there's still an iffy step left: installing a custom kernel package to get it booting. This will no longer be necessary with Linux 5.16.}}&lt;br /&gt;
&lt;br /&gt;
Commands to be run as a normal user are prefixed with &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;, commands to be run as root are prefixed with &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;. We assume your target device is &amp;lt;tt&amp;gt;/dev/sdb&amp;lt;/tt&amp;gt;, adjust accordingly.&lt;br /&gt;
&lt;br /&gt;
== Partitioning The Block Device ==&lt;br /&gt;
&lt;br /&gt;
Here we assume your block device is &amp;lt;tt&amp;gt;/dev/sdb&amp;lt;/tt&amp;gt;, adjust as needed.&lt;br /&gt;
&lt;br /&gt;
Create a new partition table:&lt;br /&gt;
&lt;br /&gt;
 # parted -s /dev/sdb mklabel gpt&lt;br /&gt;
&lt;br /&gt;
Create the partitions for loader and u-boot:&lt;br /&gt;
 &lt;br /&gt;
 # parted -s /dev/sdb mkpart loader 64s 8MiB&lt;br /&gt;
 # parted -s /dev/sdb mkpart uboot 8MiB 16MiB&lt;br /&gt;
&lt;br /&gt;
Create the partition for u-boot's environment:&lt;br /&gt;
&lt;br /&gt;
 # parted -s /dev/sdb mkpart env 16MiB 32MiB&lt;br /&gt;
&lt;br /&gt;
Create the &amp;quot;efi&amp;quot; boot partition and mark it as bootable:&lt;br /&gt;
&lt;br /&gt;
 # parted -s /dev/sdb mkpart efi fat32 32MiB 544MiB&lt;br /&gt;
 # parted -s /dev/sdb set 4 boot on&lt;br /&gt;
&lt;br /&gt;
Create the root partition:&lt;br /&gt;
&lt;br /&gt;
 # parted -s /dev/sdb mkpart root ext4 544MiB 100%&lt;br /&gt;
&lt;br /&gt;
=== Creating The File Systems ===&lt;br /&gt;
&lt;br /&gt;
Now create the file systems for boot and root:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.vfat -n &amp;quot;efi&amp;quot; /dev/sdb4&lt;br /&gt;
 # mkfs.ext4 -L &amp;quot;rootfs&amp;quot; /dev/sdb5&lt;br /&gt;
&lt;br /&gt;
== Fetching and Flashing U-Boot ==&lt;br /&gt;
&lt;br /&gt;
For this we'll use the precompiled idblock and u-boot from pgwipeout's CI.&lt;br /&gt;
&lt;br /&gt;
Go to https://gitlab.com/pgwipeout/quartz64_ci/-/pipelines and click the three dots, download the merge-job artifacts.&lt;br /&gt;
&lt;br /&gt;
Unzip them:&lt;br /&gt;
&lt;br /&gt;
 $ unzip artifacts.zip&lt;br /&gt;
&lt;br /&gt;
Flash idblock.bin and uboot.img:&lt;br /&gt;
&lt;br /&gt;
 # dd if=artifacts/idblock.bin of=/dev/sdb1&lt;br /&gt;
 # dd if=artifacts/uboot.img of=/dev/sdb2&lt;br /&gt;
&lt;br /&gt;
== Fetching The Root File System Tarball ==&lt;br /&gt;
&lt;br /&gt;
Fetch the root filesystem tarball and the PGP signature&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ wget -N http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz{,.sig}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fetch the gpg keys:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;$ curl 'https://keyserver.ubuntu.com/pks/lookup?op=get&amp;amp;search=0x68b3537f39a313b3e574d06777193f152bdbe6a6' | gpg --import=-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compare the key ID provided in the above command with the one listed here: https://archlinuxarm.org/about/package-signing (Take good note of the domain and HTTPS)&lt;br /&gt;
&lt;br /&gt;
Verify the tarball's authenticity&lt;br /&gt;
&lt;br /&gt;
 $ gpg --verify ArchLinuxARM-aarch64-latest.tar.gz.sig&lt;br /&gt;
&lt;br /&gt;
{{note|Do not skip verifying the authenticity. This is important. It also protects you from prematurely aborted transfers giving you a corrupt archive.}}&lt;br /&gt;
&lt;br /&gt;
== Installing The Root File System ==&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/sdb5 /mnt/alarm-root&lt;br /&gt;
 # mkdir /mnt/alarm-root/boot&lt;br /&gt;
 # mount /dev/sdb4 /mnt/alarm-root/boot&lt;br /&gt;
 # bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C /mnt/alarm-root&lt;br /&gt;
&lt;br /&gt;
=== Editing fstab ===&lt;br /&gt;
&lt;br /&gt;
Find your partition UUIDs for both partitions using &amp;lt;code&amp;gt;lsblk&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 $ lsblk -o NAME,SIZE,MOUNTPOINTS,PARTUUID&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;tt&amp;gt;/mnt/alarm-root/etc/fstab&amp;lt;/tt&amp;gt;, put the lines&lt;br /&gt;
&lt;br /&gt;
 PARTUUID=''root-uuid-here''  /       ext4    defaults        0       0&lt;br /&gt;
 PARTUUID=''boot-uuid-here''  /boot   vfat    defaults        0       1&lt;br /&gt;
&lt;br /&gt;
with your UUIDs in place of the placeholder.&lt;br /&gt;
&lt;br /&gt;
=== Writing extlinux.conf ===&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;tt&amp;gt;/mnt/alarm-root/boot/extlinux/extlinux.conf&amp;lt;/tt&amp;gt; with these contents:&lt;br /&gt;
&lt;br /&gt;
 default l0&lt;br /&gt;
 menu title Quartz64 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 Arch Kernel SDMMC&lt;br /&gt;
 linux /Image&lt;br /&gt;
 fdt /dtbs/rockchip/rk3566-quartz64-a.dtb&lt;br /&gt;
 append initrd=/initramfs-linux.img earlycon=uart8250,mmio32,0xfe660000 console=ttyS2,1500000n8 root=/dev/mmcblk0p5 rw rootwait&lt;br /&gt;
&lt;br /&gt;
For eMMC instead of SD, replace &amp;lt;code&amp;gt;/dev/mmcblk0p5&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;/dev/mmcblk1p5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For a different type of Quartz64 device (e.g. Model B) replace the &amp;lt;tt&amp;gt;fdt&amp;lt;/tt&amp;gt; line with the appropriate &amp;lt;tt&amp;gt;/boot&amp;lt;/tt&amp;gt;-relative path to the device tree.&lt;br /&gt;
&lt;br /&gt;
=== Finishing Touches ===&lt;br /&gt;
&lt;br /&gt;
{{note|Here's where you'd do the part I said was iffy and won't be necessary with 5.16 anymore. You'll need an Arch Linux or Manjaro system. If it's not an aarch64 system, you'll also need &amp;lt;tt&amp;gt;qemu-user-static&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
First, get [https://overviewer.org/~pillow/up/e96363af01/linux-aarch64-rc-5.16.rc4-1-aarch64.pkg.tar.zst the linux-aarch64-rc package I patched and built], then copy it somewhere into your mounted root.&lt;br /&gt;
&lt;br /&gt;
Alternatively, patch and build the package yourself by [https://github.com/archlinuxarm/PKGBUILDs/tree/master/core/linux-aarch64-rc getting the package sources] and [https://gist.github.com/CounterPillow/310273c9632f25c436fb4fdfa0128068 patching the package (in this case also for cross-compilation)].&lt;br /&gt;
&lt;br /&gt;
Next, &amp;lt;code&amp;gt;arch-chroot&amp;lt;/code&amp;gt; into the mounted root:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# arch-chroot /mnt/alarm-root&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and install the package&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# pacman -U linux-aarch64-rc-5.16.rc4-1-aarch64.pkg.tar.zst&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt; the chroot again once it's done installing.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Once done, unmount the partitions:&lt;br /&gt;
&lt;br /&gt;
 # umount /mnt/alarm-root/boot&lt;br /&gt;
 # umount /mnt/alarm-root&lt;br /&gt;
&lt;br /&gt;
== Booting And Finishing Setup ==&lt;br /&gt;
&lt;br /&gt;
Hook up your UART dongle to your Quartz64, open a serial terminal at 1.5mbauds. Install the SD card or eMMC module inside the Quartz64, and plug in the power.&lt;br /&gt;
&lt;br /&gt;
Once you hit a login shell, log in as &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; with password &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; and run:&lt;br /&gt;
&lt;br /&gt;
 # pacman-key --init&lt;br /&gt;
 # pacman-key --populate archlinuxarm&lt;br /&gt;
&lt;br /&gt;
You are now ready to use Arch Linux ARM! Either delete or rename (and move the homedir of) the &amp;lt;code&amp;gt;alarm&amp;lt;/code&amp;gt; user, and you're all set. Don't forget to install things like &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; and setting up sudo groups and such.&lt;/div&gt;</summary>
		<author><name>Diederik</name></author>
	</entry>
</feed>