[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