From owner-freebsd-sparc64@FreeBSD.ORG Sat Jun 13 11:17:57 2015 Return-Path: Delivered-To: freebsd-sparc64@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 54DC8DC9 for ; Sat, 13 Jun 2015 11:17:57 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from bigwig.baldwin.cx (bigwig.baldwin.cx [IPv6:2001:470:1f11:75::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 12EC1F6A for ; Sat, 13 Jun 2015 11:17:57 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from John-Baldwins-MacBook-Pro-2.local (unknown [137.122.64.66]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 0BAD6B926; Sat, 13 Jun 2015 07:17:55 -0400 (EDT) Message-ID: <557C1162.3000106@FreeBSD.org> Date: Sat, 13 Jun 2015 07:17:54 -0400 From: John Baldwin User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Mark Cave-Ayland , freebsd-sparc64@freebsd.org Subject: Re: PCI range checking under qemu-system-sparc64 References: <53F73E6F.9080805@ilande.co.uk> <2084808.1lxSgnvf69@ralph.baldwin.cx> <557ADCAB.9020409@FreeBSD.org> <557B6116.70900@ilande.co.uk> In-Reply-To: <557B6116.70900@ilande.co.uk> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Sat, 13 Jun 2015 07:17:55 -0400 (EDT) X-BeenThere: freebsd-sparc64@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Porting FreeBSD to the Sparc List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Jun 2015 11:17:57 -0000 On 6/12/15 6:45 PM, Mark Cave-Ayland wrote: > On 12/06/15 14:20, John Baldwin wrote: >> On 9/4/14 11:55 AM, John Baldwin wrote: >>> On Friday, August 22, 2014 01:58:23 PM Mark Cave-Ayland wrote: >>>> Hi all, >>>> >>>> I'm currently working on a set of patches to enable FreeBSD to boot in >>>> -nographic mode under qemu-system-sparc64 and I've just come across the >>>> following error during boot: >>>> >>>> >>>> Booting [/boot/kernel/kernel]... >>>> jumping to kernel entry at 0xc00a0000. >>>> Copyright (c) 1992-2014 The FreeBSD Project. >>>> Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 >>>> The Regents of the University of California. All rights reserved. >>>> FreeBSD is a registered trademark of The FreeBSD Foundation. >>>> FreeBSD 10.0-RELEASE #0 r260789: Fri Jan 17 11:37:19 UTC 2014 >>>> root@snap.freebsd.org:/usr/obj/sparc64.sparc64/usr/src/sys/GENERIC >>>> sparc64 >>>> gcc version 4.2.1 20070831 patched [FreeBSD] >>>> real memory = 134217728 (128 MB) >>>> avail memory = 106053632 (101 MB) >>>> cpu0: Sun Microsystems UltraSparc-IIi Processor (100.00 MHz CPU) >>>> random device not loaded; using insecure entropy >>>> random: initialized >>>> kbd0 at kbdmux0 >>>> nexus0: >>>> nexus0: : incomplete >>>> pcib0: mem 0x1fe00000000-0x1fe01ffffff irq >>>> 2032,2030,2031,2021 on nexus0 >>>> pcib0: Sabre, impl 0, version 0, IGN 0x1f, bus A, 33MHz >>>> panic: psycho_attach: unsupported number of ranges >>>> cpuid = 0 >>>> KDB: stack backtrace: >>>> #0 0xc085db60 at psycho_attach+0x780 >>>> #1 0xc0569dd8 at device_attach+0x518 >>>> #2 0xc056b4e8 at device_probe_and_attach+0x28 >>>> #3 0xc056b510 at bus_generic_attach+0x10 >>>> #4 0xc087704c at nexus_attach+0x58c >>>> #5 0xc0569dd8 at device_attach+0x518 >>>> #6 0xc056b4e8 at device_probe_and_attach+0x28 >>>> #7 0xc056b87c at bus_generic_new_pass+0x11c >>>> #8 0xc056aeb8 at bus_set_pass+0xf8 >>>> #9 0xc056af08 at root_bus_configure+0x8 >>>> #10 0xc086a9a4 at configure+0x4 >>>> #11 0xc04d4e3c at mi_startup+0x1dc >>>> #12 0xc00a0028 at btext+0x28 >>>> Uptime: 1s >>>> >>>> >>>> Having a look at the source it looks like we're being tripped by the >>>> following check in psycho.c: >>>> >>>> >>>> /* >>>> * Make sure that the expected ranges are present. The >>>> * OFW_PCI_CS_MEM64 one is not currently used though. >>>> */ >>>> if (i != PSYCHO_NRANGE) >>>> panic("%s: unsupported number of ranges", __func__); >>>> >>>> >>>> Now it seems that this occurs because OpenBIOS currently only supports >>>> 32-bit PCI memory space (and so doesn't generate the 64-bit PCI memory >>>> space entry withing the corresponding property). >>>> >>>> I could alter OpenBIOS to add a dummy 64-bit PCI memory space entry to >>>> the end of the ranges property, however this particular check does seem >>>> to be rather excessive and it is also slightly disingenuous to have >>>> OpenBIOS include a declaration for a memory space that it cannot use >>>> (plus it seems from the comment above that FreeBSD can't actually use it >>>> anyway?!). >>>> >>>> Does anyone know why this particular assertion was added and what it's >>>> actually trying to guard against? >>> >>> I suspect it was added out of an abundance of caution based on whatever real >>> hardware it has run on. You can try this (untested) change: >> >> FYI, I was able to test my earlier patch and have posted an updated patch for >> review. In my case the system appears to hang before it goes into single user >> mode both in graphics mode and with -nographic. >> >> https://reviews.freebsd.org/D2791 > > Hi John, > > Thanks for the patch. As I could never cross-compile a SPARC64 kernel on > a local FreeBSD VM, I wasn't able to test your patch at the time. > However if it gets merged then I'll try and find some time to start > digging again with a suitable ISO. FYI, the steps I took to build a new ISO in an amd64 host were the following: - download an existing HEAD snap ISO - untar that to a directory named foo/tree - use 'make TARGET=sparc64 buildkernel' to build a test kernel - 'make TARGET=sparc64 installkernel DESTDIR=foo/tree' - 'sh /usr/src/release/sparc64/mkisoimages.sh -b "test" sparc64.iso foo/tree' I was then able to boot sparc64.iso. -- John Baldwin