162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * AMD Platform Security Processor (PSP) interface driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2017-2019 Advanced Micro Devices, Inc. 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Author: Brijesh Singh <brijesh.singh@amd.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __PSP_DEV_H__ 1162306a36Sopenharmony_ci#define __PSP_DEV_H__ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <linux/device.h> 1462306a36Sopenharmony_ci#include <linux/list.h> 1562306a36Sopenharmony_ci#include <linux/bits.h> 1662306a36Sopenharmony_ci#include <linux/interrupt.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#include "sp-dev.h" 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define MAX_PSP_NAME_LEN 16 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ciextern struct psp_device *psp_master; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_citypedef void (*psp_irq_handler_t)(int, void *, unsigned int); 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistruct psp_device { 2762306a36Sopenharmony_ci struct list_head entry; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci struct psp_vdata *vdata; 3062306a36Sopenharmony_ci char name[MAX_PSP_NAME_LEN]; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci struct device *dev; 3362306a36Sopenharmony_ci struct sp_device *sp; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci void __iomem *io_regs; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci psp_irq_handler_t sev_irq_handler; 3862306a36Sopenharmony_ci void *sev_irq_data; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci void *sev_data; 4162306a36Sopenharmony_ci void *tee_data; 4262306a36Sopenharmony_ci void *platform_access_data; 4362306a36Sopenharmony_ci void *dbc_data; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci unsigned int capability; 4662306a36Sopenharmony_ci}; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_civoid psp_set_sev_irq_handler(struct psp_device *psp, psp_irq_handler_t handler, 4962306a36Sopenharmony_ci void *data); 5062306a36Sopenharmony_civoid psp_clear_sev_irq_handler(struct psp_device *psp); 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cistruct psp_device *psp_get_master_device(void); 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci#define PSP_CAPABILITY_SEV BIT(0) 5562306a36Sopenharmony_ci#define PSP_CAPABILITY_TEE BIT(1) 5662306a36Sopenharmony_ci#define PSP_CAPABILITY_PSP_SECURITY_REPORTING BIT(7) 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci#define PSP_CAPABILITY_PSP_SECURITY_OFFSET 8 5962306a36Sopenharmony_ci/* 6062306a36Sopenharmony_ci * The PSP doesn't directly store these bits in the capability register 6162306a36Sopenharmony_ci * but instead copies them from the results of query command. 6262306a36Sopenharmony_ci * 6362306a36Sopenharmony_ci * The offsets from the query command are below, and shifted when used. 6462306a36Sopenharmony_ci */ 6562306a36Sopenharmony_ci#define PSP_SECURITY_FUSED_PART BIT(0) 6662306a36Sopenharmony_ci#define PSP_SECURITY_DEBUG_LOCK_ON BIT(2) 6762306a36Sopenharmony_ci#define PSP_SECURITY_TSME_STATUS BIT(5) 6862306a36Sopenharmony_ci#define PSP_SECURITY_ANTI_ROLLBACK_STATUS BIT(7) 6962306a36Sopenharmony_ci#define PSP_SECURITY_RPMC_PRODUCTION_ENABLED BIT(8) 7062306a36Sopenharmony_ci#define PSP_SECURITY_RPMC_SPIROM_AVAILABLE BIT(9) 7162306a36Sopenharmony_ci#define PSP_SECURITY_HSP_TPM_AVAILABLE BIT(10) 7262306a36Sopenharmony_ci#define PSP_SECURITY_ROM_ARMOR_ENFORCED BIT(11) 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci#endif /* __PSP_DEV_H */ 75