aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/kernel/setup.c')
-rw-r--r--arch/s390/kernel/setup.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index 12d136e567c4..ffc87520aca9 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -50,6 +50,7 @@
50#include <linux/compat.h> 50#include <linux/compat.h>
51#include <linux/start_kernel.h> 51#include <linux/start_kernel.h>
52 52
53#include <asm/boot_data.h>
53#include <asm/ipl.h> 54#include <asm/ipl.h>
54#include <asm/facility.h> 55#include <asm/facility.h>
55#include <asm/smp.h> 56#include <asm/smp.h>
@@ -741,6 +742,15 @@ static void __init reserve_initrd(void)
741#endif 742#endif
742} 743}
743 744
745/*
746 * Reserve the memory area used to pass the certificate lists
747 */
748static void __init reserve_certificate_list(void)
749{
750 if (ipl_cert_list_addr)
751 memblock_reserve(ipl_cert_list_addr, ipl_cert_list_size);
752}
753
744static void __init reserve_mem_detect_info(void) 754static void __init reserve_mem_detect_info(void)
745{ 755{
746 unsigned long start, size; 756 unsigned long start, size;
@@ -1036,6 +1046,38 @@ static void __init setup_control_program_code(void)
1036} 1046}
1037 1047
1038/* 1048/*
1049 * Print the component list from the IPL report
1050 */
1051static void __init log_component_list(void)
1052{
1053 struct ipl_rb_component_entry *ptr, *end;
1054 char *str;
1055
1056 if (!early_ipl_comp_list_addr)
1057 return;
1058 if (ipl_block.hdr.flags & IPL_PL_FLAG_IPLSR)
1059 pr_info("Linux is running with Secure-IPL enabled\n");
1060 else
1061 pr_info("Linux is running with Secure-IPL disabled\n");
1062 ptr = (void *) early_ipl_comp_list_addr;
1063 end = (void *) ptr + early_ipl_comp_list_size;
1064 pr_info("The IPL report contains the following components:\n");
1065 while (ptr < end) {
1066 if (ptr->flags & IPL_RB_COMPONENT_FLAG_SIGNED) {
1067 if (ptr->flags & IPL_RB_COMPONENT_FLAG_VERIFIED)
1068 str = "signed, verified";
1069 else
1070 str = "signed, verification failed";
1071 } else {
1072 str = "not signed";
1073 }
1074 pr_info("%016llx - %016llx (%s)\n",
1075 ptr->addr, ptr->addr + ptr->len, str);
1076 ptr++;
1077 }
1078}
1079
1080/*
1039 * Setup function called from init/main.c just after the banner 1081 * Setup function called from init/main.c just after the banner
1040 * was printed. 1082 * was printed.
1041 */ 1083 */
@@ -1055,6 +1097,8 @@ void __init setup_arch(char **cmdline_p)
1055 else 1097 else
1056 pr_info("Linux is running as a guest in 64-bit mode\n"); 1098 pr_info("Linux is running as a guest in 64-bit mode\n");
1057 1099
1100 log_component_list();
1101
1058 /* Have one command line that is parsed and saved in /proc/cmdline */ 1102 /* Have one command line that is parsed and saved in /proc/cmdline */
1059 /* boot_command_line has been already set up in early.c */ 1103 /* boot_command_line has been already set up in early.c */
1060 *cmdline_p = boot_command_line; 1104 *cmdline_p = boot_command_line;
@@ -1086,6 +1130,7 @@ void __init setup_arch(char **cmdline_p)
1086 reserve_oldmem(); 1130 reserve_oldmem();
1087 reserve_kernel(); 1131 reserve_kernel();
1088 reserve_initrd(); 1132 reserve_initrd();
1133 reserve_certificate_list();
1089 reserve_mem_detect_info(); 1134 reserve_mem_detect_info();
1090 memblock_allow_resize(); 1135 memblock_allow_resize();
1091 1136