[PATCH 8/9] drm/amdgpu: make PSP sub modules(ASD/XGMI/TMR) support configurable

Evan Quan evan.quan at amd.com
Wed Jan 2 09:21:40 UTC 2019


As not every generation can support all these PSP sub modules.

Change-Id: I866884e6453a37ff844427eb2d6fd56a91058ebe
Signed-off-by: Evan Quan <evan.quan at amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 41 +++++++++++++++++++------
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 14 ++++++++-
 drivers/gpu/drm/amd/amdgpu/psp_v10_0.c  |  6 ++++
 drivers/gpu/drm/amd/amdgpu/psp_v11_0.c  |  8 +++++
 drivers/gpu/drm/amd/amdgpu/psp_v3_1.c   |  6 ++++
 5 files changed, 64 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
index bf51686bdd0f..ecfbf618652a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
@@ -32,9 +32,6 @@
 #include "psp_v3_1.h"
 #include "psp_v10_0.h"
 #include "psp_v11_0.h"
-#include "psp_xgmi.h"
-#include "psp_tmr.h"
-#include "psp_asd.h"
 
 #define psp_ring_init(psp, type) \
 		(psp)->funcs->ring_init((psp), (type))
@@ -50,6 +47,30 @@
 		(psp)->funcs->submit_cmd_buf((psp), (ucode), (cmd), (fence_mc))
 #define psp_support_vmr_ring(psp) \
 		((psp)->funcs->support_vmr_ring ? (psp)->funcs->support_vmr_ring((psp)) : false)
+#define psp_init_asd(psp) \
+		((psp)->funcs->asd_init ? (psp)->funcs->asd_init((psp)) : 0)
+#define psp_load_asd(psp) \
+		((psp)->funcs->asd_load ? (psp)->funcs->asd_load((psp)) : 0)
+#define psp_unload_asd(psp) \
+		((psp)->funcs->asd_unload ? (psp)->funcs->asd_unload((psp)) : 0)
+#define psp_destory_asd(psp) \
+		((psp)->funcs->asd_destory ? (psp)->funcs->asd_destory((psp)) : 0)
+#define psp_init_tmr(psp) \
+		((psp)->funcs->tmr_init ? (psp)->funcs->tmr_init((psp)) : 0)
+#define psp_load_tmr(psp) \
+		((psp)->funcs->tmr_load ? (psp)->funcs->tmr_load((psp)) : 0)
+#define psp_unload_tmr(psp) \
+		((psp)->funcs->tmr_unload ? (psp)->funcs->tmr_unload((psp)) : 0)
+#define psp_destory_tmr(psp) \
+		((psp)->funcs->tmr_destory ? (psp)->funcs->tmr_destory((psp)) : 0)
+#define psp_init_xgmi(psp) \
+		((psp)->funcs->xgmi_init ? (psp)->funcs->xgmi_init((psp)) : 0)
+#define psp_load_xgmi(psp) \
+		((psp)->funcs->xgmi_load ? (psp)->funcs->xgmi_load((psp)) : 0)
+#define psp_unload_xgmi(psp) \
+		((psp)->funcs->xgmi_unload ? (psp)->funcs->xgmi_unload((psp)) : 0)
+#define psp_destory_xgmi(psp) \
+		((psp)->funcs->xgmi_destory ? (psp)->funcs->xgmi_destory((psp)) : 0)
 #define psp_compare_sram_data(psp, ucode, type) \
 		(psp)->funcs->compare_sram_data((psp), (ucode), (type))
 #define psp_init_microcode(psp) \
@@ -127,16 +148,16 @@ static int psp_hw_start(struct psp_context *psp)
 	if (ret)
 		return ret;
 
-	ret = psp_tmr_load(psp);
+	ret = psp_load_tmr(psp);
 	if (ret)
 		return ret;
 
