<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<p class="msipheader251902e5" align="Left" style="margin:0"><span style="font-size:10.0pt;font-family:Arial;color:#317100">[AMD Public Use]</span></p>
<br>
<div class="WordSection1">
<p class="MsoNormal">v1: Add generic amdgpu_reset_control to handle different types of resets. It<o:p></o:p></p>
<p class="MsoNormal">may be added at device, hive or ip level. Each reset control has a list<o:p></o:p></p>
<p class="MsoNormal">of handlers associated with it to handle different types of reset. Reset<o:p></o:p></p>
<p class="MsoNormal">control is responsible for choosing the right handler given a particular<o:p></o:p></p>
<p class="MsoNormal">reset context.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Handler objects may implement a set of functions on how to handle a<o:p></o:p></p>
<p class="MsoNormal">particular type of reset.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">prepare_env = Prepare environment/software context (not used currently).<o:p></o:p></p>
<p class="MsoNormal">prepare_hwcontext = Prepare hardware context for the reset.<o:p></o:p></p>
<p class="MsoNormal">perform_reset = Perform the type of reset.<o:p></o:p></p>
<p class="MsoNormal">restore_hwcontext = Restore the hw context after reset.<o:p></o:p></p>
<p class="MsoNormal">restore_env = Restore the environment after reset (not used currently).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Reset context carries the context of reset, as of now this is based on<o:p></o:p></p>
<p class="MsoNormal">the parameters used for current set of resets.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">v2: Fix coding style<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Signed-off-by: Lijo Lazar <a href="mailto:lijo.lazar@amd.com">
lijo.lazar@amd.com</a><o:p></o:p></p>
<p class="MsoNormal">---<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/Makefile       |  5 ++<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/amdgpu.h       |  3 +<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c | 82 ++++++++++++++++++++++<o:p></o:p></p>
<p class="MsoNormal">drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h | 85 +++++++++++++++++++++++<o:p></o:p></p>
<p class="MsoNormal">4 files changed, 175 insertions(+)<o:p></o:p></p>
<p class="MsoNormal">create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c<o:p></o:p></p>
<p class="MsoNormal">create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile<o:p></o:p></p>
<p class="MsoNormal">index 741b68874e53..a0a5fd1788b5 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/Makefile<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/Makefile<o:p></o:p></p>
<p class="MsoNormal">@@ -179,9 +179,14 @@ amdgpu-y += \<o:p></o:p></p>
<p class="MsoNormal">               smuio_v11_0_6.o \<o:p></o:p></p>
<p class="MsoNormal">               smuio_v13_0.o<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal">+# add reset block<o:p></o:p></p>
<p class="MsoNormal">+amdgpu-y += \<o:p></o:p></p>
<p class="MsoNormal">+             amdgpu_reset.o<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal"># add amdkfd interfaces<o:p></o:p></p>
<p class="MsoNormal">amdgpu-y += amdgpu_amdkfd.o<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">ifneq ($(CONFIG_HSA_AMD),)<o:p></o:p></p>
<p class="MsoNormal">AMDKFD_PATH := ../amdkfd<o:p></o:p></p>
<p class="MsoNormal">include $(FULL_AMD_PATH)/amdkfd/Makefile<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<o:p></o:p></p>
<p class="MsoNormal">index 963ecfd84347..1fba89cced91 100644<o:p></o:p></p>
<p class="MsoNormal">--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<o:p></o:p></p>
<p class="MsoNormal">@@ -271,6 +271,7 @@ struct amdgpu_bo_va_mapping;<o:p></o:p></p>
<p class="MsoNormal">struct amdgpu_atif;<o:p></o:p></p>
<p class="MsoNormal">struct kfd_vm_fault_info;<o:p></o:p></p>
<p class="MsoNormal">struct amdgpu_hive_info;<o:p></o:p></p>
<p class="MsoNormal">+struct amdgpu_reset_control;<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"> enum amdgpu_cp_irq {<o:p></o:p></p>
<p class="MsoNormal">               AMDGPU_CP_IRQ_GFX_ME0_PIPE0_EOP = 0,<o:p></o:p></p>
<p class="MsoNormal">@@ -589,6 +590,7 @@ struct amdgpu_allowed_register_entry {<o:p></o:p></p>
<p class="MsoNormal">};<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"> enum amd_reset_method {<o:p></o:p></p>
<p class="MsoNormal">+             AMD_RESET_METHOD_NONE = -1,<o:p></o:p></p>
<p class="MsoNormal">               AMD_RESET_METHOD_LEGACY = 0,<o:p></o:p></p>
<p class="MsoNormal">               AMD_RESET_METHOD_MODE0,<o:p></o:p></p>
<p class="MsoNormal">               AMD_RESET_METHOD_MODE1,<o:p></o:p></p>
<p class="MsoNormal">@@ -1077,6 +1079,7 @@ struct amdgpu_device {<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal">                bool                            in_pci_err_recovery;<o:p></o:p></p>
<p class="MsoNormal">               struct pci_saved_state          *pci_state;<o:p></o:p></p>
<p class="MsoNormal">+             struct amdgpu_reset_control     *reset_cntl;<o:p></o:p></p>
<p class="MsoNormal">};<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"> static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev)<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c<o:p></o:p></p>
<p class="MsoNormal">new file mode 100644<o:p></o:p></p>
<p class="MsoNormal">index 000000000000..5bc94b8320ba<o:p></o:p></p>
<p class="MsoNormal">--- /dev/null<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.c<o:p></o:p></p>
<p class="MsoNormal">@@ -0,0 +1,82 @@<o:p></o:p></p>
<p class="MsoNormal">+/*<o:p></o:p></p>
<p class="MsoNormal">+ * Copyright 2021 Advanced Micro Devices, Inc.<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ * Permission is hereby granted, free of charge, to any person obtaining a<o:p></o:p></p>
<p class="MsoNormal">+ * copy of this software and associated documentation files (the "Software"),<o:p></o:p></p>
<p class="MsoNormal">+ * to deal in the Software without restriction, including without limitation<o:p></o:p></p>
<p class="MsoNormal">+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,<o:p></o:p></p>
<p class="MsoNormal">+ * and/or sell copies of the Software, and to permit persons to whom the<o:p></o:p></p>
<p class="MsoNormal">+ * Software is furnished to do so, subject to the following conditions:<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ * The above copyright notice and this permission notice shall be included in<o:p></o:p></p>
<p class="MsoNormal">+ * all copies or substantial portions of the Software.<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<o:p></o:p></p>
<p class="MsoNormal">+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<o:p></o:p></p>
<p class="MsoNormal">+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL<o:p></o:p></p>
<p class="MsoNormal">+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR<o:p></o:p></p>
<p class="MsoNormal">+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,<o:p></o:p></p>
<p class="MsoNormal">+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR<o:p></o:p></p>
<p class="MsoNormal">+ * OTHER DEALINGS IN THE SOFTWARE.<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ */<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+#include "amdgpu_reset.h"<o:p></o:p></p>
<p class="MsoNormal">+#include "aldebaran.h"<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+int amdgpu_reset_add_handler(struct amdgpu_reset_control *reset_ctl,<o:p></o:p></p>
<p class="MsoNormal">+                                                  struct amdgpu_reset_handler *handler)<o:p></o:p></p>
<p class="MsoNormal">+{<o:p></o:p></p>
<p class="MsoNormal">+             /* TODO: Check if handler exists? */<o:p></o:p></p>
<p class="MsoNormal">+             list_add_tail(&handler->handler_list, &reset_ctl->reset_handlers);<o:p></o:p></p>
<p class="MsoNormal">+             return 0;<o:p></o:p></p>
<p class="MsoNormal">+}<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+int amdgpu_reset_init(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal">+{<o:p></o:p></p>
<p class="MsoNormal">+             int ret = 0;<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+             return ret;<o:p></o:p></p>
<p class="MsoNormal">+}<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+int amdgpu_reset_fini(struct amdgpu_device *adev)<o:p></o:p></p>
<p class="MsoNormal">+{<o:p></o:p></p>
<p class="MsoNormal">+             int ret = 0;<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+             return ret;<o:p></o:p></p>
<p class="MsoNormal">+}<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+int amdgpu_reset_prepare_hwcontext(struct amdgpu_device *adev,<o:p></o:p></p>
<p class="MsoNormal">+                                                                struct amdgpu_reset_context *reset_context)<o:p></o:p></p>
<p class="MsoNormal">+{<o:p></o:p></p>
<p class="MsoNormal">+             struct amdgpu_reset_handler *reset_handler = NULL;<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+             if (adev->reset_cntl && adev->reset_cntl->get_reset_handler)<o:p></o:p></p>
<p class="MsoNormal">+                             reset_handler = adev->reset_cntl->get_reset_handler(<o:p></o:p></p>
<p class="MsoNormal">+                                             adev->reset_cntl, reset_context);<o:p></o:p></p>
<p class="MsoNormal">+             if (!reset_handler)<o:p></o:p></p>
<p class="MsoNormal">+                             return -ENOSYS;<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+             return reset_handler->prepare_hwcontext(adev->reset_cntl,<o:p></o:p></p>
<p class="MsoNormal">+                                                                                             reset_context);<o:p></o:p></p>
<p class="MsoNormal">+}<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+int amdgpu_reset_perform_reset(struct amdgpu_device *adev,<o:p></o:p></p>
<p class="MsoNormal">+                                                    struct amdgpu_reset_context *reset_context)<o:p></o:p></p>
<p class="MsoNormal">+{<o:p></o:p></p>
<p class="MsoNormal">+             int ret;<o:p></o:p></p>
<p class="MsoNormal">+             struct amdgpu_reset_handler *reset_handler = NULL;<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+             if (adev->reset_cntl)<o:p></o:p></p>
<p class="MsoNormal">+                             reset_handler = adev->reset_cntl->get_reset_handler(<o:p></o:p></p>
<p class="MsoNormal">+                                             adev->reset_cntl, reset_context);<o:p></o:p></p>
<p class="MsoNormal">+             if (!reset_handler)<o:p></o:p></p>
<p class="MsoNormal">+                             return -ENOSYS;<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+             ret = reset_handler->perform_reset(adev->reset_cntl, reset_context);<o:p></o:p></p>
<p class="MsoNormal">+             if (ret)<o:p></o:p></p>
<p class="MsoNormal">+                             return ret;<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+             return reset_handler->restore_hwcontext(adev->reset_cntl,<o:p></o:p></p>
<p class="MsoNormal">+                                                                                             reset_context);<o:p></o:p></p>
<p class="MsoNormal">+}<o:p></o:p></p>
<p class="MsoNormal">diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h<o:p></o:p></p>
<p class="MsoNormal">new file mode 100644<o:p></o:p></p>
<p class="MsoNormal">index 000000000000..dc84d871fe72<o:p></o:p></p>
<p class="MsoNormal">--- /dev/null<o:p></o:p></p>
<p class="MsoNormal">+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_reset.h<o:p></o:p></p>
<p class="MsoNormal">@@ -0,0 +1,85 @@<o:p></o:p></p>
<p class="MsoNormal">+/*<o:p></o:p></p>
<p class="MsoNormal">+ * Copyright 2021 Advanced Micro Devices, Inc.<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ * Permission is hereby granted, free of charge, to any person obtaining a<o:p></o:p></p>
<p class="MsoNormal">+ * copy of this software and associated documentation files (the "Software"),<o:p></o:p></p>
<p class="MsoNormal">+ * to deal in the Software without restriction, including without limitation<o:p></o:p></p>
<p class="MsoNormal">+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,<o:p></o:p></p>
<p class="MsoNormal">+ * and/or sell copies of the Software, and to permit persons to whom the<o:p></o:p></p>
<p class="MsoNormal">+ * Software is furnished to do so, subject to the following conditions:<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ * The above copyright notice and this permission notice shall be included in<o:p></o:p></p>
<p class="MsoNormal">+ * all copies or substantial portions of the Software.<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<o:p></o:p></p>
<p class="MsoNormal">+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<o:p></o:p></p>
<p class="MsoNormal">+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL<o:p></o:p></p>
<p class="MsoNormal">+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR<o:p></o:p></p>
<p class="MsoNormal">+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,<o:p></o:p></p>
<p class="MsoNormal">+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR<o:p></o:p></p>
<p class="MsoNormal">+ * OTHER DEALINGS IN THE SOFTWARE.<o:p></o:p></p>
<p class="MsoNormal">+ *<o:p></o:p></p>
<p class="MsoNormal">+ */<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+#ifndef __AMDUGPU_RESET_H__<o:p></o:p></p>
<p class="MsoNormal">+#define __AMDGPU_RESET_H__<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+#include "amdgpu.h"<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+enum AMDGPU_RESET_FLAGS {<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+             AMDGPU_NEED_FULL_RESET = 0,<o:p></o:p></p>
<p class="MsoNormal">+             AMDGPU_SKIP_HW_RESET = 1,<o:p></o:p></p>
<p class="MsoNormal">+};<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+struct amdgpu_reset_context {<o:p></o:p></p>
<p class="MsoNormal">+             enum amd_reset_method method;<o:p></o:p></p>
<p class="MsoNormal">+             struct amdgpu_device *reset_req_dev;<o:p></o:p></p>
<p class="MsoNormal">+             struct amdgpu_job *job;<o:p></o:p></p>
<p class="MsoNormal">+             struct amdgpu_hive_info *hive;<o:p></o:p></p>
<p class="MsoNormal">+             unsigned long flags;<o:p></o:p></p>
<p class="MsoNormal">+};<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+struct amdgpu_reset_handler {<o:p></o:p></p>
<p class="MsoNormal">+             enum amd_reset_method reset_method;<o:p></o:p></p>
<p class="MsoNormal">+             struct list_head handler_list;<o:p></o:p></p>
<p class="MsoNormal">+             int (*prepare_env)(struct amdgpu_reset_control *reset_ctl,<o:p></o:p></p>
<p class="MsoNormal">+                                                struct amdgpu_reset_context *context);<o:p></o:p></p>
<p class="MsoNormal">+             int (*prepare_hwcontext)(struct amdgpu_reset_control *reset_ctl,<o:p></o:p></p>
<p class="MsoNormal">+                                                             struct amdgpu_reset_context *context);<o:p></o:p></p>
<p class="MsoNormal">+             int (*perform_reset)(struct amdgpu_reset_control *reset_ctl,<o:p></o:p></p>
<p class="MsoNormal">+                                                  struct amdgpu_reset_context *context);<o:p></o:p></p>
<p class="MsoNormal">+             int (*restore_hwcontext)(struct amdgpu_reset_control *reset_ctl,<o:p></o:p></p>
<p class="MsoNormal">+                                                             struct amdgpu_reset_context *context);<o:p></o:p></p>
<p class="MsoNormal">+             int (*restore_env)(struct amdgpu_reset_control *reset_ctl,<o:p></o:p></p>
<p class="MsoNormal">+                                                struct amdgpu_reset_context *context);<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+             int (*do_reset)(struct amdgpu_device *adev);<o:p></o:p></p>
<p class="MsoNormal">+};<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+struct amdgpu_reset_control {<o:p></o:p></p>
<p class="MsoNormal">+             void *handle;<o:p></o:p></p>
<p class="MsoNormal">+             struct work_struct reset_work;<o:p></o:p></p>
<p class="MsoNormal">+             struct mutex reset_lock;<o:p></o:p></p>
<p class="MsoNormal">+             struct list_head reset_handlers;<o:p></o:p></p>
<p class="MsoNormal">+             atomic_t in_reset;<o:p></o:p></p>
<p class="MsoNormal">+             enum amd_reset_method active_reset;<o:p></o:p></p>
<p class="MsoNormal">+             struct amdgpu_reset_handler *(*get_reset_handler)(<o:p></o:p></p>
<p class="MsoNormal">+                             struct amdgpu_reset_control *reset_ctl,<o:p></o:p></p>
<p class="MsoNormal">+                             struct amdgpu_reset_context *context);<o:p></o:p></p>
<p class="MsoNormal">+             void (*async_reset)(struct work_struct *work);<o:p></o:p></p>
<p class="MsoNormal">+};<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+int amdgpu_reset_init(struct amdgpu_device *adev);<o:p></o:p></p>
<p class="MsoNormal">+int amdgpu_reset_fini(struct amdgpu_device *adev);<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+int amdgpu_reset_prepare_hwcontext(struct amdgpu_device *adev,<o:p></o:p></p>
<p class="MsoNormal">+                                                                struct amdgpu_reset_context *reset_context);<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+int amdgpu_reset_perform_reset(struct amdgpu_device *adev,<o:p></o:p></p>
<p class="MsoNormal">+                                                    struct amdgpu_reset_context *reset_context);<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+int amdgpu_reset_add_handler(struct amdgpu_reset_control *reset_ctl,<o:p></o:p></p>
<p class="MsoNormal">+                                                  struct amdgpu_reset_handler *handler);<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+#endif<o:p></o:p></p>
<p class="MsoNormal">-- <o:p></o:p></p>
<p class="MsoNormal">2.17.1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>