xref: /OK3568_Linux_fs/kernel/drivers/crypto/ccp/psp-dev.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * AMD Platform Security Processor (PSP) interface driver
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2017-2019 Advanced Micro Devices, Inc.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Author: Brijesh Singh <brijesh.singh@amd.com>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef __PSP_DEV_H__
11*4882a593Smuzhiyun #define __PSP_DEV_H__
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <linux/device.h>
14*4882a593Smuzhiyun #include <linux/list.h>
15*4882a593Smuzhiyun #include <linux/bits.h>
16*4882a593Smuzhiyun #include <linux/interrupt.h>
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #include "sp-dev.h"
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define PSP_CMDRESP_RESP		BIT(31)
21*4882a593Smuzhiyun #define PSP_CMDRESP_ERR_MASK		0xffff
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #define MAX_PSP_NAME_LEN		16
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun extern struct psp_device *psp_master;
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun typedef void (*psp_irq_handler_t)(int, void *, unsigned int);
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun struct psp_device {
30*4882a593Smuzhiyun 	struct list_head entry;
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun 	struct psp_vdata *vdata;
33*4882a593Smuzhiyun 	char name[MAX_PSP_NAME_LEN];
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun 	struct device *dev;
36*4882a593Smuzhiyun 	struct sp_device *sp;
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun 	void __iomem *io_regs;
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun 	psp_irq_handler_t sev_irq_handler;
41*4882a593Smuzhiyun 	void *sev_irq_data;
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun 	psp_irq_handler_t tee_irq_handler;
44*4882a593Smuzhiyun 	void *tee_irq_data;
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun 	void *sev_data;
47*4882a593Smuzhiyun 	void *tee_data;
48*4882a593Smuzhiyun };
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun void psp_set_sev_irq_handler(struct psp_device *psp, psp_irq_handler_t handler,
51*4882a593Smuzhiyun 			     void *data);
52*4882a593Smuzhiyun void psp_clear_sev_irq_handler(struct psp_device *psp);
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun void psp_set_tee_irq_handler(struct psp_device *psp, psp_irq_handler_t handler,
55*4882a593Smuzhiyun 			     void *data);
56*4882a593Smuzhiyun void psp_clear_tee_irq_handler(struct psp_device *psp);
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun struct psp_device *psp_get_master_device(void);
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun #endif /* __PSP_DEV_H */
61