-	ret = psp_asd_load(psp);
+	ret = psp_load_asd(psp);
 	if (ret)
 		return ret;
 
 	if (adev->gmc.xgmi.num_physical_nodes > 1) {
-		ret = psp_xgmi_initialize(psp);
+		ret = psp_init_xgmi(psp);
 		/* Warning the XGMI seesion initialize failure
 		 * Instead of stop driver initialization
 		 */
@@ -245,11 +266,11 @@ static int psp_load_fw(struct amdgpu_device *adev)
 	if (ret)
 		goto failed_mem;
 
-	ret = psp_tmr_init(psp);
+	ret = psp_init_tmr(psp);
 	if (ret)
 		goto failed_mem;
 
-	ret = psp_asd_init(psp);
+	ret = psp_init_asd(psp);
 	if (ret)
 		goto failed_mem;
 
@@ -316,7 +337,7 @@ static int psp_hw_fini(void *handle)
 
 	if (adev->gmc.xgmi.num_physical_nodes > 1 &&
 	    psp->xgmi_context.initialized == 1)
-                psp_xgmi_terminate(psp);
+                psp_destory_xgmi(psp);
 
 	psp_ring_destroy(psp, PSP_RING_TYPE__KM);
 
@@ -344,7 +365,7 @@ static int psp_suspend(void *handle)
 
 	if (adev->gmc.xgmi.num_physical_nodes > 1 &&
 	    psp->xgmi_context.initialized == 1) {
-		ret = psp_xgmi_terminate(psp);
+		ret = psp_destory_xgmi(psp);
 		if (ret) {
 			DRM_ERROR("Failed to terminate xgmi ta\n");
 			return ret;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
index 16900d4c8034..4cc7fd3224f4 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
@@ -77,6 +77,19 @@ struct psp_funcs
 	int (*submit_cmd_buf)(struct psp_context *psp,
 	                   struct amdgpu_firmware_info *ucode,
 	                   struct psp_gfx_cmd_resp *cmd, uint64_t fence_mc_addr);
+	bool (*support_vmr_ring)(struct psp_context *psp);
+	int (*asd_init)(struct psp_context *psp);
+	int (*asd_load)(struct psp_context *psp);
+	int (*asd_unload)(struct psp_context *psp);
+	int (*asd_destory)(struct psp_context *psp);
+	int (*tmr_init)(struct psp_context *psp);
+	int (*tmr_load)(struct psp_context *psp);
+	int (*tmr_unload)(struct psp_context *psp);
+	int (*tmr_destory)(struct psp_context *psp);
+	int (*xgmi_init)(struct psp_context *psp);
+	int (*xgmi_load)(struct psp_context *psp);
+	int (*xgmi_unload)(struct psp_context *psp);
+	int (*xgmi_destory)(struct psp_context *psp);
 	bool (*compare_sram_data)(struct psp_context *psp,
 				  struct amdgpu_firmware_info *ucode,
 				  enum AMDGPU_UCODE_ID ucode_type);
@@ -88,7 +101,6 @@ struct psp_funcs
 				      struct psp_xgmi_topology_info *topology);
 	int (*xgmi_set_topology_info)(struct psp_context *psp, int number_devices,
 				      struct psp_xgmi_topology_info *topology);
-	bool (*support_vmr_ring)(struct psp_context *psp);
 };
 
 struct psp_xgmi_context {
diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c
index 87d9560a52ce..a469ff952045 100644
--- a/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/psp_v10_0.c
@@ -35,6 +35,8 @@
 #include "sdma0/sdma0_4_1_offset.h"
 #include "psp_ring.h"
 #include "psp_cmn.h"
+#include "psp_asd.h"
+#include "psp_tmr.h"
 
 MODULE_FIRMWARE("amdgpu/raven_asd.bin");
 MODULE_FIRMWARE("amdgpu/picasso_asd.bin");
@@ -105,6 +107,10 @@ static const struct psp_funcs psp_v10_0_funcs = {
 	.ring_destroy = psp_ring_destroy_ring,
 	.prep_cmd_buf = psp_ring_prep_cmd_buf,
 	.submit_cmd_buf = psp_ring_submit_cmd_buf,
+	.asd_init = psp_asd_init,
+	.asd_load = psp_asd_load,
+	.tmr_init = psp_tmr_init,
+	.tmr_load = psp_tmr_load,
 	.compare_sram_data = psp_cmn_compare_sram_data,
 	.mode1_reset = psp_v10_0_mode1_reset,
 };
diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
index b5c6057dd6ed..68ce4ccceec7 100644
--- a/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/psp_v11_0.c
@@ -35,6 +35,8 @@
 #include "psp_ring.h"
 #include "psp_cmn.h"
 #include "psp_xgmi.h"
+#include "psp_asd.h"
+#include "psp_tmr.h"
 
 MODULE_FIRMWARE("amdgpu/vega20_sos.bin");
 MODULE_FIRMWARE("amdgpu/vega20_asd.bin");
@@ -257,6 +259,12 @@ static const struct psp_funcs psp_v11_0_funcs = {
 	.prep_cmd_buf = psp_ring_prep_cmd_buf,
 	.submit_cmd_buf = psp_ring_submit_cmd_buf,
 	.support_vmr_ring = psp_ring_support_vmr,
+	.asd_init = psp_asd_init,
+	.asd_load = psp_asd_load,
+	.tmr_init = psp_tmr_init,
+	.tmr_load = psp_tmr_load,
+	.xgmi_init = psp_xgmi_initialize,
+	.xgmi_destory = psp_xgmi_terminate,
 	.bootloader_load_sysdrv = psp_cmn_bootloader_load_sysdrv,
 	.bootloader_load_sos = psp_cmn_bootloader_load_sos,
 	.compare_sram_data = psp_cmn_compare_sram_data,
diff --git a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
index a013c3ae114b..8bcbc6bb9333 100644
--- a/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/psp_v3_1.c
@@ -38,6 +38,8 @@
 #include "nbio/nbio_6_1_offset.h"
 #include "psp_ring.h"
 #include "psp_cmn.h"
+#include "psp_asd.h"
+#include "psp_tmr.h"
 
 MODULE_FIRMWARE("amdgpu/vega10_sos.bin");
 MODULE_FIRMWARE("amdgpu/vega10_asd.bin");
@@ -175,6 +177,10 @@ static const struct psp_funcs psp_v3_1_funcs = {
 	.ring_destroy = psp_ring_destroy_ring,
 	.prep_cmd_buf = psp_ring_prep_cmd_buf,
 	.submit_cmd_buf = psp_ring_submit_cmd_buf,
+	.asd_init = psp_asd_init,
+	.asd_load = psp_asd_load,
+	.tmr_init = psp_tmr_init,
+	.tmr_load = psp_tmr_load,
 	.bootloader_load_sysdrv = psp_cmn_bootloader_load_sysdrv,
 	.bootloader_load_sos = psp_v3_1_bootloader_load_sos,
 	.compare_sram_data = psp_cmn_compare_sram_data,
-- 
2.20.1



More information about the amd-gfx mailing list