Difference between revisions of "Quartz64 Development"

From PINE64
Jump to navigation Jump to search
m (→‎Upstreaming Status: Update link to Hantro patchset)
m (Update U-Boot ethernet GMAC and Motorcomm PHY driver status)
 
(65 intermediate revisions by 10 users not shown)
Line 13: Line 13:
|-
|-
! scope="row" rowspan="3" | Video Output
! scope="row" rowspan="3" | Video Output
| colspan="2" style="background:LightYellow; text-align:center;"|In review<sup>[https://patchwork.kernel.org/project/linux-rockchip/list/?series=634531]</sup>
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rockchipdrm/VOP2</code>
| <code>rockchipdrm/VOP2</code>
|
|
As of 5.19-rc1<sup>[https://git.kernel.org/linus/604be85547ce4d61b89292d2f9a78c721b778c16]</sup>, Also featured in Phoronix Article<sup>[https://www.phoronix.com/scan.php?page=news_item&px=Rockchip-VOP2-Linux-5.19]</sup>, 4k@30 support and other improvements in 6.4-rc1<sup>[https://git.kernel.org/linus/83b61f817f43ed67572d1e241c9f552e0a8bfff4]</sup>
|-
|-
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
Line 22: Line 23:
|
|
|-
|-
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>dw-mipi-dsi-rockchip</code>
| <code>dw-mipi-dsi-rockchip</code>
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/blob/quartz64/drivers/gpu/drm/rockchip/dw-mipi-dsi.c]
| As of 6.1<sup>[https://git.kernel.org/linus/e18d9b093006d8abd53e1ce13c0d5a8d0fcd5f64]</sup>
|
|
|-
|-
Line 31: Line 32:
| style="background:PaleGreen; text-align:center;"|Upstream Mesa
| style="background:PaleGreen; text-align:center;"|Upstream Mesa
| <code>panfrost</code>
| <code>panfrost</code>
| As of 5.18<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=810028668c6d9da25664195d6b906c98a8169f72]</sup>
| As of 5.18<sup>[https://git.kernel.org/linus/810028668c6d9da25664195d6b906c98a8169f72]</sup>
|-
|-
! scope="row" | Video Decode  
! scope="row" rowspan="3" | Video Decode  
| style="background:LightYellow; text-align:center;"|Linux Staging
| style="background:PaleGreen; text-align:center;"|Linux Mainline
| style="background:LightYellow; text-align:center;"|GStreamer only, no ffmpeg<sup>[https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=2898]</sup>
| style="background:LightYellow; text-align:center;" rowspan="3"|GStreamer only, no ffmpeg<sup>[https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=2898]</sup>
| <code>hantro-vpu</code> and <code>rkvdec</code>, using <code>v4l2-requests</code>
| <code>hantro</code> using <code>v4l2-requests</code>
| Necessary device tree changes for the Hantro VPU [https://patchwork.kernel.org/project/linux-rockchip/patch/20220214212955.1178947-1-piotr.oniszczuk@gmail.com/ in review]. rkvdec hardware has been updated compared to rk3399 and may require driver changes.
| VDPU121 handling 1080p MPEG-2, VP8 and H.264. Mainline as of 5.19<sup>[https://git.kernel.org/linus/5f6bfab6da6531238e899fdf29efd6d0185adc3e]</sup>
|
|-
|-
! scope="row" rowspan="3" | Video Encode
| style="background:#F99; text-align:center;"|Needs writing
| style="background:#F99; text-align:center;"|Needs writing
| <code>rkvdec2</code> using <code>v4l2-requests</code>
| VDPU346 handling 4K H.265, H.264 and VP9
|
|-
| style="background:#F99; text-align:center;"|Needs writing
| <code>rkdjpeg</code> using <code>v4l2-requests</code>
| VDPU720 handling JPEG, [[User:CounterPillow]] is working on this
|-
! scope="row" rowspan="5" | [[Mainline Hardware Encoding|Video Encode]]
| style="background:PaleGreen; text-align:center;"|Linux Mainline
| style="text-align:center; background:LightYellow;"|GStreamer only
| style="text-align:center; background:LightYellow;"|GStreamer only
| JPEG on VEPU121
| JPEG on VEPU121
| Driver likely exists in <code>rockchip_vpu2_hw_jpeg_enc.c</code>, but non-trivial additions are needed to support this chip's separate JPEG encoder block
| Hantro-based. Mainline as of 6.1<sup>[https://git.kernel.org/linus/6f1ae821a6c4aa9d5b8f437b27ec86fb569219fd]</sup>
|
|
|-
| style="background:#F99; text-align:center;"|Needs writing
| style="text-align:center;"|?
| H.264 on VEPU121
| Hantro-based
|
|-
| style="background:#F99; text-align:center;"|Needs writing
| style="text-align:center;"|?
| VP8 on VEPU121
| Hantro-based
|
|-
|-
| style="background:#F99; text-align:center;"|Needs writing
| style="background:#F99; text-align:center;"|Needs writing
| style="text-align:center;"|?
| style="text-align:center;"|?
| H.264 on VEPU540
| H.264 on VEPU540
|  
| rkvenc-based
|  
|  
|-
|-
Line 55: Line 78:
| style="text-align:center;"|?
| style="text-align:center;"|?
| H.265 on VEPU540
| H.265 on VEPU540
|  
| rkvenc-based
|  
|  
|-
|-
Line 61: Line 84:
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rockchip-i2s-tdm</code>
| <code>rockchip-i2s-tdm</code>
| As of 5.16<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=43b058698f723e3c2087af7069c0da082a3ecbe1]</sup>
| As of 5.16<sup>[https://git.kernel.org/linus/43b058698f723e3c2087af7069c0da082a3ecbe1]</sup>
|-
|-
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rockchip-spdif</code>
| <code>rockchip-spdif</code>
| As of 5.15<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dac825b6a6bdca41347e25f07354ad94fdc97445]</sup>
| As of 5.15<sup>[https://git.kernel.org/linus/dac825b6a6bdca41347e25f07354ad94fdc97445]</sup>
|-
|-
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rk817-codec</code>
| <code>rk817-codec</code>
| As of 5.14<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]</sup>.
| As of 5.14<sup>[https://git.kernel.org/linus/0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]</sup>.
| Quartz64 Model A/B
| Quartz64 Model A/B
|-
|-
! scope="row" | u-boot
! scope="row" rowspan="3" | Bootloader
| colspan="2" style="background:#F99; text-align:center;"|Waiting on ATF sources
| colspan="2" style="background:LightYellow; text-align:center;"|In review<sup>[https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/16952]</sup>
| <code>TF-A</code>
|
|-
| colspan="2" style="background:LightYellow; text-align:center;"|Merged
| <code>U-Boot</code>
| [[#Mainline_U-Boot_Work|See below]]. Quartz64 and SOQuartz as of v2023.10-rc2<sup>[https://source.denx.de/u-boot/u-boot/-/commit/4e619e8d4fd68095bc665a78f2651d8e478a4534]</sup>
|
|
|-
| colspan="2" style="background:LightYellow; text-align:center;"|In progress<sup>[https://github.com/jaredmcneill/quartz64_uefi]</sup>
| <code>Tianocore EDK II</code>
|
|
|-
|-
Line 80: Line 112:
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| Quartz64 Model A
| Quartz64 Model A
| As of 5.16<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b33a22a1e7c4248608e533fc4fa524258b3fae84]</sup>
| As of 5.16<sup>[https://git.kernel.org/linus/b33a22a1e7c4248608e533fc4fa524258b3fae84]</sup>
| Quartz64 Model A
| Quartz64 Model A
|-
|-
| colspan="2" style="background:LightYellow; text-align:center;"|In review<sup>[https://patchwork.kernel.org/project/linux-rockchip/list/?series=635395]</sup>
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| Quartz64 Model B
| Quartz64 Model B
|
| As of 5.19<sup>[https://git.kernel.org/linus/c37415f55bdadffe5b4c0e7981e9fc7e8b96beea]</sup>
| Quartz64 Model B
| Quartz64 Model B
|-
|-
| colspan="2" style="background:LightYellow; text-align:center;"|In review<sup>[https://patchwork.kernel.org/project/linux-rockchip/list/?series=635395]</sup>
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| SOQuartz
| SOQuartz
|
| As of 5.19<sup>[https://git.kernel.org/linus/c466828fb3ba8cb7f5c3bf28766da9b70bf9745e]</sup>
| SOQuartz
| SOQuartz
|-
|-
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| PineNote
| PineNote
| As of 5.18<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d449121e5e8addcee654250cec298c887ecafb32]</sup>
| As of 5.18<sup>[https://git.kernel.org/linus/d449121e5e8addcee654250cec298c887ecafb32]</sup>
| PineNote
| PineNote
|-
|-
Line 101: Line 133:
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rk3566-gmac</code>
| <code>rk3566-gmac</code>
| As of 5.14<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3bb3d6b1c1957e88bfc5e77a4557f7e6ba761fe3]</sup>
| As of 5.14<sup>[https://git.kernel.org/linus/3bb3d6b1c1957e88bfc5e77a4557f7e6ba761fe3]</sup>
|-
|-
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>yt8511-phy</code>
| <code>yt8511-phy</code>
| As of 5.14<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=48e8c6f1612b3d2dccaea2285231def830cc5b8e]</sup>
| As of 5.14<sup>[https://git.kernel.org/linus/48e8c6f1612b3d2dccaea2285231def830cc5b8e]</sup>
|-
|-
! scope="row" | IOMMU
! scope="row" | IOMMU
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rockchip-iommu</code>
| <code>rockchip-iommu</code>
| As of 5.14<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c55356c534aa651ccc3053ef2d5d8d810adacf5f]</sup>
| As of 5.14<sup>[https://git.kernel.org/linus/c55356c534aa651ccc3053ef2d5d8d810adacf5f]</sup>
|-
|-
! scope="row" | GPIO
! scope="row" | GPIO
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>gpio-rockchip</code>
| <code>gpio-rockchip</code>
| As of 5.15<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=936ee2675eee1faca0dcdfa79165c7990422e0fc]</sup>
| As of 5.15<sup>[https://git.kernel.org/linus/936ee2675eee1faca0dcdfa79165c7990422e0fc]</sup>
|-
|-
! scope="row" | pinctrl
! scope="row" | pinctrl
Line 125: Line 157:
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rockchip-thermal</code>
| <code>rockchip-thermal</code>
| As of 5.14<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4b14c055a6f644cbeb1156ba24647e92fe51ec69]</sup>
| As of 5.14<sup>[https://git.kernel.org/linus/4b14c055a6f644cbeb1156ba24647e92fe51ec69]</sup>
|-
|-
! scope="row" | PCIe
! scope="row" | PCIe
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>pcie-dw-rockchip</code>
| <code>pcie-dw-rockchip</code>
| As of 5.15<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0e898eb8df4e34c7b129452444eb7cef68a11f43]</sup>
| As of 5.15<sup>[https://git.kernel.org/linus/0e898eb8df4e34c7b129452444eb7cef68a11f43]</sup>
|-
|-
! scope="row" | Power Management
! scope="row" | Power Management
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rockchip-pm-domains</code>
| <code>rockchip-pm-domains</code>
| As of 5.14<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1782c87b44a0b1a527f01a6a184677c58ccbf9c7]</sup>
| As of 5.14<sup>[https://git.kernel.org/linus/1782c87b44a0b1a527f01a6a184677c58ccbf9c7]</sup>
|-
|-
! scope="row" | Voltage Control
! scope="row" | Voltage Control
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rk3568-pmu-io-voltage-domain</code>
| <code>rk3568-pmu-io-voltage-domain</code>
| As of 5.15<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=28b05a64e47cbceebb8a5f3f643033148d5c06c3]</sup>
| As of 5.15<sup>[https://git.kernel.org/linus/28b05a64e47cbceebb8a5f3f643033148d5c06c3]</sup>
|-
|-
! scope="row" | SPI  
! scope="row" | SPI  
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>spi-rockchip</code>
| <code>spi-rockchip</code>
| As of 5.14<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d74d99229f4d48f42d674f7a8a1137179efd67ac]</sup>. Necessary device tree changes [https://patchwork.kernel.org/project/linux-rockchip/list/?series=586691 in review].
| As of 5.14<sup>[https://git.kernel.org/linus/d74d99229f4d48f42d674f7a8a1137179efd67ac]</sup>. Necessary device tree changes [https://patchwork.kernel.org/project/linux-rockchip/list/?series=586691 in review].
|-
|-
! scope="row" | Battery
! scope="row" | Battery
| colspan="2" style="background:LightYellow; text-align:center;"|In review<sup>[https://patchwork.kernel.org/project/linux-rockchip/list/?series=630567&archive=both]</sup>
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rk817-charger</code>
| <code>rk817-charger</code>
| 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].
| As of 6.1<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/power/supply/rk817_charger.c?id=11cb8da0189b417392e2334ae967b0ba1f0d1be8]</sup>
| Quartz64 Model A, Pinenote
| Quartz64 Model A, Pinenote
|-
|-
Line 156: Line 188:
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rockchip-saradc</code>
| <code>rockchip-saradc</code>
| As of 5.15<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7786da3b5ae167c17f35e22ba35e06006338c2f6]</sup>. Headphone jack mic seems to connect to <code>SARADC_VIN2_HP_HOOK</code>, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work
| As of 5.15<sup>[https://git.kernel.org/linus/7786da3b5ae167c17f35e22ba35e06006338c2f6]</sup>. Headphone jack mic seems to connect to <code>SARADC_VIN2_HP_HOOK</code>, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work
|-
|-
! scope="row" | USB 2.0
! scope="row" | USB 2.0
Line 171: Line 203:
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>naneng-combphy</code>
| <code>naneng-combphy</code>
| As of 5.18<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7160820d742a16313f7802e33c2956c19548e488]</sup>. Still requires DTS changes
| As of 5.18<sup>[https://git.kernel.org/linus/7160820d742a16313f7802e33c2956c19548e488]</sup>. Still requires DTS changes
|-
|-
! scope="row" | RGA
! scope="row" | RGA
| colspan="2" style="background:#F99; text-align:center;"|Needs fixing
| colspan="2" style="background:LightYellow; text-align:center;"|Linux Mainline; Could be improved
| <code>rockchip-rga</code>
| <code>rockchip-rga</code>
| [[User:CounterPillow]] experimentally enabled it<sup>[https://gist.github.com/CounterPillow/6bea809f15ada7ddd3a3d7a4994fdc4e]</sup> in the device tree and ran gstreamer's v4l2convert through it to test, resulting in a completely garbled output.
| As of 6.5[https://git.kernel.org/linus/0c3391f8bb06b744df521651534cd99e3d77e0a8]</sup>. Note that there's still a '4GB' problem and it's implementations has room for improvements (to put it midly  <sup>[https://lore.kernel.org/all/20230522102953.GB23678@pengutronix.de/]</sup> and <sup>[https://lore.kernel.org/all/b404dc20-c460-ac3f-6659-8be7a7d32bfe@arm.com/]</sup>)
|-
|-
! scope="row" | Fan Controller
! scope="row" | Fan Controller
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
| colspan="2" style="background:#F99; text-align:center;"|Needs writing
| <code>emc2301</code>
| <code>gp7101</code>
| 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]
| Someone should write a pwm driver for it so we can then use pwm-fan
| SOQuartz Blade
| SOQuartz Blade
|-
|-
! scope="row" | CIF (CSI Camera)
! scope="row" rowspan="2" | CSI Camera
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
| <code>video_rkcif</code>
| <code>rkisp</code>
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/cif]
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/isp]
|
|-
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rockchip-inno-csidphy</code>
| As of 6.1<sup>[https://git.kernel.org/linus/29c99fb085ad53e6d5504d1f8d32e6673b9b3a2c]</sup>
|
|
|-
|-
Line 193: Line 230:
| colspan="2" style="background:#F99; text-align:center;"|Needs writing
| colspan="2" style="background:#F99; text-align:center;"|Needs writing
|  
|  
| 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.
| 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.
|
|-
! scope="row" | Crypto
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
| <code>rk-crypto</code> v2
| 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.
|
|
|-
! scope="row" | TRNG
| colspan="2" style="background:LightYellow; text-align:center;"|In review<sup>[https://patchwork.kernel.org/project/linux-rockchip/list/?series=699813&archive=both]</sup>
| <code>rockchip-rng</code>
|
|
|-
! scope="row" rowspan="2" | Wi-Fi
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
| <code>bes2600</code>
| 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.
| PineTab 2
|-
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>brcmfmac</code>
|
| Quartz64 Model B
|}
|}


Line 217: Line 277:
* Video Decode
* Video Decode
** VP8
** VP8
** H.264
* Video Encode
** JPEG (it's pretty bad)
* Battery
* Battery
* GPU
* GPU
* Video Output
** HDMI
** DSI
* Audio
* Audio
** Analog audio works
** Analog audio works
Line 232: Line 298:
* SDMMC1 (Wi-Fi) &mdash; AP6256 working, BL602 needs some work to make it flash firmware
* SDMMC1 (Wi-Fi) &mdash; AP6256 working, BL602 needs some work to make it flash firmware
* [https://developer.arm.com/architectures/system-architectures/system-components/arm-generic-interrupt-controller GIC] &mdash; needs errata published by Rockchip to get upstream to add device-specific workarounds<sup>[https://lore.kernel.org/linux-rockchip/CAMdYzYrQ5f-mv_VmTq_CRf9tR=j3mwRpKHNLmPFgCF9whsGFRw@mail.gmail.com/]</sup>
* [https://developer.arm.com/architectures/system-architectures/system-components/arm-generic-interrupt-controller GIC] &mdash; needs errata published by Rockchip to get upstream to add device-specific workarounds<sup>[https://lore.kernel.org/linux-rockchip/CAMdYzYrQ5f-mv_VmTq_CRf9tR=j3mwRpKHNLmPFgCF9whsGFRw@mail.gmail.com/]</sup>
* Video Output &mdash; only at 1920x1080p60 and nothing else, very buggy and rough around more than just the edges


=== Confirmed Broken ===
=== Confirmed Broken ===


* USB 3.0 &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.
* <s>USB 3.0 (applies to Model A only) &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.
** Hardware design changes have been suggested to engineers, it's in their hands now.
** Hardware design changes have been suggested to engineers, it's in their hands now.</s>
* 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.
** Fixed in newer revisions by leaving SATA unpopulated
* RGA &mdash; only works with memory &le; 4 GiB, because Rockchip didn't make the address registers larger. Oopsie.


=== Needs Testing ===
=== Needs Testing ===


* E-Paper &mdash; needs EBC driver
* E-Paper
* Microphone Input
* Microphone Input
* CSI &mdash; needs CIF driver
* CSI &mdash; needs CIF driver
* eDP &mdash; needs PHY driver and controller driver
* eDP &mdash; needs PHY driver and controller driver
* DSI &mdash; needs driver


== TODO ==
== TODO ==
Line 257: Line 322:


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.
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.
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.


=== Mainline U-Boot Work ===
=== Mainline U-Boot Work ===


Currently, mainline U-Boot does not have support for the RK3566 SoC used on the Quartz64. That's why we currently use the "downstream" 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.
We currently use the "downstream" 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.


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.
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.


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.
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/1841800/ ethernet GMAC] and [https://patchwork.ozlabs.org/patch/1817295/ Motorcomm PHY] are supported as of v2024.01-rc1.


==== Things that need to be done ====
==== Things that could be done ====


This list is non-exhaustive as we don't exactly know how much is missing
This list is non-exhaustive as we don't exactly know how much is missing


* Do the <code>rk3568.dtsi</code> refactoring into <code>rk356x.dtsi</code>/<code>rk3568.dtsi</code>/<code>rk3566.dtsi</code> that the kernel did, probably just port the kernel dtsi files for this
* Bring the kernel's Quartz64 DTS into the tree
* Write a <code>quartz64-rk3566_defconfig</code> based on <code>evb-rk3568_defconfig</code>
Stretch Goals:
* Port the Naneng Combo PHY driver to u-boot so we can SATA, USB 3 and PCIe boot
* Look into SPI
* Port the Motorcomm PHY driver to u-boot for networking?
* Port a basic VOP2 driver to get a framebuffer from u-boot
* Port a basic VOP2 driver to get a framebuffer from u-boot


Line 295: Line 353:


* <code>CONFIG_SND_SOC_ROCKCHIP_I2S_TDM</code>
* <code>CONFIG_SND_SOC_ROCKCHIP_I2S_TDM</code>
** for Analog and (in the future) HDMI audio
** for Analog and HDMI audio
* <code>CONFIG_SND_SOC_RK817</code>
* <code>CONFIG_SND_SOC_RK817</code>
** for Analog audio on the Model A
** for Analog audio on the Model A
Line 303: Line 361:
** Ethernet
** Ethernet
* <code>CONFIG_MOTORCOMM_PHY</code>
* <code>CONFIG_MOTORCOMM_PHY</code>
** 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 <code>motorcomm</code> module if you set it to m.
** 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 <code>motorcomm</code> module in initramfs if you set it to m.
* <code>CONFIG_REALTEK_PHY</code>
** Ethernet PHY for Model B
* <code>CONFIG_MMC_DW</code>
* <code>CONFIG_MMC_DW</code>
** MMC/SD
** MMC/SD
Line 313: Line 373:
** PCIe
** PCIe
* <code>CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY</code>
* <code>CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY</code>
** PHY for PCIe/SATA/USB3, not yet upstream
** PHY for PCIe/SATA/USB3
* <code>CONFIG_DRM_PANFROST</code>
* <code>CONFIG_DRM_PANFROST</code>
** GPU
** GPU
Line 320: Line 380:
* <code>CONFIG_ROCKCHIP_DW_HDMI</code>
* <code>CONFIG_ROCKCHIP_DW_HDMI</code>
** HDMI PHY
** HDMI PHY
* <code>CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY</code>
** MIPI DSI DPHY
* <code>CONFIG_ROCKCHIP_VOP2</code>
* <code>CONFIG_ROCKCHIP_VOP2</code>
** Video output, not yet upstream
** Video output
* <code>CONFIG_ARCH_ROCKCHIP</code>
* <code>CONFIG_ARCH_ROCKCHIP</code>
** General SoC support
** General SoC support
Line 334: Line 396:
* <code>CONFIG_MFD_RK808</code>
* <code>CONFIG_MFD_RK808</code>
** Various things relating to the RK817 chip
** Various things relating to the RK817 chip
* <code>CONFIG_CHARGER_RK817</code>
** RK817 charger
* <code>CONFIG_REGULATOR_RK808</code>
* <code>CONFIG_REGULATOR_RK808</code>
** Voltage regulators
** Voltage regulators
Line 360: Line 424:
* <code>CONFIG_COMMON_CLK_ROCKCHIP</code>
* <code>CONFIG_COMMON_CLK_ROCKCHIP</code>
** Common clock support
** Common clock support
* <code>CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY</code>
** MIPI CSI DPHY
* <code>CONFIG_I2C_RK3X</code>
** I2C support


== Resources ==
== Resources ==
Line 393: Line 461:
* SPI NOR flash
* SPI NOR flash
* SPI NAND flash
* SPI NAND flash
* eMMC
* SD-Card
* SD-Card
* eMMC


... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip
... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip

Latest revision as of 14:48, 8 October 2023

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.

Overview

Upstreaming Status

Function Status Component Notes Applies To
Video Output Linux Mainline rockchipdrm/VOP2

As of 5.19-rc1[1], Also featured in Phoronix Article[2], 4k@30 support and other improvements in 6.4-rc1[3]

Needs porting rockchip-edpphy-naneng Downstream: [4] and [5] Coordinate any porting with Rockchip first
Linux Mainline dw-mipi-dsi-rockchip As of 6.1[6]
3D Acceleration Linux Mainline Upstream Mesa panfrost As of 5.18[7]
Video Decode Linux Mainline GStreamer only, no ffmpeg[8] hantro using v4l2-requests VDPU121 handling 1080p MPEG-2, VP8 and H.264. Mainline as of 5.19[9]
Needs writing rkvdec2 using v4l2-requests VDPU346 handling 4K H.265, H.264 and VP9
Needs writing rkdjpeg using v4l2-requests VDPU720 handling JPEG, User:CounterPillow is working on this
Video Encode Linux Mainline GStreamer only JPEG on VEPU121 Hantro-based. Mainline as of 6.1[10]
Needs writing ? H.264 on VEPU121 Hantro-based
Needs writing ? VP8 on VEPU121 Hantro-based
Needs writing ? H.264 on VEPU540 rkvenc-based
Needs writing ? H.265 on VEPU540 rkvenc-based
Audio Linux Mainline rockchip-i2s-tdm As of 5.16[11]
Linux Mainline rockchip-spdif As of 5.15[12]
Linux Mainline rk817-codec As of 5.14[13]. Quartz64 Model A/B
Bootloader In review[14] TF-A
Merged U-Boot See below. Quartz64 and SOQuartz as of v2023.10-rc2[15]
In progress[16] Tianocore EDK II
Device Tree Linux Mainline Quartz64 Model A As of 5.16[17] Quartz64 Model A
Linux Mainline Quartz64 Model B As of 5.19[18] Quartz64 Model B
Linux Mainline SOQuartz As of 5.19[19] SOQuartz
Linux Mainline PineNote As of 5.18[20] PineNote
Gigabit Ethernet Linux Mainline rk3566-gmac As of 5.14[21]
Linux Mainline yt8511-phy As of 5.14[22]
IOMMU Linux Mainline rockchip-iommu As of 5.14[23]
GPIO Linux Mainline gpio-rockchip As of 5.15[24]
pinctrl Linux Mainline
Thermal Regulation Linux Mainline rockchip-thermal As of 5.14[25]
PCIe Linux Mainline pcie-dw-rockchip As of 5.15[26]
Power Management Linux Mainline rockchip-pm-domains As of 5.14[27]
Voltage Control Linux Mainline rk3568-pmu-io-voltage-domain As of 5.15[28]
SPI Linux Mainline spi-rockchip As of 5.14[29]. Necessary device tree changes in review.
Battery Linux Mainline rk817-charger As of 6.1[30] Quartz64 Model A, Pinenote
Microphone Linux Mainline rockchip-saradc As of 5.15[31]. Headphone jack mic seems to connect to SARADC_VIN2_HP_HOOK, so I'm pretty sure that the dtsi and driver changes are needed for that mic to work
USB 2.0 Linux Mainline rockchip-usb2phy As of 5.17[32]
e-Ink In review (RFC)[33] rockchip-ebc A DRM driver is available here; also see RK3566 EBC Reverse-Engineering
Combo PHY Linux Mainline naneng-combphy As of 5.18[34]. Still requires DTS changes
RGA Linux Mainline; Could be improved rockchip-rga As of 6.5[35]. Note that there's still a '4GB' problem and it's implementations has room for improvements (to put it midly [36] and [37])
Fan Controller Needs writing gp7101 Someone should write a pwm driver for it so we can then use pwm-fan SOQuartz Blade
CSI Camera Needs porting rkisp Downstream: [38]
Linux Mainline rockchip-inno-csidphy As of 6.1[39]
NPU Needs writing Downstream version is a closed source SDK and open source kernel module rknpu. Major undertaking to reimplement this as Linux does not (yet) appear to have a generic architecture for neural accelerators.
Crypto Needs porting rk-crypto v2 Downstream driver [40] doesn't include a rk3568 compatible either, but the TRM shows that it seemingly matches.
TRNG In review[41] rockchip-rng
Wi-Fi Needs porting bes2600 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. PineTab 2
Linux Mainline brcmfmac Quartz64 Model B

Current Status

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.

According to pgwipeout, I/O device performance is within expected ranges now.

Working

  • eMMC
  • SDMMC0 (SD cards)
  • GMAC (Gigabit Ethernet)
  • USB 2.0
  • SATA 2
  • SATA 3
  • UART
    • UART 0 (Pi-bus)
    • UART 1 (Bluetooth)
    • UART 2 (Pi-bus, debug)
  • Video Decode
    • VP8
    • H.264
  • Video Encode
    • JPEG (it's pretty bad)
  • Battery
  • GPU
  • Video Output
    • HDMI
    • DSI
  • Audio
    • Analog audio works
    • SPDIF works
    • HDMI works
  • SPI — works, user needs to modify device tree to add devices
  • I2C — works, user needs to modify device tree to add devices

Partially Working

  • PCI-Express Controller — everything but devices that need cache coherency (e.g. dGPUs) should work
    • 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.
  • SDMMC1 (Wi-Fi) — AP6256 working, BL602 needs some work to make it flash firmware
  • GIC — needs errata published by Rockchip to get upstream to add device-specific workarounds[42]

Confirmed Broken

  • USB 3.0 (applies to Model A only) — 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.
    • Hardware design changes have been suggested to engineers, it's in their hands now.
    • Fixed in newer revisions by leaving SATA unpopulated
  • RGA — only works with memory ≤ 4 GiB, because Rockchip didn't make the address registers larger. Oopsie.

Needs Testing

  • E-Paper
  • Microphone Input
  • CSI — needs CIF driver
  • eDP — needs PHY driver and controller driver

TODO

ebc-dev Reverse Engineering and Development

The 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.

Investigate MCU

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.

I (liamur) 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.

Mainline U-Boot Work

We currently use the "downstream" 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.

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.

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 ethernet GMAC and Motorcomm PHY are supported as of v2024.01-rc1.

Things that could be done

This list is non-exhaustive as we don't exactly know how much is missing

  • Port a basic VOP2 driver to get a framebuffer from u-boot

List of Useful Resources for this Task

eDP Driver Porting

The eDP PHY driver and controller driver needs to be ported, brought into shape and submitted with proper commit attribution to the Rockchip authors.

User:CounterPillow has experimentally ported stuff, but it's currently not working.

Linux Kernel Config Options

  • CONFIG_SND_SOC_ROCKCHIP_I2S_TDM
    • for Analog and HDMI audio
  • CONFIG_SND_SOC_RK817
    • for Analog audio on the Model A
  • CONFIG_STMMAC_ETH
    • Ethernet
  • CONFIG_DWMAC_ROCKCHIP
    • Ethernet
  • CONFIG_MOTORCOMM_PHY
    • 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 motorcomm module in initramfs if you set it to m.
  • CONFIG_REALTEK_PHY
    • Ethernet PHY for Model B
  • CONFIG_MMC_DW
    • MMC/SD
  • CONFIG_MMC_DW_ROCKCHIP
    • MMC/SD
  • CONFIG_MMC_SDHCI_OF_DWCMSHC
    • MMC/SD
  • CONFIG_PCIE_ROCKCHIP_DW_HOST
    • PCIe
  • CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY
    • PHY for PCIe/SATA/USB3
  • CONFIG_DRM_PANFROST
    • GPU
  • CONFIG_SND_SOC_ROCKCHIP_SPDIF
    • SPDIF audio
  • CONFIG_ROCKCHIP_DW_HDMI
    • HDMI PHY
  • CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY
    • MIPI DSI DPHY
  • CONFIG_ROCKCHIP_VOP2
    • Video output
  • CONFIG_ARCH_ROCKCHIP
    • General SoC support
  • CONFIG_ROCKCHIP_PHY
    • General SoC support
  • CONFIG_PHY_ROCKCHIP_INNO_USB2
    • USB 2
  • CONFIG_RTC_DRV_RK808
    • Real-time Clock
  • CONFIG_COMMON_CLK_RK808
    • Real-time Clock
  • CONFIG_MFD_RK808
    • Various things relating to the RK817 chip
  • CONFIG_CHARGER_RK817
    • RK817 charger
  • CONFIG_REGULATOR_RK808
    • Voltage regulators
  • CONFIG_ROCKCHIP_PM_DOMAINS
    • Power management domains
  • CONFIG_GPIO_ROCKCHIP
    • GPIO support
  • CONFIG_PINCTRL_ROCKCHIP
    • GPIO and general SoC support
  • CONFIG_PWM_ROCKCHIP
    • PWM support
  • CONFIG_ROCKCHIP_IOMMU
    • IOMMU support
  • CONFIG_ROCKCHIP_MBOX
    • Mailbox support (for communication with MCU)
  • CONFIG_ROCKCHIP_SARADC
    • Analog-to-digital conversion support, for e.g. microphones
  • CONFIG_ROCKCHIP_THERMAL
    • Temperature sensor and thermal throttling support
  • CONFIG_SPI_ROCKCHIP
    • SPI support
  • CONFIG_VIDEO_HANTRO_ROCKCHIP
    • Hardware video decoder support
  • CONFIG_ROCKCHIP_IODOMAIN
    • General SoC support so your I/O pins have the right voltage
  • CONFIG_COMMON_CLK_ROCKCHIP
    • Common clock support
  • CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY
    • MIPI CSI DPHY
  • CONFIG_I2C_RK3X
    • I2C support

Resources

Repositories

Other

Board/SoC Documentation

Booting

Boot Order

The RK3566 boot ROM will search for a valid ID BLOCK in the following order on the support boot media:

  • SPI NOR flash
  • SPI NAND flash
  • eMMC
  • SD-Card

... if this fails, the boot ROM will initialize the USB0 port and wait for a connection from the Rockchip flash/boot tools.

Bootloader Flashing

As per pgwipeout's commit message:

  • Make a partition named uboot as partition number 1 at 8 MiB to 16 MiB
  • dd if=idblock.bin of=/dev/<mmc/sd> seek=64
  • dd if=uboot.img of=/dev/<mmc/sd>1

BSP Image Layout