186b6a203SDmytro Laktyushkin /*
286b6a203SDmytro Laktyushkin  * Copyright 2017 Advanced Micro Devices, Inc.
386b6a203SDmytro Laktyushkin  *
486b6a203SDmytro Laktyushkin  * Permission is hereby granted, free of charge, to any person obtaining a
586b6a203SDmytro Laktyushkin  * copy of this software and associated documentation files (the "Software"),
686b6a203SDmytro Laktyushkin  * to deal in the Software without restriction, including without limitation
786b6a203SDmytro Laktyushkin  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
886b6a203SDmytro Laktyushkin  * and/or sell copies of the Software, and to permit persons to whom the
986b6a203SDmytro Laktyushkin  * Software is furnished to do so, subject to the following conditions:
1086b6a203SDmytro Laktyushkin  *
1186b6a203SDmytro Laktyushkin  * The above copyright notice and this permission notice shall be included in
1286b6a203SDmytro Laktyushkin  * all copies or substantial portions of the Software.
1386b6a203SDmytro Laktyushkin  *
1486b6a203SDmytro Laktyushkin  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1586b6a203SDmytro Laktyushkin  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1686b6a203SDmytro Laktyushkin  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
1786b6a203SDmytro Laktyushkin  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
1886b6a203SDmytro Laktyushkin  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
1986b6a203SDmytro Laktyushkin  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2086b6a203SDmytro Laktyushkin  * OTHER DEALINGS IN THE SOFTWARE.
2186b6a203SDmytro Laktyushkin  *
2286b6a203SDmytro Laktyushkin  * Authors: AMD
2386b6a203SDmytro Laktyushkin  *
2486b6a203SDmytro Laktyushkin  */
2586b6a203SDmytro Laktyushkin 
26e6303950SDmytro Laktyushkin #ifndef _DCE_IPP_H_
27e6303950SDmytro Laktyushkin #define _DCE_IPP_H_
2886b6a203SDmytro Laktyushkin 
2986b6a203SDmytro Laktyushkin #include "ipp.h"
3086b6a203SDmytro Laktyushkin 
3186b6a203SDmytro Laktyushkin #define TO_DCE_IPP(ipp)\
3286b6a203SDmytro Laktyushkin 	container_of(ipp, struct dce_ipp, base)
3386b6a203SDmytro Laktyushkin 
3486b6a203SDmytro Laktyushkin #define IPP_COMMON_REG_LIST_DCE_BASE(id) \
3586b6a203SDmytro Laktyushkin 	SRI(CUR_UPDATE, DCP, id), \
3686b6a203SDmytro Laktyushkin 	SRI(CUR_CONTROL, DCP, id), \
3786b6a203SDmytro Laktyushkin 	SRI(CUR_POSITION, DCP, id), \
3886b6a203SDmytro Laktyushkin 	SRI(CUR_HOT_SPOT, DCP, id), \
3986b6a203SDmytro Laktyushkin 	SRI(CUR_COLOR1, DCP, id), \
4086b6a203SDmytro Laktyushkin 	SRI(CUR_COLOR2, DCP, id), \
4186b6a203SDmytro Laktyushkin 	SRI(CUR_SIZE, DCP, id), \
4286b6a203SDmytro Laktyushkin 	SRI(CUR_SURFACE_ADDRESS_HIGH, DCP, id), \
4386b6a203SDmytro Laktyushkin 	SRI(CUR_SURFACE_ADDRESS, DCP, id), \
4486b6a203SDmytro Laktyushkin 	SRI(PRESCALE_GRPH_CONTROL, DCP, id), \
4586b6a203SDmytro Laktyushkin 	SRI(PRESCALE_VALUES_GRPH_R, DCP, id), \
4686b6a203SDmytro Laktyushkin 	SRI(PRESCALE_VALUES_GRPH_G, DCP, id), \
4786b6a203SDmytro Laktyushkin 	SRI(PRESCALE_VALUES_GRPH_B, DCP, id), \
4886b6a203SDmytro Laktyushkin 	SRI(INPUT_GAMMA_CONTROL, DCP, id), \
4986b6a203SDmytro Laktyushkin 	SRI(DC_LUT_WRITE_EN_MASK, DCP, id), \
5086b6a203SDmytro Laktyushkin 	SRI(DC_LUT_RW_MODE, DCP, id), \
5186b6a203SDmytro Laktyushkin 	SRI(DC_LUT_CONTROL, DCP, id), \
5286b6a203SDmytro Laktyushkin 	SRI(DC_LUT_RW_INDEX, DCP, id), \
5386b6a203SDmytro Laktyushkin 	SRI(DC_LUT_SEQ_COLOR, DCP, id), \
5486b6a203SDmytro Laktyushkin 	SRI(DEGAMMA_CONTROL, DCP, id)
5586b6a203SDmytro Laktyushkin 
56e6303950SDmytro Laktyushkin #define IPP_DCE100_REG_LIST_DCE_BASE(id) \
57e6303950SDmytro Laktyushkin 	IPP_COMMON_REG_LIST_DCE_BASE(id), \
58e6303950SDmytro Laktyushkin 	SRI(DCFE_MEM_PWR_CTRL, CRTC, id)
59e6303950SDmytro Laktyushkin 
60e6303950SDmytro Laktyushkin #define IPP_DCE110_REG_LIST_DCE_BASE(id) \
61e6303950SDmytro Laktyushkin 	IPP_COMMON_REG_LIST_DCE_BASE(id), \
62e6303950SDmytro Laktyushkin 	SRI(DCFE_MEM_PWR_CTRL, DCFE, id)
63e6303950SDmytro Laktyushkin 
6486b6a203SDmytro Laktyushkin #define IPP_SF(reg_name, field_name, post_fix)\
6586b6a203SDmytro Laktyushkin 	.field_name = reg_name ## __ ## field_name ## post_fix
6686b6a203SDmytro Laktyushkin 
6786b6a203SDmytro Laktyushkin #define IPP_COMMON_MASK_SH_LIST_DCE_COMMON_BASE(mask_sh) \
6886b6a203SDmytro Laktyushkin 	IPP_SF(CUR_UPDATE, CURSOR_UPDATE_LOCK, mask_sh), \
6986b6a203SDmytro Laktyushkin 	IPP_SF(CUR_CONTROL, CURSOR_EN, mask_sh), \
7086b6a203SDmytro Laktyushkin 	IPP_SF(CUR_CONTROL, CURSOR_MODE, mask_sh), \
7186b6a203SDmytro Laktyushkin 	IPP_SF(CUR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
7286b6a203SDmytro Laktyushkin 	IPP_SF(CUR_CONTROL, CUR_INV_TRANS_CLAMP, mask_sh), \
7386b6a203SDmytro Laktyushkin 	IPP_SF(CUR_POSITION, CURSOR_X_POSITION, mask_sh), \
7486b6a203SDmytro Laktyushkin 	IPP_SF(CUR_POSITION, CURSOR_Y_POSITION, mask_sh), \
7586b6a203SDmytro Laktyushkin 	IPP_SF(CUR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
7686b6a203SDmytro Laktyushkin 	IPP_SF(CUR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
7786b6a203SDmytro Laktyushkin 	IPP_SF(CUR_COLOR1, CUR_COLOR1_BLUE, mask_sh), \
7886b6a203SDmytro Laktyushkin 	IPP_SF(CUR_COLOR1, CUR_COLOR1_GREEN, mask_sh), \
7986b6a203SDmytro Laktyushkin 	IPP_SF(CUR_COLOR1, CUR_COLOR1_RED, mask_sh), \
8086b6a203SDmytro Laktyushkin 	IPP_SF(CUR_COLOR2, CUR_COLOR2_BLUE, mask_sh), \
8186b6a203SDmytro Laktyushkin 	IPP_SF(CUR_COLOR2, CUR_COLOR2_GREEN, mask_sh), \
8286b6a203SDmytro Laktyushkin 	IPP_SF(CUR_COLOR2, CUR_COLOR2_RED, mask_sh), \
8386b6a203SDmytro Laktyushkin 	IPP_SF(CUR_SIZE, CURSOR_WIDTH, mask_sh), \
8486b6a203SDmytro Laktyushkin 	IPP_SF(CUR_SIZE, CURSOR_HEIGHT, mask_sh), \
8586b6a203SDmytro Laktyushkin 	IPP_SF(CUR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
8686b6a203SDmytro Laktyushkin 	IPP_SF(CUR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
8786b6a203SDmytro Laktyushkin 	IPP_SF(PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_BYPASS, mask_sh), \
8886b6a203SDmytro Laktyushkin 	IPP_SF(PRESCALE_VALUES_GRPH_R, GRPH_PRESCALE_SCALE_R, mask_sh), \
8986b6a203SDmytro Laktyushkin 	IPP_SF(PRESCALE_VALUES_GRPH_R, GRPH_PRESCALE_BIAS_R, mask_sh), \
9086b6a203SDmytro Laktyushkin 	IPP_SF(PRESCALE_VALUES_GRPH_G, GRPH_PRESCALE_SCALE_G, mask_sh), \
9186b6a203SDmytro Laktyushkin 	IPP_SF(PRESCALE_VALUES_GRPH_G, GRPH_PRESCALE_BIAS_G, mask_sh), \
9286b6a203SDmytro Laktyushkin 	IPP_SF(PRESCALE_VALUES_GRPH_B, GRPH_PRESCALE_SCALE_B, mask_sh), \
9386b6a203SDmytro Laktyushkin 	IPP_SF(PRESCALE_VALUES_GRPH_B, GRPH_PRESCALE_BIAS_B, mask_sh), \
9486b6a203SDmytro Laktyushkin 	IPP_SF(INPUT_GAMMA_CONTROL, GRPH_INPUT_GAMMA_MODE, mask_sh), \
9586b6a203SDmytro Laktyushkin 	IPP_SF(DC_LUT_WRITE_EN_MASK, DC_LUT_WRITE_EN_MASK, mask_sh), \
9686b6a203SDmytro Laktyushkin 	IPP_SF(DC_LUT_RW_MODE, DC_LUT_RW_MODE, mask_sh), \
9786b6a203SDmytro Laktyushkin 	IPP_SF(DC_LUT_CONTROL, DC_LUT_DATA_R_FORMAT, mask_sh), \
9886b6a203SDmytro Laktyushkin 	IPP_SF(DC_LUT_CONTROL, DC_LUT_DATA_G_FORMAT, mask_sh), \
9986b6a203SDmytro Laktyushkin 	IPP_SF(DC_LUT_CONTROL, DC_LUT_DATA_B_FORMAT, mask_sh), \
10086b6a203SDmytro Laktyushkin 	IPP_SF(DC_LUT_RW_INDEX, DC_LUT_RW_INDEX, mask_sh), \
10186b6a203SDmytro Laktyushkin 	IPP_SF(DC_LUT_SEQ_COLOR, DC_LUT_SEQ_COLOR, mask_sh), \
10286b6a203SDmytro Laktyushkin 	IPP_SF(DEGAMMA_CONTROL, GRPH_DEGAMMA_MODE, mask_sh), \
10386b6a203SDmytro Laktyushkin 	IPP_SF(DEGAMMA_CONTROL, CURSOR_DEGAMMA_MODE, mask_sh), \
10486b6a203SDmytro Laktyushkin 	IPP_SF(DEGAMMA_CONTROL, CURSOR2_DEGAMMA_MODE, mask_sh)
10586b6a203SDmytro Laktyushkin 
106e6303950SDmytro Laktyushkin #define IPP_DCE100_MASK_SH_LIST_DCE_COMMON_BASE(mask_sh) \
107e6303950SDmytro Laktyushkin 	IPP_COMMON_MASK_SH_LIST_DCE_COMMON_BASE(mask_sh), \
108e6303950SDmytro Laktyushkin 	IPP_SF(DCFE_MEM_PWR_CTRL, DCP_LUT_MEM_PWR_DIS, mask_sh)
109e6303950SDmytro Laktyushkin 
110e6303950SDmytro Laktyushkin #define IPP_DCE120_MASK_SH_LIST_SOC_BASE(mask_sh) \
11186b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_UPDATE, CURSOR_UPDATE_LOCK, mask_sh), \
11286b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_CONTROL, CURSOR_EN, mask_sh), \
11386b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_CONTROL, CURSOR_MODE, mask_sh), \
11486b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
11586b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_CONTROL, CUR_INV_TRANS_CLAMP, mask_sh), \
11686b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_POSITION, CURSOR_X_POSITION, mask_sh), \
11786b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_POSITION, CURSOR_Y_POSITION, mask_sh), \
11886b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
11986b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
12086b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_COLOR1, CUR_COLOR1_BLUE, mask_sh), \
12186b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_COLOR1, CUR_COLOR1_GREEN, mask_sh), \
12286b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_COLOR1, CUR_COLOR1_RED, mask_sh), \
12386b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_COLOR2, CUR_COLOR2_BLUE, mask_sh), \
12486b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_COLOR2, CUR_COLOR2_GREEN, mask_sh), \
12586b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_COLOR2, CUR_COLOR2_RED, mask_sh), \
12686b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_SIZE, CURSOR_WIDTH, mask_sh), \
12786b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_SIZE, CURSOR_HEIGHT, mask_sh), \
12886b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
12986b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_CUR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
13086b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_BYPASS, mask_sh), \
13186b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_PRESCALE_VALUES_GRPH_R, GRPH_PRESCALE_SCALE_R, mask_sh), \
13286b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_PRESCALE_VALUES_GRPH_R, GRPH_PRESCALE_BIAS_R, mask_sh), \
13386b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_PRESCALE_VALUES_GRPH_G, GRPH_PRESCALE_SCALE_G, mask_sh), \
13486b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_PRESCALE_VALUES_GRPH_G, GRPH_PRESCALE_BIAS_G, mask_sh), \
13586b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_PRESCALE_VALUES_GRPH_B, GRPH_PRESCALE_SCALE_B, mask_sh), \
13686b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_PRESCALE_VALUES_GRPH_B, GRPH_PRESCALE_BIAS_B, mask_sh), \
13786b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_INPUT_GAMMA_CONTROL, GRPH_INPUT_GAMMA_MODE, mask_sh), \
13886b6a203SDmytro Laktyushkin 	IPP_SF(DCFE0_DCFE_MEM_PWR_CTRL, DCP_LUT_MEM_PWR_DIS, mask_sh), \
13986b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_DC_LUT_WRITE_EN_MASK, DC_LUT_WRITE_EN_MASK, mask_sh), \
14086b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_DC_LUT_RW_MODE, DC_LUT_RW_MODE, mask_sh), \
14186b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_DC_LUT_CONTROL, DC_LUT_DATA_R_FORMAT, mask_sh), \
14286b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_DC_LUT_CONTROL, DC_LUT_DATA_G_FORMAT, mask_sh), \
14386b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_DC_LUT_CONTROL, DC_LUT_DATA_B_FORMAT, mask_sh), \
14486b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_DC_LUT_RW_INDEX, DC_LUT_RW_INDEX, mask_sh), \
14586b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_DC_LUT_SEQ_COLOR, DC_LUT_SEQ_COLOR, mask_sh), \
14686b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_DEGAMMA_CONTROL, GRPH_DEGAMMA_MODE, mask_sh), \
14786b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_DEGAMMA_CONTROL, CURSOR_DEGAMMA_MODE, mask_sh), \
14886b6a203SDmytro Laktyushkin 	IPP_SF(DCP0_DEGAMMA_CONTROL, CURSOR2_DEGAMMA_MODE, mask_sh)
14986b6a203SDmytro Laktyushkin 
15089571d7cSMauro Rossi #if defined(CONFIG_DRM_AMD_DC_SI)
15189571d7cSMauro Rossi #define IPP_DCE60_MASK_SH_LIST_DCE_COMMON_BASE(mask_sh) \
15289571d7cSMauro Rossi 	IPP_SF(CUR_UPDATE, CURSOR_UPDATE_LOCK, mask_sh), \
15389571d7cSMauro Rossi 	IPP_SF(CUR_CONTROL, CURSOR_EN, mask_sh), \
15489571d7cSMauro Rossi 	IPP_SF(CUR_CONTROL, CURSOR_MODE, mask_sh), \
15589571d7cSMauro Rossi 	IPP_SF(CUR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
15689571d7cSMauro Rossi 	IPP_SF(CUR_CONTROL, CUR_INV_TRANS_CLAMP, mask_sh), \
15789571d7cSMauro Rossi 	IPP_SF(CUR_POSITION, CURSOR_X_POSITION, mask_sh), \
15889571d7cSMauro Rossi 	IPP_SF(CUR_POSITION, CURSOR_Y_POSITION, mask_sh), \
15989571d7cSMauro Rossi 	IPP_SF(CUR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
16089571d7cSMauro Rossi 	IPP_SF(CUR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
16189571d7cSMauro Rossi 	IPP_SF(CUR_COLOR1, CUR_COLOR1_BLUE, mask_sh), \
16289571d7cSMauro Rossi 	IPP_SF(CUR_COLOR1, CUR_COLOR1_GREEN, mask_sh), \
16389571d7cSMauro Rossi 	IPP_SF(CUR_COLOR1, CUR_COLOR1_RED, mask_sh), \
16489571d7cSMauro Rossi 	IPP_SF(CUR_COLOR2, CUR_COLOR2_BLUE, mask_sh), \
16589571d7cSMauro Rossi 	IPP_SF(CUR_COLOR2, CUR_COLOR2_GREEN, mask_sh), \
16689571d7cSMauro Rossi 	IPP_SF(CUR_COLOR2, CUR_COLOR2_RED, mask_sh), \
16789571d7cSMauro Rossi 	IPP_SF(CUR_SIZE, CURSOR_WIDTH, mask_sh), \
16889571d7cSMauro Rossi 	IPP_SF(CUR_SIZE, CURSOR_HEIGHT, mask_sh), \
16989571d7cSMauro Rossi 	IPP_SF(CUR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
17089571d7cSMauro Rossi 	IPP_SF(CUR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
17189571d7cSMauro Rossi 	IPP_SF(PRESCALE_GRPH_CONTROL, GRPH_PRESCALE_BYPASS, mask_sh), \
17289571d7cSMauro Rossi 	IPP_SF(PRESCALE_VALUES_GRPH_R, GRPH_PRESCALE_SCALE_R, mask_sh), \
17389571d7cSMauro Rossi 	IPP_SF(PRESCALE_VALUES_GRPH_R, GRPH_PRESCALE_BIAS_R, mask_sh), \
17489571d7cSMauro Rossi 	IPP_SF(PRESCALE_VALUES_GRPH_G, GRPH_PRESCALE_SCALE_G, mask_sh), \
17589571d7cSMauro Rossi 	IPP_SF(PRESCALE_VALUES_GRPH_G, GRPH_PRESCALE_BIAS_G, mask_sh), \
17689571d7cSMauro Rossi 	IPP_SF(PRESCALE_VALUES_GRPH_B, GRPH_PRESCALE_SCALE_B, mask_sh), \
17789571d7cSMauro Rossi 	IPP_SF(PRESCALE_VALUES_GRPH_B, GRPH_PRESCALE_BIAS_B, mask_sh), \
17889571d7cSMauro Rossi 	IPP_SF(INPUT_GAMMA_CONTROL, GRPH_INPUT_GAMMA_MODE, mask_sh), \
17989571d7cSMauro Rossi 	IPP_SF(DC_LUT_WRITE_EN_MASK, DC_LUT_WRITE_EN_MASK, mask_sh), \
18089571d7cSMauro Rossi 	IPP_SF(DC_LUT_RW_MODE, DC_LUT_RW_MODE, mask_sh), \
18189571d7cSMauro Rossi 	IPP_SF(DC_LUT_CONTROL, DC_LUT_DATA_R_FORMAT, mask_sh), \
18289571d7cSMauro Rossi 	IPP_SF(DC_LUT_CONTROL, DC_LUT_DATA_G_FORMAT, mask_sh), \
18389571d7cSMauro Rossi 	IPP_SF(DC_LUT_CONTROL, DC_LUT_DATA_B_FORMAT, mask_sh), \
18489571d7cSMauro Rossi 	IPP_SF(DC_LUT_RW_INDEX, DC_LUT_RW_INDEX, mask_sh), \
18589571d7cSMauro Rossi 	IPP_SF(DC_LUT_SEQ_COLOR, DC_LUT_SEQ_COLOR, mask_sh), \
18689571d7cSMauro Rossi 	IPP_SF(DEGAMMA_CONTROL, GRPH_DEGAMMA_MODE, mask_sh), \
18789571d7cSMauro Rossi 	IPP_SF(DEGAMMA_CONTROL, CURSOR_DEGAMMA_MODE, mask_sh)
18889571d7cSMauro Rossi #endif
18989571d7cSMauro Rossi 
19086b6a203SDmytro Laktyushkin #define IPP_REG_FIELD_LIST(type) \
19186b6a203SDmytro Laktyushkin 	type CURSOR_UPDATE_LOCK; \
19286b6a203SDmytro Laktyushkin 	type CURSOR_EN; \
19386b6a203SDmytro Laktyushkin 	type CURSOR_X_POSITION; \
19486b6a203SDmytro Laktyushkin 	type CURSOR_Y_POSITION; \
19586b6a203SDmytro Laktyushkin 	type CURSOR_HOT_SPOT_X; \
19686b6a203SDmytro Laktyushkin 	type CURSOR_HOT_SPOT_Y; \
19786b6a203SDmytro Laktyushkin 	type CURSOR_MODE; \
19886b6a203SDmytro Laktyushkin 	type CURSOR_2X_MAGNIFY; \
19986b6a203SDmytro Laktyushkin 	type CUR_INV_TRANS_CLAMP; \
20086b6a203SDmytro Laktyushkin 	type CUR_COLOR1_BLUE; \
20186b6a203SDmytro Laktyushkin 	type CUR_COLOR1_GREEN; \
20286b6a203SDmytro Laktyushkin 	type CUR_COLOR1_RED; \
20386b6a203SDmytro Laktyushkin 	type CUR_COLOR2_BLUE; \
20486b6a203SDmytro Laktyushkin 	type CUR_COLOR2_GREEN; \
20586b6a203SDmytro Laktyushkin 	type CUR_COLOR2_RED; \
20686b6a203SDmytro Laktyushkin 	type CURSOR_WIDTH; \
20786b6a203SDmytro Laktyushkin 	type CURSOR_HEIGHT; \
20886b6a203SDmytro Laktyushkin 	type CURSOR_SURFACE_ADDRESS_HIGH; \
20986b6a203SDmytro Laktyushkin 	type CURSOR_SURFACE_ADDRESS; \
21086b6a203SDmytro Laktyushkin 	type GRPH_PRESCALE_BYPASS; \
21186b6a203SDmytro Laktyushkin 	type GRPH_PRESCALE_SCALE_R; \
21286b6a203SDmytro Laktyushkin 	type GRPH_PRESCALE_BIAS_R; \
21386b6a203SDmytro Laktyushkin 	type GRPH_PRESCALE_SCALE_G; \
21486b6a203SDmytro Laktyushkin 	type GRPH_PRESCALE_BIAS_G; \
21586b6a203SDmytro Laktyushkin 	type GRPH_PRESCALE_SCALE_B; \
21686b6a203SDmytro Laktyushkin 	type GRPH_PRESCALE_BIAS_B; \
21786b6a203SDmytro Laktyushkin 	type GRPH_INPUT_GAMMA_MODE; \
21886b6a203SDmytro Laktyushkin 	type DCP_LUT_MEM_PWR_DIS; \
21986b6a203SDmytro Laktyushkin 	type DC_LUT_WRITE_EN_MASK; \
22086b6a203SDmytro Laktyushkin 	type DC_LUT_RW_MODE; \
22186b6a203SDmytro Laktyushkin 	type DC_LUT_DATA_R_FORMAT; \
22286b6a203SDmytro Laktyushkin 	type DC_LUT_DATA_G_FORMAT; \
22386b6a203SDmytro Laktyushkin 	type DC_LUT_DATA_B_FORMAT; \
22486b6a203SDmytro Laktyushkin 	type DC_LUT_RW_INDEX; \
22586b6a203SDmytro Laktyushkin 	type DC_LUT_SEQ_COLOR; \
22686b6a203SDmytro Laktyushkin 	type GRPH_DEGAMMA_MODE; \
22786b6a203SDmytro Laktyushkin 	type CURSOR_DEGAMMA_MODE; \
22886b6a203SDmytro Laktyushkin 	type CURSOR2_DEGAMMA_MODE
22986b6a203SDmytro Laktyushkin 
23086b6a203SDmytro Laktyushkin struct dce_ipp_shift {
23186b6a203SDmytro Laktyushkin 	IPP_REG_FIELD_LIST(uint8_t);
23286b6a203SDmytro Laktyushkin };
23386b6a203SDmytro Laktyushkin 
23486b6a203SDmytro Laktyushkin struct dce_ipp_mask {
23586b6a203SDmytro Laktyushkin 	IPP_REG_FIELD_LIST(uint32_t);
23686b6a203SDmytro Laktyushkin };
23786b6a203SDmytro Laktyushkin 
23886b6a203SDmytro Laktyushkin struct dce_ipp_registers {
23986b6a203SDmytro Laktyushkin 	uint32_t CUR_UPDATE;
24086b6a203SDmytro Laktyushkin 	uint32_t CUR_CONTROL;
24186b6a203SDmytro Laktyushkin 	uint32_t CUR_POSITION;
24286b6a203SDmytro Laktyushkin 	uint32_t CUR_HOT_SPOT;
24386b6a203SDmytro Laktyushkin 	uint32_t CUR_COLOR1;
24486b6a203SDmytro Laktyushkin 	uint32_t CUR_COLOR2;
24586b6a203SDmytro Laktyushkin 	uint32_t CUR_SIZE;
24686b6a203SDmytro Laktyushkin 	uint32_t CUR_SURFACE_ADDRESS_HIGH;
24786b6a203SDmytro Laktyushkin 	uint32_t CUR_SURFACE_ADDRESS;
24886b6a203SDmytro Laktyushkin 	uint32_t PRESCALE_GRPH_CONTROL;
24986b6a203SDmytro Laktyushkin 	uint32_t PRESCALE_VALUES_GRPH_R;
25086b6a203SDmytro Laktyushkin 	uint32_t PRESCALE_VALUES_GRPH_G;
25186b6a203SDmytro Laktyushkin 	uint32_t PRESCALE_VALUES_GRPH_B;
25286b6a203SDmytro Laktyushkin 	uint32_t INPUT_GAMMA_CONTROL;
25386b6a203SDmytro Laktyushkin 	uint32_t DCFE_MEM_PWR_CTRL;
25486b6a203SDmytro Laktyushkin 	uint32_t DC_LUT_WRITE_EN_MASK;
25586b6a203SDmytro Laktyushkin 	uint32_t DC_LUT_RW_MODE;
25686b6a203SDmytro Laktyushkin 	uint32_t DC_LUT_CONTROL;
25786b6a203SDmytro Laktyushkin 	uint32_t DC_LUT_RW_INDEX;
25886b6a203SDmytro Laktyushkin 	uint32_t DC_LUT_SEQ_COLOR;
25986b6a203SDmytro Laktyushkin 	uint32_t DEGAMMA_CONTROL;
26086b6a203SDmytro Laktyushkin };
26186b6a203SDmytro Laktyushkin 
26286b6a203SDmytro Laktyushkin struct dce_ipp {
26386b6a203SDmytro Laktyushkin 	struct input_pixel_processor base;
26486b6a203SDmytro Laktyushkin 	const struct dce_ipp_registers *regs;
26586b6a203SDmytro Laktyushkin 	const struct dce_ipp_shift *ipp_shift;
26686b6a203SDmytro Laktyushkin 	const struct dce_ipp_mask *ipp_mask;
26786b6a203SDmytro Laktyushkin };
26886b6a203SDmytro Laktyushkin 
26986b6a203SDmytro Laktyushkin void dce_ipp_construct(struct dce_ipp *ipp_dce,
27086b6a203SDmytro Laktyushkin 	struct dc_context *ctx,
27186b6a203SDmytro Laktyushkin 	int inst,
27286b6a203SDmytro Laktyushkin 	const struct dce_ipp_registers *regs,
27386b6a203SDmytro Laktyushkin 	const struct dce_ipp_shift *ipp_shift,
27486b6a203SDmytro Laktyushkin 	const struct dce_ipp_mask *ipp_mask);
27586b6a203SDmytro Laktyushkin 
27689571d7cSMauro Rossi #if defined(CONFIG_DRM_AMD_DC_SI)
27789571d7cSMauro Rossi void dce60_ipp_construct(struct dce_ipp *ipp_dce,
27889571d7cSMauro Rossi 	struct dc_context *ctx,
27989571d7cSMauro Rossi 	int inst,
28089571d7cSMauro Rossi 	const struct dce_ipp_registers *regs,
28189571d7cSMauro Rossi 	const struct dce_ipp_shift *ipp_shift,
28289571d7cSMauro Rossi 	const struct dce_ipp_mask *ipp_mask);
28389571d7cSMauro Rossi #endif
28489571d7cSMauro Rossi 
285e6303950SDmytro Laktyushkin void dce_ipp_destroy(struct input_pixel_processor **ipp);
286e6303950SDmytro Laktyushkin 
287e6303950SDmytro Laktyushkin #endif /* _DCE_IPP_H_ */
288