Subject: Re: pciide performance on alpha
To: None <>
From: Ross Harvey <>
List: port-alpha
Date: 08/12/1999 12:07:49
> From: Jason Thorpe <>
> On Thu, 12 Aug 1999 20:46:53 +0200 
>  Manuel Bouyer <> wrote:
>  > The problem here is that he is getting the same bad performances with a
>  > Promise Ultra/33, where the same board with the same driver in a PC flies ...
>  > Maybe there's a problem at a upper level (mainbus/pci bridge) ?
>  > A lot of parameter seems uninitialised as well in the standart PCI header
>  > (latency being one).
> I think I remember someone else mentioning that the PCI Latency Timer wasn't
> initialized properly by the firmware on some PC164 models...

I have wondered recently if the 100BaseT problems at might be due
to either a generic PCI config space botch by SRM or due to a tulip- specific
config botch. (I suspect it would be Bad if eitehr CSR0:<PBL>, Programmable
Burst Length or <CAL>, Cache Alignment were botched by the FW.)

It might be something similar here. Linux tends to rewrite everything, we
tend to rewrite nothing in the FW's domain.  This guarantees that some
things will work better on one of the systems than the other.
hat my Linux based driver does not. After I trixed it to setup my IO addresses and enable the channels by hand, it actually works as expected! ajo@ymer /home/ajo #time dd if=/dev/rwd1c of=/dev/null bs=64k count=2048 2048+0 records in 2048+0 records out 134217728 bytes transferred in 12 secs (11184810 bytes/sec) 0.004u 0.408s 0:12.13 3.2% 0+0k 6+1io 7pf+0w Time to try the real disk... This is what I had to add: ----------------------------------------------------------------------------- bus_addr_t addr, forceaddr = 0x8000; int i; /* XXX Force IO addresses as BIOS doesn't set them up for me */ for (i = 0x10; i <= 0x20; i += 4) { addr = pci_conf_read (sc->sc_pc, sc->sc_tag, i); printf ("%s: Changing IO from 0x%lx to 0x%lx\n", sc->sc_wdcdev.sc_dev.dv_xname, addr & ~7, /* addr & 0xfff8 */ forceaddr); pci_conf_write (sc->sc_pc, sc->sc_tag, i, /* addr & 0xfff8 */ forceaddr | PCI_MAPREG_TYPE_IO); forceaddr += 16; } /* Enable channels (not enabled on alpha???) */ st |= PDC246_STATE_EN(0); st |= PDC246_STATE_EN(1); ----------------------------------------------------------------------------- How do we solve the problem that the IO addresses of this card aren't setup to any resonable values? Mostly, they seem to be located over 0x10000 (not valid), and I've even seen overlapping addresses. Oh, and thanks for your patience. /Andreas