From: Dave Airlie <airlied@xxxxxxxxxx> As before, convert the crtc_id to a graphics object id. Signed-off-by: Dave Airlie <airlied@xxxxxxxxxx> --- drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 10 ++--- drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 2 +- drivers/gpu/drm/amd/amdgpu/atombios_crtc.c | 55 ++++++++++++++------------ drivers/gpu/drm/amd/amdgpu/atombios_crtc.h | 2 +- drivers/gpu/drm/amd/amdgpu/atombios_encoders.c | 8 ++-- drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 31 ++++++++------- drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 31 ++++++++------- drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 33 ++++++++-------- 11 files changed, 93 insertions(+), 85 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c index 8b653f2..11aa704 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c @@ -828,7 +828,7 @@ static int amdgpu_cgs_get_active_displays_info(struct cgs_device *cgs_device, &ddev->mode_config.crtc_list, head) { amdgpu_crtc = to_amdgpu_crtc(crtc); if (crtc->enabled) { - info->active_display_mask |= (1 << amdgpu_crtc->crtc_id); + info->active_display_mask |= (1 << amdgpu_crtc->crtc_object_id.id); info->display_count++; } if (mode_info != NULL && diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c index 448b211..d80d2dd 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c @@ -140,7 +140,7 @@ static void amdgpu_flip_work_func(struct work_struct *__work) DRM_DEBUG_DRIVER("crtc:%d[%p], pflip_stat:AMDGPU_FLIP_SUBMITTED, work: %p,\n", - amdgpuCrtc->crtc_id, amdgpuCrtc, work); + amdgpuCrtc->crtc_object_id.id, amdgpuCrtc, work); } @@ -196,7 +196,7 @@ int amdgpu_crtc_page_flip(struct drm_crtc *crtc, work->event = event; work->adev = adev; - work->crtc_id = amdgpu_crtc->crtc_id; + work->crtc_id = amdgpu_crtc->crtc_object_id.id; /* schedule unpin of the old buffer */ old_amdgpu_fb = to_amdgpu_framebuffer(crtc->primary->fb); @@ -239,7 +239,7 @@ int amdgpu_crtc_page_flip(struct drm_crtc *crtc, work->base = base; - r = drm_vblank_get(crtc->dev, amdgpu_crtc->crtc_id); + r = drm_vblank_get(crtc->dev, amdgpu_crtc->crtc_object_id.id); if (r) { DRM_ERROR("failed to get vblank before flip\n"); goto pflip_cleanup; @@ -259,7 +259,7 @@ int amdgpu_crtc_page_flip(struct drm_crtc *crtc, DRM_DEBUG_DRIVER("crtc:%d[%p], pflip_stat:AMDGPU_FLIP_PENDING, work: %p,\n", - amdgpu_crtc->crtc_id, amdgpu_crtc, work); + amdgpu_crtc->crtc_object_id.id, amdgpu_crtc, work); /* update crtc fb */ crtc->primary->fb = fb; spin_unlock_irqrestore(&crtc->dev->event_lock, flags); @@ -267,7 +267,7 @@ int amdgpu_crtc_page_flip(struct drm_crtc *crtc, return 0; vblank_cleanup: - drm_vblank_put(crtc->dev, amdgpu_crtc->crtc_id); + drm_vblank_put(crtc->dev, amdgpu_crtc->crtc_object_id.id); pflip_cleanup: if (unlikely(amdgpu_bo_reserve(new_rbo, false) != 0)) { diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index 1f9d318..8449f45 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c @@ -181,7 +181,7 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file crtc = (struct drm_crtc *)minfo->crtcs[i]; if (crtc && crtc->base.id == info->mode_crtc.id) { struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); - ui32 = amdgpu_crtc->crtc_id; + ui32 = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); found = 1; break; } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h index 96e1de8..5624c81 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h @@ -368,7 +368,7 @@ struct amdgpu_atom_ss { struct amdgpu_crtc { struct drm_crtc base; - int crtc_id; + struct graphics_object_id crtc_object_id; u16 lut_r[256], lut_g[256], lut_b[256]; bool enabled; bool can_tile; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c index 6d44d4a..8bb3ced 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c @@ -1162,7 +1162,7 @@ void amdgpu_pm_compute_clocks(struct amdgpu_device *adev) &ddev->mode_config.crtc_list, head) { amdgpu_crtc = to_amdgpu_crtc(crtc); if (crtc->enabled) { - adev->pm.dpm.new_active_crtcs |= (1 << amdgpu_crtc->crtc_id); + adev->pm.dpm.new_active_crtcs |= (1 << amdgpu_crtc->crtc_object_id.id); adev->pm.dpm.new_active_crtc_count++; } } diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c b/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c index 5b8d3c6..8731773 100644 --- a/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c +++ b/drivers/gpu/drm/amd/amdgpu/atombios_crtc.c @@ -45,10 +45,10 @@ void amdgpu_atombios_crtc_overscan_setup(struct drm_crtc *crtc, SET_CRTC_OVERSCAN_PS_ALLOCATION args; int index = GetIndexIntoMasterTable(COMMAND, SetCRTC_OverScan); int a1, a2; - + enum controller_id controller_id = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); memset(&args, 0, sizeof(args)); - args.ucCRTC = amdgpu_crtc->crtc_id; + args.ucCRTC = controller_id; switch (amdgpu_crtc->rmx_type) { case RMX_CENTER: @@ -87,10 +87,10 @@ void amdgpu_atombios_crtc_scaler_setup(struct drm_crtc *crtc) struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); ENABLE_SCALER_PS_ALLOCATION args; int index = GetIndexIntoMasterTable(COMMAND, EnableScaler); - + enum controller_id controller_id = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); memset(&args, 0, sizeof(args)); - args.ucScaler = amdgpu_crtc->crtc_id; + args.ucScaler = controller_id; switch (amdgpu_crtc->rmx_type) { case RMX_FULL: @@ -117,10 +117,10 @@ void amdgpu_atombios_crtc_lock(struct drm_crtc *crtc, int lock) int index = GetIndexIntoMasterTable(COMMAND, UpdateCRTC_DoubleBufferRegisters); ENABLE_CRTC_PS_ALLOCATION args; - + enum controller_id controller_id = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); memset(&args, 0, sizeof(args)); - args.ucCRTC = amdgpu_crtc->crtc_id; + args.ucCRTC = controller_id; args.ucEnable = lock; amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); @@ -133,10 +133,10 @@ void amdgpu_atombios_crtc_enable(struct drm_crtc *crtc, int state) struct amdgpu_device *adev = dev->dev_private; int index = GetIndexIntoMasterTable(COMMAND, EnableCRTC); ENABLE_CRTC_PS_ALLOCATION args; - + enum controller_id controller_id = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); memset(&args, 0, sizeof(args)); - args.ucCRTC = amdgpu_crtc->crtc_id; + args.ucCRTC = controller_id; args.ucEnable = state; amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); @@ -149,10 +149,11 @@ void amdgpu_atombios_crtc_blank(struct drm_crtc *crtc, int state) struct amdgpu_device *adev = dev->dev_private; int index = GetIndexIntoMasterTable(COMMAND, BlankCRTC); BLANK_CRTC_PS_ALLOCATION args; + enum controller_id controller_id = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); memset(&args, 0, sizeof(args)); - args.ucCRTC = amdgpu_crtc->crtc_id; + args.ucCRTC = controller_id; args.ucBlanking = state; amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); @@ -165,10 +166,11 @@ void amdgpu_atombios_crtc_powergate(struct drm_crtc *crtc, int state) struct amdgpu_device *adev = dev->dev_private; int index = GetIndexIntoMasterTable(COMMAND, EnableDispPowerGating); ENABLE_DISP_POWER_GATING_PARAMETERS_V2_1 args; + enum controller_id controller_id = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); memset(&args, 0, sizeof(args)); - args.ucDispPipeId = amdgpu_crtc->crtc_id; + args.ucDispPipeId = controller_id; args.ucEnable = state; amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); @@ -195,6 +197,7 @@ void amdgpu_atombios_crtc_set_dtd_timing(struct drm_crtc *crtc, SET_CRTC_USING_DTD_TIMING_PARAMETERS args; int index = GetIndexIntoMasterTable(COMMAND, SetCRTC_UsingDTDTiming); u16 misc = 0; + enum controller_id controller_id = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); memset(&args, 0, sizeof(args)); args.usH_Size = cpu_to_le16(mode->crtc_hdisplay - (amdgpu_crtc->h_border * 2)); @@ -226,7 +229,7 @@ void amdgpu_atombios_crtc_set_dtd_timing(struct drm_crtc *crtc, misc |= ATOM_DOUBLE_CLOCK_MODE; args.susModeMiscInfo.usAccess = cpu_to_le16(misc); - args.ucCRTC = amdgpu_crtc->crtc_id; + args.ucCRTC = controller_id; amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); } @@ -238,14 +241,15 @@ union atom_enable_ss { }; static void amdgpu_atombios_crtc_program_ss(struct amdgpu_device *adev, - int enable, - int pll_id, - int crtc_id, - struct amdgpu_atom_ss *ss) + int enable, + int pll_id, + struct graphics_object_id crtc_object_id, + struct amdgpu_atom_ss *ss) { unsigned i; int index = GetIndexIntoMasterTable(COMMAND, EnableSpreadSpectrumOnPPLL); union atom_enable_ss args; + enum controller_id controller_id = display_graphics_object_id_get_controller_id(crtc_object_id); if (enable) { /* Don't mess with SS if percentage is 0 or external ss. @@ -261,7 +265,7 @@ static void amdgpu_atombios_crtc_program_ss(struct amdgpu_device *adev, for (i = 0; i < adev->mode_info.num_crtc; i++) { if (adev->mode_info.crtcs[i] && adev->mode_info.crtcs[i]->enabled && - i != crtc_id && + i != controller_id && pll_id == adev->mode_info.crtcs[i]->pll_id) { /* one other crtc is using this pll don't turn * off spread spectrum as it might turn off @@ -521,7 +525,7 @@ static bool is_pixel_clock_source_from_pll(u32 encoder_mode, int pll_id) } void amdgpu_atombios_crtc_program_pll(struct drm_crtc *crtc, - u32 crtc_id, + struct graphics_object_id crtc_object_id, int pll_id, u32 encoder_mode, struct graphics_object_id encoder_object_id, @@ -540,6 +544,7 @@ void amdgpu_atombios_crtc_program_pll(struct drm_crtc *crtc, int index = GetIndexIntoMasterTable(COMMAND, SetPixelClock); union set_pixel_clock args; uint8_t atom_enc_id = amdgpu_encoder_object_to_atom(encoder_object_id); + enum controller_id controller_id = display_graphics_object_id_get_controller_id(crtc_object_id); memset(&args, 0, sizeof(args)); @@ -559,7 +564,7 @@ void amdgpu_atombios_crtc_program_pll(struct drm_crtc *crtc, args.v1.ucFracFbDiv = frac_fb_div; args.v1.ucPostDiv = post_div; args.v1.ucPpll = pll_id; - args.v1.ucCRTC = crtc_id; + args.v1.ucCRTC = controller_id; args.v1.ucRefDivSrc = 1; break; case 2: @@ -569,7 +574,7 @@ void amdgpu_atombios_crtc_program_pll(struct drm_crtc *crtc, args.v2.ucFracFbDiv = frac_fb_div; args.v2.ucPostDiv = post_div; args.v2.ucPpll = pll_id; - args.v2.ucCRTC = crtc_id; + args.v2.ucCRTC = controller_id; args.v2.ucRefDivSrc = 1; break; case 3: @@ -579,7 +584,7 @@ void amdgpu_atombios_crtc_program_pll(struct drm_crtc *crtc, args.v3.ucFracFbDiv = frac_fb_div; args.v3.ucPostDiv = post_div; args.v3.ucPpll = pll_id; - if (crtc_id == ATOM_CRTC2) + if (controller_id == ATOM_CRTC2) args.v3.ucMiscInfo = PIXEL_CLOCK_MISC_CRTC_SEL_CRTC2; else args.v3.ucMiscInfo = PIXEL_CLOCK_MISC_CRTC_SEL_CRTC1; @@ -589,7 +594,7 @@ void amdgpu_atombios_crtc_program_pll(struct drm_crtc *crtc, args.v3.ucEncoderMode = encoder_mode; break; case 5: - args.v5.ucCRTC = crtc_id; + args.v5.ucCRTC = controller_id; args.v5.usPixelClock = cpu_to_le16(clock / 10); args.v5.ucRefDiv = ref_div; args.v5.usFbDiv = cpu_to_le16(fb_div); @@ -620,7 +625,7 @@ void amdgpu_atombios_crtc_program_pll(struct drm_crtc *crtc, args.v5.ucPpll = pll_id; break; case 6: - args.v6.ulDispEngClkFreq = cpu_to_le32(crtc_id << 24 | clock / 10); + args.v6.ulDispEngClkFreq = cpu_to_le32(controller_id << 24 | clock / 10); args.v6.ucRefDiv = ref_div; args.v6.usFbDiv = cpu_to_le16(fb_div); args.v6.ulFbDivDecFrac = cpu_to_le32(frac_fb_div * 100000); @@ -775,9 +780,9 @@ void amdgpu_atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode &fb_div, &frac_fb_div, &ref_div, &post_div); amdgpu_atombios_crtc_program_ss(adev, ATOM_DISABLE, amdgpu_crtc->pll_id, - amdgpu_crtc->crtc_id, &amdgpu_crtc->ss); + amdgpu_crtc->crtc_object_id, &amdgpu_crtc->ss); - amdgpu_atombios_crtc_program_pll(crtc, amdgpu_crtc->crtc_id, amdgpu_crtc->pll_id, + amdgpu_atombios_crtc_program_pll(crtc, amdgpu_crtc->crtc_object_id, amdgpu_crtc->pll_id, encoder_mode, amdgpu_encoder->encoder_object_id, clock, ref_div, fb_div, frac_fb_div, post_div, amdgpu_crtc->bpc, amdgpu_crtc->ss_enabled, &amdgpu_crtc->ss); @@ -800,7 +805,7 @@ void amdgpu_atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode amdgpu_crtc->ss.step = step_size; amdgpu_atombios_crtc_program_ss(adev, ATOM_ENABLE, amdgpu_crtc->pll_id, - amdgpu_crtc->crtc_id, &amdgpu_crtc->ss); + amdgpu_crtc->crtc_object_id, &amdgpu_crtc->ss); } } diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_crtc.h b/drivers/gpu/drm/amd/amdgpu/atombios_crtc.h index 452245f..c10a570 100644 --- a/drivers/gpu/drm/amd/amdgpu/atombios_crtc.h +++ b/drivers/gpu/drm/amd/amdgpu/atombios_crtc.h @@ -38,7 +38,7 @@ void amdgpu_atombios_crtc_set_dtd_timing(struct drm_crtc *crtc, void amdgpu_atombios_crtc_set_disp_eng_pll(struct amdgpu_device *adev, u32 dispclk); void amdgpu_atombios_crtc_program_pll(struct drm_crtc *crtc, - u32 crtc_id, + struct graphics_object_id crtc_object_id, int pll_id, u32 encoder_mode, struct graphics_object_id encoder_object_id, diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c index 28d306a..9f7f3fc 100644 --- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c +++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c @@ -1307,7 +1307,7 @@ amdgpu_atombios_encoder_set_crtc_source(struct drm_encoder *encoder) uint8_t frev, crev; struct amdgpu_encoder_atom_dig *dig; enum encoder_id enc_id = display_graphics_object_id_get_encoder_id(amdgpu_encoder->encoder_object_id); - + enum controller_id controller_id = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); memset(&args, 0, sizeof(args)); if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) @@ -1318,7 +1318,7 @@ amdgpu_atombios_encoder_set_crtc_source(struct drm_encoder *encoder) switch (crev) { case 1: default: - args.v1.ucCRTC = amdgpu_crtc->crtc_id; + args.v1.ucCRTC = controller_id; switch (enc_id) { case ENCODER_ID_INTERNAL_TMDS1: case ENCODER_ID_INTERNAL_KLDSCP_TMDS1: @@ -1357,7 +1357,7 @@ amdgpu_atombios_encoder_set_crtc_source(struct drm_encoder *encoder) } break; case 2: - args.v2.ucCRTC = amdgpu_crtc->crtc_id; + args.v2.ucCRTC = controller_id; if (amdgpu_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_ID_UNKNOWN) { struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder); @@ -1424,7 +1424,7 @@ amdgpu_atombios_encoder_set_crtc_source(struct drm_encoder *encoder) } break; case 3: - args.v3.ucCRTC = amdgpu_crtc->crtc_id; + args.v3.ucCRTC = controller_id; if (amdgpu_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_ID_UNKNOWN) { struct drm_connector *connector = amdgpu_get_connector_for_encoder(encoder); diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c index 993de0f..e2b22bf 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c @@ -802,7 +802,7 @@ static u32 dce_v10_0_line_buffer_adjust(struct amdgpu_device *adev, struct drm_display_mode *mode) { u32 tmp, buffer_alloc, i, mem_cfg; - u32 pipe_offset = amdgpu_crtc->crtc_id; + u32 pipe_offset = amdgpu_crtc->crtc_object_id.id; /* * Line Buffer Setup * There are 6 line buffers, one for each display controllers. @@ -1760,7 +1760,7 @@ static void dce_v10_0_audio_set_dto(struct drm_encoder *encoder, u32 clock) */ tmp = RREG32(mmDCCG_AUDIO_DTO_SOURCE); tmp = REG_SET_FIELD(tmp, DCCG_AUDIO_DTO_SOURCE, DCCG_AUDIO_DTO0_SOURCE_SEL, - amdgpu_crtc->crtc_id); + amdgpu_crtc->crtc_object_id.id); WREG32(mmDCCG_AUDIO_DTO_SOURCE, tmp); WREG32(mmDCCG_AUDIO_DTO0_PHASE, dto_phase); WREG32(mmDCCG_AUDIO_DTO0_MODULE, dto_modulo); @@ -2028,12 +2028,13 @@ static void dce_v10_0_vga_enable(struct drm_crtc *crtc, bool enable) struct drm_device *dev = crtc->dev; struct amdgpu_device *adev = dev->dev_private; u32 vga_control; + enum controller_id controller_id = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); - vga_control = RREG32(vga_control_regs[amdgpu_crtc->crtc_id]) & ~1; + vga_control = RREG32(vga_control_regs[controller_id]) & ~1; if (enable) - WREG32(vga_control_regs[amdgpu_crtc->crtc_id], vga_control | 1); + WREG32(vga_control_regs[controller_id], vga_control | 1); else - WREG32(vga_control_regs[amdgpu_crtc->crtc_id], vga_control); + WREG32(vga_control_regs[controller_id], vga_control); } static void dce_v10_0_grph_enable(struct drm_crtc *crtc, bool enable) @@ -2312,7 +2313,7 @@ static void dce_v10_0_crtc_load_lut(struct drm_crtc *crtc) int i; u32 tmp; - DRM_DEBUG_KMS("%d\n", amdgpu_crtc->crtc_id); + DRM_DEBUG_KMS("%d\n", amdgpu_crtc->crtc_object_id.id); tmp = RREG32(mmINPUT_CSC_CONTROL + amdgpu_crtc->crtc_offset); tmp = REG_SET_FIELD(tmp, INPUT_CSC_CONTROL, INPUT_CSC_GRPH_MODE, 0); @@ -2590,7 +2591,7 @@ static int dce_v10_0_crtc_cursor_set2(struct drm_crtc *crtc, obj = drm_gem_object_lookup(crtc->dev, file_priv, handle); if (!obj) { - DRM_ERROR("Cannot find cursor object %x for crtc %d\n", handle, amdgpu_crtc->crtc_id); + DRM_ERROR("Cannot find cursor object %x for crtc %d\n", handle, amdgpu_crtc->crtc_object_id.id); return -ENOENT; } @@ -2708,16 +2709,16 @@ static void dce_v10_0_crtc_dpms(struct drm_crtc *crtc, int mode) amdgpu_atombios_crtc_blank(crtc, ATOM_DISABLE); dce_v10_0_vga_enable(crtc, false); /* Make sure VBLANK and PFLIP interrupts are still enabled */ - type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id); + type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_object_id.id); amdgpu_irq_update(adev, &adev->crtc_irq, type); amdgpu_irq_update(adev, &adev->pageflip_irq, type); - drm_vblank_on(dev, amdgpu_crtc->crtc_id); + drm_vblank_on(dev, amdgpu_crtc->crtc_object_id.id); dce_v10_0_crtc_load_lut(crtc); break; case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_SUSPEND: case DRM_MODE_DPMS_OFF: - drm_vblank_off(dev, amdgpu_crtc->crtc_id); + drm_vblank_off(dev, amdgpu_crtc->crtc_object_id.id); if (amdgpu_crtc->enabled) { dce_v10_0_vga_enable(crtc, true); amdgpu_atombios_crtc_blank(crtc, ATOM_ENABLE); @@ -2777,7 +2778,7 @@ static void dce_v10_0_crtc_disable(struct drm_crtc *crtc) for (i = 0; i < adev->mode_info.num_crtc; i++) { if (adev->mode_info.crtcs[i] && adev->mode_info.crtcs[i]->enabled && - i != amdgpu_crtc->crtc_id && + i != amdgpu_crtc->crtc_object_id.id && amdgpu_crtc->pll_id == adev->mode_info.crtcs[i]->pll_id) { /* one other crtc is using this pll don't turn * off the pll @@ -2791,7 +2792,7 @@ static void dce_v10_0_crtc_disable(struct drm_crtc *crtc) case ATOM_PPLL1: case ATOM_PPLL2: /* disable the ppll */ - amdgpu_atombios_crtc_program_pll(crtc, amdgpu_crtc->crtc_id, amdgpu_crtc->pll_id, + amdgpu_atombios_crtc_program_pll(crtc, amdgpu_crtc->crtc_object_id, amdgpu_crtc->pll_id, 0, DISPLAY_NO_OBJECT, ATOM_DISABLE, 0, 0, 0, 0, 0, false, &ss); break; default: @@ -2899,7 +2900,7 @@ static int dce_v10_0_crtc_init(struct amdgpu_device *adev, int index) drm_crtc_init(adev->ddev, &amdgpu_crtc->base, &dce_v10_0_crtc_funcs); drm_mode_crtc_set_gamma_size(&amdgpu_crtc->base, 256); - amdgpu_crtc->crtc_id = index; + amdgpu_crtc->crtc_object_id = display_graphics_object_id_init(index, ENUM_ID_UNKNOWN, OBJECT_TYPE_CONTROLLER); adev->mode_info.crtcs[index] = amdgpu_crtc; amdgpu_crtc->max_cursor_width = 128; @@ -2913,7 +2914,7 @@ static int dce_v10_0_crtc_init(struct amdgpu_device *adev, int index) amdgpu_crtc->lut_b[i] = i << 2; } - switch (amdgpu_crtc->crtc_id) { + switch (index) { case 0: default: amdgpu_crtc->crtc_offset = CRTC0_REGISTER_OFFSET; @@ -3375,7 +3376,7 @@ static int dce_v10_0_pageflip_irq(struct amdgpu_device *adev, spin_unlock_irqrestore(&adev->ddev->event_lock, flags); - drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id); + drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_object_id.id); schedule_work(&works->unpin_work); return 0; diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c index b7edba9..a231679 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c @@ -737,7 +737,7 @@ static u32 dce_v11_0_line_buffer_adjust(struct amdgpu_device *adev, struct drm_display_mode *mode) { u32 tmp, buffer_alloc, i, mem_cfg; - u32 pipe_offset = amdgpu_crtc->crtc_id; + u32 pipe_offset = amdgpu_crtc->crtc_object_id.id; /* * Line Buffer Setup * There are 6 line buffers, one for each display controllers. @@ -1695,7 +1695,7 @@ static void dce_v11_0_audio_set_dto(struct drm_encoder *encoder, u32 clock) */ tmp = RREG32(mmDCCG_AUDIO_DTO_SOURCE); tmp = REG_SET_FIELD(tmp, DCCG_AUDIO_DTO_SOURCE, DCCG_AUDIO_DTO0_SOURCE_SEL, - amdgpu_crtc->crtc_id); + amdgpu_crtc->crtc_object_id.id); WREG32(mmDCCG_AUDIO_DTO_SOURCE, tmp); WREG32(mmDCCG_AUDIO_DTO0_PHASE, dto_phase); WREG32(mmDCCG_AUDIO_DTO0_MODULE, dto_modulo); @@ -1963,12 +1963,13 @@ static void dce_v11_0_vga_enable(struct drm_crtc *crtc, bool enable) struct drm_device *dev = crtc->dev; struct amdgpu_device *adev = dev->dev_private; u32 vga_control; + enum controller_id controller_id = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); - vga_control = RREG32(vga_control_regs[amdgpu_crtc->crtc_id]) & ~1; + vga_control = RREG32(vga_control_regs[controller_id]) & ~1; if (enable) - WREG32(vga_control_regs[amdgpu_crtc->crtc_id], vga_control | 1); + WREG32(vga_control_regs[controller_id], vga_control | 1); else - WREG32(vga_control_regs[amdgpu_crtc->crtc_id], vga_control); + WREG32(vga_control_regs[controller_id], vga_control); } static void dce_v11_0_grph_enable(struct drm_crtc *crtc, bool enable) @@ -2247,7 +2248,7 @@ static void dce_v11_0_crtc_load_lut(struct drm_crtc *crtc) int i; u32 tmp; - DRM_DEBUG_KMS("%d\n", amdgpu_crtc->crtc_id); + DRM_DEBUG_KMS("%d\n", amdgpu_crtc->crtc_object_id.id); tmp = RREG32(mmINPUT_CSC_CONTROL + amdgpu_crtc->crtc_offset); tmp = REG_SET_FIELD(tmp, INPUT_CSC_CONTROL, INPUT_CSC_GRPH_MODE, 0); @@ -2527,7 +2528,7 @@ static int dce_v11_0_crtc_cursor_set2(struct drm_crtc *crtc, obj = drm_gem_object_lookup(crtc->dev, file_priv, handle); if (!obj) { - DRM_ERROR("Cannot find cursor object %x for crtc %d\n", handle, amdgpu_crtc->crtc_id); + DRM_ERROR("Cannot find cursor object %x for crtc %d\n", handle, amdgpu_crtc->crtc_object_id.id); return -ENOENT; } @@ -2645,16 +2646,16 @@ static void dce_v11_0_crtc_dpms(struct drm_crtc *crtc, int mode) amdgpu_atombios_crtc_blank(crtc, ATOM_DISABLE); dce_v11_0_vga_enable(crtc, false); /* Make sure VBLANK and PFLIP interrupts are still enabled */ - type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id); + type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_object_id.id); amdgpu_irq_update(adev, &adev->crtc_irq, type); amdgpu_irq_update(adev, &adev->pageflip_irq, type); - drm_vblank_on(dev, amdgpu_crtc->crtc_id); + drm_vblank_on(dev, amdgpu_crtc->crtc_object_id.id); dce_v11_0_crtc_load_lut(crtc); break; case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_SUSPEND: case DRM_MODE_DPMS_OFF: - drm_vblank_off(dev, amdgpu_crtc->crtc_id); + drm_vblank_off(dev, amdgpu_crtc->crtc_object_id.id); if (amdgpu_crtc->enabled) { dce_v11_0_vga_enable(crtc, true); amdgpu_atombios_crtc_blank(crtc, ATOM_ENABLE); @@ -2714,7 +2715,7 @@ static void dce_v11_0_crtc_disable(struct drm_crtc *crtc) for (i = 0; i < adev->mode_info.num_crtc; i++) { if (adev->mode_info.crtcs[i] && adev->mode_info.crtcs[i]->enabled && - i != amdgpu_crtc->crtc_id && + i != amdgpu_crtc->crtc_object_id.id && amdgpu_crtc->pll_id == adev->mode_info.crtcs[i]->pll_id) { /* one other crtc is using this pll don't turn * off the pll @@ -2728,7 +2729,7 @@ static void dce_v11_0_crtc_disable(struct drm_crtc *crtc) case ATOM_PPLL1: case ATOM_PPLL2: /* disable the ppll */ - amdgpu_atombios_crtc_program_pll(crtc, amdgpu_crtc->crtc_id, amdgpu_crtc->pll_id, + amdgpu_atombios_crtc_program_pll(crtc, amdgpu_crtc->crtc_object_id, amdgpu_crtc->pll_id, 0, DISPLAY_NO_OBJECT, ATOM_DISABLE, 0, 0, 0, 0, 0, false, &ss); break; default: @@ -2836,7 +2837,7 @@ static int dce_v11_0_crtc_init(struct amdgpu_device *adev, int index) drm_crtc_init(adev->ddev, &amdgpu_crtc->base, &dce_v11_0_crtc_funcs); drm_mode_crtc_set_gamma_size(&amdgpu_crtc->base, 256); - amdgpu_crtc->crtc_id = index; + amdgpu_crtc->crtc_object_id = display_graphics_object_id_init(index, ENUM_ID_UNKNOWN, OBJECT_TYPE_CONTROLLER); adev->mode_info.crtcs[index] = amdgpu_crtc; amdgpu_crtc->max_cursor_width = 128; @@ -2850,7 +2851,7 @@ static int dce_v11_0_crtc_init(struct amdgpu_device *adev, int index) amdgpu_crtc->lut_b[i] = i << 2; } - switch (amdgpu_crtc->crtc_id) { + switch (index) { case 0: default: amdgpu_crtc->crtc_offset = CRTC0_REGISTER_OFFSET; @@ -3317,7 +3318,7 @@ static int dce_v11_0_pageflip_irq(struct amdgpu_device *adev, spin_unlock_irqrestore(&adev->ddev->event_lock, flags); - drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id); + drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_object_id.id); schedule_work(&works->unpin_work); return 0; diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c index f46991b..6a53cde 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c @@ -747,7 +747,7 @@ static u32 dce_v8_0_line_buffer_adjust(struct amdgpu_device *adev, struct drm_display_mode *mode) { u32 tmp, buffer_alloc, i; - u32 pipe_offset = amdgpu_crtc->crtc_id * 0x8; + u32 pipe_offset = amdgpu_crtc->crtc_object_id.id * 0x8; /* * Line Buffer Setup * There are 6 line buffers, one for each display controllers. @@ -1716,7 +1716,7 @@ static void dce_v8_0_audio_set_dto(struct drm_encoder *encoder, u32 clock) * number (coefficient of two integer numbers. DCCG_AUDIO_DTOx_PHASE * is the numerator, DCCG_AUDIO_DTOx_MODULE is the denominator */ - WREG32(mmDCCG_AUDIO_DTO_SOURCE, (amdgpu_crtc->crtc_id << DCCG_AUDIO_DTO_SOURCE__DCCG_AUDIO_DTO0_SOURCE_SEL__SHIFT)); + WREG32(mmDCCG_AUDIO_DTO_SOURCE, (amdgpu_crtc->crtc_object_id.id << DCCG_AUDIO_DTO_SOURCE__DCCG_AUDIO_DTO0_SOURCE_SEL__SHIFT)); WREG32(mmDCCG_AUDIO_DTO0_PHASE, dto_phase); WREG32(mmDCCG_AUDIO_DTO0_MODULE, dto_modulo); } @@ -1965,12 +1965,13 @@ static void dce_v8_0_vga_enable(struct drm_crtc *crtc, bool enable) struct drm_device *dev = crtc->dev; struct amdgpu_device *adev = dev->dev_private; u32 vga_control; + enum controller_id controller_id = display_graphics_object_id_get_controller_id(amdgpu_crtc->crtc_object_id); - vga_control = RREG32(vga_control_regs[amdgpu_crtc->crtc_id]) & ~1; + vga_control = RREG32(vga_control_regs[controller_id]) & ~1; if (enable) - WREG32(vga_control_regs[amdgpu_crtc->crtc_id], vga_control | 1); + WREG32(vga_control_regs[controller_id], vga_control | 1); else - WREG32(vga_control_regs[amdgpu_crtc->crtc_id], vga_control); + WREG32(vga_control_regs[controller_id], vga_control); } static void dce_v8_0_grph_enable(struct drm_crtc *crtc, bool enable) @@ -2229,7 +2230,7 @@ static void dce_v8_0_crtc_load_lut(struct drm_crtc *crtc) struct amdgpu_device *adev = dev->dev_private; int i; - DRM_DEBUG_KMS("%d\n", amdgpu_crtc->crtc_id); + DRM_DEBUG_KMS("%d\n", amdgpu_crtc->crtc_object_id.id); WREG32(mmINPUT_CSC_CONTROL + amdgpu_crtc->crtc_offset, ((INPUT_CSC_BYPASS << INPUT_CSC_CONTROL__INPUT_CSC_GRPH_MODE__SHIFT) | @@ -2502,7 +2503,7 @@ static int dce_v8_0_crtc_cursor_set2(struct drm_crtc *crtc, obj = drm_gem_object_lookup(crtc->dev, file_priv, handle); if (!obj) { - DRM_ERROR("Cannot find cursor object %x for crtc %d\n", handle, amdgpu_crtc->crtc_id); + DRM_ERROR("Cannot find cursor object %x for crtc %d\n", handle, amdgpu_crtc->crtc_object_id.id); return -ENOENT; } @@ -2620,16 +2621,16 @@ static void dce_v8_0_crtc_dpms(struct drm_crtc *crtc, int mode) amdgpu_atombios_crtc_blank(crtc, ATOM_DISABLE); dce_v8_0_vga_enable(crtc, false); /* Make sure VBLANK and PFLIP interrupts are still enabled */ - type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id); + type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_object_id.id); amdgpu_irq_update(adev, &adev->crtc_irq, type); amdgpu_irq_update(adev, &adev->pageflip_irq, type); - drm_vblank_on(dev, amdgpu_crtc->crtc_id); + drm_vblank_on(dev, amdgpu_crtc->crtc_object_id.id); dce_v8_0_crtc_load_lut(crtc); break; case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_SUSPEND: case DRM_MODE_DPMS_OFF: - drm_vblank_off(dev, amdgpu_crtc->crtc_id); + drm_vblank_off(dev, amdgpu_crtc->crtc_object_id.id); if (amdgpu_crtc->enabled) { dce_v8_0_vga_enable(crtc, true); amdgpu_atombios_crtc_blank(crtc, ATOM_ENABLE); @@ -2689,7 +2690,7 @@ static void dce_v8_0_crtc_disable(struct drm_crtc *crtc) for (i = 0; i < adev->mode_info.num_crtc; i++) { if (adev->mode_info.crtcs[i] && adev->mode_info.crtcs[i]->enabled && - i != amdgpu_crtc->crtc_id && + i != amdgpu_crtc->crtc_object_id.id && amdgpu_crtc->pll_id == adev->mode_info.crtcs[i]->pll_id) { /* one other crtc is using this pll don't turn * off the pll @@ -2702,7 +2703,7 @@ static void dce_v8_0_crtc_disable(struct drm_crtc *crtc) case ATOM_PPLL1: case ATOM_PPLL2: /* disable the ppll */ - amdgpu_atombios_crtc_program_pll(crtc, amdgpu_crtc->crtc_id, amdgpu_crtc->pll_id, + amdgpu_atombios_crtc_program_pll(crtc, amdgpu_crtc->crtc_object_id, amdgpu_crtc->pll_id, 0, DISPLAY_NO_OBJECT, ATOM_DISABLE, 0, 0, 0, 0, 0, false, &ss); break; case ATOM_PPLL0: @@ -2710,7 +2711,7 @@ static void dce_v8_0_crtc_disable(struct drm_crtc *crtc) if ((adev->asic_type == CHIP_KAVERI) || (adev->asic_type == CHIP_BONAIRE) || (adev->asic_type == CHIP_HAWAII)) - amdgpu_atombios_crtc_program_pll(crtc, amdgpu_crtc->crtc_id, amdgpu_crtc->pll_id, + amdgpu_atombios_crtc_program_pll(crtc, amdgpu_crtc->crtc_object_id, amdgpu_crtc->pll_id, 0, DISPLAY_NO_OBJECT, ATOM_DISABLE, 0, 0, 0, 0, 0, false, &ss); break; default: @@ -2818,7 +2819,7 @@ static int dce_v8_0_crtc_init(struct amdgpu_device *adev, int index) drm_crtc_init(adev->ddev, &amdgpu_crtc->base, &dce_v8_0_crtc_funcs); drm_mode_crtc_set_gamma_size(&amdgpu_crtc->base, 256); - amdgpu_crtc->crtc_id = index; + amdgpu_crtc->crtc_object_id = display_graphics_object_id_init(index, ENUM_ID_UNKNOWN, OBJECT_TYPE_CONTROLLER); adev->mode_info.crtcs[index] = amdgpu_crtc; amdgpu_crtc->max_cursor_width = CIK_CURSOR_WIDTH; @@ -2832,7 +2833,7 @@ static int dce_v8_0_crtc_init(struct amdgpu_device *adev, int index) amdgpu_crtc->lut_b[i] = i << 2; } - amdgpu_crtc->crtc_offset = crtc_offsets[amdgpu_crtc->crtc_id]; + amdgpu_crtc->crtc_offset = crtc_offsets[amdgpu_crtc->crtc_object_id.id]; amdgpu_crtc->pll_id = ATOM_PPLL_INVALID; amdgpu_crtc->adjusted_clock = 0; @@ -3384,7 +3385,7 @@ static int dce_v8_0_pageflip_irq(struct amdgpu_device *adev, spin_unlock_irqrestore(&adev->ddev->event_lock, flags); - drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id); + drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_object_id.id); schedule_work(&works->unpin_work); return 0; -- 2.5.5 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel