Repository navigation
drm/asahi: M3 Pro/Max and M4 GPUs on by default, M4 Max GPU enabled - #1170
Merged
Merged
Conversation
…sion A started G16 firmware session cannot be stopped, so admission pins the module before it holds the GFX domain and never drops the reference. It used __module_get(), which counts even after rmmod has passed its reference check. Once the module autoloads, a probe deferred for the PMP supplier or the display can run in that window; module exit would then wait for it, unbind and free the code under the live RTKit callbacks. Take the reference with try_module_get() before power admission, and refuse with ENODEV, with nothing held, once removal has begun. Later calls see the module already pinned. This follows the G15 change. Signed-off-by: Diljit Singh <hey@djdev.me>
…load The G16 driver had no module alias: userspace had to load aurora by hand after the native display came up, so the M4 GPU never started on its own. Its probe already defers for the PMP supplier and the GFX power domain; only the display order was left to the user. Give drm/apple a publication slot for the T8132 display subsystem, as for T6030 and T6031, and export apple_drm_t8132_link_device(). G16 admission calls it after the PMP supplier: when the boot loader handed a native display over (the display subsystem is enabled), the GPU defers until that display has registered and then links to it. A boot without one, such as a Mac mini, a panel without a qualified profile or a refused handoff, starts the GPU on the boot framebuffer. Each case is logged once. Then export apple,agx-t8132 for autoloading. The display-order host test runs the new bodies: a T8132 scenario and four mutants (wrong slot either way, ignoring a handed-over display, waiting without one), all caught. Signed-off-by: Diljit Singh <hey@djdev.me>
The M4 backend (G16) was marked experimental, and the M3 Pro/Max backend (G15) was off by default, so a distribution kernel built from defaults left those GPUs without a driver. Both bind only where the boot loader enabled the GPU node and the loaded firmware image is one they admit, start after the native display, and autoload. Make them default y, drop "(experimental)" from the M4 prompt, and add CONFIG_DRM_ASAHI_G15=y to asahi.config next to G16. Rewrite both help texts for what the drivers do now: G16 waits only for a display that was handed over, and keeps its firmware running across suspend-to-idle (the GFX domain is apple,sleep-retained). Signed-off-by: Diljit Singh <hey@djdev.me>
The T6041 GPU node and mailbox have been disabled since the J616c was added, and the boot loader's T6041 fill (aura#68) runs only on an enabled GPU node, so neither enabled them: the M4 Max GPU never probed, although the driver supports it (J616c). Leave both enabled, as the T6040 boards do. The loader fills the operating points, the CS and AFR tables and the memory regions, and disables the GPU on anything unexpected; the driver starts only an admitted firmware image. Signed-off-by: Diljit Singh <hey@djdev.me>
This was referenced Nov 7, 2026
kboot_gpu_m4: publish the G16 handoff on the 26.6.2 firmware on every M4 Mac
aurora-silicon/aura#106
Merged
DjDeveloperr
added a commit
that referenced
this pull request
Nov 7, 2026
integration/aurora now sets CONFIG_DRM_ASAHI_G15=y in asahi.config (#1170); keep that line and drop this branch's second copy. Signed-off-by: Diljit Singh <hey@djdev.me>
This was referenced Nov 7, 2026
RyanTheTide
pushed a commit
to rolotrealanis98/linux
that referenced
this pull request
Nov 8, 2026
Picks up aurora-silicon#1170 (G15/G16 on by default) and aurora-silicon#1171 (T8132 display, PMP and GPU gates on SoC plus firmware 26.6.2). No conflicts. Signed-off-by: Diljit Singh <hey@djdev.me>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Turns the GPU on by default wherever the driver is ready: the M3 Pro and M3 Max backend (G15) and the M4 backend (G16) are built by default, G16 autoloads instead of needing a manual
modprobe, and the M4 Max GPU node is enabled.What changes
apple,agx-t8132is now in the module alias table. Its probe already deferred for the PMP supplier and the GFX power domain. It now also waits for a native display the boot loader handed over, through a new T8132 publication slot in drm/apple (apple_drm_t8132_link_device(), the same mechanism G15 uses on T6030 and T6031). A boot with no handed-over display (a Mac mini, a panel without a qualified profile, a refused handoff) starts the GPU on the boot framebuffer.try_module_get()before power admission, as G15 does since 1cf5527. With autoload, a deferred probe can racermmod.DRM_ASAHI_G15andDRM_ASAHI_G16default to y, "(experimental)" is gone, andasahi.configgainsCONFIG_DRM_ASAHI_G15=y. G16 now depends onDRM_APPLE_DCP_T8132and on drm/apple being built in or both being modules, like G15. The old G16 help said suspend, hibernation and kexec are blocked while native graphics owns DMA. No code does that, and the J713 GFX domain isapple,sleep-retainedsince 4b2b3de, so the help now says the firmware keeps running across suspend-to-idle.gpuandgfx_mboxwere disabled int6041.dtsi, and aura#68 fills only an enabled T6041 GPU node, so the M4 Max GPU never probed. arm64: dts: apple: t6041-j616c: describe the GPU (stacked on #914) #917 was closed on the belief that the loader enables it; it doesn't. aura's fill still disables the GPU on any unexpected ADT data.Per chip
apple,sleep-retainedand G15 has no system-sleep callbacks, which is what broke J713 resume before 8fd377basahi,t6031-gpu=1in aura's configg15_sleep_hold) that isn't in this treem3::refuse_probe()asahi.t8122_start=0doesn't stop the Extended pathapple,agx-t6034, no aura handoff, no Mesa idTesting
build kernel --profile asahi -- Image modules dtbswith Rust on, alone and together with M4: take the PMP, PMGR, display and GPU paths on the 26.6.2 firmware on every M4 Mac #1171: no warnings.aurora.kohasCONFIG_DRM_ASAHI_G15=yandG16=y. Its alias table differs from the module running on the M2 Pro (7.3.0-1-21-ARCH) only byof:N*T*Capple,agx-t8132. Every M1 and M2 alias is unchanged.t6041.dtsi. The three T6041 dtbs differ from the base only by the two removedstatuslines. The M1 (J274), M2 (J413, J414s) and T6040 dtbs I built are byte-identical, and dt-validate shows nothing new.tools/asahi/run-host-tests.py) passes 195/195 with this PR and M4: take the PMP, PMGR, display and GPU paths on the 26.6.2 firmware on every M4 Mac #1171 together on 72b828e.g15-display-order-tests.pygains a T8132 scenario. All 12 C mutants are caught, including four new ones: the T8132 slot read or published as T6031's, ignoring a handed-over display, and waiting without one. The display host tests pass 5/5.Base
Rebased on integration/aurora 72b828e, after #1166: the T6041 GPU node and its mailbox (now
agx_mbox) lose theirstatus = "disabled"in the reorganizedt6041.dtsi. The oldt8132-j713-gpu.dtsicomment edit is gone with that file. #1171 (M4 firmware path) extends G16's board check to every M4 Mac on 26.6.2. Each PR builds on its own.Related PRs:
asahi.configinto a base config that never sets G15.Mesa gaps:
aurora-wipmaps it to G17P, so the M4 Max needs a Mesa pin bump.🤖 Generated with Claude Code