summaryrefslogtreecommitdiff
path: root/drivers/gpu
AgeCommit message (Collapse)Author
2026-10-01drm/amdgpu: fix IP instance memory leak on kobject add failureGuangshuo Li
amdgpu_discovery_sysfs_ips() allocates ip_hw_instance with kzalloc_flex() and initializes its embedded kobject before calling kobject_add(). If kobject_add() fails, the return value is ignored and execution continues without dropping the initial kobject reference. The failed kobject is not retained in the kset list, so the normal sysfs teardown path cannot find it. As a result, ip_hw_instance_release() is never called and the ip_hw_instance allocation is leaked. Call kobject_put() when kobject_add() fails so the initial reference is dropped and ip_hw_instance_release() can free the allocation. Keep the existing best-effort sysfs behavior by continuing with the remaining IP entries after the failed registration. The issue was identified by a static analysis tool I developed and confirmed by manual review. Fixes: a6c40b178092 ("drm/amdgpu: Show IP discovery in sysfs") Reviewed-by: Lijo Lazar <lijo.lazar@amd.com> Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu: replace kcalloc() with kzalloc_objs()Lalit Shankar Chowdhury
Use kzalloc_objs() instead of kcalloc() to simplify object allocations. Convert only the instances with sizeof() passed. No functional change. Signed-off-by: Lalit Shankar Chowdhury <lalitshankarch@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu: skip the noirq suspend reset for a switcheroo-parked GPUTheo Andersen Carton
amdgpu_pmops_suspend_noirq() resets the ASIC unconditionally. When the GPU has been parked by vga_switcheroo it has neither power nor a PCIe link, so the reset cannot reach it: pci_set_power_state() reports the device as inaccessible and amdgpu_asic_reset() returns -EINVAL. A failure there aborts the entire noirq suspend phase, and with it the system suspend, so the machine cannot sleep at all while the GPU is switched off. amdgpu_device_prepare(), amdgpu_device_suspend() and amdgpu_device_resume() all bail out early on DRM_SWITCH_POWER_OFF. This callback was added later, for an unrelated reason, and did not inherit the check. nouveau guards every one of its PM callbacks the same way. Bail out the same way here. On a single-GPU system switch_power_state is never DRM_SWITCH_POWER_OFF, so this is a no-op there. Found on a MacBookPro11,5, where the Radeon is powered down through apple-gmux so that the internal panel can be driven by the iGPU instead. Every suspend failed in amdgpu_pmops_suspend_noirq() while the card was off; with this check a full S3 cycle completes. Fixes: 9e051720f9d3 ("drm/amdgpu: Ensure HDA function is suspended before ASIC reset") Signed-off-by: Theo Andersen Carton <andersen.theo@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu/gfx12: defer gfx pipe reset enablementJesse Zhang
Keep PER_PIPE disabled until the minimum CP firmware version for warm reset is confirmed. Signed-off-by: Jesse Zhang <Jesse.Zhang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu/gfx11: defer gfx pipe reset enablementJesse Zhang
Keep PER_PIPE disabled until the minimum CP firmware version for warm reset is confirmed. Signed-off-by: Jesse Zhang <Jesse.Zhang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu/mes12: gate gfx pipe reset on PER_PIPEJesse Zhang
Replace the disabled pipe-reset stub with the shared PER_PIPE capability check, so GFX MMIO pipe reset follows gfx_supported_reset. Signed-off-by: Jesse Zhang <Jesse.Zhang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu/mes11: gate gfx pipe reset on PER_PIPEJesse Zhang
Replace the disabled pipe-reset stub with the shared PER_PIPE capability check, so GFX MMIO pipe reset follows gfx_supported_reset. Signed-off-by: Jesse Zhang <Jesse.Zhang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu/userq: preserve kernel rings during gfx pipe resetJesse Zhang
Route GFX user queue resets through amdgpu_gfx_reset_mes_gfx() when HQD detection and PER_PIPE are available, preserving collateral kernel rings across a pipe reset. If the HQD cannot be located, use MES packet reset and protect kernel rings on all GFX pipes. Signed-off-by: Jesse Zhang <Jesse.Zhang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu/userq: fix reading the WPTR at a non-zero BO offsetJesse Zhang
The user queue UAPI permits the WPTR at any 8-byte aligned offset within a BO. amdgpu_userq_fence_read_wptr() locates the mapping containing the WPTR address, but amdgpu_bo_kmap() returns the start of the BO, so the code read the first u64 regardless of the WPTR offset. USERQ_SIGNAL uses this value as the exported fence seqno, so a wrong read makes the fence signal early (or never), breaking dependency synchronization. Translate the WPTR GPU address to a byte offset within the BO, accounting for the VA mapping start and the mapping's BO offset, before reading it. Fixes: a292fdecd728 ("drm/amdgpu: Implement userqueue signal/wait IOCTL") Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Jesse Zhang <Jesse.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu/gmc12: properly pass flush_type to gmc_v12_0_flush_vm_hub()Alex Deucher
In gmc_v12_0_flush_gpu_tlb(), flush_type was not properly passed to gmc_v12_0_flush_vm_hub(). This only affected the MMIO path. In most cases the flush would go through MES. Reviewed-by: Mukul Joshi <mukul.joshi@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu: update MES v11/v12 API for mes_dbgextYongqiang Sun
Add the MES firmware debug-extension ("mes_dbgext") API definitions to the shared MES v11 and v12 interface headers: the MESAPI_MISC__SETUP_MES_DBGEXT misc opcode, the MES_DBGEXT_INIT_DATA struct (log buffer MC address + option bits), and the corresponding dbgext_init_data member of union MESAPI__MISC. These describe the SETUP_MES_DBGEXT packet the firmware expects and are consumed by the per-IP mes_dbgext wiring for gfx11 and gfx12. Signed-off-by: Yongqiang Sun <Yongqiang.Sun@amd.com> Reviewed-by: Shaoyun Liu <Shaoyun.Liu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu: Fix BO reference leak in UALink export error pathMukul Joshi
amdgpu_ualink_export_handle() takes an explicit amdgpu_bo_ref() before building the exporter node, and the out: label only drops the reference from drm_gem_object_lookup(). The xarray insert failure path unrefs the BO, but the drm_gem_prime_handle_to_dmabuf() failure path does not. Userspace can hit that path at will, for example by exhausting its file descriptor table so the dmabuf export returns -EMFILE, leaking a BO reference and its pinned VRAM on every attempt. Fixes: c67cb19811ec ("drm/amdgpu: Implement UALink handle export") Reported-by: Sashiko-bot <sashiko-bot@kernel.org> Closes: https://sashiko.dev/#/patchset/20260914054604.12850-1-kmehltretter@gmail.com?part=1 Signed-off-by: Mukul Joshi <mukul.joshi@amd.com> Reviewed-by: Felix Kuehling <felix.kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu/gfx: preserve collateral rings during gfx pipe resetJesse Zhang
Route kernel GFX resets through amdgpu_gfx_reset_mes_gfx() when PER_PIPE is supported, so collateral kernel rings are preserved across a pipe reset. Keep the existing queue reset path otherwise. Signed-off-by: Jesse Zhang <Jesse.Zhang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Promote DC to 3.2.400Ashwin Santhosh
This DC patchset brings improvements in multiple areas. - Stabilizes public lifecycle APIs, and adds DCN42/DCN60 support. - Adds DCN60 clock overrides, DCN42 PMO/P-state support, QoS handling for invalid PMFW tables, urgent-watermark overrides, and improved self-refresh timing. - Improve HDMI 2.1 reliability - Enables DMUB hardware cursor offload and improves cursor/cache behavior. Signed-off-by: Ashwin Santhosh <Ashwin.Santhosh@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Sunpeng Li <sunpeng.li@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: adjust floating point format for gamut remap when neededClay King
[Why] The MPCCs different gamut remap matrices allow for S2D13 and S3D12 floating point formats, but only S2D13 is used. There may be cases where more integer bits are required. [How] Switch to S3D12 if any entries in the remap matrix cannot fit in S2D13. Otherwise, prefer the extra precision of S2D13. Communicate the max value that hw can support to dm via dc color caps. Signed-off-by: Clay King <clayking@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Dillon Varone <dillon.varone@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Don't round up cursor width to nearest 64Alvin Lee
[Description] Rounding up cursor width was only used to calculate total size in previous generations. Do not use the rounded up cursor width in hardware programming. Signed-off-by: Alvin Lee <Alvin.Lee2@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Dillon Varone <dillon.varone@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Update default clocks for DCN60 lite3 variantNicholas Kazlauskas
[Why] These are important for getting correct DP and audio output. The wrong pixel clock will be used otherwise. [How] Update the default clocks for the DCN60 lite3 variant. Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Enable dcn42 pstate pmoDmytro Laktyushkin
Set a flag to enable pstate pmo, we want to always allow pstate support on dcn42 Partial application: DCN42B resource constructor only. Fixes: 6352e6027307 ("drm/amd/display: Enable dcn42 pstate pmo") Signed-off-by: Dmytro Laktyushkin <dmytro.laktyushkin@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Block DSC Padding on DPRelja Vojvodic
[Why & How] - BSOD was found on a DP config due to incomplete DSC padding implementation for DP - Block DSC padding on DP until fully implemented Signed-off-by: Relja Vojvodic <Relja.Vojvodic@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: George Shen <george.shen@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Fix zero dlg_reg write to program_ext_vblankCharlene Liu
[why] fix some non initialized reg_offset allow z8_only to program_ext_vblank [CLEANED] for dml2.1, dlg_reg moved inside hubp_reg add current_compbuf_size check ensure HW state reached. Partial application: DCN42 register-list additions only. Fixes: 0a5e0416e191 ("drm/amd/display: Add DCN42B code to DC") Fixes: 002f32db0d42 ("drm/amd/display: Fix dcn401_optimize_bandwidth") Signed-off-by: Charlene Liu <Charlene.Liu@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Dmytro Laktyushkin <dmytro.laktyushkin@amd.com> Reviewed-by: Leo Chen <leo.chen@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Attach blend mode property for alpha planesRay Wu
[Why & How] drm_mode_config_validate() warns when a plane exposes an alpha-capable pixel format without a blend_mode_property. amdgpu DM only created that property for overlay planes, so PRIMARY and CURSOR triggered the warning on every probe and reload in kernel 7.2. Create the blend mode property for every plane that advertises an alpha format. Keep overlay-only alpha_property. Cursor advertises only pre-multiplied blend mode because native cursor programming is pre-multiplied. Assisted-by: Cursor:Claude-Opus-4.8 Signed-off-by: Ray Wu <ray.wu@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Sun peng (Leo) Li <sunpeng.li@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Add urgent watermark override for DCN42Ovidiu Bunea
[why & how] Out-of-urgent bandwidth delivery to DCN is very poor under workloads. Even after asserting urgent, empirical data shows urgent return BW delays of up to 100 μs. Override the value when programming watermarks to avoid modifying mode support. Maintain the DML's calculated value as a floor. Signed-off-by: Ovidiu Bunea <ovidiu.bunea@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Fix VTG programming for dcn60Dillon Varone
[WHY&HOW] VTG params should be corrected based on HW expectation: - FP2 = v_bp - vstartup_start (if vstartup is after vsync), else 0 - vcount_init = OTG SOF position from vsync (0) or vtotal depending on vstartup position Signed-off-by: Dillon Varone <Dillon.Varone@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Alvin Lee <alvin.lee2@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Fix HDMI2.2 LT timeout durationIlya Bakoulin
[Why/How] Current method of keeping track of the LT timeout can cause the actual elapsed time to creep past the spec-defined limits. Adjust the behavior to make timeouts more consistent. Signed-off-by: Ilya Bakoulin <Ilya.Bakoulin@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Chris Park <chris.park@amd.com> Reviewed-by: Charlene Liu <charlene.liu@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: avoid to write signal specific for tmdsCharlene Liu
[why] some panel will generate HPD if receive invalid the action. Signed-off-by: Charlene Liu <Charlene.Liu@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Michael Strauss <michael.strauss@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Remove dead self-refresh BLS stepsPiotr Maziarz
[WHY] The DCN10 post-unlock BLS path still emitted self-refresh suppression steps that are dead for this flow. Keeping them also left non-compliant BLS enums and documentation behind after the architecture cleanup. [HOW] Removed the dead DCN10 BLS producer path, dropped the associated BLS enums, params, helpers, dispatcher cases, unit-test dumper cases, and updated the BLS documentation. Kept the shared dcn10_update_pending_status consumer because later DCN generations still use it. Signed-off-by: Piotr Maziarz <piotr.maziarz@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Dispatch HUBBUB_SOFT_RESET through hubbub_funcsPiotr Maziarz
[WHY] hubbub_soft_reset_params carried the callee itself as a function pointer, so the step was not fully described by its parameters. The core_gtest dumper could only record hubbub and reset, which means two sequences calling different functions compare equal. It also forced dcn401_hwseq to name the dcn10 symbol hubbub1_soft_reset directly, because hubbub_funcs had no slot for a soft reset. [HOW] Added soft_reset to hubbub_funcs and pointed hubbub4_01_funcs, hubbub42_funcs and hubbub60_funcs at hubbub1_soft_reset, the same way allow_self_refresh_control is already shared. Dropped the function pointer from the params struct and the add helper, and had the executor call hubbub->funcs->soft_reset. The dcn10_hubbub.h include in dcn401_hwseq.c is no longer needed. Signed-off-by: Piotr Maziarz <piotr.maziarz@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Alvin Lee <alvin.lee2@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Drop disallow_self_refresh_applied output paramPiotr Maziarz
[WHY] Besides programming the hubbub, the HUBBUB_ALLOW_SELF_REFRESH_CONTROL executor wrote through an output pointer into hwseq->wa_state to record that the MPO stutter workaround had been applied. That bookkeeping has no relationship to the register write and makes the operation mutate a logical object while the sequence runs. [HOW] Removed the pointer from hubbub_allow_self_refresh_control_params and from the add helper, leaving the executor a plain pass through to hubbub->funcs->allow_self_refresh_control. hwss_build_post_unlock_full_sequence now sets the workaround flag itself, inside the same condition that decides to emit the step. TG_GET_FRAME_COUNT is left as is: its out parameter is the read back register value, and reading it after the write matches the legacy implementations. Signed-off-by: Piotr Maziarz <piotr.maziarz@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Alvin Lee <alvin.lee2@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Rename HUBBUB_FORCE_PSTATE_CHANGE_CONTROL wait fieldPiotr Maziarz
[WHY] hubbub_force_pstate_change_control_params::wait was passed as the allow argument of hubbub_funcs::force_pstate_change_control, which drives DCHUBBUB_ARB_ALLOW_PSTATE_CHANGE_FORCE_VALUE. Sitting three lines above a udelay(500), the name read as a timing control and invited the wrong conclusion about what the field does. [HOW] Renamed the field to allow and updated the add helper signature, the executor, the core_gtest dumper and comparator, and the affected core_golden entry. No functional change. Signed-off-by: Piotr Maziarz <piotr.maziarz@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Alvin Lee <alvin.lee2@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Remove OPP_SET_MPCC_DISCONNECT_PENDINGPiotr Maziarz
[WHY] The operation wrote no hardware register. Its executor only set opp->mpcc_disconnect_pending, a driver side flag, which breaks the rule that a block sequence step programs a hardware block rather than mutating logical objects. It was also split across phases: written while the pre-unlock sequence executed, then read and cleared while the post-unlock sequence was still being built. [HOW] Deleted the enum value, the params struct, the add helper, the executor and the dispatch case. dcn401_plane_atomic_disconnect_sequence now sets the flag during the build phase, matching what dcn10, dcn20, dcn201, dcn35, dcn3ag and dcn42b already do. Updated the operation specs and the core_gtest dumper. Signed-off-by: Piotr Maziarz <piotr.maziarz@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Alvin Lee <alvin.lee2@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Flatten OPP_SET_DISP_PATTERN_GENERATOR parametersPiotr Maziarz
[WHY] opp2_set_disp_pattern_generator read debug.disable_dynamic_expansion_for_test_pattern through opp->ctx->dc while the sequence was executing. A block sequence operation must take its inputs from a flat parameter list resolved during the build phase, so this hid an input from the recorded sequence and left the FMT_DYNAMIC_EXP_CNTL branch unreachable from the OPP unit tests. [HOW] Added disable_dyn_exp_for_test_pattern to opp_funcs::opp_set_disp_pattern_generator and to opp_set_disp_pattern_generator_params, and updated every caller to pass dc->debug.disable_dynamic_expansion_for_test_pattern explicitly. Updated the unit test mocks and the core_gtest dumper, and extended opp_gtest to cover both values of the new flag. Signed-off-by: Piotr Maziarz <piotr.maziarz@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Alvin Lee <alvin.lee2@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: map PWM brightness through custom backlight curveRay Wu
[Why/How] On the PWM path, convert the userspace brightness to an input signal and derive the target luminance from the custom backlight curve, then pass the resulting millipercent to the power module. This keeps PWM programming and backlight curve mapping in the power module, aligning the Linux path with the Windows behavior. Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/5723 Fixes: 3c108046e1d6 ("drm/amd/display: Add power module on Linux") Assisted-by: Cursor:Claude-Opus-4.8 Signed-off-by: Ray Wu <ray.wu@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: ChiaHsuan (Tom) Chung <chiahsuan.chung@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Add temporary programming for port control in dc_initAlvin Lee
[Description] Add the POR setting for SDP_PORT_CONTROL into dc init sequence. This is temporary until the initialization moves into pre-OS DMCUB. Signed-off-by: Alvin Lee <Alvin.Lee2@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Dillon Varone <dillon.varone@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Enable DMUB HW cursor offloadIvan Lipski
[why & how] DCN60 supports cursor offload to DMU. Request cursor offload in amdgpu_dm_init and initialize it after DMUB is up (dc_dmub_srv_cursor_offload_init), which should be picked up by all the ASICs that support cursor offload in the dcnX_resouce.c. Signed-off-by: Ivan Lipski <ivan.lipski@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Alvin Lee <alvin.lee2@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Remove unused copyright noticeJackson He
[Why & How] The copyright notice was carried over from code related to kernel floating-point support. The associated DC_FP_START() and DC_FP_END() macros are not present in SPL, so the notice is no longer applicable. Remove the unused copyright notice from spl_os_types.h. Signed-off-by: Jackson He <Jackson.He@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Samson Tam <samson.tam@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Program OPP formatter for plane-less ODM segmentsAshwin Santhosh
why: When a display is disabled the surviving DSC stream is committed with no planes but the dynamic ODM policy still expands it to a four to one combine. The added plane-less segments skip program_pipe so their OPP formatter is never configured. The DPG blank then feeds an unprogrammed formatter and the OPTC input underflows which flashes grey on screen. how: Program the OPP formatter for each plane-less OPP head in update_odm and update_odm_sequence the same way program_pipe does for planed pipes. Both function pointers are checked for null before calling. Every ODM segment now feeds valid data to the OPTC so the four to one combine no longer underflows. Signed-off-by: Ashwin Santhosh <Ashwin.Santhosh@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Dillon Varone <dillon.varone@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm: renesas: shmobile: stop using deprecated devm_drm_of_get_bridge()Luca Ceresoli
devm_drm_of_get_bridge() is deprecated, switch to of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns a refcounted bridge, ensure it is put. drm_panel.h becomes unused, drop the include. Acked-by: Maxime Ripard <mripard@kernel.org> Reviewed-by: Paul Cercueil <paul.cercueil@bootlin.com> Link: https://patch.msgid.link/20260929-drm-fix-of_get_bridge-build-regression-v2-7-6da431d8f180@bootlin.com Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
2026-10-01drm/bridge: dw-mipi-dsi2: stop using deprecated devm_drm_of_get_bridge()Luca Ceresoli
devm_drm_of_get_bridge() is deprecated, switch to of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns a refcounted bridge, ensure it is put by using bridge.next_bridge. Reviewed-by: Paul Cercueil <paul.cercueil@bootlin.com> Link: https://patch.msgid.link/20260929-drm-fix-of_get_bridge-build-regression-v2-4-6da431d8f180@bootlin.com Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
2026-10-01drm/bridge: dw-mipi-dsi: stop using deprecated devm_drm_of_get_bridge()Luca Ceresoli
devm_drm_of_get_bridge() is deprecated, switch to of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns a refcounted bridge, ensure it is put by using bridge.next_bridge. Fixes build failure when CONFIG_OF is disabled. Fixes: aa8a8c7e4641 ("drm/bridge: panel: move all code to drm_panel.c") Reported-by: Arnd Bergmann <arnd@kernel.org> Closes: https://lore.kernel.org/r/20260928161605.2271412-1-arnd@kernel.org Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202609291109.9RGna4XZ-lkp@intel.com/ Link: https://lore.kernel.org/r/20260928161605.2271412-1-arnd@kernel.org Link: https://lore.kernel.org/oe-kbuild-all/202609291109.9RGna4XZ-lkp@intel.com/ Reviewed-by: Paul Cercueil <paul.cercueil@bootlin.com> Link: https://patch.msgid.link/20260929-drm-fix-of_get_bridge-build-regression-v2-3-6da431d8f180@bootlin.com Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
2026-10-01drm: verisilicon: stop using deprecated devm_drm_of_get_bridge()Luca Ceresoli
devm_drm_of_get_bridge() is deprecated, switch to of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns a refcounted bridge, ensure it is put by using bridge.next_bridge. Fixes build failure when CONFIG_OF is disabled. Fixes: aa8a8c7e4641 ("drm/bridge: panel: move all code to drm_panel.c") Reported-by: Arnd Bergmann <arnd@kernel.org> Closes: https://lore.kernel.org/r/20260928161605.2271412-1-arnd@kernel.org Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202609291109.OIsGTysr-lkp@intel.com/ Closes: https://lore.kernel.org/oe-kbuild-all/202609290408.BOs7sk55-lkp@intel.com/ Reviewed-by: Icenowy Zheng <zhengxingda@iscas.ac.cn> Reviewed-by: Paul Cercueil <paul.cercueil@bootlin.com> Link: https://patch.msgid.link/20260929-drm-fix-of_get_bridge-build-regression-v2-2-6da431d8f180@bootlin.com Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
2026-10-01drm/imx/lcdc: stop using deprecated devm_drm_of_get_bridge()Luca Ceresoli
devm_drm_of_get_bridge() is deprecated, switch to of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns a refcounted bridge, ensure it is put. Fixes build failure when CONFIG_OF is disabled. Fixes: aa8a8c7e4641 ("drm/bridge: panel: move all code to drm_panel.c") Reported-by: Arnd Bergmann <arnd@kernel.org> Link: https://lore.kernel.org/r/20260928161605.2271412-1-arnd@kernel.org Acked-by: Maxime Ripard <mripard@kernel.org> Reviewed-by: Paul Cercueil <paul.cercueil@bootlin.com> Link: https://patch.msgid.link/20260929-drm-fix-of_get_bridge-build-regression-v2-1-6da431d8f180@bootlin.com [Luca: fixed conflict in imx_lcdc_probe] Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
2026-10-01drm/amdgpu: Reject UALink handle ioctl on devices without UALinkMukul Joshi
amdgpu_gem_ualink_handle_ioctl() dereferences adev->ualink.info before validating it, but that structure is only allocated when the UALink IP block is present, which is currently added only for GFX 12.1 only. The ioctl is registered for every amdgpu device with DRM_RENDER_ALLOW, so on any other ASIC a render node user can oops the kernel with a single call. Return -EOPNOTSUPP when the UALink software state is absent. Fixes: 15d1c306d829 ("drm/amdgpu: Add ioctl infra for exporting/importing UALink handles") Reported-by: Sashiko-bot <sashiko-bot@kernel.org> Closes: https://sashiko.dev/#/patchset/20260914054604.12850-1-kmehltretter@gmail.com?part=1 Signed-off-by: Mukul Joshi <mukul.joshi@amd.com> Reviewed-by: Felix Kuehling <felix.kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Skip HDMI FRL status polling while link is downFangzhi Zuo
[WHY] Hotplugging an HDMI FRL sink can wedge DMCUB when a poll-driven retrain lands on a link whose PHY has just been torn down. The status polling path can program PHY EQ on the disabled PHY, after which the sink SCDC reads back version 0 and the display fails to light up. [HOW] Skip FRL status polling unless the link is actively driving a stream. The check runs under dc_lock, so it is serialized with link detection and modesets while the PHY is being torn down. Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Harry Wentland <harry.wentland@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Disable gamcor light sleep before gamcor programAlvin Lee
[Description] - Gamcor light sleep must be disabled before gamcor programming - Mirror the programming sequence for DSCL light sleep - Create a dcn60 version for gamcor programming - Make dcn30 helper functions public so they can be called from the new dcn60 function Signed-off-by: Alvin Lee <Alvin.Lee2@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu: implement workaround for sdma dcc corruptionPierre-Eric Pelloux-Prayer
For unknown reasons, on gfx12 using multiple entities can causes random corruption of BOs with DCC. This workaround seems to prevent the issue until the root cause is understood and fixed. Link: https://gitlab.freedesktop.org/drm/amd/-/work_items/5663 Fixes: 3a6f6eeb3db5 ("drm/amdgpu: give ttm entities access to all the sdma scheds") Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu: Delete unimplemented GMC v9 soft_reset() codeTimur Kristóf
The soft_reset() function for GMC (memory controller) block of Vega has never been implemented, and there are no plans to implement it. Let's delete this function, it doesn't do anything and also isn't called from anywhere. Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu: Delete GMC v6-v7 soft_reset() codeTimur Kristóf
Note that the soft reset code for GMC v6-v7 was never called from anywhere, so there is no loss of functionality from this commit. The implementation looks plausible but it was never enabled or tested, and unlikely to be useful. We should only reset the memory controller during ASIC reset and otherwise leave it alone. Resetting the memory controller can break everything and risks losing the contents of VRAM (it's unclear if VRAM is lost or not, but it's likely). Acked-by: Christian König <christian.koenig@amd.com> Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amdgpu/gfx: add a gfx ME pipe reset capability helperJesse Zhang
Use gfx_supported_reset's PER_PIPE bit to report GFX pipe reset support through a shared helper. Signed-off-by: Jesse Zhang <Jesse.Zhang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Keep public DC lifecycle APIs stable beside Core 2Cheng, Tony
DMs still call dc_hardware_init and dc_hardware_release while Core 2 lands next to legacy. Those entry points live in dc/dc_api_dispatch: LEGACY calls the old bodies directly, CORE2 uses core2_funcs. dc_create allocates struct dc2 and returns the inner dc (TO_DC2). The shim only records selection; dc_construct still constructs Core2. No dispatch fields on public struct dc, and no architect spec edits. TO_DC2 is a typed upcast (struct dc is the first member of struct dc2). Shim headers are included for UNIT_TEST as well as production so TO_DC2 is defined when core_gtest compiles dc.c. Assisted-by: Cursor:cursor Signed-off-by: Cheng, Tony <Tony.Cheng@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Jun Lei <jun.lei@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2026-10-01drm/amd/display: Change default SR z8 exit/enter valueFudongwang
[WHY+HOW] According to HW, change default z8 enter/exist for dcn314. SR Z8 exit = 268, change to 390. SR Z8 enter = 393, change to 601. Signed-off-by: Fudongwang <Fudong.Wang@amd.com> Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com> Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Reviewed-by: Dillon Varone <dillon.varone@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>