diff options
-rw-r--r-- | arch/s390/kernel/ipl.c | 14 | ||||
-rw-r--r-- | include/asm-s390/ipl.h | 4 |
2 files changed, 12 insertions, 6 deletions
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c index 14bdde9def40..db28cca81fef 100644 --- a/arch/s390/kernel/ipl.c +++ b/arch/s390/kernel/ipl.c | |||
@@ -595,7 +595,9 @@ static int reipl_set_type(enum ipl_type type) | |||
595 | 595 | ||
596 | switch(type) { | 596 | switch(type) { |
597 | case IPL_TYPE_CCW: | 597 | case IPL_TYPE_CCW: |
598 | if (MACHINE_IS_VM) | 598 | if (diag308_set_works) |
599 | reipl_method = REIPL_METHOD_CCW_DIAG; | ||
600 | else if (MACHINE_IS_VM) | ||
599 | reipl_method = REIPL_METHOD_CCW_VM; | 601 | reipl_method = REIPL_METHOD_CCW_VM; |
600 | else | 602 | else |
601 | reipl_method = REIPL_METHOD_CCW_CIO; | 603 | reipl_method = REIPL_METHOD_CCW_CIO; |
@@ -659,8 +661,6 @@ void reipl_run(struct shutdown_trigger *trigger) | |||
659 | switch (reipl_method) { | 661 | switch (reipl_method) { |
660 | case REIPL_METHOD_CCW_CIO: | 662 | case REIPL_METHOD_CCW_CIO: |
661 | devid.devno = reipl_block_ccw->ipl_info.ccw.devno; | 663 | devid.devno = reipl_block_ccw->ipl_info.ccw.devno; |
662 | if (ipl_info.type == IPL_TYPE_CCW && devid.devno == ipl_devno) | ||
663 | diag308(DIAG308_IPL, NULL); | ||
664 | devid.ssid = 0; | 664 | devid.ssid = 0; |
665 | reipl_ccw_dev(&devid); | 665 | reipl_ccw_dev(&devid); |
666 | break; | 666 | break; |
@@ -745,6 +745,7 @@ static int __init reipl_ccw_init(void) | |||
745 | reipl_block_ccw->hdr.version = IPL_PARM_BLOCK_VERSION; | 745 | reipl_block_ccw->hdr.version = IPL_PARM_BLOCK_VERSION; |
746 | reipl_block_ccw->hdr.blk0_len = IPL_PARM_BLK0_CCW_LEN; | 746 | reipl_block_ccw->hdr.blk0_len = IPL_PARM_BLK0_CCW_LEN; |
747 | reipl_block_ccw->hdr.pbt = DIAG308_IPL_TYPE_CCW; | 747 | reipl_block_ccw->hdr.pbt = DIAG308_IPL_TYPE_CCW; |
748 | reipl_block_ccw->hdr.flags = DIAG308_FLAGS_LP_VALID; | ||
748 | /* check if read scp info worked and set loadparm */ | 749 | /* check if read scp info worked and set loadparm */ |
749 | if (sclp_ipl_info.is_valid) | 750 | if (sclp_ipl_info.is_valid) |
750 | memcpy(reipl_block_ccw->ipl_info.ccw.load_param, | 751 | memcpy(reipl_block_ccw->ipl_info.ccw.load_param, |
@@ -753,8 +754,7 @@ static int __init reipl_ccw_init(void) | |||
753 | /* read scp info failed: set empty loadparm (EBCDIC blanks) */ | 754 | /* read scp info failed: set empty loadparm (EBCDIC blanks) */ |
754 | memset(reipl_block_ccw->ipl_info.ccw.load_param, 0x40, | 755 | memset(reipl_block_ccw->ipl_info.ccw.load_param, 0x40, |
755 | LOADPARM_LEN); | 756 | LOADPARM_LEN); |
756 | /* FIXME: check for diag308_set_works when enabling diag ccw reipl */ | 757 | if (!MACHINE_IS_VM && !diag308_set_works) |
757 | if (!MACHINE_IS_VM) | ||
758 | sys_reipl_ccw_loadparm_attr.attr.mode = S_IRUGO; | 758 | sys_reipl_ccw_loadparm_attr.attr.mode = S_IRUGO; |
759 | if (ipl_info.type == IPL_TYPE_CCW) | 759 | if (ipl_info.type == IPL_TYPE_CCW) |
760 | reipl_block_ccw->ipl_info.ccw.devno = ipl_devno; | 760 | reipl_block_ccw->ipl_info.ccw.devno = ipl_devno; |
@@ -876,7 +876,9 @@ static int dump_set_type(enum dump_type type) | |||
876 | return -EINVAL; | 876 | return -EINVAL; |
877 | switch (type) { | 877 | switch (type) { |
878 | case DUMP_TYPE_CCW: | 878 | case DUMP_TYPE_CCW: |
879 | if (MACHINE_IS_VM) | 879 | if (diag308_set_works) |
880 | dump_method = DUMP_METHOD_CCW_DIAG; | ||
881 | else if (MACHINE_IS_VM) | ||
880 | dump_method = DUMP_METHOD_CCW_VM; | 882 | dump_method = DUMP_METHOD_CCW_VM; |
881 | else | 883 | else |
882 | dump_method = DUMP_METHOD_CCW_CIO; | 884 | dump_method = DUMP_METHOD_CCW_CIO; |
diff --git a/include/asm-s390/ipl.h b/include/asm-s390/ipl.h index d0dcc9c5f7c3..c1b2e50392bb 100644 --- a/include/asm-s390/ipl.h +++ b/include/asm-s390/ipl.h | |||
@@ -143,6 +143,10 @@ enum diag308_opt { | |||
143 | DIAG308_IPL_OPT_DUMP = 0x20, | 143 | DIAG308_IPL_OPT_DUMP = 0x20, |
144 | }; | 144 | }; |
145 | 145 | ||
146 | enum diag308_flags { | ||
147 | DIAG308_FLAGS_LP_VALID = 0x80, | ||
148 | }; | ||
149 | |||
146 | enum diag308_rc { | 150 | enum diag308_rc { |
147 | DIAG308_RC_OK = 1, | 151 | DIAG308_RC_OK = 1, |
148 | }; | 152 | }; |