From patchwork Mon Apr 29 14:52:07 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominik Dingel X-Patchwork-Id: 240387 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id AFC9E2C00C1 for ; Tue, 30 Apr 2013 00:55:22 +1000 (EST) Received: from localhost ([::1]:49158 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWpU6-000349-Kz for incoming@patchwork.ozlabs.org; Mon, 29 Apr 2013 10:55:18 -0400 Received: from eggs.gnu.org ([208.118.235.92]:48757) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWpRM-0007j1-0c for qemu-devel@nongnu.org; Mon, 29 Apr 2013 10:52:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UWpRE-0002ZU-Pq for qemu-devel@nongnu.org; Mon, 29 Apr 2013 10:52:27 -0400 Received: from e06smtp17.uk.ibm.com ([195.75.94.113]:54777) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UWpRE-0002YX-EN for qemu-devel@nongnu.org; Mon, 29 Apr 2013 10:52:20 -0400 Received: from /spool/local by e06smtp17.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 29 Apr 2013 15:49:28 +0100 Received: from d06dlp03.portsmouth.uk.ibm.com (9.149.20.15) by e06smtp17.uk.ibm.com (192.168.101.147) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 29 Apr 2013 15:49:26 +0100 Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by d06dlp03.portsmouth.uk.ibm.com (Postfix) with ESMTP id 44A531B08019 for ; Mon, 29 Apr 2013 15:52:16 +0100 (BST) Received: from d06av08.portsmouth.uk.ibm.com (d06av08.portsmouth.uk.ibm.com [9.149.37.249]) by b06cxnps4074.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r3TEq65A52625534 for ; Mon, 29 Apr 2013 14:52:06 GMT Received: from d06av08.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av08.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r3TEqEW1029732 for ; Mon, 29 Apr 2013 08:52:15 -0600 Received: from tuxmaker.boeblingen.de.ibm.com (tuxmaker.boeblingen.de.ibm.com [9.152.85.9]) by d06av08.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id r3TEqE1J029696; Mon, 29 Apr 2013 08:52:14 -0600 Received: by tuxmaker.boeblingen.de.ibm.com (Postfix, from userid 2944) id 2AEDF122442E; Mon, 29 Apr 2013 16:52:14 +0200 (CEST) From: Dominik Dingel To: qemu-devel@nongnu.org Date: Mon, 29 Apr 2013 16:52:07 +0200 Message-Id: <1367247128-22409-5-git-send-email-dingel@linux.vnet.ibm.com> X-Mailer: git-send-email 1.8.1.6 In-Reply-To: <1367247128-22409-1-git-send-email-dingel@linux.vnet.ibm.com> References: <1367247128-22409-1-git-send-email-dingel@linux.vnet.ibm.com> X-TM-AS-MML: No X-Content-Scanned: Fidelis XPS MAILER x-cbid: 13042914-0542-0000-0000-0000051B52BB X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-Received-From: 195.75.94.113 Cc: Christian Borntraeger , Alexander Graf , Dominik Dingel Subject: [Qemu-devel] [PATCH v2 4/5] S390: BIOS boot from given device X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Use the passed device, if there is no device, use the first applicable device. Signed-off-by: Dominik Dingel diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index fd40fa5..206979f 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -12,6 +12,7 @@ struct subchannel_id blk_schid; char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); +uint64_t boot_value; void virtio_panic(const char *string) { @@ -20,15 +21,20 @@ void virtio_panic(const char *string) while (1) { } } -static void virtio_setup(void) +static void virtio_setup(uint64_t dev_info) { struct schib schib; int i; int r; bool found = false; - + uint16_t dev_no; blk_schid.one = 1; + if (dev_info != -1) { + dev_no = dev_info & 0xffff; + debug_print_int("device no. ", dev_no); + } + for (i = 0; i < 0x10000; i++) { blk_schid.sch_no = i; r = stsch_err(blk_schid, &schib); @@ -36,9 +42,14 @@ static void virtio_setup(void) break; } if (schib.pmcw.dnv) { - if (virtio_is_blk(blk_schid)) { - found = true; - break; + if (dev_info != -1 && schib.pmcw.dev != dev_no) { + continue; + } + else { + if (virtio_is_blk(blk_schid)) { + found = true; + break; + } } } } @@ -53,7 +64,9 @@ static void virtio_setup(void) int main(void) { sclp_setup(); - virtio_setup(); + debug_print_int("boot reg[7]\n", boot_value); + virtio_setup(boot_value); + if (zipl_load() < 0) sclp_print("Failed to load OS from hard disk\n"); disabled_wait(); diff --git a/pc-bios/s390-ccw/start.S b/pc-bios/s390-ccw/start.S index 09deee7..5d5df0d 100644 --- a/pc-bios/s390-ccw/start.S +++ b/pc-bios/s390-ccw/start.S @@ -14,6 +14,8 @@ _start: larl %r15, stack + 0x8000 /* Set up stack */ +larl %r6, boot_value +stg %r7, 0(%r6) /* save the boot_value before any function calls */ j main /* And call C */ /*