drm/amd/display: Add support for DCN302 (v2)
- add DCN302 resource, irq service, dmub loader, - handle DC_VERSION_DCN_3_02 - define DCN302 power gating functions - handle DCN302 in GPIO files - define I2C regs - add CONFIG_DRM_AMD_DC_DCN3_02 guard v2: rebase fixes (Alex) Signed-off-by: Joshua Aberback <joshua.aberback@amd.com> Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
4da6783908
commit
36d26912e8
27 changed files with 2753 additions and 1 deletions
|
@ -34,6 +34,13 @@ config DRM_AMD_DC_DCN3_01
|
|||
Choose this option if you want to have
|
||||
Van Gogh support for display engine
|
||||
|
||||
config DRM_AMD_DC_DCN3_02
|
||||
bool "DCN 3.02 family"
|
||||
depends on DRM_AMD_DC_DCN3_0
|
||||
help
|
||||
Choose this option if you want to have
|
||||
Dimgrey_cavefish support for display engine
|
||||
|
||||
config DRM_AMD_DC_HDCP
|
||||
bool "Enable HDCP support in DC"
|
||||
depends on DRM_AMD_DC
|
||||
|
|
|
@ -40,6 +40,11 @@ ifdef CONFIG_DRM_AMD_DC_DCN3_01
|
|||
DC_LIBS += dcn301
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DRM_AMD_DC_DCN3_02
|
||||
DC_LIBS += dcn302
|
||||
|
||||
endif
|
||||
|
||||
DC_LIBS += dce120
|
||||
|
||||
DC_LIBS += dce112
|
||||
|
|
|
@ -82,6 +82,11 @@ bool dal_bios_parser_init_cmd_tbl_helper2(
|
|||
case DCN_VERSION_3_01:
|
||||
*h = dal_cmd_tbl_helper_dce112_get_table2();
|
||||
return true;
|
||||
#endif
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
case DCN_VERSION_3_02:
|
||||
*h = dal_cmd_tbl_helper_dce112_get_table2();
|
||||
return true;
|
||||
#endif
|
||||
default:
|
||||
/* Unsupported DCE */
|
||||
|
|
|
@ -186,6 +186,12 @@ 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);
|
||||
break;
|
||||
}
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
if (ASICREV_IS_DIMGREY_CAVEFISH_P(asic_id.hw_internal_rev)) {
|
||||
dcn3_clk_mgr_construct(ctx, clk_mgr, pp_smu, dccg);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
dcn20_clk_mgr_construct(ctx, clk_mgr, pp_smu, dccg);
|
||||
break;
|
||||
|
|
|
@ -61,6 +61,9 @@
|
|||
#if defined(CONFIG_DRM_AMD_DC_DCN3_01)
|
||||
#include "../dcn301/dcn301_resource.h"
|
||||
#endif
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
#include "../dcn302/dcn302_resource.h"
|
||||
#endif
|
||||
|
||||
#define DC_LOGGER_INIT(logger)
|
||||
|
||||
|
@ -131,6 +134,10 @@ enum dce_version resource_parse_asic_id(struct hw_asic_id asic_id)
|
|||
#if defined(CONFIG_DRM_AMD_DC_DCN3_0)
|
||||
if (ASICREV_IS_SIENNA_CICHLID_P(asic_id.hw_internal_rev))
|
||||
dc_version = DCN_VERSION_3_0;
|
||||
#endif
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
if (ASICREV_IS_DIMGREY_CAVEFISH_P(asic_id.hw_internal_rev))
|
||||
dc_version = DCN_VERSION_3_02;
|
||||
#endif
|
||||
break;
|
||||
|
||||
|
@ -223,6 +230,12 @@ struct resource_pool *dc_create_resource_pool(struct dc *dc,
|
|||
case DCN_VERSION_3_01:
|
||||
res_pool = dcn301_create_resource_pool(init_data, dc);
|
||||
break;
|
||||
#endif
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
case DCN_VERSION_3_02:
|
||||
res_pool = dcn302_create_resource_pool(init_data, dc);
|
||||
break;
|
||||
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -125,6 +125,26 @@
|
|||
SRII(PIXEL_RATE_CNTL, OTG, 3)
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
#define CS_COMMON_REG_LIST_DCN3_02(index, pllid) \
|
||||
SRI(PIXCLK_RESYNC_CNTL, PHYPLL, pllid),\
|
||||
SRII(PHASE, DP_DTO, 0),\
|
||||
SRII(PHASE, DP_DTO, 1),\
|
||||
SRII(PHASE, DP_DTO, 2),\
|
||||
SRII(PHASE, DP_DTO, 3),\
|
||||
SRII(PHASE, DP_DTO, 4),\
|
||||
SRII(MODULO, DP_DTO, 0),\
|
||||
SRII(MODULO, DP_DTO, 1),\
|
||||
SRII(MODULO, DP_DTO, 2),\
|
||||
SRII(MODULO, DP_DTO, 3),\
|
||||
SRII(MODULO, DP_DTO, 4),\
|
||||
SRII(PIXEL_RATE_CNTL, OTG, 0),\
|
||||
SRII(PIXEL_RATE_CNTL, OTG, 1),\
|
||||
SRII(PIXEL_RATE_CNTL, OTG, 2),\
|
||||
SRII(PIXEL_RATE_CNTL, OTG, 3),\
|
||||
SRII(PIXEL_RATE_CNTL, OTG, 4)
|
||||
|
||||
#endif
|
||||
#define CS_COMMON_MASK_SH_LIST_DCN2_0(mask_sh)\
|
||||
CS_SF(DP_DTO0_PHASE, DP_DTO0_PHASE, mask_sh),\
|
||||
CS_SF(DP_DTO0_MODULO, DP_DTO0_MODULO, mask_sh),\
|
||||
|
|
|
@ -426,6 +426,86 @@
|
|||
SR(AZALIA_CONTROLLER_CLOCK_GATING)
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
#define HWSEQ_DCN302_REG_LIST()\
|
||||
HWSEQ_DCN_REG_LIST(), \
|
||||
HSWEQ_DCN_PIXEL_RATE_REG_LIST(OTG, 0), \
|
||||
HSWEQ_DCN_PIXEL_RATE_REG_LIST(OTG, 1), \
|
||||
HSWEQ_DCN_PIXEL_RATE_REG_LIST(OTG, 2), \
|
||||
HSWEQ_DCN_PIXEL_RATE_REG_LIST(OTG, 3), \
|
||||
HSWEQ_DCN_PIXEL_RATE_REG_LIST(OTG, 4), \
|
||||
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(DOMAIN0_PG_CONFIG), \
|
||||
SR(DOMAIN1_PG_CONFIG), \
|
||||
SR(DOMAIN2_PG_CONFIG), \
|
||||
SR(DOMAIN3_PG_CONFIG), \
|
||||
SR(DOMAIN4_PG_CONFIG), \
|
||||
SR(DOMAIN5_PG_CONFIG), \
|
||||
SR(DOMAIN6_PG_CONFIG), \
|
||||
SR(DOMAIN7_PG_CONFIG), \
|
||||
SR(DOMAIN8_PG_CONFIG), \
|
||||
SR(DOMAIN9_PG_CONFIG), \
|
||||
SR(DOMAIN16_PG_CONFIG), \
|
||||
SR(DOMAIN17_PG_CONFIG), \
|
||||
SR(DOMAIN18_PG_CONFIG), \
|
||||
SR(DOMAIN19_PG_CONFIG), \
|
||||
SR(DOMAIN20_PG_CONFIG), \
|
||||
SR(DOMAIN0_PG_STATUS), \
|
||||
SR(DOMAIN1_PG_STATUS), \
|
||||
SR(DOMAIN2_PG_STATUS), \
|
||||
SR(DOMAIN3_PG_STATUS), \
|
||||
SR(DOMAIN4_PG_STATUS), \
|
||||
SR(DOMAIN5_PG_STATUS), \
|
||||
SR(DOMAIN6_PG_STATUS), \
|
||||
SR(DOMAIN7_PG_STATUS), \
|
||||
SR(DOMAIN8_PG_STATUS), \
|
||||
SR(DOMAIN9_PG_STATUS), \
|
||||
SR(DOMAIN16_PG_STATUS), \
|
||||
SR(DOMAIN17_PG_STATUS), \
|
||||
SR(DOMAIN18_PG_STATUS), \
|
||||
SR(DOMAIN19_PG_STATUS), \
|
||||
SR(DOMAIN20_PG_STATUS), \
|
||||
SR(D1VGA_CONTROL), \
|
||||
SR(D2VGA_CONTROL), \
|
||||
SR(D3VGA_CONTROL), \
|
||||
SR(D4VGA_CONTROL), \
|
||||
SR(D5VGA_CONTROL), \
|
||||
SR(D6VGA_CONTROL), \
|
||||
SR(DC_IP_REQUEST_CNTL), \
|
||||
SR(AZALIA_AUDIO_DTO), \
|
||||
SR(AZALIA_CONTROLLER_CLOCK_GATING)
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
|
||||
#define HWSEQ_PIXEL_RATE_REG_LIST_302(blk) \
|
||||
SRII(PIXEL_RATE_CNTL, blk, 0), \
|
||||
SRII(PIXEL_RATE_CNTL, blk, 1),\
|
||||
SRII(PIXEL_RATE_CNTL, blk, 2),\
|
||||
SRII(PIXEL_RATE_CNTL, blk, 3), \
|
||||
SRII(PIXEL_RATE_CNTL, blk, 4)
|
||||
|
||||
#define HWSEQ_PHYPLL_REG_LIST_302(blk) \
|
||||
SRII(PHYPLL_PIXEL_RATE_CNTL, blk, 0), \
|
||||
SRII(PHYPLL_PIXEL_RATE_CNTL, blk, 1),\
|
||||
SRII(PHYPLL_PIXEL_RATE_CNTL, blk, 2),\
|
||||
SRII(PHYPLL_PIXEL_RATE_CNTL, blk, 3), \
|
||||
SRII(PHYPLL_PIXEL_RATE_CNTL, blk, 4)
|
||||
#endif
|
||||
|
||||
struct dce_hwseq_registers {
|
||||
uint32_t DCFE_CLOCK_CONTROL[6];
|
||||
uint32_t DCFEV_CLOCK_CONTROL;
|
||||
|
@ -813,6 +893,60 @@ struct dce_hwseq_registers {
|
|||
HWS_SF(, AZALIA_AUDIO_DTO, AZALIA_AUDIO_DTO_MODULE, mask_sh)
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
#define HWSEQ_DCN302_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(, DOMAIN0_PG_CONFIG, DOMAIN0_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN0_PG_CONFIG, DOMAIN0_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN1_PG_CONFIG, DOMAIN1_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN1_PG_CONFIG, DOMAIN1_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN2_PG_CONFIG, DOMAIN2_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN2_PG_CONFIG, DOMAIN2_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN3_PG_CONFIG, DOMAIN3_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN3_PG_CONFIG, DOMAIN3_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN4_PG_CONFIG, DOMAIN4_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN4_PG_CONFIG, DOMAIN4_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN5_PG_CONFIG, DOMAIN5_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN5_PG_CONFIG, DOMAIN5_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN6_PG_CONFIG, DOMAIN6_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN6_PG_CONFIG, DOMAIN6_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN7_PG_CONFIG, DOMAIN7_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN7_PG_CONFIG, DOMAIN7_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN8_PG_CONFIG, DOMAIN8_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN8_PG_CONFIG, DOMAIN8_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN9_PG_CONFIG, DOMAIN9_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN9_PG_CONFIG, DOMAIN9_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN16_PG_CONFIG, DOMAIN16_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN16_PG_CONFIG, DOMAIN16_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN17_PG_CONFIG, DOMAIN17_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN17_PG_CONFIG, DOMAIN17_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN18_PG_CONFIG, DOMAIN18_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN18_PG_CONFIG, DOMAIN18_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN19_PG_CONFIG, DOMAIN19_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN19_PG_CONFIG, DOMAIN19_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN20_PG_CONFIG, DOMAIN20_POWER_FORCEON, mask_sh), \
|
||||
HWS_SF(, DOMAIN20_PG_CONFIG, DOMAIN20_POWER_GATE, mask_sh), \
|
||||
HWS_SF(, DOMAIN0_PG_STATUS, DOMAIN0_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN1_PG_STATUS, DOMAIN1_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN2_PG_STATUS, DOMAIN2_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN3_PG_STATUS, DOMAIN3_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN4_PG_STATUS, DOMAIN4_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN5_PG_STATUS, DOMAIN5_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN6_PG_STATUS, DOMAIN6_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN7_PG_STATUS, DOMAIN7_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN8_PG_STATUS, DOMAIN8_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN9_PG_STATUS, DOMAIN9_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN16_PG_STATUS, DOMAIN16_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN17_PG_STATUS, DOMAIN17_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN18_PG_STATUS, DOMAIN18_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN19_PG_STATUS, DOMAIN19_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DOMAIN20_PG_STATUS, DOMAIN20_PGFSM_PWR_STATUS, mask_sh), \
|
||||
HWS_SF(, DC_IP_REQUEST_CNTL, IP_REQUEST_EN, mask_sh), \
|
||||
HWS_SF(, AZALIA_AUDIO_DTO, AZALIA_AUDIO_DTO_MODULE, mask_sh)
|
||||
|
||||
#endif
|
||||
|
||||
#define HWSEQ_REG_FIELD_LIST(type) \
|
||||
type DCFE_CLOCK_ENABLE; \
|
||||
type DCFEV_CLOCK_ENABLE; \
|
||||
|
|
17
drivers/gpu/drm/amd/display/dc/dcn302/Makefile
Normal file
17
drivers/gpu/drm/amd/display/dc/dcn302/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
#
|
||||
# (c) Copyright 2020 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 dcn302.
|
||||
|
||||
DCN3_02 = dcn302_init.o dcn302_hwseq.o dcn302_resource.o
|
||||
|
||||
AMD_DAL_DCN3_02 = $(addprefix $(AMDDALPATH)/dc/dcn302/,$(DCN3_02))
|
||||
|
||||
AMD_DISPLAY_FILES += $(AMD_DAL_DCN3_02)
|
41
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_dccg.h
Normal file
41
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_dccg.h
Normal file
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* 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 __DCN302_DCCG_H__
|
||||
#define __DCN302_DCCG_H__
|
||||
|
||||
#include "dcn30/dcn30_dccg.h"
|
||||
|
||||
|
||||
#define DCCG_REG_LIST_DCN3_02() \
|
||||
DCCG_COMMON_REG_LIST_DCN_BASE(),\
|
||||
DCCG_SRII(DTO_PARAM, DPPCLK, 4)
|
||||
|
||||
#define DCCG_MASK_SH_LIST_DCN3_02(mask_sh) \
|
||||
DCCG_COMMON_MASK_SH_LIST_DCN_COMMON_BASE(mask_sh),\
|
||||
DCCG_SFI(DPPCLK_DTO_CTRL, DTO_ENABLE, DPPCLK, 4, mask_sh),\
|
||||
DCCG_SFI(DPPCLK_DTO_CTRL, DTO_DB_EN, DPPCLK, 4, mask_sh)
|
||||
|
||||
#endif //__DCN302_DCCG_H__
|
233
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_hwseq.c
Normal file
233
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_hwseq.c
Normal file
|
@ -0,0 +1,233 @@
|
|||
/*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#include "dcn302_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 dcn302_dpp_pg_control(struct dce_hwseq *hws, unsigned int dpp_inst, bool power_on)
|
||||
{
|
||||
uint32_t power_gate = power_on ? 0 : 1;
|
||||
uint32_t pwr_status = power_on ? 0 : 2;
|
||||
|
||||
if (hws->ctx->dc->debug.disable_dpp_power_gate)
|
||||
return;
|
||||
if (REG(DOMAIN1_PG_CONFIG) == 0)
|
||||
return;
|
||||
|
||||
switch (dpp_inst) {
|
||||
case 0: /* DPP0 */
|
||||
REG_UPDATE(DOMAIN1_PG_CONFIG,
|
||||
DOMAIN1_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN1_PG_STATUS,
|
||||
DOMAIN1_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 1: /* DPP1 */
|
||||
REG_UPDATE(DOMAIN3_PG_CONFIG,
|
||||
DOMAIN3_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN3_PG_STATUS,
|
||||
DOMAIN3_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 2: /* DPP2 */
|
||||
REG_UPDATE(DOMAIN5_PG_CONFIG,
|
||||
DOMAIN5_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN5_PG_STATUS,
|
||||
DOMAIN5_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 3: /* DPP3 */
|
||||
REG_UPDATE(DOMAIN7_PG_CONFIG,
|
||||
DOMAIN7_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN7_PG_STATUS,
|
||||
DOMAIN7_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 4: /* DPP4 */
|
||||
/*
|
||||
* Do not power gate DPP4, should be left at HW default, power on permanently.
|
||||
* PG on Pipe4 is De-featured, attempting to put it to PG state may result in hard
|
||||
* reset.
|
||||
* REG_UPDATE(DOMAIN9_PG_CONFIG,
|
||||
* DOMAIN9_POWER_GATE, power_gate);
|
||||
*
|
||||
* REG_WAIT(DOMAIN9_PG_STATUS,
|
||||
* DOMAIN9_PGFSM_PWR_STATUS, pwr_status,
|
||||
* 1, 1000);
|
||||
*/
|
||||
break;
|
||||
default:
|
||||
BREAK_TO_DEBUGGER();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void dcn302_hubp_pg_control(struct dce_hwseq *hws, unsigned int hubp_inst, bool power_on)
|
||||
{
|
||||
uint32_t power_gate = power_on ? 0 : 1;
|
||||
uint32_t pwr_status = power_on ? 0 : 2;
|
||||
|
||||
if (hws->ctx->dc->debug.disable_hubp_power_gate)
|
||||
return;
|
||||
if (REG(DOMAIN0_PG_CONFIG) == 0)
|
||||
return;
|
||||
|
||||
switch (hubp_inst) {
|
||||
case 0: /* DCHUBP0 */
|
||||
REG_UPDATE(DOMAIN0_PG_CONFIG,
|
||||
DOMAIN0_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN0_PG_STATUS,
|
||||
DOMAIN0_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 1: /* DCHUBP1 */
|
||||
REG_UPDATE(DOMAIN2_PG_CONFIG,
|
||||
DOMAIN2_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN2_PG_STATUS,
|
||||
DOMAIN2_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 2: /* DCHUBP2 */
|
||||
REG_UPDATE(DOMAIN4_PG_CONFIG,
|
||||
DOMAIN4_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN4_PG_STATUS,
|
||||
DOMAIN4_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 3: /* DCHUBP3 */
|
||||
REG_UPDATE(DOMAIN6_PG_CONFIG,
|
||||
DOMAIN6_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN6_PG_STATUS,
|
||||
DOMAIN6_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 4: /* DCHUBP4 */
|
||||
/*
|
||||
* Do not power gate DCHUB4, should be left at HW default, power on permanently.
|
||||
* PG on Pipe4 is De-featured, attempting to put it to PG state may result in hard
|
||||
* reset.
|
||||
* REG_UPDATE(DOMAIN8_PG_CONFIG,
|
||||
* DOMAIN8_POWER_GATE, power_gate);
|
||||
*
|
||||
* REG_WAIT(DOMAIN8_PG_STATUS,
|
||||
* DOMAIN8_PGFSM_PWR_STATUS, pwr_status,
|
||||
* 1, 1000);
|
||||
*/
|
||||
break;
|
||||
default:
|
||||
BREAK_TO_DEBUGGER();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void dcn302_dsc_pg_control(struct dce_hwseq *hws, unsigned int dsc_inst, bool power_on)
|
||||
{
|
||||
uint32_t power_gate = power_on ? 0 : 1;
|
||||
uint32_t pwr_status = power_on ? 0 : 2;
|
||||
uint32_t org_ip_request_cntl = 0;
|
||||
|
||||
if (hws->ctx->dc->debug.disable_dsc_power_gate)
|
||||
return;
|
||||
|
||||
if (REG(DOMAIN16_PG_CONFIG) == 0)
|
||||
return;
|
||||
|
||||
REG_GET(DC_IP_REQUEST_CNTL, IP_REQUEST_EN, &org_ip_request_cntl);
|
||||
if (org_ip_request_cntl == 0)
|
||||
REG_SET(DC_IP_REQUEST_CNTL, 0, IP_REQUEST_EN, 1);
|
||||
|
||||
switch (dsc_inst) {
|
||||
case 0: /* DSC0 */
|
||||
REG_UPDATE(DOMAIN16_PG_CONFIG,
|
||||
DOMAIN16_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN16_PG_STATUS,
|
||||
DOMAIN16_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 1: /* DSC1 */
|
||||
REG_UPDATE(DOMAIN17_PG_CONFIG,
|
||||
DOMAIN17_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN17_PG_STATUS,
|
||||
DOMAIN17_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 2: /* DSC2 */
|
||||
REG_UPDATE(DOMAIN18_PG_CONFIG,
|
||||
DOMAIN18_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN18_PG_STATUS,
|
||||
DOMAIN18_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 3: /* DSC3 */
|
||||
REG_UPDATE(DOMAIN19_PG_CONFIG,
|
||||
DOMAIN19_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN19_PG_STATUS,
|
||||
DOMAIN19_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
case 4: /* DSC4 */
|
||||
REG_UPDATE(DOMAIN20_PG_CONFIG,
|
||||
DOMAIN20_POWER_GATE, power_gate);
|
||||
|
||||
REG_WAIT(DOMAIN20_PG_STATUS,
|
||||
DOMAIN20_PGFSM_PWR_STATUS, pwr_status,
|
||||
1, 1000);
|
||||
break;
|
||||
default:
|
||||
BREAK_TO_DEBUGGER();
|
||||
break;
|
||||
}
|
||||
|
||||
if (org_ip_request_cntl == 0)
|
||||
REG_SET(DC_IP_REQUEST_CNTL, 0, IP_REQUEST_EN, 0);
|
||||
}
|
35
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_hwseq.h
Normal file
35
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_hwseq.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* 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 __DC_HWSS_DCN302_H__
|
||||
#define __DC_HWSS_DCN302_H__
|
||||
|
||||
#include "hw_sequencer_private.h"
|
||||
|
||||
void dcn302_dpp_pg_control(struct dce_hwseq *hws, unsigned int dpp_inst, bool power_on);
|
||||
void dcn302_hubp_pg_control(struct dce_hwseq *hws, unsigned int hubp_inst, bool power_on);
|
||||
void dcn302_dsc_pg_control(struct dce_hwseq *hws, unsigned int dsc_inst, bool power_on);
|
||||
|
||||
#endif /* __DC_HWSS_DCN302_H__ */
|
39
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_init.c
Normal file
39
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_init.c
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#include "dcn302_hwseq.h"
|
||||
|
||||
#include "dcn30/dcn30_init.h"
|
||||
|
||||
#include "dc.h"
|
||||
|
||||
void dcn302_hw_sequencer_construct(struct dc *dc)
|
||||
{
|
||||
dcn30_hw_sequencer_construct(dc);
|
||||
|
||||
dc->hwseq->funcs.dpp_pg_control = dcn302_dpp_pg_control;
|
||||
dc->hwseq->funcs.hubp_pg_control = dcn302_hubp_pg_control;
|
||||
dc->hwseq->funcs.dsc_pg_control = dcn302_dsc_pg_control;
|
||||
}
|
33
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_init.h
Normal file
33
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_init.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* 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 __DC_DCN302_INIT_H__
|
||||
#define __DC_DCN302_INIT_H__
|
||||
|
||||
struct dc;
|
||||
|
||||
void dcn302_hw_sequencer_construct(struct dc *dc);
|
||||
|
||||
#endif /* __DC_DCN302_INIT_H__ */
|
1619
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.c
Normal file
1619
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.c
Normal file
File diff suppressed because it is too large
Load diff
33
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.h
Normal file
33
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* 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 _DCN302_RESOURCE_H_
|
||||
#define _DCN302_RESOURCE_H_
|
||||
|
||||
#include "core_types.h"
|
||||
|
||||
struct resource_pool *dcn302_create_resource_pool(const struct dc_init_data *init_data, struct dc *dc);
|
||||
|
||||
#endif /* _DCN302_RESOURCE_H_ */
|
|
@ -116,6 +116,9 @@ bool dal_hw_factory_init(
|
|||
case DCN_VERSION_3_0:
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_01)
|
||||
case DCN_VERSION_3_01:
|
||||
#endif
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
case DCN_VERSION_3_02:
|
||||
#endif
|
||||
dal_hw_factory_dcn30_init(factory);
|
||||
return true;
|
||||
|
|
|
@ -111,6 +111,9 @@ bool dal_hw_translate_init(
|
|||
case DCN_VERSION_3_0:
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_01)
|
||||
case DCN_VERSION_3_01:
|
||||
#endif
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
case DCN_VERSION_3_02:
|
||||
#endif
|
||||
dal_hw_translate_dcn30_init(translate);
|
||||
return true;
|
||||
|
|
|
@ -104,3 +104,13 @@ AMD_DAL_IRQ_DCN3 = $(addprefix $(AMDDALPATH)/dc/irq/dcn30/,$(IRQ_DCN3))
|
|||
|
||||
AMD_DISPLAY_FILES += $(AMD_DAL_IRQ_DCN3)
|
||||
endif
|
||||
ifdef CONFIG_DRM_AMD_DC_DCN3_02
|
||||
###############################################################################
|
||||
# DCN 3_02
|
||||
###############################################################################
|
||||
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)
|
||||
endif
|
||||
|
|
344
drivers/gpu/drm/amd/display/dc/irq/dcn302/irq_service_dcn302.c
Normal file
344
drivers/gpu/drm/amd/display/dc/irq/dcn302/irq_service_dcn302.c
Normal file
|
@ -0,0 +1,344 @@
|
|||
/*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#include "dm_services.h"
|
||||
|
||||
#include "irq_service_dcn302.h"
|
||||
|
||||
#include "../dce110/irq_service_dce110.h"
|
||||
|
||||
#include "dimgrey_cavefish_ip_offset.h"
|
||||
#include "dcn/dcn_3_0_0_offset.h"
|
||||
#include "dcn/dcn_3_0_0_sh_mask.h"
|
||||
|
||||
#include "ivsrcid/dcn/irqsrcs_dcn_1_0.h"
|
||||
|
||||
static enum dc_irq_source to_dal_irq_source_dcn302(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__DC_D3_OTG_VSTARTUP:
|
||||
return DC_IRQ_SOURCE_VBLANK3;
|
||||
case DCN_1_0__SRCID__DC_D4_OTG_VSTARTUP:
|
||||
return DC_IRQ_SOURCE_VBLANK4;
|
||||
case DCN_1_0__SRCID__DC_D5_OTG_VSTARTUP:
|
||||
return DC_IRQ_SOURCE_VBLANK5;
|
||||
case DCN_1_0__SRCID__DC_D6_OTG_VSTARTUP:
|
||||
return DC_IRQ_SOURCE_VBLANK6;
|
||||
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__HUBP2_FLIP_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_PFLIP3;
|
||||
case DCN_1_0__SRCID__HUBP3_FLIP_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_PFLIP4;
|
||||
case DCN_1_0__SRCID__HUBP4_FLIP_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_PFLIP5;
|
||||
case DCN_1_0__SRCID__HUBP5_FLIP_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_PFLIP6;
|
||||
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__OTG2_IHC_V_UPDATE_NO_LOCK_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_VUPDATE3;
|
||||
case DCN_1_0__SRCID__OTG3_IHC_V_UPDATE_NO_LOCK_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_VUPDATE4;
|
||||
case DCN_1_0__SRCID__OTG4_IHC_V_UPDATE_NO_LOCK_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_VUPDATE5;
|
||||
case DCN_1_0__SRCID__OTG5_IHC_V_UPDATE_NO_LOCK_INTERRUPT:
|
||||
return DC_IRQ_SOURCE_VUPDATE6;
|
||||
|
||||
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_HPD3_INT:
|
||||
return DC_IRQ_SOURCE_HPD3;
|
||||
case DCN_1_0__CTXID__DC_HPD4_INT:
|
||||
return DC_IRQ_SOURCE_HPD4;
|
||||
case DCN_1_0__CTXID__DC_HPD5_INT:
|
||||
return DC_IRQ_SOURCE_HPD5;
|
||||
case DCN_1_0__CTXID__DC_HPD6_INT:
|
||||
return DC_IRQ_SOURCE_HPD6;
|
||||
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;
|
||||
case DCN_1_0__CTXID__DC_HPD3_RX_INT:
|
||||
return DC_IRQ_SOURCE_HPD3RX;
|
||||
case DCN_1_0__CTXID__DC_HPD4_RX_INT:
|
||||
return DC_IRQ_SOURCE_HPD4RX;
|
||||
case DCN_1_0__CTXID__DC_HPD5_RX_INT:
|
||||
return DC_IRQ_SOURCE_HPD5RX;
|
||||
case DCN_1_0__CTXID__DC_HPD6_RX_INT:
|
||||
return DC_IRQ_SOURCE_HPD6RX;
|
||||
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_dcn302[DAL_IRQ_SOURCES_NUMBER] = {
|
||||
[DC_IRQ_SOURCE_INVALID] = dummy_irq_entry(),
|
||||
hpd_int_entry(0),
|
||||
hpd_int_entry(1),
|
||||
hpd_int_entry(2),
|
||||
hpd_int_entry(3),
|
||||
hpd_int_entry(4),
|
||||
hpd_rx_int_entry(0),
|
||||
hpd_rx_int_entry(1),
|
||||
hpd_rx_int_entry(2),
|
||||
hpd_rx_int_entry(3),
|
||||
hpd_rx_int_entry(4),
|
||||
i2c_int_entry(1),
|
||||
i2c_int_entry(2),
|
||||
i2c_int_entry(3),
|
||||
i2c_int_entry(4),
|
||||
i2c_int_entry(5),
|
||||
dp_sink_int_entry(1),
|
||||
dp_sink_int_entry(2),
|
||||
dp_sink_int_entry(3),
|
||||
dp_sink_int_entry(4),
|
||||
dp_sink_int_entry(5),
|
||||
[DC_IRQ_SOURCE_TIMER] = dummy_irq_entry(),
|
||||
pflip_int_entry(0),
|
||||
pflip_int_entry(1),
|
||||
pflip_int_entry(2),
|
||||
pflip_int_entry(3),
|
||||
pflip_int_entry(4),
|
||||
[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_underflow_int_entry(3),
|
||||
dc_underflow_int_entry(4),
|
||||
dc_underflow_int_entry(5),
|
||||
[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),
|
||||
vupdate_no_lock_int_entry(2),
|
||||
vupdate_no_lock_int_entry(3),
|
||||
vupdate_no_lock_int_entry(4),
|
||||
vblank_int_entry(0),
|
||||
vblank_int_entry(1),
|
||||
vblank_int_entry(2),
|
||||
vblank_int_entry(3),
|
||||
vblank_int_entry(4),
|
||||
};
|
||||
|
||||
static const struct irq_service_funcs irq_service_funcs_dcn302 = {
|
||||
.to_dal_irq_source = to_dal_irq_source_dcn302
|
||||
};
|
||||
|
||||
static void dcn302_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_dcn302;
|
||||
irq_service->funcs = &irq_service_funcs_dcn302;
|
||||
}
|
||||
|
||||
struct irq_service *dal_irq_service_dcn302_create(struct irq_service_init_data *init_data)
|
||||
{
|
||||
struct irq_service *irq_service = kzalloc(sizeof(*irq_service), GFP_KERNEL);
|
||||
|
||||
if (!irq_service)
|
||||
return NULL;
|
||||
|
||||
dcn302_irq_construct(irq_service, init_data);
|
||||
return irq_service;
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* 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 __DAL_IRQ_SERVICE_DCN302_H__
|
||||
#define __DAL_IRQ_SERVICE_DCN302_H__
|
||||
|
||||
#include "../irq_service.h"
|
||||
|
||||
struct irq_service *dal_irq_service_dcn302_create(struct irq_service_init_data *init_data);
|
||||
|
||||
#endif /* __DAL_IRQ_SERVICE_DCN302_H__ */
|
|
@ -93,6 +93,9 @@ enum dmub_asic {
|
|||
#endif
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_01
|
||||
DMUB_ASIC_DCN301,
|
||||
#endif
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_02
|
||||
DMUB_ASIC_DCN302,
|
||||
#endif
|
||||
DMUB_ASIC_MAX,
|
||||
};
|
||||
|
|
|
@ -24,6 +24,9 @@ DMUB = dmub_srv.o dmub_reg.o dmub_dcn20.o dmub_dcn21.o
|
|||
ifdef CONFIG_DRM_AMD_DC_DCN3_0
|
||||
DMUB += dmub_dcn30.o dmub_dcn301.o
|
||||
endif
|
||||
ifdef CONFIG_DRM_AMD_DC_DCN3_02
|
||||
DMUB += dmub_dcn302.o
|
||||
endif
|
||||
|
||||
AMD_DAL_DMUB = $(addprefix $(AMDDALPATH)/dmub/src/,$(DMUB))
|
||||
|
||||
|
|
55
drivers/gpu/drm/amd/display/dmub/src/dmub_dcn302.c
Normal file
55
drivers/gpu/drm/amd/display/dmub/src/dmub_dcn302.c
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#include "../dmub_srv.h"
|
||||
#include "dmub_reg.h"
|
||||
#include "dmub_dcn302.h"
|
||||
|
||||
#include "dimgrey_cavefish_ip_offset.h"
|
||||
#include "dcn/dcn_3_0_0_offset.h"
|
||||
#include "dcn/dcn_3_0_0_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_dcn302_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_dcn302.h
Normal file
37
drivers/gpu/drm/amd/display/dmub/src/dmub_dcn302.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_DCN302_H_
|
||||
#define _DMUB_DCN302_H_
|
||||
|
||||
#include "dmub_dcn20.h"
|
||||
|
||||
/* Registers. */
|
||||
|
||||
extern const struct dmub_srv_common_regs dmub_srv_dcn302_regs;
|
||||
|
||||
/* Hardware functions. */
|
||||
|
||||
#endif /* _DMUB_DCN302_H_ */
|
|
@ -33,6 +33,9 @@
|
|||
#ifdef CONFIG_DRM_AMD_DC_DCN3_01
|
||||
#include "dmub_dcn301.h"
|
||||
#endif
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_02
|
||||
#include "dmub_dcn302.h"
|
||||
#endif
|
||||
#include "os_types.h"
|
||||
/*
|
||||
* Note: the DMUB service is standalone. No additional headers should be
|
||||
|
@ -144,6 +147,9 @@ static bool dmub_srv_hw_setup(struct dmub_srv *dmub, enum dmub_asic asic)
|
|||
#endif
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_01
|
||||
case DMUB_ASIC_DCN301:
|
||||
#endif
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_02
|
||||
case DMUB_ASIC_DCN302:
|
||||
#endif
|
||||
dmub->regs = &dmub_srv_dcn20_regs;
|
||||
|
||||
|
@ -183,6 +189,14 @@ static bool dmub_srv_hw_setup(struct dmub_srv *dmub, enum dmub_asic asic)
|
|||
funcs->setup_windows = dmub_dcn30_setup_windows;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_DRM_AMD_DC_DCN3_02
|
||||
if (asic == DMUB_ASIC_DCN302) {
|
||||
dmub->regs = &dmub_srv_dcn302_regs;
|
||||
|
||||
funcs->backdoor_load = dmub_dcn30_backdoor_load;
|
||||
funcs->setup_windows = dmub_dcn30_setup_windows;
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -195,6 +195,7 @@ enum {
|
|||
NV_NAVI12_P_A0 = 10,
|
||||
NV_NAVI14_M_A0 = 20,
|
||||
NV_SIENNA_CICHLID_P_A0 = 40,
|
||||
NV_DIMGREY_CAVEFISH_P_A0 = 60,
|
||||
NV_UNKNOWN = 0xFF
|
||||
};
|
||||
|
||||
|
@ -203,7 +204,10 @@ 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))
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_0)
|
||||
#define ASICREV_IS_SIENNA_CICHLID_P(eChipRev) ((eChipRev >= NV_SIENNA_CICHLID_P_A0))
|
||||
#define ASICREV_IS_SIENNA_CICHLID_P(eChipRev) ((eChipRev >= NV_SIENNA_CICHLID_P_A0) && (eChipRev < NV_DIMGREY_CAVEFISH_P_A0))
|
||||
#endif
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
#define ASICREV_IS_DIMGREY_CAVEFISH_P(eChipRev) ((eChipRev >= NV_DIMGREY_CAVEFISH_P_A0) && (eChipRev < NV_UNKNOWN))
|
||||
#endif
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_01)
|
||||
#define FAMILY_VGH 144
|
||||
|
|
|
@ -56,6 +56,9 @@ enum dce_version {
|
|||
#endif
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_01)
|
||||
DCN_VERSION_3_01,
|
||||
#endif
|
||||
#if defined(CONFIG_DRM_AMD_DC_DCN3_02)
|
||||
DCN_VERSION_3_02,
|
||||
#endif
|
||||
DCN_VERSION_MAX
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue