From 444686aecc9ec36971e78fd07ea4aed270c01487 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Tue, 29 Sep 2026 16:35:43 +0100 Subject: [PATCH] rockchip: add display, GPU, codec and audio kernel modules Package the Rockchip DRM driver with VOP, VOP2, eDP, DP, HDMI, HDMI QP, MIPI DSI and MIPI DSI2 support, the Rocket NPU driver, the Samsung HDPTX and DCPHY and the Innosilicon CSI DPHY, the RKVDEC and RGA V4L2 drivers, the Synopsys HDMI receiver, the I2S, I2S/TDM and S/PDIF ASoC drivers and the DFI DDR monitor, so that every device in the rk3588 device tree has its driver available. The DFI DDR monitor is a devfreq event driver, so PM_DEVFREQ_EVENT is set in the target configuration, which is what lets the driver build as a module and be installed on a released image. The remaining new symbols are recorded as disabled defaults in the generic configuration, where a kernel module package can enable the one it needs. The per-SoC V4L2 mem2mem drivers go there as well: they have no recorded value anywhere, so kconfig stops to ask for them on any target whose ARCH symbol matches once kmod-video-mem2mem opens the mem2mem menu. The DRM driver and the HDMI PHY are marked for /etc/modules-boot.d, as procd loads those before preinit runs. Loaded from /etc/modules.d instead, /dev/dri stays empty until the overlay is mounted, which on a Rock 5B is several seconds in and too late for anything drawing to the screen during boot. Signed-off-by: Daniel Golle --- target/linux/generic/config-6.18 | 33 +++++ target/linux/rockchip/armv8/config-6.18 | 2 +- target/linux/rockchip/modules.mk | 182 ++++++++++++++++++++++++ 3 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 target/linux/rockchip/modules.mk diff --git a/target/linux/generic/config-6.18 b/target/linux/generic/config-6.18 index 233b1bf3b44..8121d0b430d 100644 --- a/target/linux/generic/config-6.18 +++ b/target/linux/generic/config-6.18 @@ -468,11 +468,16 @@ CONFIG_ARM_DMA_MEM_BUFFERABLE=y # CONFIG_ARM_ERRATA_852423 is not set # CONFIG_ARM_ERRATA_857271 is not set # CONFIG_ARM_ERRATA_857272 is not set +# CONFIG_ARM_EXYNOS_BUS_DEVFREQ is not set # CONFIG_ARM_FFA_TRANSPORT is not set CONFIG_ARM_GIC_MAX_NR=1 +# CONFIG_ARM_HISI_UNCORE_DEVFREQ is not set +# CONFIG_ARM_IMX8M_DDRC_DEVFREQ is not set +# CONFIG_ARM_IMX_BUS_DEVFREQ is not set # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set # CONFIG_ARM_KPROBES_TEST is not set # CONFIG_ARM_LPAE is not set +# CONFIG_ARM_MEDIATEK_CCI_DEVFREQ is not set # CONFIG_ARM_MEDIATEK_CPUFREQ_HW is not set # CONFIG_ARM_MHU is not set CONFIG_ARM_MODULE_PLTS=y @@ -483,6 +488,7 @@ CONFIG_ARM_MODULE_PLTS=y # CONFIG_ARM_PSCI_CHECKER is not set # CONFIG_ARM_PSCI_CPUIDLE is not set # CONFIG_ARM_PTDUMP_DEBUGFS is not set +# CONFIG_ARM_RK3399_DMC_DEVFREQ is not set # CONFIG_ARM_SBSA_WATCHDOG is not set # CONFIG_ARM_SCMI_PROTOCOL is not set # CONFIG_ARM_SCPI_PROTOCOL is not set @@ -492,6 +498,8 @@ CONFIG_ARM_MODULE_PLTS=y # CONFIG_ARM_SMMU_V3_PMU is not set # CONFIG_ARM_SP805_WATCHDOG is not set # CONFIG_ARM_SPE_PMU is not set +# CONFIG_ARM_SUN8I_A33_MBUS_DEVFREQ is not set +# CONFIG_ARM_TEGRA_DEVFREQ is not set # CONFIG_ARM_THUMBEE is not set # CONFIG_ARM_TIMER_SP804 is not set # CONFIG_ARM_UNWIND is not set @@ -1475,6 +1483,14 @@ CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_DELL_SMO8800 is not set # CONFIG_DEPRECATED_PARAM_STRUCT is not set # CONFIG_DETECT_HUNG_TASK is not set +# CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP is not set +# CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU is not set +# CONFIG_DEVFREQ_GOV_PASSIVE is not set +# CONFIG_DEVFREQ_GOV_PERFORMANCE is not set +# CONFIG_DEVFREQ_GOV_POWERSAVE is not set +# CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND is not set +# CONFIG_DEVFREQ_GOV_USERSPACE is not set +# CONFIG_DEVFREQ_THERMAL is not set # CONFIG_DEVMEM is not set CONFIG_DEVPORT=y # CONFIG_DEVTMPFS is not set @@ -1591,6 +1607,7 @@ CONFIG_DRM_CLIENT_DEFAULT_FBDEV=y # CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set # CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set # CONFIG_DRM_DW_HDMI_CEC is not set +# CONFIG_DRM_DW_HDMI_GP_AUDIO is not set # CONFIG_DRM_EFIDRM is not set # CONFIG_DRM_ETNAVIV is not set # CONFIG_DRM_EXYNOS is not set @@ -5149,6 +5166,7 @@ CONFIG_PINMUX=y # CONFIG_PM_AUTOSLEEP is not set # CONFIG_PM_DEBUG is not set # CONFIG_PM_DEVFREQ is not set +# CONFIG_PM_DEVFREQ_EVENT is not set # CONFIG_PM_USERSPACE_AUTOSLEEP is not set # CONFIG_PM_WAKELOCKS is not set # CONFIG_PORTWELL_EC is not set @@ -7914,8 +7932,10 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_ADV_DEBUG is not set # CONFIG_VIDEO_AK7375 is not set # CONFIG_VIDEO_AK881X is not set +# CONFIG_VIDEO_ALLEGRO_DVT is not set # CONFIG_VIDEO_ALVIUM_CSI2 is not set # CONFIG_VIDEO_AM437X_VPFE is not set +# CONFIG_VIDEO_AMPHION_VPU is not set # CONFIG_VIDEO_AR0521 is not set # CONFIG_VIDEO_ARDUCAM_64MP is not set # CONFIG_VIDEO_ARDUCAM_PIVARIETY is not set @@ -8023,6 +8043,10 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_MAX9286 is not set # CONFIG_VIDEO_MAX96714 is not set # CONFIG_VIDEO_MAX96717 is not set +# CONFIG_VIDEO_MEDIATEK_JPEG is not set +# CONFIG_VIDEO_MEDIATEK_MDP is not set +# CONFIG_VIDEO_MEDIATEK_VCODEC is not set +# CONFIG_VIDEO_MEDIATEK_VPU is not set # CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set # CONFIG_VIDEO_MGB4 is not set # CONFIG_VIDEO_MIRA220 is not set @@ -8083,14 +8107,20 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_PVRUSB2 is not set # CONFIG_VIDEO_PVRUSB2_DVB is not set # CONFIG_VIDEO_QCOM_IRIS is not set +# CONFIG_VIDEO_QCOM_VENUS is not set # CONFIG_VIDEO_RASPBERRYPI_PISP_BE is not set # CONFIG_VIDEO_RCAR_CSI2 is not set # CONFIG_VIDEO_RCAR_ISP is not set # CONFIG_VIDEO_RCAR_VIN is not set # CONFIG_VIDEO_RDACM20 is not set # CONFIG_VIDEO_RDACM21 is not set +# CONFIG_VIDEO_RENESAS_FCP is not set +# CONFIG_VIDEO_RENESAS_FDP1 is not set +# CONFIG_VIDEO_RENESAS_JPU is not set +# CONFIG_VIDEO_RENESAS_VSP1 is not set # CONFIG_VIDEO_RJ54N1 is not set # CONFIG_VIDEO_ROCKCHIP_ISP1 is not set +# CONFIG_VIDEO_ROCKCHIP_RGA is not set # CONFIG_VIDEO_RP1_CFE_DOWNSTREAM is not set # CONFIG_VIDEO_RPI_HEVC_DEC is not set # CONFIG_VIDEO_S5C73M3 is not set @@ -8110,10 +8140,13 @@ CONFIG_VHOST_MENU=y # CONFIG_VIDEO_SOLO6X10 is not set # CONFIG_VIDEO_SONY_BTF_MPX is not set # CONFIG_VIDEO_STK1160 is not set +# CONFIG_VIDEO_STM32_DMA2D is not set # CONFIG_VIDEO_ST_MIPID02 is not set # CONFIG_VIDEO_SUN4I_CSI is not set # CONFIG_VIDEO_SUN6I_CSI is not set # CONFIG_VIDEO_SUN8I_A83T_MIPI_CSI2 is not set +# CONFIG_VIDEO_SUN8I_DEINTERLACE is not set +# CONFIG_VIDEO_SUN8I_ROTATE is not set # CONFIG_VIDEO_TC358743 is not set # CONFIG_VIDEO_TC358746 is not set # CONFIG_VIDEO_TDA1997X is not set diff --git a/target/linux/rockchip/armv8/config-6.18 b/target/linux/rockchip/armv8/config-6.18 index 9e6cb081945..9abf8d7d196 100644 --- a/target/linux/rockchip/armv8/config-6.18 +++ b/target/linux/rockchip/armv8/config-6.18 @@ -538,7 +538,7 @@ CONFIG_PLATFORM_MHU=y CONFIG_PM=y CONFIG_PM_CLK=y CONFIG_PM_DEVFREQ=y -# CONFIG_PM_DEVFREQ_EVENT is not set +CONFIG_PM_DEVFREQ_EVENT=y CONFIG_PM_GENERIC_DOMAINS=y CONFIG_PM_GENERIC_DOMAINS_OF=y CONFIG_PM_OPP=y diff --git a/target/linux/rockchip/modules.mk b/target/linux/rockchip/modules.mk new file mode 100644 index 00000000000..85d600edf16 --- /dev/null +++ b/target/linux/rockchip/modules.mk @@ -0,0 +1,182 @@ +# SPDX-License-Identifier: GPL-2.0-only + +define KernelPackage/drm-rockchip + SUBMENU:=$(VIDEO_MENU) + TITLE:=Rockchip DRM support + DEPENDS:=@TARGET_rockchip video-support +kmod-drm-kms-helper \ + +kmod-drm-dma-helper \ + +kmod-drm-display-helper +kmod-drm-analogix-dp \ + +kmod-drm-dw-dp +kmod-drm-dw-hdmi +kmod-drm-dw-hdmi-qp \ + +kmod-drm-dw-mipi-dsi +kmod-drm-dw-mipi-dsi2 + KCONFIG:= \ + CONFIG_DRM_ROCKCHIP \ + CONFIG_ROCKCHIP_VOP=y \ + CONFIG_ROCKCHIP_VOP2=y \ + CONFIG_ROCKCHIP_ANALOGIX_DP=y \ + CONFIG_ROCKCHIP_CDN_DP=n \ + CONFIG_ROCKCHIP_DW_DP=y \ + CONFIG_ROCKCHIP_DW_HDMI=y \ + CONFIG_ROCKCHIP_DW_HDMI_QP=y \ + CONFIG_ROCKCHIP_DW_MIPI_DSI=y \ + CONFIG_ROCKCHIP_DW_MIPI_DSI2=y \ + CONFIG_ROCKCHIP_INNO_HDMI=n \ + CONFIG_ROCKCHIP_LVDS=n \ + CONFIG_ROCKCHIP_RGB=n \ + CONFIG_ROCKCHIP_RK3066_HDMI=n + FILES:=$(LINUX_DIR)/drivers/gpu/drm/rockchip/rockchipdrm.ko + AUTOLOAD:=$(call AutoProbe,rockchipdrm,1) +endef + +define KernelPackage/drm-rockchip/description + Direct Rendering Manager (DRM) support for the Rockchip VOP and VOP2 + display controllers with their eDP, DP, HDMI, HDMI QP, MIPI DSI and + MIPI DSI2 outputs. +endef + +$(eval $(call KernelPackage,drm-rockchip)) + + +define KernelPackage/drm-rocket + SUBMENU:=$(VIDEO_MENU) + TITLE:=Rockchip NPU accelerator support + DEPENDS:=@TARGET_rockchip accel-support +kmod-drm-sched +kmod-drm-shmem-helper + KCONFIG:= \ + CONFIG_DRM_ACCEL=y \ + CONFIG_DRM_ACCEL_ROCKET + FILES:=$(LINUX_DIR)/drivers/accel/rocket/rocket.ko + AUTOLOAD:=$(call AutoProbe,rocket) +endef + +define KernelPackage/drm-rocket/description + Compute acceleration driver for the Rockchip RKNN neural processing units. +endef + +$(eval $(call KernelPackage,drm-rocket)) + + +define KernelPackage/phy-rockchip-samsung-hdptx + SUBMENU:=$(VIDEO_MENU) + TITLE:=Rockchip Samsung HDMI/eDP combo PHY + DEPENDS:=@TARGET_rockchip + KCONFIG:=CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX + FILES:=$(LINUX_DIR)/drivers/phy/rockchip/phy-rockchip-samsung-hdptx.ko + AUTOLOAD:=$(call AutoProbe,phy-rockchip-samsung-hdptx,1) +endef + +$(eval $(call KernelPackage,phy-rockchip-samsung-hdptx)) + + +define KernelPackage/phy-rockchip-samsung-dcphy + SUBMENU:=$(VIDEO_MENU) + TITLE:=Rockchip Samsung MIPI DCPHY + DEPENDS:=@TARGET_rockchip + KCONFIG:=CONFIG_PHY_ROCKCHIP_SAMSUNG_DCPHY + FILES:=$(LINUX_DIR)/drivers/phy/rockchip/phy-rockchip-samsung-dcphy.ko + AUTOLOAD:=$(call AutoProbe,phy-rockchip-samsung-dcphy) +endef + +$(eval $(call KernelPackage,phy-rockchip-samsung-dcphy)) + + +define KernelPackage/phy-rockchip-inno-csidphy + SUBMENU:=$(VIDEO_MENU) + TITLE:=Rockchip Innosilicon MIPI CSI DPHY + DEPENDS:=@TARGET_rockchip + KCONFIG:=CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY + FILES:=$(LINUX_DIR)/drivers/phy/rockchip/phy-rockchip-inno-csidphy.ko + AUTOLOAD:=$(call AutoProbe,phy-rockchip-inno-csidphy) +endef + +$(eval $(call KernelPackage,phy-rockchip-inno-csidphy)) + + +define KernelPackage/video-rockchip-vdec + TITLE:=Rockchip video decoder support + DEPENDS:=@TARGET_rockchip +kmod-video-mem2mem +kmod-video-dma-contig \ + +kmod-video-vmalloc +kmod-video-v4l2-h264 +kmod-video-v4l2-vp9 + KCONFIG:=CONFIG_VIDEO_ROCKCHIP_VDEC + FILES:=$(LINUX_DIR)/drivers/media/platform/rockchip/rkvdec/rockchip-vdec.ko + AUTOLOAD:=$(call AutoProbe,rockchip-vdec) + $(call AddDepends/video) +endef + +define KernelPackage/video-rockchip-vdec/description + Stateless V4L2 decoder driver for the Rockchip RKVDEC H.264, HEVC and + VP9 video decoders. +endef + +$(eval $(call KernelPackage,video-rockchip-vdec)) + + +define KernelPackage/video-rockchip-rga + TITLE:=Rockchip RGA 2D graphics acceleration + DEPENDS:=@TARGET_rockchip +kmod-video-mem2mem +kmod-video-dma-sg + KCONFIG:=CONFIG_VIDEO_ROCKCHIP_RGA + FILES:=$(LINUX_DIR)/drivers/media/platform/rockchip/rga/rockchip-rga.ko + AUTOLOAD:=$(call AutoProbe,rockchip-rga) + $(call AddDepends/video) +endef + +$(eval $(call KernelPackage,video-rockchip-rga)) + + +define KernelPackage/video-synopsys-hdmirx + TITLE:=Synopsys DesignWare HDMI receiver support + DEPENDS:=@TARGET_rockchip +kmod-video-dma-contig +kmod-cec-core + KCONFIG:= \ + CONFIG_VIDEO_SYNOPSYS_HDMIRX \ + CONFIG_VIDEO_SYNOPSYS_HDMIRX_LOAD_DEFAULT_EDID=y + FILES:=$(LINUX_DIR)/drivers/media/platform/synopsys/hdmirx/synopsys-hdmirx.ko + AUTOLOAD:=$(call AutoProbe,synopsys-hdmirx) + $(call AddDepends/video) +endef + +$(eval $(call KernelPackage,video-synopsys-hdmirx)) + + +define KernelPackage/sound-soc-rockchip-i2s + TITLE:=Rockchip I2S support + DEPENDS:=@TARGET_rockchip +kmod-sound-soc-core + KCONFIG:=CONFIG_SND_SOC_ROCKCHIP_I2S + FILES:=$(LINUX_DIR)/sound/soc/rockchip/snd-soc-rockchip-i2s.ko + AUTOLOAD:=$(call AutoProbe,snd-soc-rockchip-i2s) + $(call AddDepends/sound) +endef + +$(eval $(call KernelPackage,sound-soc-rockchip-i2s)) + + +define KernelPackage/sound-soc-rockchip-i2s-tdm + TITLE:=Rockchip I2S/TDM support + DEPENDS:=@TARGET_rockchip +kmod-sound-soc-core + KCONFIG:=CONFIG_SND_SOC_ROCKCHIP_I2S_TDM + FILES:=$(LINUX_DIR)/sound/soc/rockchip/snd-soc-rockchip-i2s-tdm.ko + AUTOLOAD:=$(call AutoProbe,snd-soc-rockchip-i2s-tdm) + $(call AddDepends/sound) +endef + +$(eval $(call KernelPackage,sound-soc-rockchip-i2s-tdm)) + + +define KernelPackage/sound-soc-rockchip-spdif + TITLE:=Rockchip S/PDIF support + DEPENDS:=@TARGET_rockchip +kmod-sound-soc-core + KCONFIG:=CONFIG_SND_SOC_ROCKCHIP_SPDIF + FILES:=$(LINUX_DIR)/sound/soc/rockchip/snd-soc-rockchip-spdif.ko + AUTOLOAD:=$(call AutoProbe,snd-soc-rockchip-spdif) + $(call AddDepends/sound) +endef + +$(eval $(call KernelPackage,sound-soc-rockchip-spdif)) + + +define KernelPackage/rockchip-dfi + SUBMENU:=$(OTHER_MENU) + TITLE:=Rockchip DDR monitor (DFI) devfreq event driver + DEPENDS:=@TARGET_rockchip + KCONFIG:=CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI + FILES:=$(LINUX_DIR)/drivers/devfreq/event/rockchip-dfi.ko + AUTOLOAD:=$(call AutoProbe,rockchip-dfi) +endef + +$(eval $(call KernelPackage,rockchip-dfi))