Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Yongqiang Sun and committed by
Alex Deucher
ecfe7569 c08321cb

+19 -6
+1 -1
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
··· 1415 1415 if (dmcu) 1416 1416 ret = dmcu_load_iram(dmcu, params); 1417 1417 else if (adev->dm.dc->ctx->dmub_srv) 1418 - ret = dmub_init_abm_config(adev->dm.dc->res_pool->abm, params); 1418 + ret = dmub_init_abm_config(adev->dm.dc->res_pool, params); 1419 1419 1420 1420 if (!ret) 1421 1421 return -EINVAL;
+15 -4
drivers/gpu/drm/amd/display/modules/power/power_helpers.c
··· 657 657 params, ram_table, big_endian); 658 658 } 659 659 660 - bool dmub_init_abm_config(struct abm *abm, 660 + bool dmub_init_abm_config(struct resource_pool *res_pool, 661 661 struct dmcu_iram_parameters params) 662 662 { 663 663 struct iram_table_v_2_2 ram_table; ··· 665 665 bool result = false; 666 666 uint32_t i, j = 0; 667 667 668 - if (abm == NULL) 668 + #if defined(CONFIG_DRM_AMD_DC_DCN3_0) 669 + if (res_pool->abm == NULL && res_pool->multiple_abms[0] == NULL) 669 670 return false; 671 + #else 672 + if (res_pool->abm == NULL) 673 + return false; 674 + #endif 670 675 671 676 memset(&ram_table, 0, sizeof(ram_table)); 672 677 memset(&config, 0, sizeof(config)); ··· 712 707 713 708 config.min_abm_backlight = ram_table.min_abm_backlight; 714 709 715 - result = abm->funcs->init_abm_config( 716 - abm, (char *)(&config), sizeof(struct abm_config_table)); 710 + #if defined(CONFIG_DRM_AMD_DC_DCN3_0) 711 + if (res_pool->multiple_abms[0]) { 712 + result = res_pool->multiple_abms[0]->funcs->init_abm_config( 713 + res_pool->multiple_abms[0], (char *)(&config), sizeof(struct abm_config_table)); 714 + } else 715 + #endif 716 + result = res_pool->abm->funcs->init_abm_config( 717 + res_pool->abm, (char *)(&config), sizeof(struct abm_config_table)); 717 718 718 719 return result; 719 720 }
+3 -1
drivers/gpu/drm/amd/display/modules/power/power_helpers.h
··· 28 28 #include "dc/inc/hw/dmcu.h" 29 29 #include "dc/inc/hw/abm.h" 30 30 31 + struct resource_pool; 32 + 31 33 32 34 enum abm_defines { 33 35 abm_defines_max_level = 4, ··· 47 45 48 46 bool dmcu_load_iram(struct dmcu *dmcu, 49 47 struct dmcu_iram_parameters params); 50 - bool dmub_init_abm_config(struct abm *abm, 48 + bool dmub_init_abm_config(struct resource_pool *res_pool, 51 49 struct dmcu_iram_parameters params); 52 50 53 51 #endif /* MODULES_POWER_POWER_HELPERS_H_ */