]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
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 344e446e337df9c4ce2d6c7efc3e4d72f4857dc7..91116b3d4b48443958008a71e2d9dfa671197444 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 d1697a1ffee66b1fcb553f33aa9f5658b541f067..06d7bab550e11046cf44b49f75ccf3a9e207e860 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 cd101bbd8163ca4c9fc8390f3eebebfdbd861354..f13e039f8ef462f5f9f24f8a780a64ef23371ff7 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 487de87b03ebba7677fabb10ada56a2175301526..ac01e636ae27a208b83d511b45b83329905bed05 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 1c53af4811e815c62a97a644383a56ce2496c0c2..924699e5f443f06eada734513844f8f5b8861730 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 61cd4f8752c32d585cfd6d94e49eff73519915b3..4993f134e747520ecca3a0d99e96ad820e0af01e 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);