linux/drivers/gpu/drm
Mohamed Ahmed 0116f19db5 drm/nouveau: honor HF-EEODB EDIDs by converting to struct drm_edid
HDMI 2.1 sinks ship HF-EEODB EDIDs. Byte 126 deliberately claims one
extension block for legacy sources, and the true count lives in the CTA
block's first data block. Their high-refresh timings sit in DisplayID
extension blocks 2+.

The kernel already reads these EDIDs whole, and on GSP boards RM returns
the full EDID with its true size. However, nouveau then hands the buffer
to the legacy API which sizes the EDID from byte 126 so the DisplayID
blocks are not parsed/exposed and the sysfs blob truncates to 256 bytes.
The mode list then tops out at the CTA VICs.

Convert to the struct drm_edid API, which carries the real size.
Read via drm_edid_read_ddc()/drm_edid_read_switcheroo() where an
adapter exists, and serve RM's buffer through drm_edid_read_custom()
with a block-reading callback where not, which also routes the GSP
path through drm's block validation and the debugfs EDID override.

A failed RM read now takes the same "no EDID" path as an empty DDC read
which stops it from leaking the runtime-PM reference detect() holds. The
property, display_info, and mode list go through
drm_edid_connector_update()/_add_modes() and every EDID source is
funneled through nouveau_connector_set_edid() so all of them reach the
property that drm_edid_connector_add_modes() reads from.

nouveau_acpi_edid() now returns a drm_edid sized from the EDID's
extension count but never past the length _DDC actually returned, so
padded buffers pass and truncated ones are rejected, and every
firmware-provided EDID (OF, ACPI, VBIOS-embedded) is validated with
drm_edid_valid(). An invalid one is treated as no EDID. get_modes()
re-syncs the property from the connector's copy when the probe helper
has cleared it for a forced-off connector, before adding modes.

The few raw EDID readers are converted along with it, so no raw struct
edid pointer is kept. Ownership and freeing move to the drm_edid. MST
connectors keep their separate legacy path.

