]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
drm/amd/display: Change ABM config init interface
authorYongqiang Sun <yongqiang.sun@amd.com>
Fri, 31 Jul 2020 17:57:05 +0000 (13:57 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 17 Aug 2020 18:07:42 +0000 (14:07 -0400)
[Why & How]
change abm config init interface to support multiple ABMs.

Signed-off-by: Yongqiang Sun <yongqiang.sun@amd.com>
Reviewed-by: Chris Park <Chris.Park@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/modules/power/power_helpers.c
drivers/gpu/drm/amd/display/modules/power/power_helpers.h

index 653b4a0d51d8c538cd11aec14d49f3d0796f1f35..a9b34462f5e19d9322a66503e106012870ea3cb5 100644 (file)
@@ -1415,7 +1415,7 @@ static int dm_late_init(void *handle)
        if (dmcu)
                ret = dmcu_load_iram(dmcu, params);
        else if (adev->dm.dc->ctx->dmub_srv)
-               ret = dmub_init_abm_config(adev->dm.dc->res_pool->abm, params);
+               ret = dmub_init_abm_config(adev->dm.dc->res_pool, params);
 
        if (!ret)
                return -EINVAL;
index 859724771a75dc6a7b4dc1e8c5ee3eaff7e2dbf0..61497954e67e52ab0870b233e14ab8309a3cf87b 100644 (file)
@@ -657,7 +657,7 @@ void fill_iram_v_2_3(struct iram_table_v_2_2 *ram_table, struct dmcu_iram_parame
                        params, ram_table, big_endian);
 }
 
-bool dmub_init_abm_config(struct abm *abm,
+bool dmub_init_abm_config(struct resource_pool *res_pool,
        struct dmcu_iram_parameters params)
 {
        struct iram_table_v_2_2 ram_table;
@@ -665,8 +665,13 @@ bool dmub_init_abm_config(struct abm *abm,
        bool result = false;
        uint32_t i, j = 0;
 
-       if (abm == NULL)
+#if defined(CONFIG_DRM_AMD_DC_DCN3_0)
+       if (res_pool->abm == NULL && res_pool->multiple_abms[0] == NULL)
                return false;
+#else
+       if (res_pool->abm == NULL)
+               return false;
+#endif
 
        memset(&ram_table, 0, sizeof(ram_table));
        memset(&config, 0, sizeof(config));
@@ -707,8 +712,14 @@ bool dmub_init_abm_config(struct abm *abm,
 
        config.min_abm_backlight = ram_table.min_abm_backlight;
 
-       result = abm->funcs->init_abm_config(
-               abm, (char *)(&config), sizeof(struct abm_config_table));
+#if defined(CONFIG_DRM_AMD_DC_DCN3_0)
+       if (res_pool->multiple_abms[0]) {
+               result = res_pool->multiple_abms[0]->funcs->init_abm_config(
+                       res_pool->multiple_abms[0], (char *)(&config), sizeof(struct abm_config_table));
+       } else
+#endif
+               result = res_pool->abm->funcs->init_abm_config(
+                       res_pool->abm, (char *)(&config), sizeof(struct abm_config_table));
 
        return result;
 }
index 46fbca2e2cd1c850a68e62c1e87fdaa844b2cf40..fa4728d880920a47226ee44aa5964cc96e2b688a 100644 (file)
@@ -28,6 +28,8 @@
 #include "dc/inc/hw/dmcu.h"
 #include "dc/inc/hw/abm.h"
 
+struct resource_pool;
+
 
 enum abm_defines {
        abm_defines_max_level = 4,
@@ -45,7 +47,7 @@ struct dmcu_iram_parameters {
 
 bool dmcu_load_iram(struct dmcu *dmcu,
                struct dmcu_iram_parameters params);
-bool dmub_init_abm_config(struct abm *abm,
+bool dmub_init_abm_config(struct resource_pool *res_pool,
                struct dmcu_iram_parameters params);
 
 #endif /* MODULES_POWER_POWER_HELPERS_H_ */