security/intel/txt: Split off microcode error types string printing

The purpose is to reuse the types string in CBnT error printing.

Change-Id: I435de402fef6d4702c9c7250c8bd31243a04a46e
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/54092
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/security/intel/txt/logging.c b/src/security/intel/txt/logging.c
index 683247d..b4eac33 100644
--- a/src/security/intel/txt/logging.c
+++ b/src/security/intel/txt/logging.c
@@ -3,11 +3,32 @@
 #include <arch/mmio.h>
 #include <console/console.h>
 #include <cpu/x86/smm.h>
+#include <stdint.h>
 #include <types.h>
 
 #include "txt.h"
 #include "txt_register.h"
 
+const char *intel_txt_processor_error_type(uint8_t type)
+{
+	static const char *const names[] = {
+		[0]  = "Legacy Shutdown",
+		[5]  = "Load memory type error in ACM area",
+		[6]  = "Unrecognized ACM format",
+		[7]  = "Failure to authenticate",
+		[8]  = "Invalid ACM format",
+		[9]  = "Unexpected Snoop hit",
+		[10] = "Invalid event",
+		[11] = "Invalid MLE",
+		[12] = "Machine check event",
+		[13] = "VMXAbort",
+		[14] = "AC memory corruption",
+		[15] = "Illegal voltage/bus ratio",
+	};
+
+	return type < ARRAY_SIZE(names) && names[type] ? names[type] : "Unknown";
+}
+
 /**
  * Logs microcode or SINIT ACM errors.
  * Does not log SBIOS ACM errors.
@@ -24,49 +45,8 @@
 		else
 			printk(BIOS_ERR, " Caused by: Processor\n");
 
-		printk(BIOS_ERR, " Type: ");
-
-		switch (txt_error & TXT_ERROR_MASK) {
-		case 0:
-			printk(BIOS_ERR, "Legacy Shutdown\n");
-			break;
-		case 5:
-			printk(BIOS_ERR, "Load memory type error in ACM area\n");
-			break;
-		case 6:
-			printk(BIOS_ERR, "Unrecognized ACM format\n");
-			break;
-		case 7:
-			printk(BIOS_ERR, "Failure to authenticate\n");
-			break;
-		case 8:
-			printk(BIOS_ERR, "Invalid ACM format\n");
-			break;
-		case 9:
-			printk(BIOS_ERR, "Unexpected Snoop hit\n");
-			break;
-		case 10:
-			printk(BIOS_ERR, "Invalid event\n");
-			break;
-		case 11:
-			printk(BIOS_ERR, "Invalid MLE\n");
-			break;
-		case 12:
-			printk(BIOS_ERR, "Machine check event\n");
-			break;
-		case 13:
-			printk(BIOS_ERR, "VMXAbort\n");
-			break;
-		case 14:
-			printk(BIOS_ERR, "AC memory corruption\n");
-			break;
-		case 15:
-			printk(BIOS_ERR, "Illegal voltage/bus ratio\n");
-			break;
-		default:
-			printk(BIOS_ERR, "unknown\n");
-			break;
-		}
+		printk(BIOS_ERR, " Type: %s\n",
+		       intel_txt_processor_error_type(txt_error & TXT_ERROR_MASK));
 	}
 }
 
diff --git a/src/security/intel/txt/txt.h b/src/security/intel/txt/txt.h
index ec752a0..e1a78af 100644
--- a/src/security/intel/txt/txt.h
+++ b/src/security/intel/txt/txt.h
@@ -28,5 +28,6 @@
 bool intel_txt_prepare_txt_env(void);
 /* Allow platform override to skip TXT lockdown, e.g. required for RAS error injection. */
 bool skip_intel_txt_lockdown(void);
+const char *intel_txt_processor_error_type(uint8_t type);
 
 #endif /* SECURITY_INTEL_TXT_H_ */