Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu/display: reduce stack size in dml32_ModeSupportAndSystemConfigurationFull()

Move more stack variable in to dummy vars structure on the heap.

Fixes stack frame size errors:
drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_32.c: In function 'dml32_ModeSupportAndSystemConfigurationFull':
drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_32.c:3833:1: error: the frame size of 2720 bytes is larger than 2048 bytes [-Werror=frame-larger-than=]
3833 | } // ModeSupportAndSystemConfigurationFull
| ^

Fixes: dda4fb85e433 ("drm/amd/display: DML changes for DCN32/321")
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
Cc: Rodrigo Siqueira Jordao <Rodrigo.Siqueira@amd.com>
Reviewed-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

+36 -44
+34 -43
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c
··· 1660 1660 1661 1661 void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib) 1662 1662 { 1663 - bool dummy_boolean[2]; 1664 - unsigned int dummy_integer[1]; 1663 + unsigned int dummy_integer[4]; 1665 1664 bool MPCCombineMethodAsNeededForPStateChangeAndVoltage; 1666 1665 bool MPCCombineMethodAsPossible; 1667 1666 enum odm_combine_mode dummy_odm_mode[DC__NUM_DPP__MAX]; ··· 1972 1973 v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[5], /* Long DETBufferSizeInKByte[] */ 1973 1974 v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[6], /* Long DETBufferSizeY[] */ 1974 1975 v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[7], /* Long DETBufferSizeC[] */ 1975 - &dummy_boolean[0], /* bool *UnboundedRequestEnabled */ 1976 - &dummy_integer[0], /* Long *CompressedBufferSizeInkByte */ 1976 + &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_boolean_array[0][0], /* bool *UnboundedRequestEnabled */ 1977 + &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[0][0], /* Long *CompressedBufferSizeInkByte */ 1977 1978 mode_lib->vba.SingleDPPViewportSizeSupportPerSurface,/* bool ViewportSizeSupportPerSurface[] */ 1978 - &dummy_boolean[1]); /* bool *ViewportSizeSupport */ 1979 + &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_boolean_array[1][0]); /* bool *ViewportSizeSupport */ 1979 1980 1980 1981 MPCCombineMethodAsNeededForPStateChangeAndVoltage = false; 1981 1982 MPCCombineMethodAsPossible = false; ··· 2505 2506 // 2506 2507 for (i = 0; i < (int) v->soc.num_states; ++i) { 2507 2508 for (j = 0; j <= 1; ++j) { 2508 - bool dummy_boolean_array[1][DC__NUM_DPP__MAX]; 2509 2509 for (k = 0; k < mode_lib->vba.NumberOfActiveSurfaces; ++k) { 2510 2510 mode_lib->vba.RequiredDPPCLKThisState[k] = mode_lib->vba.RequiredDPPCLK[i][j][k]; 2511 2511 mode_lib->vba.NoOfDPPThisState[k] = mode_lib->vba.NoOfDPP[i][j][k]; ··· 2568 2570 mode_lib->vba.DETBufferSizeCThisState, 2569 2571 &mode_lib->vba.UnboundedRequestEnabledThisState, 2570 2572 &mode_lib->vba.CompressedBufferSizeInkByteThisState, 2571 - dummy_boolean_array[0], 2573 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_boolean_array[0], 2572 2574 &mode_lib->vba.ViewportSizeSupport[i][j]); 2573 2575 2574 2576 for (k = 0; k < mode_lib->vba.NumberOfActiveSurfaces; ++k) { ··· 2706 2708 } 2707 2709 2708 2710 { 2709 - bool dummy_boolean_array[2][DC__NUM_DPP__MAX]; 2710 - unsigned int dummy_integer_array[22][DC__NUM_DPP__MAX]; 2711 - 2712 2711 dml32_CalculateVMRowAndSwath( 2713 2712 mode_lib->vba.NumberOfActiveSurfaces, 2714 2713 v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.SurfParameters, ··· 2728 2733 /* Output */ 2729 2734 mode_lib->vba.PTEBufferSizeNotExceededPerState, 2730 2735 mode_lib->vba.DCCMetaBufferSizeNotExceededPerState, 2731 - dummy_integer_array[0], 2732 - dummy_integer_array[1], 2736 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[0], 2737 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[1], 2733 2738 mode_lib->vba.dpte_row_height, 2734 2739 mode_lib->vba.dpte_row_height_chroma, 2735 - dummy_integer_array[2], 2736 - dummy_integer_array[3], 2737 - dummy_integer_array[4], 2738 - dummy_integer_array[5], 2739 - dummy_integer_array[6], 2740 - dummy_integer_array[7], 2741 - dummy_integer_array[8], 2742 - dummy_integer_array[9], 2740 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[2], 2741 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[3], 2742 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[4], 2743 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[5], 2744 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[6], 2745 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[7], 2746 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[8], 2747 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[9], 2743 2748 mode_lib->vba.meta_row_height, 2744 2749 mode_lib->vba.meta_row_height_chroma, 2745 - dummy_integer_array[10], 2750 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[10], 2746 2751 mode_lib->vba.dpte_group_bytes, 2747 - dummy_integer_array[11], 2748 - dummy_integer_array[12], 2749 - dummy_integer_array[13], 2750 - dummy_integer_array[14], 2751 - dummy_integer_array[15], 2752 - dummy_integer_array[16], 2753 - dummy_integer_array[17], 2754 - dummy_integer_array[18], 2755 - dummy_integer_array[19], 2756 - dummy_integer_array[20], 2752 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[11], 2753 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[12], 2754 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[13], 2755 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[14], 2756 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[15], 2757 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[16], 2758 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[17], 2759 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[18], 2760 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[19], 2761 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[20], 2757 2762 mode_lib->vba.PrefetchLinesYThisState, 2758 2763 mode_lib->vba.PrefetchLinesCThisState, 2759 2764 mode_lib->vba.PrefillY, ··· 2767 2772 mode_lib->vba.MetaRowBytesThisState, 2768 2773 mode_lib->vba.use_one_row_for_frame_this_state, 2769 2774 mode_lib->vba.use_one_row_for_frame_flip_this_state, 2770 - dummy_boolean_array[0], // Boolean UsesMALLForStaticScreen[] 2771 - dummy_boolean_array[1], // Boolean PTE_BUFFER_MODE[] 2772 - dummy_integer_array[21]); // Long BIGK_FRAGMENT_SIZE[] 2775 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_boolean_array[0], // Boolean UsesMALLForStaticScreen[] 2776 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_boolean_array[1], // Boolean PTE_BUFFER_MODE[] 2777 + v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_integer_array[21]); // Long BIGK_FRAGMENT_SIZE[] 2773 2778 } 2774 2779 2775 2780 for (k = 0; k < mode_lib->vba.NumberOfActiveSurfaces; ++k) { ··· 3192 3197 3193 3198 for (k = 0; k <= mode_lib->vba.NumberOfActiveSurfaces - 1; k++) { 3194 3199 DmlPipe myPipe; 3195 - unsigned int dummy_integer; 3196 3200 3197 3201 mode_lib->vba.TWait = dml32_CalculateTWait( 3198 3202 mode_lib->vba.PrefetchModePerState[i][j], ··· 3288 3294 &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single[0], // double *Tdmdl_vm 3289 3295 &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single[1], // double *Tdmdl 3290 3296 &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single[2], // double *TSetup 3291 - &dummy_integer, // unsigned int *VUpdateOffsetPix 3297 + &dummy_integer[0], // unsigned int *VUpdateOffsetPix 3292 3298 &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single[3], // unsigned int *VUpdateWidthPix 3293 3299 &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single[4]); // unsigned int *VReadyOffsetPix 3294 3300 } ··· 3317 3323 } 3318 3324 3319 3325 { 3320 - double dummy_single[2]; 3321 3326 dml32_CalculatePrefetchBandwithSupport( 3322 3327 mode_lib->vba.NumberOfActiveSurfaces, 3323 3328 mode_lib->vba.ReturnBWPerState[i][j], ··· 3339 3346 mode_lib->vba.UrgentBurstFactorCursorPre, 3340 3347 3341 3348 /* output */ 3342 - &dummy_single[0], // Single *PrefetchBandwidth 3343 - &dummy_single[1], // Single *FractionOfUrgentBandwidth 3349 + &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single[0], // Single *PrefetchBandwidth 3350 + &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single[1], // Single *FractionOfUrgentBandwidth 3344 3351 &mode_lib->vba.PrefetchSupported[i][j]); 3345 3352 } 3346 3353 ··· 3450 3457 } 3451 3458 3452 3459 { 3453 - double dummy_single[2]; 3454 3460 dml32_CalculateImmediateFlipBandwithSupport(mode_lib->vba.NumberOfActiveSurfaces, 3455 3461 mode_lib->vba.ReturnBWPerState[i][j], 3456 3462 mode_lib->vba.ImmediateFlipRequirement, ··· 3472 3480 mode_lib->vba.UrgentBurstFactorCursorPre, 3473 3481 3474 3482 /* output */ 3475 - &dummy_single[0], // Single *TotalBandwidth 3476 - &dummy_single[1], // Single *FractionOfUrgentBandwidth 3483 + &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single[0], // Single *TotalBandwidth 3484 + &v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.dummy_single[1], // Single *FractionOfUrgentBandwidth 3477 3485 &mode_lib->vba.ImmediateFlipSupportedForState[i][j]); // Boolean *ImmediateFlipBandwidthSupport 3478 3486 } 3479 3487 ··· 3526 3534 v->dummy_vars.dml32_ModeSupportAndSystemConfigurationFull.mSOCParameters.SMNLatency = mode_lib->vba.SMNLatency; 3527 3535 3528 3536 { 3529 - unsigned int dummy_integer[4]; 3530 3537 dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport( 3531 3538 mode_lib->vba.USRRetrainingRequiredFinal, 3532 3539 mode_lib->vba.UsesMALLForPStateChange,
+2 -1
drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.h
··· 196 196 }; 197 197 198 198 struct dml32_ModeSupportAndSystemConfigurationFull { 199 - unsigned int dummy_integer_array[8][DC__NUM_DPP__MAX]; 199 + unsigned int dummy_integer_array[22][DC__NUM_DPP__MAX]; 200 200 double dummy_double_array[2][DC__NUM_DPP__MAX]; 201 201 DmlPipe SurfParameters[DC__NUM_DPP__MAX]; 202 202 double dummy_single[5]; ··· 207 207 double DSTYAfterScaler[DC__NUM_DPP__MAX]; 208 208 double DSTXAfterScaler[DC__NUM_DPP__MAX]; 209 209 double MaxTotalVActiveRDBandwidth; 210 + bool dummy_boolean_array[2][DC__NUM_DPP__MAX]; 210 211 }; 211 212 212 213 struct dummy_vars {