xref: /linux/drivers/crypto/ccp/sev-dev.c (revision 98066f2f8901ccf72f3c5d6c391c8fff1cabd49d)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * AMD Secure Encrypted Virtualization (SEV) interface
4  *
5  * Copyright (C) 2016,2019 Advanced Micro Devices, Inc.
6  *
7  * Author: Brijesh Singh <brijesh.singh@amd.com>
8  */
9 
10 #include <linux/bitfield.h>
11 #include <linux/module.h>
12 #include <linux/kernel.h>
13 #include <linux/kthread.h>
14 #include <linux/sched.h>
15 #include <linux/interrupt.h>
16 #include <linux/spinlock.h>
17 #include <linux/spinlock_types.h>
18 #include <linux/types.h>
19 #include <linux/mutex.h>
20 #include <linux/delay.h>
21 #include <linux/hw_random.h>
22 #include <linux/ccp.h>
23 #include <linux/firmware.h>
24 #include <linux/panic_notifier.h>
25 #include <linux/gfp.h>
26 #include <linux/cpufeature.h>
27 #include <linux/fs.h>
28 #include <linux/fs_struct.h>
29 #include <linux/psp.h>
30 #include <linux/amd-iommu.h>
31 
32 #include <asm/smp.h>
33 #include <asm/cacheflush.h>
34 #include <asm/e820/types.h>
35 #include <asm/sev.h>
36 
37 #include "psp-dev.h"
38 #include "sev-dev.h"
39 
40 #define DEVICE_NAME		"sev"
41 #define SEV_FW_FILE		"amd/sev.fw"
42 #define SEV_FW_NAME_SIZE	64
43 
44 /* Minimum firmware version required for the SEV-SNP support */
45 #define SNP_MIN_API_MAJOR	1
46 #define SNP_MIN_API_MINOR	51
47 
48 /*
49  * Maximum number of firmware-writable buffers that might be specified
50  * in the parameters of a legacy SEV command buffer.
51  */
52 #define CMD_BUF_FW_WRITABLE_MAX 2
53 
54 /* Leave room in the descriptor array for an end-of-list indicator. */
55 #define CMD_BUF_DESC_MAX (CMD_BUF_FW_WRITABLE_MAX + 1)
56 
57 static DEFINE_MUTEX(sev_cmd_mutex);
58 static struct sev_misc_dev *misc_dev;
59 
60 static int psp_cmd_timeout = 100;
61 module_param(psp_cmd_timeout, int, 0644);
62 MODULE_PARM_DESC(psp_cmd_timeout, " default timeout value, in seconds, for PSP commands");
63 
64 static int psp_probe_timeout = 5;
65 module_param(psp_probe_timeout, int, 0644);
66 MODULE_PARM_DESC(psp_probe_timeout, " default timeout value, in seconds, during PSP device probe");
67 
68 static char *init_ex_path;
69 module_param(init_ex_path, charp, 0444);
70 MODULE_PARM_DESC(init_ex_path, " Path for INIT_EX data; if set try INIT_EX");
71 
72 static bool psp_init_on_probe = true;
73 module_param(psp_init_on_probe, bool, 0444);
74 MODULE_PARM_DESC(psp_init_on_probe, "  if true, the PSP will be initialized on module init. Else the PSP will be initialized on the first command requiring it");
75 
76 MODULE_FIRMWARE("amd/amd_sev_fam17h_model0xh.sbin"); /* 1st gen EPYC */
77 MODULE_FIRMWARE("amd/amd_sev_fam17h_model3xh.sbin"); /* 2nd gen EPYC */
78 MODULE_FIRMWARE("amd/amd_sev_fam19h_model0xh.sbin"); /* 3rd gen EPYC */
79 MODULE_FIRMWARE("amd/amd_sev_fam19h_model1xh.sbin"); /* 4th gen EPYC */
80 
81 static bool psp_dead;
82 static int psp_timeout;
83 
84 /* Trusted Memory Region (TMR):
85  *   The TMR is a 1MB area that must be 1MB aligned.  Use the page allocator
86  *   to allocate the memory, which will return aligned memory for the specified
87  *   allocation order.
88  *
89  * When SEV-SNP is enabled the TMR needs to be 2MB aligned and 2MB sized.
90  */
91 #define SEV_TMR_SIZE		(1024 * 1024)
92 #define SNP_TMR_SIZE		(2 * 1024 * 1024)
93 
94 static void *sev_es_tmr;
95 static size_t sev_es_tmr_size = SEV_TMR_SIZE;
96 
97 /* INIT_EX NV Storage:
98  *   The NV Storage is a 32Kb area and must be 4Kb page aligned.  Use the page
99  *   allocator to allocate the memory, which will return aligned memory for the
100  *   specified allocation order.
101  */
102 #define NV_LENGTH (32 * 1024)
103 static void *sev_init_ex_buffer;
104 
105 /*
106  * SEV_DATA_RANGE_LIST:
107  *   Array containing range of pages that firmware transitions to HV-fixed
108  *   page state.
109  */
110 static struct sev_data_range_list *snp_range_list;
111 
112 static void __sev_firmware_shutdown(struct sev_device *sev, bool panic);
113 
114 static int snp_shutdown_on_panic(struct notifier_block *nb,
115 				 unsigned long reason, void *arg);
116 
117 static struct notifier_block snp_panic_notifier = {
118 	.notifier_call = snp_shutdown_on_panic,
119 };
120 
121 static inline bool sev_version_greater_or_equal(u8 maj, u8 min)
122 {
123 	struct sev_device *sev = psp_master->sev_data;
124 
125 	if (sev->api_major > maj)
126 		return true;
127 
128 	if (sev->api_major == maj && sev->api_minor >= min)
129 		return true;
130 
131 	return false;
132 }
133 
134 static void sev_irq_handler(int irq, void *data, unsigned int status)
135 {
136 	struct sev_device *sev = data;
137 	int reg;
138 
139 	/* Check if it is command completion: */
140 	if (!(status & SEV_CMD_COMPLETE))
141 		return;
142 
143 	/* Check if it is SEV command completion: */
144 	reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg);
145 	if (FIELD_GET(PSP_CMDRESP_RESP, reg)) {
146 		sev->int_rcvd = 1;
147 		wake_up(&sev->int_queue);
148 	}
149 }
150 
151 static int sev_wait_cmd_ioc(struct sev_device *sev,
152 			    unsigned int *reg, unsigned int timeout)
153 {
154 	int ret;
155 
156 	/*
157 	 * If invoked during panic handling, local interrupts are disabled,
158 	 * so the PSP command completion interrupt can't be used. Poll for
159 	 * PSP command completion instead.
160 	 */
161 	if (irqs_disabled()) {
162 		unsigned long timeout_usecs = (timeout * USEC_PER_SEC) / 10;
163 
164 		/* Poll for SEV command completion: */
165 		while (timeout_usecs--) {
166 			*reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg);
167 			if (*reg & PSP_CMDRESP_RESP)
168 				return 0;
169 
170 			udelay(10);
171 		}
172 		return -ETIMEDOUT;
173 	}
174 
175 	ret = wait_event_timeout(sev->int_queue,
176 			sev->int_rcvd, timeout * HZ);
177 	if (!ret)
178 		return -ETIMEDOUT;
179 
180 	*reg = ioread32(sev->io_regs + sev->vdata->cmdresp_reg);
181 
182 	return 0;
183 }
184 
185 static int sev_cmd_buffer_len(int cmd)
186 {
187 	switch (cmd) {
188 	case SEV_CMD_INIT:			return sizeof(struct sev_data_init);
189 	case SEV_CMD_INIT_EX:                   return sizeof(struct sev_data_init_ex);
190 	case SEV_CMD_SNP_SHUTDOWN_EX:		return sizeof(struct sev_data_snp_shutdown_ex);
191 	case SEV_CMD_SNP_INIT_EX:		return sizeof(struct sev_data_snp_init_ex);
192 	case SEV_CMD_PLATFORM_STATUS:		return sizeof(struct sev_user_data_status);
193 	case SEV_CMD_PEK_CSR:			return sizeof(struct sev_data_pek_csr);
194 	case SEV_CMD_PEK_CERT_IMPORT:		return sizeof(struct sev_data_pek_cert_import);
195 	case SEV_CMD_PDH_CERT_EXPORT:		return sizeof(struct sev_data_pdh_cert_export);
196 	case SEV_CMD_LAUNCH_START:		return sizeof(struct sev_data_launch_start);
197 	case SEV_CMD_LAUNCH_UPDATE_DATA:	return sizeof(struct sev_data_launch_update_data);
198 	case SEV_CMD_LAUNCH_UPDATE_VMSA:	return sizeof(struct sev_data_launch_update_vmsa);
199 	case SEV_CMD_LAUNCH_FINISH:		return sizeof(struct sev_data_launch_finish);
200 	case SEV_CMD_LAUNCH_MEASURE:		return sizeof(struct sev_data_launch_measure);
201 	case SEV_CMD_ACTIVATE:			return sizeof(struct sev_data_activate);
202 	case SEV_CMD_DEACTIVATE:		return sizeof(struct sev_data_deactivate);
203 	case SEV_CMD_DECOMMISSION:		return sizeof(struct sev_data_decommission);
204 	case SEV_CMD_GUEST_STATUS:		return sizeof(struct sev_data_guest_status);
205 	case SEV_CMD_DBG_DECRYPT:		return sizeof(struct sev_data_dbg);
206 	case SEV_CMD_DBG_ENCRYPT:		return sizeof(struct sev_data_dbg);
207 	case SEV_CMD_SEND_START:		return sizeof(struct sev_data_send_start);
208 	case SEV_CMD_SEND_UPDATE_DATA:		return sizeof(struct sev_data_send_update_data);
209 	case SEV_CMD_SEND_UPDATE_VMSA:		return sizeof(struct sev_data_send_update_vmsa);
210 	case SEV_CMD_SEND_FINISH:		return sizeof(struct sev_data_send_finish);
211 	case SEV_CMD_RECEIVE_START:		return sizeof(struct sev_data_receive_start);
212 	case SEV_CMD_RECEIVE_FINISH:		return sizeof(struct sev_data_receive_finish);
213 	case SEV_CMD_RECEIVE_UPDATE_DATA:	return sizeof(struct sev_data_receive_update_data);
214 	case SEV_CMD_RECEIVE_UPDATE_VMSA:	return sizeof(struct sev_data_receive_update_vmsa);
215 	case SEV_CMD_LAUNCH_UPDATE_SECRET:	return sizeof(struct sev_data_launch_secret);
216 	case SEV_CMD_DOWNLOAD_FIRMWARE:		return sizeof(struct sev_data_download_firmware);
217 	case SEV_CMD_GET_ID:			return sizeof(struct sev_data_get_id);
218 	case SEV_CMD_ATTESTATION_REPORT:	return sizeof(struct sev_data_attestation_report);
219 	case SEV_CMD_SEND_CANCEL:		return sizeof(struct sev_data_send_cancel);
220 	case SEV_CMD_SNP_GCTX_CREATE:		return sizeof(struct sev_data_snp_addr);
221 	case SEV_CMD_SNP_LAUNCH_START:		return sizeof(struct sev_data_snp_launch_start);
222 	case SEV_CMD_SNP_LAUNCH_UPDATE:		return sizeof(struct sev_data_snp_launch_update);
223 	case SEV_CMD_SNP_ACTIVATE:		return sizeof(struct sev_data_snp_activate);
224 	case SEV_CMD_SNP_DECOMMISSION:		return sizeof(struct sev_data_snp_addr);
225 	case SEV_CMD_SNP_PAGE_RECLAIM:		return sizeof(struct sev_data_snp_page_reclaim);
226 	case SEV_CMD_SNP_GUEST_STATUS:		return sizeof(struct sev_data_snp_guest_status);
227 	case SEV_CMD_SNP_LAUNCH_FINISH:		return sizeof(struct sev_data_snp_launch_finish);
228 	case SEV_CMD_SNP_DBG_DECRYPT:		return sizeof(struct sev_data_snp_dbg);
229 	case SEV_CMD_SNP_DBG_ENCRYPT:		return sizeof(struct sev_data_snp_dbg);
230 	case SEV_CMD_SNP_PAGE_UNSMASH:		return sizeof(struct sev_data_snp_page_unsmash);
231 	case SEV_CMD_SNP_PLATFORM_STATUS:	return sizeof(struct sev_data_snp_addr);
232 	case SEV_CMD_SNP_GUEST_REQUEST:		return sizeof(struct sev_data_snp_guest_request);
233 	case SEV_CMD_SNP_CONFIG:		return sizeof(struct sev_user_data_snp_config);
234 	case SEV_CMD_SNP_COMMIT:		return sizeof(struct sev_data_snp_commit);
235 	default:				return 0;
236 	}
237 
238 	return 0;
239 }
240 
241 static struct file *open_file_as_root(const char *filename, int flags, umode_t mode)
242 {
243 	struct file *fp;
244 	struct path root;
245 	struct cred *cred;
246 	const struct cred *old_cred;
247 
248 	task_lock(&init_task);
249 	get_fs_root(init_task.fs, &root);
250 	task_unlock(&init_task);
251 
252 	cred = prepare_creds();
253 	if (!cred)
254 		return ERR_PTR(-ENOMEM);
255 	cred->fsuid = GLOBAL_ROOT_UID;
256 	old_cred = override_creds(cred);
257 
258 	fp = file_open_root(&root, filename, flags, mode);
259 	path_put(&root);
260 
261 	put_cred(revert_creds(old_cred));
262 
263 	return fp;
264 }
265 
266 static int sev_read_init_ex_file(void)
267 {
268 	struct sev_device *sev = psp_master->sev_data;
269 	struct file *fp;
270 	ssize_t nread;
271 
272 	lockdep_assert_held(&sev_cmd_mutex);
273 
274 	if (!sev_init_ex_buffer)
275 		return -EOPNOTSUPP;
276 
277 	fp = open_file_as_root(init_ex_path, O_RDONLY, 0);
278 	if (IS_ERR(fp)) {
279 		int ret = PTR_ERR(fp);
280 
281 		if (ret == -ENOENT) {
282 			dev_info(sev->dev,
283 				"SEV: %s does not exist and will be created later.\n",
284 				init_ex_path);
285 			ret = 0;
286 		} else {
287 			dev_err(sev->dev,
288 				"SEV: could not open %s for read, error %d\n",
289 				init_ex_path, ret);
290 		}
291 		return ret;
292 	}
293 
294 	nread = kernel_read(fp, sev_init_ex_buffer, NV_LENGTH, NULL);
295 	if (nread != NV_LENGTH) {
296 		dev_info(sev->dev,
297 			"SEV: could not read %u bytes to non volatile memory area, ret %ld\n",
298 			NV_LENGTH, nread);
299 	}
300 
301 	dev_dbg(sev->dev, "SEV: read %ld bytes from NV file\n", nread);
302 	filp_close(fp, NULL);
303 
304 	return 0;
305 }
306 
307 static int sev_write_init_ex_file(void)
308 {
309 	struct sev_device *sev = psp_master->sev_data;
310 	struct file *fp;
311 	loff_t offset = 0;
312 	ssize_t nwrite;
313 
314 	lockdep_assert_held(&sev_cmd_mutex);
315 
316 	if (!sev_init_ex_buffer)
317 		return 0;
318 
319 	fp = open_file_as_root(init_ex_path, O_CREAT | O_WRONLY, 0600);
320 	if (IS_ERR(fp)) {
321 		int ret = PTR_ERR(fp);
322 
323 		dev_err(sev->dev,
324 			"SEV: could not open file for write, error %d\n",
325 			ret);
326 		return ret;
327 	}
328 
329 	nwrite = kernel_write(fp, sev_init_ex_buffer, NV_LENGTH, &offset);
330 	vfs_fsync(fp, 0);
331 	filp_close(fp, NULL);
332 
333 	if (nwrite != NV_LENGTH) {
334 		dev_err(sev->dev,
335 			"SEV: failed to write %u bytes to non volatile memory area, ret %ld\n",
336 			NV_LENGTH, nwrite);
337 		return -EIO;
338 	}
339 
340 	dev_dbg(sev->dev, "SEV: write successful to NV file\n");
341 
342 	return 0;
343 }
344 
345 static int sev_write_init_ex_file_if_required(int cmd_id)
346 {
347 	lockdep_assert_held(&sev_cmd_mutex);
348 
349 	if (!sev_init_ex_buffer)
350 		return 0;
351 
352 	/*
353 	 * Only a few platform commands modify the SPI/NV area, but none of the
354 	 * non-platform commands do. Only INIT(_EX), PLATFORM_RESET, PEK_GEN,
355 	 * PEK_CERT_IMPORT, and PDH_GEN do.
356 	 */
357 	switch (cmd_id) {
358 	case SEV_CMD_FACTORY_RESET:
359 	case SEV_CMD_INIT_EX:
360 	case SEV_CMD_PDH_GEN:
361 	case SEV_CMD_PEK_CERT_IMPORT:
362 	case SEV_CMD_PEK_GEN:
363 		break;
364 	default:
365 		return 0;
366 	}
367 
368 	return sev_write_init_ex_file();
369 }
370 
371 /*
372  * snp_reclaim_pages() needs __sev_do_cmd_locked(), and __sev_do_cmd_locked()
373  * needs snp_reclaim_pages(), so a forward declaration is needed.
374  */
375 static int __sev_do_cmd_locked(int cmd, void *data, int *psp_ret);
376 
377 static int snp_reclaim_pages(unsigned long paddr, unsigned int npages, bool locked)
378 {
379 	int ret, err, i;
380 
381 	paddr = __sme_clr(ALIGN_DOWN(paddr, PAGE_SIZE));
382 
383 	for (i = 0; i < npages; i++, paddr += PAGE_SIZE) {
384 		struct sev_data_snp_page_reclaim data = {0};
385 
386 		data.paddr = paddr;
387 
388 		if (locked)
389 			ret = __sev_do_cmd_locked(SEV_CMD_SNP_PAGE_RECLAIM, &data, &err);
390 		else
391 			ret = sev_do_cmd(SEV_CMD_SNP_PAGE_RECLAIM, &data, &err);
392 
393 		if (ret)
394 			goto cleanup;
395 
396 		ret = rmp_make_shared(__phys_to_pfn(paddr), PG_LEVEL_4K);
397 		if (ret)
398 			goto cleanup;
399 	}
400 
401 	return 0;
402 
403 cleanup:
404 	/*
405 	 * If there was a failure reclaiming the page then it is no longer safe
406 	 * to release it back to the system; leak it instead.
407 	 */
408 	snp_leak_pages(__phys_to_pfn(paddr), npages - i);
409 	return ret;
410 }
411 
412 static int rmp_mark_pages_firmware(unsigned long paddr, unsigned int npages, bool locked)
413 {
414 	unsigned long pfn = __sme_clr(paddr) >> PAGE_SHIFT;
415 	int rc, i;
416 
417 	for (i = 0; i < npages; i++, pfn++) {
418 		rc = rmp_make_private(pfn, 0, PG_LEVEL_4K, 0, true);
419 		if (rc)
420 			goto cleanup;
421 	}
422 
423 	return 0;
424 
425 cleanup:
426 	/*
427 	 * Try unrolling the firmware state changes by
428 	 * reclaiming the pages which were already changed to the
429 	 * firmware state.
430 	 */
431 	snp_reclaim_pages(paddr, i, locked);
432 
433 	return rc;
434 }
435 
436 static struct page *__snp_alloc_firmware_pages(gfp_t gfp_mask, int order)
437 {
438 	unsigned long npages = 1ul << order, paddr;
439 	struct sev_device *sev;
440 	struct page *page;
441 
442 	if (!psp_master || !psp_master->sev_data)
443 		return NULL;
444 
445 	page = alloc_pages(gfp_mask, order);
446 	if (!page)
447 		return NULL;
448 
449 	/* If SEV-SNP is initialized then add the page in RMP table. */
450 	sev = psp_master->sev_data;
451 	if (!sev->snp_initialized)
452 		return page;
453 
454 	paddr = __pa((unsigned long)page_address(page));
455 	if (rmp_mark_pages_firmware(paddr, npages, false))
456 		return NULL;
457 
458 	return page;
459 }
460 
461 void *snp_alloc_firmware_page(gfp_t gfp_mask)
462 {
463 	struct page *page;
464 
465 	page = __snp_alloc_firmware_pages(gfp_mask, 0);
466 
467 	return page ? page_address(page) : NULL;
468 }
469 EXPORT_SYMBOL_GPL(snp_alloc_firmware_page);
470 
471 static void __snp_free_firmware_pages(struct page *page, int order, bool locked)
472 {
473 	struct sev_device *sev = psp_master->sev_data;
474 	unsigned long paddr, npages = 1ul << order;
475 
476 	if (!page)
477 		return;
478 
479 	paddr = __pa((unsigned long)page_address(page));
480 	if (sev->snp_initialized &&
481 	    snp_reclaim_pages(paddr, npages, locked))
482 		return;
483 
484 	__free_pages(page, order);
485 }
486 
487 void snp_free_firmware_page(void *addr)
488 {
489 	if (!addr)
490 		return;
491 
492 	__snp_free_firmware_pages(virt_to_page(addr), 0, false);
493 }
494 EXPORT_SYMBOL_GPL(snp_free_firmware_page);
495 
496 static void *sev_fw_alloc(unsigned long len)
497 {
498 	struct page *page;
499 
500 	page = __snp_alloc_firmware_pages(GFP_KERNEL, get_order(len));
501 	if (!page)
502 		return NULL;
503 
504 	return page_address(page);
505 }
506 
507 /**
508  * struct cmd_buf_desc - descriptors for managing legacy SEV command address
509  * parameters corresponding to buffers that may be written to by firmware.
510  *
511  * @paddr_ptr:  pointer to the address parameter in the command buffer which may
512  *              need to be saved/restored depending on whether a bounce buffer
513  *              is used. In the case of a bounce buffer, the command buffer
514  *              needs to be updated with the address of the new bounce buffer
515  *              snp_map_cmd_buf_desc() has allocated specifically for it. Must
516  *              be NULL if this descriptor is only an end-of-list indicator.
517  *
518  * @paddr_orig: storage for the original address parameter, which can be used to
519  *              restore the original value in @paddr_ptr in cases where it is
520  *              replaced with the address of a bounce buffer.
521  *
522  * @len: length of buffer located at the address originally stored at @paddr_ptr
523  *
524  * @guest_owned: true if the address corresponds to guest-owned pages, in which
525  *               case bounce buffers are not needed.
526  */
527 struct cmd_buf_desc {
528 	u64 *paddr_ptr;
529 	u64 paddr_orig;
530 	u32 len;
531 	bool guest_owned;
532 };
533 
534 /*
535  * If a legacy SEV command parameter is a memory address, those pages in
536  * turn need to be transitioned to/from firmware-owned before/after
537  * executing the firmware command.
538  *
539  * Additionally, in cases where those pages are not guest-owned, a bounce
540  * buffer is needed in place of the original memory address parameter.
541  *
542  * A set of descriptors are used to keep track of this handling, and
543  * initialized here based on the specific commands being executed.
544  */
545 static void snp_populate_cmd_buf_desc_list(int cmd, void *cmd_buf,
546 					   struct cmd_buf_desc *desc_list)
547 {
548 	switch (cmd) {
549 	case SEV_CMD_PDH_CERT_EXPORT: {
550 		struct sev_data_pdh_cert_export *data = cmd_buf;
551 
552 		desc_list[0].paddr_ptr = &data->pdh_cert_address;
553 		desc_list[0].len = data->pdh_cert_len;
554 		desc_list[1].paddr_ptr = &data->cert_chain_address;
555 		desc_list[1].len = data->cert_chain_len;
556 		break;
557 	}
558 	case SEV_CMD_GET_ID: {
559 		struct sev_data_get_id *data = cmd_buf;
560 
561 		desc_list[0].paddr_ptr = &data->address;
562 		desc_list[0].len = data->len;
563 		break;
564 	}
565 	case SEV_CMD_PEK_CSR: {
566 		struct sev_data_pek_csr *data = cmd_buf;
567 
568 		desc_list[0].paddr_ptr = &data->address;
569 		desc_list[0].len = data->len;
570 		break;
571 	}
572 	case SEV_CMD_LAUNCH_UPDATE_DATA: {
573 		struct sev_data_launch_update_data *data = cmd_buf;
574 
575 		desc_list[0].paddr_ptr = &data->address;
576 		desc_list[0].len = data->len;
577 		desc_list[0].guest_owned = true;
578 		break;
579 	}
580 	case SEV_CMD_LAUNCH_UPDATE_VMSA: {
581 		struct sev_data_launch_update_vmsa *data = cmd_buf;
582 
583 		desc_list[0].paddr_ptr = &data->address;
584 		desc_list[0].len = data->len;
585 		desc_list[0].guest_owned = true;
586 		break;
587 	}
588 	case SEV_CMD_LAUNCH_MEASURE: {
589 		struct sev_data_launch_measure *data = cmd_buf;
590 
591 		desc_list[0].paddr_ptr = &data->address;
592 		desc_list[0].len = data->len;
593 		break;
594 	}
595 	case SEV_CMD_LAUNCH_UPDATE_SECRET: {
596 		struct sev_data_launch_secret *data = cmd_buf;
597 
598 		desc_list[0].paddr_ptr = &data->guest_address;
599 		desc_list[0].len = data->guest_len;
600 		desc_list[0].guest_owned = true;
601 		break;
602 	}
603 	case SEV_CMD_DBG_DECRYPT: {
604 		struct sev_data_dbg *data = cmd_buf;
605 
606 		desc_list[0].paddr_ptr = &data->dst_addr;
607 		desc_list[0].len = data->len;
608 		desc_list[0].guest_owned = true;
609 		break;
610 	}
611 	case SEV_CMD_DBG_ENCRYPT: {
612 		struct sev_data_dbg *data = cmd_buf;
613 
614 		desc_list[0].paddr_ptr = &data->dst_addr;
615 		desc_list[0].len = data->len;
616 		desc_list[0].guest_owned = true;
617 		break;
618 	}
619 	case SEV_CMD_ATTESTATION_REPORT: {
620 		struct sev_data_attestation_report *data = cmd_buf;
621 
622 		desc_list[0].paddr_ptr = &data->address;
623 		desc_list[0].len = data->len;
624 		break;
625 	}
626 	case SEV_CMD_SEND_START: {
627 		struct sev_data_send_start *data = cmd_buf;
628 
629 		desc_list[0].paddr_ptr = &data->session_address;
630 		desc_list[0].len = data->session_len;
631 		break;
632 	}
633 	case SEV_CMD_SEND_UPDATE_DATA: {
634 		struct sev_data_send_update_data *data = cmd_buf;
635 
636 		desc_list[0].paddr_ptr = &data->hdr_address;
637 		desc_list[0].len = data->hdr_len;
638 		desc_list[1].paddr_ptr = &data->trans_address;
639 		desc_list[1].len = data->trans_len;
640 		break;
641 	}
642 	case SEV_CMD_SEND_UPDATE_VMSA: {
643 		struct sev_data_send_update_vmsa *data = cmd_buf;
644 
645 		desc_list[0].paddr_ptr = &data->hdr_address;
646 		desc_list[0].len = data->hdr_len;
647 		desc_list[1].paddr_ptr = &data->trans_address;
648 		desc_list[1].len = data->trans_len;
649 		break;
650 	}
651 	case SEV_CMD_RECEIVE_UPDATE_DATA: {
652 		struct sev_data_receive_update_data *data = cmd_buf;
653 
654 		desc_list[0].paddr_ptr = &data->guest_address;
655 		desc_list[0].len = data->guest_len;
656 		desc_list[0].guest_owned = true;
657 		break;
658 	}
659 	case SEV_CMD_RECEIVE_UPDATE_VMSA: {
660 		struct sev_data_receive_update_vmsa *data = cmd_buf;
661 
662 		desc_list[0].paddr_ptr = &data->guest_address;
663 		desc_list[0].len = data->guest_len;
664 		desc_list[0].guest_owned = true;
665 		break;
666 	}
667 	default:
668 		break;
669 	}
670 }
671 
672 static int snp_map_cmd_buf_desc(struct cmd_buf_desc *desc)
673 {
674 	unsigned int npages;
675 
676 	if (!desc->len)
677 		return 0;
678 
679 	/* Allocate a bounce buffer if this isn't a guest owned page. */
680 	if (!desc->guest_owned) {
681 		struct page *page;
682 
683 		page = alloc_pages(GFP_KERNEL_ACCOUNT, get_order(desc->len));
684 		if (!page) {
685 			pr_warn("Failed to allocate bounce buffer for SEV legacy command.\n");
686 			return -ENOMEM;
687 		}
688 
689 		desc->paddr_orig = *desc->paddr_ptr;
690 		*desc->paddr_ptr = __psp_pa(page_to_virt(page));
691 	}
692 
693 	npages = PAGE_ALIGN(desc->len) >> PAGE_SHIFT;
694 
695 	/* Transition the buffer to firmware-owned. */
696 	if (rmp_mark_pages_firmware(*desc->paddr_ptr, npages, true)) {
697 		pr_warn("Error moving pages to firmware-owned state for SEV legacy command.\n");
698 		return -EFAULT;
699 	}
700 
701 	return 0;
702 }
703 
704 static int snp_unmap_cmd_buf_desc(struct cmd_buf_desc *desc)
705 {
706 	unsigned int npages;
707 
708 	if (!desc->len)
709 		return 0;
710 
711 	npages = PAGE_ALIGN(desc->len) >> PAGE_SHIFT;
712 
713 	/* Transition the buffers back to hypervisor-owned. */
714 	if (snp_reclaim_pages(*desc->paddr_ptr, npages, true)) {
715 		pr_warn("Failed to reclaim firmware-owned pages while issuing SEV legacy command.\n");
716 		return -EFAULT;
717 	}
718 
719 	/* Copy data from bounce buffer and then free it. */
720 	if (!desc->guest_owned) {
721 		void *bounce_buf = __va(__sme_clr(*desc->paddr_ptr));
722 		void *dst_buf = __va(__sme_clr(desc->paddr_orig));
723 
724 		memcpy(dst_buf, bounce_buf, desc->len);
725 		__free_pages(virt_to_page(bounce_buf), get_order(desc->len));
726 
727 		/* Restore the original address in the command buffer. */
728 		*desc->paddr_ptr = desc->paddr_orig;
729 	}
730 
731 	return 0;
732 }
733 
734 static int snp_map_cmd_buf_desc_list(int cmd, void *cmd_buf, struct cmd_buf_desc *desc_list)
735 {
736 	int i;
737 
738 	snp_populate_cmd_buf_desc_list(cmd, cmd_buf, desc_list);
739 
740 	for (i = 0; i < CMD_BUF_DESC_MAX; i++) {
741 		struct cmd_buf_desc *desc = &desc_list[i];
742 
743 		if (!desc->paddr_ptr)
744 			break;
745 
746 		if (snp_map_cmd_buf_desc(desc))
747 			goto err_unmap;
748 	}
749 
750 	return 0;
751 
752 err_unmap:
753 	for (i--; i >= 0; i--)
754 		snp_unmap_cmd_buf_desc(&desc_list[i]);
755 
756 	return -EFAULT;
757 }
758 
759 static int snp_unmap_cmd_buf_desc_list(struct cmd_buf_desc *desc_list)
760 {
761 	int i, ret = 0;
762 
763 	for (i = 0; i < CMD_BUF_DESC_MAX; i++) {
764 		struct cmd_buf_desc *desc = &desc_list[i];
765 
766 		if (!desc->paddr_ptr)
767 			break;
768 
769 		if (snp_unmap_cmd_buf_desc(&desc_list[i]))
770 			ret = -EFAULT;
771 	}
772 
773 	return ret;
774 }
775 
776 static bool sev_cmd_buf_writable(int cmd)
777 {
778 	switch (cmd) {
779 	case SEV_CMD_PLATFORM_STATUS:
780 	case SEV_CMD_GUEST_STATUS:
781 	case SEV_CMD_LAUNCH_START:
782 	case SEV_CMD_RECEIVE_START:
783 	case SEV_CMD_LAUNCH_MEASURE:
784 	case SEV_CMD_SEND_START:
785 	case SEV_CMD_SEND_UPDATE_DATA:
786 	case SEV_CMD_SEND_UPDATE_VMSA:
787 	case SEV_CMD_PEK_CSR:
788 	case SEV_CMD_PDH_CERT_EXPORT:
789 	case SEV_CMD_GET_ID:
790 	case SEV_CMD_ATTESTATION_REPORT:
791 		return true;
792 	default:
793 		return false;
794 	}
795 }
796 
797 /* After SNP is INIT'ed, the behavior of legacy SEV commands is changed. */
798 static bool snp_legacy_handling_needed(int cmd)
799 {
800 	struct sev_device *sev = psp_master->sev_data;
801 
802 	return cmd < SEV_CMD_SNP_INIT && sev->snp_initialized;
803 }
804 
805 static int snp_prep_cmd_buf(int cmd, void *cmd_buf, struct cmd_buf_desc *desc_list)
806 {
807 	if (!snp_legacy_handling_needed(cmd))
808 		return 0;
809 
810 	if (snp_map_cmd_buf_desc_list(cmd, cmd_buf, desc_list))
811 		return -EFAULT;
812 
813 	/*
814 	 * Before command execution, the command buffer needs to be put into
815 	 * the firmware-owned state.
816 	 */
817 	if (sev_cmd_buf_writable(cmd)) {
818 		if (rmp_mark_pages_firmware(__pa(cmd_buf), 1, true))
819 			return -EFAULT;
820 	}
821 
822 	return 0;
823 }
824 
825 static int snp_reclaim_cmd_buf(int cmd, void *cmd_buf)
826 {
827 	if (!snp_legacy_handling_needed(cmd))
828 		return 0;
829 
830 	/*
831 	 * After command completion, the command buffer needs to be put back
832 	 * into the hypervisor-owned state.
833 	 */
834 	if (sev_cmd_buf_writable(cmd))
835 		if (snp_reclaim_pages(__pa(cmd_buf), 1, true))
836 			return -EFAULT;
837 
838 	return 0;
839 }
840 
841 static int __sev_do_cmd_locked(int cmd, void *data, int *psp_ret)
842 {
843 	struct cmd_buf_desc desc_list[CMD_BUF_DESC_MAX] = {0};
844 	struct psp_device *psp = psp_master;
845 	struct sev_device *sev;
846 	unsigned int cmdbuff_hi, cmdbuff_lo;
847 	unsigned int phys_lsb, phys_msb;
848 	unsigned int reg, ret = 0;
849 	void *cmd_buf;
850 	int buf_len;
851 
852 	if (!psp || !psp->sev_data)
853 		return -ENODEV;
854 
855 	if (psp_dead)
856 		return -EBUSY;
857 
858 	sev = psp->sev_data;
859 
860 	buf_len = sev_cmd_buffer_len(cmd);
861 	if (WARN_ON_ONCE(!data != !buf_len))
862 		return -EINVAL;
863 
864 	/*
865 	 * Copy the incoming data to driver's scratch buffer as __pa() will not
866 	 * work for some memory, e.g. vmalloc'd addresses, and @data may not be
867 	 * physically contiguous.
868 	 */
869 	if (data) {
870 		/*
871 		 * Commands are generally issued one at a time and require the
872 		 * sev_cmd_mutex, but there could be recursive firmware requests
873 		 * due to SEV_CMD_SNP_PAGE_RECLAIM needing to be issued while
874 		 * preparing buffers for another command. This is the only known
875 		 * case of nesting in the current code, so exactly one
876 		 * additional command buffer is available for that purpose.
877 		 */
878 		if (!sev->cmd_buf_active) {
879 			cmd_buf = sev->cmd_buf;
880 			sev->cmd_buf_active = true;
881 		} else if (!sev->cmd_buf_backup_active) {
882 			cmd_buf = sev->cmd_buf_backup;
883 			sev->cmd_buf_backup_active = true;
884 		} else {
885 			dev_err(sev->dev,
886 				"SEV: too many firmware commands in progress, no command buffers available.\n");
887 			return -EBUSY;
888 		}
889 
890 		memcpy(cmd_buf, data, buf_len);
891 
892 		/*
893 		 * The behavior of the SEV-legacy commands is altered when the
894 		 * SNP firmware is in the INIT state.
895 		 */
896 		ret = snp_prep_cmd_buf(cmd, cmd_buf, desc_list);
897 		if (ret) {
898 			dev_err(sev->dev,
899 				"SEV: failed to prepare buffer for legacy command 0x%x. Error: %d\n",
900 				cmd, ret);
901 			return ret;
902 		}
903 	} else {
904 		cmd_buf = sev->cmd_buf;
905 	}
906 
907 	/* Get the physical address of the command buffer */
908 	phys_lsb = data ? lower_32_bits(__psp_pa(cmd_buf)) : 0;
909 	phys_msb = data ? upper_32_bits(__psp_pa(cmd_buf)) : 0;
910 
911 	dev_dbg(sev->dev, "sev command id %#x buffer 0x%08x%08x timeout %us\n",
912 		cmd, phys_msb, phys_lsb, psp_timeout);
913 
914 	print_hex_dump_debug("(in):  ", DUMP_PREFIX_OFFSET, 16, 2, data,
915 			     buf_len, false);
916 
917 	iowrite32(phys_lsb, sev->io_regs + sev->vdata->cmdbuff_addr_lo_reg);
918 	iowrite32(phys_msb, sev->io_regs + sev->vdata->cmdbuff_addr_hi_reg);
919 
920 	sev->int_rcvd = 0;
921 
922 	reg = FIELD_PREP(SEV_CMDRESP_CMD, cmd);
923 
924 	/*
925 	 * If invoked during panic handling, local interrupts are disabled so
926 	 * the PSP command completion interrupt can't be used.
927 	 * sev_wait_cmd_ioc() already checks for interrupts disabled and
928 	 * polls for PSP command completion.  Ensure we do not request an
929 	 * interrupt from the PSP if irqs disabled.
930 	 */
931 	if (!irqs_disabled())
932 		reg |= SEV_CMDRESP_IOC;
933 
934 	iowrite32(reg, sev->io_regs + sev->vdata->cmdresp_reg);
935 
936 	/* wait for command completion */
937 	ret = sev_wait_cmd_ioc(sev, &reg, psp_timeout);
938 	if (ret) {
939 		if (psp_ret)
940 			*psp_ret = 0;
941 
942 		dev_err(sev->dev, "sev command %#x timed out, disabling PSP\n", cmd);
943 		psp_dead = true;
944 
945 		return ret;
946 	}
947 
948 	psp_timeout = psp_cmd_timeout;
949 
950 	if (psp_ret)
951 		*psp_ret = FIELD_GET(PSP_CMDRESP_STS, reg);
952 
953 	if (FIELD_GET(PSP_CMDRESP_STS, reg)) {
954 		dev_dbg(sev->dev, "sev command %#x failed (%#010lx)\n",
955 			cmd, FIELD_GET(PSP_CMDRESP_STS, reg));
956 
957 		/*
958 		 * PSP firmware may report additional error information in the
959 		 * command buffer registers on error. Print contents of command
960 		 * buffer registers if they changed.
961 		 */
962 		cmdbuff_hi = ioread32(sev->io_regs + sev->vdata->cmdbuff_addr_hi_reg);
963 		cmdbuff_lo = ioread32(sev->io_regs + sev->vdata->cmdbuff_addr_lo_reg);
964 		if (cmdbuff_hi != phys_msb || cmdbuff_lo != phys_lsb) {
965 			dev_dbg(sev->dev, "Additional error information reported in cmdbuff:");
966 			dev_dbg(sev->dev, "  cmdbuff hi: %#010x\n", cmdbuff_hi);
967 			dev_dbg(sev->dev, "  cmdbuff lo: %#010x\n", cmdbuff_lo);
968 		}
969 		ret = -EIO;
970 	} else {
971 		ret = sev_write_init_ex_file_if_required(cmd);
972 	}
973 
974 	/*
975 	 * Copy potential output from the PSP back to data.  Do this even on
976 	 * failure in case the caller wants to glean something from the error.
977 	 */
978 	if (data) {
979 		int ret_reclaim;
980 		/*
981 		 * Restore the page state after the command completes.
982 		 */
983 		ret_reclaim = snp_reclaim_cmd_buf(cmd, cmd_buf);
984 		if (ret_reclaim) {
985 			dev_err(sev->dev,
986 				"SEV: failed to reclaim buffer for legacy command %#x. Error: %d\n",
987 				cmd, ret_reclaim);
988 			return ret_reclaim;
989 		}
990 
991 		memcpy(data, cmd_buf, buf_len);
992 
993 		if (sev->cmd_buf_backup_active)
994 			sev->cmd_buf_backup_active = false;
995 		else
996 			sev->cmd_buf_active = false;
997 
998 		if (snp_unmap_cmd_buf_desc_list(desc_list))
999 			return -EFAULT;
1000 	}
1001 
1002 	print_hex_dump_debug("(out): ", DUMP_PREFIX_OFFSET, 16, 2, data,
1003 			     buf_len, false);
1004 
1005 	return ret;
1006 }
1007 
1008 int sev_do_cmd(int cmd, void *data, int *psp_ret)
1009 {
1010 	int rc;
1011 
1012 	mutex_lock(&sev_cmd_mutex);
1013 	rc = __sev_do_cmd_locked(cmd, data, psp_ret);
1014 	mutex_unlock(&sev_cmd_mutex);
1015 
1016 	return rc;
1017 }
1018 EXPORT_SYMBOL_GPL(sev_do_cmd);
1019 
1020 static int __sev_init_locked(int *error)
1021 {
1022 	struct sev_data_init data;
1023 
1024 	memset(&data, 0, sizeof(data));
1025 	if (sev_es_tmr) {
1026 		/*
1027 		 * Do not include the encryption mask on the physical
1028 		 * address of the TMR (firmware should clear it anyway).
1029 		 */
1030 		data.tmr_address = __pa(sev_es_tmr);
1031 
1032 		data.flags |= SEV_INIT_FLAGS_SEV_ES;
1033 		data.tmr_len = sev_es_tmr_size;
1034 	}
1035 
1036 	return __sev_do_cmd_locked(SEV_CMD_INIT, &data, error);
1037 }
1038 
1039 static int __sev_init_ex_locked(int *error)
1040 {
1041 	struct sev_data_init_ex data;
1042 
1043 	memset(&data, 0, sizeof(data));
1044 	data.length = sizeof(data);
1045 	data.nv_address = __psp_pa(sev_init_ex_buffer);
1046 	data.nv_len = NV_LENGTH;
1047 
1048 	if (sev_es_tmr) {
1049 		/*
1050 		 * Do not include the encryption mask on the physical
1051 		 * address of the TMR (firmware should clear it anyway).
1052 		 */
1053 		data.tmr_address = __pa(sev_es_tmr);
1054 
1055 		data.flags |= SEV_INIT_FLAGS_SEV_ES;
1056 		data.tmr_len = sev_es_tmr_size;
1057 	}
1058 
1059 	return __sev_do_cmd_locked(SEV_CMD_INIT_EX, &data, error);
1060 }
1061 
1062 static inline int __sev_do_init_locked(int *psp_ret)
1063 {
1064 	if (sev_init_ex_buffer)
1065 		return __sev_init_ex_locked(psp_ret);
1066 	else
1067 		return __sev_init_locked(psp_ret);
1068 }
1069 
1070 static void snp_set_hsave_pa(void *arg)
1071 {
1072 	wrmsrl(MSR_VM_HSAVE_PA, 0);
1073 }
1074 
1075 static int snp_filter_reserved_mem_regions(struct resource *rs, void *arg)
1076 {
1077 	struct sev_data_range_list *range_list = arg;
1078 	struct sev_data_range *range = &range_list->ranges[range_list->num_elements];
1079 	size_t size;
1080 
1081 	/*
1082 	 * Ensure the list of HV_FIXED pages that will be passed to firmware
1083 	 * do not exceed the page-sized argument buffer.
1084 	 */
1085 	if ((range_list->num_elements * sizeof(struct sev_data_range) +
1086 	     sizeof(struct sev_data_range_list)) > PAGE_SIZE)
1087 		return -E2BIG;
1088 
1089 	switch (rs->desc) {
1090 	case E820_TYPE_RESERVED:
1091 	case E820_TYPE_PMEM:
1092 	case E820_TYPE_ACPI:
1093 		range->base = rs->start & PAGE_MASK;
1094 		size = PAGE_ALIGN((rs->end + 1) - rs->start);
1095 		range->page_count = size >> PAGE_SHIFT;
1096 		range_list->num_elements++;
1097 		break;
1098 	default:
1099 		break;
1100 	}
1101 
1102 	return 0;
1103 }
1104 
1105 static int __sev_snp_init_locked(int *error)
1106 {
1107 	struct psp_device *psp = psp_master;
1108 	struct sev_data_snp_init_ex data;
1109 	struct sev_device *sev;
1110 	void *arg = &data;
1111 	int cmd, rc = 0;
1112 
1113 	if (!cc_platform_has(CC_ATTR_HOST_SEV_SNP))
1114 		return -ENODEV;
1115 
1116 	sev = psp->sev_data;
1117 
1118 	if (sev->snp_initialized)
1119 		return 0;
1120 
1121 	if (!sev_version_greater_or_equal(SNP_MIN_API_MAJOR, SNP_MIN_API_MINOR)) {
1122 		dev_dbg(sev->dev, "SEV-SNP support requires firmware version >= %d:%d\n",
1123 			SNP_MIN_API_MAJOR, SNP_MIN_API_MINOR);
1124 		return -EOPNOTSUPP;
1125 	}
1126 
1127 	/* SNP_INIT requires MSR_VM_HSAVE_PA to be cleared on all CPUs. */
1128 	on_each_cpu(snp_set_hsave_pa, NULL, 1);
1129 
1130 	/*
1131 	 * Starting in SNP firmware v1.52, the SNP_INIT_EX command takes a list
1132 	 * of system physical address ranges to convert into HV-fixed page
1133 	 * states during the RMP initialization.  For instance, the memory that
1134 	 * UEFI reserves should be included in the that list. This allows system
1135 	 * components that occasionally write to memory (e.g. logging to UEFI
1136 	 * reserved regions) to not fail due to RMP initialization and SNP
1137 	 * enablement.
1138 	 *
1139 	 */
1140 	if (sev_version_greater_or_equal(SNP_MIN_API_MAJOR, 52)) {
1141 		/*
1142 		 * Firmware checks that the pages containing the ranges enumerated
1143 		 * in the RANGES structure are either in the default page state or in the
1144 		 * firmware page state.
1145 		 */
1146 		snp_range_list = kzalloc(PAGE_SIZE, GFP_KERNEL);
1147 		if (!snp_range_list) {
1148 			dev_err(sev->dev,
1149 				"SEV: SNP_INIT_EX range list memory allocation failed\n");
1150 			return -ENOMEM;
1151 		}
1152 
1153 		/*
1154 		 * Retrieve all reserved memory regions from the e820 memory map
1155 		 * to be setup as HV-fixed pages.
1156 		 */
1157 		rc = walk_iomem_res_desc(IORES_DESC_NONE, IORESOURCE_MEM, 0, ~0,
1158 					 snp_range_list, snp_filter_reserved_mem_regions);
1159 		if (rc) {
1160 			dev_err(sev->dev,
1161 				"SEV: SNP_INIT_EX walk_iomem_res_desc failed rc = %d\n", rc);
1162 			return rc;
1163 		}
1164 
1165 		memset(&data, 0, sizeof(data));
1166 		data.init_rmp = 1;
1167 		data.list_paddr_en = 1;
1168 		data.list_paddr = __psp_pa(snp_range_list);
1169 		cmd = SEV_CMD_SNP_INIT_EX;
1170 	} else {
1171 		cmd = SEV_CMD_SNP_INIT;
1172 		arg = NULL;
1173 	}
1174 
1175 	/*
1176 	 * The following sequence must be issued before launching the first SNP
1177 	 * guest to ensure all dirty cache lines are flushed, including from
1178 	 * updates to the RMP table itself via the RMPUPDATE instruction:
1179 	 *
1180 	 * - WBINVD on all running CPUs
1181 	 * - SEV_CMD_SNP_INIT[_EX] firmware command
1182 	 * - WBINVD on all running CPUs
1183 	 * - SEV_CMD_SNP_DF_FLUSH firmware command
1184 	 */
1185 	wbinvd_on_all_cpus();
1186 
1187 	rc = __sev_do_cmd_locked(cmd, arg, error);
1188 	if (rc) {
1189 		dev_err(sev->dev, "SEV-SNP: %s failed rc %d, error %#x\n",
1190 			cmd == SEV_CMD_SNP_INIT_EX ? "SNP_INIT_EX" : "SNP_INIT",
1191 			rc, *error);
1192 		return rc;
1193 	}
1194 
1195 	/* Prepare for first SNP guest launch after INIT. */
1196 	wbinvd_on_all_cpus();
1197 	rc = __sev_do_cmd_locked(SEV_CMD_SNP_DF_FLUSH, NULL, error);
1198 	if (rc) {
1199 		dev_err(sev->dev, "SEV-SNP: SNP_DF_FLUSH failed rc %d, error %#x\n",
1200 			rc, *error);
1201 		return rc;
1202 	}
1203 
1204 	sev->snp_initialized = true;
1205 	dev_dbg(sev->dev, "SEV-SNP firmware initialized\n");
1206 
1207 	dev_info(sev->dev, "SEV-SNP API:%d.%d build:%d\n", sev->api_major,
1208 		 sev->api_minor, sev->build);
1209 
1210 	atomic_notifier_chain_register(&panic_notifier_list,
1211 				       &snp_panic_notifier);
1212 
1213 	sev_es_tmr_size = SNP_TMR_SIZE;
1214 
1215 	return 0;
1216 }
1217 
1218 static void __sev_platform_init_handle_tmr(struct sev_device *sev)
1219 {
1220 	if (sev_es_tmr)
1221 		return;
1222 
1223 	/* Obtain the TMR memory area for SEV-ES use */
1224 	sev_es_tmr = sev_fw_alloc(sev_es_tmr_size);
1225 	if (sev_es_tmr) {
1226 		/* Must flush the cache before giving it to the firmware */
1227 		if (!sev->snp_initialized)
1228 			clflush_cache_range(sev_es_tmr, sev_es_tmr_size);
1229 	} else {
1230 			dev_warn(sev->dev, "SEV: TMR allocation failed, SEV-ES support unavailable\n");
1231 	}
1232 }
1233 
1234 /*
1235  * If an init_ex_path is provided allocate a buffer for the file and
1236  * read in the contents. Additionally, if SNP is initialized, convert
1237  * the buffer pages to firmware pages.
1238  */
1239 static int __sev_platform_init_handle_init_ex_path(struct sev_device *sev)
1240 {
1241 	struct page *page;
1242 	int rc;
1243 
1244 	if (!init_ex_path)
1245 		return 0;
1246 
1247 	if (sev_init_ex_buffer)
1248 		return 0;
1249 
1250 	page = alloc_pages(GFP_KERNEL, get_order(NV_LENGTH));
1251 	if (!page) {
1252 		dev_err(sev->dev, "SEV: INIT_EX NV memory allocation failed\n");
1253 		return -ENOMEM;
1254 	}
1255 
1256 	sev_init_ex_buffer = page_address(page);
1257 
1258 	rc = sev_read_init_ex_file();
1259 	if (rc)
1260 		return rc;
1261 
1262 	/* If SEV-SNP is initialized, transition to firmware page. */
1263 	if (sev->snp_initialized) {
1264 		unsigned long npages;
1265 
1266 		npages = 1UL << get_order(NV_LENGTH);
1267 		if (rmp_mark_pages_firmware(__pa(sev_init_ex_buffer), npages, false)) {
1268 			dev_err(sev->dev, "SEV: INIT_EX NV memory page state change failed.\n");
1269 			return -ENOMEM;
1270 		}
1271 	}
1272 
1273 	return 0;
1274 }
1275 
1276 static int __sev_platform_init_locked(int *error)
1277 {
1278 	int rc, psp_ret = SEV_RET_NO_FW_CALL;
1279 	struct sev_device *sev;
1280 
1281 	if (!psp_master || !psp_master->sev_data)
1282 		return -ENODEV;
1283 
1284 	sev = psp_master->sev_data;
1285 
1286 	if (sev->state == SEV_STATE_INIT)
1287 		return 0;
1288 
1289 	__sev_platform_init_handle_tmr(sev);
1290 
1291 	rc = __sev_platform_init_handle_init_ex_path(sev);
1292 	if (rc)
1293 		return rc;
1294 
1295 	rc = __sev_do_init_locked(&psp_ret);
1296 	if (rc && psp_ret == SEV_RET_SECURE_DATA_INVALID) {
1297 		/*
1298 		 * Initialization command returned an integrity check failure
1299 		 * status code, meaning that firmware load and validation of SEV
1300 		 * related persistent data has failed. Retrying the
1301 		 * initialization function should succeed by replacing the state
1302 		 * with a reset state.
1303 		 */
1304 		dev_err(sev->dev,
1305 "SEV: retrying INIT command because of SECURE_DATA_INVALID error. Retrying once to reset PSP SEV state.");
1306 		rc = __sev_do_init_locked(&psp_ret);
1307 	}
1308 
1309 	if (error)
1310 		*error = psp_ret;
1311 
1312 	if (rc) {
1313 		dev_err(sev->dev, "SEV: %s failed %#x, rc %d\n",
1314 			sev_init_ex_buffer ? "INIT_EX" : "INIT", psp_ret, rc);
1315 		return rc;
1316 	}
1317 
1318 	sev->state = SEV_STATE_INIT;
1319 
1320 	/* Prepare for first SEV guest launch after INIT */
1321 	wbinvd_on_all_cpus();
1322 	rc = __sev_do_cmd_locked(SEV_CMD_DF_FLUSH, NULL, error);
1323 	if (rc) {
1324 		dev_err(sev->dev, "SEV: DF_FLUSH failed %#x, rc %d\n",
1325 			*error, rc);
1326 		return rc;
1327 	}
1328 
1329 	dev_dbg(sev->dev, "SEV firmware initialized\n");
1330 
1331 	dev_info(sev->dev, "SEV API:%d.%d build:%d\n", sev->api_major,
1332 		 sev->api_minor, sev->build);
1333 
1334 	return 0;
1335 }
1336 
1337 static int _sev_platform_init_locked(struct sev_platform_init_args *args)
1338 {
1339 	struct sev_device *sev;
1340 	int rc;
1341 
1342 	if (!psp_master || !psp_master->sev_data)
1343 		return -ENODEV;
1344 
1345 	sev = psp_master->sev_data;
1346 
1347 	if (sev->state == SEV_STATE_INIT)
1348 		return 0;
1349 
1350 	rc = __sev_snp_init_locked(&args->error);
1351 	if (rc && rc != -ENODEV)
1352 		return rc;
1353 
1354 	/* Defer legacy SEV/SEV-ES support if allowed by caller/module. */
1355 	if (args->probe && !psp_init_on_probe)
1356 		return 0;
1357 
1358 	return __sev_platform_init_locked(&args->error);
1359 }
1360 
1361 int sev_platform_init(struct sev_platform_init_args *args)
1362 {
1363 	int rc;
1364 
1365 	mutex_lock(&sev_cmd_mutex);
1366 	rc = _sev_platform_init_locked(args);
1367 	mutex_unlock(&sev_cmd_mutex);
1368 
1369 	return rc;
1370 }
1371 EXPORT_SYMBOL_GPL(sev_platform_init);
1372 
1373 static int __sev_platform_shutdown_locked(int *error)
1374 {
1375 	struct psp_device *psp = psp_master;
1376 	struct sev_device *sev;
1377 	int ret;
1378 
1379 	if (!psp || !psp->sev_data)
1380 		return 0;
1381 
1382 	sev = psp->sev_data;
1383 
1384 	if (sev->state == SEV_STATE_UNINIT)
1385 		return 0;
1386 
1387 	ret = __sev_do_cmd_locked(SEV_CMD_SHUTDOWN, NULL, error);
1388 	if (ret) {
1389 		dev_err(sev->dev, "SEV: failed to SHUTDOWN error %#x, rc %d\n",
1390 			*error, ret);
1391 		return ret;
1392 	}
1393 
1394 	sev->state = SEV_STATE_UNINIT;
1395 	dev_dbg(sev->dev, "SEV firmware shutdown\n");
1396 
1397 	return ret;
1398 }
1399 
1400 static int sev_get_platform_state(int *state, int *error)
1401 {
1402 	struct sev_user_data_status data;
1403 	int rc;
1404 
1405 	rc = __sev_do_cmd_locked(SEV_CMD_PLATFORM_STATUS, &data, error);
1406 	if (rc)
1407 		return rc;
1408 
1409 	*state = data.state;
1410 	return rc;
1411 }
1412 
1413 static int sev_move_to_init_state(struct sev_issue_cmd *argp, bool *shutdown_required)
1414 {
1415 	struct sev_platform_init_args init_args = {0};
1416 	int rc;
1417 
1418 	rc = _sev_platform_init_locked(&init_args);
1419 	if (rc) {
1420 		argp->error = SEV_RET_INVALID_PLATFORM_STATE;
1421 		return rc;
1422 	}
1423 
1424 	*shutdown_required = true;
1425 
1426 	return 0;
1427 }
1428 
1429 static int snp_move_to_init_state(struct sev_issue_cmd *argp, bool *shutdown_required)
1430 {
1431 	int error, rc;
1432 
1433 	rc = __sev_snp_init_locked(&error);
1434 	if (rc) {
1435 		argp->error = SEV_RET_INVALID_PLATFORM_STATE;
1436 		return rc;
1437 	}
1438 
1439 	*shutdown_required = true;
1440 
1441 	return 0;
1442 }
1443 
1444 static int sev_ioctl_do_reset(struct sev_issue_cmd *argp, bool writable)
1445 {
1446 	int state, rc;
1447 
1448 	if (!writable)
1449 		return -EPERM;
1450 
1451 	/*
1452 	 * The SEV spec requires that FACTORY_RESET must be issued in
1453 	 * UNINIT state. Before we go further lets check if any guest is
1454 	 * active.
1455 	 *
1456 	 * If FW is in WORKING state then deny the request otherwise issue
1457 	 * SHUTDOWN command do INIT -> UNINIT before issuing the FACTORY_RESET.
1458 	 *
1459 	 */
1460 	rc = sev_get_platform_state(&state, &argp->error);
1461 	if (rc)
1462 		return rc;
1463 
1464 	if (state == SEV_STATE_WORKING)
1465 		return -EBUSY;
1466 
1467 	if (state == SEV_STATE_INIT) {
1468 		rc = __sev_platform_shutdown_locked(&argp->error);
1469 		if (rc)
1470 			return rc;
1471 	}
1472 
1473 	return __sev_do_cmd_locked(SEV_CMD_FACTORY_RESET, NULL, &argp->error);
1474 }
1475 
1476 static int sev_ioctl_do_platform_status(struct sev_issue_cmd *argp)
1477 {
1478 	struct sev_user_data_status data;
1479 	int ret;
1480 
1481 	memset(&data, 0, sizeof(data));
1482 
1483 	ret = __sev_do_cmd_locked(SEV_CMD_PLATFORM_STATUS, &data, &argp->error);
1484 	if (ret)
1485 		return ret;
1486 
1487 	if (copy_to_user((void __user *)argp->data, &data, sizeof(data)))
1488 		ret = -EFAULT;
1489 
1490 	return ret;
1491 }
1492 
1493 static int sev_ioctl_do_pek_pdh_gen(int cmd, struct sev_issue_cmd *argp, bool writable)
1494 {
1495 	struct sev_device *sev = psp_master->sev_data;
1496 	bool shutdown_required = false;
1497 	int rc;
1498 
1499 	if (!writable)
1500 		return -EPERM;
1501 
1502 	if (sev->state == SEV_STATE_UNINIT) {
1503 		rc = sev_move_to_init_state(argp, &shutdown_required);
1504 		if (rc)
1505 			return rc;
1506 	}
1507 
1508 	rc = __sev_do_cmd_locked(cmd, NULL, &argp->error);
1509 
1510 	if (shutdown_required)
1511 		__sev_firmware_shutdown(sev, false);
1512 
1513 	return rc;
1514 }
1515 
1516 static int sev_ioctl_do_pek_csr(struct sev_issue_cmd *argp, bool writable)
1517 {
1518 	struct sev_device *sev = psp_master->sev_data;
1519 	struct sev_user_data_pek_csr input;
1520 	bool shutdown_required = false;
1521 	struct sev_data_pek_csr data;
1522 	void __user *input_address;
1523 	void *blob = NULL;
1524 	int ret;
1525 
1526 	if (!writable)
1527 		return -EPERM;
1528 
1529 	if (copy_from_user(&input, (void __user *)argp->data, sizeof(input)))
1530 		return -EFAULT;
1531 
1532 	memset(&data, 0, sizeof(data));
1533 
1534 	/* userspace wants to query CSR length */
1535 	if (!input.address || !input.length)
1536 		goto cmd;
1537 
1538 	/* allocate a physically contiguous buffer to store the CSR blob */
1539 	input_address = (void __user *)input.address;
1540 	if (input.length > SEV_FW_BLOB_MAX_SIZE)
1541 		return -EFAULT;
1542 
1543 	blob = kzalloc(input.length, GFP_KERNEL);
1544 	if (!blob)
1545 		return -ENOMEM;
1546 
1547 	data.address = __psp_pa(blob);
1548 	data.len = input.length;
1549 
1550 cmd:
1551 	if (sev->state == SEV_STATE_UNINIT) {
1552 		ret = sev_move_to_init_state(argp, &shutdown_required);
1553 		if (ret)
1554 			goto e_free_blob;
1555 	}
1556 
1557 	ret = __sev_do_cmd_locked(SEV_CMD_PEK_CSR, &data, &argp->error);
1558 
1559 	 /* If we query the CSR length, FW responded with expected data. */
1560 	input.length = data.len;
1561 
1562 	if (copy_to_user((void __user *)argp->data, &input, sizeof(input))) {
1563 		ret = -EFAULT;
1564 		goto e_free_blob;
1565 	}
1566 
1567 	if (blob) {
1568 		if (copy_to_user(input_address, blob, input.length))
1569 			ret = -EFAULT;
1570 	}
1571 
1572 e_free_blob:
1573 	if (shutdown_required)
1574 		__sev_firmware_shutdown(sev, false);
1575 
1576 	kfree(blob);
1577 	return ret;
1578 }
1579 
1580 void *psp_copy_user_blob(u64 uaddr, u32 len)
1581 {
1582 	if (!uaddr || !len)
1583 		return ERR_PTR(-EINVAL);
1584 
1585 	/* verify that blob length does not exceed our limit */
1586 	if (len > SEV_FW_BLOB_MAX_SIZE)
1587 		return ERR_PTR(-EINVAL);
1588 
1589 	return memdup_user((void __user *)uaddr, len);
1590 }
1591 EXPORT_SYMBOL_GPL(psp_copy_user_blob);
1592 
1593 static int sev_get_api_version(void)
1594 {
1595 	struct sev_device *sev = psp_master->sev_data;
1596 	struct sev_user_data_status status;
1597 	int error = 0, ret;
1598 
1599 	ret = sev_platform_status(&status, &error);
1600 	if (ret) {
1601 		dev_err(sev->dev,
1602 			"SEV: failed to get status. Error: %#x\n", error);
1603 		return 1;
1604 	}
1605 
1606 	sev->api_major = status.api_major;
1607 	sev->api_minor = status.api_minor;
1608 	sev->build = status.build;
1609 	sev->state = status.state;
1610 
1611 	return 0;
1612 }
1613 
1614 static int sev_get_firmware(struct device *dev,
1615 			    const struct firmware **firmware)
1616 {
1617 	char fw_name_specific[SEV_FW_NAME_SIZE];
1618 	char fw_name_subset[SEV_FW_NAME_SIZE];
1619 
1620 	snprintf(fw_name_specific, sizeof(fw_name_specific),
1621 		 "amd/amd_sev_fam%.2xh_model%.2xh.sbin",
1622 		 boot_cpu_data.x86, boot_cpu_data.x86_model);
1623 
1624 	snprintf(fw_name_subset, sizeof(fw_name_subset),
1625 		 "amd/amd_sev_fam%.2xh_model%.1xxh.sbin",
1626 		 boot_cpu_data.x86, (boot_cpu_data.x86_model & 0xf0) >> 4);
1627 
1628 	/* Check for SEV FW for a particular model.
1629 	 * Ex. amd_sev_fam17h_model00h.sbin for Family 17h Model 00h
1630 	 *
1631 	 * or
1632 	 *
1633 	 * Check for SEV FW common to a subset of models.
1634 	 * Ex. amd_sev_fam17h_model0xh.sbin for
1635 	 *     Family 17h Model 00h -- Family 17h Model 0Fh
1636 	 *
1637 	 * or
1638 	 *
1639 	 * Fall-back to using generic name: sev.fw
1640 	 */
1641 	if ((firmware_request_nowarn(firmware, fw_name_specific, dev) >= 0) ||
1642 	    (firmware_request_nowarn(firmware, fw_name_subset, dev) >= 0) ||
1643 	    (firmware_request_nowarn(firmware, SEV_FW_FILE, dev) >= 0))
1644 		return 0;
1645 
1646 	return -ENOENT;
1647 }
1648 
1649 /* Don't fail if SEV FW couldn't be updated. Continue with existing SEV FW */
1650 static int sev_update_firmware(struct device *dev)
1651 {
1652 	struct sev_data_download_firmware *data;
1653 	const struct firmware *firmware;
1654 	int ret, error, order;
1655 	struct page *p;
1656 	u64 data_size;
1657 
1658 	if (!sev_version_greater_or_equal(0, 15)) {
1659 		dev_dbg(dev, "DOWNLOAD_FIRMWARE not supported\n");
1660 		return -1;
1661 	}
1662 
1663 	if (sev_get_firmware(dev, &firmware) == -ENOENT) {
1664 		dev_dbg(dev, "No SEV firmware file present\n");
1665 		return -1;
1666 	}
1667 
1668 	/*
1669 	 * SEV FW expects the physical address given to it to be 32
1670 	 * byte aligned. Memory allocated has structure placed at the
1671 	 * beginning followed by the firmware being passed to the SEV
1672 	 * FW. Allocate enough memory for data structure + alignment
1673 	 * padding + SEV FW.
1674 	 */
1675 	data_size = ALIGN(sizeof(struct sev_data_download_firmware), 32);
1676 
1677 	order = get_order(firmware->size + data_size);
1678 	p = alloc_pages(GFP_KERNEL, order);
1679 	if (!p) {
1680 		ret = -1;
1681 		goto fw_err;
1682 	}
1683 
1684 	/*
1685 	 * Copy firmware data to a kernel allocated contiguous
1686 	 * memory region.
1687 	 */
1688 	data = page_address(p);
1689 	memcpy(page_address(p) + data_size, firmware->data, firmware->size);
1690 
1691 	data->address = __psp_pa(page_address(p) + data_size);
1692 	data->len = firmware->size;
1693 
1694 	ret = sev_do_cmd(SEV_CMD_DOWNLOAD_FIRMWARE, data, &error);
1695 
1696 	/*
1697 	 * A quirk for fixing the committed TCB version, when upgrading from
1698 	 * earlier firmware version than 1.50.
1699 	 */
1700 	if (!ret && !sev_version_greater_or_equal(1, 50))
1701 		ret = sev_do_cmd(SEV_CMD_DOWNLOAD_FIRMWARE, data, &error);
1702 
1703 	if (ret)
1704 		dev_dbg(dev, "Failed to update SEV firmware: %#x\n", error);
1705 
1706 	__free_pages(p, order);
1707 
1708 fw_err:
1709 	release_firmware(firmware);
1710 
1711 	return ret;
1712 }
1713 
1714 static int __sev_snp_shutdown_locked(int *error, bool panic)
1715 {
1716 	struct psp_device *psp = psp_master;
1717 	struct sev_device *sev;
1718 	struct sev_data_snp_shutdown_ex data;
1719 	int ret;
1720 
1721 	if (!psp || !psp->sev_data)
1722 		return 0;
1723 
1724 	sev = psp->sev_data;
1725 
1726 	if (!sev->snp_initialized)
1727 		return 0;
1728 
1729 	memset(&data, 0, sizeof(data));
1730 	data.len = sizeof(data);
1731 	data.iommu_snp_shutdown = 1;
1732 
1733 	/*
1734 	 * If invoked during panic handling, local interrupts are disabled
1735 	 * and all CPUs are stopped, so wbinvd_on_all_cpus() can't be called.
1736 	 * In that case, a wbinvd() is done on remote CPUs via the NMI
1737 	 * callback, so only a local wbinvd() is needed here.
1738 	 */
1739 	if (!panic)
1740 		wbinvd_on_all_cpus();
1741 	else
1742 		wbinvd();
1743 
1744 	ret = __sev_do_cmd_locked(SEV_CMD_SNP_SHUTDOWN_EX, &data, error);
1745 	/* SHUTDOWN may require DF_FLUSH */
1746 	if (*error == SEV_RET_DFFLUSH_REQUIRED) {
1747 		int dfflush_error = SEV_RET_NO_FW_CALL;
1748 
1749 		ret = __sev_do_cmd_locked(SEV_CMD_SNP_DF_FLUSH, NULL, &dfflush_error);
1750 		if (ret) {
1751 			dev_err(sev->dev, "SEV-SNP DF_FLUSH failed, ret = %d, error = %#x\n",
1752 				ret, dfflush_error);
1753 			return ret;
1754 		}
1755 		/* reissue the shutdown command */
1756 		ret = __sev_do_cmd_locked(SEV_CMD_SNP_SHUTDOWN_EX, &data,
1757 					  error);
1758 	}
1759 	if (ret) {
1760 		dev_err(sev->dev, "SEV-SNP firmware shutdown failed, rc %d, error %#x\n",
1761 			ret, *error);
1762 		return ret;
1763 	}
1764 
1765 	/*
1766 	 * SNP_SHUTDOWN_EX with IOMMU_SNP_SHUTDOWN set to 1 disables SNP
1767 	 * enforcement by the IOMMU and also transitions all pages
1768 	 * associated with the IOMMU to the Reclaim state.
1769 	 * Firmware was transitioning the IOMMU pages to Hypervisor state
1770 	 * before version 1.53. But, accounting for the number of assigned
1771 	 * 4kB pages in a 2M page was done incorrectly by not transitioning
1772 	 * to the Reclaim state. This resulted in RMP #PF when later accessing
1773 	 * the 2M page containing those pages during kexec boot. Hence, the
1774 	 * firmware now transitions these pages to Reclaim state and hypervisor
1775 	 * needs to transition these pages to shared state. SNP Firmware
1776 	 * version 1.53 and above are needed for kexec boot.
1777 	 */
1778 	ret = amd_iommu_snp_disable();
1779 	if (ret) {
1780 		dev_err(sev->dev, "SNP IOMMU shutdown failed\n");
1781 		return ret;
1782 	}
1783 
1784 	sev->snp_initialized = false;
1785 	dev_dbg(sev->dev, "SEV-SNP firmware shutdown\n");
1786 
1787 	atomic_notifier_chain_unregister(&panic_notifier_list,
1788 					 &snp_panic_notifier);
1789 
1790 	/* Reset TMR size back to default */
1791 	sev_es_tmr_size = SEV_TMR_SIZE;
1792 
1793 	return ret;
1794 }
1795 
1796 static int sev_ioctl_do_pek_import(struct sev_issue_cmd *argp, bool writable)
1797 {
1798 	struct sev_device *sev = psp_master->sev_data;
1799 	struct sev_user_data_pek_cert_import input;
1800 	struct sev_data_pek_cert_import data;
1801 	bool shutdown_required = false;
1802 	void *pek_blob, *oca_blob;
1803 	int ret;
1804 
1805 	if (!writable)
1806 		return -EPERM;
1807 
1808 	if (copy_from_user(&input, (void __user *)argp->data, sizeof(input)))
1809 		return -EFAULT;
1810 
1811 	/* copy PEK certificate blobs from userspace */
1812 	pek_blob = psp_copy_user_blob(input.pek_cert_address, input.pek_cert_len);
1813 	if (IS_ERR(pek_blob))
1814 		return PTR_ERR(pek_blob);
1815 
1816 	data.reserved = 0;
1817 	data.pek_cert_address = __psp_pa(pek_blob);
1818 	data.pek_cert_len = input.pek_cert_len;
1819 
1820 	/* copy PEK certificate blobs from userspace */
1821 	oca_blob = psp_copy_user_blob(input.oca_cert_address, input.oca_cert_len);
1822 	if (IS_ERR(oca_blob)) {
1823 		ret = PTR_ERR(oca_blob);
1824 		goto e_free_pek;
1825 	}
1826 
1827 	data.oca_cert_address = __psp_pa(oca_blob);
1828 	data.oca_cert_len = input.oca_cert_len;
1829 
1830 	/* If platform is not in INIT state then transition it to INIT */
1831 	if (sev->state != SEV_STATE_INIT) {
1832 		ret = sev_move_to_init_state(argp, &shutdown_required);
1833 		if (ret)
1834 			goto e_free_oca;
1835 	}
1836 
1837 	ret = __sev_do_cmd_locked(SEV_CMD_PEK_CERT_IMPORT, &data, &argp->error);
1838 
1839 e_free_oca:
1840 	if (shutdown_required)
1841 		__sev_firmware_shutdown(sev, false);
1842 
1843 	kfree(oca_blob);
1844 e_free_pek:
1845 	kfree(pek_blob);
1846 	return ret;
1847 }
1848 
1849 static int sev_ioctl_do_get_id2(struct sev_issue_cmd *argp)
1850 {
1851 	struct sev_user_data_get_id2 input;
1852 	struct sev_data_get_id data;
1853 	void __user *input_address;
1854 	void *id_blob = NULL;
1855 	int ret;
1856 
1857 	/* SEV GET_ID is available from SEV API v0.16 and up */
1858 	if (!sev_version_greater_or_equal(0, 16))
1859 		return -ENOTSUPP;
1860 
1861 	if (copy_from_user(&input, (void __user *)argp->data, sizeof(input)))
1862 		return -EFAULT;
1863 
1864 	input_address = (void __user *)input.address;
1865 
1866 	if (input.address && input.length) {
1867 		/*
1868 		 * The length of the ID shouldn't be assumed by software since
1869 		 * it may change in the future.  The allocation size is limited
1870 		 * to 1 << (PAGE_SHIFT + MAX_PAGE_ORDER) by the page allocator.
1871 		 * If the allocation fails, simply return ENOMEM rather than
1872 		 * warning in the kernel log.
1873 		 */
1874 		id_blob = kzalloc(input.length, GFP_KERNEL | __GFP_NOWARN);
1875 		if (!id_blob)
1876 			return -ENOMEM;
1877 
1878 		data.address = __psp_pa(id_blob);
1879 		data.len = input.length;
1880 	} else {
1881 		data.address = 0;
1882 		data.len = 0;
1883 	}
1884 
1885 	ret = __sev_do_cmd_locked(SEV_CMD_GET_ID, &data, &argp->error);
1886 
1887 	/*
1888 	 * Firmware will return the length of the ID value (either the minimum
1889 	 * required length or the actual length written), return it to the user.
1890 	 */
1891 	input.length = data.len;
1892 
1893 	if (copy_to_user((void __user *)argp->data, &input, sizeof(input))) {
1894 		ret = -EFAULT;
1895 		goto e_free;
1896 	}
1897 
1898 	if (id_blob) {
1899 		if (copy_to_user(input_address, id_blob, data.len)) {
1900 			ret = -EFAULT;
1901 			goto e_free;
1902 		}
1903 	}
1904 
1905 e_free:
1906 	kfree(id_blob);
1907 
1908 	return ret;
1909 }
1910 
1911 static int sev_ioctl_do_get_id(struct sev_issue_cmd *argp)
1912 {
1913 	struct sev_data_get_id *data;
1914 	u64 data_size, user_size;
1915 	void *id_blob, *mem;
1916 	int ret;
1917 
1918 	/* SEV GET_ID available from SEV API v0.16 and up */
1919 	if (!sev_version_greater_or_equal(0, 16))
1920 		return -ENOTSUPP;
1921 
1922 	/* SEV FW expects the buffer it fills with the ID to be
1923 	 * 8-byte aligned. Memory allocated should be enough to
1924 	 * hold data structure + alignment padding + memory
1925 	 * where SEV FW writes the ID.
1926 	 */
1927 	data_size = ALIGN(sizeof(struct sev_data_get_id), 8);
1928 	user_size = sizeof(struct sev_user_data_get_id);
1929 
1930 	mem = kzalloc(data_size + user_size, GFP_KERNEL);
1931 	if (!mem)
1932 		return -ENOMEM;
1933 
1934 	data = mem;
1935 	id_blob = mem + data_size;
1936 
1937 	data->address = __psp_pa(id_blob);
1938 	data->len = user_size;
1939 
1940 	ret = __sev_do_cmd_locked(SEV_CMD_GET_ID, data, &argp->error);
1941 	if (!ret) {
1942 		if (copy_to_user((void __user *)argp->data, id_blob, data->len))
1943 			ret = -EFAULT;
1944 	}
1945 
1946 	kfree(mem);
1947 
1948 	return ret;
1949 }
1950 
1951 static int sev_ioctl_do_pdh_export(struct sev_issue_cmd *argp, bool writable)
1952 {
1953 	struct sev_device *sev = psp_master->sev_data;
1954 	struct sev_user_data_pdh_cert_export input;
1955 	void *pdh_blob = NULL, *cert_blob = NULL;
1956 	struct sev_data_pdh_cert_export data;
1957 	void __user *input_cert_chain_address;
1958 	void __user *input_pdh_cert_address;
1959 	bool shutdown_required = false;
1960 	int ret;
1961 
1962 	if (copy_from_user(&input, (void __user *)argp->data, sizeof(input)))
1963 		return -EFAULT;
1964 
1965 	memset(&data, 0, sizeof(data));
1966 
1967 	input_pdh_cert_address = (void __user *)input.pdh_cert_address;
1968 	input_cert_chain_address = (void __user *)input.cert_chain_address;
1969 
1970 	/* Userspace wants to query the certificate length. */
1971 	if (!input.pdh_cert_address ||
1972 	    !input.pdh_cert_len ||
1973 	    !input.cert_chain_address)
1974 		goto cmd;
1975 
1976 	/* Allocate a physically contiguous buffer to store the PDH blob. */
1977 	if (input.pdh_cert_len > SEV_FW_BLOB_MAX_SIZE)
1978 		return -EFAULT;
1979 
1980 	/* Allocate a physically contiguous buffer to store the cert chain blob. */
1981 	if (input.cert_chain_len > SEV_FW_BLOB_MAX_SIZE)
1982 		return -EFAULT;
1983 
1984 	pdh_blob = kzalloc(input.pdh_cert_len, GFP_KERNEL);
1985 	if (!pdh_blob)
1986 		return -ENOMEM;
1987 
1988 	data.pdh_cert_address = __psp_pa(pdh_blob);
1989 	data.pdh_cert_len = input.pdh_cert_len;
1990 
1991 	cert_blob = kzalloc(input.cert_chain_len, GFP_KERNEL);
1992 	if (!cert_blob) {
1993 		ret = -ENOMEM;
1994 		goto e_free_pdh;
1995 	}
1996 
1997 	data.cert_chain_address = __psp_pa(cert_blob);
1998 	data.cert_chain_len = input.cert_chain_len;
1999 
2000 cmd:
2001 	/* If platform is not in INIT state then transition it to INIT. */
2002 	if (sev->state != SEV_STATE_INIT) {
2003 		if (!writable) {
2004 			ret = -EPERM;
2005 			goto e_free_cert;
2006 		}
2007 		ret = sev_move_to_init_state(argp, &shutdown_required);
2008 		if (ret)
2009 			goto e_free_cert;
2010 	}
2011 
2012 	ret = __sev_do_cmd_locked(SEV_CMD_PDH_CERT_EXPORT, &data, &argp->error);
2013 
2014 	/* If we query the length, FW responded with expected data. */
2015 	input.cert_chain_len = data.cert_chain_len;
2016 	input.pdh_cert_len = data.pdh_cert_len;
2017 
2018 	if (copy_to_user((void __user *)argp->data, &input, sizeof(input))) {
2019 		ret = -EFAULT;
2020 		goto e_free_cert;
2021 	}
2022 
2023 	if (pdh_blob) {
2024 		if (copy_to_user(input_pdh_cert_address,
2025 				 pdh_blob, input.pdh_cert_len)) {
2026 			ret = -EFAULT;
2027 			goto e_free_cert;
2028 		}
2029 	}
2030 
2031 	if (cert_blob) {
2032 		if (copy_to_user(input_cert_chain_address,
2033 				 cert_blob, input.cert_chain_len))
2034 			ret = -EFAULT;
2035 	}
2036 
2037 e_free_cert:
2038 	if (shutdown_required)
2039 		__sev_firmware_shutdown(sev, false);
2040 
2041 	kfree(cert_blob);
2042 e_free_pdh:
2043 	kfree(pdh_blob);
2044 	return ret;
2045 }
2046 
2047 static int sev_ioctl_do_snp_platform_status(struct sev_issue_cmd *argp)
2048 {
2049 	struct sev_device *sev = psp_master->sev_data;
2050 	bool shutdown_required = false;
2051 	struct sev_data_snp_addr buf;
2052 	struct page *status_page;
2053 	int ret, error;
2054 	void *data;
2055 
2056 	if (!argp->data)
2057 		return -EINVAL;
2058 
2059 	status_page = alloc_page(GFP_KERNEL_ACCOUNT);
2060 	if (!status_page)
2061 		return -ENOMEM;
2062 
2063 	data = page_address(status_page);
2064 
2065 	if (!sev->snp_initialized) {
2066 		ret = snp_move_to_init_state(argp, &shutdown_required);
2067 		if (ret)
2068 			goto cleanup;
2069 	}
2070 
2071 	/*
2072 	 * Firmware expects status page to be in firmware-owned state, otherwise
2073 	 * it will report firmware error code INVALID_PAGE_STATE (0x1A).
2074 	 */
2075 	if (rmp_mark_pages_firmware(__pa(data), 1, true)) {
2076 		ret = -EFAULT;
2077 		goto cleanup;
2078 	}
2079 
2080 	buf.address = __psp_pa(data);
2081 	ret = __sev_do_cmd_locked(SEV_CMD_SNP_PLATFORM_STATUS, &buf, &argp->error);
2082 
2083 	/*
2084 	 * Status page will be transitioned to Reclaim state upon success, or
2085 	 * left in Firmware state in failure. Use snp_reclaim_pages() to
2086 	 * transition either case back to Hypervisor-owned state.
2087 	 */
2088 	if (snp_reclaim_pages(__pa(data), 1, true))
2089 		return -EFAULT;
2090 
2091 	if (ret)
2092 		goto cleanup;
2093 
2094 	if (copy_to_user((void __user *)argp->data, data,
2095 			 sizeof(struct sev_user_data_snp_status)))
2096 		ret = -EFAULT;
2097 
2098 cleanup:
2099 	if (shutdown_required)
2100 		__sev_snp_shutdown_locked(&error, false);
2101 
2102 	__free_pages(status_page, 0);
2103 	return ret;
2104 }
2105 
2106 static int sev_ioctl_do_snp_commit(struct sev_issue_cmd *argp)
2107 {
2108 	struct sev_device *sev = psp_master->sev_data;
2109 	struct sev_data_snp_commit buf;
2110 	bool shutdown_required = false;
2111 	int ret, error;
2112 
2113 	if (!sev->snp_initialized) {
2114 		ret = snp_move_to_init_state(argp, &shutdown_required);
2115 		if (ret)
2116 			return ret;
2117 	}
2118 
2119 	buf.len = sizeof(buf);
2120 
2121 	ret = __sev_do_cmd_locked(SEV_CMD_SNP_COMMIT, &buf, &argp->error);
2122 
2123 	if (shutdown_required)
2124 		__sev_snp_shutdown_locked(&error, false);
2125 
2126 	return ret;
2127 }
2128 
2129 static int sev_ioctl_do_snp_set_config(struct sev_issue_cmd *argp, bool writable)
2130 {
2131 	struct sev_device *sev = psp_master->sev_data;
2132 	struct sev_user_data_snp_config config;
2133 	bool shutdown_required = false;
2134 	int ret, error;
2135 
2136 	if (!argp->data)
2137 		return -EINVAL;
2138 
2139 	if (!writable)
2140 		return -EPERM;
2141 
2142 	if (copy_from_user(&config, (void __user *)argp->data, sizeof(config)))
2143 		return -EFAULT;
2144 
2145 	if (!sev->snp_initialized) {
2146 		ret = snp_move_to_init_state(argp, &shutdown_required);
2147 		if (ret)
2148 			return ret;
2149 	}
2150 
2151 	ret = __sev_do_cmd_locked(SEV_CMD_SNP_CONFIG, &config, &argp->error);
2152 
2153 	if (shutdown_required)
2154 		__sev_snp_shutdown_locked(&error, false);
2155 
2156 	return ret;
2157 }
2158 
2159 static int sev_ioctl_do_snp_vlek_load(struct sev_issue_cmd *argp, bool writable)
2160 {
2161 	struct sev_device *sev = psp_master->sev_data;
2162 	struct sev_user_data_snp_vlek_load input;
2163 	bool shutdown_required = false;
2164 	int ret, error;
2165 	void *blob;
2166 
2167 	if (!argp->data)
2168 		return -EINVAL;
2169 
2170 	if (!writable)
2171 		return -EPERM;
2172 
2173 	if (copy_from_user(&input, u64_to_user_ptr(argp->data), sizeof(input)))
2174 		return -EFAULT;
2175 
2176 	if (input.len != sizeof(input) || input.vlek_wrapped_version != 0)
2177 		return -EINVAL;
2178 
2179 	blob = psp_copy_user_blob(input.vlek_wrapped_address,
2180 				  sizeof(struct sev_user_data_snp_wrapped_vlek_hashstick));
2181 	if (IS_ERR(blob))
2182 		return PTR_ERR(blob);
2183 
2184 	input.vlek_wrapped_address = __psp_pa(blob);
2185 
2186 	if (!sev->snp_initialized) {
2187 		ret = snp_move_to_init_state(argp, &shutdown_required);
2188 		if (ret)
2189 			goto cleanup;
2190 	}
2191 
2192 	ret = __sev_do_cmd_locked(SEV_CMD_SNP_VLEK_LOAD, &input, &argp->error);
2193 
2194 	if (shutdown_required)
2195 		__sev_snp_shutdown_locked(&error, false);
2196 
2197 cleanup:
2198 	kfree(blob);
2199 
2200 	return ret;
2201 }
2202 
2203 static long sev_ioctl(struct file *file, unsigned int ioctl, unsigned long arg)
2204 {
2205 	void __user *argp = (void __user *)arg;
2206 	struct sev_issue_cmd input;
2207 	int ret = -EFAULT;
2208 	bool writable = file->f_mode & FMODE_WRITE;
2209 
2210 	if (!psp_master || !psp_master->sev_data)
2211 		return -ENODEV;
2212 
2213 	if (ioctl != SEV_ISSUE_CMD)
2214 		return -EINVAL;
2215 
2216 	if (copy_from_user(&input, argp, sizeof(struct sev_issue_cmd)))
2217 		return -EFAULT;
2218 
2219 	if (input.cmd > SEV_MAX)
2220 		return -EINVAL;
2221 
2222 	mutex_lock(&sev_cmd_mutex);
2223 
2224 	switch (input.cmd) {
2225 
2226 	case SEV_FACTORY_RESET:
2227 		ret = sev_ioctl_do_reset(&input, writable);
2228 		break;
2229 	case SEV_PLATFORM_STATUS:
2230 		ret = sev_ioctl_do_platform_status(&input);
2231 		break;
2232 	case SEV_PEK_GEN:
2233 		ret = sev_ioctl_do_pek_pdh_gen(SEV_CMD_PEK_GEN, &input, writable);
2234 		break;
2235 	case SEV_PDH_GEN:
2236 		ret = sev_ioctl_do_pek_pdh_gen(SEV_CMD_PDH_GEN, &input, writable);
2237 		break;
2238 	case SEV_PEK_CSR:
2239 		ret = sev_ioctl_do_pek_csr(&input, writable);
2240 		break;
2241 	case SEV_PEK_CERT_IMPORT:
2242 		ret = sev_ioctl_do_pek_import(&input, writable);
2243 		break;
2244 	case SEV_PDH_CERT_EXPORT:
2245 		ret = sev_ioctl_do_pdh_export(&input, writable);
2246 		break;
2247 	case SEV_GET_ID:
2248 		pr_warn_once("SEV_GET_ID command is deprecated, use SEV_GET_ID2\n");
2249 		ret = sev_ioctl_do_get_id(&input);
2250 		break;
2251 	case SEV_GET_ID2:
2252 		ret = sev_ioctl_do_get_id2(&input);
2253 		break;
2254 	case SNP_PLATFORM_STATUS:
2255 		ret = sev_ioctl_do_snp_platform_status(&input);
2256 		break;
2257 	case SNP_COMMIT:
2258 		ret = sev_ioctl_do_snp_commit(&input);
2259 		break;
2260 	case SNP_SET_CONFIG:
2261 		ret = sev_ioctl_do_snp_set_config(&input, writable);
2262 		break;
2263 	case SNP_VLEK_LOAD:
2264 		ret = sev_ioctl_do_snp_vlek_load(&input, writable);
2265 		break;
2266 	default:
2267 		ret = -EINVAL;
2268 		goto out;
2269 	}
2270 
2271 	if (copy_to_user(argp, &input, sizeof(struct sev_issue_cmd)))
2272 		ret = -EFAULT;
2273 out:
2274 	mutex_unlock(&sev_cmd_mutex);
2275 
2276 	return ret;
2277 }
2278 
2279 static const struct file_operations sev_fops = {
2280 	.owner	= THIS_MODULE,
2281 	.unlocked_ioctl = sev_ioctl,
2282 };
2283 
2284 int sev_platform_status(struct sev_user_data_status *data, int *error)
2285 {
2286 	return sev_do_cmd(SEV_CMD_PLATFORM_STATUS, data, error);
2287 }
2288 EXPORT_SYMBOL_GPL(sev_platform_status);
2289 
2290 int sev_guest_deactivate(struct sev_data_deactivate *data, int *error)
2291 {
2292 	return sev_do_cmd(SEV_CMD_DEACTIVATE, data, error);
2293 }
2294 EXPORT_SYMBOL_GPL(sev_guest_deactivate);
2295 
2296 int sev_guest_activate(struct sev_data_activate *data, int *error)
2297 {
2298 	return sev_do_cmd(SEV_CMD_ACTIVATE, data, error);
2299 }
2300 EXPORT_SYMBOL_GPL(sev_guest_activate);
2301 
2302 int sev_guest_decommission(struct sev_data_decommission *data, int *error)
2303 {
2304 	return sev_do_cmd(SEV_CMD_DECOMMISSION, data, error);
2305 }
2306 EXPORT_SYMBOL_GPL(sev_guest_decommission);
2307 
2308 int sev_guest_df_flush(int *error)
2309 {
2310 	return sev_do_cmd(SEV_CMD_DF_FLUSH, NULL, error);
2311 }
2312 EXPORT_SYMBOL_GPL(sev_guest_df_flush);
2313 
2314 static void sev_exit(struct kref *ref)
2315 {
2316 	misc_deregister(&misc_dev->misc);
2317 	kfree(misc_dev);
2318 	misc_dev = NULL;
2319 }
2320 
2321 static int sev_misc_init(struct sev_device *sev)
2322 {
2323 	struct device *dev = sev->dev;
2324 	int ret;
2325 
2326 	/*
2327 	 * SEV feature support can be detected on multiple devices but the SEV
2328 	 * FW commands must be issued on the master. During probe, we do not
2329 	 * know the master hence we create /dev/sev on the first device probe.
2330 	 * sev_do_cmd() finds the right master device to which to issue the
2331 	 * command to the firmware.
2332 	 */
2333 	if (!misc_dev) {
2334 		struct miscdevice *misc;
2335 
2336 		misc_dev = kzalloc(sizeof(*misc_dev), GFP_KERNEL);
2337 		if (!misc_dev)
2338 			return -ENOMEM;
2339 
2340 		misc = &misc_dev->misc;
2341 		misc->minor = MISC_DYNAMIC_MINOR;
2342 		misc->name = DEVICE_NAME;
2343 		misc->fops = &sev_fops;
2344 
2345 		ret = misc_register(misc);
2346 		if (ret)
2347 			return ret;
2348 
2349 		kref_init(&misc_dev->refcount);
2350 	} else {
2351 		kref_get(&misc_dev->refcount);
2352 	}
2353 
2354 	init_waitqueue_head(&sev->int_queue);
2355 	sev->misc = misc_dev;
2356 	dev_dbg(dev, "registered SEV device\n");
2357 
2358 	return 0;
2359 }
2360 
2361 int sev_dev_init(struct psp_device *psp)
2362 {
2363 	struct device *dev = psp->dev;
2364 	struct sev_device *sev;
2365 	int ret = -ENOMEM;
2366 
2367 	if (!boot_cpu_has(X86_FEATURE_SEV)) {
2368 		dev_info_once(dev, "SEV: memory encryption not enabled by BIOS\n");
2369 		return 0;
2370 	}
2371 
2372 	sev = devm_kzalloc(dev, sizeof(*sev), GFP_KERNEL);
2373 	if (!sev)
2374 		goto e_err;
2375 
2376 	sev->cmd_buf = (void *)devm_get_free_pages(dev, GFP_KERNEL, 1);
2377 	if (!sev->cmd_buf)
2378 		goto e_sev;
2379 
2380 	sev->cmd_buf_backup = (uint8_t *)sev->cmd_buf + PAGE_SIZE;
2381 
2382 	psp->sev_data = sev;
2383 
2384 	sev->dev = dev;
2385 	sev->psp = psp;
2386 
2387 	sev->io_regs = psp->io_regs;
2388 
2389 	sev->vdata = (struct sev_vdata *)psp->vdata->sev;
2390 	if (!sev->vdata) {
2391 		ret = -ENODEV;
2392 		dev_err(dev, "sev: missing driver data\n");
2393 		goto e_buf;
2394 	}
2395 
2396 	psp_set_sev_irq_handler(psp, sev_irq_handler, sev);
2397 
2398 	ret = sev_misc_init(sev);
2399 	if (ret)
2400 		goto e_irq;
2401 
2402 	dev_notice(dev, "sev enabled\n");
2403 
2404 	return 0;
2405 
2406 e_irq:
2407 	psp_clear_sev_irq_handler(psp);
2408 e_buf:
2409 	devm_free_pages(dev, (unsigned long)sev->cmd_buf);
2410 e_sev:
2411 	devm_kfree(dev, sev);
2412 e_err:
2413 	psp->sev_data = NULL;
2414 
2415 	dev_notice(dev, "sev initialization failed\n");
2416 
2417 	return ret;
2418 }
2419 
2420 static void __sev_firmware_shutdown(struct sev_device *sev, bool panic)
2421 {
2422 	int error;
2423 
2424 	__sev_platform_shutdown_locked(NULL);
2425 
2426 	if (sev_es_tmr) {
2427 		/*
2428 		 * The TMR area was encrypted, flush it from the cache.
2429 		 *
2430 		 * If invoked during panic handling, local interrupts are
2431 		 * disabled and all CPUs are stopped, so wbinvd_on_all_cpus()
2432 		 * can't be used. In that case, wbinvd() is done on remote CPUs
2433 		 * via the NMI callback, and done for this CPU later during
2434 		 * SNP shutdown, so wbinvd_on_all_cpus() can be skipped.
2435 		 */
2436 		if (!panic)
2437 			wbinvd_on_all_cpus();
2438 
2439 		__snp_free_firmware_pages(virt_to_page(sev_es_tmr),
2440 					  get_order(sev_es_tmr_size),
2441 					  true);
2442 		sev_es_tmr = NULL;
2443 	}
2444 
2445 	if (sev_init_ex_buffer) {
2446 		__snp_free_firmware_pages(virt_to_page(sev_init_ex_buffer),
2447 					  get_order(NV_LENGTH),
2448 					  true);
2449 		sev_init_ex_buffer = NULL;
2450 	}
2451 
2452 	if (snp_range_list) {
2453 		kfree(snp_range_list);
2454 		snp_range_list = NULL;
2455 	}
2456 
2457 	__sev_snp_shutdown_locked(&error, panic);
2458 }
2459 
2460 static void sev_firmware_shutdown(struct sev_device *sev)
2461 {
2462 	mutex_lock(&sev_cmd_mutex);
2463 	__sev_firmware_shutdown(sev, false);
2464 	mutex_unlock(&sev_cmd_mutex);
2465 }
2466 
2467 void sev_platform_shutdown(void)
2468 {
2469 	if (!psp_master || !psp_master->sev_data)
2470 		return;
2471 
2472 	sev_firmware_shutdown(psp_master->sev_data);
2473 }
2474 EXPORT_SYMBOL_GPL(sev_platform_shutdown);
2475 
2476 void sev_dev_destroy(struct psp_device *psp)
2477 {
2478 	struct sev_device *sev = psp->sev_data;
2479 
2480 	if (!sev)
2481 		return;
2482 
2483 	sev_firmware_shutdown(sev);
2484 
2485 	if (sev->misc)
2486 		kref_put(&misc_dev->refcount, sev_exit);
2487 
2488 	psp_clear_sev_irq_handler(psp);
2489 }
2490 
2491 static int snp_shutdown_on_panic(struct notifier_block *nb,
2492 				 unsigned long reason, void *arg)
2493 {
2494 	struct sev_device *sev = psp_master->sev_data;
2495 
2496 	/*
2497 	 * If sev_cmd_mutex is already acquired, then it's likely
2498 	 * another PSP command is in flight and issuing a shutdown
2499 	 * would fail in unexpected ways. Rather than create even
2500 	 * more confusion during a panic, just bail out here.
2501 	 */
2502 	if (mutex_is_locked(&sev_cmd_mutex))
2503 		return NOTIFY_DONE;
2504 
2505 	__sev_firmware_shutdown(sev, true);
2506 
2507 	return NOTIFY_DONE;
2508 }
2509 
2510 int sev_issue_cmd_external_user(struct file *filep, unsigned int cmd,
2511 				void *data, int *error)
2512 {
2513 	if (!filep || filep->f_op != &sev_fops)
2514 		return -EBADF;
2515 
2516 	return sev_do_cmd(cmd, data, error);
2517 }
2518 EXPORT_SYMBOL_GPL(sev_issue_cmd_external_user);
2519 
2520 void sev_pci_init(void)
2521 {
2522 	struct sev_device *sev = psp_master->sev_data;
2523 	u8 api_major, api_minor, build;
2524 
2525 	if (!sev)
2526 		return;
2527 
2528 	psp_timeout = psp_probe_timeout;
2529 
2530 	if (sev_get_api_version())
2531 		goto err;
2532 
2533 	api_major = sev->api_major;
2534 	api_minor = sev->api_minor;
2535 	build     = sev->build;
2536 
2537 	if (sev_update_firmware(sev->dev) == 0)
2538 		sev_get_api_version();
2539 
2540 	if (api_major != sev->api_major || api_minor != sev->api_minor ||
2541 	    build != sev->build)
2542 		dev_info(sev->dev, "SEV firmware updated from %d.%d.%d to %d.%d.%d\n",
2543 			 api_major, api_minor, build,
2544 			 sev->api_major, sev->api_minor, sev->build);
2545 
2546 	return;
2547 
2548 err:
2549 	sev_dev_destroy(psp_master);
2550 
2551 	psp_master->sev_data = NULL;
2552 }
2553 
2554 void sev_pci_exit(void)
2555 {
2556 	struct sev_device *sev = psp_master->sev_data;
2557 
2558 	if (!sev)
2559 		return;
2560 
2561 	sev_firmware_shutdown(sev);
2562 }
2563