mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-06 14:05:39 +00:00
a867ad6b34
The behavior of legacy SEV commands is altered when the firmware is initialized for SNP support. In that case, all command buffer memory that may get written to by legacy SEV commands must be marked as firmware-owned in the RMP table prior to issuing the command. Additionally, when a command buffer contains a system physical address that points to additional buffers that firmware may write to, special handling is needed depending on whether: 1) the system physical address points to guest memory 2) the system physical address points to host memory To handle case #1, the pages of these buffers are changed to firmware-owned in the RMP table before issuing the command, and restored to hypervisor-owned after the command completes. For case #2, a bounce buffer is used instead of the original address. Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> Co-developed-by: Michael Roth <michael.roth@amd.com> Signed-off-by: Michael Roth <michael.roth@amd.com> Signed-off-by: Ashish Kalra <ashish.kalra@amd.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Link: https://lore.kernel.org/r/20240126041126.1927228-19-michael.roth@amd.com
69 lines
1.3 KiB
C
69 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* AMD Platform Security Processor (PSP) interface driver
|
|
*
|
|
* Copyright (C) 2017-2019 Advanced Micro Devices, Inc.
|
|
*
|
|
* Author: Brijesh Singh <brijesh.singh@amd.com>
|
|
*/
|
|
|
|
#ifndef __SEV_DEV_H__
|
|
#define __SEV_DEV_H__
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/spinlock.h>
|
|
#include <linux/mutex.h>
|
|
#include <linux/list.h>
|
|
#include <linux/wait.h>
|
|
#include <linux/dmapool.h>
|
|
#include <linux/hw_random.h>
|
|
#include <linux/bitops.h>
|
|
#include <linux/interrupt.h>
|
|
#include <linux/irqreturn.h>
|
|
#include <linux/dmaengine.h>
|
|
#include <linux/psp-sev.h>
|
|
#include <linux/miscdevice.h>
|
|
#include <linux/capability.h>
|
|
|
|
#define SEV_CMDRESP_CMD GENMASK(26, 16)
|
|
#define SEV_CMD_COMPLETE BIT(1)
|
|
#define SEV_CMDRESP_IOC BIT(0)
|
|
|
|
struct sev_misc_dev {
|
|
struct kref refcount;
|
|
struct miscdevice misc;
|
|
};
|
|
|
|
struct sev_device {
|
|
struct device *dev;
|
|
struct psp_device *psp;
|
|
|
|
void __iomem *io_regs;
|
|
|
|
struct sev_vdata *vdata;
|
|
|
|
int state;
|
|
unsigned int int_rcvd;
|
|
wait_queue_head_t int_queue;
|
|
struct sev_misc_dev *misc;
|
|
|
|
u8 api_major;
|
|
u8 api_minor;
|
|
u8 build;
|
|
|
|
void *cmd_buf;
|
|
void *cmd_buf_backup;
|
|
bool cmd_buf_active;
|
|
bool cmd_buf_backup_active;
|
|
|
|
bool snp_initialized;
|
|
};
|
|
|
|
int sev_dev_init(struct psp_device *psp);
|
|
void sev_dev_destroy(struct psp_device *psp);
|
|
|
|
void sev_pci_init(void);
|
|
void sev_pci_exit(void);
|
|
|
|
#endif /* __SEV_DEV_H */
|