Subject: Re: needs MI wdc changes to support macppc's wdc
To: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
From: Ignatios Souvatzis <ignatios@theory.cs.uni-bonn.de>
List: tech-kern
Date: 11/03/1998 17:26:40
On Wed, Nov 04, 1998 at 01:04:06AM +0900, Izumi Tsutsui wrote:
> In article <19981025155117.A2656@cosinus.cs.uni-bonn.de>
> ignatios@theory.cs.uni-bonn.de writes:
>
> > Look at the Amiga bus-space stuff for an example. Many Amiga ZBUS boards
> > are addressed at odd/even spacing, some Amiga or DraCo mainbus chips are
> > addressed every 4 bytes.
>
> Tsubai sent me bus.h patch for macppc which contained `stride' bits
> in bus_space_tag like amiga bus.h.
>
> I make two kernels and compare its wdc performance.
> One is using offset array to access wdc registers, and
> another is using modified bus.h and `stride' in bus_space_tag
> to map wdc address space. There are no difference at least
> in single user mode.
>
> In article <199810260022.QAA22350@lestat.nas.nasa.gov>
> thorpej@nas.nasa.gov writes:
>
> > > The mac68k wdc has non-contiguous offsets, too. I think it's also every
> > > 16 bytes. I think that the cleanest solution is to make the bus_space*()
> > > functions handle the register addressing, but I don't know if anyone has
> > > measured any performance penalties that you might incur from doing so
> > > (for the regions that don't need the offset modified).
> >
> > Is that true for every obio device? If not, then it shouldn't be done
> > in the space tag, but a "regmap" think like the dp8390 ethernet driver
> > uses would be more appropriate, used by ALL front-ends.
>
> According to Tsubai, most of macppc obio devices are 16 byte
> aligned, but some PowerBook has following device:
>
> media-bay at obio0 offset 0x34 not configured
>
> so not *all* devices are aligned on macppc obio. And
> I hear mac68k wdc is 4 byte aligned, but some devices are not.
> In mac68k/obio/if_sn_obio.c, sc->sc_reg_map[] array for dp8390
> are set as `((i * 4) + 2)'.
>
> I think it is better to use offset array to access wdc register,
> though it would make some overheads on archs which have only contiguous
> addressed wdc (like i386).
>
> Any suggestions?
You don't necessarily need this. If you provide device-specific bus_space
setup in the attach() functions, you can use a stride varying from device
to device. Look at the Amiga port for an example --- we have 2-byte and
4-byte devices, currenlty, with all sorts of odd alignments.
-is