/* Full fe update*/
for (j = 0; j < dc->res_pool->pipe_count; j++) {
struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j];
- struct pipe_ctx *cur_pipe_ctx = &dc->current_state->res_ctx.pipe_ctx[j];
- bool is_new_pipe_surface = cur_pipe_ctx->plane_state != pipe_ctx->plane_state;
- struct dc_cursor_position position = { 0 };
-
if (update_type != UPDATE_TYPE_FULL || !pipe_ctx->plane_state)
continue;
dc->hwss.apply_ctx_for_surface(
dc, pipe_ctx->stream, stream_status->plane_count, context);
}
-
- /* TODO: this is a hack w/a for switching from mpo to pipe split */
- dc_stream_set_cursor_position(pipe_ctx->stream, &position);
-
- if (is_new_pipe_surface) {
- dc->hwss.update_plane_addr(dc, pipe_ctx);
- dc->hwss.set_input_transfer_func(
- pipe_ctx, pipe_ctx->plane_state);
- dc->hwss.set_output_transfer_func(
- pipe_ctx, pipe_ctx->stream);
- }
}
if (update_type > UPDATE_TYPE_FAST)
* Update the cursor attributes and set cursor surface address
*/
bool dc_stream_set_cursor_attributes(
- const struct dc_stream_state *stream,
+ struct dc_stream_state *stream,
const struct dc_cursor_attributes *attributes)
{
int i;
return false;
}
+ if (attributes->address.quad_part == 0) {
+ dm_error("DC: Cursor address is 0!\n");
+ return false;
+ }
+
core_dc = stream->ctx->dc;
res_ctx = &core_dc->current_state->res_ctx;
pipe_ctx->plane_res.xfm, attributes);
}
+ stream->cursor_attributes = *attributes;
+
return true;
}
struct dc_stream_status status;
+ struct dc_cursor_attributes cursor_attributes;
+
/* from stream struct */
struct kref refcount;
};
******************************************************************************/
/* TODO: Deprecated once we switch to dc_set_cursor_position */
bool dc_stream_set_cursor_attributes(
- const struct dc_stream_state *stream,
+ struct dc_stream_state *stream,
const struct dc_cursor_attributes *attributes);
bool dc_stream_set_cursor_position(
struct dc_plane_state *plane_state = pipe_ctx->plane_state;
struct xfm_grph_csc_adjustment adjust;
struct out_csc_color_matrix tbl_entry;
+ struct pipe_ctx *cur_pipe_ctx =
+ &dc->current_state->res_ctx.pipe_ctx[pipe_ctx->pipe_idx];
unsigned int i;
memset(&tbl_entry, 0, sizeof(tbl_entry));
&plane_state->tiling_info,
plane_state->rotation);
+ /* Moved programming gamma from dc to hwss */
+ if (cur_pipe_ctx->plane_state != pipe_ctx->plane_state) {
+ dc->hwss.set_input_transfer_func(
+ pipe_ctx, pipe_ctx->plane_state);
+ dc->hwss.set_output_transfer_func(
+ pipe_ctx, pipe_ctx->stream);
+ }
+
dm_logger_write(dc->ctx->logger, LOG_SURFACE,
"Pipe:%d 0x%x: addr hi:0x%x, "
"addr low:0x%x, "
}
if (pipe_ctx->plane_state != NULL) {
+ struct dc_cursor_position position = { 0 };
+ struct pipe_ctx *cur_pipe_ctx =
+ &dc->current_state->res_ctx.pipe_ctx[pipe_ctx->pipe_idx];
+
dcn10_power_on_fe(dc, pipe_ctx, context);
/* temporary dcn1 wa:
toggle_watermark_change_req(dc->hwseq);
update_dchubp_dpp(dc, pipe_ctx, context);
+
+ /* TODO: this is a hack w/a for switching from mpo to pipe split */
+ dc_stream_set_cursor_position(pipe_ctx->stream, &position);
+
+ dc_stream_set_cursor_attributes(pipe_ctx->stream,
+ &pipe_ctx->stream->cursor_attributes);
+
+ if (cur_pipe_ctx->plane_state != pipe_ctx->plane_state) {
+ dc->hwss.set_input_transfer_func(
+ pipe_ctx, pipe_ctx->plane_state);
+ dc->hwss.set_output_transfer_func(
+ pipe_ctx, pipe_ctx->stream);
+ }
}
if (dc->debug.sanity_checks) {