Date: Sun, 10 Feb 2008 01:50:39 +0100 From: "Oliver B. Warzecha" <obw@amarok.ping.de> To: Bruce Evans <brde@optusnet.com.au> Cc: FreeBSD-gnats-submit@freebsd.org, freebsd-i386@freebsd.org Subject: Re: i386/119574: 7.0-RC1 times out in calibrate_clocks() Message-ID: <20080210005039.GA996@karnevil9.amarok.ping.de> In-Reply-To: <20080209162051.N28112@besplex.bde.org> References: <200801112032.m0BKWFXg001186@karnevil9.amarok.ping.de> <20080113225917.Y50887@delplex.bde.org> <20080206155514.GD1361@karnevil9.amarok.ping.de> <20080208222001.K25038@besplex.bde.org> <20080209013526.GA1216@karnevil9.amarok.ping.de> <20080209162051.N28112@besplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Feb 09, 2008 at 05:13:45PM +1100, Bruce Evans wrote: > I happen to have an old BX system online. It is my only system handy > that has an unreadable port 0x70: So maybe someone had realised afterwards that it was a good idea[TM] to make that port readable. > There would only be timing preoblems like that if the hardware is really > primitive or has weird latching semantics. I see no problems with the > index and data register accesses separated by many seconds due to my > typing in the accesses in ddb. So do I. (see below) > I checked your other reference, where the need to rewrite the index > register but not much else is clearly stated. Was that for the 430HX? It is clearly mentioned that this design is based on the 430HX, but this is not detailed further. But it seems this is no longer a point of concern... > It's just "call inb(port) and call outb(port, data)", where inb() and > outb() are ordinary functions whose sole purpose is to let ddb call > them (the kernel uses inline or different versions of these in normal > operations). ddb can call any function (but most not safely, and these I knew only the macro incarnations. No man page either, I was already looking for such functions. :-/ Anyway, I checked, and inb(0x71) consistently returns the current second. While I was at it I also tried 'call rtcin(0)' and it also returns the correct result. So the routine works, taken for itself. The question is, why doesn't it work in the loop? I took some time and singlestepped calibrate_clocks(), needless to say, it all works perfectly that way. As it has to be some kind of timing issue, I went to some effort, maxed out the ISA I/O recovery cycles in the BIOS settings and finally turned the CPU caches off. But although the system was _definitely_ slower with each change, no result. Still timeout. Any idea? I guess I am back to inserting random inb(0x84) for now. Perhaps I missed one combination the last time. :-P OBW
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080210005039.GA996>