drm/amd/display: Initial DC support for Beige Goby
[Why&How] Add Beige Goby (DCN303) resource, irq service, & dmub loader. v2: fix nbio include (Alex) Signed-off-by: Chris Park <Chris.Park@amd.com> Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
8198ace7a0
commit
cd6d421e3d
@ -33,6 +33,7 @@ DC_LIBS += dcn21
|
||||
DC_LIBS += dcn30
|
||||
DC_LIBS += dcn301
|
||||
DC_LIBS += dcn302
|
||||
DC_LIBS += dcn303
|
||||
endif
|
||||
|
||||
DC_LIBS += dce120
|
||||
|
@ -73,6 +73,7 @@ bool dal_bios_parser_init_cmd_tbl_helper2(
|
||||
case DCN_VERSION_3_0:
|
||||
case DCN_VERSION_3_01:
|
||||
case DCN_VERSION_3_02:
|
||||
case DCN_VERSION_3_03:
|
||||
*h = dal_cmd_tbl_helper_dce112_get_table2();
|
||||
return true;
|
||||
#endif
|
||||
|
@ -241,6 +241,10 @@ struct clk_mgr *dc_clk_mgr_create(struct dc_context *ctx, struct pp_smu_funcs *p
|
||||
dcn3_clk_mgr_construct(ctx, clk_mgr, pp_smu, dccg);
|
||||
return &clk_mgr->base;
|
||||
}
|
||||
if (ASICREV_IS_BEIGE_GOBY_P(asic_id.hw_internal_rev)) {
|
||||
dcn3_clk_mgr_construct(ctx, clk_mgr, pp_smu, dccg);
|
||||
return &clk_mgr->base;
|
||||
}
|
||||
dcn20_clk_mgr_construct(ctx, clk_mgr, pp_smu, dccg);
|
||||
return &clk_mgr->base;
|
||||
}
|
||||
@ -278,6 +282,9 @@ void dc_destroy_clk_mgr(struct clk_mgr *clk_mgr_base)
|
||||
if (ASICREV_IS_DIMGREY_CAVEFISH_P(clk_mgr_base->ctx->asic_id.hw_internal_rev)) {
|
||||
dcn3_clk_mgr_destroy(clk_mgr);
|
||||
}
|
||||
if (ASICREV_IS_BEIGE_GOBY_P(clk_mgr_base->ctx->asic_id.hw_internal_rev)) {
|
||||
dcn3_clk_mgr_destroy(clk_mgr);
|
||||
}
|
||||
break;
|
||||
|
||||
case FAMILY_VGH:
|
||||
|
@ -57,6 +57,7 @@
|
||||
#include "dcn30/dcn30_resource.h"
|
||||
#include "dcn301/dcn301_resource.h"
|
||||
#include "dcn302/dcn302_resource.h"
|
||||
#include "dcn303/dcn303_resource.h"
|
||||
#endif
|
||||
|
||||
#define DC_LOGGER_INIT(logger)
|
||||
@ -130,6 +131,8 @@ enum dce_version resource_parse_asic_id(struct hw_asic_id asic_id)
|
||||
dc_version = DCN_VERSION_3_0;
|
||||
if (ASICREV_IS_DIMGREY_CAVEFISH_P(asic_id.hw_internal_rev))
|
||||
dc_version = DCN_VERSION_3_02;
|
||||
if (ASICREV_IS_BEIGE_GOBY_P(asic_id.hw_internal_rev))
|
||||
dc_version = DCN_VERSION_3_03;
|
||||
break;
|
||||
|
||||
case FAMILY_VGH:
|
||||
@ -216,6 +219,9 @@ struct resource_pool *dc_create_resource_pool(struct dc *dc,
|
||||
case DCN_VERSION_3_02:
|
||||
res_pool = dcn302_create_resource_pool(init_data, dc);
|
||||
break;
|
||||
case DCN_VERSION_3_03:
|
||||
res_pool = dcn303_create_resource_pool(init_data, dc);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
|
@ -142,6 +142,15 @@
|
||||
SRII(PIXEL_RATE_CNTL, OTG, 3),\
|
||||
SRII(PIXEL_RATE_CNTL, OTG, 4)
|
||||
|
||||
#define CS_COMMON_REG_LIST_DCN3_03(index, pllid) \
|
||||
SRI(PIXCLK_RESYNC_CNTL, PHYPLL, pllid),\
|
||||
SRII(PHASE, DP_DTO, 0),\
|
||||
SRII(PHASE, DP_DTO, 1),\
|
||||
SRII(MODULO, DP_DTO, 0),\
|
||||
SRII(MODULO, DP_DTO, 1),\
|
||||
SRII(PIXEL_RATE_CNTL, OTG, 0),\
|
||||
SRII(PIXEL_RATE_CNTL, OTG, 1)
|
||||
|
||||
#endif
|
||||
#define CS_COMMON_MASK_SH_LIST_DCN2_0(mask_sh)\
|
||||
CS_SF(DP_DTO0_PHASE, DP_DTO0_PHASE, mask_sh),\
|
||||
|
@ -480,6 +480,35 @@
|
||||
SR(AZALIA_AUDIO_DTO), \
|
||||
SR(AZALIA_CONTROLLER_CLOCK_GATING)
|
||||
|
||||
#define HWSEQ_DCN303_REG_LIST() \
|
||||
HWSEQ_DCN_REG_LIST(), \
|
||||
HSWEQ_DCN_PIXEL_RATE_REG_LIST(OTG, 0), \
|
||||
HSWEQ_DCN_PIXEL_RATE_REG_LIST(OTG, 1), \
|
||||
SR(MICROSECOND_TIME_BASE_DIV), \
|
||||
SR(MILLISECOND_TIME_BASE_DIV), \
|
||||
SR(DISPCLK_FREQ_CHANGE_CNTL), \
|
||||
SR(RBBMIF_TIMEOUT_DIS), \
|
||||
SR(RBBMIF_TIMEOUT_DIS_2), \
|
||||
SR(DCHUBBUB_CRC_CTRL), \
|
||||
SR(DPP_TOP0_DPP_CRC_CTRL), \
|
||||
SR(DPP_TOP0_DPP_CRC_VAL_B_A), \
|
||||
SR(DPP_TOP0_DPP_CRC_VAL_R_G), \
|
||||
SR(MPC_CRC_CTRL), \
|
||||
SR(MPC_CRC_RESULT_GB), \
|
||||
SR(MPC_CRC_RESULT_C), \
|
||||
SR(MPC_CRC_RESULT_AR), \
|
||||
SR(D1VGA_CONTROL), \
|
||||
SR(D2VGA_CONTROL), \
|
||||
SR(D3VGA_CONTROL), \
|
||||
SR(D4VGA_CONTROL), \
|
||||
SR(D5VGA_CONTROL), \
|
||||
SR(D6VGA_CONTROL), \
|
||||
HWSEQ_PIXEL_RATE_REG_LIST_303(OTG), \
|
||||
HWSEQ_PHYPLL_REG_LIST_303(OTG), \
|
||||
SR(AZALIA_AUDIO_DTO), \
|
||||
SR(AZALIA_CONTROLLER_CLOCK_GATING), \
|
||||
SR(HPO_TOP_CLOCK_CONTROL)
|
||||
|
||||
#define HWSEQ_PIXEL_RATE_REG_LIST_302(blk) \
|
||||
SRII(PIXEL_RATE_CNTL, blk, 0), \
|
||||
SRII(PIXEL_RATE_CNTL, blk, 1),\
|
||||
@ -494,6 +523,14 @@
|
||||
SRII(PHYPLL_PIXEL_RATE_CNTL, blk, 3), \
|
||||
SRII(PHYPLL_PIXEL_RATE_CNTL, blk, 4)
|
||||
|
||||
#define HWSEQ_PIXEL_RATE_REG_LIST_303(blk) \
|
||||
SRII(PIXEL_RATE_CNTL, blk, 0), \
|
||||
SRII(PIXEL_RATE_CNTL, blk, 1)
|
||||
|
||||
#define HWSEQ_PHYPLL_REG_LIST_303(blk) \
|
||||
SRII(PHYPLL_PIXEL_RATE_CNTL, blk, 0), \
|
||||
SRII(PHYPLL_PIXEL_RATE_CNTL, blk, 1)
|
||||
|
||||
struct dce_hwseq_registers {
|
||||
uint32_t DCFE_CLOCK_CONTROL[6];
|
||||
uint32_t DCFEV_CLOCK_CONTROL;
|
||||
@ -934,6 +971,12 @@ struct dce_hwseq_registers {
|
||||
HWS_SF(, DC_IP_REQUEST_CNTL, IP_REQUEST_EN, mask_sh), \
|
||||
HWS_SF(, AZALIA_AUDIO_DTO, AZALIA_AUDIO_DTO_MODULE, mask_sh)
|
||||
|
||||
#define HWSEQ_DCN303_MASK_SH_LIST(mask_sh) \
|
||||
HWSEQ_DCN_MASK_SH_LIST(mask_sh), \
|
||||
HWS_SF(, DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_REFDIV, mask_sh), \
|
||||
HWS_SF(, AZALIA_AUDIO_DTO, AZALIA_AUDIO_DTO_MODULE, mask_sh), \
|
||||
HWS_SF(, HPO_TOP_CLOCK_CONTROL, HPO_HDMISTREAMCLK_GATE_DIS, mask_sh)
|
||||
|
||||
#define HWSEQ_REG_FIELD_LIST(type) \
|
||||
type DCFE_CLOCK_ENABLE; \
|
||||
type DCFEV_CLOCK_ENABLE; \
|
||||
|
@ -585,6 +585,181 @@
|
||||
type MPC_RMU_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS;\
|
||||
type MPC_RMU_SHAPER_MODE_CURRENT
|
||||
|
||||
#define MPC_COMMON_MASK_SH_LIST_DCN303(mask_sh) \
|
||||
MPC_COMMON_MASK_SH_LIST_DCN1_0(mask_sh),\
|
||||
SF(MPCC0_MPCC_CONTROL, MPCC_BG_BPC, mask_sh),\
|
||||
SF(MPCC0_MPCC_CONTROL, MPCC_BOT_GAIN_MODE, mask_sh),\
|
||||
SF(MPCC0_MPCC_TOP_GAIN, MPCC_TOP_GAIN, mask_sh),\
|
||||
SF(MPCC0_MPCC_BOT_GAIN_INSIDE, MPCC_BOT_GAIN_INSIDE, mask_sh),\
|
||||
SF(MPCC0_MPCC_BOT_GAIN_OUTSIDE, MPCC_BOT_GAIN_OUTSIDE, mask_sh),\
|
||||
SF(MPC_OUT0_CSC_MODE, MPC_OCSC_MODE, mask_sh),\
|
||||
SF(MPC_OUT0_CSC_C11_C12_A, MPC_OCSC_C11_A, mask_sh),\
|
||||
SF(MPC_OUT0_CSC_C11_C12_A, MPC_OCSC_C12_A, mask_sh),\
|
||||
SF(MPCC0_MPCC_STATUS, MPCC_DISABLED, mask_sh),\
|
||||
SF(MPCC0_MPCC_MEM_PWR_CTRL, MPCC_OGAM_MEM_PWR_FORCE, mask_sh),\
|
||||
SF(MPCC0_MPCC_MEM_PWR_CTRL, MPCC_OGAM_MEM_PWR_DIS, mask_sh),\
|
||||
SF(MPCC0_MPCC_MEM_PWR_CTRL, MPCC_OGAM_MEM_LOW_PWR_MODE, mask_sh),\
|
||||
SF(MPCC0_MPCC_MEM_PWR_CTRL, MPCC_OGAM_MEM_PWR_STATE, mask_sh),\
|
||||
SF(MPC_OUT0_DENORM_CONTROL, MPC_OUT_DENORM_MODE, mask_sh),\
|
||||
SF(MPC_OUT0_DENORM_CONTROL, MPC_OUT_DENORM_CLAMP_MAX_R_CR, mask_sh),\
|
||||
SF(MPC_OUT0_DENORM_CONTROL, MPC_OUT_DENORM_CLAMP_MIN_R_CR, mask_sh),\
|
||||
SF(MPC_OUT0_DENORM_CLAMP_G_Y, MPC_OUT_DENORM_CLAMP_MAX_G_Y, mask_sh),\
|
||||
SF(MPC_OUT0_DENORM_CLAMP_G_Y, MPC_OUT_DENORM_CLAMP_MIN_G_Y, mask_sh),\
|
||||
SF(MPC_OUT0_DENORM_CLAMP_B_CB, MPC_OUT_DENORM_CLAMP_MAX_B_CB, mask_sh),\
|
||||
SF(MPC_OUT0_DENORM_CLAMP_B_CB, MPC_OUT_DENORM_CLAMP_MIN_B_CB, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_GAMUT_REMAP_MODE, MPCC_GAMUT_REMAP_MODE, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_GAMUT_REMAP_MODE, MPCC_GAMUT_REMAP_MODE_CURRENT, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_GAMUT_REMAP_COEF_FORMAT, MPCC_GAMUT_REMAP_COEF_FORMAT, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPC_GAMUT_REMAP_C11_C12_A, MPCC_GAMUT_REMAP_C11_A, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPC_GAMUT_REMAP_C11_C12_A, MPCC_GAMUT_REMAP_C12_A, mask_sh),\
|
||||
SF(MPC_DWB0_MUX, MPC_DWB0_MUX, mask_sh),\
|
||||
SF(MPC_DWB0_MUX, MPC_DWB0_MUX_STATUS, mask_sh),\
|
||||
SF(MPC_OUT0_MUX, MPC_OUT_RATE_CONTROL, mask_sh),\
|
||||
SF(MPC_OUT0_MUX, MPC_OUT_RATE_CONTROL_DISABLE, mask_sh),\
|
||||
SF(MPC_OUT0_MUX, MPC_OUT_FLOW_CONTROL_MODE, mask_sh),\
|
||||
SF(MPC_OUT0_MUX, MPC_OUT_FLOW_CONTROL_COUNT, mask_sh), \
|
||||
SF(MPC_RMU_CONTROL, MPC_RMU0_MUX, mask_sh), \
|
||||
SF(MPC_RMU_CONTROL, MPC_RMU0_MUX_STATUS, mask_sh), \
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_REGION_0_1, MPCC_OGAM_RAMA_EXP_REGION0_LUT_OFFSET, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_REGION_0_1, MPCC_OGAM_RAMA_EXP_REGION0_NUM_SEGMENTS, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_REGION_0_1, MPCC_OGAM_RAMA_EXP_REGION1_LUT_OFFSET, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_REGION_0_1, MPCC_OGAM_RAMA_EXP_REGION1_NUM_SEGMENTS, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_END_CNTL2_B, MPCC_OGAM_RAMA_EXP_REGION_END_SLOPE_B, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_END_CNTL2_B, MPCC_OGAM_RAMA_EXP_REGION_END_B, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_END_CNTL1_B, MPCC_OGAM_RAMA_EXP_REGION_END_BASE_B, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_START_SLOPE_CNTL_B, MPCC_OGAM_RAMA_EXP_REGION_START_SLOPE_B, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_START_BASE_CNTL_B, MPCC_OGAM_RAMA_EXP_REGION_START_BASE_B, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_START_CNTL_B, MPCC_OGAM_RAMA_EXP_REGION_START_B, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_START_CNTL_B, MPCC_OGAM_RAMA_EXP_REGION_START_SEGMENT_B, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_OFFSET_B, MPCC_OGAM_RAMA_OFFSET_B, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_OFFSET_G, MPCC_OGAM_RAMA_OFFSET_G, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_RAMA_OFFSET_R, MPCC_OGAM_RAMA_OFFSET_R, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_LUT_INDEX, MPCC_OGAM_LUT_INDEX, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_CONTROL, MPCC_OGAM_MODE, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_CONTROL, MPCC_OGAM_SELECT, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_CONTROL, MPCC_OGAM_PWL_DISABLE, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_CONTROL, MPCC_OGAM_MODE_CURRENT, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_CONTROL, MPCC_OGAM_SELECT_CURRENT, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_LUT_CONTROL, MPCC_OGAM_LUT_WRITE_COLOR_MASK, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_LUT_CONTROL, MPCC_OGAM_LUT_READ_COLOR_SEL, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_LUT_CONTROL, MPCC_OGAM_LUT_READ_DBG, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_LUT_CONTROL, MPCC_OGAM_LUT_HOST_SEL, mask_sh),\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_LUT_CONTROL, MPCC_OGAM_LUT_CONFIG_MODE, mask_sh),\
|
||||
/*SF(MPCC_OGAM0_MPCC_OGAM_LUT_CONTROL, MPCC_OGAM_LUT_STATUS, mask_sh),*/\
|
||||
SF(MPCC_OGAM0_MPCC_OGAM_LUT_DATA, MPCC_OGAM_LUT_DATA, mask_sh),\
|
||||
SF(MPC_RMU0_3DLUT_MODE, MPC_RMU_3DLUT_MODE, mask_sh),\
|
||||
SF(MPC_RMU0_3DLUT_MODE, MPC_RMU_3DLUT_SIZE, mask_sh),\
|
||||
/*SF(MPC_RMU0_3DLUT_MODE, MPC_RMU_3DLUT_MODE_CURRENT, mask_sh),*/\
|
||||
SF(MPC_RMU0_3DLUT_READ_WRITE_CONTROL, MPC_RMU_3DLUT_WRITE_EN_MASK, mask_sh),\
|
||||
SF(MPC_RMU0_3DLUT_READ_WRITE_CONTROL, MPC_RMU_3DLUT_RAM_SEL, mask_sh),\
|
||||
SF(MPC_RMU0_3DLUT_READ_WRITE_CONTROL, MPC_RMU_3DLUT_30BIT_EN, mask_sh),\
|
||||
/*SF(MPC_RMU0_3DLUT_READ_WRITE_CONTROL, MPC_RMU_3DLUT_CONFIG_STATUS, mask_sh),*/\
|
||||
SF(MPC_RMU0_3DLUT_READ_WRITE_CONTROL, MPC_RMU_3DLUT_READ_SEL, mask_sh),\
|
||||
SF(MPC_RMU0_3DLUT_INDEX, MPC_RMU_3DLUT_INDEX, mask_sh),\
|
||||
SF(MPC_RMU0_3DLUT_DATA, MPC_RMU_3DLUT_DATA0, mask_sh),\
|
||||
SF(MPC_RMU0_3DLUT_DATA, MPC_RMU_3DLUT_DATA1, mask_sh),\
|
||||
SF(MPC_RMU0_3DLUT_DATA_30BIT, MPC_RMU_3DLUT_DATA_30BIT, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_CONTROL, MPC_RMU_SHAPER_LUT_MODE, mask_sh),\
|
||||
/*SF(MPC_RMU0_SHAPER_CONTROL, MPC_RMU_SHAPER_LUT_MODE_CURRENT, mask_sh),*/\
|
||||
SF(MPC_RMU0_SHAPER_OFFSET_R, MPC_RMU_SHAPER_OFFSET_R, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_OFFSET_G, MPC_RMU_SHAPER_OFFSET_G, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_OFFSET_B, MPC_RMU_SHAPER_OFFSET_B, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_SCALE_R, MPC_RMU_SHAPER_SCALE_R, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_SCALE_G_B, MPC_RMU_SHAPER_SCALE_G, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_SCALE_G_B, MPC_RMU_SHAPER_SCALE_B, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_LUT_INDEX, MPC_RMU_SHAPER_LUT_INDEX, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_LUT_DATA, MPC_RMU_SHAPER_LUT_DATA, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_LUT_WRITE_EN_MASK, MPC_RMU_SHAPER_LUT_WRITE_EN_MASK, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_LUT_WRITE_EN_MASK, MPC_RMU_SHAPER_LUT_WRITE_SEL, mask_sh),\
|
||||
/*SF(MPC_RMU0_SHAPER_LUT_WRITE_EN_MASK, MPC_RMU_SHAPER_CONFIG_STATUS, mask_sh),*/\
|
||||
SF(MPC_RMU0_SHAPER_RAMA_START_CNTL_B, MPC_RMU_SHAPER_RAMA_EXP_REGION_START_B, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_RAMA_START_CNTL_B, MPC_RMU_SHAPER_RAMA_EXP_REGION_START_SEGMENT_B, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_RAMA_END_CNTL_B, MPC_RMU_SHAPER_RAMA_EXP_REGION_END_B, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_RAMA_END_CNTL_B, MPC_RMU_SHAPER_RAMA_EXP_REGION_END_BASE_B, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_RAMA_REGION_0_1, MPC_RMU_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_RAMA_REGION_0_1, MPC_RMU_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_RAMA_REGION_0_1, MPC_RMU_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_RAMA_REGION_0_1, MPC_RMU_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS, mask_sh),\
|
||||
SF(MPC_RMU_MEM_PWR_CTRL, MPC_RMU0_MEM_PWR_FORCE, mask_sh),\
|
||||
SF(MPC_RMU_MEM_PWR_CTRL, MPC_RMU0_MEM_PWR_DIS, mask_sh),\
|
||||
SF(MPC_RMU_MEM_PWR_CTRL, MPC_RMU0_SHAPER_MEM_PWR_STATE, mask_sh),\
|
||||
SF(MPC_RMU_MEM_PWR_CTRL, MPC_RMU0_3DLUT_MEM_PWR_STATE, mask_sh),\
|
||||
SF(MPC_RMU_MEM_PWR_CTRL, MPC_RMU0_MEM_LOW_PWR_MODE, mask_sh),\
|
||||
SF(MPC_RMU0_SHAPER_CONTROL, MPC_RMU_SHAPER_MODE_CURRENT, mask_sh),\
|
||||
SF(CUR_VUPDATE_LOCK_SET0, CUR_VUPDATE_LOCK_SET, mask_sh)
|
||||
|
||||
#define MPC_REG_FIELD_LIST_DCN3_03(type) \
|
||||
MPC_REG_FIELD_LIST_DCN2_0(type) \
|
||||
type MPC_DWB0_MUX;\
|
||||
type MPC_DWB0_MUX_STATUS;\
|
||||
type MPC_OUT_RATE_CONTROL;\
|
||||
type MPC_OUT_RATE_CONTROL_DISABLE;\
|
||||
type MPC_OUT_FLOW_CONTROL_MODE;\
|
||||
type MPC_OUT_FLOW_CONTROL_COUNT; \
|
||||
type MPCC_GAMUT_REMAP_MODE; \
|
||||
type MPCC_GAMUT_REMAP_MODE_CURRENT;\
|
||||
type MPCC_GAMUT_REMAP_COEF_FORMAT; \
|
||||
type MPCC_GAMUT_REMAP_C11_A; \
|
||||
type MPCC_GAMUT_REMAP_C12_A; \
|
||||
type MPC_RMU0_MUX; \
|
||||
type MPC_RMU0_MUX_STATUS; \
|
||||
type MPC_RMU0_MEM_PWR_FORCE;\
|
||||
type MPC_RMU0_MEM_PWR_DIS;\
|
||||
type MPC_RMU0_MEM_LOW_PWR_MODE;\
|
||||
type MPC_RMU0_SHAPER_MEM_PWR_STATE;\
|
||||
type MPC_RMU0_3DLUT_MEM_PWR_STATE;\
|
||||
type MPCC_OGAM_RAMA_EXP_REGION_START_SLOPE_B; \
|
||||
type MPCC_OGAM_RAMA_EXP_REGION_START_BASE_B;\
|
||||
type MPCC_OGAM_RAMA_OFFSET_B;\
|
||||
type MPCC_OGAM_RAMA_OFFSET_G;\
|
||||
type MPCC_OGAM_RAMA_OFFSET_R;\
|
||||
type MPCC_OGAM_SELECT; \
|
||||
type MPCC_OGAM_PWL_DISABLE; \
|
||||
type MPCC_OGAM_MODE_CURRENT; \
|
||||
type MPCC_OGAM_SELECT_CURRENT; \
|
||||
type MPCC_OGAM_LUT_WRITE_COLOR_MASK; \
|
||||
type MPCC_OGAM_LUT_READ_COLOR_SEL; \
|
||||
type MPCC_OGAM_LUT_READ_DBG; \
|
||||
type MPCC_OGAM_LUT_HOST_SEL; \
|
||||
type MPCC_OGAM_LUT_CONFIG_MODE; \
|
||||
type MPCC_OGAM_LUT_STATUS; \
|
||||
type MPCC_OGAM_RAMA_START_BASE_CNTL_B;\
|
||||
type MPCC_OGAM_MEM_LOW_PWR_MODE;\
|
||||
type MPCC_OGAM_MEM_PWR_STATE;\
|
||||
type MPC_RMU_3DLUT_MODE; \
|
||||
type MPC_RMU_3DLUT_SIZE; \
|
||||
type MPC_RMU_3DLUT_MODE_CURRENT; \
|
||||
type MPC_RMU_3DLUT_WRITE_EN_MASK;\
|
||||
type MPC_RMU_3DLUT_RAM_SEL;\
|
||||
type MPC_RMU_3DLUT_30BIT_EN;\
|
||||
type MPC_RMU_3DLUT_CONFIG_STATUS;\
|
||||
type MPC_RMU_3DLUT_READ_SEL;\
|
||||
type MPC_RMU_3DLUT_INDEX;\
|
||||
type MPC_RMU_3DLUT_DATA0;\
|
||||
type MPC_RMU_3DLUT_DATA1;\
|
||||
type MPC_RMU_3DLUT_DATA_30BIT;\
|
||||
type MPC_RMU_SHAPER_LUT_MODE;\
|
||||
type MPC_RMU_SHAPER_LUT_MODE_CURRENT;\
|
||||
type MPC_RMU_SHAPER_OFFSET_R;\
|
||||
type MPC_RMU_SHAPER_OFFSET_G;\
|
||||
type MPC_RMU_SHAPER_OFFSET_B;\
|
||||
type MPC_RMU_SHAPER_SCALE_R;\
|
||||
type MPC_RMU_SHAPER_SCALE_G;\
|
||||
type MPC_RMU_SHAPER_SCALE_B;\
|
||||
type MPC_RMU_SHAPER_LUT_INDEX;\
|
||||
type MPC_RMU_SHAPER_LUT_DATA;\
|
||||
type MPC_RMU_SHAPER_LUT_WRITE_EN_MASK;\
|
||||
type MPC_RMU_SHAPER_LUT_WRITE_SEL;\
|
||||
type MPC_RMU_SHAPER_CONFIG_STATUS;\
|
||||
type MPC_RMU_SHAPER_RAMA_EXP_REGION_START_B;\
|
||||
type MPC_RMU_SHAPER_RAMA_EXP_REGION_START_SEGMENT_B;\
|
||||
type MPC_RMU_SHAPER_RAMA_EXP_REGION_END_B;\
|
||||
type MPC_RMU_SHAPER_RAMA_EXP_REGION_END_BASE_B;\
|
||||
type MPC_RMU_SHAPER_RAMA_EXP_REGION0_LUT_OFFSET;\
|
||||
type MPC_RMU_SHAPER_RAMA_EXP_REGION0_NUM_SEGMENTS;\
|
||||
type MPC_RMU_SHAPER_RAMA_EXP_REGION1_LUT_OFFSET;\
|
||||
type MPC_RMU_SHAPER_RAMA_EXP_REGION1_NUM_SEGMENTS;\
|
||||
type MPC_RMU_SHAPER_MODE_CURRENT
|
||||
|
||||
struct dcn30_mpc_registers {
|
||||
MPC_REG_VARIABLE_LIST_DCN3_0;
|
||||
|
43
drivers/gpu/drm/amd/display/dc/dcn303/Makefile
Normal file
43
drivers/gpu/drm/amd/display/dc/dcn303/Makefile
Normal file
@ -0,0 +1,43 @@
|
||||
#
|
||||
# (c) Copyright 2021 Advanced Micro Devices, Inc. All the rights reserved
|
||||
#
|
||||
# All rights reserved. This notice is intended as a precaution against
|
||||
# inadvertent publication and does not imply publication or any waiver
|
||||
# of confidentiality. The year included in the foregoing notice is the
|
||||
# year of creation of the work.
|
||||
#
|
||||
# Authors: AMD
|
||||
#
|
||||
# Makefile for dcn303.
|
||||
|
||||
DCN3_03 = dcn303_init.o dcn303_hwseq.o dcn303_resource.o
|
||||
|
||||
ifdef CONFIG_X86
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn303/dcn303_resource.o := -msse
|
||||
endif
|
||||
|
||||
ifdef CONFIG_PPC64
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn303/dcn303_resource.o := -mhard-float -maltivec
|
||||
endif
|
||||
|
||||
ifdef CONFIG_CC_IS_GCC
|
||||
ifeq ($(call cc-ifversion, -lt, 0701, y), y)
|
||||
IS_OLD_GCC = 1
|
||||
endif
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn303/dcn303_resource.o += -mhard-float
|
||||
endif
|
||||
|
||||
ifdef CONFIG_X86
|
||||
ifdef IS_OLD_GCC
|
||||
# Stack alignment mismatch, proceed with caution.
|
||||
# GCC < 7.1 cannot compile code using `double` and -mpreferred-stack-boundary=3
|
||||
# (8B stack alignment).
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn303/dcn303_resource.o += -mpreferred-stack-boundary=4
|
||||
else
|
||||
CFLAGS_$(AMDDALPATH)/dc/dcn303/dcn303_resource.o += -msse2
|
||||
endif
|
||||
endif
|
||||
|
||||
AMD_DAL_DCN3_03 = $(addprefix $(AMDDALPATH)/dc/dcn303/,$(DCN3_03))
|
||||
|
||||
AMD_DISPLAY_FILES += $(AMD_DAL_DCN3_03)
|
48
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_dccg.h
Normal file
48
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_dccg.h
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright 2021 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __DCN303_DCCG_H__
|
||||
#define __DCN303_DCCG_H__
|
||||
|
||||
#include "dcn30/dcn30_dccg.h"
|
||||
|
||||
|
||||
#define DCCG_REG_LIST_DCN3_03() \
|
||||
SR(DPPCLK_DTO_CTRL),\
|
||||
DCCG_SRII(DTO_PARAM, DPPCLK, 0),\
|
||||
DCCG_SRII(DTO_PARAM, DPPCLK, 1),\
|
||||
SR(REFCLK_CNTL)
|
||||
|
||||
#define DCCG_MASK_SH_LIST_DCN3_03(mask_sh) \
|
||||
DCCG_SFI(DPPCLK_DTO_CTRL, DTO_ENABLE, DPPCLK, 0, mask_sh),\
|
||||
DCCG_SFI(DPPCLK_DTO_CTRL, DTO_DB_EN, DPPCLK, 0, mask_sh),\
|
||||
DCCG_SFI(DPPCLK_DTO_CTRL, DTO_ENABLE, DPPCLK, 1, mask_sh),\
|
||||
DCCG_SFI(DPPCLK_DTO_CTRL, DTO_DB_EN, DPPCLK, 1, mask_sh),\
|
||||
DCCG_SF(DPPCLK0_DTO_PARAM, DPPCLK0_DTO_PHASE, mask_sh),\
|
||||
DCCG_SF(DPPCLK0_DTO_PARAM, DPPCLK0_DTO_MODULO, mask_sh),\
|
||||
DCCG_SF(REFCLK_CNTL, REFCLK_CLOCK_EN, mask_sh),\
|
||||
DCCG_SF(REFCLK_CNTL, REFCLK_SRC_SEL, mask_sh)
|
||||
|
||||
#endif //__DCN303_DCCG_H__
|
58
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_hwseq.c
Normal file
58
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_hwseq.c
Normal file
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright 2021 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#include "dcn303_hwseq.h"
|
||||
|
||||
#include "dce/dce_hwseq.h"
|
||||
|
||||
#include "reg_helper.h"
|
||||
#include "dc.h"
|
||||
|
||||
#define DC_LOGGER_INIT(logger)
|
||||
|
||||
#define CTX \
|
||||
hws->ctx
|
||||
#define REG(reg)\
|
||||
hws->regs->reg
|
||||
|
||||
#undef FN
|
||||
#define FN(reg_name, field_name) \
|
||||
hws->shifts->field_name, hws->masks->field_name
|
||||
|
||||
|
||||
void dcn303_dpp_pg_control(struct dce_hwseq *hws, unsigned int dpp_inst, bool power_on)
|
||||
{
|
||||
/*DCN303 removes PG registers*/
|
||||
}
|
||||
|
||||
void dcn303_hubp_pg_control(struct dce_hwseq *hws, unsigned int hubp_inst, bool power_on)
|
||||
{
|
||||
/*DCN303 removes PG registers*/
|
||||
}
|
||||
|
||||
void dcn303_dsc_pg_control(struct dce_hwseq *hws, unsigned int dsc_inst, bool power_on)
|
||||
{
|
||||
/*DCN303 removes PG registers*/
|
||||
}
|
35
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_hwseq.h
Normal file
35
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_hwseq.h
Normal file
@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2021 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __DC_HWSS_DCN303_H__
|
||||
#define __DC_HWSS_DCN303_H__
|
||||
|
||||
#include "hw_sequencer_private.h"
|
||||
|
||||
void dcn303_dpp_pg_control(struct dce_hwseq *hws, unsigned int dpp_inst, bool power_on);
|
||||
void dcn303_hubp_pg_control(struct dce_hwseq *hws, unsigned int hubp_inst, bool power_on);
|
||||
void dcn303_dsc_pg_control(struct dce_hwseq *hws, unsigned int dsc_inst, bool power_on);
|
||||
|
||||
#endif /* __DC_HWSS_DCN303_H__ */
|
37
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_init.c
Normal file
37
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_init.c
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2021 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#include "dcn303_hwseq.h"
|
||||
#include "dcn30/dcn30_init.h"
|
||||
#include "dc.h"
|
||||
|
||||
void dcn303_hw_sequencer_construct(struct dc *dc)
|
||||
{
|
||||
dcn30_hw_sequencer_construct(dc);
|
||||
|
||||
dc->hwseq->funcs.dpp_pg_control = dcn303_dpp_pg_control;
|
||||
dc->hwseq->funcs.hubp_pg_control = dcn303_hubp_pg_control;
|
||||
dc->hwseq->funcs.dsc_pg_control = dcn303_dsc_pg_control;
|
||||
}
|
33
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_init.h
Normal file
33
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_init.h
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2021 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __DC_DCN303_INIT_H__
|
||||
#define __DC_DCN303_INIT_H__
|
||||
|
||||
struct dc;
|
||||
|
||||
void dcn303_hw_sequencer_construct(struct dc *dc);
|
||||
|
||||
#endif /* __DC_DCN303_INIT_H__ */
|
1691
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.c
Normal file
1691
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.c
Normal file
File diff suppressed because it is too large
Load Diff
35
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.h
Normal file
35
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.h
Normal file
@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2021 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DCN303_RESOURCE_H_
|
||||
#define _DCN303_RESOURCE_H_
|
||||
|
||||
#include "core_types.h"
|
||||
|
||||
struct resource_pool *dcn303_create_resource_pool(const struct dc_init_data *init_data, struct dc *dc);
|
||||
|
||||
void dcn303_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_params);
|
||||
|
||||
#endif /* _DCN303_RESOURCE_H_ */
|
@ -111,6 +111,7 @@ bool dal_hw_factory_init(
|
||||
case DCN_VERSION_3_0:
|
||||
case DCN_VERSION_3_01:
|
||||
case DCN_VERSION_3_02:
|
||||
case DCN_VERSION_3_03:
|
||||
dal_hw_factory_dcn30_init(factory);
|
||||
return true;
|
||||
#endif
|
||||
|
@ -106,6 +106,7 @@ bool dal_hw_translate_init(
|
||||
case DCN_VERSION_3_0:
|
||||
case DCN_VERSION_3_01:
|
||||
case DCN_VERSION_3_02:
|
||||
case DCN_VERSION_3_03:
|
||||
dal_hw_translate_dcn30_init(translate);
|
||||
return true;
|
||||
#endif
|
||||
|
@ -109,4 +109,12 @@ IRQ_DCN3_02 = irq_service_dcn302.o
|
||||
AMD_DAL_IRQ_DCN3_02 = $(addprefix $(AMDDALPATH)/dc/irq/dcn302/,$(IRQ_DCN3_02))
|
||||
|
||||
AMD_DISPLAY_FILES += $(AMD_DAL_IRQ_DCN3_02)
|
||||
###############################################################################
|
||||
# DCN 3_03
|
||||
###############################################################################
|
||||
IRQ_DCN3_03 = irq_service_dcn303.o
|
||||
|
||||
AMD_DAL_IRQ_DCN3_03 = $(addprefix $(AMDDALPATH)/dc/irq/dcn303/,$(IRQ_DCN3_03))
|
||||
|
||||
AMD_DISPLAY_FILES += $(AMD_DAL_IRQ_DCN3_03)
|
||||
endif
|
||||
|
280
drivers/gpu/drm/amd/display/dc/irq/dcn303/irq_service_dcn303.c
Normal file
280
drivers/gpu/drm/amd/display/dc/irq/dcn303/irq_service_dcn303.c
Normal file
@ -0,0 +1,280 @@
|
||||
/*
|
||||
* Copyright 2021 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#include "dm_services.h"
|
||||
#include "irq_service_dcn303.h"
|
||||
#include "../dce110/irq_service_dce110.h"
|
||||
|
||||
#include "sienna_cichlid_ip_offset.h"
|
||||
#include "dcn/dcn_3_0_3_offset.h"
|
||||
#include "dcn/dcn_3_0_3_sh_mask.h"
|
||||
|
||||
#include "ivsrcid/dcn/irqsrcs_dcn_1_0.h"
|
||||
|
||||
static enum dc_irq_source to_dal_irq_source_dcn303(struct irq_service *irq_service,
|
||||
uint32_t src_id,
|
||||
uint32_t ext_id)
|
||||
{
|
||||
switch (src_id) {
|
||||
case DCN_1_0__SRCID__DC_D1_OTG_VSTARTUP:
|
||||
return DC_IRQ_SOURCE_VBLANK1;
|
||||
case DCN_1_0__SRCID__DC_D2_OTG_VSTARTUP:
|
||||
return DC_IRQ_SOURCE_VBLANK2;
|
||||
case DCN_1_0__SRCID__HUBP0_FLIP_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_PFLIP1;
|
||||
case DCN_1_0__SRCID__HUBP1_FLIP_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_PFLIP2;
|
||||
case DCN_1_0__SRCID__OTG0_IHC_V_UPDATE_NO_LOCK_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_VUPDATE1;
|
||||
case DCN_1_0__SRCID__OTG1_IHC_V_UPDATE_NO_LOCK_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_VUPDATE2;
|
||||
|
||||
case DCN_1_0__SRCID__DC_HPD1_INT:
|
||||
/* generic src_id for all HPD and HPDRX interrupts */
|
||||
switch (ext_id) {
|
||||
case DCN_1_0__CTXID__DC_HPD1_INT:
|
||||
return DC_IRQ_SOURCE_HPD1;
|
||||
case DCN_1_0__CTXID__DC_HPD2_INT:
|
||||
return DC_IRQ_SOURCE_HPD2;
|
||||
case DCN_1_0__CTXID__DC_HPD1_RX_INT:
|
||||
return DC_IRQ_SOURCE_HPD1RX;
|
||||
case DCN_1_0__CTXID__DC_HPD2_RX_INT:
|
||||
return DC_IRQ_SOURCE_HPD2RX;
|
||||
default:
|
||||
return DC_IRQ_SOURCE_INVALID;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
return DC_IRQ_SOURCE_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
static bool hpd_ack(struct irq_service *irq_service, const struct irq_source_info *info)
|
||||
{
|
||||
uint32_t addr = info->status_reg;
|
||||
uint32_t value = dm_read_reg(irq_service->ctx, addr);
|
||||
uint32_t current_status = get_reg_field_value(value, HPD0_DC_HPD_INT_STATUS, DC_HPD_SENSE_DELAYED);
|
||||
|
||||
dal_irq_service_ack_generic(irq_service, info);
|
||||
|
||||
value = dm_read_reg(irq_service->ctx, info->enable_reg);
|
||||
|
||||
set_reg_field_value(value, current_status ? 0 : 1, HPD0_DC_HPD_INT_CONTROL, DC_HPD_INT_POLARITY);
|
||||
|
||||
dm_write_reg(irq_service->ctx, info->enable_reg, value);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static const struct irq_source_info_funcs hpd_irq_info_funcs = {
|
||||
.set = NULL,
|
||||
.ack = hpd_ack
|
||||
};
|
||||
|
||||
static const struct irq_source_info_funcs hpd_rx_irq_info_funcs = {
|
||||
.set = NULL,
|
||||
.ack = NULL
|
||||
};
|
||||
|
||||
static const struct irq_source_info_funcs pflip_irq_info_funcs = {
|
||||
.set = NULL,
|
||||
.ack = NULL
|
||||
};
|
||||
|
||||
static const struct irq_source_info_funcs vupdate_no_lock_irq_info_funcs = {
|
||||
.set = NULL,
|
||||
.ack = NULL
|
||||
};
|
||||
|
||||
static const struct irq_source_info_funcs vblank_irq_info_funcs = {
|
||||
.set = NULL,
|
||||
.ack = NULL
|
||||
};
|
||||
|
||||
#undef BASE_INNER
|
||||
#define BASE_INNER(seg) DCN_BASE__INST0_SEG ## seg
|
||||
|
||||
/* compile time expand base address. */
|
||||
#define BASE(seg) BASE_INNER(seg)
|
||||
|
||||
#define SRI(reg_name, block, id)\
|
||||
BASE(mm ## block ## id ## _ ## reg_name ## _BASE_IDX) + \
|
||||
mm ## block ## id ## _ ## reg_name
|
||||
|
||||
|
||||
#define IRQ_REG_ENTRY(block, reg_num, reg1, mask1, reg2, mask2)\
|
||||
.enable_reg = SRI(reg1, block, reg_num),\
|
||||
.enable_mask = block ## reg_num ## _ ## reg1 ## __ ## mask1 ## _MASK,\
|
||||
.enable_value = {\
|
||||
block ## reg_num ## _ ## reg1 ## __ ## mask1 ## _MASK,\
|
||||
~block ## reg_num ## _ ## reg1 ## __ ## mask1 ## _MASK \
|
||||
},\
|
||||
.ack_reg = SRI(reg2, block, reg_num),\
|
||||
.ack_mask = block ## reg_num ## _ ## reg2 ## __ ## mask2 ## _MASK,\
|
||||
.ack_value = block ## reg_num ## _ ## reg2 ## __ ## mask2 ## _MASK \
|
||||
|
||||
|
||||
|
||||
#define hpd_int_entry(reg_num)\
|
||||
[DC_IRQ_SOURCE_HPD1 + reg_num] = {\
|
||||
IRQ_REG_ENTRY(HPD, reg_num,\
|
||||
DC_HPD_INT_CONTROL, DC_HPD_INT_EN,\
|
||||
DC_HPD_INT_CONTROL, DC_HPD_INT_ACK),\
|
||||
.status_reg = SRI(DC_HPD_INT_STATUS, HPD, reg_num),\
|
||||
.funcs = &hpd_irq_info_funcs\
|
||||
}
|
||||
|
||||
#define hpd_rx_int_entry(reg_num)\
|
||||
[DC_IRQ_SOURCE_HPD1RX + reg_num] = {\
|
||||
IRQ_REG_ENTRY(HPD, reg_num,\
|
||||
DC_HPD_INT_CONTROL, DC_HPD_RX_INT_EN,\
|
||||
DC_HPD_INT_CONTROL, DC_HPD_RX_INT_ACK),\
|
||||
.status_reg = SRI(DC_HPD_INT_STATUS, HPD, reg_num),\
|
||||
.funcs = &hpd_rx_irq_info_funcs\
|
||||
}
|
||||
#define pflip_int_entry(reg_num)\
|
||||
[DC_IRQ_SOURCE_PFLIP1 + reg_num] = {\
|
||||
IRQ_REG_ENTRY(HUBPREQ, reg_num,\
|
||||
DCSURF_SURFACE_FLIP_INTERRUPT, SURFACE_FLIP_INT_MASK,\
|
||||
DCSURF_SURFACE_FLIP_INTERRUPT, SURFACE_FLIP_CLEAR),\
|
||||
.funcs = &pflip_irq_info_funcs\
|
||||
}
|
||||
|
||||
/* vupdate_no_lock_int_entry maps to DC_IRQ_SOURCE_VUPDATEx, to match semantic
|
||||
* of DCE's DC_IRQ_SOURCE_VUPDATEx.
|
||||
*/
|
||||
#define vupdate_no_lock_int_entry(reg_num)\
|
||||
[DC_IRQ_SOURCE_VUPDATE1 + reg_num] = {\
|
||||
IRQ_REG_ENTRY(OTG, reg_num,\
|
||||
OTG_GLOBAL_SYNC_STATUS, VUPDATE_NO_LOCK_INT_EN,\
|
||||
OTG_GLOBAL_SYNC_STATUS, VUPDATE_NO_LOCK_EVENT_CLEAR),\
|
||||
.funcs = &vupdate_no_lock_irq_info_funcs\
|
||||
}
|
||||
|
||||
#define vblank_int_entry(reg_num)\
|
||||
[DC_IRQ_SOURCE_VBLANK1 + reg_num] = {\
|
||||
IRQ_REG_ENTRY(OTG, reg_num,\
|
||||
OTG_GLOBAL_SYNC_STATUS, VSTARTUP_INT_EN,\
|
||||
OTG_GLOBAL_SYNC_STATUS, VSTARTUP_EVENT_CLEAR),\
|
||||
.funcs = &vblank_irq_info_funcs\
|
||||
}
|
||||
|
||||
#define dummy_irq_entry() { .funcs = &dummy_irq_info_funcs }
|
||||
|
||||
#define i2c_int_entry(reg_num) \
|
||||
[DC_IRQ_SOURCE_I2C_DDC ## reg_num] = dummy_irq_entry()
|
||||
|
||||
#define dp_sink_int_entry(reg_num) \
|
||||
[DC_IRQ_SOURCE_DPSINK ## reg_num] = dummy_irq_entry()
|
||||
|
||||
#define gpio_pad_int_entry(reg_num) \
|
||||
[DC_IRQ_SOURCE_GPIOPAD ## reg_num] = dummy_irq_entry()
|
||||
|
||||
#define dc_underflow_int_entry(reg_num) \
|
||||
[DC_IRQ_SOURCE_DC ## reg_num ## UNDERFLOW] = dummy_irq_entry()
|
||||
|
||||
static const struct irq_source_info_funcs dummy_irq_info_funcs = {
|
||||
.set = dal_irq_service_dummy_set,
|
||||
.ack = dal_irq_service_dummy_ack
|
||||
};
|
||||
|
||||
static const struct irq_source_info irq_source_info_dcn303[DAL_IRQ_SOURCES_NUMBER] = {
|
||||
[DC_IRQ_SOURCE_INVALID] = dummy_irq_entry(),
|
||||
hpd_int_entry(0),
|
||||
hpd_int_entry(1),
|
||||
hpd_rx_int_entry(0),
|
||||
hpd_rx_int_entry(1),
|
||||
i2c_int_entry(1),
|
||||
i2c_int_entry(2),
|
||||
dp_sink_int_entry(1),
|
||||
dp_sink_int_entry(2),
|
||||
[DC_IRQ_SOURCE_TIMER] = dummy_irq_entry(),
|
||||
pflip_int_entry(0),
|
||||
pflip_int_entry(1),
|
||||
[DC_IRQ_SOURCE_PFLIP_UNDERLAY0] = dummy_irq_entry(),
|
||||
gpio_pad_int_entry(0),
|
||||
gpio_pad_int_entry(1),
|
||||
gpio_pad_int_entry(2),
|
||||
gpio_pad_int_entry(3),
|
||||
gpio_pad_int_entry(4),
|
||||
gpio_pad_int_entry(5),
|
||||
gpio_pad_int_entry(6),
|
||||
gpio_pad_int_entry(7),
|
||||
gpio_pad_int_entry(8),
|
||||
gpio_pad_int_entry(9),
|
||||
gpio_pad_int_entry(10),
|
||||
gpio_pad_int_entry(11),
|
||||
gpio_pad_int_entry(12),
|
||||
gpio_pad_int_entry(13),
|
||||
gpio_pad_int_entry(14),
|
||||
gpio_pad_int_entry(15),
|
||||
gpio_pad_int_entry(16),
|
||||
gpio_pad_int_entry(17),
|
||||
gpio_pad_int_entry(18),
|
||||
gpio_pad_int_entry(19),
|
||||
gpio_pad_int_entry(20),
|
||||
gpio_pad_int_entry(21),
|
||||
gpio_pad_int_entry(22),
|
||||
gpio_pad_int_entry(23),
|
||||
gpio_pad_int_entry(24),
|
||||
gpio_pad_int_entry(25),
|
||||
gpio_pad_int_entry(26),
|
||||
gpio_pad_int_entry(27),
|
||||
gpio_pad_int_entry(28),
|
||||
gpio_pad_int_entry(29),
|
||||
gpio_pad_int_entry(30),
|
||||
dc_underflow_int_entry(1),
|
||||
dc_underflow_int_entry(2),
|
||||
[DC_IRQ_SOURCE_DMCU_SCP] = dummy_irq_entry(),
|
||||
[DC_IRQ_SOURCE_VBIOS_SW] = dummy_irq_entry(),
|
||||
vupdate_no_lock_int_entry(0),
|
||||
vupdate_no_lock_int_entry(1),
|
||||
vblank_int_entry(0),
|
||||
vblank_int_entry(1),
|
||||
};
|
||||
|
||||
static const struct irq_service_funcs irq_service_funcs_dcn303 = {
|
||||
.to_dal_irq_source = to_dal_irq_source_dcn303
|
||||
};
|
||||
|
||||
static void dcn303_irq_construct(struct irq_service *irq_service, struct irq_service_init_data *init_data)
|
||||
{
|
||||
dal_irq_service_construct(irq_service, init_data);
|
||||
|
||||
irq_service->info = irq_source_info_dcn303;
|
||||
irq_service->funcs = &irq_service_funcs_dcn303;
|
||||
}
|
||||
|
||||
struct irq_service *dal_irq_service_dcn303_create(struct irq_service_init_data *init_data)
|
||||
{
|
||||
struct irq_service *irq_service = kzalloc(sizeof(*irq_service), GFP_KERNEL);
|
||||
|
||||
if (!irq_service)
|
||||
return NULL;
|
||||
|
||||
dcn303_irq_construct(irq_service, init_data);
|
||||
return irq_service;
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2021 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __DAL_IRQ_SERVICE_DCN303_H__
|
||||
#define __DAL_IRQ_SERVICE_DCN303_H__
|
||||
|
||||
#include "../irq_service.h"
|
||||
|
||||
struct irq_service *dal_irq_service_dcn303_create(struct irq_service_init_data *init_data);
|
||||
|
||||
#endif /* __DAL_IRQ_SERVICE_DCN303_H__ */
|
@ -93,6 +93,7 @@ enum dmub_asic {
|
||||
DMUB_ASIC_DCN30,
|
||||
DMUB_ASIC_DCN301,
|
||||
DMUB_ASIC_DCN302,
|
||||
DMUB_ASIC_DCN303,
|
||||
DMUB_ASIC_MAX,
|
||||
};
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
DMUB = dmub_srv.o dmub_srv_stat.o dmub_reg.o dmub_dcn20.o dmub_dcn21.o
|
||||
DMUB += dmub_dcn30.o dmub_dcn301.o
|
||||
DMUB += dmub_dcn302.o
|
||||
DMUB += dmub_dcn303.o
|
||||
|
||||
AMD_DAL_DMUB = $(addprefix $(AMDDALPATH)/dmub/src/,$(DMUB))
|
||||
|
||||
|
55
drivers/gpu/drm/amd/display/dmub/src/dmub_dcn303.c
Normal file
55
drivers/gpu/drm/amd/display/dmub/src/dmub_dcn303.c
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright 2021 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#include "../dmub_srv.h"
|
||||
#include "dmub_reg.h"
|
||||
#include "dmub_dcn303.h"
|
||||
|
||||
#include "sienna_cichlid_ip_offset.h"
|
||||
#include "dcn/dcn_3_0_3_offset.h"
|
||||
#include "dcn/dcn_3_0_3_sh_mask.h"
|
||||
|
||||
#define BASE_INNER(seg) DCN_BASE__INST0_SEG##seg
|
||||
#define CTX dmub
|
||||
#define REGS dmub->regs
|
||||
|
||||
/* Registers. */
|
||||
|
||||
const struct dmub_srv_common_regs dmub_srv_dcn303_regs = {
|
||||
#define DMUB_SR(reg) REG_OFFSET(reg),
|
||||
{ DMUB_COMMON_REGS() },
|
||||
#undef DMUB_SR
|
||||
|
||||
#define DMUB_SF(reg, field) FD_MASK(reg, field),
|
||||
{ DMUB_COMMON_FIELDS() },
|
||||
#undef DMUB_SF
|
||||
|
||||
#define DMUB_SF(reg, field) FD_SHIFT(reg, field),
|
||||
{ DMUB_COMMON_FIELDS() },
|
||||
#undef DMUB_SF
|
||||
};
|
||||
|
||||
/* Shared functions. */
|
||||
|
37
drivers/gpu/drm/amd/display/dmub/src/dmub_dcn303.h
Normal file
37
drivers/gpu/drm/amd/display/dmub/src/dmub_dcn303.h
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2020 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DMUB_DCN303_H_
|
||||
#define _DMUB_DCN303_H_
|
||||
|
||||
#include "dmub_dcn20.h"
|
||||
|
||||
/* Registers. */
|
||||
|
||||
extern const struct dmub_srv_common_regs dmub_srv_dcn303_regs;
|
||||
|
||||
/* Hardware functions. */
|
||||
|
||||
#endif /* _DMUB_DCN303_H_ */
|
@ -30,6 +30,7 @@
|
||||
#include "dmub_dcn30.h"
|
||||
#include "dmub_dcn301.h"
|
||||
#include "dmub_dcn302.h"
|
||||
#include "dmub_dcn303.h"
|
||||
#include "os_types.h"
|
||||
/*
|
||||
* Note: the DMUB service is standalone. No additional headers should be
|
||||
@ -142,6 +143,7 @@ static bool dmub_srv_hw_setup(struct dmub_srv *dmub, enum dmub_asic asic)
|
||||
case DMUB_ASIC_DCN30:
|
||||
case DMUB_ASIC_DCN301:
|
||||
case DMUB_ASIC_DCN302:
|
||||
case DMUB_ASIC_DCN303:
|
||||
dmub->regs = &dmub_srv_dcn20_regs;
|
||||
|
||||
funcs->reset = dmub_dcn20_reset;
|
||||
@ -194,6 +196,12 @@ static bool dmub_srv_hw_setup(struct dmub_srv *dmub, enum dmub_asic asic)
|
||||
funcs->backdoor_load = dmub_dcn30_backdoor_load;
|
||||
funcs->setup_windows = dmub_dcn30_setup_windows;
|
||||
}
|
||||
if (asic == DMUB_ASIC_DCN303) {
|
||||
dmub->regs = &dmub_srv_dcn303_regs;
|
||||
|
||||
funcs->backdoor_load = dmub_dcn30_backdoor_load;
|
||||
funcs->setup_windows = dmub_dcn30_setup_windows;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -196,6 +196,7 @@ enum {
|
||||
NV_NAVI14_M_A0 = 20,
|
||||
NV_SIENNA_CICHLID_P_A0 = 40,
|
||||
NV_DIMGREY_CAVEFISH_P_A0 = 60,
|
||||
NV_BEIGE_GOBY_P_A0 = 70,
|
||||
NV_UNKNOWN = 0xFF
|
||||
};
|
||||
|
||||
@ -204,7 +205,8 @@ enum {
|
||||
#define ASICREV_IS_NAVI14_M(eChipRev) ((eChipRev >= NV_NAVI14_M_A0) && (eChipRev < NV_UNKNOWN))
|
||||
#define ASICREV_IS_RENOIR(eChipRev) ((eChipRev >= RENOIR_A0) && (eChipRev < RAVEN1_F0))
|
||||
#define ASICREV_IS_SIENNA_CICHLID_P(eChipRev) ((eChipRev >= NV_SIENNA_CICHLID_P_A0) && (eChipRev < NV_DIMGREY_CAVEFISH_P_A0))
|
||||
#define ASICREV_IS_DIMGREY_CAVEFISH_P(eChipRev) ((eChipRev >= NV_DIMGREY_CAVEFISH_P_A0) && (eChipRev < NV_UNKNOWN))
|
||||
#define ASICREV_IS_DIMGREY_CAVEFISH_P(eChipRev) ((eChipRev >= NV_DIMGREY_CAVEFISH_P_A0) && (eChipRev < NV_BEIGE_GOBY_P_A0))
|
||||
#define ASICREV_IS_BEIGE_GOBY_P(eChipRev) ((eChipRev >= NV_BEIGE_GOBY_P_A0) && (eChipRev < NV_UNKNOWN))
|
||||
#define GREEN_SARDINE_A0 0xA1
|
||||
#ifndef ASICREV_IS_GREEN_SARDINE
|
||||
#define ASICREV_IS_GREEN_SARDINE(eChipRev) ((eChipRev >= GREEN_SARDINE_A0) && (eChipRev < 0xFF))
|
||||
|
@ -54,6 +54,7 @@ enum dce_version {
|
||||
DCN_VERSION_3_0,
|
||||
DCN_VERSION_3_01,
|
||||
DCN_VERSION_3_02,
|
||||
DCN_VERSION_3_03,
|
||||
DCN_VERSION_MAX
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user