···11+/*22+* Copyright 2016 Advanced Micro Devices, Inc.33+ *44+ * Permission is hereby granted, free of charge, to any person obtaining a55+ * copy of this software and associated documentation files (the "Software"),66+ * to deal in the Software without restriction, including without limitation77+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,88+ * and/or sell copies of the Software, and to permit persons to whom the99+ * Software is furnished to do so, subject to the following conditions:1010+ *1111+ * The above copyright notice and this permission notice shall be included in1212+ * all copies or substantial portions of the Software.1313+ *1414+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1515+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1616+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL1717+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR1818+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,1919+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR2020+ * OTHER DEALINGS IN THE SOFTWARE.2121+ *2222+ * Authors: AMD2323+ *2424+ */2525+2626+#ifndef __DC_HWSS_DCN10_H__2727+#define __DC_HWSS_DCN10_H__2828+2929+#include "core_types.h"3030+3131+struct core_dc;3232+3333+bool dcn10_hw_sequencer_construct(struct core_dc *dc);3434+extern void fill_display_configs(3535+ const struct validate_context *context,3636+ struct dm_pp_display_configuration *pp_display_cfg);3737+3838+#endif /* __DC_HWSS_DCN10_H__ */
···11+/* Copyright 2012-15 Advanced Micro Devices, Inc.22+ *33+ * Permission is hereby granted, free of charge, to any person obtaining a44+ * copy of this software and associated documentation files (the "Software"),55+ * to deal in the Software without restriction, including without limitation66+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,77+ * and/or sell copies of the Software, and to permit persons to whom the88+ * Software is furnished to do so, subject to the following conditions:99+ *1010+ * The above copyright notice and this permission notice shall be included in1111+ * all copies or substantial portions of the Software.1212+ *1313+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1414+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1515+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL1616+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR1717+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,1818+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR1919+ * OTHER DEALINGS IN THE SOFTWARE.2020+ *2121+ * Authors: AMD2222+ *2323+ */2424+2525+#ifndef __DC_MEM_INPUT_DCN10_H__2626+#define __DC_MEM_INPUT_DCN10_H__2727+2828+#include "mem_input.h"2929+3030+#define TO_DCN10_MEM_INPUT(mi)\3131+ container_of(mi, struct dcn10_mem_input, base)3232+3333+3434+#define MI_DCN10_REG_LIST(id)\3535+ SRI(DCHUBP_CNTL, HUBP, id),\3636+ SRI(HUBPREQ_DEBUG_DB, HUBP, id),\3737+ SRI(DCSURF_ADDR_CONFIG, HUBP, id),\3838+ SRI(DCSURF_TILING_CONFIG, HUBP, id),\3939+ SRI(DCSURF_SURFACE_PITCH, HUBPREQ, id),\4040+ SRI(DCSURF_SURFACE_PITCH_C, HUBPREQ, id),\4141+ SRI(DCSURF_SURFACE_CONFIG, HUBP, id),\4242+ SRI(DCSURF_FLIP_CONTROL, HUBPREQ, id),\4343+ SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\4444+ SRI(DCSURF_PRIMARY_SURFACE_ADDRESS, HUBPREQ, id),\4545+ SRI(DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\4646+ SRI(DCSURF_SECONDARY_SURFACE_ADDRESS, HUBPREQ, id),\4747+ SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\4848+ SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS, HUBPREQ, id),\4949+ SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, HUBPREQ, id),\5050+ SRI(DCSURF_SECONDARY_META_SURFACE_ADDRESS, HUBPREQ, id),\5151+ SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\5252+ SRI(DCSURF_PRIMARY_SURFACE_ADDRESS_C, HUBPREQ, id),\5353+ SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, HUBPREQ, id),\5454+ SRI(DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, HUBPREQ, id),\5555+ SRI(DCSURF_SURFACE_CONTROL, HUBPREQ, id),\5656+ SRI(HUBPRET_CONTROL, HUBPRET, id),\5757+ SRI(DCN_EXPANSION_MODE, HUBPREQ, id),\5858+ SRI(DCHUBP_REQ_SIZE_CONFIG, HUBP, id),\5959+ SRI(DCHUBP_REQ_SIZE_CONFIG_C, HUBP, id),\6060+ SRI(BLANK_OFFSET_0, HUBPREQ, id),\6161+ SRI(BLANK_OFFSET_1, HUBPREQ, id),\6262+ SRI(DST_DIMENSIONS, HUBPREQ, id),\6363+ SRI(DST_AFTER_SCALER, HUBPREQ, id),\6464+ SRI(PREFETCH_SETTINS, HUBPREQ, id),\6565+ SRI(VBLANK_PARAMETERS_0, HUBPREQ, id),\6666+ SRI(REF_FREQ_TO_PIX_FREQ, HUBPREQ, id),\6767+ SRI(VBLANK_PARAMETERS_1, HUBPREQ, id),\6868+ SRI(VBLANK_PARAMETERS_3, HUBPREQ, id),\6969+ SRI(NOM_PARAMETERS_0, HUBPREQ, id),\7070+ SRI(NOM_PARAMETERS_1, HUBPREQ, id),\7171+ SRI(NOM_PARAMETERS_4, HUBPREQ, id),\7272+ SRI(NOM_PARAMETERS_5, HUBPREQ, id),\7373+ SRI(PER_LINE_DELIVERY_PRE, HUBPREQ, id),\7474+ SRI(PER_LINE_DELIVERY, HUBPREQ, id),\7575+ SRI(PREFETCH_SETTINS_C, HUBPREQ, id),\7676+ SRI(VBLANK_PARAMETERS_2, HUBPREQ, id),\7777+ SRI(VBLANK_PARAMETERS_4, HUBPREQ, id),\7878+ SRI(NOM_PARAMETERS_2, HUBPREQ, id),\7979+ SRI(NOM_PARAMETERS_3, HUBPREQ, id),\8080+ SRI(NOM_PARAMETERS_6, HUBPREQ, id),\8181+ SRI(NOM_PARAMETERS_7, HUBPREQ, id),\8282+ SRI(DCN_TTU_QOS_WM, HUBPREQ, id),\8383+ SRI(DCN_GLOBAL_TTU_CNTL, HUBPREQ, id),\8484+ SRI(DCN_SURF0_TTU_CNTL0, HUBPREQ, id),\8585+ SRI(DCN_SURF0_TTU_CNTL1, HUBPREQ, id),\8686+ SRI(DCN_SURF1_TTU_CNTL0, HUBPREQ, id),\8787+ SRI(DCN_SURF1_TTU_CNTL1, HUBPREQ, id),\8888+ SRI(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, HUBPREQ, id),\8989+ SRI(DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, HUBPREQ, id),\9090+ SRI(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, HUBPREQ, id),\9191+ SRI(DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, HUBPREQ, id),\9292+ SRI(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, HUBPREQ, id),\9393+ SRI(DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, HUBPREQ, id),\9494+ SRI(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, HUBPREQ, id),\9595+ SRI(DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, HUBPREQ, id),\9696+ SRI(DCN_VM_MX_L1_TLB_CNTL, HUBPREQ, id),\9797+ SRI(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, HUBPREQ, id),\9898+ SRI(DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, HUBPREQ, id),\9999+ SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, HUBPREQ, id),\100100+ SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, HUBPREQ, id),\101101+ SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, HUBPREQ, id),\102102+ SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, HUBPREQ, id),\103103+ SR(DCHUBBUB_SDPIF_FB_TOP),\104104+ SR(DCHUBBUB_SDPIF_FB_BASE),\105105+ SR(DCHUBBUB_SDPIF_FB_OFFSET),\106106+ SR(DCHUBBUB_SDPIF_AGP_BASE),\107107+ SR(DCHUBBUB_SDPIF_AGP_BOT),\108108+ SR(DCHUBBUB_SDPIF_AGP_TOP),\109109+ SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A),\110110+ SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A),\111111+ SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A),\112112+ SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A),\113113+ SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A),\114114+ SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B),\115115+ SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B),\116116+ SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B),\117117+ SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B),\118118+ SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B),\119119+ SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C),\120120+ SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C),\121121+ SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C),\122122+ SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C),\123123+ SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C),\124124+ SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D),\125125+ SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D),\126126+ SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D),\127127+ SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D),\128128+ SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D),\129129+ SR(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL),\130130+ SR(DCHUBBUB_ARB_SAT_LEVEL),\131131+ SR(DCHUBBUB_ARB_DF_REQ_OUTSTAND),\132132+ /* todo: get these from GVM instead of reading registers ourselves */\133133+ GC_SR(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32),\134134+ GC_SR(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32),\135135+ GC_SR(VM_CONTEXT0_PAGE_TABLE_START_ADDR_HI32),\136136+ GC_SR(VM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32),\137137+ GC_SR(VM_CONTEXT0_PAGE_TABLE_END_ADDR_HI32),\138138+ GC_SR(VM_CONTEXT0_PAGE_TABLE_END_ADDR_LO32),\139139+ GC_SR(VM_L2_PROTECTION_FAULT_DEFAULT_ADDR_HI32),\140140+ GC_SR(VM_L2_PROTECTION_FAULT_DEFAULT_ADDR_LO32),\141141+ GC_SR(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB),\142142+ GC_SR(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB),\143143+ GC_SR(MC_VM_SYSTEM_APERTURE_LOW_ADDR),\144144+ GC_SR(MC_VM_SYSTEM_APERTURE_HIGH_ADDR)145145+146146+struct dcn_mi_registers {147147+ uint32_t DCHUBP_CNTL;148148+ uint32_t HUBPREQ_DEBUG_DB;149149+ uint32_t DCSURF_ADDR_CONFIG;150150+ uint32_t DCSURF_TILING_CONFIG;151151+ uint32_t DCSURF_SURFACE_PITCH;152152+ uint32_t DCSURF_SURFACE_PITCH_C;153153+ uint32_t DCSURF_SURFACE_CONFIG;154154+ uint32_t DCSURF_FLIP_CONTROL;155155+ uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH;156156+ uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS;157157+ uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH;158158+ uint32_t DCSURF_SECONDARY_SURFACE_ADDRESS;159159+ uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH;160160+ uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS;161161+ uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH;162162+ uint32_t DCSURF_SECONDARY_META_SURFACE_ADDRESS;163163+ uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C;164164+ uint32_t DCSURF_PRIMARY_SURFACE_ADDRESS_C;165165+ uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C;166166+ uint32_t DCSURF_PRIMARY_META_SURFACE_ADDRESS_C;167167+ uint32_t DCSURF_SURFACE_CONTROL;168168+ uint32_t HUBPRET_CONTROL;169169+ uint32_t DCN_EXPANSION_MODE;170170+ uint32_t DCHUBP_REQ_SIZE_CONFIG;171171+ uint32_t DCHUBP_REQ_SIZE_CONFIG_C;172172+ uint32_t BLANK_OFFSET_0;173173+ uint32_t BLANK_OFFSET_1;174174+ uint32_t DST_DIMENSIONS;175175+ uint32_t DST_AFTER_SCALER;176176+ uint32_t PREFETCH_SETTINS;177177+ uint32_t VBLANK_PARAMETERS_0;178178+ uint32_t REF_FREQ_TO_PIX_FREQ;179179+ uint32_t VBLANK_PARAMETERS_1;180180+ uint32_t VBLANK_PARAMETERS_3;181181+ uint32_t NOM_PARAMETERS_0;182182+ uint32_t NOM_PARAMETERS_1;183183+ uint32_t NOM_PARAMETERS_4;184184+ uint32_t NOM_PARAMETERS_5;185185+ uint32_t PER_LINE_DELIVERY_PRE;186186+ uint32_t PER_LINE_DELIVERY;187187+ uint32_t PREFETCH_SETTINS_C;188188+ uint32_t VBLANK_PARAMETERS_2;189189+ uint32_t VBLANK_PARAMETERS_4;190190+ uint32_t NOM_PARAMETERS_2;191191+ uint32_t NOM_PARAMETERS_3;192192+ uint32_t NOM_PARAMETERS_6;193193+ uint32_t NOM_PARAMETERS_7;194194+ uint32_t DCN_TTU_QOS_WM;195195+ uint32_t DCN_GLOBAL_TTU_CNTL;196196+ uint32_t DCN_SURF0_TTU_CNTL0;197197+ uint32_t DCN_SURF0_TTU_CNTL1;198198+ uint32_t DCN_SURF1_TTU_CNTL0;199199+ uint32_t DCN_SURF1_TTU_CNTL1;200200+ uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB;201201+ uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB;202202+ uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB;203203+ uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB;204204+ uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB;205205+ uint32_t DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB;206206+ uint32_t DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB;207207+ uint32_t DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB;208208+ uint32_t DCN_VM_MX_L1_TLB_CNTL;209209+ uint32_t DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB;210210+ uint32_t DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB;211211+ uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB;212212+ uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB;213213+ uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB;214214+ uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB;215215+ uint32_t DCHUBBUB_SDPIF_FB_TOP;216216+ uint32_t DCHUBBUB_SDPIF_FB_BASE;217217+ uint32_t DCHUBBUB_SDPIF_FB_OFFSET;218218+ uint32_t DCHUBBUB_SDPIF_AGP_BASE;219219+ uint32_t DCHUBBUB_SDPIF_AGP_BOT;220220+ uint32_t DCHUBBUB_SDPIF_AGP_TOP;221221+ uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A;222222+ uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A;223223+ uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A;224224+ uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A;225225+ uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A;226226+ uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B;227227+ uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B;228228+ uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B;229229+ uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B;230230+ uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B;231231+ uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C;232232+ uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C;233233+ uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C;234234+ uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C;235235+ uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C;236236+ uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D;237237+ uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D;238238+ uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D;239239+ uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D;240240+ uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D;241241+ uint32_t DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL;242242+ uint32_t DCHUBBUB_ARB_SAT_LEVEL;243243+ uint32_t DCHUBBUB_ARB_DF_REQ_OUTSTAND;244244+245245+ /* GC registers. read only. temporary hack */246246+ uint32_t VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32;247247+ uint32_t VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32;248248+ uint32_t VM_CONTEXT0_PAGE_TABLE_START_ADDR_HI32;249249+ uint32_t VM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32;250250+ uint32_t VM_CONTEXT0_PAGE_TABLE_END_ADDR_HI32;251251+ uint32_t VM_CONTEXT0_PAGE_TABLE_END_ADDR_LO32;252252+ uint32_t VM_L2_PROTECTION_FAULT_DEFAULT_ADDR_HI32;253253+ uint32_t VM_L2_PROTECTION_FAULT_DEFAULT_ADDR_LO32;254254+ uint32_t MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB;255255+ uint32_t MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB;256256+ uint32_t MC_VM_SYSTEM_APERTURE_LOW_ADDR;257257+ uint32_t MC_VM_SYSTEM_APERTURE_HIGH_ADDR;258258+};259259+260260+#define MI_SF(reg_name, field_name, post_fix)\261261+ .field_name = reg_name ## __ ## field_name ## post_fix262262+263263+#define MI_DCN10_MASK_SH_LIST(mask_sh)\264264+ MI_SF(HUBP0_DCHUBP_CNTL, HUBP_BLANK_EN, mask_sh),\265265+ MI_SF(HUBP0_DCHUBP_CNTL, HUBP_TTU_DISABLE, mask_sh),\266266+ MI_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_PIPES, mask_sh),\267267+ MI_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_BANKS, mask_sh),\268268+ MI_SF(HUBP0_DCSURF_ADDR_CONFIG, PIPE_INTERLEAVE, mask_sh),\269269+ MI_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_SE, mask_sh),\270270+ MI_SF(HUBP0_DCSURF_ADDR_CONFIG, NUM_RB_PER_SE, mask_sh),\271271+ MI_SF(HUBP0_DCSURF_ADDR_CONFIG, MAX_COMPRESSED_FRAGS, mask_sh),\272272+ MI_SF(HUBP0_DCSURF_TILING_CONFIG, SW_MODE, mask_sh),\273273+ MI_SF(HUBP0_DCSURF_TILING_CONFIG, META_LINEAR, mask_sh),\274274+ MI_SF(HUBP0_DCSURF_TILING_CONFIG, RB_ALIGNED, mask_sh),\275275+ MI_SF(HUBP0_DCSURF_TILING_CONFIG, PIPE_ALIGNED, mask_sh),\276276+ MI_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, PITCH, mask_sh),\277277+ MI_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, META_PITCH, mask_sh),\278278+ MI_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, PITCH_C, mask_sh),\279279+ MI_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, META_PITCH_C, mask_sh),\280280+ MI_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\281281+ MI_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\282282+ MI_SF(HUBP0_DCSURF_SURFACE_CONFIG, SURFACE_PIXEL_FORMAT, mask_sh),\283283+ MI_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_TYPE, mask_sh),\284284+ MI_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_UPDATE_PENDING, mask_sh),\285285+ MI_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH, PRIMARY_SURFACE_ADDRESS_HIGH, mask_sh),\286286+ MI_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS, PRIMARY_SURFACE_ADDRESS, mask_sh),\287287+ MI_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS_HIGH, SECONDARY_SURFACE_ADDRESS_HIGH, mask_sh),\288288+ MI_SF(HUBPREQ0_DCSURF_SECONDARY_SURFACE_ADDRESS, SECONDARY_SURFACE_ADDRESS, mask_sh),\289289+ MI_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH, PRIMARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\290290+ MI_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS, PRIMARY_META_SURFACE_ADDRESS, mask_sh),\291291+ MI_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS_HIGH, SECONDARY_META_SURFACE_ADDRESS_HIGH, mask_sh),\292292+ MI_SF(HUBPREQ0_DCSURF_SECONDARY_META_SURFACE_ADDRESS, SECONDARY_META_SURFACE_ADDRESS, mask_sh),\293293+ MI_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_HIGH_C, PRIMARY_SURFACE_ADDRESS_HIGH_C, mask_sh),\294294+ MI_SF(HUBPREQ0_DCSURF_PRIMARY_SURFACE_ADDRESS_C, PRIMARY_SURFACE_ADDRESS_C, mask_sh),\295295+ MI_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_HIGH_C, PRIMARY_META_SURFACE_ADDRESS_HIGH_C, mask_sh),\296296+ MI_SF(HUBPREQ0_DCSURF_PRIMARY_META_SURFACE_ADDRESS_C, PRIMARY_META_SURFACE_ADDRESS_C, mask_sh),\297297+ MI_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_EN, mask_sh),\298298+ MI_SF(HUBPREQ0_DCSURF_SURFACE_CONTROL, PRIMARY_SURFACE_DCC_IND_64B_BLK, mask_sh),\299299+ MI_SF(HUBPRET0_HUBPRET_CONTROL, DET_BUF_PLANE1_BASE_ADDRESS, mask_sh),\300300+ MI_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CB_B, mask_sh),\301301+ MI_SF(HUBPRET0_HUBPRET_CONTROL, CROSSBAR_SRC_CR_R, mask_sh),\302302+ MI_SF(HUBPREQ0_DCN_EXPANSION_MODE, DRQ_EXPANSION_MODE, mask_sh),\303303+ MI_SF(HUBPREQ0_DCN_EXPANSION_MODE, PRQ_EXPANSION_MODE, mask_sh),\304304+ MI_SF(HUBPREQ0_DCN_EXPANSION_MODE, MRQ_EXPANSION_MODE, mask_sh),\305305+ MI_SF(HUBPREQ0_DCN_EXPANSION_MODE, CRQ_EXPANSION_MODE, mask_sh),\306306+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, CHUNK_SIZE, mask_sh),\307307+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_CHUNK_SIZE, mask_sh),\308308+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, META_CHUNK_SIZE, mask_sh),\309309+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MIN_META_CHUNK_SIZE, mask_sh),\310310+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, DPTE_GROUP_SIZE, mask_sh),\311311+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, MPTE_GROUP_SIZE, mask_sh),\312312+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, SWATH_HEIGHT, mask_sh),\313313+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG, PTE_ROW_HEIGHT_LINEAR, mask_sh),\314314+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, CHUNK_SIZE_C, mask_sh),\315315+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_CHUNK_SIZE_C, mask_sh),\316316+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, META_CHUNK_SIZE_C, mask_sh),\317317+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MIN_META_CHUNK_SIZE_C, mask_sh),\318318+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, DPTE_GROUP_SIZE_C, mask_sh),\319319+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, MPTE_GROUP_SIZE_C, mask_sh),\320320+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, SWATH_HEIGHT_C, mask_sh),\321321+ MI_SF(HUBP0_DCHUBP_REQ_SIZE_CONFIG_C, PTE_ROW_HEIGHT_LINEAR_C, mask_sh),\322322+ MI_SF(HUBPREQ0_BLANK_OFFSET_0, REFCYC_H_BLANK_END, mask_sh),\323323+ MI_SF(HUBPREQ0_BLANK_OFFSET_0, DLG_V_BLANK_END, mask_sh),\324324+ MI_SF(HUBPREQ0_BLANK_OFFSET_1, MIN_DST_Y_NEXT_START, mask_sh),\325325+ MI_SF(HUBPREQ0_DST_DIMENSIONS, REFCYC_PER_HTOTAL, mask_sh),\326326+ MI_SF(HUBPREQ0_DST_AFTER_SCALER, REFCYC_X_AFTER_SCALER, mask_sh),\327327+ MI_SF(HUBPREQ0_DST_AFTER_SCALER, DST_Y_AFTER_SCALER, mask_sh),\328328+ MI_SF(HUBPREQ0_PREFETCH_SETTINS, DST_Y_PREFETCH, mask_sh),\329329+ MI_SF(HUBPREQ0_PREFETCH_SETTINS, VRATIO_PREFETCH, mask_sh),\330330+ MI_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_VM_VBLANK, mask_sh),\331331+ MI_SF(HUBPREQ0_VBLANK_PARAMETERS_0, DST_Y_PER_ROW_VBLANK, mask_sh),\332332+ MI_SF(HUBPREQ0_REF_FREQ_TO_PIX_FREQ, REF_FREQ_TO_PIX_FREQ, mask_sh),\333333+ MI_SF(HUBPREQ0_VBLANK_PARAMETERS_1, REFCYC_PER_PTE_GROUP_VBLANK_L, mask_sh),\334334+ MI_SF(HUBPREQ0_VBLANK_PARAMETERS_3, REFCYC_PER_META_CHUNK_VBLANK_L, mask_sh),\335335+ MI_SF(HUBPREQ0_NOM_PARAMETERS_0, DST_Y_PER_PTE_ROW_NOM_L, mask_sh),\336336+ MI_SF(HUBPREQ0_NOM_PARAMETERS_1, REFCYC_PER_PTE_GROUP_NOM_L, mask_sh),\337337+ MI_SF(HUBPREQ0_NOM_PARAMETERS_4, DST_Y_PER_META_ROW_NOM_L, mask_sh),\338338+ MI_SF(HUBPREQ0_NOM_PARAMETERS_5, REFCYC_PER_META_CHUNK_NOM_L, mask_sh),\339339+ MI_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_L, mask_sh),\340340+ MI_SF(HUBPREQ0_PER_LINE_DELIVERY_PRE, REFCYC_PER_LINE_DELIVERY_PRE_C, mask_sh),\341341+ MI_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_L, mask_sh),\342342+ MI_SF(HUBPREQ0_PER_LINE_DELIVERY, REFCYC_PER_LINE_DELIVERY_C, mask_sh),\343343+ MI_SF(HUBPREQ0_PREFETCH_SETTINS_C, VRATIO_PREFETCH_C, mask_sh),\344344+ MI_SF(HUBPREQ0_VBLANK_PARAMETERS_2, REFCYC_PER_PTE_GROUP_VBLANK_C, mask_sh),\345345+ MI_SF(HUBPREQ0_VBLANK_PARAMETERS_4, REFCYC_PER_META_CHUNK_VBLANK_C, mask_sh),\346346+ MI_SF(HUBPREQ0_NOM_PARAMETERS_2, DST_Y_PER_PTE_ROW_NOM_C, mask_sh),\347347+ MI_SF(HUBPREQ0_NOM_PARAMETERS_3, REFCYC_PER_PTE_GROUP_NOM_C, mask_sh),\348348+ MI_SF(HUBPREQ0_NOM_PARAMETERS_6, DST_Y_PER_META_ROW_NOM_C, mask_sh),\349349+ MI_SF(HUBPREQ0_NOM_PARAMETERS_7, REFCYC_PER_META_CHUNK_NOM_C, mask_sh),\350350+ MI_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_LOW_WM, mask_sh),\351351+ MI_SF(HUBPREQ0_DCN_TTU_QOS_WM, QoS_LEVEL_HIGH_WM, mask_sh),\352352+ MI_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, MIN_TTU_VBLANK, mask_sh),\353353+ MI_SF(HUBPREQ0_DCN_GLOBAL_TTU_CNTL, QoS_LEVEL_FLIP, mask_sh),\354354+ MI_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, REFCYC_PER_REQ_DELIVERY, mask_sh),\355355+ MI_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_LEVEL_FIXED, mask_sh),\356356+ MI_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL0, QoS_RAMP_DISABLE, mask_sh),\357357+ MI_SF(HUBPREQ0_DCN_SURF0_TTU_CNTL1, REFCYC_PER_REQ_DELIVERY_PRE, mask_sh),\358358+ MI_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB, mask_sh),\359359+ MI_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB, mask_sh),\360360+ MI_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB, mask_sh),\361361+ MI_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB, mask_sh),\362362+ MI_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB, mask_sh),\363363+ MI_SF(HUBPREQ0_DCN_VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB, mask_sh),\364364+ MI_SF(HUBPREQ0_DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB, mask_sh),\365365+ MI_SF(HUBPREQ0_DCN_VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB, mask_sh),\366366+ MI_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, mask_sh),\367367+ MI_SF(HUBPREQ0_DCN_VM_MX_L1_TLB_CNTL, SYSTEM_ACCESS_MODE, mask_sh),\368368+ MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, mask_sh),\369369+ MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mask_sh),\370370+ MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mask_sh),\371371+ MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB, mask_sh),\372372+ MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, mask_sh),\373373+ MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, mask_sh),\374374+ MI_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, mask_sh),\375375+ MI_SF(DCHUBBUB_SDPIF_FB_TOP, SDPIF_FB_TOP, mask_sh),\376376+ MI_SF(DCHUBBUB_SDPIF_FB_BASE, SDPIF_FB_BASE, mask_sh),\377377+ MI_SF(DCHUBBUB_SDPIF_FB_OFFSET, SDPIF_FB_OFFSET, mask_sh),\378378+ MI_SF(DCHUBBUB_SDPIF_AGP_BASE, SDPIF_AGP_BASE, mask_sh),\379379+ MI_SF(DCHUBBUB_SDPIF_AGP_BOT, SDPIF_AGP_BOT, mask_sh),\380380+ MI_SF(DCHUBBUB_SDPIF_AGP_TOP, SDPIF_AGP_TOP, mask_sh),\381381+ MI_SF(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL, DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST, mask_sh),\382382+ MI_SF(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL, DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE, mask_sh),\383383+ MI_SF(DCHUBBUB_ARB_SAT_LEVEL, DCHUBBUB_ARB_SAT_LEVEL, mask_sh),\384384+ MI_SF(DCHUBBUB_ARB_DF_REQ_OUTSTAND, DCHUBBUB_ARB_MIN_REQ_OUTSTAND, mask_sh),\385385+ /* todo: get these from GVM instead of reading registers ourselves */\386386+ MI_SF(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32, PAGE_DIRECTORY_ENTRY_HI32, mask_sh),\387387+ MI_SF(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32, PAGE_DIRECTORY_ENTRY_LO32, mask_sh),\388388+ MI_SF(VM_CONTEXT0_PAGE_TABLE_START_ADDR_HI32, LOGICAL_PAGE_NUMBER_HI4, mask_sh),\389389+ MI_SF(VM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32, LOGICAL_PAGE_NUMBER_LO32, mask_sh),\390390+ MI_SF(VM_L2_PROTECTION_FAULT_DEFAULT_ADDR_HI32, PHYSICAL_PAGE_ADDR_HI4, mask_sh),\391391+ MI_SF(VM_L2_PROTECTION_FAULT_DEFAULT_ADDR_LO32, PHYSICAL_PAGE_ADDR_LO32, mask_sh),\392392+ MI_SF(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, PHYSICAL_PAGE_NUMBER_MSB, mask_sh),\393393+ MI_SF(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, PHYSICAL_PAGE_NUMBER_LSB, mask_sh),\394394+ MI_SF(MC_VM_SYSTEM_APERTURE_LOW_ADDR, LOGICAL_ADDR, mask_sh)395395+396396+#define DCN_MI_REG_FIELD_LIST(type) \397397+ type HUBP_BLANK_EN;\398398+ type HUBP_TTU_DISABLE;\399399+ type NUM_PIPES;\400400+ type NUM_BANKS;\401401+ type PIPE_INTERLEAVE;\402402+ type NUM_SE;\403403+ type NUM_RB_PER_SE;\404404+ type MAX_COMPRESSED_FRAGS;\405405+ type SW_MODE;\406406+ type META_LINEAR;\407407+ type RB_ALIGNED;\408408+ type PIPE_ALIGNED;\409409+ type PITCH;\410410+ type META_PITCH;\411411+ type PITCH_C;\412412+ type META_PITCH_C;\413413+ type ROTATION_ANGLE;\414414+ type H_MIRROR_EN;\415415+ type SURFACE_PIXEL_FORMAT;\416416+ type SURFACE_FLIP_TYPE;\417417+ type SURFACE_UPDATE_PENDING;\418418+ type PRIMARY_SURFACE_ADDRESS_HIGH;\419419+ type PRIMARY_SURFACE_ADDRESS;\420420+ type SECONDARY_SURFACE_ADDRESS_HIGH;\421421+ type SECONDARY_SURFACE_ADDRESS;\422422+ type PRIMARY_META_SURFACE_ADDRESS_HIGH;\423423+ type PRIMARY_META_SURFACE_ADDRESS;\424424+ type SECONDARY_META_SURFACE_ADDRESS_HIGH;\425425+ type SECONDARY_META_SURFACE_ADDRESS;\426426+ type PRIMARY_SURFACE_ADDRESS_HIGH_C;\427427+ type PRIMARY_SURFACE_ADDRESS_C;\428428+ type PRIMARY_META_SURFACE_ADDRESS_HIGH_C;\429429+ type PRIMARY_META_SURFACE_ADDRESS_C;\430430+ type PRIMARY_SURFACE_DCC_EN;\431431+ type PRIMARY_SURFACE_DCC_IND_64B_BLK;\432432+ type DET_BUF_PLANE1_BASE_ADDRESS;\433433+ type CROSSBAR_SRC_CB_B;\434434+ type CROSSBAR_SRC_CR_R;\435435+ type DRQ_EXPANSION_MODE;\436436+ type PRQ_EXPANSION_MODE;\437437+ type MRQ_EXPANSION_MODE;\438438+ type CRQ_EXPANSION_MODE;\439439+ type CHUNK_SIZE;\440440+ type MIN_CHUNK_SIZE;\441441+ type META_CHUNK_SIZE;\442442+ type MIN_META_CHUNK_SIZE;\443443+ type DPTE_GROUP_SIZE;\444444+ type MPTE_GROUP_SIZE;\445445+ type SWATH_HEIGHT;\446446+ type PTE_ROW_HEIGHT_LINEAR;\447447+ type CHUNK_SIZE_C;\448448+ type MIN_CHUNK_SIZE_C;\449449+ type META_CHUNK_SIZE_C;\450450+ type MIN_META_CHUNK_SIZE_C;\451451+ type DPTE_GROUP_SIZE_C;\452452+ type MPTE_GROUP_SIZE_C;\453453+ type SWATH_HEIGHT_C;\454454+ type PTE_ROW_HEIGHT_LINEAR_C;\455455+ type REFCYC_H_BLANK_END;\456456+ type DLG_V_BLANK_END;\457457+ type MIN_DST_Y_NEXT_START;\458458+ type REFCYC_PER_HTOTAL;\459459+ type REFCYC_X_AFTER_SCALER;\460460+ type DST_Y_AFTER_SCALER;\461461+ type DST_Y_PREFETCH;\462462+ type VRATIO_PREFETCH;\463463+ type DST_Y_PER_VM_VBLANK;\464464+ type DST_Y_PER_ROW_VBLANK;\465465+ type REF_FREQ_TO_PIX_FREQ;\466466+ type REFCYC_PER_PTE_GROUP_VBLANK_L;\467467+ type REFCYC_PER_META_CHUNK_VBLANK_L;\468468+ type DST_Y_PER_PTE_ROW_NOM_L;\469469+ type REFCYC_PER_PTE_GROUP_NOM_L;\470470+ type DST_Y_PER_META_ROW_NOM_L;\471471+ type REFCYC_PER_META_CHUNK_NOM_L;\472472+ type REFCYC_PER_LINE_DELIVERY_PRE_L;\473473+ type REFCYC_PER_LINE_DELIVERY_PRE_C;\474474+ type REFCYC_PER_LINE_DELIVERY_L;\475475+ type REFCYC_PER_LINE_DELIVERY_C;\476476+ type VRATIO_PREFETCH_C;\477477+ type REFCYC_PER_PTE_GROUP_VBLANK_C;\478478+ type REFCYC_PER_META_CHUNK_VBLANK_C;\479479+ type DST_Y_PER_PTE_ROW_NOM_C;\480480+ type REFCYC_PER_PTE_GROUP_NOM_C;\481481+ type DST_Y_PER_META_ROW_NOM_C;\482482+ type REFCYC_PER_META_CHUNK_NOM_C;\483483+ type QoS_LEVEL_LOW_WM;\484484+ type QoS_LEVEL_HIGH_WM;\485485+ type MIN_TTU_VBLANK;\486486+ type QoS_LEVEL_FLIP;\487487+ type REFCYC_PER_REQ_DELIVERY;\488488+ type QoS_LEVEL_FIXED;\489489+ type QoS_RAMP_DISABLE;\490490+ type REFCYC_PER_REQ_DELIVERY_PRE;\491491+ type VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_MSB;\492492+ type VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LSB;\493493+ type VM_CONTEXT0_PAGE_TABLE_START_ADDR_MSB;\494494+ type VM_CONTEXT0_PAGE_TABLE_START_ADDR_LSB;\495495+ type VM_CONTEXT0_PAGE_TABLE_END_ADDR_MSB;\496496+ type VM_CONTEXT0_PAGE_TABLE_END_ADDR_LSB;\497497+ type VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_MSB;\498498+ type VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR_LSB;\499499+ type ENABLE_L1_TLB;\500500+ type SYSTEM_ACCESS_MODE;\501501+ type MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM;\502502+ type MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB;\503503+ type MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB;\504504+ type MC_VM_SYSTEM_APERTURE_LOW_ADDR_MSB;\505505+ type MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB;\506506+ type MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB;\507507+ type MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB;\508508+ type SDPIF_FB_TOP;\509509+ type SDPIF_FB_BASE;\510510+ type SDPIF_FB_OFFSET;\511511+ type SDPIF_AGP_BASE;\512512+ type SDPIF_AGP_BOT;\513513+ type SDPIF_AGP_TOP;\514514+ type DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST;\515515+ type DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE;\516516+ type DCHUBBUB_ARB_SAT_LEVEL;\517517+ type DCHUBBUB_ARB_MIN_REQ_OUTSTAND;\518518+ /* todo: get these from GVM instead of reading registers ourselves */\519519+ type PAGE_DIRECTORY_ENTRY_HI32;\520520+ type PAGE_DIRECTORY_ENTRY_LO32;\521521+ type LOGICAL_PAGE_NUMBER_HI4;\522522+ type LOGICAL_PAGE_NUMBER_LO32;\523523+ type PHYSICAL_PAGE_ADDR_HI4;\524524+ type PHYSICAL_PAGE_ADDR_LO32;\525525+ type PHYSICAL_PAGE_NUMBER_MSB;\526526+ type PHYSICAL_PAGE_NUMBER_LSB;\527527+ type LOGICAL_ADDR528528+529529+struct dcn_mi_shift {530530+ DCN_MI_REG_FIELD_LIST(uint8_t);531531+};532532+533533+struct dcn_mi_mask {534534+ DCN_MI_REG_FIELD_LIST(uint32_t);535535+};536536+537537+struct dcn10_mem_input {538538+ struct mem_input base;539539+ const struct dcn_mi_registers *mi_regs;540540+ const struct dcn_mi_shift *mi_shift;541541+ const struct dcn_mi_mask *mi_mask;542542+};543543+544544+bool dcn10_mem_input_construct(545545+ struct dcn10_mem_input *mi,546546+ struct dc_context *ctx,547547+ uint32_t inst,548548+ const struct dcn_mi_registers *mi_regs,549549+ const struct dcn_mi_shift *mi_shift,550550+ const struct dcn_mi_mask *mi_mask);551551+552552+553553+#endif
+376
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c
···11+/*22+ * Copyright 2012-15 Advanced Micro Devices, Inc.33+ *44+ * Permission is hereby granted, free of charge, to any person obtaining a55+ * copy of this software and associated documentation files (the "Software"),66+ * to deal in the Software without restriction, including without limitation77+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,88+ * and/or sell copies of the Software, and to permit persons to whom the99+ * Software is furnished to do so, subject to the following conditions:1010+ *1111+ * The above copyright notice and this permission notice shall be included in1212+ * all copies or substantial portions of the Software.1313+ *1414+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1515+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1616+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL1717+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR1818+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,1919+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR2020+ * OTHER DEALINGS IN THE SOFTWARE.2121+ *2222+ * Authors: AMD2323+ *2424+ */2525+2626+#include "reg_helper.h"2727+#include "dcn10_mpc.h"2828+2929+#define REG(reg)\3030+ mpc->mpc_regs->reg3131+3232+#define CTX \3333+ mpc->base.ctx3434+3535+#undef FN3636+#define FN(reg_name, field_name) \3737+ mpc->mpc_shift->field_name, mpc->mpc_mask->field_name3838+3939+/* Internal function to set mpc output mux */4040+static void set_output_mux(struct dcn10_mpc *mpc,4141+ uint8_t opp_id,4242+ uint8_t mpcc_id)4343+{4444+ if (mpcc_id != 0xf)4545+ REG_UPDATE(OPP_PIPE_CONTROL[opp_id],4646+ OPP_PIPE_CLOCK_EN, 1);4747+4848+ REG_SET(MUX[opp_id], 0,4949+ MPC_OUT_MUX, mpcc_id);5050+5151+/* TODO: Move to post when ready.5252+ if (mpcc_id == 0xf) {5353+ MPCC_REG_UPDATE(OPP_PIPE0_OPP_PIPE_CONTROL,5454+ OPP_PIPE_CLOCK_EN, 0);5555+ }5656+*/5757+}5858+5959+static void set_blend_mode(struct dcn10_mpc *mpc,6060+ enum blend_mode mode,6161+ uint8_t mpcc_id)6262+{6363+ /* Enable per-pixel alpha on this pipe */6464+ if (mode == TOP_BLND)6565+ REG_UPDATE_3(MPCC_CONTROL[mpcc_id],6666+ MPCC_ALPHA_BLND_MODE, 0,6767+ MPCC_ALPHA_MULTIPLIED_MODE, 0,6868+ MPCC_BLND_ACTIVE_OVERLAP_ONLY, 0);6969+ else7070+ REG_UPDATE_3(MPCC_CONTROL[mpcc_id],7171+ MPCC_ALPHA_BLND_MODE, 0,7272+ MPCC_ALPHA_MULTIPLIED_MODE, 1,7373+ MPCC_BLND_ACTIVE_OVERLAP_ONLY, 1);7474+}7575+7676+void dcn10_set_mpc_background_color(struct dcn10_mpc *mpc,7777+ unsigned int mpcc_inst,7878+ struct tg_color *bg_color)7979+{8080+ /* mpc color is 12 bit. tg_color is 10 bit */8181+ /* todo: might want to use 16 bit to represent color and have each8282+ * hw block translate to correct color depth.8383+ */8484+ uint32_t bg_r_cr = bg_color->color_r_cr << 2;8585+ uint32_t bg_g_y = bg_color->color_g_y << 2;8686+ uint32_t bg_b_cb = bg_color->color_b_cb << 2;8787+8888+ REG_SET(MPCC_BG_R_CR[mpcc_inst], 0,8989+ MPCC_BG_R_CR, bg_r_cr);9090+ REG_SET(MPCC_BG_G_Y[mpcc_inst], 0,9191+ MPCC_BG_G_Y, bg_g_y);9292+ REG_SET(MPCC_BG_B_CB[mpcc_inst], 0,9393+ MPCC_BG_B_CB, bg_b_cb);9494+}9595+9696+/* This function programs MPC tree configuration9797+ * Assume it is the initial time to setup MPC tree_configure, means9898+ * the instance of dpp/mpcc/opp specified in structure tree_cfg are9999+ * in idle status.100100+ * Before invoke this function, ensure that master lock of OPTC specified101101+ * by opp_id is set.102102+ *103103+ * tree_cfg[in] - new MPC_TREE_CFG104104+ */105105+106106+void dcn10_set_mpc_tree(struct dcn10_mpc *mpc,107107+ struct mpc_tree_cfg *tree_cfg)108108+{109109+ int i;110110+111111+ for (i = 0; i < tree_cfg->num_pipes; i++) {112112+ uint8_t mpcc_inst = tree_cfg->mpcc[i];113113+114114+ REG_SET(MPCC_OPP_ID[mpcc_inst], 0,115115+ MPCC_OPP_ID, tree_cfg->opp_id);116116+117117+ REG_SET(MPCC_TOP_SEL[mpcc_inst], 0,118118+ MPCC_TOP_SEL, tree_cfg->dpp[i]);119119+120120+ if (i == tree_cfg->num_pipes-1) {121121+ REG_SET(MPCC_BOT_SEL[mpcc_inst], 0,122122+ MPCC_BOT_SEL, 0xF);123123+124124+ /* MPCC_CONTROL->MPCC_MODE */125125+ REG_UPDATE(MPCC_CONTROL[mpcc_inst],126126+ MPCC_MODE, tree_cfg->mode);127127+ } else {128128+ REG_SET(MPCC_BOT_SEL[mpcc_inst], 0,129129+ MPCC_BOT_SEL, tree_cfg->dpp[i+1]);130130+131131+ /* MPCC_CONTROL->MPCC_MODE */132132+ REG_UPDATE(MPCC_CONTROL[mpcc_inst],133133+ MPCC_MODE, 3);134134+ }135135+136136+ if (i == 0)137137+ set_output_mux(138138+ mpc, tree_cfg->opp_id, mpcc_inst);139139+140140+ set_blend_mode(mpc, tree_cfg->mode, mpcc_inst);141141+ }142142+}143143+144144+void dcn10_set_mpc_passthrough(struct dcn10_mpc *mpc,145145+ uint8_t dpp_idx,146146+ uint8_t mpcc_idx,147147+ uint8_t opp_idx)148148+{149149+ struct mpc_tree_cfg tree_cfg = { 0 };150150+151151+ tree_cfg.num_pipes = 1;152152+ tree_cfg.opp_id = opp_idx;153153+ tree_cfg.mode = TOP_PASSTHRU;154154+ /* TODO: FPGA bring up one MPC has only 1 DPP and 1 MPCC155155+ * For blend case, need fill mode DPP and cascade MPCC156156+ */157157+ tree_cfg.dpp[0] = dpp_idx;158158+ tree_cfg.mpcc[0] = mpcc_idx;159159+ dcn10_set_mpc_tree(mpc, &tree_cfg);160160+}161161+162162+/*163163+ * This is the function to remove current MPC tree specified by tree_cfg164164+ * Before invoke this function, ensure that master lock of OPTC specified165165+ * by opp_id is set.166166+ *167167+ *tree_cfg[in/out] - current MPC_TREE_CFG168168+ */169169+void dcn10_delete_mpc_tree(struct dcn10_mpc *mpc,170170+ struct mpc_tree_cfg *tree_cfg)171171+{172172+ int i;173173+174174+ for (i = 0; i < tree_cfg->num_pipes; i++) {175175+ uint8_t mpcc_inst = tree_cfg->mpcc[i];176176+177177+ REG_SET(MPCC_OPP_ID[mpcc_inst], 0,178178+ MPCC_OPP_ID, 0xf);179179+180180+ REG_SET(MPCC_TOP_SEL[mpcc_inst], 0,181181+ MPCC_TOP_SEL, 0xf);182182+183183+ REG_SET(MPCC_BOT_SEL[mpcc_inst], 0,184184+ MPCC_BOT_SEL, 0xF);185185+186186+ /* add remove dpp/mpcc pair into pending list187187+ * TODO FPGA AddToPendingList if empty from pseudo code188188+ */189189+ tree_cfg->dpp[i] = 0xf;190190+ tree_cfg->mpcc[i] = 0xf;191191+ }192192+ set_output_mux(mpc, tree_cfg->opp_id, 0xf);193193+ tree_cfg->opp_id = 0xf;194194+ tree_cfg->num_pipes = 0;195195+}196196+197197+/* TODO FPGA: how to handle DPP?198198+ * Function to remove one of pipe from MPC configure tree by dpp idx199199+ * Before invoke this function, ensure that master lock of OPTC specified200200+ * by opp_id is set201201+ * This function can be invoke multiple times to remove more than 1 dpps.202202+ *203203+ * tree_cfg[in/out] - current MPC_TREE_CFG204204+ * idx[in] - index of dpp from tree_cfg to be removed.205205+ */206206+bool dcn10_remove_dpp(struct dcn10_mpc *mpc,207207+ struct mpc_tree_cfg *tree_cfg,208208+ uint8_t idx)209209+{210210+ int i;211211+ bool found = false;212212+213213+ /* find dpp_idx from dpp array of tree_cfg */214214+ for (i = 0; i < tree_cfg->num_pipes; i++) {215215+ if (tree_cfg->dpp[i] == idx) {216216+ found = true;217217+ break;218218+ }219219+ }220220+221221+ if (found) {222222+ /* add remove dpp/mpcc pair into pending list */223223+224224+ /* TODO FPGA AddToPendingList if empty from pseudo code225225+ * AddToPendingList(tree_cfg->dpp[i],tree_cfg->mpcc[i]);226226+ */227227+ uint8_t mpcc_inst = tree_cfg->mpcc[i];228228+229229+ REG_SET(MPCC_OPP_ID[mpcc_inst], 0,230230+ MPCC_OPP_ID, 0xf);231231+232232+ REG_SET(MPCC_TOP_SEL[mpcc_inst], 0,233233+ MPCC_TOP_SEL, 0xf);234234+235235+ REG_SET(MPCC_BOT_SEL[mpcc_inst], 0,236236+ MPCC_BOT_SEL, 0xF);237237+238238+ if (i == 0) {239239+ if (tree_cfg->num_pipes > 1)240240+ set_output_mux(mpc,241241+ tree_cfg->opp_id, tree_cfg->mpcc[i+1]);242242+ else243243+ set_output_mux(mpc, tree_cfg->opp_id, 0xf);244244+ } else if (i == tree_cfg->num_pipes-1) {245245+ mpcc_inst = tree_cfg->mpcc[i - 1];246246+247247+ REG_SET(MPCC_BOT_SEL[mpcc_inst], 0,248248+ MPCC_BOT_SEL, 0xF);249249+250250+ REG_UPDATE(MPCC_CONTROL[mpcc_inst],251251+ MPCC_MODE, tree_cfg->mode);252252+ } else {253253+ mpcc_inst = tree_cfg->mpcc[i - 1];254254+255255+ REG_SET(MPCC_BOT_SEL[mpcc_inst], 0,256256+ MPCC_BOT_SEL, tree_cfg->mpcc[i+1]);257257+ }258258+ set_blend_mode(mpc, tree_cfg->mode, mpcc_inst);259259+260260+ /* update tree_cfg structure */261261+ while (i < tree_cfg->num_pipes - 1) {262262+ tree_cfg->dpp[i] = tree_cfg->dpp[i+1];263263+ tree_cfg->mpcc[i] = tree_cfg->mpcc[i+1];264264+ i++;265265+ }266266+ tree_cfg->num_pipes--;267267+ }268268+ return found;269269+}270270+271271+/* TODO FPGA: how to handle DPP?272272+ * Function to add DPP/MPCC pair into MPC configure tree by position.273273+ * Before invoke this function, ensure that master lock of OPTC specified274274+ * by opp_id is set275275+ * This function can be invoke multiple times to add more than 1 pipes.276276+ *277277+ * tree_cfg[in/out] - current MPC_TREE_CFG278278+ * dpp_idx[in] - index of an idle dpp insatnce to be added.279279+ * mpcc_idx[in] - index of an idle mpcc instance to be added.280280+ * poistion[in] - position of dpp/mpcc pair to be added into current tree_cfg281281+ * 0 means insert to the most top layer of MPC tree282282+ */283283+void dcn10_add_dpp(struct dcn10_mpc *mpc,284284+ struct mpc_tree_cfg *tree_cfg,285285+ uint8_t dpp_idx,286286+ uint8_t mpcc_idx,287287+ uint8_t position)288288+{289289+ uint8_t temp;290290+ uint8_t temp1;291291+292292+ REG_SET(MPCC_OPP_ID[mpcc_idx], 0,293293+ MPCC_OPP_ID, tree_cfg->opp_id);294294+295295+ REG_SET(MPCC_TOP_SEL[mpcc_idx], 0,296296+ MPCC_TOP_SEL, dpp_idx);297297+298298+ if (position == 0) {299299+ /* idle dpp/mpcc is added to the top layer of tree */300300+ REG_SET(MPCC_BOT_SEL[mpcc_idx], 0,301301+ MPCC_BOT_SEL, tree_cfg->mpcc[0]);302302+ REG_UPDATE(MPCC_CONTROL[mpcc_idx],303303+ MPCC_MODE, 3);304304+305305+ /* opp will get new output. from new added mpcc */306306+ set_output_mux(mpc, tree_cfg->opp_id, mpcc_idx);307307+308308+ set_blend_mode(mpc, tree_cfg->mode, mpcc_idx);309309+310310+ } else if (position == tree_cfg->num_pipes) {311311+ /* idle dpp/mpcc is added to the bottom layer of tree */312312+313313+ /* get instance of previous bottom mpcc, set to middle layer */314314+ temp = tree_cfg->mpcc[tree_cfg->num_pipes - 1];315315+316316+ REG_SET(MPCC_BOT_SEL[temp], 0,317317+ MPCC_BOT_SEL, mpcc_idx);318318+319319+ REG_UPDATE(MPCC_CONTROL[temp],320320+ MPCC_MODE, 3);321321+322322+ /* mpcc_idx become new bottom mpcc*/323323+ REG_SET(MPCC_BOT_SEL[mpcc_idx], 0,324324+ MPCC_BOT_SEL, 0xf);325325+326326+ REG_UPDATE(MPCC_CONTROL[mpcc_idx],327327+ MPCC_MODE, tree_cfg->mode);328328+329329+ set_blend_mode(mpc, tree_cfg->mode, mpcc_idx);330330+ } else {331331+ /* idle dpp/mpcc is added to middle of tree */332332+ temp = tree_cfg->mpcc[position - 1];333333+ temp1 = tree_cfg->mpcc[position];334334+335335+ /* new mpcc instance temp1 is added right after temp*/336336+ REG_SET(MPCC_BOT_SEL[temp], 0,337337+ MPCC_BOT_SEL, mpcc_idx);338338+339339+ /* mpcc_idx connect previous temp+1 to new mpcc */340340+ REG_SET(MPCC_BOT_SEL[mpcc_idx], 0,341341+ MPCC_BOT_SEL, temp1);342342+343343+ /* temp TODO: may not need*/344344+ REG_UPDATE(MPCC_CONTROL[temp],345345+ MPCC_MODE, 3);346346+347347+ set_blend_mode(mpc, tree_cfg->mode, temp);348348+ }349349+350350+ /* update tree_cfg structure */351351+ temp = tree_cfg->num_pipes - 1;352352+353353+ /*354354+ * iterating from the last mpc/dpp pair to the one being added, shift355355+ * them down one position356356+ */357357+ while (temp > position) {358358+ tree_cfg->dpp[temp + 1] = tree_cfg->dpp[temp];359359+ tree_cfg->mpcc[temp + 1] = tree_cfg->mpcc[temp];360360+ temp--;361361+ }362362+363363+ /* insert the new mpc/dpp pair into the tree_cfg*/364364+ tree_cfg->dpp[position] = dpp_idx;365365+ tree_cfg->mpcc[position] = mpcc_idx;366366+ tree_cfg->num_pipes++;367367+}368368+369369+void wait_mpcc_idle(struct dcn10_mpc *mpc,370370+ uint8_t mpcc_id)371371+{372372+ REG_WAIT(MPCC_STATUS[mpcc_id],373373+ MPCC_IDLE, 1,374374+ 1000, 1000);375375+}376376+
+135
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.h
···11+/* Copyright 2012-15 Advanced Micro Devices, Inc.22+ *33+ * Permission is hereby granted, free of charge, to any person obtaining a44+ * copy of this software and associated documentation files (the "Software"),55+ * to deal in the Software without restriction, including without limitation66+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,77+ * and/or sell copies of the Software, and to permit persons to whom the88+ * Software is furnished to do so, subject to the following conditions:99+ *1010+ * The above copyright notice and this permission notice shall be included in1111+ * all copies or substantial portions of the Software.1212+ *1313+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1414+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1515+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL1616+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR1717+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,1818+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR1919+ * OTHER DEALINGS IN THE SOFTWARE.2020+ *2121+ * Authors: AMD2222+ *2323+ */2424+2525+#ifndef __DC_MPC_DCN10_H__2626+#define __DC_MPC_DCN10_H__2727+2828+#include "mpc.h"2929+3030+#define TO_DCN10_MPC(mpc_base)\3131+ container_of(mpc_base, struct dcn10_mpc, base)3232+3333+#define MAX_MPCC 43434+#define MAX_MPC_OUT 43535+#define MAX_OPP 43636+3737+#define MPC_COMMON_REG_LIST_DCN1_0(inst) \3838+ SRII(MPCC_TOP_SEL, MPCC, inst),\3939+ SRII(MPCC_BOT_SEL, MPCC, inst),\4040+ SRII(MPCC_CONTROL, MPCC, inst),\4141+ SRII(MPCC_STATUS, MPCC, inst),\4242+ SRII(MPCC_OPP_ID, MPCC, inst),\4343+ SRII(MPCC_BG_G_Y, MPCC, inst),\4444+ SRII(MPCC_BG_R_CR, MPCC, inst),\4545+ SRII(MPCC_BG_B_CB, MPCC, inst),\4646+ SRII(MPCC_BG_B_CB, MPCC, inst),\4747+ SRII(MUX, MPC_OUT, inst),\4848+ SRII(OPP_PIPE_CONTROL, OPP_PIPE, inst)4949+5050+struct dcn_mpc_registers {5151+ uint32_t MPCC_TOP_SEL[MAX_MPCC];5252+ uint32_t MPCC_BOT_SEL[MAX_MPCC];5353+ uint32_t MPCC_CONTROL[MAX_MPCC];5454+ uint32_t MPCC_STATUS[MAX_MPCC];5555+ uint32_t MPCC_OPP_ID[MAX_MPCC];5656+ uint32_t MPCC_BG_G_Y[MAX_MPCC];5757+ uint32_t MPCC_BG_R_CR[MAX_MPCC];5858+ uint32_t MPCC_BG_B_CB[MAX_MPCC];5959+ uint32_t MUX[MAX_MPC_OUT];6060+ uint32_t OPP_PIPE_CONTROL[MAX_OPP];6161+};6262+6363+#define MPC_COMMON_MASK_SH_LIST_DCN1_0(mask_sh)\6464+ SF(MPCC0_MPCC_TOP_SEL, MPCC_TOP_SEL, mask_sh),\6565+ SF(MPCC0_MPCC_BOT_SEL, MPCC_BOT_SEL, mask_sh),\6666+ SF(MPCC0_MPCC_CONTROL, MPCC_MODE, mask_sh),\6767+ SF(MPCC0_MPCC_CONTROL, MPCC_ALPHA_BLND_MODE, mask_sh),\6868+ SF(MPCC0_MPCC_CONTROL, MPCC_ALPHA_MULTIPLIED_MODE, mask_sh),\6969+ SF(MPCC0_MPCC_CONTROL, MPCC_BLND_ACTIVE_OVERLAP_ONLY, mask_sh),\7070+ SF(MPCC0_MPCC_STATUS, MPCC_IDLE, mask_sh),\7171+ SF(MPCC0_MPCC_OPP_ID, MPCC_OPP_ID, mask_sh),\7272+ SF(MPCC0_MPCC_BG_G_Y, MPCC_BG_G_Y, mask_sh),\7373+ SF(MPCC0_MPCC_BG_R_CR, MPCC_BG_R_CR, mask_sh),\7474+ SF(MPCC0_MPCC_BG_B_CB, MPCC_BG_B_CB, mask_sh),\7575+ SF(MPC_OUT0_MUX, MPC_OUT_MUX, mask_sh),\7676+ SF(OPP_PIPE0_OPP_PIPE_CONTROL, OPP_PIPE_CLOCK_EN, mask_sh)7777+7878+#define MPC_REG_FIELD_LIST(type) \7979+ type MPCC_TOP_SEL;\8080+ type MPCC_BOT_SEL;\8181+ type MPCC_MODE;\8282+ type MPCC_ALPHA_BLND_MODE;\8383+ type MPCC_ALPHA_MULTIPLIED_MODE;\8484+ type MPCC_BLND_ACTIVE_OVERLAP_ONLY;\8585+ type MPCC_IDLE;\8686+ type MPCC_OPP_ID;\8787+ type MPCC_BG_G_Y;\8888+ type MPCC_BG_R_CR;\8989+ type MPCC_BG_B_CB;\9090+ type MPC_OUT_MUX;\9191+ type OPP_PIPE_CLOCK_EN;\9292+9393+struct dcn_mpc_shift {9494+ MPC_REG_FIELD_LIST(uint8_t)9595+};9696+9797+struct dcn_mpc_mask {9898+ MPC_REG_FIELD_LIST(uint32_t)9999+};100100+101101+struct dcn10_mpc {102102+ struct mpc base;103103+ const struct dcn_mpc_registers *mpc_regs;104104+ const struct dcn_mpc_shift *mpc_shift;105105+ const struct dcn_mpc_mask *mpc_mask;106106+};107107+108108+void dcn10_set_mpc_passthrough(struct dcn10_mpc *mpc,109109+ uint8_t dpp_idx,110110+ uint8_t mpcc_idx,111111+ uint8_t opp_idx);112112+113113+void dcn10_delete_mpc_tree(struct dcn10_mpc *mpc,114114+ struct mpc_tree_cfg *tree_cfg);115115+116116+bool dcn10_remove_dpp(struct dcn10_mpc *mpc,117117+ struct mpc_tree_cfg *tree_cfg,118118+ uint8_t idx);119119+120120+void dcn10_add_dpp(struct dcn10_mpc *mpc,121121+ struct mpc_tree_cfg *tree_cfg,122122+ uint8_t dpp_idx,123123+ uint8_t mpcc_idx,124124+ uint8_t position);125125+126126+void wait_mpcc_idle(struct dcn10_mpc *mpc,127127+ uint8_t mpcc_id);128128+129129+void dcn10_set_mpc_tree(struct dcn10_mpc *mpc,130130+ struct mpc_tree_cfg *tree_cfg);131131+132132+void dcn10_set_mpc_background_color(struct dcn10_mpc *mpc,133133+ unsigned int mpcc_inst,134134+ struct tg_color *bg_color);135135+#endif
+801
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_opp.c
···11+/*22+ * Copyright 2012-15 Advanced Micro Devices, Inc.33+ *44+ * Permission is hereby granted, free of charge, to any person obtaining a55+ * copy of this software and associated documentation files (the "Software"),66+ * to deal in the Software without restriction, including without limitation77+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,88+ * and/or sell copies of the Software, and to permit persons to whom the99+ * Software is furnished to do so, subject to the following conditions:1010+ *1111+ * The above copyright notice and this permission notice shall be included in1212+ * all copies or substantial portions of the Software.1313+ *1414+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1515+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1616+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL1717+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR1818+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,1919+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR2020+ * OTHER DEALINGS IN THE SOFTWARE.2121+ *2222+ * Authors: AMD2323+ *2424+ */2525+2626+#include "dm_services.h"2727+#include "dcn10_opp.h"2828+#include "reg_helper.h"2929+3030+#define REG(reg) \3131+ (oppn10->regs->reg)3232+3333+#undef FN3434+#define FN(reg_name, field_name) \3535+ oppn10->opp_shift->field_name, oppn10->opp_mask->field_name3636+3737+#define CTX \3838+ oppn10->base.ctx3939+4040+static void opp_set_regamma_mode(4141+ struct output_pixel_processor *opp,4242+ enum opp_regamma mode)4343+{4444+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);4545+ uint32_t re_mode = 0;4646+ uint32_t obuf_bypass = 0; /* need for pipe split */4747+ uint32_t obuf_hupscale = 0;4848+4949+ switch (mode) {5050+ case OPP_REGAMMA_BYPASS:5151+ re_mode = 0;5252+ break;5353+ case OPP_REGAMMA_SRGB:5454+ re_mode = 1;5555+ break;5656+ case OPP_REGAMMA_3_6:5757+ re_mode = 2;5858+ break;5959+ case OPP_REGAMMA_USER:6060+ re_mode = oppn10->is_write_to_ram_a_safe ? 3 : 4;6161+ oppn10->is_write_to_ram_a_safe = !oppn10->is_write_to_ram_a_safe;6262+ break;6363+ default:6464+ break;6565+ }6666+6767+ REG_SET(CM_RGAM_CONTROL, 0, CM_RGAM_LUT_MODE, re_mode);6868+ REG_UPDATE_2(OBUF_CONTROL,6969+ OBUF_BYPASS, obuf_bypass,7070+ OBUF_H_2X_UPSCALE_EN, obuf_hupscale);7171+}7272+7373+/************* FORMATTER ************/7474+7575+/**7676+ * set_truncation7777+ * 1) set truncation depth: 0 for 18 bpp or 1 for 24 bpp7878+ * 2) enable truncation7979+ * 3) HW remove 12bit FMT support for DCE11 power saving reason.8080+ */8181+static void set_truncation(8282+ struct dcn10_opp *oppn10,8383+ const struct bit_depth_reduction_params *params)8484+{8585+ REG_UPDATE_3(FMT_BIT_DEPTH_CONTROL,8686+ FMT_TRUNCATE_EN, params->flags.TRUNCATE_ENABLED,8787+ FMT_TRUNCATE_DEPTH, params->flags.TRUNCATE_DEPTH,8888+ FMT_TRUNCATE_MODE, params->flags.TRUNCATE_MODE);8989+}9090+9191+static void set_spatial_dither(9292+ struct dcn10_opp *oppn10,9393+ const struct bit_depth_reduction_params *params)9494+{9595+ /*Disable spatial (random) dithering*/9696+ REG_UPDATE_7(FMT_BIT_DEPTH_CONTROL,9797+ FMT_SPATIAL_DITHER_EN, 0,9898+ FMT_SPATIAL_DITHER_MODE, 0,9999+ FMT_SPATIAL_DITHER_DEPTH, 0,100100+ FMT_TEMPORAL_DITHER_EN, 0,101101+ FMT_HIGHPASS_RANDOM_ENABLE, 0,102102+ FMT_FRAME_RANDOM_ENABLE, 0,103103+ FMT_RGB_RANDOM_ENABLE, 0);104104+105105+106106+ /* only use FRAME_COUNTER_MAX if frameRandom == 1*/107107+ if (params->flags.FRAME_RANDOM == 1) {108108+ if (params->flags.SPATIAL_DITHER_DEPTH == 0 || params->flags.SPATIAL_DITHER_DEPTH == 1) {109109+ REG_UPDATE_2(FMT_CONTROL,110110+ FMT_SPATIAL_DITHER_FRAME_COUNTER_MAX, 15,111111+ FMT_SPATIAL_DITHER_FRAME_COUNTER_BIT_SWAP, 2);112112+ } else if (params->flags.SPATIAL_DITHER_DEPTH == 2) {113113+ REG_UPDATE_2(FMT_CONTROL,114114+ FMT_SPATIAL_DITHER_FRAME_COUNTER_MAX, 3,115115+ FMT_SPATIAL_DITHER_FRAME_COUNTER_BIT_SWAP, 1);116116+ } else {117117+ return;118118+ }119119+ } else {120120+ REG_UPDATE_2(FMT_CONTROL,121121+ FMT_SPATIAL_DITHER_FRAME_COUNTER_MAX, 0,122122+ FMT_SPATIAL_DITHER_FRAME_COUNTER_BIT_SWAP, 0);123123+ }124124+125125+ /*Set seed for random values for126126+ * spatial dithering for R,G,B channels*/127127+128128+ REG_SET(FMT_DITHER_RAND_R_SEED, 0,129129+ FMT_RAND_R_SEED, params->r_seed_value);130130+131131+ REG_SET(FMT_DITHER_RAND_G_SEED, 0,132132+ FMT_RAND_G_SEED, params->g_seed_value);133133+134134+ REG_SET(FMT_DITHER_RAND_B_SEED, 0,135135+ FMT_RAND_B_SEED, params->b_seed_value);136136+137137+ /* FMT_OFFSET_R_Cr 31:16 0x0 Setting the zero138138+ * offset for the R/Cr channel, lower 4LSB139139+ * is forced to zeros. Typically set to 0140140+ * RGB and 0x80000 YCbCr.141141+ */142142+ /* FMT_OFFSET_G_Y 31:16 0x0 Setting the zero143143+ * offset for the G/Y channel, lower 4LSB is144144+ * forced to zeros. Typically set to 0 RGB145145+ * and 0x80000 YCbCr.146146+ */147147+ /* FMT_OFFSET_B_Cb 31:16 0x0 Setting the zero148148+ * offset for the B/Cb channel, lower 4LSB is149149+ * forced to zeros. Typically set to 0 RGB and150150+ * 0x80000 YCbCr.151151+ */152152+153153+ REG_UPDATE_6(FMT_BIT_DEPTH_CONTROL,154154+ /*Enable spatial dithering*/155155+ FMT_SPATIAL_DITHER_EN, params->flags.SPATIAL_DITHER_ENABLED,156156+ /* Set spatial dithering mode157157+ * (default is Seed patterrn AAAA...)158158+ */159159+ FMT_SPATIAL_DITHER_MODE, params->flags.SPATIAL_DITHER_MODE,160160+ /*Set spatial dithering bit depth*/161161+ FMT_SPATIAL_DITHER_DEPTH, params->flags.SPATIAL_DITHER_DEPTH,162162+ /*Disable High pass filter*/163163+ FMT_HIGHPASS_RANDOM_ENABLE, params->flags.HIGHPASS_RANDOM,164164+ /*Reset only at startup*/165165+ FMT_FRAME_RANDOM_ENABLE, params->flags.FRAME_RANDOM,166166+ /*Set RGB data dithered with x^28+x^3+1*/167167+ FMT_RGB_RANDOM_ENABLE, params->flags.RGB_RANDOM);168168+}169169+170170+static void opp_program_bit_depth_reduction(171171+ struct output_pixel_processor *opp,172172+ const struct bit_depth_reduction_params *params)173173+{174174+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);175175+176176+ set_truncation(oppn10, params);177177+ set_spatial_dither(oppn10, params);178178+ /* TODO179179+ * set_temporal_dither(oppn10, params);180180+ */181181+}182182+183183+/**184184+ * set_pixel_encoding185185+ *186186+ * Set Pixel Encoding187187+ * 0: RGB 4:4:4 or YCbCr 4:4:4 or YOnly188188+ * 1: YCbCr 4:2:2189189+ */190190+static void set_pixel_encoding(191191+ struct dcn10_opp *oppn10,192192+ const struct clamping_and_pixel_encoding_params *params)193193+{194194+ switch (params->pixel_encoding) {195195+196196+ case PIXEL_ENCODING_RGB:197197+ case PIXEL_ENCODING_YCBCR444:198198+ REG_UPDATE(FMT_CONTROL, FMT_PIXEL_ENCODING, 0);199199+ break;200200+ case PIXEL_ENCODING_YCBCR422:201201+ REG_UPDATE(FMT_CONTROL, FMT_PIXEL_ENCODING, 1);202202+ break;203203+ case PIXEL_ENCODING_YCBCR420:204204+ REG_UPDATE(FMT_CONTROL, FMT_PIXEL_ENCODING, 2);205205+ break;206206+ default:207207+ break;208208+ }209209+}210210+211211+/**212212+ * Set Clamping213213+ * 1) Set clamping format based on bpc - 0 for 6bpc (No clamping)214214+ * 1 for 8 bpc215215+ * 2 for 10 bpc216216+ * 3 for 12 bpc217217+ * 7 for programable218218+ * 2) Enable clamp if Limited range requested219219+ */220220+static void opp_set_clamping(221221+ struct dcn10_opp *oppn10,222222+ const struct clamping_and_pixel_encoding_params *params)223223+{224224+ REG_UPDATE_2(FMT_CLAMP_CNTL,225225+ FMT_CLAMP_DATA_EN, 0,226226+ FMT_CLAMP_COLOR_FORMAT, 0);227227+228228+ switch (params->clamping_level) {229229+ case CLAMPING_FULL_RANGE:230230+ REG_UPDATE_2(FMT_CLAMP_CNTL,231231+ FMT_CLAMP_DATA_EN, 1,232232+ FMT_CLAMP_COLOR_FORMAT, 0);233233+ break;234234+ case CLAMPING_LIMITED_RANGE_8BPC:235235+ REG_UPDATE_2(FMT_CLAMP_CNTL,236236+ FMT_CLAMP_DATA_EN, 1,237237+ FMT_CLAMP_COLOR_FORMAT, 1);238238+ break;239239+ case CLAMPING_LIMITED_RANGE_10BPC:240240+ REG_UPDATE_2(FMT_CLAMP_CNTL,241241+ FMT_CLAMP_DATA_EN, 1,242242+ FMT_CLAMP_COLOR_FORMAT, 2);243243+244244+ break;245245+ case CLAMPING_LIMITED_RANGE_12BPC:246246+ REG_UPDATE_2(FMT_CLAMP_CNTL,247247+ FMT_CLAMP_DATA_EN, 1,248248+ FMT_CLAMP_COLOR_FORMAT, 3);249249+ break;250250+ case CLAMPING_LIMITED_RANGE_PROGRAMMABLE:251251+ /* TODO */252252+ default:253253+ break;254254+ }255255+256256+}257257+258258+static void opp_set_dyn_expansion(259259+ struct output_pixel_processor *opp,260260+ enum dc_color_space color_sp,261261+ enum dc_color_depth color_dpth,262262+ enum signal_type signal)263263+{264264+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);265265+266266+ REG_UPDATE_2(FMT_DYNAMIC_EXP_CNTL,267267+ FMT_DYNAMIC_EXP_EN, 0,268268+ FMT_DYNAMIC_EXP_MODE, 0);269269+270270+ /*00 - 10-bit -> 12-bit dynamic expansion*/271271+ /*01 - 8-bit -> 12-bit dynamic expansion*/272272+ if (signal == SIGNAL_TYPE_HDMI_TYPE_A ||273273+ signal == SIGNAL_TYPE_DISPLAY_PORT ||274274+ signal == SIGNAL_TYPE_DISPLAY_PORT_MST) {275275+ switch (color_dpth) {276276+ case COLOR_DEPTH_888:277277+ REG_UPDATE_2(FMT_DYNAMIC_EXP_CNTL,278278+ FMT_DYNAMIC_EXP_EN, 1,279279+ FMT_DYNAMIC_EXP_MODE, 1);280280+ break;281281+ case COLOR_DEPTH_101010:282282+ REG_UPDATE_2(FMT_DYNAMIC_EXP_CNTL,283283+ FMT_DYNAMIC_EXP_EN, 1,284284+ FMT_DYNAMIC_EXP_MODE, 0);285285+ break;286286+ case COLOR_DEPTH_121212:287287+ REG_UPDATE_2(FMT_DYNAMIC_EXP_CNTL,288288+ FMT_DYNAMIC_EXP_EN, 1,/*otherwise last two bits are zero*/289289+ FMT_DYNAMIC_EXP_MODE, 0);290290+ break;291291+ default:292292+ break;293293+ }294294+ }295295+}296296+297297+static void opp_program_clamping_and_pixel_encoding(298298+ struct output_pixel_processor *opp,299299+ const struct clamping_and_pixel_encoding_params *params)300300+{301301+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);302302+303303+ opp_set_clamping(oppn10, params);304304+ set_pixel_encoding(oppn10, params);305305+}306306+307307+static void opp_program_fmt(308308+ struct output_pixel_processor *opp,309309+ struct bit_depth_reduction_params *fmt_bit_depth,310310+ struct clamping_and_pixel_encoding_params *clamping)311311+{312312+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);313313+314314+ if (clamping->pixel_encoding == PIXEL_ENCODING_YCBCR420)315315+ REG_UPDATE(FMT_MAP420_MEMORY_CONTROL, FMT_MAP420MEM_PWR_FORCE, 0);316316+317317+ /* dithering is affected by <CrtcSourceSelect>, hence should be318318+ * programmed afterwards */319319+ opp_program_bit_depth_reduction(320320+ opp,321321+ fmt_bit_depth);322322+323323+ opp_program_clamping_and_pixel_encoding(324324+ opp,325325+ clamping);326326+327327+ return;328328+}329329+330330+static void opp_set_output_csc_default(331331+ struct output_pixel_processor *opp,332332+ const struct default_adjustment *default_adjust)333333+{334334+335335+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);336336+ uint32_t ocsc_mode = 0;337337+338338+ if (default_adjust != NULL) {339339+ switch (default_adjust->out_color_space) {340340+ case COLOR_SPACE_SRGB:341341+ ocsc_mode = 0;342342+ break;343343+ case COLOR_SPACE_SRGB_LIMITED:344344+ ocsc_mode = 1;345345+ break;346346+ case COLOR_SPACE_YCBCR601:347347+ case COLOR_SPACE_YCBCR601_LIMITED:348348+ ocsc_mode = 2;349349+ break;350350+ case COLOR_SPACE_YCBCR709:351351+ case COLOR_SPACE_YCBCR709_LIMITED:352352+ ocsc_mode = 3;353353+ break;354354+ case COLOR_SPACE_UNKNOWN:355355+ default:356356+ break;357357+ }358358+ }359359+360360+ REG_SET(CM_OCSC_CONTROL, 0, CM_OCSC_MODE, ocsc_mode);361361+362362+}363363+/*program re gamma RAM B*/364364+static void opp_program_regamma_lutb_settings(365365+ struct output_pixel_processor *opp,366366+ const struct pwl_params *params)367367+{368368+ const struct gamma_curve *curve;369369+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);370370+371371+ REG_SET_2(CM_RGAM_RAMB_START_CNTL_B, 0,372372+ CM_RGAM_RAMB_EXP_REGION_START_B, params->arr_points[0].custom_float_x,373373+ CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_B, 0);374374+ REG_SET_2(CM_RGAM_RAMB_START_CNTL_G, 0,375375+ CM_RGAM_RAMB_EXP_REGION_START_G, params->arr_points[0].custom_float_x,376376+ CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_G, 0);377377+ REG_SET_2(CM_RGAM_RAMB_START_CNTL_R, 0,378378+ CM_RGAM_RAMB_EXP_REGION_START_R, params->arr_points[0].custom_float_x,379379+ CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_R, 0);380380+381381+ REG_SET(CM_RGAM_RAMB_SLOPE_CNTL_B, 0,382382+ CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_B, params->arr_points[0].custom_float_slope);383383+ REG_SET(CM_RGAM_RAMB_SLOPE_CNTL_G, 0,384384+ CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_G, params->arr_points[0].custom_float_slope);385385+ REG_SET(CM_RGAM_RAMB_SLOPE_CNTL_R, 0,386386+ CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_R, params->arr_points[0].custom_float_slope);387387+388388+ REG_SET(CM_RGAM_RAMB_END_CNTL1_B, 0,389389+ CM_RGAM_RAMB_EXP_REGION_END_B, params->arr_points[1].custom_float_x);390390+ REG_SET_2(CM_RGAM_RAMB_END_CNTL2_B, 0,391391+ CM_RGAM_RAMB_EXP_REGION_END_SLOPE_B, params->arr_points[1].custom_float_slope,392392+ CM_RGAM_RAMB_EXP_REGION_END_BASE_B, params->arr_points[1].custom_float_y);393393+394394+ REG_SET(CM_RGAM_RAMB_END_CNTL1_G, 0,395395+ CM_RGAM_RAMB_EXP_REGION_END_G, params->arr_points[1].custom_float_x);396396+ REG_SET_2(CM_RGAM_RAMB_END_CNTL2_G, 0,397397+ CM_RGAM_RAMB_EXP_REGION_END_SLOPE_G, params->arr_points[1].custom_float_slope,398398+ CM_RGAM_RAMB_EXP_REGION_END_BASE_G, params->arr_points[1].custom_float_y);399399+400400+ REG_SET(CM_RGAM_RAMB_END_CNTL1_R, 0,401401+ CM_RGAM_RAMB_EXP_REGION_END_R, params->arr_points[1].custom_float_x);402402+ REG_SET_2(CM_RGAM_RAMB_END_CNTL2_R, 0,403403+ CM_RGAM_RAMB_EXP_REGION_END_SLOPE_R, params->arr_points[1].custom_float_slope,404404+ CM_RGAM_RAMB_EXP_REGION_END_BASE_R, params->arr_points[1].custom_float_y);405405+406406+ curve = params->arr_curve_points;407407+ REG_SET_4(CM_RGAM_RAMB_REGION_0_1, 0,408408+ CM_RGAM_RAMB_EXP_REGION0_LUT_OFFSET, curve[0].offset,409409+ CM_RGAM_RAMB_EXP_REGION0_NUM_SEGMENTS, curve[0].segments_num,410410+ CM_RGAM_RAMB_EXP_REGION1_LUT_OFFSET, curve[1].offset,411411+ CM_RGAM_RAMB_EXP_REGION1_NUM_SEGMENTS, curve[1].segments_num);412412+413413+ curve += 2;414414+ REG_SET_4(CM_RGAM_RAMB_REGION_2_3, 0,415415+ CM_RGAM_RAMB_EXP_REGION2_LUT_OFFSET, curve[0].offset,416416+ CM_RGAM_RAMB_EXP_REGION2_NUM_SEGMENTS, curve[0].segments_num,417417+ CM_RGAM_RAMB_EXP_REGION3_LUT_OFFSET, curve[1].offset,418418+ CM_RGAM_RAMB_EXP_REGION3_NUM_SEGMENTS, curve[1].segments_num);419419+420420+ curve += 2;421421+ REG_SET_4(CM_RGAM_RAMB_REGION_4_5, 0,422422+ CM_RGAM_RAMB_EXP_REGION4_LUT_OFFSET, curve[0].offset,423423+ CM_RGAM_RAMB_EXP_REGION4_NUM_SEGMENTS, curve[0].segments_num,424424+ CM_RGAM_RAMB_EXP_REGION5_LUT_OFFSET, curve[1].offset,425425+ CM_RGAM_RAMB_EXP_REGION5_NUM_SEGMENTS, curve[1].segments_num);426426+427427+ curve += 2;428428+ REG_SET_4(CM_RGAM_RAMB_REGION_6_7, 0,429429+ CM_RGAM_RAMB_EXP_REGION6_LUT_OFFSET, curve[0].offset,430430+ CM_RGAM_RAMB_EXP_REGION6_NUM_SEGMENTS, curve[0].segments_num,431431+ CM_RGAM_RAMB_EXP_REGION7_LUT_OFFSET, curve[1].offset,432432+ CM_RGAM_RAMB_EXP_REGION7_NUM_SEGMENTS, curve[1].segments_num);433433+434434+ curve += 2;435435+ REG_SET_4(CM_RGAM_RAMB_REGION_8_9, 0,436436+ CM_RGAM_RAMB_EXP_REGION8_LUT_OFFSET, curve[0].offset,437437+ CM_RGAM_RAMB_EXP_REGION8_NUM_SEGMENTS, curve[0].segments_num,438438+ CM_RGAM_RAMB_EXP_REGION9_LUT_OFFSET, curve[1].offset,439439+ CM_RGAM_RAMB_EXP_REGION9_NUM_SEGMENTS, curve[1].segments_num);440440+441441+ curve += 2;442442+ REG_SET_4(CM_RGAM_RAMB_REGION_10_11, 0,443443+ CM_RGAM_RAMB_EXP_REGION10_LUT_OFFSET, curve[0].offset,444444+ CM_RGAM_RAMB_EXP_REGION10_NUM_SEGMENTS, curve[0].segments_num,445445+ CM_RGAM_RAMB_EXP_REGION11_LUT_OFFSET, curve[1].offset,446446+ CM_RGAM_RAMB_EXP_REGION11_NUM_SEGMENTS, curve[1].segments_num);447447+448448+ curve += 2;449449+ REG_SET_4(CM_RGAM_RAMB_REGION_12_13, 0,450450+ CM_RGAM_RAMB_EXP_REGION12_LUT_OFFSET, curve[0].offset,451451+ CM_RGAM_RAMB_EXP_REGION12_NUM_SEGMENTS, curve[0].segments_num,452452+ CM_RGAM_RAMB_EXP_REGION13_LUT_OFFSET, curve[1].offset,453453+ CM_RGAM_RAMB_EXP_REGION13_NUM_SEGMENTS, curve[1].segments_num);454454+455455+ curve += 2;456456+ REG_SET_4(CM_RGAM_RAMB_REGION_14_15, 0,457457+ CM_RGAM_RAMB_EXP_REGION14_LUT_OFFSET, curve[0].offset,458458+ CM_RGAM_RAMB_EXP_REGION14_NUM_SEGMENTS, curve[0].segments_num,459459+ CM_RGAM_RAMB_EXP_REGION15_LUT_OFFSET, curve[1].offset,460460+ CM_RGAM_RAMB_EXP_REGION15_NUM_SEGMENTS, curve[1].segments_num);461461+462462+ curve += 2;463463+ REG_SET_4(CM_RGAM_RAMB_REGION_16_17, 0,464464+ CM_RGAM_RAMB_EXP_REGION16_LUT_OFFSET, curve[0].offset,465465+ CM_RGAM_RAMB_EXP_REGION16_NUM_SEGMENTS, curve[0].segments_num,466466+ CM_RGAM_RAMB_EXP_REGION17_LUT_OFFSET, curve[1].offset,467467+ CM_RGAM_RAMB_EXP_REGION17_NUM_SEGMENTS, curve[1].segments_num);468468+469469+ curve += 2;470470+ REG_SET_4(CM_RGAM_RAMB_REGION_18_19, 0,471471+ CM_RGAM_RAMB_EXP_REGION18_LUT_OFFSET, curve[0].offset,472472+ CM_RGAM_RAMB_EXP_REGION18_NUM_SEGMENTS, curve[0].segments_num,473473+ CM_RGAM_RAMB_EXP_REGION19_LUT_OFFSET, curve[1].offset,474474+ CM_RGAM_RAMB_EXP_REGION19_NUM_SEGMENTS, curve[1].segments_num);475475+476476+ curve += 2;477477+ REG_SET_4(CM_RGAM_RAMB_REGION_20_21, 0,478478+ CM_RGAM_RAMB_EXP_REGION20_LUT_OFFSET, curve[0].offset,479479+ CM_RGAM_RAMB_EXP_REGION20_NUM_SEGMENTS, curve[0].segments_num,480480+ CM_RGAM_RAMB_EXP_REGION21_LUT_OFFSET, curve[1].offset,481481+ CM_RGAM_RAMB_EXP_REGION21_NUM_SEGMENTS, curve[1].segments_num);482482+483483+ curve += 2;484484+ REG_SET_4(CM_RGAM_RAMB_REGION_22_23, 0,485485+ CM_RGAM_RAMB_EXP_REGION22_LUT_OFFSET, curve[0].offset,486486+ CM_RGAM_RAMB_EXP_REGION22_NUM_SEGMENTS, curve[0].segments_num,487487+ CM_RGAM_RAMB_EXP_REGION23_LUT_OFFSET, curve[1].offset,488488+ CM_RGAM_RAMB_EXP_REGION23_NUM_SEGMENTS, curve[1].segments_num);489489+490490+ curve += 2;491491+ REG_SET_4(CM_RGAM_RAMB_REGION_24_25, 0,492492+ CM_RGAM_RAMB_EXP_REGION24_LUT_OFFSET, curve[0].offset,493493+ CM_RGAM_RAMB_EXP_REGION24_NUM_SEGMENTS, curve[0].segments_num,494494+ CM_RGAM_RAMB_EXP_REGION25_LUT_OFFSET, curve[1].offset,495495+ CM_RGAM_RAMB_EXP_REGION25_NUM_SEGMENTS, curve[1].segments_num);496496+497497+ curve += 2;498498+ REG_SET_4(CM_RGAM_RAMB_REGION_26_27, 0,499499+ CM_RGAM_RAMB_EXP_REGION26_LUT_OFFSET, curve[0].offset,500500+ CM_RGAM_RAMB_EXP_REGION26_NUM_SEGMENTS, curve[0].segments_num,501501+ CM_RGAM_RAMB_EXP_REGION27_LUT_OFFSET, curve[1].offset,502502+ CM_RGAM_RAMB_EXP_REGION27_NUM_SEGMENTS, curve[1].segments_num);503503+504504+ curve += 2;505505+ REG_SET_4(CM_RGAM_RAMB_REGION_28_29, 0,506506+ CM_RGAM_RAMB_EXP_REGION28_LUT_OFFSET, curve[0].offset,507507+ CM_RGAM_RAMB_EXP_REGION28_NUM_SEGMENTS, curve[0].segments_num,508508+ CM_RGAM_RAMB_EXP_REGION29_LUT_OFFSET, curve[1].offset,509509+ CM_RGAM_RAMB_EXP_REGION29_NUM_SEGMENTS, curve[1].segments_num);510510+511511+ curve += 2;512512+ REG_SET_4(CM_RGAM_RAMB_REGION_30_31, 0,513513+ CM_RGAM_RAMB_EXP_REGION30_LUT_OFFSET, curve[0].offset,514514+ CM_RGAM_RAMB_EXP_REGION30_NUM_SEGMENTS, curve[0].segments_num,515515+ CM_RGAM_RAMB_EXP_REGION31_LUT_OFFSET, curve[1].offset,516516+ CM_RGAM_RAMB_EXP_REGION31_NUM_SEGMENTS, curve[1].segments_num);517517+518518+ curve += 2;519519+ REG_SET_4(CM_RGAM_RAMB_REGION_32_33, 0,520520+ CM_RGAM_RAMB_EXP_REGION32_LUT_OFFSET, curve[0].offset,521521+ CM_RGAM_RAMB_EXP_REGION32_NUM_SEGMENTS, curve[0].segments_num,522522+ CM_RGAM_RAMB_EXP_REGION33_LUT_OFFSET, curve[1].offset,523523+ CM_RGAM_RAMB_EXP_REGION33_NUM_SEGMENTS, curve[1].segments_num);524524+525525+}526526+527527+/*program re gamma RAM A*/528528+static void opp_program_regamma_luta_settings(529529+ struct output_pixel_processor *opp,530530+ const struct pwl_params *params)531531+{532532+ const struct gamma_curve *curve;533533+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);534534+535535+ REG_SET_2(CM_RGAM_RAMA_START_CNTL_B, 0,536536+ CM_RGAM_RAMA_EXP_REGION_START_B, params->arr_points[0].custom_float_x,537537+ CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_B, 0);538538+ REG_SET_2(CM_RGAM_RAMA_START_CNTL_G, 0,539539+ CM_RGAM_RAMA_EXP_REGION_START_G, params->arr_points[0].custom_float_x,540540+ CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_G, 0);541541+ REG_SET_2(CM_RGAM_RAMA_START_CNTL_R, 0,542542+ CM_RGAM_RAMA_EXP_REGION_START_R, params->arr_points[0].custom_float_x,543543+ CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_R, 0);544544+545545+ REG_SET(CM_RGAM_RAMA_SLOPE_CNTL_B, 0,546546+ CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_B, params->arr_points[0].custom_float_slope);547547+ REG_SET(CM_RGAM_RAMA_SLOPE_CNTL_G, 0,548548+ CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_G, params->arr_points[0].custom_float_slope);549549+ REG_SET(CM_RGAM_RAMA_SLOPE_CNTL_R, 0,550550+ CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_R, params->arr_points[0].custom_float_slope);551551+552552+ REG_SET(CM_RGAM_RAMA_END_CNTL1_B, 0,553553+ CM_RGAM_RAMA_EXP_REGION_END_B, params->arr_points[1].custom_float_x);554554+ REG_SET_2(CM_RGAM_RAMA_END_CNTL2_B, 0,555555+ CM_RGAM_RAMA_EXP_REGION_END_SLOPE_B, params->arr_points[1].custom_float_slope,556556+ CM_RGAM_RAMA_EXP_REGION_END_BASE_B, params->arr_points[1].custom_float_y);557557+558558+ REG_SET(CM_RGAM_RAMA_END_CNTL1_G, 0,559559+ CM_RGAM_RAMA_EXP_REGION_END_G, params->arr_points[1].custom_float_x);560560+ REG_SET_2(CM_RGAM_RAMA_END_CNTL2_G, 0,561561+ CM_RGAM_RAMA_EXP_REGION_END_SLOPE_G, params->arr_points[1].custom_float_slope,562562+ CM_RGAM_RAMA_EXP_REGION_END_BASE_G, params->arr_points[1].custom_float_y);563563+564564+ REG_SET(CM_RGAM_RAMA_END_CNTL1_R, 0,565565+ CM_RGAM_RAMA_EXP_REGION_END_R, params->arr_points[1].custom_float_x);566566+ REG_SET_2(CM_RGAM_RAMA_END_CNTL2_R, 0,567567+ CM_RGAM_RAMA_EXP_REGION_END_SLOPE_R, params->arr_points[1].custom_float_slope,568568+ CM_RGAM_RAMA_EXP_REGION_END_BASE_R, params->arr_points[1].custom_float_y);569569+570570+ curve = params->arr_curve_points;571571+ REG_SET_4(CM_RGAM_RAMA_REGION_0_1, 0,572572+ CM_RGAM_RAMA_EXP_REGION0_LUT_OFFSET, curve[0].offset,573573+ CM_RGAM_RAMA_EXP_REGION0_NUM_SEGMENTS, curve[0].segments_num,574574+ CM_RGAM_RAMA_EXP_REGION1_LUT_OFFSET, curve[1].offset,575575+ CM_RGAM_RAMA_EXP_REGION1_NUM_SEGMENTS, curve[1].segments_num);576576+577577+ curve += 2;578578+ REG_SET_4(CM_RGAM_RAMA_REGION_2_3, 0,579579+ CM_RGAM_RAMA_EXP_REGION2_LUT_OFFSET, curve[0].offset,580580+ CM_RGAM_RAMA_EXP_REGION2_NUM_SEGMENTS, curve[0].segments_num,581581+ CM_RGAM_RAMA_EXP_REGION3_LUT_OFFSET, curve[1].offset,582582+ CM_RGAM_RAMA_EXP_REGION3_NUM_SEGMENTS, curve[1].segments_num);583583+584584+ curve += 2;585585+ REG_SET_4(CM_RGAM_RAMA_REGION_4_5, 0,586586+ CM_RGAM_RAMA_EXP_REGION4_LUT_OFFSET, curve[0].offset,587587+ CM_RGAM_RAMA_EXP_REGION4_NUM_SEGMENTS, curve[0].segments_num,588588+ CM_RGAM_RAMA_EXP_REGION5_LUT_OFFSET, curve[1].offset,589589+ CM_RGAM_RAMA_EXP_REGION5_NUM_SEGMENTS, curve[1].segments_num);590590+591591+ curve += 2;592592+ REG_SET_4(CM_RGAM_RAMA_REGION_6_7, 0,593593+ CM_RGAM_RAMA_EXP_REGION6_LUT_OFFSET, curve[0].offset,594594+ CM_RGAM_RAMA_EXP_REGION6_NUM_SEGMENTS, curve[0].segments_num,595595+ CM_RGAM_RAMA_EXP_REGION7_LUT_OFFSET, curve[1].offset,596596+ CM_RGAM_RAMA_EXP_REGION7_NUM_SEGMENTS, curve[1].segments_num);597597+598598+ curve += 2;599599+ REG_SET_4(CM_RGAM_RAMA_REGION_8_9, 0,600600+ CM_RGAM_RAMA_EXP_REGION8_LUT_OFFSET, curve[0].offset,601601+ CM_RGAM_RAMA_EXP_REGION8_NUM_SEGMENTS, curve[0].segments_num,602602+ CM_RGAM_RAMA_EXP_REGION9_LUT_OFFSET, curve[1].offset,603603+ CM_RGAM_RAMA_EXP_REGION9_NUM_SEGMENTS, curve[1].segments_num);604604+605605+ curve += 2;606606+ REG_SET_4(CM_RGAM_RAMA_REGION_10_11, 0,607607+ CM_RGAM_RAMA_EXP_REGION10_LUT_OFFSET, curve[0].offset,608608+ CM_RGAM_RAMA_EXP_REGION10_NUM_SEGMENTS, curve[0].segments_num,609609+ CM_RGAM_RAMA_EXP_REGION11_LUT_OFFSET, curve[1].offset,610610+ CM_RGAM_RAMA_EXP_REGION11_NUM_SEGMENTS, curve[1].segments_num);611611+612612+ curve += 2;613613+ REG_SET_4(CM_RGAM_RAMA_REGION_12_13, 0,614614+ CM_RGAM_RAMA_EXP_REGION12_LUT_OFFSET, curve[0].offset,615615+ CM_RGAM_RAMA_EXP_REGION12_NUM_SEGMENTS, curve[0].segments_num,616616+ CM_RGAM_RAMA_EXP_REGION13_LUT_OFFSET, curve[1].offset,617617+ CM_RGAM_RAMA_EXP_REGION13_NUM_SEGMENTS, curve[1].segments_num);618618+619619+ curve += 2;620620+ REG_SET_4(CM_RGAM_RAMA_REGION_14_15, 0,621621+ CM_RGAM_RAMA_EXP_REGION14_LUT_OFFSET, curve[0].offset,622622+ CM_RGAM_RAMA_EXP_REGION14_NUM_SEGMENTS, curve[0].segments_num,623623+ CM_RGAM_RAMA_EXP_REGION15_LUT_OFFSET, curve[1].offset,624624+ CM_RGAM_RAMA_EXP_REGION15_NUM_SEGMENTS, curve[1].segments_num);625625+626626+ curve += 2;627627+ REG_SET_4(CM_RGAM_RAMA_REGION_16_17, 0,628628+ CM_RGAM_RAMA_EXP_REGION16_LUT_OFFSET, curve[0].offset,629629+ CM_RGAM_RAMA_EXP_REGION16_NUM_SEGMENTS, curve[0].segments_num,630630+ CM_RGAM_RAMA_EXP_REGION17_LUT_OFFSET, curve[1].offset,631631+ CM_RGAM_RAMA_EXP_REGION17_NUM_SEGMENTS, curve[1].segments_num);632632+633633+ curve += 2;634634+ REG_SET_4(CM_RGAM_RAMA_REGION_18_19, 0,635635+ CM_RGAM_RAMA_EXP_REGION18_LUT_OFFSET, curve[0].offset,636636+ CM_RGAM_RAMA_EXP_REGION18_NUM_SEGMENTS, curve[0].segments_num,637637+ CM_RGAM_RAMA_EXP_REGION19_LUT_OFFSET, curve[1].offset,638638+ CM_RGAM_RAMA_EXP_REGION19_NUM_SEGMENTS, curve[1].segments_num);639639+640640+ curve += 2;641641+ REG_SET_4(CM_RGAM_RAMA_REGION_20_21, 0,642642+ CM_RGAM_RAMA_EXP_REGION20_LUT_OFFSET, curve[0].offset,643643+ CM_RGAM_RAMA_EXP_REGION20_NUM_SEGMENTS, curve[0].segments_num,644644+ CM_RGAM_RAMA_EXP_REGION21_LUT_OFFSET, curve[1].offset,645645+ CM_RGAM_RAMA_EXP_REGION21_NUM_SEGMENTS, curve[1].segments_num);646646+647647+ curve += 2;648648+ REG_SET_4(CM_RGAM_RAMA_REGION_22_23, 0,649649+ CM_RGAM_RAMA_EXP_REGION22_LUT_OFFSET, curve[0].offset,650650+ CM_RGAM_RAMA_EXP_REGION22_NUM_SEGMENTS, curve[0].segments_num,651651+ CM_RGAM_RAMA_EXP_REGION23_LUT_OFFSET, curve[1].offset,652652+ CM_RGAM_RAMA_EXP_REGION23_NUM_SEGMENTS, curve[1].segments_num);653653+654654+ curve += 2;655655+ REG_SET_4(CM_RGAM_RAMA_REGION_24_25, 0,656656+ CM_RGAM_RAMA_EXP_REGION24_LUT_OFFSET, curve[0].offset,657657+ CM_RGAM_RAMA_EXP_REGION24_NUM_SEGMENTS, curve[0].segments_num,658658+ CM_RGAM_RAMA_EXP_REGION25_LUT_OFFSET, curve[1].offset,659659+ CM_RGAM_RAMA_EXP_REGION25_NUM_SEGMENTS, curve[1].segments_num);660660+661661+ curve += 2;662662+ REG_SET_4(CM_RGAM_RAMA_REGION_26_27, 0,663663+ CM_RGAM_RAMA_EXP_REGION26_LUT_OFFSET, curve[0].offset,664664+ CM_RGAM_RAMA_EXP_REGION26_NUM_SEGMENTS, curve[0].segments_num,665665+ CM_RGAM_RAMA_EXP_REGION27_LUT_OFFSET, curve[1].offset,666666+ CM_RGAM_RAMA_EXP_REGION27_NUM_SEGMENTS, curve[1].segments_num);667667+668668+ curve += 2;669669+ REG_SET_4(CM_RGAM_RAMA_REGION_28_29, 0,670670+ CM_RGAM_RAMA_EXP_REGION28_LUT_OFFSET, curve[0].offset,671671+ CM_RGAM_RAMA_EXP_REGION28_NUM_SEGMENTS, curve[0].segments_num,672672+ CM_RGAM_RAMA_EXP_REGION29_LUT_OFFSET, curve[1].offset,673673+ CM_RGAM_RAMA_EXP_REGION29_NUM_SEGMENTS, curve[1].segments_num);674674+675675+ curve += 2;676676+ REG_SET_4(CM_RGAM_RAMA_REGION_30_31, 0,677677+ CM_RGAM_RAMA_EXP_REGION30_LUT_OFFSET, curve[0].offset,678678+ CM_RGAM_RAMA_EXP_REGION30_NUM_SEGMENTS, curve[0].segments_num,679679+ CM_RGAM_RAMA_EXP_REGION31_LUT_OFFSET, curve[1].offset,680680+ CM_RGAM_RAMA_EXP_REGION31_NUM_SEGMENTS, curve[1].segments_num);681681+682682+ curve += 2;683683+ REG_SET_4(CM_RGAM_RAMA_REGION_32_33, 0,684684+ CM_RGAM_RAMA_EXP_REGION32_LUT_OFFSET, curve[0].offset,685685+ CM_RGAM_RAMA_EXP_REGION32_NUM_SEGMENTS, curve[0].segments_num,686686+ CM_RGAM_RAMA_EXP_REGION33_LUT_OFFSET, curve[1].offset,687687+ CM_RGAM_RAMA_EXP_REGION33_NUM_SEGMENTS, curve[1].segments_num);688688+}689689+690690+static void opp_configure_regamma_lut(691691+ struct output_pixel_processor *opp,692692+ bool is_ram_a)693693+{694694+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);695695+696696+ REG_UPDATE(CM_RGAM_LUT_WRITE_EN_MASK,697697+ CM_RGAM_LUT_WRITE_EN_MASK, 7);698698+ REG_UPDATE(CM_RGAM_LUT_WRITE_EN_MASK,699699+ CM_RGAM_LUT_WRITE_SEL, is_ram_a == true ? 0:1);700700+ REG_SET(CM_RGAM_LUT_INDEX, 0, CM_RGAM_LUT_INDEX, 0);701701+}702702+703703+static void opp_power_on_regamma_lut(704704+ struct output_pixel_processor *opp,705705+ bool power_on)706706+{707707+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);708708+ REG_SET(CM_MEM_PWR_CTRL, 0,709709+ RGAM_MEM_PWR_FORCE, power_on == true ? 0:1);710710+711711+}712712+713713+static void opp_program_regamma_lut(714714+ struct output_pixel_processor *opp,715715+ const struct pwl_result_data *rgb,716716+ uint32_t num)717717+{718718+ uint32_t i;719719+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);720720+ for (i = 0 ; i < num; i++) {721721+ REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].red_reg);722722+ REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].green_reg);723723+ REG_SET(CM_RGAM_LUT_DATA, 0, CM_RGAM_LUT_DATA, rgb[i].blue_reg);724724+725725+ REG_SET(CM_RGAM_LUT_DATA, 0,726726+ CM_RGAM_LUT_DATA, rgb[i].delta_red_reg);727727+ REG_SET(CM_RGAM_LUT_DATA, 0,728728+ CM_RGAM_LUT_DATA, rgb[i].delta_green_reg);729729+ REG_SET(CM_RGAM_LUT_DATA, 0,730730+ CM_RGAM_LUT_DATA, rgb[i].delta_blue_reg);731731+732732+ }733733+734734+}735735+736736+static bool opp_set_regamma_pwl(737737+ struct output_pixel_processor *opp, const struct pwl_params *params)738738+{739739+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);740740+741741+ opp_power_on_regamma_lut(opp, true);742742+ opp_configure_regamma_lut(opp, oppn10->is_write_to_ram_a_safe);743743+744744+ if (oppn10->is_write_to_ram_a_safe)745745+ opp_program_regamma_luta_settings(opp, params);746746+ else747747+ opp_program_regamma_lutb_settings(opp, params);748748+749749+ opp_program_regamma_lut(750750+ opp, params->rgb_resulted, params->hw_points_num);751751+752752+ return true;753753+}754754+755755+static void opp_set_stereo_polarity(756756+ struct output_pixel_processor *opp,757757+ bool enable, bool rightEyePolarity)758758+{759759+ struct dcn10_opp *oppn10 = TO_DCN10_OPP(opp);760760+761761+ REG_UPDATE(FMT_CONTROL, FMT_STEREOSYNC_OVERRIDE, enable);762762+}763763+764764+/*****************************************/765765+/* Constructor, Destructor */766766+/*****************************************/767767+768768+static void dcn10_opp_destroy(struct output_pixel_processor **opp)769769+{770770+ dm_free(TO_DCN10_OPP(*opp));771771+ *opp = NULL;772772+}773773+774774+static struct opp_funcs dcn10_opp_funcs = {775775+ .opp_power_on_regamma_lut = opp_power_on_regamma_lut,776776+ .opp_set_csc_adjustment = NULL,777777+ .opp_set_csc_default = opp_set_output_csc_default,778778+ .opp_set_dyn_expansion = opp_set_dyn_expansion,779779+ .opp_program_regamma_pwl = opp_set_regamma_pwl,780780+ .opp_set_regamma_mode = opp_set_regamma_mode,781781+ .opp_program_fmt = opp_program_fmt,782782+ .opp_program_bit_depth_reduction = opp_program_bit_depth_reduction,783783+ .opp_set_stereo_polarity = opp_set_stereo_polarity,784784+ .opp_destroy = dcn10_opp_destroy785785+};786786+787787+void dcn10_opp_construct(struct dcn10_opp *oppn10,788788+ struct dc_context *ctx,789789+ uint32_t inst,790790+ const struct dcn10_opp_registers *regs,791791+ const struct dcn10_opp_shift *opp_shift,792792+ const struct dcn10_opp_mask *opp_mask)793793+{794794+ oppn10->base.ctx = ctx;795795+ oppn10->base.inst = inst;796796+ oppn10->base.funcs = &dcn10_opp_funcs;797797+798798+ oppn10->regs = regs;799799+ oppn10->opp_shift = opp_shift;800800+ oppn10->opp_mask = opp_mask;801801+}
+622
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_opp.h
···11+/* Copyright 2012-15 Advanced Micro Devices, Inc.22+ *33+ * Permission is hereby granted, free of charge, to any person obtaining a44+ * copy of this software and associated documentation files (the "Software"),55+ * to deal in the Software without restriction, including without limitation66+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,77+ * and/or sell copies of the Software, and to permit persons to whom the88+ * Software is furnished to do so, subject to the following conditions:99+ *1010+ * The above copyright notice and this permission notice shall be included in1111+ * all copies or substantial portions of the Software.1212+ *1313+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1414+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1515+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL1616+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR1717+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,1818+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR1919+ * OTHER DEALINGS IN THE SOFTWARE.2020+ *2121+ * Authors: AMD2222+ *2323+ */2424+2525+#ifndef __DC_OPP_DCN10_H__2626+#define __DC_OPP_DCN10_H__2727+2828+#include "opp.h"2929+3030+#define TO_DCN10_OPP(opp)\3131+ container_of(opp, struct dcn10_opp, base)3232+3333+#define OPP_SF(reg_name, field_name, post_fix)\3434+ .field_name = reg_name ## __ ## field_name ## post_fix3535+3636+#define OPP_DCN10_REG_LIST(id) \3737+ SRI(CM_RGAM_LUT_WRITE_EN_MASK, CM, id), \3838+ SRI(CM_RGAM_CONTROL, CM, id), \3939+ SRI(OBUF_CONTROL, DSCL, id), \4040+ SRI(FMT_BIT_DEPTH_CONTROL, FMT, id), \4141+ SRI(FMT_CONTROL, FMT, id), \4242+ SRI(FMT_DITHER_RAND_R_SEED, FMT, id), \4343+ SRI(FMT_DITHER_RAND_G_SEED, FMT, id), \4444+ SRI(FMT_DITHER_RAND_B_SEED, FMT, id), \4545+ SRI(FMT_CLAMP_CNTL, FMT, id), \4646+ SRI(FMT_DYNAMIC_EXP_CNTL, FMT, id), \4747+ SRI(FMT_MAP420_MEMORY_CONTROL, FMT, id), \4848+ SRI(CM_OCSC_CONTROL, CM, id), \4949+ SRI(CM_RGAM_RAMB_START_CNTL_B, CM, id), \5050+ SRI(CM_RGAM_RAMB_START_CNTL_G, CM, id), \5151+ SRI(CM_RGAM_RAMB_START_CNTL_R, CM, id), \5252+ SRI(CM_RGAM_RAMB_SLOPE_CNTL_B, CM, id), \5353+ SRI(CM_RGAM_RAMB_SLOPE_CNTL_G, CM, id), \5454+ SRI(CM_RGAM_RAMB_SLOPE_CNTL_R, CM, id), \5555+ SRI(CM_RGAM_RAMB_END_CNTL1_B, CM, id), \5656+ SRI(CM_RGAM_RAMB_END_CNTL2_B, CM, id), \5757+ SRI(CM_RGAM_RAMB_END_CNTL1_G, CM, id), \5858+ SRI(CM_RGAM_RAMB_END_CNTL2_G, CM, id), \5959+ SRI(CM_RGAM_RAMB_END_CNTL1_R, CM, id), \6060+ SRI(CM_RGAM_RAMB_END_CNTL2_R, CM, id), \6161+ SRI(CM_RGAM_RAMB_REGION_0_1, CM, id), \6262+ SRI(CM_RGAM_RAMB_REGION_2_3, CM, id), \6363+ SRI(CM_RGAM_RAMB_REGION_4_5, CM, id), \6464+ SRI(CM_RGAM_RAMB_REGION_6_7, CM, id), \6565+ SRI(CM_RGAM_RAMB_REGION_8_9, CM, id), \6666+ SRI(CM_RGAM_RAMB_REGION_10_11, CM, id), \6767+ SRI(CM_RGAM_RAMB_REGION_12_13, CM, id), \6868+ SRI(CM_RGAM_RAMB_REGION_14_15, CM, id), \6969+ SRI(CM_RGAM_RAMB_REGION_16_17, CM, id), \7070+ SRI(CM_RGAM_RAMB_REGION_18_19, CM, id), \7171+ SRI(CM_RGAM_RAMB_REGION_20_21, CM, id), \7272+ SRI(CM_RGAM_RAMB_REGION_22_23, CM, id), \7373+ SRI(CM_RGAM_RAMB_REGION_24_25, CM, id), \7474+ SRI(CM_RGAM_RAMB_REGION_26_27, CM, id), \7575+ SRI(CM_RGAM_RAMB_REGION_28_29, CM, id), \7676+ SRI(CM_RGAM_RAMB_REGION_30_31, CM, id), \7777+ SRI(CM_RGAM_RAMB_REGION_32_33, CM, id), \7878+ SRI(CM_RGAM_RAMA_START_CNTL_B, CM, id), \7979+ SRI(CM_RGAM_RAMA_START_CNTL_G, CM, id), \8080+ SRI(CM_RGAM_RAMA_START_CNTL_R, CM, id), \8181+ SRI(CM_RGAM_RAMA_SLOPE_CNTL_B, CM, id), \8282+ SRI(CM_RGAM_RAMA_SLOPE_CNTL_G, CM, id), \8383+ SRI(CM_RGAM_RAMA_SLOPE_CNTL_R, CM, id), \8484+ SRI(CM_RGAM_RAMA_END_CNTL1_B, CM, id), \8585+ SRI(CM_RGAM_RAMA_END_CNTL2_B, CM, id), \8686+ SRI(CM_RGAM_RAMA_END_CNTL1_G, CM, id), \8787+ SRI(CM_RGAM_RAMA_END_CNTL2_G, CM, id), \8888+ SRI(CM_RGAM_RAMA_END_CNTL1_R, CM, id), \8989+ SRI(CM_RGAM_RAMA_END_CNTL2_R, CM, id), \9090+ SRI(CM_RGAM_RAMA_REGION_0_1, CM, id), \9191+ SRI(CM_RGAM_RAMA_REGION_2_3, CM, id), \9292+ SRI(CM_RGAM_RAMA_REGION_4_5, CM, id), \9393+ SRI(CM_RGAM_RAMA_REGION_6_7, CM, id), \9494+ SRI(CM_RGAM_RAMA_REGION_8_9, CM, id), \9595+ SRI(CM_RGAM_RAMA_REGION_10_11, CM, id), \9696+ SRI(CM_RGAM_RAMA_REGION_12_13, CM, id), \9797+ SRI(CM_RGAM_RAMA_REGION_14_15, CM, id), \9898+ SRI(CM_RGAM_RAMA_REGION_16_17, CM, id), \9999+ SRI(CM_RGAM_RAMA_REGION_18_19, CM, id), \100100+ SRI(CM_RGAM_RAMA_REGION_20_21, CM, id), \101101+ SRI(CM_RGAM_RAMA_REGION_22_23, CM, id), \102102+ SRI(CM_RGAM_RAMA_REGION_24_25, CM, id), \103103+ SRI(CM_RGAM_RAMA_REGION_26_27, CM, id), \104104+ SRI(CM_RGAM_RAMA_REGION_28_29, CM, id), \105105+ SRI(CM_RGAM_RAMA_REGION_30_31, CM, id), \106106+ SRI(CM_RGAM_RAMA_REGION_32_33, CM, id), \107107+ SRI(CM_RGAM_LUT_INDEX, CM, id), \108108+ SRI(CM_MEM_PWR_CTRL, CM, id), \109109+ SRI(CM_RGAM_LUT_DATA, CM, id)110110+111111+#define OPP_DCN10_MASK_SH_LIST(mask_sh) \112112+ OPP_SF(CM0_CM_RGAM_CONTROL, CM_RGAM_LUT_MODE, mask_sh), \113113+ OPP_SF(DSCL0_OBUF_CONTROL, OBUF_BYPASS, mask_sh), \114114+ OPP_SF(DSCL0_OBUF_CONTROL, OBUF_H_2X_UPSCALE_EN, mask_sh), \115115+ OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_EN, mask_sh), \116116+ OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_DEPTH, mask_sh), \117117+ OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_TRUNCATE_MODE, mask_sh), \118118+ OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_SPATIAL_DITHER_EN, mask_sh), \119119+ OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_SPATIAL_DITHER_MODE, mask_sh), \120120+ OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_SPATIAL_DITHER_DEPTH, mask_sh), \121121+ OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_TEMPORAL_DITHER_EN, mask_sh), \122122+ OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_HIGHPASS_RANDOM_ENABLE, mask_sh), \123123+ OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_FRAME_RANDOM_ENABLE, mask_sh), \124124+ OPP_SF(FMT0_FMT_BIT_DEPTH_CONTROL, FMT_RGB_RANDOM_ENABLE, mask_sh), \125125+ OPP_SF(FMT0_FMT_CONTROL, FMT_SPATIAL_DITHER_FRAME_COUNTER_MAX, mask_sh), \126126+ OPP_SF(FMT0_FMT_CONTROL, FMT_SPATIAL_DITHER_FRAME_COUNTER_BIT_SWAP, mask_sh), \127127+ OPP_SF(FMT0_FMT_DITHER_RAND_R_SEED, FMT_RAND_R_SEED, mask_sh), \128128+ OPP_SF(FMT0_FMT_DITHER_RAND_G_SEED, FMT_RAND_G_SEED, mask_sh), \129129+ OPP_SF(FMT0_FMT_DITHER_RAND_B_SEED, FMT_RAND_B_SEED, mask_sh), \130130+ OPP_SF(FMT0_FMT_CONTROL, FMT_PIXEL_ENCODING, mask_sh), \131131+ OPP_SF(FMT0_FMT_CLAMP_CNTL, FMT_CLAMP_DATA_EN, mask_sh), \132132+ OPP_SF(FMT0_FMT_CLAMP_CNTL, FMT_CLAMP_COLOR_FORMAT, mask_sh), \133133+ OPP_SF(FMT0_FMT_DYNAMIC_EXP_CNTL, FMT_DYNAMIC_EXP_EN, mask_sh), \134134+ OPP_SF(FMT0_FMT_DYNAMIC_EXP_CNTL, FMT_DYNAMIC_EXP_MODE, mask_sh), \135135+ OPP_SF(FMT0_FMT_MAP420_MEMORY_CONTROL, FMT_MAP420MEM_PWR_FORCE, mask_sh), \136136+ OPP_SF(CM0_CM_OCSC_CONTROL, CM_OCSC_MODE, mask_sh), \137137+ OPP_SF(CM0_CM_RGAM_RAMB_START_CNTL_B, CM_RGAM_RAMB_EXP_REGION_START_B, mask_sh), \138138+ OPP_SF(CM0_CM_RGAM_RAMB_START_CNTL_B, CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_B, mask_sh), \139139+ OPP_SF(CM0_CM_RGAM_RAMB_START_CNTL_G, CM_RGAM_RAMB_EXP_REGION_START_G, mask_sh), \140140+ OPP_SF(CM0_CM_RGAM_RAMB_START_CNTL_G, CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_G, mask_sh), \141141+ OPP_SF(CM0_CM_RGAM_RAMB_START_CNTL_R, CM_RGAM_RAMB_EXP_REGION_START_R, mask_sh), \142142+ OPP_SF(CM0_CM_RGAM_RAMB_START_CNTL_R, CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_R, mask_sh), \143143+ OPP_SF(CM0_CM_RGAM_RAMB_SLOPE_CNTL_B, CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_B, mask_sh), \144144+ OPP_SF(CM0_CM_RGAM_RAMB_SLOPE_CNTL_G, CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_G, mask_sh), \145145+ OPP_SF(CM0_CM_RGAM_RAMB_SLOPE_CNTL_R, CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_R, mask_sh), \146146+ OPP_SF(CM0_CM_RGAM_RAMB_END_CNTL1_B, CM_RGAM_RAMB_EXP_REGION_END_B, mask_sh), \147147+ OPP_SF(CM0_CM_RGAM_RAMB_END_CNTL2_B, CM_RGAM_RAMB_EXP_REGION_END_SLOPE_B, mask_sh), \148148+ OPP_SF(CM0_CM_RGAM_RAMB_END_CNTL2_B, CM_RGAM_RAMB_EXP_REGION_END_BASE_B, mask_sh), \149149+ OPP_SF(CM0_CM_RGAM_RAMB_END_CNTL1_G, CM_RGAM_RAMB_EXP_REGION_END_G, mask_sh), \150150+ OPP_SF(CM0_CM_RGAM_RAMB_END_CNTL2_G, CM_RGAM_RAMB_EXP_REGION_END_SLOPE_G, mask_sh), \151151+ OPP_SF(CM0_CM_RGAM_RAMB_END_CNTL2_G, CM_RGAM_RAMB_EXP_REGION_END_BASE_G, mask_sh), \152152+ OPP_SF(CM0_CM_RGAM_RAMB_END_CNTL1_R, CM_RGAM_RAMB_EXP_REGION_END_R, mask_sh), \153153+ OPP_SF(CM0_CM_RGAM_RAMB_END_CNTL2_R, CM_RGAM_RAMB_EXP_REGION_END_SLOPE_R, mask_sh), \154154+ OPP_SF(CM0_CM_RGAM_RAMB_END_CNTL2_R, CM_RGAM_RAMB_EXP_REGION_END_BASE_R, mask_sh), \155155+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_0_1, CM_RGAM_RAMB_EXP_REGION0_LUT_OFFSET, mask_sh), \156156+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_0_1, CM_RGAM_RAMB_EXP_REGION0_NUM_SEGMENTS, mask_sh), \157157+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_0_1, CM_RGAM_RAMB_EXP_REGION1_LUT_OFFSET, mask_sh), \158158+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_0_1, CM_RGAM_RAMB_EXP_REGION1_NUM_SEGMENTS, mask_sh), \159159+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_2_3, CM_RGAM_RAMB_EXP_REGION2_LUT_OFFSET, mask_sh), \160160+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_2_3, CM_RGAM_RAMB_EXP_REGION2_NUM_SEGMENTS, mask_sh), \161161+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_2_3, CM_RGAM_RAMB_EXP_REGION3_LUT_OFFSET, mask_sh), \162162+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_2_3, CM_RGAM_RAMB_EXP_REGION3_NUM_SEGMENTS, mask_sh), \163163+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_4_5, CM_RGAM_RAMB_EXP_REGION4_LUT_OFFSET, mask_sh), \164164+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_4_5, CM_RGAM_RAMB_EXP_REGION4_NUM_SEGMENTS, mask_sh), \165165+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_4_5, CM_RGAM_RAMB_EXP_REGION5_LUT_OFFSET, mask_sh), \166166+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_4_5, CM_RGAM_RAMB_EXP_REGION5_NUM_SEGMENTS, mask_sh), \167167+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_6_7, CM_RGAM_RAMB_EXP_REGION6_LUT_OFFSET, mask_sh), \168168+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_6_7, CM_RGAM_RAMB_EXP_REGION6_NUM_SEGMENTS, mask_sh), \169169+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_6_7, CM_RGAM_RAMB_EXP_REGION7_LUT_OFFSET, mask_sh), \170170+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_6_7, CM_RGAM_RAMB_EXP_REGION7_NUM_SEGMENTS, mask_sh), \171171+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_8_9, CM_RGAM_RAMB_EXP_REGION8_LUT_OFFSET, mask_sh), \172172+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_8_9, CM_RGAM_RAMB_EXP_REGION8_NUM_SEGMENTS, mask_sh), \173173+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_8_9, CM_RGAM_RAMB_EXP_REGION9_LUT_OFFSET, mask_sh), \174174+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_8_9, CM_RGAM_RAMB_EXP_REGION9_NUM_SEGMENTS, mask_sh), \175175+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_10_11, CM_RGAM_RAMB_EXP_REGION10_LUT_OFFSET, mask_sh), \176176+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_10_11, CM_RGAM_RAMB_EXP_REGION10_NUM_SEGMENTS, mask_sh), \177177+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_10_11, CM_RGAM_RAMB_EXP_REGION11_LUT_OFFSET, mask_sh), \178178+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_10_11, CM_RGAM_RAMB_EXP_REGION11_NUM_SEGMENTS, mask_sh), \179179+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_12_13, CM_RGAM_RAMB_EXP_REGION12_LUT_OFFSET, mask_sh), \180180+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_12_13, CM_RGAM_RAMB_EXP_REGION12_NUM_SEGMENTS, mask_sh), \181181+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_12_13, CM_RGAM_RAMB_EXP_REGION13_LUT_OFFSET, mask_sh), \182182+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_12_13, CM_RGAM_RAMB_EXP_REGION13_NUM_SEGMENTS, mask_sh), \183183+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_14_15, CM_RGAM_RAMB_EXP_REGION14_LUT_OFFSET, mask_sh), \184184+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_14_15, CM_RGAM_RAMB_EXP_REGION14_NUM_SEGMENTS, mask_sh), \185185+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_14_15, CM_RGAM_RAMB_EXP_REGION15_LUT_OFFSET, mask_sh), \186186+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_14_15, CM_RGAM_RAMB_EXP_REGION15_NUM_SEGMENTS, mask_sh), \187187+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_16_17, CM_RGAM_RAMB_EXP_REGION16_LUT_OFFSET, mask_sh), \188188+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_16_17, CM_RGAM_RAMB_EXP_REGION16_NUM_SEGMENTS, mask_sh), \189189+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_16_17, CM_RGAM_RAMB_EXP_REGION17_LUT_OFFSET, mask_sh), \190190+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_16_17, CM_RGAM_RAMB_EXP_REGION17_NUM_SEGMENTS, mask_sh), \191191+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_18_19, CM_RGAM_RAMB_EXP_REGION18_LUT_OFFSET, mask_sh), \192192+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_18_19, CM_RGAM_RAMB_EXP_REGION18_NUM_SEGMENTS, mask_sh), \193193+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_18_19, CM_RGAM_RAMB_EXP_REGION19_LUT_OFFSET, mask_sh), \194194+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_18_19, CM_RGAM_RAMB_EXP_REGION19_NUM_SEGMENTS, mask_sh), \195195+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_20_21, CM_RGAM_RAMB_EXP_REGION20_LUT_OFFSET, mask_sh), \196196+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_20_21, CM_RGAM_RAMB_EXP_REGION20_NUM_SEGMENTS, mask_sh), \197197+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_20_21, CM_RGAM_RAMB_EXP_REGION21_LUT_OFFSET, mask_sh), \198198+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_20_21, CM_RGAM_RAMB_EXP_REGION21_NUM_SEGMENTS, mask_sh), \199199+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_22_23, CM_RGAM_RAMB_EXP_REGION22_LUT_OFFSET, mask_sh), \200200+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_22_23, CM_RGAM_RAMB_EXP_REGION22_NUM_SEGMENTS, mask_sh), \201201+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_22_23, CM_RGAM_RAMB_EXP_REGION23_LUT_OFFSET, mask_sh), \202202+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_22_23, CM_RGAM_RAMB_EXP_REGION23_NUM_SEGMENTS, mask_sh), \203203+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_24_25, CM_RGAM_RAMB_EXP_REGION24_LUT_OFFSET, mask_sh), \204204+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_24_25, CM_RGAM_RAMB_EXP_REGION24_NUM_SEGMENTS, mask_sh), \205205+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_24_25, CM_RGAM_RAMB_EXP_REGION25_LUT_OFFSET, mask_sh), \206206+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_24_25, CM_RGAM_RAMB_EXP_REGION25_NUM_SEGMENTS, mask_sh), \207207+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_26_27, CM_RGAM_RAMB_EXP_REGION26_LUT_OFFSET, mask_sh), \208208+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_26_27, CM_RGAM_RAMB_EXP_REGION26_NUM_SEGMENTS, mask_sh), \209209+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_26_27, CM_RGAM_RAMB_EXP_REGION27_LUT_OFFSET, mask_sh), \210210+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_26_27, CM_RGAM_RAMB_EXP_REGION27_NUM_SEGMENTS, mask_sh), \211211+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_28_29, CM_RGAM_RAMB_EXP_REGION28_LUT_OFFSET, mask_sh), \212212+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_28_29, CM_RGAM_RAMB_EXP_REGION28_NUM_SEGMENTS, mask_sh), \213213+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_28_29, CM_RGAM_RAMB_EXP_REGION29_LUT_OFFSET, mask_sh), \214214+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_28_29, CM_RGAM_RAMB_EXP_REGION29_NUM_SEGMENTS, mask_sh), \215215+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_30_31, CM_RGAM_RAMB_EXP_REGION30_LUT_OFFSET, mask_sh), \216216+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_30_31, CM_RGAM_RAMB_EXP_REGION30_NUM_SEGMENTS, mask_sh), \217217+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_30_31, CM_RGAM_RAMB_EXP_REGION31_LUT_OFFSET, mask_sh), \218218+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_30_31, CM_RGAM_RAMB_EXP_REGION31_NUM_SEGMENTS, mask_sh), \219219+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_32_33, CM_RGAM_RAMB_EXP_REGION32_LUT_OFFSET, mask_sh), \220220+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_32_33, CM_RGAM_RAMB_EXP_REGION32_NUM_SEGMENTS, mask_sh), \221221+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_32_33, CM_RGAM_RAMB_EXP_REGION33_LUT_OFFSET, mask_sh), \222222+ OPP_SF(CM0_CM_RGAM_RAMB_REGION_32_33, CM_RGAM_RAMB_EXP_REGION33_NUM_SEGMENTS, mask_sh), \223223+ OPP_SF(CM0_CM_RGAM_RAMA_START_CNTL_B, CM_RGAM_RAMA_EXP_REGION_START_B, mask_sh), \224224+ OPP_SF(CM0_CM_RGAM_RAMA_START_CNTL_B, CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_B, mask_sh), \225225+ OPP_SF(CM0_CM_RGAM_RAMA_START_CNTL_G, CM_RGAM_RAMA_EXP_REGION_START_G, mask_sh), \226226+ OPP_SF(CM0_CM_RGAM_RAMA_START_CNTL_G, CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_G, mask_sh), \227227+ OPP_SF(CM0_CM_RGAM_RAMA_START_CNTL_R, CM_RGAM_RAMA_EXP_REGION_START_R, mask_sh), \228228+ OPP_SF(CM0_CM_RGAM_RAMA_START_CNTL_R, CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_R, mask_sh), \229229+ OPP_SF(CM0_CM_RGAM_RAMA_SLOPE_CNTL_B, CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_B, mask_sh), \230230+ OPP_SF(CM0_CM_RGAM_RAMA_SLOPE_CNTL_G, CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_G, mask_sh), \231231+ OPP_SF(CM0_CM_RGAM_RAMA_SLOPE_CNTL_R, CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_R, mask_sh), \232232+ OPP_SF(CM0_CM_RGAM_RAMA_END_CNTL1_B, CM_RGAM_RAMA_EXP_REGION_END_B, mask_sh), \233233+ OPP_SF(CM0_CM_RGAM_RAMA_END_CNTL2_B, CM_RGAM_RAMA_EXP_REGION_END_SLOPE_B, mask_sh), \234234+ OPP_SF(CM0_CM_RGAM_RAMA_END_CNTL2_B, CM_RGAM_RAMA_EXP_REGION_END_BASE_B, mask_sh), \235235+ OPP_SF(CM0_CM_RGAM_RAMA_END_CNTL1_G, CM_RGAM_RAMA_EXP_REGION_END_G, mask_sh), \236236+ OPP_SF(CM0_CM_RGAM_RAMA_END_CNTL2_G, CM_RGAM_RAMA_EXP_REGION_END_SLOPE_G, mask_sh), \237237+ OPP_SF(CM0_CM_RGAM_RAMA_END_CNTL2_G, CM_RGAM_RAMA_EXP_REGION_END_BASE_G, mask_sh), \238238+ OPP_SF(CM0_CM_RGAM_RAMA_END_CNTL1_R, CM_RGAM_RAMA_EXP_REGION_END_R, mask_sh), \239239+ OPP_SF(CM0_CM_RGAM_RAMA_END_CNTL2_R, CM_RGAM_RAMA_EXP_REGION_END_SLOPE_R, mask_sh), \240240+ OPP_SF(CM0_CM_RGAM_RAMA_END_CNTL2_R, CM_RGAM_RAMA_EXP_REGION_END_BASE_R, mask_sh), \241241+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_0_1, CM_RGAM_RAMA_EXP_REGION0_LUT_OFFSET, mask_sh), \242242+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_0_1, CM_RGAM_RAMA_EXP_REGION0_NUM_SEGMENTS, mask_sh), \243243+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_0_1, CM_RGAM_RAMA_EXP_REGION1_LUT_OFFSET, mask_sh), \244244+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_0_1, CM_RGAM_RAMA_EXP_REGION1_NUM_SEGMENTS, mask_sh), \245245+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_2_3, CM_RGAM_RAMA_EXP_REGION2_LUT_OFFSET, mask_sh), \246246+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_2_3, CM_RGAM_RAMA_EXP_REGION2_NUM_SEGMENTS, mask_sh), \247247+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_2_3, CM_RGAM_RAMA_EXP_REGION3_LUT_OFFSET, mask_sh), \248248+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_2_3, CM_RGAM_RAMA_EXP_REGION3_NUM_SEGMENTS, mask_sh), \249249+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_4_5, CM_RGAM_RAMA_EXP_REGION4_LUT_OFFSET, mask_sh), \250250+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_4_5, CM_RGAM_RAMA_EXP_REGION4_NUM_SEGMENTS, mask_sh), \251251+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_4_5, CM_RGAM_RAMA_EXP_REGION5_LUT_OFFSET, mask_sh), \252252+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_4_5, CM_RGAM_RAMA_EXP_REGION5_NUM_SEGMENTS, mask_sh), \253253+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_6_7, CM_RGAM_RAMA_EXP_REGION6_LUT_OFFSET, mask_sh), \254254+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_6_7, CM_RGAM_RAMA_EXP_REGION6_NUM_SEGMENTS, mask_sh), \255255+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_6_7, CM_RGAM_RAMA_EXP_REGION7_LUT_OFFSET, mask_sh), \256256+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_6_7, CM_RGAM_RAMA_EXP_REGION7_NUM_SEGMENTS, mask_sh), \257257+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_8_9, CM_RGAM_RAMA_EXP_REGION8_LUT_OFFSET, mask_sh), \258258+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_8_9, CM_RGAM_RAMA_EXP_REGION8_NUM_SEGMENTS, mask_sh), \259259+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_8_9, CM_RGAM_RAMA_EXP_REGION9_LUT_OFFSET, mask_sh), \260260+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_8_9, CM_RGAM_RAMA_EXP_REGION9_NUM_SEGMENTS, mask_sh), \261261+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_10_11, CM_RGAM_RAMA_EXP_REGION10_LUT_OFFSET, mask_sh), \262262+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_10_11, CM_RGAM_RAMA_EXP_REGION10_NUM_SEGMENTS, mask_sh), \263263+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_10_11, CM_RGAM_RAMA_EXP_REGION11_LUT_OFFSET, mask_sh), \264264+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_10_11, CM_RGAM_RAMA_EXP_REGION11_NUM_SEGMENTS, mask_sh), \265265+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_12_13, CM_RGAM_RAMA_EXP_REGION12_LUT_OFFSET, mask_sh), \266266+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_12_13, CM_RGAM_RAMA_EXP_REGION12_NUM_SEGMENTS, mask_sh), \267267+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_12_13, CM_RGAM_RAMA_EXP_REGION13_LUT_OFFSET, mask_sh), \268268+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_12_13, CM_RGAM_RAMA_EXP_REGION13_NUM_SEGMENTS, mask_sh), \269269+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_14_15, CM_RGAM_RAMA_EXP_REGION14_LUT_OFFSET, mask_sh), \270270+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_14_15, CM_RGAM_RAMA_EXP_REGION14_NUM_SEGMENTS, mask_sh), \271271+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_14_15, CM_RGAM_RAMA_EXP_REGION15_LUT_OFFSET, mask_sh), \272272+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_14_15, CM_RGAM_RAMA_EXP_REGION15_NUM_SEGMENTS, mask_sh), \273273+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_16_17, CM_RGAM_RAMA_EXP_REGION16_LUT_OFFSET, mask_sh), \274274+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_16_17, CM_RGAM_RAMA_EXP_REGION16_NUM_SEGMENTS, mask_sh), \275275+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_16_17, CM_RGAM_RAMA_EXP_REGION17_LUT_OFFSET, mask_sh), \276276+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_16_17, CM_RGAM_RAMA_EXP_REGION17_NUM_SEGMENTS, mask_sh), \277277+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_18_19, CM_RGAM_RAMA_EXP_REGION18_LUT_OFFSET, mask_sh), \278278+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_18_19, CM_RGAM_RAMA_EXP_REGION18_NUM_SEGMENTS, mask_sh), \279279+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_18_19, CM_RGAM_RAMA_EXP_REGION19_LUT_OFFSET, mask_sh), \280280+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_18_19, CM_RGAM_RAMA_EXP_REGION19_NUM_SEGMENTS, mask_sh), \281281+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_20_21, CM_RGAM_RAMA_EXP_REGION20_LUT_OFFSET, mask_sh), \282282+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_20_21, CM_RGAM_RAMA_EXP_REGION20_NUM_SEGMENTS, mask_sh), \283283+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_20_21, CM_RGAM_RAMA_EXP_REGION21_LUT_OFFSET, mask_sh), \284284+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_20_21, CM_RGAM_RAMA_EXP_REGION21_NUM_SEGMENTS, mask_sh), \285285+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_22_23, CM_RGAM_RAMA_EXP_REGION22_LUT_OFFSET, mask_sh), \286286+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_22_23, CM_RGAM_RAMA_EXP_REGION22_NUM_SEGMENTS, mask_sh), \287287+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_22_23, CM_RGAM_RAMA_EXP_REGION23_LUT_OFFSET, mask_sh), \288288+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_22_23, CM_RGAM_RAMA_EXP_REGION23_NUM_SEGMENTS, mask_sh), \289289+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_24_25, CM_RGAM_RAMA_EXP_REGION24_LUT_OFFSET, mask_sh), \290290+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_24_25, CM_RGAM_RAMA_EXP_REGION24_NUM_SEGMENTS, mask_sh), \291291+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_24_25, CM_RGAM_RAMA_EXP_REGION25_LUT_OFFSET, mask_sh), \292292+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_24_25, CM_RGAM_RAMA_EXP_REGION25_NUM_SEGMENTS, mask_sh), \293293+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_26_27, CM_RGAM_RAMA_EXP_REGION26_LUT_OFFSET, mask_sh), \294294+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_26_27, CM_RGAM_RAMA_EXP_REGION26_NUM_SEGMENTS, mask_sh), \295295+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_26_27, CM_RGAM_RAMA_EXP_REGION27_LUT_OFFSET, mask_sh), \296296+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_26_27, CM_RGAM_RAMA_EXP_REGION27_NUM_SEGMENTS, mask_sh), \297297+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_28_29, CM_RGAM_RAMA_EXP_REGION28_LUT_OFFSET, mask_sh), \298298+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_28_29, CM_RGAM_RAMA_EXP_REGION28_NUM_SEGMENTS, mask_sh), \299299+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_28_29, CM_RGAM_RAMA_EXP_REGION29_LUT_OFFSET, mask_sh), \300300+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_28_29, CM_RGAM_RAMA_EXP_REGION29_NUM_SEGMENTS, mask_sh), \301301+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_30_31, CM_RGAM_RAMA_EXP_REGION30_LUT_OFFSET, mask_sh), \302302+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_30_31, CM_RGAM_RAMA_EXP_REGION30_NUM_SEGMENTS, mask_sh), \303303+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_30_31, CM_RGAM_RAMA_EXP_REGION31_LUT_OFFSET, mask_sh), \304304+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_30_31, CM_RGAM_RAMA_EXP_REGION31_NUM_SEGMENTS, mask_sh), \305305+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_32_33, CM_RGAM_RAMA_EXP_REGION32_LUT_OFFSET, mask_sh), \306306+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_32_33, CM_RGAM_RAMA_EXP_REGION32_NUM_SEGMENTS, mask_sh), \307307+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_32_33, CM_RGAM_RAMA_EXP_REGION33_LUT_OFFSET, mask_sh), \308308+ OPP_SF(CM0_CM_RGAM_RAMA_REGION_32_33, CM_RGAM_RAMA_EXP_REGION33_NUM_SEGMENTS, mask_sh), \309309+ OPP_SF(CM0_CM_RGAM_LUT_WRITE_EN_MASK, CM_RGAM_LUT_WRITE_EN_MASK, mask_sh), \310310+ OPP_SF(CM0_CM_RGAM_LUT_WRITE_EN_MASK, CM_RGAM_LUT_WRITE_SEL, mask_sh), \311311+ OPP_SF(CM0_CM_RGAM_LUT_INDEX, CM_RGAM_LUT_INDEX, mask_sh), \312312+ OPP_SF(CM0_CM_MEM_PWR_CTRL, RGAM_MEM_PWR_FORCE, mask_sh), \313313+ OPP_SF(CM0_CM_RGAM_LUT_DATA, CM_RGAM_LUT_DATA, mask_sh), \314314+ OPP_SF(FMT0_FMT_CONTROL, FMT_STEREOSYNC_OVERRIDE, mask_sh)315315+316316+#define OPP_DCN10_REG_FIELD_LIST(type) \317317+ type CM_RGAM_LUT_MODE; \318318+ type OBUF_BYPASS; \319319+ type OBUF_H_2X_UPSCALE_EN; \320320+ type FMT_TRUNCATE_EN; \321321+ type FMT_TRUNCATE_DEPTH; \322322+ type FMT_TRUNCATE_MODE; \323323+ type FMT_SPATIAL_DITHER_EN; \324324+ type FMT_SPATIAL_DITHER_MODE; \325325+ type FMT_SPATIAL_DITHER_DEPTH; \326326+ type FMT_TEMPORAL_DITHER_EN; \327327+ type FMT_HIGHPASS_RANDOM_ENABLE; \328328+ type FMT_FRAME_RANDOM_ENABLE; \329329+ type FMT_RGB_RANDOM_ENABLE; \330330+ type FMT_SPATIAL_DITHER_FRAME_COUNTER_MAX; \331331+ type FMT_SPATIAL_DITHER_FRAME_COUNTER_BIT_SWAP; \332332+ type FMT_RAND_R_SEED; \333333+ type FMT_RAND_G_SEED; \334334+ type FMT_RAND_B_SEED; \335335+ type FMT_PIXEL_ENCODING; \336336+ type FMT_CLAMP_DATA_EN; \337337+ type FMT_CLAMP_COLOR_FORMAT; \338338+ type FMT_DYNAMIC_EXP_EN; \339339+ type FMT_DYNAMIC_EXP_MODE; \340340+ type FMT_MAP420MEM_PWR_FORCE; \341341+ type CM_OCSC_MODE; \342342+ type CM_RGAM_RAMB_EXP_REGION_START_B; \343343+ type CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_B; \344344+ type CM_RGAM_RAMB_EXP_REGION_START_G; \345345+ type CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_G; \346346+ type CM_RGAM_RAMB_EXP_REGION_START_R; \347347+ type CM_RGAM_RAMB_EXP_REGION_START_SEGMENT_R; \348348+ type CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_B; \349349+ type CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_G; \350350+ type CM_RGAM_RAMB_EXP_REGION_LINEAR_SLOPE_R; \351351+ type CM_RGAM_RAMB_EXP_REGION_END_B; \352352+ type CM_RGAM_RAMB_EXP_REGION_END_SLOPE_B; \353353+ type CM_RGAM_RAMB_EXP_REGION_END_BASE_B; \354354+ type CM_RGAM_RAMB_EXP_REGION_END_G; \355355+ type CM_RGAM_RAMB_EXP_REGION_END_SLOPE_G; \356356+ type CM_RGAM_RAMB_EXP_REGION_END_BASE_G; \357357+ type CM_RGAM_RAMB_EXP_REGION_END_R; \358358+ type CM_RGAM_RAMB_EXP_REGION_END_SLOPE_R; \359359+ type CM_RGAM_RAMB_EXP_REGION_END_BASE_R; \360360+ type CM_RGAM_RAMB_EXP_REGION0_LUT_OFFSET; \361361+ type CM_RGAM_RAMB_EXP_REGION0_NUM_SEGMENTS; \362362+ type CM_RGAM_RAMB_EXP_REGION1_LUT_OFFSET; \363363+ type CM_RGAM_RAMB_EXP_REGION1_NUM_SEGMENTS; \364364+ type CM_RGAM_RAMB_EXP_REGION2_LUT_OFFSET; \365365+ type CM_RGAM_RAMB_EXP_REGION2_NUM_SEGMENTS; \366366+ type CM_RGAM_RAMB_EXP_REGION3_LUT_OFFSET; \367367+ type CM_RGAM_RAMB_EXP_REGION3_NUM_SEGMENTS; \368368+ type CM_RGAM_RAMB_EXP_REGION4_LUT_OFFSET; \369369+ type CM_RGAM_RAMB_EXP_REGION4_NUM_SEGMENTS; \370370+ type CM_RGAM_RAMB_EXP_REGION5_LUT_OFFSET; \371371+ type CM_RGAM_RAMB_EXP_REGION5_NUM_SEGMENTS; \372372+ type CM_RGAM_RAMB_EXP_REGION6_LUT_OFFSET; \373373+ type CM_RGAM_RAMB_EXP_REGION6_NUM_SEGMENTS; \374374+ type CM_RGAM_RAMB_EXP_REGION7_LUT_OFFSET; \375375+ type CM_RGAM_RAMB_EXP_REGION7_NUM_SEGMENTS; \376376+ type CM_RGAM_RAMB_EXP_REGION8_LUT_OFFSET; \377377+ type CM_RGAM_RAMB_EXP_REGION8_NUM_SEGMENTS; \378378+ type CM_RGAM_RAMB_EXP_REGION9_LUT_OFFSET; \379379+ type CM_RGAM_RAMB_EXP_REGION9_NUM_SEGMENTS; \380380+ type CM_RGAM_RAMB_EXP_REGION10_LUT_OFFSET; \381381+ type CM_RGAM_RAMB_EXP_REGION10_NUM_SEGMENTS; \382382+ type CM_RGAM_RAMB_EXP_REGION11_LUT_OFFSET; \383383+ type CM_RGAM_RAMB_EXP_REGION11_NUM_SEGMENTS; \384384+ type CM_RGAM_RAMB_EXP_REGION12_LUT_OFFSET; \385385+ type CM_RGAM_RAMB_EXP_REGION12_NUM_SEGMENTS; \386386+ type CM_RGAM_RAMB_EXP_REGION13_LUT_OFFSET; \387387+ type CM_RGAM_RAMB_EXP_REGION13_NUM_SEGMENTS; \388388+ type CM_RGAM_RAMB_EXP_REGION14_LUT_OFFSET; \389389+ type CM_RGAM_RAMB_EXP_REGION14_NUM_SEGMENTS; \390390+ type CM_RGAM_RAMB_EXP_REGION15_LUT_OFFSET; \391391+ type CM_RGAM_RAMB_EXP_REGION15_NUM_SEGMENTS; \392392+ type CM_RGAM_RAMB_EXP_REGION16_LUT_OFFSET; \393393+ type CM_RGAM_RAMB_EXP_REGION16_NUM_SEGMENTS; \394394+ type CM_RGAM_RAMB_EXP_REGION17_LUT_OFFSET; \395395+ type CM_RGAM_RAMB_EXP_REGION17_NUM_SEGMENTS; \396396+ type CM_RGAM_RAMB_EXP_REGION18_LUT_OFFSET; \397397+ type CM_RGAM_RAMB_EXP_REGION18_NUM_SEGMENTS; \398398+ type CM_RGAM_RAMB_EXP_REGION19_LUT_OFFSET; \399399+ type CM_RGAM_RAMB_EXP_REGION19_NUM_SEGMENTS; \400400+ type CM_RGAM_RAMB_EXP_REGION20_LUT_OFFSET; \401401+ type CM_RGAM_RAMB_EXP_REGION20_NUM_SEGMENTS; \402402+ type CM_RGAM_RAMB_EXP_REGION21_LUT_OFFSET; \403403+ type CM_RGAM_RAMB_EXP_REGION21_NUM_SEGMENTS; \404404+ type CM_RGAM_RAMB_EXP_REGION22_LUT_OFFSET; \405405+ type CM_RGAM_RAMB_EXP_REGION22_NUM_SEGMENTS; \406406+ type CM_RGAM_RAMB_EXP_REGION23_LUT_OFFSET; \407407+ type CM_RGAM_RAMB_EXP_REGION23_NUM_SEGMENTS; \408408+ type CM_RGAM_RAMB_EXP_REGION24_LUT_OFFSET; \409409+ type CM_RGAM_RAMB_EXP_REGION24_NUM_SEGMENTS; \410410+ type CM_RGAM_RAMB_EXP_REGION25_LUT_OFFSET; \411411+ type CM_RGAM_RAMB_EXP_REGION25_NUM_SEGMENTS; \412412+ type CM_RGAM_RAMB_EXP_REGION26_LUT_OFFSET; \413413+ type CM_RGAM_RAMB_EXP_REGION26_NUM_SEGMENTS; \414414+ type CM_RGAM_RAMB_EXP_REGION27_LUT_OFFSET; \415415+ type CM_RGAM_RAMB_EXP_REGION27_NUM_SEGMENTS; \416416+ type CM_RGAM_RAMB_EXP_REGION28_LUT_OFFSET; \417417+ type CM_RGAM_RAMB_EXP_REGION28_NUM_SEGMENTS; \418418+ type CM_RGAM_RAMB_EXP_REGION29_LUT_OFFSET; \419419+ type CM_RGAM_RAMB_EXP_REGION29_NUM_SEGMENTS; \420420+ type CM_RGAM_RAMB_EXP_REGION30_LUT_OFFSET; \421421+ type CM_RGAM_RAMB_EXP_REGION30_NUM_SEGMENTS; \422422+ type CM_RGAM_RAMB_EXP_REGION31_LUT_OFFSET; \423423+ type CM_RGAM_RAMB_EXP_REGION31_NUM_SEGMENTS; \424424+ type CM_RGAM_RAMB_EXP_REGION32_LUT_OFFSET; \425425+ type CM_RGAM_RAMB_EXP_REGION32_NUM_SEGMENTS; \426426+ type CM_RGAM_RAMB_EXP_REGION33_LUT_OFFSET; \427427+ type CM_RGAM_RAMB_EXP_REGION33_NUM_SEGMENTS; \428428+ type CM_RGAM_RAMA_EXP_REGION_START_B; \429429+ type CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_B; \430430+ type CM_RGAM_RAMA_EXP_REGION_START_G; \431431+ type CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_G; \432432+ type CM_RGAM_RAMA_EXP_REGION_START_R; \433433+ type CM_RGAM_RAMA_EXP_REGION_START_SEGMENT_R; \434434+ type CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_B; \435435+ type CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_G; \436436+ type CM_RGAM_RAMA_EXP_REGION_LINEAR_SLOPE_R; \437437+ type CM_RGAM_RAMA_EXP_REGION_END_B; \438438+ type CM_RGAM_RAMA_EXP_REGION_END_SLOPE_B; \439439+ type CM_RGAM_RAMA_EXP_REGION_END_BASE_B; \440440+ type CM_RGAM_RAMA_EXP_REGION_END_G; \441441+ type CM_RGAM_RAMA_EXP_REGION_END_SLOPE_G; \442442+ type CM_RGAM_RAMA_EXP_REGION_END_BASE_G; \443443+ type CM_RGAM_RAMA_EXP_REGION_END_R; \444444+ type CM_RGAM_RAMA_EXP_REGION_END_SLOPE_R; \445445+ type CM_RGAM_RAMA_EXP_REGION_END_BASE_R; \446446+ type CM_RGAM_RAMA_EXP_REGION0_LUT_OFFSET; \447447+ type CM_RGAM_RAMA_EXP_REGION0_NUM_SEGMENTS; \448448+ type CM_RGAM_RAMA_EXP_REGION1_LUT_OFFSET; \449449+ type CM_RGAM_RAMA_EXP_REGION1_NUM_SEGMENTS; \450450+ type CM_RGAM_RAMA_EXP_REGION2_LUT_OFFSET; \451451+ type CM_RGAM_RAMA_EXP_REGION2_NUM_SEGMENTS; \452452+ type CM_RGAM_RAMA_EXP_REGION3_LUT_OFFSET; \453453+ type CM_RGAM_RAMA_EXP_REGION3_NUM_SEGMENTS; \454454+ type CM_RGAM_RAMA_EXP_REGION4_LUT_OFFSET; \455455+ type CM_RGAM_RAMA_EXP_REGION4_NUM_SEGMENTS; \456456+ type CM_RGAM_RAMA_EXP_REGION5_LUT_OFFSET; \457457+ type CM_RGAM_RAMA_EXP_REGION5_NUM_SEGMENTS; \458458+ type CM_RGAM_RAMA_EXP_REGION6_LUT_OFFSET; \459459+ type CM_RGAM_RAMA_EXP_REGION6_NUM_SEGMENTS; \460460+ type CM_RGAM_RAMA_EXP_REGION7_LUT_OFFSET; \461461+ type CM_RGAM_RAMA_EXP_REGION7_NUM_SEGMENTS; \462462+ type CM_RGAM_RAMA_EXP_REGION8_LUT_OFFSET; \463463+ type CM_RGAM_RAMA_EXP_REGION8_NUM_SEGMENTS; \464464+ type CM_RGAM_RAMA_EXP_REGION9_LUT_OFFSET; \465465+ type CM_RGAM_RAMA_EXP_REGION9_NUM_SEGMENTS; \466466+ type CM_RGAM_RAMA_EXP_REGION10_LUT_OFFSET; \467467+ type CM_RGAM_RAMA_EXP_REGION10_NUM_SEGMENTS; \468468+ type CM_RGAM_RAMA_EXP_REGION11_LUT_OFFSET; \469469+ type CM_RGAM_RAMA_EXP_REGION11_NUM_SEGMENTS; \470470+ type CM_RGAM_RAMA_EXP_REGION12_LUT_OFFSET; \471471+ type CM_RGAM_RAMA_EXP_REGION12_NUM_SEGMENTS; \472472+ type CM_RGAM_RAMA_EXP_REGION13_LUT_OFFSET; \473473+ type CM_RGAM_RAMA_EXP_REGION13_NUM_SEGMENTS; \474474+ type CM_RGAM_RAMA_EXP_REGION14_LUT_OFFSET; \475475+ type CM_RGAM_RAMA_EXP_REGION14_NUM_SEGMENTS; \476476+ type CM_RGAM_RAMA_EXP_REGION15_LUT_OFFSET; \477477+ type CM_RGAM_RAMA_EXP_REGION15_NUM_SEGMENTS; \478478+ type CM_RGAM_RAMA_EXP_REGION16_LUT_OFFSET; \479479+ type CM_RGAM_RAMA_EXP_REGION16_NUM_SEGMENTS; \480480+ type CM_RGAM_RAMA_EXP_REGION17_LUT_OFFSET; \481481+ type CM_RGAM_RAMA_EXP_REGION17_NUM_SEGMENTS; \482482+ type CM_RGAM_RAMA_EXP_REGION18_LUT_OFFSET; \483483+ type CM_RGAM_RAMA_EXP_REGION18_NUM_SEGMENTS; \484484+ type CM_RGAM_RAMA_EXP_REGION19_LUT_OFFSET; \485485+ type CM_RGAM_RAMA_EXP_REGION19_NUM_SEGMENTS; \486486+ type CM_RGAM_RAMA_EXP_REGION20_LUT_OFFSET; \487487+ type CM_RGAM_RAMA_EXP_REGION20_NUM_SEGMENTS; \488488+ type CM_RGAM_RAMA_EXP_REGION21_LUT_OFFSET; \489489+ type CM_RGAM_RAMA_EXP_REGION21_NUM_SEGMENTS; \490490+ type CM_RGAM_RAMA_EXP_REGION22_LUT_OFFSET; \491491+ type CM_RGAM_RAMA_EXP_REGION22_NUM_SEGMENTS; \492492+ type CM_RGAM_RAMA_EXP_REGION23_LUT_OFFSET; \493493+ type CM_RGAM_RAMA_EXP_REGION23_NUM_SEGMENTS; \494494+ type CM_RGAM_RAMA_EXP_REGION24_LUT_OFFSET; \495495+ type CM_RGAM_RAMA_EXP_REGION24_NUM_SEGMENTS; \496496+ type CM_RGAM_RAMA_EXP_REGION25_LUT_OFFSET; \497497+ type CM_RGAM_RAMA_EXP_REGION25_NUM_SEGMENTS; \498498+ type CM_RGAM_RAMA_EXP_REGION26_LUT_OFFSET; \499499+ type CM_RGAM_RAMA_EXP_REGION26_NUM_SEGMENTS; \500500+ type CM_RGAM_RAMA_EXP_REGION27_LUT_OFFSET; \501501+ type CM_RGAM_RAMA_EXP_REGION27_NUM_SEGMENTS; \502502+ type CM_RGAM_RAMA_EXP_REGION28_LUT_OFFSET; \503503+ type CM_RGAM_RAMA_EXP_REGION28_NUM_SEGMENTS; \504504+ type CM_RGAM_RAMA_EXP_REGION29_LUT_OFFSET; \505505+ type CM_RGAM_RAMA_EXP_REGION29_NUM_SEGMENTS; \506506+ type CM_RGAM_RAMA_EXP_REGION30_LUT_OFFSET; \507507+ type CM_RGAM_RAMA_EXP_REGION30_NUM_SEGMENTS; \508508+ type CM_RGAM_RAMA_EXP_REGION31_LUT_OFFSET; \509509+ type CM_RGAM_RAMA_EXP_REGION31_NUM_SEGMENTS; \510510+ type CM_RGAM_RAMA_EXP_REGION32_LUT_OFFSET; \511511+ type CM_RGAM_RAMA_EXP_REGION32_NUM_SEGMENTS; \512512+ type CM_RGAM_RAMA_EXP_REGION33_LUT_OFFSET; \513513+ type CM_RGAM_RAMA_EXP_REGION33_NUM_SEGMENTS; \514514+ type CM_RGAM_LUT_WRITE_EN_MASK; \515515+ type CM_RGAM_LUT_WRITE_SEL; \516516+ type CM_RGAM_LUT_INDEX; \517517+ type RGAM_MEM_PWR_FORCE; \518518+ type CM_RGAM_LUT_DATA; \519519+ type FMT_STEREOSYNC_OVERRIDE520520+521521+struct dcn10_opp_shift {522522+ OPP_DCN10_REG_FIELD_LIST(uint8_t);523523+};524524+525525+struct dcn10_opp_mask {526526+ OPP_DCN10_REG_FIELD_LIST(uint32_t);527527+};528528+529529+struct dcn10_opp_registers {530530+ uint32_t CM_RGAM_LUT_WRITE_EN_MASK;531531+ uint32_t CM_RGAM_CONTROL;532532+ uint32_t OBUF_CONTROL;533533+ uint32_t FMT_BIT_DEPTH_CONTROL;534534+ uint32_t FMT_CONTROL;535535+ uint32_t FMT_DITHER_RAND_R_SEED;536536+ uint32_t FMT_DITHER_RAND_G_SEED;537537+ uint32_t FMT_DITHER_RAND_B_SEED;538538+ uint32_t FMT_CLAMP_CNTL;539539+ uint32_t FMT_DYNAMIC_EXP_CNTL;540540+ uint32_t FMT_MAP420_MEMORY_CONTROL;541541+ uint32_t CM_OCSC_CONTROL;542542+ uint32_t CM_RGAM_RAMB_START_CNTL_B;543543+ uint32_t CM_RGAM_RAMB_START_CNTL_G;544544+ uint32_t CM_RGAM_RAMB_START_CNTL_R;545545+ uint32_t CM_RGAM_RAMB_SLOPE_CNTL_B;546546+ uint32_t CM_RGAM_RAMB_SLOPE_CNTL_G;547547+ uint32_t CM_RGAM_RAMB_SLOPE_CNTL_R;548548+ uint32_t CM_RGAM_RAMB_END_CNTL1_B;549549+ uint32_t CM_RGAM_RAMB_END_CNTL2_B;550550+ uint32_t CM_RGAM_RAMB_END_CNTL1_G;551551+ uint32_t CM_RGAM_RAMB_END_CNTL2_G;552552+ uint32_t CM_RGAM_RAMB_END_CNTL1_R;553553+ uint32_t CM_RGAM_RAMB_END_CNTL2_R;554554+ uint32_t CM_RGAM_RAMB_REGION_0_1;555555+ uint32_t CM_RGAM_RAMB_REGION_2_3;556556+ uint32_t CM_RGAM_RAMB_REGION_4_5;557557+ uint32_t CM_RGAM_RAMB_REGION_6_7;558558+ uint32_t CM_RGAM_RAMB_REGION_8_9;559559+ uint32_t CM_RGAM_RAMB_REGION_10_11;560560+ uint32_t CM_RGAM_RAMB_REGION_12_13;561561+ uint32_t CM_RGAM_RAMB_REGION_14_15;562562+ uint32_t CM_RGAM_RAMB_REGION_16_17;563563+ uint32_t CM_RGAM_RAMB_REGION_18_19;564564+ uint32_t CM_RGAM_RAMB_REGION_20_21;565565+ uint32_t CM_RGAM_RAMB_REGION_22_23;566566+ uint32_t CM_RGAM_RAMB_REGION_24_25;567567+ uint32_t CM_RGAM_RAMB_REGION_26_27;568568+ uint32_t CM_RGAM_RAMB_REGION_28_29;569569+ uint32_t CM_RGAM_RAMB_REGION_30_31;570570+ uint32_t CM_RGAM_RAMB_REGION_32_33;571571+ uint32_t CM_RGAM_RAMA_START_CNTL_B;572572+ uint32_t CM_RGAM_RAMA_START_CNTL_G;573573+ uint32_t CM_RGAM_RAMA_START_CNTL_R;574574+ uint32_t CM_RGAM_RAMA_SLOPE_CNTL_B;575575+ uint32_t CM_RGAM_RAMA_SLOPE_CNTL_G;576576+ uint32_t CM_RGAM_RAMA_SLOPE_CNTL_R;577577+ uint32_t CM_RGAM_RAMA_END_CNTL1_B;578578+ uint32_t CM_RGAM_RAMA_END_CNTL2_B;579579+ uint32_t CM_RGAM_RAMA_END_CNTL1_G;580580+ uint32_t CM_RGAM_RAMA_END_CNTL2_G;581581+ uint32_t CM_RGAM_RAMA_END_CNTL1_R;582582+ uint32_t CM_RGAM_RAMA_END_CNTL2_R;583583+ uint32_t CM_RGAM_RAMA_REGION_0_1;584584+ uint32_t CM_RGAM_RAMA_REGION_2_3;585585+ uint32_t CM_RGAM_RAMA_REGION_4_5;586586+ uint32_t CM_RGAM_RAMA_REGION_6_7;587587+ uint32_t CM_RGAM_RAMA_REGION_8_9;588588+ uint32_t CM_RGAM_RAMA_REGION_10_11;589589+ uint32_t CM_RGAM_RAMA_REGION_12_13;590590+ uint32_t CM_RGAM_RAMA_REGION_14_15;591591+ uint32_t CM_RGAM_RAMA_REGION_16_17;592592+ uint32_t CM_RGAM_RAMA_REGION_18_19;593593+ uint32_t CM_RGAM_RAMA_REGION_20_21;594594+ uint32_t CM_RGAM_RAMA_REGION_22_23;595595+ uint32_t CM_RGAM_RAMA_REGION_24_25;596596+ uint32_t CM_RGAM_RAMA_REGION_26_27;597597+ uint32_t CM_RGAM_RAMA_REGION_28_29;598598+ uint32_t CM_RGAM_RAMA_REGION_30_31;599599+ uint32_t CM_RGAM_RAMA_REGION_32_33;600600+ uint32_t CM_RGAM_LUT_INDEX;601601+ uint32_t CM_MEM_PWR_CTRL;602602+ uint32_t CM_RGAM_LUT_DATA;603603+};604604+605605+struct dcn10_opp {606606+ struct output_pixel_processor base;607607+608608+ const struct dcn10_opp_registers *regs;609609+ const struct dcn10_opp_shift *opp_shift;610610+ const struct dcn10_opp_mask *opp_mask;611611+612612+ bool is_write_to_ram_a_safe;613613+};614614+615615+void dcn10_opp_construct(struct dcn10_opp *oppn10,616616+ struct dc_context *ctx,617617+ uint32_t inst,618618+ const struct dcn10_opp_registers *regs,619619+ const struct dcn10_opp_shift *opp_shift,620620+ const struct dcn10_opp_mask *opp_mask);621621+622622+#endif
···11+/*22+* Copyright 2016 Advanced Micro Devices, Inc.33+ *44+ * Permission is hereby granted, free of charge, to any person obtaining a55+ * copy of this software and associated documentation files (the "Software"),66+ * to deal in the Software without restriction, including without limitation77+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,88+ * and/or sell copies of the Software, and to permit persons to whom the99+ * Software is furnished to do so, subject to the following conditions:1010+ *1111+ * The above copyright notice and this permission notice shall be included in1212+ * all copies or substantial portions of the Software.1313+ *1414+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR1515+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,1616+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL1717+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR1818+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,1919+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR2020+ * OTHER DEALINGS IN THE SOFTWARE.2121+ *2222+ * Authors: AMD2323+ *2424+ */2525+2626+#ifndef __DC_RESOURCE_DCN10_H__2727+#define __DC_RESOURCE_DCN10_H__2828+2929+#include "core_types.h"3030+3131+#define TO_DCN10_RES_POOL(pool)\3232+ container_of(pool, struct dcn10_resource_pool, base)3333+3434+struct core_dc;3535+struct resource_pool;3636+struct _vcs_dpi_display_pipe_params_st;3737+3838+struct dcn10_resource_pool {3939+ struct resource_pool base;4040+};4141+struct resource_pool *dcn10_create_resource_pool(4242+ uint8_t num_virtual_links,4343+ struct core_dc *dc);4444+4545+4646+#endif /* __DC_RESOURCE_DCN10_H__ */4747+