Difference between revisions of "Quartz64 Development"

From PINE64
Jump to navigation Jump to search
(→‎Upstreaming Status: i2s-tdm -> mainline)
(→‎Upstreaming Status: update usb2phy status to Linux Mainline 5.17)
(45 intermediate revisions by 4 users not shown)
Line 10: Line 10:
! scope="col" | Component
! scope="col" | Component
! scope="col" | Notes
! scope="col" | Notes
! scope="col" | Applies To
|-
! scope="row" rowspan="2" | Video Output
| colspan="2" style="background:LightYellow; text-align:center;"|In review<sup>[https://patchwork.kernel.org/project/linux-rockchip/list/?series=598177]</sup>
| <code>rockchipdrm/VOP2</code>
|
|-
|-
! scope="row" | Video Output
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
| <code>rockchipdrm/VOP-v2</code>
| <code>rockchip-edpphy-naneng</code>
|  
| 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
|-
|-
! scope="row" | 3D Acceleration  
! scope="row" | 3D Acceleration  
| style="background:PaleGreen; text-align:center;"|Linux Mainline
| style="background:LightYellow; text-align:center;"|In review<sup>[https://patchwork.kernel.org/project/linux-rockchip/list/?series=586441]</sup>
| style="background:PaleGreen; text-align:center;"|Upstream Mesa
| style="background:PaleGreen; text-align:center;"|Upstream Mesa
| <code>panfrost</code>
| <code>panfrost</code>
|  
| GPU is basically already supported in mainline but needs some device tree changes for this particular SoC
|-
|-
! scope="row" | Video Decode  
! scope="row" | Video Decode  
Line 39: Line 44:
| 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
| As of 5.14<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0d6a04da9b25b9a7cf2cac5f5079e3296d3bee0f]</sup>.
| Quartz64 Model A/B
|-
|-
! scope="row" | u-boot
! scope="row" | u-boot
Line 46: Line 52:
|
|
|-
|-
! scope="row" | Device Tree
! scope="row" rowspan="4" | Device Tree
| colspan="2"  style="background:LightYellow; text-align:center;"|Basic Quartz64 Model A device tree in linux-next<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip.git/commit/?h=for-next&id=80055186c461b631e6a14f9a8948acdbfeb8b3b9]</sup>
| colspan="2"  style="background:PaleGreen; text-align:center;"|Linux Mainline
|  
| Quartz64 Model A
| As of 5.16<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b33a22a1e7c4248608e533fc4fa524258b3fae84]</sup>
| Quartz64 Model A
|-
| colspan="2" style="background:#F99; text-align:center;"|Needs submitting
| Quartz64 Model B
|
| Quartz64 Model B
|-
| colspan="2" style="background:#F99; text-align:center;"|Needs submitting
| SOQuartz
|
|
| SOQuartz
|-
| colspan="2" style="background:#F99; text-align:center;"|Needs submitting
| PineNote
| [[User:smaeul]] wrote a device tree using mainline bindings [https://github.com/smaeul/linux/commits/rk356x-ebc-dev here].
|-
|-
! scope="row" rowspan="2"| Gigabit Ethernet
! scope="row" rowspan="2"| Gigabit Ethernet
Line 87: Line 108:
! 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-domain</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/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1782c87b44a0b1a527f01a6a184677c58ccbf9c7]</sup>
|-
|-
Line 98: Line 119:
| 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>
| 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].
|-
|-
! 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=536233]</sup>
| colspan="2" style="background:LightYellow; text-align:center;"|In review<sup>[https://patchwork.kernel.org/project/linux-rockchip/list/?series=536233]</sup>
| <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]
| 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].
| Quartz64 Model A
|-
|-
! scope="row" | Microphone
! scope="row" | Microphone
Line 111: Line 133:
|-
|-
! scope="row" | USB 2.0
! scope="row" | USB 2.0
| colspan="2" style="background:LightYellow; text-align:center;"|In review<sup>[https://patchwork.kernel.org/project/linux-rockchip/list/?series=530823]</sup>
| colspan="2" style="background:PaleGreen; text-align:center;"|Linux Mainline
| <code>rockchip-usb2phy</code>
| <code>rockchip-usb2phy</code>
|
| As of 5.17<sup>[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/phy/rockchip?h=v5.17-rc1&id=42b559727a45d79c811f493515eb9b7e56016421]</sup>
|-
|-
! scope="row" | e-Ink
! scope="row" | e-Ink
| colspan="2" style="background:#F99; text-align:center;"|Needs reversing
| colspan="2" style="background:#F99; text-align:center;"|Needs submitting
| <code>ebc-dev</code>?
| <code>rockchip-ebc</code>
| See [[RK3566 EBC Reverse-Engineering]]
| A DRM driver is available [https://github.com/smaeul/linux/commits/rk356x-ebc-dev here]; also see [[RK3566 EBC Reverse-Engineering]]
|-
|-
! scope="row" | Combo PHY
! scope="row" | Combo PHY
| colspan="2" style="background:LightYellow; text-align:center;"|In review<sup>[https://patchwork.kernel.org/project/linux-rockchip/list/?series=562627]</sup>
| colspan="2" style="background:LightYellow; text-align:center;"|In review<sup>[https://patchwork.kernel.org/project/linux-rockchip/list/?series=601993]</sup>
| <code>naneng-combphy</code>
| <code>naneng-combphy</code>
|
|-
! scope="row" | RGA
| colspan="2" style="background:#F99; text-align:center;"|Needs fixing
| <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.
|-
! scope="row" | Fan Controller
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
| <code>emc2301</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]
| SOQuartz Blade
|-
! scope="row" | CIF (CSI Camera)
| colspan="2" style="background:#F99; text-align:center;"|Needs porting
| <code>video_rkcif</code>
| Downstream: [https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux/-/tree/quartz64/drivers/media/platform/rockchip/cif]
|
|
|}
|}
Line 147: Line 186:
** VP8
** VP8
* Battery
* Battery
* GPU
* Audio
** Analog audio works
** SPDIF works
** HDMI works
* SPI &mdash; works, user needs to modify device tree to add devices
* I<sup>2</sup>C &mdash; works, user needs to modify device tree to add devices


=== Partially Working ===
=== Partially Working ===


* PCI-Express Controller &mdash; everything but devices that need cache coherency (e.g. dGPUs) should work
* PCI-Express Controller &mdash; 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, needs investigating
** [[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) &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
* I<sup>2</sup>C &mdash; works but is not yet exposed to the Pi-bus
* [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>
* Audio
* Video Output &mdash; only at 1920x1080p60 and nothing else, very buggy and rough around more than just the edges
** Analog audio works
** SPDIF works
** no HDMI yet


=== Confirmed Broken ===
=== Confirmed Broken ===
Line 164: Line 206:
* 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.
* 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.
** 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.
* 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.


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


* GPU &mdash; need a VOP-v2 DRM driver to get display output
* E-Paper &mdash; needs EBC driver
* E-Paper &mdash; needs EBC driver
* SPI
* Microphone Input
* CSI &mdash; needs CIF driver


== TODO ==
== TODO ==
Line 176: Line 219:


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.
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.
=== VOP2 Porting ===
The VOP2 portion of the <code>rockchip-drm</code> driver needs to be ported from the downstream kernel. This driver enables video output. Preliminary research has determined that this is a fairly big task.
Collabora has an unpolished forward port that has some issues with HDMI, it can be found here: https://gitlab.collabora.com/benjamin.gaignard/for-upstream/-/tree/5.10_for_rockchip
pgwipeout has [https://gitlab.com/pine64-org/quartz-bsp/linux-next/-/tree/quartz64-vop2 a branch] for initial vop2 work/testing, very rough around the edges and does not successfully probe yet.


=== Investigate MCU ===
=== Investigate MCU ===
Line 193: Line 228:
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.
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.


While the lack of ATF sources mean 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, 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.


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.
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.
==== Things that need to be done ====
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


==== List of Useful Resources for this Task ====
==== List of Useful Resources for this Task ====
Line 201: Line 251:
* Mainline Rockchip custodian U-Boot repository: https://source.denx.de/u-boot/custodians/u-boot-rockchip
* Mainline Rockchip custodian U-Boot repository: https://source.denx.de/u-boot/custodians/u-boot-rockchip
* U-Boot Mailing List: https://lists.denx.de/listinfo/u-boot
* U-Boot Mailing List: https://lists.denx.de/listinfo/u-boot
== Linux Kernel Config Options ==
* <code>CONFIG_SND_SOC_ROCKCHIP_I2S_TDM</code>
** for Analog and (in the future) HDMI audio
* <code>CONFIG_SND_SOC_RK817</code>
** for Analog audio on the Model A
* <code>CONFIG_STMMAC_ETH</code>
** Ethernet
* <code>CONFIG_DWMAC_ROCKCHIP</code>
** Ethernet
* <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.
* <code>CONFIG_MMC_DW</code>
** MMC/SD
* <code>CONFIG_MMC_DW_ROCKCHIP</code>
** MMC/SD
* <code>CONFIG_PCIE_ROCKCHIP_DW_HOST</code>
** PCIe
* <code>CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY</code>
** PHY for PCIe/SATA/USB3, not yet upstream
* <code>CONFIG_DRM_PANFROST</code>
** GPU
* <code>CONFIG_SND_SOC_ROCKCHIP_SPDIF</code>
** SPDIF audio
* <code>CONFIG_ROCKCHIP_DW_HDMI</code>
** HDMI PHY
* <code>CONFIG_ROCKCHIP_VOP2</code>
** Video output, not yet upstream
* <code>CONFIG_ARCH_ROCKCHIP</code>
** General SoC support
* <code>CONFIG_ROCKCHIP_PHY</code>
** General SoC support
* <code>CONFIG_PHY_ROCKCHIP_INNO_USB2</code>
** USB 2
* <code>CONFIG_RTC_DRV_RK808</code>
** Real-time Clock
* <code>CONFIG_COMMON_CLK_RK808</code>
** Real-time Clock
* <code>CONFIG_MFD_RK808</code>
** Various things relating to the RK817 chip
* <code>CONFIG_REGULATOR_RK808</code>
** Voltage regulators
* <code>CONFIG_ROCKCHIP_PM_DOMAINS</code>
** Power management domains
* <code>CONFIG_GPIO_ROCKCHIP</code>
** GPIO support
* <code>CONFIG_PINCTRL_ROCKCHIP</code>
** GPIO and general SoC support
* <code>CONFIG_PWM_ROCKCHIP</code>
** PWM support
* <code>CONFIG_ROCKCHIP_IOMMU</code>
** IOMMU support
* <code>CONFIG_ROCKCHIP_MBOX</code>
** Mailbox support (for communication with MCU)
* <code>CONFIG_ROCKCHIP_SARADC</code>
** Analog-to-digital conversion support, for e.g. microphones
* <code>CONFIG_ROCKCHIP_THERMAL</code>
** Temperature sensor and thermal throttling support
* <code>CONFIG_SPI_ROCKCHIP</code>
** SPI support
* <code>CONFIG_VIDEO_HANTRO_ROCKCHIP</code>
** Hardware video decoder support
* <code>CONFIG_ROCKCHIP_IODOMAIN</code>
** General SoC support so your I/O pins have the right voltage
* <code>CONFIG_COMMON_CLK_ROCKCHIP</code>
** Common clock support


== Resources ==
== Resources ==
Line 215: Line 332:
* Downstream rockchip-linux kernel tree
* Downstream rockchip-linux kernel tree
** https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux
** https://gitlab.com/pine64-org/quartz-bsp/rockchip-linux
* Tianocore EDK II port for UEFI on Quartz64
** https://github.com/jaredmcneill/quartz64_uefi
* Mainline U-Boot Port by pgwipeout
** https://gitlab.com/pgwipeout/u-boot-quartz64


=== Other ===
=== Other ===

Revision as of 10:16, 23 January 2022

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 In review[1] rockchipdrm/VOP2
Needs porting rockchip-edpphy-naneng Downstream: [2] Coordinate any porting with Rockchip first
3D Acceleration In review[3] Upstream Mesa panfrost GPU is basically already supported in mainline but needs some device tree changes for this particular SoC
Video Decode Linux Staging Not in ffmpeg[4] hantro-vpu, using v4l2-requests Necessary device tree changes in review
Audio Linux Mainline rockchip-i2s-tdm As of 5.16[5]
Linux Mainline rockchip-spdif As of 5.15[6]
Linux Mainline rk817-codec As of 5.14[7]. Quartz64 Model A/B
u-boot Waiting on ATF sources
Device Tree Linux Mainline Quartz64 Model A As of 5.16[8] Quartz64 Model A
Needs submitting Quartz64 Model B Quartz64 Model B
Needs submitting SOQuartz SOQuartz
Needs submitting PineNote User:smaeul wrote a device tree using mainline bindings here.
Gigabit Ethernet Linux Mainline rk3566-gmac As of 5.14[9]
Linux Mainline yt8511-phy As of 5.14[10]
IOMMU Linux Mainline rockchip-iommu As of 5.14[11]
GPIO Linux Mainline gpio-rockchip As of 5.15[12]
pinctrl Linux Mainline
Thermal Regulation Linux Mainline rockchip-thermal As of 5.14[13]
PCIe Linux Mainline pcie-dw-rockchip As of 5.15[14]
Power Management Linux Mainline rockchip-pm-domains As of 5.14[15]
Voltage Control Linux Mainline rk3568-pmu-io-voltage-domain As of 5.15[16]
SPI Linux Mainline spi-rockchip As of 5.14[17]. Necessary device tree changes in review.
Battery In review[18] rk817-charger In the BSP tree this is handled by rk817_battery.c and rk817_charger.c. Quartz64 Model A
Microphone Linux Mainline rockchip-saradc As of 5.15[19]. 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[20]
e-Ink Needs submitting rockchip-ebc A DRM driver is available here; also see RK3566 EBC Reverse-Engineering
Combo PHY In review[21] naneng-combphy
RGA Needs fixing rockchip-rga User:CounterPillow experimentally enabled it[22] in the device tree and ran gstreamer's v4l2convert through it to test, resulting in a completely garbled output.
Fan Controller Needs porting emc2301 Previous attempts at mainlining: [23] and [24]. Latest iteration: [25] SOQuartz Blade
CIF (CSI Camera) Needs porting video_rkcif Downstream: [26]

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
  • Battery
  • GPU
  • 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[27]
  • Video Output — only at 1920x1080p60 and nothing else, very buggy and rough around more than just the edges

Confirmed Broken

  • USB 3.0 — 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.
  • 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.

Needs Testing

  • E-Paper — needs EBC driver
  • Microphone Input
  • CSI — needs CIF 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.

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.

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.

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.

Things that need to be done

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

  • Do the rk3568.dtsi refactoring into rk356x.dtsi/rk3568.dtsi/rk3566.dtsi that the kernel did, probably just port the kernel dtsi files for this
  • Bring the kernel's Quartz64 DTS into the tree
  • Write a quartz64-rk3566_defconfig based on evb-rk3568_defconfig

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

List of Useful Resources for this Task

Linux Kernel Config Options

  • CONFIG_SND_SOC_ROCKCHIP_I2S_TDM
    • for Analog and (in the future) 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, 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 motorcomm module if you set it to m.
  • CONFIG_MMC_DW
    • MMC/SD
  • CONFIG_MMC_DW_ROCKCHIP
    • MMC/SD
  • CONFIG_PCIE_ROCKCHIP_DW_HOST
    • PCIe
  • CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY
    • PHY for PCIe/SATA/USB3, not yet upstream
  • CONFIG_DRM_PANFROST
    • GPU
  • CONFIG_SND_SOC_ROCKCHIP_SPDIF
    • SPDIF audio
  • CONFIG_ROCKCHIP_DW_HDMI
    • HDMI PHY
  • CONFIG_ROCKCHIP_VOP2
    • Video output, not yet upstream
  • 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_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

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
  • SD-Card
  • eMMC

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