Date: Wed, 21 May 1997 12:16:33 +0200 From: Stefan Esser <se@FreeBSD.ORG> To: Bruce Evans <bde@zeta.org.au> Cc: garycorc@idt.net, HARDWARE@FreeBSD.ORG Subject: Re: isa bus and boca multiport boards Message-ID: <19970521121633.51265@x14.mi.uni-koeln.de> In-Reply-To: <199705210810.SAA12862@godzilla.zeta.org.au>; from Bruce Evans on Wed, May 21, 1997 at 06:10:16PM %2B1000 References: <199705210810.SAA12862@godzilla.zeta.org.au>
next in thread | previous in thread | raw e-mail | index | archive | help
On May 21, Bruce Evans <bde@zeta.org.au> wrote: > >> On a P5/133, about 300 pointer dereferences can be > >> done in the time it takes to do one i/o instruction. > > > >I know this discussion was concerning I/O ports on the ISA bus, > >but I'm curious if you know: How long does a single I/O (read or > >write) take when accessing an I/O port on the PCI bus? > > PCI accesses port accesses seem to average about 3 times faster on my > system: > > Times in usec for inb() from selected ports on an ASUS P55TP4XE with > a P5/133: > > min av max speed important for FreeBSD? > ----- ----- ----- ---------------------------- > 0x3d4 (crtc data) 0.393 0.393 0.395 no > 0x3d5 (crtc data) 0.393 0.393 0.395 no > 0xe428 (de0 status) 0.332 0.333 0.334 yes (if = data access speed) > addr+0x14 (ncr0 status) 0.363 0.363 0.394 yes (if = data access speed) > > I think the minimum access time is 30 nsec for PCI. There are no signs > of that here. Accesses can be wider than for ISA, but cheap serial > boards based on 8-bit UARTs are unlikely to implement anything other > than 8-bit accesses. No, PCI uses a bus cycle time of 30ns (33MHz) maximum, but the shortest access latency to a single data item is 4 bus clocks (120ns). Your fastest register accesses seem to require 11 and 13 PCI bus cycles, though. The NCR chip uses a 12 cycle micro-program that controls all its operations, which explains the delay you found. 1) The CPU has to apply all the signals for the port access, and the host to PCI bridge has to decode them before it can start a PCI cycle. 2) The PCI bus may have been "parked" at some other bus master. In order to give the output drivers of the current master time to go into a high impedance state, one cycle of delay is added. 3) The adresses are driven on the address/data bus and the byte selects are applied. The PCI chips now have a few cycles to claim the transaction. Each device announces its maximum decode delay in a configuration space register, and it is typical to specify "middle" speed, which means one wait state is added while addresses are on the bus. (This is controlled by a chip-set register, which is set after the PCI BIOS has identified the waits required by the slowest device on the bus.) 4) While PCI uses positive decoding of address ranges throughout, there is one exception for a legacy bus allowed. This means, that after no PCI device decoded the address on the bus, the PCI to ISA bridge will claim it and will generate an ISA port access. 5) If the ISA compatibility devices are part of the PCI chip set, this chip set should claim the transaction. (I.e. there should never be a ISA transaction generated for accesses to these ports.) 6) After the PCI chip (or the PCI to ISA bridge) has applied the DEVSEL signal, the bus has to be turned around. This means changing the bus owner chip, if the host to PCI bridge and the ISA devices chip are on seperate silicon and will add the one cycle delay to turn off the drivers of the chip set. 7) After the device has claimed the transaction, it must send data after a maximum of 8 PCI bus cycles, or it must signal a retry to the chip set and release the bus (similar to a SCSI diconnect, but the initiator is responsible for retrying the transfer at a later time). 8) After the device sent its data, it will give up the bus. There will be another cycle of delay, before the host to PCI bridge will be able to put an address on the bus again ... 9) The CPU will receive the data with some delay, since it flows through a FIFO in the host to PCI bridge. 10) There appears to be a "built-in" delay in the x86 CPUs, which adds a few wait states independently of any delays caused by the devices. There also are wait states added for each I/O by the chip set (I've forgot the name of that register, but it was some thing like "I/O recovery"), typically 2 to 4 cycles, IIRC. Regards, STefan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19970521121633.51265>