Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

drm/amd/powerplay: allocate fb for avfs fuse table on vega10.

parent 67131aa5
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -515,6 +515,40 @@ static int vega10_smu_init(struct pp_smumgr *smumgr)
		}
	}

	/* allocate space for AVFS Fuse table */
	smu_allocate_memory(smumgr->device,
			sizeof(AvfsFuseOverride_t),
			CGS_GPU_MEM_TYPE__VISIBLE_CONTIG_FB,
			PAGE_SIZE,
			&mc_addr,
			&kaddr,
			&handle);

	PP_ASSERT_WITH_CODE(kaddr,
			"[vega10_smu_init] Out of memory for avfs fuse table.",
			kfree(smumgr->backend);
			cgs_free_gpu_mem(smumgr->device,
			(cgs_handle_t)priv->smu_tables.entry[PPTABLE].handle);
			cgs_free_gpu_mem(smumgr->device,
			(cgs_handle_t)priv->smu_tables.entry[WMTABLE].handle);
			cgs_free_gpu_mem(smumgr->device,
			(cgs_handle_t)priv->smu_tables.entry[AVFSTABLE].handle);
			cgs_free_gpu_mem(smumgr->device,
			(cgs_handle_t)priv->smu_tables.entry[TOOLSTABLE].handle);
			cgs_free_gpu_mem(smumgr->device,
			(cgs_handle_t)handle);
			return -1);

	priv->smu_tables.entry[AVFSFUSETABLE].version = 0x01;
	priv->smu_tables.entry[AVFSFUSETABLE].size = sizeof(AvfsFuseOverride_t);
	priv->smu_tables.entry[AVFSFUSETABLE].table_id = TABLE_AVFS_FUSE_OVERRIDE;
	priv->smu_tables.entry[AVFSFUSETABLE].table_addr_high =
			smu_upper_32_bits(mc_addr);
	priv->smu_tables.entry[AVFSFUSETABLE].table_addr_low =
			smu_lower_32_bits(mc_addr);
	priv->smu_tables.entry[AVFSFUSETABLE].table = kaddr;
	priv->smu_tables.entry[AVFSFUSETABLE].handle = handle;

	return 0;
}

@@ -533,6 +567,8 @@ static int vega10_smu_fini(struct pp_smumgr *smumgr)
		if (priv->smu_tables.entry[TOOLSTABLE].table)
			cgs_free_gpu_mem(smumgr->device,
					(cgs_handle_t)priv->smu_tables.entry[TOOLSTABLE].handle);
		cgs_free_gpu_mem(smumgr->device,
				(cgs_handle_t)priv->smu_tables.entry[AVFSFUSETABLE].handle);
		kfree(smumgr->backend);
		smumgr->backend = NULL;
	}
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ enum smu_table_id {
	WMTABLE,
	AVFSTABLE,
	TOOLSTABLE,
	AVFSFUSETABLE,
	MAX_SMU_TABLE,
};