Hi Alex,

I wiil add it before upstream.

Regards,
Chenyu

On 12/3/2025 12:31 AM, Alex Hung wrote:
> 
> 
> On 12/2/25 09:29, Alex Hung wrote:
>>
>>
>> On 12/2/25 03:21, Chenyu Chen wrote:
>>> From: Alex Hung <[email protected]>
>>>
>>> [WHAT]
>>> When compiling Linux kernel with clang, the following warning / error
>>> messages pops up:
>>>
>>> drivers/gpu/drm/amd/amdgpu/../dal-dev/dc/dml2_0/ 
>>> display_mode_core.c:6853:12:
>>> error: stack frame size (2120) exceeds limit (2056) in
>>> 'dml_core_mode_support' [-Werror,-Wframe-larger-than]
>>>   6853 | dml_bool_t dml_core_mode_support(struct display_mode_lib_st
>>> *mode_lib)
>>>
>>> [HOW]
>>> Refactoring CalculateVMRowAndSwath_params assignments to a new function
>>> helps reduce the stack frame size in dml_core_mode_support.
>>>
>> Hi Chenyu,
>>
>> A bug seems to be related. Can you add a buglink? Thanks.
>>
>> Buglink: https://gitlab.freedesktop.org/drm/amd/-/issues/4733
> 
> Correction, Add "Closes" instead of "Buglink"
> 
>>
>>> Reviewed-by: Austin Zheng <[email protected]>
>>> Reviewed-by: Aurabindo Pillai <[email protected]>
>>> Signed-off-by: Alex Hung <[email protected]>
>>> Signed-off-by: Chenyu Chen <[email protected]>
>>> ---
>>>   .../amd/display/dc/dml2_0/display_mode_core.c | 134 ++++++++++--------
>>>   1 file changed, 71 insertions(+), 63 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/display/dc/dml2_0/display_mode_core.c 
>>> b/drivers/gpu/drm/amd/display/dc/dml2_0/display_mode_core.c
>>> index c468f492b876..09303c282495 100644
>>> --- a/drivers/gpu/drm/amd/display/dc/dml2_0/display_mode_core.c
>>> +++ b/drivers/gpu/drm/amd/display/dc/dml2_0/display_mode_core.c
>>> @@ -6711,6 +6711,76 @@ static noinline_for_stack void 
>>> dml_prefetch_check(struct display_mode_lib_st *mo
>>>       } // for j
>>>   }
>>> +static noinline_for_stack void set_vm_row_and_swath_parameters(struct 
>>> display_mode_lib_st *mode_lib)
>>> +{
>>> +    struct CalculateVMRowAndSwath_params_st 
>>> *CalculateVMRowAndSwath_params = &mode_lib- 
>>>> scratch.CalculateVMRowAndSwath_params;
>>> +    struct dml_core_mode_support_locals_st *s = &mode_lib- 
>>>> scratch.dml_core_mode_support_locals;
>>> +
>>> +    CalculateVMRowAndSwath_params->NumberOfActiveSurfaces = mode_lib- 
>>>> ms.num_active_planes;
>>> +    CalculateVMRowAndSwath_params->myPipe = s->SurfParameters;
>>> +    CalculateVMRowAndSwath_params->SurfaceSizeInMALL = mode_lib- 
>>>> ms.SurfaceSizeInMALL;
>>> +    CalculateVMRowAndSwath_params->PTEBufferSizeInRequestsLuma = 
>>> mode_lib->ms.ip.dpte_buffer_size_in_pte_reqs_luma;
>>> +    CalculateVMRowAndSwath_params->PTEBufferSizeInRequestsChroma = 
>>> mode_lib->ms.ip.dpte_buffer_size_in_pte_reqs_chroma;
>>> +    CalculateVMRowAndSwath_params->DCCMetaBufferSizeBytes = mode_lib- 
>>>> ms.ip.dcc_meta_buffer_size_bytes;
>>> +    CalculateVMRowAndSwath_params->UseMALLForStaticScreen = mode_lib- 
>>>> ms.cache_display_cfg.plane.UseMALLForStaticScreen;
>>> +    CalculateVMRowAndSwath_params->UseMALLForPStateChange = mode_lib- 
>>>> ms.cache_display_cfg.plane.UseMALLForPStateChange;
>>> +    CalculateVMRowAndSwath_params->MALLAllocatedForDCN = mode_lib- 
>>>> ms.soc.mall_allocated_for_dcn_mbytes;
>>> +    CalculateVMRowAndSwath_params->SwathWidthY = mode_lib- 
>>>> ms.SwathWidthYThisState;
>>> +    CalculateVMRowAndSwath_params->SwathWidthC = mode_lib- 
>>>> ms.SwathWidthCThisState;
>>> +    CalculateVMRowAndSwath_params->GPUVMEnable = mode_lib- 
>>>> ms.cache_display_cfg.plane.GPUVMEnable;
>>> +    CalculateVMRowAndSwath_params->HostVMEnable = mode_lib- 
>>>> ms.cache_display_cfg.plane.HostVMEnable;
>>> +    CalculateVMRowAndSwath_params->HostVMMaxNonCachedPageTableLevels 
>>> = mode_lib->ms.cache_display_cfg.plane.HostVMMaxPageTableLevels;
>>> +    CalculateVMRowAndSwath_params->GPUVMMaxPageTableLevels = 
>>> mode_lib->ms.cache_display_cfg.plane.GPUVMMaxPageTableLevels;
>>> +    CalculateVMRowAndSwath_params->GPUVMMinPageSizeKBytes = mode_lib- 
>>>> ms.cache_display_cfg.plane.GPUVMMinPageSizeKBytes;
>>> +    CalculateVMRowAndSwath_params->HostVMMinPageSize = mode_lib- 
>>>> ms.soc.hostvm_min_page_size_kbytes * 1024;
>>> +    CalculateVMRowAndSwath_params->PTEBufferModeOverrideEn = 
>>> mode_lib->ms.cache_display_cfg.plane.PTEBufferModeOverrideEn;
>>> +    CalculateVMRowAndSwath_params->PTEBufferModeOverrideVal = 
>>> mode_lib->ms.cache_display_cfg.plane.PTEBufferMode;
>>> +    CalculateVMRowAndSwath_params->PTEBufferSizeNotExceeded = 
>>> mode_lib->ms.PTEBufferSizeNotExceededPerState;
>>> +    CalculateVMRowAndSwath_params->DCCMetaBufferSizeNotExceeded = 
>>> mode_lib->ms.DCCMetaBufferSizeNotExceededPerState;
>>> +    CalculateVMRowAndSwath_params->dpte_row_width_luma_ub = s- 
>>>> dummy_integer_array[0];
>>> +    CalculateVMRowAndSwath_params->dpte_row_width_chroma_ub = s- 
>>>> dummy_integer_array[1];
>>> +    CalculateVMRowAndSwath_params->dpte_row_height_luma = mode_lib- 
>>>> ms.dpte_row_height;
>>> +    CalculateVMRowAndSwath_params->dpte_row_height_chroma = mode_lib- 
>>>> ms.dpte_row_height_chroma;
>>> +    CalculateVMRowAndSwath_params->dpte_row_height_linear_luma = s- 
>>>> dummy_integer_array[2]; // VBA_DELTA
>>> +    CalculateVMRowAndSwath_params->dpte_row_height_linear_chroma = s- 
>>>> dummy_integer_array[3]; // VBA_DELTA
>>> +    CalculateVMRowAndSwath_params->meta_req_width = s- 
>>>> dummy_integer_array[4];
>>> +    CalculateVMRowAndSwath_params->meta_req_width_chroma = s- 
>>>> dummy_integer_array[5];
>>> +    CalculateVMRowAndSwath_params->meta_req_height = s- 
>>>> dummy_integer_array[6];
>>> +    CalculateVMRowAndSwath_params->meta_req_height_chroma = s- 
>>>> dummy_integer_array[7];
>>> +    CalculateVMRowAndSwath_params->meta_row_width = s- 
>>>> dummy_integer_array[8];
>>> +    CalculateVMRowAndSwath_params->meta_row_width_chroma = s- 
>>>> dummy_integer_array[9];
>>> +    CalculateVMRowAndSwath_params->meta_row_height = mode_lib- 
>>>> ms.meta_row_height;
>>> +    CalculateVMRowAndSwath_params->meta_row_height_chroma = mode_lib- 
>>>> ms.meta_row_height_chroma;
>>> +    CalculateVMRowAndSwath_params->vm_group_bytes = s- 
>>>> dummy_integer_array[10];
>>> +    CalculateVMRowAndSwath_params->dpte_group_bytes = mode_lib- 
>>>> ms.dpte_group_bytes;
>>> +    CalculateVMRowAndSwath_params->PixelPTEReqWidthY = s- 
>>>> dummy_integer_array[11];
>>> +    CalculateVMRowAndSwath_params->PixelPTEReqHeightY = s- 
>>>> dummy_integer_array[12];
>>> +    CalculateVMRowAndSwath_params->PTERequestSizeY = s- 
>>>> dummy_integer_array[13];
>>> +    CalculateVMRowAndSwath_params->PixelPTEReqWidthC = s- 
>>>> dummy_integer_array[14];
>>> +    CalculateVMRowAndSwath_params->PixelPTEReqHeightC = s- 
>>>> dummy_integer_array[15];
>>> +    CalculateVMRowAndSwath_params->PTERequestSizeC = s- 
>>>> dummy_integer_array[16];
>>> +    CalculateVMRowAndSwath_params->dpde0_bytes_per_frame_ub_l = s- 
>>>> dummy_integer_array[17];
>>> +    CalculateVMRowAndSwath_params->meta_pte_bytes_per_frame_ub_l = s- 
>>>> dummy_integer_array[18];
>>> +    CalculateVMRowAndSwath_params->dpde0_bytes_per_frame_ub_c = s- 
>>>> dummy_integer_array[19];
>>> +    CalculateVMRowAndSwath_params->meta_pte_bytes_per_frame_ub_c = s- 
>>>> dummy_integer_array[20];
>>> +    CalculateVMRowAndSwath_params->PrefetchSourceLinesY = mode_lib- 
>>>> ms.PrefetchLinesYThisState;
>>> +    CalculateVMRowAndSwath_params->PrefetchSourceLinesC = mode_lib- 
>>>> ms.PrefetchLinesCThisState;
>>> +    CalculateVMRowAndSwath_params->VInitPreFillY = mode_lib- 
>>>> ms.PrefillY;
>>> +    CalculateVMRowAndSwath_params->VInitPreFillC = mode_lib- 
>>>> ms.PrefillC;
>>> +    CalculateVMRowAndSwath_params->MaxNumSwathY = mode_lib- 
>>>> ms.MaxNumSwY;
>>> +    CalculateVMRowAndSwath_params->MaxNumSwathC = mode_lib- 
>>>> ms.MaxNumSwC;
>>> +    CalculateVMRowAndSwath_params->meta_row_bw = mode_lib- 
>>>> ms.meta_row_bandwidth_this_state;
>>> +    CalculateVMRowAndSwath_params->dpte_row_bw = mode_lib- 
>>>> ms.dpte_row_bandwidth_this_state;
>>> +    CalculateVMRowAndSwath_params->PixelPTEBytesPerRow = mode_lib- 
>>>> ms.DPTEBytesPerRowThisState;
>>> +    CalculateVMRowAndSwath_params->PDEAndMetaPTEBytesFrame = 
>>> mode_lib->ms.PDEAndMetaPTEBytesPerFrameThisState;
>>> +    CalculateVMRowAndSwath_params->MetaRowByte = mode_lib- 
>>>> ms.MetaRowBytesThisState;
>>> +    CalculateVMRowAndSwath_params->use_one_row_for_frame = mode_lib- 
>>>> ms.use_one_row_for_frame_this_state;
>>> +    CalculateVMRowAndSwath_params->use_one_row_for_frame_flip = 
>>> mode_lib->ms.use_one_row_for_frame_flip_this_state;
>>> +    CalculateVMRowAndSwath_params->UsesMALLForStaticScreen = s- 
>>>> dummy_boolean_array[0];
>>> +    CalculateVMRowAndSwath_params->PTE_BUFFER_MODE = s- 
>>>> dummy_boolean_array[1];
>>> +    CalculateVMRowAndSwath_params->BIGK_FRAGMENT_SIZE = s- 
>>>> dummy_integer_array[21];
>>> +}
>>> +
>>>   /// @brief The Mode Support function.
>>>   dml_bool_t dml_core_mode_support(struct display_mode_lib_st *mode_lib)
>>>   {
>>> @@ -7683,69 +7753,7 @@ dml_bool_t dml_core_mode_support(struct 
>>> display_mode_lib_st *mode_lib)
>>>               s->SurfParameters[k].SwathHeightC = mode_lib- 
>>>> ms.SwathHeightCThisState[k];
>>>           }
>>> -        CalculateVMRowAndSwath_params->NumberOfActiveSurfaces = 
>>> mode_lib->ms.num_active_planes;
>>> -        CalculateVMRowAndSwath_params->myPipe = s->SurfParameters;
>>> -        CalculateVMRowAndSwath_params->SurfaceSizeInMALL = mode_lib- 
>>>> ms.SurfaceSizeInMALL;
>>> -        CalculateVMRowAndSwath_params->PTEBufferSizeInRequestsLuma = 
>>> mode_lib->ms.ip.dpte_buffer_size_in_pte_reqs_luma;
>>> -        CalculateVMRowAndSwath_params->PTEBufferSizeInRequestsChroma 
>>> = mode_lib->ms.ip.dpte_buffer_size_in_pte_reqs_chroma;
>>> -        CalculateVMRowAndSwath_params->DCCMetaBufferSizeBytes = 
>>> mode_lib->ms.ip.dcc_meta_buffer_size_bytes;
>>> -        CalculateVMRowAndSwath_params->UseMALLForStaticScreen = 
>>> mode_lib->ms.cache_display_cfg.plane.UseMALLForStaticScreen;
>>> -        CalculateVMRowAndSwath_params->UseMALLForPStateChange = 
>>> mode_lib->ms.cache_display_cfg.plane.UseMALLForPStateChange;
>>> -        CalculateVMRowAndSwath_params->MALLAllocatedForDCN = 
>>> mode_lib->ms.soc.mall_allocated_for_dcn_mbytes;
>>> -        CalculateVMRowAndSwath_params->SwathWidthY = mode_lib- 
>>>> ms.SwathWidthYThisState;
>>> -        CalculateVMRowAndSwath_params->SwathWidthC = mode_lib- 
>>>> ms.SwathWidthCThisState;
>>> -        CalculateVMRowAndSwath_params->GPUVMEnable = mode_lib- 
>>>> ms.cache_display_cfg.plane.GPUVMEnable;
>>> -        CalculateVMRowAndSwath_params->HostVMEnable = mode_lib- 
>>>> ms.cache_display_cfg.plane.HostVMEnable;
>>> -        CalculateVMRowAndSwath_params- 
>>>> HostVMMaxNonCachedPageTableLevels = mode_lib- 
>>>> ms.cache_display_cfg.plane.HostVMMaxPageTableLevels;
>>> -        CalculateVMRowAndSwath_params->GPUVMMaxPageTableLevels = 
>>> mode_lib->ms.cache_display_cfg.plane.GPUVMMaxPageTableLevels;
>>> -        CalculateVMRowAndSwath_params->GPUVMMinPageSizeKBytes = 
>>> mode_lib->ms.cache_display_cfg.plane.GPUVMMinPageSizeKBytes;
>>> -        CalculateVMRowAndSwath_params->HostVMMinPageSize = mode_lib- 
>>>> ms.soc.hostvm_min_page_size_kbytes * 1024;
>>> -        CalculateVMRowAndSwath_params->PTEBufferModeOverrideEn = 
>>> mode_lib->ms.cache_display_cfg.plane.PTEBufferModeOverrideEn;
>>> -        CalculateVMRowAndSwath_params->PTEBufferModeOverrideVal = 
>>> mode_lib->ms.cache_display_cfg.plane.PTEBufferMode;
>>> -        CalculateVMRowAndSwath_params->PTEBufferSizeNotExceeded = 
>>> mode_lib->ms.PTEBufferSizeNotExceededPerState;
>>> -        CalculateVMRowAndSwath_params->DCCMetaBufferSizeNotExceeded = 
>>> mode_lib->ms.DCCMetaBufferSizeNotExceededPerState;
>>> -        CalculateVMRowAndSwath_params->dpte_row_width_luma_ub = s- 
>>>> dummy_integer_array[0];
>>> -        CalculateVMRowAndSwath_params->dpte_row_width_chroma_ub = s- 
>>>> dummy_integer_array[1];
>>> -        CalculateVMRowAndSwath_params->dpte_row_height_luma = 
>>> mode_lib->ms.dpte_row_height;
>>> -        CalculateVMRowAndSwath_params->dpte_row_height_chroma = 
>>> mode_lib->ms.dpte_row_height_chroma;
>>> -        CalculateVMRowAndSwath_params->dpte_row_height_linear_luma = 
>>> s->dummy_integer_array[2]; // VBA_DELTA
>>> -        CalculateVMRowAndSwath_params->dpte_row_height_linear_chroma 
>>> = s->dummy_integer_array[3]; // VBA_DELTA
>>> -        CalculateVMRowAndSwath_params->meta_req_width = s- 
>>>> dummy_integer_array[4];
>>> -        CalculateVMRowAndSwath_params->meta_req_width_chroma = s- 
>>>> dummy_integer_array[5];
>>> -        CalculateVMRowAndSwath_params->meta_req_height = s- 
>>>> dummy_integer_array[6];
>>> -        CalculateVMRowAndSwath_params->meta_req_height_chroma = s- 
>>>> dummy_integer_array[7];
>>> -        CalculateVMRowAndSwath_params->meta_row_width = s- 
>>>> dummy_integer_array[8];
>>> -        CalculateVMRowAndSwath_params->meta_row_width_chroma = s- 
>>>> dummy_integer_array[9];
>>> -        CalculateVMRowAndSwath_params->meta_row_height = mode_lib- 
>>>> ms.meta_row_height;
>>> -        CalculateVMRowAndSwath_params->meta_row_height_chroma = 
>>> mode_lib->ms.meta_row_height_chroma;
>>> -        CalculateVMRowAndSwath_params->vm_group_bytes = s- 
>>>> dummy_integer_array[10];
>>> -        CalculateVMRowAndSwath_params->dpte_group_bytes = mode_lib- 
>>>> ms.dpte_group_bytes;
>>> -        CalculateVMRowAndSwath_params->PixelPTEReqWidthY = s- 
>>>> dummy_integer_array[11];
>>> -        CalculateVMRowAndSwath_params->PixelPTEReqHeightY = s- 
>>>> dummy_integer_array[12];
>>> -        CalculateVMRowAndSwath_params->PTERequestSizeY = s- 
>>>> dummy_integer_array[13];
>>> -        CalculateVMRowAndSwath_params->PixelPTEReqWidthC = s- 
>>>> dummy_integer_array[14];
>>> -        CalculateVMRowAndSwath_params->PixelPTEReqHeightC = s- 
>>>> dummy_integer_array[15];
>>> -        CalculateVMRowAndSwath_params->PTERequestSizeC = s- 
>>>> dummy_integer_array[16];
>>> -        CalculateVMRowAndSwath_params->dpde0_bytes_per_frame_ub_l = 
>>> s->dummy_integer_array[17];
>>> -        CalculateVMRowAndSwath_params->meta_pte_bytes_per_frame_ub_l 
>>> = s->dummy_integer_array[18];
>>> -        CalculateVMRowAndSwath_params->dpde0_bytes_per_frame_ub_c = 
>>> s->dummy_integer_array[19];
>>> -        CalculateVMRowAndSwath_params->meta_pte_bytes_per_frame_ub_c 
>>> = s->dummy_integer_array[20];
>>> -        CalculateVMRowAndSwath_params->PrefetchSourceLinesY = 
>>> mode_lib->ms.PrefetchLinesYThisState;
>>> -        CalculateVMRowAndSwath_params->PrefetchSourceLinesC = 
>>> mode_lib->ms.PrefetchLinesCThisState;
>>> -        CalculateVMRowAndSwath_params->VInitPreFillY = mode_lib- 
>>>> ms.PrefillY;
>>> -        CalculateVMRowAndSwath_params->VInitPreFillC = mode_lib- 
>>>> ms.PrefillC;
>>> -        CalculateVMRowAndSwath_params->MaxNumSwathY = mode_lib- 
>>>> ms.MaxNumSwY;
>>> -        CalculateVMRowAndSwath_params->MaxNumSwathC = mode_lib- 
>>>> ms.MaxNumSwC;
>>> -        CalculateVMRowAndSwath_params->meta_row_bw = mode_lib- 
>>>> ms.meta_row_bandwidth_this_state;
>>> -        CalculateVMRowAndSwath_params->dpte_row_bw = mode_lib- 
>>>> ms.dpte_row_bandwidth_this_state;
>>> -        CalculateVMRowAndSwath_params->PixelPTEBytesPerRow = 
>>> mode_lib->ms.DPTEBytesPerRowThisState;
>>> -        CalculateVMRowAndSwath_params->PDEAndMetaPTEBytesFrame = 
>>> mode_lib->ms.PDEAndMetaPTEBytesPerFrameThisState;
>>> -        CalculateVMRowAndSwath_params->MetaRowByte = mode_lib- 
>>>> ms.MetaRowBytesThisState;
>>> -        CalculateVMRowAndSwath_params->use_one_row_for_frame = 
>>> mode_lib->ms.use_one_row_for_frame_this_state;
>>> -        CalculateVMRowAndSwath_params->use_one_row_for_frame_flip = 
>>> mode_lib->ms.use_one_row_for_frame_flip_this_state;
>>> -        CalculateVMRowAndSwath_params->UsesMALLForStaticScreen = s- 
>>>> dummy_boolean_array[0];
>>> -        CalculateVMRowAndSwath_params->PTE_BUFFER_MODE = s- 
>>>> dummy_boolean_array[1];
>>> -        CalculateVMRowAndSwath_params->BIGK_FRAGMENT_SIZE = s- 
>>>> dummy_integer_array[21];
>>> +        set_vm_row_and_swath_parameters(mode_lib);
>>>           CalculateVMRowAndSwath(&mode_lib->scratch,
>>>               CalculateVMRowAndSwath_params);
>>
> 

Reply via email to