|
@@ -174,6 +174,25 @@ static void program_urgency_watermark(
|
|
URGENCY_HIGH_WATERMARK, urgency_high_wm);
|
|
URGENCY_HIGH_WATERMARK, urgency_high_wm);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void dce120_program_urgency_watermark(
|
|
|
|
+ struct dce_mem_input *dce_mi,
|
|
|
|
+ uint32_t wm_select,
|
|
|
|
+ uint32_t urgency_low_wm,
|
|
|
|
+ uint32_t urgency_high_wm)
|
|
|
|
+{
|
|
|
|
+ REG_UPDATE(DPG_WATERMARK_MASK_CONTROL,
|
|
|
|
+ URGENCY_WATERMARK_MASK, wm_select);
|
|
|
|
+
|
|
|
|
+ REG_SET_2(DPG_PIPE_URGENCY_CONTROL, 0,
|
|
|
|
+ URGENCY_LOW_WATERMARK, urgency_low_wm,
|
|
|
|
+ URGENCY_HIGH_WATERMARK, urgency_high_wm);
|
|
|
|
+
|
|
|
|
+ REG_SET_2(DPG_PIPE_URGENT_LEVEL_CONTROL, 0,
|
|
|
|
+ URGENT_LEVEL_LOW_WATERMARK, urgency_low_wm,
|
|
|
|
+ URGENT_LEVEL_HIGH_WATERMARK, urgency_high_wm);
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
static void program_nbp_watermark(
|
|
static void program_nbp_watermark(
|
|
struct dce_mem_input *dce_mi,
|
|
struct dce_mem_input *dce_mi,
|
|
uint32_t wm_select,
|
|
uint32_t wm_select,
|
|
@@ -209,23 +228,27 @@ static void program_nbp_watermark(
|
|
static void program_stutter_watermark(
|
|
static void program_stutter_watermark(
|
|
struct dce_mem_input *dce_mi,
|
|
struct dce_mem_input *dce_mi,
|
|
uint32_t wm_select,
|
|
uint32_t wm_select,
|
|
- uint32_t stutter_mark)
|
|
|
|
|
|
+ uint32_t stutter_mark,
|
|
|
|
+ uint32_t stutter_entry)
|
|
{
|
|
{
|
|
REG_UPDATE(DPG_WATERMARK_MASK_CONTROL,
|
|
REG_UPDATE(DPG_WATERMARK_MASK_CONTROL,
|
|
STUTTER_EXIT_SELF_REFRESH_WATERMARK_MASK, wm_select);
|
|
STUTTER_EXIT_SELF_REFRESH_WATERMARK_MASK, wm_select);
|
|
|
|
|
|
if (REG(DPG_PIPE_STUTTER_CONTROL2))
|
|
if (REG(DPG_PIPE_STUTTER_CONTROL2))
|
|
- REG_UPDATE(DPG_PIPE_STUTTER_CONTROL2,
|
|
|
|
- STUTTER_EXIT_SELF_REFRESH_WATERMARK, stutter_mark);
|
|
|
|
|
|
+ REG_UPDATE_2(DPG_PIPE_STUTTER_CONTROL2,
|
|
|
|
+ STUTTER_EXIT_SELF_REFRESH_WATERMARK, stutter_mark,
|
|
|
|
+ STUTTER_ENTER_SELF_REFRESH_WATERMARK, stutter_entry);
|
|
else
|
|
else
|
|
- REG_UPDATE(DPG_PIPE_STUTTER_CONTROL,
|
|
|
|
- STUTTER_EXIT_SELF_REFRESH_WATERMARK, stutter_mark);
|
|
|
|
|
|
+ REG_UPDATE_2(DPG_PIPE_STUTTER_CONTROL,
|
|
|
|
+ STUTTER_EXIT_SELF_REFRESH_WATERMARK, stutter_mark,
|
|
|
|
+ STUTTER_ENTER_SELF_REFRESH_WATERMARK, stutter_entry);
|
|
}
|
|
}
|
|
|
|
|
|
static void dce_mi_program_display_marks(
|
|
static void dce_mi_program_display_marks(
|
|
struct mem_input *mi,
|
|
struct mem_input *mi,
|
|
struct dce_watermarks nbp,
|
|
struct dce_watermarks nbp,
|
|
- struct dce_watermarks stutter,
|
|
|
|
|
|
+ struct dce_watermarks stutter_exit,
|
|
|
|
+ struct dce_watermarks stutter_enter,
|
|
struct dce_watermarks urgent,
|
|
struct dce_watermarks urgent,
|
|
uint32_t total_dest_line_time_ns)
|
|
uint32_t total_dest_line_time_ns)
|
|
{
|
|
{
|
|
@@ -243,26 +266,27 @@ static void dce_mi_program_display_marks(
|
|
program_nbp_watermark(dce_mi, 2, nbp.a_mark); /* set a */
|
|
program_nbp_watermark(dce_mi, 2, nbp.a_mark); /* set a */
|
|
program_nbp_watermark(dce_mi, 1, nbp.d_mark); /* set d */
|
|
program_nbp_watermark(dce_mi, 1, nbp.d_mark); /* set d */
|
|
|
|
|
|
- program_stutter_watermark(dce_mi, 2, stutter.a_mark); /* set a */
|
|
|
|
- program_stutter_watermark(dce_mi, 1, stutter.d_mark); /* set d */
|
|
|
|
|
|
+ program_stutter_watermark(dce_mi, 2, stutter_exit.a_mark, stutter_enter.a_mark); /* set a */
|
|
|
|
+ program_stutter_watermark(dce_mi, 1, stutter_exit.d_mark, stutter_enter.d_mark); /* set d */
|
|
}
|
|
}
|
|
|
|
|
|
static void dce120_mi_program_display_marks(struct mem_input *mi,
|
|
static void dce120_mi_program_display_marks(struct mem_input *mi,
|
|
struct dce_watermarks nbp,
|
|
struct dce_watermarks nbp,
|
|
- struct dce_watermarks stutter,
|
|
|
|
|
|
+ struct dce_watermarks stutter_exit,
|
|
|
|
+ struct dce_watermarks stutter_entry,
|
|
struct dce_watermarks urgent,
|
|
struct dce_watermarks urgent,
|
|
uint32_t total_dest_line_time_ns)
|
|
uint32_t total_dest_line_time_ns)
|
|
{
|
|
{
|
|
struct dce_mem_input *dce_mi = TO_DCE_MEM_INPUT(mi);
|
|
struct dce_mem_input *dce_mi = TO_DCE_MEM_INPUT(mi);
|
|
uint32_t stutter_en = mi->ctx->dc->debug.disable_stutter ? 0 : 1;
|
|
uint32_t stutter_en = mi->ctx->dc->debug.disable_stutter ? 0 : 1;
|
|
|
|
|
|
- program_urgency_watermark(dce_mi, 0, /* set a */
|
|
|
|
|
|
+ dce120_program_urgency_watermark(dce_mi, 0, /* set a */
|
|
urgent.a_mark, total_dest_line_time_ns);
|
|
urgent.a_mark, total_dest_line_time_ns);
|
|
- program_urgency_watermark(dce_mi, 1, /* set b */
|
|
|
|
|
|
+ dce120_program_urgency_watermark(dce_mi, 1, /* set b */
|
|
urgent.b_mark, total_dest_line_time_ns);
|
|
urgent.b_mark, total_dest_line_time_ns);
|
|
- program_urgency_watermark(dce_mi, 2, /* set c */
|
|
|
|
|
|
+ dce120_program_urgency_watermark(dce_mi, 2, /* set c */
|
|
urgent.c_mark, total_dest_line_time_ns);
|
|
urgent.c_mark, total_dest_line_time_ns);
|
|
- program_urgency_watermark(dce_mi, 3, /* set d */
|
|
|
|
|
|
+ dce120_program_urgency_watermark(dce_mi, 3, /* set d */
|
|
urgent.d_mark, total_dest_line_time_ns);
|
|
urgent.d_mark, total_dest_line_time_ns);
|
|
|
|
|
|
REG_UPDATE_2(DPG_PIPE_STUTTER_CONTROL,
|
|
REG_UPDATE_2(DPG_PIPE_STUTTER_CONTROL,
|
|
@@ -273,10 +297,10 @@ static void dce120_mi_program_display_marks(struct mem_input *mi,
|
|
program_nbp_watermark(dce_mi, 2, nbp.c_mark); /* set c */
|
|
program_nbp_watermark(dce_mi, 2, nbp.c_mark); /* set c */
|
|
program_nbp_watermark(dce_mi, 3, nbp.d_mark); /* set d */
|
|
program_nbp_watermark(dce_mi, 3, nbp.d_mark); /* set d */
|
|
|
|
|
|
- program_stutter_watermark(dce_mi, 0, stutter.a_mark); /* set a */
|
|
|
|
- program_stutter_watermark(dce_mi, 1, stutter.b_mark); /* set b */
|
|
|
|
- program_stutter_watermark(dce_mi, 2, stutter.c_mark); /* set c */
|
|
|
|
- program_stutter_watermark(dce_mi, 3, stutter.d_mark); /* set d */
|
|
|
|
|
|
+ program_stutter_watermark(dce_mi, 0, stutter_exit.a_mark, stutter_entry.a_mark); /* set a */
|
|
|
|
+ program_stutter_watermark(dce_mi, 1, stutter_exit.b_mark, stutter_entry.b_mark); /* set b */
|
|
|
|
+ program_stutter_watermark(dce_mi, 2, stutter_exit.c_mark, stutter_entry.c_mark); /* set c */
|
|
|
|
+ program_stutter_watermark(dce_mi, 3, stutter_exit.d_mark, stutter_entry.d_mark); /* set d */
|
|
}
|
|
}
|
|
|
|
|
|
static void program_tiling(
|
|
static void program_tiling(
|