drm/amd/display: Change ABM config init interface

[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>
This commit is contained in:
Yongqiang Sun 2020-07-31 13:57:05 -04:00 committed by Alex Deucher
parent dcba603f82
commit 33c8256b3b
3 changed files with 19 additions and 6 deletions

View File

@ -1409,7 +1409,7 @@ static int dm_late_init(void *handle)
if (dmcu) if (dmcu)
ret = dmcu_load_iram(dmcu, params); ret = dmcu_load_iram(dmcu, params);
else if (adev->dm.dc->ctx->dmub_srv) 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) if (!ret)
return -EINVAL; return -EINVAL;

View 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); 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 dmcu_iram_parameters params)
{ {
struct iram_table_v_2_2 ram_table; struct iram_table_v_2_2 ram_table;
@ -665,8 +665,13 @@ bool dmub_init_abm_config(struct abm *abm,
bool result = false; bool result = false;
uint32_t i, j = 0; 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; return false;
#else
if (res_pool->abm == NULL)
return false;
#endif
memset(&ram_table, 0, sizeof(ram_table)); memset(&ram_table, 0, sizeof(ram_table));
memset(&config, 0, sizeof(config)); 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; config.min_abm_backlight = ram_table.min_abm_backlight;
result = abm->funcs->init_abm_config( #if defined(CONFIG_DRM_AMD_DC_DCN3_0)
abm, (char *)(&config), sizeof(struct abm_config_table)); 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; return result;
} }

View File

@ -28,6 +28,8 @@
#include "dc/inc/hw/dmcu.h" #include "dc/inc/hw/dmcu.h"
#include "dc/inc/hw/abm.h" #include "dc/inc/hw/abm.h"
struct resource_pool;
enum abm_defines { enum abm_defines {
abm_defines_max_level = 4, abm_defines_max_level = 4,
@ -45,7 +47,7 @@ struct dmcu_iram_parameters {
bool dmcu_load_iram(struct dmcu *dmcu, bool dmcu_load_iram(struct dmcu *dmcu,
struct dmcu_iram_parameters params); 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); struct dmcu_iram_parameters params);
#endif /* MODULES_POWER_POWER_HELPERS_H_ */ #endif /* MODULES_POWER_POWER_HELPERS_H_ */