Commit c9ef081d authored by Yue Hin Lau's avatar Yue Hin Lau Committed by Alex Deucher

drm/amd/display: create new structure for hubbub

instantiating new structure hubbub in resource.c
Signed-off-by: default avatarYue Hin Lau <Yuehin.Lau@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Acked-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent bcb40a67
...@@ -28,6 +28,136 @@ ...@@ -28,6 +28,136 @@
#include "core_types.h" #include "core_types.h"
#define HUBHUB_REG_LIST_DCN()\
SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A),\
SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A),\
SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A),\
SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B),\
SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B),\
SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B),\
SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C),\
SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C),\
SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C),\
SR(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D),\
SR(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D),\
SR(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D),\
SR(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL),\
SR(DCHUBBUB_ARB_DRAM_STATE_CNTL),\
SR(DCHUBBUB_ARB_SAT_LEVEL),\
SR(DCHUBBUB_ARB_DF_REQ_OUTSTAND),\
SR(DCHUBBUB_GLOBAL_TIMER_CNTL), \
SR(DCHUBBUB_TEST_DEBUG_INDEX), \
SR(DCHUBBUB_TEST_DEBUG_DATA)
#define HUBBUB_SR_WATERMARK_REG_LIST()\
SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A),\
SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A),\
SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B),\
SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B),\
SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C),\
SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C),\
SR(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D),\
SR(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D)
#define HUBBUB_REG_LIST_DCN10(id)\
HUBHUB_REG_LIST_DCN(), \
HUBBUB_SR_WATERMARK_REG_LIST(), \
SR(DCHUBBUB_SDPIF_FB_TOP),\
SR(DCHUBBUB_SDPIF_FB_BASE),\
SR(DCHUBBUB_SDPIF_FB_OFFSET),\
SR(DCHUBBUB_SDPIF_AGP_BASE),\
SR(DCHUBBUB_SDPIF_AGP_BOT),\
SR(DCHUBBUB_SDPIF_AGP_TOP)
struct dcn_hubbub_registers {
uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A;
uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A;
uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A;
uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A;
uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A;
uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B;
uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B;
uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B;
uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B;
uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B;
uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C;
uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C;
uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C;
uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C;
uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C;
uint32_t DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D;
uint32_t DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D;
uint32_t DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D;
uint32_t DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D;
uint32_t DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D;
uint32_t DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL;
uint32_t DCHUBBUB_ARB_SAT_LEVEL;
uint32_t DCHUBBUB_ARB_DF_REQ_OUTSTAND;
uint32_t DCHUBBUB_GLOBAL_TIMER_CNTL;
uint32_t DCHUBBUB_ARB_DRAM_STATE_CNTL;
uint32_t DCHUBBUB_TEST_DEBUG_INDEX;
uint32_t DCHUBBUB_TEST_DEBUG_DATA;
uint32_t DCHUBBUB_SDPIF_FB_TOP;
uint32_t DCHUBBUB_SDPIF_FB_BASE;
uint32_t DCHUBBUB_SDPIF_FB_OFFSET;
uint32_t DCHUBBUB_SDPIF_AGP_BASE;
uint32_t DCHUBBUB_SDPIF_AGP_BOT;
uint32_t DCHUBBUB_SDPIF_AGP_TOP;
uint32_t DCHUBBUB_CRC_CTRL;
};
/* set field name */
#define HUBBUB_SF(reg_name, field_name, post_fix)\
.field_name = reg_name ## __ ## field_name ## post_fix
#define HUBBUB_MASK_SH_LIST_DCN(mask_sh)\
HUBBUB_SF(DCHUBBUB_GLOBAL_TIMER_CNTL, DCHUBBUB_GLOBAL_TIMER_ENABLE, mask_sh), \
HUBBUB_SF(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL, DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST, mask_sh), \
HUBBUB_SF(DCHUBBUB_ARB_WATERMARK_CHANGE_CNTL, DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE, mask_sh), \
HUBBUB_SF(DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_VALUE, mask_sh), \
HUBBUB_SF(DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_ENABLE, mask_sh), \
HUBBUB_SF(DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_PSTATE_CHANGE_FORCE_VALUE, mask_sh), \
HUBBUB_SF(DCHUBBUB_ARB_DRAM_STATE_CNTL, DCHUBBUB_ARB_ALLOW_PSTATE_CHANGE_FORCE_ENABLE, mask_sh), \
HUBBUB_SF(DCHUBBUB_ARB_SAT_LEVEL, DCHUBBUB_ARB_SAT_LEVEL, mask_sh), \
HUBBUB_SF(DCHUBBUB_ARB_DF_REQ_OUTSTAND, DCHUBBUB_ARB_MIN_REQ_OUTSTAND, mask_sh)
#define HUBBUB_MASK_SH_LIST_DCN10(mask_sh)\
HUBBUB_MASK_SH_LIST_DCN(mask_sh), \
HUBBUB_SF(DCHUBBUB_SDPIF_FB_TOP, SDPIF_FB_TOP, mask_sh), \
HUBBUB_SF(DCHUBBUB_SDPIF_FB_BASE, SDPIF_FB_BASE, mask_sh), \
HUBBUB_SF(DCHUBBUB_SDPIF_FB_OFFSET, SDPIF_FB_OFFSET, mask_sh), \
HUBBUB_SF(DCHUBBUB_SDPIF_AGP_BASE, SDPIF_AGP_BASE, mask_sh), \
HUBBUB_SF(DCHUBBUB_SDPIF_AGP_BOT, SDPIF_AGP_BOT, mask_sh), \
HUBBUB_SF(DCHUBBUB_SDPIF_AGP_TOP, SDPIF_AGP_TOP, mask_sh)
#define DCN_HUBBUB_REG_FIELD_LIST(type) \
type DCHUBBUB_GLOBAL_TIMER_ENABLE; \
type DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST;\
type DCHUBBUB_ARB_WATERMARK_CHANGE_DONE_INTERRUPT_DISABLE;\
type DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_VALUE;\
type DCHUBBUB_ARB_ALLOW_SELF_REFRESH_FORCE_ENABLE;\
type DCHUBBUB_ARB_ALLOW_PSTATE_CHANGE_FORCE_VALUE;\
type DCHUBBUB_ARB_ALLOW_PSTATE_CHANGE_FORCE_ENABLE;\
type DCHUBBUB_ARB_SAT_LEVEL;\
type DCHUBBUB_ARB_MIN_REQ_OUTSTAND;\
type DCHUBBUB_GLOBAL_TIMER_REFDIV;\
type SDPIF_FB_TOP;\
type SDPIF_FB_BASE;\
type SDPIF_FB_OFFSET;\
type SDPIF_AGP_BASE;\
type SDPIF_AGP_BOT;\
type SDPIF_AGP_TOP
struct dcn_hubbub_shift {
DCN_HUBBUB_REG_FIELD_LIST(uint8_t);
};
struct dcn_hubbub_mask {
DCN_HUBBUB_REG_FIELD_LIST(uint32_t);
};
struct dc; struct dc;
struct dcn_hubbub_wm_set { struct dcn_hubbub_wm_set {
...@@ -43,25 +173,45 @@ struct dcn_hubbub_wm { ...@@ -43,25 +173,45 @@ struct dcn_hubbub_wm {
struct dcn_hubbub_wm_set sets[4]; struct dcn_hubbub_wm_set sets[4];
}; };
void dcn10_update_dchub( struct hubbub_funcs {
struct dce_hwseq *hws, void (*update_dchub)(
struct hubbub *hubbub,
struct dchub_init_data *dh_data);
};
struct hubbub {
const struct hubbub_funcs *funcs;
struct dc_context *ctx;
const struct dcn_hubbub_registers *regs;
const struct dcn_hubbub_shift *shifts;
const struct dcn_hubbub_mask *masks;
};
void hubbub1_update_dchub(
struct hubbub *hubbub,
struct dchub_init_data *dh_data); struct dchub_init_data *dh_data);
void dcn10_log_hw_state( void dcn10_log_hw_state(
struct dc *dc); struct dc *dc);
void verify_allow_pstate_change_high( void verify_allow_pstate_change_high(
struct dce_hwseq *hws); struct hubbub *hubbub);
void program_watermarks( void program_watermarks(
struct dce_hwseq *hws, struct hubbub *hubbub,
struct dcn_watermark_set *watermarks, struct dcn_watermark_set *watermarks,
unsigned int refclk_mhz); unsigned int refclk_mhz);
void toggle_watermark_change_req( void toggle_watermark_change_req(
struct dce_hwseq *hws); struct hubbub *hubbub);
void dcn10_hubbub_wm_read_state(struct dce_hwseq *hws, void hubbub1_wm_read_state(struct hubbub *hubbub,
struct dcn_hubbub_wm *wm); struct dcn_hubbub_wm *wm);
void hubbub1_construct(struct hubbub *hubbub,
struct dc_context *ctx,
const struct dcn_hubbub_registers *hubbub_regs,
const struct dcn_hubbub_shift *hubbub_shift,
const struct dcn_hubbub_mask *hubbub_mask);
#endif #endif
...@@ -87,7 +87,7 @@ void dcn10_log_hubbub_state(struct dc *dc) ...@@ -87,7 +87,7 @@ void dcn10_log_hubbub_state(struct dc *dc)
struct dcn_hubbub_wm wm; struct dcn_hubbub_wm wm;
int i; int i;
dcn10_hubbub_wm_read_state(dc->hwseq, &wm); hubbub1_wm_read_state(dc->res_pool->hubbub, &wm);
DTN_INFO("HUBBUB WM: \t data_urgent \t pte_meta_urgent \t " DTN_INFO("HUBBUB WM: \t data_urgent \t pte_meta_urgent \t "
"sr_enter \t sr_exit \t dram_clk_change \n"); "sr_enter \t sr_exit \t dram_clk_change \n");
...@@ -571,10 +571,10 @@ static void plane_atomic_disconnect(struct dc *dc, ...@@ -571,10 +571,10 @@ static void plane_atomic_disconnect(struct dc *dc,
return; return;
if (dc->debug.sanity_checks) if (dc->debug.sanity_checks)
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
hubp->funcs->dcc_control(hubp, false, false); hubp->funcs->dcc_control(hubp, false, false);
if (dc->debug.sanity_checks) if (dc->debug.sanity_checks)
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
mpc->funcs->remove(mpc, &(dc->res_pool->opps[opp_id]->mpc_tree), mpc->funcs->remove(mpc, &(dc->res_pool->opps[opp_id]->mpc_tree),
dc->res_pool->opps[opp_id]->inst, fe_idx); dc->res_pool->opps[opp_id]->inst, fe_idx);
...@@ -602,7 +602,7 @@ static void plane_atomic_disable(struct dc *dc, ...@@ -602,7 +602,7 @@ static void plane_atomic_disable(struct dc *dc,
hubp->funcs->set_blank(hubp, true); hubp->funcs->set_blank(hubp, true);
if (dc->debug.sanity_checks) if (dc->debug.sanity_checks)
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
REG_UPDATE(HUBP_CLK_CNTL[fe_idx], REG_UPDATE(HUBP_CLK_CNTL[fe_idx],
HUBP_CLOCK_ENABLE, 0); HUBP_CLOCK_ENABLE, 0);
...@@ -614,7 +614,7 @@ static void plane_atomic_disable(struct dc *dc, ...@@ -614,7 +614,7 @@ static void plane_atomic_disable(struct dc *dc,
OPP_PIPE_CLOCK_EN, 0); OPP_PIPE_CLOCK_EN, 0);
if (dc->debug.sanity_checks) if (dc->debug.sanity_checks)
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
static void reset_front_end( static void reset_front_end(
...@@ -638,7 +638,7 @@ static void reset_front_end( ...@@ -638,7 +638,7 @@ static void reset_front_end(
tg->funcs->unlock(tg); tg->funcs->unlock(tg);
if (dc->debug.sanity_checks) if (dc->debug.sanity_checks)
verify_allow_pstate_change_high(hws); verify_allow_pstate_change_high(dc->res_pool->hubbub);
if (tg->ctx->dce_environment != DCE_ENV_FPGA_MAXIMUS) if (tg->ctx->dce_environment != DCE_ENV_FPGA_MAXIMUS)
REG_WAIT(OTG_GLOBAL_SYNC_STATUS[tg->inst], REG_WAIT(OTG_GLOBAL_SYNC_STATUS[tg->inst],
...@@ -670,7 +670,7 @@ static void dcn10_power_down_fe(struct dc *dc, int fe_idx) ...@@ -670,7 +670,7 @@ static void dcn10_power_down_fe(struct dc *dc, int fe_idx)
"Power gated front end %d\n", fe_idx); "Power gated front end %d\n", fe_idx);
if (dc->debug.sanity_checks) if (dc->debug.sanity_checks)
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
static void dcn10_init_hw(struct dc *dc) static void dcn10_init_hw(struct dc *dc)
...@@ -1243,7 +1243,7 @@ static void dcn10_pipe_control_lock( ...@@ -1243,7 +1243,7 @@ static void dcn10_pipe_control_lock(
return; return;
if (dc->debug.sanity_checks) if (dc->debug.sanity_checks)
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
if (lock) if (lock)
pipe->stream_res.tg->funcs->lock(pipe->stream_res.tg); pipe->stream_res.tg->funcs->lock(pipe->stream_res.tg);
...@@ -1251,7 +1251,7 @@ static void dcn10_pipe_control_lock( ...@@ -1251,7 +1251,7 @@ static void dcn10_pipe_control_lock(
pipe->stream_res.tg->funcs->unlock(pipe->stream_res.tg); pipe->stream_res.tg->funcs->unlock(pipe->stream_res.tg);
if (dc->debug.sanity_checks) if (dc->debug.sanity_checks)
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
static bool wait_for_reset_trigger_to_occur( static bool wait_for_reset_trigger_to_occur(
...@@ -1451,7 +1451,7 @@ static void dcn10_power_on_fe( ...@@ -1451,7 +1451,7 @@ static void dcn10_power_on_fe(
struct dce_hwseq *hws = dc->hwseq; struct dce_hwseq *hws = dc->hwseq;
if (dc->debug.sanity_checks) { if (dc->debug.sanity_checks) {
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
power_on_plane(dc->hwseq, power_on_plane(dc->hwseq,
...@@ -1503,7 +1503,7 @@ static void dcn10_power_on_fe( ...@@ -1503,7 +1503,7 @@ static void dcn10_power_on_fe(
} }
if (dc->debug.sanity_checks) { if (dc->debug.sanity_checks) {
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
} }
...@@ -1864,11 +1864,11 @@ static void program_all_pipe_in_tree( ...@@ -1864,11 +1864,11 @@ static void program_all_pipe_in_tree(
* this OTG. this is done only one time. * this OTG. this is done only one time.
*/ */
/* watermark is for all pipes */ /* watermark is for all pipes */
program_watermarks(dc->hwseq, &context->bw.dcn.watermarks, ref_clk_mhz); program_watermarks(dc->res_pool->hubbub, &context->bw.dcn.watermarks, ref_clk_mhz);
if (dc->debug.sanity_checks) { if (dc->debug.sanity_checks) {
/* pstate stuck check after watermark update */ /* pstate stuck check after watermark update */
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
pipe_ctx->stream_res.tg->funcs->lock(pipe_ctx->stream_res.tg); pipe_ctx->stream_res.tg->funcs->lock(pipe_ctx->stream_res.tg);
...@@ -1899,7 +1899,7 @@ static void program_all_pipe_in_tree( ...@@ -1899,7 +1899,7 @@ static void program_all_pipe_in_tree(
* DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST is owned by SMU we should have * DCHUBBUB_ARB_WATERMARK_CHANGE_REQUEST is owned by SMU we should have
* both driver and fw accessing same register * both driver and fw accessing same register
*/ */
toggle_watermark_change_req(dc->hwseq); toggle_watermark_change_req(dc->res_pool->hubbub);
update_dchubp_dpp(dc, pipe_ctx, context); update_dchubp_dpp(dc, pipe_ctx, context);
...@@ -1922,7 +1922,7 @@ static void program_all_pipe_in_tree( ...@@ -1922,7 +1922,7 @@ static void program_all_pipe_in_tree(
if (dc->debug.sanity_checks) { if (dc->debug.sanity_checks) {
/* pstate stuck check after each pipe is programmed */ /* pstate stuck check after each pipe is programmed */
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
if (pipe_ctx->bottom_pipe != NULL && pipe_ctx->bottom_pipe != pipe_ctx) if (pipe_ctx->bottom_pipe != NULL && pipe_ctx->bottom_pipe != pipe_ctx)
...@@ -1989,7 +1989,7 @@ static void dcn10_apply_ctx_for_surface( ...@@ -1989,7 +1989,7 @@ static void dcn10_apply_ctx_for_surface(
int i, be_idx; int i, be_idx;
if (dc->debug.sanity_checks) if (dc->debug.sanity_checks)
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
be_idx = -1; be_idx = -1;
for (i = 0; i < dc->res_pool->pipe_count; i++) { for (i = 0; i < dc->res_pool->pipe_count; i++) {
...@@ -2072,7 +2072,7 @@ static void dcn10_apply_ctx_for_surface( ...@@ -2072,7 +2072,7 @@ static void dcn10_apply_ctx_for_surface(
hubp->funcs->hubp_disconnect(hubp); hubp->funcs->hubp_disconnect(hubp);
if (dc->debug.sanity_checks) if (dc->debug.sanity_checks)
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
old_pipe_ctx->top_pipe = NULL; old_pipe_ctx->top_pipe = NULL;
old_pipe_ctx->bottom_pipe = NULL; old_pipe_ctx->bottom_pipe = NULL;
...@@ -2150,7 +2150,7 @@ static void dcn10_apply_ctx_for_surface( ...@@ -2150,7 +2150,7 @@ static void dcn10_apply_ctx_for_surface(
); );
if (dc->debug.sanity_checks) if (dc->debug.sanity_checks)
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
static void dcn10_set_bandwidth( static void dcn10_set_bandwidth(
...@@ -2164,7 +2164,7 @@ static void dcn10_set_bandwidth( ...@@ -2164,7 +2164,7 @@ static void dcn10_set_bandwidth(
struct pp_smu_funcs_rv *pp_smu = dc->res_pool->pp_smu; struct pp_smu_funcs_rv *pp_smu = dc->res_pool->pp_smu;
if (dc->debug.sanity_checks) { if (dc->debug.sanity_checks) {
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment))
...@@ -2220,7 +2220,7 @@ static void dcn10_set_bandwidth( ...@@ -2220,7 +2220,7 @@ static void dcn10_set_bandwidth(
dcn10_pplib_apply_display_requirements(dc, context); dcn10_pplib_apply_display_requirements(dc, context);
if (dc->debug.sanity_checks) { if (dc->debug.sanity_checks) {
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
/* need to fix this function. not doing the right thing here */ /* need to fix this function. not doing the right thing here */
...@@ -2345,7 +2345,7 @@ static void dcn10_wait_for_mpcc_disconnect( ...@@ -2345,7 +2345,7 @@ static void dcn10_wait_for_mpcc_disconnect(
int i; int i;
if (dc->debug.sanity_checks) { if (dc->debug.sanity_checks) {
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
if (!pipe_ctx->stream_res.opp) if (!pipe_ctx->stream_res.opp)
...@@ -2363,7 +2363,7 @@ static void dcn10_wait_for_mpcc_disconnect( ...@@ -2363,7 +2363,7 @@ static void dcn10_wait_for_mpcc_disconnect(
} }
if (dc->debug.sanity_checks) { if (dc->debug.sanity_checks) {
verify_allow_pstate_change_high(dc->hwseq); verify_allow_pstate_change_high(dc->res_pool->hubbub);
} }
} }
...@@ -2407,7 +2407,6 @@ static const struct hw_sequencer_funcs dcn10_funcs = { ...@@ -2407,7 +2407,6 @@ static const struct hw_sequencer_funcs dcn10_funcs = {
.apply_ctx_for_surface = dcn10_apply_ctx_for_surface, .apply_ctx_for_surface = dcn10_apply_ctx_for_surface,
.set_plane_config = set_plane_config, .set_plane_config = set_plane_config,
.update_plane_addr = dcn10_update_plane_addr, .update_plane_addr = dcn10_update_plane_addr,
.update_dchub = dcn10_update_dchub,
.update_pending_status = dcn10_update_pending_status, .update_pending_status = dcn10_update_pending_status,
.set_input_transfer_func = dcn10_set_input_transfer_func, .set_input_transfer_func = dcn10_set_input_transfer_func,
.set_output_transfer_func = dcn10_set_output_transfer_func, .set_output_transfer_func = dcn10_set_output_transfer_func,
......
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
#include "dce110/dce110_resource.h" #include "dce110/dce110_resource.h"
#include "dce112/dce112_resource.h" #include "dce112/dce112_resource.h"
#include "dcn10_hubp.h" #include "dcn10_hubp.h"
#include "dcn10_hubbub.h"
#include "vega10/soc15ip.h" #include "vega10/soc15ip.h"
...@@ -388,6 +389,19 @@ static const struct dcn_mi_mask hubp_mask = { ...@@ -388,6 +389,19 @@ static const struct dcn_mi_mask hubp_mask = {
HUBP_MASK_SH_LIST_DCN10(_MASK) HUBP_MASK_SH_LIST_DCN10(_MASK)
}; };
static const struct dcn_hubbub_registers hubbub_reg = {
HUBBUB_REG_LIST_DCN10(0)
};
static const struct dcn_hubbub_shift hubbub_shift = {
HUBBUB_MASK_SH_LIST_DCN10(__SHIFT)
};
static const struct dcn_hubbub_mask hubbub_mask = {
HUBBUB_MASK_SH_LIST_DCN10(_MASK)
};
#define clk_src_regs(index, pllid)\ #define clk_src_regs(index, pllid)\
[index] = {\ [index] = {\
CS_COMMON_REG_LIST_DCN1_0(index, pllid),\ CS_COMMON_REG_LIST_DCN1_0(index, pllid),\
...@@ -519,6 +533,22 @@ static struct mpc *dcn10_mpc_create(struct dc_context *ctx) ...@@ -519,6 +533,22 @@ static struct mpc *dcn10_mpc_create(struct dc_context *ctx)
return &mpc10->base; return &mpc10->base;
} }
static struct hubbub *dcn10_hubbub_create(struct dc_context *ctx)
{
struct hubbub *hubbub = kzalloc(sizeof(struct hubbub),
GFP_KERNEL);
if (!hubbub)
return NULL;
hubbub1_construct(hubbub, ctx,
&hubbub_reg,
&hubbub_shift,
&hubbub_mask);
return hubbub;
}
static struct timing_generator *dcn10_timing_generator_create( static struct timing_generator *dcn10_timing_generator_create(
struct dc_context *ctx, struct dc_context *ctx,
uint32_t instance) uint32_t instance)
...@@ -1401,6 +1431,7 @@ static bool construct( ...@@ -1401,6 +1431,7 @@ static bool construct(
dm_error("DC: failed to create tg!\n"); dm_error("DC: failed to create tg!\n");
goto fail; goto fail;
} }
/* check next valid pipe */ /* check next valid pipe */
j++; j++;
} }
...@@ -1421,6 +1452,13 @@ static bool construct( ...@@ -1421,6 +1452,13 @@ static bool construct(
goto fail; goto fail;
} }
pool->base.hubbub = dcn10_hubbub_create(ctx);
if (pool->base.mpc == NULL) {
BREAK_TO_DEBUGGER();
dm_error("DC: failed to create mpc!\n");
goto fail;
}
if (!resource_construct(num_virtual_links, dc, &pool->base, if (!resource_construct(num_virtual_links, dc, &pool->base,
(!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ? (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment) ?
&res_create_funcs : &res_create_maximus_funcs))) &res_create_funcs : &res_create_maximus_funcs)))
......
...@@ -139,6 +139,7 @@ struct resource_pool { ...@@ -139,6 +139,7 @@ struct resource_pool {
struct timing_generator *timing_generators[MAX_PIPES]; struct timing_generator *timing_generators[MAX_PIPES];
struct stream_encoder *stream_enc[MAX_PIPES * 2]; struct stream_encoder *stream_enc[MAX_PIPES * 2];
struct hubbub *hubbub;
struct mpc *mpc; struct mpc *mpc;
struct pp_smu_funcs_rv *pp_smu; struct pp_smu_funcs_rv *pp_smu;
struct pp_smu_display_requirement_rv pp_smu_req; struct pp_smu_display_requirement_rv pp_smu_req;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment