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