drm/amd/display: On boot disable domain22 force power on
authorDaniel Miess <daniel.miess@amd.com>
Fri, 13 Oct 2023 14:38:09 +0000 (10:38 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 7 Nov 2023 16:15:48 +0000 (11:15 -0500)
[Why]
HDCP2 enablement fails when domain22 is set to force
power on

[How]
Disable force power on for domain22 on startup

Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Acked-by: Hersen Wu <hersenxs.wu@amd.com>
Signed-off-by: Daniel Miess <daniel.miess@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn35/dcn35_pg_cntl.c
drivers/gpu/drm/amd/display/dc/dcn35/dcn35_pg_cntl.h
drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c
drivers/gpu/drm/amd/display/dc/inc/hw/pg_cntl.h

index 0f60c40e1fc50a8117c3b3c0144ebaf4ba8d3625..46f71ff08fd176a668732db37dac8c5ee0de16a5 100644 (file)
@@ -332,6 +332,13 @@ void pg_cntl35_io_clk_pg_control(struct pg_cntl *pg_cntl, bool power_on)
        pg_cntl->pg_res_enable[PG_DCIO] = power_on;
 }
 
+void pg_cntl35_set_force_poweron_domain22(struct pg_cntl *pg_cntl, bool power_on)
+{
+       struct dcn_pg_cntl *pg_cntl_dcn = TO_DCN_PG_CNTL(pg_cntl);
+
+       REG_UPDATE(DOMAIN22_PG_CONFIG, DOMAIN_POWER_FORCEON, power_on ? 1 : 0);
+}
+
 static bool pg_cntl35_plane_otg_status(struct pg_cntl *pg_cntl)
 {
        struct dcn_pg_cntl *pg_cntl_dcn = TO_DCN_PG_CNTL(pg_cntl);
@@ -501,7 +508,8 @@ static const struct pg_cntl_funcs pg_cntl35_funcs = {
        .mpcc_pg_control = pg_cntl35_mpcc_pg_control,
        .opp_pg_control = pg_cntl35_opp_pg_control,
        .optc_pg_control = pg_cntl35_optc_pg_control,
-       .dwb_pg_control = pg_cntl35_dwb_pg_control
+       .dwb_pg_control = pg_cntl35_dwb_pg_control,
+       .set_force_poweron_domain22 = pg_cntl35_set_force_poweron_domain22
 };
 
 struct pg_cntl *pg_cntl35_create(
index 3de240884d22fa23e662cfd68413e6590d20745e..069dae08e2224b2ccfafddd1ca0a467e2a1b2a92 100644 (file)
@@ -183,6 +183,7 @@ void pg_cntl35_optc_pg_control(struct pg_cntl *pg_cntl,
        unsigned int optc_inst, bool power_on);
 void pg_cntl35_dwb_pg_control(struct pg_cntl *pg_cntl, bool power_on);
 void pg_cntl35_init_pg_status(struct pg_cntl *pg_cntl);
+void pg_cntl35_set_force_poweron_domain22(struct pg_cntl *pg_cntl, bool power_on);
 
 struct pg_cntl *pg_cntl35_create(
        struct dc_context *ctx,
index 34737d60b965b81671c1fc2b5e1b4bda3b854c49..ff46e36cb254aff5f5b63141e66ef07af88c940c 100644 (file)
@@ -311,6 +311,9 @@ void dcn35_init_hw(struct dc *dc)
        if (dc->res_pool->pg_cntl) {
                if (dc->res_pool->pg_cntl->funcs->init_pg_status)
                        dc->res_pool->pg_cntl->funcs->init_pg_status(dc->res_pool->pg_cntl);
+
+               if (dc->res_pool->pg_cntl->funcs->set_force_poweron_domain22)
+                       dc->res_pool->pg_cntl->funcs->set_force_poweron_domain22(dc->res_pool->pg_cntl, false);
        }
 }
 
index 00ea3864dd4df4bbd5f8d4c15b6c4aaa4eb8e306..b9812afb886be16937ee1aae8d763600e7815e08 100644 (file)
@@ -47,6 +47,8 @@ struct pg_cntl_funcs {
        void (*optc_pg_control)(struct pg_cntl *pg_cntl, unsigned int optc_inst, bool power_on);
        void (*dwb_pg_control)(struct pg_cntl *pg_cntl, bool power_on);
        void (*init_pg_status)(struct pg_cntl *pg_cntl);
+
+       void (*set_force_poweron_domain22)(struct pg_cntl *pg_cntl, bool power_on);
 };
 
 #endif //__DC_PG_CNTL_H__