writeback
bool writeback = flags & AMDGPU_FENCE_FLAG_TC_WB_ONLY;
if (writeback) {
bool writeback = flags & AMDGPU_FENCE_FLAG_TC_WB_ONLY;
amdgpu_ring_write(ring, ((writeback ? (EOP_TC_WB_ACTION_EN |
CalculateWatermarks_params->WritebackEnable = mode_lib->ms.cache_display_cfg.writeback.WritebackEnable;
CalculateWatermarks_params->WritebackPixelFormat = mode_lib->ms.cache_display_cfg.writeback.WritebackPixelFormat;
CalculateWatermarks_params->WritebackDestinationWidth = mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth;
CalculateWatermarks_params->WritebackDestinationHeight = mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationHeight;
CalculateWatermarks_params->WritebackSourceHeight = mode_lib->ms.cache_display_cfg.writeback.WritebackSourceHeight;
if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k] == true
&& mode_lib->ms.cache_display_cfg.writeback.WritebackPixelFormat[k] == dml_444_64) {
mode_lib->ms.WriteBandwidth[k] = mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth[k]
* mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationHeight[k]
/ (mode_lib->ms.cache_display_cfg.writeback.WritebackSourceHeight[k]
} else if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k] == true) {
mode_lib->ms.WriteBandwidth[k] = mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth[k]
* mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationHeight[k]
/ (mode_lib->ms.cache_display_cfg.writeback.WritebackSourceHeight[k]
if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k] == true &&
if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k] == true) {
if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k] == true) {
if (mode_lib->ms.cache_display_cfg.writeback.WritebackHRatio[k] > mode_lib->ms.ip.writeback_max_hscl_ratio
|| mode_lib->ms.cache_display_cfg.writeback.WritebackVRatio[k] > mode_lib->ms.ip.writeback_max_vscl_ratio
|| mode_lib->ms.cache_display_cfg.writeback.WritebackHRatio[k] < mode_lib->ms.ip.writeback_min_hscl_ratio
|| mode_lib->ms.cache_display_cfg.writeback.WritebackVRatio[k] < mode_lib->ms.ip.writeback_min_vscl_ratio
|| mode_lib->ms.cache_display_cfg.writeback.WritebackHTaps[k] > (dml_uint_t) mode_lib->ms.ip.writeback_max_hscl_taps
|| mode_lib->ms.cache_display_cfg.writeback.WritebackVTaps[k] > (dml_uint_t) mode_lib->ms.ip.writeback_max_vscl_taps
|| mode_lib->ms.cache_display_cfg.writeback.WritebackHRatio[k] > (dml_uint_t) mode_lib->ms.cache_display_cfg.writeback.WritebackHTaps[k]
|| mode_lib->ms.cache_display_cfg.writeback.WritebackVRatio[k] > (dml_uint_t) mode_lib->ms.cache_display_cfg.writeback.WritebackVTaps[k]
|| (mode_lib->ms.cache_display_cfg.writeback.WritebackHTaps[k] > 2.0 && ((mode_lib->ms.cache_display_cfg.writeback.WritebackHTaps[k] % 2) == 1))) {
if (2.0 * mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth[k] * (mode_lib->ms.cache_display_cfg.writeback.WritebackVTaps[k] - 1) * 57 > mode_lib->ms.ip.writeback_line_buffer_buffer_size) {
if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k]) {
CalculateWriteBackDISPCLK(mode_lib->ms.cache_display_cfg.writeback.WritebackPixelFormat[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackHRatio[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackVRatio[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackHTaps[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackVTaps[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackSourceWidth[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth[k],
if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k] == true) {
mode_lib->ms.cache_display_cfg.writeback.WritebackPixelFormat[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackHRatio[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackVRatio[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackVTaps[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationHeight[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackSourceHeight[k],
if (mode_lib->ms.cache_display_cfg.plane.BlendingAndTiming[m] == k && mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[m] == true) {
mode_lib->ms.cache_display_cfg.writeback.WritebackPixelFormat[m],
mode_lib->ms.cache_display_cfg.writeback.WritebackHRatio[m],
mode_lib->ms.cache_display_cfg.writeback.WritebackVRatio[m],
mode_lib->ms.cache_display_cfg.writeback.WritebackVTaps[m],
mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth[m],
mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationHeight[m],
mode_lib->ms.cache_display_cfg.writeback.WritebackSourceHeight[m],
if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k]) {
mode_lib->ms.cache_display_cfg.writeback.WritebackPixelFormat[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackHRatio[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackVRatio[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackHTaps[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackVTaps[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackSourceWidth[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth[k],
if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k] == true) {
mode_lib->ms.cache_display_cfg.writeback.WritebackPixelFormat[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackHRatio[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackVRatio[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackVTaps[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationHeight[k],
mode_lib->ms.cache_display_cfg.writeback.WritebackSourceHeight[k],
&& mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[j] == true) {
mode_lib->ms.cache_display_cfg.writeback.WritebackPixelFormat[j],
mode_lib->ms.cache_display_cfg.writeback.WritebackHRatio[j],
mode_lib->ms.cache_display_cfg.writeback.WritebackVRatio[j],
mode_lib->ms.cache_display_cfg.writeback.WritebackVTaps[j],
mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth[j],
mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationHeight[j],
mode_lib->ms.cache_display_cfg.writeback.WritebackSourceHeight[j],
CalculateWatermarks_params->WritebackEnable = mode_lib->ms.cache_display_cfg.writeback.WritebackEnable;
CalculateWatermarks_params->WritebackPixelFormat = mode_lib->ms.cache_display_cfg.writeback.WritebackPixelFormat;
CalculateWatermarks_params->WritebackDestinationWidth = mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth;
CalculateWatermarks_params->WritebackDestinationHeight = mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationHeight;
CalculateWatermarks_params->WritebackSourceHeight = mode_lib->ms.cache_display_cfg.writeback.WritebackSourceHeight;
if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k] == true) {
if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k] == true && mode_lib->ms.cache_display_cfg.writeback.WritebackPixelFormat[k] == dml_444_32) {
s->WRBandwidth = mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth[k] * mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationHeight[k] /
(mode_lib->ms.cache_display_cfg.timing.HTotal[k] * mode_lib->ms.cache_display_cfg.writeback.WritebackSourceHeight[k] / mode_lib->ms.cache_display_cfg.timing.PixelClock[k]) * 4;
} else if (mode_lib->ms.cache_display_cfg.writeback.WritebackEnable[k] == true) {
s->WRBandwidth = mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationWidth[k] * mode_lib->ms.cache_display_cfg.writeback.WritebackDestinationHeight[k] /
(mode_lib->ms.cache_display_cfg.timing.HTotal[k] * mode_lib->ms.cache_display_cfg.writeback.WritebackSourceHeight[k] / mode_lib->ms.cache_display_cfg.timing.PixelClock[k]) * 8;
CalculateStutterEfficiency_params->WritebackEnable = mode_lib->ms.cache_display_cfg.writeback.WritebackEnable;
mode_lib->ms.cache_display_cfg.writeback.WritebackEnable,
struct dml_writeback_cfg_st writeback;
.writeback = {
.writeback = {
struct dml2_writeback_cfg writeback;
} writeback;
if (p->display_cfg->stream_descriptors[k].writeback.active_writebacks_per_stream > 0)
if (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0) {
mode_lib->soc.qos_parameters.writeback.base_latency_us
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].pixel_format,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].h_ratio,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_ratio,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_taps,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_width,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_height,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].input_height,
s->mmSOCParameters.WritebackLatency = mode_lib->soc.qos_parameters.writeback.base_latency_us;
if (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0) {
if (display_cfg->stream_descriptors[k].writeback.active_writebacks_per_stream > 0) {
s->WRBandwidth = display_cfg->stream_descriptors[k].writeback.writeback_stream[0].output_height
* display_cfg->stream_descriptors[k].writeback.writeback_stream[0].output_width /
(display_cfg->stream_descriptors[k].timing.h_total * display_cfg->stream_descriptors[k].writeback.writeback_stream[0].input_height
* (display_cfg->stream_descriptors[k].writeback.writeback_stream[0].pixel_format == dml2_444_32 ? 4.0 : 8.0);
if (p->display_cfg->stream_descriptors[p->display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0) {
if (p->display_cfg->stream_descriptors[p->display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0) {
/ ((double)p->display_cfg->stream_descriptors[p->display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_height
* (double)p->display_cfg->stream_descriptors[p->display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_width
/ ((double)p->display_cfg->stream_descriptors[p->display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].input_height * (double)h_total / pixel_clock_mhz) * 4.0);
if (p->display_cfg->stream_descriptors[p->display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].pixel_format == dml2_444_64) {
s->mSOCParameters.WritebackLatency = mode_lib->soc.qos_parameters.writeback.base_latency_us;
if (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0 && display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].pixel_format == dml2_444_64) {
mode_lib->ms.WriteBandwidth[k][0] = display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_height
* display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_width
/ (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].input_height
} else if (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0) {
mode_lib->ms.WriteBandwidth[k][0] = display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_height
* display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_width
/ (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].input_height
if (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0 &&
(mode_lib->ms.WriteBandwidth[k][0] > mode_lib->ip.writeback_interface_buffer_size_kbytes * 1024 / ((double)mode_lib->soc.qos_parameters.writeback.base_latency_us))) {
if (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0) {
if (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].h_ratio > mode_lib->ip.writeback_max_hscl_ratio
|| display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_ratio > mode_lib->ip.writeback_max_vscl_ratio
|| display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].h_ratio < mode_lib->ip.writeback_min_hscl_ratio
|| display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_ratio < mode_lib->ip.writeback_min_vscl_ratio
|| display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].h_taps > (unsigned int) mode_lib->ip.writeback_max_hscl_taps
|| display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_taps > (unsigned int) mode_lib->ip.writeback_max_vscl_taps
|| display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].h_ratio > (unsigned int)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].h_taps
|| display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_ratio > (unsigned int)display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_taps
|| (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].h_taps > 2.0 && ((display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].h_taps % 2) == 1))) {
if (2.0 * display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_height * (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_taps - 1) * 57 > mode_lib->ip.writeback_line_buffer_buffer_size) {
if (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0) {
CalculateWriteBackDISPCLK(display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].pixel_format,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].h_ratio,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_ratio,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].h_taps,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_taps,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].input_width,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_width,
if (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0)
if (display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.active_writebacks_per_stream > 0) {
mode_lib->ms.WritebackDelayTime[k] = mode_lib->soc.qos_parameters.writeback.base_latency_us + CalculateWriteBackDelay(
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].pixel_format,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].h_ratio,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_ratio,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].v_taps,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_width,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].output_height,
display_cfg->stream_descriptors[display_cfg->plane_descriptors[k].stream_index].writeback.writeback_stream[0].input_height,
populate_dml_writeback_cfg_from_stream_state(&dml_dispcfg->writeback,
bool writeback, pgoff_t idx, gfp_t page_gfp,
u32 writeback : 1;
u32 writeback : 1;
bool writeback, pgoff_t idx, gfp_t page_gfp,
if (writeback && !folio_mapped(to_folio) &&
.writeback = flags.writeback});
shandle = ttm_backup_backup_page(backup, page, flags->writeback, i,
struct pf_state_peer *dst, int *writeback)
*writeback = 1;
int writeback(FILE *);
writeback(rbuf);
writeback(rbuf);