diff options
Diffstat (limited to 'arch/s390/kernel/setup.c')
-rw-r--r-- | arch/s390/kernel/setup.c | 45 |
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 | */ | ||
748 | static 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 | |||
744 | static void __init reserve_mem_detect_info(void) | 754 | static 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 | */ | ||
1051 | static 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 | ||