Signed-off-by: Mohamed Ahmed <mohamedahmedegypt2001@gmail.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Signed-off-by: Lyude Paul <lyude@redhat.com>
Link: https://patch.msgid.link/20260825001408.14219-11-mohamedahmedegypt2001@gmail.com
2026-08-31 14:16:09 -04:00
..
adp drm/adp: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:09:21 +02:00
amd Merge drm/drm-next into drm-misc-next 2026-08-31 09:01:06 +02:00
arm drm/malidp: Convert to atomic_create_state 2026-08-31 15:11:17 +02:00
armada drm/armada: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:09:22 +02:00
aspeed Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
ast drm/ast: Convert to atomic_create_state 2026-08-31 15:11:18 +02:00
atmel-hlcdc drm/atmel-hlcdc: Convert to atomic_create_state 2026-08-31 15:11:18 +02:00
bridge Merge drm/drm-next into drm-misc-next 2026-08-31 09:01:06 +02:00
ci hwrng: qcom - Move qcom-rng.c into drivers/char/hw_random/ 2026-07-05 13:22:35 +08:00
clients Merge drm/drm-next into drm-misc-next 2026-08-31 09:01:06 +02:00
display Merge drm/drm-next into drm-misc-next 2026-08-31 09:01:06 +02:00
etnaviv drm for 7.3-rc1 2026-08-21 08:41:00 -07:00
exynos drm/exynos: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:09:23 +02:00
fsl-dcu drm/fsl-dcu: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:09:24 +02:00
gma500 drm for 7.3-rc1 2026-08-21 08:41:00 -07:00
gud drm/gud: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:09:24 +02:00
hisilicon drm/hisilicon: kirin: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:09:25 +02:00
hyperv drm/hyperv: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:09:26 +02:00
i915 mm.git review status for linus..mm-stable 2026-08-27 09:17:06 -07:00
imagination power sequencing updates for v7.3-rc1 2026-08-26 08:45:09 -07:00
imx drm/imx: ipuv3: Convert to atomic_create_state 2026-08-31 15:11:19 +02:00
ingenic drm/ingenic: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:09:27 +02:00
kmb drm/kmb: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:09:28 +02:00
lima Linux 7.2 2026-08-20 10:58:44 +10:00
logicvc drm/panel: of_drm_find_panel() return a counted reference 2026-07-20 15:07:22 +02:00
loongson drm: Consistently define pci_device_ids using named initializers 2026-06-17 11:07:01 +02:00
mcde drm/panel: of_drm_find_panel() return a counted reference 2026-07-20 15:07:22 +02:00
mediatek Merge drm/drm-next into drm-misc-next 2026-08-31 09:01:06 +02:00
meson drm/meson: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:09:28 +02:00
mgag200 drm/mgag200: Convert to atomic_create_state 2026-08-31 15:17:53 +02:00
msm drm/msm: mdp5: Convert to atomic_create_state 2026-08-31 15:17:54 +02:00
mxsfb drm/mxsfb: lcdif: Convert to atomic_create_state 2026-08-31 15:17:54 +02:00
nouveau drm/nouveau: honor HF-EEODB EDIDs by converting to struct drm_edid 2026-08-31 14:16:09 -04:00
nova drm for 7.3-rc1 2026-08-21 08:41:00 -07:00
omapdrm drm/omapdrm: Convert to atomic_create_state 2026-08-31 15:17:56 +02:00
panel drm/panel: Add Novatek NT36532 panel driver 2026-08-31 16:16:41 +02:00
panfrost Merge drm/drm-next into drm-misc-next 2026-08-31 09:01:06 +02:00
panthor Merge drm/drm-next into drm-misc-next 2026-08-31 09:01:06 +02:00
pl111 drm/panel: of_drm_find_panel() return a counted reference 2026-07-20 15:07:22 +02:00
qxl drm/qxl: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:09:30 +02:00
radeon drm/radeon: fix internal display on iMac11, 1 (RV770/DCE3.1) 2026-08-19 10:12:25 -04:00
renesas drm/rzg2l-du: Convert to atomic_create_state 2026-08-31 15:17:57 +02:00
rockchip drm/rockchip: vop2: Convert to atomic_create_state 2026-08-31 15:17:58 +02:00
scheduler Merge drm/drm-next into drm-misc-next 2026-08-31 09:01:06 +02:00
sitronix drm/sitronix: st7571: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:06 +02:00
solomon drm/solomon: ssd130x: Convert to atomic_create_state 2026-08-31 15:17:58 +02:00
sprd drm/sprd: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:07 +02:00
sti drm/sti: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:07 +02:00
stm drm/stm: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:08 +02:00
sun4i drm/sun4i: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:09 +02:00
sysfb sysfb: Convert to create_state 2026-08-31 15:11:16 +02:00
tegra drm/tegra: Convert to atomic_create_state 2026-08-31 15:17:59 +02:00
tests drm/tests: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:09 +02:00
tidss drm/tidss: remove dependency on DRM simple helpers 2026-08-26 09:59:59 +02:00
tilcdc Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
tiny drm/tiny: sharp: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:12 +02:00
ttm Merge drm/drm-next into drm-misc-next 2026-08-31 09:01:06 +02:00
tve200 drm/tve200: add OF module alias for autoloading 2026-07-24 09:21:03 +02:00
tyr drm for 7.3-rc1 2026-08-21 08:41:00 -07:00
udl drm/udl: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:13 +02:00
v3d Linux 7.2 2026-08-20 10:58:44 +10:00
vboxvideo drm/vbox: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:13 +02:00
vc4 drm/vc4: Convert to atomic_create_state 2026-08-31 15:18:00 +02:00
verisilicon drm/verisilicon: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:14 +02:00
vgem
virtio drm/virtio: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:14 +02:00
vkms drm/vkms: Convert to atomic_create_state 2026-08-31 15:18:00 +02:00
vmwgfx drm/vmwgfx: Convert to atomic_create_state 2026-08-31 15:18:01 +02:00
xe drm next/fixes for 7.3-rc1 2026-08-28 16:37:55 -07:00
xen mm: introduce vma_get_page_prot() and use it 2026-08-06 18:57:03 -07:00
xlnx drm/xlnx: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:15 +02:00
drm_atomic_helper.c drm/atomic-helper: Add HDMI bridge output bus formats helper 2026-06-09 21:03:50 +01:00
drm_atomic_state_helper.c drm/bridge: Remove atomic_reset support 2026-06-22 11:25:00 +02:00
drm_atomic_uapi.c drm/colorop: Add DRM_COLOROP_FIXED_MATRIX 2026-08-27 09:48:57 -04:00
drm_atomic.c drm/colorop: Add DRM_COLOROP_FIXED_MATRIX 2026-08-27 09:48:57 -04:00
drm_auth.c drm/auth: Only drm_drop_master if it exists 2026-04-21 22:05:51 +08:00
drm_blend.c drm/drm_blend: allow blend mode property without PREMULTI 2026-07-14 19:22:48 +01:00
drm_bridge_helper.c
drm_bridge.c drm/bridge: Remove legacy bridge callback support 2026-07-15 09:46:16 +02:00
drm_buddy.c gpu/buddy: replace dual-tree/force_merge with decoupled dirty tracker 2026-08-27 17:58:29 +05:30
drm_cache.c x86/cpu: Hide and rename static_cpu_has() 2026-07-06 21:34:26 -07:00
drm_client_event.c
drm_client_modeset.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_client_sysrq.c
drm_client.c
drm_color_mgmt.c mm.git review status for mm-hotfixes-stable..mm-nonmm-stable 2026-06-21 13:20:19 -07:00
drm_colorop.c drm/colorop: Add DRM_COLOROP_FIXED_MATRIX 2026-08-27 09:48:57 -04:00
drm_connector.c drm-misc-next for 7.3: 2026-07-06 17:38:49 +10:00
drm_crtc_helper_internal.h
drm_crtc_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_crtc_internal.h drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_crtc.c
drm_damage_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_debugfs_crc.c
drm_debugfs.c drm/debugfs: Move HDMI debugfs registration to state helper 2026-08-13 16:07:41 +01:00
drm_displayid_internal.h Merge drm/drm-next into drm-misc-next 2026-06-30 10:16:00 +02:00
drm_displayid.c
drm_draw_internal.h drm/draw: Remove unused helper drm_draw_get_char_bitmap() 2026-06-04 09:44:11 +02:00
drm_draw.c
drm_drv.c Merge drm/drm-next into drm-misc-next 2026-08-31 09:01:06 +02:00
drm_dumb_buffers.c drm-misc-next for 7.3: 2026-07-06 17:38:49 +10:00
drm_edid_load.c
drm_edid.c drm/edid: parse HDMI 2.1 gaming (ALLM/VRR) capabilities from HF-VSDB 2026-08-24 17:10:17 -04:00
drm_eld.c
drm_encoder.c drm/encoder: drm_encoder_cleanup: lock the encoder chain mutex during removal 2026-04-16 09:08:42 +02:00
drm_exec.c drm/exec: Use kvmalloc_objs for exec->objects 2026-07-07 23:16:33 +08:00
drm_fb_dma_helper.c
drm_fb_helper.c Linux 7.2 2026-08-20 10:58:44 +10:00
drm_fbdev_dma.c
drm_fbdev_shmem.c
drm_fbdev_ttm.c
drm_file.c
drm_flip_work.c
drm_format_helper.c
drm_format_internal.h
drm_fourcc.c drm/fourcc: Add DRM_FORMAT_XVUY2101010 2026-05-05 14:04:29 +03:00
drm_framebuffer.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_gem_atomic_helper.c drm/gem-atomic-helper: Remove drm_gem_reset_shadow_plane() 2026-08-21 16:20:23 +02:00
drm_gem_dma_helper.c mm: introduce vma_get_page_prot() and use it 2026-08-06 18:57:03 -07:00
drm_gem_framebuffer_helper.c drm/gem: Fix inconsistent plane dimension calculation in drm_gem_fb_init_with_funcs() 2026-04-27 11:27:22 +02:00
drm_gem_shmem_helper.c mm.git review status for linus..mm-stable 2026-08-27 09:17:06 -07:00
drm_gem_ttm_helper.c
drm_gem_vram_helper.c drm/vram: remove DRM_VRAM_MM_FILE_OPERATIONS from docs 2026-04-09 09:34:28 +02:00
drm_gem.c drm for 7.3-rc1 2026-08-21 08:41:00 -07:00
drm_gpusvm.c drm for 7.3-rc1 2026-08-21 08:41:00 -07:00
drm_gpuvm.c drm/gpuvm: Remove dead code 2026-07-03 23:32:55 +02:00
drm_internal.h
drm_ioc32.c drm/ioc32: stop speculation on the drm_compat_ioctl path 2026-04-02 08:24:55 +02:00
drm_ioctl.c drm: Guard DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE 2026-07-07 14:57:10 +02:00
drm_kms_helper_common.c
drm_lease.c
drm_managed.c drm/managed: use special gfp_t format specifier 2026-05-28 21:04:52 -07:00
drm_mipi_dbi.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_mipi_dsi.c drm/mipi-dsi: add mipi_dsi_shutdown_peripheral_multi 2026-04-24 10:12:16 -07:00
drm_mm.c
drm_mode_config.c drm: use drm_warn() in validate_blend_mode_for_alpha_formats() 2026-08-14 14:43:23 +01:00
drm_mode_object.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_modes.c drm/modes: Add DRM_MODE_MATCH_TIMINGS_VRR 2026-06-24 18:54:10 +03:00
drm_modeset_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_modeset_lock.c drm: remove dead WARN_ON NULL check after GFP_NOFAIL allocation 2026-08-05 11:20:13 -07:00
drm_of.c drm: of: Fix drm_of_get_data_lanes_count_ep() return value documentation 2026-08-21 12:54:28 +03:00
drm_pagemap_util.c
drm_pagemap.c Revert "drm/pagemap: Guard HPAGE_PMD_ORDER use with CONFIG_ARCH_ENABLE_THP_MIGRATION" 2026-07-24 08:02:14 +02:00
drm_panel_backlight_quirks.c drm/amd/display: Force PWM backlight on Lenovo Legion 5 15ARH05 2026-07-17 17:41:15 -04:00
drm_panel_orientation_quirks.c
drm_panel.c drm/panel: find_panel_by_fwnode() return a counted reference 2026-07-20 15:08:08 +02:00
drm_panic_qr.rs
drm_panic.c drm/panic: Look up glyph shape with font helper 2026-06-04 09:44:10 +02:00
drm_pci.c
drm_plane_helper.c
drm_plane.c
drm_prime.c
drm_print.c drm/print: describe 6th & 9th bit of drm.debug 2026-06-03 11:24:52 +02:00
drm_privacy_screen_x86.c
drm_privacy_screen.c
drm_probe_helper.c drm: Send per-connector hotplug events 2026-07-21 17:06:42 +01:00
drm_property.c
drm_ras_genl_family.c
drm_ras_nl.c drm/drm_ras: Add clear-error-counter netlink command to drm_ras 2026-04-24 08:43:42 -04:00
drm_ras_nl.h drm/drm_ras: Add clear-error-counter netlink command to drm_ras 2026-04-24 08:43:42 -04:00
drm_ras.c drm/drm_ras: Add clear-error-counter netlink command to drm_ras 2026-04-24 08:43:42 -04:00
drm_rect.c
drm_self_refresh_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_simple_kms_helper.c drm/simple-kms: Switch to drm_atomic_helper_crtc_create_state 2026-08-31 15:11:06 +02:00
drm_suballoc.c
drm_syncobj.c drm/syncobj: Use kmalloc_objs for chains 2026-07-07 23:26:39 +08:00
drm_sysfs.c
drm_trace_points.c
drm_trace.h
drm_vblank_helper.c drm: Rename struct drm_atomic_state to drm_atomic_commit 2026-05-04 14:05:04 +10:00
drm_vblank_work.c
drm_vblank.c
drm_vma_manager.c
drm_writeback.c drm: writeback: Document behaviour for framebuffer size mismatch 2026-06-15 22:28:26 +01:00
Kconfig drm/gpuvm: rust: add RUST_DRM_GPUVM option to Kconfig 2026-05-05 12:59:41 +02:00
Kconfig.debug
Makefile gpu: build nova-core and nova-drm from drivers/gpu/Makefile 2026-06-29 11:28:38 +02:00