drm/amd/display: Move DCN314 DOMAIN power control to DMCUB
authorjsg <jsg@openbsd.org>
Mon, 6 Mar 2023 02:34:53 +0000 (02:34 +0000)
committerjsg <jsg@openbsd.org>
Mon, 6 Mar 2023 02:34:53 +0000 (02:34 +0000)
From Nicholas Kazlauskas
4da108082a3290804ebbd42d70ce8535c00e4637 in linux-6.1.y/6.1.15
e383b12709e32d6494c948422070c2464b637e44 in mainline linux

sys/dev/pci/drm/amd/display/dc/dcn314/dcn314_hwseq.c
sys/dev/pci/drm/amd/display/dc/dcn314/dcn314_hwseq.h
sys/dev/pci/drm/amd/display/dc/dcn314/dcn314_init.c
sys/dev/pci/drm/amd/display/dmub/inc/dmub_cmd.h

index a074179..8e824dc 100644 (file)
@@ -391,3 +391,27 @@ void dcn314_set_pixels_per_cycle(struct pipe_ctx *pipe_ctx)
                pipe_ctx->stream_res.stream_enc->funcs->set_input_mode(pipe_ctx->stream_res.stream_enc,
                                pix_per_cycle);
 }
+
+void dcn314_hubp_pg_control(struct dce_hwseq *hws, unsigned int hubp_inst, bool power_on)
+{
+       struct dc_context *ctx = hws->ctx;
+       union dmub_rb_cmd cmd;
+
+       if (hws->ctx->dc->debug.disable_hubp_power_gate)
+               return;
+
+       PERF_TRACE();
+
+       memset(&cmd, 0, sizeof(cmd));
+       cmd.domain_control.header.type = DMUB_CMD__VBIOS;
+       cmd.domain_control.header.sub_type = DMUB_CMD__VBIOS_DOMAIN_CONTROL;
+       cmd.domain_control.header.payload_bytes = sizeof(cmd.domain_control.data);
+       cmd.domain_control.data.inst = hubp_inst;
+       cmd.domain_control.data.power_gate = !power_on;
+
+       dc_dmub_srv_cmd_queue(ctx->dmub_srv, &cmd);
+       dc_dmub_srv_cmd_execute(ctx->dmub_srv);
+       dc_dmub_srv_wait_idle(ctx->dmub_srv);
+
+       PERF_TRACE();
+}
index 2442802..c419d3d 100644 (file)
@@ -41,4 +41,6 @@ unsigned int dcn314_calculate_dccg_k1_k2_values(struct pipe_ctx *pipe_ctx, unsig
 
 void dcn314_set_pixels_per_cycle(struct pipe_ctx *pipe_ctx);
 
+void dcn314_hubp_pg_control(struct dce_hwseq *hws, unsigned int hubp_inst, bool power_on);
+
 #endif /* __DC_HWSS_DCN314_H__ */
index 5b6c2d9..343f4d9 100644 (file)
@@ -137,7 +137,7 @@ static const struct hwseq_private_funcs dcn314_private_funcs = {
        .plane_atomic_disable = dcn20_plane_atomic_disable,
        .plane_atomic_power_down = dcn10_plane_atomic_power_down,
        .enable_power_gating_plane = dcn314_enable_power_gating_plane,
-       .hubp_pg_control = dcn31_hubp_pg_control,
+       .hubp_pg_control = dcn314_hubp_pg_control,
        .program_all_writeback_pipes_in_tree = dcn30_program_all_writeback_pipes_in_tree,
        .update_odm = dcn314_update_odm,
        .dsc_pg_control = dcn314_dsc_pg_control,
index 1bc2832..bb5f2ba 100644 (file)
@@ -452,6 +452,10 @@ enum dmub_cmd_vbios_type {
         * Query DP alt status on a transmitter.
         */
        DMUB_CMD__VBIOS_TRANSMITTER_QUERY_DP_ALT  = 26,
+       /**
+        * Controls domain power gating
+        */
+       DMUB_CMD__VBIOS_DOMAIN_CONTROL = 28,
 };
 
 //==============================================================================
@@ -1193,6 +1197,23 @@ struct dmub_rb_cmd_dig1_transmitter_control {
        union dmub_cmd_dig1_transmitter_control_data transmitter_control; /**< payload */
 };
 
+/**
+ * struct dmub_rb_cmd_domain_control_data - Data for DOMAIN power control
+ */
+struct dmub_rb_cmd_domain_control_data {
+       uint8_t inst : 6; /**< DOMAIN instance to control */
+       uint8_t power_gate : 1; /**< 1=power gate, 0=power up */
+       uint8_t reserved[3]; /**< Reserved for future use */
+};
+
+/**
+ * struct dmub_rb_cmd_domain_control - Controls DOMAIN power gating
+ */
+struct dmub_rb_cmd_domain_control {
+       struct dmub_cmd_header header; /**< header */
+       struct dmub_rb_cmd_domain_control_data data; /**< payload */
+};
+
 /**
  * DPIA tunnel command parameters.
  */
@@ -3189,6 +3210,10 @@ union dmub_rb_cmd {
         * Definition of a DMUB_CMD__VBIOS_DIG1_TRANSMITTER_CONTROL command.
         */
        struct dmub_rb_cmd_dig1_transmitter_control dig1_transmitter_control;
+       /**
+        * Definition of a DMUB_CMD__VBIOS_DOMAIN_CONTROL command.
+        */
+       struct dmub_rb_cmd_domain_control domain_control;
        /**
         * Definition of a DMUB_CMD__PSR_SET_VERSION command.
         */