mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-28 16:52:18 +00:00
x86/virt/tdx: Switch to use auto-generated global metadata reading code
Continue the process to have a centralized solution for TDX global metadata reading. Now that the new autogenerated solution is ready for use, switch to it and remove the old one. Signed-off-by: Kai Huang <kai.huang@intel.com> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Reviewed-by: Nikolay Borisov <nik.borisov@suse.com> Reviewed-by: Dan Williams <dan.j.williams@intel.com> Link: https://lore.kernel.org/all/fc025d1e13b92900323f47cfe9aac3157bf08ee7.1734188033.git.kai.huang%40intel.com
This commit is contained in:
parent
6bfb77f489
commit
fae43b24a6
@ -270,66 +270,7 @@ static int read_sys_metadata_field(u64 field_id, u64 *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int read_sys_metadata_field16(u64 field_id,
|
||||
int offset,
|
||||
struct tdx_sys_info_tdmr *ts)
|
||||
{
|
||||
u16 *ts_member = ((void *)ts) + offset;
|
||||
u64 tmp;
|
||||
int ret;
|
||||
|
||||
if (WARN_ON_ONCE(MD_FIELD_ID_ELE_SIZE_CODE(field_id) !=
|
||||
MD_FIELD_ID_ELE_SIZE_16BIT))
|
||||
return -EINVAL;
|
||||
|
||||
ret = read_sys_metadata_field(field_id, &tmp);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
*ts_member = tmp;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct field_mapping {
|
||||
u64 field_id;
|
||||
int offset;
|
||||
};
|
||||
|
||||
#define TD_SYSINFO_MAP(_field_id, _offset) \
|
||||
{ .field_id = MD_FIELD_ID_##_field_id, \
|
||||
.offset = offsetof(struct tdx_sys_info_tdmr, _offset) }
|
||||
|
||||
/* Map TD_SYSINFO fields into 'struct tdx_sys_info_tdmr': */
|
||||
static const struct field_mapping fields[] = {
|
||||
TD_SYSINFO_MAP(MAX_TDMRS, max_tdmrs),
|
||||
TD_SYSINFO_MAP(MAX_RESERVED_PER_TDMR, max_reserved_per_tdmr),
|
||||
TD_SYSINFO_MAP(PAMT_4K_ENTRY_SIZE, pamt_4k_entry_size),
|
||||
TD_SYSINFO_MAP(PAMT_2M_ENTRY_SIZE, pamt_2m_entry_size),
|
||||
TD_SYSINFO_MAP(PAMT_1G_ENTRY_SIZE, pamt_1g_entry_size),
|
||||
};
|
||||
|
||||
static int get_tdx_sys_info_tdmr(struct tdx_sys_info_tdmr *sysinfo_tdmr)
|
||||
{
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
/* Populate 'sysinfo_tdmr' fields using the mapping structure above: */
|
||||
for (i = 0; i < ARRAY_SIZE(fields); i++) {
|
||||
ret = read_sys_metadata_field16(fields[i].field_id,
|
||||
fields[i].offset,
|
||||
sysinfo_tdmr);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_tdx_sys_info(struct tdx_sys_info *sysinfo)
|
||||
{
|
||||
return get_tdx_sys_info_tdmr(&sysinfo->tdmr);
|
||||
}
|
||||
#include "tdx_global_metadata.c"
|
||||
|
||||
/* Calculate the actual TDMR size */
|
||||
static int tdmr_size_single(u16 max_reserved_per_tdmr)
|
||||
|
@ -2,7 +2,7 @@
|
||||
#ifndef _X86_VIRT_TDX_H
|
||||
#define _X86_VIRT_TDX_H
|
||||
|
||||
#include <linux/bits.h>
|
||||
#include "tdx_global_metadata.h"
|
||||
|
||||
/*
|
||||
* This file contains both macros and data structures defined by the TDX
|
||||
@ -26,35 +26,6 @@
|
||||
#define PT_NDA 0x0
|
||||
#define PT_RSVD 0x1
|
||||
|
||||
/*
|
||||
* Global scope metadata field ID.
|
||||
*
|
||||
* See Table "Global Scope Metadata", TDX module 1.5 ABI spec.
|
||||
*/
|
||||
#define MD_FIELD_ID_MAX_TDMRS 0x9100000100000008ULL
|
||||
#define MD_FIELD_ID_MAX_RESERVED_PER_TDMR 0x9100000100000009ULL
|
||||
#define MD_FIELD_ID_PAMT_4K_ENTRY_SIZE 0x9100000100000010ULL
|
||||
#define MD_FIELD_ID_PAMT_2M_ENTRY_SIZE 0x9100000100000011ULL
|
||||
#define MD_FIELD_ID_PAMT_1G_ENTRY_SIZE 0x9100000100000012ULL
|
||||
|
||||
/*
|
||||
* Sub-field definition of metadata field ID.
|
||||
*
|
||||
* See Table "MD_FIELD_ID (Metadata Field Identifier / Sequence Header)
|
||||
* Definition", TDX module 1.5 ABI spec.
|
||||
*
|
||||
* - Bit 33:32: ELEMENT_SIZE_CODE -- size of a single element of metadata
|
||||
*
|
||||
* 0: 8 bits
|
||||
* 1: 16 bits
|
||||
* 2: 32 bits
|
||||
* 3: 64 bits
|
||||
*/
|
||||
#define MD_FIELD_ID_ELE_SIZE_CODE(_field_id) \
|
||||
(((_field_id) & GENMASK_ULL(33, 32)) >> 32)
|
||||
|
||||
#define MD_FIELD_ID_ELE_SIZE_16BIT 1
|
||||
|
||||
struct tdmr_reserved_area {
|
||||
u64 offset;
|
||||
u64 size;
|
||||
@ -80,20 +51,6 @@ struct tdmr_info {
|
||||
DECLARE_FLEX_ARRAY(struct tdmr_reserved_area, reserved_areas);
|
||||
} __packed __aligned(TDMR_INFO_ALIGNMENT);
|
||||
|
||||
/* Class "TDMR info" */
|
||||
struct tdx_sys_info_tdmr {
|
||||
u16 max_tdmrs;
|
||||
u16 max_reserved_per_tdmr;
|
||||
u16 pamt_4k_entry_size;
|
||||
u16 pamt_2m_entry_size;
|
||||
u16 pamt_1g_entry_size;
|
||||
};
|
||||
|
||||
/* Kernel used global metadata fields */
|
||||
struct tdx_sys_info {
|
||||
struct tdx_sys_info_tdmr tdmr;
|
||||
};
|
||||
|
||||
/*
|
||||
* Do not put any hardware-defined TDX structure representations below
|
||||
* this comment!
|
||||
|
Loading…
Reference in New Issue
Block a user