i915n display (KMS) on Ivy Bridge: facade 2.0, misc/drm_kms (carried Linux KMS), LinuxKPI additions #21
Loading…
Reference in a new issue
No description provided.
Delete branch "i915n-kms"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
i915n drives the display of Ivy Bridge GPUs (first hardware: ThinkPad X230, HD 4000, LVDS 1366x768). Three parts, built and tested together on illumos-drm
0e0d479:1. Facade 2.0 in the Rust core (
kms-core)drm_driver.illumos_lkms, the hooks in the newinclude/drm/drm_lkms.h:ioctl,file_open,file_close,lastclose,register_dev,unregister_dev,mode_config;drm_dev_illumos_lkms_register().drm_illumos_event_reserve,_unreserveand_deliverwork in thread context and in low-level interrupt context;read(2)andchpoll(9E)serve the ring.drm_deviceanddrm_filegain fixed-size KMS areas that the C layer overlays with Linux's field names.drm_filegains Linux's client-cap and master booleans.2.
misc/drm_kms(packagedriver/graphics/drm-kms)drm_hdcp_helperis GPL-only and is stubbed.loadcallback;registeredmeans "KMS registered", because the layer registers the device early;drmm_mode_config_init().card<N>-<connector>);_init.-z defs; exports equaldrm_kms.mapfile(715 symbols).3. LinuxKPI and i915n with display (
LINUXKPI_ABI3)seq_buf,int_log, DMI from SMBIOS,memremap(WB), Linux-order port output, stand-alone wound/wait mutexes (DRM's modeset locks; wait-die on the core's stamps), plus about 40 new MIT headers.drm_kmshook;4. The illumos console on i915n (
i915n-console, design note section 4, owner decision 2026-10-06)gfx_privateconsole minor (gfx0,/dev/fb) before its DRM minors and keeps the firmware framebuffer where the loader left it (its own reference and GGTT pin on the initial-plane object), so tem, the virtual terminals and/dev/fbwork as with vgatext; i915n is bound at boot (drmadm select new) and cannot detach while it is the console.KD_TEXT, from tem's full-screen clear of a text VT, from the DRM master's file closing and from lastclose; it commits only inKD_TEXT, with no DRM master, and never over X.CB_CL_PANICcallback points the console CRTC's plane at the console framebuffer with register writes only and records what it did ini915n_con_panic_logfor the crash dump.gfxp_*,fb_info,callb_*,panicstr) are declared indrivers/i915/private.mapfile; i915n links with-N misc/gfx_private,-z defs.drmadm selectruns with DRM modules loaded: it only edits files read at boot; the in-kernel guards keep the stacks from loading together (README, drmadm(8), G7 test updated).On the X230 (
notes/x230-i915n-kms-20261005.mdin the workspace; 5 panics on serials 6–8, all fixed here; serial 9 was display, serials 11–16 the console):prtconf -F=/pci@0,0/display@2:gfx0), 16 VTs, 0 LinuxKPI warnings.modetest -M i915: LVDS-1 at 1366x768; full modeset (FDI training, PCH DPLL, backlight); page flips at 60.13 Hz with vblank events.chvt: the CRTC's framebuffer goes X (129) → console (128) → X (129), X's root window pixel-identical before and after; the owner confirmed the interactive round on the panel (serial 15). Akill -9of Xorg brings the console back.93f2ef4) is the laptop's default boot environment since 2026-10-06, after four unattended boots and the owner's round;openindiana(legacy stack) stays in the loader menu. Serial 17 (5ca1204, the console review's round-2 fixes;1db4230adds a comment) booted the same way:/dev/fbiscrw------- lightdm(0600), the DRM nodes 0666.run-g7-test.shbaseline,installandselect-newon a fresh hephaistos guest at5ca1204: 13 checks pass for the drmadm change.drmadm select legacylive, reboot into the legacy stack, and back.Not covered:
reboot -d) was not watched on the panel yet; the dump record from serial 16 is for the next watched one.kmod-illumos failed at cdrmnull ("missing /usr/include/drm/drm.h") on main and on every PR: the runner image has no developer/header-drm. A step builds target/sysinc (/usr/include, plus drm.h and drm_mode.h from gfx-drm at the commit OpenIndiana ships when they are missing) and the C builds use it.