drm/amd/display: Remove duplicate interface for programming FB
authorJulian Parkin <julian.parkin@amd.com>
Mon, 15 Jul 2019 16:16:01 +0000 (12:16 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 15 Aug 2019 15:55:11 +0000 (10:55 -0500)
[Why]
There are currently two interfaces for exactly the same thing:
hupb_update_dchub in hupb and update_dchub in hubbub. The hubbub
version is currently unused past dcn10, largely because the call
from the dcn10 hardware sequencer does not call through the
interface, so the hupb interface was used instead. This is
confusing because of the duplicate code, the unused functions,
and the fact that more that one block currently owns this set
of registers.

[How]
Remove the hubp interface entirely, as well as the register
declarations that are not longer needed because of this. Change
the call site to always call the hubbub version through the
interface. Fix the update_dchub function in dcn20_hubbub.c to
program the correct registers for dcn20.

Signed-off-by: Julian Parkin <julian.parkin@amd.com>
Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
Acked-by: Leo Li <sunpeng.li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubbub.c
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.h
drivers/gpu/drm/amd/display/dc/inc/hw/hubp.h

index 344e446..91116b3 100644 (file)
        SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, HUBPREQ, id),\
        SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, HUBPREQ, id),\
        SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, HUBPREQ, id),\
-       SR(DCHUBBUB_SDPIF_FB_BASE),\
-       SR(DCHUBBUB_SDPIF_FB_OFFSET),\
        SRI(CURSOR_SETTINS, HUBPREQ, id), \
        SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR, id), \
        SRI(CURSOR_SURFACE_ADDRESS, CURSOR, id), \
        uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB; \
        uint32_t DCN_VM_SYSTEM_APERTURE_LOW_ADDR; \
        uint32_t DCN_VM_SYSTEM_APERTURE_HIGH_ADDR; \
-       uint32_t DCHUBBUB_SDPIF_FB_BASE; \
-       uint32_t DCHUBBUB_SDPIF_FB_OFFSET; \
-       uint32_t DCN_VM_FB_LOCATION_TOP; \
-       uint32_t DCN_VM_FB_LOCATION_BASE; \
-       uint32_t DCN_VM_FB_OFFSET; \
-       uint32_t DCN_VM_AGP_BASE; \
-       uint32_t DCN_VM_AGP_BOT; \
-       uint32_t DCN_VM_AGP_TOP; \
        uint32_t CURSOR_SETTINS; \
        uint32_t CURSOR_SETTINGS; \
        uint32_t CURSOR_SURFACE_ADDRESS_HIGH; \
        HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, MC_VM_SYSTEM_APERTURE_LOW_ADDR_LSB, mask_sh),\
        HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_MSB, mask_sh),\
        HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB, mask_sh),\
-       HUBP_SF(DCHUBBUB_SDPIF_FB_BASE, SDPIF_FB_BASE, mask_sh),\
-       HUBP_SF(DCHUBBUB_SDPIF_FB_OFFSET, SDPIF_FB_OFFSET, mask_sh),\
        HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM, mask_sh),\
        HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, mask_sh),\
        HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, mask_sh),\
        type MC_VM_SYSTEM_APERTURE_HIGH_ADDR_LSB;\
        type MC_VM_SYSTEM_APERTURE_LOW_ADDR;\
        type MC_VM_SYSTEM_APERTURE_HIGH_ADDR;\
-       type SDPIF_FB_TOP;\
-       type SDPIF_FB_BASE;\
-       type SDPIF_FB_OFFSET;\
-       type SDPIF_AGP_BASE;\
-       type SDPIF_AGP_BOT;\
-       type SDPIF_AGP_TOP;\
-       type FB_TOP;\
-       type FB_BASE;\
-       type FB_OFFSET;\
-       type AGP_BASE;\
-       type AGP_BOT;\
-       type AGP_TOP;\
        type DCN_VM_SYSTEM_APERTURE_DEFAULT_SYSTEM;\
        type DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB;\
        type DCN_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB;\
index d1697a1..06d7bab 100644 (file)
@@ -2858,14 +2858,10 @@ static void dcn10_update_pending_status(struct pipe_ctx *pipe_ctx)
 
 static void dcn10_update_dchub(struct dce_hwseq *hws, struct dchub_init_data *dh_data)
 {
-       if (hws->ctx->dc->res_pool->hubbub != NULL) {
-               struct hubp *hubp = hws->ctx->dc->res_pool->hubps[0];
+       struct hubbub *hubbub = hws->ctx->dc->res_pool->hubbub;
 
-               if (hubp->funcs->hubp_update_dchub)
-                       hubp->funcs->hubp_update_dchub(hubp, dh_data);
-               else
-                       hubbub1_update_dchub(hws->ctx->dc->res_pool->hubbub, dh_data);
-       }
+       /* In DCN, this programming sequence is owned by the hubbub */
+       hubbub->funcs->update_dchub(hubbub, dh_data);
 }
 
 static void dcn10_set_cursor_position(struct pipe_ctx *pipe_ctx)
