summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c
diff options
context:
space:
mode:
authorYue Hin Lau <Yuehin.Lau@amd.com>2017-09-19 17:29:28 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-10-21 16:44:03 -0400
commitb87d78d6aa104b207ff588d2cfd13633c2385994 (patch)
treea565e29efe71202ae03ceb3e676e2f246be30cf7 /drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c
parent60d671db1c0c02f31bcff3ea5dee244d26b8ed77 (diff)
downloadlinux-stable-b87d78d6aa104b207ff588d2cfd13633c2385994.tar.gz
linux-stable-b87d78d6aa104b207ff588d2cfd13633c2385994.tar.bz2
linux-stable-b87d78d6aa104b207ff588d2cfd13633c2385994.zip
drm/amd/display: moving cursor functions from ipp to mem_input
Signed-off-by: Yue Hin Lau <Yuehin.Lau@amd.com> Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> Acked-by: Harry Wentland <Harry.Wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c')
-rw-r--r--drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c189
1 files changed, 0 insertions, 189 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c
index 67bd6a738fe9..08db1e6b5166 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_ipp.c
@@ -37,188 +37,6 @@
#define CTX \
ippn10->base.ctx
-static bool ippn10_cursor_program_control(
- struct dcn10_ipp *ippn10,
- bool pixel_data_invert,
- enum dc_cursor_color_format color_format)
-{
- if (REG(CURSOR_SETTINS))
- REG_SET_2(CURSOR_SETTINS, 0,
- /* no shift of the cursor HDL schedule */
- CURSOR0_DST_Y_OFFSET, 0,
- /* used to shift the cursor chunk request deadline */
- CURSOR0_CHUNK_HDL_ADJUST, 3);
- else
- REG_SET_2(CURSOR_SETTINGS, 0,
- /* no shift of the cursor HDL schedule */
- CURSOR0_DST_Y_OFFSET, 0,
- /* used to shift the cursor chunk request deadline */
- CURSOR0_CHUNK_HDL_ADJUST, 3);
-
- REG_UPDATE_2(CURSOR0_CONTROL,
- CUR0_MODE, color_format,
- CUR0_EXPANSION_MODE, 0);
-
- if (color_format == CURSOR_MODE_MONO) {
- /* todo: clarify what to program these to */
- REG_UPDATE(CURSOR0_COLOR0,
- CUR0_COLOR0, 0x00000000);
- REG_UPDATE(CURSOR0_COLOR1,
- CUR0_COLOR1, 0xFFFFFFFF);
- }
-
- /* TODO: Fixed vs float */
-
- REG_UPDATE_3(FORMAT_CONTROL,
- CNVC_BYPASS, 0,
- ALPHA_EN, 1,
- FORMAT_EXPANSION_MODE, 0);
-
- return true;
-}
-
-enum cursor_pitch {
- CURSOR_PITCH_64_PIXELS = 0,
- CURSOR_PITCH_128_PIXELS,
- CURSOR_PITCH_256_PIXELS
-};
-
-enum cursor_lines_per_chunk {
- CURSOR_LINE_PER_CHUNK_2 = 1,
- CURSOR_LINE_PER_CHUNK_4,
- CURSOR_LINE_PER_CHUNK_8,
- CURSOR_LINE_PER_CHUNK_16
-};
-
-static enum cursor_pitch ippn10_get_cursor_pitch(
- unsigned int pitch)
-{
- enum cursor_pitch hw_pitch;
-
- switch (pitch) {
- case 64:
- hw_pitch = CURSOR_PITCH_64_PIXELS;
- break;
- case 128:
- hw_pitch = CURSOR_PITCH_128_PIXELS;
- break;
- case 256:
- hw_pitch = CURSOR_PITCH_256_PIXELS;
- break;
- default:
- DC_ERR("Invalid cursor pitch of %d. "
- "Only 64/128/256 is supported on DCN.\n", pitch);
- hw_pitch = CURSOR_PITCH_64_PIXELS;
- break;
- }
- return hw_pitch;
-}
-
-static enum cursor_lines_per_chunk ippn10_get_lines_per_chunk(
- unsigned int cur_width,
- enum dc_cursor_color_format format)
-{
- enum cursor_lines_per_chunk line_per_chunk;
-
- if (format == CURSOR_MODE_MONO)
- /* impl B. expansion in CUR Buffer reader */
- line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
- else if (cur_width <= 32)
- line_per_chunk = CURSOR_LINE_PER_CHUNK_16;
- else if (cur_width <= 64)
- line_per_chunk = CURSOR_LINE_PER_CHUNK_8;
- else if (cur_width <= 128)
- line_per_chunk = CURSOR_LINE_PER_CHUNK_4;
- else
- line_per_chunk = CURSOR_LINE_PER_CHUNK_2;
-
- return line_per_chunk;
-}
-
-static void ippn10_cursor_set_attributes(
- struct input_pixel_processor *ipp,
- const struct dc_cursor_attributes *attr)
-{
- struct dcn10_ipp *ippn10 = TO_DCN10_IPP(ipp);
- enum cursor_pitch hw_pitch = ippn10_get_cursor_pitch(attr->pitch);
- enum cursor_lines_per_chunk lpc = ippn10_get_lines_per_chunk(
- attr->width, attr->color_format);
-
- ippn10->curs_attr = *attr;
-
- REG_UPDATE(CURSOR_SURFACE_ADDRESS_HIGH,
- CURSOR_SURFACE_ADDRESS_HIGH, attr->address.high_part);
- REG_UPDATE(CURSOR_SURFACE_ADDRESS,
- CURSOR_SURFACE_ADDRESS, attr->address.low_part);
-
- REG_UPDATE_2(CURSOR_SIZE,
- CURSOR_WIDTH, attr->width,
- CURSOR_HEIGHT, attr->height);
- REG_UPDATE_3(CURSOR_CONTROL,
- CURSOR_MODE, attr->color_format,
- CURSOR_PITCH, hw_pitch,
- CURSOR_LINES_PER_CHUNK, lpc);
- ippn10_cursor_program_control(ippn10,
- attr->attribute_flags.bits.INVERT_PIXEL_DATA,
- attr->color_format);
-}
-
-static void ippn10_cursor_set_position(
- struct input_pixel_processor *ipp,
- const struct dc_cursor_position *pos,
- const struct dc_cursor_mi_param *param)
-{
- struct dcn10_ipp *ippn10 = TO_DCN10_IPP(ipp);
- int src_x_offset = pos->x - pos->x_hotspot - param->viewport_x_start;
- uint32_t cur_en = pos->enable ? 1 : 0;
- uint32_t dst_x_offset = (src_x_offset >= 0) ? src_x_offset : 0;
-
- /*
- * Guard aganst cursor_set_position() from being called with invalid
- * attributes
- *
- * TODO: Look at combining cursor_set_position() and
- * cursor_set_attributes() into cursor_update()
- */
- if (ippn10->curs_attr.address.quad_part == 0)
- return;
-
- dst_x_offset *= param->ref_clk_khz;
- dst_x_offset /= param->pixel_clk_khz;
-
- ASSERT(param->h_scale_ratio.value);
-
- if (param->h_scale_ratio.value)
- dst_x_offset = dal_fixed31_32_floor(dal_fixed31_32_div(
- dal_fixed31_32_from_int(dst_x_offset),
- param->h_scale_ratio));
-
- if (src_x_offset >= (int)param->viewport_width)
- cur_en = 0; /* not visible beyond right edge*/
-
- if (src_x_offset + (int)ippn10->curs_attr.width < 0)
- cur_en = 0; /* not visible beyond left edge*/
-
- if (cur_en && REG_READ(CURSOR_SURFACE_ADDRESS) == 0)
- ippn10_cursor_set_attributes(ipp, &ippn10->curs_attr);
- REG_UPDATE(CURSOR_CONTROL,
- CURSOR_ENABLE, cur_en);
- REG_UPDATE(CURSOR0_CONTROL,
- CUR0_ENABLE, cur_en);
-
- REG_SET_2(CURSOR_POSITION, 0,
- CURSOR_X_POSITION, pos->x,
- CURSOR_Y_POSITION, pos->y);
-
- REG_SET_2(CURSOR_HOT_SPOT, 0,
- CURSOR_HOT_SPOT_X, pos->x_hotspot,
- CURSOR_HOT_SPOT_Y, pos->y_hotspot);
-
- REG_SET(CURSOR_DST_OFFSET, 0,
- CURSOR_DST_X_OFFSET, dst_x_offset);
- /* TODO Handle surface pixel formats other than 4:4:4 */
-}
-
/*****************************************/
/* Constructor, Destructor */
/*****************************************/
@@ -230,13 +48,6 @@ static void dcn10_ipp_destroy(struct input_pixel_processor **ipp)
}
static const struct ipp_funcs dcn10_ipp_funcs = {
- .ipp_cursor_set_attributes = ippn10_cursor_set_attributes,
- .ipp_cursor_set_position = ippn10_cursor_set_position,
- .ipp_set_degamma = NULL,
- .ipp_program_input_lut = NULL,
- .ipp_full_bypass = NULL,
- .ipp_setup = NULL,
- .ipp_program_degamma_pwl = NULL,
.ipp_destroy = dcn10_ipp_destroy
};