drm/amd/display: DML21 Reintegration

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>
This commit is contained in:
Austin Zheng
2025-06-11 10:09:51 -04:00
committed by Alex Deucher
parent f8fa4dfbd7
commit def3f83e51
8 changed files with 248 additions and 24 deletions
@@ -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;
@@ -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
@@ -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;
@@ -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 {
@@ -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];
@@ -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;
@@ -10,15 +10,74 @@
#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
@@ -37,30 +96,94 @@
#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__ */
@@ -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;