index cd101bb..f13e039 100644 (file)
@@ -398,54 +398,67 @@ void hubbub2_update_dchub(struct hubbub *hubbub,
 {
        struct dcn20_hubbub *hubbub1 = TO_DCN20_HUBBUB(hubbub);
 
-       if (REG(DCHUBBUB_SDPIF_FB_TOP) == 0) {
-               ASSERT(false);
-               /*should not come here*/
+       if (REG(DCN_VM_FB_LOCATION_TOP) == 0)
                return;
-       }
-       /* TODO: port code from dal2 */
+
        switch (dh_data->fb_mode) {
        case FRAME_BUFFER_MODE_ZFB_ONLY:
                /*For ZFB case need to put DCHUB FB BASE and TOP upside down to indicate ZFB mode*/
-               REG_UPDATE(DCHUBBUB_SDPIF_FB_TOP,
-                               SDPIF_FB_TOP, 0);
-
-               REG_UPDATE(DCHUBBUB_SDPIF_FB_BASE,
-                               SDPIF_FB_BASE, 0x0FFFF);
-
-               REG_UPDATE(DCHUBBUB_SDPIF_AGP_BASE,
-                               SDPIF_AGP_BASE, dh_data->zfb_phys_addr_base >> 22);
-
-               REG_UPDATE(DCHUBBUB_SDPIF_AGP_BOT,
-                               SDPIF_AGP_BOT, dh_data->zfb_mc_base_addr >> 22);
-
-               REG_UPDATE(DCHUBBUB_SDPIF_AGP_TOP,
-                               SDPIF_AGP_TOP, (dh_data->zfb_mc_base_addr +
-                                               dh_data->zfb_size_in_byte - 1) >> 22);
+               REG_UPDATE(DCN_VM_FB_LOCATION_TOP,
+                               FB_TOP, 0);
+
+               REG_UPDATE(DCN_VM_FB_LOCATION_BASE,
+                               FB_BASE, 0xFFFFFF);
+
+               /*This field defines the 24 MSBs, bits [47:24] of the 48 bit AGP Base*/
+               REG_UPDATE(DCN_VM_AGP_BASE,
+                               AGP_BASE, dh_data->zfb_phys_addr_base >> 24);
+
+               /*This field defines the bottom range of the AGP aperture and represents the 24*/
+               /*MSBs, bits [47:24] of the 48 address bits*/
+               REG_UPDATE(DCN_VM_AGP_BOT,
+                               AGP_BOT, dh_data->zfb_mc_base_addr >> 24);
+
+               /*This field defines the top range of the AGP aperture and represents the 24*/
+               /*MSBs, bits [47:24] of the 48 address bits*/
+               REG_UPDATE(DCN_VM_AGP_TOP,
+                               AGP_TOP, (dh_data->zfb_mc_base_addr +
+                                               dh_data->zfb_size_in_byte - 1) >> 24);
                break;
        case FRAME_BUFFER_MODE_MIXED_ZFB_AND_LOCAL:
                /*Should not touch FB LOCATION (done by VBIOS on AsicInit table)*/
 
-               REG_UPDATE(DCHUBBUB_SDPIF_AGP_BASE,
-                               SDPIF_AGP_BASE, dh_data->zfb_phys_addr_base >> 22);
+               /*This field defines the 24 MSBs, bits [47:24] of the 48 bit AGP Base*/
+               REG_UPDATE(DCN_VM_AGP_BASE,
+                               AGP_BASE, dh_data->zfb_phys_addr_base >> 24);
 
-               REG_UPDATE(DCHUBBUB_SDPIF_AGP_BOT,
-                               SDPIF_AGP_BOT, dh_data->zfb_mc_base_addr >> 22);
+               /*This field defines the bottom range of the AGP aperture and represents the 24*/
+               /*MSBs, bits [47:24] of the 48 address bits*/
+               REG_UPDATE(DCN_VM_AGP_BOT,
+                               AGP_BOT, dh_data->zfb_mc_base_addr >> 24);
 
-               REG_UPDATE(DCHUBBUB_SDPIF_AGP_TOP,
-                               SDPIF_AGP_TOP, (dh_data->zfb_mc_base_addr +
-                                               dh_data->zfb_size_in_byte - 1) >> 22);
+               /*This field defines the top range of the AGP aperture and represents the 24*/
+               /*MSBs, bits [47:24] of the 48 address bits*/
+               REG_UPDATE(DCN_VM_AGP_TOP,
+                               AGP_TOP, (dh_data->zfb_mc_base_addr +
+                                               dh_data->zfb_size_in_byte - 1) >> 24);
                break;
        case FRAME_BUFFER_MODE_LOCAL_ONLY:
-               /*Should not touch FB LOCATION (done by VBIOS on AsicInit table)*/
-               REG_UPDATE(DCHUBBUB_SDPIF_AGP_BASE,
-                               SDPIF_AGP_BASE, 0);
+               /*Should not touch FB LOCATION (should be done by VBIOS)*/
+
+               /*This field defines the 24 MSBs, bits [47:24] of the 48 bit AGP Base*/
+               REG_UPDATE(DCN_VM_AGP_BASE,
+                               AGP_BASE, 0);
 
-               REG_UPDATE(DCHUBBUB_SDPIF_AGP_BOT,
-                               SDPIF_AGP_BOT, 0X03FFFF);
+               /*This field defines the bottom range of the AGP aperture and represents the 24*/
+               /*MSBs, bits [47:24] of the 48 address bits*/
+               REG_UPDATE(DCN_VM_AGP_BOT,
+                               AGP_BOT, 0xFFFFFF);
 
-               REG_UPDATE(DCHUBBUB_SDPIF_AGP_TOP,
-                               SDPIF_AGP_TOP, 0);
+               /*This field defines the top range of the AGP aperture and represents the 24*/
+               /*MSBs, bits [47:24] of the 48 address bits*/
+               REG_UPDATE(DCN_VM_AGP_TOP,
+                               AGP_TOP, 0);
                break;
        default:
                break;
index 487de87..ac01e63 100644 (file)
 #define FN(reg_name, field_name) \
        hubp2->hubp_shift->field_name, hubp2->hubp_mask->field_name
 
-void hubp2_update_dchub(
-       struct hubp *hubp,
-       struct dchub_init_data *dh_data)
-{
-       struct dcn20_hubp *hubp2 = TO_DCN20_HUBP(hubp);
-       if (REG(DCN_VM_FB_LOCATION_TOP) == 0)
-               return;
-
-       switch (dh_data->fb_mode) {
-       case FRAME_BUFFER_MODE_ZFB_ONLY:
-               /*For ZFB case need to put DCHUB FB BASE and TOP upside down to indicate ZFB mode*/
-               REG_UPDATE(DCN_VM_FB_LOCATION_TOP,
-                               FB_TOP, 0);
-
-               REG_UPDATE(DCN_VM_FB_LOCATION_BASE,
-                               FB_BASE, 0xFFFFFF);
-
-               /*This field defines the 24 MSBs, bits [47:24] of the 48 bit AGP Base*/
-               REG_UPDATE(DCN_VM_AGP_BASE,
-                               AGP_BASE, dh_data->zfb_phys_addr_base >> 24);
-
-               /*This field defines the bottom range of the AGP aperture and represents the 24*/
-               /*MSBs, bits [47:24] of the 48 address bits*/
-               REG_UPDATE(DCN_VM_AGP_BOT,
-                               AGP_BOT, dh_data->zfb_mc_base_addr >> 24);
-
-               /*This field defines the top range of the AGP aperture and represents the 24*/
-               /*MSBs, bits [47:24] of the 48 address bits*/
-               REG_UPDATE(DCN_VM_AGP_TOP,
-                               AGP_TOP, (dh_data->zfb_mc_base_addr +
-                                               dh_data->zfb_size_in_byte - 1) >> 24);
-               break;
-       case FRAME_BUFFER_MODE_MIXED_ZFB_AND_LOCAL:
-               /*Should not touch FB LOCATION (done by VBIOS on AsicInit table)*/
-
-               /*This field defines the 24 MSBs, bits [47:24] of the 48 bit AGP Base*/
-               REG_UPDATE(DCN_VM_AGP_BASE,
-                               AGP_BASE, dh_data->zfb_phys_addr_base >> 24);
-
-               /*This field defines the bottom range of the AGP aperture and represents the 24*/
-               /*MSBs, bits [47:24] of the 48 address bits*/
-               REG_UPDATE(DCN_VM_AGP_BOT,
-                               AGP_BOT, dh_data->zfb_mc_base_addr >> 24);
-
-               /*This field defines the top range of the AGP aperture and represents the 24*/
-               /*MSBs, bits [47:24] of the 48 address bits*/
-               REG_UPDATE(DCN_VM_AGP_TOP,
-                               AGP_TOP, (dh_data->zfb_mc_base_addr +
-                                               dh_data->zfb_size_in_byte - 1) >> 24);
-               break;
-       case FRAME_BUFFER_MODE_LOCAL_ONLY:
-               /*Should not touch FB LOCATION (should be done by VBIOS)*/
-
-               /*This field defines the 24 MSBs, bits [47:24] of the 48 bit AGP Base*/
-               REG_UPDATE(DCN_VM_AGP_BASE,
-                               AGP_BASE, 0);
-
-               /*This field defines the bottom range of the AGP aperture and represents the 24*/
-               /*MSBs, bits [47:24] of the 48 address bits*/
-               REG_UPDATE(DCN_VM_AGP_BOT,
-                               AGP_BOT, 0xFFFFFF);
-
-               /*This field defines the top range of the AGP aperture and represents the 24*/
-               /*MSBs, bits [47:24] of the 48 address bits*/
-               REG_UPDATE(DCN_VM_AGP_TOP,
-                               AGP_TOP, 0);
-               break;
-       default:
-               break;
-       }
-
-       dh_data->dchub_initialzied = true;
-       dh_data->dchub_info_valid = false;
-}
-
 void hubp2_set_vm_system_aperture_settings(struct hubp *hubp,
                struct vm_system_aperture_param *apt)
 {
@@ -1321,7 +1246,6 @@ static struct hubp_funcs dcn20_hubp_funcs = {
        .hubp_set_vm_system_aperture_settings = hubp2_set_vm_system_aperture_settings,
        .set_blank = hubp2_set_blank,
        .dcc_control = hubp2_dcc_control,
-       .hubp_update_dchub = hubp2_update_dchub,
        .mem_program_viewport = min_set_viewport,
        .set_cursor_attributes  = hubp2_cursor_set_attributes,
        .set_cursor_position    = hubp2_cursor_set_position,
index 1c53af4..924699e 100644 (file)
        SRI(PREFETCH_SETTINGS_C, HUBPREQ, id),\
        SRI(DCN_VM_SYSTEM_APERTURE_LOW_ADDR, HUBPREQ, id),\
        SRI(DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, HUBPREQ, id),\
-       SR(DCN_VM_FB_LOCATION_TOP),\
-       SR(DCN_VM_FB_LOCATION_BASE),\
-       SR(DCN_VM_FB_OFFSET),\
-       SR(DCN_VM_AGP_BASE),\
-       SR(DCN_VM_AGP_BOT),\
-       SR(DCN_VM_AGP_TOP),\
        SRI(CURSOR_SETTINGS, HUBPREQ, id), \
        SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR0_, id), \
        SRI(CURSOR_SURFACE_ADDRESS, CURSOR0_, id), \
        HUBP_SF(HUBPREQ0_PREFETCH_SETTINGS_C, VRATIO_PREFETCH_C, mask_sh),\
        HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_LOW_ADDR, MC_VM_SYSTEM_APERTURE_LOW_ADDR, mask_sh),\
        HUBP_SF(HUBPREQ0_DCN_VM_SYSTEM_APERTURE_HIGH_ADDR, MC_VM_SYSTEM_APERTURE_HIGH_ADDR, mask_sh),\
-       HUBP_SF(DCN_VM_FB_LOCATION_TOP, FB_TOP, mask_sh),\
-       HUBP_SF(DCN_VM_FB_LOCATION_BASE, FB_BASE, mask_sh),\
-       HUBP_SF(DCN_VM_FB_OFFSET, FB_OFFSET, mask_sh),\
-       HUBP_SF(DCN_VM_AGP_BASE, AGP_BASE, mask_sh),\
-       HUBP_SF(DCN_VM_AGP_BOT, AGP_BOT, mask_sh),\
-       HUBP_SF(DCN_VM_AGP_TOP, AGP_TOP, mask_sh),\
        HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_DST_Y_OFFSET, mask_sh), \
        HUBP_SF(HUBPREQ0_CURSOR_SETTINGS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
        HUBP_SF(CURSOR0_0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
@@ -222,10 +210,6 @@ void hubp2_setup_interdependent(
 void hubp2_vready_at_or_After_vsync(struct hubp *hubp,
                struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest);
 
-void hubp2_update_dchub(
-               struct hubp *hubp,
-               struct dchub_init_data *dh_data);
-
 void hubp2_cursor_set_attributes(
                struct hubp *hubp,
                const struct dc_cursor_attributes *attr);
index 61cd4f8..4993f13 100644 (file)
@@ -111,9 +111,6 @@ struct hubp_funcs {
 
        bool (*hubp_is_flip_pending)(struct hubp *hubp);
 
-       void (*hubp_update_dchub)(struct hubp *hubp,
-                               struct dchub_init_data *dh_data);
-
        void (*set_blank)(struct hubp *hubp, bool blank);
        void (*set_hubp_blank_en)(struct hubp *hubp, bool blank);