blob: ef38e4135d810ff44f4006af8858be16c7aa8e47 [file] [log] [blame]
David Brazdil0f672f62019-12-10 10:32:29 +00001/* SPDX-License-Identifier: GPL-2.0-only */
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00002/*
3 * AMD Platform Security Processor (PSP) interface driver
4 *
Olivier Deprez157378f2022-04-04 15:47:50 +02005 * Copyright (C) 2017-2019 Advanced Micro Devices, Inc.
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00006 *
7 * Author: Brijesh Singh <brijesh.singh@amd.com>
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00008 */
9
10#ifndef __PSP_DEV_H__
11#define __PSP_DEV_H__
12
13#include <linux/device.h>
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000014#include <linux/list.h>
Olivier Deprez157378f2022-04-04 15:47:50 +020015#include <linux/bits.h>
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000016#include <linux/interrupt.h>
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000017
18#include "sp-dev.h"
19
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000020#define PSP_CMDRESP_RESP BIT(31)
21#define PSP_CMDRESP_ERR_MASK 0xffff
22
23#define MAX_PSP_NAME_LEN 16
24
Olivier Deprez157378f2022-04-04 15:47:50 +020025extern struct psp_device *psp_master;
26
27typedef void (*psp_irq_handler_t)(int, void *, unsigned int);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000028
29struct psp_device {
30 struct list_head entry;
31
32 struct psp_vdata *vdata;
33 char name[MAX_PSP_NAME_LEN];
34
35 struct device *dev;
36 struct sp_device *sp;
37
38 void __iomem *io_regs;
39
Olivier Deprez157378f2022-04-04 15:47:50 +020040 psp_irq_handler_t sev_irq_handler;
41 void *sev_irq_data;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000042
Olivier Deprez157378f2022-04-04 15:47:50 +020043 psp_irq_handler_t tee_irq_handler;
44 void *tee_irq_data;
45
46 void *sev_data;
47 void *tee_data;
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000048};
49
Olivier Deprez157378f2022-04-04 15:47:50 +020050void psp_set_sev_irq_handler(struct psp_device *psp, psp_irq_handler_t handler,
51 void *data);
52void psp_clear_sev_irq_handler(struct psp_device *psp);
53
54void psp_set_tee_irq_handler(struct psp_device *psp, psp_irq_handler_t handler,
55 void *data);
56void psp_clear_tee_irq_handler(struct psp_device *psp);
57
58struct psp_device *psp_get_master_device(void);
59
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000060#endif /* __PSP_DEV_H */