Skip to content

Commit

Permalink
drm/amd/powerplay: refine smumgr code
Browse files Browse the repository at this point in the history
1. delete asic_smum_init functions, export asic private functions
   to smumgr directly, make code more readable.
2. create asic private data in asic_init_func.

Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
  • Loading branch information
Rex Zhu authored and Alex Deucher committed Jan 4, 2017
1 parent c24894f commit 865de13
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 104 deletions.
13 changes: 6 additions & 7 deletions drivers/gpu/drm/amd/powerplay/inc/smumgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ struct pp_hwmgr;
#define smu_lower_32_bits(n) ((uint32_t)(n))
#define smu_upper_32_bits(n) ((uint32_t)(((n)>>16)>>16))

extern const struct pp_smumgr_func cz_smu_funcs;
extern const struct pp_smumgr_func iceland_smu_funcs;
extern const struct pp_smumgr_func tonga_smu_funcs;
extern const struct pp_smumgr_func fiji_smu_funcs;
extern const struct pp_smumgr_func polaris10_smu_funcs;

enum AVFS_BTC_STATUS {
AVFS_BTC_BOOT = 0,
AVFS_BTC_BOOT_STARTEDSMU,
Expand Down Expand Up @@ -168,13 +174,6 @@ extern int smu_allocate_memory(void *device, uint32_t size,
void **kptr, void *handle);

extern int smu_free_memory(void *device, void *handle);

extern int cz_smum_init(struct pp_smumgr *smumgr);
extern int iceland_smum_init(struct pp_smumgr *smumgr);
extern int tonga_smum_init(struct pp_smumgr *smumgr);
extern int fiji_smum_init(struct pp_smumgr *smumgr);
extern int polaris10_smum_init(struct pp_smumgr *smumgr);

extern int smum_update_sclk_threshold(struct pp_hwmgr *hwmgr);

extern int smum_update_smc_table(struct pp_hwmgr *hwmgr, uint32_t type);
Expand Down
22 changes: 8 additions & 14 deletions drivers/gpu/drm/amd/powerplay/smumgr/cz_smumgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -737,9 +737,15 @@ static int cz_start_smu(struct pp_smumgr *smumgr)

static int cz_smu_init(struct pp_smumgr *smumgr)
{
struct cz_smumgr *cz_smu = (struct cz_smumgr *)smumgr->backend;
uint64_t mc_addr = 0;
int ret = 0;
struct cz_smumgr *cz_smu;

cz_smu = kzalloc(sizeof(struct cz_smumgr), GFP_KERNEL);
if (cz_smu == NULL)
return -ENOMEM;

smumgr->backend = cz_smu;

cz_smu->toc_buffer.data_size = 4096;
cz_smu->smu_buffer.data_size =
Expand Down Expand Up @@ -836,7 +842,7 @@ static int cz_smu_fini(struct pp_smumgr *smumgr)
return 0;
}

static const struct pp_smumgr_func cz_smu_funcs = {
const struct pp_smumgr_func cz_smu_funcs = {
.smu_init = cz_smu_init,
.smu_fini = cz_smu_fini,
.start_smu = cz_start_smu,
Expand All @@ -850,15 +856,3 @@ static const struct pp_smumgr_func cz_smu_funcs = {
.upload_pptable_settings = cz_upload_pptable_settings,
};

int cz_smum_init(struct pp_smumgr *smumgr)
{
struct cz_smumgr *cz_smu;

cz_smu = kzalloc(sizeof(struct cz_smumgr), GFP_KERNEL);
if (cz_smu == NULL)
return -ENOMEM;

smumgr->backend = cz_smu;
smumgr->smumgr_funcs = &cz_smu_funcs;
return 0;
}
4 changes: 0 additions & 4 deletions drivers/gpu/drm/amd/powerplay/smumgr/cz_smumgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,4 @@ struct cz_smumgr {
struct cz_buffer_entry scratch_buffer[MAX_NUM_SCRATCH];
};

struct pp_smumgr;

extern int cz_smum_init(struct pp_smumgr *smumgr);

#endif
34 changes: 13 additions & 21 deletions drivers/gpu/drm/amd/powerplay/smumgr/fiji_smumgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -464,13 +464,20 @@ static bool fiji_is_hw_avfs_present(struct pp_smumgr *smumgr)
*/
static int fiji_smu_init(struct pp_smumgr *smumgr)
{
struct fiji_smumgr *priv = (struct fiji_smumgr *)(smumgr->backend);
int i;
struct fiji_smumgr *fiji_priv = NULL;

fiji_priv = kzalloc(sizeof(struct fiji_smumgr), GFP_KERNEL);

if (fiji_priv == NULL)
return -ENOMEM;

smumgr->backend = fiji_priv;

if (smu7_init(smumgr))
return -EINVAL;

priv->avfs.AvfsBtcStatus = AVFS_BTC_BOOT;
fiji_priv->avfs.AvfsBtcStatus = AVFS_BTC_BOOT;
if (fiji_is_hw_avfs_present(smumgr))
/* AVFS Parameter
* 0 - BTC DC disabled, BTC AC disabled
Expand All @@ -479,18 +486,18 @@ static int fiji_smu_init(struct pp_smumgr *smumgr)
* 3 - BTC DC enabled, BTC AC enabled
* Default is 0 - BTC DC disabled, BTC AC disabled
*/
priv->avfs.AvfsBtcParam = 0;
fiji_priv->avfs.AvfsBtcParam = 0;
else
priv->avfs.AvfsBtcStatus = AVFS_BTC_NOTSUPPORTED;
fiji_priv->avfs.AvfsBtcStatus = AVFS_BTC_NOTSUPPORTED;

for (i = 0; i < SMU73_MAX_LEVELS_GRAPHICS; i++)
priv->activity_target[i] = 30;
fiji_priv->activity_target[i] = 30;

return 0;
}


static const struct pp_smumgr_func fiji_smu_funcs = {
const struct pp_smumgr_func fiji_smu_funcs = {
.smu_init = &fiji_smu_init,
.smu_fini = &smu7_smu_fini,
.start_smu = &fiji_start_smu,
Expand All @@ -513,18 +520,3 @@ static const struct pp_smumgr_func fiji_smu_funcs = {
.initialize_mc_reg_table = fiji_initialize_mc_reg_table,
.is_dpm_running = fiji_is_dpm_running,
};

int fiji_smum_init(struct pp_smumgr *smumgr)
{
struct fiji_smumgr *fiji_smu = NULL;

fiji_smu = kzalloc(sizeof(struct fiji_smumgr), GFP_KERNEL);

if (fiji_smu == NULL)
return -ENOMEM;

smumgr->backend = fiji_smu;
smumgr->smumgr_funcs = &fiji_smu_funcs;

return 0;
}
28 changes: 11 additions & 17 deletions drivers/gpu/drm/amd/powerplay/smumgr/iceland_smumgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,17 +201,25 @@ static int iceland_start_smu(struct pp_smumgr *smumgr)
static int iceland_smu_init(struct pp_smumgr *smumgr)
{
int i;
struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(smumgr->backend);
struct iceland_smumgr *iceland_priv = NULL;

iceland_priv = kzalloc(sizeof(struct iceland_smumgr), GFP_KERNEL);

if (iceland_priv == NULL)
return -ENOMEM;

smumgr->backend = iceland_priv;

if (smu7_init(smumgr))
return -EINVAL;

for (i = 0; i < SMU71_MAX_LEVELS_GRAPHICS; i++)
smu_data->activity_target[i] = 30;
iceland_priv->activity_target[i] = 30;

return 0;
}

static const struct pp_smumgr_func iceland_smu_funcs = {
const struct pp_smumgr_func iceland_smu_funcs = {
.smu_init = &iceland_smu_init,
.smu_fini = &smu7_smu_fini,
.start_smu = &iceland_start_smu,
Expand All @@ -234,17 +242,3 @@ static const struct pp_smumgr_func iceland_smu_funcs = {
.is_dpm_running = iceland_is_dpm_running,
};

int iceland_smum_init(struct pp_smumgr *smumgr)
{
struct iceland_smumgr *iceland_smu = NULL;

iceland_smu = kzalloc(sizeof(struct iceland_smumgr), GFP_KERNEL);

if (iceland_smu == NULL)
return -ENOMEM;

smumgr->backend = iceland_smu;
smumgr->smumgr_funcs = &iceland_smu_funcs;

return 0;
}
25 changes: 8 additions & 17 deletions drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -364,9 +364,15 @@ static bool polaris10_is_hw_avfs_present(struct pp_smumgr *smumgr)

static int polaris10_smu_init(struct pp_smumgr *smumgr)
{
struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(smumgr->backend);
struct polaris10_smumgr *smu_data;
int i;

smu_data = kzalloc(sizeof(struct polaris10_smumgr), GFP_KERNEL);
if (smu_data == NULL)
return -ENOMEM;

smumgr->backend = smu_data;

if (smu7_init(smumgr))
return -EINVAL;

Expand All @@ -381,7 +387,7 @@ static int polaris10_smu_init(struct pp_smumgr *smumgr)
return 0;
}

static const struct pp_smumgr_func polaris10_smu_funcs = {
const struct pp_smumgr_func polaris10_smu_funcs = {
.smu_init = polaris10_smu_init,
.smu_fini = smu7_smu_fini,
.start_smu = polaris10_start_smu,
Expand All @@ -404,18 +410,3 @@ static const struct pp_smumgr_func polaris10_smu_funcs = {
.get_mac_definition = polaris10_get_mac_definition,
.is_dpm_running = polaris10_is_dpm_running,
};

int polaris10_smum_init(struct pp_smumgr *smumgr)
{
struct polaris10_smumgr *polaris10_smu = NULL;

polaris10_smu = kzalloc(sizeof(struct polaris10_smumgr), GFP_KERNEL);

if (polaris10_smu == NULL)
return -EINVAL;

smumgr->backend = polaris10_smu;
smumgr->smumgr_funcs = &polaris10_smu_funcs;

return 0;
}
11 changes: 6 additions & 5 deletions drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ MODULE_FIRMWARE("amdgpu/polaris11_smc.bin");
MODULE_FIRMWARE("amdgpu/polaris11_smc_sk.bin");
MODULE_FIRMWARE("amdgpu/polaris12_smc.bin");


int smum_early_init(struct pp_instance *handle)
{
struct pp_smumgr *smumgr;
Expand All @@ -61,23 +62,23 @@ int smum_early_init(struct pp_instance *handle)

switch (smumgr->chip_family) {
case AMDGPU_FAMILY_CZ:
cz_smum_init(smumgr);
smumgr->smumgr_funcs = &cz_smu_funcs;
break;
case AMDGPU_FAMILY_VI:
switch (smumgr->chip_id) {
case CHIP_TOPAZ:
iceland_smum_init(smumgr);
smumgr->smumgr_funcs = &iceland_smu_funcs;
break;
case CHIP_TONGA:
tonga_smum_init(smumgr);
smumgr->smumgr_funcs = &tonga_smu_funcs;
break;
case CHIP_FIJI:
fiji_smum_init(smumgr);
smumgr->smumgr_funcs = &fiji_smu_funcs;
break;
case CHIP_POLARIS11:
case CHIP_POLARIS10:
case CHIP_POLARIS12:
polaris10_smum_init(smumgr);
smumgr->smumgr_funcs = &polaris10_smu_funcs;
break;
default:
return -EINVAL;
Expand Down
28 changes: 9 additions & 19 deletions drivers/gpu/drm/amd/powerplay/smumgr/tonga_smumgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,20 +169,25 @@ static int tonga_start_smu(struct pp_smumgr *smumgr)
*/
static int tonga_smu_init(struct pp_smumgr *smumgr)
{
struct tonga_smumgr *smu_data = (struct tonga_smumgr *)(smumgr->backend);
struct tonga_smumgr *tonga_priv = NULL;
int i;

int i;
tonga_priv = kzalloc(sizeof(struct tonga_smumgr), GFP_KERNEL);
if (tonga_priv == NULL)
return -ENOMEM;

smumgr->backend = tonga_priv;

if (smu7_init(smumgr))
return -EINVAL;

for (i = 0; i < SMU72_MAX_LEVELS_GRAPHICS; i++)
smu_data->activity_target[i] = 30;
tonga_priv->activity_target[i] = 30;

return 0;
}

static const struct pp_smumgr_func tonga_smu_funcs = {
const struct pp_smumgr_func tonga_smu_funcs = {
.smu_init = &tonga_smu_init,
.smu_fini = &smu7_smu_fini,
.start_smu = &tonga_start_smu,
Expand All @@ -205,18 +210,3 @@ static const struct pp_smumgr_func tonga_smu_funcs = {
.initialize_mc_reg_table = tonga_initialize_mc_reg_table,
.is_dpm_running = tonga_is_dpm_running,
};

int tonga_smum_init(struct pp_smumgr *smumgr)
{
struct tonga_smumgr *tonga_smu = NULL;

tonga_smu = kzalloc(sizeof(struct tonga_smumgr), GFP_KERNEL);

if (tonga_smu == NULL)
return -ENOMEM;

smumgr->backend = tonga_smu;
smumgr->smumgr_funcs = &tonga_smu_funcs;

return 0;
}

0 comments on commit 865de13

Please sign in to comment.