]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/display: DML21 Reintegration
authorAustin Zheng <Austin.Zheng@amd.com>
Wed, 11 Jun 2025 14:09:51 +0000 (10:09 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 24 Jun 2025 13:58:07 +0000 (09:58 -0400)
Update logging macros for detailed debugging
Update structs to contain more detailed information
Add HDMI 16 and 20 Gbps rates

Reviewed-by: Alvin Lee <alvin.lee2@amd.com>
Signed-off-by: Austin Zheng <Austin.Zheng@amd.com>
Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dml2/dml21/inc/dml_top_dchub_registers.h
drivers/gpu/drm/amd/display/dc/dml2/dml21/inc/dml_top_display_cfg_types.h
drivers/gpu/drm/amd/display/dc/dml2/dml21/inc/dml_top_soc_parameter_types.h
drivers/gpu/drm/amd/display/dc/dml2/dml21/inc/dml_top_types.h
drivers/gpu/drm/amd/display/dc/dml2/dml21/src/dml2_core/dml2_core_dcn4_calcs.c
drivers/gpu/drm/amd/display/dc/dml2/dml21/src/dml2_core/dml2_core_shared_types.h
drivers/gpu/drm/amd/display/dc/dml2/dml21/src/inc/dml2_debug.h
drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h

index 84c90050668c1921991ce5a4b797469d40ccc228..b05030926ce854575f902c2442b3a49087de716c 100644 (file)
@@ -46,6 +46,7 @@ struct dml2_display_dlg_regs {
        uint32_t dst_y_delta_drq_limit;
        uint32_t refcyc_per_vm_dmdata;
        uint32_t dmdata_dl_delta;
+       uint32_t dst_y_svp_drq_limit;
 
        // MRQ
        uint32_t refcyc_per_meta_chunk_vblank_l;
index 255f05de362cf959bdc8f13b6fce109a750f7e5f..e8dc6471c0becbb10c9b5b7563cda25cde24273c 100644 (file)
@@ -222,6 +222,7 @@ struct dml2_composition_cfg {
 
        struct {
                bool enabled;
+               bool upsp_enabled;
                struct {
                        double h_ratio;
                        double v_ratio;
@@ -426,6 +427,7 @@ struct dml2_stream_parameters {
 
 struct dml2_display_cfg {
        bool gpuvm_enable;
+       bool ffbm_enable;
        bool hostvm_enable;
 
        // Allocate DET proportionally between streams based on pixel rate
index 1f5eaf79a8d1405277e51d1a02dce0f0cba395d7..8c9f414aa6bf9c3e456ae6708ca93f55d2345ad5 100644 (file)
@@ -93,6 +93,7 @@ struct dml2_soc_power_management_parameters {
        double dram_clk_change_write_only_us;
        double fclk_change_blackout_us;
        double g7_ppt_blackout_us;
+       double g7_temperature_read_blackout_us;
        double stutter_enter_plus_exit_latency_us;
        double stutter_exit_latency_us;
        double z8_stutter_enter_plus_exit_latency_us;
index bcb99a155011133ae5f90d843f6869c707a85d28..98c0234e2f474e004d3eeaa739f21613ee0d98d8 100644 (file)
@@ -53,7 +53,9 @@ enum dml2_output_type_and_rate__rate {
        dml2_output_rate_hdmi_rate_6x4 = 9,
        dml2_output_rate_hdmi_rate_8x4 = 10,
        dml2_output_rate_hdmi_rate_10x4 = 11,
-       dml2_output_rate_hdmi_rate_12x4 = 12
+       dml2_output_rate_hdmi_rate_12x4 = 12,
+       dml2_output_rate_hdmi_rate_16x4 = 13,
+       dml2_output_rate_hdmi_rate_20x4 = 14
 };
 
 struct dml2_pmo_options {
index 8d4e5a91af06ef50e2613b1e55100a3e57cd114c..b9cff2198511091c084efeeb6bcfba1ac88b0e93 100644 (file)
@@ -13069,6 +13069,10 @@ void dml2_core_calcs_get_informative(const struct dml2_core_internal_display_mod
                        out->informative.mode_support_info.OutputRate[k] = dml2_output_rate_hdmi_rate_10x4;
                else if (mode_lib->ms.support.OutputRate[k] == dml2_core_internal_output_rate_hdmi_rate_12x4)
                        out->informative.mode_support_info.OutputRate[k] = dml2_output_rate_hdmi_rate_12x4;
+               else if (mode_lib->ms.support.OutputRate[k] == dml2_core_internal_output_rate_hdmi_rate_16x4)
+                       out->informative.mode_support_info.OutputRate[k] = dml2_output_rate_hdmi_rate_16x4;
+               else if (mode_lib->ms.support.OutputRate[k] == dml2_core_internal_output_rate_hdmi_rate_20x4)
+                       out->informative.mode_support_info.OutputRate[k] = dml2_output_rate_hdmi_rate_20x4;
 
                out->informative.mode_support_info.AlignedYPitch[k] = mode_lib->ms.support.AlignedYPitch[k];
                out->informative.mode_support_info.AlignedCPitch[k] = mode_lib->ms.support.AlignedCPitch[k];
index fb57fe4592274a2bfb63e324ea51728d9e6b5fdb..28687565ac222ff0c9d670ac806afcfeb0c396d9 100644 (file)
@@ -102,6 +102,7 @@ struct dml2_core_internal_DmlPipe {
        double DCFClkDeepSleep;
        unsigned int DPPPerSurface;
        bool ScalerEnabled;
+       bool UPSPEnabled;
        enum dml2_rotation_angle RotationAngle;
        bool mirrored;
        unsigned int ViewportHeight;
@@ -186,7 +187,9 @@ enum dml2_core_internal_output_type_rate {
        dml2_core_internal_output_rate_hdmi_rate_6x4 = 9,
        dml2_core_internal_output_rate_hdmi_rate_8x4 = 10,
        dml2_core_internal_output_rate_hdmi_rate_10x4 = 11,
-       dml2_core_internal_output_rate_hdmi_rate_12x4 = 12
+       dml2_core_internal_output_rate_hdmi_rate_12x4 = 12,
+       dml2_core_internal_output_rate_hdmi_rate_16x4 = 13,
+       dml2_core_internal_output_rate_hdmi_rate_20x4 = 14
 };
 
 struct dml2_core_internal_watermarks {
@@ -260,12 +263,14 @@ struct dml2_core_internal_mode_support_info {
        bool AvgBandwidthSupport;
        bool UrgVactiveBandwidthSupport;
        bool EnoughUrgentLatencyHidingSupport;
+       bool PrefetchScheduleSupported;
        bool PrefetchSupported;
        bool PrefetchBandwidthSupported;
        bool DynamicMetadataSupported;
        bool VRatioInPrefetchSupported;
        bool DISPCLK_DPPCLK_Support;
        bool TotalAvailablePipesSupport;
+       bool ODMSupport;
        bool ModeSupport;
        bool ViewportSizeSupport;
 
@@ -314,9 +319,7 @@ struct dml2_core_internal_mode_support_info {
 
        double non_urg_bandwidth_required[dml2_core_internal_soc_state_max][dml2_core_internal_bw_max]; // same as urg_bandwidth, except not scaled by urg burst factor
        double non_urg_bandwidth_required_flip[dml2_core_internal_soc_state_max][dml2_core_internal_bw_max];
-
        bool avg_bandwidth_support_ok[dml2_core_internal_soc_state_max][dml2_core_internal_bw_max];
-
        double max_urgent_latency_us;
        double max_non_urgent_latency_us;
        double avg_non_urgent_latency_us;
@@ -330,6 +333,7 @@ struct dml2_core_internal_mode_support_info {
 
        struct dml2_core_internal_watermarks watermarks;
        bool dcfclk_support;
+       bool qos_bandwidth_support;
 };
 
 struct dml2_core_internal_mode_support {
@@ -397,9 +401,13 @@ struct dml2_core_internal_mode_support {
        double TWait[DML2_MAX_PLANES];
 
        bool UnboundedRequestEnabled;
+       unsigned int compbuf_reserved_space_64b;
+       bool hw_debug5;
        unsigned int CompressedBufferSizeInkByte;
        double VRatioPreY[DML2_MAX_PLANES];
        double VRatioPreC[DML2_MAX_PLANES];
+       unsigned int req_per_swath_ub_l[DML2_MAX_PLANES];
+       unsigned int req_per_swath_ub_c[DML2_MAX_PLANES];
        unsigned int swath_width_luma_ub[DML2_MAX_PLANES];
        unsigned int swath_width_chroma_ub[DML2_MAX_PLANES];
        unsigned int RequiredSlots[DML2_MAX_PLANES];
@@ -420,8 +428,8 @@ struct dml2_core_internal_mode_support {
        double dst_y_prefetch[DML2_MAX_PLANES];
        double LinesForVM[DML2_MAX_PLANES];
        double LinesForDPTERow[DML2_MAX_PLANES];
-       double SwathWidthYSingleDPP[DML2_MAX_PLANES];
-       double SwathWidthCSingleDPP[DML2_MAX_PLANES];
+       unsigned int SwathWidthYSingleDPP[DML2_MAX_PLANES];
+       unsigned int SwathWidthCSingleDPP[DML2_MAX_PLANES];
        unsigned int BytePerPixelY[DML2_MAX_PLANES];
        unsigned int BytePerPixelC[DML2_MAX_PLANES];
        double BytePerPixelInDETY[DML2_MAX_PLANES];
@@ -472,6 +480,40 @@ struct dml2_core_internal_mode_support {
        double mall_prefetch_sdp_overhead_factor[DML2_MAX_PLANES]; // overhead to the imall or phantom pipe
        double mall_prefetch_dram_overhead_factor[DML2_MAX_PLANES];
 
+       bool is_using_mall_for_ss[DML2_MAX_PLANES];
+       unsigned int meta_row_width_chroma[DML2_MAX_PLANES];
+       unsigned int PixelPTEReqHeightC[DML2_MAX_PLANES];
+       bool PTE_BUFFER_MODE[DML2_MAX_PLANES];
+       unsigned int meta_req_height_chroma[DML2_MAX_PLANES];
+       unsigned int meta_pte_bytes_per_frame_ub_c[DML2_MAX_PLANES];
+       unsigned int dpde0_bytes_per_frame_ub_c[DML2_MAX_PLANES];
+       unsigned int dpte_row_width_luma_ub[DML2_MAX_PLANES];
+       unsigned int meta_req_width[DML2_MAX_PLANES];
+       unsigned int meta_row_width[DML2_MAX_PLANES];
+       unsigned int PixelPTEReqWidthY[DML2_MAX_PLANES];
+       unsigned int dpte_row_height_linear[DML2_MAX_PLANES];
+       unsigned int PTERequestSizeY[DML2_MAX_PLANES];
+       unsigned int dpte_row_width_chroma_ub[DML2_MAX_PLANES];
+       unsigned int PixelPTEReqWidthC[DML2_MAX_PLANES];
+       unsigned int meta_pte_bytes_per_frame_ub_l[DML2_MAX_PLANES];
+       unsigned int dpte_row_height_linear_chroma[DML2_MAX_PLANES];
+       unsigned int PTERequestSizeC[DML2_MAX_PLANES];
+       unsigned int meta_req_height[DML2_MAX_PLANES];
+       unsigned int dpde0_bytes_per_frame_ub_l[DML2_MAX_PLANES];
+       unsigned int meta_req_width_chroma[DML2_MAX_PLANES];
+       unsigned int PixelPTEReqHeightY[DML2_MAX_PLANES];
+       unsigned int BIGK_FRAGMENT_SIZE[DML2_MAX_PLANES];
+       unsigned int vm_group_bytes[DML2_MAX_PLANES];
+       unsigned int VReadyOffsetPix[DML2_MAX_PLANES];
+       unsigned int VUpdateOffsetPix[DML2_MAX_PLANES];
+       unsigned int VUpdateWidthPix[DML2_MAX_PLANES];
+       double TSetup[DML2_MAX_PLANES];
+       double Tdmdl_vm_raw[DML2_MAX_PLANES];
+       double Tdmdl_raw[DML2_MAX_PLANES];
+       unsigned int VStartupMin[DML2_MAX_PLANES]; /// <brief Minimum vstartup to meet the prefetch schedule (i.e. the prefetch solution can be found at this vstartup time); not the actual global sync vstartup pos.
+       double MaxActiveDRAMClockChangeLatencySupported[DML2_MAX_PLANES];
+       double MaxActiveFCLKChangeLatencySupported;
+
        // Backend
        bool RequiresDSC[DML2_MAX_PLANES];
        bool RequiresFEC[DML2_MAX_PLANES];
@@ -489,6 +531,7 @@ struct dml2_core_internal_mode_support {
        enum dml2_odm_mode ODMModeDSC;
        double RequiredDISPCLKPerSurfaceNoDSC;
        double RequiredDISPCLKPerSurfaceDSC;
+       unsigned int EstimatedNumberOfDSCSlices[DML2_MAX_PLANES];
 
        // Bandwidth Related Info
        double BandwidthAvailableForImmediateFlip;
@@ -581,6 +624,7 @@ struct dml2_core_internal_mode_support {
 
        unsigned int tdlut_pte_bytes_per_frame[DML2_MAX_PLANES];
        unsigned int tdlut_bytes_per_frame[DML2_MAX_PLANES];
+       unsigned int tdlut_groups_per_2row_ub[DML2_MAX_PLANES];
        double tdlut_opt_time[DML2_MAX_PLANES];
        double tdlut_drain_time[DML2_MAX_PLANES];
        unsigned int tdlut_bytes_per_group[DML2_MAX_PLANES];
@@ -592,6 +636,8 @@ struct dml2_core_internal_mode_support {
 
        unsigned int DSTYAfterScaler[DML2_MAX_PLANES];
        unsigned int DSTXAfterScaler[DML2_MAX_PLANES];
+
+       enum dml2_pstate_method pstate_switch_modes[DML2_MAX_PLANES];
 };
 
 /// @brief A mega structure that houses various info for model programming step.
@@ -653,6 +699,8 @@ struct dml2_core_internal_mode_program {
        unsigned int MacroTileHeightC[DML2_MAX_PLANES];
        unsigned int MacroTileWidthY[DML2_MAX_PLANES];
        unsigned int MacroTileWidthC[DML2_MAX_PLANES];
+       double MaximumSwathWidthLuma[DML2_MAX_PLANES];
+       double MaximumSwathWidthChroma[DML2_MAX_PLANES];
 
        bool surf_linear128_l[DML2_MAX_PLANES];
        bool surf_linear128_c[DML2_MAX_PLANES];
@@ -685,6 +733,14 @@ struct dml2_core_internal_mode_program {
        double UrgentBurstFactorChroma[DML2_MAX_PLANES];
        double UrgentBurstFactorChromaPre[DML2_MAX_PLANES];
 
+       double MaximumSwathWidthInLineBufferLuma;
+       double MaximumSwathWidthInLineBufferChroma;
+
+       unsigned int vmpg_width_y[DML2_MAX_PLANES];
+       unsigned int vmpg_height_y[DML2_MAX_PLANES];
+       unsigned int vmpg_width_c[DML2_MAX_PLANES];
+       unsigned int vmpg_height_c[DML2_MAX_PLANES];
+
        double meta_row_bw[DML2_MAX_PLANES];
        unsigned int meta_row_bytes[DML2_MAX_PLANES];
        unsigned int meta_req_width[DML2_MAX_PLANES];
@@ -706,7 +762,9 @@ struct dml2_core_internal_mode_program {
        unsigned int PTERequestSizeC[DML2_MAX_PLANES];
 
        double TWait[DML2_MAX_PLANES];
+       double Tdmdl_vm_raw[DML2_MAX_PLANES];
        double Tdmdl_vm[DML2_MAX_PLANES];
+       double Tdmdl_raw[DML2_MAX_PLANES];
        double Tdmdl[DML2_MAX_PLANES];
        double TSetup[DML2_MAX_PLANES];
        unsigned int dpde0_bytes_per_frame_ub_l[DML2_MAX_PLANES];
@@ -780,6 +838,8 @@ struct dml2_core_internal_mode_program {
 
        // Support
        bool UrgVactiveBandwidthSupport;
+       bool PrefetchScheduleSupported;
+       bool UrgentBandwidthSupport;
        bool PrefetchModeSupported; // <brief Is the prefetch mode (bandwidth and latency) supported
        bool ImmediateFlipSupported;
        bool ImmediateFlipSupportedForPipe[DML2_MAX_PLANES];
@@ -875,7 +935,7 @@ struct dml2_core_internal_mode_program {
        // RQ registers
        bool PTE_BUFFER_MODE[DML2_MAX_PLANES];
        unsigned int BIGK_FRAGMENT_SIZE[DML2_MAX_PLANES];
-
+       double VActiveLatencyHidingUs[DML2_MAX_PLANES];
        unsigned int SubViewportLinesNeededInMALL[DML2_MAX_PLANES];
        bool is_using_mall_for_ss[DML2_MAX_PLANES];
 
@@ -1088,10 +1148,10 @@ struct dml2_core_calcs_mode_programming_locals {
        double dummy_bw[dml2_core_internal_soc_state_max][dml2_core_internal_bw_max];
        double surface_dummy_bw[dml2_core_internal_soc_state_max][dml2_core_internal_bw_max][DML2_MAX_PLANES];
        double surface_dummy_bw0[dml2_core_internal_soc_state_max][dml2_core_internal_bw_max][DML2_MAX_PLANES];
-       unsigned int dummy_integer_array[2][DML2_MAX_PLANES];
+       unsigned int dummy_integer_array[4][DML2_MAX_PLANES];
        enum dml2_output_encoder_class dummy_output_encoder_array[DML2_MAX_PLANES];
        double dummy_single_array[2][DML2_MAX_PLANES];
-       unsigned int dummy_long_array[4][DML2_MAX_PLANES];
+       unsigned int dummy_long_array[8][DML2_MAX_PLANES];
        bool dummy_boolean_array[2][DML2_MAX_PLANES];
        bool dummy_boolean[2];
        double dummy_single[2];
@@ -1239,6 +1299,7 @@ struct dml2_core_calcs_CalculateVMRowAndSwath_params {
        unsigned int HostVMMinPageSize;
        unsigned int DCCMetaBufferSizeBytes;
        bool mrq_present;
+       enum dml2_pstate_method pstate_switch_modes[DML2_MAX_PLANES];
 
        // Output
        bool *PTEBufferSizeNotExceeded;
@@ -1504,6 +1565,7 @@ struct dml2_core_shared_CalculateFlipSchedule_locals {
 
 struct dml2_core_shared_rq_dlg_get_dlg_reg_locals {
        unsigned int plane_idx;
+       unsigned int stream_idx;
        enum dml2_source_format_class source_format;
        const struct dml2_timing_cfg *timing;
        bool dual_plane;
@@ -1711,6 +1773,9 @@ struct dml2_core_calcs_CalculateSwathAndDETConfiguration_params {
        double *BytePerPixDETC;
        unsigned int *DPPPerSurface;
        bool mrq_present;
+       unsigned int dummy[2][DML2_MAX_PLANES];
+       unsigned int swath_width_luma_ub_single_dpp[DML2_MAX_PLANES];
+       unsigned int swath_width_chroma_ub_single_dpp[DML2_MAX_PLANES];
 
        // output
        unsigned int *req_per_swath_ub_l;
@@ -1728,6 +1793,8 @@ struct dml2_core_calcs_CalculateSwathAndDETConfiguration_params {
        unsigned int *DETBufferSizeC;
        unsigned int *full_swath_bytes_l;
        unsigned int *full_swath_bytes_c;
+       unsigned int *full_swath_bytes_single_dpp_l;
+       unsigned int *full_swath_bytes_single_dpp_c;
        bool *UnboundedRequestEnabled;
        unsigned int *compbuf_reserved_space_64b;
        unsigned int *CompressedBufferSizeInkByte;
index b226225103c34aea3b0a5c2cbf87dea72c6184b4..611c80f4f1bf141d1cbab33ebc551705d59af1e9 100644 (file)
 #define DML_LOG_LEVEL_DEFAULT DML_LOG_LEVEL_WARN
 #define DML_LOG_INTERNAL(fmt, ...) dm_output_to_console(fmt, ## __VA_ARGS__)
 
-/* ASSERT with message output */
-#define DML_ASSERT_MSG(condition, fmt, ...)                                                            \
-       do {                                                                                            \
-               if (!(condition)) {                                                                     \
-                       DML_LOG_ERROR("DML ASSERT hit in %s line %d\n", __func__, __LINE__);    \
-                       DML_LOG_ERROR(fmt, ## __VA_ARGS__);                                             \
-                       DML_ASSERT(condition);                                                          \
-               }                                                                                       \
-       } while (0)
+/* private helper macros */
+#define _BOOL_FORMAT(field) "%s", field ? "true" : "false"
+#define _UINT_FORMAT(field) "%u", field
+#define _INT_FORMAT(field) "%d", field
+#define _DOUBLE_FORMAT(field) "%lf", field
+#define _ELEMENT_FUNC "function"
+#define _ELEMENT_COMP_IF "component_interface"
+#define _ELEMENT_TOP_IF "top_interface"
+#define _LOG_ENTRY(element) do {               \
+       DML_LOG_INTERNAL("<"element" name=\""); \
+       DML_LOG_INTERNAL(__func__);             \
+       DML_LOG_INTERNAL("\">\n");              \
+} while (0)
+#define _LOG_EXIT(element) DML_LOG_INTERNAL("</"element">\n")
+#define _LOG_SCALAR(field, format) do {                                                \
+       DML_LOG_INTERNAL(#field" = "format(field));                             \
+       DML_LOG_INTERNAL("\n");                                                 \
+} while (0)
+#define _LOG_ARRAY(field, size, format) do {                                   \
+       DML_LOG_INTERNAL(#field " = [");                                        \
+       for (int _i = 0; _i < (int) size; _i++) {                               \
+               DML_LOG_INTERNAL(format(field[_i]));                            \
+               if (_i + 1 == (int) size)                                       \
+                       DML_LOG_INTERNAL("]\n");                                \
+               else                                                            \
+                       DML_LOG_INTERNAL(", ");                                 \
+}} while (0)
+#define _LOG_2D_ARRAY(field, size0, size1, format) do {                                \
+       DML_LOG_INTERNAL(#field" = [");                                         \
+       for (int _i = 0; _i < (int) size0; _i++) {                              \
+               DML_LOG_INTERNAL("\n\t[");                                      \
+               for (int _j = 0; _j < (int) size1; _j++) {                      \
+                       DML_LOG_INTERNAL(format(field[_i][_j]));                \
+                       if (_j + 1 == (int) size1)                              \
+                               DML_LOG_INTERNAL("]");                          \
+                       else                                                    \
+                               DML_LOG_INTERNAL(", ");                         \
+               }                                                               \
+               if (_i + 1 == (int) size0)                                      \
+                       DML_LOG_INTERNAL("]\n");                                \
+               else                                                            \
+                       DML_LOG_INTERNAL(", ");                                 \
+       }                                                                       \
+} while (0)
+#define _LOG_3D_ARRAY(field, size0, size1, size2, format) do {                 \
+       DML_LOG_INTERNAL(#field" = [");                                         \
+       for (int _i = 0; _i < (int) size0; _i++) {                              \
+               DML_LOG_INTERNAL("\n\t[");                                      \
+               for (int _j = 0; _j < (int) size1; _j++) {                      \
+                       DML_LOG_INTERNAL("[");                                  \
+                       for (int _k = 0; _k < (int) size2; _k++) {              \
+                               DML_LOG_INTERNAL(format(field[_i][_j][_k]));    \
+                               if (_k + 1 == (int) size2)                      \
+                                       DML_LOG_INTERNAL("]");                  \
+                               else                                            \
+                                       DML_LOG_INTERNAL(", ");                 \
+                       }                                                       \
+                       if (_j + 1 == (int) size1)                              \
+                               DML_LOG_INTERNAL("]");                          \
+                       else                                                    \
+                               DML_LOG_INTERNAL(", ");                         \
+               }                                                               \
+               if (_i + 1 == (int) size0)                                      \
+                       DML_LOG_INTERNAL("]\n");                                \
+               else                                                            \
+                       DML_LOG_INTERNAL(", ");                                 \
+       }                                                                       \
+} while (0)
 
 /* fatal errors for unrecoverable DML states until a full reset */
 #define DML_LOG_LEVEL_FATAL 0
@@ -28,7 +87,7 @@
 #define DML_LOG_LEVEL_WARN 2
 /* high level tracing of DML interfaces */
 #define DML_LOG_LEVEL_INFO 3
-/* detailed tracing of DML internal components */
+/* tracing of DML internal executions */
 #define DML_LOG_LEVEL_DEBUG 4
 /* detailed tracing of DML calculation procedure */
 #define DML_LOG_LEVEL_VERBOSE 5
 #define DML_LOG_LEVEL DML_LOG_LEVEL_DEFAULT
 #endif /* #ifndef DML_LOG_LEVEL */
 
+/* public macros for DML_LOG_LEVEL_FATAL and up */
 #define DML_LOG_FATAL(fmt, ...) DML_LOG_INTERNAL("[DML FATAL] " fmt, ## __VA_ARGS__)
+
+/* public macros for DML_LOG_LEVEL_ERROR and up */
 #if DML_LOG_LEVEL >= DML_LOG_LEVEL_ERROR
 #define DML_LOG_ERROR(fmt, ...) DML_LOG_INTERNAL("[DML ERROR] "fmt, ## __VA_ARGS__)
+#define DML_ASSERT_MSG(condition, fmt, ...)                                                            \
+       do {                                                                                            \
+               if (!(condition)) {                                                                     \
+                       DML_LOG_ERROR("ASSERT hit in %s line %d\n", __func__, __LINE__);                \
+                       DML_LOG_ERROR(fmt, ## __VA_ARGS__);                                             \
+                       DML_ASSERT(condition);                                                          \
+               }                                                                                       \
+       } while (0)
 #else
 #define DML_LOG_ERROR(fmt, ...) ((void)0)
+#define DML_ASSERT_MSG(condition, fmt, ...) ((void)0)
 #endif
+
+/* public macros for DML_LOG_LEVEL_WARN and up */
 #if DML_LOG_LEVEL >= DML_LOG_LEVEL_WARN
 #define DML_LOG_WARN(fmt, ...) DML_LOG_INTERNAL("[DML WARN] "fmt, ## __VA_ARGS__)
 #else
 #define DML_LOG_WARN(fmt, ...) ((void)0)
 #endif
+
+/* public macros for DML_LOG_LEVEL_INFO and up */
 #if DML_LOG_LEVEL >= DML_LOG_LEVEL_INFO
 #define DML_LOG_INFO(fmt, ...) DML_LOG_INTERNAL("[DML INFO] "fmt, ## __VA_ARGS__)
+#define DML_LOG_TOP_IF_ENTER() _LOG_ENTRY(_ELEMENT_TOP_IF)
+#define DML_LOG_TOP_IF_EXIT() _LOG_EXIT(_ELEMENT_TOP_IF)
 #else
 #define DML_LOG_INFO(fmt, ...) ((void)0)
+#define DML_LOG_TOP_IF_ENTER() ((void)0)
+#define DML_LOG_TOP_IF_EXIT() ((void)0)
 #endif
+
+/* public macros for DML_LOG_LEVEL_DEBUG and up */
 #if DML_LOG_LEVEL >= DML_LOG_LEVEL_DEBUG
-#define DML_LOG_DEBUG(fmt, ...) DML_LOG_INTERNAL("[DML DEBUG] "fmt, ## __VA_ARGS__)
+#define DML_LOG_DEBUG(fmt, ...) DML_LOG_INTERNAL(fmt, ## __VA_ARGS__)
+#define DML_LOG_COMP_IF_ENTER() _LOG_ENTRY(_ELEMENT_COMP_IF)
+#define DML_LOG_COMP_IF_EXIT() _LOG_EXIT(_ELEMENT_COMP_IF)
+#define DML_LOG_FUNC_ENTER() _LOG_ENTRY(_ELEMENT_FUNC)
+#define DML_LOG_FUNC_EXIT() _LOG_EXIT(_ELEMENT_FUNC)
+#define DML_LOG_DEBUG_BOOL(field) _LOG_SCALAR(field, _BOOL_FORMAT)
+#define DML_LOG_DEBUG_UINT(field) _LOG_SCALAR(field, _UINT_FORMAT)
+#define DML_LOG_DEBUG_INT(field) _LOG_SCALAR(field, _INT_FORMAT)
+#define DML_LOG_DEBUG_DOUBLE(field) _LOG_SCALAR(field, _DOUBLE_FORMAT)
+#define DML_LOG_DEBUG_ARRAY_BOOL(field, size) _LOG_ARRAY(field, size, _BOOL_FORMAT)
+#define DML_LOG_DEBUG_ARRAY_UINT(field, size) _LOG_ARRAY(field, size, _UINT_FORMAT)
+#define DML_LOG_DEBUG_ARRAY_INT(field, size) _LOG_ARRAY(field, size, _INT_FORMAT)
+#define DML_LOG_DEBUG_ARRAY_DOUBLE(field, size) _LOG_ARRAY(field, size, _DOUBLE_FORMAT)
+#define DML_LOG_DEBUG_2D_ARRAY_BOOL(field, size0, size1) _LOG_2D_ARRAY(field, size0, size1, _BOOL_FORMAT)
+#define DML_LOG_DEBUG_2D_ARRAY_UINT(field, size0, size1) _LOG_2D_ARRAY(field, size0, size1, _UINT_FORMAT)
+#define DML_LOG_DEBUG_2D_ARRAY_INT(field, size0, size1) _LOG_2D_ARRAY(field, size0, size1, _INT_FORMAT)
+#define DML_LOG_DEBUG_2D_ARRAY_DOUBLE(field, size0, size1) _LOG_2D_ARRAY(field, size0, size1, _DOUBLE_FORMAT)
+#define DML_LOG_DEBUG_3D_ARRAY_BOOL(field, size0, size1, size2) _LOG_3D_ARRAY(field, size0, size1, size2, _BOOL_FORMAT)
+#define DML_LOG_DEBUG_3D_ARRAY_UINT(field, size0, size1, size2) _LOG_3D_ARRAY(field, size0, size1, size2, _UINT_FORMAT)
+#define DML_LOG_DEBUG_3D_ARRAY_INT(field, size0, size1, size2) _LOG_3D_ARRAY(field, size0, size1, size2, _INT_FORMAT)
+#define DML_LOG_DEBUG_3D_ARRAY_DOUBLE(field, size0, size1, size2) _LOG_3D_ARRAY(field, size0, size1, size2, _DOUBLE_FORMAT)
 #else
 #define DML_LOG_DEBUG(fmt, ...) ((void)0)
+#define DML_LOG_COMP_IF_ENTER() ((void)0)
+#define DML_LOG_COMP_IF_EXIT() ((void)0)
+#define DML_LOG_FUNC_ENTER() ((void)0)
+#define DML_LOG_FUNC_EXIT() ((void)0)
+#define DML_LOG_DEBUG_BOOL(field) ((void)0)
+#define DML_LOG_DEBUG_UINT(field) ((void)0)
+#define DML_LOG_DEBUG_INT(field) ((void)0)
+#define DML_LOG_DEBUG_DOUBLE(field) ((void)0)
+#define DML_LOG_DEBUG_ARRAY_BOOL(field, size) ((void)0)
+#define DML_LOG_DEBUG_ARRAY_UINT(field, size) ((void)0)
+#define DML_LOG_DEBUG_ARRAY_INT(field, size) ((void)0)
+#define DML_LOG_DEBUG_ARRAY_DOUBLE(field, size) ((void)0)
+#define DML_LOG_DEBUG_2D_ARRAY_BOOL(field, size0, size1) ((void)0)
+#define DML_LOG_DEBUG_2D_ARRAY_UINT(field, size0, size1) ((void)0)
+#define DML_LOG_DEBUG_2D_ARRAY_INT(field, size0, size1) ((void)0)
+#define DML_LOG_DEBUG_2D_ARRAY_DOUBLE(field, size0, size1) ((void)0)
+#define DML_LOG_DEBUG_3D_ARRAY_BOOL(field, size0, size1, size2) ((void)0)
+#define DML_LOG_DEBUG_3D_ARRAY_UINT(field, size0, size1, size2) ((void)0)
+#define DML_LOG_DEBUG_3D_ARRAY_INT(field, size0, size1, size2) ((void)0)
+#define DML_LOG_DEBUG_3D_ARRAY_DOUBLE(field, size0, size1, size2) ((void)0)
 #endif
+
+/* public macros for DML_LOG_LEVEL_VERBOSE */
 #if DML_LOG_LEVEL >= DML_LOG_LEVEL_VERBOSE
-#define DML_LOG_VERBOSE(fmt, ...) DML_LOG_INTERNAL("[DML VERBOSE] "fmt, ## __VA_ARGS__)
+#define DML_LOG_VERBOSE(fmt, ...) DML_LOG_INTERNAL(fmt, ## __VA_ARGS__)
 #else
 #define DML_LOG_VERBOSE(fmt, ...) ((void)0)
-#endif
+#endif /* #if DML_LOG_LEVEL >= DML_LOG_LEVEL_VERBOSE */
 #endif /* __DML2_DEBUG_H__ */
index 75e08efc582d5681fb43c00c46c6e6dd3db36f14..569644bea641d6fa3cf6f0396975d65f0ff18d04 100644 (file)
@@ -303,9 +303,11 @@ union dmub_addr {
 /* Flattened structure containing SOC BB parameters stored in the VBIOS
  * It is not practical to store the entire bounding box in VBIOS since the bounding box struct can gain new parameters.
  * This also prevents alighment issues when new parameters are added to the SoC BB.
+ * The following parameters should be added since these values can't be obtained elsewhere:
+ * -dml2_soc_power_management_parameters
+ * -dml2_soc_vmin_clock_limits
  */
 struct dmub_soc_bb_params {
-       /* dml2_soc_power_management_parameters */
        uint32_t dram_clk_change_blackout_ns;
        uint32_t dram_clk_change_read_only_ns;
        uint32_t dram_clk_change_write_only_ns;
@@ -318,9 +320,9 @@ struct dmub_soc_bb_params {
        uint32_t z8_min_idle_time_ns;
        uint32_t type_b_dram_clk_change_blackout_ns;
        uint32_t type_b_ppt_blackout_ns;
-       /* dml2_soc_vmin_clock_limits */
        uint32_t vmin_limit_dispclk_khz;
        uint32_t vmin_limit_dcfclk_khz;
+       uint32_t g7_temperature_read_blackout_ns;
 };
 #pragma pack(pop)
 
@@ -2100,6 +2102,28 @@ enum fams2_stream_type {
        FAMS2_STREAM_TYPE_SUBVP = 4,
 };
 
+struct dmub_rect16 {
+       /**
+        * Dirty rect x offset.
+        */
+       uint16_t x;
+
+       /**
+        * Dirty rect y offset.
+        */
+       uint16_t y;
+
+       /**
+        * Dirty rect width.
+        */
+       uint16_t width;
+
+       /**
+        * Dirty rect height.
+        */
+       uint16_t height;
+};
+
 /* static stream state */
 struct dmub_fams2_legacy_stream_static_state {
        uint8_t vactive_det_fill_delay_otg_vlines;