From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:41029) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UVi1W-0001Wx-Bw for qemu-devel@nongnu.org; Fri, 26 Apr 2013 08:45:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UVi1S-0004o0-DZ for qemu-devel@nongnu.org; Fri, 26 Apr 2013 08:45:10 -0400 Received: from e06smtp12.uk.ibm.com ([195.75.94.108]:55039) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UVhXs-0002ru-0N for qemu-devel@nongnu.org; Fri, 26 Apr 2013 08:14:32 -0400 Received: from /spool/local by e06smtp12.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 26 Apr 2013 13:11:03 +0100 Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by d06dlp03.portsmouth.uk.ibm.com (Postfix) with ESMTP id 9371B1B08074 for ; Fri, 26 Apr 2013 13:14:29 +0100 (BST) Received: from d06av04.portsmouth.uk.ibm.com (d06av04.portsmouth.uk.ibm.com [9.149.37.216]) by b06cxnps3075.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r3QCCwrr36765760 for ; Fri, 26 Apr 2013 12:12:58 GMT Received: from d06av04.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av04.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r3QCD7pq005019 for ; Fri, 26 Apr 2013 06:13:08 -0600 From: Dominik Dingel Date: Fri, 26 Apr 2013 14:12:57 +0200 Message-Id: <1366978377-16823-11-git-send-email-dingel@linux.vnet.ibm.com> In-Reply-To: <1366978377-16823-1-git-send-email-dingel@linux.vnet.ibm.com> References: <1366978377-16823-1-git-send-email-dingel@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH 10/10] S390: Enabling device and program selection List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Christian Borntraeger , Alexander Graf , Dominik Dingel Pass the eboot device info and the loadparm in register 7 and 8. Use this values in the BIOS to directly boot the respective operating system. Signed-off-by: Dominik Dingel diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index 36daa67..960ba71 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -77,6 +77,10 @@ static void s390_ipl_from_disk(VirtIOBlkCcw *dev, uint64_t pswaddr) env->psw.addr = pswaddr; env->psw.mask = IPL_PSW_MASK; env->regs[7] = ccw_dev->sch->devno; + env->regs[7] = (env->regs[7] << 16) | (ccw_dev->sch->schid); + env->regs[7] = (env->regs[7] << 8) | (ccw_dev->sch->cssid); + env->regs[7] = (env->regs[7] << 8) | (ccw_dev->sch->ssid); + env->regs[8] = ccw_dev->loadparm; s390_add_running_cpu(cpu); } diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img index b549a86e55194bbf54e25f839e52b490ac308260..fe8d2c6b9f5d937ea156084f7eb248b17e1fa89c 100644 GIT binary patch literal 17528 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 literal 9432 zcmeHNZ){W76+h25c_sf406zuF>AsFk{@-d@ovnXb=mw5D|A?sx9< zb4~Z9Q@{F3*XQ1I&pG$p-#z!-_iTS}TVHP=pi#91Xc^jyp%=r23g7f-XG&3%Zl(q@ zsgV|<&$0`=aYGTk==FR`)NFbjpDH=lYw-9&5#9BAKJ|M1S%`b>s$R(JcjTFllXeXS zE9#B=ROzwK|EWizbna5}Q@!iYvR%En@EQtMj`=7)Wxd_#>x%pNKf<41v@TgkppHNt zfjRC9f3Lmbp$>?0;Tue!xVK~`G9=LzJ!&uJU5_REwoJn1z&LetRMN+C7Q@;Y{Wu6td$OA7aaazo_+eU({!4oGtHxWnF&5`W+Gc zZF9OXVQ4x)ofz9`{ecYY𝔷mqjJlo9Ghc#6=h~A-do5+}a5o7^_>Yo1_GP%F4;V zvB$wl=2J8+DdWeo(|hXW_L5t@o7VBT8}x>uIO!7X95?#lFdZ zCh~caFg_?u3wjE&kAZg)c)sSQD9U&SEiWRh)$j)^o`2t-#OGzU7T9Ckkofk+;3U~q zM1y-7(fPN4wm$!+(z)me1HLJpTNPHmPL6i7oV?%|GZE^rE>M@!y8tYq0=%M5do zAgUscwlg=N)#-s zvhAjT@2e;T+6ZbUg%Lq*Mr}hiQX)xHf;wwQP0Z3|ZK4*;8g7W0ag(e~at<^MdgTw2Qw zH9=dnBw5Sh^;hJTlrh5|w7~;0A*fx=9@6L8`hu%g1gA4h4W?n@%RMv9HmeqArQ^ki zxhEmYG}R+G57-kn^1yFl%Py~&TCaF&UdZg& z5-*$98abCV%UhG8y!qMj@fh=Z?7DQ0l~Ynv2Z!M#vF%2q!siBNo98(W1z<)7$5z6NuwGM#rcbUBaWum*U}y zj`69Exy5Ks#ce*NOG`=)`=~)XOyMN>)^23bxX}XdnxGBub{HaH-2g5q{#iHo8u*j8Q+WFyX`R}D6I8ihs(YVji{+J+FP$kL=G|u>a6T`x?;&=o<~~3bS=m&g^Zz2cZ9~1hE1neG?;4tqLDR_#_fzgRTvz$Dlms;+UWi_b{L1>h z=lRtioqioL*+yTkMi~3`Q>%j{qGT~gp=S%@Yo;UAg}IeIW$8&?#V0Rg58tz03g06-P7KTxN9b{^18j zdhlpwU{D+wJu;H+Xe4@gXR?ndGjgLMxsjrGtIplQ&vQhvnB??^e9Laet*`SAqk zX3#%^-YeymW1uZ5Vo|p0}qCvY1+Jl=h1Ud)WgI$B2z&ByD4Hbz|JJ!;? zxS(;zE3iZD+|-Ns@XE5@lM8;>(A#2rD_6`ed~W5IUZe<9l;@P(lll|k#}_`4hGgFi; zsJw=ExC8z;Q1%nj27mVd z0t@Ly{Y9oI4^-rVjanM>*zRR+=*4g|Q?W^_cX+pvD)SG&JOyT%Uh*-jK28yd@HbN%}%mK!{l zquBnjF^Y|h<_2R2M~=kyAIS`-*Jjcb%Z{e|bNv(>9NKpv+ka?q-%vXHX^&z9qlfrO zsoIFKPqAIed&j;g2CUzN>OW?vD_$>xqY9pjR0;d{Sfx+ZOAL%9sQfI%MO~+O-l`N) zp@q25@u+WC_4t1<{^hT((ecXvOz?F?zM>bcP@mM!k9W(e|4JYC>7*wZsZj5E!dC|M z{bklVRDb;yeeZuKMBe{UFrH(LeZQy@KzY))PTyCh)fd3rkv9FyU??zSqxG&(* zja;-0z@nNMmSj$D**Qfsi-qmcN diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index 53a460d..9cd3edf 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -173,7 +173,7 @@ fail: return -1; } -int zipl_load(void) +int zipl_load(uint64_t load_parm) { struct mbr *mbr = (void*)sec; uint8_t *ns, *ns_end; @@ -223,7 +223,7 @@ int zipl_load(void) /* Run the default entry */ - prog_table_entry = (struct scsi_blockptr *)(sec + pte_len); + prog_table_entry = (struct scsi_blockptr *)(sec + (pte_len *(1+load_parm))); return zipl_run(prog_table_entry); diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index fd40fa5..0c1c11c 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -20,7 +20,7 @@ void virtio_panic(const char *string) while (1) { } } -static void virtio_setup(void) +static void virtio_setup(uint16_t dev_no) { struct schib schib; int i; @@ -35,7 +35,7 @@ static void virtio_setup(void) if (r == 3) { break; } - if (schib.pmcw.dnv) { + if (schib.pmcw.dnv && (schib.pmcw.dev == dev_no)) { if (virtio_is_blk(blk_schid)) { found = true; break; @@ -52,10 +52,24 @@ static void virtio_setup(void) int main(void) { + uint64_t boot_value; + uint64_t load_parm; + register uint64_t reg7 asm("7"); + register uint64_t reg8 asm("8"); + + asm volatile( + " stg %2, %0\n" + " stg %3, %1\n" + : "=m" (boot_value), "=m" (load_parm) + : "d" (reg7), "d" (reg8) + : "cc"); + sclp_setup(); - virtio_setup(); - if (zipl_load() < 0) + virtio_setup(boot_value >> 32); + + if (zipl_load(load_parm) < 0) { sclp_print("Failed to load OS from hard disk\n"); + } disabled_wait(); while (1) { } } diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index 8241b0a..2851995 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -63,7 +63,7 @@ void virtio_setup_block(struct subchannel_id schid); int virtio_read(ulong sector, void *load_addr); /* bootmap.c */ -int zipl_load(void); +int zipl_load(uint64_t load_parm); static inline void *memset(void *s, int c, size_t n) { -- 1.7.9.5