Denon Reverse Engineering Help

Displays

In the firmwares I've analyzed, the display panel (found in the device tree as panel@0) is a UMO-P076MD-T, a UMO-P080MD-T (can't find the datasheet), a UMOH-9522MD-T (used on the RMZ2), or a wj40atyaqmnn0 (can't find any data about this one, only used on the hg04). The UMO/UMOH panels are made by Microtips Technology.

All of the panels used across Engine OS devices are 800×1280, mounted rotated — see Resolutions.

To get additional datasheets, emailing mtusainfo@microtipsusa.com is likely a good method. They seemed willing to provide them when I was on the phone with them.

Mainline Linux does not have a driver for these specific panels, but some other Microtips Technology panels are supported. Since the mainline supported ones are in the simple panel driver, we can likely build a data field and mad compatible for these panels to get them working properly.

Panel

Link

urt,umsh-8596md-t

Mainline Source

urt,umsh-8596md-1t

Mainline Source

urt,umsh-8596md-7t

Mainline Source

urt,umsh-8596md-11t

Mainline Source

urt,umsh-8596md-19t

Mainline Source

urt,umsh-8596md-20t

Mainline Source

From what I've seen in the OEM firmware, the kernel build configs list configuration options that aren't in mainline.

  • CONFIG_DRM_PANEL_URT_UMO_9399MD_1T

  • CONFIG_DRM_PANEL_URT_UMO_P076MD_T

  • CONFIG_DRM_PANEL_URT_UMO_P080MD_T

  • CONFIG_DRM_PANEL_URT_UMOH_9522MD_T

They must have some proprietary driver for these panels that they are using to expose a framebuffer that interacts with the panels.

Resolutions

Every Engine OS device with a main touchscreen uses an 800×1280 panel. The panels are natively portrait, and the device tree rotates them — on all but one device by 90° or 270°, which is what produces the 1280×800 landscape screen the user sees. The 7-inch and 10.1-inch panels have the same pixel count; they differ in physical size and in vertical sync timing, not in resolution.

Hardware ID

Device

Panel

Native

Rotation

As presented

JC11

Prime 4

urt,umo-p080md-t

800×1280

90°

1280×800

JC11S

Prime 4 Plus

urt,umo-p080md-t

800×1280

90°

1280×800

JC16

Prime 2

urt,umo-p076md-t

800×1280

90°

1280×800

JP07

SC5000 Prime

urt,umo-p076md-t

800×1280

270°

1280×800

JP08

SC5000M Prime

urt,umo-p076md-t

800×1280

270°

1280×800

JP11

Prime GO

urt,umo-p076md-t

800×1280

270°

1280×800

JP11S

Prime GO+

urt,umo-p076md-t

800×1280

270°

1280×800

JP13

SC6000 Prime

urt,umo-p080md-t

800×1280

270°

1280×800

JP14

SC6000M Prime

urt,umo-p080md-t

800×1280

270°

1280×800

JP20

SC Live 2

urt,umo-p076md-t

800×1280

270°

1280×800

JP21

SC Live 4

urt,umo-p076md-t

800×1280

270°

1280×800

NH08

Mixstream Pro

urt,umo-p076md-t

800×1280

90°

1280×800

NH08S

Mixstream Pro+

urt,umo-p076md-t

800×1280

90°

1280×800

NH10

Mixstream Pro Go

urt,umo-p076md-t

800×1280

90°

1280×800

RMZ2

Rane System One

urt,umoh-9522md-t

800×1280

180°

800×1280

JC20

LC6000 Prime

none

wheel display only

Rotation is the rotation property on the panel@0 node, mirrored by inmusic,panel-rotation on the root node — 0x5a = 90°, 0xb4 = 180°, 0x10e = 270°.

Panel timings

Read out of the drm_display_mode structs compiled into the kernel (see Finding the resolution in firmware):

Panel

Resolution

Clock

Horizontal

Vertical

urt,umo-p076md-t

800×1280

73000

800 877 901 925

1280 1292 1296 1314

urt,umo-p080md-t

800×1280

73000

800 877 901 925

1280 1298 1302 1314

urt,umoh-9522md-t

800×1280

73000

800 877 901 925

1280 1292 1296 1314

urt,umo-9399md-1t

800×1280

74250

800 876 894 970

1280 1284 1286 1290

The panel-urt-umoh-9522md-t driver's of_match table also accepts several equivalent parts, all with the same 800×1280 mode: wayton,mfc070ac-ihd3, wayton,mfc101gc-ihd3-1, goldenvision,gvh070hd98h-c-a and goldenvision,gvh101hd161h-c-a. The 070/101 in those part numbers is the diagonal in tenths of an inch, which is direct confirmation that a 7.0-inch and a 10.1-inch panel share one mode.

Centre wheel displays

Devices with a platter display drive it as a separate surface, not as a DRM panel — it hangs off the control-surface MCU and Engine renders to it through a Painter (see Controller Assignments):

Painter { objectName: "Album Artwork Layer " + (index+1) height: 198 width: 198 format: Painter.AZ01_CENTER_WHEEL_DISPLAY }

198×198, one surface per deck, and identical on every device that has one: JC11, JC11S, JC16, JC20, JP07 and JP13. AZ01_CENTER_WHEEL_DISPLAY is the only wheel-display format Engine defines.

The test app's own list

/usr/bin/test-app-launcher takes a --display-type argument, and its help text enumerates every display type inMusic's production test app knows about:

display type: one of '4in800x480', '7in1280x800', '10in1280x800', '1.6in160x128', '7in800x1280', '10in800x1280'

This is a useful independent confirmation of the 7-inch and 10-inch entries, listed in both orientations. Two entries do not correspond to any panel found in any Engine device tree: 4in800x480, and 1.6in160x128 — note that the latter is not the 198×198 wheel surface, so either it belongs to a product outside this set or the wheel LCD is 160×128 with Engine rendering at 198×198 and scaling. Unresolved either way.

Finding the resolution in firmware

Three independent methods, in increasing order of effort. They agree with each other.

1. The splash partition is a raw framebuffer

splash and updatesplash are stored uncompressedcomp=none in an AZ01 container, flags bit 0 clear in an AZ0x one (see Signed Firmware Layout). They are 32-bit RGBA at the panel's native resolution, so:

resolution = partition size / 4 bytes per pixel

Every Denon and Numark Engine image has a splash of exactly 4,096,000 bytes → 1,024,000 pixels → 800×1280.

That leaves the width ambiguous with 1280×800. Two ways to settle it:

  • Compare the mean absolute difference between adjacent rows for each candidate stride. The true width wins by a wide margin, because real images are vertically coherent — on a JC11S splash, stride 800 scores 358 against 17,928 for stride 1280.

  • Just render it. The image comes out correctly at 800×1280 with its artwork pre-rotated, i.e. the logo and text read sideways, which is exactly what a portrait framebuffer feeding a rotated panel looks like.

HeadRush images store the splash xz-compressed, so decompress first — they also come to 4,096,000 bytes.

2. The kernel's mode tables

Definitive, and the only way to get timings. The panel drivers are built in (they appear in modules.builtin, not as .ko files), so the mode structs live in the kernel image:

  1. Get the kernel. On rk3288 boards it is a zImage — find the 1f 8b gzip magic inside it and inflate. On rk3588 the arm64 Image is already uncompressed.

  2. Scan for struct drm_display_mode. On 32-bit ARM the layout is int clock then ten u16s (hdisplay, hsync_start, hsync_end, htotal, hskew, vdisplay, vsync_start, vsync_end, vtotal, vscan) then u32 flags. The monotonic relationships — hdisplay < hsync_start < hsync_end < htotal, same for vertical, hskew/vscan zero, and a refresh rate between 20 and 145 Hz — make false positives rare.

  3. Attribute each mode to a panel through the of_device_id table rather than by guessing from nearby strings. struct of_device_id is char name[32]; char type[32]; char compatible[128]; const void *data;, so a compatible string sitting 64 bytes into a struct whose first 64 bytes are zero is an of_match entry, and its data pointer (at +192) leads to the driver's descriptor, whose first pointer field is .modes.

Watch out for two traps. A driver with its own dedicated .c file may keep its mode as a static struct that no of_device_id points at — panel-urt-umo-p080md-t is like this, and its of_data is a DSI init command sequence (recognisable as register/value byte pairs b0 00, b1 51, b2 4b …), not a mode. And a panel bound to panel-edp has a NULL data pointer on purpose, because its mode comes from EDID at runtime and is therefore not in the firmware at all.

3. The device tree

panel@0's compatible names the panel, and its rotation property (mirrored as inmusic,panel-rotation on the root node) gives the orientation. This is the only source for rotation, and rotation is what converts the native 800×1280 into the presented 1280×800.

Engine's screen configuration

/usr/Engine/ScreenConfiguration/<HWID>/ScreenConfiguration.json, falling back to Default/, tells you how many outputs Engine drives, which is primary, and where it reads rotation from — but not the resolution:

{ "outputs": [ { "name": "MIPI", "rotation" : "/sys/firmware/devicetree/base/mipi@ff960000/panel@0/rotation", "primary" : true, "virtualIndex": 0 } ] }

Adding Kernel Driver

These displays can be supported in panel-simple.c by setting up panel description data in the DSI configuration.

Define the panel modes and description:

static const struct drm_display_mode urt_umo_p076md_mode = { .clock = 73000, // 73000 in OEM .hdisplay = 800, .hsync_start = 800 + 77, .hsync_end = 800 + 77 + 24, .htotal = 800 + 77 + 24 + 24, // 925 in OEM .vdisplay = 1280, // 1280 in OEM .vsync_start = 1280 + 12, .vsync_end = 1280 + 12 + 4, .vtotal = 1280 + 12 + 4 + 18, // 1314 in OEM }; static const struct panel_desc_dsi urt_umo_p076md = { .desc = { .modes = &urt_umo_p076md_mode, .num_modes = 1, .bpc = 8, .size = { .width = 96, .height = 152, }, .connector_type = DRM_MODE_CONNECTOR_DSI, }, .flags = MIPI_DSI_MODE_VIDEO, .format = MIPI_DSI_FMT_RGB888, .lanes = 4, };

I can verify that urt_umo_p076md_mode is correct, as dmesg reports the data in this struct during boot with debug loglevel=7 drm.debug=0x1f

Probed mode: "800x1280": 60 73000 800 877 901 925 1280 1292 1296 1314 0x48 0x0
Modeline "800x1280": 60 73000 800 877 901 925 1280 1292 1296 1314 0x48 0x0

UMO-P080MD-T needs its own mode — same resolution and clock, but the vertical sync pulse is 6 lines later. Values taken from the mode struct in the OEM kernel:

static const struct drm_display_mode urt_umo_p080md_mode = { .clock = 73000, .hdisplay = 800, .hsync_start = 800 + 77, .hsync_end = 800 + 77 + 24, .htotal = 800 + 77 + 24 + 24, // 925 in OEM .vdisplay = 1280, .vsync_start = 1280 + 18, // 1298 in OEM, vs 1292 on the P076 .vsync_end = 1280 + 18 + 4, // 1302 in OEM, vs 1296 on the P076 .vtotal = 1280 + 18 + 4 + 12, // 1314 in OEM };

Add references to the new definitions by adding the following to dsi_of_match in the same file:

{ .compatible = "urt,umo-p076md-t", .data = &urt_umo_p076md }, { .compatible = "urt,umo-p080md-t", .data = &urt_umo_p080md }, { .compatible = "urt,umoh-9522md-t", .data = &urt_umo_p076md }

This is enough to get /dev/fb0 to appear, but there are still issues (like no display). cat /dev/urandom > /dev/fb0 doesn't produce anything on the display (should display noise).

Boot Log

Here's the relevant section of the boot log, which shows the panel booting up with our added panel support.

It looks like there's a VOP issue in this.

dw-mipi-dsi-rockchip ff960000.mipi: Fixed dependency cycle(s) with /mipi@ff960000/panel@0 mipi-dsi ff960000.mipi.0: Fixed dependency cycle(s) with /mipi@ff960000 panel-simple-dsi ff960000.mipi.0: Looking up power-supply from device tree rockchip-vop ff930000.vop: [drm:vop_bind] Warning: not support global_regdone_en rockchip-vop ff930000.vop: [drm:vop_bind] Warning: not support gate rockchip-vop ff930000.vop: [drm:vop_bind] Warning: not support gate rockchip-vop ff930000.vop: [drm:vop_bind] Warning: not support channel rockchip-vop ff930000.vop: [drm:vop_bind] Warning: not support channel rockchip-drm display-subsystem: bound ff930000.vop (ops 0xc0954268) rk_iommu ff940300.iommu: Page fault at 0x7f4bda00 of type read rk_iommu ff940300.iommu: iova = 0x7f4bda00: dte_index: 0x1fd pte_index: 0xbd page_offset: 0xa00 rk_iommu ff940300.iommu: mmu_dte_addr: 0x014e0000 dte@0x014e07f4: 0x000000 valid: 0 pte@0x00000000: 0x000000 valid: 0 page@0x00000000 flags: 0x0 rockchip-vop ff940000.vop: [drm:vop_bind] Warning: not support global_regdone_en rockchip-vop ff940000.vop: [drm:vop_bind] Warning: not support gate rockchip-vop ff940000.vop: [drm:vop_bind] Warning: not support gate rockchip-vop ff940000.vop: [drm:vop_bind] Warning: not support channel rockchip-vop ff940000.vop: [drm:vop_bind] Warning: not support channel rockchip-drm display-subsystem: bound ff940000.vop (ops 0xc0954268) rockchip-drm display-subsystem: bound ff960000.mipi (ops 0xc0958c6c) [drm:rockchip_drm_bind] IOMMU context initialized (aperture: 0x0-0xffffffff) [drm:drm_minor_register] [drm:drm_minor_register] [drm:drm_minor_register] new minor registered 0 [drm:drm_minor_register] rockchip-drm display-subsystem: [drm:drm_sysfs_connector_add] [CONNECTOR:51:DSI-1] adding connector to sysfs rockchip-drm display-subsystem: [drm:drm_sysfs_connector_hotplug_event] [CONNECTOR:51:DSI-1] generating connector hotplug event [drm] Initialized rockchip 1.0.0 for display-subsystem on minor 0 rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [drm:drm_mode_object_get] OBJ ID: 51 (2) rockchip-drm display-subsystem: [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:51:DSI-1] rockchip-drm display-subsystem: [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:51:DSI-1] status updated from unknown to connected rockchip-drm display-subsystem: [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:51:DSI-1] probed modes: rockchip-drm display-subsystem: [drm:drm_helper_probe_single_connector_modes] Probed mode: "800x1280": 60 73000 800 877 901 925 1280 1292 1296 1314 0x48 0x0 rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [CONNECTOR:51:DSI-1] enabled? yes rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] Not using firmware configuration rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [CONNECTOR:51:DSI-1] looking for cmdline mode rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [CONNECTOR:51:DSI-1] looking for preferred mode, tile 0 rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [CONNECTOR:51:DSI-1] Found mode 800x1280 rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] picking CRTCs for 4096x4096 config rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [CRTC:45:crtc-1] desired mode 800x1280 set (0,0) [drm:drm_mode_object_get] OBJ ID: 51 (2) [drm:drm_mode_object_put] OBJ ID: 51 (3) rockchip-drm display-subsystem: [drm:__drm_fb_helper_initial_config_and_unlock] test CRTC 0 primary plane rockchip-drm display-subsystem: [drm:drm_fbdev_dma_helper_fb_probe] surface width(800), height(3840) and bpp(32) rockchip-drm display-subsystem: [drm:drm_mode_addfb2] [FB:53] [drm:drm_mode_object_put] OBJ ID: 53 (2) rk_iommu ff940300.iommu: Enable stall request timed out, status: 0x00004b irq 47: nobody cared (try booting with the "irqpoll" option) CPU: 0 UID: 0 PID: 50 Comm: kworker/0:6 Not tainted 6.11.0primego-dirty #51 Hardware name: Rockchip (Device Tree) Workqueue: pm pm_runtime_work Call trace: unwind_backtrace from show_stack+0x10/0x14 show_stack from dump_stack_lvl+0x50/0x64 dump_stack_lvl from __report_bad_irq+0x28/0xc0 __report_bad_irq from note_interrupt+0x1ec/0x294 note_interrupt from handle_irq_event_percpu+0x30/0x38 handle_irq_event_percpu from handle_irq_event+0x44/0x68 handle_irq_event from handle_fasteoi_irq+0xbc/0x14c handle_fasteoi_irq from handle_irq_desc+0x1c/0x2c handle_irq_desc from gic_handle_irq+0x60/0x70 gic_handle_irq from generic_handle_arch_irq+0x28/0x3c generic_handle_arch_irq from call_with_stack+0x18/0x20 call_with_stack from __irq_svc+0x98/0xb0 Exception stack(0xf09c5dd0 to 0xf09c5e18) 5dc0: c0ea75d8 00000001 c14da040 c06aaab8 5de0: c0eef9c8 c0eef9c0 0000024a 00000000 c0eef9c8 00000000 c0eb4180 c14d7880 5e00: 00000000 f09c5e20 c0180460 c06aaab8 60000013 ffffffff __irq_svc from arch_counter_read+0x0/0x10 arch_counter_read from timekeeping_get_ns+0xc/0x20 timekeeping_get_ns from ktime_get+0x50/0x7c ktime_get from rk_iommu_disable+0x84/0x144 rk_iommu_disable from rk_iommu_suspend+0x1c/0x30 rk_iommu_suspend from genpd_runtime_suspend+0xc4/0x260 genpd_runtime_suspend from __rpm_callback+0x3c/0x110 __rpm_callback from rpm_callback+0x54/0x58 rpm_callback from rpm_suspend+0x234/0x3f0 rpm_suspend from pm_runtime_work+0x74/0x8c pm_runtime_work from process_scheduled_works+0x180/0x254 process_scheduled_works from worker_thread+0x16c/0x1f0 worker_thread from kthread+0xd4/0xdc kthread from ret_from_fork+0x14/0x28 Exception stack(0xf09c5fb0 to 0xf09c5ff8) 5fa0: 00000000 00000000 00000000 00000000 5fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 5fe0: 00000000 00000000 00000000 00000000 00000013 00000000 handlers: [<(ptrval)>] rk_iommu_irq [<(ptrval)>] vop_isr Disabling IRQ #47 rockchip-drm display-subsystem: [drm:drm_sysfs_hotplug_event] generating hotplug event rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb frame buffer device rockchip-drm display-subsystem: [drm:drm_fb_helper_hotplug_event] rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [drm:drm_mode_object_get] OBJ ID: 51 (3) rockchip-drm display-subsystem: [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:51:DSI-1] rockchip-drm display-subsystem: [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:51:DSI-1] probed modes: rockchip-drm display-subsystem: [drm:drm_helper_probe_single_connector_modes] Probed mode: "800x1280": 60 73000 800 877 901 925 1280 1292 1296 1314 0x48 0x0 rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [CONNECTOR:51:DSI-1] enabled? yes rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] Not using firmware configuration rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [CONNECTOR:51:DSI-1] looking for cmdline mode rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [CONNECTOR:51:DSI-1] looking for preferred mode, tile 0 rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [CONNECTOR:51:DSI-1] Found mode 800x1280 rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] picking CRTCs for 800x3840 config [drm:drm_mode_object_put] OBJ ID: 51 (3) rockchip-drm display-subsystem: [drm:drm_client_modeset_probe] [CRTC:45:crtc-1] desired mode 800x1280 set (0,0) [drm:drm_mode_object_get] OBJ ID: 51 (2) [drm:drm_mode_object_put] OBJ ID: 51 (3) rockchip-drm display-subsystem: [drm:drm_atomic_state_init] Allocated atomic state (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_plane_state] Added [PLANE:32:plane-0] (ptrval) state to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_plane_state] Added [PLANE:34:plane-1] (ptrval) state to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_set_fb_for_plane] Set [NOFB] for [PLANE:34:plane-1] state (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_plane_state] Added [PLANE:37:plane-2] (ptrval) state to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_set_fb_for_plane] Set [NOFB] for [PLANE:37:plane-2] state (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_plane_state] Added [PLANE:39:plane-3] (ptrval) state to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_set_fb_for_plane] Set [NOFB] for [PLANE:39:plane-3] state (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_plane_state] Added [PLANE:41:plane-4] (ptrval) state to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_plane_state] Added [PLANE:43:plane-5] (ptrval) state to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_set_fb_for_plane] Set [NOFB] for [PLANE:43:plane-5] state (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_plane_state] Added [PLANE:46:plane-6] (ptrval) state to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_set_fb_for_plane] Set [NOFB] for [PLANE:46:plane-6] state (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_plane_state] Added [PLANE:48:plane-7] (ptrval) state to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_set_fb_for_plane] Set [NOFB] for [PLANE:48:plane-7] state (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_crtc_state] Added [CRTC:36:crtc-0] (ptrval) state to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_set_mode_for_crtc] Set [NOMODE] for [CRTC:36:crtc-0] state (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_set_fb_for_plane] Set [NOFB] for [PLANE:32:plane-0] state (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_add_affected_connectors] Adding all current connectors for [CRTC:36:crtc-0] to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_crtc_state] Added [CRTC:45:crtc-1] (ptrval) state to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_set_mode_for_crtc] Set [MODE:800x1280] for [CRTC:45:crtc-1] state (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_set_crtc_for_plane] Link [PLANE:41:plane-4] state (ptrval) to [CRTC:45:crtc-1] rockchip-drm display-subsystem: [drm:drm_atomic_set_fb_for_plane] Set [FB:53] for [PLANE:41:plane-4] state (ptrval) [drm:drm_mode_object_get] OBJ ID: 53 (1) rockchip-drm display-subsystem: [drm:drm_atomic_add_affected_connectors] Adding all current connectors for [CRTC:45:crtc-1] to (ptrval) [drm:drm_mode_object_get] OBJ ID: 51 (2) rockchip-drm display-subsystem: [drm:drm_atomic_get_connector_state] Added [CONNECTOR:51:DSI-1] (ptrval) state to (ptrval) [drm:drm_mode_object_get] OBJ ID: 51 (3) rockchip-drm display-subsystem: [drm:drm_atomic_set_crtc_for_connector] Link [CONNECTOR:51:DSI-1] state (ptrval) to [CRTC:45:crtc-1] rockchip-drm display-subsystem: [drm:drm_atomic_check_only] checking (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_helper_check_modeset] [CRTC:45:crtc-1] mode changed rockchip-drm display-subsystem: [drm:drm_atomic_helper_check_modeset] [CRTC:45:crtc-1] enable changed rockchip-drm display-subsystem: [drm:drm_atomic_helper_check_modeset] [CRTC:45:crtc-1] active changed rockchip-drm display-subsystem: [drm:drm_atomic_helper_check_modeset] Updating routing for [CONNECTOR:51:DSI-1] rockchip-drm display-subsystem: [drm:drm_atomic_helper_check_modeset] [CONNECTOR:51:DSI-1] using [ENCODER:50:DSI-50] on [CRTC:45:crtc-1] rockchip-drm display-subsystem: [drm:drm_atomic_helper_check_modeset] [CRTC:45:crtc-1] needs all connectors, enable: y, active: y rockchip-drm display-subsystem: [drm:drm_atomic_add_affected_connectors] Adding all current connectors for [CRTC:45:crtc-1] to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_add_affected_planes] Adding all current planes for [CRTC:45:crtc-1] to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_add_encoder_bridges] Adding all bridges for [encoder:50:DSI-50] to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_private_obj_state] Added new private object (ptrval) state (ptrval) to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_get_private_obj_state] Added new private object (ptrval) state (ptrval) to (ptrval) rockchip-drm display-subsystem: [drm:drm_atomic_normalize_zpos] [CRTC:45:crtc-1] calculating normalized zpos values rockchip-drm display-subsystem: [drm:drm_atomic_normalize_zpos] [PLANE:41:plane-4] processing zpos value 0 rockchip-drm display-subsystem: [drm:drm_atomic_normalize_zpos] [PLANE:41:plane-4] normalized zpos value 0 rockchip-drm display-subsystem: [drm:drm_atomic_commit] committing (ptrval) rockchip-drm display-subsystem: [drm:drm_calc_timestamping_constants] crtc 45: hwmode: htotal 925, vtotal 1314, vdisplay 1280 rockchip-drm display-subsystem: [drm:drm_calc_timestamping_constants] crtc 45: clock 73000 kHz framedur 16650000 linedur 12671 rockchip-drm display-subsystem: [drm:drm_atomic_helper_commit_modeset_disables] modeset on [ENCODER:50:DSI-50] rockchip-drm display-subsystem: [drm:drm_atomic_helper_commit_modeset_enables] enabling [CRTC:45:crtc-1] rk_iommu ff940300.iommu: Disable paging request timed out, status: 0x00004b brd: module loaded rk_iommu ff940300.iommu: Enable stall request timed out, status: 0x00004b rockchip-vop ff940000.vop: [drm:vop_crtc_atomic_enable] *ERROR* failed to get pm runtime: -110 rockchip-vop ff940000.vop: [drm:drm_atomic_helper_commit_modeset_enables] *ERROR* Failed to enable vop (-110) rockchip-drm display-subsystem: [drm:drm_atomic_helper_commit_modeset_enables] enabling [ENCODER:50:DSI-50] loop: module loaded dwc2 ff540000.usb: Looking up vusb_d-supply from device tree dwc2 ff540000.usb: Looking up vusb_d-supply property in node /usb@ff540000 failed dwc2 ff540000.usb: supply vusb_d not found, using dummy regulator dwc2 ff540000.usb: Looking up vusb_a-supply from device tree dwc2 ff540000.usb: Looking up vusb_a-supply property in node /usb@ff540000 failed dwc2 ff540000.usb: supply vusb_a not found, using dummy regulator dwc2 ff540000.usb: Looking up vbus-supply from device tree dwc2 ff540000.usb: Looking up vbus-supply property in node /usb@ff540000 failed ------------[ cut here ]------------ WARNING: CPU: 0 PID: 49 at drivers/gpu/drm/rockchip/rockchip_drm_vop.c:943 drm_atomic_helper_commit_planes+0x1b0/0x274 Modules linked in: CPU: 0 UID: 0 PID: 49 Comm: kworker/0:5 Not tainted 6.11.0primego-dirty #51 Hardware name: Rockchip (Device Tree) Workqueue: events output_poll_execute Call trace: unwind_backtrace from show_stack+0x10/0x14 show_stack from dump_stack_lvl+0x50/0x64 dump_stack_lvl from __warn+0x74/0xbc __warn from warn_slowpath_fmt+0xac/0x104 warn_slowpath_fmt from drm_atomic_helper_commit_planes+0x1b0/0x274 drm_atomic_helper_commit_planes from drm_atomic_helper_commit_tail_rpm+0x34/0x60 drm_atomic_helper_commit_tail_rpm from commit_tail+0x6c/0x138 commit_tail from drm_atomic_helper_commit+0xf4/0x104 drm_atomic_helper_commit from drm_atomic_commit+0xbc/0xf0 drm_atomic_commit from drm_client_modeset_commit_atomic+0x178/0x200 drm_client_modeset_commit_atomic from drm_client_modeset_commit_locked+0x3c/0x148 drm_client_modeset_commit_locked from drm_client_modeset_commit+0x28/0x3c drm_client_modeset_commit from __drm_fb_helper_restore_fbdev_mode_unlocked+0x8c/0x94 __drm_fb_helper_restore_fbdev_mode_unlocked from drm_fb_helper_set_par+0x2c/0x38 drm_fb_helper_set_par from drm_fb_helper_hotplug_event+0xcc/0xe0 drm_fb_helper_hotplug_event from drm_client_dev_hotplug+0xb4/0x108 drm_client_dev_hotplug from output_poll_execute+0xc8/0x228 output_poll_execute from process_scheduled_works+0x180/0x254 process_scheduled_works from worker_thread+0x16c/0x1f0 worker_thread from kthread+0xd4/0xdc kthread from ret_from_fork+0x14/0x28 Exception stack(0xf09c1fb0 to 0xf09c1ff8) 1fa0: 00000000 00000000 00000000 00000000 1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000 ---[ end trace 0000000000000000 ]--- ------------[ cut here ]------------ WARNING: CPU: 0 PID: 49 at drivers/gpu/drm/rockchip/rockchip_drm_vop.c:1576 drm_atomic_helper_commit_planes+0x238/0x274 Modules linked in: CPU: 0 UID: 0 PID: 49 Comm: kworker/0:5 Tainted: G W 6.11.0primego-dirty #51 Tainted: [W]=WARN Hardware name: Rockchip (Device Tree) Workqueue: events output_poll_execute Call trace: unwind_backtrace from show_stack+0x10/0x14 show_stack from dump_stack_lvl+0x50/0x64 dump_stack_lvl from __warn+0x74/0xbc __warn from warn_slowpath_fmt+0xac/0x104 warn_slowpath_fmt from drm_atomic_helper_commit_planes+0x238/0x274 drm_atomic_helper_commit_planes from drm_atomic_helper_commit_tail_rpm+0x34/0x60 drm_atomic_helper_commit_tail_rpm from commit_tail+0x6c/0x138 commit_tail from drm_atomic_helper_commit+0xf4/0x104 drm_atomic_helper_commit from drm_atomic_commit+0xbc/0xf0 drm_atomic_commit from drm_client_modeset_commit_atomic+0x178/0x200 drm_client_modeset_commit_atomic from drm_client_modeset_commit_locked+0x3c/0x148 drm_client_modeset_commit_locked from drm_client_modeset_commit+0x28/0x3c drm_client_modeset_commit from __drm_fb_helper_restore_fbdev_mode_unlocked+0x8c/0x94 __drm_fb_helper_restore_fbdev_mode_unlocked from drm_fb_helper_set_par+0x2c/0x38 drm_fb_helper_set_par from drm_fb_helper_hotplug_event+0xcc/0xe0 drm_fb_helper_hotplug_event from drm_client_dev_hotplug+0xb4/0x108 drm_client_dev_hotplug from output_poll_execute+0xc8/0x228 output_poll_execute from process_scheduled_works+0x180/0x254 process_scheduled_works from worker_thread+0x16c/0x1f0 worker_thread from kthread+0xd4/0xdc kthread from ret_from_fork+0x14/0x28 Exception stack(0xf09c1fb0 to 0xf09c1ff8) 1fa0: 00000000 00000000 00000000 00000000 1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000 ---[ end trace 0000000000000000 ]--- ------------[ cut here ]------------ WARNING: CPU: 0 PID: 49 at drivers/gpu/drm/drm_atomic_helper.c:2515 drm_atomic_helper_commit_hw_done+0xb4/0xcc Modules linked in: CPU: 0 UID: 0 PID: 49 Comm: kworker/0:5 Tainted: G W 6.11.0primego-dirty #51 Tainted: [W]=WARN Hardware name: Rockchip (Device Tree) Workqueue: events output_poll_execute Call trace: unwind_backtrace from show_stack+0x10/0x14 show_stack from dump_stack_lvl+0x50/0x64 dump_stack_lvl from __warn+0x74/0xbc __warn from warn_slowpath_fmt+0xac/0x104 warn_slowpath_fmt from drm_atomic_helper_commit_hw_done+0xb4/0xcc drm_atomic_helper_commit_hw_done from drm_atomic_helper_commit_tail_rpm+0x44/0x60 drm_atomic_helper_commit_tail_rpm from commit_tail+0x6c/0x138 commit_tail from drm_atomic_helper_commit+0xf4/0x104 drm_atomic_helper_commit from drm_atomic_commit+0xbc/0xf0 drm_atomic_commit from drm_client_modeset_commit_atomic+0x178/0x200 drm_client_modeset_commit_atomic from drm_client_modeset_commit_locked+0x3c/0x148 drm_client_modeset_commit_locked from drm_client_modeset_commit+0x28/0x3c drm_client_modeset_commit from __drm_fb_helper_restore_fbdev_mode_unlocked+0x8c/0x94 __drm_fb_helper_restore_fbdev_mode_unlocked from drm_fb_helper_set_par+0x2c/0x38 drm_fb_helper_set_par from drm_fb_helper_hotplug_event+0xcc/0xe0 drm_fb_helper_hotplug_event from drm_client_dev_hotplug+0xb4/0x108 drm_client_dev_hotplug from output_poll_execute+0xc8/0x228 output_poll_execute from process_scheduled_works+0x180/0x254 process_scheduled_works from worker_thread+0x16c/0x1f0 worker_thread from kthread+0xd4/0xdc kthread from ret_from_fork+0x14/0x28 Exception stack(0xf09c1fb0 to 0xf09c1ff8) 1fa0: 00000000 00000000 00000000 00000000 1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000 ---[ end trace 0000000000000000 ]--- rockchip-drm display-subsystem: [drm:drm_atomic_state_default_clear] Clearing atomic state (ptrval) [drm:drm_mode_object_put] OBJ ID: 51 (4) rockchip-drm display-subsystem: [drm:__drm_atomic_state_free] Freeing atomic state (ptrval) rockchip-drm display-subsystem: [drm:drm_client_dev_hotplug] fbdev: ret=0
14 August 2026