Skip to content

j514m: built-in panel presents 60 fps at 120 Hz and has no brightness control on aurora16 (board record lacks .swap_timestamps / .panel_nits) #448

Open

Description

@Faeric

On the J514M, the native display and GPU work out of the box on edge since aurora16, but the built-in panel only presents 60 fps at its 120 Hz mode, and there is no brightness control. #429 already merged the fix for the J516M, which runs the same DCP image. Two other J514M owners tested the same two lines on their own J514M in #333. It only needs to be applied to the J514M board record.

Machine and build

  • MacBook Pro 14-inch, M3 Max (14 CPU / 30 GPU), apple,j514m / apple,t6034
  • asahi,os-fw-version: 14.7, asahi,system-fw-version: 26.6.2
  • Omarchy edge: linux-aurora 7.2.11.aurora16-1 (7.2.11-16-1-ARCH), m1n1-aurora 1.6.1.aurora23-2, mesa-aurora 26.3.0_devel.20261107 (b7b03c5b3b8), Hyprland 0.57.1. No local patches, no /etc/m1n1.conf.
  • DCP handoff: dcp firmware-compat 14.7.0 version 14.7.0 uuid F493F03E-CC40-3D89-9A08-5F259BA2B246, the J516C image the J516M also runs.

Results

Test Result Notes
Native display pass J514M display started: 3024x1964@120, eDP-1 3024x1964@120 on apple-drm
GPU pass asahi-g15 bound, renderD128 present
120 Hz presentation fail 301 frames in 5.00 s, median interval 16.67 ms = 60.00 fps (GTK 4 frame clock on an animated window), while the mode is 120 Hz
Panel brightness fail /sys/class/backlight is empty: no apple-panel-bl, so brightness keys and brightnessctl have nothing to drive. DCP logs IOMFB: Could not find Backlight service
Lid-close suspend (s2idle) pass 3 cycles (about 5 min and 37 min among them): display, GPU and Wi-Fi back after resume

Cause and fix

dcp_v14_board_j514m in drivers/gpu/drm/apple/iomfb_v14_7.c runs the same pinned J516C 14.7 DCP image as dcp_v14_board_j516m, but lacks the two flags #429 gives the J516M. It is also missing from dcp_v14_panel_nits_admit():

--- a/drivers/gpu/drm/apple/iomfb_v14_7.c
+++ b/drivers/gpu/drm/apple/iomfb_v14_7.c
@@ static const struct dcp_v14_board dcp_v14_board_j514m = {
 	.handoff = "apple,t6034-handoff",
 	.promotion = true,
 	.log_bringup = true,
+	/* Same pinned DCP image as J516C: zero stamps cap this panel at 60 fps. */
+	.swap_timestamps = true,
+	/* J516C's 14.7 image uses the bounded nits block for the J514 panel too. */
+	.panel_nits = true,
 };
@@ static bool dcp_v14_panel_nits_admit(const struct dcp_v14_board *board,
 		 machine_is(ctx, "apple,j516c") || machine_is(ctx, "apple,j613") ||
-		 machine_is(ctx, "apple,j504") || machine_is(ctx, "apple,j516m"));
+		 machine_is(ctx, "apple,j504") || machine_is(ctx, "apple,j516m") ||
+		 machine_is(ctx, "apple,j514m"));

Two tests currently assert the old values and would need to flip: KUNIT_EXPECT_FALSE(test, b->panel_nits) in v14_board_j514m (drivers/gpu/drm/apple/v14-board-test.c), and !b->panel_nits in tools/asahi/t6034-display-tests.py.

This exact change was reported working on #333:

  • webdevtodayjason, integration/aurora 49a8c150 + this patch: 120.07 fps measured, apple-panel-bl max 500, brightnessctl set and restore works.
  • techgyani: .swap_timestamps validated at 120 Hz. .panel_nits gives apple-panel-bl max 500, and brightnessctl read back works.

#416 makes this change for the J516M only, and #429 has since merged it for that board. No open PR carries it for the J514M.

Happy to test a build or a PR on this Mac.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions