Home | History | Annotate | Line # | Download | only in dcn10
      1 /*	$NetBSD: dcn10_ipp.h,v 1.2 2021/12/18 23:45:03 riastradh Exp $	*/
      2 
      3 /*
      4  * Copyright 2017 Advanced Micro Devices, Inc.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a
      7  * copy of this software and associated documentation files (the "Software"),
      8  * to deal in the Software without restriction, including without limitation
      9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     10  * and/or sell copies of the Software, and to permit persons to whom the
     11  * Software is furnished to do so, subject to the following conditions:
     12  *
     13  * The above copyright notice and this permission notice shall be included in
     14  * all copies or substantial portions of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     19  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
     20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     22  * OTHER DEALINGS IN THE SOFTWARE.
     23  *
     24  * Authors: AMD
     25  *
     26  */
     27 
     28 #ifndef _DCN10_IPP_H_
     29 #define _DCN10_IPP_H_
     30 
     31 #include "ipp.h"
     32 
     33 #define TO_DCN10_IPP(ipp)\
     34 	container_of(ipp, struct dcn10_ipp, base)
     35 
     36 #define IPP_REG_LIST_DCN(id) \
     37 	SRI(FORMAT_CONTROL, CNVC_CFG, id), \
     38 	SRI(CNVC_SURFACE_PIXEL_FORMAT, CNVC_CFG, id), \
     39 	SRI(CURSOR0_CONTROL, CNVC_CUR, id), \
     40 	SRI(CURSOR0_COLOR0, CNVC_CUR, id), \
     41 	SRI(CURSOR0_COLOR1, CNVC_CUR, id)
     42 
     43 #define IPP_REG_LIST_DCN10(id) \
     44 	IPP_REG_LIST_DCN(id), \
     45 	SRI(CURSOR_SETTINS, HUBPREQ, id), \
     46 	SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR, id), \
     47 	SRI(CURSOR_SURFACE_ADDRESS, CURSOR, id), \
     48 	SRI(CURSOR_SIZE, CURSOR, id), \
     49 	SRI(CURSOR_CONTROL, CURSOR, id), \
     50 	SRI(CURSOR_POSITION, CURSOR, id), \
     51 	SRI(CURSOR_HOT_SPOT, CURSOR, id), \
     52 	SRI(CURSOR_DST_OFFSET, CURSOR, id)
     53 
     54 #define IPP_REG_LIST_DCN20(id) \
     55 	IPP_REG_LIST_DCN(id), \
     56 	SRI(CURSOR_SETTINGS, HUBPREQ, id), \
     57 	SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR0_, id), \
     58 	SRI(CURSOR_SURFACE_ADDRESS, CURSOR0_, id), \
     59 	SRI(CURSOR_SIZE, CURSOR0_, id), \
     60 	SRI(CURSOR_CONTROL, CURSOR0_, id), \
     61 	SRI(CURSOR_POSITION, CURSOR0_, id), \
     62 	SRI(CURSOR_HOT_SPOT, CURSOR0_, id), \
     63 	SRI(CURSOR_DST_OFFSET, CURSOR0_, id)
     64 
     65 #define CURSOR0_CURSOR_CONTROL__CURSOR_2X_MAGNIFY__SHIFT	0x4
     66 #define CURSOR0_CURSOR_CONTROL__CURSOR_2X_MAGNIFY_MASK		0x00000010L
     67 #define CURSOR1_CURSOR_CONTROL__CURSOR_2X_MAGNIFY__SHIFT	0x4
     68 #define CURSOR1_CURSOR_CONTROL__CURSOR_2X_MAGNIFY_MASK		0x00000010L
     69 #define CURSOR2_CURSOR_CONTROL__CURSOR_2X_MAGNIFY__SHIFT	0x4
     70 #define CURSOR2_CURSOR_CONTROL__CURSOR_2X_MAGNIFY_MASK		0x00000010L
     71 #define CURSOR3_CURSOR_CONTROL__CURSOR_2X_MAGNIFY__SHIFT	0x4
     72 #define CURSOR3_CURSOR_CONTROL__CURSOR_2X_MAGNIFY_MASK		0x00000010L
     73 
     74 #define IPP_SF(reg_name, field_name, post_fix)\
     75 	.field_name = reg_name ## __ ## field_name ## post_fix
     76 
     77 #define IPP_MASK_SH_LIST_DCN(mask_sh) \
     78 	IPP_SF(CNVC_CFG0_CNVC_SURFACE_PIXEL_FORMAT, CNVC_SURFACE_PIXEL_FORMAT, mask_sh), \
     79 	IPP_SF(CNVC_CFG0_FORMAT_CONTROL, CNVC_BYPASS, mask_sh), \
     80 	IPP_SF(CNVC_CFG0_FORMAT_CONTROL, ALPHA_EN, mask_sh), \
     81 	IPP_SF(CNVC_CFG0_FORMAT_CONTROL, FORMAT_EXPANSION_MODE, mask_sh), \
     82 	IPP_SF(CNVC_CUR0_CURSOR0_CONTROL, CUR0_MODE, mask_sh), \
     83 	IPP_SF(CNVC_CUR0_CURSOR0_COLOR0, CUR0_COLOR0, mask_sh), \
     84 	IPP_SF(CNVC_CUR0_CURSOR0_COLOR1, CUR0_COLOR1, mask_sh), \
     85 	IPP_SF(CNVC_CUR0_CURSOR0_CONTROL, CUR0_EXPANSION_MODE, mask_sh), \
     86 	IPP_SF(CNVC_CUR0_CURSOR0_CONTROL, CUR0_ENABLE, mask_sh)
     87 
     88 #define IPP_MASK_SH_LIST_DCN10(mask_sh) \
     89 	IPP_MASK_SH_LIST_DCN(mask_sh),\
     90 	IPP_SF(HUBPREQ0_CURSOR_SETTINS, CURSOR0_DST_Y_OFFSET, mask_sh), \
     91 	IPP_SF(HUBPREQ0_CURSOR_SETTINS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
     92 	IPP_SF(CURSOR0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
     93 	IPP_SF(CURSOR0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
     94 	IPP_SF(CURSOR0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
     95 	IPP_SF(CURSOR0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
     96 	IPP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
     97 	IPP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
     98 	IPP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
     99 	IPP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
    100 	IPP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
    101 	IPP_SF(CURSOR0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
    102 	IPP_SF(CURSOR0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
    103 	IPP_SF(CURSOR0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
    104 	IPP_SF(CURSOR0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
    105 	IPP_SF(CURSOR0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
    106 	IPP_SF(CNVC_CFG0_FORMAT_CONTROL, OUTPUT_FP, mask_sh)
    107 
    108 #define IPP_MASK_SH_LIST_DCN20(mask_sh) \
    109 	IPP_MASK_SH_LIST_DCN(mask_sh), \
    110 	IPP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
    111 	IPP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
    112 	IPP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
    113 	IPP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
    114 	IPP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
    115 	IPP_SF(CURSOR0_0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
    116 	IPP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
    117 	IPP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
    118 	IPP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
    119 	IPP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
    120 	IPP_SF(CURSOR0_0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
    121 	IPP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
    122 	IPP_SF(CURSOR0_0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
    123 	IPP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
    124 	IPP_SF(CURSOR0_0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
    125 	IPP_SF(CURSOR0_0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh)
    126 
    127 #define IPP_DCN10_REG_FIELD_LIST(type) \
    128 	type CNVC_SURFACE_PIXEL_FORMAT; \
    129 	type CNVC_BYPASS; \
    130 	type ALPHA_EN; \
    131 	type FORMAT_EXPANSION_MODE; \
    132 	type CURSOR0_DST_Y_OFFSET; \
    133 	type CURSOR0_CHUNK_HDL_ADJUST; \
    134 	type CUR0_MODE; \
    135 	type CUR0_COLOR0; \
    136 	type CUR0_COLOR1; \
    137 	type CUR0_EXPANSION_MODE; \
    138 	type CURSOR_SURFACE_ADDRESS_HIGH; \
    139 	type CURSOR_SURFACE_ADDRESS; \
    140 	type CURSOR_WIDTH; \
    141 	type CURSOR_HEIGHT; \
    142 	type CURSOR_MODE; \
    143 	type CURSOR_2X_MAGNIFY; \
    144 	type CURSOR_PITCH; \
    145 	type CURSOR_LINES_PER_CHUNK; \
    146 	type CURSOR_ENABLE; \
    147 	type CUR0_ENABLE; \
    148 	type CURSOR_X_POSITION; \
    149 	type CURSOR_Y_POSITION; \
    150 	type CURSOR_HOT_SPOT_X; \
    151 	type CURSOR_HOT_SPOT_Y; \
    152 	type CURSOR_DST_X_OFFSET; \
    153 	type OUTPUT_FP
    154 
    155 struct dcn10_ipp_shift {
    156 	IPP_DCN10_REG_FIELD_LIST(uint8_t);
    157 };
    158 
    159 struct dcn10_ipp_mask {
    160 	IPP_DCN10_REG_FIELD_LIST(uint32_t);
    161 };
    162 
    163 struct dcn10_ipp_registers {
    164 	uint32_t CURSOR_SETTINS;
    165 	uint32_t CURSOR_SETTINGS;
    166 	uint32_t CNVC_SURFACE_PIXEL_FORMAT;
    167 	uint32_t CURSOR0_CONTROL;
    168 	uint32_t CURSOR0_COLOR0;
    169 	uint32_t CURSOR0_COLOR1;
    170 	uint32_t FORMAT_CONTROL;
    171 	uint32_t CURSOR_SURFACE_ADDRESS_HIGH;
    172 	uint32_t CURSOR_SURFACE_ADDRESS;
    173 	uint32_t CURSOR_SIZE;
    174 	uint32_t CURSOR_CONTROL;
    175 	uint32_t CURSOR_POSITION;
    176 	uint32_t CURSOR_HOT_SPOT;
    177 	uint32_t CURSOR_DST_OFFSET;
    178 };
    179 
    180 struct dcn10_ipp {
    181 	struct input_pixel_processor base;
    182 
    183 	const struct dcn10_ipp_registers *regs;
    184 	const struct dcn10_ipp_shift *ipp_shift;
    185 	const struct dcn10_ipp_mask *ipp_mask;
    186 
    187 	struct dc_cursor_attributes curs_attr;
    188 };
    189 
    190 void dcn10_ipp_construct(struct dcn10_ipp *ippn10,
    191 	struct dc_context *ctx,
    192 	int inst,
    193 	const struct dcn10_ipp_registers *regs,
    194 	const struct dcn10_ipp_shift *ipp_shift,
    195 	const struct dcn10_ipp_mask *ipp_mask);
    196 
    197 void dcn20_ipp_construct(struct dcn10_ipp *ippn10,
    198 	struct dc_context *ctx,
    199 	int inst,
    200 	const struct dcn10_ipp_registers *regs,
    201 	const struct dcn10_ipp_shift *ipp_shift,
    202 	const struct dcn10_ipp_mask *ipp_mask);
    203 
    204 #endif /* _DCN10_IPP_H_ */
    205