root/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_opp.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* Copyright 2012-15 Advanced Micro Devices, Inc.
   2  *
   3  * Permission is hereby granted, free of charge, to any person obtaining a
   4  * copy of this software and associated documentation files (the "Software"),
   5  * to deal in the Software without restriction, including without limitation
   6  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   7  * and/or sell copies of the Software, and to permit persons to whom the
   8  * Software is furnished to do so, subject to the following conditions:
   9  *
  10  * The above copyright notice and this permission notice shall be included in
  11  * all copies or substantial portions of the Software.
  12  *
  13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  14  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  16  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  17  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  18  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  19  * OTHER DEALINGS IN THE SOFTWARE.
  20  *
  21  * Authors: AMD
  22  *
  23  */
  24 
  25 #ifndef __DC_OPP_DCN20_H__
  26 #define __DC_OPP_DCN20_H__
  27 
  28 #include "dcn10/dcn10_opp.h"
  29 
  30 #define TO_DCN20_OPP(opp)\
  31         container_of(opp, struct dcn20_opp, base)
  32 
  33 #define OPP_SF(reg_name, field_name, post_fix)\
  34         .field_name = reg_name ## __ ## field_name ## post_fix
  35 
  36 #define OPP_DPG_REG_LIST(id) \
  37         SRI(DPG_CONTROL, DPG, id), \
  38         SRI(DPG_DIMENSIONS, DPG, id), \
  39         SRI(DPG_COLOUR_B_CB, DPG, id), \
  40         SRI(DPG_COLOUR_G_Y, DPG, id), \
  41         SRI(DPG_COLOUR_R_CR, DPG, id), \
  42         SRI(DPG_RAMP_CONTROL, DPG, id), \
  43         SRI(DPG_STATUS, DPG, id)
  44 
  45 #define OPP_REG_LIST_DCN20(id) \
  46         OPP_REG_LIST_DCN10(id), \
  47         OPP_DPG_REG_LIST(id), \
  48         SRI(FMT_422_CONTROL, FMT, id), \
  49         SRI(OPPBUF_CONTROL1, OPPBUF, id)
  50 
  51 #define OPP_REG_VARIABLE_LIST_DCN2_0 \
  52         OPP_COMMON_REG_VARIABLE_LIST; \
  53         uint32_t FMT_422_CONTROL; \
  54         uint32_t DPG_CONTROL; \
  55         uint32_t DPG_DIMENSIONS; \
  56         uint32_t DPG_COLOUR_B_CB; \
  57         uint32_t DPG_COLOUR_G_Y; \
  58         uint32_t DPG_COLOUR_R_CR; \
  59         uint32_t DPG_RAMP_CONTROL; \
  60         uint32_t DPG_STATUS
  61 
  62 #define OPP_DPG_MASK_SH_LIST(mask_sh) \
  63         OPP_SF(DPG0_DPG_CONTROL, DPG_EN, mask_sh), \
  64         OPP_SF(DPG0_DPG_CONTROL, DPG_MODE, mask_sh), \
  65         OPP_SF(DPG0_DPG_CONTROL, DPG_DYNAMIC_RANGE, mask_sh), \
  66         OPP_SF(DPG0_DPG_CONTROL, DPG_BIT_DEPTH, mask_sh), \
  67         OPP_SF(DPG0_DPG_CONTROL, DPG_VRES, mask_sh), \
  68         OPP_SF(DPG0_DPG_CONTROL, DPG_HRES, mask_sh), \
  69         OPP_SF(DPG0_DPG_DIMENSIONS, DPG_ACTIVE_WIDTH, mask_sh), \
  70         OPP_SF(DPG0_DPG_DIMENSIONS, DPG_ACTIVE_HEIGHT, mask_sh), \
  71         OPP_SF(DPG0_DPG_COLOUR_R_CR, DPG_COLOUR0_R_CR, mask_sh), \
  72         OPP_SF(DPG0_DPG_COLOUR_R_CR, DPG_COLOUR1_R_CR, mask_sh), \
  73         OPP_SF(DPG0_DPG_COLOUR_B_CB, DPG_COLOUR0_B_CB, mask_sh), \
  74         OPP_SF(DPG0_DPG_COLOUR_B_CB, DPG_COLOUR1_B_CB, mask_sh), \
  75         OPP_SF(DPG0_DPG_COLOUR_G_Y, DPG_COLOUR0_G_Y, mask_sh), \
  76         OPP_SF(DPG0_DPG_COLOUR_G_Y, DPG_COLOUR1_G_Y, mask_sh), \
  77         OPP_SF(DPG0_DPG_RAMP_CONTROL, DPG_RAMP0_OFFSET, mask_sh), \
  78         OPP_SF(DPG0_DPG_RAMP_CONTROL, DPG_INC0, mask_sh), \
  79         OPP_SF(DPG0_DPG_RAMP_CONTROL, DPG_INC1, mask_sh), \
  80         OPP_SF(DPG0_DPG_STATUS, DPG_DOUBLE_BUFFER_PENDING, mask_sh)
  81 
  82 #define OPP_MASK_SH_LIST_DCN20(mask_sh) \
  83         OPP_MASK_SH_LIST_DCN(mask_sh), \
  84         OPP_DPG_MASK_SH_LIST(mask_sh), \
  85         OPP_SF(OPPBUF0_OPPBUF_CONTROL, OPPBUF_DISPLAY_SEGMENTATION, mask_sh),\
  86         OPP_SF(OPPBUF0_OPPBUF_CONTROL, OPPBUF_OVERLAP_PIXEL_NUM, mask_sh), \
  87         OPP_SF(FMT0_FMT_422_CONTROL, FMT_LEFT_EDGE_EXTRA_PIXEL_COUNT, mask_sh)
  88 
  89 #define OPP_DCN20_REG_FIELD_LIST(type) \
  90         OPP_DCN10_REG_FIELD_LIST(type); \
  91         type FMT_LEFT_EDGE_EXTRA_PIXEL_COUNT; \
  92         type DPG_EN; \
  93         type DPG_MODE; \
  94         type DPG_DYNAMIC_RANGE; \
  95         type DPG_BIT_DEPTH; \
  96         type DPG_VRES; \
  97         type DPG_HRES; \
  98         type DPG_ACTIVE_WIDTH; \
  99         type DPG_ACTIVE_HEIGHT; \
 100         type DPG_COLOUR0_R_CR; \
 101         type DPG_COLOUR1_R_CR; \
 102         type DPG_COLOUR0_B_CB; \
 103         type DPG_COLOUR1_B_CB; \
 104         type DPG_COLOUR0_G_Y; \
 105         type DPG_COLOUR1_G_Y; \
 106         type DPG_RAMP0_OFFSET; \
 107         type DPG_INC0; \
 108         type DPG_INC1; \
 109         type DPG_DOUBLE_BUFFER_PENDING
 110 
 111 struct dcn20_opp_registers {
 112         OPP_REG_VARIABLE_LIST_DCN2_0;
 113 };
 114 
 115 struct dcn20_opp_shift {
 116         OPP_DCN20_REG_FIELD_LIST(uint8_t);
 117 };
 118 
 119 struct dcn20_opp_mask {
 120         OPP_DCN20_REG_FIELD_LIST(uint32_t);
 121 };
 122 
 123 struct dcn20_opp {
 124         struct output_pixel_processor base;
 125 
 126         const struct dcn20_opp_registers *regs;
 127         const struct dcn20_opp_shift *opp_shift;
 128         const struct dcn20_opp_mask *opp_mask;
 129 
 130         bool is_write_to_ram_a_safe;
 131 };
 132 
 133 void dcn20_opp_construct(struct dcn20_opp *oppn20,
 134         struct dc_context *ctx,
 135         uint32_t inst,
 136         const struct dcn20_opp_registers *regs,
 137         const struct dcn20_opp_shift *opp_shift,
 138         const struct dcn20_opp_mask *opp_mask);
 139 
 140 void opp2_set_disp_pattern_generator(
 141         struct output_pixel_processor *opp,
 142         enum controller_dp_test_pattern test_pattern,
 143         enum dc_color_depth color_depth,
 144         const struct tg_color *solid_color,
 145         int width,
 146         int height);
 147 
 148 bool opp2_dpg_is_blanked(struct output_pixel_processor *opp);
 149 
 150 void opp2_dpg_set_blank_color(
 151                 struct output_pixel_processor *opp,
 152                 const struct tg_color *color);
 153 
 154 void opp2_program_left_edge_extra_pixel (
 155                 struct output_pixel_processor *opp,
 156                 bool count);
 157 
 158 #endif

/* [<][>][^][v][top][bottom][index][help] */