Why Rockchip Sucks
Context: Over the course of 2 years at FUTO I worked with Rockchip’s documentation and open-source code to develop a minimal bootloader for the RK3399 and RK3588. This is my overall conclusion of Rockchip as a company, and the products and services they provide.
Documentation
- Context: Rockchip is commonly referred to as an ‘open-source SoC company’
- In both the RK3399 and RK3588 TRMs1, exactly 67% of subsystems2 on the chip are documented3
- RK3399 TRM only covers 33 out of 49 subsystems
- RK3588 TRM only covers 89 out of 132 subsystems
- Rockchip’s SGRF4 is the most important register file that is undocumented. Configuring it is necessary in order to enable shared memory, which is needed in order to get a framebuffer working.
- RK3399 eMMC documentation is missing
CMD_INDEXfield from the EMMCCORE_CMD register (which is the most important field in the whole IP) - Samsung HDMI/eDP Combo PHY docs are missing a lot of registers from the register map5
Design
- RK3588 GRF, CRU, and PMU is split into a dozen different register files and not organized in any way or set up for strided access
- Offsets and bitfields have to be hardcoded in a map in order to setup PLLs and change iomux settings
- Why does VOP2 need 2 different layer systems? What does ‘ESMART’ stand for? Why is the TRM so vague?6
- It’s impossible to configure iomux for a rockchip i2c controller to be used for HDMI. Instead, a completely separate DesignWare I2C driver has to be written specifically for HDMI
- HDMI 2.1 DesignWare IP is used - supports a lot of features and is difficult to get working
- RK3588 has PCI & GIC ITS quirks that make it hard to implement support in the mainline kernel
- Supporting all the RK3588 power management features is difficult - still not completed in upstream kernel
- RK3588 has a ton of variants and derivatives (RK3588S/RK3588J/RK3576…) and supporting them all can be hard
Ecosystem
- Joshua Reik burned out from working on ubuntu-rockchip for various reasons, but mainly because he couldn’t get in touch with Rockchip for assistance7, after working on Rockchip boards for free
- edk2-rk3588 maintainer (Mario) moved on from the project because:
- Rockchip refuses to adopt standards properly or upstream hardware support
- Board vendors refuse to offer assistance to the community working on their hardware for free
- Most board vendors do the bare minimum for people to buy their product and leave their customers in the dark after that
- “I was told Rockchip no longer considers RK3588 to be an “open source” chip. In practice, that means Rockchip no longer contributes RK3588 code to open-source projects and they also decided not to sell RK3588 directly to SBC vendors.”8
- Good news: Rockchip is still consistently contributing RK3588 code to the kernel
- Rockchip has refused to make any documentation at all available for the RK3588 9
- My opinion: Rockchip is insane if they ever considered RK3588 ‘open source’ in the first place
- Leaked RK3588 TRMs were uploaded to Github. Shoutout to Axl Rose.
- Rockchip and their vendors (Orange Pi, Banana Pi, Radxa, Cool-Pi, etc) release boards and products with subpar hardware support
- Some boards require custom kernels and bootloaders
- Some boards use nonstandard hardware that requires additional kernel work and testing to get working
- Rockchip employees are still working on upstreaming support for RK3588, years after release 10
- Rockchip is shifting focus to Edge AI, Automotive, Robotics, and smart audio solutions 11
Conclusion
- Rockchip makes best-in-class high-performance SoCs at a hard to beat price.
- Rockchip is not an open-source company, but is still more “open” than most. They aren’t known for sending legal takedown requests or making you to sing your rights away, but they indirectly make the lives of OSS devs harder.
- The RK3588 is the most “open” high-performance SoC on the market right now, and probably will be for a long time.
- Their SoCs are difficult to work with, enough so that the cost of maintaining/adding support may outweigh the benefits and low price.
Technical Reference Manual (embedded programmer’s manual for writing drivers) ↩︎
I count each separate register file as a ‘subsystem’, excluding duplicates ↩︎
‘documented’ only means it has the register file defined. It may not have all the information needed to write a driver. ↩︎
Secure General Register File. There are multiple of these register files on the RK3588. ↩︎
check cmn regs such as offset
0x0148,0x0158,0x01b4,0x01b8… ↩︎One minute it’s telling you what ‘CPU’ stands for, next it’s on about the most obscure thing nobody knows about ↩︎
https://www.jeffgeerling.com/blog/2024/popular-rockchip-sbc-distro-limbo-after-maintainer-burns-out, https://web.archive.org/web/20241112102432/https://github.com/Joshua-Riek/ubuntu-rockchip/discussions/1104 ↩︎
Search ‘rk3588’ on https://opensource.rock-chips.com/ ↩︎
https://lore.kernel.org/all/?q=rock-chips.com, https://www.collabora.com/news-and-blog/news-and-events/rockchip-rk3588-upstream-support-progress-future-plans.html ↩︎