Lines Matching +full:sub +full:- +full:processor

1 // SPDX-License-Identifier: GPL-2.0-only
3 * AMD Secure Processor driver
5 * Copyright (C) 2017-2018 Advanced Micro Devices, Inc.
22 #include "sev-dev.h"
23 #include "ccp-dev.h"
24 #include "sp-dev.h"
30 MODULE_DESCRIPTION("AMD Secure Processor driver");
32 /* List of SPs, SP count, read-write access lock, and access functions
40 /* Ever-increasing value to produce unique unit numbers */
49 list_add_tail(&sp->entry, &sp_units); in sp_add_device()
60 list_del(&sp->entry); in sp_del_device()
69 if (sp->ccp_irq_handler) in sp_irq_handler()
70 sp->ccp_irq_handler(irq, sp->ccp_irq_data); in sp_irq_handler()
72 if (sp->psp_irq_handler) in sp_irq_handler()
73 sp->psp_irq_handler(irq, sp->psp_irq_data); in sp_irq_handler()
83 if ((sp->psp_irq == sp->ccp_irq) && sp->dev_vdata->psp_vdata) { in sp_request_ccp_irq()
85 sp->ccp_irq_data = data; in sp_request_ccp_irq()
86 sp->ccp_irq_handler = handler; in sp_request_ccp_irq()
88 if (!sp->irq_registered) { in sp_request_ccp_irq()
89 ret = request_irq(sp->ccp_irq, sp_irq_handler, 0, in sp_request_ccp_irq()
90 sp->name, sp); in sp_request_ccp_irq()
94 sp->irq_registered = true; in sp_request_ccp_irq()
97 /* Each sub-device can manage it's own interrupt */ in sp_request_ccp_irq()
98 ret = request_irq(sp->ccp_irq, handler, 0, name, data); in sp_request_ccp_irq()
111 if ((sp->psp_irq == sp->ccp_irq) && sp->dev_vdata->ccp_vdata) { in sp_request_psp_irq()
113 sp->psp_irq_data = data; in sp_request_psp_irq()
114 sp->psp_irq_handler = handler; in sp_request_psp_irq()
116 if (!sp->irq_registered) { in sp_request_psp_irq()
117 ret = request_irq(sp->psp_irq, sp_irq_handler, 0, in sp_request_psp_irq()
118 sp->name, sp); in sp_request_psp_irq()
122 sp->irq_registered = true; in sp_request_psp_irq()
125 /* Each sub-device can manage it's own interrupt */ in sp_request_psp_irq()
126 ret = request_irq(sp->psp_irq, handler, 0, name, data); in sp_request_psp_irq()
136 if ((sp->psp_irq == sp->ccp_irq) && sp->dev_vdata->psp_vdata) { in sp_free_ccp_irq()
138 if (!sp->psp_irq_handler) { in sp_free_ccp_irq()
140 free_irq(sp->ccp_irq, sp); in sp_free_ccp_irq()
142 sp->irq_registered = false; in sp_free_ccp_irq()
145 sp->ccp_irq_handler = NULL; in sp_free_ccp_irq()
146 sp->ccp_irq_data = NULL; in sp_free_ccp_irq()
148 /* Each sub-device can manage it's own interrupt */ in sp_free_ccp_irq()
149 free_irq(sp->ccp_irq, data); in sp_free_ccp_irq()
155 if ((sp->psp_irq == sp->ccp_irq) && sp->dev_vdata->ccp_vdata) { in sp_free_psp_irq()
157 if (!sp->ccp_irq_handler) { in sp_free_psp_irq()
159 free_irq(sp->psp_irq, sp); in sp_free_psp_irq()
161 sp->irq_registered = false; in sp_free_psp_irq()
164 sp->psp_irq_handler = NULL; in sp_free_psp_irq()
165 sp->psp_irq_data = NULL; in sp_free_psp_irq()
167 /* Each sub-device can manage it's own interrupt */ in sp_free_psp_irq()
168 free_irq(sp->psp_irq, data); in sp_free_psp_irq()
173 * sp_alloc_struct - allocate and initialize the sp_device struct
185 sp->dev = dev; in sp_alloc_struct()
186 sp->ord = atomic_inc_return(&sp_ordinal); in sp_alloc_struct()
187 snprintf(sp->name, SP_MAX_NAME_LEN, "sp-%u", sp->ord); in sp_alloc_struct()
196 if (sp->dev_vdata->ccp_vdata) in sp_init()
199 if (sp->dev_vdata->psp_vdata) in sp_init()
206 if (sp->dev_vdata->ccp_vdata) in sp_destroy()
209 if (sp->dev_vdata->psp_vdata) in sp_destroy()
217 if (sp->dev_vdata->ccp_vdata) { in sp_suspend()
226 if (sp->dev_vdata->ccp_vdata) { in sp_resume()
243 if (i->psp_data && i->get_psp_master_device) { in sp_get_psp_master_device()
244 ret = i->get_psp_master_device(); in sp_get_psp_master_device()
286 return -ENODEV; in sp_mod_init()