drm/amdgpu: add psp ras callback func and macro
[linux-2.6-microblaze.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_psp.h
index 3ee573b..3e6fcc9 100644 (file)
@@ -28,6 +28,7 @@
 #include "amdgpu.h"
 #include "psp_gfx_if.h"
 #include "ta_xgmi_if.h"
+#include "ta_ras_if.h"
 
 #define PSP_FENCE_BUFFER_SIZE  0x1000
 #define PSP_CMD_BUFFER_SIZE    0x1000
@@ -65,8 +66,6 @@ struct psp_funcs
        int (*init_microcode)(struct psp_context *psp);
        int (*bootloader_load_sysdrv)(struct psp_context *psp);
        int (*bootloader_load_sos)(struct psp_context *psp);
-       int (*prep_cmd_buf)(struct amdgpu_firmware_info *ucode,
-                           struct psp_gfx_cmd_resp *cmd);
        int (*ring_init)(struct psp_context *psp, enum psp_ring_type ring_type);
        int (*ring_create)(struct psp_context *psp,
                           enum psp_ring_type ring_type);
@@ -90,6 +89,9 @@ struct psp_funcs
        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);
+       int (*ras_trigger_error)(struct psp_context *psp,
+                       struct ta_ras_trigger_error_input *info);
+       int (*ras_cure_posion)(struct psp_context *psp, uint64_t *mode_ptr);
 };
 
 struct psp_xgmi_context {
@@ -152,9 +154,13 @@ struct psp_context
 
        /* xgmi ta firmware and buffer */
        const struct firmware           *ta_fw;
+       uint32_t                        ta_fw_version;
        uint32_t                        ta_xgmi_ucode_version;
        uint32_t                        ta_xgmi_ucode_size;
        uint8_t                         *ta_xgmi_start_addr;
+       uint32_t                        ta_ras_ucode_version;
+       uint32_t                        ta_ras_ucode_size;
+       uint8_t                         *ta_ras_start_addr;
        struct psp_xgmi_context         xgmi_context;
 };
 
@@ -176,7 +182,6 @@ struct psp_xgmi_topology_info {
        struct psp_xgmi_node_info       nodes[AMDGPU_XGMI_MAX_CONNECTED_NODES];
 };
 
-#define psp_prep_cmd_buf(ucode, type) (psp)->funcs->prep_cmd_buf((ucode), (type))
 #define psp_ring_init(psp, type) (psp)->funcs->ring_init((psp), (type))
 #define psp_ring_create(psp, type) (psp)->funcs->ring_create((psp), (type))
 #define psp_ring_stop(psp, type) (psp)->funcs->ring_stop((psp), (type))
@@ -210,6 +215,13 @@ struct psp_xgmi_topology_info {
 
 #define amdgpu_psp_check_fw_loading_status(adev, i) (adev)->firmware.funcs->check_fw_loading_status((adev), (i))
 
+#define psp_ras_trigger_error(psp, info) \
+       ((psp)->funcs->ras_trigger_error ? \
+       (psp)->funcs->ras_trigger_error((psp), (info)) : -EINVAL)
+#define psp_ras_cure_posion(psp, addr) \
+       ((psp)->funcs->ras_cure_posion ? \
+       (psp)->funcs->ras_cure_posion(psp, (addr)) : -EINVAL)
+
 extern const struct amd_ip_funcs psp_ip_funcs;
 
 extern const struct amdgpu_ip_block_version psp_v3_1_ip_block;