xref: /linux/arch/x86/virt/svm/cmdline.c (revision 60675d4ca1ef0857e44eba5849b74a3a998d0c0f)
14ae47fa7SPavan Kumar Paluri // SPDX-License-Identifier: GPL-2.0-only
24ae47fa7SPavan Kumar Paluri /*
34ae47fa7SPavan Kumar Paluri  * AMD SVM-SEV command line parsing support
44ae47fa7SPavan Kumar Paluri  *
54ae47fa7SPavan Kumar Paluri  * Copyright (C) 2023 - 2024 Advanced Micro Devices, Inc.
64ae47fa7SPavan Kumar Paluri  *
74ae47fa7SPavan Kumar Paluri  * Author: Michael Roth <michael.roth@amd.com>
84ae47fa7SPavan Kumar Paluri  */
94ae47fa7SPavan Kumar Paluri 
104ae47fa7SPavan Kumar Paluri #include <linux/string.h>
114ae47fa7SPavan Kumar Paluri #include <linux/printk.h>
124ae47fa7SPavan Kumar Paluri #include <linux/cache.h>
13*2db67aacSPavan Kumar Paluri #include <linux/cpufeature.h>
144ae47fa7SPavan Kumar Paluri 
154ae47fa7SPavan Kumar Paluri #include <asm/sev-common.h>
164ae47fa7SPavan Kumar Paluri 
174ae47fa7SPavan Kumar Paluri struct sev_config sev_cfg __read_mostly;
184ae47fa7SPavan Kumar Paluri 
194ae47fa7SPavan Kumar Paluri static int __init init_sev_config(char *str)
204ae47fa7SPavan Kumar Paluri {
214ae47fa7SPavan Kumar Paluri 	char *s;
224ae47fa7SPavan Kumar Paluri 
234ae47fa7SPavan Kumar Paluri 	while ((s = strsep(&str, ","))) {
244ae47fa7SPavan Kumar Paluri 		if (!strcmp(s, "debug")) {
254ae47fa7SPavan Kumar Paluri 			sev_cfg.debug = true;
264ae47fa7SPavan Kumar Paluri 			continue;
274ae47fa7SPavan Kumar Paluri 		}
284ae47fa7SPavan Kumar Paluri 
29*2db67aacSPavan Kumar Paluri 		if (!strcmp(s, "nosnp")) {
30*2db67aacSPavan Kumar Paluri 			if (!cpu_feature_enabled(X86_FEATURE_HYPERVISOR)) {
31*2db67aacSPavan Kumar Paluri 				setup_clear_cpu_cap(X86_FEATURE_SEV_SNP);
32*2db67aacSPavan Kumar Paluri 				cc_platform_clear(CC_ATTR_HOST_SEV_SNP);
33*2db67aacSPavan Kumar Paluri 				continue;
34*2db67aacSPavan Kumar Paluri 			} else {
35*2db67aacSPavan Kumar Paluri 				goto warn;
36*2db67aacSPavan Kumar Paluri 			}
37*2db67aacSPavan Kumar Paluri 		}
38*2db67aacSPavan Kumar Paluri 
39*2db67aacSPavan Kumar Paluri warn:
404ae47fa7SPavan Kumar Paluri 		pr_info("SEV command-line option '%s' was not recognized\n", s);
414ae47fa7SPavan Kumar Paluri 	}
424ae47fa7SPavan Kumar Paluri 
434ae47fa7SPavan Kumar Paluri 	return 1;
444ae47fa7SPavan Kumar Paluri }
454ae47fa7SPavan Kumar Paluri __setup("sev=", init_sev_config);
46