Commit 63b55943 authored by Rex Zhu's avatar Rex Zhu Committed by Alex Deucher
Browse files

drm/amd/powerplay: refine smumgr code



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: default avatarRex Zhu <Rex.Zhu@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent a0aa7046
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -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,
@@ -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);
+8 −14
Original line number Diff line number Diff line
@@ -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 =
@@ -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,
@@ -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;
}
+0 −4
Original line number Diff line number Diff line
@@ -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
+13 −21
Original line number Diff line number Diff line
@@ -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
@@ -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,
@@ -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;
}
+11 −17
Original line number Diff line number Diff line
@@ -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,
@@ -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;
}
Loading